diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Form.form b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Form.form index 7376bbf1d..c85bf0743 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Form.form +++ b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Form.form @@ -402,6 +402,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -537,6 +538,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -904,6 +906,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -1178,6 +1181,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Module.bsl b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Module.bsl index 5095baf93..5f84dd655 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Module.bsl +++ b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Module.bsl @@ -64,6 +64,13 @@ ИнициализацияФормы(); + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Form.form b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Form.form index 6defaf534..2c1e71ebd 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Form.form +++ b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Form.form @@ -27,6 +27,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -439,6 +440,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -574,6 +576,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1205,6 +1208,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Module.bsl b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Module.bsl index 02d730d2b..74cd41298 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Module.bsl +++ b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Module.bsl @@ -58,6 +58,13 @@ ИнициализацияФормы(); + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + КонецПроцедуры &НаКлиенте diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Form.form b/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Form.form index c4ca0aaca..1ec596fd7 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Form.form +++ b/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Form.form @@ -140,6 +140,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -300,6 +301,7 @@ UsualGroup + HorizontalIfPossible Auto true Auto @@ -511,6 +513,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -546,6 +549,7 @@ UsualGroup + HorizontalIfPossible Auto true Auto @@ -968,6 +972,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -996,6 +1001,7 @@ UsualGroup + HorizontalIfPossible Auto true Auto @@ -1023,6 +1029,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1149,6 +1156,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Module.bsl b/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Module.bsl index 861e0a8a8..9b269def5 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Module.bsl +++ b/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Module.bsl @@ -40,6 +40,13 @@ ИнициализацияФормы(); + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + КонецПроцедуры &НаКлиенте diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Form.form b/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Form.form index 72c21eedb..d6c7377dd 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Form.form +++ b/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Form.form @@ -165,6 +165,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -272,6 +273,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/BusinessProcesses/Задание/ManagerModule.bsl b/SSL/src/BusinessProcesses/Задание/ManagerModule.bsl index aa8aa0dde..db3e4cc86 100644 --- a/SSL/src/BusinessProcesses/Задание/ManagerModule.bsl +++ b/SSL/src/BusinessProcesses/Задание/ManagerModule.bsl @@ -96,6 +96,43 @@ // Конец СтандартныеПодсистемы.БизнесПроцессыИЗадачи +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "ПрисоединитьДополнительныеТаблицы + |ЭтотСписок КАК Задание + | + |ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИсполнителиЗадач КАК ИсполнителиЗадач + |ПО + | ИсполнителиЗадач.РольИсполнителя = Задание.Исполнитель + | И ИсполнителиЗадач.ОсновнойОбъектАдресации = Задание.ОсновнойОбъектАдресации + | И ИсполнителиЗадач.ДополнительныйОбъектАдресации = Задание.ДополнительныйОбъектАдресации + | + |ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИсполнителиЗадач КАК ПроверяющиеЗадач + |ПО + | ПроверяющиеЗадач.РольИсполнителя = Задание.Проверяющий + | И ПроверяющиеЗадач.ОсновнойОбъектАдресации = Задание.ОсновнойОбъектАдресацииПроверяющий + | И ПроверяющиеЗадач.ДополнительныйОбъектАдресации = Задание.ДополнительныйОбъектАдресацииПроверяющий + |; + |РазрешитьЧтение + |ГДЕ + | ЗначениеРазрешено(Автор) + | ИЛИ ЗначениеРазрешено(Исполнитель КРОМЕ Справочник.РолиИсполнителей) + | ИЛИ ЗначениеРазрешено(ИсполнителиЗадач.Исполнитель) + | ИЛИ ЗначениеРазрешено(Проверяющий КРОМЕ Справочник.РолиИсполнителей) + | ИЛИ ЗначениеРазрешено(ПроверяющиеЗадач.Исполнитель) + |; + |РазрешитьИзменениеЕслиРазрешеноЧтение + |ГДЕ + | ЗначениеРазрешено(Автор)"; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + #КонецОбласти #КонецОбласти diff --git a/SSL/src/BusinessProcesses/Задание/ObjectModule.bsl b/SSL/src/BusinessProcesses/Задание/ObjectModule.bsl index 89c6174be..c5ccb3ac4 100644 --- a/SSL/src/BusinessProcesses/Задание/ObjectModule.bsl +++ b/SSL/src/BusinessProcesses/Задание/ObjectModule.bsl @@ -42,32 +42,24 @@ БизнесПроцессыИЗадачиСервер.ПроверитьПраваНаИзменениеСостоянияБизнесПроцесса(ЭтотОбъект); - Если ЗначениеЗаполнено(ГлавнаяЗадача) - И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ГлавнаяЗадача, "БизнесПроцесс") = ЭтотОбъект.Ссылка Тогда + Если ЗначениеЗаполнено(ГлавнаяЗадача) + И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ГлавнаяЗадача, "БизнесПроцесс") = Ссылка Тогда ВызватьИсключение НСтр("ru = 'Собственная задача бизнес-процесса не может быть указана как главная задача.'"); КонецЕсли; УстановитьПривилегированныйРежим(Истина); - ГруппаИсполнителейЗадач = ?(ТипЗнч(Исполнитель) = Тип("СправочникСсылка.РолиИсполнителей"), - БизнесПроцессыИЗадачиСервер.ГруппаИсполнителейЗадач(Исполнитель, ОсновнойОбъектАдресации, ДополнительныйОбъектАдресации), + ГруппаИсполнителейЗадач = ?(ТипЗнч(Исполнитель) = Тип("СправочникСсылка.РолиИсполнителей"), + БизнесПроцессыИЗадачиСервер.ГруппаИсполнителейЗадач(Исполнитель, ОсновнойОбъектАдресации, ДополнительныйОбъектАдресации), Исполнитель); - ГруппаИсполнителейЗадачПроверяющий = ?(ТипЗнч(Проверяющий) = Тип("СправочникСсылка.РолиИсполнителей"), - БизнесПроцессыИЗадачиСервер.ГруппаИсполнителейЗадач(Проверяющий, ОсновнойОбъектАдресацииПроверяющий, ДополнительныйОбъектАдресацииПроверяющий), + ГруппаИсполнителейЗадачПроверяющий = ?(ТипЗнч(Проверяющий) = Тип("СправочникСсылка.РолиИсполнителей"), + БизнесПроцессыИЗадачиСервер.ГруппаИсполнителейЗадач(Проверяющий, ОсновнойОбъектАдресацииПроверяющий, ДополнительныйОбъектАдресацииПроверяющий), Проверяющий); УстановитьПривилегированныйРежим(Ложь); -КонецПроцедуры - -Процедура ПриЗаписи(Отказ) - - Если ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - Если НЕ ЭтоНовый() И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "Предмет") <> Предмет Тогда - ИзменитьПредметЗадач(); + ИзменитьПредметЗадач(); КонецЕсли; КонецПроцедуры @@ -389,19 +381,19 @@ Строка.НомерНабора = 1; Строка.Чтение = Истина; Строка.Изменение = Истина; - Строка.ЗначениеДоступа = ЭтотОбъект.Автор; + Строка.ЗначениеДоступа = Автор; // Чтение: набор № 2. Строка = Таблица.Добавить(); Строка.НомерНабора = 2; Строка.Чтение = Истина; - Строка.ЗначениеДоступа = ЭтотОбъект.ГруппаИсполнителейЗадач; + Строка.ЗначениеДоступа = ГруппаИсполнителейЗадач; // Чтение: набор № 3. Строка = Таблица.Добавить(); Строка.НомерНабора = 3; Строка.Чтение = Истина; - Строка.ЗначениеДоступа = ЭтотОбъект.ГруппаИсполнителейЗадачПроверяющий; + Строка.ЗначениеДоступа = ГруппаИсполнителейЗадачПроверяющий; КонецПроцедуры diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Form.form index bb7ca3022..cb9439f3e 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Form.form @@ -159,6 +159,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -527,6 +528,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -555,6 +557,7 @@ UsualGroup + HorizontalIfPossible Auto true Auto @@ -680,6 +683,7 @@ UsualGroup + HorizontalIfPossible Auto true Auto diff --git a/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаЭлемента/Form.form index 164494ad8..d7d475f0c 100644 --- a/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаЭлемента/Form.form @@ -105,6 +105,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаЭлемента/Module.bsl index f6029f91d..110c2d416 100644 --- a/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаЭлемента/Module.bsl @@ -11,8 +11,8 @@ Если Параметры.Свойство("Владелец") И ТипЗнч(Параметры.Владелец) = Тип("ПланВидовХарактеристикСсылка.ВопросыДляАнкетирования") И НЕ Параметры.Владелец.Пустая() Тогда - - Объект.Владелец = Параметры.Владелец; + + Объект.Владелец = Параметры.Владелец; Иначе @@ -29,6 +29,10 @@ Элементы.ТребуетОткрытогоОтвета.Видимость = (Объект.Владелец.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.НесколькоВариантовИз); КонецЕсли; + Если Параметры.Свойство("Наименование") Тогда + Объект.Наименование = Параметры.Наименование; + КонецЕсли; + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Form.form index fba2cd218..27f5eb3dc 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Form.form @@ -172,6 +172,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1727,6 +1728,7 @@ true true true + true MultiRow
true
1 @@ -1779,6 +1781,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1908,7 +1911,7 @@ ГДЕ Варианты.Отчет В(&ДоступныеОтчеты) И ВЫБОР - КОГДА &ВариантыПользователя ЕСТЬ NULL + КОГДА Не &ЕстьОтборПоВариантам ТОГДА НЕ Варианты.ПредопределенныйВариант В (&ОтключенныеВариантыПрограммы) ИНАЧЕ Варианты.Ссылка В (&ВариантыПользователя) КОНЕЦ diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Module.bsl index 7f514a102..262f68813 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Module.bsl @@ -121,7 +121,7 @@ Список.Параметры.УстановитьЗначениеПараметра("ТипРасширение", Перечисления.ТипыОтчетов.Расширение); Список.Параметры.УстановитьЗначениеПараметра("ТипДополнительный", Перечисления.ТипыОтчетов.Дополнительный); Список.Параметры.УстановитьЗначениеПараметра("ДоступныеОтчеты", ВариантыОтчетов.ОтчетыТекущегоПользователя()); - Список.Параметры.УстановитьЗначениеПараметра("ОтключенныеВариантыПрограммы", ВариантыОтчетовПовтИсп.ОтключенныеВариантыПрограммы()); + Список.Параметры.УстановитьЗначениеПараметра("ОтключенныеВариантыПрограммы", Новый Массив(ВариантыОтчетовПовтИсп.ОтключенныеВариантыПрограммы())); ТекущийЭлемент = Элементы.Список; @@ -493,7 +493,8 @@ КонецЕсли; РезультатПоиска = ВариантыОтчетов.НайтиСсылки(ПараметрыПоиска); - ВариантыПользователя = ?(РезультатПоиска = Неопределено, Null, РезультатПоиска.Ссылки); + ВариантыПользователя = ?(РезультатПоиска = Неопределено, Новый Массив, РезультатПоиска.Ссылки); + Список.Параметры.УстановитьЗначениеПараметра("ЕстьОтборПоВариантам", РезультатПоиска <> Неопределено); Список.Параметры.УстановитьЗначениеПараметра("ВариантыПользователя", ВариантыПользователя); КонецПроцедуры diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Form.form index fd205a037..2d58b8118 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Form.form @@ -287,6 +287,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1159,6 +1160,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1876,6 +1878,10 @@ AfterWriteAtServer ПослеЗаписиНаСервере + + OnReadAtServer + ПриЧтенииНаСервере + BeforeWriteAtServer ПередЗаписьюНаСервере diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Module.bsl index 7c99f021c..5af65fdb8 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Module.bsl @@ -115,6 +115,18 @@ СтандартныеПодсистемыКлиент.РазвернутьУзлыДерева(ЭтотОбъект, "ДеревоПодсистем", "*", Истина); КонецПроцедуры +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы diff --git a/SSL/src/Catalogs/ВариантыОтчетов/ManagerModule.bsl b/SSL/src/Catalogs/ВариантыОтчетов/ManagerModule.bsl index d46f355a2..49a07b351 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/ManagerModule.bsl @@ -24,6 +24,28 @@ // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтение + |ГДЕ + | Пользовательский = ЛОЖЬ + | ИЛИ ТолькоДляАвтора = ЛОЖЬ + | ИЛИ ЭтоАвторизованныйПользователь(Автор) + |; + |РазрешитьИзменениеЕслиРазрешеноЧтение + |ГДЕ + | ЭтоАвторизованныйПользователь(Автор)"; + + Ограничение.ТекстДляВнешнихПользователей = Ограничение.Текст; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + #КонецОбласти #КонецОбласти @@ -144,10 +166,9 @@ ШаблонКомментария = НСтр("ru = 'Не удалось установить источник данных варианта отчета %1. |Возможно он поврежден и не подлежит восстановлению. | - |Информация для администратора: %2'"); + |Техническая информация о проблеме: %2'"); Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ШаблонКомментария, Вариант.Ссылка, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ЗаписьЖурналаРегистрации( ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение, @@ -166,7 +187,6 @@ Иначе ШаблонКомментария = НСтр("ru = 'Процедура УстановитьИсточникДанныхВарианта обработала очередной пакет вариантов отчетов: %1'"); Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонКомментария, Обработано); - ЗаписьЖурналаРегистрации( ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация, diff --git a/SSL/src/Catalogs/ВерсииРасширений/ManagerModule.bsl b/SSL/src/Catalogs/ВерсииРасширений/ManagerModule.bsl index f33334857..f48bb3f9e 100644 --- a/SSL/src/Catalogs/ВерсииРасширений/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВерсииРасширений/ManagerModule.bsl @@ -8,7 +8,7 @@ Если ИменаПараметровСеанса = Неопределено Или ИменаПараметровСеанса.Найти("УстановленныеРасширения") <> Неопределено Тогда - ПараметрыСеанса.УстановленныеРасширения = КонтрольныеСуммыРасширений(); + ПараметрыСеанса.УстановленныеРасширения = УстановленныеРасширения(); УстановленныеПараметры.Добавить("УстановленныеРасширения"); КонецЕсли; @@ -35,64 +35,59 @@ КонецПроцедуры -// Расширения подключаются только в разделенном режиме, когда -// вход в область данных выполнен под разделенным пользователем, -// поэтому обновление кэшей допустимо выполнять только в этом случае. -// -Функция УстановленныеРасширенияДоступны() Экспорт - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); - СеансЗапущенБезРазделителей = МодульРаботаВМоделиСервиса.СеансЗапущенБезРазделителей(); - Иначе - СеансЗапущенБезРазделителей = Истина; - КонецЕсли; - - Возврат Не ОбщегоНазначения.РазделениеВключено() - Или Не СеансЗапущенБезРазделителей; - -КонецФункции - -// Возвращает контрольные суммы всех установленных расширений. -// +// Возвращает отдельные контрольные суммы для основных расширений и +// исправлений для установки параметра сеанса УстановленныеРасширения и +// дальнейшей проверки изменений. +// // Вызывается при запуске для установки параметра сеанса УстановленныеРасширения, // который требуется для анализа наличия расширений и контроля динамического обновления, // а также из формы установки расширений конфигурации в режиме 1С:Предприятия. // -// Параметры: -// Расширения - Неопределено - получить контрольные суммы установленных расширений. -// - ДанныеФормыКоллекция - получить контрольные суммы из указанного списка. +// Для сеанса запущенного без разделителей возвращается только состав неразделенных (общих) +// расширений, независимо от установленных разделителей. // // Возвращаемое значение: -// Строка - строки вида "<Имя расширения> (<Версия расширения>) <Контрольная сумма>". +// ФиксированнаяСтруктура - со свойствами: +// * Основные - Строка - контрольная сумма всех расширений, кроме исправительных расширений. +// * Исправления - Строка - контрольная сумма всех исправительных расширений. // -Функция КонтрольныеСуммыРасширений(Расширения = Неопределено) Экспорт +Функция УстановленныеРасширения() Экспорт - Если Расширения = Неопределено Тогда - Расширения = РасширенияКонфигурации.Получить(); + Если ОбщегоНазначения.РазделениеВключено() + И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда + + МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); + Неразделенные = МодульРаботаВМоделиСервиса.СеансЗапущенБезРазделителей(); + Иначе + Неразделенные = Ложь; КонецЕсли; - Список = Новый СписокЗначений; + Расширения = РасширенияКонфигурации.Получить(); - Для Каждого Расширение Из Расширения Цикл - Если ТипЗнч(Расширение) = Тип("РасширениеКонфигурации") Тогда - КонтрольнаяСумма = Base64Строка(Расширение.ХешСумма); - Иначе - КонтрольнаяСумма = Расширение.КонтрольнаяСумма; - КонецЕсли; - Список.Добавить(Расширение.Имя + " (" + Расширение.Версия + ") " + КонтрольнаяСумма); - КонецЦикла; + Основные = Новый Массив; + Исправления = Новый Массив; - Если Список.Количество() <> 0 Тогда - Список.Добавить("#" + Метаданные.Имя + " (" + Метаданные.Версия + ")"); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеКонфигурации") Тогда + МодульОбновлениеКонфигурации = ОбщегоНазначения.ОбщийМодуль("ОбновлениеКонфигурации"); + Для Каждого Расширение Из Расширения Цикл + Если Неразделенные И Расширение.ОбластьДействия = ОбластьДействияРасширенияКонфигурации.РазделениеДанных Тогда + Продолжить; + КонецЕсли; + Если МодульОбновлениеКонфигурации.ЭтоИсправление(Расширение) Тогда + Исправления.Добавить(Расширение); + Иначе + Основные.Добавить(Расширение); + КонецЕсли; + КонецЦикла; + Иначе + Основные = Расширения; КонецЕсли; - КонтрольныеСуммы = ""; - Для Каждого Элемент Из Список Цикл - КонтрольныеСуммы = КонтрольныеСуммы + Символы.ПС + Элемент.Значение; - КонецЦикла; + УстановленныеРасширения = Новый Структура; + УстановленныеРасширения.Вставить("Основные", КонтрольныеСуммыРасширений(Основные)); + УстановленныеРасширения.Вставить("Исправления", КонтрольныеСуммыРасширений(Исправления)); - Возврат СокрЛ(КонтрольныеСуммы); + Возврат Новый ФиксированнаяСтруктура(УстановленныеРасширения); КонецФункции @@ -101,29 +96,17 @@ УстановитьПривилегированныйРежим(Истина); - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); - СеансЗапущенБезРазделителей = МодульРаботаВМоделиСервиса.СеансЗапущенБезРазделителей(); - Иначе - СеансЗапущенБезРазделителей = Истина; - КонецЕсли; + УстановленныеРасширения = УстановленныеРасширения(); - // При входе неразделенного администратора в область получить список неразделенных расширений невозможно. - // Считаем что они не изменились. - Если ОбщегоНазначения.РазделениеВключено() - И СеансЗапущенБезРазделителей - И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда - Возврат Ложь; - КонецЕсли; - - Возврат ПараметрыСеанса.УстановленныеРасширения <> КонтрольныеСуммыРасширений(); + Возврат ПараметрыСеанса.УстановленныеРасширения.Основные <> УстановленныеРасширения.Основные + Или ПараметрыСеанса.УстановленныеРасширения.Исправления <> УстановленныеРасширения.Исправления; КонецФункции // Добавляет сведения, что сеанс начал использование версии метаданных. Процедура ЗарегистрироватьИспользованиеВерсииРасширений() Экспорт - Если Не УстановленныеРасширенияДоступны() Тогда + Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда Возврат; КонецЕсли; @@ -156,6 +139,7 @@ КонецПопытки; Если РезультатыЗапроса[0].Выбрать().Количество() < 2 Тогда + ОбновитьПоследнююВерсиюРасширений(ВерсияРасширений); Возврат; КонецЕсли; @@ -176,8 +160,27 @@ НаборЗаписей.ОбменДанными.Загрузка = Истина; НаборЗаписей.Записать(); + ОбновитьПоследнююВерсиюРасширений(ВерсияРасширений); + КонецПроцедуры +Функция ПоследняяВерсияРасширений() Экспорт + + ИмяПараметра = "СтандартныеПодсистемы.БазоваяФункциональность.ПоследняяВерсияРасширений"; + ХранимыеСвойства = СтандартныеПодсистемыСервер.ПараметрРаботыРасширения(ИмяПараметра, Истина); + + Если ХранимыеСвойства = Неопределено + Или ТипЗнч(ХранимыеСвойства) <> Тип("Структура") + Или Не ХранимыеСвойства.Свойство("ВерсияРасширений") + Или Не ХранимыеСвойства.Свойство("ДатаОбновления") Тогда + + ХранимыеСвойства = Новый Структура("ВерсияРасширений, ДатаОбновления", , '00010101'); + КонецЕсли; + + Возврат ХранимыеСвойства; + +КонецФункции + // Удаляет устаревшие версии метаданных. Процедура УдалитьУстаревшиеВерсииПараметров() Экспорт @@ -244,7 +247,10 @@ // использоваться сеансами, которые были открыты до этого события. ВерсияИспользуемаяВНезарегистрированныхСеансах = Неопределено; ДатаОкончанияСеансовИспользующихРасширенияБезРегистрации = '00010101'; - Если ЗначениеЗаполнено(ПараметрыСеанса.УстановленныеРасширения) Тогда + + Если ЗначениеЗаполнено(ПараметрыСеанса.УстановленныеРасширения.Основные) + Или ЗначениеЗаполнено(ПараметрыСеанса.УстановленныеРасширения.Исправления) Тогда + Если Не РезультатыЗапроса[1].Пустой() Тогда Свойства = РезультатыЗапроса[1].Выгрузить()[0]; ДатаОкончанияСеансовИспользующихРасширенияБезРегистрации @@ -330,7 +336,10 @@ // Удаление всех регистраций использования метаданных. ВсеЗаписи = РегистрыСведений.СеансыВерсийРасширений.СоздатьНаборЗаписей(); ВсеЗаписи.Записать(); - Если ЗначениеЗаполнено(ПараметрыСеанса.УстановленныеРасширения) Тогда + + Если ЗначениеЗаполнено(ПараметрыСеанса.УстановленныеРасширения.Основные) + Или ЗначениеЗаполнено(ПараметрыСеанса.УстановленныеРасширения.Исправления) Тогда + ВключитьЗаданиеУдалениеУстаревшихПараметровРаботыВерсийРасширений(Ложь); КонецЕсли; Если ВерсииУдалялись @@ -365,7 +374,7 @@ КонецПроцедуры -// Вызывается из формы УстановленныеРасширения. +// Вызывается из формы Расширения. Процедура ПриУдаленииВсехРасширений() Экспорт ЗарегистрироватьПервыйВходПослеУдаленияВсехРасширений(); @@ -385,16 +394,48 @@ #Область СлужебныеПроцедурыИФункции +// Возвращает контрольные суммы указанных расширений. +// +// Параметры: +// Расширения - Массив - получить контрольные суммы указанных расширений. +// +// Возвращаемое значение: +// Строка - строки вида "<Имя расширения> (<Версия расширения>) <Контрольная сумма>". +// +Функция КонтрольныеСуммыРасширений(Расширения) + + Список = Новый СписокЗначений; + + Для Каждого Расширение Из Расширения Цикл + КонтрольнаяСумма = Base64Строка(Расширение.ХешСумма); + Список.Добавить(Расширение.Имя + " (" + Расширение.Версия + ") " + КонтрольнаяСумма); + КонецЦикла; + + Если Список.Количество() <> 0 Тогда + Список.Добавить("#" + Метаданные.Имя + " (" + Метаданные.Версия + ")"); + КонецЕсли; + + КонтрольныеСуммы = ""; + Для Каждого Элемент Из Список Цикл + КонтрольныеСуммы = КонтрольныеСуммы + Символы.ПС + Элемент.Значение; + КонецЦикла; + + Возврат СокрЛ(КонтрольныеСуммы); + +КонецФункции + // Возвращает текущую версию расширений. // Для поиска версии используется описание подключенных расширений. // Функция ВерсияРасширений() - Если Не УстановленныеРасширенияДоступны() Тогда + Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда Возврат ПустаяСсылка(); КонецЕсли; - Если Не ЗначениеЗаполнено(ПараметрыСеанса.УстановленныеРасширения) Тогда + Если Не ЗначениеЗаполнено(ПараметрыСеанса.УстановленныеРасширения.Основные) + И Не ЗначениеЗаполнено(ПараметрыСеанса.УстановленныеРасширения.Исправления) Тогда + ЗарегистрироватьПервыйВходПослеУдаленияВсехРасширений(); КонецЕсли; @@ -523,6 +564,32 @@ КонецПроцедуры +// Для процедуры ЗарегистрироватьИспользованиеВерсииРасширений. +Процедура ОбновитьПоследнююВерсиюРасширений(ВерсияРасширений) + + Если КонфигурацияБазыДанныхИзмененаДинамически() Тогда + Возврат; + КонецЕсли; + + ХранимыеСвойства = ПоследняяВерсияРасширений(); + + Если ХранимыеСвойства.ВерсияРасширений = ВерсияРасширений Тогда + Возврат; + КонецЕсли; + + ХранимыеСвойства.ВерсияРасширений = ВерсияРасширений; + ХранимыеСвойства.ДатаОбновления = ТекущаяДатаСеанса(); + + ИмяПараметра = "СтандартныеПодсистемы.БазоваяФункциональность.ПоследняяВерсияРасширений"; + СтандартныеПодсистемыСервер.УстановитьПараметрРаботыРасширения(ИмяПараметра, ХранимыеСвойства, Истина); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); + МодульУправлениеДоступомСлужебный.УстановитьОбновлениеДоступа(Истина); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ВерсииФайлов/ManagerModule.bsl b/SSL/src/Catalogs/ВерсииФайлов/ManagerModule.bsl index f0fab689a..eadfa03cb 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВерсииФайлов/ManagerModule.bsl @@ -22,6 +22,24 @@ // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтение + |ГДЕ + | ЧтениеОбъектаРазрешено(Владелец.ВладелецФайла) + |; + |РазрешитьИзменениеЕслиРазрешеноЧтение + |ГДЕ + | ИзменениеОбъектаРазрешено(Владелец.ВладелецФайла)"; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + #КонецОбласти #КонецОбласти @@ -37,4 +55,4 @@ КонецЕсли; КонецПроцедуры -#КонецОбласти \ No newline at end of file +#КонецОбласти diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Form.form index 824402f44..c9be1d101 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Form.form @@ -80,6 +80,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -160,12 +161,14 @@ Left true + + Clearing + РодительОчистка + true true false - true true - true Normal @@ -374,6 +377,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1044,6 +1048,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Help/ru.html index 99eca9cf8..c20f614ef 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Help/ru.html @@ -33,12 +33,12 @@
  • Настройка Запрещать ввод некорректного адреса используется для полей Адрес, Телефон или Адрес электронной почты. Такая настройка позволяет запретить ввод российских адресов, телефонов или адресов электронной почты, которые заполнены не по установленным правилам.
  • -
    Включите флажок Разрешить ввод нескольких значений, для того чтобы можно было ввести несколько значений. Например, у организации или физического лица может быть несколько адресов электронной почты или номеров телефонов, по которым можно с ними связаться.
  • Особенности настройки поля Адрес 

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

      Международный формат адреса

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

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

      +

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

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

      Особенности настройки поля Телефон и факс

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

    См. также:

    \ 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 9428ed6c7..f5aa52b14 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Module.bsl @@ -1,4 +1,3 @@ - #Область ОбработчикиСобытийФормы &НаСервере @@ -153,6 +152,11 @@ КонецПроцедуры +&НаКлиенте +Процедура РодительОчистка(Элемент, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; +КонецПроцедуры + &НаКлиенте Процедура МеждународныйФорматАдресаПриИзменении(Элемент) diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Help/ru.html b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Help/ru.html index 6e34ff4df..5b27a9ef1 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Help/ru.html +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Help/ru.html @@ -5,7 +5,7 @@

    Поставка программы осуществляется c предопределенными группами и элементами списка. Предопределенные группы списка соответствуют спискам или документам программы - носителям контактной информации. Добавление новых групп в список запрещено. Элементы внутри этих групп определяют состав контактной информации соответствующих объектов программы.

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

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

    -

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

    +

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

    Добавление нового поля контактной информации в список или документ

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

    Предопределенные виды контактной информации

    diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/ManagerModule.bsl b/SSL/src/Catalogs/ВидыКонтактнойИнформации/ManagerModule.bsl index 278b41e24..a528ad0cd 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/ManagerModule.bsl @@ -112,4 +112,5 @@ #КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/ObjectModule.bsl b/SSL/src/Catalogs/ВидыКонтактнойИнформации/ObjectModule.bsl index 8fed6aacb..f24c3f089 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/ObjectModule.bsl +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/ObjectModule.bsl @@ -3,11 +3,11 @@ #Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ) - Если ЭтотОбъект.ОбменДанными.Загрузка Тогда + Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; - Если НЕ ЭтотОбъект.ЭтоГруппа Тогда + Если НЕ ЭтоГруппа Тогда Результат = УправлениеКонтактнойИнформациейСлужебный.ПроверитьПараметрыВидаКонтактнойИнформации(ЭтотОбъект); Если Результат.ЕстьОшибки Тогда Отказ = Истина; @@ -17,6 +17,18 @@ КонецПроцедуры +Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) + + Если ЭтоГруппа Тогда + + НепроверяемыеРеквизиты = Новый Массив; + НепроверяемыеРеквизиты.Добавить("Родитель"); + ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, НепроверяемыеРеквизиты); + + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/ВидыКонтактнойИнформации.mdo b/SSL/src/Catalogs/ВидыКонтактнойИнформации/ВидыКонтактнойИнформации.mdo index 59c2dcc03..12b6d5372 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/ВидыКонтактнойИнформации.mdo +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/ВидыКонтактнойИнформации.mdo @@ -80,6 +80,7 @@ Catalog.ВидыКонтактнойИнформации.EmptyRef + ShowError Use @@ -190,7 +191,9 @@ - + + МногострочноеШирокое + Use Use @@ -374,7 +377,7 @@ РеквизитДопУпорядочивания ru - Реквизит доп упорядочивания + Порядок Number diff --git a/SSL/src/Catalogs/ВидыПроверок/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ВидыПроверок/Forms/ФормаЭлемента/Form.form index b7a28c399..71c531334 100644 --- a/SSL/src/Catalogs/ВидыПроверок/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ВидыПроверок/Forms/ФормаЭлемента/Form.form @@ -106,6 +106,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ОбновлениеКомпонентСПортала1СИТС/Form.form b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ОбновлениеКомпонентСПортала1СИТС/Form.form new file mode 100644 index 000000000..8dee5e316 --- /dev/null +++ b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ОбновлениеКомпонентСПортала1СИТС/Form.form @@ -0,0 +1,752 @@ + + + + Страницы + 1 + + Начальная + 3 + + Шапка + 11 + + Предупреждение32 + 13 + + <key>ru</key> + <value>Предупреждение32</value> + + true + true + + true + + + Предупреждение32РасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + Предупреждение32КонтекстноеМеню + 14 + true + + true + true + false + + + CommonPicture.Предупреждение32 + + + + + ДекорацияПояснение + 16 + + <key>ru</key> + <value>%1 + + +Проверить обновление компоненты?</value> + + true + true + + true + + + ДекорацияПояснениеРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + ДекорацияПояснениеКонтекстноеМеню + 17 + true + + Label + 75 + true + + Style.NormalTextFont + 100 + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Шапка</value> + + + ШапкаРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + NormalSeparation + true + true + Auto + Auto + + + + ПодключитьИнтернетПоддержку + 22 + true + true + + true + + + ПодключитьИнтернетПоддержкуРасширеннаяПодсказка + 23 + + <key>ru</key> + <value>Для использования веб-сервиса 1С и загрузки внешних компонент необходимо выполнить подключение к Интернет-поддержке пользователей.</value> + + Label + true + true + + Left + + + Hyperlink + Form.Command.ПодключитьИнтернетПоддержку + Normal + Auto + true + true + UserCmds + Button + Auto + + true + true + + true + + + <key>ru</key> + <value>Начальная</value> + + + НачальнаяРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + ДлительнаяОперация + 32 + + ДлительнаяОперация48 + 34 + + <key>ru</key> + <value>Длительная операция48</value> + + true + true + + true + + + ДлительнаяОперация48РасширеннаяПодсказка + 36 + Label + true + true + + Left + + + + ДлительнаяОперация48КонтекстноеМеню + 35 + true + + true + true + + + CommonPicture.ДлительнаяОперация48 + + + + + ДлительнаяОперацияНадпись + 37 + + <key>ru</key> + <value>Выполняется получение компоненты с Портала 1С:ИТС</value> + + true + true + + true + + + ДлительнаяОперацияНадписьРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + + ДлительнаяОперацияНадписьКонтекстноеМеню + 38 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Длительная операция</value> + + + ДлительнаяОперацияРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + Page + + AlwaysHorizontal + Center + auto + false + + + + Ошибка + 42 + + Ошибка32 + 47 + + <key>ru</key> + <value>Ошибка32</value> + + true + true + + true + + + Ошибка32РасширеннаяПодсказка + 49 + Label + true + true + + Left + + + + Ошибка32КонтекстноеМеню + 48 + true + + true + true + + + CommonPicture.Ошибка32 + + + + + КраткоеПредставлениеОшибки + 44 + true + true + + true + + + КраткоеПредставлениеОшибки + + None + + КраткоеПредставлениеОшибкиРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + + КраткоеПредставлениеОшибкиКонтекстноеМеню + 45 + true + + LabelField + Enter + true + Left + true + + true + 2 + true + + + true + true + + true + + + <key>ru</key> + <value>Ошибка</value> + + + ОшибкаРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + Page + + AlwaysHorizontal + auto + false + + + + Выполнено + 50 + + Успешно32 + 52 + + <key>ru</key> + <value>Успешно32</value> + + true + true + + true + + + Успешно32РасширеннаяПодсказка + 54 + Label + true + true + + Left + + + + Успешно32КонтекстноеМеню + 53 + true + + true + true + + + CommonPicture.Успешно32 + + + + + РезультатВыполнения + 58 + true + true + + true + + + РезультатВыполнения + + None + + РезультатВыполненияРасширеннаяПодсказка + 60 + Label + true + true + + Left + + + + РезультатВыполненияКонтекстноеМеню + 59 + true + + LabelField + Enter + true + Left + true + + true + 2 + true + + + true + true + + true + + + <key>ru</key> + <value>Выполнено</value> + + + ВыполненоРасширеннаяПодсказка + 51 + 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 + + Загрузить + 28 + true + true + + true + + true + + ЗагрузитьРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + Form.Command.Загрузить + Auto + true + true + true + UserCmds + Auto + + + Отмена + 30 + true + true + + true + + + ОтменаРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + + + Закрыть + 61 + true + true + + true + + + ЗакрытьРасширеннаяПодсказка + 62 + Label + true + true + + Left + + + Form.StandardCommand.Close + Normal + Auto + true + true + UserCmds + Auto + + Right + true + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + Help + LockOwner + true + true + true + Vertical + true + true + auto + true + + ДоступнаЗагрузкаСПортала + + <key>ru</key> + <value>Доступна загрузка с портала 1С:ИТС</value> + + 2 + + Boolean + + + true + + + true + + + + ДанныеАутентификацииПорталаСохранены + + <key>ru</key> + <value>Данные аутентификации портала сохранены</value> + + 3 + + Boolean + + + true + + + true + + + + КраткоеПредставлениеОшибки + + <key>ru</key> + <value>Краткое представление ошибки</value> + + 4 + + String + + + + true + + + true + + + + РезультатВыполнения + + <key>ru</key> + <value>Результат выполнения</value> + + 5 + + String + + + + true + + + true + + + + МассивСсылок + + <key>ru</key> + <value>Массив ссылок</value> + + 1 + + ValueList + + + 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/Catalogs/ВнешниеКомпоненты/Forms/ОбновлениеКомпонентСПортала1СИТС/Module.bsl b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ОбновлениеКомпонентСПортала1СИТС/Module.bsl new file mode 100644 index 000000000..12cb636b7 --- /dev/null +++ b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ОбновлениеКомпонентСПортала1СИТС/Module.bsl @@ -0,0 +1,175 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + Если ТипЗнч(Параметры.МассивСсылок) <> Тип("Массив") + Или Параметры.МассивСсылок.Количество() = 0 Тогда + + ВызватьИсключение НСтр("ru = 'Должна быть хоть одна ссылка указана.'"); + КонецЕсли; + + ДанныеАутентификацииПорталаСохранены = ДанныеАутентификацииПорталаСохранены(); + ДоступнаЗагрузкаСПортала = ВнешниеКомпонентыСлужебный.ДоступнаЗагрузкаСПортала(); + + ТекстПояснения = ""; + ПредложитьОбновление = Ложь; + Для Каждого Ссылка Из Параметры.МассивСсылок Цикл + Реквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, "Идентификатор, Версия, ОбновлятьСПортала1СИТС"); + ТекстПояснения = ТекстПояснения + + ВнешниеКомпонентыСлужебный.ПредставлениеКомпоненты(Реквизиты.Идентификатор, Реквизиты. Версия) + + ?(Реквизиты.ОбновлятьСПортала1СИТС, "", НСтр("ru = ' - обновление отключено.'")) + + Символы.ПС; + + ПредложитьОбновление = ПредложитьОбновление Или Реквизиты.ОбновлятьСПортала1СИТС; + Если Реквизиты.ОбновлятьСПортала1СИТС Тогда + МассивСсылок.Добавить(Ссылка); + КонецЕсли; + КонецЦикла; + + Если ПредложитьОбновление Тогда + + Элементы.ДекорацияПояснение.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 + |Проверить обновление компоненты?'"), + ТекстПояснения); + + Элементы.ПодключитьИнтернетПоддержку.Видимость = Не ДанныеАутентификацииПорталаСохранены; + Элементы.Закрыть.Видимость = Ложь; + + Иначе + Элементы.ДекорацияПояснение.Заголовок = ТекстПояснения; + Элементы.ПодключитьИнтернетПоддержку.Видимость = Ложь; + Элементы.Загрузить.Видимость = Ложь; + Элементы.Отмена.Видимость = Ложь; + Элементы.Закрыть.Видимость = Истина; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если Не ДоступнаЗагрузкаСПортала Тогда + Отказ = Истина; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ПодключитьИнтернетПоддержку(Команда = Неопределено) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей") Тогда + МодульИнтернетПоддержкаПользователейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ИнтернетПоддержкаПользователейКлиент"); + Оповещение = Новый ОписаниеОповещения("ПослеПодключенияИнтернетПоддержки", ЭтотОбъект); + МодульИнтернетПоддержкаПользователейКлиент.ПодключитьИнтернетПоддержкуПользователей(Оповещение, ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Загрузить(Команда) + + Если Не ДанныеАутентификацииПорталаСохранены Тогда + ПодключитьИнтернетПоддержку(); + Возврат; + КонецЕсли; + + Элементы.Загрузить.Доступность = Ложь; + Элементы.Страницы.ТекущаяСтраница = Элементы.ДлительнаяОперация; + + ДлительнаяОперация = НачатьОбновлениеКомпонентСПортала(); + + Если ДлительнаяОперация = Неопределено Тогда + КраткоеПредставлениеОшибки = НСтр("ru = 'Не удалось создать фоновое задание обновления компоненты.'"); + Элементы.Страницы.ТекущаяСтраница = Элементы.Ошибка; + КонецЕсли; + + ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); + ПараметрыОжидания.ФормаВладелец = ЭтотОбъект; + ПараметрыОжидания.ВыводитьОкноОжидания = Ложь; + + Оповещение = Новый ОписаниеОповещения("ПослеОбновленияКомпонентСПортала", ЭтотОбъект); + ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, Оповещение, ПараметрыОжидания); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура ПослеПодключенияИнтернетПоддержки(Результат, Параметр) Экспорт + + Если ТипЗнч(Результат) = Тип("Структура") Тогда + Элементы.ПодключитьИнтернетПоддержку.Видимость = Ложь; + ДанныеАутентификацииПорталаСохранены = Истина; + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ДанныеАутентификацииПорталаСохранены() + + Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей") Тогда + МодульИнтернетПоддержкаПользователей = ОбщегоНазначения.ОбщийМодуль("ИнтернетПоддержкаПользователей"); + Возврат МодульИнтернетПоддержкаПользователей.ЗаполненыДанныеАутентификацииПользователяИнтернетПоддержки(); + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +&НаСервере +Функция НачатьОбновлениеКомпонентСПортала() + + Если Не ВнешниеКомпонентыСлужебный.ДоступнаЗагрузкаСПортала() Тогда + Возврат Неопределено; + КонецЕсли; + + ПараметрыПроцедуры = Новый Структура; + ПараметрыПроцедуры.Вставить("МассивСсылок", МассивСсылок.ВыгрузитьЗначения()); + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Обновление внешней компоненты.'"); + + Возврат ДлительныеОперации.ВыполнитьВФоне("ВнешниеКомпонентыСлужебный.ОбновитьКомпонентыСПортала", + ПараметрыПроцедуры, ПараметрыВыполнения); + +КонецФункции + +&НаКлиенте +Процедура ПослеОбновленияКомпонентСПортала(Результат, ДополнительныеПараметры) Экспорт + + // Ответ: + // - Структура - Выполнено - результат в структуре. + // - Неопределено - Отменено пользователем. + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + Если Результат.Статус = "Ошибка" Тогда + КраткоеПредставлениеОшибки = Результат.КраткоеПредставлениеОшибки; + Элементы.Страницы.ТекущаяСтраница = Элементы.Ошибка; + КонецЕсли; + + Если Результат.Статус = "Выполнено" Тогда + РезультатВыполнения = ПолучитьИзВременногоХранилища(Результат.АдресРезультата); + Элементы.Страницы.ТекущаяСтраница = Элементы.Выполнено; + Элементы.Загрузить.Видимость = Ложь; + Элементы.Отмена.Видимость = Ложь; + Элементы.Закрыть.Видимость = Истина; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ПоискКомпонентыНаПортале1СИТС/Form.form b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ПоискКомпонентыНаПортале1СИТС/Form.form new file mode 100644 index 000000000..e768b1fd7 --- /dev/null +++ b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ПоискКомпонентыНаПортале1СИТС/Form.form @@ -0,0 +1,605 @@ + + + + Страницы + 1 + + Начальная + 3 + + Шапка + 11 + + Предупреждение32 + 13 + + <key>ru</key> + <value>Предупреждение32</value> + + true + true + + true + + + Предупреждение32РасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + Предупреждение32КонтекстноеМеню + 14 + true + + true + true + false + + + CommonPicture.Предупреждение32 + + + + + ДекорацияПояснение + 16 + + <key>ru</key> + <value>%1 + + +Компонента не загружена в программу. +Загрузить?</value> + + true + true + + true + + + ДекорацияПояснениеРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + ДекорацияПояснениеКонтекстноеМеню + 17 + true + + Label + 75 + true + + Style.NormalTextFont + 100 + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Шапка</value> + + + ШапкаРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + NormalSeparation + true + true + Auto + Auto + + + + ПодключитьИнтернетПоддержку + 22 + true + true + + true + + + ПодключитьИнтернетПоддержкуРасширеннаяПодсказка + 23 + + <key>ru</key> + <value>Для использования веб-сервиса 1С и загрузки внешних компонент необходимо выполнить подключение к Интернет-поддержке пользователей.</value> + + Label + true + true + + Left + + + Hyperlink + Form.Command.ПодключитьИнтернетПоддержку + Normal + Auto + true + true + UserCmds + Button + Auto + + true + true + + true + + + <key>ru</key> + <value>Начальная</value> + + + НачальнаяРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + ДлительнаяОперация + 32 + + ДлительнаяОперация48 + 34 + + <key>ru</key> + <value>Длительная операция48</value> + + true + true + + true + + + ДлительнаяОперация48РасширеннаяПодсказка + 36 + Label + true + true + + Left + + + + ДлительнаяОперация48КонтекстноеМеню + 35 + true + + true + true + + + CommonPicture.ДлительнаяОперация48 + + + + + ДлительнаяОперацияНадпись + 37 + + <key>ru</key> + <value>Выполняется получение компоненты с Портала 1С:ИТС</value> + + true + true + + true + + + ДлительнаяОперацияНадписьРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + + ДлительнаяОперацияНадписьКонтекстноеМеню + 38 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Длительная операция</value> + + + ДлительнаяОперацияРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + Page + + AlwaysHorizontal + Center + auto + false + + + + Ошибка + 42 + + Ошибка32 + 47 + + <key>ru</key> + <value>Ошибка32</value> + + true + true + + true + + + Ошибка32РасширеннаяПодсказка + 49 + Label + true + true + + Left + + + + Ошибка32КонтекстноеМеню + 48 + true + + true + true + + + CommonPicture.Ошибка32 + + + + + КраткоеПредставлениеОшибки + 44 + true + true + + true + + + КраткоеПредставлениеОшибки + + None + + КраткоеПредставлениеОшибкиРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + + КраткоеПредставлениеОшибкиКонтекстноеМеню + 45 + true + + LabelField + Enter + true + Left + true + + true + 2 + true + + + true + true + + true + + + <key>ru</key> + <value>Ошибка</value> + + + ОшибкаРасширеннаяПодсказка + 43 + 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 + + Загрузить + 28 + true + true + + true + + true + + ЗагрузитьРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + Form.Command.Загрузить + Auto + true + true + true + UserCmds + Auto + + + Отмена + 30 + true + true + + true + + + ОтменаРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + + Right + true + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + Help + LockOwner + true + true + true + Vertical + true + true + auto + true + + ДоступнаЗагрузкаСПортала + + <key>ru</key> + <value>Доступна загрузка с портала 1С:ИТС</value> + + 2 + + Boolean + + + true + + + true + + + + ДанныеАутентификацииПорталаСохранены + + <key>ru</key> + <value>Данные аутентификации портала сохранены</value> + + 3 + + Boolean + + + true + + + true + + + + КраткоеПредставлениеОшибки + + <key>ru</key> + <value>Краткое представление ошибки</value> + + 4 + + String + + + + true + + + true + + + + ПодключитьИнтернетПоддержку + + <key>ru</key> + <value>Подключить интернет поддержку</value> + + 1 + + ru + Подключить интернет поддержку + + + true + + + + ПодключитьИнтернетПоддержку + + + Auto + Auto + + + Загрузить + + <key>ru</key> + <value>Загрузить</value> + + 2 + + ru + Загрузить + + + true + + + + Загрузить + + + Auto + Auto + + + ТекстПояснения + + String + + + + + Идентификатор + + String + + + true + + + Версия + + String + + + true + + + + + + diff --git a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ПоискКомпонентыНаПортале1СИТС/Module.bsl b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ПоискКомпонентыНаПортале1СИТС/Module.bsl new file mode 100644 index 000000000..2c7acc6bb --- /dev/null +++ b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ПоискКомпонентыНаПортале1СИТС/Module.bsl @@ -0,0 +1,144 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + Если Не ПустаяСтрока(Параметры.ТекстПояснения) Тогда + Элементы.ДекорацияПояснение.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 + | + |Компонента не загружена в программу. + |Загрузить?'"), + Параметры.ТекстПояснения); + КонецЕсли; + + ДанныеАутентификацииПорталаСохранены = ДанныеАутентификацииПорталаСохранены(); + ДоступнаЗагрузкаСПортала = ВнешниеКомпонентыСлужебный.ДоступнаЗагрузкаСПортала(); + + Элементы.ПодключитьИнтернетПоддержку.Видимость = Не ДанныеАутентификацииПорталаСохранены; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если Не ДоступнаЗагрузкаСПортала Тогда + Отказ = Истина; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ПодключитьИнтернетПоддержку(Команда = Неопределено) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей") Тогда + МодульИнтернетПоддержкаПользователейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ИнтернетПоддержкаПользователейКлиент"); + Оповещение = Новый ОписаниеОповещения("ПослеПодключенияИнтернетПоддержки", ЭтотОбъект); + МодульИнтернетПоддержкаПользователейКлиент.ПодключитьИнтернетПоддержкуПользователей(Оповещение, ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Загрузить(Команда) + + Если Не ДанныеАутентификацииПорталаСохранены Тогда + ПодключитьИнтернетПоддержку(); + Возврат; + КонецЕсли; + + Элементы.Загрузить.Доступность = Ложь; + Элементы.Страницы.ТекущаяСтраница = Элементы.ДлительнаяОперация; + + ДлительнаяОперация = НачатьПолучениеКомпонентыСПортала(Параметры.Идентификатор, Параметры.Версия); + + Если ДлительнаяОперация = Неопределено Тогда + КраткоеПредставлениеОшибки = НСтр("ru = 'Не удалось создать фоновое задание обновления компоненты.'"); + Элементы.Страницы.ТекущаяСтраница = Элементы.Ошибка; + КонецЕсли; + + ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); + ПараметрыОжидания.ФормаВладелец = ЭтотОбъект; + ПараметрыОжидания.ВыводитьОкноОжидания = Ложь; + + Оповещение = Новый ОписаниеОповещения("ПослеПолученияКомпонентыСПортала", ЭтотОбъект); + ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, Оповещение, ПараметрыОжидания); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура ПослеПодключенияИнтернетПоддержки(Результат, Параметр) Экспорт + + Если ТипЗнч(Результат) = Тип("Структура") Тогда + Элементы.ПодключитьИнтернетПоддержку.Видимость = Ложь; + ДанныеАутентификацииПорталаСохранены = Истина; + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ДанныеАутентификацииПорталаСохранены() + + Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей") Тогда + МодульИнтернетПоддержкаПользователей = ОбщегоНазначения.ОбщийМодуль("ИнтернетПоддержкаПользователей"); + Возврат МодульИнтернетПоддержкаПользователей.ЗаполненыДанныеАутентификацииПользователяИнтернетПоддержки(); + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +&НаСервере +Функция НачатьПолучениеКомпонентыСПортала(Идентификатор, Версия) + + Если Не ВнешниеКомпонентыСлужебный.ДоступнаЗагрузкаСПортала() Тогда + Возврат Неопределено; + КонецЕсли; + + ПараметрыПроцедуры = Новый Структура; + ПараметрыПроцедуры.Вставить("Идентификатор", Идентификатор); + ПараметрыПроцедуры.Вставить("Версия", Версия); + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Получение внешней компоненты.'"); + + Возврат ДлительныеОперации.ВыполнитьВФоне("ВнешниеКомпонентыСлужебный.НоваяКомпонентаСПортала", + ПараметрыПроцедуры, ПараметрыВыполнения); + +КонецФункции + +&НаКлиенте +Процедура ПослеПолученияКомпонентыСПортала(Результат, ДополнительныеПараметры) Экспорт + + // Ответ: + // - Структура - Выполнено - результат в структуре. + // - Неопределено - Отменено пользователем. + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + Если Результат.Статус = "Ошибка" Тогда + КраткоеПредставлениеОшибки = Результат.КраткоеПредставлениеОшибки; + Элементы.Страницы.ТекущаяСтраница = Элементы.Ошибка; + КонецЕсли; + + Если Результат.Статус = "Выполнено" Тогда + Закрыть(Истина); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаСписка/Form.form index cde192812..b4bd6e59c 100644 --- a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаСписка/Form.form @@ -136,6 +136,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -146,36 +147,43 @@ КоманднаяПанель 36 + + ФормаСоздать + 69 + + <key>ru</key> + <value>Добавить из файла...</value> + + true + true + + true + + + ФормаСоздатьРасширеннаяПодсказка + 70 + + <key>ru</key> + <value>Добавить из файла на диске...</value> + + Label + true + true + + Left + + + Form.StandardCommand.Create + Normal + Auto + true + true + UserCmds + Auto + ГруппаДействие 65 - - ФормаОбновитьССайта - 67 - true - true - - true - - - ФормаОбновитьССайтаРасширеннаяПодсказка - 68 - Label - true - true - - Left - - - Form.Command.ОбновитьССайта - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - ФормаОбновитьИзФайла 58 @@ -227,6 +235,33 @@ true UserCmds Auto + InAdditionalSubmenu + + + ОбновитьСПортала1СИТС + 67 + true + true + + true + + + ОбновитьСПортала1СИТСРасширеннаяПодсказка + 68 + Label + true + true + + Left + + + Form.Command.ОбновитьСПортала1СИТС + Normal + Auto + true + true + UserCmds + Auto true true @@ -368,7 +403,7 @@ - ОбновлятьССайта + ОбновлятьСПортала1СИТС 28 true true @@ -376,11 +411,11 @@ true - Список.ОбновлятьССайта + Список.ОбновлятьСПортала1СИТС None - ОбновлятьССайтаРасширеннаяПодсказка + ОбновлятьСПортала1СИТСРасширеннаяПодсказка 30 Label true @@ -390,7 +425,7 @@ - ОбновлятьССайтаКонтекстноеМеню + ОбновлятьСПортала1СИТСКонтекстноеМеню 29 true @@ -710,7 +745,7 @@ Таблица.Версия КАК Версия, Таблица.Идентификатор КАК Идентификатор, Таблица.Использование КАК Использование, - Таблица.ОбновлятьССайта КАК ОбновлятьССайта, + Таблица.ОбновлятьСПортала1СИТС КАК ОбновлятьСПортала1СИТС, Таблица.ДатаВерсии КАК ДатаВерсии ИЗ Справочник.ВнешниеКомпоненты КАК Таблица @@ -743,7 +778,7 @@ ОбновитьИзФайла <key>ru</key> - <value>Обновить из файла на диске...</value> + <value>Обновить из файла...</value> 2 @@ -761,6 +796,7 @@ ОбновитьИзФайла + TextPicture DontUse Auto @@ -790,24 +826,28 @@ Auto - ОбновитьССайта + ОбновитьСПортала1СИТС <key>ru</key> - <value>Обновить с сайта</value> + <value>Обновить с Портала 1С:ИТС</value> 1 ru - Обновить с сайта + Обновить с Портала 1С:ИТС true + + CommonPicture.ОбновлениеВнешнихКомпонентССайта + - ОбновитьССайта + ОбновитьСПортала + TextPicture DontUse Auto diff --git a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаСписка/Module.bsl index 50f971b8b..d9f29a67e 100644 --- a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаСписка/Module.bsl @@ -10,10 +10,10 @@ Возврат; КонецЕсли; - Если Не ВнешниеКомпонентыСлужебный.ДоступнаЗагрузкаССайта() Тогда + Если Не ВнешниеКомпонентыСлужебный.ДоступнаЗагрузкаСПортала() Тогда - Элементы.ОбновлятьССайта.Видимость = Ложь; - Элементы.ФормаОбновитьССайта.Видимость = Ложь; + Элементы.ОбновлятьСПортала1СИТС.Видимость = Ложь; + Элементы.ОбновитьСПортала1СИТС.Видимость = Ложь; КонецЕсли; @@ -55,9 +55,17 @@ #Область ОбработчикиКомандФормы &НаКлиенте -Процедура ОбновитьССайта(Команда) +Процедура ОбновитьСПортала(Команда) - ОбновитьКомпонентыССайта(); + МассивСсылок = Элементы.Список.ВыделенныеСтроки; + + Если МассивСсылок.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Оповещение = Новый ОписаниеОповещения("ПослеОбновленияКомпонентыСПортала", ЭтотОбъект); + + ВнешниеКомпонентыСлужебныйКлиент.ОбновитьКомпонентыСПортала(Оповещение, МассивСсылок); КонецПроцедуры @@ -72,6 +80,7 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("Ключ", ДанныеСтроки.Ссылка); ПараметрыФормы.Вставить("ПоказатьДиалогЗагрузкиИзФайлаПриОткрытии", Истина); + ОткрытьФорму("Справочник.ВнешниеКомпоненты.ФормаОбъекта", ПараметрыФормы); КонецПроцедуры @@ -92,90 +101,13 @@ #Область СлужебныеПроцедурыИФункции -// Выполняет обновление компонент с сайта &НаКлиенте -Процедура ОбновитьКомпонентыССайта() +Процедура ПослеОбновленияКомпонентыСПортала(Результат, ДополнительныеПараметры) Экспорт - МассивСсылок = Элементы.Список.ВыделенныеСтроки; - - Если МассивСсылок.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - ДлительнаяОперация = НачатьОбновлениеКомпонентССайтаНаСервере(МассивСсылок); - - Если ДлительнаяОперация = Неопределено Тогда - Возврат; - КонецЕсли; - - ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); - ПараметрыОжидания.ТекстСообщения = НСтр("ru = 'Выполняется обновление внешних компонент...'"); - ПараметрыОжидания.ВыводитьОкноОжидания = Истина; - ПараметрыОжидания.ВыводитьСообщения = Истина; - - Оповещение = Новый ОписаниеОповещения("ОбновитьКомпонентыССайтаЗавершение", ЭтотОбъект); - - ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, Оповещение, ПараметрыОжидания); + Элементы.Список.Обновить(); КонецПроцедуры -// Продолжение процедуры ОбновитьКомпонентыССайта -&НаКлиенте -Процедура ОбновитьКомпонентыССайтаЗавершение(Результат, ДополнительныеПараметры) Экспорт - - // Ответ: - // - Структура - Выполнено - результат в структуре. - // - Неопределено - Отменено пользователем. - Если Результат = Неопределено Тогда - Возврат; - КонецЕсли; - - Если Результат.Сообщения <> Неопределено Тогда - Для каждого СообщениеПользователю Из Результат.Сообщения Цикл - ПоказатьОповещениеПользователя(НСтр("ru = 'Обновление с сайта'"),, - СообщениеПользователю.Текст, БиблиотекаКартинок.Информация32); - КонецЦикла; - КонецЕсли; - - Если Результат.Статус = "Ошибка" Тогда - ТекстОшибки = НСтр("ru = 'Ошибка при обновлении с сайта: %1.'"); - ПоказатьОповещениеПользователя(НСтр("ru = 'Обновление с сайта'"),, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, - Результат.КраткоеПредставлениеОшибки), - БиблиотекаКартинок.Ошибка32); - КонецЕсли; - - Если Результат.Статус = "Выполнено" Тогда - Элементы.Список.Обновить(); - ПоказатьОповещениеПользователя(НСтр("ru = 'Обновление с сайта'"),, - НСтр("ru = 'Обновление с сайта завершено.'"), БиблиотекаКартинок.Информация32); - КонецЕсли; - -КонецПроцедуры - -///////////////////////////////////////////////////////// -// Серверная логика модели представления. - -// Серверная логика обновления компоненты с сайта. -&НаСервере -Функция НачатьОбновлениеКомпонентССайтаНаСервере(МассивСсылок) - - Если Не ВнешниеКомпонентыСлужебный.ДоступнаЗагрузкаССайта() Тогда - Возврат Неопределено; - КонецЕсли; - - Если МассивСсылок.Количество() = 0 Тогда - Возврат Неопределено; - КонецЕсли; - - ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); - ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Обновление внешней компоненты.'"); - - Возврат ДлительныеОперации.ВыполнитьВФоне("ВнешниеКомпонентыСлужебный.ОбновитьКомпонентыССайта", - МассивСсылок, ПараметрыВыполнения); - -КонецФункции - ///////////////////////////////////////////////////////// // Представление данных на форме. diff --git a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаЭлемента/Form.form index 06f34533c..cc82985a7 100644 --- a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаЭлемента/Form.form @@ -1,95 +1,23 @@ - Шапка - 70 - - ОшибкаКомпоненты - 138 - - ОшибкаКомпонентыКартинкаПредупреждения - 140 - - <key>ru</key> - <value>Ошибка компоненты картинка предупреждения</value> - - true - true - - true - - - ОшибкаКомпонентыКартинкаПредупрежденияРасширеннаяПодсказка - 142 - Label - true - true - - Left - - - - ОшибкаКомпонентыКартинкаПредупрежденияКонтекстноеМеню - 141 - true - - true - true - false - - - CommonPicture.Предупреждение32 - - - - - ОшибкаКомпонентыПояснение - 143 - - <key>ru</key> - <value>Описание последней ошибки данной компоненты.</value> - - true - true - - true - - - ОшибкаКомпонентыПояснениеРасширеннаяПодсказка - 145 - Label - true - true - - Left - - - - ОшибкаКомпонентыПояснениеКонтекстноеМеню - 144 - true - - Label - 75 - true - false - - Left - Center - - + Информация + 166 + + ИнформацияКартинка + 168 + + <key>ru</key> + <value>Информация картинка</value> + true true true - - <key>ru</key> - <value>Ошибка компоненты</value> - - ОшибкаКомпонентыРасширеннаяПодсказка - 139 + ИнформацияКартинкаРасширеннаяПодсказка + 170 Label true true @@ -97,17 +25,87 @@ Left
    - UsualGroup - - Center - Auto - NormalSeparation - true - true - Auto - Auto + + ИнформацияКартинкаКонтекстноеМеню + 169 + true + + true + true + + + CommonPicture.Информация + + + ОписаниеОшибки + 171 + true + true + + true + + + Объект.ОписаниеОшибки + + None + + ОписаниеОшибкиРасширеннаяПодсказка + 173 + Label + true + true + + Left + + + + ОписаниеОшибкиКонтекстноеМеню + 172 + true + + LabelField + Enter + true + Left + true + + 1 + + + true + true + + true + + + <key>ru</key> + <value>Информация</value> + + + ИнформацияРасширеннаяПодсказка + 167 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + Шапка + 70 ГруппаИдентификаторВерсия 72 @@ -217,6 +215,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -298,6 +297,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -306,7 +306,7 @@ - ГруппаИспользованиеОбновлятьССайта + ГруппаИспользованиеОбновлятьСПортала1СИТС 155 Использование @@ -364,7 +364,7 @@ - ОбновлятьССайта + ОбновлятьСПортала1СИТС 16 true true @@ -372,11 +372,20 @@ true - Объект.ОбновлятьССайта + Объект.ОбновлятьСПортала1СИТС Right + + ru + Доступно только для используемой компоненты последней версии. + + Button + + OnChange + ОбновлятьСПортала1СИТСПриИзменении + - ОбновлятьССайтаРасширеннаяПодсказка + ОбновлятьСПортала1СИТСРасширеннаяПодсказка 18 Label true @@ -386,7 +395,7 @@
    - ОбновлятьССайтаКонтекстноеМеню + ОбновлятьСПортала1СИТСКонтекстноеМеню 17 true @@ -404,10 +413,10 @@ <key>ru</key> - <value>Использование обновлять с сайта</value> + <value>Использование обновлять с Портала 1С:ИТС</value> - ГруппаИспользованиеОбновлятьССайтаРасширеннаяПодсказка + ГруппаИспользованиеОбновлятьСПортала1СИТСРасширеннаяПодсказка 156 Label true @@ -418,6 +427,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -458,1182 +468,17 @@ Auto - - ГруппаПоддерживаемыеКлиенты - 58 - - Подсказка - 134 - - ГруппаWindows - 60 - - ГруппаWindowsТонкийКлиент - 89 - - WindowsТонкийКлиент - 91 - - <key>ru</key> - <value>Тонкий клиент</value> - - true - true - - true - - - WindowsТонкийКлиентРасширеннаяПодсказка - 93 - Label - true - true - - Left - - - - WindowsТонкийКлиентКонтекстноеМеню - 92 - true - - Label - 10 - true - true - - Left - - - - Windows_x86 - 19 - - <key>ru</key> - <value>x86</value> - - true - true - - true - - - Объект.Windows_x86 - - Right - - Windows_x86РасширеннаяПодсказка - 21 - Label - true - true - - Left - - - - Windows_x86КонтекстноеМеню - 20 - true - - CheckBoxField - Auto - true - Left - true - - - - Windows_x86_64 - 22 - - <key>ru</key> - <value>x64</value> - - true - true - - true - - - Объект.Windows_x86_64 - - Right - - Windows_x86_64РасширеннаяПодсказка - 24 - Label - true - true - - Left - - - - Windows_x86_64КонтекстноеМеню - 23 - true - - CheckBoxField - Auto - true - Left - true - - - true - true - - true - - - <key>ru</key> - <value>Тонкий клиент</value> - - - ГруппаWindowsТонкийКлиентРасширеннаяПодсказка - 90 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ГруппаWindowsChrome - 96 - - WindowsChrome - 98 - - <key>ru</key> - <value>Chrome</value> - - true - true - - true - - - WindowsChromeРасширеннаяПодсказка - 100 - Label - true - true - - Left - - - - WindowsChromeКонтекстноеМеню - 99 - true - - Label - 10 - true - true - - Left - - - - Windows_x86_Chrome - 46 - - <key>ru</key> - <value>x86</value> - - true - true - - true - - - Объект.Windows_x86_Chrome - - Right - - Windows_x86_ChromeРасширеннаяПодсказка - 48 - Label - true - true - - Left - - - - Windows_x86_ChromeКонтекстноеМеню - 47 - true - - CheckBoxField - Auto - true - Left - true - - - true - true - - true - - - <key>ru</key> - <value>Сhrome</value> - - - ГруппаWindowsChromeРасширеннаяПодсказка - 97 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ГруппаWindowsFirefox - 106 - - WindowsFirefox - 108 - - <key>ru</key> - <value>Firefox</value> - - true - true - - true - - - WindowsFirefoxРасширеннаяПодсказка - 110 - Label - true - true - - Left - - - - WindowsFirefoxКонтекстноеМеню - 109 - true - - Label - 10 - true - true - - Left - - - - Windows_x86_Firefox - 31 - - <key>ru</key> - <value>x86</value> - - true - true - - true - - - Объект.Windows_x86_Firefox - - Right - - Windows_x86_FirefoxРасширеннаяПодсказка - 33 - Label - true - true - - Left - - - - Windows_x86_FirefoxКонтекстноеМеню - 32 - true - - CheckBoxField - Auto - true - Left - true - - - true - true - - true - - - <key>ru</key> - <value>Firefox</value> - - - ГруппаWindowsFirefoxРасширеннаяПодсказка - 107 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ГруппаWindowsInternetExplorer - 101 - - WindowsInternetExplorer - 103 - - <key>ru</key> - <value>Internet Explorer</value> - - true - true - - true - - - WindowsInternetExplorerРасширеннаяПодсказка - 105 - Label - true - true - - Left - - - - WindowsInternetExplorerКонтекстноеМеню - 104 - true - - Label - 10 - true - true - - Left - - - - Windows_x86_MSIE - 40 - - <key>ru</key> - <value>x86</value> - - true - true - - true - - - Объект.Windows_x86_MSIE - - Right - - Windows_x86_MSIEРасширеннаяПодсказка - 42 - Label - true - true - - Left - - - - Windows_x86_MSIEКонтекстноеМеню - 41 - true - - CheckBoxField - Auto - true - Left - true - - - - Windows_x86_64_MSIE - 43 - - <key>ru</key> - <value>x64</value> - - true - true - - true - - - Объект.Windows_x86_64_MSIE - - Right - - Windows_x86_64_MSIEРасширеннаяПодсказка - 45 - Label - true - true - - Left - - - - Windows_x86_64_MSIEКонтекстноеМеню - 44 - true - - CheckBoxField - Auto - true - Left - true - - - true - true - - true - - - <key>ru</key> - <value>Internet explorer</value> - - - ГруппаWindowsInternetExplorerРасширеннаяПодсказка - 102 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Windows</value> - - true - - ГруппаWindowsРасширеннаяПодсказка - 61 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - auto - Auto - Auto - - - - ГруппаLinux - 62 - - ГруппаLinuxТонкийКлиент - 111 - - LinuxТонкийКлиент - 113 - - <key>ru</key> - <value>Тонкий клиент</value> - - true - true - - true - - - LinuxТонкийКлиентРасширеннаяПодсказка - 115 - Label - true - true - - Left - - - - LinuxТонкийКлиентКонтекстноеМеню - 114 - true - - Label - 9 - true - true - - Left - - - - Linux_x86 - 25 - - <key>ru</key> - <value>x86</value> - - true - true - - true - - - Объект.Linux_x86 - - Right - - Linux_x86РасширеннаяПодсказка - 27 - Label - true - true - - Left - - - - Linux_x86КонтекстноеМеню - 26 - true - - CheckBoxField - Auto - true - Left - true - - - - Linux_x86_64 - 28 - - <key>ru</key> - <value>x64</value> - - true - true - - true - - - Объект.Linux_x86_64 - - Right - - Linux_x86_64РасширеннаяПодсказка - 30 - Label - true - true - - Left - - - - Linux_x86_64КонтекстноеМеню - 29 - true - - CheckBoxField - Auto - true - Left - true - - - true - true - - true - - - <key>ru</key> - <value>Тонкий клиент</value> - - - ГруппаLinuxТонкийКлиентРасширеннаяПодсказка - 112 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ГруппаLinuxChrome - 116 - - LinuxChrome - 118 - - <key>ru</key> - <value>Chrome</value> - - true - true - - true - - - LinuxChromeРасширеннаяПодсказка - 120 - Label - true - true - - Left - - - - LinuxChromeКонтекстноеМеню - 119 - true - - Label - 9 - true - true - - Left - - - - Linux_x86_Chrome - 49 - - <key>ru</key> - <value>x86</value> - - true - true - - true - - - Объект.Linux_x86_Chrome - - Right - - Linux_x86_ChromeРасширеннаяПодсказка - 51 - Label - true - true - - Left - - - - Linux_x86_ChromeКонтекстноеМеню - 50 - true - - CheckBoxField - Auto - true - Left - true - - - - Linux_x86_64_Chrome - 52 - - <key>ru</key> - <value>x64</value> - - true - true - - true - - - Объект.Linux_x86_64_Chrome - - Right - - Linux_x86_64_ChromeРасширеннаяПодсказка - 54 - Label - true - true - - Left - - - - Linux_x86_64_ChromeКонтекстноеМеню - 53 - true - - CheckBoxField - Auto - true - Left - true - - - true - true - - true - - - <key>ru</key> - <value>Сhrome</value> - - - ГруппаLinuxChromeРасширеннаяПодсказка - 117 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ГруппаLinuxFirefox - 121 - - LinuxFirefox - 123 - - <key>ru</key> - <value>Firefox</value> - - true - true - - true - - - LinuxFirefoxРасширеннаяПодсказка - 125 - Label - true - true - - Left - - - - LinuxFirefoxКонтекстноеМеню - 124 - true - - Label - 9 - true - true - - Left - - - - Linux_x86_Firefox - 34 - - <key>ru</key> - <value>x86</value> - - true - true - - true - - - Объект.Linux_x86_Firefox - - Right - - Linux_x86_FirefoxРасширеннаяПодсказка - 36 - Label - true - true - - Left - - - - Linux_x86_FirefoxКонтекстноеМеню - 35 - true - - CheckBoxField - Auto - true - Left - true - - - - Linux_x86_64_Firefox - 37 - - <key>ru</key> - <value>x64</value> - - true - true - - true - - - Объект.Linux_x86_64_Firefox - - Right - - Linux_x86_64_FirefoxРасширеннаяПодсказка - 39 - Label - true - true - - Left - - - - Linux_x86_64_FirefoxКонтекстноеМеню - 38 - true - - CheckBoxField - Auto - true - Left - true - - - true - true - - true - - - <key>ru</key> - <value>Firefox</value> - - - ГруппаLinuxFirefoxРасширеннаяПодсказка - 122 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Linux</value> - - true - - ГруппаLinuxРасширеннаяПодсказка - 63 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - auto - Auto - Auto - - - - ГруппаMacOS - 64 - - ГруппаMacOSSafari - 126 - - MacOSSafari - 128 - - <key>ru</key> - <value>Safari</value> - - true - true - - true - - - MacOSSafariРасширеннаяПодсказка - 130 - Label - true - true - - Left - - - - MacOSSafariКонтекстноеМеню - 129 - true - - Label - true - true - - Left - - - - MacOS_x86_64_Safari - 55 - - <key>ru</key> - <value>x64</value> - - true - true - - true - - - Объект.MacOS_x86_64_Safari - - Right - - MacOS_x86_64_SafariРасширеннаяПодсказка - 57 - Label - true - true - - Left - - - - MacOS_x86_64_SafariКонтекстноеМеню - 56 - true - - CheckBoxField - Auto - true - Left - true - - - true - true - - true - - - <key>ru</key> - <value>Safari</value> - - - ГруппаMacOSSafariРасширеннаяПодсказка - 127 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>OS X (macOS)</value> - - true - - ГруппаMacOSРасширеннаяПодсказка - 65 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - auto - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Подсказка</value> - - ShowTop - - ПодсказкаРасширеннаяПодсказка - 135 - - <key>ru</key> - <value>Внешние компоненты платформозависимы, и не все внешние компоненты смогут работать на любой операционной системе или в любом браузере.</value> - - Label - 60 - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - + + ПоддерживаемыеКлиентскиеПриложения + 174 true true true - - <key>ru</key> - <value>Поддерживаемые компонентой операционные системы и виды клиентов</value> - - 60 - true - ГруппаПоддерживаемыеКлиентыРасширеннаяПодсказка - 59 + ПоддерживаемыеКлиентскиеПриложенияРасширеннаяПодсказка + 175 Label true true @@ -1641,17 +486,14 @@ Left
    - UsualGroup - - Collapsible - true - Button - true - true - auto - Auto - Auto - + Hyperlink + Form.Command.ПоддерживаемыеКлиентскиеПриложения + Normal + Auto + true + true + UserCmds + Auto ДатаВерсии @@ -1698,7 +540,7 @@ -1 ФормаЗаписатьИЗакрыть - 149 + 164 true true @@ -1706,7 +548,7 @@ ФормаЗаписатьИЗакрытьРасширеннаяПодсказка - 150 + 165 Label true true @@ -1714,7 +556,7 @@ Left
    - Form.Command.ЗаписатьИЗакрыть + Form.StandardCommand.WriteAndClose Auto true true @@ -1751,33 +593,6 @@ ГруппаДействие 136 - - ФормаОбновитьССайта - 83 - true - true - - true - - - ФормаОбновитьССайтаРасширеннаяПодсказка - 84 - Label - true - true - - Left - - - Form.Command.ОбновитьССайта - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - ФормаОбновитьИзФайла 77 @@ -1804,6 +619,32 @@ UserCmds Auto + + ОбновитьСПортала1СИТС + 83 + true + true + + true + + + ОбновитьСПортала1СИТСРасширеннаяПодсказка + 84 + Label + true + true + + Left + + + Form.Command.ОбновитьСПортала1СИТС + Normal + Auto + true + true + UserCmds + Auto + ФормаСохранитьКак 87 @@ -1829,6 +670,7 @@ true UserCmds Auto + InAdditionalSubmenu true true @@ -1909,14 +751,17 @@ OnOpen ПриОткрытии + + BeforeClose + ПередЗакрытием + OnCreateAtServer ПриСозданииНаСервере Copy ShowInList - WriteAndClose - 65 + 75 LockOwner true true @@ -1960,11 +805,28 @@ true + + Записана + + <key>ru</key> + <value>Записана</value> + + 3 + + Boolean + + + true + + + true + + ОбновитьИзФайла <key>ru</key> - <value>Обновить из файла на диске...</value> + <value>Обновить из файла...</value> 1 @@ -1982,28 +844,29 @@ ОбновитьИзФайла + TextPicture DontUse Auto - ОбновитьССайта + ОбновитьСПортала1СИТС <key>ru</key> - <value>Обновить с сайта</value> + <value>Обновить с Портала 1С:ИТС</value> 3 - - ru - Обновить с сайта - true + + CommonPicture.ОбновлениеВнешнихКомпонентССайта + - ОбновитьССайта + ОбновитьСПортала + TextPicture DontUse Auto @@ -2014,10 +877,6 @@ Сохранить как... 2 - - ru - Сохранить как... - true @@ -2033,25 +892,21 @@ Auto - ЗаписатьИЗакрыть + ПоддерживаемыеКлиентскиеПриложения <key>ru</key> - <value>Записать и закрыть</value> + <value>Поддерживаемые клиентские приложения</value> 4 - - ru - Записать и закрыть - true - ЗаписатьИЗакрыть + ПоддерживаемыеКлиентскиеПриложения - DontUse + Auto Auto @@ -2062,10 +917,8 @@ true - ВернутьРезультатЗагрузкиИзФайла - - Boolean - + ПараметрыПоискаДополнительнойИнформации + true @@ -2073,10 +926,6 @@ - - AfterWrite - ПослеЗаписи - AfterWriteAtServer ПослеЗаписиНаСервере @@ -2089,5 +938,9 @@ BeforeWriteAtServer ПередЗаписьюНаСервере + + OnWriteAtServer + ПриЗаписиНаСервере + diff --git a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаЭлемента/Help/ru.html index d12fedfb4..0db25db7a 100644 --- a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаЭлемента/Help/ru.html @@ -1,9 +1,21 @@

    Информация о внешней компоненте.

    -

    Открывается из списка Внешние компоненты по кнопке Создать или двойному щелчку мыши (также по команде Еще - Изменить).

    +

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

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

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

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

    -

    См. также:

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

    +

    Состояние внешней компоненты

    +

    С помощью тумблера можно установить состояние внешней компоненты:

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

    Обновление внешней компоненты с портала 1С:ИТС

    +
    • +
      Нажмите кнопку , для того чтобы обновить внешнюю компоненту с портала 1С:ИТС. Доступно для внешних компонент, полученных на портале 1С:ИТС.

    Обновление внешней компоненты

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

    Сохранение на компьютер

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

    См. также:

    \ No newline at end of file diff --git a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаЭлемента/Module.bsl index 08fd82684..1eb39c961 100644 --- a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаЭлемента/Module.bsl @@ -1,4 +1,11 @@ +#Область ОписаниеПеременных + +&НаКлиенте +Перем ДополнительнаяИнформация; + +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере @@ -16,10 +23,10 @@ УстановитьВидимостьДоступность(); - Если Не ВнешниеКомпонентыСлужебный.ДоступнаЗагрузкаССайта() Тогда + Если Не ВнешниеКомпонентыСлужебный.ДоступнаЗагрузкаСПортала() Тогда - Элементы.ОбновлятьССайта.Видимость = Ложь; - Элементы.ФормаОбновитьССайта.Видимость = Ложь; + Элементы.ОбновлятьСПортала1СИТС.Видимость = Ложь; + Элементы.ОбновитьСПортала1СИТС.Видимость = Ложь; КонецЕсли; @@ -40,9 +47,9 @@ // Если вызвана команда "Перечитать" необходимо удалить буфер данных компоненты Если ЭтоАдресВременногоХранилища(АдресДвоичныхДанныхКомпоненты) Тогда УдалитьИзВременногоХранилища(АдресДвоичныхДанныхКомпоненты); - АдресДвоичныхДанныхКомпоненты = Неопределено; КонецЕсли; + АдресДвоичныхДанныхКомпоненты = Неопределено; УстановитьВидимостьДоступность(); КонецПроцедуры @@ -58,22 +65,39 @@ КонецПроцедуры +&НаСервере +Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + + Записана = Истина; // Факт записи свидетельствует положительный результат при закрытии отдельно от записи. + Параметры.ПоказатьДиалогЗагрузкиИзФайлаПриОткрытии = Ложь; // Избежание закрытия формы при ошибке. + +КонецПроцедуры + &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) - Если Не ПараметрыЗаписи.Свойство("ЗаписатьИЗакрыть") Тогда - УстановитьВидимостьДоступность(); - КонецЕсли; + УстановитьВидимостьДоступность(); КонецПроцедуры &НаКлиенте -Процедура ПослеЗаписи(ПараметрыЗаписи) +Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) - Если ПараметрыЗаписи.Свойство("ЗаписатьИЗакрыть") Тогда - ЗакрытьСПараметромЗакрытия(); + Если ЗавершениеРаботы Тогда + Возврат; КонецЕсли; + СтандартнаяОбработка = Ложь; + + ПараметрЗакрытия = ВнешниеКомпонентыСлужебныйКлиент.РезультатЗагрузкиКомпоненты(); + ПараметрЗакрытия.Загружена = Записана; + ПараметрЗакрытия.Идентификатор = Объект.Идентификатор; + ПараметрЗакрытия.Версия = Объект.Версия; + ПараметрЗакрытия.Наименование = Объект.Наименование; + ПараметрЗакрытия.ДополнительнаяИнформация = ДополнительнаяИнформация; + + Закрыть(ПараметрЗакрытия); + КонецПроцедуры #КонецОбласти @@ -87,23 +111,28 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбновлятьСПортала1СИТСПриИзменении(Элемент) + + УстановитьВидимостьДоступность(); + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы &НаКлиенте -Процедура ЗаписатьИЗакрыть(Команда) +Процедура ОбновитьСПортала(Команда) - ОчиститьСообщения(); - Записать(Новый Структура("ЗаписатьИЗакрыть")); - -КонецПроцедуры - -&НаКлиенте -Процедура ОбновитьССайта(Команда) - - ОчиститьСообщения(); - ОбновитьКомпонентуССайта(); + Если Модифицированность Тогда + Оповещение = Новый ОписаниеОповещения("ПослеЗакрытияВопросаЗаписатьОбъект", ЭтотОбъект); + ПоказатьВопрос(Оповещение, + НСтр("ru = 'Для проверки обновления необходимо записать объект. Записать?'"), + РежимДиалогаВопрос.ДаНет); + Иначе + НачатьОбновлениеКомпонентыСПортала(); + КонецЕсли; КонецПроцедуры @@ -127,10 +156,39 @@ КонецПроцедуры +&НаКлиенте +Процедура ПоддерживаемыеКлиентскиеПриложения(Команда) + + Реквизиты = Новый Структура; + Реквизиты.Вставить("Windows_x86"); + Реквизиты.Вставить("Windows_x86_64"); + Реквизиты.Вставить("Linux_x86"); + Реквизиты.Вставить("Linux_x86_64"); + Реквизиты.Вставить("Windows_x86_Firefox"); + Реквизиты.Вставить("Linux_x86_Firefox"); + Реквизиты.Вставить("Linux_x86_64_Firefox"); + Реквизиты.Вставить("Windows_x86_MSIE"); + Реквизиты.Вставить("Windows_x86_64_MSIE"); + Реквизиты.Вставить("Windows_x86_Chrome"); + Реквизиты.Вставить("Linux_x86_Chrome"); + Реквизиты.Вставить("Linux_x86_64_Chrome"); + Реквизиты.Вставить("MacOS_x86_64_Safari"); + + ЗаполнитьЗначенияСвойств(Реквизиты, Объект); + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ПоддерживаемыеКлиенты", Реквизиты); + + ОткрытьФорму("ОбщаяФорма.ПоддерживаемыеКлиентскиеПриложения", ПараметрыФормы); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции +#Область КлиентскаяЛогика + // Строит диалог загрузки компоненты из файла. &НаКлиенте Процедура ЗагрузитьКомпонентуИзФайла() @@ -150,19 +208,19 @@ // - КодВозвратаДиалога.Отмена - Отклонить. // - Неопределено - Закрыто окно. Если Ответ <> "Продолжить" Тогда - ЗагрузитьКомпонентуЗавершение(Контекст); + ЗагрузитьКомпонентуПриОтображенииОшибки(); Возврат; КонецЕсли; - + ПараметрыДиалога = Новый Структура; ПараметрыДиалога.Вставить("Режим", РежимДиалогаВыбораФайла.Открытие); ПараметрыДиалога.Вставить("Заголовок", НСтр("ru = 'Выберите файл внешней компоненты'")); ПараметрыДиалога.Вставить("Фильтр", НСтр("ru = 'Внешняя компонента (*.zip)|*.zip|Все файлы(*.*)|*.*'")); - + Оповещение = Новый ОписаниеОповещения("ЗагрузитьКомпонентуПослеПомещенияФайла", ЭтотОбъект, Контекст); СтандартныеПодсистемыКлиент.ПоказатьПомещениеФайла(Оповещение, УникальныйИдентификатор, Объект.ИмяФайла, ПараметрыДиалога); - + КонецПроцедуры // Продолжение процедуры ЗагрузитьКомпонентуИзФайла. @@ -170,7 +228,7 @@ Процедура ЗагрузитьКомпонентуПослеПомещенияФайла(ПомещенныеФайлы, Контекст) Экспорт Если ПомещенныеФайлы = Неопределено Или ПомещенныеФайлы.Количество() = 0 Тогда - ЗагрузитьКомпонентуЗавершение(Контекст); + ЗагрузитьКомпонентуПриОтображенииОшибки(НСтр("ru = 'Файл не удалось загрузить на сервер.'")); Возврат; КонецЕсли; @@ -181,177 +239,177 @@ ПараметрыЗагрузки.Вставить("ИмяФайла", ТолькоИмяФайла(ОписаниеФайла.Имя)); Результат = ЗагрузитьКомпонентуИзФайлаНаСервере(ПараметрыЗагрузки); - Если Не Результат.Загружено - Или Не ЭтоАдресВременногоХранилища(АдресДвоичныхДанныхКомпоненты)Тогда - - // Ошибка при загрузке. - - Оповещение = Новый ОписаниеОповещения("ЗагрузитьКомпонентуПослеОтображенияОшибки", ЭтотОбъект, Контекст); - - СтрокаСПредупреждением = Новый ФорматированнаяСтрока( - Результат.ОписаниеОшибки, Символы.ПС, - НСтр("ru = 'Необходимо указать zip-архив с внешней компонентой. - |Подробнее:'"), - Новый ФорматированнаяСтрока("http://its.1c.ru/db/metodtorg/content/3221/hdoc",,,, "http://its.1c.ru/db/metodtorg/content/3221/hdoc"), "."); - ПоказатьПредупреждение(Оповещение, СтрокаСПредупреждением); - - Иначе - - // Успешно загружена. - - Если ПроверитьЗаполнение() Тогда - ЗагрузитьКомпонентуЗавершение(Контекст); - КонецЕсли; - + Если Результат.Загружена И ЭтоАдресВременногоХранилища(АдресДвоичныхДанныхКомпоненты)Тогда + ДополнительнаяИнформация = Результат.ДополнительнаяИнформация; + Иначе + ЗагрузитьКомпонентуПриОтображенииОшибки(Результат.ОписаниеОшибки); КонецЕсли; КонецПроцедуры // Продолжение процедуры ЗагрузитьКомпонентуИзФайла. &НаКлиенте -Процедура ЗагрузитьКомпонентуПослеОтображенияОшибки(Контекст) Экспорт +Процедура ЗагрузитьКомпонентуПриОтображенииОшибки(ОписаниеОшибки = "") - ЗагрузитьКомпонентуЗавершение(Контекст); + Если ПустаяСтрока(ОписаниеОшибки) Тогда + ЗагрузитьКомпонентуПослеОтображенияОшибки(Неопределено); + Иначе + Оповещение = Новый ОписаниеОповещения("ЗагрузитьКомпонентуПослеОтображенияОшибки", ЭтотОбъект); + + СтрокаСПредупреждением = Новый ФорматированнаяСтрока( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 + |Необходимо указать zip-архив с внешней компонентой. + |Подробнее:'"), + ОписаниеОшибки), + Новый ФорматированнаяСтрока("http://its.1c.ru/db/metodtorg/content/3221/hdoc",,,, + "http://its.1c.ru/db/metodtorg/content/3221/hdoc"), "."); + + ПоказатьПредупреждение(Оповещение, СтрокаСПредупреждением); + КонецЕсли; КонецПроцедуры // Продолжение процедуры ЗагрузитьКомпонентуИзФайла. &НаКлиенте -Процедура ЗагрузитьКомпонентуЗавершение(Контекст) +Процедура ЗагрузитьКомпонентуПослеОтображенияОшибки(ДополнительныеПараметры) Экспорт - Если Параметры.ПоказатьДиалогЗагрузкиИзФайлаПриОткрытии И Открыта() Тогда + // Открыта через программный интерфейс. + Если Параметры.ПоказатьДиалогЗагрузкиИзФайлаПриОткрытии Тогда Закрыть(); КонецЕсли; КонецПроцедуры -// Выполняет обновление компоненты с сайта. &НаКлиенте -Процедура ОбновитьКомпонентуССайта() +Процедура ПослеЗакрытияВопросаЗаписатьОбъект(РезультатВопроса, Контекст) Экспорт - ДлительнаяОперация = НачатьОбновлениеКомпонентыССайтаНаСервере(); - - Если ДлительнаяОперация = Неопределено Тогда - Возврат; + Если РезультатВопроса = КодВозвратаДиалога.Да Тогда + Записать(); + НачатьОбновлениеКомпонентыСПортала(); КонецЕсли; - ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); - ПараметрыОжидания.ТекстСообщения = НСтр("ru = 'Выполняется обновление внешней компоненты...'"); - ПараметрыОжидания.ВыводитьОкноОжидания = Истина; - - Оповещение = Новый ОписаниеОповещения("ОбновитьКомпонентуССайтаЗавершение", ЭтотОбъект); - - ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, Оповещение, ПараметрыОжидания); - КонецПроцедуры -// Продолжение процедуры ОбновитьКомпонентуССайта. &НаКлиенте -Процедура ОбновитьКомпонентуССайтаЗавершение(Результат, ДополнительныеПараметры) Экспорт +Процедура НачатьОбновлениеКомпонентыСПортала() - // Ответ: - // - Структура - Выполнено - результат в структуре. - // - Неопределено - Отменено пользователем. - Если Результат = Неопределено Тогда + ЭтоНовый = Объект.Ссылка.Пустая(); + Если ЭтоНовый Тогда Возврат; КонецЕсли; - - Если Результат.Статус = "Ошибка" Тогда - ПоказатьПредупреждение(, Результат.КраткоеПредставлениеОшибки); - КонецЕсли; - Если Результат.Статус = "Выполнено" Тогда - ЗавершитьОбновлениеКомпонентыССайтаНаСервере(Результат); - ПоказатьОповещениеПользователя(НСтр("ru = 'Обновление с сайта'"),, - НСтр("ru = 'Внешняя компонента успешно обновлена.'"), БиблиотекаКартинок.Успешно32); - КонецЕсли; - + МассивСсылок = Новый Массив; + МассивСсылок.Добавить(Объект.Ссылка); + + Оповещение = Новый ОписаниеОповещения("ПослеОбновленияКомпонентыСПортала", ЭтотОбъект); + + ВнешниеКомпонентыСлужебныйКлиент.ОбновитьКомпонентыСПортала(Оповещение, МассивСсылок); + КонецПроцедуры -///////////////////////////////////////////////////////// -// Серверная логика модели представления. +&НаКлиенте +Процедура ПослеОбновленияКомпонентыСПортала(Результат, ДополнительныеПараметры) Экспорт + + ОбновитьКарточкуПослеОбновленияКомпонентыСПортала(); + +КонецПроцедуры + +#КонецОбласти + +#Область СервернаяЛогика // Серверная логика процедуры ЗагрузитьКомпонентуИзФайла. &НаСервере Функция ЗагрузитьКомпонентуИзФайлаНаСервере(ПараметрыЗагрузки) Если Не Пользователи.ЭтоПолноправныйПользователь(,, Ложь) Тогда - ВызватьИсключение НСтр("ru = 'Не достаточно прав для совершения операции.'"); + ВызватьИсключение НСтр("ru = 'Недостаточно прав для совершения операции.'"); КонецЕсли; ОбъектСправочника = РеквизитФормыВЗначение("Объект"); - Информация = ВнешниеКомпонентыСлужебный.ИнформацияОКомпоненте(ПараметрыЗагрузки.АдресХранилищаФайла); + Информация = ВнешниеКомпонентыСлужебный.ИнформацияОКомпонентеИзФайла(ПараметрыЗагрузки.АдресХранилищаФайла,, + Параметры.ПараметрыПоискаДополнительнойИнформации); + + Результат = РезультатЗагрузкиКомпоненты(); Если Не Информация.Разобрано Тогда - Возврат Новый Структура("Загружено, ОписаниеОшибки", Ложь, Информация.ОписаниеОшибки); + Результат.ОписаниеОшибки = Информация.ОписаниеОшибки; + Возврат Результат; КонецЕсли; - ЗаполнитьЗначенияСвойств(ОбъектСправочника, Информация.Реквизиты); // По данным манифеста. + Если ЗначениеЗаполнено(ОбъектСправочника.Идентификатор) + И ЗначениеЗаполнено(Информация.Реквизиты.Идентификатор) Тогда + + Если ОбъектСправочника.Идентификатор <> Информация.Реквизиты.Идентификатор Тогда + Результат.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Текущий идентификатор %1 отличается от загружаемого %2 + |Обновление невозможно.'"), + ОбъектСправочника.Идентификатор, + Информация.Реквизиты.Идентификатор); + Возврат Результат; + КонецЕсли; + + КонецЕсли; + + ЗаполнитьЗначенияСвойств(ОбъектСправочника, Информация.Реквизиты,, "Идентификатор"); // По данным манифеста. + Если Не ЗначениеЗаполнено(ОбъектСправочника.Идентификатор) Тогда + ОбъектСправочника.Идентификатор = Информация.Реквизиты.Идентификатор; + КонецЕсли; ОбъектСправочника.ИмяФайла = ПараметрыЗагрузки.ИмяФайла; // Установка имени файла. АдресДвоичныхДанныхКомпоненты = ПоместитьВоВременноеХранилище(Информация.ДвоичныеДанные, УникальныйИдентификатор); - + + ОбъектСправочника.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Загружена из файла %1. %2.'"), + ОбъектСправочника.ИмяФайла, + ТекущаяДатаСеанса()); + ЗначениеВРеквизитФормы(ОбъектСправочника, "Объект"); Модифицированность = Истина; УстановитьВидимостьДоступность(); - Возврат Новый Структура("Загружено", Истина); + Результат.Загружена = Истина; + Результат.ДополнительнаяИнформация = Информация.ДополнительнаяИнформация; + Возврат Результат; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция РезультатЗагрузкиКомпоненты() + + Результат = Новый Структура; + Результат.Вставить("Загружена", Ложь); + Результат.Вставить("ОписаниеОшибки", ""); + Результат.Вставить("ДополнительнаяИнформация", Новый Соответствие); + + Возврат Результат; КонецФункции // Серверная логика обновления компоненты с сайта. &НаСервере -Функция НачатьОбновлениеКомпонентыССайтаНаСервере() +Процедура ОбновитьКарточкуПослеОбновленияКомпонентыСПортала() - Если Не ВнешниеКомпонентыСлужебный.ДоступнаЗагрузкаССайта() Тогда - Возврат Неопределено; - КонецЕсли; - - ЭтоНовый = Объект.Ссылка.Пустая(); - Если ЭтоНовый Тогда - Возврат Неопределено; - КонецЕсли; - - МассивСсылок = Новый Массив; - МассивСсылок.Добавить(Объект.Ссылка); - - ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); - ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Обновление внешней компоненты.'"); - - Возврат ДлительныеОперации.ВыполнитьВФоне("ВнешниеКомпонентыСлужебный.ОбновитьКомпонентыССайта", - МассивСсылок, ПараметрыВыполнения); - -КонецФункции - -// Серверная логика обновления компоненты с сайта. -&НаСервере -Процедура ЗавершитьОбновлениеКомпонентыССайтаНаСервере(Результат) - - // Обновление формы по новому значению объекта в ИБ. ЭтотОбъект.Прочитать(); - Модифицированность = Ложь; УстановитьВидимостьДоступность(); КонецПроцедуры -///////////////////////////////////////////////////////// -// Представление данных на форме. +#КонецОбласти + +#Область Представление -// Для внутреннего использования. &НаСервере Процедура УстановитьВидимостьДоступность() + СправочникОбъект = РеквизитФормыВЗначение("Объект"); ЭтоНовый = Объект.Ссылка.Пустая(); - // Отображение описания ошибки. - Элементы.ОшибкаКомпоненты.Видимость = Ложь; - - // Зависимость использования и автоматического обновления. - КомпонентаОтключена = (Объект.Использование = Перечисления.ВариантыИспользованияВнешнихКомпонент.Отключена); - Элементы.ОбновлятьССайта.Доступность = Не КомпонентаОтключена; + Элементы.Информация.Видимость = Не ЭтоНовый И ЗначениеЗаполнено(Объект.ОписаниеОшибки); // Параметры отображения предупреждений при редактировании ОтображатьПредупреждение = ОтображениеПредупрежденияПриРедактировании.Отображать; @@ -374,33 +432,20 @@ // Доступность кнопки Сохранить в файл Элементы.ФормаСохранитьКак.Доступность = Не ЭтоНовый; - Элементы.ФормаОбновитьССайта.Доступность = Не ЭтоНовый; + Элементы.ОбновитьСПортала1СИТС.Доступность = Не ЭтоНовый; + + // Зависимость использования и автоматического обновления. + КомпонентаОтключена = (Объект.Использование = Перечисления.ВариантыИспользованияВнешнихКомпонент.Отключена); + Элементы.ОбновлятьСПортала1СИТС.Доступность = Не КомпонентаОтключена И СправочникОбъект.ЭтоКомпонентаПоследнейВерсии(); + + Элементы.ОбновитьСПортала1СИТС.Доступность = Объект.ОбновлятьСПортала1СИТС; КонецПроцедуры -///////////////////////////////////////////////////////// -// Прочее. +#КонецОбласти -// Для внутреннего использования. -&НаКлиенте -Процедура ЗакрытьСПараметромЗакрытия() - - ПараметрЗакрытия = Неопределено; - - Если Параметры.ВернутьРезультатЗагрузкиИзФайла Тогда - - ПараметрЗакрытия = Новый Структура; - ПараметрЗакрытия.Вставить("Идентификатор", Объект.Идентификатор); - ПараметрЗакрытия.Вставить("Версия" , Объект.Версия); - ПараметрЗакрытия.Вставить("Наименование" , Объект.Наименование); - - КонецЕсли; - - Закрыть(ПараметрЗакрытия); - -КонецПроцедуры +#Область Прочее -// Для внутреннего использования. &НаКлиенте Функция ТолькоИмяФайла(ВыбранноеИмяФайла) @@ -410,4 +455,6 @@ КонецФункции +#КонецОбласти + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/ВнешниеКомпоненты/Help/ru.html b/SSL/src/Catalogs/ВнешниеКомпоненты/Help/ru.html index 5c1f9a1aa..b3e05f670 100644 --- a/SSL/src/Catalogs/ВнешниеКомпоненты/Help/ru.html +++ b/SSL/src/Catalogs/ВнешниеКомпоненты/Help/ru.html @@ -6,18 +6,23 @@
  • Работа с буфером обмена, сканирование и т.п.;
  • Печать штрихкодов, извлечение текстов, компонента склонения и т.д.
  • Внешние компоненты можно подключить к программе из файла на компьютере. При необходимости, одновременно могут быть подключены сразу несколько версий одной внешней компоненты. Например, это полезно, когда на разных клиентских компьютерах используются разные драйверы или оборудование.

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

    -

    В списке отражаются все установленные в программе внешние компоненты.

    +

    В списке отражаются все установленные в программе внешние компоненты. В колонке  флажками обозначаются внешние компоненты, которые обновляются с сайта 1С:ИТС.

    Подключение внешней компоненты

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

      Обновление внешней компоненты

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

      Обновление внешней компоненты с портала 1С:ИТС

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

      Обновление внешней компоненты из файла

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

      Сохранение внешних компонент на компьютер

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

      Отборы в списке

      +
    • Выполните команду Сохранить как контекстного меню по правой кнопке мыши или меню Еще.   +
    • Укажите путь к файлу на компьютере. Нажмите Сохранить.

    Отборы в списке

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

    • Все;
    • Используемые; diff --git a/SSL/src/Catalogs/ВнешниеКомпоненты/ManagerModule.bsl b/SSL/src/Catalogs/ВнешниеКомпоненты/ManagerModule.bsl index 14daa517a..5fe05311a 100644 --- a/SSL/src/Catalogs/ВнешниеКомпоненты/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВнешниеКомпоненты/ManagerModule.bsl @@ -24,4 +24,75 @@ #КонецОбласти +#Область СлужебныеПроцедурыИФункции + +// Возвращает ссылку на справочник внешней компоненты по идентификатору и версии. +// +// Параметры: +// Идентификатор - Строка - идентификатор объекта внешнего компонента. +// Версия - Строка - (необязательный) версия компоненты. +// +// Возвращаемое значение: +// СправочникСсылка.ВнешниеКомпоненты - ссылка на контейнер внешней компоненты в информационной базе. +// +Функция НайтиПоИдентификатору(Идентификатор, Версия = Неопределено) Экспорт + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Идентификатор", Идентификатор); + + Если Не ЗначениеЗаполнено(Версия) Тогда + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ВнешниеКомпоненты.Идентификатор КАК Идентификатор, + | ВнешниеКомпоненты.ДатаВерсии КАК ДатаВерсии, + | ВЫБОР + | КОГДА ВнешниеКомпоненты.Использование = ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияВнешнихКомпонент.Используется) + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК Использование, + | ВнешниеКомпоненты.Ссылка КАК Ссылка + |ИЗ + | Справочник.ВнешниеКомпоненты КАК ВнешниеКомпоненты + |ГДЕ + | ВнешниеКомпоненты.Идентификатор = &Идентификатор + | + |УПОРЯДОЧИТЬ ПО + | Использование УБЫВ, + | ДатаВерсии УБЫВ"; + Иначе + Запрос.УстановитьПараметр("Версия", Версия); + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ВнешниеКомпоненты.Ссылка КАК Ссылка, + | ВЫБОР + | КОГДА ВнешниеКомпоненты.Использование = ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияВнешнихКомпонент.Используется) + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК Использование + |ИЗ + | Справочник.ВнешниеКомпоненты КАК ВнешниеКомпоненты + |ГДЕ + | ВнешниеКомпоненты.Идентификатор = &Идентификатор + | И ВнешниеКомпоненты.Версия = &Версия + | + |УПОРЯДОЧИТЬ ПО + | Использование УБЫВ"; + + КонецЕсли; + + Результат = Запрос.Выполнить(); + + Если Результат.Пустой() Тогда + Возврат ПустаяСсылка(); + КонецЕсли; + + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + + Возврат Результат.Выгрузить()[0].Ссылка; + +КонецФункции + +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ВнешниеКомпоненты/ObjectModule.bsl b/SSL/src/Catalogs/ВнешниеКомпоненты/ObjectModule.bsl index a4b5ba0db..f3cbc7da6 100644 --- a/SSL/src/Catalogs/ВнешниеКомпоненты/ObjectModule.bsl +++ b/SSL/src/Catalogs/ВнешниеКомпоненты/ObjectModule.bsl @@ -2,121 +2,12 @@ #Область ОбработчикиСобытий -Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) - - // Если внешняя компонента используется, то необходим контроль уникальности идентификатора и версии объекта. - Если Использование = Перечисления.ВариантыИспользованияВнешнихКомпонент.Используется Тогда - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Идентификатор", Идентификатор); - Запрос.УстановитьПараметр("Версия", Версия); - Запрос.УстановитьПараметр("Ссылка", Ссылка); - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | 1 - |ИЗ - | Справочник.ВнешниеКомпоненты КАК ВнешниеКомпоненты - |ГДЕ - | ВнешниеКомпоненты.Идентификатор = &Идентификатор - | И ВнешниеКомпоненты.Версия = &Версия - | И ВнешниеКомпоненты.Использование = ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияВнешнихКомпонент.Используется) - | И ВнешниеКомпоненты.Ссылка <> &Ссылка"; - - Конфликтующие = Запрос.Выполнить(); - - Если Не Конфликтующие.Пустой() Тогда - - Отказ = Истина; - - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Идентификатор ""%1"" и версия ""%2"", указанные для данной компоненты, - |уже используются другой компонентой. - |Для продолжения необходимо изменить использование с ""%3"" на ""%4"".'"), - Идентификатор, - Версия, - Строка(Перечисления.ВариантыИспользованияВнешнихКомпонент.Используется), - Строка(Перечисления.ВариантыИспользованияВнешнихКомпонент.Отключена)); - - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "Объект.Использование"); - - КонецЕсли; - КонецЕсли; - - Если ОбновлятьССайта Тогда - - // ОбновлятьССайта может быть установлен только у компоненты максимальной версии. - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Идентификатор", Идентификатор); - Запрос.Текст = - "ВЫБРАТЬ - | МАКСИМУМ(ВнешниеКомпоненты.ДатаВерсии) КАК ДатаВерсии - |ИЗ - | Справочник.ВнешниеКомпоненты КАК ВнешниеКомпоненты - |ГДЕ - | ВнешниеКомпоненты.Идентификатор = &Идентификатор"; - - Результат = Запрос.Выполнить(); - Выборка = Результат.Выбрать(); - Выборка.Следующий(); - ЭтоМаксимальнаяВерсия = (Выборка.ДатаВерсии = Null) Или (Выборка.ДатаВерсии = ДатаВерсии); - - Если Не ЭтоМаксимальнаяВерсия Тогда - - Отказ = Истина; - - ТекстОшибки = НСтр("ru = 'Автоматическое обновление может быть включено только для компоненты - |последней версии. - | - |Для продолжения необходимо отключить обновление с сайта.'"); - - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "Объект.ОбновлятьССайта"); - - КонецЕсли; - - // Не должно быть несколько объектов (в т.ч. разной версии, в т.ч. отключенных) с одним идентификатором - // у которых одновременно включен ОбновлятьССайта. - - Если Не Отказ Тогда - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Идентификатор", Идентификатор); - Запрос.УстановитьПараметр("Ссылка", Ссылка); - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | 1 - |ИЗ - | Справочник.ВнешниеКомпоненты КАК ВнешниеКомпоненты - |ГДЕ - | ВнешниеКомпоненты.Идентификатор = &Идентификатор - | И ВнешниеКомпоненты.ОбновлятьССайта - | И ВнешниеКомпоненты.Ссылка <> &Ссылка"; - - Конфликтующие = Запрос.Выполнить(); - - Если Не Конфликтующие.Пустой() Тогда - - Отказ = Истина; - - ТекстОшибки = НСтр("ru = 'Автоматическое обновление уже включено для другой версии компоненты. - | - |Для продолжения необходимо отключить обновление с сайта.'"); - - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "Объект.ОбновлятьССайта"); - - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - Процедура ПередЗаписью(Отказ) Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; - + // Связь реквизитов с пометкой удаления. Если ПометкаУдаления Тогда Использование = Перечисления.ВариантыИспользованияВнешнихКомпонент.Отключена; @@ -124,7 +15,20 @@ // Связь реквизитов с вариантом использования. Если Использование = Перечисления.ВариантыИспользованияВнешнихКомпонент.Отключена Тогда - ОбновлятьССайта = Ложь; + ОбновлятьСПортала1СИТС = Ложь; + КонецЕсли; + + // Не должно быть несколько компонент с одним идентификатором, с одновременно включенными ОбновлятьСПортала1СИТС. + Если Не ЭтоКомпонентаПоследнейВерсии() Тогда + ОбновлятьСПортала1СИТС = Ложь; + КонецЕсли; + + // Контроль уникальности идентификатора и версии компоненты. + Если Не ЭтоУникальнаяКомпонента() Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Внешняя компонента со значениями Идентификатор ""%1"" и версия ""%2"" уже загружена в программу.'"), + Идентификатор, + Версия); КонецЕсли; // Помещение двоичных данных компоненты @@ -135,6 +39,89 @@ КонецПроцедуры +Процедура ПриЗаписи(Отказ) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + // Если была загружается компонента новой версии, а у одной из старых есть признак ОбновлятьСПортала1СИТС + // то при перезаписи компонент младших версий признак будет сброшен. + Если ЭтоКомпонентаПоследнейВерсии() Тогда + ПерезаписатьКомпонентыМладшихВерсий(); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ЭтоКомпонентаПоследнейВерсии() Экспорт + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Идентификатор", Идентификатор); + Запрос.Текст = + "ВЫБРАТЬ + | МАКСИМУМ(ВнешниеКомпоненты.ДатаВерсии) КАК ДатаВерсии + |ИЗ + | Справочник.ВнешниеКомпоненты КАК ВнешниеКомпоненты + |ГДЕ + | ВнешниеКомпоненты.Идентификатор = &Идентификатор"; + + Результат = Запрос.Выполнить(); + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + Возврат (Выборка.ДатаВерсии = Null) Или (Выборка.ДатаВерсии <= ДатаВерсии) + +КонецФункции + +Функция ЭтоУникальнаяКомпонента() + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Идентификатор", Идентификатор); + Запрос.УстановитьПараметр("Версия", Версия); + Запрос.УстановитьПараметр("Ссылка", Ссылка); + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | 1 + |ИЗ + | Справочник.ВнешниеКомпоненты КАК ВнешниеКомпоненты + |ГДЕ + | ВнешниеКомпоненты.Идентификатор = &Идентификатор + | И ВнешниеКомпоненты.Версия = &Версия + | И ВнешниеКомпоненты.Использование = ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияВнешнихКомпонент.Используется) + | И ВнешниеКомпоненты.Ссылка <> &Ссылка"; + + Результат = Запрос.Выполнить(); + Возврат Результат.Пустой(); + +КонецФункции + +Процедура ПерезаписатьКомпонентыМладшихВерсий() + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Идентификатор", Идентификатор); + Запрос.УстановитьПараметр("Ссылка", Ссылка); + Запрос.Текст = + "ВЫБРАТЬ + | ВнешниеКомпоненты.Ссылка КАК Ссылка + |ИЗ + | Справочник.ВнешниеКомпоненты КАК ВнешниеКомпоненты + |ГДЕ + | ВнешниеКомпоненты.Идентификатор = &Идентификатор + | И ВнешниеКомпоненты.Использование = ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияВнешнихКомпонент.Используется) + | И ВнешниеКомпоненты.Ссылка <> &Ссылка"; + + Результат = Запрос.Выполнить(); + Выборка = Результат.Выбрать(); + Пока Выборка.Следующий() Цикл + Объект = Выборка.Ссылка.ПолучитьОбъект(); + Объект.Записать(); + КонецЦикла; + +КонецПроцедуры + #КонецОбласти #КонецЕсли diff --git a/SSL/src/Catalogs/ВнешниеКомпоненты/ВнешниеКомпоненты.mdo b/SSL/src/Catalogs/ВнешниеКомпоненты/ВнешниеКомпоненты.mdo index 8e2d0b7e4..771120f10 100644 --- a/SSL/src/Catalogs/ВнешниеКомпоненты/ВнешниеКомпоненты.mdo +++ b/SSL/src/Catalogs/ВнешниеКомпоненты/ВнешниеКомпоненты.mdo @@ -244,17 +244,17 @@ Use - ОбновлятьССайта + ОбновлятьСПортала1СИТС ru - Обновлять с сайта 1С + Обновлять с Портала 1С:ИТС Boolean ru - Обновлять с сайта 1С + Обновлять с Портала 1С:ИТС @@ -498,4 +498,22 @@ PersonalComputer MobileDevice + + ПоискКомпонентыНаПортале1СИТС + + ru + Поиск компоненты на Портале 1С:ИТС + + PersonalComputer + MobileDevice + + + ОбновлениеКомпонентСПортала1СИТС + + ru + Обновление компонент с Портала 1С:ИТС + + PersonalComputer + MobileDevice + diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Form.form index 34afb0391..d6f389437 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Form.form @@ -995,6 +995,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1566,6 +1567,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1594,6 +1596,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1848,6 +1851,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1956,6 +1960,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl index 62d507c1f..543e1510b 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl @@ -81,8 +81,9 @@ ХранимыеПараметры.Вставить("ИспользоватьГруппы", ПолучитьФункциональнуюОпцию("ИспользоватьГруппыПользователей")); - Если НЕ ПравоДоступа("Добавление", Метаданные.Справочники.ВнешниеПользователи) Тогда - Элементы.СоздатьВнешнегоПользователя.Видимость = Ложь; + Если Не ПравоДоступа("Добавление", Метаданные.Справочники.ВнешниеПользователи) Тогда + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "СоздатьВнешнегоПользователя", "Видимость", Ложь); КонецЕсли; Если Не ПравоДоступа("Редактирование", Метаданные.Справочники.ГруппыВнешнихПользователей) Тогда @@ -135,8 +136,12 @@ Элементы.ВнешниеПользователиСписок.РежимВыбора = Ложь; Элементы.ГруппыВнешнихПользователей.РежимВыбора = Ложь; Элементы.Комментарии.Видимость = Ложь; - Элементы.ВыбратьВнешнегоПользователя.Видимость = Ложь; - Элементы.ВыбратьГруппуВнешнихПользователей.Видимость = Ложь; + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "ВыбратьВнешнегоПользователя", "Видимость", Ложь); + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "ВыбратьГруппуВнешнихПользователей", "Видимость", Ложь); КонецЕсли; ХранимыеПараметры.Вставить("ГруппаВсеПользователи", @@ -931,11 +936,16 @@ Если Параметры.РежимВыбора Тогда - Элементы.ВыбратьГруппуВнешнихПользователей.Видимость = - ?(ХранимыеПараметры.РасширенныйПодбор, Ложь, ВыборГруппВнешнихПользователей); - Элементы.ВыбратьВнешнегоПользователя.КнопкаПоУмолчанию = - ?(ХранимыеПараметры.РасширенныйПодбор, Ложь, Не ВыборГруппВнешнихПользователей); - Элементы.ВыбратьВнешнегоПользователя.Видимость = Не ХранимыеПараметры.РасширенныйПодбор; + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "ВыбратьГруппуВнешнихПользователей", "Видимость", ?(ХранимыеПараметры.РасширенныйПодбор, + Ложь, ВыборГруппВнешнихПользователей)); + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "ВыбратьВнешнегоПользователя", "КнопкаПоУмолчанию", ?(ХранимыеПараметры.РасширенныйПодбор, + Ложь, Не ВыборГруппВнешнихПользователей)); + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "ВыбратьВнешнегоПользователя", "Видимость", Не ХранимыеПараметры.РасширенныйПодбор); АвтоЗаголовок = Ложь; @@ -950,12 +960,11 @@ Заголовок = НСтр("ru = 'Подбор внешних пользователей и групп'"); КонецЕсли; - Элементы.ВыбратьВнешнегоПользователя.Заголовок = - НСтр("ru = 'Выбрать внешних пользователей'"); - - Элементы.ВыбратьГруппуВнешнихПользователей.Заголовок = - НСтр("ru = 'Выбрать группы'"); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "ВыбратьВнешнегоПользователя", "Заголовок", НСтр("ru = 'Выбрать внешних пользователей'")); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "ВыбратьГруппуВнешнихПользователей", "Заголовок", НСтр("ru = 'Выбрать группы'")); Иначе Если ХранимыеПараметры.РасширенныйПодбор Тогда Заголовок = ХранимыеПараметры.ЗаголовокФормыПодбора; @@ -968,7 +977,8 @@ Если ВыборГруппВнешнихПользователей Тогда Заголовок = НСтр("ru = 'Выбор внешнего пользователя или группы'"); - Элементы.ВыбратьВнешнегоПользователя.Заголовок = НСтр("ru = 'Выбрать внешнего пользователя'"); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "ВыбратьВнешнегоПользователя", "Заголовок", НСтр("ru = 'Выбрать внешнего пользователя'")); Иначе Заголовок = НСтр("ru = 'Выбор внешнего пользователя'"); КонецЕсли; diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Form.form index 932e0a347..fe883d85e 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Form.form @@ -133,6 +133,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -237,6 +238,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -357,6 +359,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -385,6 +388,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -560,6 +564,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -926,6 +931,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1069,6 +1075,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1804,6 +1811,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -1903,14 +1911,8 @@ Left true - - StartChoice - КомментарийНачалоВыбора - true - true true - true true true true diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl index 08bb6cc29..5f580f6d8 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl @@ -170,6 +170,13 @@ ТекущееПредставлениеОбъектаАвторизации = Строка(Объект.ОбъектАвторизации); + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + КонецПроцедуры &НаСервере @@ -595,14 +602,6 @@ КонецПроцедуры -&НаКлиенте -Процедура КомментарийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария( - Элемент.ТекстРедактирования, ЭтотОбъект, "Объект.Комментарий"); - -КонецПроцедуры - &НаКлиенте Процедура СтраницыГлавноеИКомментарийПриСменеСтраницы(Элемент, ТекущаяСтраница) diff --git a/SSL/src/Catalogs/ВнешниеПользователи/ManagerModule.bsl b/SSL/src/Catalogs/ВнешниеПользователи/ManagerModule.bsl index b4c62be4b..fa8d70d56 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/ManagerModule.bsl @@ -27,6 +27,24 @@ // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.ТекстДляВнешнихПользователей = + "РазрешитьЧтение + |ГДЕ + | ЗначениеРазрешено(Ссылка) + |; + |РазрешитьИзменениеЕслиРазрешеноЧтение + |ГДЕ + | ЭтоАвторизованныйПользователь(Ссылка)"; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + #КонецОбласти #КонецОбласти diff --git a/SSL/src/Catalogs/ВстречаПрисоединенныеФайлы/ManagerModule.bsl b/SSL/src/Catalogs/ВстречаПрисоединенныеФайлы/ManagerModule.bsl index 3b70fa857..abfeb8fe5 100644 --- a/SSL/src/Catalogs/ВстречаПрисоединенныеФайлы/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВстречаПрисоединенныеФайлы/ManagerModule.bsl @@ -19,6 +19,24 @@ // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтение + |ГДЕ + | ЧтениеОбъектаРазрешено(ВладелецФайла) + |; + |РазрешитьИзменениеЕслиРазрешеноЧтение + |ГДЕ + | ИзменениеОбъектаРазрешено(ВладелецФайла)"; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + #КонецОбласти #КонецОбласти diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Form.form index 428aab9d2..5480c6a50 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Form.form @@ -264,6 +264,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -292,6 +293,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1545,13 +1547,8 @@ Left true - - StartChoice - КомментарийНачалоВыбора - true true - true true true true diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl index 5219a3079..fb1e6b817 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl @@ -102,6 +102,13 @@ ОбработатьИнтерфейсРолей("ЗаполнитьРоли", Объект.Роли); ОбработатьИнтерфейсРолей("НастроитьИнтерфейсРолейПриЧтенииНаСервере", Истина); + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + КонецПроцедуры &НаСервере @@ -222,14 +229,6 @@ КонецПроцедуры -&НаКлиенте -Процедура КомментарийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария( - Элемент.ТекстРедактирования, ЭтотОбъект, "Объект.Комментарий"); - -КонецПроцедуры - #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыРоли diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/ManagerModule.bsl b/SSL/src/Catalogs/ГруппыВнешнихПользователей/ManagerModule.bsl index 5352c92fc..6d45ac7c5 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/ManagerModule.bsl +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/ManagerModule.bsl @@ -24,6 +24,20 @@ // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.ТекстДляВнешнихПользователей = + "РазрешитьЧтениеИзменение + |ГДЕ + | Ссылка = Значение(Справочник.ГруппыВнешнихПользователей.ВсеВнешниеПользователи)"; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + #КонецОбласти #КонецОбласти diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Module.bsl index f80f5a09e..bef5eed71 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Module.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Module.bsl @@ -33,6 +33,13 @@ ТолькоПросмотр = Истина; КонецЕсли; + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + КонецПроцедуры &НаСервере diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Module.bsl index d760211bd..299042727 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Module.bsl @@ -19,14 +19,17 @@ УпрощенныйИнтерфейсНастройкиПравДоступа = УправлениеДоступомСлужебный.УпрощенныйИнтерфейсНастройкиПравДоступа(); Если УпрощенныйИнтерфейсНастройкиПравДоступа Тогда - Если Элементы.Найти("ФормаСоздать") <> Неопределено Тогда - Элементы.ФормаСоздать.Видимость = Ложь; - Элементы.СписокКонтекстноеМенюСоздать.Видимость = Ложь; - КонецЕсли; - Если Элементы.Найти("ФормаСкопировать") <> Неопределено Тогда - Элементы.ФормаСкопировать.Видимость = Ложь; - Элементы.СписокКонтекстноеМенюСкопировать.Видимость = Ложь; - КонецЕсли; + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "ФормаСоздать", "Видимость", Ложь); + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "СписокКонтекстноеМенюСоздать", "Видимость", Ложь); + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "ФормаСкопировать", "Видимость", Ложь); + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "СписокКонтекстноеМенюСкопировать", "Видимость", Ложь); КонецЕсли; Список.Параметры.УстановитьЗначениеПараметра("Профиль", Параметры.Профиль); @@ -37,10 +40,11 @@ Заголовок = НСтр("ru = 'Группы доступа'"); - Если Элементы.Найти("ФормаСоздатьГруппу") <> Неопределено Тогда - Элементы.ФормаСоздатьГруппу.Видимость = Ложь; - Элементы.СписокКонтекстноеМенюСоздатьГруппу.Видимость = Ложь; - КонецЕсли; + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "ФормаСоздатьГруппу", "Видимость", Ложь); + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "СписокКонтекстноеМенюСоздатьГруппу", "Видимость", Ложь); КонецЕсли; Если НЕ ПравоДоступа("Чтение", Метаданные.Справочники.ПрофилиГруппДоступа) Тогда @@ -95,17 +99,14 @@ ПереносДопустим = НЕ ЗначениеЗаполнено(Элементы.Список.ТекущиеДанные.Пользователь) И Элементы.Список.ТекущиеДанные.Ссылка <> РодительПерсональныхГруппДоступа; - Если Элементы.Найти("ФормаПеренестиЭлемент") <> Неопределено Тогда - Элементы.ФормаПеренестиЭлемент.Доступность = ПереносДопустим; - КонецЕсли; + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "ФормаПеренестиЭлемент", "Доступность", ПереносДопустим); - Если Элементы.Найти("СписокКонтекстноеМенюПеренестиЭлемент") <> Неопределено Тогда - Элементы.СписокКонтекстноеМенюПеренестиЭлемент.Доступность = ПереносДопустим; - КонецЕсли; + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "СписокКонтекстноеМенюПеренестиЭлемент", "Доступность", ПереносДопустим); - Если Элементы.Найти("СписокПеренестиЭлемент") <> Неопределено Тогда - Элементы.СписокПеренестиЭлемент.Доступность = ПереносДопустим; - КонецЕсли; + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "СписокПеренестиЭлемент", "Доступность", ПереносДопустим); КонецПроцедуры diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Form.form index 393072fc3..dfa2201e5 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Form.form @@ -1545,6 +1545,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl index d9b097341..5d411d3fb 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl @@ -139,6 +139,13 @@ НачальнаяНастройкаПриЧтенииИСоздании(ТекущийОбъект); + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + КонецПроцедуры &НаКлиенте diff --git a/SSL/src/Catalogs/ГруппыДоступа/ManagerModule.bsl b/SSL/src/Catalogs/ГруппыДоступа/ManagerModule.bsl index dff706972..01f6ef735 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/ManagerModule.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/ManagerModule.bsl @@ -26,6 +26,22 @@ // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтениеИзменение + |ГДЕ + | ЭтоГруппа + | ИЛИ Профиль <> Значение(Справочник.ПрофилиГруппДоступа.Администратор) + | И ЭтоАвторизованныйПользователь(Ответственный)"; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + // ТехнологияСервиса.ВыгрузкаЗагрузкаДанных // См. ВыгрузкаЗагрузкаДанныхПереопределяемый.ПриРегистрацииОбработчиковВыгрузкиДанных. @@ -773,36 +789,47 @@ ОбъектовОбработано = 0; ПроблемныхОбъектов = 0; + ШаблонОшибкиОбработкиГруппыДоступа = + НСтр("ru = 'Не удалось обработать группу доступа ""%1"" по причине: + |%2'"); + ШаблонОшибкиОбновленияТаблицГруппДоступа = + НСтр("ru = 'Не удалось обновить таблицы группы доступа ""%1"" по причине: + |%2'"); + ШаблонОшибкиОбновленияЗначенийГруппДоступа = + НСтр("ru = 'Не удалось обновить значения доступа группы доступа ""%1"" по причине: + |%2'"); + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыДоступа"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; + Пока Выборка.Следующий() Цикл - Попытка - РегистрыСведений.ТаблицыГруппДоступа.ОбновитьДанныеРегистра(Выборка.Ссылка); - Исключение - ПроблемныхОбъектов = ПроблемныхОбъектов + 1; - ИнформацияОбОшибке = ИнформацияОбОшибке(); - - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось обновить таблицы группы доступа ""%1"" по причине: - |%2'"), - Строка(Выборка.Ссылка), - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); - ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Предупреждение, , , ТекстСообщения); - Продолжить; - КонецПопытки; + ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.Ссылка); + НачатьТранзакцию(); Попытка + ШаблонОшибки = ШаблонОшибкиОбработкиГруппыДоступа; + Блокировка.Заблокировать(); + + ШаблонОшибки = ШаблонОшибкиОбновленияТаблицГруппДоступа; + РегистрыСведений.ТаблицыГруппДоступа.ОбновитьДанныеРегистра(Выборка.Ссылка); + + ШаблонОшибки = ШаблонОшибкиОбновленияЗначенийГруппДоступа; РегистрыСведений.ЗначенияГруппДоступа.ОбновитьДанныеРегистра(Выборка.Ссылка); + + ШаблонОшибки = ШаблонОшибкиОбработкиГруппыДоступа; + ЗафиксироватьТранзакцию(); Исключение + ОтменитьТранзакцию(); ПроблемныхОбъектов = ПроблемныхОбъектов + 1; ИнформацияОбОшибке = ИнформацияОбОшибке(); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось обновить значения доступа группы доступа ""%1"" по причине: - |%2'"), + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, Строка(Выборка.Ссылка), ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); - ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Предупреждение, , , ТекстСообщения); + + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Предупреждение, , , ТекстСообщения); Продолжить; КонецПопытки; diff --git a/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl b/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl index 9e57cbd14..38444a9c7 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl @@ -56,7 +56,7 @@ КонецЕсли; // Проверка наличия только пользователей. - Для каждого ТекущаяСтрока Из ЭтотОбъект.Пользователи Цикл + Для каждого ТекущаяСтрока Из Пользователи Цикл Если ТипЗнч(ТекущаяСтрока.Пользователь) <> Тип("СправочникСсылка.Пользователи") Тогда ВызватьИсключение НСтр("ru = 'Предопределенная группа доступа Администраторы @@ -142,6 +142,16 @@ Справочники.ГруппыДоступа.ОбновитьВспомогательныеДанныеГруппДоступаИзмененныхПриЗагрузке(); Справочники.ГруппыДоступа.ОбновитьРолиПользователейИзмененныхПриЗагрузке(); + Если УправлениеДоступомСлужебный.ОграничиватьДоступНаУровнеЗаписейУниверсально() Тогда + Если Не ПометкаУдаления Тогда + УправлениеДоступомСлужебный.ЗапланироватьОбновлениеДоступаПриИзмененииУчастниковГруппыДоступа(Ссылка, + Пользователи, СтарыеЗначения.Пользователи); + КонецЕсли; + Если ПометкаУдаления <> СтарыеЗначения.ПометкаУдаления Тогда + УправлениеДоступомСлужебный.ОбновитьГруппыДоступаРазрешенногоКлючаДоступа(Ссылка); + КонецЕсли; + КонецЕсли; + КонецПроцедуры Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) diff --git a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Form.form index 873914010..791eb07fe 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Form.form @@ -893,14 +893,8 @@ Left true - - StartChoice - КомментарийНачалоВыбора - - 2 true true - true true true true diff --git a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Module.bsl index 55cf10f8b..74c5c2756 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Module.bsl @@ -57,14 +57,6 @@ КонецПроцедуры -&НаКлиенте -Процедура КомментарийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария( - Элемент.ТекстРедактирования, ЭтотОбъект, "Объект.Комментарий"); - -КонецПроцедуры - #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыСостав diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПроверкаДополнительныхОтчетовИОбработок/Form.form b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПроверкаДополнительныхОтчетовИОбработок/Form.form index 481cc4414..beba495ee 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПроверкаДополнительныхОтчетовИОбработок/Form.form +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПроверкаДополнительныхОтчетовИОбработок/Form.form @@ -94,6 +94,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПодборРазделов/Form.form b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/РазмещениеВРазделах/Form.form similarity index 97% rename from SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПодборРазделов/Form.form rename to SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/РазмещениеВРазделах/Form.form index e67473067..bed55f279 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПодборРазделов/Form.form +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/РазмещениеВРазделах/Form.form @@ -1,9 +1,5 @@ - - <key>ru</key> - <value>Разделы командного интерфейса</value> - Разделы 1 @@ -321,6 +317,7 @@ LockOwner true + true true Vertical true @@ -404,10 +401,6 @@ ОК 1 - - ru - ОК - true @@ -426,10 +419,6 @@ Выделить все 2 - - ru - Выделить все - true @@ -446,10 +435,6 @@ Снять выделение со всех 3 - - ru - Снять выделение со всех - true diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПодборРазделов/Module.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/РазмещениеВРазделах/Module.bsl similarity index 100% rename from SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПодборРазделов/Module.bsl rename to SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/РазмещениеВРазделах/Module.bsl diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Form.form index 7d91036bc..32776670a 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Form.form @@ -170,6 +170,103 @@ Auto + + ГруппаПояснениеСервис + 130 + + КартинкаПояснения + 132 + true + true + + true + + + КартинкаПоясненияРасширеннаяПодсказка + 134 + Label + true + true + + Left + + + + КартинкаПоясненияКонтекстноеМеню + 133 + true + + true + true + + + CommonPicture.Информация32 + + + + + ПояснениеСервис + 127 + + <key>ru</key> + <value>Правила добавления новых и использования существующих дополнительных обработок устанавливает провайдер сервиса. +Обратитесь за консультацией в службу поддержки сервиса или в компанию, которая предоставила доступ.</value> + + true + true + + true + + + ПояснениеСервисРасширеннаяПодсказка + 129 + Label + true + true + + Left + + + + ПояснениеСервисКонтекстноеМеню + 128 + true + + Label + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Пояснение для сервиса</value> + + + ГруппаПояснениеСервисРасширеннаяПодсказка + 131 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + КоманднаяПанель 19 @@ -179,6 +276,10 @@ Создать 27 + + <key>ru</key> + <value>Добавить из файла...</value> + true true @@ -187,6 +288,10 @@ СоздатьРасширеннаяПодсказка 37 + + <key>ru</key> + <value>Добавить из файла на диске...</value> + Label true true @@ -1593,7 +1698,7 @@ ВыгрузитьВФайл <key>ru</key> - <value>Выгрузить в файл...</value> + <value>Сохранить как...</value> 1 @@ -1603,13 +1708,16 @@ true + + CommonPicture.СохранитьФайлКак + ВыгрузитьВФайл FunctionalOption.СтандартныеПодсистемыВЛокальномРежиме - Picture + TextPicture DontUse Auto @@ -1617,23 +1725,26 @@ ЗагрузитьИзФайла <key>ru</key> - <value>Загрузить из файла...</value> + <value>Обновить из файла...</value> 2 ru - Загрузить обработку (отчет) из файла на компьютере + Обновить обработку (отчет) из файла на компьютере true + + CommonPicture.ОбновитьФайлИзФайлаНаДиске + ЗагрузитьФайлОбработкиОтчета FunctionalOption.СтандартныеПодсистемыВЛокальномРежиме - Picture + TextPicture DontUse Auto diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Module.bsl index 25b9b7f7a..7f897d093 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Module.bsl @@ -105,6 +105,8 @@ Элементы.СоздатьГруппу.Видимость = Ложь; КонецЕсли; + Элементы.ГруппаПояснениеСервис.Видимость = ОбщегоНазначения.РазделениеВключено(); + КонецПроцедуры &НаСервере diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Form.form index 1dd0703a7..cef8aac99 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Form.form @@ -150,6 +150,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -178,6 +179,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -261,6 +263,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -426,6 +429,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -573,6 +577,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1197,6 +1202,7 @@ Page + HorizontalIfPossible auto false @@ -2091,6 +2097,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2344,6 +2351,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -3062,6 +3070,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -3926,22 +3935,25 @@ ЗагрузитьИзФайла <key>ru</key> - <value>Загрузить из файла...</value> + <value>Обновить из файла...</value> 1 ru - Загрузить обработку (отчет) из файла на компьютере + Обновить из файла на диске... true + + CommonPicture.ОбновитьФайлИзФайлаНаДиске + ЗагрузитьИзФайла - Picture + TextPicture DontUse Auto @@ -3949,16 +3961,19 @@ ВыгрузитьВФайл <key>ru</key> - <value>Выгрузить в файл...</value> + <value>Сохранить как...</value> 2 ru - Выгрузить обработку (отчет) в файл на компьютер + Сохранить как... true + + CommonPicture.СохранитьФайлКак + ВыгрузитьВФайл diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Help/ru.html index f02a033f9..37a82ad78 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Help/ru.html @@ -11,7 +11,7 @@
      Режим работы - режим подключения дополнительных отчетов и обработок, принимает значения Безопасный и Небезопасный.
    • -

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

      +

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

      • Используется - обработка доступна для использования. Команды обработки доступны в программе для всех пользователей с установленной ролью "Использование дополнительных отчетов и обработок".
      • @@ -32,13 +32,13 @@
      • Версия;
      • Имя объекта;
      • Описание - подробная информация о дополнительном отчете или обработке.
    • Группа - включите дополнительную обработку или отчет в одну из групп. Выберите нужную группу из списка. Группы помогают упорядочить дополнительные отчеты и обработки.

    Загрузка из файла

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

    Выгрузка в файл

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

    Режим работы

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

    Выгрузка в файл

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

    Режим работы

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

    Особенности регистрации назначаемых дополнительных обработок и отчетов

    • Для дополнительных обработок или отчетов, предназначенных для работы со списками или документами программы, можно выбрать из списка объекты, в которых будут доступны команды обработки или отчета. -
      • Назначение -  для выбора объектов программы нажмите ссылку, которая принимает значение Не определено (если ни одного объекта не выбрано) или перечисляет выбранные объекты. С помощью флажков выберите нужные объекты. +
        • Размещение -  для выбора объектов программы нажмите ссылку, которая принимает значение Не определено (если ни одного объекта не выбрано) или перечисляет выбранные объекты. С помощью флажков выберите нужные объекты.
        • Показывать - команды обработок или отчетов могут быть доступны:
          • из списка выбранных объектов, если установлен флажок В списках; 
          • из окна самого объекта, если установлен флажок В формах элементов справочников и документов. Можно установить оба флажка одновременно.
      • diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl index a89273fbf..1a78770e3 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl @@ -92,7 +92,7 @@ &НаКлиенте Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) - Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Справочник.ДополнительныеОтчетыИОбработки.Форма.ПодборРазделов") Тогда + Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Справочник.ДополнительныеОтчетыИОбработки.Форма.РазмещениеВРазделах") Тогда Если ТипЗнч(ВыбранноеЗначение) <> Тип("СписокЗначений") Тогда Возврат; @@ -173,6 +173,13 @@ | И НЕ ДанныеРегистра.Пользователь.Недействителен"; БыстрыйДоступ.Загрузить(Запрос.Выполнить().Выгрузить()); + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + КонецПроцедуры &НаСервере @@ -291,7 +298,7 @@ ПараметрыФормы.Вставить("Разделы", Разделы); ПараметрыФормы.Вставить("ВидОбработки", Объект.Вид); - ОткрытьФорму("Справочник.ДополнительныеОтчетыИОбработки.Форма.ПодборРазделов", ПараметрыФормы, ЭтотОбъект); + ОткрытьФорму("Справочник.ДополнительныеОтчетыИОбработки.Форма.РазмещениеВРазделах", ПараметрыФормы, ЭтотОбъект); Иначе // Выбор объектов метаданных ПараметрыФормы = ПодготовитьПараметрыФормыВыборОбъектовМетаданных(); @@ -650,7 +657,10 @@ ОбновлениеИзФайлаПоказатьКонфликты(ПараметрыРегистрации); Иначе ОбработчикРезультата = Новый ОписаниеОповещения("ОбновлениеИзФайлаЗавершение", ЭтотОбъект, ПараметрыРегистрации); - СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(ОбработчикРезультата, ПараметрыРегистрации.ТекстОшибки, РежимДиалогаВопрос.ОК); + ПараметрыВопроса = СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю(); + ПараметрыВопроса.ПредлагатьБольшеНеЗадаватьЭтотВопрос = Ложь; + СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(ОбработчикРезультата, ПараметрыРегистрации.ТекстОшибки, + РежимДиалогаВопрос.ОК, ПараметрыВопроса); КонецЕсли; КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Help/ru.html b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Help/ru.html index 38fe00a8b..9660871b8 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Help/ru.html +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Help/ru.html @@ -23,10 +23,7 @@
      • Информация - описание дополнительной обработки или отчета, которое было написано разработчиком;
      • Имя файла - расширение и имя файла дополнительной обработки (отчета);
      • Безопасный режим - принимает значение "Да", если дополнительный отчет или обработка выполняется в безопасном режиме. Как правило, большинство обработок должны выполняться в безопасном режиме. Это гарантирует, что они не содержат "ненадежный программный код, который выполняется на сервере. Однако некоторые обработки могут требовать выполнения в небезопасном режиме. Об этом программа размещает предупреждение. Такие обработки следует загружать только из надежных источников (поставщиков) или перед загрузкой самостоятельно выполнять их аудит. Подробнее о безопасном режиме работы см. документацию по платформе 1С:Предприятие.

      Добавление дополнительных отчетов или обработок

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

      Группировка дополнительных отчетов и обработок

      -

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

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

      Отборы

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

      Отборы

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

      • по полю Вид - выберите один из видов дополнительных отчетов и обработок из списка для отбора, например, "Отчет". 
        @@ -34,8 +31,8 @@
        по полю Публикация - выберите нужное состояние для отбора, например, "Используется".
      • по полям Вид и Публикация - можно сочетать два вида отбора в больших списках.

      Загрузка из файла

      -
      • С помощью команды Загрузить из файла можно обновить обработку во внутреннем хранилище программы. Укажите путь к файлу, нажмите Открыть.

      Выгрузка в файл

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

      Виды дополнительных отчетов и обработок

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

      Выгрузка в файл

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

      Виды дополнительных отчетов и обработок

      Существует несколько видов дополнительных отчетов и обработок:

      • Глобальные отчеты и обработки - используются независимо от данных программы, также называются общими. Команды для их использования размещаются в разделах программы. С помощью глобальных отчетов и обработок можно загружать данные в программу, производить обновление или очистку индекса полнотекстового поиска и т.д. Они содержат команды, вызываемые только из разделов командного интерфейса. Команды не зависят от конкретных объектов программы. Список доступных разделов для размещения команд определен разработчиком заранее и включен в файл дополнительного отчета или обработки, его невозможно изменить.
      • Назначаемые дополнительные отчеты и обработки - предназначены для конкретных документов или списков программы, которых может быть несколько, при этом список доступных назначений определен разработчиком заранее и включен в текст дополнительного отчета или обработки, поэтому при настройке дополнительного отчета или обработки можно только выбирать из этого списка. К этому типу относятся несколько видов дополнительных отчетов и обработок: diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ManagerModule.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ManagerModule.bsl index f5e359410..8a35a2ea0 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ManagerModule.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ManagerModule.bsl @@ -25,6 +25,22 @@ // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтениеИзменение + |ГДЕ + | ЗначениеРазрешено(Ссылка)"; + + Ограничение.ТекстДляВнешнихПользователей = Ограничение.Текст; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + #КонецОбласти #КонецОбласти diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl index bd154b753..ab500c5e0 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl @@ -83,7 +83,7 @@ ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Имя ""%1"", используемое отчетом (обработкой) ""%2"", уже занято другим опубликованным дополнительным отчетом (обработкой).'"), ИмяОбъекта, - ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЭтотОбъект.Ссылка, "Наименование")); + ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "Наименование")); КонецЕсли; ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "Объект.Публикация"); КонецЕсли; diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo index c14eb101a..349c73a24 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo @@ -825,10 +825,10 @@ MobileDevice - ПодборРазделов + РазмещениеВРазделах ru - Подбор разделов + Размещение в разделах PersonalComputer MobileDevice diff --git a/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Form.form b/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Form.form index 32ec82304..00d3464bf 100644 --- a/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Form.form +++ b/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Form.form @@ -217,6 +217,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/Catalogs/Заметки/Forms/ЗаметкиПоПредмету/Form.form b/SSL/src/Catalogs/Заметки/Forms/ЗаметкиПоПредмету/Form.form index eafecbba0..256067846 100644 --- a/SSL/src/Catalogs/Заметки/Forms/ЗаметкиПоПредмету/Form.form +++ b/SSL/src/Catalogs/Заметки/Forms/ЗаметкиПоПредмету/Form.form @@ -431,6 +431,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Form.form b/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Form.form index c674dabc5..7737ba1f2 100644 --- a/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Form.form +++ b/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Form.form @@ -21,7 +21,6 @@ None CancelSearch - Choose Copy CreateFolder Delete diff --git a/SSL/src/Catalogs/Заметки/Forms/ФормаГруппы/Form.form b/SSL/src/Catalogs/Заметки/Forms/ФормаГруппы/Form.form index a1a5c5d36..8a2fcef8e 100644 --- a/SSL/src/Catalogs/Заметки/Forms/ФормаГруппы/Form.form +++ b/SSL/src/Catalogs/Заметки/Forms/ФормаГруппы/Form.form @@ -202,6 +202,10 @@ + + OnReadAtServer + ПриЧтенииНаСервере + Folders diff --git a/SSL/src/Catalogs/Заметки/Forms/ФормаГруппы/Module.bsl b/SSL/src/Catalogs/Заметки/Forms/ФормаГруппы/Module.bsl index 021d99642..8c6150333 100644 --- a/SSL/src/Catalogs/Заметки/Forms/ФормаГруппы/Module.bsl +++ b/SSL/src/Catalogs/Заметки/Forms/ФормаГруппы/Module.bsl @@ -18,4 +18,16 @@ КонецПроцедуры +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Form.form index 1ec3902a6..a9b40788b 100644 --- a/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Form.form @@ -103,6 +103,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -341,6 +342,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -447,6 +449,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Module.bsl index bb74676a8..b7d55b836 100644 --- a/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Module.bsl @@ -32,6 +32,14 @@ &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) ФорматированныйТекст = ТекущийОбъект.Содержание.Получить(); + + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + КонецПроцедуры &НаСервере diff --git a/SSL/src/Catalogs/Заметки/ManagerModule.bsl b/SSL/src/Catalogs/Заметки/ManagerModule.bsl index d097d8c2d..9caa07f80 100644 --- a/SSL/src/Catalogs/Заметки/ManagerModule.bsl +++ b/SSL/src/Catalogs/Заметки/ManagerModule.bsl @@ -23,6 +23,20 @@ // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтениеИзменение + |ГДЕ + | ЭтоАвторизованныйПользователь(Автор)"; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + #КонецОбласти #КонецОбласти diff --git a/SSL/src/Catalogs/ЗапланированноеВзаимодействиеПрисоединенныеФайлы/ManagerModule.bsl b/SSL/src/Catalogs/ЗапланированноеВзаимодействиеПрисоединенныеФайлы/ManagerModule.bsl index 3b70fa857..abfeb8fe5 100644 --- a/SSL/src/Catalogs/ЗапланированноеВзаимодействиеПрисоединенныеФайлы/ManagerModule.bsl +++ b/SSL/src/Catalogs/ЗапланированноеВзаимодействиеПрисоединенныеФайлы/ManagerModule.bsl @@ -19,6 +19,24 @@ // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтение + |ГДЕ + | ЧтениеОбъектаРазрешено(ВладелецФайла) + |; + |РазрешитьИзменениеЕслиРазрешеноЧтение + |ГДЕ + | ИзменениеОбъектаРазрешено(ВладелецФайла)"; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + #КонецОбласти #КонецОбласти diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Form.form b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Form.form index 4ecaa0680..2d1d9b43e 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Form.form +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Form.form @@ -190,6 +190,10 @@ AfterWriteAtServer ПослеЗаписиНаСервере + + OnReadAtServer + ПриЧтенииНаСервере + Folders diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Module.bsl index a0fa9eb9c..0d7df5daa 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Module.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Module.bsl @@ -29,6 +29,18 @@ КонецПроцедуры +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Form.form index 59012d5cb..96f9dff1a 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Form.form @@ -270,5 +270,9 @@ AfterWriteAtServer ПослеЗаписиНаСервере + + OnReadAtServer + ПриЧтенииНаСервере + diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Module.bsl index bdf51f9d1..9d7a5fc4a 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Module.bsl @@ -68,6 +68,18 @@ КонецПроцедуры +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ManagerModule.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ManagerModule.bsl index b12745f8b..5d2001588 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ManagerModule.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ManagerModule.bsl @@ -23,6 +23,21 @@ // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтениеИзменение + |ГДЕ + | ЗначениеРазрешено(Владелец) + | ИЛИ НЕ Владелец.ЭтоДополнительноеСведение"; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + #КонецОбласти #КонецОбласти diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Form.form index 00bb4e284..b9ac1d488 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Form.form @@ -264,5 +264,9 @@ AfterWriteAtServer ПослеЗаписиНаСервере + + OnReadAtServer + ПриЧтенииНаСервере + diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Module.bsl index ecae78cce..794063920 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Module.bsl @@ -68,6 +68,18 @@ КонецПроцедуры +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ManagerModule.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ManagerModule.bsl index b12745f8b..5d2001588 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ManagerModule.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ManagerModule.bsl @@ -23,6 +23,21 @@ // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтениеИзменение + |ГДЕ + | ЗначениеРазрешено(Владелец) + | ИЛИ НЕ Владелец.ЭтоДополнительноеСведение"; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + #КонецОбласти #КонецОбласти diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl index 0582161d8..4ec4c65fb 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl @@ -87,7 +87,7 @@ Попытка Обновлен = СтандартныеПодсистемыСервер.ПараметрРаботыПрограммы( - "СтандартныеПодсистемы.ИдентификаторыОбъектовМетаданных"); + "СтандартныеПодсистемы.БазоваяФункциональность.ИдентификаторыОбъектовМетаданных"); Исключение Если Обновить Тогда ВызватьИсключение; @@ -104,8 +104,7 @@ КонецЕсли; Если ОбъектыРасширений - И ЗначениеЗаполнено(ПараметрыСеанса.ПодключенныеРасширения) - И Справочники.ВерсииРасширений.УстановленныеРасширенияДоступны() Тогда + И ЗначениеЗаполнено(ПараметрыСеанса.ПодключенныеРасширения) Тогда Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда Если Обновить Тогда @@ -332,6 +331,42 @@ КонецПроцедуры +// См. ОбщегоНазначения.ИдентификаторыОбъектовМетаданных. +Функция ИдентификаторыОбъектовМетаданных(ПолныеИменаОбъектовМетаданных, КромеНесуществующих = Ложь, ОдинЭлемент = Ложь) Экспорт + + УстановитьОтключениеБезопасногоРежима(Истина); + УстановитьПривилегированныйРежим(Истина); + ИдентификаторыПоПолнымИменам = КэшИдентификаторов().ИдентификаторыПоПолнымИменам; + УстановитьПривилегированныйРежим(Ложь); + УстановитьОтключениеБезопасногоРежима(Ложь); + + Результат = Новый Соответствие; + ПолныеИменаБезКэша = Новый Массив; + Для Каждого ПолноеИмя Из ПолныеИменаОбъектовМетаданных Цикл + Идентификатор = ИдентификаторыПоПолнымИменам.Получить(ПолноеИмя); + Если Идентификатор = Неопределено Тогда + ПолныеИменаБезКэша.Добавить(ПолноеИмя); + Иначе + Результат.Вставить(ПолноеИмя, Идентификатор); + КонецЕсли; + КонецЦикла; + + Если ПолныеИменаБезКэша.Количество() = 0 Тогда + Возврат Результат; + КонецЕсли; + + Идентификаторы = ИдентификаторыОбъектовМетаданныхСПопыткойПовтора(ПолныеИменаБезКэша, + КромеНесуществующих, ОдинЭлемент); + + Для Каждого КлючИЗначение Из Идентификаторы Цикл + Результат.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + ИдентификаторыПоПолнымИменам.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + КонецЦикла; + + Возврат Результат; + +КонецФункции + // Возвращает объект метаданных по переданному идентификатору. // // Параметры: @@ -361,7 +396,7 @@ Идентификаторы = Новый Массив; Идентификаторы.Добавить(Идентификатор); - ОбъектыМетаданных = ОбъектыМетаданныхПоИдентификаторамСПопыткойПовтора(Идентификаторы, КромеНесуществующихИНедоступных); + ОбъектыМетаданных = ОбъектыМетаданныхПоИдентификаторам(Идентификаторы, КромеНесуществующихИНедоступных); Возврат ОбъектыМетаданных.Получить(Идентификатор); @@ -394,7 +429,53 @@ // Функция ОбъектыМетаданныхПоИдентификаторам(Идентификаторы, КромеНесуществующихИНедоступных = Ложь) Экспорт - Возврат ОбъектыМетаданныхПоИдентификаторамСПопыткойПовтора(Идентификаторы, КромеНесуществующихИНедоступных); + УстановитьОтключениеБезопасногоРежима(Истина); + УстановитьПривилегированныйРежим(Истина); + ОписаниеОбъектовМетаданныхПоИдентификаторам = КэшИдентификаторов().ОписаниеОбъектовМетаданныхПоИдентификаторам; + УстановитьПривилегированныйРежим(Ложь); + УстановитьОтключениеБезопасногоРежима(Ложь); + + Результат = Новый Соответствие; + ИдентификаторыБезКэша = Новый Массив; + Для Каждого Идентификатор Из Идентификаторы Цикл + Описание = ОписаниеОбъектовМетаданныхПоИдентификаторам.Получить(Идентификатор); + + Если Описание = Неопределено + Или Не КромеНесуществующихИНедоступных + И Описание.Ключ = Неопределено Тогда + + ИдентификаторыБезКэша.Добавить(Идентификатор); + + ИначеЕсли Описание.Ключ = Неопределено Тогда + Результат.Вставить(Идентификатор, Описание.Объект); + + ИначеЕсли ТипЗнч(Описание.Ключ) = Тип("Тип") Тогда + Результат.Вставить(Идентификатор, Метаданные.НайтиПоТипу(Описание.Ключ)); + Иначе + Результат.Вставить(Идентификатор, Метаданные.НайтиПоПолномуИмени(Описание.Ключ)); + КонецЕсли; + КонецЦикла; + + Если ИдентификаторыБезКэша.Количество() = 0 Тогда + Возврат Результат; + КонецЕсли; + + ОбъектыМетаданныхПоИдентификаторам = ОбъектыМетаданныхПоИдентификаторамСПопыткойПовтора(ИдентификаторыБезКэша, + КромеНесуществующихИНедоступных); + + Для Каждого КлючИЗначение Из ОбъектыМетаданныхПоИдентификаторам Цикл + ОписаниеОбъектаМетаданных = КлючИЗначение.Значение; + Если ТипЗнч(ОписаниеОбъектаМетаданных) = Тип("Структура") Тогда + Результат.Вставить(КлючИЗначение.Ключ, ОписаниеОбъектаМетаданных.Объект); + ОписаниеОбъектаМетаданных.Объект = Неопределено; + Иначе + Результат.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + ОписаниеОбъектаМетаданных = Новый Структура("Объект, Ключ", КлючИЗначение.Значение) + КонецЕсли; + ОписаниеОбъектовМетаданныхПоИдентификаторам.Вставить(КлючИЗначение.Ключ, ОписаниеОбъектаМетаданных); + КонецЦикла; + + Возврат Результат; КонецФункции @@ -540,15 +621,15 @@ Если ОбъектыРасширений И ЗначениеЗаполнено(ПараметрыСеанса.ПодключенныеРасширения) - И Не Справочники.ВерсииРасширений.УстановленныеРасширенияДоступны() Тогда + И Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда ТекстОшибки = НСтр("ru = 'Невозможно обновить идентификаторы объектов расширений |в сеансе неразделенного пользователя, так как |расширения для разделенных пользователей не подключены.'"); - ВызватьИсключениеПоОшибке(Истина, ТекстОшибки); - Возврат; + ВызватьИсключениеПоОшибке(Истина, + ОписаниеОшибкиИдентификаторыОбъектовРасширенийНедоступныВНеразделенномРежиме()); КонецЕсли; ПроверкаИспользования(ОбъектыРасширений); @@ -569,7 +650,7 @@ Если Не ОбъектыРасширений Тогда СтандартныеПодсистемыСервер.ОбновитьПараметрРаботыПрограммы( - "СтандартныеПодсистемы.ИдентификаторыОбъектовМетаданных", Истина); + "СтандартныеПодсистемы.БазоваяФункциональность.ИдентификаторыОбъектовМетаданных", Истина); КонецЕсли; КонецПроцедуры @@ -609,26 +690,10 @@ ТипОписанияОбъектаМетаданных); КонецЕсли; - Возврат СтандартныеПодсистемыПовтИсп.ИдентификаторОбъектаМетаданныхПоПолномуИмени(ПолноеИмяОбъектаМетаданных); - -КонецФункции - -// Продолжение процедуры ИдентификаторОбъектаМетаданных. -Функция ИдентификаторОбъектаМетаданныхПоПолномуИмени(ПолноеИмяОбъектаМетаданных) Экспорт - Массив = Новый Массив; Массив.Добавить(ПолноеИмяОбъектаМетаданных); - Идентификаторы = ИдентификаторыОбъектовМетаданныхСПопыткойПовтора(Массив, Истина); - - Возврат Идентификаторы.Получить(ПолноеИмяОбъектаМетаданных); - -КонецФункции - -// См. ОбщегоНазначения.ИдентификаторыОбъектовМетаданных. -Функция ИдентификаторыОбъектовМетаданных(ПолныеИменаОбъектовМетаданных) Экспорт - - Возврат ИдентификаторыОбъектовМетаданныхСПопыткойПовтора(ПолныеИменаОбъектовМетаданных); + Возврат ИдентификаторыОбъектовМетаданных(Массив, , Истина).Получить(ПолноеИмяОбъектаМетаданных); КонецФункции @@ -890,6 +955,7 @@ Строка.Синоним = НСтр("ru = 'Планы обмена'"); Строка.ИмяВЕдЧисле = "ПланОбмена"; Строка.СинонимВЕдЧисле = НСтр("ru = 'План обмена'"); + Строка.ОбъектыРасширений = Истина; // Справочники Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); @@ -898,6 +964,7 @@ Строка.Синоним = НСтр("ru = 'Справочники'"); Строка.ИмяВЕдЧисле = "Справочник"; Строка.СинонимВЕдЧисле = НСтр("ru = 'Справочник'"); + Строка.ОбъектыРасширений = Истина; // Документы Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); @@ -906,6 +973,7 @@ Строка.Синоним = НСтр("ru = 'Документы'"); Строка.ИмяВЕдЧисле = "Документ"; Строка.СинонимВЕдЧисле = НСтр("ru = 'Документ'"); + Строка.ОбъектыРасширений = Истина; // ЖурналыДокументов Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); @@ -967,6 +1035,7 @@ Строка.Синоним = НСтр("ru = 'Регистры сведений'"); Строка.ИмяВЕдЧисле = "РегистрСведений"; Строка.СинонимВЕдЧисле = НСтр("ru = 'Регистр сведений'"); + Строка.ОбъектыРасширений = Истина; // РегистрыНакопления Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); @@ -1480,7 +1549,7 @@ ИЛИ Свойства.ЗначениеПустойСсылки <> СвойстваОбъекта.ЗначениеПустойСсылки ИЛИ Свойства.ИмяРасширения <> СвойстваОбъекта.ИмяРасширения ИЛИ Свойства.ХешСуммаРасширения <> СвойстваОбъекта.ХешСуммаРасширения - ИЛИ Свойства.ИмяПредопределенныхДанных <> "" + ИЛИ Свойства.ИмяПредопределенныхДанных <> СвойстваОбъекта.ИмяПредопределенныхДанных ИЛИ Свойства.ПометкаУдаления ИЛИ КлючОбъектаМетаданных = Неопределено ИЛИ СвойстваОбъекта.БезКлючаОбъектаМетаданных @@ -1496,7 +1565,7 @@ // Установка новых свойств идентификатора объекта метаданных. ЗаполнитьЗначенияСвойств(Свойства, СвойстваОбъекта); - Свойства.ИмяПредопределенныхДанных = ""; + Свойства.ИмяПредопределенныхДанных = СвойстваОбъекта.ИмяПредопределенныхДанных; Если КлючОбъектаМетаданных = Неопределено ИЛИ СвойстваОбъекта.БезКлючаОбъектаМетаданных @@ -1912,6 +1981,7 @@ СвойстваОбъектовМетаданных.Колонки.Добавить("ПорядокКоллекции", Новый ОписаниеТипов("Число")); СвойстваОбъектовМетаданных.Колонки.Добавить("Родитель", Новый ОписаниеТипов(МассивТиповРодителя)); СвойстваОбъектовМетаданных.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(150))); + СвойстваОбъектовМетаданных.Колонки.Добавить("ИмяПредопределенныхДанных", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(255))); СвойстваОбъектовМетаданных.Колонки.Добавить("Синоним", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(255))); СвойстваОбъектовМетаданных.Колонки.Добавить("ПолныйСиноним", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(510))); СвойстваОбъектовМетаданных.Колонки.Добавить("БезДанных", Новый ОписаниеТипов("Булево")); @@ -1925,16 +1995,22 @@ СвойстваКоллекций = СтандартныеПодсистемыПовтИсп.СвойстваКоллекцийОбъектовМетаданных(ОбъектыРасширений); КонецЕсли; - Если ОбъектыРасширений И Не ЗначениеЗаполнено(ПараметрыСеанса.ПодключенныеРасширения) Тогда - Возврат СвойстваОбъектовМетаданных; - КонецЕсли; + ИменаПредопределенныхДанных = ?(ОбъектыРасширений, + Метаданные.Справочники.ИдентификаторыОбъектовРасширений, + Метаданные.Справочники.ИдентификаторыОбъектовМетаданных).ПолучитьИменаПредопределенных(); - Для каждого СвойстваКоллекции Из СвойстваКоллекций Цикл - ДобавитьСвойстваОбъектовМетаданных(Метаданные[СвойстваКоллекции.Имя], СвойстваКоллекции, - СвойстваОбъектовМетаданных, ОбъектыРасширений); + ИменаПредопределенных = Новый Соответствие; + Для Каждого ИмяПредопределенного Из ИменаПредопределенныхДанных Цикл + ИменаПредопределенных.Вставить(ИмяПредопределенного, Ложь); КонецЦикла; - СвойстваОбъектовМетаданных.Индексы.Добавить("ПолноеИмя"); + Если Не ОбъектыРасширений Или ЗначениеЗаполнено(ПараметрыСеанса.ПодключенныеРасширения) Тогда + Для каждого СвойстваКоллекции Из СвойстваКоллекций Цикл + ДобавитьСвойстваОбъектовМетаданных(Метаданные[СвойстваКоллекции.Имя], СвойстваКоллекции, + СвойстваОбъектовМетаданных, ОбъектыРасширений, ИменаПредопределенных); + КонецЦикла; + СвойстваОбъектовМетаданных.Индексы.Добавить("ПолноеИмя"); + КонецЕсли; Возврат СвойстваОбъектовМетаданных; @@ -1944,10 +2020,11 @@ Знач СвойстваКоллекции, Знач СвойстваОбъектовМетаданных, Знач ОбъектыРасширений, + Знач ИменаПредопределенных, Знач ПолноеИмяРодителя = "", Знач ПолныйСинонимРодителя = "") - Для каждого ОбъектМетаданных Из КоллекцияОбъектовМетаданных Цикл + Для Каждого ОбъектМетаданных Из КоллекцияОбъектовМетаданных Цикл ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); Расширение = ОбъектМетаданных.РасширениеКонфигурации(); @@ -1961,7 +2038,8 @@ МетаданныеНайтиПоПолномуИмени(ПолноеИмя); КонецЕсли; - Если НЕ СвойстваКоллекции.БезДанных + Если Не СвойстваКоллекции.БезДанных + И Не ОбъектыРасширений И СтрНайти(СвойстваКоллекции.ИмяВЕдЧисле, "Регистр") = 0 И СтрНайти(СвойстваКоллекции.ИмяВЕдЧисле, "Константа") = 0 Тогда @@ -1997,9 +2075,15 @@ СвойстваКоллекции, СвойстваОбъектовМетаданных, ОбъектыРасширений, + ИменаПредопределенных, ПолноеИмя, НоваяСтрока.ПолныйСиноним + ". "); КонецЕсли; + ИмяПредопределенного = СтрЗаменить(ПолноеИмя, ".", ""); + Если ИменаПредопределенных.Получить(ИмяПредопределенного) <> Неопределено Тогда + НоваяСтрока.ИмяПредопределенныхДанных = ИмяПредопределенного; + ИменаПредопределенных.Вставить(ИмяПредопределенного, Истина); + КонецЕсли; КонецЦикла; КонецПроцедуры @@ -2476,14 +2560,14 @@ КонецФункции // Для функций ИдентификаторОбъектаМетаданныхПоПолномуИмени, ИдентификаторыОбъектовМетаданных. -Функция ИдентификаторыОбъектовМетаданныхСПопыткойПовтора(ПолныеИменаОбъектовМетаданных, ОдинЭлемент = Ложь) +Функция ИдентификаторыОбъектовМетаданныхСПопыткойПовтора(ПолныеИменаОбъектовМетаданных, КромеНесуществующих, ОдинЭлемент) СтандартныеПодсистемыПовтИсп.ИдентификаторыОбъектовМетаданныхПроверкаИспользования(Истина, ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных()); Попытка Идентификаторы = ИдентификаторыОбъектовМетаданныхБезПопыткиПовтора( - ПолныеИменаОбъектовМетаданных, ОдинЭлемент); + ПолныеИменаОбъектовМетаданных, КромеНесуществующих, ОдинЭлемент); Исключение Если Не ОбщегоНазначения.РазделениеВключено() Или Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда @@ -2498,7 +2582,7 @@ Если Идентификаторы = Неопределено Тогда ОбновитьДанныеСправочника(); Идентификаторы = ИдентификаторыОбъектовМетаданныхБезПопыткиПовтора( - ПолныеИменаОбъектовМетаданных, ОдинЭлемент); + ПолныеИменаОбъектовМетаданных, КромеНесуществующих, ОдинЭлемент); КонецЕсли; Возврат Идентификаторы; @@ -2506,13 +2590,13 @@ КонецФункции // Для функций ИдентификаторыОбъектовМетаданных. -Функция ИдентификаторыОбъектовМетаданныхБезПопыткиПовтора(ПолныеИменаОбъектовМетаданных, ОдинЭлемент) +Функция ИдентификаторыОбъектовМетаданныхБезПопыткиПовтора(ПолныеИменаОбъектовМетаданных, КромеНесуществующих, ОдинЭлемент) УстановитьПривилегированныйРежим(Истина); ДоступныИдентификаторыОбъектовРасширений = ЗначениеЗаполнено(ПараметрыСеанса.ПодключенныеРасширения) - И Справочники.ВерсииРасширений.УстановленныеРасширенияДоступны(); + И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных(); Запрос = Новый Запрос; Запрос.УстановитьПараметр("ПолныеИмена", ПолныеИменаОбъектовМетаданных); @@ -2553,6 +2637,7 @@ Выгрузка.Индексы.Добавить("ПолноеИмя"); Ошибки = Новый Массив; + ДобавитьУточнениеОшибкиПараметровРаботыПрограммыДляРазработчика = Ложь; ИдентификаторыИзКлючей = Неопределено; @@ -2565,6 +2650,9 @@ // Если идентификатор не найден по полному имени, возможно что полное имя задано с ошибкой. ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъектаМетаданных); Если ОбъектМетаданных = Неопределено Тогда + Если КромеНесуществующих Тогда + Продолжить; + КонецЕсли; ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Объект метаданных не найден по полному имени: |""%1"".'"), @@ -2602,6 +2690,19 @@ Продолжить; КонецЕсли; + Расширение = ОбъектМетаданных.РасширениеКонфигурации(); + Если Расширение <> Неопределено + И Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Идентификаторы объектов метаданных расширений не поддерживаются в неразделенном режиме. + |Невозможно вернуть идентификатор объекта метаданных ""%1"" + |расширения ""%2"" версии ""%3"".'"), + ПолноеИмяОбъектаМетаданных, Расширение.Имя, Расширение.Версия); + Ошибки.Добавить(ОписаниеОшибки); + Продолжить; + КонецЕсли; + Если СтандартныеПодсистемыСервер.ВерсияПрограммыОбновленаДинамически() Тогда Если ИдентификаторыИзКлючей = Неопределено Тогда ИдентификаторыИзКлючей = ИдентификаторыИзКлючей(); @@ -2614,14 +2715,13 @@ Продолжить; КонецЕсли; - ШаблонОшибки = ?(ДоступныИдентификаторыОбъектовРасширений, + ШаблонОшибки = ?(Расширение <> Неопределено, НСтр("ru = 'Для объекта метаданных ""%1"" - |не найден идентификатор в справочнике ""Идентификаторы объектов метаданных"" и - |регистре сведений ""Идентификаторы объектов версий расширений"".'"), + |не найден идентификатор в регистре сведений ""Идентификаторы объектов версий расширений"".'"), НСтр("ru = 'Для объекта метаданных ""%1"" |не найден идентификатор в справочнике ""Идентификаторы объектов метаданных"".'")); - ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, ПолноеИмяОбъектаМетаданных) - + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(); + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, ПолноеИмяОбъектаМетаданных); + ДобавитьУточнениеОшибкиПараметровРаботыПрограммыДляРазработчика = Истина; Ошибки.Добавить(ОписаниеОшибки); Продолжить; @@ -2633,8 +2733,8 @@ |регистре сведений ""Идентификаторы объектов версий расширений"".'"), НСтр("ru = 'Для объекта метаданных ""%1"" |найдено несколько идентификаторов в справочнике ""Идентификаторы объектов метаданных"".'")); - ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, ПолноеИмяОбъектаМетаданных) - + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(); + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, ПолноеИмяОбъектаМетаданных); + ДобавитьУточнениеОшибкиПараметровРаботыПрограммыДляРазработчика = Истина; Ошибки.Добавить(ОписаниеОшибки); Продолжить; @@ -2660,6 +2760,7 @@ ПолноеИмяОбъектаМетаданных, НазваниеСправочника, РезультатПроверки.ОбъектМетаданных); КонецЕсли; + ДобавитьУточнениеОшибкиПараметровРаботыПрограммыДляРазработчика = Истина; Ошибки.Добавить(ОписаниеОшибки); Продолжить; КонецЕсли; @@ -2696,8 +2797,8 @@ КонецЕсли; КонецЦикла; - ТекстВсехОшибок = ТекстВсехОшибок - + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(); + ТекстВсехОшибок = ТекстВсехОшибок + ?(ДобавитьУточнениеОшибкиПараметровРаботыПрограммыДляРазработчика, + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(), ""); ВызватьИсключение ЗаголовокОшибки + Разделитель + ТекстВсехОшибок; КонецЕсли; @@ -2990,13 +3091,39 @@ + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(); КонецЕсли; - ОбъектыМетаданныхИдентификаторов.Вставить(Свойства.Ссылка, РезультатПроверки.ОбъектМетаданных); + ОписаниеОбъектаМетаданных = Новый Структура("Объект, Ключ", РезультатПроверки.ОбъектМетаданных); + Если РезультатПроверки.КлючОбъектаМетаданных <> Неопределено Тогда + ОписаниеОбъектаМетаданных.Ключ = РезультатПроверки.КлючОбъектаМетаданных; + Иначе + ОписаниеОбъектаМетаданных.Ключ = Свойства.ПолноеИмя; + КонецЕсли; + ОбъектыМетаданныхИдентификаторов.Вставить(Свойства.Ссылка, ОписаниеОбъектаМетаданных); КонецЦикла; Возврат ОбъектыМетаданныхИдентификаторов; КонецФункции +// Для функций ОбъектыМетаданныхПоИдентификаторам, ИдентификаторыОбъектовМетаданных. +Функция КэшИдентификаторов() + + КлючДанныхПовторногоИспользования = Строка(ПараметрыСеанса.КлючДанныхПовторногоИспользования); + + Возврат СтандартныеПодсистемыПовтИсп.КэшИдентификаторовОбъектовМетаданных(КлючДанныхПовторногоИспользования); + +КонецФункции + +// Для вызова из СтандартныеПодсистемыПовтИсп.КэшИдентификаторовОбъектовМетаданных. +Функция КэшИдентификаторовОбъектовМетаданных(КлючДанныхПовторногоИспользования) Экспорт + + Хранилище = Новый Структура; + Хранилище.Вставить("ИдентификаторыПоПолнымИменам", Новый Соответствие); + Хранилище.Вставить("ОписаниеОбъектовМетаданныхПоИдентификаторам", Новый Соответствие); + + Возврат Новый ФиксированнаяСтруктура(Хранилище); + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции замены идентификатора в базе данных. diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ИдентификаторыОбъектовМетаданных.mdo b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ИдентификаторыОбъектовМетаданных.mdo index ea7f4d77c..16dd4172b 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ИдентификаторыОбъектовМетаданных.mdo +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ИдентификаторыОбъектовМетаданных.mdo @@ -135,6 +135,51 @@ String Variable AsDescription + + + РегистрСведенийНастройкиВариантовОтчетов + + + + + + РегистрСведенийДанныеБизнесПроцессов + + + + + + РегистрСведенийДополнительныеСведения + + + + + + РегистрСведенийИсполнителиЗадач + + + + + + РегистрСведенийНапоминанияПользователя + + + + + + РегистрСведенийНастройкиУчетныхЗаписейЭлектроннойПочты + + + + + + РегистрСведенийПредметыПапкиВзаимодействий + + + + + + DontAutoUpdate InDialog BothWays Catalog.ИдентификаторыОбъектовМетаданных.Form.ФормаЭлемента diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/ИдентификаторыОбъектовРасширений.mdo b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/ИдентификаторыОбъектовРасширений.mdo index f97f15223..70f7d0b22 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/ИдентификаторыОбъектовРасширений.mdo +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/ИдентификаторыОбъектовРасширений.mdo @@ -135,7 +135,7 @@ String Variable AsDescription - AutoUpdate + DontAutoUpdate InDialog BothWays Catalog.ИдентификаторыОбъектовРасширений.Form.ФормаЭлемента diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Form.form index ba54e119d..74873aa30 100644 --- a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Form.form @@ -72,6 +72,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -211,6 +212,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -352,6 +354,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -587,6 +590,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -666,6 +670,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1229,6 +1234,7 @@ UsualGroup + HorizontalIfPossible Auto WeakSeparation true @@ -1351,6 +1357,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1379,6 +1386,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1482,6 +1490,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1702,6 +1711,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1766,6 +1776,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1946,6 +1957,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2065,6 +2077,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2170,6 +2183,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl index bbeebffc6..6ce1b4a91 100644 --- a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl @@ -676,7 +676,7 @@ ИнформационныйТекст = НСтр("ru = 'График работы заполнен до %1'"); Форма.ЗаполненностьИнформационныйТекст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ИнформационныйТекст, Формат(Форма.ДатаЗаполненности, "ДЛФ=D")); Иначе - #Если ВебКлиент Или ТонкийКлиент Тогда + #Если ВебКлиент Или ТонкийКлиент ИЛИ МобильныйКлиент Тогда ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса(); #Иначе ТекущаяДата = ТекущаяДатаСеанса(); diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/КлючиДоступа/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss similarity index 100% rename from SSL/src/InformationRegisters/АдресныеОбъекты/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 new file mode 100644 index 000000000..a34db42df --- /dev/null +++ b/SSL/src/Catalogs/КлючиДоступа/Forms/ФормаСписка/Form.form @@ -0,0 +1,484 @@ + + + + ГруппаПользовательскихНастроек + 1 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + ГруппаПользовательскихНастроекРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + КоманднаяПанель + 19 + + ФормаВключитьВозможностьРедактирования + 23 + true + true + + true + + + ФормаВключитьВозможностьРедактированияExtendedTooltip + 24 + Label + true + true + + Left + + + Form.Command.ВключитьВозможностьРедактирования + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + КоманднаяПанельРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + CommandBar + + Left + Form + + + + Список + 3 + + <key>ru</key> + <value>Список</value> + + true + true + + true + + + Список + + true + None + + СписокНаименование + 16 + true + true + + true + + + Список.Description + + true + + СписокНаименованиеРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + СписокНаименованиеКонтекстноеМеню + 17 + true + + LabelField + Enter + true + Left + true + + true + true + + + + СписокСписок + 25 + true + true + + true + + + Список.Список + + + СписокСписокРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + + СписокСписокКонтекстноеМеню + 26 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ДляВнешнихПользователей + 28 + + <key>ru</key> + <value>ВП</value> + + true + true + + true + + + Список.ДляВнешнихПользователей + + + ДляВнешнихПользователейРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + + ДляВнешнихПользователейКонтекстноеМеню + 29 + true + + CheckBoxField + Enter + true + Left + true + + + + Хеш + 31 + true + true + + true + + + Список.Хеш + + + ХешРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + + ХешКонтекстноеМеню + 32 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Ссылка + 34 + true + true + + + Список.Ref + + + СсылкаРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 35 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + true + true + true + true + true + true + MultiRow +
        true
        + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + ГруппаПользовательскихНастроек + +
        + + ФормаКоманднаяПанель + -1 + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + Список + 1 + + DynamicList + + + true + + + true + +
        true
        + + Catalog.КлючиДоступа + true + true + true + true + +
        + + ВключитьВозможностьРедактирования + + <key>ru</key> + <value>Включить возможность редактирования</value> + + 1 + + ru + Включить возможность редактирования только для целей поиска неисправности (требуется углубленное понимание работы механизма) + + + true + + + + ВключитьВозможностьРедактирования + + + DontUse + Auto + + + + + + +
        diff --git a/SSL/src/Catalogs/КлючиДоступа/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/КлючиДоступа/Forms/ФормаСписка/Module.bsl new file mode 100644 index 000000000..9da34062b --- /dev/null +++ b/SSL/src/Catalogs/КлючиДоступа/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,32 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + ТолькоПросмотр = Истина; + + Если Параметры.РежимВыбора Тогда + РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; + Иначе + Элементы.Список.РежимВыбора = Ложь; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВключитьВозможностьРедактирования(Команда) + + ТолькоПросмотр = Ложь; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/КлючиДоступа/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/КлючиДоступа/Forms/ФормаЭлемента/Form.form new file mode 100644 index 000000000..84754e9c6 --- /dev/null +++ b/SSL/src/Catalogs/КлючиДоступа/Forms/ФормаЭлемента/Form.form @@ -0,0 +1,2683 @@ + + + + Наименование + 1 + true + true + + true + + + Объект.Description + + + НаименованиеРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 2 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ГруппаСписок + 200 + + Список + 4 + true + true + + true + + + Объект.Список + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 5 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ДляВнешнихПользователей + 7 + true + true + + true + + + Объект.ДляВнешнихПользователей + + Right + + ДляВнешнихПользователейРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + ДляВнешнихПользователейКонтекстноеМеню + 8 + true + + CheckBoxField + Auto + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Список</value> + + + ГруппаСписокРасширеннаяПодсказка + 201 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + Хеш + 13 + true + true + + true + + + Объект.Хеш + + + ХешРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + ХешКонтекстноеМеню + 14 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ГруппаСоставПолей + 204 + + СоставПолей + 10 + true + true + + true + + + Объект.СоставПолей + + + СоставПолейРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СоставПолейКонтекстноеМеню + 11 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + РасшифровкаСоставаПолей + 206 + true + true + + true + + + РасшифровкаСоставаПолей + + None + + РасшифровкаСоставаПолейРасширеннаяПодсказка + 208 + Label + true + true + + Left + + + + РасшифровкаСоставаПолейКонтекстноеМеню + 207 + true + + LabelField + Center + Enter + true + Left + true + + 2 + true + + + true + true + + true + + + <key>ru</key> + <value>Состав полей</value> + + + ГруппаСоставПолейРасширеннаяПодсказка + 205 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Center + Auto + true + true + Auto + Auto + + + + Страницы + 31 + + ГруппаШапка + 198 + + Значение1 + 16 + true + true + + true + + + Объект.Значение1 + + + Значение1РасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + Значение1КонтекстноеМеню + 17 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + Значение2 + 19 + true + true + + true + + + Объект.Значение2 + + + Значение2РасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + Значение2КонтекстноеМеню + 20 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + Значение3 + 22 + true + true + + true + + + Объект.Значение3 + + + Значение3РасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + Значение3КонтекстноеМеню + 23 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + Значение4 + 25 + true + true + + true + + + Объект.Значение4 + + + Значение4РасширеннаяПодсказка + 27 + Label + true + true + + Left + + + + Значение4КонтекстноеМеню + 26 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + Значение5 + 28 + true + true + + true + + + Объект.Значение5 + + + Значение5РасширеннаяПодсказка + 30 + Label + true + true + + Left + + + + Значение5КонтекстноеМеню + 29 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Шапка</value> + + + ГруппаШапкаРасширеннаяПодсказка + 199 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + ГруппаШапкаДополнительно + 33 + + Шапка + 35 + + <key>ru</key> + <value>Шапка</value> + + true + true + + true + + + Объект.Шапка + + None + + ШапкаНомерСтроки + 48 + true + true + + true + + + Объект.Шапка.LineNumber + + + ШапкаНомерСтрокиРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + + ШапкаНомерСтрокиКонтекстноеМеню + 49 + true + + LabelField + Auto + true + Left + true + + true + true + + + + ШапкаЗначение6 + 51 + true + true + + true + + + Объект.Шапка.Значение6 + + + ШапкаЗначение6РасширеннаяПодсказка + 53 + Label + true + true + + Left + + + + ШапкаЗначение6КонтекстноеМеню + 52 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ШапкаЗначение7 + 54 + true + true + + true + + + Объект.Шапка.Значение7 + + + ШапкаЗначение7РасширеннаяПодсказка + 56 + Label + true + true + + Left + + + + ШапкаЗначение7КонтекстноеМеню + 55 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ШапкаЗначение8 + 57 + true + true + + true + + + Объект.Шапка.Значение8 + + + ШапкаЗначение8РасширеннаяПодсказка + 59 + Label + true + true + + Left + + + + ШапкаЗначение8КонтекстноеМеню + 58 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ШапкаЗначение9 + 60 + true + true + + true + + + Объект.Шапка.Значение9 + + + ШапкаЗначение9РасширеннаяПодсказка + 62 + Label + true + true + + Left + + + + ШапкаЗначение9КонтекстноеМеню + 61 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ШапкаЗначение10 + 63 + true + true + + true + + + Объект.Шапка.Значение10 + + + ШапкаЗначение10РасширеннаяПодсказка + 65 + Label + true + true + + Left + + + + ШапкаЗначение10КонтекстноеМеню + 64 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ШапкаКоманднаяПанель + 37 + Left + true + + + ШапкаСтрокаПоиска + 39 + + ШапкаСтрокаПоискаРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + + ШапкаСтрокаПоискаКонтекстноеМеню + 40 + true + + Шапка + + true + + + + ШапкаСостояниеПросмотра + 42 + + ШапкаСостояниеПросмотраРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + + ШапкаСостояниеПросмотраКонтекстноеМеню + 43 + true + + ViewStatusAddition + Шапка + + true + + + + ШапкаУправлениеПоиском + 45 + + ШапкаУправлениеПоискомРасширеннаяПодсказка + 47 + Label + true + true + + Left + + + + ШапкаУправлениеПоискомКонтекстноеМеню + 46 + true + + SearchControlAddition + Шапка + + true + + + + ШапкаРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + + ШапкаКонтекстноеМеню + 36 + true + + true + true + true + true + true + MultiRow +
        true
        + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + true + +
        + true + true + + true + + + <key>ru</key> + <value>Шапка (дополнительно)</value> + + + ГруппаШапкаДополнительноРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + Page + + Vertical + auto + false + +
        + + ГруппаТабличнаяЧасть1 + 66 + + ТабличнаяЧасть1 + 68 + + <key>ru</key> + <value>Табличная часть 1</value> + + true + true + + true + + + Объект.ТабличнаяЧасть1 + + None + + ТабличнаяЧасть1НомерСтроки + 81 + true + true + + true + + + Объект.ТабличнаяЧасть1.LineNumber + + + ТабличнаяЧасть1НомерСтрокиРасширеннаяПодсказка + 83 + Label + true + true + + Left + + + + ТабличнаяЧасть1НомерСтрокиКонтекстноеМеню + 82 + true + + LabelField + Auto + true + Left + true + + true + true + + + + ТабличнаяЧасть1Значение1 + 84 + true + true + + true + + + Объект.ТабличнаяЧасть1.Значение1 + + + ТабличнаяЧасть1Значение1РасширеннаяПодсказка + 86 + Label + true + true + + Left + + + + ТабличнаяЧасть1Значение1КонтекстноеМеню + 85 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТабличнаяЧасть1Значение2 + 87 + true + true + + true + + + Объект.ТабличнаяЧасть1.Значение2 + + + ТабличнаяЧасть1Значение2РасширеннаяПодсказка + 89 + Label + true + true + + Left + + + + ТабличнаяЧасть1Значение2КонтекстноеМеню + 88 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТабличнаяЧасть1Значение3 + 90 + true + true + + true + + + Объект.ТабличнаяЧасть1.Значение3 + + + ТабличнаяЧасть1Значение3РасширеннаяПодсказка + 92 + Label + true + true + + Left + + + + ТабличнаяЧасть1Значение3КонтекстноеМеню + 91 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТабличнаяЧасть1Значение4 + 93 + true + true + + true + + + Объект.ТабличнаяЧасть1.Значение4 + + + ТабличнаяЧасть1Значение4РасширеннаяПодсказка + 95 + Label + true + true + + Left + + + + ТабличнаяЧасть1Значение4КонтекстноеМеню + 94 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТабличнаяЧасть1Значение5 + 96 + true + true + + true + + + Объект.ТабличнаяЧасть1.Значение5 + + + ТабличнаяЧасть1Значение5РасширеннаяПодсказка + 98 + Label + true + true + + Left + + + + ТабличнаяЧасть1Значение5КонтекстноеМеню + 97 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТабличнаяЧасть1КоманднаяПанель + 70 + Left + true + + + ТабличнаяЧасть1СтрокаПоиска + 72 + + ТабличнаяЧасть1СтрокаПоискаРасширеннаяПодсказка + 74 + Label + true + true + + Left + + + + ТабличнаяЧасть1СтрокаПоискаКонтекстноеМеню + 73 + true + + ТабличнаяЧасть1 + + true + + + + ТабличнаяЧасть1СостояниеПросмотра + 75 + + ТабличнаяЧасть1СостояниеПросмотраРасширеннаяПодсказка + 77 + Label + true + true + + Left + + + + ТабличнаяЧасть1СостояниеПросмотраКонтекстноеМеню + 76 + true + + ViewStatusAddition + ТабличнаяЧасть1 + + true + + + + ТабличнаяЧасть1УправлениеПоиском + 78 + + ТабличнаяЧасть1УправлениеПоискомРасширеннаяПодсказка + 80 + Label + true + true + + Left + + + + ТабличнаяЧасть1УправлениеПоискомКонтекстноеМеню + 79 + true + + SearchControlAddition + ТабличнаяЧасть1 + + true + + + + ТабличнаяЧасть1РасширеннаяПодсказка + 71 + Label + true + true + + Left + + + + ТабличнаяЧасть1КонтекстноеМеню + 69 + true + + true + true + true + true + true + MultiRow +
        true
        + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + true + +
        + true + true + + true + + + <key>ru</key> + <value>Табличная часть 1</value> + + + ГруппаТабличнаяЧасть1РасширеннаяПодсказка + 67 + Label + true + true + + Left + + + Page + + Vertical + auto + false + +
        + + ГруппаТабличнаяЧасть2 + 99 + + ТабличнаяЧасть2 + 101 + + <key>ru</key> + <value>Табличная часть 2</value> + + true + true + + true + + + Объект.ТабличнаяЧасть2 + + None + + ТабличнаяЧасть2НомерСтроки + 114 + true + true + + true + + + Объект.ТабличнаяЧасть2.LineNumber + + + ТабличнаяЧасть2НомерСтрокиРасширеннаяПодсказка + 116 + Label + true + true + + Left + + + + ТабличнаяЧасть2НомерСтрокиКонтекстноеМеню + 115 + true + + LabelField + Auto + true + Left + true + + true + true + + + + ТабличнаяЧасть2Значение1 + 117 + true + true + + true + + + Объект.ТабличнаяЧасть2.Значение1 + + + ТабличнаяЧасть2Значение1РасширеннаяПодсказка + 119 + Label + true + true + + Left + + + + ТабличнаяЧасть2Значение1КонтекстноеМеню + 118 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТабличнаяЧасть2Значение2 + 120 + true + true + + true + + + Объект.ТабличнаяЧасть2.Значение2 + + + ТабличнаяЧасть2Значение2РасширеннаяПодсказка + 122 + Label + true + true + + Left + + + + ТабличнаяЧасть2Значение2КонтекстноеМеню + 121 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТабличнаяЧасть2Значение3 + 123 + true + true + + true + + + Объект.ТабличнаяЧасть2.Значение3 + + + ТабличнаяЧасть2Значение3РасширеннаяПодсказка + 125 + Label + true + true + + Left + + + + ТабличнаяЧасть2Значение3КонтекстноеМеню + 124 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТабличнаяЧасть2Значение4 + 126 + true + true + + true + + + Объект.ТабличнаяЧасть2.Значение4 + + + ТабличнаяЧасть2Значение4РасширеннаяПодсказка + 128 + Label + true + true + + Left + + + + ТабличнаяЧасть2Значение4КонтекстноеМеню + 127 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТабличнаяЧасть2Значение5 + 129 + true + true + + true + + + Объект.ТабличнаяЧасть2.Значение5 + + + ТабличнаяЧасть2Значение5РасширеннаяПодсказка + 131 + Label + true + true + + Left + + + + ТабличнаяЧасть2Значение5КонтекстноеМеню + 130 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТабличнаяЧасть2КоманднаяПанель + 103 + Left + true + + + ТабличнаяЧасть2СтрокаПоиска + 105 + + ТабличнаяЧасть2СтрокаПоискаРасширеннаяПодсказка + 107 + Label + true + true + + Left + + + + ТабличнаяЧасть2СтрокаПоискаКонтекстноеМеню + 106 + true + + ТабличнаяЧасть2 + + true + + + + ТабличнаяЧасть2СостояниеПросмотра + 108 + + ТабличнаяЧасть2СостояниеПросмотраРасширеннаяПодсказка + 110 + Label + true + true + + Left + + + + ТабличнаяЧасть2СостояниеПросмотраКонтекстноеМеню + 109 + true + + ViewStatusAddition + ТабличнаяЧасть2 + + true + + + + ТабличнаяЧасть2УправлениеПоиском + 111 + + ТабличнаяЧасть2УправлениеПоискомРасширеннаяПодсказка + 113 + Label + true + true + + Left + + + + ТабличнаяЧасть2УправлениеПоискомКонтекстноеМеню + 112 + true + + SearchControlAddition + ТабличнаяЧасть2 + + true + + + + ТабличнаяЧасть2РасширеннаяПодсказка + 104 + Label + true + true + + Left + + + + ТабличнаяЧасть2КонтекстноеМеню + 102 + true + + true + true + true + true + true + MultiRow +
        true
        + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + true + +
        + true + true + + true + + + <key>ru</key> + <value>Табличная часть 2</value> + + + ГруппаТабличнаяЧасть2РасширеннаяПодсказка + 100 + Label + true + true + + Left + + + Page + + Vertical + auto + false + +
        + + ГруппаТабличнаяЧасть3 + 132 + + ТабличнаяЧасть3 + 134 + + <key>ru</key> + <value>Табличная часть 3</value> + + true + true + + true + + + Объект.ТабличнаяЧасть3 + + None + + ТабличнаяЧасть3НомерСтроки + 147 + true + true + + true + + + Объект.ТабличнаяЧасть3.LineNumber + + + ТабличнаяЧасть3НомерСтрокиРасширеннаяПодсказка + 149 + Label + true + true + + Left + + + + ТабличнаяЧасть3НомерСтрокиКонтекстноеМеню + 148 + true + + LabelField + Auto + true + Left + true + + true + true + + + + ТабличнаяЧасть3Значение1 + 150 + true + true + + true + + + Объект.ТабличнаяЧасть3.Значение1 + + + ТабличнаяЧасть3Значение1РасширеннаяПодсказка + 152 + Label + true + true + + Left + + + + ТабличнаяЧасть3Значение1КонтекстноеМеню + 151 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТабличнаяЧасть3Значение2 + 153 + true + true + + true + + + Объект.ТабличнаяЧасть3.Значение2 + + + ТабличнаяЧасть3Значение2РасширеннаяПодсказка + 155 + Label + true + true + + Left + + + + ТабличнаяЧасть3Значение2КонтекстноеМеню + 154 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТабличнаяЧасть3Значение3 + 156 + true + true + + true + + + Объект.ТабличнаяЧасть3.Значение3 + + + ТабличнаяЧасть3Значение3РасширеннаяПодсказка + 158 + Label + true + true + + Left + + + + ТабличнаяЧасть3Значение3КонтекстноеМеню + 157 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТабличнаяЧасть3Значение4 + 159 + true + true + + true + + + Объект.ТабличнаяЧасть3.Значение4 + + + ТабличнаяЧасть3Значение4РасширеннаяПодсказка + 161 + Label + true + true + + Left + + + + ТабличнаяЧасть3Значение4КонтекстноеМеню + 160 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТабличнаяЧасть3Значение5 + 162 + true + true + + true + + + Объект.ТабличнаяЧасть3.Значение5 + + + ТабличнаяЧасть3Значение5РасширеннаяПодсказка + 164 + Label + true + true + + Left + + + + ТабличнаяЧасть3Значение5КонтекстноеМеню + 163 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТабличнаяЧасть3КоманднаяПанель + 136 + Left + true + + + ТабличнаяЧасть3СтрокаПоиска + 138 + + ТабличнаяЧасть3СтрокаПоискаРасширеннаяПодсказка + 140 + Label + true + true + + Left + + + + ТабличнаяЧасть3СтрокаПоискаКонтекстноеМеню + 139 + true + + ТабличнаяЧасть3 + + true + + + + ТабличнаяЧасть3СостояниеПросмотра + 141 + + ТабличнаяЧасть3СостояниеПросмотраРасширеннаяПодсказка + 143 + Label + true + true + + Left + + + + ТабличнаяЧасть3СостояниеПросмотраКонтекстноеМеню + 142 + true + + ViewStatusAddition + ТабличнаяЧасть3 + + true + + + + ТабличнаяЧасть3УправлениеПоиском + 144 + + ТабличнаяЧасть3УправлениеПоискомРасширеннаяПодсказка + 146 + Label + true + true + + Left + + + + ТабличнаяЧасть3УправлениеПоискомКонтекстноеМеню + 145 + true + + SearchControlAddition + ТабличнаяЧасть3 + + true + + + + ТабличнаяЧасть3РасширеннаяПодсказка + 137 + Label + true + true + + Left + + + + ТабличнаяЧасть3КонтекстноеМеню + 135 + true + + true + true + true + true + true + MultiRow +
        true
        + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + true + +
        + true + true + + true + + + <key>ru</key> + <value>Табличная часть 3</value> + + + ГруппаТабличнаяЧасть3РасширеннаяПодсказка + 133 + Label + true + true + + Left + + + Page + + Vertical + auto + false + +
        + + ГруппаТабличнаяЧасть4 + 165 + + ТабличнаяЧасть4 + 167 + + <key>ru</key> + <value>Табличная часть 4</value> + + true + true + + true + + + Объект.ТабличнаяЧасть4 + + None + + ТабличнаяЧасть4НомерСтроки + 180 + true + true + + true + + + Объект.ТабличнаяЧасть4.LineNumber + + + ТабличнаяЧасть4НомерСтрокиРасширеннаяПодсказка + 182 + Label + true + true + + Left + + + + ТабличнаяЧасть4НомерСтрокиКонтекстноеМеню + 181 + true + + LabelField + Auto + true + Left + true + + true + true + + + + ТабличнаяЧасть4Значение1 + 183 + true + true + + true + + + Объект.ТабличнаяЧасть4.Значение1 + + + ТабличнаяЧасть4Значение1РасширеннаяПодсказка + 185 + Label + true + true + + Left + + + + ТабличнаяЧасть4Значение1КонтекстноеМеню + 184 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТабличнаяЧасть4Значение2 + 186 + true + true + + true + + + Объект.ТабличнаяЧасть4.Значение2 + + + ТабличнаяЧасть4Значение2РасширеннаяПодсказка + 188 + Label + true + true + + Left + + + + ТабличнаяЧасть4Значение2КонтекстноеМеню + 187 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТабличнаяЧасть4Значение3 + 189 + true + true + + true + + + Объект.ТабличнаяЧасть4.Значение3 + + + ТабличнаяЧасть4Значение3РасширеннаяПодсказка + 191 + Label + true + true + + Left + + + + ТабличнаяЧасть4Значение3КонтекстноеМеню + 190 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТабличнаяЧасть4Значение4 + 192 + true + true + + true + + + Объект.ТабличнаяЧасть4.Значение4 + + + ТабличнаяЧасть4Значение4РасширеннаяПодсказка + 194 + Label + true + true + + Left + + + + ТабличнаяЧасть4Значение4КонтекстноеМеню + 193 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТабличнаяЧасть4Значение5 + 195 + true + true + + true + + + Объект.ТабличнаяЧасть4.Значение5 + + + ТабличнаяЧасть4Значение5РасширеннаяПодсказка + 197 + Label + true + true + + Left + + + + ТабличнаяЧасть4Значение5КонтекстноеМеню + 196 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТабличнаяЧасть4КоманднаяПанель + 169 + Left + true + + + ТабличнаяЧасть4СтрокаПоиска + 171 + + ТабличнаяЧасть4СтрокаПоискаРасширеннаяПодсказка + 173 + Label + true + true + + Left + + + + ТабличнаяЧасть4СтрокаПоискаКонтекстноеМеню + 172 + true + + ТабличнаяЧасть4 + + true + + + + ТабличнаяЧасть4СостояниеПросмотра + 174 + + ТабличнаяЧасть4СостояниеПросмотраРасширеннаяПодсказка + 176 + Label + true + true + + Left + + + + ТабличнаяЧасть4СостояниеПросмотраКонтекстноеМеню + 175 + true + + ViewStatusAddition + ТабличнаяЧасть4 + + true + + + + ТабличнаяЧасть4УправлениеПоиском + 177 + + ТабличнаяЧасть4УправлениеПоискомРасширеннаяПодсказка + 179 + Label + true + true + + Left + + + + ТабличнаяЧасть4УправлениеПоискомКонтекстноеМеню + 178 + true + + SearchControlAddition + ТабличнаяЧасть4 + + true + + + + ТабличнаяЧасть4РасширеннаяПодсказка + 170 + Label + true + true + + Left + + + + ТабличнаяЧасть4КонтекстноеМеню + 168 + true + + true + true + true + true + true + MultiRow +
        true
        + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + true + +
        + true + true + + true + + + <key>ru</key> + <value>Табличная часть 4</value> + + + ГруппаТабличнаяЧасть4РасширеннаяПодсказка + 166 + Label + true + true + + Left + + + Page + + Vertical + auto + false + +
        + true + true + + true + + + <key>ru</key> + <value>Страницы</value> + + + СтраницыРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + Pages + + TabsOnTop + Auto + +
        + + ФормаКоманднаяПанель + -1 + + ФормаВключитьВозможностьРедактирования + 202 + true + true + + true + + + ФормаВключитьВозможностьРедактированияExtendedTooltip + 203 + Label + true + true + + Left + + + Form.Command.ВключитьВозможностьРедактирования + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + CatalogObject.КлючиДоступа + + + true + + + true + +
        true
        + true +
        + + РасшифровкаСоставаПолей + + <key>ru</key> + <value>Расшифровка состава полей</value> + + 2 + + String + + + + true + + + true + + + + ВключитьВозможностьРедактирования + + <key>ru</key> + <value>Включить возможность редактирования</value> + + 1 + + ru + Включить возможность редактирования только для целей поиска неисправности (требуется углубленное понимание работы механизма) + + + true + + + + ВключитьВозможностьРедактирования + + + DontUse + Auto + + + + + + +
        diff --git a/SSL/src/Catalogs/КлючиДоступа/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/КлючиДоступа/Forms/ФормаЭлемента/Module.bsl new file mode 100644 index 000000000..abc44d15d --- /dev/null +++ b/SSL/src/Catalogs/КлючиДоступа/Forms/ФормаЭлемента/Module.bsl @@ -0,0 +1,59 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + ТолькоПросмотр = Истина; + + РасшифровкаСоставаПолей = РасшифровкаСоставаПолей(Объект.СоставПолей); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВключитьВозможностьРедактирования(Команда) + + ТолькоПросмотр = Ложь; + + ПоказатьПредупреждение(, + НСтр("ru = 'Ключ доступа не следует изменять, так как он сопоставлен с разными объектами. + |Чтобы исправить нестандартную проблему следует удалить ключ доступа или + |связь с ним в регистрах и выполнить процедуру обновления доступа.'")); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Функция РасшифровкаСоставаПолей(СоставПолей) + + ТекущееЧисло = СоставПолей; + Расшифровка = ""; + + НомерТабличнойЧасти = 0; + Пока ТекущееЧисло > 0 Цикл + Остаток = ТекущееЧисло - Цел(ТекущееЧисло / 16) * 16; + Если НомерТабличнойЧасти = 0 Тогда + Расшифровка = НСтр("ru = 'Шапка'") + ": " + Остаток; + Иначе + Расшифровка = Расшифровка + ", " + НСтр("ru = 'Табличная часть'") + " " + НомерТабличнойЧасти + ": " + Остаток; + КонецЕсли; + ТекущееЧисло = Цел(ТекущееЧисло / 16); + НомерТабличнойЧасти = НомерТабличнойЧасти + 1; + КонецЦикла; + + Возврат Расшифровка; + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/Catalogs/КлючиДоступа/КлючиДоступа.mdo b/SSL/src/Catalogs/КлючиДоступа/КлючиДоступа.mdo new file mode 100644 index 000000000..2a44a701b --- /dev/null +++ b/SSL/src/Catalogs/КлючиДоступа/КлючиДоступа.mdo @@ -0,0 +1,859 @@ + + + + + + + + + + КлючиДоступа + + ru + Ключи доступа + + Catalog.КлючиДоступа.StandardAttribute.Description + DontUse + + Use + PredefinedDataName + + Use + + + + + Use + Predefined + + Use + + + + + Use + Ref + + Use + + + + + Use + DeletionMark + + Use + + + + + Use + IsFolder + + Use + + + + + Use + Owner + true + + ShowError + Use + + + + + Use + Parent + true + + Use + + + + + Use + Description + + ShowError + Use + + + + + Use + Code + + Use + + + + DontUse + Managed + + ru + Ключ доступа + + + ru + Группа однотипных объектов или записей регистра с одинаковым доступом. Ключ доступа содержит проверяемые значения (организацию, группу доступа контрагентов, … произвольное значение), полученные через поля доступа. + + 2 + true + 36 + String + Variable + AsDescription + InDialog + BothWays + Catalog.КлючиДоступа.Form.ФормаЭлемента + Catalog.КлючиДоступа.Form.ФормаСписка + Catalog.КлючиДоступа.Form.ФормаСписка + + Список + + ru + Список + + + CatalogRef.ИдентификаторыОбъектовМетаданных + + + ru + Список элементов справочников, документов, регистров и др., для которого используется ключ доступа. + + + + + Index + Use + Use + + + ДляВнешнихПользователей + + ru + Для внешних пользователей + + + Boolean + + + ru + Ключ доступа для внешних пользователей + + + + + Use + Use + + + Хеш + + ru + Хеш + + + Number + + 10 + true + + + + ru + Хеш-сумма содержимого ключа, позволяющая сделать быстрый поиск по индексу + + + + + Index + Use + Use + + + СоставПолей + + ru + Состав полей + + + Number + + 17 + true + + + + ru + Количество полей в шапке и табличных частях, которые задействованы в ключе доступа (количество закодировано в группах по 4 бита, начиная с младших). +Используется при поиске объектов и записей регистров с устаревшими ключами доступа. + + + + + Use + Use + + + Значение1 + + ru + Значение 1 + + + DefinedType.ЗначениеДоступа + + + ru + Значение доступа, группа значений доступа, ключ доступа, идентификатор списка или значение для условия, которое извлекается через поле доступа (непосредственно или как группа значения доступа или через «точку» или через соединение) + + + + + Use + Use + + + Значение2 + + ru + Значение 2 + + + DefinedType.ЗначениеДоступа + + + ru + Тоже, что реквизит Значение 1 + + + + + Use + Use + + + Значение3 + + ru + Значение 3 + + + DefinedType.ЗначениеДоступа + + + ru + Тоже, что реквизит Значение 1 + + + + + Use + Use + + + Значение4 + + ru + Значение 4 + + + DefinedType.ЗначениеДоступа + + + ru + Тоже, что реквизит Значение 1 + + + + + Use + Use + + + Значение5 + + ru + Значение 5 + + + DefinedType.ЗначениеДоступа + + + ru + Тоже, что реквизит Значение 1 + + + + + Use + Use + + + + + + + Шапка + + ru + Шапка + + + Use + LineNumber + + Use + + + + + Значение6 + + ru + Значение 6 + + + DefinedType.ЗначениеДоступа + + + ru + Тоже, что реквизит Значение 1 + + + + Use + Use + + + Значение7 + + ru + Значение 7 + + + DefinedType.ЗначениеДоступа + + + ru + Тоже, что реквизит Значение 1 + + + + Use + Use + + + Значение8 + + ru + Значение 8 + + + DefinedType.ЗначениеДоступа + + + ru + Тоже, что реквизит Значение 1 + + + + Use + Use + + + Значение9 + + ru + Значение 9 + + + DefinedType.ЗначениеДоступа + + + ru + Тоже, что реквизит Значение 1 + + + + Use + Use + + + Значение10 + + ru + Значение 10 + + + DefinedType.ЗначениеДоступа + + + ru + Тоже, что реквизит Значение 1 + + + + Use + Use + + + + + + + + ТабличнаяЧасть1 + + ru + Табличная часть 1 + + + Use + LineNumber + + Use + + + + + Значение1 + + ru + Значение 1 + + + DefinedType.ЗначениеДоступа + + + ru + Тоже, что реквизит Значение 1 + + + + Use + Use + + + Значение2 + + ru + Значение 2 + + + DefinedType.ЗначениеДоступа + + + ru + Тоже, что реквизит Значение 1 + + + + Use + Use + + + Значение3 + + ru + Значение 3 + + + DefinedType.ЗначениеДоступа + + + ru + Тоже, что реквизит Значение 1 + + + + Use + Use + + + Значение4 + + ru + Значение 4 + + + DefinedType.ЗначениеДоступа + + + ru + Тоже, что реквизит Значение 1 + + + + Use + Use + + + Значение5 + + ru + Значение 5 + + + DefinedType.ЗначениеДоступа + + + ru + Тоже, что реквизит Значение 1 + + + + Use + Use + + + + + + + + ТабличнаяЧасть2 + + ru + Табличная часть 2 + + + Use + LineNumber + + Use + + + + + Значение1 + + ru + Значение 1 + + + DefinedType.ЗначениеДоступа + + + ru + Тоже, что реквизит Значение 1 + + + + Use + Use + + + Значение2 + + ru + Значение 2 + + + DefinedType.ЗначениеДоступа + + + ru + Тоже, что реквизит Значение 1 + + + + Use + Use + + + Значение3 + + ru + Значение 3 + + + DefinedType.ЗначениеДоступа + + + ru + Тоже, что реквизит Значение 1 + + + + Use + Use + + + Значение4 + + ru + Значение 4 + + + DefinedType.ЗначениеДоступа + + + ru + Тоже, что реквизит Значение 1 + + + + Use + Use + + + Значение5 + + ru + Значение 5 + + + DefinedType.ЗначениеДоступа + + + ru + Тоже, что реквизит Значение 1 + + + + Use + Use + + + + + + + + ТабличнаяЧасть3 + + ru + Табличная часть 3 + + + Use + LineNumber + + Use + + + + + Значение1 + + ru + Значение 1 + + + DefinedType.ЗначениеДоступа + + + ru + Тоже, что реквизит Значение 1 + + + + Use + Use + + + Значение2 + + ru + Значение 2 + + + DefinedType.ЗначениеДоступа + + + ru + Тоже, что реквизит Значение 1 + + + + Use + Use + + + Значение3 + + ru + Значение 3 + + + DefinedType.ЗначениеДоступа + + + ru + Тоже, что реквизит Значение 1 + + + + Use + Use + + + Значение4 + + ru + Значение 4 + + + DefinedType.ЗначениеДоступа + + + ru + Тоже, что реквизит Значение 1 + + + + Use + Use + + + Значение5 + + ru + Значение 5 + + + DefinedType.ЗначениеДоступа + + + ru + Тоже, что реквизит Значение 1 + + + + Use + Use + + + + + + + + ТабличнаяЧасть4 + + ru + Табличная часть 4 + + + Use + LineNumber + + Use + + + + + Значение1 + + ru + Значение 1 + + + DefinedType.ЗначениеДоступа + + + ru + Тоже, что реквизит Значение 1 + + + + Use + Use + + + Значение2 + + ru + Значение 2 + + + DefinedType.ЗначениеДоступа + + + ru + Тоже, что реквизит Значение 1 + + + + Use + Use + + + Значение3 + + ru + Значение 3 + + + DefinedType.ЗначениеДоступа + + + ru + Тоже, что реквизит Значение 1 + + + + Use + Use + + + Значение4 + + ru + Значение 4 + + + DefinedType.ЗначениеДоступа + + + ru + Тоже, что реквизит Значение 1 + + + + Use + Use + + + Значение5 + + ru + Значение 5 + + + DefinedType.ЗначениеДоступа + + + ru + Тоже, что реквизит Значение 1 + + + + Use + Use + + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + + ФормаЭлемента + + ru + Форма элемента + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Form.form index 2b625aa3b..e8d05c735 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Form.form @@ -650,13 +650,6 @@ false None Change - Choose - Copy - Create - CreateFolder - Delete - MoveItem - SetDeletionMark Представление 4 @@ -1583,6 +1576,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/Catalogs/ОбщиеВнешниеКомпоненты/ManagerModule.bsl b/SSL/src/Catalogs/ОбщиеВнешниеКомпоненты/ManagerModule.bsl new file mode 100644 index 000000000..3a889d042 --- /dev/null +++ b/SSL/src/Catalogs/ОбщиеВнешниеКомпоненты/ManagerModule.bsl @@ -0,0 +1,82 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +#Область ДляВызоваИзДругихПодсистем + +// СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов + +// Возвращает реквизиты объекта, которые разрешается редактировать +// с помощью обработки группового изменения реквизитов. +// +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. +Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт + + Результат = Новый Массив; + Возврат Результат; + +КонецФункции + +// Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Возвращает ссылку на справочник внешней компоненты по идентификатору и версии. +// +// Параметры: +// Идентификатор - Строка - идентификатор объекта внешнего компонента. +// Версия - Строка - (необязательный) версия компоненты. +// +// Возвращаемое значение: +// СправочникСсылка.ВнешниеКомпоненты - ссылка на контейнер внешней компоненты в информационной базе. +// +Функция НайтиПоИдентификатору(Идентификатор, Версия = Неопределено) Экспорт + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Идентификатор", Идентификатор); + + Если Не ЗначениеЗаполнено(Версия) Тогда + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ВнешниеКомпоненты.Ссылка КАК Ссылка + |ИЗ + | Справочник.ОбщиеВнешниеКомпоненты КАК ВнешниеКомпоненты + |ГДЕ + | ВнешниеКомпоненты.Идентификатор = &Идентификатор + | + |УПОРЯДОЧИТЬ ПО + | ВнешниеКомпоненты.ДатаВерсии УБЫВ"; + Иначе + Запрос.УстановитьПараметр("Версия", Версия); + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ВнешниеКомпоненты.Ссылка КАК Ссылка + |ИЗ + | Справочник.ОбщиеВнешниеКомпоненты КАК ВнешниеКомпоненты + |ГДЕ + | ВнешниеКомпоненты.Идентификатор = &Идентификатор + | И ВнешниеКомпоненты.Версия = &Версия"; + + КонецЕсли; + + Результат = Запрос.Выполнить(); + + Если Результат.Пустой() Тогда + Возврат ПустаяСсылка(); + КонецЕсли; + + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + + Возврат Результат.Выгрузить()[0].Ссылка; + +КонецФункции + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ОбщиеВнешниеКомпоненты/ОбщиеВнешниеКомпоненты.mdo b/SSL/src/Catalogs/ОбщиеВнешниеКомпоненты/ОбщиеВнешниеКомпоненты.mdo new file mode 100644 index 000000000..00152b995 --- /dev/null +++ b/SSL/src/Catalogs/ОбщиеВнешниеКомпоненты/ОбщиеВнешниеКомпоненты.mdo @@ -0,0 +1,387 @@ + + + + + + + + + + ОбщиеВнешниеКомпоненты + + ru + Общие внешние компоненты + + true + Catalog.ОбщиеВнешниеКомпоненты.StandardAttribute.Description + DontUse + + Use + PredefinedDataName + + Use + + + + + Use + Predefined + + Use + + + + + Use + Ref + + Use + + + + + Use + DeletionMark + + Use + + + + + Use + IsFolder + + Use + + + + + Use + Owner + true + + ShowError + Use + + + + + Use + Parent + true + + Use + + + + + Use + Description + + ShowError + Use + + + + + Use + Code + + Use + + + + Use + Managed + Use + + ru + Общая внешняя компонента + + 2 + true + 150 + String + Variable + AsDescription + InDialog + BothWays + + Идентификатор + + ru + Идентификатор + + + String + + 150 + + + + ru + Внутренний идентификатор объекта внешней компоненты. + + + + ShowError + + Index + Use + Use + + + Версия + + ru + Версия + + + String + + 20 + + + + ru + Версия внешней компоненты + + + + ShowError + + Use + Use + + + ДатаВерсии + + ru + Дата версии + + + Date + + + + + + Index + Use + Use + + + ХранилищеКомпоненты + + ru + Хранилище компоненты + + + ValueStorage + + + ru + Двоичные данные внешней компоненты, содержит ZIP-архив (служебное поле) + + + + + Use + Use + + + Windows_x86 + + ru + Windows x86 + + + Boolean + + + + + Use + Use + + + Windows_x86_64 + + ru + Windows x86_64 + + + Boolean + + + + + Use + Use + + + Linux_x86 + + ru + Linux x86 + + + Boolean + + + + + Use + Use + + + Linux_x86_64 + + ru + Linux x86_64 + + + Boolean + + + + + Use + Use + + + Windows_x86_Firefox + + ru + Windows x86 Firefox + + + Boolean + + + + + Use + Use + + + Linux_x86_Firefox + + ru + Linux x86 Firefox + + + Boolean + + + + + Use + Use + + + Linux_x86_64_Firefox + + ru + Linux x86_64 Firefox + + + Boolean + + + + + Use + Use + + + Windows_x86_MSIE + + ru + Windows x86 MSIE + + + Boolean + + + + + Use + Use + + + Windows_x86_64_MSIE + + ru + Windows x86_64 MSIE + + + Boolean + + + + + Use + Use + + + Windows_x86_Chrome + + ru + Windows x86 Chrome + + + Boolean + + + + + Use + Use + + + Linux_x86_Chrome + + ru + Linux x86 Chrome + + + Boolean + + + + + Use + Use + + + Linux_x86_64_Chrome + + ru + Linux x86_64 Chrome + + + Boolean + + + + + Use + Use + + + MacOS_x86_64_Safari + + ru + Mac OS x86_64 Safari + + + Boolean + + + + + Use + Use + + diff --git a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Form.form index 0bf5f1639..9bcb3abdc 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Form.form @@ -93,6 +93,7 @@ UsualGroup + HorizontalIfPossible Center Auto true diff --git a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl index 5da54ca76..943ffa710 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl @@ -69,6 +69,13 @@ КонецЕсли; // Конец СтандартныеПодсистемы.Свойства + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + КонецПроцедуры &НаСервере diff --git a/SSL/src/Catalogs/ПапкиФайлов/ManagerModule.bsl b/SSL/src/Catalogs/ПапкиФайлов/ManagerModule.bsl index 7d8e7752c..2ff5ad20b 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПапкиФайлов/ManagerModule.bsl @@ -24,6 +24,24 @@ // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтение + |ГДЕ + | ЧтениеОбъектаРазрешено(Ссылка) + |; + |РазрешитьИзменениеЕслиРазрешеноЧтение + |ГДЕ + | ИзменениеОбъектаРазрешено(Ссылка)"; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + #КонецОбласти #КонецОбласти diff --git a/SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl b/SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl index 78b10ccf4..e0b93ca06 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl @@ -12,11 +12,17 @@ "Наименование, Родитель, ПометкаУдаления"); Если ЭтоНовый() Или ТекущаяПапка.Родитель <> Родитель Тогда - // Проверка права "Добавление". + // Проверка прав на исходную папку. + Если НЕ РаботаСФайламиСлужебный.ЕстьПраво("ИзменениеПапок", ТекущаяПапка.Родитель) Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Недостаточно прав для перемещения из папки файлов ""%1"".'"), + Строка(?(ЗначениеЗаполнено(ТекущаяПапка.Родитель), ТекущаяПапка.Родитель, НСтр("ru = 'Папки'")))); + КонецЕсли; + // Проверка права на папку назначения. Если НЕ РаботаСФайламиСлужебный.ЕстьПраво("ИзменениеПапок", Родитель) Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Недостаточно прав для добавления подпапок в папку файлов ""%1"".'"), - Строка(?(ЗначениеЗаполнено(Родитель),Родитель, НСтр("ru = 'Папки'")))); + Строка(?(ЗначениеЗаполнено(Родитель), Родитель, НСтр("ru = 'Папки'")))); КонецЕсли; КонецЕсли; diff --git a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаЭлемента/Form.form index 720b6d333..e1f80b0c8 100644 --- a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаЭлемента/Form.form @@ -104,6 +104,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -237,5 +238,9 @@ AfterWrite ПослеЗаписи + + OnReadAtServer + ПриЧтенииНаСервере + diff --git a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаЭлемента/Module.bsl index a03790499..f65dcf399 100644 --- a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаЭлемента/Module.bsl @@ -37,4 +37,16 @@ КонецПроцедуры +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ManagerModule.bsl b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ManagerModule.bsl index 9ba9cb40f..bbbf37c6e 100644 --- a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ManagerModule.bsl @@ -23,8 +23,23 @@ // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтениеИзменение + |ГДЕ + | ЗначениеРазрешено(Владелец) + | ИЛИ ЗначениеРазрешено(Владелец.ВладелецУчетнойЗаписи, ПустаяСсылка КАК Ложь)"; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + #КонецОбласти #КонецОбласти -#КонецЕсли \ No newline at end of file +#КонецЕсли diff --git a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ObjectModule.bsl b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ObjectModule.bsl index ee274bc09..ba6de58ca 100644 --- a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ObjectModule.bsl @@ -26,7 +26,7 @@ Ссылка,,,Отказ); КонецЕсли; - ДополнительныеСвойства.Вставить("Родитель",ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЭтотОбъект.Ссылка,"Родитель")); + ДополнительныеСвойства.Вставить("Родитель",ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка,"Родитель")); КонецПроцедуры diff --git a/SSL/src/Catalogs/Пользователи/Forms/ВыборПользователяОперационнойСистемы/Form.form b/SSL/src/Catalogs/Пользователи/Forms/ВыборПользователяОперационнойСистемы/Form.form index c5199bbf0..c6eaea395 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ВыборПользователяОперационнойСистемы/Form.form +++ b/SSL/src/Catalogs/Пользователи/Forms/ВыборПользователяОперационнойСистемы/Form.form @@ -779,6 +779,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true diff --git a/SSL/src/Catalogs/Пользователи/Forms/ОграничениеНаВходВПрограмму/Form.form b/SSL/src/Catalogs/Пользователи/Forms/ОграничениеНаВходВПрограмму/Form.form index f7129e7b1..4c28c2dab 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ОграничениеНаВходВПрограмму/Form.form +++ b/SSL/src/Catalogs/Пользователи/Forms/ОграничениеНаВходВПрограмму/Form.form @@ -219,6 +219,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -378,6 +379,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/Catalogs/Пользователи/Forms/ОграничениеНаВходВПрограмму/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ОграничениеНаВходВПрограмму/Module.bsl index f34c90223..6828c6358 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ОграничениеНаВходВПрограмму/Module.bsl +++ b/SSL/src/Catalogs/Пользователи/Forms/ОграничениеНаВходВПрограмму/Module.bsl @@ -11,6 +11,10 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) + Если ТипЗнч(ВладелецФормы) <> Тип("УправляемаяФорма") Тогда + Возврат; + КонецЕсли; + Просрочка = ВладелецФормы.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода; Срок = ВладелецФормы.СрокДействия; diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Form.form index c659d5313..ef367c308 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Form.form @@ -907,6 +907,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1476,6 +1477,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1504,6 +1506,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1760,6 +1763,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1868,6 +1872,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl index b75f32e1f..1a421fc3a 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl @@ -88,8 +88,9 @@ ХранимыеПараметры.Вставить( "ИспользоватьГруппы", ПолучитьФункциональнуюОпцию("ИспользоватьГруппыПользователей")); - Если НЕ ПравоДоступа("Добавление", Метаданные.Справочники.Пользователи) Тогда - Элементы.СоздатьПользователя.Видимость = Ложь; + Если Не ПравоДоступа("Добавление", Метаданные.Справочники.Пользователи) Тогда + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "СоздатьПользователя", "Видимость", Ложь); КонецЕсли; РазделениеВключено = ОбщегоНазначения.РазделениеВключено(); @@ -135,8 +136,12 @@ Элементы.ПользователиСписок.РежимВыбора = Ложь; Элементы.ГруппыПользователей.РежимВыбора = Ложь; Элементы.Комментарии.Видимость = Ложь; - Элементы.ВыбратьПользователя.Видимость = Ложь; - Элементы.ВыбратьГруппуПользователей.Видимость = Ложь; + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "ВыбратьПользователя", "Видимость", Ложь); + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "ВыбратьГруппуПользователей", "Видимость", Ложь); КонецЕсли; ХранимыеПараметры.Вставить("ГруппаВсеПользователи", Справочники.ГруппыПользователей.ВсеПользователи); @@ -862,11 +867,17 @@ Если Параметры.РежимВыбора Тогда - Элементы.ВыбратьГруппуПользователей.Видимость = - ?(ХранимыеПараметры.РасширенныйПодбор, Ложь, ВыборГруппПользователей); - Элементы.ВыбратьПользователя.КнопкаПоУмолчанию = - ?(ХранимыеПараметры.РасширенныйПодбор, Ложь, Не ВыборГруппПользователей); - Элементы.ВыбратьПользователя.Видимость = Не ХранимыеПараметры.РасширенныйПодбор; + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "ВыбратьГруппуПользователей", "Видимость", ?(ХранимыеПараметры.РасширенныйПодбор, + Ложь, ВыборГруппПользователей)); + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "ВыбратьПользователя", "КнопкаПоУмолчанию", ?(ХранимыеПараметры.РасширенныйПодбор, + Ложь, Не ВыборГруппПользователей)); + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "ВыбратьПользователя", "Видимость", Не ХранимыеПараметры.РасширенныйПодбор); + АвтоЗаголовок = Ложь; Если Параметры.ЗакрыватьПриВыборе = Ложь Тогда @@ -880,11 +891,11 @@ Заголовок = НСтр("ru = 'Подбор пользователей и групп'"); КонецЕсли; - Элементы.ВыбратьПользователя.Заголовок = - НСтр("ru = 'Выбрать пользователей'"); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "ВыбратьПользователя", "Заголовок", НСтр("ru = 'Выбрать пользователей'")); - Элементы.ВыбратьГруппуПользователей.Заголовок = - НСтр("ru = 'Выбрать группы'"); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "ВыбратьГруппуПользователей", "Заголовок", НСтр("ru = 'Выбрать группы'")); Иначе Если ХранимыеПараметры.РасширенныйПодбор Тогда @@ -897,10 +908,10 @@ Иначе // Режим выбора. Если ВыборГруппПользователей Тогда - Заголовок = НСтр("ru = 'Выбор пользователя или группы'"); - Элементы.ВыбратьПользователя.Заголовок = НСтр("ru = 'Выбрать пользователя'"); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "ВыбратьПользователя", "Заголовок", НСтр("ru = 'Выбрать пользователя'")); Иначе Заголовок = НСтр("ru = 'Выбор пользователя'"); КонецЕсли; diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form index 88ec47479..c91be6ed5 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form @@ -100,6 +100,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -273,6 +274,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -330,6 +332,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -435,6 +438,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -557,6 +561,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -843,6 +848,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1206,6 +1212,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1390,6 +1397,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1662,6 +1670,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2300,6 +2309,7 @@ Page + HorizontalIfPossible auto false @@ -2398,14 +2408,8 @@ Left true - - StartChoice - КомментарийНачалоВыбора - - 2 true true - true true true true diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl index eab6c56de..32322373d 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl @@ -214,6 +214,13 @@ ОбщаяНастройкаФормы(ТекущийОбъект); + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + КонецПроцедуры &НаКлиенте @@ -612,7 +619,7 @@ &НаКлиенте Процедура ПользовательИБПользовательОСНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - #Если НЕ ВебКлиент Тогда + #Если НЕ ВебКлиент И НЕ МобильныйКлиент Тогда ОткрытьФорму("Справочник.Пользователи.Форма.ВыборПользователяОперационнойСистемы", , Элемент); #КонецЕсли @@ -641,14 +648,6 @@ КонецПроцедуры -&НаКлиенте -Процедура КомментарийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария( - Элемент.ТекстРедактирования, ЭтотОбъект, "Объект.Комментарий"); - -КонецПроцедуры - &НаКлиенте Процедура СтраницыПриСменеСтраницы(Элемент, ТекущаяСтраница) @@ -821,6 +820,24 @@ КонецПроцедуры +&НаКлиенте +Процедура Подключаемый_КонтактнаяИнформацияАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) + + МодульУправлениеКонтактнойИнформациейКлиент = + ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент"); + МодульУправлениеКонтактнойИнформациейКлиент.АвтоПодбор(Текст, ДанныеВыбора, СтандартнаяОбработка); + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_КонтактнаяИнформацияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + + МодульУправлениеКонтактнойИнформациейКлиент = + ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент"); + МодульУправлениеКонтактнойИнформациейКлиент.ОбработкаВыбора(ЭтотОбъект, ВыбранноеЗначение, Элемент.Имя, СтандартнаяОбработка); + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыРоли diff --git a/SSL/src/Catalogs/Пользователи/ManagerModule.bsl b/SSL/src/Catalogs/Пользователи/ManagerModule.bsl index aa4edcc1a..df8b5d7a5 100644 --- a/SSL/src/Catalogs/Пользователи/ManagerModule.bsl +++ b/SSL/src/Catalogs/Пользователи/ManagerModule.bsl @@ -25,6 +25,24 @@ // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтение + |ГДЕ + | ИСТИНА + |; + |РазрешитьИзменениеЕслиРазрешеноЧтение + |ГДЕ + | ЭтоАвторизованныйПользователь(Ссылка)"; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + #КонецОбласти #КонецОбласти diff --git a/SSL/src/Catalogs/Пользователи/Пользователи.mdo b/SSL/src/Catalogs/Пользователи/Пользователи.mdo index 0f12d3b00..b916c0caf 100644 --- a/SSL/src/Catalogs/Пользователи/Пользователи.mdo +++ b/SSL/src/Catalogs/Пользователи/Пользователи.mdo @@ -720,6 +720,25 @@ Use Use + + Значение + + ru + Значение + + + String + + + + ru + Служебное поле, для хранения контактной информации + + + + Use + Use + ФормаЭлемента diff --git a/SSL/src/Catalogs/ПользовательскиеНастройкиОтчетов/ManagerModule.bsl b/SSL/src/Catalogs/ПользовательскиеНастройкиОтчетов/ManagerModule.bsl index 2ab395617..8dd4c99b3 100644 --- a/SSL/src/Catalogs/ПользовательскиеНастройкиОтчетов/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПользовательскиеНастройкиОтчетов/ManagerModule.bsl @@ -21,6 +21,22 @@ // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтениеИзменение + |ГДЕ + | ЭтоАвторизованныйПользователь(Пользователь)"; + + Ограничение.ТекстДляВнешнихПользователей = Ограничение.Текст; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + #КонецОбласти #КонецОбласти diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Form.form b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Form.form index ca92466eb..0facf74b6 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Form.form +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Form.form @@ -107,6 +107,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl index 8cb8a9969..eaf05cb55 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl @@ -38,6 +38,13 @@ СохраненныйКомпоновщикНастроек = ТекущийОбъект.КомпоновщикНастроек.Получить(); ИнициализироватьКомпоновщикСервер(СохраненныйКомпоновщикНастроек); + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + КонецПроцедуры &НаСервере diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ManagerModule.bsl b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ManagerModule.bsl index 790e38520..5ae458dbc 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ManagerModule.bsl @@ -26,6 +26,21 @@ // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтениеИзменение + |ГДЕ + | ЗначениеРазрешено(Владелец) + | ИЛИ ЗначениеРазрешено(Владелец.ВладелецУчетнойЗаписи, ПустаяСсылка КАК Ложь)"; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + #КонецОбласти #КонецОбласти @@ -174,4 +189,4 @@ #КонецОбласти -#КонецЕсли \ No newline at end of file +#КонецЕсли diff --git a/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Form.form index 2bbaacfdd..f4328f83c 100644 --- a/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Form.form @@ -154,7 +154,6 @@ true None - Choose Copy Create CreateFolder @@ -190,64 +189,214 @@ CheckBoxField Enter true + + StdPicture.CheckAll + Left true - - Наименование - 127 + + Группа + 149 + + ГруппаШапка + 147 + + Наименование + 127 + true + true + + true + + + Список.Наименование + + + НаименованиеРасширеннаяПодсказка + 129 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 128 + true + + LabelField + Enter + true + Left + true + + true + true + + + + РегламентноеЗаданиеПредставление + 8 + + <key>ru</key> + <value>Выполняется</value> + + true + true + + true + + + Список.РегламентноеЗаданиеПредставление + + + РегламентноеЗаданиеПредставлениеExtendedTooltip + 14 + Label + true + true + + Left + + + + РегламентноеЗаданиеПредставлениеКонтекстноеМеню + 9 + true + + LabelField + Enter + true + true + Left + true + + true + true + + + + Важность + 48 + + <key>ru</key> + <value>Важность проблемы</value> + + true + true + + true + + + Список.ВажностьПроблемы + + + ru + Статус проблем, регистрируемых проверкой + + + ВажностьРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + + ВажностьКонтекстноеМеню + 49 + true + + LabelField + Enter + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Шапка</value> + + + ГруппаШапкаРасширеннаяПодсказка + 148 + Label + true + true + + Left + + + ColumnGroup + + auto + true + + + + Причины + 151 + true + true + + true + + + Список.Причины + + + ПричиныРасширеннаяПодсказка + 153 + Label + true + true + + Left + + + + ПричиныКонтекстноеМеню + 152 + true + + LabelField + Enter + true + Left + true + + true + 2 + true + + true true true - - Список.Наименование - - - НаименованиеРасширеннаяПодсказка - 129 - Label - true - true - - Left - - - - НаименованиеКонтекстноеМеню - 128 - true - - LabelField - Enter - true - Left - true - - true - true - - - - РегламентноеЗаданиеПредставление - 8 <key>ru</key> - <value>Выполняется</value> + <value>Группа</value> - true - true - - true - - - Список.РегламентноеЗаданиеПредставление - - РегламентноеЗаданиеПредставлениеExtendedTooltip - 14 + ГруппаРасширеннаяПодсказка + 150 Label true true @@ -255,182 +404,19 @@ Left
        - - РегламентноеЗаданиеПредставлениеКонтекстноеМеню - 9 - true - - LabelField - Enter - true - true - Left - true - - true - true + ColumnGroup + + Vertical + auto + true - - Важность - 48 - - <key>ru</key> - <value>Важность проблемы</value> - - true - true - - true - - - Список.ВажностьПроблемы - - - ru - Статус проблем, регистрируемых проверкой - - - ВажностьРасширеннаяПодсказка - 50 - Label - true - true - - Left - - - - ВажностьКонтекстноеМеню - 49 - true - - LabelField - Enter - true - Left - true - - true - true - - - - СпособВыполнения - 51 - - <key>ru</key> - <value>Запуск</value> - - true - - true - - - Список.СпособВыполнения - - - ru - Способ выполнения проверки - - - СпособВыполненияРасширеннаяПодсказка - 53 - Label - true - true - - Left - - - - СпособВыполненияКонтекстноеМеню - 52 - true - - LabelField - Enter - Left - true - - true - true - - - - ИдентификаторРегламентногоЗадания - 142 - true - - true - - - Список.ИдентификаторРегламентногоЗадания - - - ИдентификаторРегламентногоЗаданияРасширеннаяПодсказка - 144 - Label - true - true - - Left - - - - ИдентификаторРегламентногоЗаданияКонтекстноеМеню - 143 - true - - LabelField - Enter - true - Left - true - - true - true - - - - ЭтоГруппа - 139 - true - - true - - - Список.ЭтоГруппа - - - ЭтоГруппаРасширеннаяПодсказка - 141 - Label - true - true - - Left - - - - ЭтоГруппаКонтекстноеМеню - 140 - true - - CheckBoxField - Enter - true - Left - true - - Ссылка 136 + true true - - true - + Список.Ссылка @@ -725,6 +711,9 @@ Список.ИдентификаторРегламентногоЗадания + + Список.Использование + Список.СпособВыполнения @@ -749,7 +738,9 @@ Проверки.Использование КАК Использование, ВЫРАЗИТЬ("" КАК СТРОКА(128)) КАК РегламентноеЗаданиеПредставление, Проверки.ЭтоГруппа КАК ЭтоГруппа, - Проверки.ИдентификаторРегламентногоЗадания КАК ИдентификаторРегламентногоЗадания + Проверки.ИдентификаторРегламентногоЗадания КАК ИдентификаторРегламентногоЗадания, + Проверки.Причины КАК Причины, + Проверки.Рекомендация КАК Рекомендация ИЗ Справочник.ПравилаПроверкиУчета КАК Проверки Catalog.ПравилаПроверкиУчета @@ -802,7 +793,7 @@ 1 ru - Выполнить проверку состояния системы + Выполнить проверку ведения учета true diff --git a/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Module.bsl index f342f0204..4bc7ddbb6 100644 --- a/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Module.bsl @@ -4,13 +4,21 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + УстановитьУсловноеОформление(); + Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; - МодульПользователи = ОбщегоНазначения.ОбщийМодуль("Пользователи"); - Если Не ( (Не ОбщегоНазначения.РазделениеВключено() И МодульПользователи.ЭтоПолноправныйПользователь()) - Или (ОбщегоНазначения.РазделениеВключено() И МодульПользователи.ЭтоПолноправныйПользователь(, Истина)) ) Тогда + РазрешеноНастраиватьПравилаПроверкиУчета = ПравоДоступа("Изменение", Метаданные.Справочники.ПравилаПроверкиУчета); + Элементы.ФормаВыполнитьПроверку.Видимость = РазрешеноНастраиватьПравилаПроверкиУчета; + Элементы.СписокКонтекстноеМенюВыполнитьПроверку.Видимость = РазрешеноНастраиватьПравилаПроверкиУчета; + Элементы.ФормаВосстановитьПоНачальномуЗаполнению.Видимость = РазрешеноНастраиватьПравилаПроверкиУчета; + + ЭтоАдминистраторСистемы = Пользователи.ЭтоПолноправныйПользователь(, Истина); + + Если Не ( (Не ОбщегоНазначения.РазделениеВключено() И РазрешеноНастраиватьПравилаПроверкиУчета) + Или (ОбщегоНазначения.РазделениеВключено() И ЭтоАдминистраторСистемы) ) Тогда Элементы.ПредставлениеОбщегоРасписания.Видимость = Ложь; Элементы.РегламентноеЗаданиеПредставление.Видимость = Ложь; @@ -22,7 +30,7 @@ Если Не ОбщегоНазначения.РазделениеВключено() Тогда ОбщееРасписаниеПредставление = Строка(ОбщееРегламентноеЗадание.Расписание) Иначе - Если Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + Если ЭтоАдминистраторСистемы Тогда ОбщееРасписаниеПредставление = Строка(ОбщееРегламентноеЗадание.Шаблон.Расписание.Получить()); Элементы.РегламентноеЗаданиеПредставление.Видимость = Истина; Иначе @@ -32,7 +40,7 @@ КонецЕсли; КонецЕсли; Иначе - Если (ОбщегоНазначения.РазделениеВключено() И Пользователи.ЭтоПолноправныйПользователь(, Истина)) Или Не ОбщегоНазначения.РазделениеВключено() Тогда + Если (ОбщегоНазначения.РазделениеВключено() И ЭтоАдминистраторСистемы) Или Не ОбщегоНазначения.РазделениеВключено() Тогда ОбщееРасписаниеПредставление = НСтр("ru = 'Не найдено общее регламентное задание'"); Иначе ОбщееРасписаниеПредставление = ""; @@ -46,10 +54,8 @@ КонецЕсли; - Элементы.ПредставлениеОбщегоРасписания.Доступность = РасписаниеДоступно(); - - ФормаГруппаДействий = Элементы.КоманднаяПанель.ПодчиненныеЭлементы.ФормаГруппаДействий; - ФормаГруппаДействий.ПодчиненныеЭлементы.ФормаВосстановитьПоНачальномуЗаполнению.Видимость = МодульПользователи.ЭтоПолноправныйПользователь(); + Элементы.ПредставлениеОбщегоРасписания.Доступность = ОбновлениеИнформационнойБазы.ОбъектОбработан( + Метаданные.Справочники.ПравилаПроверкиУчета.ПолноеИмя()).Обработан; // СтандартныеПодсистемы.ПодключаемыеКоманды ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект); @@ -91,7 +97,7 @@ ИначеЕсли ДанныеСтроки.СпособВыполнения = Перечисления.СпособВыполненияПроверки.ПоОтдельномуРасписанию Тогда ИдентификаторЗадания = ДанныеСтроки.ИдентификаторРегламентногоЗадания; Если Не ЗначениеЗаполнено(ИдентификаторЗадания) Тогда - ДанныеСтроки.РегламентноеЗаданиеПредставление = НСтр("ru = 'Пустой идентификатор индивидуального задания'"); + ДанныеСтроки.РегламентноеЗаданиеПредставление = НСтр("ru = 'Расписание не задано'"); Иначе НайденноеРегламентноеЗадание = РегламентныеЗаданияСервер.Задание(Новый УникальныйИдентификатор(ИдентификаторЗадания)); Если НайденноеРегламентноеЗадание <> Неопределено Тогда @@ -103,7 +109,8 @@ Параметры = Новый Структура; Параметры.Вставить("Использование", Истина); Параметры.Вставить("Метаданные", Метаданные.РегламентныеЗадания.ПроверкаВеденияУчета); - Параметры.Вставить("Расписание", ОбщегоНазначенияКлиентСервер.СтруктураВРасписание(ОбъектПравила.РасписаниеВыполненияПроверки.Получить())); + Параметры.Вставить("Расписание", ОбщегоНазначенияКлиентСервер.СтруктураВРасписание( + ОбъектПравила.РасписаниеВыполненияПроверки.Получить())); ВосстановленноеЗадание = РегламентныеЗаданияСервер.ДобавитьЗадание(Параметры); @@ -120,7 +127,8 @@ РасписаниеСтрокой = Строка(ВосстановленноеЗадание.Расписание); КонецЕсли; - ДанныеСтроки.РегламентноеЗаданиеПредставление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'По расписанию: ""%1""'"), РасписаниеСтрокой); + ДанныеСтроки.РегламентноеЗаданиеПредставление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'По расписанию: ""%1""'"), РасписаниеСтрокой); КонецЕсли; КонецЕсли; КонецЦикла; @@ -147,28 +155,17 @@ &НаКлиенте Процедура ВыполнитьПроверку(Команда) - ВыделенныеСтроки = Элементы.Список.ВыделенныеСтроки; - Если ВыделенныеСтроки.Количество() = 0 Тогда - ВызватьИсключение НСтр("ru = 'Не выделено ни одной проверки в списке. Выполнение невозможно.'"); + Проверки = ВключенныеПроверки(); + Если Проверки.Количество() = 0 Тогда + ВызватьИсключение НСтр("ru = 'Необходимо выбрать в списке одну или несколько проверок.'"); КонецЕсли; - МассивПроверок = ПодготовкаМассиваПроверок(ВыделенныеСтроки); + ДлительнаяОперация = ВыполнитьПроверкиНаСервере(Проверки); - Если МассивПроверок.Количество() = 0 Тогда - ВызватьИсключение НСтр("ru = 'В списке выделены одни группы. Выполнение невозможно.'"); - КонецЕсли; - - ДлительнаяОперация = ВыполнитьПроверкиНаСервере(МассивПроверок); - Если ДлительнаяОперация <> Неопределено Тогда - - ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); - ПараметрыОжидания.ВыводитьОкноОжидания = Истина; - ПараметрыОжидания.ТекстСообщения = НСтр("ru = 'Идет выполнение выбранных проверок. Это может занять некоторое время'"); - ПараметрыОжидания.Интервал = 2; - - ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, , ПараметрыОжидания); - - КонецЕсли; + ОповещениеОЗавершении = Новый ОписаниеОповещения("ВыполнитьПроверкуЗавершение", ЭтотОбъект); + ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); + ПараметрыОжидания.ТекстСообщения = НСтр("ru = 'Выполняется проверка. Это может занять некоторое время.'"); + ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОповещениеОЗавершении, ПараметрыОжидания); КонецПроцедуры @@ -182,23 +179,55 @@ #Область СлужебныеПроцедурыИФункции &НаСервере -Функция ВыполнитьПроверкиНаСервере(МассивПроверок) +Процедура УстановитьУсловноеОформление() - Если МонопольныйРежим() Тогда - Возврат Неопределено; - КонецЕсли; + Список.УсловноеОформление.Элементы.Очистить(); + + // Отключенные проверки. + + Элемент = Список.УсловноеОформление.Элементы.Добавить(); + + ЭлементОтбораДанных = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Использование"); + ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбораДанных.ПравоеЗначение = Ложь; + ЭлементОтбораДанных.Использование = Истина; + + ЭлементЦветаОформления = Элемент.Оформление.Элементы.Найти("ЦветТекста"); + ЭлементЦветаОформления.Значение = Метаданные.ЭлементыСтиля.ТекстЗапрещеннойЯчейкиЦвет.Значение; + ЭлементЦветаОформления.Использование = Истина; + + // Не выводить, если не описаны причины возникновения проблемы. + + Элемент = Список.УсловноеОформление.Элементы.Добавить(); + + ОформляемоеПоле = Элемент.Поля.Элементы.Добавить(); + ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(Элементы.Причины.Имя); + ОформляемоеПоле.Использование = Истина; + + ЭлементОтбораДанных = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Причины"); + ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; + ЭлементОтбораДанных.Использование = Истина; + + ЭлементЦветаОформления = Элемент.Оформление.Элементы.Найти("Видимость"); + ЭлементЦветаОформления.Значение = Ложь; + ЭлементЦветаОформления.Использование = Истина; + +КонецПроцедуры + +&НаСервере +Функция ВыполнитьПроверкиНаСервере(Проверки) Если ДлительнаяОперация <> Неопределено Тогда ДлительныеОперации.ОтменитьВыполнениеЗадания(ДлительнаяОперация.ИдентификаторЗадания); КонецЕсли; ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); - ПараметрыВыполнения.ОжидатьЗавершение = 0; - ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Выполнение списка проверок'"); - ПараметрыВыполнения.ЗапуститьВФоне = Истина; + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Выполнение проверок ведения учета'"); МассивПараметров = Новый Массив; - Для Каждого Проверка Из МассивПроверок Цикл + Для Каждого Проверка Из Проверки Цикл РеквизитыПроверки = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Проверка, "Идентификатор, Наименование, ИдентификаторРегламентногоЗадания, @@ -218,32 +247,48 @@ КонецЦикла; - Результат = ДлительныеОперации.ВыполнитьВФоне("КонтрольВеденияУчетаСлужебный.ВыполнитьПроверкиВФоновомЗадании", Новый Структура("МассивПараметров", МассивПараметров), ПараметрыВыполнения); - - Возврат Результат; + Возврат ДлительныеОперации.ВыполнитьВФоне("КонтрольВеденияУчетаСлужебный.ВыполнитьПроверкиВФоновомЗадании", + Новый Структура("МассивПараметров", МассивПараметров), ПараметрыВыполнения); КонецФункции +&НаКлиенте +Процедура ВыполнитьПроверкуЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + Если Результат.Статус = "Ошибка" Тогда + ВызватьИсключение Результат.КраткоеПредставлениеОшибки; + ИначеЕсли Результат.Статус = "Выполнено" Тогда + ПоказатьОповещениеПользователя(НСтр("ru = 'Проверка выполнена'"),, + НСтр("ru = 'Проверка ведения учета завершена успешно.'")); + КонецЕсли; + +КонецПроцедуры + &НаСервере Процедура ВосстановитьПоНачальномуЗаполнениюНаСервере() - КонтрольВеденияУчетаСлужебный.ОбновитьПараметрыСистемныхПроверок(); - Если КонтрольВеденияУчетаСлужебный.ЕстьИзмененияПараметровСистемныхПроверок() Тогда + КонтрольВеденияУчетаСлужебный.ОбновитьПараметрыПроверокУчета(); + Если КонтрольВеденияУчетаСлужебный.ЕстьИзмененияПараметровПроверокУчета() Тогда КонтрольВеденияУчетаСлужебный.ОбновитьВспомогательныеДанныеПоИзменениямКонфигурации(); КонецЕсли; КонецПроцедуры -&НаСервере -Функция ПодготовкаМассиваПроверок(МассивПроверок) +&НаКлиенте +Функция ВключенныеПроверки() - ОтфильтрованныйМассив = Новый Массив; - Для Каждого Проверка Из МассивПроверок Цикл - Если Не Проверка.ЭтоГруппа Тогда - ОтфильтрованныйМассив.Добавить(Проверка); + Результат = Новый Массив; + Для Каждого Проверка Из Элементы.Список.ВыделенныеСтроки Цикл + ДанныеПроверки = Элементы.Список.ДанныеСтроки(Проверка); + Если ДанныеПроверки <> Неопределено И Не ДанныеПроверки.ЭтоГруппа Тогда + Результат.Добавить(ДанныеПроверки.Ссылка); КонецЕсли; КонецЦикла; - Возврат ОтфильтрованныйМассив; + Возврат Результат; КонецФункции @@ -318,26 +363,6 @@ КонецПроцедуры -&НаСервере -Функция РасписаниеДоступно() - - Запрос = Новый Запрос( - "ВЫБРАТЬ - | ПравилаПроверкиУчета.Ссылка КАК ПравилоПроверки - |ИЗ - | Справочник.ПравилаПроверкиУчета КАК ПравилаПроверкиУчета"); - Результат = Запрос.Выполнить().Выбрать(); - - Пока Результат.Следующий() Цикл - Если Не ОбновлениеИнформационнойБазы.ОбъектОбработан(Результат.ПравилоПроверки).Обработан Тогда - Возврат Ложь; - КонецЕсли; - КонецЦикла; - - Возврат Истина; - -КонецФункции - // СтандартныеПодсистемы.ПодключаемыеКоманды &НаКлиенте Процедура Подключаемый_ВыполнитьКоманду(Команда) diff --git a/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаЭлемента/Form.form index 33f2c93f8..2ac5126cb 100644 --- a/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаЭлемента/Form.form @@ -35,7 +35,7 @@ Left true - true + 60 true true true @@ -60,6 +60,10 @@ Объект.Использование Right + + ru + Если флажок снят, проверка не выполняется ни интерактивно, ни по расписанию + ИспользованиеРасширеннаяПодсказка 157 @@ -103,6 +107,7 @@ UsualGroup + HorizontalIfPossible Auto WeakSeparation true @@ -512,6 +517,7 @@ UsualGroup + HorizontalIfPossible Auto WeakSeparation true @@ -687,6 +693,7 @@ UsualGroup + HorizontalIfPossible Auto WeakSeparation true @@ -1097,7 +1104,7 @@ 1 ru - Выполнить проверку состояния системы + Выполнить проверку ведения учета true diff --git a/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаЭлемента/Module.bsl index 67c27ad8e..97743a2d1 100644 --- a/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаЭлемента/Module.bsl @@ -8,43 +8,30 @@ Возврат; КонецЕсли; - ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект); - Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда - Отказ = Истина; ВызватьИсключение НСтр("ru='Интерактивное создание запрещено.'"); КонецЕсли; - МетаданныеТекущейПроверки = МетаданныеТекущейПроверки(Объект.Идентификатор); + ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект); + Элементы.ПредставлениеИндивидуальногоРасписания.Доступность = Не ТолькоПросмотр; + Элементы.ПредставлениеОбщегоРасписания.Доступность = Не ТолькоПросмотр; + МетаданныеТекущейПроверки = МетаданныеПроверки(Объект.Идентификатор); УстановитьДоступностьПоляВажности(ЭтотОбъект, МетаданныеТекущейПроверки); УстановитьПутьДоПроцедурыОбработчика(ЭтотОбъект, МетаданныеТекущейПроверки); - Если Не ОбновлениеИнформационнойБазы.ОбъектОбработан(Объект).Обработан Тогда - - Элементы.ПредставлениеИндивидуальногоРасписания.Доступность = Ложь; - Элементы.ПредставлениеОбщегоРасписания.Доступность = Ложь; - - Иначе - - УстановитьНачальныеНастройкиРасписания(); - - Если Не ОбщегоНазначения.РазделениеВключено() Тогда - СформироватьРасписания(); - Иначе - - МодульПользователи = ОбщегоНазначения.ОбщийМодуль("Пользователи"); - Если МодульПользователи.ЭтоПолноправныйПользователь(, Истина) Тогда - СформироватьРасписания(); - Элементы.ГруппаРасписание.ТолькоПросмотр = Истина; - Иначе - Элементы.ГруппаРасписание.Видимость = Ложь; - КонецЕсли; - - КонецЕсли; - - КонецЕсли; + РазрешеноНастраиватьПравилаПроверкиУчета = ПравоДоступа("Изменение", Метаданные.Справочники.ПравилаПроверкиУчета); + Элементы.ФормаВыполнитьПроверку.Видимость = РазрешеноНастраиватьПравилаПроверкиУчета; + Элементы.ФормаУстановитьСтандартныеНастройки.Видимость = РазрешеноНастраиватьПравилаПроверкиУчета; + УстановитьНачальныеНастройкиРасписания(); + ЭтоАдминистраторСистемы = Пользователи.ЭтоПолноправныйПользователь(, Истина); + Если Не ОбщегоНазначения.РазделениеВключено() Или ЭтоАдминистраторСистемы Тогда + СформироватьРасписания(); + ИначеЕсли ОбщегоНазначения.РазделениеВключено() И Не ЭтоАдминистраторСистемы Тогда + Элементы.ГруппаРасписание.Видимость = Ложь; + КонецЕсли; + // СтандартныеПодсистемы.ПодключаемыеКоманды ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды @@ -132,17 +119,17 @@ &НаКлиенте Процедура ВыполнитьПроверку(Команда) - ДлительнаяОперация = ВыполнитьПроверкуНаСервере(); - Если ДлительнаяОперация <> Неопределено Тогда - - ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); - ПараметрыОжидания.ВыводитьОкноОжидания = Истина; - ПараметрыОжидания.ТекстСообщения = НСтр("ru = 'Идет выполнение проверки. Это может занять некоторое время'"); - ПараметрыОжидания.Интервал = 2; - - ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, , ПараметрыОжидания); - - КонецЕсли; + Если Не Записать() Тогда + Возврат; + КонецЕсли; + + Если Не Объект.Использование Тогда + ОповещениеОЗавершении = Новый ОписаниеОповещения("ВыполнитьПроверкуПослеВопроса", ЭтотОбъект); + ПоказатьВопрос(ОповещениеОЗавершении, НСтр("ru = 'Проверка отключена. Все равно выполнить?'"), РежимДиалогаВопрос.ДаНет); + Возврат; + КонецЕсли; + + ВыполнитьПроверкуПослеВопроса(КодВозвратаДиалога.Да, Неопределено); КонецПроцедуры @@ -162,18 +149,13 @@ &НаСервере Функция ВыполнитьПроверкуНаСервере() - Если МонопольныйРежим() Тогда - Возврат Неопределено; - КонецЕсли; - Если ДлительнаяОперация <> Неопределено Тогда ДлительныеОперации.ОтменитьВыполнениеЗадания(ДлительнаяОперация.ИдентификаторЗадания); КонецЕсли; ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); - ПараметрыВыполнения.ОжидатьЗавершение = 0; - ПараметрыВыполнения.НаименованиеФоновогоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Выполнение проверки ""%1""'"), Объект.Наименование); - ПараметрыВыполнения.ЗапуститьВФоне = Истина; + ПараметрыВыполнения.НаименованиеФоновогоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Выполнение проверки ведения учета ""%1""'"), Объект.Наименование); МассивПараметров = Новый Массив; @@ -192,12 +174,43 @@ МассивПараметров.Добавить(ПараметрыЗадания); - Результат = ДлительныеОперации.ВыполнитьВФоне("КонтрольВеденияУчетаСлужебный.ВыполнитьПроверкиВФоновомЗадании", Новый Структура("МассивПараметров", МассивПараметров), ПараметрыВыполнения); - - Возврат Результат; + Возврат ДлительныеОперации.ВыполнитьВФоне("КонтрольВеденияУчетаСлужебный.ВыполнитьПроверкиВФоновомЗадании", + Новый Структура("МассивПараметров", МассивПараметров), ПараметрыВыполнения); КонецФункции +&НаКлиенте +Процедура ВыполнитьПроверкуПослеВопроса(РезультатВопроса, ДополнительныеПараметры) Экспорт + + Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда + Возврат; + КонецЕсли; + + ДлительнаяОперация = ВыполнитьПроверкуНаСервере(); + + ОповещениеОЗавершении = Новый ОписаниеОповещения("ВыполнитьПроверкуЗавершение", ЭтотОбъект); + ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); + ПараметрыОжидания.ТекстСообщения = НСтр("ru = 'Выполняется проверка. Это может занять некоторое время.'"); + ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОповещениеОЗавершении, ПараметрыОжидания); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьПроверкуЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + Если Результат.Статус = "Ошибка" Тогда + ВызватьИсключение Результат.КраткоеПредставлениеОшибки; + ИначеЕсли Результат.Статус = "Выполнено" Тогда + ПоказатьОповещениеПользователя(НСтр("ru = 'Проверка выполнена'"),, + НСтр("ru = 'Проверка ведения учета завершена успешно.'")); + КонецЕсли; + +КонецПроцедуры + &НаСервере Процедура СформироватьРасписания() @@ -329,7 +342,7 @@ КонецПроцедуры &НаСервереБезКонтекста -Функция МетаданныеТекущейПроверки(Идентификатор) +Функция МетаданныеПроверки(Идентификатор) СтруктураПроверки = Новый Структура; Проверки = КонтрольВеденияУчетаСлужебныйПовтИсп.ПроверкиВеденияУчета().Проверки; @@ -373,7 +386,7 @@ &НаСервере Процедура УстановитьСтандартныеНастройкиНаСервере() - МетаданныеТекущейПроверки = МетаданныеТекущейПроверки(Объект.Идентификатор); + МетаданныеТекущейПроверки = МетаданныеПроверки(Объект.Идентификатор); Если МетаданныеТекущейПроверки = Неопределено Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Рассинхронизация проверок учета. Проверка с идентификатором ""%1"" не найдена в метаданных.'"), Объект.Идентификатор); diff --git a/SSL/src/Catalogs/ПравилаПроверкиУчета/ManagerModule.bsl b/SSL/src/Catalogs/ПравилаПроверкиУчета/ManagerModule.bsl index 6be0fc842..879cd1b04 100644 --- a/SSL/src/Catalogs/ПравилаПроверкиУчета/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПравилаПроверкиУчета/ManagerModule.bsl @@ -25,9 +25,7 @@ КонецЦикла; Запрос.УстановитьПараметр("ИдентификаторыПроверок", ИдентификаторыПроверок); - Ссылки = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); - ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, Ссылки); КонецПроцедуры @@ -50,10 +48,11 @@ Попытка ОтключаемаяПроверкаСсылка = ОтключаемаяПроверка.Ссылка; - + Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить(ПолноеИмяОбъекта); ЭлементБлокировки.УстановитьЗначение("Ссылка", ОтключаемаяПроверкаСсылка); + Блокировка.Заблокировать(); ОтключаемаяПроверкаОбъект = ОтключаемаяПроверкаСсылка.ПолучитьОбъект(); diff --git a/SSL/src/Catalogs/ПравилаПроверкиУчета/ПравилаПроверкиУчета.mdo b/SSL/src/Catalogs/ПравилаПроверкиУчета/ПравилаПроверкиУчета.mdo index 7ae56ae76..c30af73f4 100644 --- a/SSL/src/Catalogs/ПравилаПроверкиУчета/ПравилаПроверкиУчета.mdo +++ b/SSL/src/Catalogs/ПравилаПроверкиУчета/ПравилаПроверкиУчета.mdo @@ -196,7 +196,7 @@ ru - Флаг использования проверки. + Проверка включена diff --git a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ПрограммаВОблачномСервисе/Form.form b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ПрограммаВОблачномСервисе/Form.form index 5904dae5f..234bddca2 100644 --- a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ПрограммаВОблачномСервисе/Form.form +++ b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ПрограммаВОблачномСервисе/Form.form @@ -98,6 +98,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Form.form index ae474612d..6b25da57c 100644 --- a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Form.form @@ -159,6 +159,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -274,6 +275,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -618,6 +620,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl b/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl index 9e9e50bb3..6629d5b54 100644 --- a/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl @@ -327,9 +327,10 @@ ОтборСтрок.КодПроизводственногоКалендаря = Выборка.КодКалендаря; ДанныеКалендаряИзМакета = ДанныеИзМакета.НайтиСтроки(ОтборСтрок); НомераГодов = ОбщегоНазначения.ВыгрузитьКолонку(ДанныеКалендаряИзМакета, "Год", Истина); - Если НомераГодов.Количество() = 0 Тогда - // Заполняем по умолчанию на текущий год. - НомераГодов.Добавить(Год(ТекущаяДатаСеанса())); + ТекущийГод = Год(ТекущаяДатаСеанса()); + Если НомераГодов.Найти(ТекущийГод) = Неопределено Тогда + // Добавляем по умолчанию текущий год. + НомераГодов.Добавить(ТекущийГод); КонецЕсли; Для Каждого НомерГода Из НомераГодов Цикл ДанныеКалендаря = РезультатЗаполненияПроизводственногоКалендаряПоУмолчанию(Выборка.КодКалендаря, НомерГода, Выборка.КодБазовогоКалендаря); @@ -548,7 +549,7 @@ ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписей); Продолжить; КонецЕсли; - НаборЗаписей.Записать(Истина); + НаборЗаписей.Записать(); КонецЦикла; КонецЦикла; @@ -622,7 +623,7 @@ Если ОбновлениеИнформационнойБазы.ЭтоВызовИзОбработчикаОбновления() Тогда ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписей); Иначе - НаборЗаписей.Записать(Истина); + НаборЗаписей.Записать(); КонецЕсли; // Добавляем в таблицу изменений. НоваяСтрока = ИзмененияКалендарей.Добавить(); @@ -1003,41 +1004,17 @@ Функция ПечатнаяФормаПроизводственногоКалендаря(ПараметрыПодготовкиПечатнойФормы) - ТекстЗапроса = - "ВЫБРАТЬ - | ГОД(ДанныеКалендаря.Дата) КАК ГодКалендаря, - | КВАРТАЛ(ДанныеКалендаря.Дата) КАК КварталКалендаря, - | МЕСЯЦ(ДанныеКалендаря.Дата) КАК МесяцКалендаря, - | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ДанныеКалендаря.Дата) КАК КалендарныеДни, - | ДанныеКалендаря.ВидДня КАК ВидДня - |ИЗ - | РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеКалендаря - |ГДЕ - | ДанныеКалендаря.Год = &Год - | И ДанныеКалендаря.ПроизводственныйКалендарь = &ПроизводственныйКалендарь - | - |СГРУППИРОВАТЬ ПО - | ДанныеКалендаря.ВидДня, - | ГОД(ДанныеКалендаря.Дата), - | КВАРТАЛ(ДанныеКалендаря.Дата), - | МЕСЯЦ(ДанныеКалендаря.Дата) - | - |УПОРЯДОЧИТЬ ПО - | ГодКалендаря, - | КварталКалендаря, - | МесяцКалендаря - |ИТОГИ ПО - | ГодКалендаря, - | КварталКалендаря, - | МесяцКалендаря"; + ТабличныйДокумент = Новый ТабличныйДокумент; + + Макет = ПолучитьМакет("ПФ_MXL_ПроизводственныйКалендарь"); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда + МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью"); + Макет = МодульУправлениеПечатью.МакетПечатнойФормы("Справочник.ПроизводственныеКалендари.ПФ_MXL_ПроизводственныйКалендарь"); + КонецЕсли; ПроизводственныйКалендарь = ПараметрыПодготовкиПечатнойФормы.ПроизводственныйКалендарь; НомерГода = ПараметрыПодготовкиПечатнойФормы.НомерГода; - Макет = ПолучитьМакет("ПФ_MXL_ПроизводственныйКалендарь"); - - ТабличныйДокумент = Новый ТабличныйДокумент; - ЗаголовокПечати = Макет.ПолучитьОбласть("Заголовок"); ЗаголовокПечати.Параметры.ПроизводственныйКалендарь = ПроизводственныйКалендарь; ЗаголовокПечати.Параметры.Год = Формат(НомерГода, "ЧГ="); @@ -1054,9 +1031,36 @@ ВидыНерабочихДней.Добавить(Перечисления.ВидыДнейПроизводственногоКалендаря.Праздник); ВидыНерабочихДней.Добавить(Перечисления.ВидыДнейПроизводственногоКалендаря.Нерабочий); - Запрос = Новый Запрос(ТекстЗапроса); + Запрос = Новый Запрос; Запрос.УстановитьПараметр("Год", НомерГода); Запрос.УстановитьПараметр("ПроизводственныйКалендарь", ПроизводственныйКалендарь); + Запрос.Текст = + "ВЫБРАТЬ + | ГОД(ДанныеКалендаря.Дата) КАК ГодКалендаря, + | КВАРТАЛ(ДанныеКалендаря.Дата) КАК КварталКалендаря, + | МЕСЯЦ(ДанныеКалендаря.Дата) КАК МесяцКалендаря, + | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ДанныеКалендаря.Дата) КАК КалендарныеДни, + | ДанныеКалендаря.ВидДня КАК ВидДня + |ИЗ + | РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеКалендаря + |ГДЕ + | ДанныеКалендаря.Год = &Год + | И ДанныеКалендаря.ПроизводственныйКалендарь = &ПроизводственныйКалендарь + | + |СГРУППИРОВАТЬ ПО + | ДанныеКалендаря.ВидДня, + | ГОД(ДанныеКалендаря.Дата), + | КВАРТАЛ(ДанныеКалендаря.Дата), + | МЕСЯЦ(ДанныеКалендаря.Дата) + | + |УПОРЯДОЧИТЬ ПО + | ГодКалендаря, + | КварталКалендаря, + | МесяцКалендаря + |ИТОГИ ПО + | ГодКалендаря, + | КварталКалендаря, + | МесяцКалендаря"; Результат = Запрос.Выполнить(); ВыборкаПоГоду = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/ObjectModule.bsl b/SSL/src/Catalogs/ПроизводственныеКалендари/ObjectModule.bsl index 93888ca0e..722885c57 100644 --- a/SSL/src/Catalogs/ПроизводственныеКалендари/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/ObjectModule.bsl @@ -22,12 +22,12 @@ Процедура ПроверитьИспользованиеБазовогоКалендаря(Отказ) - Если ЭтотОбъект.Ссылка.Пустая() Или Не ЗначениеЗаполнено(ЭтотОбъект.БазовыйКалендарь) Тогда + Если Ссылка.Пустая() Или Не ЗначениеЗаполнено(БазовыйКалендарь) Тогда Возврат; КонецЕсли; // Запрещаем ссылку на самого себя. - Если ЭтотОбъект.Ссылка = ЭтотОбъект.БазовыйКалендарь Тогда + Если Ссылка = БазовыйКалендарь Тогда ТекстСообщения = НСтр("ru = 'В качестве базового не может быть выбран тот же самый календарь.'"); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , , "Объект.БазовыйКалендарь", Отказ); Возврат; @@ -37,7 +37,7 @@ // то запрещаем заполнить базовый, чтобы избежать циклических зависимостей. Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Календарь", ЭтотОбъект.Ссылка); + Запрос.УстановитьПараметр("Календарь", Ссылка); Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | Ссылка diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаГруппы/Form.form b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаГруппы/Form.form index b6f0d0c84..69c067800 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаГруппы/Form.form +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаГруппы/Form.form @@ -135,6 +135,10 @@ + + OnReadAtServer + ПриЧтенииНаСервере + Folders diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаГруппы/Module.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаГруппы/Module.bsl index 97da81ddf..9ea1a9470 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаГруппы/Module.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаГруппы/Module.bsl @@ -14,4 +14,16 @@ КонецПроцедуры +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Form.form index 99cf4105c..d33f5e3f3 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Form.form @@ -173,6 +173,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Form.form index 14af86e81..93dac9a95 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Form.form @@ -95,6 +95,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -269,6 +270,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1349,6 +1351,7 @@ Page + HorizontalIfPossible false diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl index 80b49aa43..391e6e6d8 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl @@ -82,6 +82,13 @@ УстановитьДоступностьОписанияИВосстановленияПоставляемогоПрофиля(ТекущийОбъект); + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + КонецПроцедуры &НаКлиенте diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl index 62058fa69..6fc520f38 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl @@ -4,17 +4,6 @@ #Область ДляВызоваИзДругихПодсистем -// ТехнологияСервиса.ВыгрузкаЗагрузкаДанных - -// См. ВыгрузкаЗагрузкаДанныхПереопределяемый.ПриРегистрацииОбработчиковВыгрузкиДанных. -Процедура ПередВыгрузкойОбъекта(Контейнер, МенеджерВыгрузкиОбъекта, Сериализатор, Объект, Артефакты, Отказ) Экспорт - - УправлениеДоступомСлужебный.ПередВыгрузкойОбъекта(Контейнер, МенеджерВыгрузкиОбъекта, Сериализатор, Объект, Артефакты, Отказ); - -КонецПроцедуры - -// Конец ТехнологияСервиса.ВыгрузкаЗагрузкаДанных - // СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов // Возвращает реквизиты объекта, которые не рекомендуется редактировать @@ -37,6 +26,39 @@ // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "ПрисоединитьДополнительныеТаблицы + |ЭтотСписок КАК ПрофилиГруппДоступа + | + |ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа + | ПО ГруппыДоступа.Профиль = ПрофилиГруппДоступа.Ссылка + |; + |РазрешитьЧтениеИзменение + |ГДЕ + | ЭтоГруппа + | ИЛИ Ссылка <> Значение(Справочник.ПрофилиГруппДоступа.Администратор) + | И ЭтоАвторизованныйПользователь(ГруппыДоступа.Ответственный)"; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + +// ТехнологияСервиса.ВыгрузкаЗагрузкаДанных + +// См. ВыгрузкаЗагрузкаДанныхПереопределяемый.ПриРегистрацииОбработчиковВыгрузкиДанных. +Процедура ПередВыгрузкойОбъекта(Контейнер, МенеджерВыгрузкиОбъекта, Сериализатор, Объект, Артефакты, Отказ) Экспорт + + УправлениеДоступомСлужебный.ПередВыгрузкойОбъекта(Контейнер, МенеджерВыгрузкиОбъекта, Сериализатор, Объект, Артефакты, Отказ); + +КонецПроцедуры + +// Конец ТехнологияСервиса.ВыгрузкаЗагрузкаДанных + #КонецОбласти #КонецОбласти diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Form.form b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Form.form index ffa67ac0d..a213730f2 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Form.form +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Form.form @@ -190,6 +190,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаГруппы/Form.form b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаГруппы/Form.form index 6cea35d28..395de725c 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаГруппы/Form.form +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаГруппы/Form.form @@ -148,6 +148,10 @@ + + OnReadAtServer + ПриЧтенииНаСервере + Folders diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаГруппы/Module.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаГруппы/Module.bsl index 29d129faa..71a5b59b3 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаГруппы/Module.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаГруппы/Module.bsl @@ -16,4 +16,16 @@ КонецПроцедуры +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Form.form index c2991c36e..56424de73 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Form.form @@ -207,6 +207,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -270,7 +271,7 @@ Left - Form.Item.Список.StandardCommand.Choose + 0 Normal Auto true diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Form.form index 14ca73040..b57f50070 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Form.form @@ -105,6 +105,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -408,6 +409,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1834,6 +1836,7 @@ Page + HorizontalIfPossible auto false @@ -2195,6 +2198,7 @@ Page + HorizontalIfPossible auto false @@ -2594,6 +2598,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2622,6 +2627,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2738,6 +2744,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -3064,6 +3071,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -3309,6 +3317,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -4015,6 +4024,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -4416,6 +4426,7 @@ Page + HorizontalIfPossible auto false @@ -4583,6 +4594,7 @@ Page + HorizontalIfPossible auto false @@ -4707,6 +4719,7 @@ Page + HorizontalIfPossible auto false @@ -4756,6 +4769,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -4871,6 +4885,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -5016,6 +5031,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -7000,6 +7016,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -7654,6 +7671,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -7947,6 +7965,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -8056,6 +8075,7 @@ UsualGroup + HorizontalIfPossible Auto WeakSeparation true diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl index f0ebad9c7..d13890c67 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl @@ -23,6 +23,13 @@ Строка.НеОтправлятьПустой = Не Строка.ОтправлятьЕслиПустой; КонецЦикла; + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + КонецПроцедуры &НаСервере @@ -902,22 +909,22 @@ Если СтруктураВыбора.Выбрано.Количество = 1 Тогда ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось добавить отчет по причине: + НСтр("ru = 'Не удалось включить отчет в рассылку по причине: |%1'"), СтруктураВыбора.СОшибками.Текст); ИначеЕсли СтруктураВыбора.Успешно.Количество = 0 Тогда ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось добавить отчеты по причине: + НСтр("ru = 'Не удалось включить отчеты в рассылку по причине: |%1'"), СтруктураВыбора.СОшибками.Текст); Иначе ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Добавлено отчетов: %1 из %2 + НСтр("ru = 'В рассылку включено отчетов: %1 из %2 |Подробности: |%3'"), Формат(СтруктураВыбора.Успешно.Количество, "ЧН=0; ЧГ="), Формат(СтруктураВыбора.Выбрано.Количество, "ЧН=0; ЧГ="), СтруктураВыбора.СОшибками.Текст); КонецЕсли; - СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(Неопределено, ТекстСообщения, РежимДиалогаВопрос.ОК); + ПоказатьПредупреждение(Неопределено, ТекстСообщения); Иначе @@ -3007,6 +3014,23 @@ Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина); + // Оформление получателей рассылки + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ПользовательскиеНастройкиЗначение.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ПользовательскиеНастройкиЗначение.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("КомпоновщикНастроекКД.ПользовательскиеНастройки.Значение"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = НСтр("ru='<Пустое значение>'"); + + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru='[Получатель]'")); + Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина); + КонецПроцедуры &НаСервереБезКонтекста @@ -3208,12 +3232,6 @@ // Проверка результата инициализации. Если Не СтрокаОтчеты.Инициализирован Тогда - ПараметрыОтчета.Ошибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Отчет ""%1"" был удален из-за ошибки инициализации: - |%2'"), - Строка(СтрокаОтчеты.Представление), - ПараметрыОтчета.Ошибки); - // Удаление строки. Объект.Отчеты.Удалить(СтрокаОтчеты); diff --git a/SSL/src/Catalogs/РассылкиОтчетов/ManagerModule.bsl b/SSL/src/Catalogs/РассылкиОтчетов/ManagerModule.bsl index fe661636e..c0b2d60e2 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/ManagerModule.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/ManagerModule.bsl @@ -24,6 +24,22 @@ // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтениеИзменение + |ГДЕ + | ЭтоАвторизованныйПользователь(Автор) + | ИЛИ Личная = ЛОЖЬ + | ИЛИ ЭтоГруппа = ИСТИНА"; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + #КонецОбласти #КонецОбласти diff --git a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Form.form index fb41d576b..e4517c2f3 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Form.form @@ -179,6 +179,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -271,6 +272,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -546,6 +548,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/Catalogs/РолиИсполнителей/ObjectModule.bsl b/SSL/src/Catalogs/РолиИсполнителей/ObjectModule.bsl index f0426dc66..a30283739 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/ObjectModule.bsl +++ b/SSL/src/Catalogs/РолиИсполнителей/ObjectModule.bsl @@ -38,9 +38,9 @@ КонецЕсли; Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьВнешнихПользователей") Тогда - Если ЭтотОбъект.Назначение.Найти(Справочники.Пользователи.ПустаяСсылка(), "ТипПользователей") = Неопределено Тогда + Если Назначение.Найти(Справочники.Пользователи.ПустаяСсылка(), "ТипПользователей") = Неопределено Тогда // При отключенных внешних пользователях, роль всегда должна быть назначена пользователям. - ЭтотОбъект.Назначение.Добавить().ТипПользователей = Справочники.Пользователи.ПустаяСсылка(); + Назначение.Добавить().ТипПользователей = Справочники.Пользователи.ПустаяСсылка(); КонецЕсли; КонецЕсли; diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Form.form index 3c5841dac..2f1fca22e 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Form.form @@ -113,6 +113,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -213,6 +214,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -241,6 +243,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1193,6 +1196,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1508,6 +1512,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификата/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификата/Form.form index e945c3fd6..8a94f9f27 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификата/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификата/Form.form @@ -322,6 +322,7 @@ Page + HorizontalIfPossible auto false @@ -473,6 +474,7 @@ Page + HorizontalIfPossible auto false @@ -681,6 +683,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификатаДляШифрования/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификатаДляШифрования/Form.form index 14f14252d..9e35bc818 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификатаДляШифрования/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификатаДляШифрования/Form.form @@ -113,6 +113,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -213,6 +214,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -241,6 +243,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1195,6 +1198,7 @@ UsualGroup + HorizontalIfPossible Left Auto true diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодборСертификатовДляШифрования/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодборСертификатовДляШифрования/Form.form index ed8c018c0..73ab32c99 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодборСертификатовДляШифрования/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодборСертификатовДляШифрования/Form.form @@ -146,6 +146,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Form.form index 23d71a040..cebe1a322 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Form.form @@ -507,6 +507,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Module.bsl index 6394e8652..f1714b92e 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Module.bsl @@ -227,7 +227,7 @@ Если КлиентскиеПараметры.Свойство("УказанКонтекстДругойОперации") Тогда СвойстваСертификата = ОбщиеВнутренниеДанные; - КлиентскиеПараметры.ОписаниеДанных.КонтекстОперации.ПродолжитьОткрытие(Неопределено, Неопределено, СвойстваСертификата); + КлиентскиеПараметры.ОписаниеДанных.КонтекстОперации.ПродолжитьОткрытие(,, СвойстваСертификата); Если СвойстваСертификата.Сертификат = Сертификат Тогда СвойстваПароля = СвойстваСертификата.СвойстваПароля; КонецЕсли; diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Form.form index 32746a5d0..14298bc3e 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Form.form @@ -147,6 +147,7 @@ UsualGroup + HorizontalIfPossible Center Auto true @@ -304,6 +305,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -463,6 +465,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -627,6 +630,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -786,6 +790,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -977,6 +982,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1136,6 +1142,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1295,6 +1302,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1454,6 +1462,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1873,6 +1882,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Module.bsl index af9ccbc4f..81fb6884c 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Module.bsl @@ -46,7 +46,7 @@ Для каждого Проверка Из Проверки Цикл Группа = Элементы.Добавить("Группа" + Проверка.Имя, Тип("ГруппаФормы"), Элементы.ГруппаДополнительныеПроверки); Группа.Вид = ВидГруппыФормы.ОбычнаяГруппа; - Группа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + Группа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; Группа.ОтображатьЗаголовок = Ложь; Группа.Отображение = ОтображениеОбычнойГруппы.Нет; @@ -145,19 +145,25 @@ &НаКлиенте Процедура Подключаемый_КартинкаНажатие(Элемент) - Если ЗначениеЗаполнено(Элемент.Подсказка) Тогда - Если Элемент.Подсказка = НСтр("ru = 'Проверка выполнена успешно.'") Тогда - ПоказатьПредупреждение(, Элемент.Подсказка); - Иначе - ПараметрыПредупреждения = Новый Структура; + ПараметрыПредупреждения = Новый Структура; + ПараметрыПредупреждения.Вставить("ТекстПредупреждения", Элемент.Подсказка); + + Если СтрЗаканчиваетсяНа(Элемент.Имя, "НаКлиентеКартинка") Тогда + ИмяПроверки = Лев(Элемент.Имя, СтрДлина(Элемент.Имя) - СтрДлина("НаКлиентеКартинка")); - ПараметрыПредупреждения.Вставить("ТекстПредупреждения", Элемент.Подсказка); - ПараметрыПредупреждения.Вставить("ЗаголовокПредупреждения", НСтр("ru = 'Сертификат недействителен по причине:'")); - - ОткрытьФорму("ОбщаяФорма.РезультатПроверки", ПараметрыПредупреждения); - КонецЕсли; + ИначеЕсли СтрЗаканчиваетсяНа(Элемент.Имя, "НаСервереКартинка") Тогда + ИмяПроверки = Лев(Элемент.Имя, СтрДлина(Элемент.Имя) - СтрДлина("НаСервереКартинка")); + Иначе + ИмяПроверки = Неопределено; КонецЕсли; + Если ЗначениеЗаполнено(ИмяПроверки) Тогда + ПараметрыПредупреждения.Вставить("ЗаголовокПредупреждения", + Элементы[ИмяПроверки + "Надпись"].Заголовок); + КонецЕсли; + + ОткрытьФорму("ОбщаяФорма.РезультатПроверки", ПараметрыПредупреждения); + КонецПроцедуры @@ -191,7 +197,7 @@ ЭтотОбъект, Элемент, НавигационнаяСсылка, СтандартнаяОбработка, СвойстваПароля); КонецПроцедуры - + &НаКлиенте Процедура ИнструкцияНажатие(Элемент) diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Form.form index e940f1c27..539df6793 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Form.form @@ -72,6 +72,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -274,6 +275,7 @@ Page + HorizontalIfPossible auto false @@ -501,6 +503,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Module.bsl index 8ab57a766..813ecd85b 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Module.bsl @@ -257,7 +257,7 @@ Если КлиентскиеПараметры.Свойство("УказанКонтекстДругойОперации") Тогда СвойстваСертификата = ОбщиеВнутренниеДанные; - КлиентскиеПараметры.ОписаниеДанных.КонтекстОперации.ПродолжитьОткрытие(Неопределено, Неопределено, СвойстваСертификата); + КлиентскиеПараметры.ОписаниеДанных.КонтекстОперации.ПродолжитьОткрытие(,, СвойстваСертификата); Если СвойстваСертификата.Сертификат = Сертификат Тогда СвойстваПароля = СвойстваСертификата.СвойстваПароля; КонецЕсли; diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаВыбора/Module.bsl index 861f43979..4c0dee16c 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаВыбора/Module.bsl @@ -17,8 +17,11 @@ Если Не ОбщиеНастройки.ИспользоватьШифрование И Не ОбщиеНастройки.ЗаявлениеНаВыпускСертификатаДоступно Тогда - Элементы.ФормаСоздать.Заголовок = НСтр("ru = 'Добавить'"); - Элементы.СписокКонтекстноеМенюСоздать.Заголовок = НСтр("ru = 'Добавить'"); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "ФормаСоздать", "Заголовок", НСтр("ru = 'Добавить'")); + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "СписокКонтекстноеМенюСоздать", "Заголовок", НСтр("ru = 'Добавить'")); КонецЕсли; Если Метаданные.Обработки.Найти("ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата") <> Неопределено Тогда @@ -93,11 +96,17 @@ Если ОбщиеНастройки.ИспользоватьШифрование Или ОбщиеНастройки.ЗаявлениеНаВыпускСертификатаДоступно Тогда - Элементы.ФормаСоздать.Заголовок = НСтр("ru = 'Добавить...'"); - Элементы.СписокКонтекстноеМенюСоздать.Заголовок = НСтр("ru = 'Добавить...'"); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "ФормаСоздать", "Заголовок", НСтр("ru = 'Добавить...'")); + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "СписокКонтекстноеМенюСоздать", "Заголовок", НСтр("ru = 'Добавить...'")); Иначе - Элементы.ФормаСоздать.Заголовок = НСтр("ru = 'Добавить'"); - Элементы.СписокКонтекстноеМенюСоздать.Заголовок = НСтр("ru = 'Добавить'"); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "ФормаСоздать", "Заголовок", НСтр("ru = 'Добавить'")); + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "СписокКонтекстноеМенюСоздать", "Заголовок", НСтр("ru = 'Добавить'")); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Form.form index e800ee40c..230cbd446 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Form.form @@ -331,6 +331,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -500,6 +501,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -616,6 +618,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -864,6 +867,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -922,6 +926,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1029,6 +1034,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Templates/КомпонентаXMLDSIG/Template.bin b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Templates/КомпонентаXMLDSIG/Template.addin similarity index 100% rename from SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Templates/КомпонентаXMLDSIG/Template.bin rename to SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Templates/КомпонентаXMLDSIG/Template.addin diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/СертификатыКлючейЭлектроннойПодписиИШифрования.mdo b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/СертификатыКлючейЭлектроннойПодписиИШифрования.mdo index 57df3db45..b0d2aaa36 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/СертификатыКлючейЭлектроннойПодписиИШифрования.mdo +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/СертификатыКлючейЭлектроннойПодписиИШифрования.mdo @@ -438,8 +438,8 @@ ru - Уточняет, что пароль к закрытому ключу сертификата будет вводиться в отдельном окне -программой электронной подписи и шифрования, а не программой 1С:Предприятие. + Передавать пустой пароль к закрытому ключу сертификата из 1С:Предприятия, +так как он будет вводиться в отдельном окне программой электронной подписи и шифрования. Только для закрытых ключей сертификатов, для которых в ОС включена усиленная защита. @@ -717,7 +717,7 @@ ru Компонента XMLDSIG - BinaryData + AddIn Штамп diff --git a/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/ManagerModule.bsl b/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/ManagerModule.bsl index 3b70fa857..f7ef0795d 100644 --- a/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/ManagerModule.bsl +++ b/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/ManagerModule.bsl @@ -19,6 +19,23 @@ // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтение + |ГДЕ + | ЧтениеОбъектаРазрешено(ВладелецФайла) + |; + |РазрешитьИзменениеЕслиРазрешеноЧтение + |ГДЕ + | ИзменениеОбъектаРазрешено(ВладелецФайла)"; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом #КонецОбласти #КонецОбласти diff --git a/SSL/src/Catalogs/СообщенияОбластейДанных/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/СообщенияОбластейДанных/Forms/ФормаСписка/Form.form index 9c50470ae..017066206 100644 --- a/SSL/src/Catalogs/СообщенияОбластейДанных/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/СообщенияОбластейДанных/Forms/ФормаСписка/Form.form @@ -94,10 +94,6 @@ Список None - Copy - Create - Delete - SetDeletionMark ОбластьДанныхВспомогательныеДанные 37 diff --git a/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаСписка/Form.form index 1926515d4..98d2e5cea 100644 --- a/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаСписка/Form.form @@ -94,10 +94,6 @@ Список None - Copy - Create - Delete - SetDeletionMark Наименование 4 diff --git a/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Form.form index 751c6b7a1..be573fbb2 100644 --- a/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Form.form @@ -388,8 +388,8 @@ Form.Command.ВыбратьИзКлассификатора - Normal Auto + true true true UserCmds @@ -622,6 +622,7 @@ true true true + true MultiRow
        true
        1 diff --git a/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Module.bsl index a18ff5f99..f079e0a0a 100644 --- a/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Module.bsl @@ -23,10 +23,8 @@ // Разрешаем элементы Элементы.Список.РежимВыбора = РежимВыбора; - Элементы.СписокВыбрать.Видимость = РежимВыбора; - Элементы.СписокВыбрать.КнопкаПоУмолчанию = РежимВыбора; - - Элементы.Создать.Видимость = МожноДобавлятьВСправочник; + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "СписокВыбрать", "КнопкаПоУмолчанию", РежимВыбора); + Элементы.Создать.Видимость = МожноДобавлятьВСправочник; // По флагам определяем режим Если РежимВыбора Тогда diff --git a/SSL/src/Catalogs/СтраныМира/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/СтраныМира/Forms/ФормаЭлемента/Form.form index c49115007..4a2d8c480 100644 --- a/SSL/src/Catalogs/СтраныМира/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/СтраныМира/Forms/ФормаЭлемента/Form.form @@ -104,6 +104,7 @@ UsualGroup + HorizontalIfPossible Auto true Auto @@ -262,6 +263,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/Catalogs/СтраныМира/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/СтраныМира/Forms/ФормаЭлемента/Module.bsl index 45d4220b3..8e49f2f75 100644 --- a/SSL/src/Catalogs/СтраныМира/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/СтраныМира/Forms/ФормаЭлемента/Module.bsl @@ -11,6 +11,7 @@ Если Объект.Предопределенный Тогда Элементы.ГруппаНаименование.ТолькоПросмотр = Истина; КонецЕсли; + КонецПроцедуры &НаКлиенте diff --git a/SSL/src/Catalogs/СтраныМира/ObjectModule.bsl b/SSL/src/Catalogs/СтраныМира/ObjectModule.bsl index 3c1fc2ca4..a213efdb6 100644 --- a/SSL/src/Catalogs/СтраныМира/ObjectModule.bsl +++ b/SSL/src/Catalogs/СтраныМира/ObjectModule.bsl @@ -3,7 +3,7 @@ #Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ) - Если ОбменДанными.Загрузка Или ЭтотОбъект.ДополнительныеСвойства.Свойство("НеПроверятьУникальность") Тогда + Если ОбменДанными.Загрузка Или ДополнительныеСвойства.Свойство("НеПроверятьУникальность") Тогда Возврат; КонецЕсли; diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Form.form index ce2436adf..0a32f9bd7 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Form.form @@ -101,6 +101,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -202,6 +203,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -747,6 +749,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Module.bsl index 5e8a63c53..2ced5405a 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Module.bsl @@ -183,10 +183,11 @@ Возврат; КонецЕсли; - Отбор = Новый Структура("Узел", ТекущиеДанные.УзелИнформационнойБазы); - ЗначенияЗаполнения = Новый Структура("Узел", ТекущиеДанные.УзелИнформационнойБазы); + Отбор = Новый Структура("Корреспондент", ТекущиеДанные.УзелИнформационнойБазы); + ЗначенияЗаполнения = Новый Структура("Корреспондент", ТекущиеДанные.УзелИнформационнойБазы); - ОбменДаннымиКлиент.ОткрытьФормуЗаписиРегистраСведенийПоОтбору(Отбор, ЗначенияЗаполнения, "НастройкиТранспортаОбмена", ЭтотОбъект); + ОбменДаннымиКлиент.ОткрытьФормуЗаписиРегистраСведенийПоОтбору(Отбор, + ЗначенияЗаполнения, "НастройкиТранспортаОбменаДанными", ЭтотОбъект); КонецПроцедуры diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl b/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl index b782b6c5b..f70582963 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl +++ b/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl @@ -35,7 +35,7 @@ Наименование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Наименование, ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелИнформационнойБазы, "Наименование")); - ВидТранспортаОбмена = РегистрыСведений.НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); + ВидТранспортаОбмена = РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); СценарийОбменаДанными = СоздатьЭлемент(); @@ -271,7 +271,7 @@ КонецЕсли; - ВидТранспортаОбмена = РегистрыСведений.НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); + ВидТранспортаОбмена = РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); НастройкиОбмена = СценарийОбменаДанными.НастройкиОбмена; @@ -331,7 +331,7 @@ КонецЕсли; - ВидТранспортаОбмена = РегистрыСведений.НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); + ВидТранспортаОбмена = РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); НастройкиОбмена = СценарийОбменаДанными.НастройкиОбмена; diff --git a/SSL/src/Catalogs/ТелефонныйЗвонокПрисоединенныеФайлы/ManagerModule.bsl b/SSL/src/Catalogs/ТелефонныйЗвонокПрисоединенныеФайлы/ManagerModule.bsl index 3b70fa857..abfeb8fe5 100644 --- a/SSL/src/Catalogs/ТелефонныйЗвонокПрисоединенныеФайлы/ManagerModule.bsl +++ b/SSL/src/Catalogs/ТелефонныйЗвонокПрисоединенныеФайлы/ManagerModule.bsl @@ -19,6 +19,24 @@ // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтение + |ГДЕ + | ЧтениеОбъектаРазрешено(ВладелецФайла) + |; + |РазрешитьИзменениеЕслиРазрешеноЧтение + |ГДЕ + | ИзменениеОбъектаРазрешено(ВладелецФайла)"; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + #КонецОбласти #КонецОбласти diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/УдалениеЛишнихФайловИзТома/Form.form b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/УдалениеЛишнихФайловИзТома/Form.form index 611937ec2..7217d5565 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/УдалениеЛишнихФайловИзТома/Form.form +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/УдалениеЛишнихФайловИзТома/Form.form @@ -156,7 +156,7 @@ <key>ru</key> <value>Если в файлах, которые есть на диске, но сведения о них в базе отсутствуют, может содержаться полезная информация, -то рекомендуется перенести их в другой каталог. Если каталог не указан, файлы удаляются безвозвратно.</value> +то рекомендуется скопировать их в другую папку.</value> true true @@ -217,24 +217,111 @@ Auto - - ПутьКаталогаДляКопирования - 21 + + НастройкиУдаления + 27 + + СкопироватьФайлыПередУдалением + 24 + true + true + + true + + + СкопироватьФайлыПередУдалением + + Right + + OnChange + СкопироватьФайлыПередУдалениемПриИзменении + + + СкопироватьФайлыПередУдалениемРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + СкопироватьФайлыПередУдалениемКонтекстноеМеню + 25 + true + + CheckBoxField + Enter + true + Left + true + + + + ПутьКПапкеДляКопирования + 21 + true + true + + true + + + ПутьКПапкеДляКопирования + + + OnChange + ПутьКПапкеДляКопированияПриИзменении + + + ПутьКПапкеДляКопированияРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + + ПутьКПапкеДляКопированияКонтекстноеМеню + 22 + true + + InputField + true + Enter + true + Left + true + + + StartChoice + ПутьКПапкеДляКопированияНачалоВыбора + + 60 + true + true + true + true + true + true + true + Normal + + true true true - - ПутьКаталогаДляКопирования - - - OnChange - ПутьКаталогаДляКопированияПриИзменении - + + <key>ru</key> + <value>Настройки удаления</value> + - ПутьКаталогаДляКопированияРасширеннаяПодсказка - 23 + НастройкиУдаленияРасширеннаяПодсказка + 28 Label true true @@ -242,29 +329,15 @@ Left - - ПутьКаталогаДляКопированияКонтекстноеМеню - 22 - true - - InputField - Enter - true - Left - true - - - StartChoice - ПутьКаталогаДляКопированияНачалоВыбора - - 60 - true - true - true - true - true - true - Normal + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto Bottom @@ -361,10 +434,10 @@ - ПутьКаталогаДляКопирования + ПутьКПапкеДляКопирования <key>ru</key> - <value>Путь каталога для копирования</value> + <value>Путь к папке для копирования</value> 2 @@ -466,6 +539,23 @@ true + + СкопироватьФайлыПередУдалением + + <key>ru</key> + <value>Скопировать файлы перед удалением</value> + + 6 + + Boolean + + + true + + + true + + УдалитьЛишниеФайлы diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/УдалениеЛишнихФайловИзТома/Module.bsl b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/УдалениеЛишнихФайловИзТома/Module.bsl index a7a406a81..54b7cd155 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/УдалениеЛишнихФайловИзТома/Module.bsl +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/УдалениеЛишнихФайловИзТома/Module.bsl @@ -14,6 +14,9 @@ ПутьДня = Формат(ТекущаяДатаСеанса(), "ДФ=ггггММдд") + ПолучитьРазделительПути(); + СкопироватьФайлыПередУдалением = Ложь; + Элементы.ПутьКПапкеДляКопирования.Доступность = Ложь; + КонецПроцедуры #КонецОбласти @@ -32,30 +35,70 @@ КонецПроцедуры &НаКлиенте -Процедура ПутьКаталогаДляКопированияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) +Процедура ПутьКПапкеДляКопированияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - Режим = РежимДиалогаВыбораФайла.ВыборКаталога; - ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим); - ДиалогОткрытияФайла.ПолноеИмяФайла = ""; - ДиалогОткрытияФайла.Каталог = ПутьКаталогаДляКопирования; - ДиалогОткрытияФайла.МножественныйВыбор = Ложь; - ДиалогОткрытияФайла.Заголовок = Заголовок; - - Если ДиалогОткрытияФайла.Выбрать() Тогда - - ПутьКаталогаДляКопирования = ДиалогОткрытияФайла.Каталог; - ПутьКаталогаДляКопирования = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПутьКаталогаДляКопирования); - - КонецЕсли; + ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Новый ОписаниеОповещения("ПодключениеРасширенияРаботыСФайламиВыборФайлаЗавершение", ЭтотОбъект), , Ложь); КонецПроцедуры &НаКлиенте -Процедура ПутьКаталогаДляКопированияПриИзменении(Элемент) +Процедура ПодключениеРасширенияРаботыСФайламиВыборФайлаЗавершение(РасширениеПодключено, ДополнительныеПараметры) Экспорт - ПутьКаталогаДляКопирования = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПутьКаталогаДляКопирования); + Если Не РасширениеПодключено Тогда + Возврат; + КонецЕсли; + + Режим = РежимДиалогаВыбораФайла.ВыборКаталога; + ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим); + ДиалогОткрытияФайла.ПолноеИмяФайла = ""; + ДиалогОткрытияФайла.Каталог = ПутьКПапкеДляКопирования; + ДиалогОткрытияФайла.МножественныйВыбор = Ложь; + ДиалогОткрытияФайла.Заголовок = Заголовок; + + ДиалогОткрытияФайла.Показать(Новый ОписаниеОповещения("ПутьКПапкеДляКопированияНачалоВыбораЗавершение", ЭтотОбъект, Новый Структура("ДиалогОткрытияФайла", ДиалогОткрытияФайла))); + +КонецПроцедуры + +&НаКлиенте +Процедура ПутьКПапкеДляКопированияНачалоВыбораЗавершение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт + + ДиалогОткрытияФайла = ДополнительныеПараметры.ДиалогОткрытияФайла; + + Если ВыбранныеФайлы = Неопределено Тогда + Элементы.ФормаУдалитьЛишниеФайлы.Доступность = Ложь; + Иначе + ПутьКПапкеДляКопирования = ДиалогОткрытияФайла.Каталог; + ПутьКПапкеДляКопирования = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПутьКПапкеДляКопирования); + Элементы.ФормаУдалитьЛишниеФайлы.Доступность = ЗначениеЗаполнено(ПутьКПапкеДляКопирования); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПутьКПапкеДляКопированияПриИзменении(Элемент) + + ПутьКПапкеДляКопирования = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПутьКПапкеДляКопирования); + Элементы.ФормаУдалитьЛишниеФайлы.Доступность = ЗначениеЗаполнено(ПутьКПапкеДляКопирования); + +КонецПроцедуры + +&НаКлиенте +Процедура СкопироватьФайлыПередУдалениемПриИзменении(Элемент) + + Если Не СкопироватьФайлыПередУдалением Тогда + ПутьКПапкеДляКопирования = ""; + Элементы.ПутьКПапкеДляКопирования.Доступность = Ложь; + Элементы.ФормаУдалитьЛишниеФайлы.Доступность = Истина; + Иначе + Элементы.ПутьКПапкеДляКопирования.Доступность = Истина; + Если ЗначениеЗаполнено(ПутьКПапкеДляКопирования) Тогда + Элементы.ФормаУдалитьЛишниеФайлы.Доступность = Истина; + Иначе + Элементы.ФормаУдалитьЛишниеФайлы.Доступность = Ложь; + КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -71,38 +114,223 @@ Возврат; КонецЕсли; - Если Не ПравоЗаписиВКаталог() Тогда + ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Новый ОписаниеОповещения("ПодключениеРасширенияРаботыСФайламиЗавершение", ЭтотОбъект), , Ложь); + +КонецПроцедуры + +&НаКлиенте +Процедура ПодключениеРасширенияРаботыСФайламиЗавершение(РасширениеПодключено, ДополнительныеПараметры) Экспорт + + Если Не РасширениеПодключено Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Расширение работы с файлами не установлено. Работа с файлами с неустановленным расширением в веб клиенте невозможна.'")); Возврат; КонецЕсли; - МассивФайловСОшибками = Новый Массив; - ЧислоУдаленныхФайлов = 0; + Если Не СкопироватьФайлыПередУдалением Тогда + ПослеПроверкиЗаписиВКаталог(Истина, Новый Структура); + Иначе + ПапкаДляКопирования = Новый Файл(ПутьКПапкеДляКопирования); + ПапкаДляКопирования.НачатьПроверкуСуществования(Новый ОписаниеОповещения("ПроверкаСуществованияКаталогаЗавершение", ЭтотОбъект)); + КонецЕсли; - КаталогДляКопирования = ПутьКаталогаДляКопирования + ПутьДня + ПолучитьРазделительПути(); - Для Каждого ЛишнийФайл Из ЛишниеФайлы Цикл - Попытка - Если Не ПустаяСтрока(ПутьКаталогаДляКопирования) Тогда - ИмяФайлаСПутем = РаботаСФайламиСлужебныйКлиентСервер.ПолучитьУникальноеИмяСПутем( - КаталогДляКопирования, - ЛишнийФайл.Имя); - ПереместитьФайл(ЛишнийФайл.ПолноеИмя, КаталогДляКопирования + ИмяФайлаСПутем); - Иначе - УдалитьФайлы(ЛишнийФайл.ПолноеИмя); - КонецЕсли; - ЧислоУдаленныхФайлов = ЧислоУдаленныхФайлов + 1; - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); +КонецПроцедуры + +&НаКлиенте +Процедура ПроверкаСуществованияКаталогаЗавершение(Существует, ДополнительныеПараметры) Экспорт + + Если Не Существует Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Путь к каталогу копирования некорректен.'")); + Иначе + ПравоЗаписиВКаталог(Новый ОписаниеОповещения("ПослеПроверкиЗаписиВКаталог", ЭтотОбъект)); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеПроверкиЗаписиВКаталог(Результат, ДополнительныеПараметры) Экспорт + + Если Не Результат Тогда + Возврат; + КонецЕсли; + + Если ЛишниеФайлы.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ПараметрыИтоговогоОповещения = Новый Структура; + ПараметрыИтоговогоОповещения.Вставить("МассивФайловСОшибками", Новый Массив); + ПараметрыИтоговогоОповещения.Вставить("ЧислоУдаленныхФайлов", 0); + ИтоговоеОповещение = Новый ОписаниеОповещения("ПослеОбработкиФайлов", ЭтотОбъект, ПараметрыИтоговогоОповещения); + + ВыполнитьОбработкуОповещения(Новый ОписаниеОповещения("ОбработатьОчереднойФайл", ЭтотОбъект, + Новый Структура("ИтоговоеОповещение, ТекущийФайл", ИтоговоеОповещение, Неопределено), "ОбработатьОчереднойФайлОшибка", ЭтотОбъект)); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработатьОчереднойФайл(Результат, ДополнительныеПараметры) Экспорт + + ТекущийФайл = ДополнительныеПараметры.ТекущийФайл; + ПоследняяИтерация = Ложь; + + Если ТекущийФайл = Неопределено Тогда + ТекущийФайл = ЛишниеФайлы.Получить(0); + Иначе - СтруктураОшибки = Новый Структура; - СтруктураОшибки.Вставить("Имя", ЛишнийФайл.Имя); - СтруктураОшибки.Вставить("Ошибка", КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + СтрокиФайлов = ЛишниеФайлы.НайтиСтроки(Новый Структура("Имя", ТекущийФайл.Имя)); + ИндексТекущегоФайла = ЛишниеФайлы.Индекс(ТекущийФайл); + Если ИндексТекущегоФайла = ЛишниеФайлы.Количество() - 1 Тогда + ПоследняяИтерация = Истина; + Иначе + ТекущийФайл = ЛишниеФайлы.Получить(ИндексТекущегоФайла + 1); + КонецЕсли; - МассивФайловСОшибками.Добавить(СтруктураОшибки); - - ОбработатьСообщениеОбОшибке(ЛишнийФайл.ПолноеИмя, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + КонецЕсли; + + ИмяТекущегоФайла = ТекущийФайл.Имя; + ПолноеИмяТекущегоФайла = ТекущийФайл.ПолноеИмя; + КаталогДляКопирования = ПутьКПапкеДляКопирования + ПутьДня + ПолучитьРазделительПути(); + + ПараметрыТекущегоФайла = Новый Структура; + ПараметрыТекущегоФайла.Вставить("ИтоговоеОповещение", ДополнительныеПараметры.ИтоговоеОповещение); + ПараметрыТекущегоФайла.Вставить("ТекущийФайл", ТекущийФайл); + ПараметрыТекущегоФайла.Вставить("ПоследняяИтерация", ПоследняяИтерация); + ПараметрыТекущегоФайла.Вставить("КаталогДляКопирования", КаталогДляКопирования); + + Если Не ПустаяСтрока(ПутьКПапкеДляКопирования) Тогда - КонецПопытки; - КонецЦикла; + Файл = Новый Файл(ПолноеИмяТекущегоФайла); + Файл.НачатьПроверкуСуществования(Новый ОписаниеОповещения("ПроверкаСуществованияФайлаЗавершение", ЭтотОбъект, ПараметрыТекущегоФайла)); + + Иначе + + НачатьУдалениеФайлов(Новый ОписаниеОповещения("ОбработатьУдалениеОчередногоФайлаЗавершение", ЭтотОбъект, ПараметрыТекущегоФайла, + "ОбработатьОчереднойФайлОшибка", ЭтотОбъект), ПолноеИмяТекущегоФайла); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверкаСуществованияФайлаЗавершение(ФайлСуществует, ДополнительныеПараметры) Экспорт + + Если Не ФайлСуществует Тогда + ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ИтоговоеОповещение); + Иначе + КаталогТекущегоДня = Новый Файл(ДополнительныеПараметры.КаталогДляКопирования); + КаталогТекущегоДня.НачатьПроверкуСуществования(Новый ОписаниеОповещения("КаталогДняСуществуетЗавершение", ЭтотОбъект, ДополнительныеПараметры)); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура КаталогДняСуществуетЗавершение(КаталогСуществует, ДополнительныеПараметры) Экспорт + + Если Не КаталогСуществует Тогда + НачатьСозданиеКаталога(Новый ОписаниеОповещения("СоздатьКаталогДняЗавершение", ЭтотОбъект, ДополнительныеПараметры), ДополнительныеПараметры.КаталогДляКопирования); + Иначе + КонечноеИмяФайла = ДополнительныеПараметры.КаталогДляКопирования + ДополнительныеПараметры.ТекущийФайл.Имя; + Файл = Новый Файл(КонечноеИмяФайла); + Файл.НачатьПроверкуСуществования(Новый ОписаниеОповещения("ПроверкаСуществованияКонечногоФайлаЗавершение", ЭтотОбъект, ДополнительныеПараметры)); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СоздатьКаталогДняЗавершение(ИмяКаталога, ДополнительныеПараметры) Экспорт + + КонечноеИмяФайла = ДополнительныеПараметры.КаталогДляКопирования + ДополнительныеПараметры.ТекущийФайл.Имя; + Файл = Новый Файл(КонечноеИмяФайла); + Файл.НачатьПроверкуСуществования(Новый ОписаниеОповещения("ПроверкаСуществованияКонечногоФайлаЗавершение", ЭтотОбъект, ДополнительныеПараметры)); + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверкаСуществованияКонечногоФайлаЗавершение(ФайлСуществует, ДополнительныеПараметры) Экспорт + + КаталогДляКопирования = ДополнительныеПараметры.КаталогДляКопирования; + ИмяТекущегоФайла = ДополнительныеПараметры.ТекущийФайл.Имя; + ПолноеИмяТекущегоФайла = ДополнительныеПараметры.ТекущийФайл.ПолноеИмя; + + Если Не ФайлСуществует Тогда + КонечноеИмяФайла = КаталогДляКопирования + ИмяТекущегоФайла; + Иначе + РазделенноеИмяФайла = СтрРазделить(ИмяТекущегоФайла, "."); + ИмяБезРасширения = РазделенноеИмяФайла.Получить(0); + Расширение = РазделенноеИмяФайла.Получить(1); + КонечноеИмяФайла = КаталогДляКопирования + ИмяБезРасширения + "_" + Строка(Новый УникальныйИдентификатор) + "." + Расширение; + КонецЕсли; + + НачатьПеремещениеФайла(Новый ОписаниеОповещения("ОбработатьПеремещениеОчередногоФайлаЗавершение", ЭтотОбъект, ДополнительныеПараметры, + "ОбработатьОчереднойФайлОшибка", ЭтотОбъект), ПолноеИмяТекущегоФайла, КонечноеИмяФайла); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработатьПеремещениеОчередногоФайлаЗавершение(Результат, ДополнительныеПараметры) Экспорт + + ОбработатьОчереднойФайлЗавершение(ДополнительныеПараметры); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработатьУдалениеОчередногоФайлаЗавершение(ДополнительныеПараметры) Экспорт + + ОбработатьОчереднойФайлЗавершение(ДополнительныеПараметры); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработатьОчереднойФайлЗавершение(ДополнительныеПараметры) + + ТекущийФайл = ДополнительныеПараметры.ТекущийФайл; + ИтоговоеОповещение = ДополнительныеПараметры.ИтоговоеОповещение; + ПараметрыИтоговогоОповещения = ИтоговоеОповещение.ДополнительныеПараметры; + + ПараметрыИтоговогоОповещения.Вставить("ЧислоУдаленныхФайлов", ПараметрыИтоговогоОповещения.ЧислоУдаленныхФайлов + 1); + + Если ДополнительныеПараметры.ПоследняяИтерация Тогда + ВыполнитьОбработкуОповещения(ИтоговоеОповещение); + Иначе + ВыполнитьОбработкуОповещения(Новый ОписаниеОповещения("ОбработатьОчереднойФайл", ЭтотОбъект, + Новый Структура("ИтоговоеОповещение, ТекущийФайл", ИтоговоеОповещение, ТекущийФайл), "ОбработатьОчереднойФайлОшибка", ЭтотОбъект)); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработатьОчереднойФайлОшибка(ИнформацияОбОшибке, СтандартнаяОбработка, ДополнительныеПараметры) Экспорт + + ТекущийФайл = ДополнительныеПараметры.ТекущийФайл; + ИмяТекущегоФайла = ТекущийФайл.Имя; + + ИтоговоеОповещение = ДополнительныеПараметры.ИтоговоеОповещение; + ПараметрыИтоговогоОповещения = ИтоговоеОповещение.ДополнительныеПараметры; + + СтруктураОшибки = Новый Структура; + СтруктураОшибки.Вставить("Имя", ИмяТекущегоФайла); + СтруктураОшибки.Вставить("Ошибка", КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + + МассивФайловСОшибками = ПараметрыИтоговогоОповещения.МассивФайловСОшибками; + МассивФайловСОшибками.Добавить(СтруктураОшибки); + ПараметрыИтоговогоОповещения.Вставить("МассивФайловСОшибками", МассивФайловСОшибками); + + ОбработатьСообщениеОбОшибке(ТекущийФайл.ПолноеИмя, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + + Если ДополнительныеПараметры.ПоследняяИтерация Тогда + ВыполнитьОбработкуОповещения(ИтоговоеОповещение); + Иначе + ВыполнитьОбработкуОповещения(Новый ОписаниеОповещения("ОбработатьОчереднойФайл", ЭтотОбъект, + Новый Структура("ИтоговоеОповещение, ТекущийФайл", ИтоговоеОповещение, ТекущийФайл), "ОбработатьОчереднойФайлОшибка", ЭтотОбъект)); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеОбработкиФайлов(Результат, ДополнительныеПараметры) Экспорт + + ЧислоУдаленныхФайлов = ДополнительныеПараметры.ЧислоУдаленныхФайлов; + МассивФайловСОшибками = ДополнительныеПараметры.МассивФайловСОшибками; Если ЧислоУдаленныхФайлов <> 0 Тогда ТекстОповещения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -122,7 +350,7 @@ КонецЕсли; Закрыть(); - + КонецПроцедуры #КонецОбласти @@ -133,17 +361,18 @@ Процедура ЗаполнитьТаблицуЛишнихФайлов() ТаблицаФайловНаДиске = Новый ТаблицаЗначений; - ТаблицаФайловНаДиске.Колонки.Добавить("Имя"); - ТаблицаФайловНаДиске.Колонки.Добавить("Файл"); - ТаблицаФайловНаДиске.Колонки.Добавить("ИмяБезРасширения"); - ТаблицаФайловНаДиске.Колонки.Добавить("ПолноеИмя"); - ТаблицаФайловНаДиске.Колонки.Добавить("Путь"); - ТаблицаФайловНаДиске.Колонки.Добавить("Том"); - ТаблицаФайловНаДиске.Колонки.Добавить("Расширение"); - ТаблицаФайловНаДиске.Колонки.Добавить("СтатусПроверки"); - ТаблицаФайловНаДиске.Колонки.Добавить("Количество"); - ТаблицаФайловНаДиске.Колонки.Добавить("Отредактировал"); - ТаблицаФайловНаДиске.Колонки.Добавить("ДатаРедактирования"); + КолонкиТаблицы = ТаблицаФайловНаДиске.Колонки; + КолонкиТаблицы.Добавить("Имя"); + КолонкиТаблицы.Добавить("Файл"); + КолонкиТаблицы.Добавить("ИмяБезРасширения"); + КолонкиТаблицы.Добавить("ПолноеИмя"); + КолонкиТаблицы.Добавить("Путь"); + КолонкиТаблицы.Добавить("Том"); + КолонкиТаблицы.Добавить("Расширение"); + КолонкиТаблицы.Добавить("СтатусПроверки"); + КолонкиТаблицы.Добавить("Количество"); + КолонкиТаблицы.Добавить("Отредактировал"); + КолонкиТаблицы.Добавить("ДатаРедактирования"); ПутьКТому = РаботаСФайламиСлужебный.ПолныйПутьТома(ТомХраненияФайлов); @@ -155,14 +384,15 @@ КонецЕсли; НоваяСтрока = ТаблицаФайловНаДиске.Добавить(); - НоваяСтрока.Имя = Файл.Имя; + НоваяСтрока.Имя = Файл.Имя; НоваяСтрока.ИмяБезРасширения = Файл.ИмяБезРасширения; - НоваяСтрока.ПолноеИмя = Файл.ПолноеИмя; - НоваяСтрока.Путь = Файл.Путь; - НоваяСтрока.Расширение = Файл.Расширение; - НоваяСтрока.СтатусПроверки = НСтр("ru = 'Лишние файлы (есть на диске, но сведения о них отсутствуют)'"); - НоваяСтрока.Количество = 1; - НоваяСтрока.Том = ТомХраненияФайлов; + НоваяСтрока.ПолноеИмя = Файл.ПолноеИмя; + НоваяСтрока.Путь = Файл.Путь; + НоваяСтрока.Расширение = Файл.Расширение; + НоваяСтрока.СтатусПроверки = НСтр("ru = 'Лишние файлы (есть на диске, но сведения о них отсутствуют)'"); + НоваяСтрока.Количество = 1; + НоваяСтрока.Том = ТомХраненияФайлов; + КонецЦикла; РаботаСФайламиСлужебный.ПроверитьЦелостностьФайлов(ТаблицаФайловНаДиске, ТомХраненияФайлов); @@ -175,42 +405,69 @@ ЗаполнитьЗначенияСвойств(НоваяСтрока, Файл); КонецЦикла; + ЛишниеФайлы.Сортировать("Имя"); + КонецПроцедуры &НаКлиенте -Функция ПравоЗаписиВКаталог() +Процедура ПравоЗаписиВКаталог(ИсходноеОповещение) - Если Не ПустаяСтрока(ПутьКаталогаДляКопирования) Тогда - - ИмяКаталогаТестовое = ПутьКаталогаДляКопирования + "ПроверкаДоступа\"; - - Попытка - СоздатьКаталог(ИмяКаталогаТестовое); - УдалитьФайлы(ИмяКаталогаТестовое); - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - - ШаблонОшибки = - НСтр("ru = 'Путь каталога для копирования некорректен. - |Возможно учетная запись, от лица которой работает - |сервер 1С:Предприятия, не имеет прав доступа к указанному каталогу. - | - |%1'"); - - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ШаблонОшибки, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); - - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - ТекстОшибки, , , "ПутьКаталогаДляКопирования"); - - Возврат Ложь; - - КонецПопытки; + Если ПустаяСтрока(ПутьКПапкеДляКопирования) Тогда + ВыполнитьОбработкуОповещения(ИсходноеОповещение, Истина); + Возврат КонецЕсли; - Возврат Истина; + ИмяКаталога = ПутьКПапкеДляКопирования + "ПроверкаДоступа\"; -КонецФункции + ПараметрыУдаленияКаталога = Новый Структура("ИсходноеОповещение, ИмяКаталога", ИсходноеОповещение, ИмяКаталога); + ОповещениеСозданияКаталога = Новый ОписаниеОповещения("ПослеСозданияКаталога", ЭтотОбъект, ПараметрыУдаленияКаталога, "ПослеОшибкиСозданияКаталога", ЭтотОбъект); + НачатьСозданиеКаталога(ОповещениеСозданияКаталога, ИмяКаталога); + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеОшибкиСозданияКаталога(ИнформацияОбОшибке, СтандартнаяОбработка, ДополнительныеПараметры) Экспорт + + ОбработатьОшибкуПравДоступа(ИнформацияОбОшибке, ДополнительныеПараметры.ИсходноеОповещение); + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеСозданияКаталога(Результат, ДополнительныеПараметры) Экспорт + + НачатьУдалениеФайлов(Новый ОписаниеОповещения("ПослеУдаленияКаталога", ЭтотОбъект, ДополнительныеПараметры, "ПослеОшибкиУдаленияКаталога", ЭтотОбъект), ДополнительныеПараметры.ИмяКаталога); + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеУдаленияКаталога(ДополнительныеПараметры) Экспорт + + ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ИсходноеОповещение, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеОшибкиУдаленияКаталога(ИнформацияОбОшибке, СтандартнаяОбработка, ДополнительныеПараметры) Экспорт + + ОбработатьОшибкуПравДоступа(ИнформацияОбОшибке, ДополнительныеПараметры.ИсходноеОповещение); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработатьОшибкуПравДоступа(ИнформацияОбОшибке, ИсходноеОповещение) + + ШаблонОшибки = НСтр("ru = 'Путь каталога для копирования некорректен. + |Возможно учетная запись, от лица которой работает + |сервер 1С:Предприятия, не имеет прав доступа к указанному каталогу. + | + |%1'"); + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , , "ПутьКПапкеДляКопирования"); + + ВыполнитьОбработкуОповещения(ИсходноеОповещение, Ложь); + +КонецПроцедуры &НаСервере Процедура ОбработатьСообщениеОбОшибке(ИмяФайла, ИнформацияОбОшибке) @@ -243,7 +500,6 @@ ОбластьСтрока.Параметры.Ошибка = ФайлСОшибкой.Ошибка; ОтчетОбОшибках.Вывести(ОбластьСтрока); КонецЦикла; - КонецПроцедуры diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Form.form index 82926377c..c0d872118 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Form.form @@ -106,6 +106,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -411,6 +412,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Help/ru.html b/SSL/src/Catalogs/ТомаХраненияФайлов/Help/ru.html index 067f44d2b..1e80ecd55 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/Help/ru.html +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Help/ru.html @@ -1,6 +1,6 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.18427"></meta></head><body> <p>Предназначен для управления томами хранения файлов.</p> -<p>Используется в том случае, если установлен режим хранения файлов <strong>В томах на диске</strong>. Для этого в разделе <strong>Администрирование - Настройки работы с файлами</strong> включите флажок <strong>Хранить файлы в томах на диске</strong>,  после этого в разделах <strong>Администрирование - Настройки работы с файлами</strong> становится доступной команда <strong>Тома хранения файлов</strong>, по которой открывается список. </p> +<p>Используется в том случае, если установлен режим хранения файлов <strong>В томах на диске</strong>. Для этого в разделе <strong>Администрирование - Настройки работы с файлами</strong> включите флажок <strong>Хранить файлы в томах на диске</strong>,  после этого в разделах <strong>Администрирование - Настройки работы с файлами</strong> становится доступной команда <strong>Тома хранения файлов</strong>, по которой открывается список. При смене способа хранения файлов перенос файлов из программы в тома и обратно не происходит.</p> <p>В списке выводится:</p> <ul><li><strong>Наименование</strong> - наименование тома хранения файлов; </li><li><strong>Порядок</strong> - целое число. Заполнение томов осуществляется по порядку заполнения по возрастанию до полного заполнения тома; @@ -9,7 +9,13 @@ </li><li><strong>Предел, Мб</strong> - можно указать максимальный размер всех файлов в томе (квота тома). Если квота установлена равной нулю, то при размещении файлов в томе она не проверяется. При установленном ненулевом значении <strong>Максимальный размер</strong>, если суммарный размер файлов в томе уже превышает установленную квоту, то будет использован следующий по порядку заполнения том. Если ни в одном из доступных томов не будет достаточно места для размещения файла, то информация об этом записывается в <a href="DataProcessor.ЖурналРегистрации/Help">журнал регистрации</a> и выводится сообщение об ошибке;  </li><li><strong>Полный путь Linux</strong> - путь к каталогу для сервера под управлением Linux.</li></ul><h3>Ввод тома хранения файлов</h3> <ul><li>Нажмите <strong>Создать</strong>, заполните необходимые <a href="Catalog.ТомаХраненияФайлов.Form.ФормаЭлемента/Help">поля</a>. -</li><li>Необходимо указать один или несколько каталогов на жестком диске сервера, на котором работает программа, или других серверов в сети, которые будут использоваться для хранения в них всех файлов.</li></ul><h3>Работа с томами хранения файлов</h3> +</li><li>Необходимо указать один или несколько каталогов на жестком диске сервера, на котором работает программа, или других серверов в сети, которые будут использоваться для хранения в них всех файлов.</li></ul><h3>Правила хранения файлов в томах</h3> +<ul><li> +<div>Переключение флажка <strong>Хранить файлы в томах на диске</strong> обратной силы не имеет. Если хранение файлов в томах отключили, то новые файлы добавляются в саму ИБ, а старые остаются томах. При этом папка с томом будет продолжать использоваться до того, пока в базе есть хотя бы один файл. Файлы, ранее сохраненные в тома, открываются из этих томов.</div> +</li><li> +<div>Если сохранить файл в томе, а потом том удалить (внешними средствами), то файл будет не найден, даже если флажок <strong>Хранить файлы в томах на диск</strong>е уже выключен. Включение и выключение флажка не вернет пропавшие файлы.</div> +</li><li> +<div>Поэтому если программа не находит файлы, которые хранились в томах, следует в сообщениях об ошибке (в журнале регистрации) посмотреть путь к папке с томом, проверить местонахождение этой папки, наличие в ней нужного файла, и при необходимости восстановить папку. Для осуществления такой возможности необходимо периодически проводить резервное копирование папок с томами файлов внешними средствами (например, средствами операционной системы).</div></li></ul><h3>Работа с томами хранения файлов</h3> <ul><li>При создании нового тома автоматически проверяется доступ к указанному в поле <strong>Полный путь</strong> каталогу, в случае ошибки выводится соответствующее сообщение.  </li><li>Заполнение томов осуществляется по порядку (по возрастанию) до полного заполнения тома. Эту особенность можно использовать для временного отключения тома путем увеличения ему порядка заполнения. </li><li>Уже созданному тому нельзя поменять пути. diff --git a/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Forms/ФормаЭлемента/Form.form index d50117720..42c96649c 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Forms/ФормаЭлемента/Form.form @@ -353,6 +353,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -574,6 +575,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Form.form b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Form.form index b55f2c71c..224116d90 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Form.form +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Form.form @@ -201,6 +201,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -440,6 +441,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <representation>NormalSeparation</representation> <showLeftMargin>true</showLeftMargin> @@ -1080,6 +1082,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -1251,6 +1254,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -1643,6 +1647,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -1957,6 +1962,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -2218,6 +2224,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <representation>NormalSeparation</representation> <showLeftMargin>true</showLeftMargin> @@ -2393,6 +2400,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -2568,6 +2576,7 @@ vasyapupkin@example.com завершена.</value> </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -2862,6 +2871,7 @@ vasyapupkin@example.com завершена.</value> </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Module.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Module.bsl index 53265cda7..c1997ef11 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Module.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Module.bsl @@ -489,7 +489,7 @@ ШифрованиеПриПолученииПочты = ?(ИспользоватьЗащищенноеСоединениеДляВходящейПочты, "SSL", "Авто"); КонецПроцедуры -&НаКлиентеНаСервереБезКонтекста +&НаСервереБезКонтекста Функция НастройкиПоУмолчанию(АдресЭлектроннойПочты, Пароль) Позиция = СтрНайти(АдресЭлектроннойПочты, "@"); @@ -515,9 +515,15 @@ Настройки.Вставить("ИспользоватьБезопасныйВходНаСерверИсходящейПочты", Ложь); Настройки.Вставить("ДлительностьОжиданияСервера", 30); - Настройки.Вставить("ОставлятьКопииПисемНаСервере", Ложь); + Настройки.Вставить("ОставлятьКопииПисемНаСервере", Истина); Настройки.Вставить("ПериодХраненияСообщенийНаСервере", 10); + НастройкиIMAPПоУмолчанию = Справочники.УчетныеЗаписиЭлектроннойПочты.ВариантыНастройкиПодключенияКСерверуIMAP(АдресЭлектроннойПочты)[0]; + НастройкиSMTPПоУмолчанию = Справочники.УчетныеЗаписиЭлектроннойПочты.ВариантыНастройкиПодключенияКСерверуSMTP(АдресЭлектроннойПочты)[0]; + + ЗаполнитьЗначенияСвойств(Настройки, НастройкиIMAPПоУмолчанию); + ЗаполнитьЗначенияСвойств(Настройки, НастройкиSMTPПоУмолчанию); + Возврат Настройки; КонецФункции diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаВыбора/Form.form index 13a95543e..055e83082 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаВыбора/Form.form @@ -17,14 +17,10 @@ </dataPath> <defaultItem>true</defaultItem> <titleLocation>None</titleLocation> - <excludedCommands>Copy</excludedCommands> <excludedCommands>CopyToClipboard</excludedCommands> - <excludedCommands>Create</excludedCommands> - <excludedCommands>Delete</excludedCommands> <excludedCommands>ListSettings</excludedCommands> <excludedCommands>OutputList</excludedCommands> <excludedCommands>Refresh</excludedCommands> - <excludedCommands>SetDeletionMark</excludedCommands> <items xsi:type="form:FormField"> <name>Наименование</name> <id>4</id> diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаСписка/Form.form index 5928daaea..c44f3bd03 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаСписка/Form.form @@ -533,6 +533,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form index 90888fe41..4c17a7fb0 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form @@ -277,6 +277,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <representation>NormalSeparation</representation> <showLeftMargin>true</showLeftMargin> @@ -415,6 +416,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -829,6 +831,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -964,6 +967,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -1429,6 +1433,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -1741,6 +1746,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -1912,6 +1918,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -2108,6 +2115,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <representation>NormalSeparation</representation> <showLeftMargin>true</showLeftMargin> @@ -2588,6 +2596,10 @@ <event>AfterWrite</event> <name>ПослеЗаписи</name> </handlers> + <handlers> + <event>OnReadAtServer</event> + <name>ПриЧтенииНаСервере</name> + </handlers> <handlers> <event>BeforeWrite</event> <name>ПередЗаписью</name> diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl index 1e201d673..51f10b9f2 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl @@ -174,6 +174,18 @@ УстановитьДоступностьЭлементов(); КонецПроцедуры +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ManagerModule.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ManagerModule.bsl index 7512b3747..9d4ef522c 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ManagerModule.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ManagerModule.bsl @@ -22,6 +22,25 @@ // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтение + |ГДЕ + | ЗначениеРазрешено(Ссылка) + | ИЛИ ЗначениеРазрешено(ВладелецУчетнойЗаписи, ПустаяСсылка КАК Ложь) + |; + |РазрешитьИзменениеЕслиРазрешеноЧтение + |ГДЕ + | ЗначениеРазрешено(ВладелецУчетнойЗаписи, ПустаяСсылка КАК Ложь)"; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + #КонецОбласти #КонецОбласти @@ -578,7 +597,7 @@ КонецФункции -Функция ВариантыНастройкиПодключенияКСерверуIMAP(АдресЭлектроннойПочты) +Функция ВариантыНастройкиПодключенияКСерверуIMAP(АдресЭлектроннойПочты) Экспорт Позиция = СтрНайти(АдресЭлектроннойПочты, "@"); ИмяПользователяВУчетнойЗаписи = Лев(АдресЭлектроннойПочты, Позиция - 1); @@ -592,13 +611,22 @@ // icloud.com Если ИмяСервераВУчетнойЗаписи = "icloud.com" Тогда ВариантНастройки = Результат.Добавить(); - ВариантНастройки.СерверИсходящейПочты = "imap.mail.me.com"; - ВариантНастройки.ПортСервераИсходящейПочты = 993; - ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Истина; + ВариантНастройки.СерверВходящейПочты = "imap.mail.me.com"; + ВариантНастройки.ПортСервераВходящейПочты = 993; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Истина; + Возврат Результат; + КонецЕсли; + + // outlook.com + Если ИмяСервераВУчетнойЗаписи = "outlook.com" Тогда + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверВходящейПочты = "imap-mail.outlook.com"; + ВариантНастройки.ПортСервераВходящейПочты = 993; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Истина; Возврат Результат; КонецЕсли; - // Стандартные настройки, подходящие для ящиков gmail, yandex и mail.ru + // Стандартные настройки, подходящие для ящиков gmail, yandex и mail.ru // имя сервера с префиксом "imap.", защищенное соединение. ВариантНастройки = Результат.Добавить(); ВариантНастройки.СерверВходящейПочты = "imap." + ИмяСервераВУчетнойЗаписи; @@ -702,7 +730,7 @@ КонецФункции -Функция ВариантыНастройкиПодключенияКСерверуSMTP(АдресЭлектроннойПочты) +Функция ВариантыНастройкиПодключенияКСерверуSMTP(АдресЭлектроннойПочты) Экспорт Позиция = СтрНайти(АдресЭлектроннойПочты, "@"); ИмяСервераВУчетнойЗаписи = Сред(АдресЭлектроннойПочты, Позиция + 1); @@ -712,6 +740,7 @@ Результат.Колонки.Добавить("ПортСервераИсходящейПочты"); Результат.Колонки.Добавить("ИспользоватьЗащищенноеСоединениеДляИсходящейПочты"); + // icloud.com Если ИмяСервераВУчетнойЗаписи = "icloud.com" Тогда ВариантНастройки = Результат.Добавить(); ВариантНастройки.СерверИсходящейПочты = "smtp.mail.me.com"; @@ -720,7 +749,16 @@ Возврат Результат; КонецЕсли; - // Стандартные настройки, подходящие для ящиков gmail, yandex и mail.ru + // outlook.com + Если ИмяСервераВУчетнойЗаписи = "outlook.com" Тогда + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверИсходящейПочты = "smtp-mail.outlook.com"; + ВариантНастройки.ПортСервераИсходящейПочты = 587; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Ложь; + Возврат Результат; + КонецЕсли; + + // Стандартные настройки, подходящие для ящиков gmail, yandex и mail.ru // имя сервера с префиксом "smtp.", защищенное соединение, порт 465. ВариантНастройки = Результат.Добавить(); ВариантНастройки.СерверИсходящейПочты = "smtp." + ИмяСервераВУчетнойЗаписи; diff --git a/SSL/src/Catalogs/Файлы/Forms/Файлы/Form.form b/SSL/src/Catalogs/Файлы/Forms/Файлы/Form.form index 286ec7612..0efd001cb 100644 --- a/SSL/src/Catalogs/Файлы/Forms/Файлы/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/Файлы/Form.form @@ -430,7 +430,7 @@ </extendedTooltip> <commandName>Form.Command.ЗакончитьРедактирование</commandName> <buttonImportance>Normal</buttonImportance> - <representation>Picture</representation> + <representation>Auto</representation> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> <placementArea>UserCmds</placementArea> @@ -2290,6 +2290,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <verticalAlign>Center</verticalAlign> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> @@ -3912,6 +3913,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -4579,7 +4581,7 @@ <name>ЗакончитьРедактирование</name> <title> <key>ru</key> - <value>Закончить редактирование</value> + <value>Закончить</value> 5 @@ -4597,7 +4599,7 @@ ЗакончитьРедактирование - TextPicture + Text DontUse Auto diff --git a/SSL/src/Catalogs/Файлы/Forms/Файлы/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/Файлы/Module.bsl index 55aa0f823..2664f7e13 100644 --- a/SSL/src/Catalogs/Файлы/Forms/Файлы/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/Файлы/Module.bsl @@ -271,7 +271,7 @@ Если Элементы.Список.ТекущиеДанные <> Неопределено Тогда НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(Элементы.Список.ТекущиеДанные.Ссылка); КонецЕсли; - ПодключитьОбработчикОжидания("ОбработкаОжиданияУстановитьДоступностьФайловыхКоманд", 0.1, Истина); + ОбработкаОжиданияУстановитьДоступностьФайловыхКоманд(); КонецПроцедуры @@ -1192,7 +1192,7 @@ ОбновитьИСохранитьПараметрыСпискаФайлов(); Иначе // Вызов процедуры обработчика ПриАктивизацииСтроки таблицы Список выполняется программно. - ПодключитьОбработчикОжидания("ОбработкаОжиданияУстановитьДоступностьФайловыхКоманд", 0.1, Истина); + ОбработкаОжиданияУстановитьДоступностьФайловыхКоманд(); КонецЕсли; КонецПроцедуры @@ -1258,8 +1258,8 @@ Иначе СделатьКомандыНедоступными(); КонецЕсли; - ОбновитьПредпросмотр(); - + ПодключитьОбработчикОжидания("ОбновитьПредпросмотр", 0.1, Истина); + КонецПроцедуры &НаКлиенте @@ -1373,8 +1373,6 @@ Элементы.Отправить.Доступность = Истина; Элементы.СписокКонтекстноеМенюОтправить.Доступность = Истина; - Элементы.СписокКонтекстноеМенюОсвободить.Доступность = Ложь; - КонецПроцедуры &НаСервере diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/Файлы/Forms/ФормаВыбора/Form.form index 12c0b11e7..b52577c00 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаВыбора/Form.form @@ -567,6 +567,9 @@ true false None + Copy + Delete + SetDeletionMark СписокНомерКартинкиПодписанЗашифрован 41 @@ -932,6 +935,14 @@ Left true + + BeforeAddRow + СписокПередНачаломДобавления + + + BeforeDeleteRow + СписокПередУдалением + СписокСтрокаПоиска 96 @@ -1126,7 +1137,6 @@ HierarchicalList - true true true 67 @@ -1187,6 +1197,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1210,6 +1221,9 @@ OnCreateAtServer ПриСозданииНаСервере + Copy + Delete + SetDeletionMark LockOwner true true diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/ФормаВыбора/Module.bsl index 55978c02f..87fe14ade 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаВыбора/Module.bsl @@ -46,6 +46,7 @@ КонецПроцедуры + &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) @@ -87,6 +88,21 @@ ПодключитьОбработчикОжидания("ОбработкаОжидания", 0.2, Истина); КонецПроцедуры +&НаКлиенте +Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) + + Отказ = Истина; + Если Не Копирование Тогда + ДобавитьФайлВПрограмму(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СписокПередУдалением(Элемент, Отказ) + Отказ = Истина; +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -94,6 +110,13 @@ &НаКлиенте Процедура ДобавитьФайл(Команда) + ДобавитьФайлВПрограмму(); + +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьФайлВПрограмму() + Если РежимВыбораШаблона Тогда РаботаСФайламиСлужебныйКлиент.ДобавитьФайлИзФайловойСистемы(Элементы.Папки.ТекущаяСтрока, ЭтотОбъект); @@ -109,7 +132,7 @@ РаботаСФайламиСлужебныйКлиент.ДобавитьФайл(Неопределено, ВладелецФайла, ЭтотОбъект); КонецЕсли; - + КонецПроцедуры #КонецОбласти @@ -146,7 +169,8 @@ Перем ЕстьПравоДобавлениеФайлов, МодульУправлениеДоступом; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); ЕстьПравоДобавлениеФайлов = МодульУправлениеДоступом.ЕстьПраво("ДобавлениеФайлов", Справочники.ПапкиФайлов.Шаблоны); Иначе ЕстьПравоДобавлениеФайлов = ПравоДоступа("Добавление", Метаданные.Справочники.Файлы) И ПравоДоступа("Чтение", Метаданные.Справочники.ПапкиФайлов); diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаПеретаскивания/Form.form b/SSL/src/Catalogs/Файлы/Forms/ФормаПеретаскивания/Form.form index 0f4d8221b..14ade944c 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаПеретаскивания/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаПеретаскивания/Form.form @@ -71,6 +71,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -681,6 +682,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаПодбора/Form.form b/SSL/src/Catalogs/Файлы/Forms/ФормаПодбора/Form.form index f7d4e6ac4..a02c1ce90 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаПодбора/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаПодбора/Form.form @@ -913,6 +913,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Form.form index 1bd36ead8..8793056ed 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Form.form @@ -169,6 +169,7 @@ UsualGroup + HorizontalIfPossible Center Auto true @@ -505,6 +506,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -731,6 +733,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1064,6 +1067,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1190,6 +1194,7 @@ UsualGroup + HorizontalIfPossible Center Auto true @@ -1288,6 +1293,7 @@ Page + HorizontalIfPossible auto false @@ -2179,6 +2185,7 @@ Page + HorizontalIfPossible auto false diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Module.bsl index 99af60b5e..3dacf6f5e 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Module.bsl @@ -28,7 +28,7 @@ УстановитьДоступностьКнопок(ЭтотОбъект, Элементы); ДоступнаПечатьСоШтампом = - ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") + ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") И ЭтотОбъект.Объект.Расширение = "mxl" И ЭтотОбъект.Объект.ПодписанЭП; @@ -130,6 +130,13 @@ УстановитьДоступностьКнопок(ЭтотОбъект, Элементы); ОбновитьЗаголовок(); + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + КонецПроцедуры &НаСервере @@ -862,8 +869,9 @@ Процедура ОтображатьВкладкиДополнительныхДанных() Если Элементы.ГруппаДополнительныеРеквизиты.ПодчиненныеЭлементы.Количество() > 0 Тогда - Если Элементы.Найти("Свойства_ПустаяДекорация") <> Неопределено Тогда - ВидимостьДополнительныхРеквизитов = Элементы["Свойства_ПустаяДекорация"].Видимость; + ПустаяДекорация = Элементы.Найти("Свойства_ПустаяДекорация"); + Если ПустаяДекорация <> Неопределено Тогда + ВидимостьДополнительныхРеквизитов = ПустаяДекорация.Видимость; Иначе ВидимостьДополнительныхРеквизитов = Истина; КонецЕсли; @@ -873,7 +881,7 @@ ИспользоватьВкладки = ВидимостьДополнительныхРеквизитов Или Элементы.ГруппаЭлектронныеПодписи.Видимость Или Элементы.ГруппаСертификатыШифрования.Видимость; Элементы.ГруппаДополнительныеДанныеСтраницы.ОтображениеСтраниц = - ?(ИспользоватьВкладки , ОтображениеСтраницФормы.ЗакладкиСверху, ОтображениеСтраницФормы.Нет); + ?(ИспользоватьВкладки , ОтображениеСтраницФормы.ЗакладкиСверху, ОтображениеСтраницФормы.Нет); КонецПроцедуры diff --git a/SSL/src/Catalogs/Файлы/ManagerModule.bsl b/SSL/src/Catalogs/Файлы/ManagerModule.bsl index c827dc12f..fdb99e137 100644 --- a/SSL/src/Catalogs/Файлы/ManagerModule.bsl +++ b/SSL/src/Catalogs/Файлы/ManagerModule.bsl @@ -19,6 +19,30 @@ // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтение + |ГДЕ + | ЧтениеОбъектаРазрешено(ВладелецФайла) + |; + |РазрешитьИзменениеЕслиРазрешеноЧтение + |ГДЕ + | ИзменениеОбъектаРазрешено(ВладелецФайла)"; + + Ограничение.ТекстДляВнешнихПользователей = + "РазрешитьЧтениеИзменение + |ГДЕ + | ЧтениеОбъектаРазрешено(ВЫРАЗИТЬ(Автор КАК Справочник.ВнешниеПользователи))"; + Ограничение.ПоВладельцуБезЗаписиКлючейДоступаДляВнешнихПользователей = Ложь; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + #КонецОбласти #КонецОбласти diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераКомплексныхВопросов/Form.form b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераКомплексныхВопросов/Form.form index c65286a61..0de345918 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераКомплексныхВопросов/Form.form +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераКомплексныхВопросов/Form.form @@ -458,6 +458,10 @@ OnCreateAtServer ПриСозданииНаСервере + + OnClose + ПриЗакрытии + Abort Cancel CustomizeForm @@ -688,6 +692,40 @@ true + + ВыполняетсяЗакрытие + + <key>ru</key> + <value>Выполняется закрытие</value> + + 14 + + Boolean + + + true + + + true + + + + ЭтоНоваяСтрока + + <key>ru</key> + <value>Это новая строка</value> + + 15 + + Boolean + + + true + + + true + + КнопкаОК diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераКомплексныхВопросов/Module.bsl b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераКомплексныхВопросов/Module.bsl index e71d46dec..8ccacd653 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераКомплексныхВопросов/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераКомплексныхВопросов/Module.bsl @@ -13,6 +13,15 @@ КонецПроцедуры +&НаКлиенте +Процедура ПриЗакрытии(ЗавершениеРаботы) + + Если Не ВыполняетсяЗакрытие И ЭтоНоваяСтрока Тогда + Оповестить("ОтменаВводаНовойСтрокиШаблонаАнкеты"); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы @@ -47,6 +56,7 @@ &НаКлиенте Процедура КнопкаОК(Команда) + ВыполняетсяЗакрытие = Истина; Оповестить("ОкончаниеРедактированияПараметровКомплексногоВопроса",СформироватьСтруктуруПараметровДляПередачиВладельцу()); Закрыть(); @@ -80,9 +90,10 @@ &НаСервере Процедура ОбработатьПараметрыФормыВладельца() - Формулировка = Параметры.Формулировка; - Подсказка = Параметры.Подсказка; + Формулировка = Параметры.Формулировка; + Подсказка = Параметры.Подсказка; СпособОтображенияПодсказки = Параметры.СпособОтображенияПодсказки; + ЭтоНоваяСтрока = Параметры.ЭтоНоваяСтрока; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Form.form b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Form.form index 00f002101..ebf6c8461 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Form.form +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Form.form @@ -484,6 +484,7 @@ </extendedTooltip> <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> + <group>HorizontalIfPossible</group> <showTitle>auto</showTitle> <scrollOnCompress>false</scrollOnCompress> </extInfo> @@ -1095,6 +1096,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -1376,6 +1378,7 @@ </extendedTooltip> <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> + <group>HorizontalIfPossible</group> <showTitle>auto</showTitle> <scrollOnCompress>false</scrollOnCompress> </extInfo> @@ -1732,6 +1735,7 @@ </extendedTooltip> <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> + <group>HorizontalIfPossible</group> <showTitle>auto</showTitle> <scrollOnCompress>false</scrollOnCompress> </extInfo> @@ -2092,6 +2096,7 @@ </extendedTooltip> <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> + <group>HorizontalIfPossible</group> <showTitle>auto</showTitle> <scrollOnCompress>false</scrollOnCompress> </extInfo> @@ -2658,6 +2663,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -2681,6 +2687,10 @@ <event>OnCreateAtServer</event> <name>ПриСозданииНаСервере</name> </handlers> + <handlers> + <event>OnClose</event> + <name>ПриЗакрытии</name> + </handlers> <excludedCommands>Abort</excludedCommands> <excludedCommands>Cancel</excludedCommands> <excludedCommands>CustomizeForm</excludedCommands> @@ -3033,6 +3043,40 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>ЭтоНоваяСтрока</name> + <title> + <key>ru</key> + <value>Это новая строка</value> + + 15 + + Boolean + + + true + + + true + + + + ВыполняетсяЗакрытие + + <key>ru</key> + <value>Выполняется закрытие</value> + + 16 + + Boolean + + + true + + + true + + СледующаяСтраница diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Module.bsl b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Module.bsl index e432f1ac8..1de5a9b37 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Module.bsl @@ -36,6 +36,15 @@ КонецПроцедуры +&НаКлиенте +Процедура ПриЗакрытии(ЗавершениеРаботы) + + Если Не ВыполняетсяЗакрытие И ЭтоНоваяСтрока Тогда + Оповестить("ОтменаВводаНовойСтрокиШаблонаАнкеты"); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы @@ -566,6 +575,7 @@ Формулировка = Параметры.Формулировка; Подсказка = Параметры.Подсказка; СпособОтображенияПодсказки = Параметры.СпособОтображенияПодсказки; + ЭтоНоваяСтрока = Параметры.ЭтоНоваяСтрока; Если НЕ Параметры.ТипТабличногоВопроса.Пустая() Тогда ТипТабличногоВопроса = Параметры.ТипТабличногоВопроса; @@ -738,6 +748,7 @@ Ответы.Очистить(); КонецЕсли; + ВыполняетсяЗакрытие = Истина; Оповестить("ОкончаниеРедактированияПараметровТабличногоВопроса",СформироватьСтруктуруПараметровДляПередачиВладельцу()); Закрыть(); diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаПростыхВопросов/Form.form b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаПростыхВопросов/Form.form index 7a3612a40..072a7d633 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаПростыхВопросов/Form.form +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаПростыхВопросов/Form.form @@ -51,6 +51,7 @@ <typeDomainEnabled>true</typeDomainEnabled> <textEdit>true</textEdit> <textSize>Normal</textSize> + <choiceHistoryOnInput>DontUse</choiceHistoryOnInput> </extInfo> </items> <items xsi:type="form:FormField"> @@ -385,6 +386,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <horizontalAlign>Right</horizontalAlign> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаСписка/Module.bsl index d8641c746..341bf5002 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаСписка/Module.bsl @@ -4,16 +4,19 @@ &НаКлиенте Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) - Если Копирование Тогда + Если Копирование + И Не Группа Тогда - Отказ = Истина; ТекущиеДанные = Элементы.Список.ТекущиеДанные; Если ТекущиеДанные <> Неопределено Тогда + + Отказ = Истина; НовыйЭлементСсылка = ВыполнитьКопированиеЭлемента(ТекущиеДанные.Ссылка); Если НовыйЭлементСсылка <> Неопределено Тогда ОткрытьФорму("Справочник.ШаблоныАнкет.Форма.ФормаЭлемента",Новый Структура("Ключ",НовыйЭлементСсылка)); Элементы.Список.Обновить(); КонецЕсли; + КонецЕсли; КонецЕсли; @@ -80,10 +83,6 @@ Запрос.УстановитьПараметр("ШаблонАнкеты", ЭлементКопирования); Результат = Запрос.Выполнить(); - Если Результат.Пустой() Тогда - ОтменитьТранзакцию(); - Возврат Неопределено; - КонецЕсли; Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); ДобавитьЭлементыСправочникаВопросыШаблонаАнкеты(ШаблонАнкетыОбъект.Ссылка, Выборка); diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Form.form index 5e4706e6b..eafb03402 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Form.form @@ -106,6 +106,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Module.bsl index f521956ee..ecd297880 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Module.bsl @@ -307,8 +307,9 @@ Отказ = Истина; Возврат; ИначеЕсли ТекущиеДанные.ТипСтроки = "Раздел" - ИЛИ (ТекущиеДанные.ТипСтроки = "Вопрос" И ТекущиеДанные.ТипВопроса <> ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.Табличный") - И ТекущиеДанные.ТипВопроса <> ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.Комплексный") ) Тогда + ИЛИ (ТекущиеДанные.ТипСтроки = "Вопрос" + И ТекущиеДанные.ТипВопроса <> ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.Табличный") + И ТекущиеДанные.ТипВопроса <> ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.Комплексный")) Тогда ОткрытьФормуПростыхВопросов(ТекущиеДанные); @@ -595,11 +596,11 @@ НоваяСтрока.ТипВопроса = ТипВопроса; НоваяСтрока.КодКартинки = АнкетированиеКлиентСервер.ПолучитьКодКартинкиШаблонаАнкеты(ЛОЖЬ,ТипВопроса); НоваяСтрока.ЭлементарныйВопрос = ?(ТипВопроса = ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.Табличный") - ИЛИ ТипВопроса = ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.Комплексный"), + Или ТипВопроса = ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.Комплексный"), "", ПредопределенноеЗначение("ПланВидовХарактеристик.ВопросыДляАнкетирования.ПустаяСсылка")); НоваяСтрока.Обязательный = ?(ТипВопроса = ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.Табличный") - ИЛИ ТипВопроса = ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.Комплексный"),"",Ложь); + Или ТипВопроса = ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.Комплексный"),"",Ложь); Иначе @@ -704,6 +705,7 @@ ТекущиеДанные.Обязательный = ""; ТекущиеДанные.Подсказка = Параметр.Подсказка; ТекущиеДанные.СпособОтображенияПодсказки = Параметр.СпособОтображенияПодсказки; + ТекущиеДанные.ЭтоНоваяСтрока = Ложь; НомерСтроки = 1; Для каждого Вопрос Из Параметр.Вопросы Цикл @@ -735,6 +737,7 @@ ТекущиеДанные.Обязательный = ""; ТекущиеДанные.Подсказка = Параметр.Подсказка; ТекущиеДанные.СпособОтображенияПодсказки = Параметр.СпособОтображенияПодсказки; + ТекущиеДанные.ЭтоНоваяСтрока = Ложь; НомерСтроки = 1; Для каждого Вопрос Из Параметр.Вопросы Цикл @@ -926,6 +929,7 @@ СтруктураПараметры.Вставить("Формулировка",ТекущиеДанные.Формулировка); СтруктураПараметры.Вставить("Подсказка",ТекущиеДанные.Подсказка); СтруктураПараметры.Вставить("СпособОтображенияПодсказки",ТекущиеДанные.СпособОтображенияПодсказки); + СтруктураПараметры.Вставить("ЭтоНоваяСтрока", ТекущиеДанные.ЭтоНоваяСтрока); ОткрытьФорму("Справочник.ШаблоныАнкет.Форма.ФормаМастераКомплексныхВопросов",СтруктураПараметры,ЭтотОбъект); @@ -935,12 +939,13 @@ Процедура ОткрытьФормуМастераТабличныхВопросов(ТекущиеДанные) СтруктураПараметры = Новый Структура; - СтруктураПараметры.Вставить("ТипТабличногоВопроса",ТекущиеДанные.ТипТабличногоВопроса); - СтруктураПараметры.Вставить("СоставТабличногоВопроса",ТекущиеДанные.СоставТабличногоВопроса); - СтруктураПараметры.Вставить("ПредопределенныеОтветы",ТекущиеДанные.ПредопределенныеОтветы); - СтруктураПараметры.Вставить("Формулировка",ТекущиеДанные.Формулировка); - СтруктураПараметры.Вставить("Подсказка",ТекущиеДанные.Подсказка); - СтруктураПараметры.Вставить("СпособОтображенияПодсказки",ТекущиеДанные.СпособОтображенияПодсказки); + СтруктураПараметры.Вставить("ТипТабличногоВопроса", ТекущиеДанные.ТипТабличногоВопроса); + СтруктураПараметры.Вставить("СоставТабличногоВопроса", ТекущиеДанные.СоставТабличногоВопроса); + СтруктураПараметры.Вставить("ПредопределенныеОтветы", ТекущиеДанные.ПредопределенныеОтветы); + СтруктураПараметры.Вставить("Формулировка", ТекущиеДанные.Формулировка); + СтруктураПараметры.Вставить("Подсказка", ТекущиеДанные.Подсказка); + СтруктураПараметры.Вставить("СпособОтображенияПодсказки", ТекущиеДанные.СпособОтображенияПодсказки); + СтруктураПараметры.Вставить("ЭтоНоваяСтрока", ТекущиеДанные.ЭтоНоваяСтрока); ОткрытьФорму("Справочник.ШаблоныАнкет.Форма.ФормаМастераТабличныхВопросов",СтруктураПараметры,ЭтотОбъект); diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Form.form b/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Form.form index cda65c9b4..20c059a4c 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Form.form +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Form.form @@ -425,6 +425,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Module.bsl b/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Module.bsl index b9a852c66..3972ecef4 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Module.bsl @@ -190,7 +190,6 @@ КонецПроцедуры - &НаКлиенте Процедура СформироватьСообщениеДляОтправки(ПараметрыОтправки) @@ -228,11 +227,6 @@ ПараметрыВызоваСервера.Вставить("ПараметрыОтправки", ПараметрыОтправки); ПараметрыВызоваСервера.Вставить("ВидСообщения", ВидСообщения); - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") Тогда - МодульВзаимодействия = ОбщегоНазначения.ОбщийМодуль("Взаимодействия"); - ПараметрыОтправки.ДополнительныеПараметры.Вставить("РасширенныйСписокПолучателей", МодульВзаимодействия.ИспользуетсяПрочиеВзаимодействия()); - КонецЕсли; - ШаблоныСообщенийСлужебный.СформироватьСообщениеВФоне(ПараметрыВызоваСервера, АдресВременногоХранилища); Возврат АдресВременногоХранилища; @@ -301,14 +295,8 @@ ДополнительныеПараметры.ИсточникКонтактнойИнформации = Предмет; ДополнительныеПараметры.Вставить("Предмет", Предмет); Текст = ?(Сообщение.Свойство("Текст"), Сообщение.Текст, ""); - - Если ТипЗнч(Сообщение.Получатель) = Тип("СписокЗначений") Тогда - Получатель = ?(Сообщение.Свойство("Получатель"), Сообщение.Получатель.ВыгрузитьЗначения(), Новый СписокЗначений); - Иначе - Получатель = Сообщение.Получатель; - КонецЕсли; + Получатель = ?(Сообщение.Свойство("Получатель"), Сообщение.Получатель.ВыгрузитьЗначения(), Новый СписокЗначений); МодульОтправкаSMSКлиент.ОтправитьSMS(Получатель, Текст, ДополнительныеПараметры); - КонецЕсли; Иначе Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаСписка/Form.form index c9b11f0dc..0e7c7fe1c 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаСписка/Form.form @@ -149,6 +149,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -564,6 +565,40 @@ <autoMaxHeight>true</autoMaxHeight> </extInfo> </items> + <items xsi:type="form:FormField"> + <name>Ссылка</name> + <id>56</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible/> + <dataPath xsi:type="form:DataPath"> + <segments>Список.Ref</segments> + </dataPath> + <extendedTooltip> + <name>СсылкаРасширеннаяПодсказка</name> + <id>58</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>СсылкаКонтекстноеМеню</name> + <id>57</id> + <autoFill>true</autoFill> + </contextMenu> + <type>LabelField</type> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:LabelFieldExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + </extInfo> + </items> <commandBarLocation>None</commandBarLocation> <autoCommandBar> <name>СписокКоманднаяПанель</name> @@ -731,6 +766,9 @@ <edit> <common>true</common> </edit> + <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> + <segments>Список.Ref</segments> + </notDefaultUseAlwaysAttributes> <main>true</main> <extInfo xsi:type="form:DynamicListExtInfo"> <queryText>ВЫБРАТЬ РАЗРЕШЕННЫЕ diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Form.form index 164f192f2..66816cc70 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Form.form @@ -129,6 +129,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -493,6 +494,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <horizontalAlign>Right</horizontalAlign> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> @@ -523,6 +525,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -776,6 +779,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <representation>WeakSeparation</representation> <showLeftMargin>true</showLeftMargin> @@ -923,6 +927,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -1262,6 +1267,7 @@ </extendedTooltip> <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> + <group>HorizontalIfPossible</group> <verticalAlign>Bottom</verticalAlign> <showTitle>auto</showTitle> <scrollOnCompress>false</scrollOnCompress> @@ -2281,6 +2287,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -3006,6 +3013,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Module.bsl index 6afdc301d..02ee6968b 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Module.bsl @@ -96,6 +96,13 @@ Объект.ПолноеИмяТипаПараметраВводаНаОсновании = НСтр("ru='Общий'"); КонецЕсли; + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + КонецПроцедуры &НаКлиенте @@ -340,15 +347,19 @@ КонецЕсли; Если ТекущиеДанные.Статус = "ПечатнаяФорма" Или ЗначениеЗаполнено(ТекущиеДанные.Реквизит) Тогда - Элементы.ВложенияКонтекстноеМенюУдалить.Доступность = Ложь; - Элементы.ВложенияКонтекстноеМенюИзменитьВложение.Доступность = Ложь; - Элементы.ВложенияИзменить.Доступность = Ложь; - Элементы.ВложенияУдалить.Доступность = Ложь; + Элементы.ВложенияКонтекстноеМенюУдалить.Доступность = Ложь; + Элементы.ВложенияКонтекстноеМенюИзменитьВложение.Доступность = Ложь; + Элементы.ВложенияИзменить.Доступность = Ложь; + Элементы.ВложенияУдалить.Доступность = Ложь; + Элементы.ВложенияСкопироватьВложение.Доступность = Ложь; + Элементы.ВложенияКонтекстноеМенюСкопироватьВложение.Доступность = Ложь; Иначе - Элементы.ВложенияКонтекстноеМенюУдалить.Доступность = Истина; - Элементы.ВложенияКонтекстноеМенюИзменитьВложение.Доступность = Истина; - Элементы.ВложенияИзменить.Доступность = Ложь; - Элементы.ВложенияУдалить.Доступность = Истина; + Элементы.ВложенияКонтекстноеМенюУдалить.Доступность = Истина; + Элементы.ВложенияКонтекстноеМенюИзменитьВложение.Доступность = Истина; + Элементы.ВложенияИзменить.Доступность = Ложь; + Элементы.ВложенияУдалить.Доступность = Истина; + Элементы.ВложенияСкопироватьВложение.Доступность = Истина; + Элементы.ВложенияКонтекстноеМенюСкопироватьВложение.Доступность = Истина; КонецЕсли; КонецПроцедуры @@ -1706,7 +1717,7 @@ &НаСервере Процедура ЗаполнитьШаблонПоВнешнейОбработке() - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); ОчиститьШаблон(ЭтотОбъект); @@ -1715,68 +1726,36 @@ Возврат; КонецЕсли; - НастройкиШаблоновСообщений = ШаблоныСообщенийСлужебныйПовтИсп.ПриОпределенииНастроек(); СтруктураДанныхВнешнейОбработки = ВнешнийОбъект.СтруктураДанныхДляОтображенияВШаблоне(); - - ПредметШаблона = ОпределитьПредметШаблонаСообщений(СтруктураДанныхВнешнейОбработки.ПолноеИмяТипаПараметраВводаНаОсновании, НастройкиШаблоновСообщений); - - Если ПредметШаблона <> Неопределено Тогда - - Объект.ПолноеИмяТипаПараметраВводаНаОсновании = ПредметШаблона.Имя; - Объект.Назначение = ПредметШаблона.Представление; - - Иначе - - ВнешняяОбработка = Неопределено; - ОписаниеОшибки = НСтр("ru = 'Предмет %1 определенный в внешней обработке не найдено. Внешняя обработка не может быть подключена.'"); - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ОписаниеОшибки, СтруктураДанныхВнешнейОбработки.ПолноеИмяТипаПараметраВводаНаОсновании); - - КонецЕсли; - - Объект.ШаблонПоВнешнейОбработке = Истина; - Объект.ПредназначенДляВводаНаОсновании = Истина; - - Если СтруктураДанныхВнешнейОбработки.ПредназначенДляSMS Тогда - - ТелоСообщенияОбычныйТекст.УстановитьТекст(СтруктураДанныхВнешнейОбработки.ТекстШаблонаSMS); - Объект.ПредназначенДляSMS = Истина; - Объект.ПредназначенДляЭлектронныхПисем = Ложь; - - Иначе - - Объект.ТемаПисьма = СтруктураДанныхВнешнейОбработки.ТемаПисьма; - Если СтруктураДанныхВнешнейОбработки.ТипТекстаПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда - УстановитьЭлектронноеПисьмоHTML(Истина); - СтруктураВложения = Новый Структура; - ТелоПисьмаВHTML.УстановитьHTML(СтруктураДанныхВнешнейОбработки.ТекстШаблонаПисьмаHTML, СтруктураВложения); - Иначе - УстановитьЭлектронноеПисьмоОбычныйТекст(Истина); - ТелоСообщенияОбычныйТекст.УстановитьТекст(СтруктураДанныхВнешнейОбработки.ТекстШаблонаПисьмаHTML); + МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(СтруктураДанныхВнешнейОбработки.ПолноеИмяТипаПараметраВводаНаОсновании); + Если МетаданныеОбъекта <> Неопределено Тогда + ЭлементНазначения = Элементы.ПолноеИмяТипаПараметраВводаНаОсновании.СписокВыбора.НайтиПоЗначению(СтруктураДанныхВнешнейОбработки.ПолноеИмяТипаПараметраВводаНаОсновании); + Если ЭлементНазначения = Неопределено Тогда + ВнешняяОбработка = Неопределено; + ОписаниеОшибки = НСтр("ru = 'Предмет %1 определенный в внешней обработке не найдено. Внешняя обработка не может быть подключена.'"); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ОписаниеОшибки, СтруктураДанныхВнешнейОбработки.ПолноеИмяТипаПараметраВводаНаОсновании); + Возврат КонецЕсли; - - Объект.ПредназначенДляЭлектронныхПисем = Истина; - Объект.ПредназначенДляSMS = Ложь; - - КонецЕсли - + Объект.ШаблонПоВнешнейОбработке = Истина; + Объект.ПолноеИмяТипаПараметраВводаНаОсновании = ЭлементНазначения.Значение; + Объект.Назначение = ЭлементНазначения.Представление; + Объект.ПредназначенДляВводаНаОсновании = Истина; + КонецЕсли; + + // Определить тип html + Объект.ТемаПисьма = СтруктураДанныхВнешнейОбработки.ТемаПисьма; + Если СтруктураДанныхВнешнейОбработки.ТипТекстаПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда + УстановитьЭлектронноеПисьмоHTML(Истина); + СтруктураВложения = Новый Структура; + ТелоПисьмаВHTML.УстановитьHTML(СтруктураДанныхВнешнейОбработки.ТекстШаблонаПисьмаHTML, СтруктураВложения); + Иначе + УстановитьЭлектронноеПисьмоОбычныйТекст(Истина); + ТелоСообщенияОбычныйТекст.УстановитьТекст(СтруктураДанныхВнешнейОбработки.ТекстШаблонаПисьмаHTML); + КонецЕсли; КонецЕсли КонецПроцедуры -&НаКлиентеНаСервереБезКонтекста -Функция ОпределитьПредметШаблонаСообщений(ИмяВНазначение, Знач НастройкиШаблоновСообщений) - - Перем НазначениеШаблона; - - НазначениеШаблона = НастройкиШаблоновСообщений.ПредметыШаблонов.Найти(ИмяВНазначение, "Представление"); - Если НазначениеШаблона = Неопределено Тогда - НазначениеШаблона = НастройкиШаблоновСообщений.ПредметыШаблонов.Найти(ИмяВНазначение, "Имя"); - КонецЕсли; - - Возврат НазначениеШаблона; - -КонецФункции - &НаКлиентеНаСервереБезКонтекста Процедура ОчиститьШаблон(Форма) diff --git a/SSL/src/Catalogs/ШаблоныСообщений/ManagerModule.bsl b/SSL/src/Catalogs/ШаблоныСообщений/ManagerModule.bsl index f0dcad361..295c53ea3 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/ManagerModule.bsl +++ b/SSL/src/Catalogs/ШаблоныСообщений/ManagerModule.bsl @@ -1,3 +1,30 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +#Область ДляВызоваИзДругихПодсистем + +// Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов + +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтениеИзменение + |ГДЕ + | ЗначениеРазрешено(Автор) + | ИЛИ НЕ ТолькоДляАвтора"; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + +#КонецОбласти + +#КонецОбласти + #Область ОбработчикиСобытий Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) @@ -5,7 +32,7 @@ Если Параметры.Свойство("ВладелецШаблона") И ЗначениеЗаполнено(Параметры.ВладелецШаблона) Тогда Параметры.Вставить("ВладелецШаблона", Параметры.ВладелецШаблона); Если Параметры.Свойство("Новый") И Параметры.Новый <> Истина Тогда - Параметры.Вставить("Ключ", ШаблоныСообщенийВызовСервера.ШаблонПоВладельцу(Параметры.ВладелецШаблона)); + Параметры.Вставить("Ключ", ШаблоныСообщенийСлужебный.ШаблонПоВладельцу(Параметры.ВладелецШаблона)); КонецЕсли; ВыбраннаяФорма = "Справочник.ШаблоныСообщений.ФормаОбъекта"; СтандартнаяОбработка = Ложь; @@ -14,3 +41,5 @@ КонецПроцедуры #КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Catalogs/ШаблоныСообщений/ObjectModule.bsl b/SSL/src/Catalogs/ШаблоныСообщений/ObjectModule.bsl index aad86b9d5..33fd3d840 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/ObjectModule.bsl +++ b/SSL/src/Catalogs/ШаблоныСообщений/ObjectModule.bsl @@ -21,15 +21,15 @@ Процедура ЗаполнитьНаОснованииЭлектронноеПисьмоИсходящее(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) - ЭтотОбъект.ТемаПисьма = ДанныеЗаполнения.Тема; - ЭтотОбъект.ТекстШаблонаПисьмаHTML = ДанныеЗаполнения.ТекстHTML; - ЭтотОбъект.ТекстШаблонаПисьма = ДанныеЗаполнения.Текст; - ЭтотОбъект.ТемаПисьма = ДанныеЗаполнения.Тема; - ЭтотОбъект.Наименование = ДанныеЗаполнения.Тема; - ЭтотОбъект.ПредназначенДляЭлектронныхПисем = Истина; - ЭтотОбъект.ПредназначенДляSMS = Ложь; - ЭтотОбъект.ПолноеИмяТипаПараметраВводаНаОсновании = НСтр("ru='Общий'"); - ЭтотОбъект.ТипТекстаПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст; + ТемаПисьма = ДанныеЗаполнения.Тема; + ТекстШаблонаПисьмаHTML = ДанныеЗаполнения.ТекстHTML; + ТекстШаблонаПисьма = ДанныеЗаполнения.Текст; + ТемаПисьма = ДанныеЗаполнения.Тема; + Наименование = ДанныеЗаполнения.Тема; + ПредназначенДляЭлектронныхПисем = Истина; + ПредназначенДляSMS = Ложь; + ПолноеИмяТипаПараметраВводаНаОсновании = НСтр("ru='Общий'"); + ТипТекстаПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда МодульРаботаСПочтовымиСообщениямиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениямиСлужебный"); @@ -38,7 +38,7 @@ Если ДанныеЗаполнения.ТипТекста = ТипыТекстовЭлектронныхПисемHTML ИЛИ ДанныеЗаполнения.ТипТекста = ТипыТекстовЭлектронныхПисемHTMLСКартинками Тогда - ЭтотОбъект.ТипТекстаПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML; + ТипТекстаПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML; КонецЕсли; КонецЕсли; @@ -59,41 +59,41 @@ КонецЕсли; Если ЗначениеЗаполнено(ПараметрыШаблона.ВнешняяОбработка) Тогда - ЭтотОбъект.ШаблонПоВнешнейОбработке = Истина; + ШаблонПоВнешнейОбработке = Истина; КонецЕсли; Если ЗначениеЗаполнено(ПараметрыШаблона.ПолноеИмяТипаНазначения) Тогда МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ПараметрыШаблона.ПолноеИмяТипаНазначения); - ЭтотОбъект.ПолноеИмяТипаПараметраВводаНаОсновании = ПараметрыШаблона.ПолноеИмяТипаНазначения; - ЭтотОбъект.Назначение= МетаданныеОбъекта.Представление(); - ЭтотОбъект.ПредназначенДляВводаНаОсновании = Истина; + ПолноеИмяТипаПараметраВводаНаОсновании = ПараметрыШаблона.ПолноеИмяТипаНазначения; + Назначение= МетаданныеОбъекта.Представление(); + ПредназначенДляВводаНаОсновании = Истина; КонецЕсли; Если ПараметрыШаблона.ТипШаблона = "Письмо" Тогда - ЭтотОбъект.ПредназначенДляSMS = Ложь; - ЭтотОбъект.ПредназначенДляЭлектронныхПисем = Истина; - ЭтотОбъект.ТемаПисьма = ПараметрыШаблона.Тема; + ПредназначенДляSMS = Ложь; + ПредназначенДляЭлектронныхПисем = Истина; + ТемаПисьма = ПараметрыШаблона.Тема; Если ПараметрыШаблона.ФорматПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда - ЭтотОбъект.ТекстШаблонаПисьмаHTML = СтрЗаменить(ПараметрыШаблона.Текст, Символы.ПС, "<BR>"); - ЭтотОбъект.ТипТекстаПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML; + ТекстШаблонаПисьмаHTML = СтрЗаменить(ПараметрыШаблона.Текст, Символы.ПС, "<BR>"); + ТипТекстаПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML; Иначе - ЭтотОбъект.ТекстШаблонаПисьма = СтрЗаменить(ПараметрыШаблона.Текст, "<BR>", Символы.ПС); - ЭтотОбъект.ТипТекстаПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст; + ТекстШаблонаПисьма = СтрЗаменить(ПараметрыШаблона.Текст, "<BR>", Символы.ПС); + ТипТекстаПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст; КонецЕсли; ИначеЕсли ПараметрыШаблона.ТипШаблона = "SMS" Тогда - ЭтотОбъект.ПредназначенДляSMS = Истина; - ЭтотОбъект.ПредназначенДляЭлектронныхПисем = Ложь; - ЭтотОбъект.ТекстШаблонаSMS = ПараметрыШаблона.Текст; - ЭтотОбъект.ОтправлятьВТранслите = ПараметрыШаблона.ПеревестиВТранслит; + ПредназначенДляSMS = Истина; + ПредназначенДляЭлектронныхПисем = Ложь; + ТекстШаблонаSMS = ПараметрыШаблона.Текст; + ОтправлятьВТранслите = ПараметрыШаблона.ПеревестиВТранслит; ИначеЕсли ПараметрыШаблона.ТипШаблона = "Общий" Тогда - ЭтотОбъект.ПредназначенДляSMS = Ложь; - ЭтотОбъект.ПредназначенДляЭлектронныхПисем = Ложь; + ПредназначенДляSMS = Ложь; + ПредназначенДляЭлектронныхПисем = Ложь; КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/ШаблоныСообщенийПрисоединенныеФайлы/ManagerModule.bsl b/SSL/src/Catalogs/ШаблоныСообщенийПрисоединенныеФайлы/ManagerModule.bsl index 9b26d1e35..7283d9b87 100644 --- a/SSL/src/Catalogs/ШаблоныСообщенийПрисоединенныеФайлы/ManagerModule.bsl +++ b/SSL/src/Catalogs/ШаблоныСообщенийПрисоединенныеФайлы/ManagerModule.bsl @@ -19,6 +19,24 @@ // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтение + |ГДЕ + | ЧтениеОбъектаРазрешено(ВладелецФайла) + |; + |РазрешитьИзменениеЕслиРазрешеноЧтение + |ГДЕ + | ИзменениеОбъектаРазрешено(ВладелецФайла)"; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + #КонецОбласти #КонецОбласти diff --git a/SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/ManagerModule.bsl b/SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/ManagerModule.bsl index 3b70fa857..abfeb8fe5 100644 --- a/SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/ManagerModule.bsl +++ b/SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/ManagerModule.bsl @@ -19,6 +19,24 @@ // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтение + |ГДЕ + | ЧтениеОбъектаРазрешено(ВладелецФайла) + |; + |РазрешитьИзменениеЕслиРазрешеноЧтение + |ГДЕ + | ИзменениеОбъектаРазрешено(ВладелецФайла)"; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + #КонецОбласти #КонецОбласти diff --git a/SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/ManagerModule.bsl b/SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/ManagerModule.bsl index 3b70fa857..abfeb8fe5 100644 --- a/SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/ManagerModule.bsl +++ b/SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/ManagerModule.bsl @@ -19,6 +19,24 @@ // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтение + |ГДЕ + | ЧтениеОбъектаРазрешено(ВладелецФайла) + |; + |РазрешитьИзменениеЕслиРазрешеноЧтение + |ГДЕ + | ИзменениеОбъектаРазрешено(ВладелецФайла)"; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + #КонецОбласти #КонецОбласти diff --git a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Form.form index 88db1146c..adc9e81c1 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Form.form @@ -113,6 +113,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -651,6 +652,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -865,6 +867,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -1002,6 +1005,7 @@ </extendedTooltip> <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> + <group>HorizontalIfPossible</group> <showTitle>auto</showTitle> <scrollOnCompress>false</scrollOnCompress> </extInfo> @@ -1081,6 +1085,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -1673,6 +1678,24 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>НаименованиеДоРедактирования</name> + <title> + <key>ru</key> + <value>Наименование до редактирования</value> + + 7 + + String + + + + true + + + true + + diff --git a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Module.bsl index b17e30b98..049225815 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Module.bsl @@ -39,6 +39,8 @@ ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыРазмещения); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды + НаименованиеДоРедактирования = Объект.Наименование; + КонецПроцедуры &НаКлиенте @@ -120,12 +122,14 @@ &НаКлиенте Процедура НаименованиеПриИзменении(Элемент) - Если ПустаяСтрока(Объект.Формулировка) Тогда + Если Объект.Формулировка = НаименованиеДоРедактирования Тогда Объект.Формулировка = Объект.Наименование; КонецЕсли; + НаименованиеДоРедактирования = Объект.Наименование; + КонецПроцедуры &НаКлиенте @@ -361,6 +365,7 @@ СтруктураПараметров = Новый Структура; СтруктураПараметров.Вставить("Владелец",Объект.Ссылка); СтруктураПараметров.Вставить("ТипОтвета",Объект.ТипОтвета); + СтруктураПараметров.Вставить("Наименование",Объект.ТипОтвета); Если Не РежимДобавления Тогда ТекущиеДанные = Элементы.ТаблицаВариантыОтветов.ТекущиеДанные; @@ -368,6 +373,11 @@ Возврат; КонецЕсли; СтруктураПараметров.Вставить("Ключ",ТекущиеДанные.Ссылка); + Иначе + ТекущиеДанные = Элементы.ТаблицаВариантыОтветов.ТекущиеДанные; + Если ТекущиеДанные <> Неопределено Тогда + СтруктураПараметров.Вставить("Наименование",ТекущиеДанные.Наименование); + КонецЕсли; КонецЕсли; ОткрытьФорму("Справочник.ВариантыОтветовАнкет.Форма.ФормаЭлемента",СтруктураПараметров,Элемент); diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ИзменениеНастройкиСвойства/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ИзменениеНастройкиСвойства/Form.form index 26b024ce5..a7de67792 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ИзменениеНастройкиСвойства/Form.form +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ИзменениеНастройкиСвойства/Form.form @@ -108,6 +108,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -588,6 +589,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Form.form index 28d784ba7..64bed6a10 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Form.form @@ -199,6 +199,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -236,13 +237,6 @@ false None Change - Choose - Copy - Create - CreateFolder - Delete - MoveItem - SetDeletionMark Представление 396 @@ -1209,6 +1203,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1460,6 +1455,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1572,6 +1568,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1693,6 +1690,7 @@ UsualGroup + HorizontalIfPossible Auto true Auto @@ -1832,6 +1830,7 @@ UsualGroup + HorizontalIfPossible Auto true Auto @@ -2184,6 +2183,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2541,6 +2541,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -3761,6 +3762,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -4109,6 +4111,7 @@ UsualGroup + HorizontalIfPossible Bottom Auto true @@ -5165,6 +5168,10 @@ AfterWriteAtServer ПослеЗаписиНаСервере + + OnReadAtServer + ПриЧтенииНаСервере + BeforeWrite ПередЗаписью diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Module.bsl index b6bc235e5..7bcd26007 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Module.bsl @@ -14,6 +14,8 @@ Возврат; КонецЕсли; + ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект); + СоздатьСтруктуруПереданныхПараметров(); Если ПереданныеПараметрыФормы.КопированиеСВопросом @@ -277,6 +279,18 @@ КонецПроцедуры +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы @@ -721,7 +735,11 @@ + Сред(ИмяПредопределенныхДанных, ПозицияЗаменяемогоСимвола + 1); Менеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмяОбъекта); - НовыйОбъект = Менеджер.СоздатьЭлемент(); + Если СтрНачинаетсяС(ПолноеИмяОбъекта, "Документ") Тогда + НовыйОбъект = Менеджер.СоздатьДокумент(); + Иначе + НовыйОбъект = Менеджер.СоздатьЭлемент(); + КонецЕсли; НаборыОбъекта = УправлениеСвойствамиСлужебный.ПолучитьНаборыСвойствОбъекта(НовыйОбъект); ПараметрыОтбора = Новый Структура; @@ -1018,7 +1036,7 @@ Новый ОписаниеОповещения("УточнениеНаборовКомментарийНажатиеЗавершение", ЭтотОбъект), СписокНаборов, Элементы.УточнениеНаборовКомментарий); Иначе - УточнениеНаборовКомментарийНажатиеЗавершение(, СписокНаборов[0].Значение); + УточнениеНаборовКомментарийНажатиеЗавершение(Неопределено, СписокНаборов[0].Значение); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ManagerModule.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ManagerModule.bsl index 7ef217434..6ea838c48 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ManagerModule.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ManagerModule.bsl @@ -44,6 +44,21 @@ // Конец СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтениеИзменение + |ГДЕ + | ЗначениеРазрешено(Ссылка) + | ИЛИ НЕ ЭтоДополнительноеСведение"; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + #КонецОбласти #КонецОбласти @@ -490,6 +505,115 @@ КонецПроцедуры +Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ДополнительныеРеквизитыИСведения.Ссылка КАК Ссылка + |ИЗ + | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения + |ГДЕ + | ДополнительныеРеквизитыИСведения.Имя = &Имя"; + Запрос.УстановитьПараметр("Имя", ""); + + Результат = Запрос.Выполнить().Выгрузить(); + МассивСсылок = Результат.ВыгрузитьКолонку("Ссылка"); + + ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, МассивСсылок); + +КонецПроцедуры + +Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт + + ПолноеИмя = "ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения"; + Выборка = ОбновлениеИнформационнойБазы.ВыбратьСсылкиДляОбработки(Параметры.Очередь, ПолноеИмя); + + ПроблемныхОбъектов = 0; + ОбъектовОбработано = 0; + Пока Выборка.Следующий() Цикл + + НачатьТранзакцию(); + Попытка + // Блокируем объект от изменения другими сеансами. + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(ПолноеИмя); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.Ссылка); + Блокировка.Заблокировать(); + + Объект = Выборка.Ссылка.ПолучитьОбъект(); + + ЗаголовокОбъекта = Объект.Заголовок; + УдалитьНедопустимыеСимволы(ЗаголовокОбъекта); + ЗаголовокОбъектаЧастями = СтрРазделить(ЗаголовокОбъекта, " ", Ложь); + Для Каждого ЧастьЗаголовка Из ЗаголовокОбъектаЧастями Цикл + Объект.Имя = Объект.Имя + ВРег(Лев(ЧастьЗаголовка, 1)) + Сред(ЧастьЗаголовка, 2); + КонецЦикла; + + // Проверка уникальности имени. + Если ИмяИспользуется(Выборка.Ссылка, Объект.Имя) Тогда + УИД = Новый УникальныйИдентификатор(); + СтрокаУИД = СтрЗаменить(Строка(УИД), "-", ""); + Объект.Имя = Объект.Имя + "_" + СтрокаУИД; + КонецЕсли; + + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); + ОбъектовОбработано = ОбъектовОбработано + 1; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ПроблемныхОбъектов = ПроблемныхОбъектов + 1; + + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось обработать дополнительный реквизит (сведение): %1 по причине: + |%2'"), + Выборка.Ссылка, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение, + Метаданные.ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения, Выборка.Ссылка, ТекстСообщения); + КонецПопытки; + + КонецЦикла; + + Параметры.ОбработкаЗавершена = ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, ПолноеИмя); + Если ОбъектовОбработано = 0 И ПроблемныхОбъектов <> 0 Тогда + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось обработать некоторые дополнительные реквизиты или сведения (пропущены): %1'"), + ПроблемныхОбъектов); + ВызватьИсключение ТекстСообщения; + Иначе + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация, + Метаданные.ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения,, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Обработана очередная порция дополнительных реквизитов (сведений): %1'"), + ОбъектовОбработано)); + КонецЕсли; + +КонецПроцедуры + +Функция ИмяИспользуется(Ссылка, Имя) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | Свойства.ЭтоДополнительноеСведение, + | Свойства.НаборСвойств + |ИЗ + | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства + |ГДЕ + | Свойства.Имя = &Имя + | И Свойства.Ссылка <> &Ссылка"; + Запрос.УстановитьПараметр("Ссылка", Ссылка); + Запрос.УстановитьПараметр("Имя", Имя); + + Возврат Не Запрос.Выполнить().Пустой(); + +КонецФункции + +Процедура УдалитьНедопустимыеСимволы(Строка) + НедопустимыеСимволы = """/\[]:;|=?*<>,.()+№@!%^&~"; + Строка = СтрСоединить(СтрРазделить(Строка, НедопустимыеСимволы, Истина)); +КонецПроцедуры + #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ObjectModule.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ObjectModule.bsl index 4009be952..86d022c02 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ObjectModule.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ObjectModule.bsl @@ -15,6 +15,8 @@ Возврат; КонецЕсли; + ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект); + // Для общих реквизитов зависимости очищаются. Если Не ЭтоДополнительноеСведение И Не ЗначениеЗаполнено(НаборСвойств) diff --git a/SSL/src/CommonAttributes/ОбластьДанныхОсновныеДанные/ОбластьДанныхОсновныеДанные.mdo b/SSL/src/CommonAttributes/ОбластьДанныхОсновныеДанные/ОбластьДанныхОсновныеДанные.mdo index 043b04e6d..827f7c9b5 100644 --- a/SSL/src/CommonAttributes/ОбластьДанныхОсновныеДанные/ОбластьДанныхОсновныеДанные.mdo +++ b/SSL/src/CommonAttributes/ОбластьДанныхОсновныеДанные/ОбластьДанныхОсновныеДанные.mdo @@ -46,10 +46,6 @@ InformationRegister.СообщенияОбменаДанными DontUse - - InformationRegister.СлужебныеАдресныеСведения - DontUse - ScheduledJob.ОбновлениеИндексаППД DontUse @@ -114,6 +110,14 @@ InformationRegister.ЗависимостиПравДоступа DontUse + + InformationRegister.СлужебныеАдресныеСведения + DontUse + + + InformationRegister.УровниСокращенийАдресныхСведений + DontUse + Constant.ИспользоватьСинхронизациюДанныхВЛокальномРежиме DontUse @@ -190,10 +194,6 @@ Catalog.ИдентификаторыОбъектовМетаданных DontUse - - InformationRegister.УдалитьАдресныйКлассификатор - DontUse - Constant.КаталогОбменаФайламиВМоделиСервиса DontUse @@ -202,6 +202,10 @@ ScheduledJob.СинхронизацияФайлов DontUse + + Catalog.ОбщиеВнешниеКомпоненты + DontUse + ScheduledJob.ОчисткаУстаревшихВерсийОбъектов DontUse @@ -211,7 +215,11 @@ DontUse - InformationRegister.ПричиныИзмененияАдресныхСведений + InformationRegister.ОбластиПерсональныхДанных + DontUse + + + InformationRegister.НастройкиТранспортаОбменаСообщениями DontUse @@ -222,6 +230,10 @@ ScheduledJob.ЗагрузкаКлассификатораБанков DontUse + + InformationRegister.ПричиныИзмененияАдресныхСведений + DontUse + InformationRegister.УдалитьБлокировкиСеансовОбластиДанных DontUse @@ -234,6 +246,10 @@ Constant.СписокРасширенийТекстовыхФайлов DontUse + + InformationRegister.ЗагруженныеВерсииАдресныхСведений + DontUse + InformationRegister.ПраваРолей DontUse @@ -338,14 +354,6 @@ InformationRegister.ЗамерыОбластиСтатистики DontUse - - InformationRegister.ДополнительныеАдресныеСведения - DontUse - - - InformationRegister.ОриентирыАдресныхОбъектов - DontUse - ScheduledJob.УдалениеУстаревшихПараметровРаботыВерсийРасширений DontUse @@ -359,13 +367,17 @@ DontUse - ScheduledJob.ОбновлениеВнешнихКомпонентССайта + InformationRegister.ДополнительныеАдресныеСведения DontUse Constant.МаксимальноеКоличествоИсполняющихФоновыхЗаданий DontUse + + Constant.КоличествоПотоковОбновленияДоступа + DontUse + InformationRegister.УдалитьОчередьИзвлеченияТекста DontUse @@ -479,7 +491,7 @@ DontUse - InformationRegister.НастройкиТранспортаОбмена + InformationRegister.УдалитьНастройкиТранспортаОбмена DontUse @@ -498,6 +510,10 @@ InformationRegister.ОбластиСтатистики DontUse + + InformationRegister.АдресныеОбъекты + DontUse + Constant.НастройкаПодчиненногоУзлаРИБЗавершена DontUse @@ -515,13 +531,17 @@ DontUse - Constant.СписокЗапрещенныхРасширений + ScheduledJob.ОбновлениеДоступаНаУровнеЗаписей DontUse InformationRegister.ИсторияАдресныхОбъектов DontUse + + Constant.СписокЗапрещенныхРасширений + DontUse + InformationRegister.УдалитьЗамерыВремени DontUse @@ -534,10 +554,6 @@ InformationRegister.УдалитьЗамерыВремени2 DontUse - - InformationRegister.УровниСокращенийАдресныхСведений - DontUse - Constant.РазмерБлокаПередачиФайла DontUse @@ -671,7 +687,7 @@ DontUse - InformationRegister.АдресныеОбъекты + InformationRegister.ОриентирыАдресныхОбъектов DontUse @@ -734,10 +750,6 @@ InformationRegister.БлокировкиСеансовОбластейДанных DontUse - - InformationRegister.ЗагруженныеВерсииАдресныхСведений - DontUse - SessionParameter.ОбластьДанныхЗначение SessionParameter.ОбластьДанныхИспользование Constant.ИспользоватьРазделениеПоОбластямДанных diff --git a/SSL/src/CommonCommands/НастроитьПараметрыТранспортаСообщенийОбмена/CommandModule.bsl b/SSL/src/CommonCommands/НастройкиПодключения/CommandModule.bsl similarity index 55% rename from SSL/src/CommonCommands/НастроитьПараметрыТранспортаСообщенийОбмена/CommandModule.bsl rename to SSL/src/CommonCommands/НастройкиПодключения/CommandModule.bsl index 63fba0b9b..0243f3738 100644 --- a/SSL/src/CommonCommands/НастроитьПараметрыТранспортаСообщенийОбмена/CommandModule.bsl +++ b/SSL/src/CommonCommands/НастройкиПодключения/CommandModule.bsl @@ -4,10 +4,11 @@ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - Отбор = Новый Структура("Узел", ПараметрКоманды); - ЗначенияЗаполнения = Новый Структура("Узел", ПараметрКоманды); + Отбор = Новый Структура("Корреспондент", ПараметрКоманды); + ЗначенияЗаполнения = Новый Структура("Корреспондент", ПараметрКоманды); - ОбменДаннымиКлиент.ОткрытьФормуЗаписиРегистраСведенийПоОтбору(Отбор, ЗначенияЗаполнения, "НастройкиТранспортаОбмена", ПараметрыВыполненияКоманды.Источник); + ОбменДаннымиКлиент.ОткрытьФормуЗаписиРегистраСведенийПоОтбору(Отбор, + ЗначенияЗаполнения, "НастройкиТранспортаОбменаДанными", ПараметрыВыполненияКоманды.Источник); КонецПроцедуры diff --git a/SSL/src/CommonCommands/НастройкиПодключения/НастройкиПодключения.mdo b/SSL/src/CommonCommands/НастройкиПодключения/НастройкиПодключения.mdo new file mode 100644 index 000000000..9c34e42c7 --- /dev/null +++ b/SSL/src/CommonCommands/НастройкиПодключения/НастройкиПодключения.mdo @@ -0,0 +1,14 @@ + + + НастройкиПодключения + + ru + Настройки подключения + + CommandGroup.ПараметрыСинхронизацииДанных + Auto + + ru + Настройка параметров подключения обмена данными + + diff --git a/SSL/src/CommonCommands/НастройкиПодключенияКонечнойТочки/CommandModule.bsl b/SSL/src/CommonCommands/НастройкиПодключенияКонечнойТочки/CommandModule.bsl new file mode 100644 index 000000000..7aca92fe4 --- /dev/null +++ b/SSL/src/CommonCommands/НастройкиПодключенияКонечнойТочки/CommandModule.bsl @@ -0,0 +1,28 @@ + +#Область ОбработчикиСобытий + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + + ПараметрыЗаписи = Новый Структура; + ПараметрыЗаписи.Вставить("Ключ", КлючЗаписиРегистра(ПараметрКоманды)); + ПараметрыЗаписи.Вставить("ЗначенияЗаполнения", Новый Структура("КонечнаяТочка", ПараметрКоманды)); + + ОткрытьФорму("РегистрСведений.НастройкиТранспортаОбменаСообщениями.ФормаЗаписи", + ПараметрыЗаписи, ПараметрыВыполненияКоманды.Источник); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Функция КлючЗаписиРегистра(КонечнаяТочка) + + Возврат РегистрыСведений.НастройкиТранспортаОбменаСообщениями.СоздатьКлючЗаписи( + Новый Структура("КонечнаяТочка", КонечнаяТочка)); + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonCommands/НастроитьПараметрыТранспортаСообщенийОбмена/НастроитьПараметрыТранспортаСообщенийОбмена.mdo b/SSL/src/CommonCommands/НастройкиПодключенияКонечнойТочки/НастройкиПодключенияКонечнойТочки.mdo similarity index 65% rename from SSL/src/CommonCommands/НастроитьПараметрыТранспортаСообщенийОбмена/НастроитьПараметрыТранспортаСообщенийОбмена.mdo rename to SSL/src/CommonCommands/НастройкиПодключенияКонечнойТочки/НастройкиПодключенияКонечнойТочки.mdo index b526e0f2d..4f7b0d1b6 100644 --- a/SSL/src/CommonCommands/НастроитьПараметрыТранспортаСообщенийОбмена/НастроитьПараметрыТранспортаСообщенийОбмена.mdo +++ b/SSL/src/CommonCommands/НастройкиПодключенияКонечнойТочки/НастройкиПодключенияКонечнойТочки.mdo @@ -1,9 +1,9 @@ - - НастроитьПараметрыТранспортаСообщенийОбмена + + НастройкиПодключенияКонечнойТочки ru - Параметры подключения + Настройки подключения конечной точки CommandGroup.ПараметрыСинхронизацииДанных @@ -12,6 +12,6 @@ Auto ru - Настройка параметров подключения + Настройка параметров подключения конечной точки diff --git a/SSL/src/CommonCommands/НастройкиСинхронизацииДанных/CommandModule.bsl b/SSL/src/CommonCommands/НастройкиСинхронизацииДанных/CommandModule.bsl index 305b2f9b7..adff7977a 100644 --- a/SSL/src/CommonCommands/НастройкиСинхронизацииДанных/CommandModule.bsl +++ b/SSL/src/CommonCommands/НастройкиСинхронизацииДанных/CommandModule.bsl @@ -4,12 +4,7 @@ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗапуске(); - ИмяОткрываемойФормы = ?(ПараметрыРаботыКлиента.РазделениеВключено, - "ОбщаяФорма.СинхронизацияДанныхВМоделиСервиса", - "ОбщаяФорма.СинхронизацияДанных"); - - ОткрытьФорму(ИмяОткрываемойФормы); + ОткрытьФорму("ОбщаяФорма.СинхронизацияДанных"); КонецПроцедуры diff --git a/SSL/src/CommonCommands/НачатьИнтервью/CommandModule.bsl b/SSL/src/CommonCommands/НачатьИнтервью/CommandModule.bsl new file mode 100644 index 000000000..6a0d6c048 --- /dev/null +++ b/SSL/src/CommonCommands/НачатьИнтервью/CommandModule.bsl @@ -0,0 +1,23 @@ + +#Область ОбработчикиСобытий + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + + ПараметрыФормы = Новый Структура( + "Респондент, + |РежимАнкетирования"); + ПараметрыФормы.Респондент = ПараметрКоманды; + ПараметрыФормы.РежимАнкетирования = ПредопределенноеЗначение("Перечисление.РежимыАнкетирования.Интервью"); + + ОткрытьФорму( + "Обработка.ДоступныеАнкеты.Форма.Форма", + ПараметрыФормы, + ПараметрыВыполненияКоманды.Источник, + ПараметрыВыполненияКоманды.Уникальность, + ПараметрыВыполненияКоманды.Окно, , , + РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonCommands/НачатьИнтервью/НачатьИнтервью.mdo b/SSL/src/CommonCommands/НачатьИнтервью/НачатьИнтервью.mdo new file mode 100644 index 000000000..69aba6ee6 --- /dev/null +++ b/SSL/src/CommonCommands/НачатьИнтервью/НачатьИнтервью.mdo @@ -0,0 +1,17 @@ + + + НачатьИнтервью + + ru + Начать интервью + + FormCommandBarImportant + + DefinedType.Респондент + + Auto + + ru + Интервью респондента по одному из назначенных ему опросов + + diff --git a/SSL/src/CommonCommands/ПрисоединенныеФайлы/CommandModule.bsl b/SSL/src/CommonCommands/ПрисоединенныеФайлы/CommandModule.bsl index 63d9930d3..d86160e44 100644 --- a/SSL/src/CommonCommands/ПрисоединенныеФайлы/CommandModule.bsl +++ b/SSL/src/CommonCommands/ПрисоединенныеФайлы/CommandModule.bsl @@ -15,4 +15,4 @@ КонецПроцедуры -#КонецОбласти \ No newline at end of file +#КонецОбласти diff --git a/SSL/src/CommonForms/АдреснаяКнига/Form.form b/SSL/src/CommonForms/АдреснаяКнига/Form.form index d466f6471..995b1635a 100644 --- a/SSL/src/CommonForms/АдреснаяКнига/Form.form +++ b/SSL/src/CommonForms/АдреснаяКнига/Form.form @@ -146,6 +146,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -777,7 +778,6 @@ false None Change - Choose Copy CopyToClipboard Create @@ -2443,6 +2443,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2471,6 +2472,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Form.form b/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Form.form index 2da447d47..7fb167191 100644 --- a/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Form.form +++ b/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Form.form @@ -751,6 +751,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Module.bsl b/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Module.bsl index 3b72362e0..a8dd77cf3 100644 --- a/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Module.bsl +++ b/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Module.bsl @@ -114,7 +114,7 @@ КлючСохраненияПоложенияОкна = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "КлючУникальности"); Если ПустаяСтрока(КлючСохраненияПоложенияОкна) Тогда - КлючСохраненияПоложенияОкна = Строка(Список.ТипЗначения); + КлючСохраненияПоложенияОкна = ОбщегоНазначения.СократитьСтрокуКонтрольнойСуммой(Строка(Список.ТипЗначения), 128); КонецЕсли; Если ОграничиватьВыборУказаннымиЗначениями diff --git a/SSL/src/CommonForms/Вопрос/Form.form b/SSL/src/CommonForms/Вопрос/Form.form index 9311fa5ba..8ea3ef8e0 100644 --- a/SSL/src/CommonForms/Вопрос/Form.form +++ b/SSL/src/CommonForms/Вопрос/Form.form @@ -175,6 +175,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -209,6 +210,7 @@ UsualGroup + HorizontalIfPossible Right Bottom Auto diff --git a/SSL/src/CommonForms/ВопросОбУстановкеВнешнейКомпоненты/Form.form b/SSL/src/CommonForms/ВопросОбУстановкеВнешнейКомпоненты/Form.form index 232f582d3..50a9c1edc 100644 --- a/SSL/src/CommonForms/ВопросОбУстановкеВнешнейКомпоненты/Form.form +++ b/SSL/src/CommonForms/ВопросОбУстановкеВнешнейКомпоненты/Form.form @@ -144,6 +144,7 @@ OnCreateAtServer ПриСозданииНаСервере + 40 LockOwner true true diff --git a/SSL/src/CommonForms/ВопросОбУстановкеВнешнейКомпоненты/Module.bsl b/SSL/src/CommonForms/ВопросОбУстановкеВнешнейКомпоненты/Module.bsl index 8dc0ad049..7b2d31f73 100644 --- a/SSL/src/CommonForms/ВопросОбУстановкеВнешнейКомпоненты/Module.bsl +++ b/SSL/src/CommonForms/ВопросОбУстановкеВнешнейКомпоненты/Module.bsl @@ -9,10 +9,10 @@ КонецЕсли; Если Не ПустаяСтрока(Параметры.ТекстПояснения) Тогда - Элементы.ДекорацияПояснение.Заголовок = Параметры.ТекстПояснения - + Символы.ПС - + НСтр("ru = 'Установить?'"); - + Элементы.ДекорацияПояснение.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 + |Установить?'"), + Параметры.ТекстПояснения); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonForms/ВосстановлениеСвязиСГлавнымУзлом/Form.form b/SSL/src/CommonForms/ВосстановлениеСвязиСГлавнымУзлом/Form.form index 9539fe42f..fd024412f 100644 --- a/SSL/src/CommonForms/ВосстановлениеСвязиСГлавнымУзлом/Form.form +++ b/SSL/src/CommonForms/ВосстановлениеСвязиСГлавнымУзлом/Form.form @@ -97,6 +97,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/CommonForms/ВосстановлениеСвязиСГлавнымУзлом/Module.bsl b/SSL/src/CommonForms/ВосстановлениеСвязиСГлавнымУзлом/Module.bsl index 6a7144426..ad41fe13c 100644 --- a/SSL/src/CommonForms/ВосстановлениеСвязиСГлавнымУзлом/Module.bsl +++ b/SSL/src/CommonForms/ВосстановлениеСвязиСГлавнымУзлом/Module.bsl @@ -79,12 +79,7 @@ МодульОбменДаннымиСервер.УдалитьНастройкиСинхронизацииСГлавнымУзломРИБ(ГлавныйУзел); КонецЕсли; - УстановитьИнициализациюВсехПредопределенныхДанных(); - - УстановитьОбновлениеПредопределенныхДанныхИнформационнойБазы( - ОбновлениеПредопределенныхДанных.Авто); - - СоздатьНедостающиеПредопределенныеДанные(); + СтандартныеПодсистемыСервер.ВосстановитьПредопределенныеЭлементы(); ЗафиксироватьТранзакцию(); Исключение @@ -103,199 +98,4 @@ КонецПроцедуры -&НаСервереБезКонтекста -Процедура УстановитьИнициализациюВсехПредопределенныхДанных() - - КоллекцииМетаданных = Новый Массив; - КоллекцииМетаданных.Добавить(Метаданные.Справочники); - КоллекцииМетаданных.Добавить(Метаданные.ПланыВидовХарактеристик); - КоллекцииМетаданных.Добавить(Метаданные.ПланыСчетов); - КоллекцииМетаданных.Добавить(Метаданные.ПланыВидовРасчета); - - Для каждого Коллекция Из КоллекцииМетаданных Цикл - Для Каждого ОбъектМетаданных Из Коллекция Цикл - Менеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ОбъектМетаданных.ПолноеИмя()); - Менеджер.УстановитьИнициализациюПредопределенныхДанных(Истина); - КонецЦикла; - КонецЦикла; - -КонецПроцедуры - -&НаСервереБезКонтекста -Процедура СоздатьНедостающиеПредопределенныеДанные() - - КоллекцииМетаданных = Новый Массив; - КоллекцииМетаданных.Добавить(Метаданные.Справочники); - КоллекцииМетаданных.Добавить(Метаданные.ПланыВидовХарактеристик); - КоллекцииМетаданных.Добавить(Метаданные.ПланыСчетов); - КоллекцииМетаданных.Добавить(Метаданные.ПланыВидовРасчета); - - Запрос = Новый Запрос; - ТекстЗапроса = - "ВЫБРАТЬ - | ПсевдонимЗаданнойТаблицы.Ссылка КАК Ссылка, - | ЕСТЬNULL(ПсевдонимЗаданнойТаблицы.Родитель.ИмяПредопределенныхДанных, """") КАК ИмяРодителя, - | ПсевдонимЗаданнойТаблицы.ИмяПредопределенныхДанных КАК Имя - |ИЗ - | &ТекущаяТаблица КАК ПсевдонимЗаданнойТаблицы - |ГДЕ - | ПсевдонимЗаданнойТаблицы.Предопределенный"; - - ОписанияСохраненных = Новый Массив; - Для Каждого Коллекция Из КоллекцииМетаданных Цикл - ЭтоПланСчетов = (Коллекция = Метаданные.ПланыСчетов); - Для Каждого ОбъектМетаданных Из Коллекция Цикл - Если ОбъектМетаданных.ОбновлениеПредопределенныхДанных - = Метаданные.СвойстваОбъектов.ОбновлениеПредопределенныхДанных.НеОбновлятьАвтоматически Тогда - Продолжить; - КонецЕсли; - ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); - Запрос.Текст = СтрЗаменить(ТекстЗапроса, "&ТекущаяТаблица", ПолноеИмя); - - Если Коллекция = Метаданные.ПланыСчетов - Или Коллекция = Метаданные.ПланыВидовРасчета - Или Не ОбъектМетаданных.Иерархический Тогда - - Запрос.Текст = СтрЗаменить(Запрос.Текст, - "ЕСТЬNULL(ПсевдонимЗаданнойТаблицы.Родитель.ИмяПредопределенныхДанных, """")", """"""); - КонецЕсли; - - ТаблицаИмен = Запрос.Выполнить().Выгрузить(); - ТаблицаИмен.Индексы.Добавить("Имя"); - Имена = ОбъектМетаданных.ПолучитьИменаПредопределенных(); - СохранитьСуществующиеПредопределенныеОбъектыПередСозданиемНедостающих( - ОбъектМетаданных, ПолноеИмя, ТаблицаИмен, Имена, Запрос, ОписанияСохраненных, ЭтоПланСчетов); - КонецЦикла; - КонецЦикла; - - ИнициализироватьПредопределенныеДанные(); - - // Восстановление предопределенных элементов, существовавших до инициализации. - Для Каждого ОписаниеСохраненных Из ОписанияСохраненных Цикл - Запрос.Текст = ОписаниеСохраненных.ТекстЗапроса; - ТаблицаИмен = Запрос.Выполнить().Выгрузить(); - ТаблицаИмен.Индексы.Добавить("Имя"); - Для Каждого ОписаниеСохраненного Из ОписаниеСохраненных.ТаблицаИмен Цикл - Если Не ОписаниеСохраненного.ОбъектСуществует Тогда - Продолжить; - КонецЕсли; - Строка = ТаблицаИмен.Найти(ОписаниеСохраненного.Имя, "Имя"); - Если Строка <> Неопределено Тогда - НовыйОбъект = Строка.Ссылка.ПолучитьОбъект(); - Если ОписаниеСохраненных.ЭтоПланСчетов Тогда - ДополнитьНовыеВидыСубконтоСчета(ОписаниеСохраненного.Объект, НовыйОбъект); - КонецЕсли; - ОбновлениеИнформационнойБазы.УдалитьДанные(НовыйОбъект); - Строка.Имя = ""; - КонецЕсли; - ОбновлениеИнформационнойБазы.ЗаписатьДанные(ОписаниеСохраненного.Объект); - КонецЦикла; - Для Каждого Строка Из ТаблицаИмен Цикл - Если Не ЗначениеЗаполнено(Строка.Имя) - Или Не ЗначениеЗаполнено(Строка.ИмяРодителя) Тогда - Продолжить; - КонецЕсли; - СтрокаРодителя = ОписаниеСохраненных.ТаблицаИмен.Найти(Строка.ИмяРодителя, "Имя"); - Если СтрокаРодителя <> Неопределено Тогда - НовыйОбъект = Строка.Ссылка.ПолучитьОбъект(); - НовыйОбъект.Родитель = СтрокаРодителя.Ссылка; - ОбновлениеИнформационнойБазы.ЗаписатьДанные(НовыйОбъект); - КонецЕсли; - КонецЦикла; - КонецЦикла; - -КонецПроцедуры - -&НаСервереБезКонтекста -Процедура ДополнитьНовыеВидыСубконтоСчета(Счет, ОбразецСчета) - - Для Каждого Строка Из ОбразецСчета.ВидыСубконто Цикл - Индекс = ОбразецСчета.ВидыСубконто.Индекс(Строка); - Если Счет.ВидыСубконто.Количество() > Индекс Тогда - Если Счет.ВидыСубконто[Индекс].ВидСубконто <> Строка.ВидСубконто Тогда - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Обмен данными.Отключение связи с главным узлом'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - Счет.Метаданные(), - Счет, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'У счета ""%1"" субконто №%2 ""%3"" не совпадает с предопределенным субконто ""%4"".'"), - Строка(Счет), - Индекс + 1, - Строка(Счет.ВидыСубконто[Индекс].ВидСубконто), - Строка(Строка.ВидСубконто)), - РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная); - ИначеЕсли Не Счет.ВидыСубконто[Индекс].Предопределенное Тогда - Счет.ВидыСубконто[Индекс].Предопределенное = Истина; - КонецЕсли; - Иначе - ЗаполнитьЗначенияСвойств(Счет.ВидыСубконто.Добавить(), Строка); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -&НаСервереБезКонтекста -Процедура СохранитьСуществующиеПредопределенныеОбъектыПередСозданиемНедостающих( - ОбъектМетаданных, ПолноеИмя, ТаблицаИмен, Имена, Запрос, ОписанияСохраненных, ЭтоПланСчетов) - - ТребуетсяИнициализация = Ложь; - ПредопределенныеСуществуют = Ложь; - ТаблицаИмен.Колонки.Добавить("ОбъектСуществует", Новый ОписаниеТипов("Булево")); - - Для каждого Имя Из Имена Цикл - Строки = ТаблицаИмен.НайтиСтроки(Новый Структура("Имя", Имя)); - Если Строки.Количество() = 0 Тогда - ТребуетсяИнициализация = Истина; - Иначе - Для Каждого Строка Из Строки Цикл - Строка.ОбъектСуществует = Истина; - КонецЦикла; - ПредопределенныеСуществуют = Истина; - КонецЕсли; - КонецЦикла; - - Если Не ТребуетсяИнициализация Тогда - Возврат; - КонецЕсли; - - Если ПредопределенныеСуществуют Тогда - ОписаниеСохраненных = Новый Структура; - ОписаниеСохраненных.Вставить("ТекстЗапроса", Запрос.Текст); - ОписаниеСохраненных.Вставить("ТаблицаИмен", ТаблицаИмен); - ОписаниеСохраненных.Вставить("ЭтоПланСчетов", ЭтоПланСчетов); - ОписанияСохраненных.Добавить(ОписаниеСохраненных); - - ТаблицаИмен.Колонки.Добавить("Объект"); - Для каждого Строка Из ТаблицаИмен Цикл - Если Строка.ОбъектСуществует Тогда - Объект = Строка.Ссылка.ПолучитьОбъект(); - Объект.ИмяПредопределенныхДанных = ""; - Если ЭтоПланСчетов Тогда - СтрокиПредопределенныхВидовСубконто = Новый Массив; - Для Каждого СтрокаВидаСубконто Из Объект.ВидыСубконто Цикл - Если СтрокаВидаСубконто.Предопределенное Тогда - СтрокаВидаСубконто.Предопределенное = Ложь; - СтрокиПредопределенныхВидовСубконто.Добавить(СтрокаВидаСубконто); - КонецЕсли; - КонецЦикла; - КонецЕсли; - ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); - Если ЭтоПланСчетов Тогда - Для Каждого СтрокаВидаСубконто Из СтрокиПредопределенныхВидовСубконто Цикл - СтрокаВидаСубконто.Предопределенное = Истина; - КонецЦикла; - КонецЕсли; - Объект.ИмяПредопределенныхДанных = Строка.Имя; - Строка.Объект = Объект; - КонецЕсли; - КонецЦикла; - КонецЕсли; - - Менеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя); - Менеджер.УстановитьИнициализациюПредопределенныхДанных(Ложь); - -КонецПроцедуры - #КонецОбласти diff --git a/SSL/src/CommonForms/ВходВПрограммуЗапрещен/Form.form b/SSL/src/CommonForms/ВходВПрограммуЗапрещен/Form.form index 13e2add64..5cb044ac4 100644 --- a/SSL/src/CommonForms/ВходВПрограммуЗапрещен/Form.form +++ b/SSL/src/CommonForms/ВходВПрограммуЗапрещен/Form.form @@ -96,6 +96,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true diff --git a/SSL/src/CommonForms/ВыборДействияПриОбнаруженииОтличийФайла/Form.form b/SSL/src/CommonForms/ВыборДействияПриОбнаруженииОтличийФайла/Form.form index b6ab58fdc..21269491d 100644 --- a/SSL/src/CommonForms/ВыборДействияПриОбнаруженииОтличийФайла/Form.form +++ b/SSL/src/CommonForms/ВыборДействияПриОбнаруженииОтличийФайла/Form.form @@ -67,13 +67,12 @@ true LabelField - Center Enter true Left true - true + 6 true true @@ -99,6 +98,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -107,23 +107,23 @@ - ОписаниеФайлаВРабочемКаталоге - 16 - - НадписьФайлВРабочемКаталоге - 17 - - <key>ru</key> - <value>Файл в рабочем каталоге</value> - + ФайлИКнопка + 19 + + ПолноеИмяФайлаВРабочемКаталоге + 1 true true true + + ПолноеИмяФайлаВРабочемКаталоге + + Top - НадписьФайлВРабочемКаталогеExtendedTooltip - 46 + ПолноеИмяФайлаВРабочемКаталогеРасширеннаяПодсказка + 48 Label true true @@ -132,103 +132,38 @@ - НадписьФайлВРабочемКаталогеКонтекстноеМеню - 18 + ПолноеИмяФайлаВРабочемКаталогеКонтекстноеМеню + 2 true - Label - true - false - - Left + InputField + true + Enter + true + Left + true + + 60 + true + true + true + true + true + Normal - - ФайлИКнопка - 19 - - ПолноеИмяФайлаВРабочемКаталоге - 1 - true - true - - true - - - ПолноеИмяФайлаВРабочемКаталоге - - None - - ПолноеИмяФайлаВРабочемКаталогеРасширеннаяПодсказка - 48 - Label - true - true - - Left - - - - ПолноеИмяФайлаВРабочемКаталогеКонтекстноеМеню - 2 - true - - InputField - true - Enter - true - Left - true - - 68 - true - true - true - true - true - Normal - - - - ОткрытьКаталог - 13 - true - true - - true - - false - - ОткрытьКаталогExtendedTooltip - 49 - Label - true - true - - Left - - - UsualButton - Form.Command.ОткрытьКаталог - Normal - Auto - true - true - UserCmds - Auto - + + ОткрытьКаталог + 13 true true true - - <key>ru</key> - <value>Файл и кнопка</value> - + false - ФайлИКнопкаExtendedTooltip - 47 + ОткрытьКаталогExtendedTooltip + 49 Label true true @@ -236,14 +171,14 @@ Left - UsualGroup - - Auto - true - true - Auto - Auto - + UsualButton + Form.Command.ОткрытьКаталог + Normal + Auto + true + true + UserCmds + Auto true true @@ -252,11 +187,11 @@ <key>ru</key> - <value>Описание файла в рабочем каталоге</value> + <value>Файл и кнопка</value> - ОписаниеФайлаВРабочемКаталогеExtendedTooltip - 45 + ФайлИКнопкаExtendedTooltip + 47 Label true true @@ -266,7 +201,7 @@ UsualGroup - Vertical + HorizontalIfPossible Auto NormalSeparation true @@ -283,7 +218,7 @@ 27 ДатаИзмененияВРабочемКаталоге - 28 + 60 true true @@ -293,8 +228,8 @@ ДатаИзмененияВРабочемКаталоге - ДатаИзмененияВРабочемКаталогеExtendedTooltip - 52 + ДатаИзмененияВРабочемКаталогеРасширеннаяПодсказка + 62 Label true true @@ -304,11 +239,10 @@ ДатаИзмененияВРабочемКаталогеКонтекстноеМеню - 29 + 61 true InputField - true Enter true Left @@ -316,7 +250,6 @@ true true - true true true true @@ -326,7 +259,7 @@ ДатаИзмененияВХранилищеФайлов - 30 + 57 true true @@ -336,8 +269,8 @@ ДатаИзмененияВХранилищеФайлов - ДатаИзмененияВХранилищеФайловExtendedTooltip - 53 + ДатаИзмененияВХранилищеФайловРасширеннаяПодсказка + 59 Label true true @@ -347,11 +280,10 @@ ДатаИзмененияВХранилищеФайловКонтекстноеМеню - 31 + 58 true InputField - true Enter true Left @@ -359,7 +291,6 @@ true true - true true true true @@ -412,6 +343,7 @@ РазмерВРабочемКаталоге + None РазмерВРабочемКаталогеExtendedTooltip 55 @@ -455,6 +387,7 @@ РазмерВХранилищеФайлов + None РазмерВХранилищеФайловExtendedTooltip 56 @@ -539,6 +472,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -621,7 +555,7 @@ Left - Form.Command.ВзятьИзХранилища + Form.Command.ВзятьИзПрограммы Normal Auto true @@ -702,7 +636,7 @@ ПолноеИмяФайлаВРабочемКаталоге <key>ru</key> - <value>Полное имя файла в рабочем каталоге</value> + <value>Копия файла на компьютере</value> 1 @@ -738,12 +672,12 @@ ДатаИзмененияВХранилищеФайлов <key>ru</key> - <value>В хранилище файлов</value> + <value>Файл в программе</value> 5 - Date - + String + true @@ -756,12 +690,12 @@ ДатаИзмененияВРабочемКаталоге <key>ru</key> - <value>В рабочем каталоге</value> + <value>Копия на компьютере</value> 6 - Date - + String + true @@ -774,7 +708,7 @@ РазмерВРабочемКаталоге <key>ru</key> - <value>В рабочем каталоге</value> + <value>На компьютере</value> 7 @@ -794,7 +728,7 @@ РазмерВХранилищеФайлов <key>ru</key> - <value>В хранилище файлов</value> + <value>В программе</value> 8 @@ -814,12 +748,12 @@ ОткрытьСуществующий <key>ru</key> - <value>Открыть существующий</value> + <value>Открыть копию</value> 1 ru - Открыть файл в рабочем каталоге. + Открыть копию файла на компьютере. true @@ -833,22 +767,22 @@ Auto - ВзятьИзХранилища + ВзятьИзПрограммы <key>ru</key> - <value>Взять из хранилища</value> + <value>Взять из программы</value> 2 ru - Заменить файл в рабочем каталоге на файл из хранилища и открыть. + Заменить копию файла на компьютере копией файла из программы и открыть. true - ВзятьИзХранилища + ВзятьИзПрограммы DontUse @@ -889,7 +823,7 @@ 4 ru - Поместить файл в хранилище файлов. + Поместить файл в программу. true @@ -911,7 +845,7 @@ 5 ru - Не помещать файл из рабочего каталога в хранилище файлов. + Не помещать файл с компьютера в программу. true diff --git a/SSL/src/CommonForms/ВыборДействияПриОбнаруженииОтличийФайла/Module.bsl b/SSL/src/CommonForms/ВыборДействияПриОбнаруженииОтличийФайла/Module.bsl index 9fea9c249..d6fe178e3 100644 --- a/SSL/src/CommonForms/ВыборДействияПриОбнаруженииОтличийФайла/Module.bsl +++ b/SSL/src/CommonForms/ВыборДействияПриОбнаруженииОтличийФайла/Module.bsl @@ -18,6 +18,15 @@ |РазмерВХранилищеФайлов, |Сообщение, |Заголовок"); + + ТестНовее = " (" + НСтр("ru='новее'") + ")"; + Если ДатаИзмененияВРабочемКаталоге > ДатаИзмененияВХранилищеФайлов Тогда + ДатаИзмененияВРабочемКаталоге = Строка(ДатаИзмененияВРабочемКаталоге) + ТестНовее; + Иначе + ДатаИзмененияВХранилищеФайлов = Строка(ДатаИзмененияВХранилищеФайлов) + ТестНовее; + КонецЕсли; + + Элементы.Сообщение.Высота = СтрЧислоСтрок(Сообщение) + 2; Если Параметры.ДействиеНадФайлом = "ПомещениеВХранилищеФайлов" Тогда @@ -55,7 +64,7 @@ КонецПроцедуры &НаКлиенте -Процедура ВзятьИзХранилища(Команда) +Процедура ВзятьИзПрограммы(Команда) Закрыть("ВзятьИзХранилищаИОткрыть"); diff --git a/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Form.form b/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Form.form index a44085342..b587996e9 100644 --- a/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Form.form +++ b/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Form.form @@ -593,6 +593,7 @@ true true true + HorizontalIfPossible true true true diff --git a/SSL/src/CommonForms/ВыборКонтакта/Form.form b/SSL/src/CommonForms/ВыборКонтакта/Form.form index 4f8abf6dc..012183a22 100644 --- a/SSL/src/CommonForms/ВыборКонтакта/Form.form +++ b/SSL/src/CommonForms/ВыборКонтакта/Form.form @@ -46,6 +46,10 @@ Left true + + Clearing + ВариантыПоискаОчистка + 20 true true @@ -53,7 +57,6 @@ true true true - true Normal @@ -147,6 +150,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -675,7 +679,6 @@ false None Change - Choose Copy CopyToClipboard Create diff --git a/SSL/src/CommonForms/ВыборКонтакта/Module.bsl b/SSL/src/CommonForms/ВыборКонтакта/Module.bsl index 1acb9fbb7..1f59cd473 100644 --- a/SSL/src/CommonForms/ВыборКонтакта/Module.bsl +++ b/SSL/src/CommonForms/ВыборКонтакта/Module.bsl @@ -119,6 +119,13 @@ КонецПроцедуры +&НаКлиенте +Процедура ВариантыПоискаОчистка(Элемент, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы diff --git a/SSL/src/CommonForms/ВыборРолиИсполнителя/Form.form b/SSL/src/CommonForms/ВыборРолиИсполнителя/Form.form index b633b7e98..4a0316547 100644 --- a/SSL/src/CommonForms/ВыборРолиИсполнителя/Form.form +++ b/SSL/src/CommonForms/ВыборРолиИсполнителя/Form.form @@ -222,6 +222,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/CommonForms/ВыборУзловПлановОбмена/Form.form b/SSL/src/CommonForms/ВыборУзловПлановОбмена/Form.form index 9235fed3b..348bc0bf5 100644 --- a/SSL/src/CommonForms/ВыборУзловПлановОбмена/Form.form +++ b/SSL/src/CommonForms/ВыборУзловПлановОбмена/Form.form @@ -307,6 +307,7 @@ LockOwner true true + HorizontalIfPossible true true true diff --git a/SSL/src/CommonForms/ГруппыПользователей/Form.form b/SSL/src/CommonForms/ГруппыПользователей/Form.form index 11711fa0d..d3e81aeb3 100644 --- a/SSL/src/CommonForms/ГруппыПользователей/Form.form +++ b/SSL/src/CommonForms/ГруппыПользователей/Form.form @@ -539,6 +539,7 @@ Page + HorizontalIfPossible auto false diff --git a/SSL/src/CommonForms/ДлительнаяОперация/Form.form b/SSL/src/CommonForms/ДлительнаяОперация/Form.form index a049510c6..6e76d0514 100644 --- a/SSL/src/CommonForms/ДлительнаяОперация/Form.form +++ b/SSL/src/CommonForms/ДлительнаяОперация/Form.form @@ -95,6 +95,7 @@ UsualGroup + HorizontalIfPossible Center Auto true @@ -164,6 +165,7 @@ Yes LockOwner true + HorizontalIfPossible true auto true diff --git a/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Form.form b/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Form.form index 432263dd1..ebe0563d4 100644 --- a/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Form.form +++ b/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Form.form @@ -318,6 +318,7 @@ Page + HorizontalIfPossible Center auto false @@ -481,6 +482,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/CommonForms/ДополнительныеПараметрыПроксиСервера/Form.form b/SSL/src/CommonForms/ДополнительныеПараметрыПроксиСервера/Form.form index a42052a38..3d2d6a4c1 100644 --- a/SSL/src/CommonForms/ДополнительныеПараметрыПроксиСервера/Form.form +++ b/SSL/src/CommonForms/ДополнительныеПараметрыПроксиСервера/Form.form @@ -127,6 +127,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -254,6 +255,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -385,6 +387,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/CommonForms/ДополнительныеПараметрыПроксиСервера/Help/ru.html b/SSL/src/CommonForms/ДополнительныеПараметрыПроксиСервера/Help/ru.html index e2c1b1312..55b34b418 100644 --- a/SSL/src/CommonForms/ДополнительныеПараметрыПроксиСервера/Help/ru.html +++ b/SSL/src/CommonForms/ДополнительныеПараметрыПроксиСервера/Help/ru.html @@ -4,7 +4,7 @@

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

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

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

        -
        • Для того чтобы указать адреса прокси-серверов для отдельных протоколов, выключите флажок Использовать прокси-сервер по умолчанию для всех протоколов; +
          • Для того чтобы указать адреса прокси-серверов для отдельных протоколов, выключите флажок Один прокси-сервер для всех протоколов;
          • В соответствующем поле - HTTP, HTTPS, FTP - откорректируйте имя прокси-сервера, который будет использоваться для каждого протокола;
          • При необходимости укажите Порт.
          • В списке Не использовать прокси-сервер для адресов с помощью кнопки Добавить укажите адреса, к которым будет осуществляться прямой доступ. diff --git a/SSL/src/CommonForms/ДоступныеВидыКлиентовВнешнейКомпоненты/Form.form b/SSL/src/CommonForms/ДоступныеВидыКлиентовВнешнейКомпоненты/Form.form deleted file mode 100644 index 4419cb62a..000000000 --- a/SSL/src/CommonForms/ДоступныеВидыКлиентовВнешнейКомпоненты/Form.form +++ /dev/null @@ -1,1625 +0,0 @@ - - - - <key>ru</key> - <value>Установка внешней компоненты</value> - - - Шапка - 90 - - Предупреждение32 - 95 - - <key>ru</key> - <value>Предупреждение32</value> - - true - true - - true - - - Предупреждение32РасширеннаяПодсказка - 97 - Label - true - true - - Left - - - - Предупреждение32КонтекстноеМеню - 96 - true - - true - true - false - Bottom - - - CommonPicture.Предупреждение32 - - - - - ДекорацияПояснение - 92 - - <key>ru</key> - <value>Отсутствует компонента для используемого клиентского приложения. -Обратитесь к администратору.</value> - - true - true - - true - - - ДекорацияПояснениеРасширеннаяПодсказка - 94 - Label - true - true - - Left - - - - ДекорацияПояснениеКонтекстноеМеню - 93 - true - - Label - 75 - true - - Style.NormalTextFont - 100 - - - Left - - - true - true - - true - - - <key>ru</key> - <value>Шапка</value> - - - ШапкаРасширеннаяПодсказка - 91 - Label - true - true - - Left - - - UsualGroup - - Center - Auto - NormalSeparation - true - true - Auto - Auto - - - - ГруппаПоддерживаемыеКлиенты - 1 - - Подсказка - 3 - - ГруппаWindows - 5 - - ГруппаWindowsТонкийКлиент - 7 - - WindowsТонкийКлиент - 9 - - <key>ru</key> - <value>Тонкий клиент</value> - - true - true - - true - - - WindowsТонкийКлиентРасширеннаяПодсказка - 11 - Label - true - true - - Left - - - - WindowsТонкийКлиентКонтекстноеМеню - 10 - true - - Label - 10 - true - true - - Left - - - - Windows_x86 - 12 - - <key>ru</key> - <value>x86</value> - - true - true - - true - - - Windows_x86 - - Right - - Windows_x86РасширеннаяПодсказка - 14 - Label - true - true - - Left - - - - Windows_x86КонтекстноеМеню - 13 - true - - CheckBoxField - Auto - true - Left - true - - - - Windows_x86_64 - 15 - - <key>ru</key> - <value>x64</value> - - true - true - - true - - - Windows_x86_64 - - Right - - Windows_x86_64РасширеннаяПодсказка - 17 - Label - true - true - - Left - - - - Windows_x86_64КонтекстноеМеню - 16 - true - - CheckBoxField - Auto - true - Left - true - - - true - true - - true - - - <key>ru</key> - <value>Тонкий клиент</value> - - - ГруппаWindowsТонкийКлиентРасширеннаяПодсказка - 8 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ГруппаWindowsChrome - 18 - - WindowsChrome - 20 - - <key>ru</key> - <value>Chrome</value> - - true - true - - true - - - WindowsChromeРасширеннаяПодсказка - 22 - Label - true - true - - Left - - - - WindowsChromeКонтекстноеМеню - 21 - true - - Label - 10 - true - true - - Left - - - - Windows_x86_Chrome - 23 - - <key>ru</key> - <value>x86</value> - - true - true - - true - - - Windows_x86_Chrome - - Right - - Windows_x86_ChromeРасширеннаяПодсказка - 25 - Label - true - true - - Left - - - - Windows_x86_ChromeКонтекстноеМеню - 24 - true - - CheckBoxField - Auto - true - Left - true - - - true - true - - true - - - <key>ru</key> - <value>Сhrome</value> - - - ГруппаWindowsChromeРасширеннаяПодсказка - 19 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ГруппаWindowsFirefox - 26 - - WindowsFirefox - 28 - - <key>ru</key> - <value>Firefox</value> - - true - true - - true - - - WindowsFirefoxРасширеннаяПодсказка - 30 - Label - true - true - - Left - - - - WindowsFirefoxКонтекстноеМеню - 29 - true - - Label - 10 - true - true - - Left - - - - Windows_x86_Firefox - 31 - - <key>ru</key> - <value>x86</value> - - true - true - - true - - - Windows_x86_Firefox - - Right - - Windows_x86_FirefoxРасширеннаяПодсказка - 33 - Label - true - true - - Left - - - - Windows_x86_FirefoxКонтекстноеМеню - 32 - true - - CheckBoxField - Auto - true - Left - true - - - true - true - - true - - - <key>ru</key> - <value>Firefox</value> - - - ГруппаWindowsFirefoxРасширеннаяПодсказка - 27 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ГруппаWindowsInternetExplorer - 34 - - WindowsInternetExplorer - 36 - - <key>ru</key> - <value>Internet Explorer</value> - - true - true - - true - - ShowBottom - - WindowsInternetExplorerРасширеннаяПодсказка - 38 - Label - true - true - - Left - - - - WindowsInternetExplorerКонтекстноеМеню - 37 - true - - Label - 10 - true - true - - Left - - - - Windows_x86_MSIE - 39 - - <key>ru</key> - <value>x86</value> - - true - true - - true - - - Windows_x86_MSIE - - Right - - Windows_x86_MSIEРасширеннаяПодсказка - 41 - Label - true - true - - Left - - - - Windows_x86_MSIEКонтекстноеМеню - 40 - true - - CheckBoxField - Auto - true - Left - true - - - - Windows_x86_64_MSIE - 42 - - <key>ru</key> - <value>x64</value> - - true - true - - true - - - Windows_x86_64_MSIE - - Right - - Windows_x86_64_MSIEРасширеннаяПодсказка - 44 - Label - true - true - - Left - - - - Windows_x86_64_MSIEКонтекстноеМеню - 43 - true - - CheckBoxField - Auto - true - Left - true - - - true - true - - true - - - <key>ru</key> - <value>Internet explorer</value> - - ShowBottom - - ГруппаWindowsInternetExplorerРасширеннаяПодсказка - 35 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Windows</value> - - true - - ГруппаWindowsРасширеннаяПодсказка - 6 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - auto - Auto - Auto - - - - ГруппаLinux - 45 - - ГруппаLinuxТонкийКлиент - 47 - - LinuxТонкийКлиент - 49 - - <key>ru</key> - <value>Тонкий клиент</value> - - true - true - - true - - - LinuxТонкийКлиентРасширеннаяПодсказка - 51 - Label - true - true - - Left - - - - LinuxТонкийКлиентКонтекстноеМеню - 50 - true - - Label - 9 - true - true - - Left - - - - Linux_x86 - 52 - - <key>ru</key> - <value>x86</value> - - true - true - - true - - - Linux_x86 - - Right - - Linux_x86РасширеннаяПодсказка - 54 - Label - true - true - - Left - - - - Linux_x86КонтекстноеМеню - 53 - true - - CheckBoxField - Auto - true - Left - true - - - - Linux_x86_64 - 55 - - <key>ru</key> - <value>x64</value> - - true - true - - true - - - Linux_x86_64 - - Right - - Linux_x86_64РасширеннаяПодсказка - 57 - Label - true - true - - Left - - - - Linux_x86_64КонтекстноеМеню - 56 - true - - CheckBoxField - Auto - true - Left - true - - - true - true - - true - - - <key>ru</key> - <value>Тонкий клиент</value> - - - ГруппаLinuxТонкийКлиентРасширеннаяПодсказка - 48 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ГруппаLinuxChrome - 58 - - LinuxChrome - 60 - - <key>ru</key> - <value>Chrome</value> - - true - true - - true - - - LinuxChromeРасширеннаяПодсказка - 62 - Label - true - true - - Left - - - - LinuxChromeКонтекстноеМеню - 61 - true - - Label - 9 - true - true - - Left - - - - Linux_x86_Chrome - 63 - - <key>ru</key> - <value>x86</value> - - true - true - - true - - - Linux_x86_Chrome - - Right - - Linux_x86_ChromeРасширеннаяПодсказка - 65 - Label - true - true - - Left - - - - Linux_x86_ChromeКонтекстноеМеню - 64 - true - - CheckBoxField - Auto - true - Left - true - - - - Linux_x86_64_Chrome - 66 - - <key>ru</key> - <value>x64</value> - - true - true - - true - - - Linux_x86_64_Chrome - - Right - - Linux_x86_64_ChromeРасширеннаяПодсказка - 68 - Label - true - true - - Left - - - - Linux_x86_64_ChromeКонтекстноеМеню - 67 - true - - CheckBoxField - Auto - true - Left - true - - - true - true - - true - - - <key>ru</key> - <value>Сhrome</value> - - - ГруппаLinuxChromeРасширеннаяПодсказка - 59 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ГруппаLinuxFirefox - 69 - - LinuxFirefox - 71 - - <key>ru</key> - <value>Firefox</value> - - true - true - - true - - - LinuxFirefoxРасширеннаяПодсказка - 73 - Label - true - true - - Left - - - - LinuxFirefoxКонтекстноеМеню - 72 - true - - Label - 9 - true - true - - Left - - - - Linux_x86_Firefox - 74 - - <key>ru</key> - <value>x86</value> - - true - true - - true - - - Linux_x86_Firefox - - Right - - Linux_x86_FirefoxРасширеннаяПодсказка - 76 - Label - true - true - - Left - - - - Linux_x86_FirefoxКонтекстноеМеню - 75 - true - - CheckBoxField - Auto - true - Left - true - - - - Linux_x86_64_Firefox - 77 - - <key>ru</key> - <value>x64</value> - - true - true - - true - - - Linux_x86_64_Firefox - - Right - - Linux_x86_64_FirefoxРасширеннаяПодсказка - 79 - Label - true - true - - Left - - - - Linux_x86_64_FirefoxКонтекстноеМеню - 78 - true - - CheckBoxField - Auto - true - Left - true - - - true - true - - true - - - <key>ru</key> - <value>Firefox</value> - - - ГруппаLinuxFirefoxРасширеннаяПодсказка - 70 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Linux</value> - - true - - ГруппаLinuxРасширеннаяПодсказка - 46 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - auto - Auto - Auto - - - - ГруппаMacOS - 80 - - ГруппаMacOSSafari - 82 - - MacOSSafari - 84 - - <key>ru</key> - <value>Safari</value> - - true - true - - true - - - MacOSSafariРасширеннаяПодсказка - 86 - Label - true - true - - Left - - - - MacOSSafariКонтекстноеМеню - 85 - true - - Label - true - true - - Left - - - - MacOS_x86_64_Safari - 87 - - <key>ru</key> - <value>x64</value> - - true - true - - true - - - MacOS_x86_64_Safari - - Right - - MacOS_x86_64_SafariРасширеннаяПодсказка - 89 - Label - true - true - - Left - - - - MacOS_x86_64_SafariКонтекстноеМеню - 88 - true - - CheckBoxField - Auto - true - Left - true - - - true - true - - true - - - <key>ru</key> - <value>Safari</value> - - - ГруппаMacOSSafariРасширеннаяПодсказка - 83 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>OS X (macOS)</value> - - true - - ГруппаMacOSРасширеннаяПодсказка - 81 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - auto - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Подсказка</value> - - ShowTop - - ПодсказкаРасширеннаяПодсказка - 4 - - <key>ru</key> - <value>Внешние компоненты платформозависимы, и не все внешние компоненты смогут работать на любой операционной системе или в любом браузере.</value> - - Label - 60 - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Поддерживаемые компонентой операционные системы и виды клиентов</value> - - 60 - true - - ГруппаПоддерживаемыеКлиентыРасширеннаяПодсказка - 2 - Label - true - true - - Left - - - UsualGroup - - Auto - true - Button - true - true - auto - Auto - Auto - - - Bottom - true - - ФормаКоманднаяПанель - -1 - - УстановитьИПродолжить - 98 - - <key>ru</key> - <value>Установить и продолжить</value> - - true - false - - true - - true - - УстановитьИПродолжитьРасширеннаяПодсказка - 99 - Label - true - true - - Left - - - Form.StandardCommand.Yes - Normal - Auto - true - true - UserCmds - Auto - - - Закрыть - 100 - true - true - - true - - - ЗакрытьРасширеннаяПодсказка - 101 - Label - true - true - - Left - - - Form.StandardCommand.Cancel - Normal - Auto - true - true - UserCmds - Auto - - Right - - - OnCreateAtServer - ПриСозданииНаСервере - - LockOwner - true - true - Vertical - true - true - auto - true - - Windows_x86 - - <key>ru</key> - <value>Windows x86</value> - - 1 - - Boolean - - - true - - - true - - - - Windows_x86_64 - - <key>ru</key> - <value>Windows x86 64</value> - - 2 - - Boolean - - - true - - - true - - - - Linux_x86 - - <key>ru</key> - <value>Linux x86</value> - - 3 - - Boolean - - - true - - - true - - - - Linux_x86_64 - - <key>ru</key> - <value>Linux x86 64</value> - - 4 - - Boolean - - - true - - - true - - - - Windows_x86_Firefox - - <key>ru</key> - <value>Windows x86 firefox</value> - - 5 - - Boolean - - - true - - - true - - - - Linux_x86_Firefox - - <key>ru</key> - <value>Linux x86 firefox</value> - - 6 - - Boolean - - - true - - - true - - - - Linux_x86_64_Firefox - - <key>ru</key> - <value>Linux x86 64 firefox</value> - - 7 - - Boolean - - - true - - - true - - - - Windows_x86_MSIE - - <key>ru</key> - <value>Windows x86 MSIE</value> - - 8 - - Boolean - - - true - - - true - - - - Windows_x86_64_MSIE - - <key>ru</key> - <value>Windows x86 64 MSIE</value> - - 9 - - Boolean - - - true - - - true - - - - Windows_x86_Chrome - - <key>ru</key> - <value>Windows x86 chrome</value> - - 10 - - Boolean - - - true - - - true - - - - Linux_x86_Chrome - - <key>ru</key> - <value>Linux x86 chrome</value> - - 11 - - Boolean - - - true - - - true - - - - Linux_x86_64_Chrome - - <key>ru</key> - <value>Linux x86 64 chrome</value> - - 12 - - Boolean - - - true - - - true - - - - MacOS_x86_64_Safari - - <key>ru</key> - <value>Mac o s x86 64 safari</value> - - 13 - - Boolean - - - true - - - true - - - - ТекстПояснения - - String - - - - - ПоддерживаемыеКлиенты - - - - - - - diff --git a/SSL/src/CommonForms/ДоступныеВидыКлиентовВнешнейКомпоненты/Module.bsl b/SSL/src/CommonForms/ДоступныеВидыКлиентовВнешнейКомпоненты/Module.bsl deleted file mode 100644 index 1f07caf6e..000000000 --- a/SSL/src/CommonForms/ДоступныеВидыКлиентовВнешнейКомпоненты/Module.bsl +++ /dev/null @@ -1,26 +0,0 @@ - -#Область ОбработчикиСобытийФормы - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. - Возврат; - КонецЕсли; - - Если Не ПустаяСтрока(Параметры.ТекстПояснения) Тогда - Элементы.ДекорацияПояснение.Заголовок = Параметры.ТекстПояснения - + Символы.ПС + Символы.ПС - + НСтр("ru = 'Отсутствует компонента для используемого клиентского приложения. - |Обратитесь к администратору.'"); - - КонецЕсли; - - // Заполнение реквизитов поддерживаемых клиентов. - Если ТипЗнч(Параметры.ПоддерживаемыеКлиенты) = Тип("Структура") Тогда - ЗаполнитьЗначенияСвойств(ЭтотОбъект, Параметры.ПоддерживаемыеКлиенты); - КонецЕсли; - -КонецПроцедуры - -#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonForms/МастерАнкетыПоРазделам/Form.form b/SSL/src/CommonForms/МастерАнкетыПоРазделам/Form.form index 1e1d5bccd..c864a597c 100644 --- a/SSL/src/CommonForms/МастерАнкетыПоРазделам/Form.form +++ b/SSL/src/CommonForms/МастерАнкетыПоРазделам/Form.form @@ -248,6 +248,7 @@ UsualGroup + HorizontalIfPossible Auto WeakSeparation true @@ -280,6 +281,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -702,6 +704,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -827,6 +830,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Form.form b/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Form.form index 6b0d99360..57e402bed 100644 --- a/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Form.form +++ b/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Form.form @@ -162,6 +162,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/CommonForms/НастройкаОнлайнПоддержки/Form.form b/SSL/src/CommonForms/НастройкаОнлайнПоддержки/Form.form index d26aac918..a16869037 100644 --- a/SSL/src/CommonForms/НастройкаОнлайнПоддержки/Form.form +++ b/SSL/src/CommonForms/НастройкаОнлайнПоддержки/Form.form @@ -276,6 +276,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -488,6 +489,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -516,6 +518,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true diff --git a/SSL/src/CommonForms/НастройкаОнлайнПоддержки/Module.bsl b/SSL/src/CommonForms/НастройкаОнлайнПоддержки/Module.bsl index fbfbfe1df..2b82842e2 100644 --- a/SSL/src/CommonForms/НастройкаОнлайнПоддержки/Module.bsl +++ b/SSL/src/CommonForms/НастройкаОнлайнПоддержки/Module.bsl @@ -75,21 +75,21 @@ &НаКлиенте Процедура ПолучитьАккаунтВызовОнлайнПоддержки(Команда) - ПерейтиПоНавигационнойСсылке("http://buhphone.com/clients/be-client/"); + ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("http://buhphone.com/clients/be-client/"); КонецПроцедуры &НаКлиенте Процедура ТехническиеТребования(Команда) - ПерейтиПоНавигационнойСсылке("http://buhphone.com/require/#anchor_1"); + ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("http://buhphone.com/require/#anchor_1"); КонецПроцедуры &НаКлиенте Процедура СкачатьПриложение(Команда) - ПерейтиПоНавигационнойСсылке("http://distribs.buhphone.com/current"); + ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("http://distribs.buhphone.com/current"); КонецПроцедуры diff --git a/SSL/src/CommonForms/НастройкаОтправкиSMS/Form.form b/SSL/src/CommonForms/НастройкаОтправкиSMS/Form.form index 2717e5e64..941b09729 100644 --- a/SSL/src/CommonForms/НастройкаОтправкиSMS/Form.form +++ b/SSL/src/CommonForms/НастройкаОтправкиSMS/Form.form @@ -126,6 +126,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -259,7 +260,6 @@ true InputField - true Enter true Left @@ -270,7 +270,6 @@ true false true - true true true true diff --git a/SSL/src/CommonForms/НастройкаОсновногоРабочегоКаталога/Form.form b/SSL/src/CommonForms/НастройкаРабочегоКаталога/Form.form similarity index 63% rename from SSL/src/CommonForms/НастройкаОсновногоРабочегоКаталога/Form.form rename to SSL/src/CommonForms/НастройкаРабочегоКаталога/Form.form index cdbd90801..1f410076d 100644 --- a/SSL/src/CommonForms/НастройкаОсновногоРабочегоКаталога/Form.form +++ b/SSL/src/CommonForms/НастройкаРабочегоКаталога/Form.form @@ -2,7 +2,7 @@ <key>ru</key> - <value>Настройка основного рабочего каталога</value> + <value>Настройка рабочего каталога</value> ГруппаРасположение @@ -109,6 +109,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -168,48 +169,6 @@ Normal - - ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов - 24 - - <key>ru</key> - <value>Подтверждать при удалении из основного рабочего каталога</value> - - true - true - - true - - - ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов - - Right - - OnChange - ПодтверждатьПриУдаленииИзЛокальногоКэшаФайловПриИзменении - - - ПодтверждатьПриУдаленииИзЛокальногоКэшаФайловExtendedTooltip - 34 - Label - true - true - - Left - - - - ПодтверждатьПриУдаленииИзЛокальногоКэшаФайловКонтекстноеМеню - 25 - true - - CheckBoxField - Enter - true - Left - true - - УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования 16 @@ -249,26 +208,19 @@ - СейчасВЛокальномКэшеФайлов - 18 - - КоличествоСуммарное - 11 - - <key>ru</key> - <value>Файлов</value> - + ГруппаПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов + 41 + + ДекорацияОтступЗависимыеОпции + 43 true true true - - КоличествоСуммарное - - КоличествоСуммарноеExtendedTooltip - 37 + ДекорацияОтступЗависимыеОпцииРасширеннаяПодсказка + 45 Label true true @@ -277,35 +229,23 @@ - КоличествоСуммарноеКонтекстноеМеню - 12 + ДекорацияОтступЗависимыеОпцииКонтекстноеМеню + 44 true - InputField - true - Enter - true - Left - true - Left - - true - true - true - true - true - - Style.BorderColor - - Normal + Label + true + true + + Left - РазмерФайловВРабочемКаталоге - 9 + ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов + 24 <key>ru</key> - <value>Общий объем (Мб)</value> + <value>Подтверждать при удалении из рабочего каталога</value> true true @@ -313,11 +253,16 @@ true - РазмерФайловВРабочемКаталоге + ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов + Right + + OnChange + ПодтверждатьПриУдаленииИзЛокальногоКэшаФайловПриИзменении + - РазмерФайловВРабочемКаталогеExtendedTooltip - 38 + ПодтверждатьПриУдаленииИзЛокальногоКэшаФайловExtendedTooltip + 34 Label true true @@ -326,27 +271,283 @@ - РазмерФайловВРабочемКаталогеКонтекстноеМеню - 10 + ПодтверждатьПриУдаленииИзЛокальногоКэшаФайловКонтекстноеМеню + 25 true - InputField - true + CheckBoxField Enter true Left true - Left - + + + true + true + + true + + + <key>ru</key> + <value>Подтверждать при удалении из локального кэша файлов</value> + + + ГруппаПодтверждатьПриУдаленииИзЛокальногоКэшаФайловРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + ГруппаТекущееСостояние + 48 + + ГруппаФайлов + 46 + + КоличествоСуммарное + 11 + + <key>ru</key> + <value>Файлов</value> + + true + true + + true + + + КоличествоСуммарное + + + КоличествоСуммарноеExtendedTooltip + 37 + Label + true + true + + Left + + + + КоличествоСуммарноеКонтекстноеМеню + 12 + true + + InputField + true + Enter + true + Left + true + Left + + true + true + true + true + true + + Style.BorderColor + + Normal + + + + СписокФайлов + 14 + true + true + + true + + false + + СписокФайловExtendedTooltip + 39 + Label + true + true + + Left + + + UsualButton + Form.Command.СписокФайлов + Normal + Auto true true - true - true - true + UserCmds + + Style.ButtonTextColor + + + Style.ButtonBackColor + Style.BorderColor - Normal + Auto + + true + true + + true + + + <key>ru</key> + <value>Файлы</value> + + + ГруппаФайловРасширеннаяПодсказка + 47 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + СейчасВЛокальномКэшеФайлов + 18 + + РазмерФайловВРабочемКаталоге + 9 + + <key>ru</key> + <value>Общий объем (Мб)</value> + + true + true + + true + + + РазмерФайловВРабочемКаталоге + + + РазмерФайловВРабочемКаталогеExtendedTooltip + 38 + Label + true + true + + Left + + + + РазмерФайловВРабочемКаталогеКонтекстноеМеню + 10 + true + + InputField + true + Enter + true + Left + true + Left + + true + true + true + true + true + + Style.BorderColor + + Normal + + + + ОчиститьРабочийКаталог + 13 + true + true + + true + + false + + ОчиститьРабочийКаталогExtendedTooltip + 40 + Label + true + true + + Left + + + UsualButton + Form.Command.ОчиститьЛокальныйКэшФайлов + Normal + Auto + true + true + UserCmds + + Style.ButtonTextColor + + + Style.ButtonBackColor + + + Style.BorderColor + + Auto + + true + true + + true + + + <key>ru</key> + <value>Общий объем</value> + + + СейчасВЛокальномКэшеФайловExtendedTooltip + 36 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto true @@ -359,8 +560,8 @@ Текущее состояние: - СейчасВЛокальномКэшеФайловExtendedTooltip - 36 + ГруппаТекущееСостояниеРасширеннаяПодсказка + 49 Label true true @@ -370,6 +571,7 @@ UsualGroup + AlwaysHorizontal Auto NormalSeparation true @@ -379,80 +581,6 @@ Auto - - СписокФайлов - 14 - true - true - - true - - false - - СписокФайловExtendedTooltip - 39 - Label - true - true - - Left - - - UsualButton - Form.Command.СписокФайлов - Normal - Auto - true - true - UserCmds - - Style.ButtonTextColor - - - Style.ButtonBackColor - - - Style.BorderColor - - Auto - - - ОчиститьРабочийКаталог - 13 - true - true - - true - - false - - ОчиститьРабочийКаталогExtendedTooltip - 40 - Label - true - true - - Left - - - UsualButton - Form.Command.ОчиститьЛокальныйКэшФайлов - Normal - Auto - true - true - UserCmds - - Style.ButtonTextColor - - - Style.ButtonBackColor - - - Style.BorderColor - - Auto - Bottom true @@ -619,12 +747,12 @@ ОчиститьЛокальныйКэшФайлов <key>ru</key> - <value>Очистить основной рабочий каталог</value> + <value>Очистить рабочий каталог</value> 3 ru - Очистить основной рабочий каталог + Очистить рабочий каталог true diff --git a/SSL/src/CommonForms/НастройкаОсновногоРабочегоКаталога/Help/ru.html b/SSL/src/CommonForms/НастройкаРабочегоКаталога/Help/ru.html similarity index 72% rename from SSL/src/CommonForms/НастройкаОсновногоРабочегоКаталога/Help/ru.html rename to SSL/src/CommonForms/НастройкаРабочегоКаталога/Help/ru.html index 87c0499fb..87bd9380d 100644 --- a/SSL/src/CommonForms/НастройкаОсновногоРабочегоКаталога/Help/ru.html +++ b/SSL/src/CommonForms/НастройкаРабочегоКаталога/Help/ru.html @@ -1,14 +1,14 @@ -

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

            -

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

            -

            Открывается по ссылке Настройка основного рабочего каталога в персональных настройках программы (вкладка Работа с файлами).

            -

            Расположение основного рабочего каталога

            +

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

            +

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

            +

            Открывается по ссылке Настройка рабочего каталога в персональных настройках программы (вкладка Работа с файлами).

            +

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

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

            Максимальный размер

            • В поле Максимальный размер (Мб) установите предел суммарного объема всех файлов в основном рабочем каталоге (по умолчанию 100 Мб). Если установлен равным 0, то объем файлов не ограничен. Размер указывается в мегабайтах (Мб).

            Запрос программы на удаление файлов

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

            Удаление файлов после редактирования

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

            Удаление файлов после редактирования

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

            Текущее состояние

            • Программа показывает Текущее состояние основного рабочего каталога - количество Файлов, содержащихся в нем и их Общий объем (Мб).

            Просмотр списка файлов в основном рабочем каталоге

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

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

            -
            • Нажмите Очистить основной рабочий каталог, для того чтобы удалить все файлы в основном рабочем каталоге, кроме занятых Вами для редактирования. Для подтверждения очистки нажмите Да.
            \ 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 similarity index 90% rename from SSL/src/CommonForms/НастройкаОсновногоРабочегоКаталога/Module.bsl rename to SSL/src/CommonForms/НастройкаРабочегоКаталога/Module.bsl index 01bb749b8..d76d98253 100644 --- a/SSL/src/CommonForms/НастройкаОсновногоРабочегоКаталога/Module.bsl +++ b/SSL/src/CommonForms/НастройкаРабочегоКаталога/Module.bsl @@ -1,4 +1,3 @@ - #Область ОбработчикиСобытийФормы &НаСервере @@ -15,6 +14,7 @@ ЗаполнитьПараметрыНаСервере(); + КонецПроцедуры &НаКлиенте @@ -48,7 +48,7 @@ // Выбираем другой путь к рабочему каталогу. ИмяКаталога = РабочийКаталогПользователя; - Заголовок = НСтр("ru = 'Выберите основной рабочий каталог'"); + Заголовок = НСтр("ru = 'Выберите рабочий каталог'"); Если Не РаботаСФайламиСлужебныйКлиент.ВыбратьПутьКРабочемуКаталогу(ИмяКаталога, Заголовок, Ложь) Тогда Возврат; КонецЕсли; @@ -74,6 +74,13 @@ &НаКлиенте Процедура УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактированияПриИзменении(Элемент) + Если УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования Тогда + Элементы.ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов.Доступность = Истина; + Иначе + Элементы.ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов.Доступность = Ложь; + ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов = Ложь; + КонецЕсли; + СохранитьПараметры(); КонецПроцедуры @@ -102,7 +109,7 @@ Процедура ОчиститьЛокальныйКэшФайлов(Команда) ТекстВопроса = - НСтр("ru = 'Из основного рабочего каталога будут удалены все файлы, + НСтр("ru = 'Из рабочего каталога будут удалены все файлы, |кроме занятых для редактирования. | |Продолжить?'"); @@ -173,7 +180,7 @@ ОбновитьТекущееСостояниеРабочегоКаталога(); - ПоказатьОповещениеПользователя(НСтр("ru = 'Основной рабочий каталог'"),, НСтр("ru = 'Очистка основного рабочего каталога успешно завершена.'")); + ПоказатьОповещениеПользователя(НСтр("ru = 'Рабочий каталог'"),, НСтр("ru = 'Очистка рабочего каталога успешно завершена.'")); КонецПроцедуры @@ -210,7 +217,14 @@ "ЛокальныйКэшФайлов", "МаксимальныйРазмерЛокальногоКэшаФайлов", МаксРазмер); КонецЕсли; МаксимальныйРазмерЛокальногоКэшаФайлов = МаксРазмер / 1048576; - + + Если УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования Тогда + Элементы.ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов.Доступность = Истина; + Иначе + Элементы.ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов.Доступность = Ложь; + ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов = Ложь; + КонецЕсли; + КонецПроцедуры &НаКлиенте diff --git a/SSL/src/CommonForms/НастройкаОсновногоРабочегоКаталога/НастройкаОсновногоРабочегоКаталога.mdo b/SSL/src/CommonForms/НастройкаРабочегоКаталога/НастройкаРабочегоКаталога.mdo similarity index 73% rename from SSL/src/CommonForms/НастройкаОсновногоРабочегоКаталога/НастройкаОсновногоРабочегоКаталога.mdo rename to SSL/src/CommonForms/НастройкаРабочегоКаталога/НастройкаРабочегоКаталога.mdo index f4ff29c6c..fd61412d8 100644 --- a/SSL/src/CommonForms/НастройкаОсновногоРабочегоКаталога/НастройкаОсновногоРабочегоКаталога.mdo +++ b/SSL/src/CommonForms/НастройкаРабочегоКаталога/НастройкаРабочегоКаталога.mdo @@ -1,9 +1,9 @@ - НастройкаОсновногоРабочегоКаталога + НастройкаРабочегоКаталога ru - Настройка основного рабочего каталога + Настройка рабочего каталога true diff --git a/SSL/src/CommonForms/НастройкиВходаПользователей/Form.form b/SSL/src/CommonForms/НастройкиВходаПользователей/Form.form index 012ab6dd4..ea7dd5a1f 100644 --- a/SSL/src/CommonForms/НастройкиВходаПользователей/Form.form +++ b/SSL/src/CommonForms/НастройкиВходаПользователей/Form.form @@ -194,6 +194,7 @@ UsualGroup + HorizontalIfPossible Auto true Auto @@ -380,6 +381,7 @@ UsualGroup + HorizontalIfPossible Auto true Auto @@ -531,6 +533,7 @@ UsualGroup + HorizontalIfPossible Auto true Auto @@ -677,6 +680,7 @@ UsualGroup + HorizontalIfPossible Auto true Auto @@ -864,6 +868,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true diff --git a/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Form.form b/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Form.form index 43062ff48..6a0931914 100644 --- a/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Form.form +++ b/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Form.form @@ -185,6 +185,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -933,6 +934,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1906,6 +1908,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true diff --git a/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Module.bsl b/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Module.bsl index ed6b4ab6a..c00f68f8d 100644 --- a/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Module.bsl +++ b/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Module.bsl @@ -52,11 +52,21 @@ // Страница Программы Элементы.Программы.ИзменятьСоставСтрок = Ложь; - Элементы.ПрограммыДобавить.Видимость = Ложь; - Элементы.ПрограммыИзменить.Видимость = Ложь; + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "ПрограммыДобавить", "Видимость", Ложь); + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "ПрограммыИзменить", "Видимость", Ложь); + Элементы.ПрограммыУстановитьПометкуУдаления.Видимость = Ложь; - Элементы.ПрограммыКонтекстноеМенюДобавить.Видимость = Ложь; - Элементы.ПрограммыКонтекстноеМенюИзменить.Видимость = Ложь; + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "ПрограммыКонтекстноеМенюДобавить", "Видимость", Ложь); + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "ПрограммыКонтекстноеМенюИзменить", "Видимость", Ложь); + Элементы.ПрограммыКонтекстноеМенюПрограммыУстановитьПометкуУдаления.Видимость = Ложь; Элементы.ПроверятьПодписиНаСервере.Видимость = Ложь; Элементы.ПодписыватьНаСервере.Видимость = Ложь; @@ -65,7 +75,9 @@ КонецЕсли; Если Не ЭлектроннаяПодпись.ОбщиеНастройки().ЗаявлениеНаВыпускСертификатаДоступно Тогда - Элементы.СертификатыСоздать.Видимость = Истина; + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "СертификатыСоздать", "Видимость", Истина); + Элементы.СертификатыДобавить.Видимость = Ложь; Элементы.СертификатыПоказатьЗаявления.Видимость = Ложь; Элементы.СертификатыСостояниеЗаявления.Видимость = Ложь; @@ -80,7 +92,8 @@ Элементы.Программы.ИзменятьСоставСтрок = Ложь; Элементы.ПрограммыУстановитьПометкуУдаления.Доступность = Ложь; Элементы.ПрограммыКонтекстноеМенюПрограммыУстановитьПометкуУдаления.Доступность = Ложь; - Элементы.ПрограммыИзменить.ТолькоВоВсехДействиях = Ложь; + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "ПрограммыИзменить", "ТолькоВоВсехДействиях", Ложь); КонецЕсли; Если ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда @@ -276,7 +289,9 @@ Отказ = Истина; - Если Элементы.ПрограммыИзменить.Видимость Тогда + Если Элементы.Найти("ПрограммыИзменить") <> Неопределено + И Элементы.ПрограммыИзменить.Видимость Тогда + ПоказатьЗначение(, Элементы.Программы.ТекущиеДанные.Ссылка); КонецЕсли; @@ -287,7 +302,9 @@ Отказ = Истина; - Если Элементы.ПрограммыИзменить.Видимость Тогда + Если Элементы.Найти("ПрограммыИзменить") <> Неопределено + И Элементы.ПрограммыИзменить.Видимость Тогда + ПрограммыУстановитьПометкуУдаления(Неопределено); КонецЕсли; @@ -494,12 +511,20 @@ Если Константы.ИспользоватьШифрование.Получить() Или ЭлектроннаяПодпись.ОбщиеНастройки().ЗаявлениеНаВыпускСертификатаДоступно Тогда - Элементы.СертификатыСоздать.Заголовок = НСтр("ru = 'Добавить...'"); - Элементы.СертификатыКонтекстноеМенюСоздать.Заголовок = НСтр("ru = 'Добавить...'"); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "СертификатыСоздать", "Заголовок", НСтр("ru = 'Добавить...'")); + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "СертификатыКонтекстноеМенюСоздать", "Заголовок", НСтр("ru = 'Добавить...'")); + Элементы.РасширениеДляЗашифрованныхФайлов.Видимость = Истина; Иначе - Элементы.СертификатыСоздать.Заголовок = НСтр("ru = 'Добавить'"); - Элементы.СертификатыКонтекстноеМенюСоздать.Заголовок = НСтр("ru = 'Добавить'"); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "СертификатыСоздать", "Заголовок", НСтр("ru = 'Добавить'")); + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "СертификатыКонтекстноеМенюСоздать", "Заголовок", НСтр("ru = 'Добавить'")); + Элементы.РасширениеДляЗашифрованныхФайлов.Видимость = Ложь; КонецЕсли; diff --git a/SSL/src/CommonForms/ОписаниеИзмененийПрограммы/Form.form b/SSL/src/CommonForms/ОписаниеИзмененийПрограммы/Form.form index 2a6c30d4d..2dce931c5 100644 --- a/SSL/src/CommonForms/ОписаниеИзмененийПрограммы/Form.form +++ b/SSL/src/CommonForms/ОписаниеИзмененийПрограммы/Form.form @@ -168,6 +168,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -727,6 +728,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/CommonForms/ОтправкаSMS/Form.form b/SSL/src/CommonForms/ОтправкаSMS/Form.form index bf75b9a50..d0162f251 100644 --- a/SSL/src/CommonForms/ОтправкаSMS/Form.form +++ b/SSL/src/CommonForms/ОтправкаSMS/Form.form @@ -78,6 +78,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -230,6 +231,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -346,6 +348,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -506,6 +509,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -534,6 +538,7 @@ Page + HorizontalIfPossible auto false @@ -636,6 +641,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -737,6 +743,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/CommonForms/ОтправкаСообщения/Module.bsl b/SSL/src/CommonForms/ОтправкаСообщения/Module.bsl index 48c5ad11e..d9276eb8d 100644 --- a/SSL/src/CommonForms/ОтправкаСообщения/Module.bsl +++ b/SSL/src/CommonForms/ОтправкаСообщения/Module.bsl @@ -651,7 +651,7 @@ ПараметрыПисьма.Вставить("Копии", Копии); КонецЕсли; Если СкрытыеКопии.Количество() > 0 Тогда - ПараметрыПисьма.Вставить("СкрытыеКопии", СкрытыеКопии); + ПараметрыПисьма.Вставить("СлепыеКопии", СкрытыеКопии); КонецЕсли; СписокПолучателей = ОбщегоНазначенияКлиентСервер.АдресаЭлектроннойПочтыИзСтроки(АдресОтвета); diff --git a/SSL/src/CommonForms/ПанельОтчетов/Form.form b/SSL/src/CommonForms/ПанельОтчетов/Form.form index 683cf8ff0..5a4435a67 100644 --- a/SSL/src/CommonForms/ПанельОтчетов/Form.form +++ b/SSL/src/CommonForms/ПанельОтчетов/Form.form @@ -403,6 +403,7 @@ UsualGroup + HorizontalIfPossible Right Auto true @@ -432,6 +433,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -543,6 +545,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -612,6 +615,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -868,6 +872,7 @@ UsualGroup + HorizontalIfPossible Auto true Equal @@ -993,6 +998,7 @@ UsualGroup + HorizontalIfPossible Auto true Equal @@ -1159,6 +1165,7 @@ UsualGroup + HorizontalIfPossible Auto WeakSeparation true @@ -1461,6 +1468,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/CommonForms/ПанельОтчетов/Module.bsl b/SSL/src/CommonForms/ПанельОтчетов/Module.bsl index 0b6b7b57d..82e636204 100644 --- a/SSL/src/CommonForms/ПанельОтчетов/Module.bsl +++ b/SSL/src/CommonForms/ПанельОтчетов/Module.bsl @@ -924,7 +924,7 @@ ШаблонГруппыВарианта.Вид = ВидГруппыФормы.ОбычнаяГруппа; ШаблонГруппыВарианта.РастягиватьПоГоризонтали = Истина; ШаблонГруппыВарианта.Отображение = ОтображениеОбычнойГруппы.Нет; - ШаблонГруппыВарианта.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + ШаблонГруппыВарианта.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; ШаблонГруппыВарианта.ОтображатьЗаголовок = Ложь; ШаблонКартинкиБыстрогоДоступа = Новый Структура( @@ -1512,7 +1512,7 @@ ЗаголовокРаздела.РастягиватьПоГоризонтали = Истина; ЗаголовокРаздела.УстановитьДействие("Нажатие", "Подключаемый_ЗаголовокРазделаНажатие"); - ГруппаРаздела.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + ГруппаРаздела.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; ДекорацияОтступаИмя = ПараметрыЗаполнения.Префикс + "ДекорацияОтступа"; ДекорацияОтступа = Элементы.Вставить(ДекорацияОтступаИмя, Тип("ДекорацияФормы"), ГруппаРаздела); @@ -1970,7 +1970,7 @@ // Группа. ГруппаОтступа = Элементы.Вставить(ГруппаПодсистемыИмя + "_ГруппаОтступа", Тип("ГруппаФормы"), ВГруппу); ГруппаОтступа.Вид = ВидГруппыФормы.ОбычнаяГруппа; - ГруппаОтступа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + ГруппаОтступа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; ГруппаОтступа.Отображение = ОтображениеОбычнойГруппы.Нет; ГруппаОтступа.ОтображатьЗаголовок = Ложь; ГруппаОтступа.РастягиватьПоГоризонтали = Истина; @@ -2055,7 +2055,7 @@ // Отступ. ГруппаОтступа = Элементы.Вставить(ГруппаОтступаИмя, Тип("ГруппаФормы"), ВГруппу); ГруппаОтступа.Вид = ВидГруппыФормы.ОбычнаяГруппа; - ГруппаОтступа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + ГруппаОтступа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; ГруппаОтступа.Отображение = ОтображениеОбычнойГруппы.Нет; ГруппаОтступа.ОтображатьЗаголовок = Ложь; ГруппаОтступа.РастягиватьПоГоризонтали = Истина; diff --git a/SSL/src/CommonForms/ПараметрыАдминистрированияПрограммы/Form.form b/SSL/src/CommonForms/ПараметрыАдминистрированияПрограммы/Form.form index 5e991b4df..8aededc1a 100644 --- a/SSL/src/CommonForms/ПараметрыАдминистрированияПрограммы/Form.form +++ b/SSL/src/CommonForms/ПараметрыАдминистрированияПрограммы/Form.form @@ -335,6 +335,7 @@ UsualGroup + HorizontalIfPossible Auto WeakSeparation true @@ -736,6 +737,7 @@ Page + HorizontalIfPossible auto false @@ -858,6 +860,7 @@ Page + HorizontalIfPossible auto false diff --git a/SSL/src/CommonForms/ПараметрыПроксиСервера/Form.form b/SSL/src/CommonForms/ПараметрыПроксиСервера/Form.form index 0d3d8704d..3c45221a3 100644 --- a/SSL/src/CommonForms/ПараметрыПроксиСервера/Form.form +++ b/SSL/src/CommonForms/ПараметрыПроксиСервера/Form.form @@ -193,6 +193,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -477,6 +478,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true diff --git a/SSL/src/CommonForms/ПараметрыПроксиСервера/Help/ru.html b/SSL/src/CommonForms/ПараметрыПроксиСервера/Help/ru.html index 8e0102ced..8cdb79027 100644 --- a/SSL/src/CommonForms/ПараметрыПроксиСервера/Help/ru.html +++ b/SSL/src/CommonForms/ПараметрыПроксиСервера/Help/ru.html @@ -14,8 +14,11 @@
          • Использовать системные настройки прокси-сервера - настройки заполняются автоматически значениями из настроек прокси-сервера операционной системы. В этом случае заполненные настройки недоступны для редактирования.
          • Использовать другие настройки прокси-сервера - настройки задаются вручную:
            • Напишите Адрес сервера и Порт сервера (одинаковый параметр для сервера 1С:Предприятия и рабочих мест). -
            • С помощью переключателя выберите способ аутентификации: -
              • Аутентификация по имени пользователя и паролю - в этом случае для каждого рабочего места и сервера необходимо указать Пользователя прокси-сервера и его Пароль (в общем случае могут быть различными, зависит от сетевой политики в организации). -
              • Аутентификация операционной системы - в этом случае для работы с прокси-сервером будет использована учетная запись пользователя операционной системы.
            • Для каждого рабочего места и сервера укажите Установка флажка Не использовать прокси для локальных адресов позволит снизить нагрузку на прокси-сервер при работе в локальной сети организации.
        • Для подтверждения параметров прокси-сервера нажмите ОК.

        Дополнительные параметры

        -

        См. также:

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

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

    См. также:

    \ No newline at end of file diff --git a/SSL/src/CommonForms/ПечатьДокументов/Form.form b/SSL/src/CommonForms/ПечатьДокументов/Form.form index 85da20bdf..872cbb2c4 100644 --- a/SSL/src/CommonForms/ПечатьДокументов/Form.form +++ b/SSL/src/CommonForms/ПечатьДокументов/Form.form @@ -685,6 +685,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -791,6 +792,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1607,6 +1609,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1686,6 +1689,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1963,6 +1967,24 @@ true + + ОфисныеДокументы + + <key>ru</key> + <value>Офисные документы</value> + + 11 + + String + + + + true + + + true + + ПечатнаяФормаОбразец diff --git a/SSL/src/CommonForms/ПечатьДокументов/Module.bsl b/SSL/src/CommonForms/ПечатьДокументов/Module.bsl index 15fef2a19..354cf0862 100644 --- a/SSL/src/CommonForms/ПечатьДокументов/Module.bsl +++ b/SSL/src/CommonForms/ПечатьДокументов/Module.bsl @@ -85,13 +85,7 @@ СохранитьПечатнуюФормуВФайл(); Возврат; КонецЕсли; - -#Если ВебКлиент Тогда - Интервал = 1; -#Иначе - Интервал = 0.1; -#КонецЕсли - ПодключитьОбработчикОжидания("УстановитьТекущуюСтраницу", Интервал, Истина); + ПодключитьОбработчикОжидания("УстановитьТекущуюСтраницу", 0.1, Истина); КонецПроцедуры &НаКлиенте @@ -497,6 +491,7 @@ // Создание страниц с табличными документами на форме. НомерПечатнойФормы = 0; + ПечатьОфисныхДокументов = Ложь; ДобавленныеНастройкиПечатныхФорм = Новый Соответствие; Для Каждого РеквизитФормы Из НовыеРеквизитыФормы Цикл ОписаниеПечатнойФормы = КоллекцияПечатныхФорм[НомерПечатнойФормы]; @@ -511,6 +506,9 @@ НоваяНастройкаПечатнойФормы.Название = ОписаниеПечатнойФормы.СинонимМакета; НоваяНастройкаПечатнойФормы.ПутьКМакету = ОписаниеПечатнойФормы.ПолныйПутьКМакету; НоваяНастройкаПечатнойФормы.ИмяФайлаПечатнойФормы = ОбщегоНазначения.ЗначениеВСтрокуXML(ОписаниеПечатнойФормы.ИмяФайлаПечатнойФормы); + НоваяНастройкаПечатнойФормы.ОфисныеДокументы = ?(ПустаяСтрока(ОписаниеПечатнойФормы.ОфисныеДокументы), "", ОбщегоНазначения.ЗначениеВСтрокуXML(ОписаниеПечатнойФормы.ОфисныеДокументы)); + + ПечатьОфисныхДокументов = ПечатьОфисныхДокументов ИЛИ НЕ ПустаяСтрока(НоваяНастройкаПечатнойФормы.ОфисныеДокументы); РанееДобавленнаяНастройкаПечатнойФормы = ДобавленныеНастройкиПечатныхФорм[ОписаниеПечатнойФормы.ИмяМакета]; Если РанееДобавленнаяНастройкаПечатнойФормы = Неопределено Тогда @@ -549,6 +547,10 @@ НомерПечатнойФормы = НомерПечатнойФормы + 1; КонецЦикла; + Если ПечатьОфисныхДокументов И НЕ ЗначениеЗаполнено(НастройкиФорматаСохранения) Тогда + НастройкиФорматаСохранения = Новый Структура("ТипФайлаТабличногоДокумента,Представление,Расширение,Фильтр") + КонецЕсли; + КонецПроцедуры &НаСервере @@ -793,6 +795,32 @@ ОбработанныеПечатныеФормы = Новый Массив; Для Каждого НастройкаПечатнойФормы Из НастройкиПечатныхФорм Цикл + Если НЕ ПустаяСтрока(НастройкаПечатнойФормы.ОфисныеДокументы) Тогда + + ФайлыОфисныхДокументов = ОбщегоНазначения.ЗначениеИзСтрокиXML(НастройкаПечатнойФормы.ОфисныеДокументы); + + Для Каждого ФайлОфисногоДокумента Из ФайлыОфисныхДокументов Цикл + + Если ЗаписьZipФайла <> Неопределено Тогда + ПолноеИмяФайла = УникальноеИмяФайла(ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяВременнойПапки) + + ФайлОфисногоДокумента.Значение); + ДвоичныеДанные = ПолучитьИзВременногоХранилища(ФайлОфисногоДокумента.Ключ); + ДвоичныеДанные.Записать(ПолноеИмяФайла); + ЗаписьZipФайла.Добавить(ПолноеИмяФайла); + Иначе + ОписаниеФайла = Новый Структура; + ОписаниеФайла.Вставить("Представление", ФайлОфисногоДокумента.Значение); + ОписаниеФайла.Вставить("АдресВоВременномХранилище", ФайлОфисногоДокумента.Ключ); + ОписаниеФайла.Вставить("ЭтоОфисныйДокумент", Истина); + Результат.Добавить(ОписаниеФайла); + КонецЕсли; + + КонецЦикла; + + Продолжить; + + КонецЕсли; + Если Не НастройкаПечатнойФормы.Печатать Тогда Продолжить; КонецЕсли; @@ -1010,15 +1038,35 @@ НастройкиФорматаСохранения.ТипФайлаТабличногоДокумента)); ФайлыВоВременномХранилище = ПоместитьТабличныеДокументыВоВременноеХранилище(НастройкиСохранения); + ПолучаемыеФайлы = Новый Массив; + Для Каждого ФайлДляЗаписи Из ФайлыВоВременномХранилище Цикл - #Если ВебКлиент Тогда - ПолучитьФайл(ФайлДляЗаписи.АдресВоВременномХранилище, ФайлДляЗаписи.Представление); - #Иначе - ИмяВременногоФайла = ПолучитьИмяВременногоФайла(НастройкиФорматаСохранения.Расширение); - ДвоичныеДанные = ПолучитьИзВременногоХранилища(ФайлДляЗаписи.АдресВоВременномХранилище); - ДвоичныеДанные.Записать(ИмяВременногоФайла); - ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра(ИмяВременногоФайла); - #КонецЕсли + ИмяФайла = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ФайлДляЗаписи.Представление, ""); + Расширение = НастройкиФорматаСохранения.Расширение; + Если ФайлДляЗаписи.Свойство("ЭтоОфисныйДокумент") Тогда + Расширение = "docx"; + КонецЕсли; + ПолучаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяФайла + "." + Расширение, ФайлДляЗаписи.АдресВоВременномХранилище)); + КонецЦикла; + + ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога); + ДиалогВыбора.Заголовок = НСтр("ru ='Выбор папки для сохранения сформированного документа'"); + Оповещение = Новый ОписаниеОповещения("СохранитьПечатнуюФормуВФайлПослеПолученияФайлов", ЭтотОбъект); + НачатьПолучениеФайлов(Оповещение, ПолучаемыеФайлы, ДиалогВыбора, ЛОЖЬ); + +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьПечатнуюФормуВФайлПослеПолученияФайлов(ПолученныеФайлы, ДополнительныеПараметры) Экспорт + + Если ПолученныеФайлы = Неопределено Тогда + Возврат; + КонецЕсли; + + Оповещение = Новый ОписаниеОповещения(); + + Для Каждого Файл Из ПолученныеФайлы Цикл + ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра(Файл.Имя); КонецЦикла; КонецПроцедуры diff --git a/SSL/src/CommonForms/ПоддерживаемыеКлиентскиеПриложения/Form.form b/SSL/src/CommonForms/ПоддерживаемыеКлиентскиеПриложения/Form.form new file mode 100644 index 000000000..c6c8d4d44 --- /dev/null +++ b/SSL/src/CommonForms/ПоддерживаемыеКлиентскиеПриложения/Form.form @@ -0,0 +1,1477 @@ + + + + Пояснение + 155 + + <key>ru</key> + <value>Внешняя компонента платформозависима и сможет работать только в определенных операционных системах или браузерах:</value> + + true + true + + true + + + ПояснениеРасширеннаяПодсказка + 157 + Label + true + true + + Left + + + + ПояснениеКонтекстноеМеню + 156 + true + + Label + true + true + true + + Left + + + + Подсказка + 3 + + ГруппаWindows + 124 + + Windows + 5 + + Windows1СПредприятие + 9 + + <key>ru</key> + <value>1С:Предприятие</value> + + true + true + + true + + + Windows1СПредприятиеРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + + Windows1СПредприятиеКонтекстноеМеню + 10 + true + + Label + 10 + true + true + + Left + + + + WindowsChrome + 20 + + <key>ru</key> + <value>Chrome</value> + + true + true + + true + + + WindowsChromeРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + WindowsChromeКонтекстноеМеню + 21 + true + + Label + 10 + true + true + + Left + + + + WindowsFirefox + 28 + + <key>ru</key> + <value>Firefox</value> + + true + true + + true + + + WindowsFirefoxРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + + WindowsFirefoxКонтекстноеМеню + 29 + true + + Label + 10 + true + true + + Left + + + + WindowsInternetExplorer + 36 + + <key>ru</key> + <value>Internet Explorer</value> + + true + true + + true + + ShowBottom + + WindowsInternetExplorerРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + + WindowsInternetExplorerКонтекстноеМеню + 37 + true + + Label + 10 + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Windows</value> + + true + + WindowsРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + auto + Auto + Auto + + + + Windows_x86 + 102 + + Windows_x86_1СПредприятие + 90 + true + true + + true + + + Windows_x86_1СПредприятиеРасширеннаяПодсказка + 92 + Label + true + true + + Left + + + + Windows_x86_1СПредприятиеКонтекстноеМеню + 91 + true + + true + true + + + CommonPicture.ВнешняяКомпонентаНеДоступна + + + + + Windows_x86_Chrome + 106 + + <key>ru</key> + <value>Windows x86 chrome</value> + + true + true + + true + + + Windows_x86_ChromeРасширеннаяПодсказка + 108 + Label + true + true + + Left + + + + Windows_x86_ChromeКонтекстноеМеню + 107 + true + + true + true + + + CommonPicture.ВнешняяКомпонентаНеДоступна + + + + + Windows_x86_Firefox + 112 + + <key>ru</key> + <value>Windows x86 firefox</value> + + true + true + + true + + + Windows_x86_FirefoxРасширеннаяПодсказка + 114 + Label + true + true + + Left + + + + Windows_x86_FirefoxКонтекстноеМеню + 113 + true + + true + true + + + CommonPicture.ВнешняяКомпонентаНеДоступна + + + + + Windows_x86_MSIE + 118 + + <key>ru</key> + <value>Windows x86 MSIE</value> + + true + true + + true + + + Windows_x86_MSIEРасширеннаяПодсказка + 120 + Label + true + true + + Left + + + + Windows_x86_MSIEКонтекстноеМеню + 119 + true + + true + true + + + CommonPicture.ВнешняяКомпонентаНеДоступна + + + + true + true + + true + + + <key>ru</key> + <value>x86</value> + + + Windows_x86РасширеннаяПодсказка + 103 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + auto + Auto + Auto + + + + Windows_x86_64 + 104 + + Windows_x86_64_1СПредприятие + 93 + true + true + + true + + + Windows_x86_64_1СПредприятиеРасширеннаяПодсказка + 95 + Label + true + true + + Left + + + + Windows_x86_64_1СПредприятиеКонтекстноеМеню + 94 + true + + true + true + + + CommonPicture.ВнешняяКомпонентаНеДоступна + + + + + Windows_x86_64_Chrome + 109 + true + true + + true + + + Windows_x86_64_ChromeРасширеннаяПодсказка + 111 + Label + true + true + + Left + + + + Windows_x86_64_ChromeКонтекстноеМеню + 110 + true + + true + true + + + CommonPicture.ВнешняяКомпонентаНеДоступна + + + + + Windows_x86_64_Firefox + 115 + + <key>ru</key> + <value>Windows x86 64 firefox</value> + + true + true + + true + + + Windows_x86_64_FirefoxРасширеннаяПодсказка + 117 + Label + true + true + + Left + + + + Windows_x86_64_FirefoxКонтекстноеМеню + 116 + true + + true + true + + + CommonPicture.ВнешняяКомпонентаНеДоступна + + + + + Windows_x86_64_MSIE + 121 + + <key>ru</key> + <value>Windows x86 64 MSIE</value> + + true + true + + true + + + Windows_x86_64_MSIEРасширеннаяПодсказка + 123 + Label + true + true + + Left + + + + Windows_x86_64_MSIEКонтекстноеМеню + 122 + true + + true + true + + + CommonPicture.ВнешняяКомпонентаНеДоступна + + + + true + true + + true + + + <key>ru</key> + <value>x86-64</value> + + + Windows_x86_64РасширеннаяПодсказка + 105 + Label + true + true + + Left + + + UsualGroup + + Vertical + Center + Auto + true + true + auto + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа windows</value> + + true + + ГруппаWindowsРасширеннаяПодсказка + 125 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + StrongSeparation + true + true + Auto + Auto + + + + ГруппаLinux + 45 + + Linux + 131 + + Linux1СПредприятие + 49 + + <key>ru</key> + <value>1С:Предприятие</value> + + true + true + + true + + + Linux1СПредприятиеРасширеннаяПодсказка + 51 + Label + true + true + + Left + + + + Linux1СПредприятиеКонтекстноеМеню + 50 + true + + Label + 10 + true + true + + Left + + + + LinuxChrome + 60 + + <key>ru</key> + <value>Chrome</value> + + true + true + + true + + + LinuxChromeРасширеннаяПодсказка + 62 + Label + true + true + + Left + + + + LinuxChromeКонтекстноеМеню + 61 + true + + Label + 10 + true + true + + Left + + + + LinuxFirefox + 71 + + <key>ru</key> + <value>Firefox</value> + + true + true + + true + + + LinuxFirefoxРасширеннаяПодсказка + 73 + Label + true + true + + Left + + + + LinuxFirefoxКонтекстноеМеню + 72 + true + + Label + 10 + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Linux</value> + + + LinuxРасширеннаяПодсказка + 132 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + auto + Auto + Auto + + + + Linux_x86 + 126 + + Linux_x86_1СПредприятие + 128 + true + true + + true + + + Linux_x86_1СПредприятиеРасширеннаяПодсказка + 130 + Label + true + true + + Left + + + + Linux_x86_1СПредприятиеКонтекстноеМеню + 129 + true + + true + true + + + CommonPicture.ВнешняяКомпонентаНеДоступна + + + + + Linux_x86_Chrome + 138 + + <key>ru</key> + <value>Linux x86 chrome</value> + + true + true + + true + + + Linux_x86_ChromeРасширеннаяПодсказка + 140 + Label + true + true + + Left + + + + Linux_x86_ChromeКонтекстноеМеню + 139 + true + + true + true + + + CommonPicture.ВнешняяКомпонентаНеДоступна + + + + + Linux_x86_Firefox + 144 + + <key>ru</key> + <value>Linux x86 firefox</value> + + true + true + + true + + + Linux_x86_FirefoxРасширеннаяПодсказка + 146 + Label + true + true + + Left + + + + Linux_x86_FirefoxКонтекстноеМеню + 145 + true + + true + true + + + CommonPicture.ВнешняяКомпонентаНеДоступна + + + + true + true + + true + + + <key>ru</key> + <value>x86</value> + + + Linux_x86РасширеннаяПодсказка + 127 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + auto + Auto + Auto + + + + Linux_x86_64 + 133 + + Linux_x86_64_1СПредприятие + 135 + true + true + + true + + + Linux_x86_64_1СПредприятиеРасширеннаяПодсказка + 137 + Label + true + true + + Left + + + + Linux_x86_64_1СПредприятиеКонтекстноеМеню + 136 + true + + true + true + + + CommonPicture.ВнешняяКомпонентаНеДоступна + + + + + Linux_x86_64_Chrome + 141 + + <key>ru</key> + <value>Linux x86 64 chrome</value> + + true + true + + true + + + Linux_x86_64_ChromeРасширеннаяПодсказка + 143 + Label + true + true + + Left + + + + Linux_x86_64_ChromeКонтекстноеМеню + 142 + true + + true + true + + + CommonPicture.ВнешняяКомпонентаНеДоступна + + + + + Linux_x86_64_Firefox + 147 + + <key>ru</key> + <value>Linux x86 64 firefox</value> + + true + true + + true + + + Linux_x86_64_FirefoxРасширеннаяПодсказка + 149 + Label + true + true + + Left + + + + Linux_x86_64_FirefoxКонтекстноеМеню + 148 + true + + true + true + + + CommonPicture.ВнешняяКомпонентаНеДоступна + + + + true + true + + true + + + <key>ru</key> + <value>x86-64</value> + + + Linux_x86_64РасширеннаяПодсказка + 134 + Label + true + true + + Left + + + UsualGroup + + Vertical + Center + Auto + true + true + auto + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Linux</value> + + true + true + + ГруппаLinuxРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + StrongSeparation + true + true + Auto + Auto + + + + ГруппаMacOS + 80 + + MacOS + 153 + + MacOSSafari + 84 + + <key>ru</key> + <value>Safari</value> + + true + true + + true + + + MacOSSafariРасширеннаяПодсказка + 86 + Label + true + true + + Left + + + + MacOSSafariКонтекстноеМеню + 85 + true + + Label + true + true + + Left + + + + MacOS_x86_64_Safari + 150 + + <key>ru</key> + <value>Mac o s x86 64 safari</value> + + true + true + + true + + + MacOS_x86_64_SafariРасширеннаяПодсказка + 152 + Label + true + true + + Left + + + + MacOS_x86_64_SafariКонтекстноеМеню + 151 + true + + true + true + + + CommonPicture.ВнешняяКомпонентаНеДоступна + + + + true + true + + true + + + <key>ru</key> + <value>Mac OS</value> + + + MacOSРасширеннаяПодсказка + 154 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + auto + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>OS X (macOS)</value> + + true + true + + ГруппаMacOSРасширеннаяПодсказка + 81 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + StrongSeparation + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Подсказка</value> + + + ПодсказкаРасширеннаяПодсказка + 4 + Label + 60 + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + КакЗапуститьКлиентскоеПриложение + 158 + + <key>ru</key> + <value><link https://its.1c.ru/db/v83doc#bookmark:adm:TI000000069>Как запустить определенное клиентское приложение?</></value> + + true + true + + true + + + КакЗапуститьКлиентскоеПриложениеРасширеннаяПодсказка + 160 + Label + true + true + + Left + + + + КакЗапуститьКлиентскоеПриложениеКонтекстноеМеню + 159 + true + + true + Label + true + true + + Left + + + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + Help + LockOwner + true + true + true + Vertical + true + true + auto + true + + Windows_x86_MSIE + + <key>ru</key> + <value>Windows x86 MSIE</value> + + 1 + + Boolean + + + true + + + true + + + + Windows_x86_Firefox + + <key>ru</key> + <value>Windows x86 firefox</value> + + 2 + + Boolean + + + true + + + true + + + + Windows_x86_Chrome + + <key>ru</key> + <value>Windows x86 chrome</value> + + 3 + + Boolean + + + true + + + true + + + + Windows_x86_64_MSIE + + <key>ru</key> + <value>Windows x86 64 MSIE</value> + + 4 + + Boolean + + + true + + + true + + + + Windows_x86_64 + + <key>ru</key> + <value>Windows x86 64</value> + + 5 + + Boolean + + + true + + + true + + + + Windows_x86 + + <key>ru</key> + <value>Windows x86</value> + + 6 + + Boolean + + + true + + + true + + + + MacOS_x86_64_Safari + + <key>ru</key> + <value>Mac o s x86 64 safari</value> + + 7 + + Boolean + + + true + + + true + + + + Linux_x86_Firefox + + <key>ru</key> + <value>Linux x86 firefox</value> + + 8 + + Boolean + + + true + + + true + + + + Linux_x86_Chrome + + <key>ru</key> + <value>Linux x86 chrome</value> + + 9 + + Boolean + + + true + + + true + + + + Linux_x86_64_Firefox + + <key>ru</key> + <value>Linux x86 64 firefox</value> + + 10 + + Boolean + + + true + + + true + + + + Linux_x86_64_Chrome + + <key>ru</key> + <value>Linux x86 64 chrome</value> + + 11 + + Boolean + + + true + + + true + + + + Linux_x86_64 + + <key>ru</key> + <value>Linux x86 64</value> + + 12 + + Boolean + + + true + + + true + + + + Linux_x86 + + <key>ru</key> + <value>Linux x86</value> + + 13 + + Boolean + + + true + + + true + + + + ПоддерживаемыеКлиенты + + + + + + + diff --git a/SSL/src/CommonForms/ПоддерживаемыеКлиентскиеПриложения/Module.bsl b/SSL/src/CommonForms/ПоддерживаемыеКлиентскиеПриложения/Module.bsl new file mode 100644 index 000000000..0b33964f7 --- /dev/null +++ b/SSL/src/CommonForms/ПоддерживаемыеКлиентскиеПриложения/Module.bsl @@ -0,0 +1,36 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + Если ТипЗнч(Параметры.ПоддерживаемыеКлиенты) = Тип("Структура") Тогда + ЗаполнитьЗначенияСвойств(ЭтотОбъект, Параметры.ПоддерживаемыеКлиенты); + КонецЕсли; + + Доступна = БиблиотекаКартинок.ВнешняяКомпонентаДоступна; + НеДоступна = БиблиотекаКартинок.ВнешняяКомпонентаНеДоступна; + + Элементы.Windows_x86_1СПредприятие.Картинка = ?(Windows_x86, Доступна, НеДоступна); + Элементы.Windows_x86_Chrome.Картинка = ?(Windows_x86_Chrome, Доступна, НеДоступна); + Элементы.Windows_x86_Firefox.Картинка = ?(Windows_x86_Firefox, Доступна, НеДоступна); + Элементы.Windows_x86_MSIE.Картинка = ?(Windows_x86_MSIE, Доступна, НеДоступна); + Элементы.Windows_x86_64_1СПредприятие.Картинка = ?(Windows_x86_64, Доступна, НеДоступна); + Элементы.Windows_x86_64_Chrome.Картинка = ?(Windows_x86_Chrome, Доступна, НеДоступна); + Элементы.Windows_x86_64_Firefox.Картинка = ?(Windows_x86_Firefox, Доступна, НеДоступна); + Элементы.Windows_x86_64_MSIE.Картинка = ?(Windows_x86_64_MSIE, Доступна, НеДоступна); + Элементы.Linux_x86_1СПредприятие.Картинка = ?(Linux_x86, Доступна, НеДоступна); + Элементы.Linux_x86_Chrome.Картинка = ?(Linux_x86_Chrome, Доступна, НеДоступна); + Элементы.Linux_x86_Firefox.Картинка = ?(Linux_x86_Firefox, Доступна, НеДоступна); + Элементы.Linux_x86_64_1СПредприятие.Картинка = ?(Linux_x86_64, Доступна, НеДоступна); + Элементы.Linux_x86_64_Chrome.Картинка = ?(Linux_x86_64_Chrome, Доступна, НеДоступна); + Элементы.Linux_x86_64_Firefox.Картинка = ?(Linux_x86_64_Firefox, Доступна, НеДоступна); + Элементы.MacOS_x86_64_Safari.Картинка = ?(MacOS_x86_64_Safari, Доступна, НеДоступна); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonForms/ПоддерживаемыеКлиентскиеПриложения/ПоддерживаемыеКлиентскиеПриложения.mdo b/SSL/src/CommonForms/ПоддерживаемыеКлиентскиеПриложения/ПоддерживаемыеКлиентскиеПриложения.mdo new file mode 100644 index 000000000..7cb753460 --- /dev/null +++ b/SSL/src/CommonForms/ПоддерживаемыеКлиентскиеПриложения/ПоддерживаемыеКлиентскиеПриложения.mdo @@ -0,0 +1,10 @@ + + + ПоддерживаемыеКлиентскиеПриложения + + ru + Поддерживаемые клиентские приложения + + PersonalComputer + MobileDevice + diff --git a/SSL/src/CommonForms/ПоискИсполняемогоФайлаОнлайнПоддержки/Form.form b/SSL/src/CommonForms/ПоискИсполняемогоФайлаОнлайнПоддержки/Form.form index 94d3542e1..f113481da 100644 --- a/SSL/src/CommonForms/ПоискИсполняемогоФайлаОнлайнПоддержки/Form.form +++ b/SSL/src/CommonForms/ПоискИсполняемогоФайлаОнлайнПоддержки/Form.form @@ -212,6 +212,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true diff --git a/SSL/src/CommonForms/ПоказателиВыделенныхЯчеек/Help/ru.html b/SSL/src/CommonForms/ПоказателиВыделенныхЯчеек/Help/ru.html index 6718302f3..ef8991200 100644 --- a/SSL/src/CommonForms/ПоказателиВыделенныхЯчеек/Help/ru.html +++ b/SSL/src/CommonForms/ПоказателиВыделенныхЯчеек/Help/ru.html @@ -1,5 +1,6 @@

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

    +

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

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

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

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

    diff --git a/SSL/src/CommonForms/ПраваДоступа/Form.form b/SSL/src/CommonForms/ПраваДоступа/Form.form index e00ddfa0d..ccb69e18f 100644 --- a/SSL/src/CommonForms/ПраваДоступа/Form.form +++ b/SSL/src/CommonForms/ПраваДоступа/Form.form @@ -586,6 +586,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1149,6 +1150,7 @@ true true true + HorizontalIfPossible true true true diff --git a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Form.form b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Form.form index 102ba6dce..c727d6054 100644 --- a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Form.form +++ b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Form.form @@ -988,6 +988,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Help/ru.html b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Help/ru.html index 1667909ac..149fcdd1f 100644 --- a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Help/ru.html +++ b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Help/ru.html @@ -6,9 +6,8 @@
    • В списке Профили необходимо с помощью флажков отметить те профили, которые требуются для работы пользователя в программе.
    • Профиль, как правило, объединяет несколько ролей. При назначении профиля пользователю назначаются все роли, заданные в этом профиле. Например, в профиль Администратор входит роль Полные права, которая предоставляет неограниченный доступ ко всем данным. Права доступа могут настраивать только администраторы программы (пользователи, у которых отмечен профиль Администратор).
    • Различают основные и дополнительные профили: -
      • Основной профиль описывает некоторую совокупность прав доступа, достаточную для выполнения в программе определенного участка работ. Например, если сотрудник выполняет в программе только функции бухгалтера, то ему должны быть назначены профиль Бухгалтер, а также служебный профиль Пользователь (который разрешает выполнять вход в программу). -
      • С помощью дополнительных профилей пользователя могут быть выданы вспомогательные права, дополнительно к основным. Например, дополнительно к основным профилям Бухгалтер и Кладовщик предусмотрены профили Ведение переписки с контрагентами и Печать непроведенных документов.

    Виды доступа

    -
    • Список выводится справа от списка профилей, если включен флажок Ограничивать доступ на уровне записей в разделе Администрирование - Настройки пользователей и прав. В списке с помощью поля Вид доступа можно задать границы области данных, с которой пользователю разрешено работать. +
      • Основной профиль описывает некоторую совокупность прав доступа, достаточную для выполнения в программе определенного участка работ. +
      • С помощью дополнительных профилей пользователя могут быть выданы вспомогательные права, дополнительно к основным. Виды доступа
    • Список выводится справа от списка профилей, если включен флажок Ограничивать доступ на уровне записей в разделе Администрирование - Настройки пользователей и прав. В списке с помощью поля Вид доступа можно задать границы области данных, с которой пользователю разрешено работать.
    • Вид доступа - это некоторое правило, по которому "разрешается" доступ к данным программы. Например, с помощью вида доступа Организации можно разрешить пользователю работать только с документами по конкретным организациям, или наоборот, скрыть от него документы некоторых организаций.
      • Состав видов доступа, перечисленных в списке, зависит от профиля, выбранного в списке слева. Кроме того, профиль также определяет, как именно действует настройка вида доступа: она разрешает просмотр или также включает возможность редактирования документов. Например, в случае если профиль включает в себя роль для чтения документов Поступление товаров, то пользователь получает возможность просматривать документы по заданным организациям. Если же в профиле содержится роль добавления и изменения, то появляется возможность редактировать такие документы.
    • Для каждого вида доступа заполните Значения доступа. Выберите из списка значения Все запрещены, Все разрешены, или укажите исключения. 
      • Каждый вид доступа настраивается одним из двух способов: diff --git a/SSL/src/CommonForms/ПредупреждениеБезопасности/Form.form b/SSL/src/CommonForms/ПредупреждениеБезопасности/Form.form index 3c58d5d4c..d752975c5 100644 --- a/SSL/src/CommonForms/ПредупреждениеБезопасности/Form.form +++ b/SSL/src/CommonForms/ПредупреждениеБезопасности/Form.form @@ -365,75 +365,19 @@ - Колонки3 - 73 - - КоманднаяПанель3 - 78 - - Продолжить3 - 84 - true - true - - true - - - Продолжить3РасширеннаяПодсказка - 85 - Label - true - true - - Left - - - Form.Command.Продолжить - Normal - Auto - true - true - UserCmds - Auto - - - Отмена3 - 82 - true - true - - true - - - Отмена3РасширеннаяПодсказка - 83 - Label - true - true - - Left - - - Form.StandardCommand.Cancel - Normal - Auto - true - true - UserCmds - Auto - + КоманднаяПанель3 + 78 + + Продолжить3 + 84 true true true - - <key>ru</key> - <value>Командная панель 3</value> - - КоманднаяПанель3РасширеннаяПодсказка - 79 + Продолжить3РасширеннаяПодсказка + 85 Label true true @@ -441,10 +385,39 @@ Left - CommandBar - - Right - + Form.Command.Продолжить + Normal + Auto + true + true + UserCmds + Auto + + + Отмена3 + 82 + true + true + + true + + + Отмена3РасширеннаяПодсказка + 83 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto true true @@ -453,11 +426,11 @@ <key>ru</key> - <value>Колонки 3</value> + <value>Командная панель 3</value> - Колонки3РасширеннаяПодсказка - 74 + КоманднаяПанель3РасширеннаяПодсказка + 79 Label true true @@ -465,13 +438,9 @@ Left - UsualGroup - - Auto - true - true - Auto - Auto + CommandBar + + Right true @@ -545,75 +514,19 @@ - Колонки4 - 29 - - КоманднаяПанель4 - 34 - - Продолжить4 - 66 - true - true - - true - - - Продолжить4РасширеннаяПодсказка - 67 - Label - true - true - - Left - - - Form.Command.Продолжить - Normal - Auto - true - true - UserCmds - Auto - - - Отмена4 - 38 - true - true - - true - - - Отмена4РасширеннаяПодсказка - 39 - Label - true - true - - Left - - - Form.StandardCommand.Cancel - Normal - Auto - true - true - UserCmds - Auto - + КоманднаяПанель4 + 34 + + Продолжить4 + 66 true true true - - <key>ru</key> - <value>Командная панель 4</value> - - КоманднаяПанель4РасширеннаяПодсказка - 35 + Продолжить4РасширеннаяПодсказка + 67 Label true true @@ -621,10 +534,39 @@ Left - CommandBar - - Right - + Form.Command.Продолжить + Normal + Auto + true + true + UserCmds + Auto + + + Отмена4 + 38 + true + true + + true + + + Отмена4РасширеннаяПодсказка + 39 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto true true @@ -633,11 +575,11 @@ <key>ru</key> - <value>Колонки 4</value> + <value>Командная панель 4</value> - Колонки4РасширеннаяПодсказка - 30 + КоманднаяПанель4РасширеннаяПодсказка + 35 Label true true @@ -645,13 +587,9 @@ Left - UsualGroup - - Auto - true - true - Auto - Auto + CommandBar + + Right true @@ -725,75 +663,19 @@ - Колонки8 - 158 - - КоманднаяПанель8 - 160 - - Продолжить8 - 162 - true - true - - true - - - Продолжить8РасширеннаяПодсказка - 163 - Label - true - true - - Left - - - Form.Command.Продолжить - Normal - Auto - true - true - UserCmds - Auto - - - Отмена8 - 164 - true - true - - true - - - Отмена8РасширеннаяПодсказка - 165 - Label - true - true - - Left - - - Form.StandardCommand.Cancel - Normal - Auto - true - true - UserCmds - Auto - + КоманднаяПанель8 + 160 + + Продолжить8 + 162 true true true - - <key>ru</key> - <value>Командная панель4</value> - - КоманднаяПанель8РасширеннаяПодсказка - 161 + Продолжить8РасширеннаяПодсказка + 163 Label true true @@ -801,10 +683,39 @@ Left - CommandBar - - Right - + Form.Command.Продолжить + Normal + Auto + true + true + UserCmds + Auto + + + Отмена8 + 164 + true + true + + true + + + Отмена8РасширеннаяПодсказка + 165 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto true true @@ -813,11 +724,11 @@ <key>ru</key> - <value>Колонки4</value> + <value>Командная панель4</value> - Колонки8РасширеннаяПодсказка - 159 + КоманднаяПанель8РасширеннаяПодсказка + 161 Label true true @@ -825,13 +736,9 @@ Left - UsualGroup - - Auto - true - true - Auto - Auto + CommandBar + + Right true @@ -908,75 +815,19 @@ - Колонки5 - 113 - - КоманднаяПанель5 - 118 - - Продолжить5 - 120 - true - true - - true - - - Продолжить5РасширеннаяПодсказка - 121 - Label - true - true - - Left - - - Form.Command.Продолжить - Normal - Auto - true - true - UserCmds - Auto - - - Отмена5 - 122 - true - true - - true - - - Отмена5РасширеннаяПодсказка - 123 - Label - true - true - - Left - - - Form.StandardCommand.Cancel - Normal - Auto - true - true - UserCmds - Auto - + КоманднаяПанель5 + 118 + + Продолжить5 + 120 true true true - - <key>ru</key> - <value>Командная панель 5</value> - - КоманднаяПанель5РасширеннаяПодсказка - 119 + Продолжить5РасширеннаяПодсказка + 121 Label true true @@ -984,10 +835,39 @@ Left - CommandBar - - Right - + Form.Command.Продолжить + Normal + Auto + true + true + UserCmds + Auto + + + Отмена5 + 122 + true + true + + true + + + Отмена5РасширеннаяПодсказка + 123 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto true true @@ -996,11 +876,11 @@ <key>ru</key> - <value>Колонки 5</value> + <value>Командная панель 5</value> - Колонки5РасширеннаяПодсказка - 114 + КоманднаяПанель5РасширеннаяПодсказка + 119 Label true true @@ -1008,13 +888,9 @@ Left - UsualGroup - - Auto - true - true - Auto - Auto + CommandBar + + Right true @@ -1088,75 +964,19 @@ - Колонки6 - 129 - - КоманднаяПанель6 - 131 - - Продолжить6 - 133 - true - true - - true - - - Продолжить6РасширеннаяПодсказка - 134 - Label - true - true - - Left - - - Form.Command.Продолжить - Normal - Auto - true - true - UserCmds - Auto - - - Отмена6 - 135 - true - true - - true - - - Отмена6РасширеннаяПодсказка - 136 - Label - true - true - - Left - - - Form.StandardCommand.Cancel - Normal - Auto - true - true - UserCmds - Auto - + КоманднаяПанель6 + 131 + + Продолжить6 + 133 true true true - - <key>ru</key> - <value>Командная панель5</value> - - КоманднаяПанель6РасширеннаяПодсказка - 132 + Продолжить6РасширеннаяПодсказка + 134 Label true true @@ -1164,10 +984,39 @@ Left - CommandBar - - Right - + Form.Command.Продолжить + Normal + Auto + true + true + UserCmds + Auto + + + Отмена6 + 135 + true + true + + true + + + Отмена6РасширеннаяПодсказка + 136 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto true true @@ -1176,11 +1025,11 @@ <key>ru</key> - <value>Колонки5</value> + <value>Командная панель5</value> - Колонки6РасширеннаяПодсказка - 130 + КоманднаяПанель6РасширеннаяПодсказка + 132 Label true true @@ -1188,13 +1037,9 @@ Left - UsualGroup - - Auto - true - true - Auto - Auto + CommandBar + + Right true @@ -1301,75 +1146,19 @@ - Колонки7 - 145 - - КоманднаяПанель7 - 147 - - Продолжить7 - 149 - true - true - - true - - - Продолжить7РасширеннаяПодсказка - 150 - Label - true - true - - Left - - - Form.Command.Продолжить - Normal - Auto - true - true - UserCmds - Auto - - - Отмена7 - 151 - true - true - - true - - - Отмена7РасширеннаяПодсказка - 152 - Label - true - true - - Left - - - Form.StandardCommand.Cancel - Normal - Auto - true - true - UserCmds - Auto - + КоманднаяПанель7 + 147 + + Продолжить7 + 149 true true true - - <key>ru</key> - <value>Командная панель5</value> - - КоманднаяПанель7РасширеннаяПодсказка - 148 + Продолжить7РасширеннаяПодсказка + 150 Label true true @@ -1377,10 +1166,39 @@ Left - CommandBar - - Right - + Form.Command.Продолжить + Normal + Auto + true + true + UserCmds + Auto + + + Отмена7 + 151 + true + true + + true + + + Отмена7РасширеннаяПодсказка + 152 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto true true @@ -1389,11 +1207,11 @@ <key>ru</key> - <value>Колонки5</value> + <value>Командная панель5</value> - Колонки7РасширеннаяПодсказка - 146 + КоманднаяПанель7РасширеннаяПодсказка + 148 Label true true @@ -1401,13 +1219,9 @@ Left - UsualGroup - - Auto - true - true - Auto - Auto + CommandBar + + Right true @@ -1481,75 +1295,19 @@ - Колонки9 - 171 - - КоманднаяПанель9 - 173 - - Продолжить9 - 175 - true - true - - true - - - Продолжить9РасширеннаяПодсказка - 176 - Label - true - true - - Left - - - Form.Command.Продолжить - Normal - Auto - true - true - UserCmds - Auto - - - Отмена9 - 177 - true - true - - true - - - Отмена9РасширеннаяПодсказка - 178 - Label - true - true - - Left - - - Form.StandardCommand.Cancel - Normal - Auto - true - true - UserCmds - Auto - + КоманднаяПанель9 + 173 + + Продолжить9 + 175 true true true - - <key>ru</key> - <value>Командная панель4</value> - - КоманднаяПанель9РасширеннаяПодсказка - 174 + Продолжить9РасширеннаяПодсказка + 176 Label true true @@ -1557,10 +1315,39 @@ Left - CommandBar - - Right - + Form.Command.Продолжить + Normal + Auto + true + true + UserCmds + Auto + + + Отмена9 + 177 + true + true + + true + + + Отмена9РасширеннаяПодсказка + 178 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto true true @@ -1569,11 +1356,11 @@ <key>ru</key> - <value>Колонки4</value> + <value>Командная панель4</value> - Колонки9РасширеннаяПодсказка - 172 + КоманднаяПанель9РасширеннаяПодсказка + 174 Label true true @@ -1581,13 +1368,9 @@ Left - UsualGroup - - Auto - true - true - Auto - Auto + CommandBar + + Right true @@ -1616,6 +1399,382 @@ false + + ПередУдалениемРасширения + 179 + + ПредупрежденииПередУдалениемРасширения + 181 + + <key>ru</key> + <value>Подключенное расширение может хранить данные в информационной базе. +Удаление расширения приведет к безвозвратной потере этих данных. +Перед удалением ознакомьтесь с документацией по расширению, +которую можно получить от поставщика расширения.</value> + + true + true + + true + + + ПредупрежденииПередУдалениемРасширенияРасширеннаяПодсказка + 183 + Label + true + true + + Left + + + + ПредупрежденииПередУдалениемРасширенияКонтекстноеМеню + 182 + true + + Label + true + false + + Left + + + + ПредупрежденииПередУдалениемРасширенияРезервноеКопирование + 205 + + <key>ru</key> + <value>Перед удалением расширения рекомендуется +выполнить резервное копирование информационной базы.</value> + + true + true + + true + + + ПредупрежденииПередУдалениемРасширенияРезервноеКопированиеРасширеннаяПодсказка + 207 + Label + true + true + + Left + + + + ПредупрежденииПередУдалениемРасширенияРезервноеКопированиеКонтекстноеМеню + 206 + true + + Label + true + true + + + URLProcessing + ПредупрежденииПередУдалениемРасширенияРезервноеКопированиеОбработкаНавигационнойСсылки + + Left + + + + ПредупрежденииПередУдалениемРасширенияТекстУдалить + 208 + + <key>ru</key> + <value><<Удалить выделенные расширения?>> +<<Удалить расширение?>></value> + + true + true + + true + + + ПредупрежденииПередУдалениемРасширенияТекстУдалитьРасширеннаяПодсказка + 210 + Label + true + true + + Left + + + + ПредупрежденииПередУдалениемРасширенияТекстУдалитьКонтекстноеМеню + 209 + true + + true + Label + true + true + + Left + + + + КоманднаяПанель10 + 186 + + Продолжить10 + 188 + + <key>ru</key> + <value>Удалить</value> + + true + true + + true + + + Продолжить10РасширеннаяПодсказка + 189 + Label + true + true + + Left + + + Form.Command.Продолжить + Normal + Auto + true + true + UserCmds + Auto + + + Отмена10 + 190 + true + true + + true + + + Отмена10РасширеннаяПодсказка + 191 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель4</value> + + + КоманднаяПанель10РасширеннаяПодсказка + 187 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Перед удалением расширения</value> + + + ПередУдалениемРасширенияРасширеннаяПодсказка + 180 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + ПередОтключениемРасширения + 192 + + ПредупрежденииПередОтключениемРасширения + 194 + + <key>ru</key> + <value>Подключенное расширение может хранить данные в информационной базе. +Отключение расширения приведет к недоступности этих данных +и может привести к невозможности изменять часть данных самой программы. +Перед отключением расширения ознакомьтесь с документацией по расширению, +которое можно получить от поставщика расширения. + +Отключить расширение?</value> + + true + true + + true + + + ПредупрежденииПередОтключениемРасширенияРасширеннаяПодсказка + 196 + Label + true + true + + Left + + + + ПредупрежденииПередОтключениемРасширенияКонтекстноеМеню + 195 + true + + Label + true + false + + Left + + + + КоманднаяПанель11 + 199 + + Продолжить11 + 201 + + <key>ru</key> + <value>Отключить</value> + + true + true + + true + + + Продолжить11РасширеннаяПодсказка + 202 + Label + true + true + + Left + + + Form.Command.Продолжить + Normal + Auto + true + true + UserCmds + Auto + + + Отмена11 + 203 + true + true + + true + + + Отмена11РасширеннаяПодсказка + 204 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель4</value> + + + КоманднаяПанель11РасширеннаяПодсказка + 200 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Перед удалением расширения</value> + + + ПередОтключениемРасширенияРасширеннаяПодсказка + 193 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + true true @@ -1865,6 +2024,12 @@ + + МножественныйВыбор + + Boolean + + diff --git a/SSL/src/CommonForms/ПредупреждениеБезопасности/Module.bsl b/SSL/src/CommonForms/ПредупреждениеБезопасности/Module.bsl index 91acd3124..96bb6ed9e 100644 --- a/SSL/src/CommonForms/ПредупреждениеБезопасности/Module.bsl +++ b/SSL/src/CommonForms/ПредупреждениеБезопасности/Module.bsl @@ -6,7 +6,8 @@ Возврат; КонецЕсли; Если Не ЗначениеЗаполнено(Параметры.Ключ) Тогда - ТекстОшибки = НСтр("ru = 'Общая форма ""Предупреждение безопасности"" является вспомогательной и открывается из служебных механизмов программы.'"); + ТекстОшибки = + НСтр("ru = 'Общая форма ""Предупреждение безопасности"" является вспомогательной и открывается из служебных механизмов программы.'"); ВызватьИсключение ТекстОшибки; КонецЕсли; @@ -30,7 +31,46 @@ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( Элементы.ПредупрежденииПриОткрытииФайла.Заголовок, Параметры.ИмяФайла); КонецЕсли; - + + Если ОбщегоНазначения.РазделениеВключено() Тогда + Элементы.ПредупрежденииПередУдалениемРасширенияРезервноеКопирование.Видимость = Ложь; + Иначе + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РезервноеКопированиеИБ") Тогда + + МодульРезервноеКопированиеИБСервер = ОбщегоНазначения.ОбщийМодуль("РезервноеКопированиеИБСервер"); + + РезервноеКопирование = Новый Массив; + РезервноеКопирование.Добавить(НСтр("ru = 'Перед удалением расширения рекомендуется'")); + РезервноеКопирование.Добавить(Символы.ПС); + РезервноеКопирование.Добавить(Новый ФорматированнаяСтрока( + НСтр("ru = 'выполнить резервное копирование информационной базы'"),,,, + МодульРезервноеКопированиеИБСервер.НавигационнаяСсылкаОбработкиРезервногоКопирования())); + РезервноеКопирование.Добавить("."); + + Элементы.ПредупрежденииПередУдалениемРасширенияРезервноеКопирование.Заголовок = + Новый ФорматированнаяСтрока(РезервноеКопирование); + + КонецЕсли; + КонецЕсли; + + Если Параметры.МножественныйВыбор Тогда + Элементы.ПредупрежденииПередУдалениемРасширенияТекстУдалить.Заголовок = НСтр("ru = 'Удалить выделенные расширения?'"); + Иначе + Элементы.ПредупрежденииПередУдалениемРасширенияТекстУдалить.Заголовок = НСтр("ru = 'Удалить расширение?'"); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовФормы + +&НаКлиенте +Процедура ПредупрежденииПередУдалениемРасширенияРезервноеКопированиеОбработкаНавигационнойСсылки(Элемент, + НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + + Закрыть(КодВозвратаДиалога.Отмена); + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Form.form b/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Form.form index e16cceaff..a59412ac3 100644 --- a/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Form.form +++ b/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Form.form @@ -97,6 +97,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/CommonForms/ПустойРабочийСтол/Form.form b/SSL/src/CommonForms/ПустойРабочийСтол/Form.form index f4acf681e..7a75822a2 100644 --- a/SSL/src/CommonForms/ПустойРабочийСтол/Form.form +++ b/SSL/src/CommonForms/ПустойРабочийСтол/Form.form @@ -98,6 +98,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/CommonForms/Расширения/Form.form b/SSL/src/CommonForms/Расширения/Form.form index e247c199a..ed1ffdeb9 100644 --- a/SSL/src/CommonForms/Расширения/Form.form +++ b/SSL/src/CommonForms/Расширения/Form.form @@ -1,25 +1,86 @@ - СтраницыРежимРаботы - 152 + КомандыФормы + 150 + + СписокРасширенийДобавить + 58 + + <key>ru</key> + <value>Добавить из файла...</value> + + true + true + + true + + + СписокРасширенийДобавитьРасширеннаяПодсказка + 59 + + <key>ru</key> + <value>Добавить из файла на диске...</value> + + Label + true + true + + Left + + + Form.Item.СписокРасширений.StandardCommand.Add + Normal + Auto + true + true + UserCmds + Auto + + + СписокРасширенийУдалить + 60 + true + true + + true + + + СписокРасширенийУдалитьРасширеннаяПодсказка + 61 + Label + true + true + + Left + + + Form.Item.СписокРасширений.StandardCommand.Delete + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + - СтраницаРазделенныйРежим - 154 + КнопкиСписка + 56 - КомандыФормы - 150 + СписокРасширенийОбновитьИСохранить + 96 - СписокРасширенийДобавить - 58 + СписокРасширенийОбновитьИзФайла + 92 true true true - СписокРасширенийДобавитьРасширеннаяПодсказка - 59 + СписокРасширенийОбновитьИзФайлаРасширеннаяПодсказка + 93 Label true true @@ -27,7 +88,7 @@ Left - Form.Item.СписокРасширений.StandardCommand.Add + Form.Command.ОбновитьИзФайла Normal Auto true @@ -36,16 +97,16 @@ Auto - СписокРасширенийУдалить - 60 + СписокРасширенийСохранитьКак + 94 true true true - СписокРасширенийУдалитьРасширеннаяПодсказка - 61 + СписокРасширенийСохранитьКакРасширеннаяПодсказка + 95 Label true true @@ -53,32 +114,1226 @@ Left - Form.Item.СписокРасширений.StandardCommand.Delete + Form.Command.СохранитьКак Normal Auto true true UserCmds Auto - InCommandBarAndInAdditionalSubmenu + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Список расширений обновить и сохранить</value> + + + СписокРасширенийОбновитьИСохранитьРасширеннаяПодсказка + 97 + Label + true + true + + Left + + + + + + СписокРасширенийОбновить + 68 + true + true + + true + + + СписокРасширенийОбновитьРасширеннаяПодсказка + 69 + Label + true + true + + Left + + + Form.Command.Обновить + Normal + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Кнопки списка</value> + + + КнопкиСпискаРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + + Item.СписокРасширений + + + + ФормаУстановленныеПатчи + 177 + true + true + + true + + + ФормаУстановленныеПатчиРасширеннаяПодсказка + 178 + Label + true + true + + Left + + + Form.Command.УстановленныеПатчи + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаОбновитьКэшиРасширений + 159 + true + true + + + ФормаОбновитьКэшиРасширенийРасширеннаяПодсказка + 160 + Label + true + true + + Left + + + Form.Command.ОбновитьКэшиРасширений + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаУдалитьУстаревшиеКэшиРасширений + 131 + true + true + + + ФормаУдалитьУстаревшиеКэшиРасширенийРасширеннаяПодсказка + 132 + Label + true + true + + Left + + + Form.Command.УдалитьУстаревшиеКэшиРасширений + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Команды формы</value> + + + КомандыФормыРасширеннаяПодсказка + 151 + Label + true + true + + Left + + + CommandBar + + Left + Form + + + + СтраницыОбновление + 101 + + СтраницаСписокРасширений + 108 + + ГруппаПредупреждение + 78 + + ПредупреждениеКартинка + 80 + + <key>ru</key> + <value>Предупреждение картинка</value> + + true + true + + true + + + ПредупреждениеКартинкаРасширеннаяПодсказка + 82 + Label + true + true + + Left + + + + ПредупреждениеКартинкаКонтекстноеМеню + 81 + true + + true + true + + + CommonPicture.Предупреждение32 + + + + + ПредупреждениеОписание + 83 + + <key>ru</key> + <value>Чтобы продолжить работу с учетом сделанных изменений, необходимо <link 1>перезапустить</> программу.</value> + + true + true + + true + + + ПредупреждениеОписаниеРасширеннаяПодсказка + 85 + Label + true + true + + Left + + + + ПредупреждениеОписаниеКонтекстноеМеню + 84 + true + + true + Label + true + + + URLProcessing + ПредупреждениеОписаниеОбработкаНавигационнойСсылки + + Left + + + true + true + + true + + + <key>ru</key> + <value>Предупреждение</value> + + + ГруппаПредупреждениеРасширеннаяПодсказка + 79 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Center + Auto + true + true + + Style.ЦветФонаПредупреждения + + Auto + Auto + + + + ГруппаИнформация + 184 + + ИнформацияКартинка + 186 + + <key>ru</key> + <value>Информация картинка</value> + + true + true + + true + + + ИнформацияКартинкаРасширеннаяПодсказка + 188 + Label + true + true + + Left + + + + ИнформацияКартинкаКонтекстноеМеню + 187 + true + + true + true + + + CommonPicture.Информация32 + + - КнопкиСписка - 56 + ГруппаИнформацияОписание + 189 + + ИнформацияОписание + 191 + + <key>ru</key> + <value>Изменения расширений области данных, вступят в силу только для пользователей области данных и только при их следующем входе в программу.</value> + + true + true + + true + + + ИнформацияОписаниеРасширеннаяПодсказка + 193 + Label + true + true + + Left + + + + ИнформацияОписаниеКонтекстноеМеню + 192 + true + + Label + true + + Left + Center + 2 + + + true + true + + true + + + <key>ru</key> + <value>Информация описание</value> + + + ГруппаИнформацияОписаниеРасширеннаяПодсказка + 190 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Информация</value> + + + ГруппаИнформацияРасширеннаяПодсказка + 185 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + СписокРасширений + 19 + + <key>ru</key> + <value>Список расширений</value> + + true + true + + true + + + СписокРасширений + + None + CancelSearch + Change + Copy + CopyToClipboard + EndEdit + Find + MoveDown + MoveUp + OutputList + ShowRowRearrangement + SortListAsc + SortListDesc + + СписокРасширенийОбщее + 168 + true + true + + true + + + СписокРасширений.Общее + + + ru + Общие расширения доступны во всех областях + + + СписокРасширенийОбщееРасширеннаяПодсказка + 170 + Label + true + true + + Left + + + + СписокРасширенийОбщееКонтекстноеМеню + 169 + true + + CheckBoxField + true + Auto + true + Left + true + + + + СписокРасширенийПолученоИзГлавногоУзлаРИБ + 171 + true + true + + true + + + СписокРасширений.ПолученоИзГлавногоУзлаРИБ + + None + + ru + Автоматически получено из главного узла РИБ + + + СписокРасширенийПолученоИзГлавногоУзлаРИБРасширеннаяПодсказка + 173 + Label + true + true + + Left + + + + СписокРасширенийПолученоИзГлавногоУзлаРИБКонтекстноеМеню + 172 + true + + CheckBoxField + true + Auto + true + + CommonPicture.РасширениеКонфигурацииИзГлавногоУзла + + Left + true + + + + СписокРасширенийПодключать + 174 + true + true + + true + + + СписокРасширений.Подключать + + None + + ru + Подключать расширение при входе в программу + + + OnChange + СписокРасширенийПодключатьПриИзменении + + + СписокРасширенийПодключатьРасширеннаяПодсказка + 176 + Label + true + true + + Left + + + + СписокРасширенийПодключатьКонтекстноеМеню + 175 + true + + CheckBoxField + Auto + true + Left + true + + + + СписокРасширенийНаименование + 140 + + СписокРасширенийПодключено + 142 + true + true + + true + + + СписокРасширений.Подключено + + None + + СписокРасширенийПодключеноРасширеннаяПодсказка + 144 + Label + true + true + + Left + + + + СписокРасширенийПодключеноКонтекстноеМеню + 143 + true + + PictureField + Auto + true + Left + true + + true + true + true + true + + CommonPicture.СостоянияРасширенийКонфигурации + + + + 1 + + + + + СписокРасширенийСиноним + 53 + + <key>ru</key> + <value>Наименование</value> + + true + true + + true + + + СписокРасширений.Синоним + + + СписокРасширенийСинонимРасширеннаяПодсказка + 55 + Label + true + true + + Left + + + + СписокРасширенийСинонимКонтекстноеМеню + 54 + true + + InputField + true + Auto + true + Left + true + + 42 + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Список расширений наименование</value> + + + СписокРасширенийНаименованиеРасширеннаяПодсказка + 141 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + СписокРасширенийВерсия + 38 + true + true + + true + + + СписокРасширений.Версия + + + СписокРасширенийВерсияРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + + СписокРасширенийВерсияКонтекстноеМеню + 39 + true + + InputField + true + Auto + true + Left + true + + 10 + true + true + true + true + true + true + Normal + + + + СписокРасширенийНазначение + 156 + true + true + + true + + + СписокРасширений.Назначение + + + ru + Определяет порядок применения расширения в порядке: Исправление, Дополнение, Адаптация. + + + СписокРасширенийНазначениеРасширеннаяПодсказка + 158 + Label + true + true + + Left + + + + СписокРасширенийНазначениеКонтекстноеМеню + 157 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + СписокРасширенийПередаватьВПодчиненныеУзлыРИБ + 165 + true + true + + true + + + СписокРасширений.ПередаватьВПодчиненныеУзлыРИБ + + None + + ru + Передавать в подчиненные узлы РИБ + + + OnChange + СписокРасширенийПередаватьВПодчиненныеУзлыРИБПриИзменении + + + СписокРасширенийПередаватьВПодчиненныеУзлыРИБРасширеннаяПодсказка + 167 + Label + true + true + + Left + + + + СписокРасширенийПередаватьВПодчиненныеУзлыРИБКонтекстноеМеню + 166 + true + + CheckBoxField + Auto + true + + StdPicture.ExchangePlan + + Left + true + + + + СписокРасширенийГруппаБезопасныйРежим + 136 + + СписокРасширенийБезопасныйРежимФлаг + 50 + true + true + + true + + + СписокРасширений.БезопасныйРежимФлаг + + + OnChange + СписокРасширенийБезопасныйРежимФлагПриИзменении + + + СписокРасширенийБезопасныйРежимФлагРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + + СписокРасширенийБезопасныйРежимФлагКонтекстноеМеню + 51 + true + + CheckBoxField + Auto + true + Left + true + + + + СписокРасширенийБезопасныйРежим + 133 + true + true + + true + + + СписокРасширений.БезопасныйРежим + + None + + СписокРасширенийБезопасныйРежимРасширеннаяПодсказка + 135 + Label + true + true + + Left + + + + СписокРасширенийБезопасныйРежимКонтекстноеМеню + 134 + true + + InputField + true + Auto + true + Left + true + + 7 + true + true + true + + ru + БЛ=; БИ= + + + ru + БЛ=; БИ= + + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Список расширений группа безопасный режим</value> + + 10 + + СписокРасширенийГруппаБезопасныйРежимРасширеннаяПодсказка + 137 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + СписокРасширенийКонтрольнаяСумма + 98 + true + true + + + СписокРасширений.КонтрольнаяСумма + + + СписокРасширенийКонтрольнаяСуммаРасширеннаяПодсказка + 100 + Label + true + true + + Left + + + + СписокРасширенийКонтрольнаяСуммаКонтекстноеМеню + 99 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + None + + СписокРасширенийКоманднаяПанель + 21 + Left + true + + + BeforeAddRow + СписокРасширенийПередНачаломДобавления + + + BeforeDeleteRow + СписокРасширенийПередУдалением + + + OnActivateRow + СписокРасширенийПриАктивизацииСтроки + + + СписокРасширенийСтрокаПоиска + 23 + + СписокРасширенийСтрокаПоискаРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + + СписокРасширенийСтрокаПоискаКонтекстноеМеню + 24 + true + + СписокРасширений + + true + + + + СписокРасширенийСостояниеПросмотра + 26 + + СписокРасширенийСостояниеПросмотраРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + СписокРасширенийСостояниеПросмотраКонтекстноеМеню + 27 + true + + ViewStatusAddition + СписокРасширений + + true + + + + СписокРасширенийУправлениеПоиском + 29 + + СписокРасширенийУправлениеПоискомРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + СписокРасширенийУправлениеПоискомКонтекстноеМеню + 30 + true + + SearchControlAddition + СписокРасширений + + true + + + + СписокРасширенийРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + СписокРасширенийКонтекстноеМеню + 20 + + СписокРасширенийКонтекстноеМенюДобавить + 113 + + <key>ru</key> + <value>Добавить из файла...</value> + + true + true + + true + + + СписокРасширенийКонтекстноеМенюДобавитьРасширеннаяПодсказка + 114 + Label + true + true + + Left + + + Form.Item.СписокРасширений.StandardCommand.Add + Normal + Auto + true + true + UserCmds + Auto + + + СписокРасширенийКонтекстноеМенюУдалить + 115 + true + true + + true + + + СписокРасширенийКонтекстноеМенюУдалитьРасширеннаяПодсказка + 116 + Label + true + true + + Left + + + Form.Item.СписокРасширений.StandardCommand.Delete + Normal + Auto + true + true + UserCmds + Auto + + + СписокРасширенийКонтекстноеМенюОбновитьИзФайла + 64 + true + true + + true + + + СписокРасширенийКонтекстноеМенюОбновитьИзФайлаРасширеннаяПодсказка + 65 + Label + true + true + + Left + + + Form.Command.ОбновитьИзФайла + Normal + Auto + true + true + UserCmds + Auto + + + СписокРасширенийКонтекстноеМенюОбновить + 138 + true + true + + true + + + СписокРасширенийКонтекстноеМенюОбновитьРасширеннаяПодсказка + 139 + Label + true + true + + Left + + + Form.Command.Обновить + Normal + Auto + true + true + UserCmds + Auto + - СписокРасширенийОбновитьИСохранить - 96 + СписокРасширенийКонтекстноеМенюГруппа + 119 - СписокРасширенийОбновитьИзФайлаНаДиске - 92 + СписокРасширенийКонтекстноеМенюВыделитьВсе + 117 true true true - СписокРасширенийОбновитьИзФайлаНаДискеРасширеннаяПодсказка - 93 + СписокРасширенийКонтекстноеМенюВыделитьВсеРасширеннаяПодсказка + 118 Label true true @@ -86,41 +1341,13 @@ Left - Form.Command.ОбновитьИзФайлаНаДиске + Form.Item.СписокРасширений.StandardCommand.SelectAll Normal Auto true true UserCmds Auto - InAdditionalSubmenu - - - СписокРасширенийСохранитьКак - 94 - true - true - - true - - - СписокРасширенийСохранитьКакРасширеннаяПодсказка - 95 - Label - true - true - - Left - - - Form.Command.СохранитьКак - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu true true @@ -129,11 +1356,11 @@ <key>ru</key> - <value>Список расширений обновить и сохранить</value> + <value>Список расширений контекстное меню группа</value> - СписокРасширенийОбновитьИСохранитьРасширеннаяПодсказка - 97 + СписокРасширенийКонтекстноеМенюГруппаРасширеннаяПодсказка + 120 Label true true @@ -144,16 +1371,16 @@ - СписокРасширенийОбновить - 68 + СписокРасширенийКонтекстноеМенюСохранитьКак + 66 true true true - СписокРасширенийОбновитьРасширеннаяПодсказка - 69 + СписокРасширенийКонтекстноеМенюСохранитьКакРасширеннаяПодсказка + 67 Label true true @@ -161,1217 +1388,57 @@ Left - Form.Command.Обновить + Form.Command.СохранитьКак Normal + Auto true true UserCmds Auto - InAdditionalSubmenu - true - true - - true - - - <key>ru</key> - <value>Кнопки списка</value> - - - КнопкиСпискаРасширеннаяПодсказка - 57 - Label - true - true - - Left - - - - Item.СписокРасширений - - - - ФормаОбновитьКэшиРасширений - 159 - true - true - - - ФормаОбновитьКэшиРасширенийРасширеннаяПодсказка - 160 - Label - true - true - - Left - - - Form.Command.ОбновитьКэшиРасширений - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ФормаУдалитьУстаревшиеКэшиРасширений - 131 - true - true - - - ФормаУдалитьУстаревшиеКэшиРасширенийРасширеннаяПодсказка - 132 - Label - true - true - - Left - - - Form.Command.УдалитьУстаревшиеКэшиРасширений - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ФормаСправка - 74 - true - true - - true - - - ФормаСправкаРасширеннаяПодсказка - 75 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Команды формы</value> - - - КомандыФормыРасширеннаяПодсказка - 151 - Label - true - true - - Left - - - CommandBar - - Left - Form - + + true + true + true + true + true + MultiRow +
        true
        + 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + true + true + true + true + true + - - СтраницыОбновление - 101 - - СтраницаСписокРасширений - 108 - - ГруппаПредупреждение - 78 - - ПредупреждениеКартинка - 80 - - <key>ru</key> - <value>Предупреждение картинка</value> - - true - true - - true - - - ПредупреждениеКартинкаРасширеннаяПодсказка - 82 - Label - true - true - - Left - - - - ПредупреждениеКартинкаКонтекстноеМеню - 81 - true - - true - true - - - CommonPicture.Предупреждение32 - - - - - ПредупреждениеОписание - 83 - - <key>ru</key> - <value>Чтобы продолжить работу с учетом сделанных изменений, необходимо <link 1>перезапустить</> сеанс.</value> - - true - true - - true - - - ПредупреждениеОписаниеРасширеннаяПодсказка - 85 - Label - true - true - - Left - - - - ПредупреждениеОписаниеКонтекстноеМеню - 84 - true - - true - Label - true - - - URLProcessing - ПредупреждениеОписаниеОбработкаНавигационнойСсылки - - Left - - - true - true - - true - - - <key>ru</key> - <value>Предупреждение</value> - - - ГруппаПредупреждениеРасширеннаяПодсказка - 79 - Label - true - true - - Left - - - UsualGroup - - Center - Auto - true - true - Auto - Auto - - - - ГруппаИнформация - 121 - - ИнформацияКартинка - 123 - - <key>ru</key> - <value>Информация картинка</value> - - true - true - - true - - - ИнформацияКартинкаРасширеннаяПодсказка - 125 - Label - true - true - - Left - - - - ИнформацияКартинкаКонтекстноеМеню - 124 - true - - true - true - - - CommonPicture.Информация32 - - - - - ГруппаИнформацияОписание - 126 - - ИнформацияОписание - 128 - - <key>ru</key> - <value>Изменения, которые будут сделаны, вступят в силу для пользователей области данных при следующем входе в программу.</value> - - true - true - - true - - - ИнформацияОписаниеРасширеннаяПодсказка - 130 - Label - true - true - - Left - - - - ИнформацияОписаниеКонтекстноеМеню - 129 - true - - Label - true - - Left - Center - 2 - - - 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> - - - ГруппаИнформацияРасширеннаяПодсказка - 122 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - СписокРасширений - 19 - - <key>ru</key> - <value>Список расширений</value> - - true - true - - true - - - СписокРасширений - - None - CancelSearch - Change - Copy - CopyToClipboard - EndEdit - Find - MoveDown - MoveUp - OutputList - ShowRowRearrangement - SortListAsc - SortListDesc - - СписокРасширенийНаименование - 140 - - СписокРасширенийПодключено - 142 - true - true - - true - - - СписокРасширений.Подключено - - None - - СписокРасширенийПодключеноРасширеннаяПодсказка - 144 - Label - true - true - - Left - - - - СписокРасширенийПодключеноКонтекстноеМеню - 143 - true - - PictureField - Auto - true - Left - true - - true - true - true - true - - CommonPicture.СостоянияРасширенийКонфигурации - - - - 1 - - - - - СписокРасширенийСиноним - 53 - - <key>ru</key> - <value>Наименование</value> - - true - true - - true - - - СписокРасширений.Синоним - - - СписокРасширенийСинонимРасширеннаяПодсказка - 55 - Label - true - true - - Left - - - - СписокРасширенийСинонимКонтекстноеМеню - 54 - true - - InputField - true - Auto - true - Left - true - - 42 - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Список расширений наименование</value> - - - СписокРасширенийНаименованиеРасширеннаяПодсказка - 141 - Label - true - true - - Left - - - ColumnGroup - - InCell - auto - true - - - - СписокРасширенийВерсия - 38 - true - true - - true - - - СписокРасширений.Версия - - - СписокРасширенийВерсияРасширеннаяПодсказка - 40 - Label - true - true - - Left - - - - СписокРасширенийВерсияКонтекстноеМеню - 39 - true - - InputField - true - Auto - true - Left - true - - 10 - true - true - true - true - true - true - Normal - - - - СписокРасширенийНазначение - 156 - true - true - - true - - - СписокРасширений.Назначение - - - СписокРасширенийНазначениеРасширеннаяПодсказка - 158 - Label - true - true - - Left - - - - СписокРасширенийНазначениеКонтекстноеМеню - 157 - true - - InputField - true - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - СписокРасширенийКонтрольнаяСумма - 98 - true - true - - - СписокРасширений.КонтрольнаяСумма - - - СписокРасширенийКонтрольнаяСуммаРасширеннаяПодсказка - 100 - Label - true - true - - Left - - - - СписокРасширенийКонтрольнаяСуммаКонтекстноеМеню - 99 - true - - InputField - true - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - СписокРасширенийГруппаБезопасныйРежим - 136 - - СписокРасширенийБезопасныйРежимФлаг - 50 - true - true - - true - - - СписокРасширений.БезопасныйРежимФлаг - - - OnChange - СписокРасширенийБезопасныйРежимФлагПриИзменении - - - СписокРасширенийБезопасныйРежимФлагРасширеннаяПодсказка - 52 - Label - true - true - - Left - - - - СписокРасширенийБезопасныйРежимФлагКонтекстноеМеню - 51 - true - - CheckBoxField - Auto - true - Left - true - - - - СписокРасширенийБезопасныйРежим - 133 - true - true - - true - - - СписокРасширений.БезопасныйРежим - - None - - СписокРасширенийБезопасныйРежимРасширеннаяПодсказка - 135 - Label - true - true - - Left - - - - СписокРасширенийБезопасныйРежимКонтекстноеМеню - 134 - true - - InputField - true - Auto - true - Left - true - - true - true - true - - ru - БЛ=; БИ= - - - ru - БЛ=; БИ= - - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Список расширений группа безопасный режим</value> - - - СписокРасширенийГруппаБезопасныйРежимРасширеннаяПодсказка - 137 - Label - true - true - - Left - - - ColumnGroup - - InCell - auto - true - - - None - - СписокРасширенийКоманднаяПанель - 21 - Left - true - - - BeforeAddRow - СписокРасширенийПередНачаломДобавления - - - BeforeDeleteRow - СписокРасширенийПередУдалением - - - OnActivateRow - СписокРасширенийПриАктивизацииСтроки - - - СписокРасширенийСтрокаПоиска - 23 - - СписокРасширенийСтрокаПоискаРасширеннаяПодсказка - 25 - Label - true - true - - Left - - - - СписокРасширенийСтрокаПоискаКонтекстноеМеню - 24 - true - - СписокРасширений - - true - - - - СписокРасширенийСостояниеПросмотра - 26 - - СписокРасширенийСостояниеПросмотраРасширеннаяПодсказка - 28 - Label - true - true - - Left - - - - СписокРасширенийСостояниеПросмотраКонтекстноеМеню - 27 - true - - ViewStatusAddition - СписокРасширений - - true - - - - СписокРасширенийУправлениеПоиском - 29 - - СписокРасширенийУправлениеПоискомРасширеннаяПодсказка - 31 - Label - true - true - - Left - - - - СписокРасширенийУправлениеПоискомКонтекстноеМеню - 30 - true - - SearchControlAddition - СписокРасширений - - true - - - - СписокРасширенийРасширеннаяПодсказка - 22 - Label - true - true - - Left - - - - СписокРасширенийКонтекстноеМеню - 20 - - СписокРасширенийКонтекстноеМенюДобавить - 113 - true - true - - true - - - СписокРасширенийКонтекстноеМенюДобавитьРасширеннаяПодсказка - 114 - Label - true - true - - Left - - - Form.Item.СписокРасширений.StandardCommand.Add - Normal - Auto - true - true - UserCmds - Auto - - - СписокРасширенийКонтекстноеМенюУдалить - 115 - true - true - - true - - - СписокРасширенийКонтекстноеМенюУдалитьРасширеннаяПодсказка - 116 - Label - true - true - - Left - - - Form.Item.СписокРасширений.StandardCommand.Delete - Normal - Auto - true - true - UserCmds - Auto - - - СписокРасширенийКонтекстноеМенюОбновить - 138 - true - true - - true - - - СписокРасширенийКонтекстноеМенюОбновитьРасширеннаяПодсказка - 139 - Label - true - true - - Left - - - Form.Command.Обновить - Normal - Auto - true - true - UserCmds - Auto - - - СписокРасширенийКонтекстноеМенюГруппа - 119 - - СписокРасширенийКонтекстноеМенюВыделитьВсе - 117 - true - true - - true - - - СписокРасширенийКонтекстноеМенюВыделитьВсеРасширеннаяПодсказка - 118 - Label - true - true - - Left - - - Form.Item.СписокРасширений.StandardCommand.SelectAll - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Список расширений контекстное меню группа</value> - - - СписокРасширенийКонтекстноеМенюГруппаРасширеннаяПодсказка - 120 - Label - true - true - - Left - - - - - - СписокРасширенийКонтекстноеМенюОбновитьИзФайлаНаДиске - 64 - true - true - - true - - - СписокРасширенийКонтекстноеМенюОбновитьИзФайлаНаДискеРасширеннаяПодсказка - 65 - Label - true - true - - Left - - - Form.Command.ОбновитьИзФайлаНаДиске - Normal - Auto - true - true - UserCmds - Auto - - - СписокРасширенийКонтекстноеМенюСохранитьКак - 66 - true - true - - true - - - СписокРасширенийКонтекстноеМенюСохранитьКакРасширеннаяПодсказка - 67 - Label - true - true - - Left - - - Form.Command.СохранитьКак - Normal - Auto - true - true - UserCmds - Auto - - - true - true - true - true - true - MultiRow -
        true
        - 1 - 1 - AutoUse - AutoUse - true - true - true - Auto - Auto - true - true - true - true - - CommonPicture.СостоянияРасширенийКонфигурации - - true - -
        - true - true - - true - - - <key>ru</key> - <value>Страница список расширений</value> - - - СтраницаСписокРасширенийРасширеннаяПодсказка - 109 - Label - true - true - - Left - - - Page - - Vertical - auto - false - -
        - - СтраницаДлительнаяОперация - 103 - - ДлительнаяОперация - 105 - true - true - - true - - - ДлительнаяОперацияРасширеннаяПодсказка - 107 - Label - true - true - - Left - - - - ДлительнаяОперацияКонтекстноеМеню - 106 - true - - true - true - - - CommonPicture.ДлительнаяОперация48 - - - - - ДлительнаяОперацияНадпись - 110 - - <key>ru</key> - <value>Выполняется подготовка расширений к использованию. Пожалуйста, подождите...</value> - - true - true - - true - - - ДлительнаяОперацияНадписьРасширеннаяПодсказка - 112 - Label - true - true - - Left - - - - ДлительнаяОперацияНадписьКонтекстноеМеню - 111 - true - - Label - 3 - true - - Left - Center - - - true - true - - true - - - <key>ru</key> - <value>Страница длительная операция</value> - - - СтраницаДлительнаяОперацияРасширеннаяПодсказка - 104 - Label - true - true - - Left - - - Page - - auto - false - - + + Легенда + 181 + + <key>ru</key> + <value><bgcolor #63dc87> </> Подключено при входе в программу +<fontsize 6> </> +<bgcolor #929292> </> Будет подключено после перезапуска программы +<fontsize 6> </> +<bgcolor #fb7158> </> Не удалось подключить при входе в программу</value> + true true true - - <key>ru</key> - <value>Страницы обновление</value> - - СтраницыОбновлениеРасширеннаяПодсказка - 102 + ЛегендаРасширеннаяПодсказка + 183 Label true true @@ -1379,13 +1446,17 @@ Left - Pages - - - OnCurrentPageChange - СтраницыОбновлениеПриСменеСтраницы - - Auto + + ЛегендаКонтекстноеМеню + 182 + true + + true + Label + true + true + + Left true @@ -1395,11 +1466,11 @@ <key>ru</key> - <value>Страница разделенный режим</value> + <value>Страница список расширений</value> - СтраницаРазделенныйРежимРасширеннаяПодсказка - 155 + СтраницаСписокРасширенийРасширеннаяПодсказка + 109 Label true true @@ -1415,23 +1486,19 @@
        - СтраницаНеразделенныйРежим - 145 + СтраницаДлительнаяОперация + 103 - НеразделенныйРежим - 147 - - <key>ru</key> - <value>Для работы с расширениями выполните вход в область данных.</value> - + ДлительнаяОперация + 105 true true true - НеразделенныйРежимРасширеннаяПодсказка - 149 + ДлительнаяОперацияРасширеннаяПодсказка + 107 Label true true @@ -1440,15 +1507,51 @@ - НеразделенныйРежимКонтекстноеМеню - 148 + ДлительнаяОперацияКонтекстноеМеню + 106 + true + + true + true + + + CommonPicture.ДлительнаяОперация48 + + + + + ПожалуйстаПодождите + 110 + + <key>ru</key> + <value>Выполняется подготовка расширений к использованию. Пожалуйста, подождите...</value> + + true + true + + true + + + ПожалуйстаПодождитеРасширеннаяПодсказка + 112 + Label + true + true + + Left + + + + ПожалуйстаПодождитеКонтекстноеМеню + 111 true Label - true + 3 true Left + Center true @@ -1458,11 +1561,11 @@ <key>ru</key> - <value>Страница неразделенный режим</value> + <value>Страница длительная операция</value> - СтраницаНеразделенныйРежимРасширеннаяПодсказка - 146 + СтраницаДлительнаяОперацияРасширеннаяПодсказка + 104 Label true true @@ -1472,7 +1575,7 @@ Page - Vertical + AlwaysHorizontal auto false @@ -1484,11 +1587,11 @@ <key>ru</key> - <value>Страницы режим работы</value> + <value>Страницы обновление</value> - СтраницыРежимРаботыРасширеннаяПодсказка - 153 + СтраницыОбновлениеРасширеннаяПодсказка + 102 Label true true @@ -1512,6 +1615,10 @@ NotificationProcessing ОбработкаОповещения + + OnOpen + ПриОткрытии + OnCreateAtServer ПриСозданииНаСервере @@ -1709,12 +1816,121 @@ true + + ПередаватьВПодчиненныеУзлыРИБ + + <key>ru</key> + <value>Передавать в подчиненные узлы РИБ</value> + + 10 + + Boolean + + + true + + + true + + + + Общее + + <key>ru</key> + <value>Общее</value> + + 11 + + Boolean + + + true + + + true + + + + ПолученоИзГлавногоУзлаРИБ + + <key>ru</key> + <value>Получено из главного узла РИБ</value> + + 12 + + Boolean + + + true + + + true + + + + Подключать + + <key>ru</key> + <value>Подключать</value> + + 13 + + Boolean + + + true + + + true + + + + ПриоритетНазначения + + <key>ru</key> + <value>Приоритет назначения</value> + + 14 + + Number + + 1 + true + + + + true + + + true + + + + НомерПоПорядку + + <key>ru</key> + <value>Номер по порядку</value> + + 15 + + Number + + true + + + + true + + + true + + - РасширенияИзменены + ЭтоНеразделенныйПользовательВОбласти <key>ru</key> - <value>Расширения изменены</value> + <value>Это неразделенный пользователь в области</value> 1 @@ -1727,48 +1943,16 @@ true - - ИдентификаторТекущейСтроки - - <key>ru</key> - <value>Идентификатор текущей строки</value> - - 3 - - - true - - - true - - - - УстановленныеРасширенияДоступны - - <key>ru</key> - <value>Установленные расширения доступны</value> - - 4 - - Boolean - - - true - - - true - - - ОбновитьИзФайлаНаДиске + ОбновитьИзФайла <key>ru</key> - <value>Обновить из файла на диске...</value> + <value>Обновить из файла...</value> 1 ru - Обновить из файла на диске + Обновить из файла на диске... true @@ -1781,6 +1965,7 @@ ОбновитьИзФайлаНаДиске + TextPicture DontUse Auto @@ -1879,6 +2064,28 @@ DontUse Auto + + УстановленныеПатчи + + <key>ru</key> + <value>Установленные исправления (патчи)</value> + + 6 + + ru + Установленные патчи + + + true + + + + УстановленныеПатчи + + + Auto + Auto + diff --git a/SSL/src/CommonForms/Расширения/Help/ru.html b/SSL/src/CommonForms/Расширения/Help/ru.html index 0f27ed21e..5c4ae7088 100644 --- a/SSL/src/CommonForms/Расширения/Help/ru.html +++ b/SSL/src/CommonForms/Расширения/Help/ru.html @@ -3,8 +3,11 @@

        Подробнее о расширениях и работе с ними см. сайт.

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

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

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

          В списке с помощью значков отображается состояние расширений. Расширение может быть:

          • подключено (тогда в списке зеленый кружок). Подробнее о подключении расширений см. http://its.1c.ru/db/v837doc#bookmark:dev:TI000001534;
            @@ -12,7 +15,9 @@
            не подключено (тогда в списке красный кружок);
          • установлено (тогда в списке серый кружок) - после перезапуска будет либо подключено, либо не подключено.

          Добавление расширения

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

            Удаление расширения

            @@ -22,13 +27,13 @@
            Удаление расширения не отключает его. Все сеансы, запущенные после добавления расширения и до его удаления, продолжат работу с удаленным расширением.
          • В новых сеансах удаленное расширение более не подключится.

          Перезапуск программы

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

            Сохранение расширения в файл

            • Выделите расширение, в контекстном меню по правой кнопке мыши нажмите Сохранить как, укажите путь к файлу на компьютере.

            Обновление расширения

            • -
              Выделите расширение, в контекстном меню по правой кнопке мыши нажмите Обновить из файла на диске, укажите путь к файлу на компьютере.
              +
              Выделите расширение, нажмите Обновить из файла, укажите путь к файлу на компьютере.
            • -
              Следует использовать эту команду для установки новой версии расширения.
              +
              Следует использовать эту кнопку для установки новой версии расширения.
            • Также нужно использовать эту возможность для возврата к предыдущей версии, если новая версия содержит ошибку (однако не рекомендуется устанавливать расширение меньшей версии, т.к. это может привести к потере сделанных настроек).
            \ No newline at end of file diff --git a/SSL/src/CommonForms/Расширения/Module.bsl b/SSL/src/CommonForms/Расширения/Module.bsl index e89523e7b..e3a475b32 100644 --- a/SSL/src/CommonForms/Расширения/Module.bsl +++ b/SSL/src/CommonForms/Расширения/Module.bsl @@ -10,14 +10,14 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + УстановитьУсловноеОформление(); + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; НавигационнаяСсылка = "e1cib/app/ОбщаяФорма.Расширения"; - УстановитьРежимРаботы(ЭтотОбъект, ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных()); - Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда ВызватьИсключение НСтр("ru = 'Недостаточно прав доступа. Обратитесь к администратору.'"); КонецЕсли; @@ -35,30 +35,38 @@ Элементы.СписокРасширений.ТолькоПросмотр = Истина; Элементы.СписокРасширенийДобавить.Видимость = Ложь; Элементы.СписокРасширенийУдалить.Видимость = Ложь; - Элементы.СписокРасширенийОбновитьИзФайлаНаДиске.Видимость = Ложь; + Элементы.СписокРасширенийОбновитьИзФайла.Видимость = Ложь; Элементы.СписокРасширенийСохранитьКак.Видимость = Ложь; Элементы.СписокРасширенийКонтекстноеМенюДобавить.Видимость = Ложь; Элементы.СписокРасширенийКонтекстноеМенюУдалить.Видимость = Ложь; - Элементы.СписокРасширенийКонтекстноеМенюОбновитьИзФайлаНаДиске.Видимость = Ложь; + Элементы.СписокРасширенийКонтекстноеМенюОбновитьИзФайла.Видимость = Ложь; Элементы.СписокРасширенийКонтекстноеМенюСохранитьКак.Видимость = Ложь; КонецЕсли; - УстановленныеРасширенияДоступны = Справочники.ВерсииРасширений.УстановленныеРасширенияДоступны(); - Элементы.СписокРасширенийПодключено.Видимость = УстановленныеРасширенияДоступны; + Элементы.СписокРасширенийОбщее.Видимость = ОбщегоНазначения.РазделениеВключено(); + Элементы.СписокРасширенийПолученоИзГлавногоУзлаРИБ.Видимость = ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ(); + Элементы.СписокРасширенийПередаватьВПодчиненныеУзлыРИБ.Видимость = СтандартныеПодсистемыПовтИсп.ИспользуетсяРИБ(); + + Элементы.ФормаУстановленныеПатчи.Видимость = + ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеКонфигурации"); ОбновитьСписок(); КонецПроцедуры +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + УстановитьДоступностьКнопокКомандныхПанелей() + +КонецПроцедуры + &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - Если ИмяСобытия = "ВыполненВыходИзОбластиДанных" Тогда - УстановитьРежимРаботы(ЭтотОбъект, Ложь); - ПодключитьОбработчикОжидания("ОбновитьСписокОбработчикОжидания", 0.1, Истина); + Если ИмяСобытия = "ВыполненВыходИзОбластиДанных" + Или ИмяСобытия = "ВыполненВходВОбластьДанных" Тогда - ИначеЕсли ИмяСобытия = "ВыполненВходВОбластьДанных" Тогда - УстановитьРежимРаботы(ЭтотОбъект, Истина); ПодключитьОбработчикОжидания("ОбновитьСписокОбработчикОжидания", 0.1, Истина); КонецЕсли; @@ -74,22 +82,6 @@ ЗавершитьРаботуСистемы(Ложь, Истина); КонецПроцедуры -&НаКлиенте -Процедура СтраницыОбновлениеПриСменеСтраницы(Элемент, ТекущаяСтраница) - - Если Элементы.СписокРасширенийДобавить.Доступность - И Элементы.СтраницыОбновление.ТекущаяСтраница = Элементы.СтраницаДлительнаяОперация Тогда - - Элементы.СтраницыОбновление.ТекущаяСтраница = Элементы.СтраницаСписокРасширений; - - ИначеЕсли Не Элементы.СписокРасширенийДобавить.Доступность - И Элементы.СтраницыОбновление.ТекущаяСтраница = Элементы.СтраницаСписокРасширений Тогда - - Элементы.СтраницыОбновление.ТекущаяСтраница = Элементы.СтраницаДлительнаяОперация; - КонецЕсли; - -КонецПроцедуры - #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыСписокРасширений @@ -97,11 +89,7 @@ &НаКлиенте Процедура СписокРасширенийПриАктивизацииСтроки(Элемент) - Если Элементы.СписокРасширений.ТекущиеДанные <> Неопределено Тогда - ИдентификаторТекущейСтроки = Элементы.СписокРасширений.ТекущаяСтрока; - Иначе - ИдентификаторТекущейСтроки = Неопределено; - КонецЕсли; + УстановитьДоступностьКнопокКомандныхПанелей(); КонецПроцедуры @@ -133,6 +121,48 @@ КонецПроцедуры +&НаКлиенте +Процедура СписокРасширенийПодключатьПриИзменении(Элемент) + + ТекущееРасширение = Элементы.СписокРасширений.ТекущиеДанные; + Если ТекущееРасширение = Неопределено Тогда + Возврат; + КонецЕсли; + + ИдентификаторСтроки = ТекущееРасширение.ПолучитьИдентификатор(); + + Если Не ТекущееРасширение.Подключать Тогда + + Контекст = Новый Структура; + Контекст.Вставить("ИдентификаторСтроки", ИдентификаторСтроки); + + Оповещение = Новый ОписаниеОповещения("ОтключитьРасширениеПослеПодтверждения", ЭтотОбъект, Контекст); + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Ключ", "ПередОтключениемРасширения"); + + ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы,,,,, Оповещение) + + Иначе + + СписокРасширенийПодключатьПриИзмененииНаСервере(ИдентификаторСтроки); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СписокРасширенийПередаватьВПодчиненныеУзлыРИБПриИзменении(Элемент) + + ТекущееРасширение = Элементы.СписокРасширений.ТекущиеДанные; + Если ТекущееРасширение = Неопределено Тогда + Возврат; + КонецЕсли; + + СписокРасширенийПередаватьВПодчиненныеУзлыРИБПриИзмененииНаСервере(ТекущееРасширение.ПолучитьИдентификатор()); + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -182,21 +212,13 @@ Диалог.Фильтр = НСтр("ru = 'Файлы расширений конфигурации (*.cfe)|*.cfe|Все файлы (*.*)|*.*'"); Диалог.МножественныйВыбор = Ложь; - НачатьПолучениеФайлов(Новый ОписаниеОповещения("СохранитьКакПослеПолученияФайлов", ЭтотОбъект, Контекст), - ПолучаемыеФайлы, Диалог); + НачатьПолучениеФайлов(Новый ОписаниеОповещения, ПолучаемыеФайлы, Диалог); Иначе ПолучитьФайл(Контекст.Адрес, Контекст.НачальноеИмяФайла); КонецЕсли; КонецПроцедуры -&НаКлиенте -Процедура СохранитьКакПослеПолученияФайлов(ПолученныеФайлы, Контекст) Экспорт - - Возврат; - -КонецПроцедуры - &НаКлиенте Процедура ОбновитьИзФайлаНаДиске(Команда) @@ -230,23 +252,20 @@ КонецПроцедуры -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -&НаКлиентеНаСервереБезКонтекста -Процедура УстановитьРежимРаботы(Форма, РазделенныйРежим = Истина) +&НаКлиенте +Процедура УстановленныеПатчи(Команда) - Элементы = Форма.Элементы; - - Если РазделенныйРежим Тогда - Элементы.СтраницыРежимРаботы.ТекущаяСтраница = Элементы.СтраницаРазделенныйРежим; - Иначе - Элементы.СтраницыРежимРаботы.ТекущаяСтраница = Элементы.СтраницаНеразделенныйРежим; + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеКонфигурации") Тогда + МодульОбновлениеКонфигурацииКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбновлениеКонфигурацииКлиент"); + МодульОбновлениеКонфигурацииКлиент.ПоказатьУстановленныеИсправления(); КонецЕсли; КонецПроцедуры +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + &НаКлиенте Процедура ОбновитьСписокОбработчикОжидания() @@ -257,15 +276,11 @@ &НаСервере Процедура ОбновитьСписок(ПослеДобавления = Ложь) - Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда - СписокРасширений.Очистить(); - Возврат; - КонецЕсли; - Если ПослеДобавления Тогда ИндексТекущейСтроки = СписокРасширений.Количество(); Иначе ИндексТекущейСтроки = 0; + ИдентификаторТекущейСтроки = Элементы.СписокРасширений.ТекущаяСтрока; Если ИдентификаторТекущейСтроки <> Неопределено Тогда Строка = СписокРасширений.НайтиПоИдентификатору(ИдентификаторТекущейСтроки); Если Строка <> Неопределено Тогда @@ -278,28 +293,55 @@ УстановитьПривилегированныйРежим(Истина); Расширения = РасширенияКонфигурации.Получить(); - Если УстановленныеРасширенияДоступны Тогда - ПодключенныеРасширения = ИдентификаторыРасширений(ИсточникРасширенийКонфигурации.СеансАктивные); - ОтключенныеРасширения = ИдентификаторыРасширений(ИсточникРасширенийКонфигурации.СеансОтключенные); - КонецЕсли; + ПодключенныеРасширения = ИдентификаторыРасширений(ИсточникРасширенийКонфигурации.СеансАктивные); + ОтключенныеРасширения = ИдентификаторыРасширений(ИсточникРасширенийКонфигурации.СеансОтключенные); УстановитьПривилегированныйРежим(Ложь); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеКонфигурации") Тогда + + МодульОбновлениеКонфигурации = ОбщегоНазначения.ОбщийМодуль("ОбновлениеКонфигурации"); + + ИсключаемыеРасширения = Новый Массив; + + Для Каждого Расширение Из Расширения Цикл + Если МодульОбновлениеКонфигурации.ЭтоИсправление(Расширение) Тогда + ИсключаемыеРасширения.Добавить(Расширение); + КонецЕсли; + КонецЦикла; + + Для Каждого ИсключаемоеРасширение Из ИсключаемыеРасширения Цикл + Индекс = Расширения.Найти(ИсключаемоеРасширение); + Если Индекс <> Неопределено Тогда + Расширения.Удалить(Индекс); + КонецЕсли; + КонецЦикла; + + КонецЕсли; + Для Каждого Расширение Из Расширения Цикл - ЭлементРасширения = СписокРасширений.Добавить(); - ЭлементРасширения.ИдентификаторРасширения = Расширение.УникальныйИдентификатор; - ЭлементРасширения.Имя = Расширение.Имя; - ЭлементРасширения.Версия = Расширение.Версия; - ЭлементРасширения.КонтрольнаяСумма = Base64Строка(Расширение.ХешСумма); - ЭлементРасширения.Синоним = Расширение.Синоним; - ЭлементРасширения.Назначение = Расширение.Назначение; - ЭлементРасширения.БезопасныйРежим = Расширение.БезопасныйРежим; + ЭлементРасширения.ИдентификаторРасширения = Расширение.УникальныйИдентификатор; + ЭлементРасширения.Имя = Расширение.Имя; + ЭлементРасширения.Версия = Расширение.Версия; + ЭлементРасширения.КонтрольнаяСумма = Base64Строка(Расширение.ХешСумма); + ЭлементРасширения.Синоним = Расширение.Синоним; + ЭлементРасширения.Назначение = Расширение.Назначение; + ЭлементРасширения.БезопасныйРежим = Расширение.БезопасныйРежим; + ЭлементРасширения.Подключать = Расширение.Активно; + ЭлементРасширения.ПолученоИзГлавногоУзлаРИБ = Расширение.ГлавныйУзел <> Неопределено; + ЭлементРасширения.ПередаватьВПодчиненныеУзлыРИБ = Расширение.ИспользуетсяВРаспределеннойИнформационнойБазе; + ЭлементРасширения.НомерПоПорядку = Расширения.Найти(Расширение) + 1; - Если УстановленныеРасширенияДоступны Тогда - ЭлементРасширения.Подключено = - ?(ПодключенныеРасширения[Расширение.Имя + Расширение.ХешСумма] <> Неопределено, 0, - ?(ОтключенныеРасширения[Расширение.Имя + Расширение.ХешСумма] <> Неопределено, 2, 1)); - КонецЕсли; + ЭлементРасширения.Общее = + Расширение.ОбластьДействия = ОбластьДействияРасширенияКонфигурации.ИнформационнаяБаза; + + ЭлементРасширения.ПриоритетНазначения = + ?(Расширение.Назначение = Метаданные.СвойстваОбъектов.НазначениеРасширенияКонфигурации.Исправление, 1, + ?(Расширение.Назначение = Метаданные.СвойстваОбъектов.НазначениеРасширенияКонфигурации.Адаптация, 2, 3)); + + ЭлементРасширения.Подключено = + ?(ПодключенныеРасширения[Расширение.Имя + Расширение.ХешСумма + Расширение.ОбластьДействия] <> Неопределено, 0, + ?(ОтключенныеРасширения[Расширение.Имя + Расширение.ХешСумма + Расширение.ОбластьДействия] <> Неопределено, 2, 1)); Если ПустаяСтрока(ЭлементРасширения.Синоним) Тогда ЭлементРасширения.Синоним = ЭлементРасширения.Имя; @@ -311,6 +353,7 @@ ЭлементРасширения.БезопасныйРежимФлаг = Истина; КонецЕсли; КонецЦикла; + СписокРасширений.Сортировать("ПолученоИзГлавногоУзлаРИБ УБЫВ, ПриоритетНазначения, Общее УБЫВ, НомерПоПорядку"); Если ИндексТекущейСтроки >= СписокРасширений.Количество() Тогда ИндексТекущейСтроки = СписокРасширений.Количество() - 1; @@ -320,14 +363,16 @@ ИндексТекущейСтроки).ПолучитьИдентификатор(); КонецЕсли; - Если УстановленныеРасширенияДоступны Тогда - Элементы.ГруппаПредупреждение.Видимость = ПараметрыСеанса.УстановленныеРасширения - <> Справочники.ВерсииРасширений.КонтрольныеСуммыРасширений(СписокРасширений); - Элементы.ГруппаИнформация.Видимость = Ложь; - Иначе - Элементы.ГруппаПредупреждение.Видимость = Ложь; - Элементы.ГруппаИнформация.Видимость = Истина; - КонецЕсли; + УстановитьПривилегированныйРежим(Истина); + УстановленныеРасширения = Справочники.ВерсииРасширений.УстановленныеРасширения(); + Элементы.ГруппаПредупреждение.Видимость = + ПараметрыСеанса.УстановленныеРасширения.Основные <> УстановленныеРасширения.Основные; + УстановитьПривилегированныйРежим(Ложь); + + // Обновление реквизита формы для условного форматирования. + ЭтоНеразделенныйПользовательВОбласти = ЭтоНеразделенныйПользовательВОбласти(); + + Элементы.ГруппаИнформация.Видимость = ЭтоНеразделенныйПользовательВОбласти; КонецПроцедуры @@ -338,7 +383,7 @@ Идентификаторы = Новый Соответствие; Для Каждого Расширение Из Расширения Цикл - Идентификаторы.Вставить(Расширение.Имя + Расширение.ХешСумма, Истина); + Идентификаторы.Вставить(Расширение.Имя + Расширение.ХешСумма + Расширение.ОбластьДействия, Истина); КонецЦикла; Возврат Идентификаторы; @@ -396,40 +441,54 @@ &НаКлиенте Процедура УдалитьРасширения(ВыделенныеСтроки) - + Если ВыделенныеСтроки.Количество() = 0 Тогда Возврат; КонецЕсли; + Если ВыделенныеСтроки.Количество() = 1 Тогда + ТекущееРасширение = Элементы.СписокРасширений.ТекущиеДанные; + + Если ТекущееРасширение.Общее + И ЭтоНеразделенныйПользовательВОбласти + Или ТекущееРасширение.ПолученоИзГлавногоУзлаРИБ Тогда + + // Если нажали на клавиатуре Del, и выделена одна строка, + // с общим расширением в сеансе с разделителями + // или в подчиненном узле РИБ, полученное из главного узла, + // то нажатие игнорируется. + Возврат; + КонецЕсли; + КонецЕсли; + Контекст = Новый Структура; Контекст.Вставить("ВыделенныеСтроки", ВыделенныеСтроки); Оповещение = Новый ОписаниеОповещения("УдалитьРасширениеПослеПодтверждения", ЭтотОбъект, Контекст); - Если ВыделенныеСтроки.Количество() > 1 Тогда - ТекстВопроса = НСтр("ru = 'Удалить выделенные расширения?'", "ru"); - Иначе - ТекстВопроса = НСтр("ru = 'Удалить расширение?'", "ru"); - КонецЕсли; - - ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет); - + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Ключ", "ПередУдалениемРасширения"); + ПараметрыФормы.Вставить("МножественныйВыбор", ВыделенныеСтроки.Количество() > 1); + + ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы,,,,, Оповещение) + КонецПроцедуры &НаКлиенте Процедура УдалитьРасширениеПослеПодтверждения(Результат, Контекст) Экспорт - Если Результат = КодВозвратаДиалога.Да Тогда - - Обработчик = Новый ОписаниеОповещения("УдалитьРасширениеПродолжение", ЭтотОбъект, Контекст); - - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда - Запросы = ЗапросНаОтменуРазрешенийИспользованияВнешнегоМодуля(Контекст.ВыделенныеСтроки); - МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент"); - МодульРаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, Обработчик); - Иначе - ВыполнитьОбработкуОповещения(Обработчик, КодВозвратаДиалога.ОК); - КонецЕсли; - + Если Результат <> "Продолжить" Тогда + Возврат; + КонецЕсли; + + Оповещение = Новый ОписаниеОповещения("УдалитьРасширениеПродолжение", ЭтотОбъект, Контекст); + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда + Запросы = ЗапросыНаОтменуРазрешенийИспользованияВнешнегоМодуля(Контекст.ВыделенныеСтроки); + МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент"); + МодульРаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, Оповещение); + Иначе + ВыполнитьОбработкуОповещения(Оповещение, КодВозвратаДиалога.ОК); КонецЕсли; КонецПроцедуры @@ -465,71 +524,89 @@ &НаСервере Процедура УдалитьРасширенияНаСервере(ВыделенныеСтроки) - ПроверитьДоступностьРазделенныхДанных(); - - УдаленныеРасширения = Новый Массив; - - НачатьТранзакцию(); - Попытка - Для Каждого ИдентификаторСтроки Из ВыделенныеСтроки Цикл - ТекущееРасширение = СписокРасширений.НайтиПоИдентификатору(ИдентификаторСтроки); - Расширение = НайтиРасширение(ТекущееРасширение.ИдентификаторРасширения); - Если Расширение <> Неопределено Тогда - ОписаниеРасширения = Новый Структура; - ОписаниеРасширения.Вставить("Расширение", Расширение); - ОписаниеРасширения.Вставить("ДанныеРасширения", Расширение.ПолучитьДанные()); - УдаленныеРасширения.Добавить(ОписаниеРасширения); - КонецЕсли; - КонецЦикла; - Для Каждого ОписаниеРасширения Из УдаленныеРасширения Цикл - ОтключитьПредупрежденияБезопасности(ОписаниеРасширения.Расширение); - ОписаниеРасширения.Расширение.Удалить(); - КонецЦикла; - Если РасширенияКонфигурации.Получить().Количество() = 0 Тогда - Справочники.ВерсииРасширений.ПриУдаленииВсехРасширений(); - КонецЕсли; - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ИнформацияОбОшибке = ИнформацияОбОшибке(); - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось удалить по причине: - | - |%1'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); - ВызватьИсключение ТекстОшибки; - КонецПопытки; + УдаляемыеРасширения = Новый Массив; ТекстОшибки = ""; Попытка - ОбновитьПараметрыРаботыРасширений(); - РасширенияИзменены = Истина; + УдаляемоеРасширение = ""; + Для Каждого ЭлементСписка Из СписокРасширений Цикл + Если ВыделенныеСтроки.Найти(ЭлементСписка.ПолучитьИдентификатор()) = Неопределено Тогда + Продолжить; + КонецЕсли; + Расширение = НайтиРасширение(ЭлементСписка.ИдентификаторРасширения); + Если Расширение <> Неопределено Тогда + ОписаниеРасширения = Новый Структура; + ОписаниеРасширения.Вставить("Удалено", Ложь); + ОписаниеРасширения.Вставить("Расширение", Расширение); + ОписаниеРасширения.Вставить("ДанныеРасширения", Расширение.ПолучитьДанные()); + УдаляемыеРасширения.Добавить(ОписаниеРасширения); + КонецЕсли; + КонецЦикла; + Индекс = УдаляемыеРасширения.Количество() - 1; + Пока Индекс >= 0 Цикл + ОписаниеРасширения = УдаляемыеРасширения[Индекс]; + ОтключитьПредупрежденияБезопасности(ОписаниеРасширения.Расширение); + УдаляемоеРасширение = ОписаниеРасширения.Расширение.Синоним; + ОписаниеРасширения.Расширение.Удалить(); + УдаляемоеРасширение = ""; + ОписаниеРасширения.Удалено = Истина; + Индекс = Индекс - 1; + КонецЦикла; + + Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() + И РасширенияКонфигурации.Получить().Количество() = 0 Тогда + + Справочники.ВерсииРасширений.ПриУдаленииВсехРасширений(); + КонецЕсли; Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); - НачатьТранзакцию(); - Попытка - Для Каждого ОписаниеРасширения Из УдаленныеРасширения Цикл - ОписаниеРасширения.Расширение.Записать(ОписаниеРасширения.ДанныеРасширения); - КонецЦикла; - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ТекущаяИнформацияОбОшибке = ИнформацияОбОшибке(); - ТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке) + Символы.ПС + Символы.ПС - + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'При попытке восстановить удаленные расширения произошла еще одна ошибка: - |%1'"), КраткоеПредставлениеОшибки(ТекущаяИнформацияОбОшибке)); - КонецПопытки; - Если Не ЗначениеЗаполнено(ТекстОшибки) Тогда - ТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке) + Символы.ПС + Символы.ПС - + НСтр("ru = 'Удаленные расширения были восстановлены.'"); - КонецЕсли; + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось удалить расширение ""%1"" по причине: + | + |%2'"), + УдаляемоеРасширение, + КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); КонецПопытки; + Если Не ЗначениеЗаполнено(ТекстОшибки) Тогда + Попытка + РегистрыСведений.ПараметрыРаботыВерсийРасширений.ОбновитьПараметрыРаботыРасширений(); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'После удаления, при подготовке оставшихся расширений к работе, произошла ошибка: + | + |%1'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + КонецПопытки; + КонецЕсли; + + Если ЗначениеЗаполнено(ТекстОшибки) Тогда + ИнформацияОбОшибкеВосстановления = Неопределено; + ВосстановлениеВыполнялось = Ложь; + Попытка + Для Каждого ОписаниеРасширения Из УдаляемыеРасширения Цикл + Если Не ОписаниеРасширения.Удалено Тогда + Продолжить; + КонецЕсли; + ОписаниеРасширения.Расширение.Записать(ОписаниеРасширения.ДанныеРасширения); + ВосстановлениеВыполнялось = Истина; + КонецЦикла; + Исключение + ИнформацияОбОшибкеВосстановления = ИнформацияОбОшибке(); + ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При попытке восстановить удаленные расширения произошла еще одна ошибка: + |%1'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибкеВосстановления)); + КонецПопытки; + Если ВосстановлениеВыполнялось + И ИнформацияОбОшибкеВосстановления = Неопределено Тогда + + ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС + + НСтр("ru = 'Удаленные расширения были восстановлены.'"); + КонецЕсли; + КонецЕсли; + Если ЗначениеЗаполнено(ТекстОшибки) Тогда - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'После удаления, при подготовке оставшихся расширений к работе, произошла ошибка: - | - |%1'"), ТекстОшибки); ВызватьИсключение ТекстОшибки; КонецЕсли; @@ -537,11 +614,37 @@ КонецПроцедуры +&НаКлиенте +Процедура ОтключитьРасширениеПослеПодтверждения(Результат, Контекст) Экспорт + + Если Результат <> "Продолжить" Тогда + + СтрокаСписка = СписокРасширений.НайтиПоИдентификатору(Контекст.ИдентификаторСтроки); + + Если СтрокаСписка = Неопределено Тогда + Возврат; + КонецЕсли; + + СтрокаСписка.Подключать = Не СтрокаСписка.Подключать; + + Возврат; + КонецЕсли; + + СписокРасширенийПодключатьПриИзмененииНаСервере(Контекст.ИдентификаторСтроки); + +КонецПроцедуры + &НаСервере -Функция ЗапросНаОтменуРазрешенийИспользованияВнешнегоМодуля(ВыделенныеСтроки) +Функция ЗапросыНаОтменуРазрешенийИспользованияВнешнегоМодуля(ВыделенныеСтроки) + + Запросы = Новый Массив; + + МодульРаботаВБезопасномРежиме = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежиме"); + Если Не МодульРаботаВБезопасномРежиме.ИспользуютсяПрофилиБезопасности() Тогда + Возврат Запросы; + КонецЕсли; Разрешения = Новый Массив; - МодульРаботаВБезопасномРежиме = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежиме"); Для Каждого ИдентификаторСтроки Из ВыделенныеСтроки Цикл ТекущееРасширение = СписокРасширений.НайтиПоИдентификатору(ИдентификаторСтроки); @@ -549,7 +652,6 @@ ТекущееРасширение.Имя, ТекущееРасширение.КонтрольнаяСумма)); КонецЦикла; - Запросы = Новый Массив; Запросы.Добавить(МодульРаботаВБезопасномРежиме.ЗапросНаОтменуРазрешенийИспользованияВнешнихРесурсов( ОбщегоНазначения.ИдентификаторОбъектаМетаданных("РегистрСведений.ПараметрыРаботыВерсийРасширений"), Разрешения)); @@ -561,18 +663,16 @@ &НаКлиенте Процедура ПоказатьДлительнуюОперацию() - Элементы.СписокРасширенийДобавить.Доступность = Ложь; - Элементы.СписокРасширенийУдалить.Доступность = Ложь; Элементы.СтраницыОбновление.ТекущаяСтраница = Элементы.СтраницаДлительнаяОперация; + УстановитьДоступностьКнопокКомандныхПанелей(); КонецПроцедуры &НаКлиенте Процедура СкрытьДлительнуюОперацию() - Элементы.СписокРасширенийДобавить.Доступность = Истина; - Элементы.СписокРасширенийУдалить.Доступность = Истина; Элементы.СтраницыОбновление.ТекущаяСтраница = Элементы.СтраницаСписокРасширений; + УстановитьДоступностьКнопокКомандныхПанелей(); КонецПроцедуры @@ -582,11 +682,11 @@ Контекст = Новый Структура; Контекст.Вставить("ИдентификаторРасширения", ИдентификаторРасширения); Контекст.Вставить("МножественныйВыбор", МножественныйВыбор); - Обработчик = Новый ОписаниеОповещения("ЗагрузитьРасширениеПослеПодтверждения", ЭтотОбъект, Контекст); + Оповещение = Новый ОписаниеОповещения("ЗагрузитьРасширениеПослеПодтверждения", ЭтотОбъект, Контекст); ПараметрыФормы = Новый Структура("Ключ", "ПередДобавлениемРасширений"); - ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы, , , , , Обработчик); + ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы,,,,, Оповещение); КонецПроцедуры @@ -596,8 +696,8 @@ Возврат; КонецЕсли; - Обработчик = Новый ОписаниеОповещения("ЗагрузитьРасширениеПослеУстановкиРасширения", ЭтотОбъект, Контекст); - ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Обработчик); + Оповещение = Новый ОписаниеОповещения("ЗагрузитьРасширениеПослеУстановкиРасширения", ЭтотОбъект, Контекст); + ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение); КонецПроцедуры @@ -642,6 +742,23 @@ Возврат; КонецЕсли; + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеКонфигурации") Тогда + МодульОбновлениеКонфигурацииКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбновлениеКонфигурацииКлиент"); + + Если ВыбранныеФайлыСодержатТолькоИсправления(ПомещенныеФайлы, МодульОбновлениеКонфигурацииКлиент) Тогда + + ПараметрыРезервногоКопирования = Новый Структура; + ПараметрыРезервногоКопирования.Вставить("ВыбранныеФайлы", ВыбранныеФайлыПоОписанию(ПомещенныеФайлы)); + МодульОбновлениеКонфигурацииКлиент.ПоказатьПоискИУстановкуОбновлений(ПараметрыРезервногоКопирования); + Возврат; + + ИначеЕсли ВыбранныеФайлыСодержатИсправления(ПомещенныеФайлы, МодульОбновлениеКонфигурацииКлиент) Тогда + ПоказатьПредупреждение(, + НСтр("ru = 'Выбранные файлы не должны одновременно содержать исправления (патчи) и другие виды расширений.'")); + Возврат; + КонецЕсли; + КонецЕсли; + Контекст.Вставить("ПомещенныеФайлы", ПомещенныеФайлы); ОповещениеОЗакрытии = Новый ОписаниеОповещения( @@ -667,6 +784,48 @@ КонецПроцедуры +&НаКлиенте +Функция ВыбранныеФайлыСодержатИсправления(ПомещенныеФайлы, МодульОбновлениеКонфигурацииКлиент) + + Для Каждого ПомещенныйФайл Из ПомещенныеФайлы Цикл + Файл = Новый Файл(ПомещенныйФайл.Имя); + Если МодульОбновлениеКонфигурацииКлиент.ЭтоИсправление(Файл.Имя) Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + Возврат Ложь; + +КонецФункции + +&НаКлиенте +Функция ВыбранныеФайлыСодержатТолькоИсправления(ПомещенныеФайлы, МодульОбновлениеКонфигурацииКлиент) + + Для Каждого ПомещенныйФайл Из ПомещенныеФайлы Цикл + Файл = Новый Файл(ПомещенныйФайл.Имя); + Если Не МодульОбновлениеКонфигурацииКлиент.ЭтоИсправление(Файл.Имя) Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; + +КонецФункции + +&НаКлиенте +Функция ВыбранныеФайлыПоОписанию(ПомещенныеФайлы) + + СписокФайлов = Новый Массив; + + Для Каждого ПомещенныйФайл Из ПомещенныеФайлы Цикл + Файл = Новый Файл(ПомещенныйФайл.Имя); + СписокФайлов.Добавить(Файл.ПолноеИмя); + КонецЦикла; + + Возврат СтрСоединить(СписокФайлов, ", "); + +КонецФункции + &НаКлиенте Процедура ЗагрузитьРасширениеПродолжение(Результат, Контекст) Экспорт @@ -686,15 +845,14 @@ Контекст = ТекущийКонтекст; НеподключенныеРасширения = ""; + РасширенияИзменены = Ложь; Попытка ИзменитьРасширенияНаСервере(Контекст.ПомещенныеФайлы, - Контекст.ИдентификаторРасширения, НеподключенныеРасширения); + Контекст.ИдентификаторРасширения, НеподключенныеРасширения, РасширенияИзменены); Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); ПодключитьОбработчикОжидания("СкрытьДлительнуюОперацию", 0.1, Истина); - ПоказатьПредупреждение(, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'После добавления, при подготовке расширений к работе, произошла ошибка: - |%1'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибке))); + ПоказатьПредупреждение(, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); Возврат; КонецПопытки; ПодключитьОбработчикОжидания("СкрытьДлительнуюОперацию", 0.1, Истина); @@ -733,11 +891,8 @@ КонецПроцедуры &НаСервере -Процедура ИзменитьРасширенияНаСервере(ПомещенныеФайлы, ИдентификаторРасширения, НеподключенныеРасширения) +Процедура ИзменитьРасширенияНаСервере(ПомещенныеФайлы, ИдентификаторРасширения, НеподключенныеРасширения, РасширенияИзменены) - ПроверитьДоступностьРазделенныхДанных(); - - РасширенияИзменены = Ложь; Расширение = Неопределено; Если ИдентификаторРасширения <> Неопределено Тогда @@ -752,70 +907,148 @@ ПроверяемыеРасширения = Новый Соответствие; ДобавленныеРасширения = Новый Массив; - НачатьТранзакцию(); + ТекстОшибки = ""; + НовыеДвоичныеДанныеЗаписаны = Ложь; + ИмяФайлаДобавляемогоРасширения = Неопределено; Попытка Если ИдентификаторРасширения <> Неопределено Тогда ОтключитьПредупрежденияБезопасности(Расширение); - Расширение.Записать(ПолучитьИзВременногоХранилища(ПомещенныеФайлы[0].Хранение)); - Если ПрежнееИмяРасширения <> Расширение.Имя Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Нельзя загрузить расширение ""%1"" в ""%2"".'"), - Расширение.Имя, - ПрежнееИмяРасширения); + НовыеДвоичныеДанные = ПолучитьИзВременногоХранилища(ПомещенныеФайлы[0].Хранение); + Ошибки = Расширение.ПроверитьВозможностьПрименения(НовыеДвоичныеДанные, Ложь); + Для Каждого Ошибка Из Ошибки Цикл + Если Ошибка.Важность <> ВажностьПроблемыПримененияРасширенияКонфигурации.Критичная Тогда + Продолжить; + КонецЕсли; + ТекстОшибки = ТекстОшибки + Символы.ПС + Ошибка.Описание; + КонецЦикла; + Если ЗначениеЗаполнено(ТекстОшибки) Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Новое расширение не может быть применено по причине: + |%1'"), + ТекстОшибки); + Иначе + Расширение.Записать(НовыеДвоичныеДанные); + НовыеДвоичныеДанныеЗаписаны = Истина; + Расширение = НайтиРасширение(ИдентификаторРасширения); + Если ПрежнееИмяРасширения = Расширение.Имя Тогда + ПроверяемыеРасширения.Вставить(Расширение.Имя, Расширение.Синоним); + Иначе + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Нельзя заменить расширение ""%1"" на ""%2"".'"), + ПрежнееИмяРасширения, + Расширение.Имя); + КонецЕсли; КонецЕсли; - ПроверяемыеРасширения.Вставить(Расширение.Имя, Расширение.Синоним); Иначе Для Каждого ПомещенныйФайл Из ПомещенныеФайлы Цикл Расширение = РасширенияКонфигурации.Создать(); ОтключитьПредупрежденияБезопасности(Расширение); + ИмяФайлаДобавляемогоРасширения = ПомещенныйФайл.Имя; Расширение.Записать(ПолучитьИзВременногоХранилища(ПомещенныйФайл.Хранение)); + ИмяФайлаДобавляемогоРасширения = Неопределено; + Расширение = НайтиРасширение(Строка(Расширение.УникальныйИдентификатор)); ДобавленныеРасширения.Вставить(0, Расширение); ПроверяемыеРасширения.Вставить(Расширение.Имя, Расширение.Синоним); КонецЦикла; КонецЕсли; - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - - Попытка - ОбновитьПараметрыРаботыРасширений(ПроверяемыеРасширения, НеподключенныеРасширения); - РасширенияИзменены = Истина; Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); Если ИдентификаторРасширения <> Неопределено Тогда - Расширение.Записать(ДанныеРасширения); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось обновить расширение по причине: + | + |%1'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + + ИначеЕсли ЗначениеЗаполнено(ИмяФайлаДобавляемогоРасширения) Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось добавить расширение из файла + |""%1"" + |по причине: + | + |%2'"), + ИмяФайлаДобавляемогоРасширения, + КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); Иначе - НачатьТранзакцию(); - Попытка + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось добавить по причине: + | + |%1'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + КонецЕсли; + КонецПопытки; + + Если Не ЗначениеЗаполнено(ТекстОшибки) Тогда + Попытка + РегистрыСведений.ПараметрыРаботыВерсийРасширений.ОбновитьПараметрыРаботыРасширений(ПроверяемыеРасширения, НеподключенныеРасширения); + РасширенияИзменены = Истина; + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'После добавления, при подготовке расширений к работе, произошла ошибка: + | + |%1'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + КонецПопытки; + КонецЕсли; + + Если ЗначениеЗаполнено(ТекстОшибки) Тогда + ИнформацияОбОшибкеВосстановления = Неопределено; + ВосстановлениеВыполнялось = Ложь; + Попытка + Если ИдентификаторРасширения <> Неопределено Тогда + Если НовыеДвоичныеДанныеЗаписаны Тогда + Расширение = НайтиРасширение(ИдентификаторРасширения); + Если Расширение = Неопределено Тогда + Расширение = РасширенияКонфигурации.Создать(); + КонецЕсли; + Расширение.Записать(ДанныеРасширения); + КонецЕсли; + ВосстановлениеВыполнялось = Истина; + Иначе Для Каждого ДобавленноеРасширение Из ДобавленныеРасширения Цикл Отбор = Новый Структура("Имя", ДобавленноеРасширение.Имя); Расширения = РасширенияКонфигурации.Получить(Отбор); Для Каждого Расширение Из Расширения Цикл Если Расширение.ХешСумма = ДобавленноеРасширение.ХешСумма Тогда Расширение.Удалить(); + ВосстановлениеВыполнялось = Истина; КонецЕсли; КонецЦикла; КонецЦикла; - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ТекущаяИнформацияОбОшибке = ИнформацияОбОшибке(); - Если ИдентификаторРасширения <> Неопределено Тогда - ВызватьИсключение КраткоеПредставлениеОшибки(ИнформацияОбОшибке) + Символы.ПС + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + КонецЕсли; + Исключение + ИнформацияОбОшибкеВосстановления = ИнформацияОбОшибке(); + Если ИдентификаторРасширения <> Неопределено Тогда + ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'При попытке восстановить измененное расширение произошла еще одна ошибка: - |%1'"), КраткоеПредставлениеОшибки(ТекущаяИнформацияОбОшибке)); - Иначе - ВызватьИсключение КраткоеПредставлениеОшибки(ИнформацияОбОшибке) + Символы.ПС + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + |%1'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибкеВосстановления)); + Иначе + ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'При попытке удалить добавленные расширения произошла еще одна ошибка: - |%1'"), КраткоеПредставлениеОшибки(ТекущаяИнформацияОбОшибке)); + |%1'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибкеВосстановления)); + КонецЕсли; + КонецПопытки; + Если ВосстановлениеВыполнялось + И ИнформацияОбОшибкеВосстановления = Неопределено Тогда + + Если ИдентификаторРасширения <> Неопределено Тогда + Если НовыеДвоичныеДанныеЗаписаны Тогда + ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС + + НСтр("ru = 'Измененное расширение было восстановлено.'"); + Иначе + ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС + + НСтр("ru = 'Расширение не было изменено.'"); КонецЕсли; - КонецПопытки; + Иначе + ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС + + НСтр("ru = 'Добавленные расширения были удалены.'"); + КонецЕсли; КонецЕсли; - ВызватьИсключение КраткоеПредставлениеОшибки(ИнформацияОбОшибке) + Символы.ПС + Символы.ПС - + НСтр("ru = 'Добавленные расширения были удалены.'"); - КонецПопытки; + КонецЕсли; + + Если ЗначениеЗаполнено(ТекстОшибки) Тогда + ВызватьИсключение ТекстОшибки; + КонецЕсли; ОбновитьСписок(ИдентификаторРасширения = Неопределено); @@ -853,13 +1086,77 @@ КонецПроцедуры &НаСервере -Функция ДобавитьЗапросРазрешений(ЗапросыРазрешений, ПомещенныеФайлы, ИдентификаторРасширения = Неопределено) +Процедура СписокРасширенийПодключатьПриИзмененииНаСервере(ИдентификаторСтроки) + + СтрокаСписка = СписокРасширений.НайтиПоИдентификатору(ИдентификаторСтроки); + + Если СтрокаСписка = Неопределено Тогда + Возврат; + КонецЕсли; + + Расширение = НайтиРасширение(СтрокаСписка.ИдентификаторРасширения); + + Если Расширение <> Неопределено Тогда + + Если Расширение.Активно <> СтрокаСписка.Подключать Тогда + Расширение.Активно = СтрокаСписка.Подключать; + + ОтключитьПредупрежденияБезопасности(Расширение); + Попытка + Расширение.Записать(); + Исключение + СтрокаСписка.Подключать = Не СтрокаСписка.Подключать; + ВызватьИсключение; + КонецПопытки; + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура СписокРасширенийПередаватьВПодчиненныеУзлыРИБПриИзмененииНаСервере(ИдентификаторСтроки) + + СтрокаСписка = СписокРасширений.НайтиПоИдентификатору(ИдентификаторСтроки); + + Если СтрокаСписка = Неопределено Тогда + Возврат; + КонецЕсли; + + Расширение = НайтиРасширение(СтрокаСписка.ИдентификаторРасширения); + + Если Расширение <> Неопределено Тогда + + Если Расширение.ИспользуетсяВРаспределеннойИнформационнойБазе <> СтрокаСписка.ПередаватьВПодчиненныеУзлыРИБ Тогда + Расширение.ИспользуетсяВРаспределеннойИнформационнойБазе = СтрокаСписка.ПередаватьВПодчиненныеУзлыРИБ; + + ОтключитьПредупрежденияБезопасности(Расширение); + Попытка + Расширение.Записать(); + Исключение + СтрокаСписка.ПередаватьВПодчиненныеУзлыРИБ = Не СтрокаСписка.ПередаватьВПодчиненныеУзлыРИБ; + ВызватьИсключение; + КонецПопытки; + + СтрокаСписка.ПередаватьВПодчиненныеУзлыРИБ = СтрокаСписка.ПередаватьВПодчиненныеУзлыРИБ; + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ДобавитьЗапросРазрешений(ЗапросыРазрешений, ПомещенныеФайлы, ИдентификаторРасширения = Неопределено) - Разрешения = Новый Массив; МодульРаботаВБезопасномРежиме = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежиме"); + Если Не МодульРаботаВБезопасномРежиме.ИспользуютсяПрофилиБезопасности() Тогда + Возврат; + КонецЕсли; + Разрешения = Новый Массив; Для Каждого ПомещенныйФайл Из ПомещенныеФайлы Цикл - НачатьТранзакцию(); + ДанныеОбновляемогоРасширения = Неопределено; + ТребуетсяВосстановление = Ложь; Попытка Если ИдентификаторРасширения = Неопределено Тогда ВременноеРасширение = РасширенияКонфигурации.Создать(); @@ -870,19 +1167,87 @@ НСтр("ru = 'Текущее расширение не найдено в базе данных, |возможно оно было удалено в другом сеансе.'"); КонецЕсли; + ДанныеОбновляемогоРасширения = ВременноеРасширение.ПолучитьДанные(); КонецЕсли; ОтключитьПредупрежденияБезопасности(ВременноеРасширение); - ВременноеРасширение.Записать(ПолучитьИзВременногоХранилища(ПомещенныйФайл.Хранение)); + ДанныеРасширения = ПолучитьИзВременногоХранилища(ПомещенныйФайл.Хранение); + ВременноеРасширение.Записать(ДанныеРасширения); + ТребуетсяВосстановление = Истина; + ВременноеРасширение = НайтиРасширение(Строка(ВременноеРасширение.УникальныйИдентификатор)); + СвойстваВременногоРасширения = Новый Структура; + СвойстваВременногоРасширения.Вставить("Имя", ВременноеРасширение.Имя); + СвойстваВременногоРасширения.Вставить("ХешСумма", ВременноеРасширение.ХешСумма); Если ИдентификаторРасширения = Неопределено Тогда ВременноеРасширение.Удалить(); + Иначе + ВременноеРасширение = НайтиРасширение(ИдентификаторРасширения); + Если ВременноеРасширение = Неопределено Тогда + ВременноеРасширение = РасширенияКонфигурации.Создать(); + КонецЕсли; + ВременноеРасширение.Записать(ДанныеОбновляемогоРасширения); КонецЕсли; + ТребуетсяВосстановление = Ложь; Разрешения.Добавить(МодульРаботаВБезопасномРежиме.РазрешениеНаИспользованиеВнешнегоМодуля( - ВременноеРасширение.Имя, Base64Строка(ВременноеРасширение.ХешСумма))); - - ЗафиксироватьТранзакцию(); + СвойстваВременногоРасширения.Имя, Base64Строка(СвойстваВременногоРасширения.ХешСумма))); Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Если ИдентификаторРасширения = Неопределено Тогда + Если ПомещенныеФайлы.Количество() > 1 Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При попытке временно добавить расширение из файла + |""%1"" + |возникла ошибка: + |%2'"), + ПомещенныйФайл.Имя, + КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + Иначе + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При попытке временно добавить расширение возникла ошибка: + |%1'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + КонецЕсли; + Иначе + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При попытке временно обновить расширение возникла ошибка: + |%1'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + КонецЕсли; + Если ТребуетсяВосстановление Тогда + Попытка + Если ИдентификаторРасширения = Неопределено Тогда + ВременноеРасширение.Удалить(); + Иначе + ВременноеРасширение = НайтиРасширение(ИдентификаторРасширения); + Если ВременноеРасширение = Неопределено Тогда + ВременноеРасширение = РасширенияКонфигурации.Создать(); + КонецЕсли; + ВременноеРасширение.Записать(ДанныеОбновляемогоРасширения); + КонецЕсли; + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Если ИдентификаторРасширения = Неопределено Тогда + Если ПомещенныеФайлы.Количество() > 1 Тогда + ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При попытке удалить временно добавленное расширение из файла + |%1 + |возникла еще одна ошибка: + |%2'"), + ПомещенныйФайл.Имя, + КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + Иначе + ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При попытке удалить временно добавленное расширение возникла еще одна ошибка: + |%1'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + КонецЕсли; + Иначе + ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При попытке восстановить временно измененное расширение возникла еще одна ошибка: + |%1'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + КонецЕсли; + КонецПопытки; + КонецЕсли; + ВызватьИсключение ТекстОшибки; КонецПопытки; КонецЦикла; @@ -895,53 +1260,6 @@ ЗапросыРазрешений.Добавить(МодульРаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(Разрешения, ОбщегоНазначения.ИдентификаторОбъектаМетаданных("РегистрСведений.ПараметрыРаботыВерсийРасширений"))); - Возврат Истина; - -КонецФункции - -&НаСервере -Процедура ОбновитьПараметрыРаботыРасширений(ПроверяемыеРасширения = Неопределено, НеподключенныеРасширения = "") - - ПараметрыВыполнения = Новый Структура; - ПараметрыВыполнения.Вставить("ИмяКонфигурации", Метаданные.Имя); - ПараметрыВыполнения.Вставить("ВерсияКонфигурации", Метаданные.Версия); - ПараметрыВыполнения.Вставить("УстановленныеРасширения", Справочники.ВерсииРасширений.КонтрольныеСуммыРасширений()); - ПараметрыВыполнения.Вставить("ПроверяемыеРасширения", ПроверяемыеРасширения); - ПараметрыВыполнения.Вставить("АдресРезультата", ПоместитьВоВременноеХранилище(, УникальныйИдентификатор)); - ПараметрыПроцедуры = Новый Массив; - ПараметрыПроцедуры.Добавить(ПараметрыВыполнения); - - ФоновоеЗадание = РасширенияКонфигурации.ВыполнитьФоновоеЗаданиеСРасширениямиБазыДанных( - "СтандартныеПодсистемыСервер.ЗаполнитьВсеПараметрыРаботыРасширенийФоновоеЗадание", ПараметрыПроцедуры); - ФоновоеЗадание.ОжидатьЗавершения(); - Отбор = Новый Структура("УникальныйИдентификатор", ФоновоеЗадание.УникальныйИдентификатор); - ФоновоеЗадание = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор)[0]; - Если ФоновоеЗадание.ИнформацияОбОшибке <> Неопределено Тогда - ВызватьИсключение ПодробноеПредставлениеОшибки(ФоновоеЗадание.ИнформацияОбОшибке); - КонецЕсли; - - Результат = ПолучитьИзВременногоХранилища(ПараметрыВыполнения.АдресРезультата); - Если ТипЗнч(Результат) <> Тип("Структура") Тогда - ВызватьИсключение НСтр("ru = 'Фоновое задание подготовки расширений не вернуло результат.'"); - КонецЕсли; - - Если ЗначениеЗаполнено(Результат.ТекстОшибки) Тогда - ВызватьИсключение Результат.ТекстОшибки; - КонецЕсли; - - Если ЗначениеЗаполнено(Результат.НеподключенныеРасширения) Тогда - НеподключенныеРасширения = Результат.НеподключенныеРасширения; - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ПроверитьДоступностьРазделенныхДанных() - - Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда - ВызватьИсключение НСтр("ru = 'Расширения недоступны в неразделенном режиме.'"); - КонецЕсли; - КонецПроцедуры &НаСервере @@ -953,4 +1271,106 @@ КонецПроцедуры +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // Оформление ТолькоПросмотр для общих расширений и расширений, полученных в подчиненном узле РИБ из главного. + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписокРасширенийПодключать.Имя); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписокРасширенийБезопасныйРежимФлаг.Имя); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписокРасширенийПередаватьВПодчиненныеУзлыРИБ.Имя); + + ГруппаЭлементовОтбора = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); + ГруппаЭлементовОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли; + + ГруппаЭлементовОтбораОбщее = ГруппаЭлементовОтбора.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); + ГруппаЭлементовОтбораОбщее.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ; + + ОтборЭлемента = ГруппаЭлементовОтбораОбщее.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокРасширений.Общее"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + ОтборЭлемента = ГруппаЭлементовОтбораОбщее.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЭтоНеразделенныйПользовательВОбласти"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + ОтборЭлемента = ГруппаЭлементовОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокРасширений.ПолученоИзГлавногоУзлаРИБ"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьДоступностьКнопокКомандныхПанелей() + + Если Элементы.СтраницыОбновление.ТекущаяСтраница = Элементы.СтраницаДлительнаяОперация Тогда + + Элементы.СписокРасширенийДобавить.Доступность = Ложь; + Элементы.СписокРасширенийУдалить.Доступность = Ложь; + Элементы.СписокРасширенийОбновитьИзФайла.Доступность = Ложь; + + Элементы.СписокРасширенийКонтекстноеМенюДобавить.Доступность = Ложь; + Элементы.СписокРасширенийКонтекстноеМенюУдалить.Доступность = Ложь; + Элементы.СписокРасширенийКонтекстноеМенюОбновитьИзФайла.Доступность = Ложь; + + ИначеЕсли Элементы.СтраницыОбновление.ТекущаяСтраница = Элементы.СтраницаСписокРасширений Тогда + + ВыбранаОднаСтрока = Элементы.СписокРасширений.ВыделенныеСтроки.Количество() = 1; + + РедактированиеДоступно = Истина; + Если ВыбранаОднаСтрока Тогда + ТекущееРасширение = Элементы.СписокРасширений.ТекущиеДанные; + + РедактированиеДоступно = (Не ТекущееРасширение.Общее + Или Не ЭтоНеразделенныйПользовательВОбласти()) + И Не ТекущееРасширение.ПолученоИзГлавногоУзлаРИБ; + КонецЕсли; + + Элементы.СписокРасширенийДобавить.Доступность = Истина; + Элементы.СписокРасширенийУдалить.Доступность = РедактированиеДоступно; + Элементы.СписокРасширенийОбновитьИзФайла.Доступность = ВыбранаОднаСтрока И РедактированиеДоступно; + Элементы.СписокРасширенийСохранитьКак.Доступность = ВыбранаОднаСтрока; + + Элементы.СписокРасширенийКонтекстноеМенюДобавить.Доступность = Истина; + Элементы.СписокРасширенийКонтекстноеМенюУдалить.Доступность = РедактированиеДоступно; + Элементы.СписокРасширенийКонтекстноеМенюОбновитьИзФайла.Доступность = ВыбранаОднаСтрока И РедактированиеДоступно; + Элементы.СписокРасширенийКонтекстноеМенюСохранитьКак.Доступность = ВыбранаОднаСтрока; + + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ЭтоНеразделенныйПользовательВОбласти() + + СеансЗапущенБезРазделителей = Истина; + + Если ОбщегоНазначения.РазделениеВключено() + И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда + + МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); + СеансЗапущенБезРазделителей = МодульРаботаВМоделиСервиса.СеансЗапущенБезРазделителей(); + + КонецЕсли; + + Возврат СеансЗапущенБезРазделителей + И ОбщегоНазначения.РазделениеВключено() + И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных(); + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Form.form b/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Form.form index b38790c63..fabd92a46 100644 --- a/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Form.form +++ b/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Form.form @@ -1334,6 +1334,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true diff --git a/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Module.bsl b/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Module.bsl index b62cd21c3..06b262035 100644 --- a/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Module.bsl +++ b/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Module.bsl @@ -14,6 +14,7 @@ Если Параметры.ТабличныйДокумент = Неопределено Тогда Если Не ПустаяСтрока(Параметры.ИмяОбъектаМетаданныхМакета) Тогда + РедактированиеЗапрещено = Не Параметры.Редактирование; ЗагрузитьТабличныйДокументИзМетаданных(); КонецЕсли; @@ -43,6 +44,13 @@ Элементы.ТабличныйДокумент.ОтображатьИменаСтрокИКолонок = ТабличныйДокумент.Макет; Элементы.ТабличныйДокумент.ОтображатьИменаЯчеек = ТабличныйДокумент.Макет; + Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КоманднаяПанель", "Видимость", Ложь); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Предупреждение", "Видимость", Ложь); + + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -210,7 +218,7 @@ &НаКлиенте Процедура ОбновитьПометкиКнопокКоманднойПанели(); - #Если Не ВебКлиент Тогда +#Если Не ВебКлиент И НЕ МобильныйКлиент Тогда Область = Элементы.ТабличныйДокумент.ТекущаяОбласть; Если ТипЗнч(Область) <> Тип("ОбластьЯчеекТабличногоДокумента") Тогда Возврат; @@ -356,12 +364,27 @@ &НаКлиенте Процедура ЗаписатьТабличныйДокументИмяФайлаВыбрано(Знач ОбработчикЗавершения) - Если Не ПустаяСтрока(Параметры.ПутьКФайлу) Тогда - ТабличныйДокумент.Записать(Параметры.ПутьКФайлу); - РедактированиеЗапрещено = Ложь; + ТабличныйДокумент.НачатьЗапись( + Новый ОписаниеОповещения("ОбработатьРезультатЗаписиТабличногоДокумента", ЭтотОбъект, ОбработчикЗавершения), + Параметры.ПутьКФайлу); + Иначе + ПослеЗаписиТабличногоДокумента(ОбработчикЗавершения); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОбработатьРезультатЗаписиТабличногоДокумента(Результат, ОбработчикЗавершения) Экспорт + Если Результат <> Истина Тогда + Возврат; КонецЕсли; + РедактированиеЗапрещено = Ложь; + ПослеЗаписиТабличногоДокумента(ОбработчикЗавершения); +КонецПроцедуры + +&НаКлиенте +Процедура ПослеЗаписиТабличногоДокумента(ОбработчикЗавершения) ЗаписьВыполнена = Истина; Модифицированность = Ложь; УстановитьЗаголовок(); @@ -376,7 +399,6 @@ КонецЕсли; ВыполнитьОбработкуОповещения(ОбработчикЗавершения, Истина); - КонецПроцедуры &НаКлиенте @@ -385,7 +407,7 @@ Перем ДиалогСохраненияФайла, ОписаниеОповещения; ДиалогСохраненияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); - ДиалогСохраненияФайла.ПолноеИмяФайла = ИмяДокумента; + ДиалогСохраненияФайла.ПолноеИмяФайла = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяДокумента); ДиалогСохраненияФайла.Фильтр = НСтр("ru = 'Табличный документ'") + " (*.mxl)|*.mxl"; ОписаниеОповещения = Новый ОписаниеОповещения("ПриЗавершенииДиалогаВыбораФайла", ЭтотОбъект, ОбработчикЗавершения); diff --git a/SSL/src/CommonForms/Сертификат/Form.form b/SSL/src/CommonForms/Сертификат/Form.form index 99a2ea76d..0ed1429e5 100644 --- a/SSL/src/CommonForms/Сертификат/Form.form +++ b/SSL/src/CommonForms/Сертификат/Form.form @@ -338,6 +338,7 @@ Page + HorizontalIfPossible auto false diff --git a/SSL/src/CommonForms/СинхронизацияДанных/Form.form b/SSL/src/CommonForms/СинхронизацияДанных/Form.form index 39b9fb228..f97161b99 100644 --- a/SSL/src/CommonForms/СинхронизацияДанных/Form.form +++ b/SSL/src/CommonForms/СинхронизацияДанных/Form.form @@ -2,330 +2,71 @@ <key>ru</key> - <value>Синхронизация данных</value> + <value>Настройки синхронизации данных</value> - СинхронизацияДанных - 149 + ГруппаСинхронизацияНеНастроена + 615 + + ДекорацияИнформация + 617 + + <key>ru</key> + <value>Декорация информация</value> + + true + true + + true + + + ДекорацияИнформацияРасширеннаяПодсказка + 619 + Label + true + true + + Left + + + + ДекорацияИнформацияКонтекстноеМеню + 618 + true + + true + true + + + CommonPicture.Информация32 + + + - СинхронизацияНеНастроена - 153 + ГруппаИнформационнаяНадписьСинхронизацияНеНастроена + 620 - ГруппаСинхронизацияНеНастроена - 154 - - Декорация2 - 155 - true - true - - true - - - Декорация2ExtendedTooltip - 395 - Label - true - true - - Left - - - - Декорация2КонтекстноеМеню - 156 - true - - true - true - - - CommonPicture.Информация32 - - - + ИнформационнаяНадпись + 622 - ГруппаИнформационнаяНадписьСинхронизацияНеНастроена - 200 - - ИнформационнаяНадпись - 368 - - ЕстьПраваНаСинхронизацию - 369 - - ИнформацияОСинхронизацииЕстьПрава - 158 - - <key>ru</key> - <value>Если для работы в этой программе необходимо синхронизировать данные с другими программами или требуется настроить распределенную информационную базу, то нажмите на кнопку "Настроить синхронизацию данных". -Данные могут синхронизироваться автоматически по расписанию или по требованию в любой момент времени.</value> - - true - true - - true - - - ИнформацияОСинхронизацииЕстьПраваExtendedTooltip - 399 - Label - true - true - - Left - - - - ИнформацияОСинхронизацииЕстьПраваКонтекстноеМеню - 159 - true - - Label - 75 - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Есть права на синхронизацию</value> - - - ЕстьПраваНаСинхронизациюExtendedTooltip - 398 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - НетПравНаСинхронизацию - 370 - - ИнформацияОСинхронизацииНетПрав - 371 - - <key>ru</key> - <value>Если для работы в этой программе необходимо синхронизировать данные с другими программами или требуется настроить распределенную информационную базу, то обратитесь к администратору информационной базы. -Данные могут синхронизироваться автоматически по расписанию или по требованию в любой момент времени.</value> - - true - true - - true - - - ИнформацияОСинхронизацииНетПравExtendedTooltip - 401 - Label - true - true - - Left - - - - ИнформацияОСинхронизацииНетПравКонтекстноеМеню - 372 - true - - Label - 75 - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Нет прав на синхронизацию</value> - - - НетПравНаСинхронизациюExtendedTooltip - 400 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - true - true - - true - - - <key>ru</key> - <value>Информационная надпись</value> - - - ИнформационнаяНадписьExtendedTooltip - 397 - Label - true - true - - Left - - - Pages - - Auto - - - - ПанельСоздатьСинхронизацияНеНастроена - 552 - - ПодменюСоздать - 91 - - ПодменюДругиеПрограммы - 147 - true - true - - true - - - <key>ru</key> - <value>Другие программы</value> - - false - - ПодменюДругиеПрограммыРасширеннаяПодсказка - 464 - Label - true - true - - Left - - - - - - ПодменюРИБ - 146 - true - true - - true - - - <key>ru</key> - <value>Распределенную информационную базу</value> - - false - - ПодменюРИБExtendedTooltip - 465 - Label - true - true - - Left - - - - - true - true - - true - - - <key>ru</key> - <value>Настроить синхронизацию данных</value> - - - ru - Настроить синхронизацию данных с другой программой - - false - - ПодменюСоздатьExtendedTooltip - 463 - Label - true - true - - Left - - - Popup - - - StdPicture.CreateListItem - - Auto - Normal - - - true - true - - true - - - <key>ru</key> - <value>Панель создать синхронизация не настроена</value> - - - ПанельСоздатьСинхронизацияНеНастроенаРасширеннаяПодсказка - 553 - Label - true - true - - Left - - - CommandBar - - Left - - + ЕстьПраваНаСинхронизацию + 624 - Декорация3 - 329 + ИнформацияОСинхронизацииЕстьПрава + 626 + + <key>ru</key> + <value>Если для работы в этой программе необходимо синхронизировать данные с другими программами или требуется настроить распределенную информационную базу, то нажмите на кнопку "Новая синхронизация данных". +Данные могут синхронизироваться автоматически по расписанию или по требованию в любой момент времени.</value> + true true true - Декорация3ExtendedTooltip - 403 + ИнформацияОСинхронизацииЕстьПраваРасширеннаяПодсказка + 628 Label true true @@ -334,71 +75,16 @@ - Декорация3КонтекстноеМеню - 330 + ИнформацияОСинхронизацииЕстьПраваКонтекстноеМеню + 627 true Label - true - 1 true - false Left - - ПрефиксСинхронизацияНеНастроена - 327 - - <key>ru</key> - <value>Префикс этой информационной базы</value> - - true - true - - true - - - ПрефиксИБ - - - ru - Префикс добавляется автоматически к кодам элементов справочников -и номерам документов для того, чтобы различать, в какой из программ -они были введены, и избежать дублирования данных - - - ПрефиксСинхронизацияНеНастроенаExtendedTooltip - 404 - Label - true - true - - Left - - - - ПрефиксСинхронизацияНеНастроенаКонтекстноеМеню - 328 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - true true @@ -406,11 +92,11 @@ <key>ru</key> - <value>Информационная надпись синхронизация не настроена</value> + <value>Есть права на синхронизацию</value> - ГруппаИнформационнаяНадписьСинхронизацияНеНастроенаРасширеннаяПодсказка - 396 + ЕстьПраваНаСинхронизациюРасширеннаяПодсказка + 625 Label true true @@ -418,14 +104,74 @@ Left - UsualGroup - + Page + Vertical - Auto - true - true - Auto - Auto + auto + false + + + + НетПравНаСинхронизацию + 629 + + ИнформацияОСинхронизацииНетПрав + 631 + + <key>ru</key> + <value>Если для работы в этой программе необходимо синхронизировать данные с другими программами или требуется настроить распределенную информационную базу, то обратитесь к администратору информационной базы. +Данные могут синхронизироваться автоматически по расписанию или по требованию в любой момент времени.</value> + + true + true + + true + + + ИнформацияОСинхронизацииНетПравРасширеннаяПодсказка + 633 + Label + true + true + + Left + + + + ИнформацияОСинхронизацииНетПравКонтекстноеМеню + 632 + true + + Label + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Нет прав на синхронизацию</value> + + + НетПравНаСинхронизациюРасширеннаяПодсказка + 630 + Label + true + true + + Left + + + Page + + Vertical + auto + false true @@ -435,11 +181,11 @@ <key>ru</key> - <value>Синхронизация не настроена</value> + <value>Информационная надпись</value> - ГруппаСинхронизацияНеНастроенаРасширеннаяПодсказка - 394 + ИнформационнаяНадписьРасширеннаяПодсказка + 623 Label true true @@ -447,13 +193,8 @@ Left - UsualGroup - - Auto - NormalSeparation - true - true - Auto + Pages + Auto @@ -464,11 +205,11 @@ <key>ru</key> - <value>Синхронизация не настроена</value> + <value>Информационная надпись синхронизация не настроена</value> - СинхронизацияНеНастроенаExtendedTooltip - 393 + ГруппаИнформационнаяНадписьСинхронизацияНеНастроенаРасширеннаяПодсказка + 621 Label true true @@ -476,1475 +217,103 @@ Left - Page - + UsualGroup + Vertical - auto - false + Auto + true + true + Auto + Auto + + + true + + true + + + <key>ru</key> + <value>Синхронизация не настроена</value> + + + ГруппаСинхронизацияНеНастроенаРасширеннаяПодсказка + 616 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + Auto + Auto + + + + ИнформационнаяПанельТребуетсяОбновление + 306 + + КартинкаПредупреждениеОбновление + 307 + + <key>ru</key> + <value>Картинка предупреждение обновление</value> + + true + true + + true + + + КартинкаПредупреждениеОбновлениеРасширеннаяПодсказка + 409 + Label + true + true + + Left + + + + КартинкаПредупреждениеОбновлениеКонтекстноеМеню + 308 + true + + true + true + + + CommonPicture.Предупреждение32 + - ОднаСинхронизация - 168 + ПравоОбновленияСтраницы + 316 - Синхронизация - 239 - - ГруппаОднаСинхронизация - 356 - - ИнформационнаяПанельТребуетсяОбновление1 - 306 - - КартинкаПредупреждение1 - 307 - - <key>ru</key> - <value>Картинка предупреждение</value> - - true - true - - true - - - КартинкаПредупреждение1ExtendedTooltip - 409 - Label - true - true - - Left - - - - КартинкаПредупреждение1КонтекстноеМеню - 308 - true - - true - true - - - CommonPicture.Предупреждение32 - - - - - ПравоОбновленияСтраницы - 316 - - ИнформацияОбменДаннымиПриостановленЕстьПравоОбновления1 - 312 - - НадписьОбменДаннымиПриостановленЕстьПравоОбновления1 - 313 - - <key>ru</key> - <value>Необходимо установить обновление программы, после чего синхронизация данных будет продолжена.</value> - - true - true - - true - - - НадписьОбменДаннымиПриостановленЕстьПравоОбновления1ExtendedTooltip - 412 - Label - true - true - - Left - - - - НадписьОбменДаннымиПриостановленЕстьПравоОбновления1КонтекстноеМеню - 314 - true - - Label - 35 - true - - Left - - - - УстановитьОбновление1 - 315 - true - true - - true - - - УстановитьОбновление1ExtendedTooltip - 413 - Label - true - true - - Left - - - Hyperlink - Form.Command.УстановитьОбновление - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Информация обмен данными приостановлен есть право обновления</value> - - - ИнформацияОбменДаннымиПриостановленЕстьПравоОбновления1ExtendedTooltip - 411 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - ИнформацияОбменДаннымиПриостановленНетПраваОбновления1 - 309 - - НадписьОбменДаннымиПриостановленНетПраваОбновления1 - 310 - - <key>ru</key> - <value>Синхронизация данных приостановлена в связи с необходимостью установки полученного обновления. -Обратитесь к администратору.</value> - - true - true - - true - - - НадписьОбменДаннымиПриостановленНетПраваОбновления1ExtendedTooltip - 415 - Label - true - true - - Left - - - - НадписьОбменДаннымиПриостановленНетПраваОбновления1КонтекстноеМеню - 311 - true - - Label - 35 - 3 - true - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Информация обмен данными приостановлен нет права обновления</value> - - - ИнформацияОбменДаннымиПриостановленНетПраваОбновления1ExtendedTooltip - 414 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - true - true - - true - - - <key>ru</key> - <value>Право обновления страницы</value> - - - ПравоОбновленияСтраницыExtendedTooltip - 410 - Label - true - true - - Left - - - Pages - - Auto - - - true - true - - true - - - <key>ru</key> - <value>Информационная панель требуется обновление</value> - - 45 - - ИнформационнаяПанельТребуетсяОбновление1ExtendedTooltip - 408 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ГруппаСтатусВыгрузкиЗагрузки - 240 - - КартинкиСтатусов - 278 - - ДекорацияСтатусЗагрузки - 286 - - <key>ru</key> - <value>Декорация статус загрузки</value> - - true - true - - true - - - ДекорацияСтатусЗагрузкиExtendedTooltip - 418 - Label - true - true - - Left - - - - ДекорацияСтатусЗагрузкиКонтекстноеМеню - 287 - true - - true - true - - - CommonPicture.Предупреждение - - - - - ДекорацияСтатусПустой - 346 - true - - true - - - ДекорацияСтатусПустойExtendedTooltip - 419 - Label - true - true - - Left - - - - ДекорацияСтатусПустойКонтекстноеМеню - 347 - true - - Label - 2 - true - 1 - true - - Left - - - - ДекорацияСтатусВыгрузки - 284 - - <key>ru</key> - <value>Декорация статус выгрузки</value> - - true - true - - true - - - ДекорацияСтатусВыгрузкиExtendedTooltip - 420 - Label - true - true - - Left - - - - ДекорацияСтатусВыгрузкиКонтекстноеМеню - 285 - true - - true - true - - - CommonPicture.Предупреждение - - - - true - true - - true - - - <key>ru</key> - <value>Картинки статусов</value> - - - КартинкиСтатусовРасширеннаяПодсказка - 417 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ЗаголовкиСтатусов - 279 - - ДекорацияУспешнаяЗагрузка - 249 - - <key>ru</key> - <value>Данные получены:</value> - - true - true - - true - - - ДекорацияУспешнаяЗагрузкаExtendedTooltip - 422 - Label - true - true - - Left - - - - ДекорацияУспешнаяЗагрузкаКонтекстноеМеню - 250 - true - - Label - true - - Left - - - - ДекорацияУспешнаяВыгрузка - 245 - - <key>ru</key> - <value>Данные отправлены:</value> - - true - true - - true - - - ДекорацияУспешнаяВыгрузкаExtendedTooltip - 423 - Label - true - true - - Left - - - - ДекорацияУспешнаяВыгрузкаКонтекстноеМеню - 246 - true - - Label - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Заголовки статусов</value> - - - ЗаголовкиСтатусовРасширеннаяПодсказка - 421 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ГруппаПолноправныйПользователь - 277 - - ДатаУспешнойЗагрузки - 283 - - <key>ru</key> - <value><Дата получения></value> - - true - true - - true - - - ДатаУспешнойЗагрузкиExtendedTooltip - 425 - Label - true - true - - Left - - - Hyperlink - Form.Command.ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных - Normal - Auto - true - true - UserCmds - Auto - - - ДатаУспешнойВыгрузки - 282 - - <key>ru</key> - <value><Дата отправки></value> - - true - true - - true - - - ДатаУспешнойВыгрузкиExtendedTooltip - 426 - Label - true - true - - Left - - - Hyperlink - Form.Command.ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Полноправный пользователь</value> - - - ГруппаПолноправныйПользовательExtendedTooltip - 424 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ГруппаНеполноправныйПользователь - 373 - - НадписьДатаПолучения - 374 - true - true - - true - - - НадписьДатаПолученияExtendedTooltip - 428 - Label - true - true - - Left - - - - НадписьДатаПолученияКонтекстноеМеню - 375 - true - - Label - true - true - - Style.ПоясняющийТекст - - - Left - - - - НадписьДатаОтправки - 376 - true - true - - true - - - НадписьДатаОтправкиExtendedTooltip - 429 - Label - true - true - - Left - - - - НадписьДатаОтправкиКонтекстноеМеню - 377 - true - - Label - true - true - - Style.ПоясняющийТекст - - - Left - - - true - true - - true - - - <key>ru</key> - <value>Неполноправный пользователь</value> - - - ГруппаНеполноправныйПользовательExtendedTooltip - 427 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Статус выгрузки загрузки</value> - - - ГруппаСтатусВыгрузкиЗагрузкиРасширеннаяПодсказка - 416 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ОткрытьРезультатыОднаСинхронизация - 359 - true - true - - true - - - ОткрытьРезультатыОднаСинхронизацияExtendedTooltip - 433 - Label - true - true - - Left - - - Hyperlink - Form.Command.ОткрытьРезультатыСинхронизацииДанных - Normal - Auto - true - true - UserCmds - Auto - - - ГруппаКомандыСинхронизации - 391 - - ВыполнитьОбменДанными2 - 201 - true - true - - true - - - ВыполнитьОбменДанными2ExtendedTooltip - 431 - Label - true - true - - Left - - - UsualButton - Form.Command.ВыполнитьОбменДанными - Normal - Auto - true - true - UserCmds - Auto - - - ВыполнитьОбменДаннымиИнтерактивно2 - 202 - true - true - - true - - - ВыполнитьОбменДаннымиИнтерактивно2ExtendedTooltip - 432 - Label - true - true - - Left - - - UsualButton - Form.Command.ВыполнитьОбменДаннымиИнтерактивно - Normal - Auto - 3 - true - true - UserCmds - Auto - - - СоставОтправляемыхДанных - 363 - true - true - - true - - - СоставОтправляемыхДанныхExtendedTooltip - 438 - Label - true - true - - Left - - - UsualButton - Form.Command.СоставОтправляемыхДанных - Normal - Picture - 3 - true - true - UserCmds - Auto - - - Декорация1 - 517 - true - true - - true - - - Декорация1РасширеннаяПодсказка - 519 - Label - true - true - - Left - - - - Декорация1КонтекстноеМеню - 518 - true - - Label - true - true - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Команды синхронизации</value> - - - ГруппаКомандыСинхронизацииРасширеннаяПодсказка - 430 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - true - true - - true - + ИнформацияОбменДаннымиПриостановленЕстьПравоОбновления + 312 + + НадписьОбменДаннымиПриостановленЕстьПравоОбновления + 313 <key>ru</key> - <value>Одна синхронизация</value> - - - ГруппаОднаСинхронизацияРасширеннаяПодсказка - 407 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - НастройкиСинхронизацииИРасписание - 533 - - СтраницыНастройкиСинхронизацииИРасписания - 522 - - СтраницаНастройкиСинхронизацииДанных - 524 - - ГруппаНастройкиСинхронизации - 260 - - ГруппаКомандыНастройки - 295 - - ИзменитьУзелИнформационнойБазы - 227 - - <key>ru</key> - <value>Настроить...</value> - - true - true - - true - - - ИзменитьУзелИнформационнойБазыExtendedTooltip - 437 - Label - true - true - - Left - - - UsualButton - Form.Command.ИзменитьУзелИнформационнойБазы - Normal - true - true - UserCmds - Auto - - - Декорация5 - 293 - - <key>ru</key> - <value>Правила синхронизации данных:</value> - - true - - true - - - Декорация5ExtendedTooltip - 436 - Label - true - true - - Left - - - - Декорация5КонтекстноеМеню - 294 - true - - Label - 23 - true - - Left - - - - ЗагрузитьПравилаСинхронизацииДанных - 520 - true - true - - true - - - ЗагрузитьПравилаСинхронизацииДанныхРасширеннаяПодсказка - 521 - Label - true - true - - Left - - - UsualButton - Form.Command.ЗагрузитьПравилаСинхронизацииДанных - Normal - PictureAndText - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Команды настройки</value> - - - ГруппаКомандыНастройкиРасширеннаяПодсказка - 435 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ОписаниеПравилСинхронизацииДанных - 291 - true - true - - true - - - ОписаниеПравилСинхронизацииДанных - - None - - ОписаниеПравилСинхронизацииДанныхExtendedTooltip - 439 - Label - true - true - - Left - - - - ОписаниеПравилСинхронизацииДанныхКонтекстноеМеню - 292 - true - - InputField - true - Enter - true - Left - true - - 6 - true - false - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Настройки синхронизации</value> - - - ГруппаНастройкиСинхронизацииExtendedTooltip - 434 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Настройки синхронизации данных</value> - - - СтраницаНастройкиСинхронизацииДанныхРасширеннаяПодсказка - 525 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаРасписание - 526 - - ГруппаСценарииСинхронизации - 257 - - ГруппаКомандыСценария - 300 - - РасписаниеСинхронизацииДанныхДекорация - 296 - - <key>ru</key> - <value>Расписание синхронизации данных:</value> - - true - - true - - - РасписаниеСинхронизацииДанныхДекорацияExtendedTooltip - 442 - Label - true - true - - Left - - - - РасписаниеСинхронизацииДанныхДекорацияКонтекстноеМеню - 297 - true - - Label - 23 - true - - Left - - - - НастроитьСценарииОбменаДанными - 230 - - <key>ru</key> - <value>Настроить...</value> - - true - true - - true - - - НастроитьСценарииОбменаДаннымиExtendedTooltip - 443 - Label - true - true - - Left - - - UsualButton - Form.Command.НастроитьСценарииОбменаДаннымиОдна - Normal - true - true - UserCmds - - StdPicture.ScheduledJob - - Auto - InAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Команды сценария</value> - - - ГруппаКомандыСценарияРасширеннаяПодсказка - 441 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - РасписаниеСинхронизацииДанных - 298 - true - true - - true - - - РасписаниеСинхронизацииДанных - - None - - РасписаниеСинхронизацииДанныхExtendedTooltip - 444 - Label - true - true - - Left - - - - РасписаниеСинхронизацииДанныхКонтекстноеМеню - 299 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Сценарии синхронизации</value> - - - ГруппаСценарииСинхронизацииExtendedTooltip - 440 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Расписание</value> - - - СтраницаРасписаниеРасширеннаяПодсказка - 527 - Label - true - true - - Left - - - Page - - - StdPicture.ScheduledJob - - Vertical - auto - false - - - true - true - - true - - - <key>ru</key> - <value>Страницы настройки синхронизации и расписания</value> - - - СтраницыНастройкиСинхронизацииИРасписанияРасширеннаяПодсказка - 523 - Label - true - true - - Left - - - Pages - - TabsOnTop - Auto - - - true - true - - true - - - <key>ru</key> - <value>Настройки синхронизации и расписание</value> - - 70 - false - - НастройкиСинхронизацииИРасписаниеРасширеннаяПодсказка - 534 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Auto - Auto - - - - ИнформацияПоОбмену - 322 - true - true - - true - - - ИнформацияПоОбменуExtendedTooltip - 445 - Label - true - true - - Left - - - Hyperlink - Form.Command.ИнформацияПоОбмену - Normal - Auto - true - true - UserCmds - Auto - - - ПрефиксОднаСинхронизация - 331 - - <key>ru</key> - <value>Префикс этой информационной базы</value> + <value>Необходимо установить обновление программы, после чего синхронизация данных будет продолжена.</value> true true true - - ПрефиксИБ - - - ru - Префикс добавляется автоматически к кодам элементов справочников -и номерам документов для того, чтобы различать, в какой из программ -они были введены, и избежать дублирования данных - - ПрефиксОднаСинхронизацияExtendedTooltip - 446 + НадписьОбменДаннымиПриостановленЕстьПравоОбновленияРасширеннаяПодсказка + 412 Label true true @@ -1953,99 +322,27 @@ - ПрефиксОднаСинхронизацияКонтекстноеМеню - 332 + НадписьОбменДаннымиПриостановленЕстьПравоОбновленияКонтекстноеМеню + 314 true - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal + Label + true + + Left - - ГруппаНастройкаСинхронизации - 303 - - ПанельСоздатьСинхронизацияОдна - 554 - - УдалитьНастройкуСинхронизации - 365 - - <key>ru</key> - <value>Удалить эту настройку синхронизации</value> - - true - true - - true - - - УдалитьНастройкуСинхронизацииExtendedTooltip - 447 - Label - true - true - - Left - - - Form.Command.УдалитьНастройкуСинхронизации - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Панель создать синхронизация одна</value> - - - ПанельСоздатьСинхронизацияОднаРасширеннаяПодсказка - 555 - Label - true - true - - Left - - - CommandBar - - Left - - + + УстановитьОбновление + 315 true true true - - <key>ru</key> - <value>Настройка синхронизации</value> - - false - ГруппаНастройкаСинхронизацииExtendedTooltip - 449 + УстановитьОбновлениеРасширеннаяПодсказка + 413 Label true true @@ -2053,15 +350,14 @@ Left - UsualGroup - - Auto - NormalSeparation - true - true - Auto - Auto - + Hyperlink + Form.Command.УстановитьОбновление + Normal + Auto + true + true + UserCmds + Auto true true @@ -2070,13 +366,11 @@ <key>ru</key> - <value>Синхронизация</value> + <value>Информация обмен данными приостановлен есть право обновления</value> - false - false - СинхронизацияExtendedTooltip - 406 + ИнформацияОбменДаннымиПриостановленЕстьПравоОбновленияРасширеннаяПодсказка + 411 Label true true @@ -2084,15 +378,74 @@ Left - UsualGroup - + Page + Vertical - Auto - true - true - Equal - Auto - Auto + auto + false + + + + ИнформацияОбменДаннымиПриостановленНетПраваОбновления + 309 + + НадписьОбменДаннымиПриостановленНетПраваОбновления + 310 + + <key>ru</key> + <value>Синхронизация данных приостановлена в связи с необходимостью установки полученного обновления. +Обратитесь к администратору.</value> + + true + true + + true + + + НадписьОбменДаннымиПриостановленНетПраваОбновленияРасширеннаяПодсказка + 415 + Label + true + true + + Left + + + + НадписьОбменДаннымиПриостановленНетПраваОбновленияКонтекстноеМеню + 311 + true + + Label + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Информация обмен данными приостановлен нет права обновления</value> + + + ИнформацияОбменДаннымиПриостановленНетПраваОбновленияРасширеннаяПодсказка + 414 + Label + true + true + + Left + + + Page + + Vertical + auto + false true @@ -2102,12 +455,11 @@ <key>ru</key> - <value>Одна синхронизация</value> + <value>Право обновления страницы</value> - false - ОднаСинхронизацияExtendedTooltip - 405 + ПравоОбновленияСтраницыExtendedTooltip + 410 Label true true @@ -2115,836 +467,107 @@ Left - Page - - Vertical - auto - false + Pages + + Auto + true + true + + true + + + <key>ru</key> + <value>Информационная панель требуется обновление</value> + + 45 + + ИнформационнаяПанельТребуетсяОбновлениеРасширеннаяПодсказка + 408 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ОткрытьРезультатыСинхронизацииДанных + 367 + true + true + + true + + + ОткрытьРезультатыСинхронизацииДанныхExtendedTooltip + 461 + Label + true + true + + Left + + + Hyperlink + Form.Command.ОткрытьРезультатыСинхронизацииДанных + Normal + Auto + true + true + UserCmds + Auto + + + ПанельСписокПриложений + 701 - НесколькоСинхронизаций - 152 - - ИнформационнаяПанельТребуетсяОбновление - 135 - - КартинкаПредупреждение - 136 - - <key>ru</key> - <value>Картинка предупреждение</value> - - true - true - - true - - - КартинкаПредупреждениеExtendedTooltip - 454 - Label - true - true - - Left - - - - КартинкаПредупреждениеКонтекстноеМеню - 137 - true - - true - true - - - CommonPicture.Предупреждение32 - - - - - ИнформацияОбменДаннымиПриостановленНетПраваОбновления - 138 - - НадписьОбменДаннымиПриостановленНетПраваОбновления - 139 - - <key>ru</key> - <value>Синхронизация данных с "%1 " приостановлена в связи с необходимостью установки полученного обновления. -Обратитесь к администратору.</value> - - true - true - - true - - - НадписьОбменДаннымиПриостановленНетПраваОбновленияExtendedTooltip - 456 - Label - true - true - - Left - - - - НадписьОбменДаннымиПриостановленНетПраваОбновленияКонтекстноеМеню - 140 - true - - Label - true - true - - Left - - - true - - true - - - <key>ru</key> - <value>Информация обмен данными приостановлен нет права обновления</value> - - - ИнформацияОбменДаннымиПриостановленНетПраваОбновленияExtendedTooltip - 455 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ИнформацияОбменДаннымиПриостановленЕстьПравоОбновления - 141 - - НадписьОбменДаннымиПриостановленЕстьПравоОбновления - 142 - - <key>ru</key> - <value>Необходимо установить обновление программы, после чего синхронизация данных с "%1" будет продолжена.</value> - - true - true - - true - - - НадписьОбменДаннымиПриостановленЕстьПравоОбновленияExtendedTooltip - 458 - Label - true - true - - Left - - - - НадписьОбменДаннымиПриостановленЕстьПравоОбновленияКонтекстноеМеню - 143 - true - - Label - 81 - true - - Left - - - - УстановитьОбновление - 144 - true - true - - true - - - УстановитьОбновлениеExtendedTooltip - 459 - Label - true - true - - Left - - - Hyperlink - Form.Command.УстановитьОбновление - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Информация обмен данными приостановлен есть право обновления</value> - - - ИнформацияОбменДаннымиПриостановленЕстьПравоОбновленияExtendedTooltip - 457 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Информационная панель требуется обновление</value> - - - ИнформационнаяПанельТребуетсяОбновлениеExtendedTooltip - 453 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ГруппаРезультатовСинхронизацииДанных - 348 - - ОткрытьРезультатыСинхронизацииДанных - 367 - true - true - - true - - - ОткрытьРезультатыСинхронизацииДанныхExtendedTooltip - 461 - Label - true - true - - Left - - - Hyperlink - Form.Command.ОткрытьРезультатыСинхронизацииДанных - Normal - Auto - true - true - UserCmds - - CommonPicture.Предупреждение - - Auto - - true - true - - true - - - <key>ru</key> - <value>Результатов синхронизации данных</value> - - - ГруппаРезультатовСинхронизацииДанныхExtendedTooltip - 460 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - + СтраницаСписокПриложений + 703 КоманднаяПанель 145 - СписокСостоянияУзловГруппаКнопокВыполненияОбменаДанными - 390 - - ВыполнитьОбменДаннымиПанельСписка - 52 - true - true - - true - - false - - ВыполнитьОбменДаннымиПанельСпискаExtendedTooltip - 467 - Label - true - true - - Left - - - Form.Command.ВыполнитьОбменДанными - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - ВыполнитьОбменДаннымиИнтерактивноПанельСписка - 92 - true - true - - true - - - ВыполнитьОбменДаннымиИнтерактивноПанельСпискаExtendedTooltip - 468 - Label - true - true - - Left - - - Form.Command.ВыполнитьОбменДаннымиИнтерактивно - Normal - Picture - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Список состояния узлов группа кнопок выполнения обмена данными</value> - - - СписокСостоянияУзловГруппаКнопокВыполненияОбменаДаннымиExtendedTooltip - 466 - Label - true - true - - Left - - - - - - ГруппаКоманднойПанелиИзменениеИСостав - 361 - - СписокСостоянияУзловИзменитьУзелИнформационнойБазы - 53 - true - true - - true - - false - - СписокСостоянияУзловИзменитьУзелИнформационнойБазыExtendedTooltip - 470 - Label - true - true - - Left - - - Form.Command.ИзменитьУзелИнформационнойБазы - Normal - Picture - true - true - UserCmds - Auto - - - СписокСостоянияУзловСоставОтправляемыхДанных - 360 - true - true - - true - - - СписокСостоянияУзловСоставОтправляемыхДанныхExtendedTooltip - 471 - Label - true - true - - Left - - - Form.Command.СоставОтправляемыхДанных - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Командной панели изменение и состав</value> - - - ГруппаКоманднойПанелиИзменениеИСоставРасширеннаяПодсказка - 469 - Label - true - true - - Left - - - - - - Настройка - 94 - - СписокСостоянияУзловПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных - 98 - true - true - - true - - - СписокСостоянияУзловПерейтиВЖурналРегистрацииСобытийВыгрузкиДанныхExtendedTooltip - 473 - Label - true - true - - Left - - - Form.Command.ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СписокСостоянияУзловПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных - 99 - true - true - - true - - - СписокСостоянияУзловПерейтиВЖурналРегистрацииСобытийЗагрузкиДанныхExtendedTooltip - 474 - Label - true - true - - Left - - - Form.Command.ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Настройка</value> - - - ru - Настройка обмена данными - - - НастройкаExtendedTooltip - 472 - Label - true - true - - Left - - - - - - НастроитьРасписаниеВыполненияОбмена - 102 - true - true - - true - - - НастроитьРасписаниеВыполненияОбменаExtendedTooltip - 475 - Label - true - true - - Left - - - Form.Command.НастроитьСценарииОбменаДанными - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СписокСостоянияУзловГруппа2 - 340 - - СписокСостоянияУзловНайти - 341 - true - true - - true - - - СписокСостоянияУзловНайтиExtendedTooltip - 477 - Label - true - true - - Left - - - Form.Item.СписокСостоянияУзлов.StandardCommand.Find - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СписокСостоянияУзловОтменитьПоиск - 342 - true - true - - true - - - СписокСостоянияУзловОтменитьПоискExtendedTooltip - 478 - Label - true - true - - Left - - - Form.Item.СписокСостоянияУзлов.StandardCommand.CancelSearch - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Список состояния узлов группа 2</value> - - - СписокСостоянияУзловГруппа2ExtendedTooltip - 476 - Label - true - true - - Left - - - - - - СписокСостоянияУзловЗагрузитьПравилаСинхронизацииДанных - 535 - true - true - - true - - - СписокСостоянияУзловЗагрузитьПравилаСинхронизацииДанныхРасширеннаяПодсказка - 536 - Label - true - true - - Left - - - Form.Command.ЗагрузитьПравилаСинхронизацииДанных - Normal - Auto - true - true - UserCmds - Auto - - - СписокСостоянияУзловГруппа1 - 339 - - ОбновитьМонитор - 16 - true - true - - true - - false - - ОбновитьМониторExtendedTooltip - 480 - Label - true - true - - Left - - - Form.Command.ОбновитьМонитор - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СписокСостоянияУзловСкрыватьУспешные - 320 - true - true - - true - - - СписокСостоянияУзловСкрыватьУспешныеExtendedTooltip - 481 - Label - true - true - - Left - - - Form.Command.СкрытьУспешные - Normal - Auto - true - true - UserCmds - Auto - - - ФормаВывестиСписок - 115 - true - true - - true - - - ФормаВывестиСписокExtendedTooltip - 482 - Label - true - true - - Left - - - Form.Item.СписокСостоянияУзлов.StandardCommand.OutputList - Normal - Auto - true - true - UserCmds - Auto - - - ФормаИзменитьФорму - 134 - true - true - - true - - - ФормаИзменитьФормуExtendedTooltip - 483 - Label - true - true - - Left - - - Form.StandardCommand.CustomizeForm - Normal - Auto - true - true - UserCmds - Auto - - - СписокСостоянияУзловИнформацияПоОбмену - 338 - true - true - - true - - - СписокСостоянияУзловИнформацияПоОбменуExtendedTooltip - 484 - Label - true - true - - Left - - - Form.Command.ИнформацияПоОбмену - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Список состояния узлов группа 1</value> - - - СписокСостоянияУзловГруппа1ExtendedTooltip - 479 - Label - true - true - - Left - - - - - - СписокСостоянияУзловГруппа4 + СписокПриложенийГруппаУправление 366 - СписокСостоянияУзловУдалитьНастройкуСинхронизации + СписокПриложенийСоздатьНастройкуСинхронизации + 634 + true + true + + true + + + СписокПриложенийСоздатьНастройкуСинхронизацииРасширеннаяПодсказка + 635 + Label + true + true + + Left + + + Form.Command.СоздатьНастройкуСинхронизации + Normal + Auto + true + true + UserCmds + Auto + + + СписокПриложенийУдалитьНастройкуСинхронизации 364 true true @@ -2952,7 +575,7 @@ true - СписокСостоянияУзловУдалитьНастройкуСинхронизацииExtendedTooltip + СписокПриложенийУдалитьНастройкуСинхронизацииРасширеннаяПодсказка 486 Label true @@ -2977,10 +600,10 @@ <key>ru</key> - <value>Список состояния узлов группа 4</value> + <value>Список приложений группа управление</value> - СписокСостоянияУзловГруппа4ExtendedTooltip + СписокПриложенийГруппаУправлениеРасширеннаяПодсказка 485 Label true @@ -2991,6 +614,502 @@ + + СписокПриложенийГруппаИзменениеИСостав + 361 + + СписокПриложенийИзменитьНастройкуСинхронизации + 53 + true + true + + true + + false + + СписокПриложенийИзменитьНастройкуСинхронизацииРасширеннаяПодсказка + 470 + Label + true + true + + Left + + + Form.Command.ИзменитьНастройкуСинхронизации + Normal + Auto + true + true + UserCmds + Auto + + + СписокПриложенийСоставОтправляемыхДанных + 360 + true + true + + true + + + СписокПриложенийСоставОтправляемыхДанныхРасширеннаяПодсказка + 471 + Label + true + true + + Left + + + Form.Command.СоставОтправляемыхДанных + Normal + Auto + true + true + UserCmds + Auto + + + СписокПриложенийНачальнаяВыгрузкаДанных + 681 + true + true + + true + + + СписокПриложенийНачальнаяВыгрузкаДанныхРасширеннаяПодсказка + 682 + Label + true + true + + Left + + + Form.Command.НачальнаяВыгрузкаДанных + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СписокПриложенийИнформацияПоОбмену + 338 + true + true + + true + + + СписокПриложенийИнформацияПоОбменуРасширеннаяПодсказка + 484 + Label + true + true + + Left + + + Form.Command.ИнформацияПоОбмену + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СписокПриложенийЗагрузитьПравилаСинхронизацииДанных + 535 + true + true + + true + + + СписокПриложенийЗагрузитьПравилаСинхронизацииДанныхРасширеннаяПодсказка + 536 + Label + true + true + + Left + + + Form.Command.ЗагрузитьПравилаСинхронизацииДанных + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Командной панели изменение и состав</value> + + + СписокПриложенийГруппаИзменениеИСоставРасширеннаяПодсказка + 469 + Label + true + true + + Left + + + + + + СписокПриложенийГруппаВыполненияОбменаДанными + 390 + + ВыполнитьСинхронизацию + 52 + true + true + + true + + false + + ВыполнитьСинхронизациюРасширеннаяПодсказка + 467 + Label + true + true + + Left + + + Form.Command.ВыполнитьСинхронизацию + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Список приложений группа выполнения обмена данными</value> + + + СписокПриложенийГруппаВыполненияОбменаДаннымиРасширеннаяПодсказка + 466 + Label + true + true + + Left + + + + + + СписокПриложенийГруппаРасписаниеВыполненияОбмена + 594 + + СписокПриложенийНастроитьРасписаниеВыполненияОбмена + 102 + true + true + + true + + + СписокПриложенийНастроитьРасписаниеВыполненияОбменаРасширеннаяПодсказка + 475 + Label + true + true + + Left + + + Form.Command.НастроитьСценарииОбменаДанными + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Список приложений группа расписание выполнения обмена</value> + + + СписокПриложенийГруппаРасписаниеВыполненияОбменаРасширеннаяПодсказка + 595 + Label + true + true + + Left + + + + + + СписокПриложенийГруппаСобытия + 94 + + СписокПриложенийПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных + 98 + true + true + + true + + + СписокПриложенийПерейтиВЖурналРегистрацииСобытийВыгрузкиДанныхРасширеннаяПодсказка + 473 + Label + true + true + + Left + + + Form.Command.ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СписокПриложенийПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных + 99 + true + true + + true + + + СписокПриложенийПерейтиВЖурналРегистрацииСобытийЗагрузкиДанныхРасширеннаяПодсказка + 474 + Label + true + true + + Left + + + Form.Command.ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Список приложений группа события</value> + + + СписокПриложенийГруппаСобытияРасширеннаяПодсказка + 472 + Label + true + true + + Left + + + + + + СписокПриложенийГруппаТиповые + 340 + + СписокПриложенийНайти + 341 + true + true + + true + + + СписокПриложенийНайтиРасширеннаяПодсказка + 477 + Label + true + true + + Left + + + Form.Item.СписокПриложений.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СписокПриложенийОтменитьПоиск + 342 + true + true + + true + + + СписокПриложенийОтменитьПоискРасширеннаяПодсказка + 478 + Label + true + true + + Left + + + Form.Item.СписокПриложений.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СписокПриложенийВывестиСписок + 115 + true + true + + true + + + СписокПриложенийВывестиСписокРасширеннаяПодсказка + 482 + Label + true + true + + Left + + + Form.Item.СписокПриложений.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Список приложений группа типовые</value> + + + СписокПриложенийГруппаТиповыеРасширеннаяПодсказка + 476 + Label + true + true + + Left + + + + + + СписокПриложенийОбновитьМонитор + 671 + true + true + + true + + + СписокПриложенийОбновитьМониторРасширеннаяПодсказка + 672 + Label + true + true + + Left + + + Form.Command.ОбновитьМонитор + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаИзменитьФорму + 134 + true + true + + true + + + ФормаИзменитьФормуExtendedTooltip + 483 + Label + true + true + + Left + + + Form.StandardCommand.CustomizeForm + Normal + Auto + true + true + UserCmds + Auto + ФормаСправка 133 @@ -3039,15 +1158,15 @@ CommandBar Left - Item.СписокСостоянияУзлов + Item.СписокПриложений - СписокСостоянияУзлов + СписокПриложений 1 <key>ru</key> - <value>Список состояния узлов</value> + <value>Список приложений</value> true true @@ -3055,7 +1174,7 @@ true - СписокСостоянияУзлов + СписокПриложений false None @@ -3069,24 +1188,19 @@ SortListAsc SortListDesc - СписокСостоянияУзловРасписаниеНастроено - 318 + СписокПриложенийПрограмма + 588 true true true - СписокСостоянияУзлов.РасписаниеНастроено + СписокПриложений.НаименованиеКорреспондента - None - - ru - Данные синхронизируются по расписанию - - СписокСостоянияУзловРасписаниеНастроеноExtendedTooltip - 500 + СписокПриложенийПрограммаРасширеннаяПодсказка + 590 Label true true @@ -3095,11 +1209,426 @@ - СписокСостоянияУзловРасписаниеНастроеноКонтекстноеМеню - 319 + СписокПриложенийПрограммаКонтекстноеМеню + 589 true - PictureField + LabelField + Auto + true + Left + true + + true + true + + + + СписокПриложенийПрефиксКорреспондента + 591 + true + true + + true + + + СписокПриложений.ПрефиксКорреспондента + + + СписокПриложенийПрефиксКорреспондентаРасширеннаяПодсказка + 593 + Label + true + true + + Left + + + + СписокПриложенийПрефиксКорреспондентаКонтекстноеМеню + 592 + true + + LabelField + Auto + true + Left + true + + true + true + false + + + + СписокПриложенийГруппаСостояние + 566 + + СписокПриложенийСостояниеКартинка + 568 + true + true + + true + + + СписокПриложений.СостояниеКартинка + + None + + СписокПриложенийСостояниеКартинкаРасширеннаяПодсказка + 570 + Label + true + true + + Left + + + + СписокПриложенийСостояниеКартинкаКонтекстноеМеню + 569 + true + + PictureField + Auto + true + Left + true + + true + true + true + true + + CommonPicture.СинхронизацияДанныхСостояниеСинхронизации + + + + 1 + + + + + СписокПриложенийСостояниеПредставление + 571 + + <key>ru</key> + <value>Состояние</value> + + true + true + + true + + + СписокПриложений.СостояниеПредставление + + + СписокПриложенийСостояниеПредставлениеРасширеннаяПодсказка + 573 + Label + true + true + + Left + + + + СписокПриложенийСостояниеПредставлениеКонтекстноеМеню + 572 + true + + LabelField + Auto + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Список приложений группа состояние</value> + + + СписокПриложенийГруппаСостояниеРасширеннаяПодсказка + 567 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + СписокПриложенийГруппаПоследняяВыгрузка + 650 + + СписокПриложенийСостояниеВыгрузкиКартинка + 654 + true + true + + true + + + СписокПриложений.СостояниеВыгрузкиКартинка + + None + + СписокПриложенийСостояниеВыгрузкиКартинкаРасширеннаяПодсказка + 656 + Label + true + true + + Left + + + + СписокПриложенийСостояниеВыгрузкиКартинкаКонтекстноеМеню + 655 + true + + PictureField + Auto + true + Left + true + + true + true + true + true + + CommonPicture.СинхронизацияДанныхСостояниеСинхронизации + + + + 1 + + + + + СписокПриложенийПредставлениеДатыПоследнейУспешнойВыгрузки + 666 + true + true + + true + + + СписокПриложений.ПредставлениеДатыПоследнейУспешнойВыгрузки + + + СписокПриложенийПредставлениеДатыПоследнейУспешнойВыгрузкиРасширеннаяПодсказка + 668 + Label + true + true + + Left + + + + СписокПриложенийПредставлениеДатыПоследнейУспешнойВыгрузкиКонтекстноеМеню + 667 + true + + LabelField + Auto + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Список приложений группа последняя выгрузка</value> + + + СписокПриложенийГруппаПоследняяВыгрузкаРасширеннаяПодсказка + 651 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + СписокПриложенийГруппаПоследняяЗагрузка + 652 + + СписокПриложенийСостояниеЗагрузкиКартинка + 657 + true + true + + true + + + СписокПриложений.СостояниеЗагрузкиКартинка + + None + + СписокПриложенийСостояниеЗагрузкиКартинкаРасширеннаяПодсказка + 659 + Label + true + true + + Left + + + + СписокПриложенийСостояниеЗагрузкиКартинкаКонтекстноеМеню + 658 + true + + PictureField + Auto + true + Left + true + + true + true + true + true + + CommonPicture.СинхронизацияДанныхСостояниеСинхронизации + + + + 1 + + + + + СписокПриложенийПредставлениеДатыПоследнейУспешнойЗагрузки + 663 + true + true + + true + + + СписокПриложений.ПредставлениеДатыПоследнейУспешнойЗагрузки + + + СписокПриложенийПредставлениеДатыПоследнейУспешнойЗагрузкиРасширеннаяПодсказка + 665 + Label + true + true + + Left + + + + СписокПриложенийПредставлениеДатыПоследнейУспешнойЗагрузкиКонтекстноеМеню + 664 + true + + LabelField + Auto + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Список приложений группа последняя загрузка</value> + + + СписокПриложенийГруппаПоследняяЗагрузкаРасширеннаяПодсказка + 653 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + СписокПриложенийРасписаниеНастроено + 641 + true + true + + true + + + СписокПриложений.РасписаниеНастроено + + None + + ru + Включено - настроено расписание синхронизации данных. + + + СписокПриложенийРасписаниеНастроеноРасширеннаяПодсказка + 643 + Label + true + true + + Left + + + + СписокПриложенийРасписаниеНастроеноКонтекстноеМеню + 642 + true + + CheckBoxField Auto true @@ -3107,571 +1636,28 @@ Left true - - 2 - true - true - true - true - AutoSize - - CommonPicture.СинхронизацияДанныхСостояниеРасписания - - - - 1 - - - - - СписокСостоянияУзловИмяПланаОбмена - 89 - - <key>ru</key> - <value>Вид обмена</value> - - true - true - - true - - - СписокСостоянияУзлов.ИмяПланаОбмена - - - СписокСостоянияУзловИмяПланаОбменаExtendedTooltip - 501 - Label - true - true - - Left - - - - СписокСостоянияУзловИмяПланаОбменаКонтекстноеМеню - 90 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - СписокСостоянияУзловНаименованиеКорреспондента - 558 - true - true - - true - - - СписокСостоянияУзлов.НаименованиеКорреспондента - - - СписокСостоянияУзловНаименованиеКорреспондентаРасширеннаяПодсказка - 560 - Label - true - true - - Left - - - - СписокСостоянияУзловНаименованиеКорреспондентаКонтекстноеМеню - 559 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - СписокСостоянияУзловПрефиксИнформационнойБазы - 323 - true - true - - - СписокСостоянияУзлов.Код - - - ru - Префикс информационной базы - - - СписокСостоянияУзловПрефиксИнформационнойБазыExtendedTooltip - 503 - Label - true - true - - Left - - - - СписокСостоянияУзловПрефиксИнформационнойБазыКонтекстноеМеню - 324 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - ГруппаВыгрузки - 326 - - СписокСостоянияУзловГруппаУспешнойВыгрузки - 344 - - СписокСостоянияУзловРезультатПоследнейВыгрузкиДанных - 6 - true - true - - true - - - СписокСостоянияУзлов.РезультатПоследнейВыгрузкиДанных - - None - - ru - Состояние отправки данных - - - СписокСостоянияУзловРезультатПоследнейВыгрузкиДанныхExtendedTooltip - 506 - Label - true - true - - Left - - - - СписокСостоянияУзловРезультатПоследнейВыгрузкиДанныхКонтекстноеМеню - 7 - true - - PictureField - Auto - true - - StdPicture.MoveRight - - Left - true - - true - true - true - true - - CommonPicture.СостояниеОбменаДанными - - - - 1 - - - - - СписокСостоянияУзловДатаПоследнейУспешнойВыгрузки - 4 - true - true - - true - - - СписокСостоянияУзлов.ПредставлениеДатыПоследнейУспешнойВыгрузки - - - СписокСостоянияУзловДатаПоследнейУспешнойВыгрузкиExtendedTooltip - 507 - Label - true - true - - Left - - - - СписокСостоянияУзловДатаПоследнейУспешнойВыгрузкиКонтекстноеМеню - 5 - true - - InputField - Auto - true - Left - true - - true - true - true - - ru - ДП=Никогда - - - ru - ДП=Никогда - - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Список состояния узлов группа успешной выгрузки</value> - - - СписокСостоянияУзловГруппаУспешнойВыгрузкиExtendedTooltip - 505 - Label - true - true - - Left - - - ColumnGroup - - InCell - auto - true - - - - СписокСостоянияУзловДатаПоследнейВыгрузки - 36 - true - true - - - СписокСостоянияУзлов.ПредставлениеДатыПоследнейВыгрузки - - - СписокСостоянияУзловДатаПоследнейВыгрузкиExtendedTooltip - 508 - Label - true - true - - Left - - - - СписокСостоянияУзловДатаПоследнейВыгрузкиКонтекстноеМеню - 37 - true - - InputField - Left - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Выгрузки</value> - - - ГруппаВыгрузкиExtendedTooltip - 504 - Label - true - true - - Left - - - ColumnGroup - - Vertical - auto - true - - - - ГруппаЗагрузки - 40 - - СписокСостоянияУзловГруппаУспешнойЗагрузки - 343 - - СписокСостоянияУзловРезультатПоследнейЗагрузкиДанных - 8 - true - true - - true - - - СписокСостоянияУзлов.РезультатПоследнейЗагрузкиДанных - - None - - ru - Состояние получения данных - - - СписокСостоянияУзловРезультатПоследнейЗагрузкиДанныхExtendedTooltip - 511 - Label - true - true - - Left - - - - СписокСостоянияУзловРезультатПоследнейЗагрузкиДанныхКонтекстноеМеню - 9 - true - - PictureField - Auto - true - - StdPicture.MoveLeft - - Left - true - - true - true - true - true - - CommonPicture.СостояниеОбменаДанными - - - - 1 - - - - - СписокСостоянияУзловДатаПоследнейУспешнойЗагрузки - 12 - true - true - - true - - - СписокСостоянияУзлов.ПредставлениеДатыПоследнейУспешнойЗагрузки - - - СписокСостоянияУзловДатаПоследнейУспешнойЗагрузкиExtendedTooltip - 512 - Label - true - true - - Left - - - - СписокСостоянияУзловДатаПоследнейУспешнойЗагрузкиКонтекстноеМеню - 13 - true - - InputField - Auto - true - Left - true - - true - true - true - - ru - ДП=Никогда - - - ru - ДП=Никогда - - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Список состояния узлов группа успешной загрузки</value> - - - СписокСостоянияУзловГруппаУспешнойЗагрузкиExtendedTooltip - 510 - Label - true - true - - Left - - - ColumnGroup - - InCell - auto - true - - - - СписокСостоянияУзловДатаПоследнейЗагрузки - 38 - true - true - - - СписокСостоянияУзлов.ПредставлениеДатыПоследнейЗагрузки - - - СписокСостоянияУзловДатаПоследнейЗагрузкиExtendedTooltip - 513 - Label - true - true - - Left - - - - СписокСостоянияУзловДатаПоследнейЗагрузкиКонтекстноеМеню - 39 - true - - InputField - Left - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Загрузки</value> - - - ГруппаЗагрузкиExtendedTooltip - 509 - Label - true - true - - Left - - - ColumnGroup - - Vertical - auto - true - + None - СписокСостоянияУзловКоманднаяПанель + СписокПриложенийКоманднаяПанель 3 Left true Selection - СписокСостоянияУзловВыбор + СписокПриложенийВыбор OnActivateRow - СписокСостоянияУзловПриАктивизацииСтроки + СписокПриложенийПриАктивизацииСтроки - СписокСостоянияУзловСтрокаПоиска + СписокПриложенийСтрокаПоиска 537 - СписокСостоянияУзловСтрокаПоискаРасширеннаяПодсказка + СписокПриложенийСтрокаПоискаРасширеннаяПодсказка 539 Label true @@ -3681,20 +1667,20 @@ - СписокСостоянияУзловСтрокаПоискаКонтекстноеМеню + СписокПриложенийСтрокаПоискаКонтекстноеМеню 538 true - СписокСостоянияУзлов + СписокПриложений true - СписокСостоянияУзловСостояниеПросмотра + СписокПриложенийСостояниеПросмотра 540 - СписокСостоянияУзловСостояниеПросмотраРасширеннаяПодсказка + СписокПриложенийСостояниеПросмотраРасширеннаяПодсказка 542 Label true @@ -3704,21 +1690,21 @@ - СписокСостоянияУзловСостояниеПросмотраКонтекстноеМеню + СписокПриложенийСостояниеПросмотраКонтекстноеМеню 541 true ViewStatusAddition - СписокСостоянияУзлов + СписокПриложений true - СписокСостоянияУзловУправлениеПоиском + СписокПриложенийУправлениеПоиском 543 - СписокСостоянияУзловУправлениеПоискомРасширеннаяПодсказка + СписокПриложенийУправлениеПоискомРасширеннаяПодсказка 545 Label true @@ -3728,18 +1714,18 @@ - СписокСостоянияУзловУправлениеПоискомКонтекстноеМеню + СписокПриложенийУправлениеПоискомКонтекстноеМеню 544 true SearchControlAddition - СписокСостоянияУзлов + СписокПриложений true - СписокСостоянияУзловExtendedTooltip + СписокПриложенийРасширеннаяПодсказка 499 Label true @@ -3749,23 +1735,22 @@ - СписокСостоянияУзловКонтекстноеМеню + СписокПриложенийКонтекстноеМеню 2 - ГруппаКнопокВыполненияОбменаДанными - 101 + СписокПриложенийКонтекстноеМенюГруппаИзменениеИСостав + 693 - ВыполнитьОбменДаннымиМенюСписка - 96 + СписокПриложенийКонтекстноеМенюИзменитьНастройкуСинхронизации + 679 true true true - false - ВыполнитьОбменДаннымиМенюСпискаExtendedTooltip - 489 + СписокПриложенийКонтекстноеМенюИзменитьНастройкуСинхронизацииРасширеннаяПодсказка + 680 Label true true @@ -3773,7 +1758,7 @@ Left - Form.Command.ВыполнитьОбменДанными + Form.Command.ИзменитьНастройкуСинхронизации Normal Auto true @@ -3782,92 +1767,16 @@ Auto - ВыполнитьОбменДаннымиИнтерактивноМенюСписка - 97 + СписокПриложенийКонтекстноеМенюСоставОтправляемыхДанных + 687 true true true - ВыполнитьОбменДаннымиИнтерактивноМенюСпискаExtendedTooltip - 490 - Label - true - true - - Left - - - Form.Command.ВыполнитьОбменДаннымиИнтерактивно - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Кнопок выполнения обмена данными</value> - - - ГруппаКнопокВыполненияОбменаДаннымиExtendedTooltip - 488 - Label - true - true - - Left - - - - - - КонтекстноеМенюСписокИзменениеИСостав - 556 - - СписокСостоянияУзловКонтекстноеМенюИзменитьУзелИнформационнойБазы - 317 - true - true - - true - - - СписокСостоянияУзловКонтекстноеМенюИзменитьУзелИнформационнойБазыExtendedTooltip - 491 - Label - true - true - - Left - - - Form.Command.ИзменитьУзелИнформационнойБазы - Normal - Auto - true - true - UserCmds - Auto - - - СписокСостоянияУзловКонтекстноеМенюСоставОтправляемыхДанных - 362 - true - true - - true - - - СписокСостоянияУзловКонтекстноеМенюСоставОтправляемыхДанныхExtendedTooltip - 492 + СписокПриложенийКонтекстноеМенюСоставОтправляемыхДанныхРасширеннаяПодсказка + 688 Label true true @@ -3890,11 +1799,11 @@ <key>ru</key> - <value>Контекстное меню список изменение и состав</value> + <value>Список приложений контекстное меню группа изменение и состав</value> - КонтекстноеМенюСписокИзменениеИСоставРасширеннаяПодсказка - 557 + СписокПриложенийКонтекстноеМенюГруппаИзменениеИСоставРасширеннаяПодсказка + 694 Label true true @@ -3905,20 +1814,19 @@ - КонтекстноеМенюСписокСостоянияДиагностика - 86 + СписокПриложенийКонтекстноеМенюГруппаВыполненияОбменаДанными + 695 - КонтекстноеМенюСписокСостоянияУзловПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных - 85 + СписокПриложенийКонтекстноеМенюВыполнитьСинхронизацию + 673 true true true - false - КонтекстноеМенюСписокСостоянияУзловПерейтиВЖурналРегистрацииСобытийЗагрузкиДанныхExtendedTooltip - 494 + СписокПриложенийКонтекстноеМенюВыполнитьСинхронизациюРасширеннаяПодсказка + 674 Label true true @@ -3926,34 +1834,7 @@ Left - Form.Command.ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных - Normal - Auto - true - true - UserCmds - Auto - - - КонтекстноеМенюСписокСостоянияУзловПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных - 84 - true - true - - true - - false - - КонтекстноеМенюСписокСостоянияУзловПерейтиВЖурналРегистрацииСобытийВыгрузкиДанныхExtendedTooltip - 495 - Label - true - true - - Left - - - Form.Command.ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных + Form.Command.ВыполнитьСинхронизацию Normal Auto true @@ -3968,11 +1849,11 @@ <key>ru</key> - <value>Диагностика</value> + <value>Список приложений контекстное меню группа выполнения обмена данными</value> - КонтекстноеМенюСписокСостоянияДиагностикаExtendedTooltip - 493 + СписокПриложенийКонтекстноеМенюГруппаВыполненияОбменаДаннымиРасширеннаяПодсказка + 696 Label true true @@ -3983,19 +1864,19 @@ - ГруппаКнопокНастройкиРасписания - 104 + СписокПриложенийКонтекстноеМенюГруппаРасписаниеВыполненияОбмена + 699 - НастроитьРасписаниеВыполненияОбмена1 - 105 + СписокПриложенийКонтекстноеМенюНастроитьСценарииОбменаДанными + 685 true true true - НастроитьРасписаниеВыполненияОбмена1ExtendedTooltip - 497 + СписокПриложенийКонтекстноеМенюНастроитьСценарииОбменаДаннымиРасширеннаяПодсказка + 686 Label true true @@ -4018,11 +1899,87 @@ <key>ru</key> - <value>Кнопок настройки расписания</value> + <value>Список приложений контекстное меню группа расписание выполнения обмена</value> - ГруппаКнопокНастройкиРасписанияExtendedTooltip - 496 + СписокПриложенийКонтекстноеМенюГруппаРасписаниеВыполненияОбменаРасширеннаяПодсказка + 700 + Label + true + true + + Left + + + + + + СписокПриложенийКонтекстноеМенюГруппаСобытия + 689 + + СписокПриложенийКонтекстноеМенюПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных + 675 + true + true + + true + + + СписокПриложенийКонтекстноеМенюПерейтиВЖурналРегистрацииСобытийВыгрузкиДанныхРасширеннаяПодсказка + 676 + Label + true + true + + Left + + + Form.Command.ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных + Normal + Auto + true + true + UserCmds + Auto + + + СписокПриложенийКонтекстноеМенюПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных + 677 + true + true + + true + + + СписокПриложенийКонтекстноеМенюПерейтиВЖурналРегистрацииСобытийЗагрузкиДанныхРасширеннаяПодсказка + 678 + Label + true + true + + Left + + + Form.Command.ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Список приложений контекстное меню группа события</value> + + + СписокПриложенийКонтекстноеМенюГруппаСобытияРасширеннаяПодсказка + 690 Label true true @@ -4033,16 +1990,16 @@ - СписокСостоянияУзловКонтекстноеМенюИнформацияПоОбмену - 321 + СписокПриложенийКонтекстноеМенюОбновитьМонитор + 669 true true true - СписокСостоянияУзловКонтекстноеМенюИнформацияПоОбменуExtendedTooltip - 498 + СписокПриложенийКонтекстноеМенюОбновитьМониторРасширеннаяПодсказка + 670 Label true true @@ -4050,7 +2007,7 @@ Left - Form.Command.ИнформацияПоОбмену + Form.Command.ОбновитьМонитор Normal Auto true @@ -4058,6 +2015,56 @@ UserCmds Auto + + СписокПриложенийКонтекстноеМенюГруппаУправление + 697 + + СписокПриложенийКонтекстноеМенюУдалитьНастройкуСинхронизации + 683 + true + true + + true + + + СписокПриложенийКонтекстноеМенюУдалитьНастройкуСинхронизацииРасширеннаяПодсказка + 684 + Label + true + true + + Left + + + Form.Command.УдалитьНастройкуСинхронизации + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Список приложений контекстное меню группа управление</value> + + + СписокПриложенийКонтекстноеМенюГруппаУправлениеРасширеннаяПодсказка + 698 + Label + true + true + + Left + + + + true true @@ -4081,124 +2088,15 @@ true true true + + СписокПриложений.РежимРаботыПриложения + + + CommonPicture.РежимИспользованияПриложенияВСервисеЛокально + true - - ГруппаПрефикса - 337 - - ПрефиксИБ - 333 - - <key>ru</key> - <value>Префикс этой информационной базы</value> - - true - true - - true - - - ПрефиксИБ - - true - - ru - Префикс добавляется автоматически к кодам элементов справочников -и номерам документов для того, чтобы различать, в какой из программ -они были введены, и избежать дублирования данных - - - ПрефиксИБExtendedTooltip - 515 - Label - true - true - - Left - - - - ПрефиксИБКонтекстноеМеню - 334 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - Декорация6 - 352 - true - true - - true - - - Декорация6ExtendedTooltip - 516 - Label - true - true - - Left - - - - Декорация6КонтекстноеМеню - 353 - true - - Label - true - true - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Префикса</value> - - - ГруппаПрефиксаExtendedTooltip - 514 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - true true @@ -4206,11 +2104,11 @@ <key>ru</key> - <value>Несколько синхронизаций</value> + <value>Страница список приложений</value> - НесколькоСинхронизацийExtendedTooltip - 452 + СтраницаСписокПриложенийРасширеннаяПодсказка + 704 Label true true @@ -4225,6 +2123,101 @@ false + + СтраницаОжидание + 705 + + Декорация1 + 707 + true + true + + true + + + Декорация1РасширеннаяПодсказка + 709 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 708 + true + + true + true + + + CommonPicture.ДлительнаяОперация48 + + + + + Декорация2 + 710 + + <key>ru</key> + <value>Выполняется получение списка настроенных синхронизаций данных. +Пожалуйста, подождите...</value> + + true + true + + true + + + Декорация2РасширеннаяПодсказка + 712 + Label + true + true + + Left + + + + Декорация2КонтекстноеМеню + 711 + true + + Label + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Страница ожидание</value> + + + СтраницаОжиданиеРасширеннаяПодсказка + 706 + Label + true + true + + Left + + + Page + + AlwaysHorizontal + Center + auto + false + + true true @@ -4232,11 +2225,11 @@ <key>ru</key> - <value>Синхронизация данных</value> + <value>Панель список приложений</value> - СинхронизацияДанныхExtendedTooltip - 392 + ПанельСписокПриложенийРасширеннаяПодсказка + 702 Label true true @@ -4249,6 +2242,127 @@ Auto + + ГруппаПрефиксИБ + 337 + + ДекорацияКартинкаПрефикс + 636 + + <key>ru</key> + <value>Декорация картинка префикс</value> + + true + true + + true + + + ДекорацияКартинкаПрефиксРасширеннаяПодсказка + 638 + Label + true + true + + Left + + + + ДекорацияКартинкаПрефиксКонтекстноеМеню + 637 + true + + true + true + + + CommonPicture.ИнформацияПоНедоступнымПолям + + + + + ПрефиксИБ + 333 + + <key>ru</key> + <value>Префикс этой информационной базы</value> + + true + true + + true + + + ПрефиксИБ + + true + + ru + Префикс добавляется автоматически к кодам элементов справочников +и номерам документов для того, чтобы различать, в какой из программ +они были введены, и избежать дублирования данных + + + ПрефиксИБРасширеннаяПодсказка + 515 + Label + true + true + + Left + + + + ПрефиксИБКонтекстноеМеню + 334 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Префикс ИБ</value> + + + ГруппаПрефиксИБРасширеннаяПодсказка + 514 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Center + Auto + true + true + Auto + Auto + + ФормаКоманднаяПанель -1 @@ -4275,10 +2389,10 @@ auto true - СписокСостоянияУзлов + СписокПриложений <key>ru</key> - <value>Список состояния узлов</value> + <value>Список приложений</value> 1 @@ -4290,64 +2404,8 @@ true - - ДатаПоследнейУспешнойВыгрузки - - <key>ru</key> - <value>Данные отправлены</value> - - 1 - - Date - - - - true - - - true - - - - РезультатПоследнейВыгрузкиДанных - 2 - - Number - - 1 - true - - - - true - - - true - - - - РезультатПоследнейЗагрузкиДанных - 3 - - Number - - 1 - true - - - - true - - - true - - УзелИнформационнойБазы - - <key>ru</key> - <value>Информационная база</value> - 4 ExchangePlanRef @@ -4359,60 +2417,6 @@ true - - ДатаПоследнейУспешнойЗагрузки - - <key>ru</key> - <value>Данные получены</value> - - 5 - - Date - - - - true - - - true - - - - ДатаПоследнейЗагрузки - - <key>ru</key> - <value>Последняя попытка получения</value> - - 6 - - Date - - - - true - - - true - - - - ДатаПоследнейВыгрузки - - <key>ru</key> - <value>Последняя попытка отправки</value> - - 7 - - Date - - - - true - - - true - - ИмяПланаОбмена @@ -4432,28 +2436,7 @@ </edit> </columns> <columns> - <name>РасписаниеНастроено</name> - <title> - <key>ru</key> - <value>Расписание настроено</value> - - 9 - - Number - - 1 - true - - - - true - - - true - - - - Код + ПрефиксКорреспондента <key>ru</key> <value>Префикс</value> @@ -4472,42 +2455,6 @@ <common>true</common> </edit> </columns> - <columns> - <name>ПредставлениеДатыПоследнейЗагрузки</name> - <title> - <key>ru</key> - <value>Последняя попытка получения</value> - - 11 - - String - - - - true - - - true - - - - ПредставлениеДатыПоследнейВыгрузки - - <key>ru</key> - <value>Последняя попытка отправки</value> - - 12 - - String - - - - true - - - true - - ПредставлениеДатыПоследнейУспешнойЗагрузки @@ -4563,12 +2510,32 @@ </edit> </columns> <columns> - <name>НаименованиеКорреспондента</name> + <name>СостояниеКартинка</name> <title> <key>ru</key> - <value>Информационная база</value> + <value>Состояние картинка</value> - 16 + 17 + + Number + + 2 + + + + true + + + true + + + + СостояниеПредставление + + <key>ru</key> + <value>Состояние</value> + + 22 String @@ -4580,53 +2547,434 @@ true + + РасписаниеНастроено + + <key>ru</key> + <value>Расписание настроено</value> + + 23 + + Number + + true + + + + true + + + true + + + + РежимРаботыПриложения + + <key>ru</key> + <value>Режим работы приложения</value> + + 24 + + Number + + 1 + + + + true + + + true + + + + ИнтерактивнаяОтправка + + <key>ru</key> + <value>Интерактивная отправка</value> + + 16 + + Boolean + + + true + + + true + + + + НастройкаЗавершена + + <key>ru</key> + <value>Настройка завершена</value> + + 25 + + Boolean + + + true + + + true + + + + ИмяФормыПомощникаНастройкиСинхронизацииДанных + + <key>ru</key> + <value>Имя формы помощника настройки синхронизации данных</value> + + 26 + + String + + + + true + + + true + + + + ВерсияКорреспондента + + <key>ru</key> + <value>Версия корреспондента</value> + + 9 + + String + + + + true + + + true + + + + СостояниеВыгрузкиКартинка + + <key>ru</key> + <value>Состояние выгрузки картинка</value> + + 1 + + Number + + 10 + + + + true + + + true + + + + СостояниеЗагрузкиКартинка + + <key>ru</key> + <value>Состояние загрузки картинка</value> + + 2 + + Number + + 10 + + + + true + + + true + + + + РезультатПоследнейВыгрузкиДанных + + <key>ru</key> + <value>Результат последней выгрузки данных</value> + + 3 + + Number + + 10 + + + + true + + + true + + + + РезультатПоследнейЗагрузкиДанных + + <key>ru</key> + <value>Результат последней загрузки данных</value> + + 5 + + Number + + 10 + + + + true + + + true + + + + ПредставлениеДатыПоследнегоЗапуска + + <key>ru</key> + <value>Представление даты последнего запуска</value> + + 6 + + String + + + + true + + + true + + + + ДатаНачалаПоследнейЗагрузки + + <key>ru</key> + <value>Дата начала последней загрузки</value> + + 7 + + Date + + + + true + + + true + + + + ДатаОкончанияПоследнейЗагрузки + + <key>ru</key> + <value>Дата окончания последней загрузки</value> + + 11 + + Date + + + + true + + + true + + + + ДатаНачалаПоследнейВыгрузки + + <key>ru</key> + <value>Дата начала последней выгрузки</value> + + 12 + + Date + + + + true + + + true + + + + ДатаОкончанияПоследнейВыгрузки + + <key>ru</key> + <value>Дата окончания последней выгрузки</value> + + 18 + + Date + + + + true + + + true + + + + ДатаПоследнегоЗапуска + + <key>ru</key> + <value>Дата последнего запуска</value> + + 20 + + Date + + + + true + + + true + + + + ПолученоСообщениеДляСопоставленияДанных + + <key>ru</key> + <value>Получено сообщение для сопоставления данных</value> + + 21 + + Boolean + + + true + + + true + + + + ПредставлениеДатыСообщенияДляСопоставленияДанных + + <key>ru</key> + <value>Представление даты сообщения для сопоставления данных</value> + + 27 + + String + + + + true + + + true + + + + НастройкаСинхронизацииВМенеджереСервиса + + <key>ru</key> + <value>Настройка синхронизации в менеджере сервиса</value> + + 19 + + Boolean + + + true + + + true + + + + ЭтоОбменСПриложениемВСервисе + + <key>ru</key> + <value>Это обмен с приложением в сервисе</value> + + 28 + + Boolean + + + true + + + true + + + + ОбластьДанных + + <key>ru</key> + <value>Область данных</value> + + 29 + + Number + + 10 + + + + true + + + true + + + + НаименованиеКорреспондента + + <key>ru</key> + <value>Программа</value> + + 30 + + String + + + + true + + + true + + + + ЗапускОбменаИзКорреспондента + + <key>ru</key> + <value>Запуск обмена из корреспондента</value> + + 31 + + Boolean + + + true + + + true + + - НастраиваемыеСинхронизации + ЕстьПравоАдминистрированиеОбменов <key>ru</key> - <value>Настраиваемые синхронизации</value> - - 3 - - ValueList - - - true - - - true - - - - - - - КоличествоСинхронизаций - - <key>ru</key> - <value>Количество синхронизаций</value> - - 5 - - Number - - 1 - true - - - - true - - - true - - - - РольДоступнаДобавлениеИзменениеОбменовДанными - - <key>ru</key> - <value>Роль доступна добавление изменение обменов данными</value> + <value>Есть право администрирование обменов</value> 4 @@ -4639,42 +2987,6 @@ true - - ОписаниеПравилСинхронизацииДанных - - <key>ru</key> - <value>Описание правил синхронизации данных</value> - - 6 - - String - - - - true - - - true - - - - РасписаниеСинхронизацииДанных - - <key>ru</key> - <value>Расписание синхронизации данных</value> - - 7 - - String - - - - true - - - true - - СкрыватьУспешные @@ -4730,10 +3042,10 @@ </edit> </attributes> <attributes> - <name>ЕстьПравоНаПросмотрЖурналаРегистрации</name> + <name>ЕстьПравоПросмотрЖурналаРегистрации</name> <title> <key>ru</key> - <value>Есть право на просмотр журнала регистрации</value> + <value>Есть право просмотр журнала регистрации</value> 10 @@ -4746,6 +3058,192 @@ true + + ЕстьНастроенныеОбмены + + <key>ru</key> + <value>Есть настроенные обмены</value> + + 14 + + Boolean + + + true + + + true + + + + ТребуетсяОбновление + + <key>ru</key> + <value>Требуется обновление</value> + + 15 + + Boolean + + + true + + + true + + + + ФормаНовойСинхронизацииДанных + + <key>ru</key> + <value>Форма новой синхронизации данных</value> + + 16 + + String + + + + true + + + true + + + + ПараметрыФормыНовойСинхронизацииДанных + + <key>ru</key> + <value>Параметры формы новой синхронизации данных</value> + + 17 + + + true + + + true + + + + МодельСервиса + + <key>ru</key> + <value>Модель сервиса</value> + + 18 + + Boolean + + + true + + + true + + + + ПараметрыОбработчикаПолученияСпискаПриложений + + <key>ru</key> + <value>Параметры обработчика получения списка приложений</value> + + 19 + + + true + + + true + + + + ПараметрыОбработчикаОжиданияПолученияСпискаПриложений + + <key>ru</key> + <value>Параметры обработчика ожидания получения списка приложений</value> + + 20 + + + true + + + true + + + + ПриложенияМоделиСервиса + + <key>ru</key> + <value>Приложения модели сервиса</value> + + 21 + + ValueTable + + + true + + + true + + + Корреспондент + + <key>ru</key> + <value>Корреспондент</value> + + 1 + + ExchangePlanRef + + + true + + + true + + + + ОбластьДанных + + <key>ru</key> + <value>Область данных</value> + + 2 + + Number + + 10 + + + + true + + + true + + + + НаименованиеПриложения + + <key>ru</key> + <value>Наименование приложения</value> + + 3 + + String + + + + true + + + true + + + ОбновитьМонитор @@ -4769,14 +3267,15 @@ <name>ОбновитьМонитор</name> </handler> </action> + <representation>TextPicture</representation> <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> - <name>ВыполнитьОбменДанными</name> + <name>ВыполнитьСинхронизацию</name> <title> <key>ru</key> - <value>Синхронизировать</value> + <value>Запустить синхронизацию</value> 3 @@ -4791,7 +3290,7 @@ - ВыполнитьОбменДанными + ВыполнитьСинхронизацию TextPicture @@ -4799,10 +3298,10 @@ Auto - ИзменитьУзелИнформационнойБазы + ИзменитьНастройкуСинхронизации <key>ru</key> - <value>Изменить</value> + <value>Настроить...</value> 4 @@ -4813,13 +3312,14 @@ true - StdPicture.Change + CommonPicture.СинхронизацияДанныхНастройка ИзменитьУзелИнформационнойБазы + TextPicture DontUse Auto @@ -4837,6 +3337,9 @@ true + + StdPicture.EventLog + ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных @@ -4859,6 +3362,9 @@ true + + StdPicture.EventLog + ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных @@ -4867,32 +3373,6 @@ DontUse Auto - - ВыполнитьОбменДаннымиИнтерактивно - - <key>ru</key> - <value>Синхронизировать с дополнительными параметрами...</value> - - 2 - - ru - Синхронизировать данные, задав дополнительные параметры - - - true - - - CommonPicture.СинхронизацияДанныхИнтерактивноеВыполнение - - - - ВыполнитьОбменДаннымиИнтерактивно - - - Picture - DontUse - Auto - НастроитьСценарииОбменаДанными @@ -4940,71 +3420,6 @@ <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> - <formCommands> - <name>НастроитьСценарииОбменаДаннымиОдна</name> - <title> - <key>ru</key> - <value>Сценарии синхронизации данных</value> - - 13 - - ru - Настроить сценарии обмена данными - - - true - - - - НастроитьСценарииОбменаДаннымиОдна - - - DontUse - Auto - - - СкрытьУспешные - - <key>ru</key> - <value>Только неуспешные</value> - - 9 - - ru - Показать только неуспешные попытки синхронизации данных - - - true - - - - СкрытьУспешные - - - DontUse - Auto - - - ИнформацияПоОбмену - - <key>ru</key> - <value>Подробнее о синхронизации данных с этой программой</value> - - 12 - - true - - - CommonPicture.Информация - - - - ИнформацияПоОбмену - - - DontUse - Auto - ОткрытьРезультатыСинхронизацииДанных @@ -5021,7 +3436,7 @@ </use> <action xsi:type="form:FormCommandHandlerContainer"> <handler> - <name>ОткрытьРезультатыОднаСинхронизация</name> + <name>ОткрытьРезультатыСинхронизацииДанных</name> </handler> </action> <currentRowUse>DontUse</currentRowUse> @@ -5092,6 +3507,9 @@ <use> <common>true</common> </use> + <picture xsi:type="core:PictureRef"> + <picture>StdPicture.OpenFile</picture> + </picture> <action xsi:type="form:FormCommandHandlerContainer"> <handler> <name>ЗагрузитьПравилаСинхронизацииДанных</name> @@ -5100,6 +3518,79 @@ <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>СоздатьНастройкуСинхронизации</name> + <title> + <key>ru</key> + <value>Новая синхронизация данных</value> + + 10 + + ru + Создать настройку синхронизации + + + true + + + StdPicture.CreateListItem + + + + СоздатьНастройкуСинхронизации + + + TextPicture + Auto + Auto + + + ИнформацияПоОбмену + + <key>ru</key> + <value>Подробнее о синхронизации данных с этой программой</value> + + 2 + + ru + Информация по обмену + + + true + + + CommonPicture.Информация + + + + ИнформацияПоОбмену + + + DontUse + Auto + + + НачальнаяВыгрузкаДанных + + <key>ru</key> + <value>Выгрузка данных для сопоставления</value> + + 9 + + ru + Начальная выгрузка данных + + + true + + + + НачальнаяВыгрузкаДанных + + + Auto + Auto + diff --git a/SSL/src/CommonForms/СинхронизацияДанных/Help/ru.html b/SSL/src/CommonForms/СинхронизацияДанных/Help/ru.html index a723831f7..2911e22e2 100644 --- a/SSL/src/CommonForms/СинхронизацияДанных/Help/ru.html +++ b/SSL/src/CommonForms/СинхронизацияДанных/Help/ru.html @@ -1,47 +1,66 @@

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

            -

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

            +

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

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

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

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

              +

              Информация по датам выполненных отправок и получений, для наглядности неуспешные отправки и получения данных отмечаются красным значком . Значком  обозначаются предупреждения. Отражается также состояние синхронизации (время, прошедшее с последней попытки синхронизации в минутах, Сейчас, Никогда):

              • Данные отправлены - отражается время последней отправки данных;

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

            Настройка синхронизации данных

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

        Состояния синхронизации данных

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

        Просмотр информации о настройке

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

        Синхронизация данных

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

        Синхронизация данных вручную

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

        Настройка синхронизации по расписанию

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

    Настройка синхронизации данных

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

    Просмотр информации о настройке

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

    Синхронизация данных

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

    Изменение синхронизации данных

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

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

    +

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

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

    Настройка синхронизации по расписанию

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

    Просмотр предупреждений

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

    Показывать только неуспешные

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

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

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

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

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

    Замена правил для синхронизации из внешнего файла

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

      Удаление настройки синхронизации

      diff --git a/SSL/src/CommonForms/СинхронизацияДанных/Module.bsl b/SSL/src/CommonForms/СинхронизацияДанных/Module.bsl index f005f94c7..85691f479 100644 --- a/SSL/src/CommonForms/СинхронизацияДанных/Module.bsl +++ b/SSL/src/CommonForms/СинхронизацияДанных/Module.bsl @@ -1,64 +1,32 @@ - #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + УстановитьУсловноеОформление(); + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; + ПроверитьВозможностьНастройкиСинхронизацииДанных(Отказ); + + Если Отказ Тогда + Возврат; + КонецЕсли; + НавигационнаяСсылка = "e1cib/app/ОбщаяФорма.СинхронизацияДанных"; - РольДоступнаДобавлениеИзменениеОбменовДанными = ОбменДаннымиСервер.ЕстьПраваНаАдминистрированиеОбменов(); - Если Не РольДоступнаДобавлениеИзменениеОбменовДанными Тогда - Элементы.СписокСостоянияУзловИзменитьУзелИнформационнойБазы.Видимость = Ложь; - КонецЕсли; + ИнициализироватьРеквизитыФормы(); - Если Не ПравоДоступа("Администрирование", Метаданные) Тогда - Элементы.СоставОтправляемыхДанных.Видимость = Ложь; - Элементы.СписокСостоянияУзловСоставОтправляемыхДанных.Видимость = Ложь; - Элементы.СписокСостоянияУзловКонтекстноеМенюСоставОтправляемыхДанных.Видимость = Ложь; - Элементы.УдалитьНастройкуСинхронизации.Видимость = Ложь; - Элементы.СписокСостоянияУзловУдалитьНастройкуСинхронизации.Видимость = Ложь; - КонецЕсли; - - СписокПлановОбмена = ОбменДаннымиПовтИсп.СписокПлановОбменаБСП(); - Если СписокПлановОбмена.Количество() = 0 Тогда - ТекстСообщения = НСтр("ru = 'Возможность настройки синхронизации данных не предусмотрена.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,,,, Отказ); - Возврат; - КонецЕсли; - - Если РольДоступнаДобавлениеИзменениеОбменовДанными Тогда - ДобавитьКомандыСозданияНовогоОбмена(); - Иначе - Элементы.ГруппаНастройкаСинхронизации.Видимость = Ложь; - Элементы.ИнформационнаяНадпись.ТекущаяСтраница = Элементы.НетПравНаСинхронизацию; - Элементы.ГруппаСценарииСинхронизации.Видимость = Ложь; - Элементы.ГруппаНастройкиСинхронизации.Видимость = Ложь; - КонецЕсли; - - ОбновитьСписокСостоянияУзлов(); - - Если Не РольДоступнаДобавлениеИзменениеОбменовДанными Или ОбщегоНазначения.РазделениеВключено() Тогда - - Элементы.ПрефиксСинхронизацияНеНастроена.Видимость = Ложь; - Элементы.ПрефиксОднаСинхронизация.Видимость = Ложь; - Элементы.ПрефиксИБ.Видимость = Ложь; - - Иначе - - ПрефиксИБ = ОбменДаннымиСервер.ПрефиксИнформационнойБазы(); - - КонецЕсли; + УстановитьОтображениеЭлементовФормы(); КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) - ПодключитьОбработчикОжидания("ОбновитьДанныеМонитора", 60); + ОбновитьДанныеМонитораИнтерактивно(); КонецПроцедуры @@ -66,14 +34,17 @@ Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Если ИмяСобытия = "ВыполненОбменДанными" - ИЛИ ИмяСобытия = "Запись_СценарииОбменовДанными" - ИЛИ ИмяСобытия = "Запись_УзелПланаОбмена" - ИЛИ ИмяСобытия = "ЗакрытаФормаПомощникаСопоставленияОбъектов" - ИЛИ ИмяСобытия = "ЗакрытаФормаПомощникаСозданияОбменаДанными" - ИЛИ ИмяСобытия = "ЗакрытаФормаРезультатовОбменаДанными" Тогда + Или ИмяСобытия = "Запись_СценарииОбменовДанными" + Или ИмяСобытия = "Запись_УзелПланаОбмена" + Или ИмяСобытия = "ЗакрытаФормаПомощникаСопоставленияОбъектов" + Или ИмяСобытия = "ЗакрытаФормаРезультатовОбменаДанными" Тогда - // обновляем данные монитора - ОбновитьДанныеМонитора(); + ОбновитьДанныеМонитораВФоне(); + + ИначеЕсли ИмяСобытия = "ЗакрытаФормаПомощникаСозданияОбменаДанными" + Или ИмяСобытия = "ЗакрытаФормаУдаленияНастройкиСинхронизации" Тогда + + ОбновитьДанныеМонитораИнтерактивно(); КонецЕсли; @@ -84,32 +55,15 @@ #Область ОбработчикиСобытийЭлементовТаблицыФормыСписокСостоянияУзлов &НаКлиенте -Процедура СписокСостоянияУзловВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) +Процедура СписокПриложенийВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - ОписаниеОповещения = Новый ОписаниеОповещения("СписокСостоянияУзловВыборЗавершение", ЭтотОбъект); - ПоказатьВопрос(ОписаниеОповещения, НСтр("ru = 'Выполнить синхронизацию данных?'"), РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Да); - -КонецПроцедуры - -&НаКлиенте -Процедура СписокСостоянияУзловВыборЗавершение(Ответ, ДополнительныеПараметры) Экспорт - - Если Ответ = КодВозвратаДиалога.Да Тогда - - АвтоматическаяСинхронизация = (Элементы.СписокСостоянияУзлов.ТекущиеДанные.ВариантОбменаДанными = "Синхронизация"); - - Получатель = Элементы.СписокСостоянияУзлов.ТекущиеДанные.УзелИнформационнойБазы; - - ОбменДаннымиКлиент.ВыполнитьОбменДаннымиОбработкаКоманды(Получатель, ЭтотОбъект,, АвтоматическаяСинхронизация); + ТекущиеДанные = Элементы.СписокПриложений.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + Возврат; КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура СписокСостоянияУзловПриАктивизацииСтроки(Элемент) - - ПодключитьОбработчикОжидания("Подключаемый_СписокСостоянияУзловПриАктивизацииСтроки", 0.1, Истина); + ОткрытьФормуНастройкиПараметровСинхронизации(ТекущиеДанные); КонецПроцедуры @@ -118,53 +72,58 @@ #Область ОбработчикиКомандФормы &НаКлиенте -Процедура ВыполнитьОбменДанными(Команда) +Процедура ВыполнитьСинхронизацию(Команда) - ОбновитьДанныеМонитора(); - - ТекущиеДанные = ?(КоличествоСинхронизаций = 1, СписокСостоянияУзлов[0], Элементы.СписокСостоянияУзлов.ТекущиеДанные); + ТекущиеДанные = Элементы.СписокПриложений.ТекущиеДанные; Если ТекущиеДанные = Неопределено Тогда Возврат; КонецЕсли; - УзелОбмена = ТекущиеДанные.УзелИнформационнойБазы; - - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("УзелОбмена", УзелОбмена); - ДополнительныеПараметры.Вставить("АвтоматическаяСинхронизация", (ТекущиеДанные.ВариантОбменаДанными = "Синхронизация")); - ДополнительныеПараметры.Вставить("ИнтерактивнаяОтправка", Ложь); - - ОписаниеПродолжения = Новый ОписаниеОповещения("ПродолжитьВыполнениеСинхронизации", ЭтотОбъект, ДополнительныеПараметры); - ПроверитьСовместимостьПравилКонвертации(УзелОбмена, ОписаниеПродолжения); - -КонецПроцедуры - -&НаКлиенте -Процедура ВыполнитьОбменДаннымиИнтерактивно(Команда) - - ТекущиеДанные = ?(КоличествоСинхронизаций = 1, СписокСостоянияУзлов[0], Элементы.СписокСостоянияУзлов.ТекущиеДанные); - - Если ТекущиеДанные = Неопределено Тогда - Возврат; + Если Не НастройкаСинхронизацииЗавершена(ТекущиеДанные.УзелИнформационнойБазы) Тогда + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ТекущиеДанные", ТекущиеДанные); + + ОповещениеЗавершения = Новый ОписаниеОповещения("ВопросПродолжитьНастройкуСинхронизацииЗавершение", ЭтотОбъект, ДополнительныеПараметры); + ПоказатьВопрос(ОповещениеЗавершения, + НСтр("ru = 'Перед запуском синхронизации данных необходимо завершить ее настройку. + |Открыть форму помощника настройки?'"), + РежимДиалогаВопрос.ДаНет); + ИначеЕсли ТекущиеДанные.ЗапускОбменаИзКорреспондента + И Не ТекущиеДанные.ПолученоСообщениеДляСопоставленияДанных Тогда + ПоказатьПредупреждение(, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Запуск синхронизации с ""%1"" из этой программы не поддерживается. + |Перейдите в ""%1"" и запустите синхронизацию из нее.'"), ТекущиеДанные.НаименованиеКорреспондента)); + Иначе + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("УзелОбмена", ТекущиеДанные.УзелИнформационнойБазы); + ДополнительныеПараметры.Вставить("ИмяПланаОбмена", ТекущиеДанные.ИмяПланаОбмена); + + ДополнительныеПараметры.Вставить("ОтправитьДанные", Не ТекущиеДанные.ЗапускОбменаИзКорреспондента); + ДополнительныеПараметры.Вставить("ИнтерактивнаяОтправка", ТекущиеДанные.ИнтерактивнаяОтправка); + ДополнительныеПараметры.Вставить("АвтоматическаяСинхронизация", ТекущиеДанные.ВариантОбменаДанными = "Синхронизация"); + + ДополнительныеПараметры.Вставить("НастройкаРасписания", Ложь); + + Если МодельСервиса Тогда + ДополнительныеПараметры.Вставить("ОбластьДанныхКорреспондента", ТекущиеДанные.ОбластьДанных); + КонецЕсли; + + ОписаниеПродолжения = Новый ОписаниеОповещения("ПродолжитьВыполнениеСинхронизации", ЭтотОбъект, ДополнительныеПараметры); + + Если ТекущиеДанные.ЭтоОбменСПриложениемВСервисе Тогда + ВыполнитьОбработкуОповещения(ОписаниеПродолжения); + Иначе + ПроверитьСовместимостьПравилКонвертации(ОписаниеПродолжения); + КонецЕсли; КонецЕсли; - УзелОбмена = ТекущиеДанные.УзелИнформационнойБазы; - - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("УзелОбмена", УзелОбмена); - ДополнительныеПараметры.Вставить("ИнтерактивнаяОтправка", Истина); - - ОписаниеПродолжения = Новый ОписаниеОповещения("ПродолжитьВыполнениеСинхронизации", ЭтотОбъект, ДополнительныеПараметры); - - ПроверитьСовместимостьПравилКонвертации(УзелОбмена, ОписаниеПродолжения); - КонецПроцедуры &НаКлиенте Процедура НастроитьСценарииОбменаДанными(Команда) - ТекущиеДанные = Элементы.СписокСостоянияУзлов.ТекущиеДанные; + ТекущиеДанные = Элементы.СписокПриложений.ТекущиеДанные; Если ТекущиеДанные = Неопределено Тогда Возврат; @@ -177,209 +136,128 @@ &НаКлиенте Процедура ОбновитьМонитор(Команда) - ОбновитьДанныеМонитора(); + ОбновитьДанныеМонитораИнтерактивно(); КонецПроцедуры &НаКлиенте Процедура ИзменитьУзелИнформационнойБазы(Команда) - Если КоличествоСинхронизаций = 1 Тогда - - УзелОбмена = СписокСостоянияУзлов[0].УзелИнформационнойБазы; - - Иначе - - ТекущиеДанные = Элементы.СписокСостоянияУзлов.ТекущиеДанные; - - Если ТекущиеДанные = Неопределено Тогда - Возврат; - КонецЕсли; - - УзелОбмена = ТекущиеДанные.УзелИнформационнойБазы; + ТекущиеДанные = Элементы.СписокПриложений.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + Возврат; КонецЕсли; - ПоказатьЗначение(, УзелОбмена); + ОткрытьФормуНастройкиПараметровСинхронизации(ТекущиеДанные); КонецПроцедуры &НаКлиенте Процедура ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных(Команда) - Если КоличествоСинхронизаций = 1 Тогда - - УзелОбмена = СписокСостоянияУзлов[0].УзелИнформационнойБазы; - - Иначе - - ТекущиеДанные = Элементы.СписокСостоянияУзлов.ТекущиеДанные; - УзелОбмена = ТекущиеДанные.УзелИнформационнойБазы; - - КонецЕсли; - - ОбменДаннымиКлиент.ПерейтиВЖурналРегистрацииСобытийДанныхМодально(УзелОбмена, ЭтотОбъект, "ЗагрузкаДанных"); + ПерейтиВЖурналРегистрацииСобытий("ЗагрузкаДанных"); КонецПроцедуры &НаКлиенте Процедура ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных(Команда) - Если КоличествоСинхронизаций = 1 Тогда - - УзелОбмена = СписокСостоянияУзлов[0].УзелИнформационнойБазы; - - Иначе - - ТекущиеДанные = Элементы.СписокСостоянияУзлов.ТекущиеДанные; - УзелОбмена = ТекущиеДанные.УзелИнформационнойБазы; - - КонецЕсли; - - ОбменДаннымиКлиент.ПерейтиВЖурналРегистрацииСобытийДанныхМодально(УзелОбмена, ЭтотОбъект, "ВыгрузкаДанных"); - -КонецПроцедуры - -&НаКлиенте -Процедура ОткрытьПомощникНастройкиОбменаДанными(Команда) - - ОбменДаннымиКлиент.ОткрытьПомощникНастройкиОбменаДанными(Команда.Имя); + ПерейтиВЖурналРегистрацииСобытий("ВыгрузкаДанных"); КонецПроцедуры &НаКлиенте Процедура УстановитьОбновление(Команда) + ОбменДаннымиКлиент.УстановитьОбновлениеКонфигурации(); -КонецПроцедуры - -&НаКлиенте -Процедура НастроитьСценарииОбменаДаннымиОдна(Команда) - - УзелОбмена = СписокСостоянияУзлов[0].УзелИнформационнойБазы; - - СценарийСинхронизации = СценарийСинхронизацииПоУзлу(УзелОбмена); - ПараметрыФормы = Новый Структура; - - Если СценарийСинхронизации = Неопределено Тогда - - ПараметрыФормы.Вставить("УзелИнформационнойБазы", УзелОбмена); - - Иначе - - ПараметрыФормы.Вставить("Ключ", СценарийСинхронизации); - - КонецЕсли; - - ОткрытьФорму("Справочник.СценарииОбменовДанными.ФормаОбъекта", ПараметрыФормы, ЭтотОбъект); - -КонецПроцедуры - -&НаКлиенте -Процедура СкрытьУспешные(Команда) - - СкрыватьУспешные = Не СкрыватьУспешные; - - Элементы.СписокСостоянияУзловСкрыватьУспешные.Пометка = СкрыватьУспешные; - - ОбновитьСписокСостоянияУзлов(Истина); КонецПроцедуры &НаКлиенте Процедура ИнформацияПоОбмену(Команда) + + ТекущиеДанные = Элементы.СписокПриложений.ТекущиеДанные; - Если КоличествоСинхронизаций = 1 Тогда - - УзелОбмена = СписокСостоянияУзлов[0].УзелИнформационнойБазы; - - Иначе - - ТекущиеДанные = Элементы.СписокСостоянияУзлов.ТекущиеДанные; - Если ТекущиеДанные = Неопределено Тогда - Возврат; - КонецЕсли; - - УзелОбмена = ТекущиеДанные.УзелИнформационнойБазы; - + Если ТекущиеДанные = Неопределено Тогда + Возврат; КонецЕсли; - СсылкаНаПодробноеОписание = ПодробнаяИнформацияНаСервере(УзелОбмена); + СсылкаНаПодробноеОписание = ПодробнаяИнформацияНаСервере(ТекущиеДанные.УзелИнформационнойБазы); ОбменДаннымиКлиент.ОткрытьПодробноеОписаниеСинхронизации(СсылкаНаПодробноеОписание); КонецПроцедуры &НаКлиенте -Процедура ОткрытьРезультатыОднаСинхронизация(Команда) +Процедура ОткрытьРезультатыСинхронизацииДанных(Команда) - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("УзлыОбмена", МассивИспользуемыхУзлов(СписокСостоянияУзлов)); - ОткрытьФорму("РегистрСведений.РезультатыОбменаДанными.Форма.Форма", ПараметрыФормы); + ОбменДаннымиКлиент.ОткрытьРезультатыОбменаДанными(МассивИспользуемыхУзлов(СписокПриложений)); КонецПроцедуры &НаКлиенте Процедура СоставОтправляемыхДанных(Команда) - Если КоличествоСинхронизаций = 1 Тогда - - УзелОбмена = СписокСостоянияУзлов[0].УзелИнформационнойБазы; - - Иначе - - ТекущиеДанные = Элементы.СписокСостоянияУзлов.ТекущиеДанные; - - Если ТекущиеДанные = Неопределено Тогда - - Возврат; - - КонецЕсли; - - УзелОбмена = ТекущиеДанные.УзелИнформационнойБазы; - + ТекущиеДанные = Элементы.СписокПриложений.ТекущиеДанные; + + Если ТекущиеДанные = Неопределено Тогда + Возврат; КонецЕсли; - ОбменДаннымиКлиент.ОткрытьСоставОтправляемыхДанных(УзелОбмена); + ОбменДаннымиКлиент.ОткрытьСоставОтправляемыхДанных(ТекущиеДанные.УзелИнформационнойБазы); + +КонецПроцедуры + +&НаКлиенте +Процедура СоздатьНастройкуСинхронизации(Команда) + + ОбменДаннымиКлиент.ОткрытьФормуНастройкиНовойСинхронизацииДанных(ФормаНовойСинхронизацииДанных, + ПараметрыФормыНовойСинхронизацииДанных); КонецПроцедуры &НаКлиенте Процедура УдалитьНастройкуСинхронизации(Команда) - Если КоличествоСинхронизаций = 1 Тогда - - УзелОбмена = СписокСостоянияУзлов[0].УзелИнформационнойБазы; + ТекущиеДанные = Элементы.СписокПриложений.ТекущиеДанные; + + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + Если МодельСервиса + И ТекущиеДанные.НастройкаСинхронизацииВМенеджереСервиса Тогда + + ПоказатьПредупреждение(, НСтр("ru = 'Для удаления настройки синхронизации данных перейдите в менеджер сервиса. + |В менеджере сервиса воспользуйтесь командой ""Синхронизация данных"".'")); Иначе - ТекущиеДанные = Элементы.СписокСостоянияУзлов.ТекущиеДанные; + ПараметрыПомощника = Новый Структура; + ПараметрыПомощника.Вставить("УзелОбмена", ТекущиеДанные.УзелИнформационнойБазы); + ПараметрыПомощника.Вставить("ИмяПланаОбмена", ТекущиеДанные.ИмяПланаОбмена); + ПараметрыПомощника.Вставить("ОбластьДанныхКорреспондента", ТекущиеДанные.ОбластьДанных); + ПараметрыПомощника.Вставить("НаименованиеКорреспондента", ТекущиеДанные.НаименованиеКорреспондента); + ПараметрыПомощника.Вставить("ЭтоОбменСПриложениемВСервисе", ТекущиеДанные.ЭтоОбменСПриложениемВСервисе); - Если ТекущиеДанные = Неопределено Тогда - - Возврат; - - КонецЕсли; - - УзелОбмена = ТекущиеДанные.УзелИнформационнойБазы; + ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.УдалениеНастройкиСинхронизации", + ПараметрыПомощника, ЭтотОбъект, , , , , РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); КонецЕсли; - ОбменДаннымиКлиент.УдалитьНастройкуСинхронизации(УзелОбмена); - КонецПроцедуры &НаКлиенте Процедура ЗагрузитьПравилаСинхронизацииДанных(Команда) - ТекущиеДанные = ?(КоличествоСинхронизаций = 1, СписокСостоянияУзлов[0], Элементы.СписокСостоянияУзлов.ТекущиеДанные); + ТекущиеДанные = Элементы.СписокПриложений.ТекущиеДанные; Если ТекущиеДанные = Неопределено Тогда Возврат; КонецЕсли; - УзелОбмена = ТекущиеДанные.УзелИнформационнойБазы; - - СведенияОПланеОбмена = СведенияОПланеОбмена(УзелОбмена); + СведенияОПланеОбмена = СведенияОПланеОбмена(ТекущиеДанные.ИмяПланаОбмена); Если СведенияОПланеОбмена.ИспользуютсяПравилаКонвертации Тогда ОбменДаннымиКлиент.ЗагрузитьПравилаСинхронизацииДанных(СведенияОПланеОбмена.ИмяПланаОбмена); @@ -389,361 +267,627 @@ Отбор = Новый Структура("ИмяПланаОбмена, ВидПравил", СведенияОПланеОбмена.ИмяПланаОбмена, ВидПравил); ЗначенияЗаполнения = Новый Структура("ИмяПланаОбмена, ВидПравил", СведенияОПланеОбмена.ИмяПланаОбмена, ВидПравил); ОбменДаннымиКлиент.ОткрытьФормуЗаписиРегистраСведенийПоОтбору(Отбор, ЗначенияЗаполнения, "ПравилаДляОбменаДанными", - УзелОбмена, "ПравилаРегистрацииОбъектов"); + ТекущиеДанные.УзелИнформационнойБазы, "ПравилаРегистрацииОбъектов"); КонецЕсли; КонецПроцедуры + +&НаКлиенте +Процедура НачальнаяВыгрузкаДанных(Команда) + + ТекущиеДанные = Элементы.СписокПриложений.ТекущиеДанные; + + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + Если Не НастройкаСинхронизацииЗавершена(ТекущиеДанные.УзелИнформационнойБазы) Тогда + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ТекущиеДанные", ТекущиеДанные); + + ОповещениеЗавершения = Новый ОписаниеОповещения("ВопросПродолжитьНастройкуСинхронизацииЗавершение", ЭтотОбъект, ДополнительныеПараметры); + ПоказатьВопрос(ОповещениеЗавершения, + НСтр("ru = 'Перед выгрузкой данных для сопоставления необходимо завершить настройку синхронизации. + |Открыть форму помощника настройки?'"), + РежимДиалогаВопрос.ДаНет); + ИначеЕсли Не ТекущиеДанные.ИнтерактивнаяОтправка Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Для выбранного варианта настройки синхронизации выгрузка данных для сопоставления не поддерживается.'")); + Возврат; + Иначе + ПараметрыПомощника = Новый Структура; + ПараметрыПомощника.Вставить("УзелОбмена", ТекущиеДанные.УзелИнформационнойБазы); + ПараметрыПомощника.Вставить("ЭтоОбменСПриложениемВСервисе", ТекущиеДанные.ЭтоОбменСПриложениемВСервисе); + ПараметрыПомощника.Вставить("ОбластьДанныхКорреспондента", ТекущиеДанные.ОбластьДанных); + + ОповещениеОЗакрытии = Новый ОписаниеОповещения("НачальнаяВыгрузкаДанныхЗавершение", ЭтотОбъект); + ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.ВыгрузкаДанныхДляСопоставления", + ПараметрыПомощника, ЭтотОбъект, , , , , РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции + &НаСервере -Функция СведенияОПланеОбмена(Знач УзелИнформационнойБазы) +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // Тусклый цвет шрифта настроенной, но ни разу не запускавшейся синхронизации. + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписокПриложенийСостояниеПредставление.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокПриложений.СостояниеПредставление"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = НСтр("ru = 'Не запускалась'"); + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); + + // Текст "н/д" и тусклый цвет шрифта для отсутствующего префикса программы-корреспондента. + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписокПриложенийПрефиксКорреспондента.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокПриложений.ПрефиксКорреспондента"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", "н/д"); + + // Особый цвет шрифта синхронизации, по которой не завершена настройка. + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписокПриложенийСостояниеПредставление.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокПриложений.СостояниеПредставление"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = НСтр("ru = 'Настройка не завершена'"); + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.ТемноКрасный); + + // Скрыть пустую картинку состояния синхронизации данных. + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписокПриложенийСостояниеКартинка.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокПриложений.СостояниеКартинка"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = 0; + + Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); + + // Скрыть пустую картинку состояния выгрузки данных. + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписокПриложенийСостояниеВыгрузкиКартинка.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокПриложений.СостояниеВыгрузкиКартинка"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = 0; + + Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); + + // Скрыть пустую картинку состояния загрузки данных. + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписокПриложенийСостояниеЗагрузкиКартинка.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокПриложений.СостояниеЗагрузкиКартинка"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = 0; + + Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); + +КонецПроцедуры + +&НаКлиенте +Процедура ВопросПродолжитьНастройкуСинхронизацииЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт + + Если РезультатВопроса = КодВозвратаДиалога.Да Тогда + ОткрытьФормуНастройкиПараметровСинхронизации(ДополнительныеПараметры.ТекущиеДанные); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура НачальнаяВыгрузкаДанныхЗавершение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт + + ПодключитьОбработчикОжидания("ОбновитьДанныеМонитораИнтерактивно", 0.1, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьФормуНастройкиПараметровСинхронизации(ТекущиеДанные) + + ПараметрыПомощника = Новый Структура; + + ОповещениеОЗакрытии = Новый ОписаниеОповещения("ОткрытьФормуНастройкиПараметровСинхронизацииЗавершение", ЭтотОбъект); + + Если НастройкаСинхронизацииЗавершена(ТекущиеДанные.УзелИнформационнойБазы) Тогда + + ПараметрыПомощника.Вставить("Ключ", ТекущиеДанные.УзелИнформационнойБазы); + ПараметрыПомощника.Вставить("ИмяФормыПомощника", "ПланОбмена.[ИмяПланаОбмена].ФормаОбъекта"); + + ПараметрыПомощника.ИмяФормыПомощника = СтрЗаменить(ПараметрыПомощника.ИмяФормыПомощника, + "[ИмяПланаОбмена]", ТекущиеДанные.ИмяПланаОбмена); + + ОткрытьФорму(ПараметрыПомощника.ИмяФормыПомощника, + ПараметрыПомощника, ЭтотОбъект, , , , ОповещениеОЗакрытии); + + Иначе + + ПараметрыПомощника.Вставить("УзелОбмена", ТекущиеДанные.УзелИнформационнойБазы); + + Если МодельСервиса Тогда + ПараметрыПомощника.Вставить("ОбластьДанныхКорреспондента", ТекущиеДанные.ОбластьДанных); + ПараметрыПомощника.Вставить("ЭтоОбменСПриложениемВСервисе", ТекущиеДанные.ЭтоОбменСПриложениемВСервисе); + КонецЕсли; + + ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.НастройкаСинхронизации", + ПараметрыПомощника, ЭтотОбъект, , , , , РежимОткрытияОкнаФормы.Независимый); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьФормуНастройкиПараметровСинхронизацииЗавершение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт + + ПодключитьОбработчикОжидания("ОбновитьДанныеМонитораИнтерактивно", 0.1, Истина); + +КонецПроцедуры + +&НаСервере +Процедура ПроверитьВозможностьНастройкиСинхронизацииДанных(Отказ = Ложь) + + ТекстСообщения = ""; + Если ОбщегоНазначения.РазделениеВключено() Тогда + Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + МодульОбменДаннымиВМоделиСервисаПовтИсп = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиВМоделиСервисаПовтИсп"); + Если Не МодульОбменДаннымиВМоделиСервисаПовтИсп.СинхронизацияДанныхПоддерживается() Тогда + ТекстСообщения = НСтр("ru = 'Возможность настройки синхронизации данных в данной программе не предусмотрена.'"); + Отказ = Истина; + КонецЕсли; + Иначе + ТекстСообщения = НСтр("ru = 'В неразделенном режиме настройка синхронизации данных с другими программами недоступна.'"); + Отказ = Истина; + КонецЕсли; + Иначе + СписокПлановОбмена = ОбменДаннымиПовтИсп.ПланыОбменаБСП(); + Если СписокПлановОбмена.Количество() = 0 Тогда + ТекстСообщения = НСтр("ru = 'Возможность настройки синхронизации данных в данной программе не предусмотрена.'"); + Отказ = Истина; + КонецЕсли; + КонецЕсли; + + Если Отказ + И Не ПустаяСтрока(ТекстСообщения) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция НастройкаСинхронизацииЗавершена(УзелОбмена) + + Возврат ОбменДаннымиСервер.НастройкаСинхронизацииЗавершена(УзелОбмена); + +КонецФункции + +&НаСервереБезКонтекста +Функция СведенияОПланеОбмена(ИмяПланаОбмена) + + Результат = Новый Структура; + Результат.Вставить("ИмяПланаОбмена", ИмяПланаОбмена); + Результат.Вставить("ИспользуютсяПравилаКонвертации", + ОбменДаннымиПовтИсп.ЕстьМакетПланаОбмена(ИмяПланаОбмена, "ПравилаОбмена")); - Результат = Новый Структура("ИмяПланаОбмена,ИспользуютсяПравилаКонвертации"); - Результат.ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы); - Результат.ИспользуютсяПравилаКонвертации = ОбменДаннымиПовтИсп.ЕстьМакетПланаОбмена(Результат.ИмяПланаОбмена, "ПравилаОбмена"); Возврат Результат; КонецФункции &НаКлиенте -Процедура ОбновитьДанныеМонитора() +Процедура ПерейтиВЖурналРегистрацииСобытий(ДействиеПриОбмене) - ИндексСтрокиСписокСостоянияУзлов = ПолучитьТекущийИндексСтроки("СписокСостоянияУзлов"); + ТекущиеДанные = Элементы.СписокПриложений.ТекущиеДанные; - // Выполняем обновление таблиц монитора на сервере. - ОбновитьСписокСостоянияУзлов(); + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; - // Выполняем позиционирование курсора. - ВыполнитьПозиционированиеКурсора("СписокСостоянияУзлов", ИндексСтрокиСписокСостоянияУзлов); + ОбменДаннымиКлиент.ПерейтиВЖурналРегистрацииСобытийДанныхМодально(ТекущиеДанные.УзелИнформационнойБазы, + ЭтотОбъект, ДействиеПриОбмене); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьДанныеМонитораИнтерактивно() + + ИндексСтрокиСписокПриложений = ПолучитьТекущийИндексСтроки("СписокПриложений"); + + Если МодельСервиса Тогда + ПриНачалеОбновленияДанныхМонитора(); + Иначе + ОбновитьСписокПриложений(); + КонецЕсли; + + ВыполнитьПозиционированиеКурсора("СписокПриложений", ИндексСтрокиСписокПриложений); + + ПодключитьОбработчикОжидания("ОбновитьДанныеМонитораВФоне", 60, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьДанныеМонитораВФоне() + + ИндексСтрокиСписокПриложений = ПолучитьТекущийИндексСтроки("СписокПриложений"); + + ОбновитьСписокПриложений(); + + ВыполнитьПозиционированиеКурсора("СписокПриложений", ИндексСтрокиСписокПриложений); + + ПодключитьОбработчикОжидания("ОбновитьДанныеМонитораВФоне", 60, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриНачалеОбновленияДанныхМонитора() + + Если Не ПараметрыОбработчикаОжиданияПолученияСпискаПриложений = Неопределено Тогда + Возврат; + КонецЕсли; + + ПараметрыОбработчикаПолученияСпискаПриложений = Неопределено; + ПродолжитьОжидание = Ложь; + + ПриНачалеПолученияСпискаПриложенийНаСервере( + ПараметрыОбработчикаПолученияСпискаПриложений, ПродолжитьОжидание); + + Если ПродолжитьОжидание Тогда + + Элементы.ПанельСписокПриложений.ТекущаяСтраница = Элементы.СтраницаОжидание; + Элементы.КоманднаяПанель.Доступность = Ложь; + + + ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания( + ПараметрыОбработчикаОжиданияПолученияСпискаПриложений); + + ПодключитьОбработчикОжидания("ПриОжиданииОбновленияДанныхМонитора", + ПараметрыОбработчикаОжиданияПолученияСпискаПриложений.ТекущийИнтервал, Истина); + + Иначе + ПриЗавершенииОбновленияДанныхМонитора(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОжиданииОбновленияДанныхМонитора() + + ПродолжитьОжидание = Ложь; + ПриОжиданииПолученияСпискаПриложенийНаСервере(ПараметрыОбработчикаПолученияСпискаПриложений, ПродолжитьОжидание); + + Если ПродолжитьОжидание Тогда + ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияПолученияСпискаПриложений); + + ПодключитьОбработчикОжидания("ПриОжиданииОбновленияДанныхМонитора", + ПараметрыОбработчикаОжиданияПолученияСпискаПриложений.ТекущийИнтервал, Истина); + Иначе + ПараметрыОбработчикаОжиданияПолученияСпискаПриложений = Неопределено; + ПриЗавершенииОбновленияДанныхМонитора(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗавершенииОбновленияДанныхМонитора() + + ПриЗавершенииПолученияСпискаПриложенийНаСервере(); + + Элементы.ПанельСписокПриложений.ТекущаяСтраница = Элементы.СтраницаСписокПриложений; + Элементы.КоманднаяПанель.Доступность = Истина; + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ПриНачалеПолученияСпискаПриложенийНаСервере(ПараметрыОбработчика, ПродолжитьОжидание) + + Если Не ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса") Тогда + Возврат; + КонецЕсли; + + МодульПомощникНастройки = ОбщегоНазначения.ОбщийМодуль( + "Обработки.ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете"); + + ПараметрыПомощника = Новый Структура("Режим", "НастроенныеОбмены"); + + МодульПомощникНастройки.ПриНачалеПолученияСпискаПриложений(ПараметрыПомощника, + ПараметрыОбработчика, ПродолжитьОжидание); + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ПриОжиданииПолученияСпискаПриложенийНаСервере(ПараметрыОбработчика, ПродолжитьОжидание) + + МодульПомощникНастройки = ОбщегоНазначения.ОбщийМодуль( + "Обработки.ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете"); + + МодульПомощникНастройки.ПриОжиданииПолученияСпискаПриложений( + ПараметрыОбработчика, ПродолжитьОжидание); КонецПроцедуры &НаСервере -Процедура ОбновитьСписокСостоянияУзлов(ТолькоОбновлениеСписка = Ложь) +Процедура ПриЗавершенииПолученияСпискаПриложенийНаСервере() + + МодульПомощникНастройки = ОбщегоНазначения.ОбщийМодуль( + "Обработки.ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете"); + + СтатусЗавершения = Неопределено; + МодульПомощникНастройки.ПриЗавершенииПолученияСпискаПриложений( + ПараметрыОбработчикаПолученияСпискаПриложений, СтатусЗавершения); + + ПриложенияМоделиСервиса.Очистить(); + Если Не СтатусЗавершения.Отказ Тогда + ТаблицаПриложений = СтатусЗавершения.Результат; + ПриложенияМоделиСервиса.Загрузить(СтатусЗавершения.Результат.Скопировать(, "Корреспондент, ОбластьДанных, НаименованиеПриложения")); + КонецЕсли; + + ОбновитьСписокПриложений(); + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьСписокПриложений() + + Элементы.ПанельСписокПриложений.ТекущаяСтраница = Элементы.СтраницаСписокПриложений; + Элементы.КоманднаяПанель.Доступность = Истина; ПланыОбменаБСП = ОбменДаннымиПовтИсп.ПланыОбменаБСП(); - // Обновляем данные в списке состояния узлов. - СписокСостоянияУзлов.Загрузить(ОбменДаннымиСервер.ТаблицаМонитораОбменаДанными(ПланыОбменаБСП, "Код", СкрыватьУспешные)); + ТаблицаМонитора = ОбменДаннымиСервер.ТаблицаМонитораОбменаДанными(ПланыОбменаБСП); + СписокПриложений.Загрузить(ТаблицаМонитора); - КоличествоНастроенныхОбменов = ОбменДаннымиСервер.КоличествоНастроенныхОбменов(ПланыОбменаБСП); + ЕстьНастроенныеОбмены = (СписокПриложений.Количество() > 0); - Если Не ТолькоОбновлениеСписка Тогда + Для Каждого СтрокаПриложение Из СписокПриложений Цикл - ПроверитьСостояниеОбменаСГлавнымУзлом(); + СтрокаПриложение.НаименованиеКорреспондента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта( + СтрокаПриложение.УзелИнформационнойБазы, "Наименование"); + + СтрокиПриложениеМоделиСервиса = ПриложенияМоделиСервиса.НайтиСтроки( + Новый Структура("Корреспондент", СтрокаПриложение.УзелИнформационнойБазы)); + + Если СтрокиПриложениеМоделиСервиса.Количество() > 0 Тогда + СтрокаПриложениеМоделиСервиса = СтрокиПриложениеМоделиСервиса[0]; + + СтрокаПриложение.ЭтоОбменСПриложениемВСервисе = Истина; + СтрокаПриложение.ОбластьДанных = СтрокаПриложениеМоделиСервиса.ОбластьДанных; + СтрокаПриложение.НаименованиеКорреспондента = СтрокаПриложениеМоделиСервиса.НаименованиеПриложения; + КонецЕсли; - Если КоличествоСинхронизаций <> КоличествоНастроенныхОбменов Тогда + Если СтрокаПриложение.ЭтоОбменСПриложениемВСервисе Тогда - ОбновитьКоличествоСинхронизаций(КоличествоНастроенныхОбменов); + СтрокаПриложение.РежимРаботыПриложения = 1; + СтрокаПриложение.ИнтерактивнаяОтправка = Истина; - ИначеЕсли КоличествоСинхронизаций = 1 Тогда + Иначе - УстановитьЭлементыОднойСинхронизации(); + ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию( + СтрокаПриложение.УзелИнформационнойБазы); + СтрокаПриложение.РежимРаботыПриложения = ?(ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS, + 1, 0); + + Если Не ЗначениеЗаполнено(ВидТранспорта) Тогда + // Обмен с этой базой настроен через WS. + СтрокаПриложение.ЗапускОбменаИзКорреспондента = Истина; + КонецЕсли; + + СтрокаПриложение.ИнтерактивнаяОтправка = + Не ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(СтрокаПриложение.ИмяПланаОбмена) + И Не ОбменДаннымиПовтИсп.ЭтоУзелСтандартногоОбменаДанными(СтрокаПриложение.ИмяПланаОбмена); КонецЕсли; - ОбновитьКомандыРезультатовСинхронизации(); + ИдентификаторНастройки = ОбменДаннымиСервер.СохраненныйВариантНастройкиУзлаПланаОбмена( + СтрокаПриложение.УзелИнформационнойБазы); - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ОбновитьКоличествоСинхронизаций(КоличествоНастроенныхОбменов) - - КоличествоСинхронизаций = КоличествоНастроенныхОбменов; - ПанельСинхронизации = Элементы.СинхронизацияДанных; - ЕстьПравоОбновления = ПравоДоступа("ОбновлениеКонфигурацииБазыДанных", Метаданные); - - Если КоличествоСинхронизаций = 0 Тогда + СтрокаПриложение.ИмяФормыПомощникаНастройкиСинхронизацииДанных = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(СтрокаПриложение.ИмяПланаОбмена, + "ИмяФормыПомощникаНастройкиСинхронизацииДанных", + ИдентификаторНастройки, + СтрокаПриложение.ВерсияКорреспондента); - ПанельСинхронизации.ТекущаяСтраница = ПанельСинхронизации.ПодчиненныеЭлементы.СинхронизацияНеНастроена; - Заголовок = НСтр("ru = 'Синхронизация данных'"); + СостояниеСинхронизации = СостояниеСинхронизацииДанных(СтрокаПриложение); + СтрокаПриложение.СостояниеПредставление = СостояниеСинхронизации.Представление; + СтрокаПриложение.СостояниеКартинка = СостояниеСинхронизации.Картинка; - Если РольДоступнаДобавлениеИзменениеОбменовДанными Тогда - Элементы.Переместить(Элементы.ПодменюСоздать, Элементы.ПанельСоздатьСинхронизацияНеНастроена); + Если ЗначениеЗаполнено(СтрокаПриложение.ДатаПоследнегоЗапуска) Тогда + СтрокаПриложение.СостояниеВыгрузкиКартинка = КартинкаРезультатаВыполнения(СтрокаПриложение.РезультатПоследнейВыгрузкиДанных); + + Если Не СтрокаПриложение.ПолученоСообщениеДляСопоставленияДанных Тогда + СтрокаПриложение.СостояниеЗагрузкиКартинка = КартинкаРезультатаВыполнения(СтрокаПриложение.РезультатПоследнейЗагрузкиДанных); + КонецЕсли; + Иначе + // Не отображаем надпись "Никогда", если синхронизация еще ни разу не выполнялась, + // чтобы не перегружать интерфейс. + СтрокаПриложение.ПредставлениеДатыПоследнейУспешнойВыгрузки = ""; + СтрокаПриложение.ПредставлениеДатыПоследнейУспешнойЗагрузки = ""; КонецЕсли; - ИначеЕсли КоличествоСинхронизаций = 1 Тогда - - Элементы.ПравоОбновленияСтраницы.ТекущаяСтраница = ?(ЕстьПравоОбновления, - Элементы.ПравоОбновленияСтраницы.ПодчиненныеЭлементы.ИнформацияОбменДаннымиПриостановленЕстьПравоОбновления1, - Элементы.ПравоОбновленияСтраницы.ПодчиненныеЭлементы.ИнформацияОбменДаннымиПриостановленНетПраваОбновления1); - - УстановитьЭлементыОднойСинхронизации(); - - Если РольДоступнаДобавлениеИзменениеОбменовДанными Тогда - Элементы.Переместить(Элементы.ПодменюСоздать, Элементы.ПанельСоздатьСинхронизацияОдна, Элементы.УдалитьНастройкуСинхронизации); + Если СтрокаПриложение.ПолученоСообщениеДляСопоставленияДанных Тогда + // Если получены данные для выполнения сопоставление, отображаем соответствующую дату получения сообщения. + СтрокаПриложение.ПредставлениеДатыПоследнейУспешнойЗагрузки = СтрокаПриложение.ПредставлениеДатыСообщенияДляСопоставленияДанных; + СтрокаПриложение.СостояниеЗагрузкиКартинка = 5; КонецЕсли; - ПанельСинхронизации.ТекущаяСтраница = ПанельСинхронизации.ПодчиненныеЭлементы.ОднаСинхронизация; - - Иначе - - ПанельСинхронизации.ТекущаяСтраница = ПанельСинхронизации.ПодчиненныеЭлементы.НесколькоСинхронизаций; - Заголовок = НСтр("ru = 'Список настроенных синхронизаций данных'"); - - Элементы.СписокСостоянияУзловИзменитьУзелИнформационнойБазы.Видимость = РольДоступнаДобавлениеИзменениеОбменовДанными; - Элементы.НастроитьРасписаниеВыполненияОбмена.Видимость = РольДоступнаДобавлениеИзменениеОбменовДанными; - Элементы.НастроитьРасписаниеВыполненияОбмена1.Видимость = РольДоступнаДобавлениеИзменениеОбменовДанными; - - Элементы.ИнформацияОбменДаннымиПриостановленЕстьПравоОбновления.Видимость = ЕстьПравоОбновления; - Элементы.ИнформацияОбменДаннымиПриостановленНетПраваОбновления.Видимость = Не ЕстьПравоОбновления; - - НадписьОбменДаннымиПриостановлен = ?(ЕстьПравоОбновления, - Элементы.НадписьОбменДаннымиПриостановленЕстьПравоОбновления, - Элементы.НадписьОбменДаннымиПриостановленНетПраваОбновления); - - НадписьОбменДаннымиПриостановлен.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НадписьОбменДаннымиПриостановлен.Заголовок, ОбменДаннымиСервер.ГлавныйУзел()); - - Если РольДоступнаДобавлениеИзменениеОбменовДанными Тогда - Элементы.Переместить(Элементы.ПодменюСоздать, Элементы.КоманднаяПанель, Элементы.СписокСостоянияУзловГруппаКнопокВыполненияОбменаДанными); - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ОбновитьКомандыРезультатовСинхронизации() - - Если КоличествоСинхронизаций <> 0 Тогда - - СтруктураЗаголовка = ОбменДаннымиСервер.СтруктураЗаголовкаГиперссылкиМонитораПроблем(МассивИспользуемыхУзлов(СписокСостоянияУзлов)); - - Если КоличествоСинхронизаций = 1 Тогда - - ЗаполнитьЗначенияСвойств(Элементы.ОткрытьРезультатыОднаСинхронизация, СтруктураЗаголовка); - - ИначеЕсли КоличествоСинхронизаций > 1 Тогда - - ЗаполнитьЗначенияСвойств(Элементы.ОткрытьРезультатыСинхронизацииДанных, СтруктураЗаголовка); - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -&НаКлиентеНаСервереБезКонтекста -Функция МассивИспользуемыхУзлов(СписокСостоянияУзлов) - - УзлыОбмена = Новый Массив; - - Для Каждого СтрокаУзла Из СписокСостоянияУзлов Цикл - УзлыОбмена.Добавить(СтрокаУзла.УзелИнформационнойБазы); КонецЦикла; - Возврат УзлыОбмена; + ТребуетсяОбновление = ОбменДаннымиВызовСервера.ТребуетсяУстановкаОбновления(); + + УстановитьОтображениеЭлементовФормы(); + + ОбновитьКомандуРезультатовСинхронизации(); + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция СостояниеСинхронизацииДанных(СтрокаПриложение) + + Состояние = Новый Структура; + Состояние.Вставить("Представление", ""); + Состояние.Вставить("Картинка", 0); + + Если Не СтрокаПриложение.НастройкаЗавершена Тогда + Состояние.Представление = НСтр("ru = 'Настройка не завершена'"); + Состояние.Картинка = 3; + + Если СтрокаПриложение.ПолученоСообщениеДляСопоставленияДанных Тогда + Состояние.Представление = НСтр("ru = 'Настройка не завершена, получены данные для сопоставления'"); + КонецЕсли; + Иначе + Если СтрокаПриложение.ДатаНачалаПоследнейЗагрузки > СтрокаПриложение.ДатаОкончанияПоследнейЗагрузки Тогда + Состояние.Представление = НСтр("ru = 'Загрузка данных...'"); + Состояние.Картинка = 4; + ИначеЕсли СтрокаПриложение.ДатаНачалаПоследнейВыгрузки > СтрокаПриложение.ДатаОкончанияПоследнейВыгрузки Тогда + Состояние.Представление = НСтр("ru = 'Выгрузка данных...'"); + Состояние.Картинка = 4; + ИначеЕсли Не ЗначениеЗаполнено(СтрокаПриложение.ДатаПоследнегоЗапуска) Тогда + Состояние.Представление = НСтр("ru = 'Не запускалась'"); + + Если СтрокаПриложение.ПолученоСообщениеДляСопоставленияДанных Тогда + Состояние.Представление = НСтр("ru = 'Получены данные для сопоставления'"); + КонецЕсли; + Иначе + Состояние.Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Прошлый запуск: %1'"), + СтрокаПриложение.ПредставлениеДатыПоследнегоЗапуска); + + Если СтрокаПриложение.ПолученоСообщениеДляСопоставленияДанных Тогда + Состояние.Представление = НСтр("ru = 'Получены данные для сопоставления'"); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Возврат Состояние; + +КонецФункции + +&НаСервереБезКонтекста +Функция КартинкаРезультатаВыполнения(РезультатВыполнения) + + Если РезультатВыполнения = 2 Тогда + Возврат 3; // выполнено с предупреждениями + ИначеЕсли РезультатВыполнения = 1 Тогда + Возврат 2; // ошибка + ИначеЕсли РезультатВыполнения = 0 Тогда + Возврат 0; // успешно + КонецЕсли; + + // без статуса + Возврат 0; КонецФункции &НаСервере -Процедура УстановитьЭлементыОднойСинхронизации() +Процедура ИнициализироватьРеквизитыФормы() - НастроеннаяСинхронизация = СписокСостоянияУзлов[0]; + ЕстьПравоАдминистрированиеОбменов = ОбменДаннымиСервер.ЕстьПраваНаАдминистрированиеОбменов(); - Если НастроеннаяСинхронизация.УзелИнформационнойБазы = Неопределено Тогда - - ВызватьИсключение НСтр("ru = 'Работа монитора синхронизации данных в неразделенном сеансе не поддерживается'"); - - КонецЕсли; + ЕстьПравоПросмотрЖурналаРегистрации = ПравоДоступа("ЖурналРегистрации", Метаданные); + ЕстьПравоОбновления = ПравоДоступа("ОбновлениеКонфигурацииБазыДанных", Метаданные); - Элементы.СтраницаРасписание.Картинка = ?(НастроеннаяСинхронизация.РасписаниеНастроено, - БиблиотекаКартинок.РегламентноеЗадание, Новый Картинка); - - ВариантНастройки = ОбменДаннымиСервер.СохраненныйВариантНастройкиУзлаПланаОбмена(НастроеннаяСинхронизация.УзелИнформационнойБазы); + ПрефиксИБ = ОбменДаннымиСервер.ПрефиксИнформационнойБазы(); - Заголовок = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена( - НастроеннаяСинхронизация.УзелИнформационнойБазы.Метаданные().Имя, - "ЗаголовокУзлаПланаОбмена", - ВариантНастройки); - - ЕстьПравоНаПросмотрЖурналаРегистрации = ПравоДоступа("ЖурналРегистрации", Метаданные); - - Если ЕстьПравоНаПросмотрЖурналаРегистрации Тогда - - Элементы.ДатаУспешнойЗагрузки.Видимость = Истина; - Элементы.ДатаУспешнойВыгрузки.Видимость = Истина; - Элементы.НадписьДатаПолучения.Видимость = Ложь; - Элементы.НадписьДатаОтправки.Видимость = Ложь; - - Элементы.ДатаУспешнойЗагрузки.Заголовок = НастроеннаяСинхронизация.ПредставлениеДатыПоследнейУспешнойЗагрузки; - Элементы.ДатаУспешнойВыгрузки.Заголовок = НастроеннаяСинхронизация.ПредставлениеДатыПоследнейУспешнойВыгрузки; - - Иначе - - Элементы.ДатаУспешнойЗагрузки.Видимость = Ложь; - Элементы.ДатаУспешнойВыгрузки.Видимость = Ложь; - Элементы.НадписьДатаПолучения.Видимость = Истина; - Элементы.НадписьДатаОтправки.Видимость = Истина; - - Элементы.НадписьДатаПолучения.Заголовок = НастроеннаяСинхронизация.ПредставлениеДатыПоследнейУспешнойЗагрузки; - Элементы.НадписьДатаОтправки.Заголовок = НастроеннаяСинхронизация.ПредставлениеДатыПоследнейУспешнойВыгрузки; - - КонецЕсли; - - ПустаяДата = Дата(1, 1, 1); - - Если НастроеннаяСинхронизация.ДатаПоследнейУспешнойВыгрузки <> НастроеннаяСинхронизация.ДатаПоследнейВыгрузки - Или НастроеннаяСинхронизация.ДатаПоследнейВыгрузки <> ПустаяДата - Или НастроеннаяСинхронизация.РезультатПоследнейВыгрузкиДанных <> 0 Тогда - - ПодсказкаВыгрузки = НСтр("ru = 'Данные отправлены: %ДатаОтправки% - |Последняя попытка: %ДатаПопытки%'"); - ПодсказкаВыгрузки = СтрЗаменить(ПодсказкаВыгрузки, "%ДатаОтправки%", НастроеннаяСинхронизация.ПредставлениеДатыПоследнейУспешнойВыгрузки); - ПодсказкаВыгрузки = СтрЗаменить(ПодсказкаВыгрузки, "%ДатаПопытки%", НастроеннаяСинхронизация.ПредставлениеДатыПоследнейВыгрузки); - - Иначе - - ПодсказкаВыгрузки = ""; - - КонецЕсли; - - Если НастроеннаяСинхронизация.ДатаПоследнейУспешнойЗагрузки <> НастроеннаяСинхронизация.ДатаПоследнейЗагрузки - Или НастроеннаяСинхронизация.ДатаПоследнейЗагрузки <> ПустаяДата - Или НастроеннаяСинхронизация.РезультатПоследнейЗагрузкиДанных <> 0 Тогда - - ПодсказкаЗагрузки = НСтр("ru = 'Данные получены: %ДатаПолучения% - |Последняя попытка: %ДатаПопытки%'"); - ПодсказкаЗагрузки = СтрЗаменить(ПодсказкаЗагрузки, "%ДатаПолучения%", НастроеннаяСинхронизация.ПредставлениеДатыПоследнейУспешнойЗагрузки); - ПодсказкаЗагрузки = СтрЗаменить(ПодсказкаЗагрузки, "%ДатаПопытки%", НастроеннаяСинхронизация.ПредставлениеДатыПоследнейЗагрузки); - - Иначе - - ПодсказкаЗагрузки = ""; - - КонецЕсли; - - Если НастроеннаяСинхронизация.РезультатПоследнейЗагрузкиДанных =2 Тогда - НастроеннаяСинхронизация.РезультатПоследнейЗагрузкиДанных = ?(ОбменДаннымиСервер.ОбменДаннымиВыполненСПредупреждениями(НастроеннаяСинхронизация.УзелИнформационнойБазы), 2, 0); - КонецЕсли; - - КартинкаСтатуса(Элементы.ДекорацияСтатусЗагрузки, НастроеннаяСинхронизация.РезультатПоследнейЗагрузкиДанных, ПодсказкаЗагрузки); - КартинкаСтатуса(Элементы.ДекорацияСтатусВыгрузки, НастроеннаяСинхронизация.РезультатПоследнейВыгрузкиДанных, ПодсказкаВыгрузки); - - Элементы.ДекорацияСтатусПустой.Видимость = Истина; - Если НастроеннаяСинхронизация.РезультатПоследнейЗагрузкиДанных <> 0 - Или (НастроеннаяСинхронизация.РезультатПоследнейЗагрузкиДанных = 0 - И НастроеннаяСинхронизация.РезультатПоследнейВыгрузкиДанных = 0) Тогда - - Элементы.ДекорацияСтатусПустой.Видимость = Ложь; - - КонецЕсли; - - Элементы.ДекорацияУспешнаяЗагрузка.Подсказка = Элементы.ДекорацияСтатусЗагрузки.Подсказка; - Элементы.ДекорацияУспешнаяВыгрузка.Подсказка = Элементы.ДекорацияСтатусВыгрузки.Подсказка; - - - - Если ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(НастроеннаяСинхронизация.УзелИнформационнойБазы) Тогда - - Элементы.ВыполнитьОбменДаннымиИнтерактивно2.Видимость = Ложь; - - КонецЕсли; - - ОписаниеПравилСинхронизацииДанных = ОбменДаннымиСервер.ОписаниеПравилСинхронизацииДанных(НастроеннаяСинхронизация.УзелИнформационнойБазы); - Элементы.ОписаниеПравилСинхронизацииДанных.Высота = СтрЧислоСтрок(ОписаниеПравилСинхронизацииДанных); - - РасписаниеУзлаИнформационнойБазы = РасписаниеУзлаИнформационнойБазы(НастроеннаяСинхронизация.УзелИнформационнойБазы); - - Если РасписаниеУзлаИнформационнойБазы <> Неопределено Тогда - - РасписаниеСинхронизацииДанных = РасписаниеУзлаИнформационнойБазы; - - Иначе - - РасписаниеСинхронизацииДанных = НСтр("ru = 'Расписание синхронизации не настроено'");; - - КонецЕсли; + МодельСервиса = ОбщегоНазначения.РазделениеВключено() + И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных(); КонецПроцедуры &НаСервере -Процедура ДобавитьКомандыСозданияНовогоОбмена() +Процедура УстановитьОтображениеЭлементовФормы() - СписокПлановОбмена = ОбменДаннымиПовтИсп.СписокПлановОбменаБСП(); + Если ЕстьПравоАдминистрированиеОбменов Тогда + Элементы.СписокПриложенийИзменитьНастройкуСинхронизации.Видимость = ЕстьНастроенныеОбмены; + Элементы.СписокПриложенийСоставОтправляемыхДанных.Видимость = ЕстьНастроенныеОбмены; + Элементы.СписокПриложенийЗагрузитьПравилаСинхронизацииДанных.Видимость = ЕстьНастроенныеОбмены И Не МодельСервиса; + Элементы.СписокПриложенийГруппаРасписаниеВыполненияОбмена.Видимость = ЕстьНастроенныеОбмены И Не МодельСервиса; + Элементы.СписокПриложенийУдалитьНастройкуСинхронизации.Видимость = ЕстьНастроенныеОбмены; + Иначе + Элементы.СписокПриложенийИзменитьНастройкуСинхронизации.Видимость = Ложь; + Элементы.СписокПриложенийСоставОтправляемыхДанных.Видимость = Ложь; + Элементы.СписокПриложенийЗагрузитьПравилаСинхронизацииДанных.Видимость = Ложь; + Элементы.СписокПриложенийГруппаУправление.Видимость = Ложь; + Элементы.СписокПриложенийГруппаРасписаниеВыполненияОбмена.Видимость = Ложь; + КонецЕсли; - Для Каждого Элемент Из СписокПлановОбмена Цикл - - ИмяПланаОбмена = Элемент.Значение; - МенеджерПланаОбмена = ПланыОбмена[ИмяПланаОбмена]; - - Если Не Пользователи.ЭтоПолноправныйПользователь(, Истина) - И ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(ИмяПланаОбмена) Тогда - // Для создания обмена РИБ требуются права администратора системы. - Продолжить; - КонецЕсли; - - Если Не ОбменДаннымиПовтИсп.ДоступноИспользованиеПланаОбмена(ИмяПланаОбмена) Тогда - Продолжить; - КонецЕсли; - - Если ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(ИмяПланаОбмена) Тогда - РодительскаяГруппа = Элементы.ПодменюРИБ; - Иначе - РодительскаяГруппа = Элементы.ПодменюДругиеПрограммы; - КонецЕсли; - - ЗначенияНастроекПланаОбмена = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, - "ВариантыНастроекОбмена, ВидГруппыДляВариантовНастроек"); - ВозможныеНастройкиОбмена = ЗначенияНастроекПланаОбмена.ВариантыНастроекОбмена; - ВидГруппыДляВариантовНастроек = ЗначенияНастроекПланаОбмена.ВидГруппыДляВариантовНастроек; - - СуммирующаяГруппа = РодительскаяГруппа; - - СуммирующаяГруппаДобавлена = Ложь; - - Для Каждого ВариантНастройки Из ВозможныеНастройкиОбмена Цикл - ПредопределеннаяНастройка = ВариантНастройки.ИдентификаторНастройки; - ЗначенияНастроекДляВарианта = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, - "ИспользоватьПомощникСозданияОбменаДанными, - |ЗаголовокКомандыДляСозданияНовогоОбменаДанными, - |НаименованиеКонфигурацииКорреспондента", - ПредопределеннаяНастройка); - Если Не ЗначенияНастроекДляВарианта.ИспользоватьПомощникСозданияОбменаДанными Тогда - Продолжить; - КонецЕсли; - - Если Не СуммирующаяГруппаДобавлена И ВозможныеНастройкиОбмена.Количество() > 1 Тогда - ВидГруппыКнопок = ВидГруппыДляВариантовНастроек; - // Не прячем варианты обмена в подменю, если план обмена один. - Если СписокПлановОбмена.Количество() = 1 Тогда - ВидГруппыКнопок = ВидГруппыФормы.ГруппаКнопок; - КонецЕсли; - - СуммирующаяГруппа = Элементы.Добавить(ИмяПланаОбмена, Тип("ГруппаФормы"), РодительскаяГруппа); - - СуммирующаяГруппа.Вид = ВидГруппыКнопок; - Если ОбменДаннымиСервер.ЭтоПланОбменаXDTO(ИмяПланаОбмена) Тогда - СуммирующаяГруппа.Заголовок = НСтр("ru = 'Через универсальный формат обмена'"); - Иначе - СуммирующаяГруппа.Заголовок = ЗначенияНастроекДляВарианта.НаименованиеКонфигурацииКорреспондента; - КонецЕсли; - - СуммирующаяГруппаДобавлена = Истина; - КонецЕсли; - - Если ВариантНастройки.КорреспондентВЛокальномРежиме Тогда - НаименованиеКоманды = ИмяПланаОбмена + "ИдентификаторНастройки" + ПредопределеннаяНастройка; - ЗаголовокКоманды = ЗначенияНастроекДляВарианта.ЗаголовокКомандыДляСозданияНовогоОбменаДанными; - СоздатьКомандуИЭлементФормы(НаименованиеКоманды, ЗаголовокКоманды, СуммирующаяГруппа); - КонецЕсли; - - Если ВариантНастройки.КорреспондентВМоделиСервиса Тогда - НаименованиеКоманды = ИмяПланаОбмена + "ИдентификаторНастройки" + ПредопределеннаяНастройка + "КорреспондентВМоделиСервиса"; - ЗаголовокКоманды = ЗначенияНастроекДляВарианта.ЗаголовокКомандыДляСозданияНовогоОбменаДанными - + " " + НСтр("ru = '(в сервисе)'"); - - СоздатьКомандуИЭлементФормы(НаименованиеКоманды, ЗаголовокКоманды, СуммирующаяГруппа); - КонецЕсли; - КонецЦикла; - КонецЦикла; + Если ЕстьПравоПросмотрЖурналаРегистрации Тогда + Элементы.СписокПриложенийГруппаСобытия.Видимость = ЕстьНастроенныеОбмены; + Иначе + Элементы.СписокПриложенийГруппаСобытия.Видимость = Ложь; + КонецЕсли; + + Элементы.ИнформационнаяПанельТребуетсяОбновление.Видимость = ТребуетсяОбновление; + + Элементы.ВыполнитьСинхронизацию.Видимость = ЕстьНастроенныеОбмены; + Элементы.СписокПриложенийИнформацияПоОбмену.Видимость = ЕстьНастроенныеОбмены; + + Элементы.ОткрытьРезультатыСинхронизацииДанных.Доступность = ЕстьНастроенныеОбмены; + + // Командная панель. + Элементы.СписокПриложенийГруппаСобытия.Доступность = ЕстьНастроенныеОбмены; + Элементы.СписокПриложенийГруппаИзменениеИСостав.Доступность = ЕстьНастроенныеОбмены; + Элементы.СписокПриложенийГруппаВыполненияОбменаДанными.Доступность = ЕстьНастроенныеОбмены; + Элементы.СписокПриложенийГруппаРасписаниеВыполненияОбмена.Доступность = ЕстьНастроенныеОбмены; + Элементы.СписокПриложенийЗагрузитьПравилаСинхронизацииДанных.Доступность = ЕстьНастроенныеОбмены; + Элементы.СписокПриложенийИнформацияПоОбмену.Доступность = ЕстьНастроенныеОбмены; + Элементы.СписокПриложенийУдалитьНастройкуСинхронизации.Доступность = ЕстьНастроенныеОбмены; + + // Контекстное меню. + Элементы.СписокПриложенийКонтекстноеМенюГруппаРасписаниеВыполненияОбмена.Видимость = Не МодельСервиса; + + Элементы.СписокПриложенийКонтекстноеМенюГруппаСобытия.Доступность = ЕстьНастроенныеОбмены; + Элементы.СписокПриложенийКонтекстноеМенюГруппаИзменениеИСостав.Доступность = ЕстьНастроенныеОбмены; + Элементы.СписокПриложенийКонтекстноеМенюГруппаВыполненияОбменаДанными.Доступность = ЕстьНастроенныеОбмены; + Элементы.СписокПриложенийКонтекстноеМенюГруппаРасписаниеВыполненияОбмена.Доступность = ЕстьНастроенныеОбмены; + Элементы.СписокПриложенийКонтекстноеМенюГруппаУправление.Доступность = ЕстьНастроенныеОбмены; КонецПроцедуры +&НаСервере +Процедура ОбновитьКомандуРезультатовСинхронизации() + + СтруктураЗаголовка = ОбменДаннымиСервер.СтруктураЗаголовкаГиперссылкиМонитораПроблем( + МассивИспользуемыхУзлов(СписокПриложений)); + ЗаполнитьЗначенияСвойств(Элементы.ОткрытьРезультатыСинхронизацииДанных, СтруктураЗаголовка); + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Функция МассивИспользуемыхУзлов(ТаблицаМонитора) + + Результат = Новый Массив; + + Для Каждого СтрокаМонитора Из ТаблицаМонитора Цикл + Результат.Добавить(СтрокаМонитора.УзелИнформационнойБазы); + КонецЦикла; + + Возврат Результат; + +КонецФункции + &НаКлиенте Функция ПолучитьТекущийИндексСтроки(ИмяТаблицы) @@ -760,6 +904,7 @@ КонецЕсли; Возврат ИндексСтроки; + КонецФункции &НаКлиенте @@ -793,103 +938,7 @@ КонецПроцедуры -&НаСервере -Процедура ПроверитьСостояниеОбменаСГлавнымУзлом() - - ТребуетсяОбновление = ОбменДаннымиВызовСервера.ТребуетсяУстановкаОбновления(); - - Элементы.ИнформационнаяПанельТребуетсяОбновление1.Видимость = ТребуетсяОбновление; - Элементы.ИнформационнаяПанельТребуетсяОбновление.Видимость = ТребуетсяОбновление; - - Элементы.ВыполнитьОбменДанными2.Видимость = Не ТребуетсяОбновление; - -КонецПроцедуры - -&НаСервере -Функция СценарийСинхронизацииПоУзлу (УзелИнформационнойБазы) - - НастроенныйСценарий = Неопределено; - - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 - | СценарииОбменовДанными.Ссылка - |ИЗ - | Справочник.СценарииОбменовДанными КАК СценарииОбменовДанными - |ГДЕ - | СценарииОбменовДанными.НастройкиОбмена.УзелИнформационнойБазы = &УзелИнформационнойБазы - | И СценарииОбменовДанными.ПометкаУдаления = ЛОЖЬ"; - - Запрос.УстановитьПараметр("УзелИнформационнойБазы", УзелИнформационнойБазы); - - Результат = Запрос.Выполнить(); - - Если Не Результат.Пустой() Тогда - - Выборка = Результат.Выбрать(); - Выборка.Следующий(); - - НастроенныйСценарий = Выборка.Ссылка; - - КонецЕсли; - - Возврат НастроенныйСценарий; - -КонецФункции - -&НаСервере -Функция РасписаниеУзлаИнформационнойБазы(УзелИнформационнойБазы) - - РасписаниеРегламентногоЗадания = Неопределено; - - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 - | СценарииОбменовДанными.РегламентноеЗаданиеGUID - |ИЗ - | Справочник.СценарииОбменовДанными КАК СценарииОбменовДанными - |ГДЕ - | СценарииОбменовДанными.ИспользоватьРегламентноеЗадание = ИСТИНА - | И СценарииОбменовДанными.НастройкиОбмена.УзелИнформационнойБазы = &УзелИнформационнойБазы - | И СценарииОбменовДанными.ПометкаУдаления = ЛОЖЬ"; - - Запрос.УстановитьПараметр("УзелИнформационнойБазы", УзелИнформационнойБазы); - - Результат = Запрос.Выполнить(); - - Если Не Результат.Пустой() Тогда - - Выборка = Результат.Выбрать(); - - Выборка.Следующий(); - - РегламентноеЗаданиеОбъект = ОбменДаннымиВызовСервера.НайтиРегламентноеЗаданиеПоПараметру(Выборка.РегламентноеЗаданиеGUID); - Если РегламентноеЗаданиеОбъект <> Неопределено Тогда - РасписаниеРегламентногоЗадания = РегламентноеЗаданиеОбъект.Расписание; - КонецЕсли; - - КонецЕсли; - - Возврат РасписаниеРегламентногоЗадания; - -КонецФункции - -&НаСервере -Процедура КартинкаСтатуса(ЭлементУправления, ВидСобытия, Подсказка) - - Если ВидСобытия = 1 Тогда - ЭлементУправления.Картинка = БиблиотекаКартинок.СостояниеОбменаДаннымиОшибка; - ЭлементУправления.Видимость = Истина; - ИначеЕсли ВидСобытия = 2 Тогда - ЭлементУправления.Картинка = БиблиотекаКартинок.Предупреждение; - ЭлементУправления.Видимость = Истина; - Иначе - ЭлементУправления.Видимость = Ложь; - КонецЕсли; - - ЭлементУправления.Подсказка = Подсказка; - -КонецПроцедуры - -&НаСервере +&НаСервереБезКонтекста Функция ПодробнаяИнформацияНаСервере(УзелОбмена) ИмяПланаОбмена = УзелОбмена.Метаданные().Имя; @@ -909,22 +958,23 @@ Если ДополнительныеПараметры.ИнтерактивнаяОтправка Тогда - ОбменДаннымиКлиент.ОткрытьПомощникСопоставленияОбъектовОбработкаКоманды(ДополнительныеПараметры.УзелОбмена, ЭтотОбъект); - + ОбменДаннымиКлиент.ОткрытьПомощникСопоставленияОбъектовОбработкаКоманды(ДополнительныеПараметры.УзелОбмена, + ЭтотОбъект, ДополнительныеПараметры); + Иначе ОбменДаннымиКлиент.ВыполнитьОбменДаннымиОбработкаКоманды(ДополнительныеПараметры.УзелОбмена, - ЭтотОбъект,, ДополнительныеПараметры.АвтоматическаяСинхронизация); + ЭтотОбъект, , ДополнительныеПараметры.АвтоматическаяСинхронизация); КонецЕсли; КонецПроцедуры &НаКлиенте -Процедура ПроверитьСовместимостьПравилКонвертации(Знач ИмяПланаОбмена, ОбработкаПродолжения) +Процедура ПроверитьСовместимостьПравилКонвертации(ОбработкаПродолжения) ОписаниеОшибки = Неопределено; - Если ПравилаКонвертацииСовместимыСТекущейВерсией(ИмяПланаОбмена, ОписаниеОшибки) Тогда + Если ПравилаКонвертацииСовместимыСТекущейВерсией(ОбработкаПродолжения.ДополнительныеПараметры.ИмяПланаОбмена, ОписаниеОшибки) Тогда ВыполнитьОбработкуОповещения(ОбработкаПродолжения); @@ -939,7 +989,8 @@ ДополнительныеПараметры = Новый Структура; ДополнительныеПараметры.Вставить("ОбработкаПродолжения", ОбработкаПродолжения); - ДополнительныеПараметры.Вставить("ИмяПланаОбмена", ИмяПланаОбмена); + ДополнительныеПараметры.Вставить("ИмяПланаОбмена", ОбработкаПродолжения.ДополнительныеПараметры.ИмяПланаОбмена); + Оповещение = Новый ОписаниеОповещения("ПослеПроверкиПравилКонвертацииНаСовместимость", ЭтотОбъект, ДополнительныеПараметры); ПараметрыФормы = СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю(); @@ -979,57 +1030,14 @@ &НаСервере Функция ПравилаКонвертацииСовместимыСТекущейВерсией(ИмяПланаОбмена, ОписаниеОшибки) - ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(ИмяПланаОбмена); - ИнформацияОПравилах = Неопределено; - - Если ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, "ПредупреждатьОНесоответствииВерсийПравилОбмена") - И ПравилаКонвертацииЗагруженыИзФайла(ИмяПланаОбмена, ИнформацияОПравилах) Тогда - - ИмяКонфигурацииИзПравил = ВРег(ИнформацияОПравилах.ИмяКонфигурации); - ИмяКонфигурацииИнформационнойБазы = СтрЗаменить(ВРег(Метаданные.Имя), "БАЗОВАЯ", ""); - Если ИмяКонфигурацииИзПравил <> ИмяКонфигурацииИнформационнойБазы Тогда - - ОписаниеОшибки = Новый Структура; - ОписаниеОшибки.Вставить("ТекстОшибки", НСтр("ru = 'Синхронизация данных не может быть выполнена, так как используются правила, предназначенные для программы ""%1"". Следует использовать правила из конфигурации или загрузить корректный комплект правил из файла.'")); - ОписаниеОшибки.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ОписаниеОшибки.ТекстОшибки, ИнформацияОПравилах.СинонимКонфигурацииВПравилах); - ОписаниеОшибки.Вставить("ВидОшибки", "НекорректнаяКонфигурация"); - ОписаниеОшибки.Вставить("Картинка", БиблиотекаКартинок.Ошибка32); - Возврат Ложь; - - КонецЕсли; - - ВерсияВПравилахБезСборки = ОбщегоНазначенияКлиентСервер.ВерсияКонфигурацииБезНомераСборки(ИнформацияОПравилах.ВерсияКонфигурации); - ВерсияКонфигурацииБезСборки = ОбщегоНазначенияКлиентСервер.ВерсияКонфигурацииБезНомераСборки(Метаданные.Версия); - РезультатСравнения = ОбщегоНазначенияКлиентСервер.СравнитьВерсииБезНомераСборки(ВерсияВПравилахБезСборки, ВерсияКонфигурацииБезСборки); - - Если РезультатСравнения <> 0 Тогда - - Если РезультатСравнения < 0 Тогда - - ТекстОшибки = НСтр("ru = 'Синхронизация данных может быть выполнена некорректно, так как используются правила, предназначенные для предыдущей версии программы ""%1"" (%2). Рекомендуется использовать правила из конфигурации или загрузить комплект правил, предназначенный для текущей версии программы (%3).'"); - ВидОшибки = "УстаревшаяВерсияКонфигурации"; - - Иначе - - ТекстОшибки = НСтр("ru = 'Синхронизация данных может быть выполнена некорректно, так как используются правила, предназначенные для более новой версии программы ""%1"" (%2). Рекомендуется обновить версию программы или использовать комплект правил, предназначенный для текущей версии программы (%3).'"); - ВидОшибки = "УстаревшиеПравила"; - - КонецЕсли; - - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, Метаданные.Синоним, ВерсияВПравилахБезСборки, ВерсияКонфигурацииБезСборки); - - ОписаниеОшибки = Новый Структура; - ОписаниеОшибки.Вставить("ТекстОшибки", ТекстОшибки); - ОписаниеОшибки.Вставить("ВидОшибки", ВидОшибки); - ОписаниеОшибки.Вставить("Картинка", БиблиотекаКартинок.Предупреждение32); - Возврат Ложь; - - КонецЕсли; - + ДанныеОПравилах = Неопределено; + Если Не ПравилаКонвертацииЗагруженыИзФайла(ИмяПланаОбмена, ДанныеОПравилах) Тогда + Возврат Истина; КонецЕсли; - Возврат Истина; - + Возврат РегистрыСведений.ПравилаДляОбменаДанными.ПравилаКонвертацииСовместимыСТекущейВерсией(ИмяПланаОбмена, + ОписаниеОшибки, ДанныеОПравилах); + КонецФункции &НаСервере @@ -1037,8 +1045,8 @@ УстановитьПривилегированныйРежим(Истина); - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ + Запрос = Новый Запрос( + "ВЫБРАТЬ | ПравилаДляОбменаДанными.ПравилаЗачитанные, | ПравилаДляОбменаДанными.ВидПравил |ИЗ @@ -1047,65 +1055,38 @@ | ПравилаДляОбменаДанными.ИмяПланаОбмена = &ИмяПланаОбмена | И ПравилаДляОбменаДанными.ИсточникПравил = ЗНАЧЕНИЕ(Перечисление.ИсточникиПравилДляОбменаДанными.Файл) | И ПравилаДляОбменаДанными.ПравилаЗагружены = ИСТИНА - | И ПравилаДляОбменаДанными.ВидПравил = ЗНАЧЕНИЕ(Перечисление.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов)"; - + | И ПравилаДляОбменаДанными.ВидПравил = ЗНАЧЕНИЕ(Перечисление.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов)"); Запрос.УстановитьПараметр("ИмяПланаОбмена", ИмяПланаОбмена); - Результат = Запрос.Выполнить(); - - Если Не Результат.Пустой() Тогда - - Выборка = Результат.Выбрать(); - Выборка.Следующий(); - + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда СтруктураПравил = Выборка.ПравилаЗачитанные.Получить().Конвертация; ИнформацияОПравилах = Новый Структура; - ИнформацияОПравилах.Вставить("ИмяКонфигурации", СтруктураПравил.Источник); - ИнформацияОПравилах.Вставить("ВерсияКонфигурации", СтруктураПравил.ВерсияКонфигурацииИсточника); + ИнформацияОПравилах.Вставить("ИмяКонфигурации", СтруктураПравил.Источник); + ИнформацияОПравилах.Вставить("ВерсияКонфигурации", СтруктураПравил.ВерсияКонфигурацииИсточника); ИнформацияОПравилах.Вставить("СинонимКонфигурацииВПравилах", СтруктураПравил.СинонимКонфигурацииИсточника); Возврат Истина; - КонецЕсли; Возврат Ложь; КонецФункции -&НаСервере -Процедура СоздатьКомандуИЭлементФормы(НаименованиеКоманды, Заголовок, Подменю) - - Команды.Добавить(НаименованиеКоманды); - Команды[НаименованиеКоманды].Заголовок = Заголовок + "..."; - Команды[НаименованиеКоманды].Действие = "ОткрытьПомощникНастройкиОбменаДанными"; - - Элементы.Добавить(НаименованиеКоманды, Тип("КнопкаФормы"), Подменю); - Элементы[НаименованиеКоманды].ИмяКоманды = НаименованиеКоманды; - -КонецПроцедуры - &НаКлиенте -Процедура Подключаемый_СписокСостоянияУзловПриАктивизацииСтроки() Экспорт +Процедура СписокПриложенийПриАктивизацииСтроки(Элемент) - ЗаданыТекущиеДанные = Элементы.СписокСостоянияУзлов.ТекущиеДанные <> Неопределено; + ТекущиеДанные = Элементы.СписокПриложений.ТекущиеДанные; - // Командная панель. - Элементы.Настройка.Доступность = ЗаданыТекущиеДанные; - Элементы.ГруппаКоманднойПанелиИзменениеИСостав.Доступность = ЗаданыТекущиеДанные; - Элементы.СписокСостоянияУзловГруппаКнопокВыполненияОбменаДанными.Доступность = ЗаданыТекущиеДанные; - Элементы.НастроитьРасписаниеВыполненияОбмена.Доступность = ЗаданыТекущиеДанные; - Элементы.СписокСостоянияУзловЗагрузитьПравилаСинхронизацииДанных.Доступность = ЗаданыТекущиеДанные; - Элементы.СписокСостоянияУзловИнформацияПоОбмену.Доступность = ЗаданыТекущиеДанные; - Элементы.СписокСостоянияУзловУдалитьНастройкуСинхронизации.Доступность = ЗаданыТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + Элементы.СписокПриложенийНачальнаяВыгрузкаДанных.Доступность = ТекущиеДанные.ИнтерактивнаяОтправка + И Не ТекущиеДанные.ЗапускОбменаИзКорреспондента + И Не ТекущиеДанные.ПолученоСообщениеДляСопоставленияДанных; - // Контекстное меню. - Элементы.ГруппаКнопокВыполненияОбменаДанными.Доступность = ЗаданыТекущиеДанные; - Элементы.КонтекстноеМенюСписокИзменениеИСостав.Доступность = ЗаданыТекущиеДанные; - Элементы.КонтекстноеМенюСписокСостоянияДиагностика.Доступность = ЗаданыТекущиеДанные; - Элементы.ГруппаКнопокНастройкиРасписания.Доступность = ЗаданыТекущиеДанные; - Элементы.СписокСостоянияУзловКонтекстноеМенюИнформацияПоОбмену.Доступность = ЗаданыТекущиеДанные; - КонецПроцедуры -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonForms/Склонения/Form.form b/SSL/src/CommonForms/Склонения/Form.form index 52de4395b..b9645ae09 100644 --- a/SSL/src/CommonForms/Склонения/Form.form +++ b/SSL/src/CommonForms/Склонения/Form.form @@ -435,6 +435,7 @@ Page + HorizontalIfPossible false @@ -529,6 +530,7 @@ Page + HorizontalIfPossible false @@ -556,9 +558,11 @@ Auto - - ГруппаКоманднаяПанель - 31 + Bottom + true + + ФормаКоманднаяПанель + -1 ФормаКомандаОК 25 @@ -616,37 +620,7 @@ UserCmds Auto - true - true - - true - - - <key>ru</key> - <value>Командная панель</value> - - - ГруппаКоманднаяПанельРасширеннаяПодсказка - 32 - Label - true - true - - Left - - - CommandBar - - Right - - - None - false - - ФормаКоманднаяПанель - -1 - Left - true + Right OnOpen diff --git a/SSL/src/CommonForms/Склонения/Module.bsl b/SSL/src/CommonForms/Склонения/Module.bsl index 0acf40132..01b5f331a 100644 --- a/SSL/src/CommonForms/Склонения/Module.bsl +++ b/SSL/src/CommonForms/Склонения/Module.bsl @@ -66,7 +66,6 @@ Процедура КомандаПросклонятьПовторно(Команда) ПросклонятьПовторноНаСервере(); - ОбновитьГруппуИнформационнаяНадписьСервисСклонения(); КонецПроцедуры @@ -113,36 +112,40 @@ &НаСервере Процедура ОбновитьГруппуИнформационнаяНадписьСервисСклонения() + Элементы.ГруппаИнформационнаяНадписьСервисСклонения.Видимость = Ложь; + Если ЭтоФИО Тогда - Элементы.ГруппаИнформационнаяНадписьСервисСклонения.Видимость = Ложь; Возврат; КонецЕсли; ИспользоватьСервисСклонения = Константы.ИспользоватьСервисСклоненияMorpher.Получить(); - Если ИспользоватьСервисСклонения Тогда - Если Не СклонениеПредставленийОбъектов.ДоступенСервисСклонения() Тогда - Элементы.ГруппаИнформационнаяНадписьСервисСклонения.Видимость = Истина; - Элементы.ГруппаИнформационнаяНадписьСервисСклонения.ТекущаяСтраница = Элементы.ГруппаИнформационнаяНадписьДоступностьСервиса; - Иначе - Элементы.ГруппаИнформационнаяНадписьСервисСклонения.Видимость = Ложь; - КонецЕсли; - Иначе + Если Не ИспользоватьСервисСклонения Тогда Элементы.ГруппаИнформационнаяНадписьСервисСклонения.Видимость = Истина; Элементы.ГруппаИнформационнаяНадписьСервисСклонения.ТекущаяСтраница = Элементы.ГруппаИнформационнаяНадписьВключениеСервиса; - КонецЕсли; + Возврат; + КонецЕсли; + + Если Не СклонениеПредставленийОбъектов.ДоступенСервисСклонения() Тогда + Элементы.ГруппаИнформационнаяНадписьСервисСклонения.Видимость = Истина; + Элементы.ГруппаИнформационнаяНадписьСервисСклонения.ТекущаяСтраница = Элементы.ГруппаИнформационнаяНадписьДоступностьСервиса; + КонецЕсли; КонецПроцедуры &НаСервере Процедура ПросклонятьПовторноНаСервере() + СклонениеПредставленийОбъектов.УстановитьДоступностьСервисаСклонения(Истина); + ИзмененоПредставление = Истина; СтруктураСклонения = СклонениеПредставленийОбъектов.ДанныеСклонения(Представление, ЭтоФИО, Пол, Истина); ЗаполнитьЗначенияСвойств(ЭтотОбъект, СтруктураСклонения); Склонения = Новый ФиксированнаяСтруктура(СтруктураСклонения); ИзмененоПредставление = Ложь; + ОбновитьГруппуИнформационнаяНадписьСервисСклонения(); + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonForms/СменаПароля/Form.form b/SSL/src/CommonForms/СменаПароля/Form.form index 5d5af87b9..4f28528c2 100644 --- a/SSL/src/CommonForms/СменаПароля/Form.form +++ b/SSL/src/CommonForms/СменаПароля/Form.form @@ -236,6 +236,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -472,6 +473,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -541,6 +543,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true diff --git a/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Form.form b/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Form.form index 51ea8aef8..e5d586e0b 100644 --- a/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Form.form +++ b/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Form.form @@ -892,6 +892,7 @@ Page + HorizontalIfPossible auto false diff --git a/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Module.bsl b/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Module.bsl index e4b192b1e..c204ddb44 100644 --- a/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Module.bsl +++ b/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Module.bsl @@ -338,7 +338,17 @@ ПомощникСозданияОбменаДанными = Обработки["ПомощникСозданияОбменаДанными"].Создать(); ПомощникСозданияОбменаДанными.Инициализация(ПараметрыЗадания.Узел); - ПомощникСозданияОбменаДанными.ВыполнитьВыгрузкуПараметровМастераВКонстанту(Отказ); + + Попытка + Обработки["ПомощникСозданияОбменаДанными"].ВыгрузитьНастройкиПодключенияДляПодчиненногоУзлаРИБ( + ПомощникСозданияОбменаДанными); + Исключение + Отказ = Истина; + МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; Если Отказ Тогда Возврат Неопределено; @@ -463,6 +473,21 @@ Процедура ЗапуститьПереходРезультат() Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.Результат; Элементы.СоздатьНачальныйОбраз.Видимость = Ложь; + + Если ПроцентВыполнения = 100 Тогда + ЗавершитьСозданиеНачальногоОбраза(Узел); + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ЗавершитьСозданиеНачальногоОбраза(УзелОбмена) + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); + МодульОбменДаннымиСервер.ЗавершитьСозданиеНачальногоОбраза(УзелОбмена); + КонецЕсли; + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonForms/СозданиеРезервнойКопии/Form.form b/SSL/src/CommonForms/СозданиеРезервнойКопии/Form.form index 34f8f052d..d11508c1f 100644 --- a/SSL/src/CommonForms/СозданиеРезервнойКопии/Form.form +++ b/SSL/src/CommonForms/СозданиеРезервнойКопии/Form.form @@ -224,6 +224,7 @@ Page + HorizontalIfPossible false @@ -333,6 +334,7 @@ Page + HorizontalIfPossible false diff --git a/SSL/src/CommonForms/СохранениеПечатнойФормы/Module.bsl b/SSL/src/CommonForms/СохранениеПечатнойФормы/Module.bsl index 59bbbcd96..87e45d264 100644 --- a/SSL/src/CommonForms/СохранениеПечатнойФормы/Module.bsl +++ b/SSL/src/CommonForms/СохранениеПечатнойФормы/Module.bsl @@ -85,8 +85,16 @@ Если Не ПустаяСтрока(ВыбраннаяПапка) Тогда ДиалогВыбораПапки.Каталог = ВыбраннаяПапка; КонецЕсли; - Если ДиалогВыбораПапки.Выбрать() Тогда - ВыбраннаяПапка = ДиалогВыбораПапки.Каталог; + ДиалогВыбораПапки.Показать(Новый ОписаниеОповещения("ПапкаДляСохраненияФайловЗавершениеВыбора", ЭтотОбъект)); +КонецПроцедуры + +// Обработчик завершения выбора каталога сохраненных файлов. +// См. Синтакс-помощник: ДиалогВыбораФайла.Показать(). +// +&НаКлиенте +Процедура ПапкаДляСохраненияФайловЗавершениеВыбора(Папка, ДополнительныеПараметры) Экспорт + Если Папка <> Неопределено И Папка.Количество() > 0 Тогда + ВыбраннаяПапка = Папка[0]; ОчиститьСообщения(); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonForms/СравнениеТабличныхДокументов/Form.form b/SSL/src/CommonForms/СравнениеТабличныхДокументов/Form.form index b288293c6..732410e93 100644 --- a/SSL/src/CommonForms/СравнениеТабличныхДокументов/Form.form +++ b/SSL/src/CommonForms/СравнениеТабличныхДокументов/Form.form @@ -373,6 +373,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/CommonForms/СравнениеТабличныхДокументов/Module.bsl b/SSL/src/CommonForms/СравнениеТабличныхДокументов/Module.bsl index e4478b3bf..081f360f1 100644 --- a/SSL/src/CommonForms/СравнениеТабличныхДокументов/Module.bsl +++ b/SSL/src/CommonForms/СравнениеТабличныхДокументов/Module.bsl @@ -9,8 +9,8 @@ КонецЕсли; ТабличныеДокументыДляСравнения = ПолучитьИзВременногоХранилища(Параметры.АдресТабличныхДокументов); - ТабличныйДокументЛевый = ПодготовитьТабличныйДокумент(ТабличныеДокументыДляСравнения.Левый); - ТабличныйДокументПравый = ПодготовитьТабличныйДокумент(ТабличныеДокументыДляСравнения.Правый); + ПрочитатьТабличныйДокументИзХранилища(ТабличныеДокументыДляСравнения.Левый, ТабличныйДокументЛевый); + ПрочитатьТабличныйДокументИзХранилища(ТабличныеДокументыДляСравнения.Правый, ТабличныйДокументПравый); Элементы.ГруппаЛевыйТабличныйДокумент.Заголовок = Параметры.ЗаголовокЛевый; Элементы.ГруппаПравыйТабличныйДокумент.Заголовок = Параметры.ЗаголовокПравый; @@ -580,23 +580,12 @@ КонецПроцедуры &НаСервере -Функция ПодготовитьТабличныйДокумент(ТабличныйДокумент) - - Если ТипЗнч(ТабличныйДокумент) = Тип("ТабличныйДокумент") Тогда - Возврат ТабличныйДокумент; - КонецЕсли; - - ДвоичныеДанные = ПолучитьИзВременногоХранилища(ТабличныйДокумент); - ИмяВременногоФайла = ПолучитьИмяВременногоФайла("mxl"); - ДвоичныеДанные.Записать(ИмяВременногоФайла); - - Результат = Новый ТабличныйДокумент; - Результат.Прочитать(ИмяВременногоФайла); - - УдалитьФайлы(ИмяВременногоФайла); - - Возврат Результат; - -КонецФункции +Процедура ПрочитатьТабличныйДокументИзХранилища(ДокументВХранилище, Документ) + ВременныйФайл = ПолучитьИмяВременногоФайла("mxl"); + ДвоичныеДанные = ПолучитьИзВременногоХранилища(ДокументВХранилище); + ДвоичныеДанные.Записать(ВременныйФайл); + Документ.Прочитать(ВременныйФайл); + УдалитьФайлы(ВременныйФайл); +КонецПроцедуры #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonForms/СтруктураПодчиненности/Module.bsl b/SSL/src/CommonForms/СтруктураПодчиненности/Module.bsl index 61db0b18e..cf611f5f6 100644 --- a/SSL/src/CommonForms/СтруктураПодчиненности/Module.bsl +++ b/SSL/src/CommonForms/СтруктураПодчиненности/Module.bsl @@ -404,8 +404,8 @@ ДеревоРодительскиеОбъекты.ПолучитьЭлементы().Очистить(); ДеревоПодчиненныеОбъекты.ПолучитьЭлементы().Очистить(); - ВывестиРодительскиеОбъекты(ОбъектСсылка,ДеревоРодительскиеОбъекты); - ВывестиПодчиненныеОбъекты(ОбъектСсылка,ДеревоПодчиненныеОбъекты); + ВывестиРодительскиеОбъекты(ОбъектСсылка, ДеревоРодительскиеОбъекты); + ВывестиПодчиненныеОбъекты(ОбъектСсылка, ДеревоПодчиненныеОбъекты); КонецПроцедуры @@ -485,97 +485,110 @@ Для Каждого Реквизит Из МетаданныеОбъекта.Реквизиты Цикл - Если Метаданные.КритерииОтбора.СвязанныеДокументы.Состав.Содержит(Реквизит) Тогда - - Для Каждого ТекущийТип Из Реквизит.Тип.Типы() Цикл - - МетаданныеРеквизита = Метаданные.НайтиПоТипу(ТекущийТип); - - Если МетаданныеРеквизита <> Неопределено - И (Метаданные.Документы.Содержит(МетаданныеРеквизита) - Или Метаданные.Справочники.Содержит(МетаданныеРеквизита) - Или Метаданные.ПланыВидовХарактеристик.Содержит(МетаданныеРеквизита)) - И ПравоДоступа("Чтение", МетаданныеРеквизита) Тогда - - ЗначениеРеквизита = ТекущийОбъект[Реквизит.Имя]; - - Если ЗначениеЗаполнено(ЗначениеРеквизита) - И ТипЗнч(ЗначениеРеквизита) = ТекущийТип - И ЗначениеРеквизита <> ТекущийОбъект - И СписокРеквизитов.НайтиПоЗначению(ЗначениеРеквизита) = Неопределено Тогда - - ЯвляетсяДокументом = ОбщегоНазначения.ЭтоДокумент(МетаданныеРеквизита); - - Если ЯвляетсяДокументом Тогда - СписокРеквизитов.Добавить(ЗначениеРеквизита,Формат(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЗначениеРеквизита, "Дата", Истина),"ДЛФ=DT")); - Иначе - СписокРеквизитов.Добавить(ЗначениеРеквизита, Дата(1,1,1)); - КонецЕсли; - - КонецЕсли; - КонецЕсли; - КонецЦикла; - + Если Не Метаданные.КритерииОтбора.СвязанныеДокументы.Состав.Содержит(Реквизит) Тогда + Продолжить; КонецЕсли; + Для Каждого ТекущийТип Из Реквизит.Тип.Типы() Цикл + + МетаданныеРеквизита = Метаданные.НайтиПоТипу(ТекущийТип); + Если МетаданныеРеквизита = Неопределено Тогда + Продолжить; + КонецЕсли; + Если Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(МетаданныеРеквизита) + Или Не ПравоДоступа("Чтение", МетаданныеРеквизита) Тогда + Продолжить; + КонецЕсли; + Если Не Метаданные.Документы.Содержит(МетаданныеРеквизита) + И Не Метаданные.Справочники.Содержит(МетаданныеРеквизита) + И Не Метаданные.ПланыВидовХарактеристик.Содержит(МетаданныеРеквизита) Тогда + Продолжить; + КонецЕсли; + + ЗначениеРеквизита = ТекущийОбъект[Реквизит.Имя]; + Если ЗначениеЗаполнено(ЗначениеРеквизита) + И ТипЗнч(ЗначениеРеквизита) = ТекущийТип + И ЗначениеРеквизита <> ТекущийОбъект + И СписокРеквизитов.НайтиПоЗначению(ЗначениеРеквизита) = Неопределено Тогда + + ЯвляетсяДокументом = ОбщегоНазначения.ЭтоДокумент(МетаданныеРеквизита); + + Если ЯвляетсяДокументом Тогда + СписокРеквизитов.Добавить(ЗначениеРеквизита, + Формат(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЗначениеРеквизита, "Дата", Истина), "ДЛФ=DT")); + Иначе + СписокРеквизитов.Добавить(ЗначениеРеквизита, Дата(1,1,1)); + КонецЕсли; + + КонецЕсли; + КонецЦикла; + КонецЦикла; Для Каждого ТЧ Из МетаданныеОбъекта.ТабличныеЧасти Цикл - СтрРеквизитов = ""; - + + ИменаРеквизитов = ""; СодержимоеТЧ = ТекущийОбъект[ТЧ.Имя].Выгрузить(); - Для Каждого Реквизит Из ТЧ.Реквизиты Цикл - Если Метаданные.КритерииОтбора.СвязанныеДокументы.Состав.Содержит(Реквизит) Тогда - - Для Каждого ТекущийТип Из Реквизит.Тип.Типы() Цикл - - МетаданныеРеквизита = Метаданные.НайтиПоТипу(ТекущийТип); - - Если МетаданныеРеквизита<>Неопределено - И (Метаданные.Документы.Содержит(МетаданныеРеквизита) - Или Метаданные.Справочники.Содержит(МетаданныеРеквизита) - Или Метаданные.ПланыВидовХарактеристик.Содержит(МетаданныеРеквизита)) - И ПравоДоступа("Чтение", МетаданныеРеквизита) Тогда - - СтрРеквизитов = СтрРеквизитов + ?(СтрРеквизитов = "", "", ", ") + Реквизит.Имя; - Прервать; - - КонецЕсли; - КонецЦикла; - + Если Не Метаданные.КритерииОтбора.СвязанныеДокументы.Состав.Содержит(Реквизит) Тогда + Продолжить; КонецЕсли; + + Для Каждого ТекущийТип Из Реквизит.Тип.Типы() Цикл + + МетаданныеРеквизита = Метаданные.НайтиПоТипу(ТекущийТип); + Если МетаданныеРеквизита = Неопределено Тогда + Продолжить; + КонецЕсли; + Если Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(МетаданныеРеквизита) + Или Не ПравоДоступа("Чтение", МетаданныеРеквизита) Тогда + Продолжить; + КонецЕсли; + + Если Не Метаданные.Документы.Содержит(МетаданныеРеквизита) + И Не Метаданные.Справочники.Содержит(МетаданныеРеквизита) + И Не Метаданные.ПланыВидовХарактеристик.Содержит(МетаданныеРеквизита) Тогда + Продолжить; + КонецЕсли; + + ИменаРеквизитов = ИменаРеквизитов + ?(ИменаРеквизитов = "", "", ", ") + Реквизит.Имя; + Прервать; + + КонецЦикла; КонецЦикла; - СодержимоеТЧ.Свернуть(СтрРеквизитов); + СодержимоеТЧ.Свернуть(ИменаРеквизитов); Для Каждого КолонкаТЧ Из СодержимоеТЧ.Колонки Цикл Для Каждого СтрокаТЧ Из СодержимоеТЧ Цикл ЗначениеРеквизита = СтрокаТЧ[КолонкаТЧ.Имя]; - МетаданныеЗначения = Метаданные.НайтиПоТипу(ТипЗнч(ЗначениеРеквизита)); + Если МетаданныеЗначения = Неопределено Тогда + Продолжить; + КонецЕсли; + Если Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(МетаданныеЗначения) + Или Не ПравоДоступа("Чтение", МетаданныеЗначения) Тогда + Продолжить; + КонецЕсли; + Если ЗначениеРеквизита = ТекущийОбъект + Или СписокРеквизитов.НайтиПоЗначению(ЗначениеРеквизита) <> Неопределено Тогда + Продолжить; + КонецЕсли; - Если МетаданныеЗначения <> Неопределено Тогда - - Если ЗначениеЗаполнено(ЗначениеРеквизита) - И (Метаданные.Документы.Содержит(МетаданныеЗначения) - Или Метаданные.Справочники.Содержит(МетаданныеЗначения) - Или Метаданные.ПланыВидовХарактеристик.Содержит(МетаданныеЗначения)) - И ЗначениеРеквизита <> ТекущийОбъект - И СписокРеквизитов.НайтиПоЗначению(ЗначениеРеквизита) = Неопределено - И ПравоДоступа("Чтение", МетаданныеЗначения) Тогда - - ЯвляетсяДокументом = ОбщегоНазначения.ЭтоДокумент(МетаданныеЗначения); - - Если ЯвляетсяДокументом Тогда - СписокРеквизитов.Добавить(ЗначениеРеквизита,Формат(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЗначениеРеквизита, "Дата", Истина),"ДЛФ=DT")); - Иначе - СписокРеквизитов.Добавить(ЗначениеРеквизита, Дата(1,1,1)); - КонецЕсли; - КонецЕсли; + ЯвляетсяДокументом = ОбщегоНазначения.ЭтоДокумент(МетаданныеЗначения); + Если Не ЯвляетсяДокументом И Не Метаданные.Справочники.Содержит(МетаданныеЗначения) + И Не Метаданные.ПланыВидовХарактеристик.Содержит(МетаданныеЗначения) Тогда + Продолжить; + КонецЕсли; + + Если ЯвляетсяДокументом Тогда + СписокРеквизитов.Добавить(ЗначениеРеквизита, + Формат(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЗначениеРеквизита, "Дата", Истина), "ДЛФ=DT")); + Иначе + СписокРеквизитов.Добавить(ЗначениеРеквизита, Дата(1,1,1)); КонецЕсли; КонецЦикла; @@ -644,7 +657,7 @@ КонецПроцедуры &НаСервере -Процедура ДополнитьКэшМетаданных(МетаданныеОбъекта, ИмяОбъекта,КэшРеквизитовОбъекта) +Процедура ДополнитьКэшМетаданных(МетаданныеОбъекта, ИмяОбъекта, КэшРеквизитовОбъекта) РеквизитыДокумента = КэшРеквизитовОбъекта[ИмяОбъекта]; Если РеквизитыДокумента = Неопределено Тогда @@ -705,29 +718,25 @@ &НаСервере Функция ОбъектыПоКритериюОтбора(ЗначениеКритерияОтбора) - Если Метаданные.КритерииОтбора.СвязанныеДокументы.Тип.СодержитТип(ТипЗнч(ЗначениеКритерияОтбора)) Тогда - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | СвязанныеДокументы.Ссылка - |ИЗ - | КритерийОтбора.СвязанныеДокументы(&ЗначениеКритерияОтбора) КАК СвязанныеДокументы"; - - Запрос.УстановитьПараметр("ЗначениеКритерияОтбора",ЗначениеКритерияОтбора); - Возврат Запрос.Выполнить().Выгрузить(); - - Иначе - + Если Не Метаданные.КритерииОтбора.СвязанныеДокументы.Тип.СодержитТип(ТипЗнч(ЗначениеКритерияОтбора)) Тогда Возврат Неопределено; - КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | СвязанныеДокументы.Ссылка + |ИЗ + | КритерийОтбора.СвязанныеДокументы(&ЗначениеКритерияОтбора) КАК СвязанныеДокументы"; + + Запрос.УстановитьПараметр("ЗначениеКритерияОтбора", ЗначениеКритерияОтбора); + Возврат Запрос.Выполнить().Выгрузить(); КонецФункции &НаСервере -Процедура ВывестиПодчиненныеОбъекты(ТекущийОбъект,ДеревоРодитель) +Процедура ВывестиПодчиненныеОбъекты(ТекущийОбъект, ДеревоРодитель) СтрокиДерева = ДеревоРодитель.ПолучитьЭлементы(); Таблица = ОбъектыПоКритериюОтбора(ТекущийОбъект); diff --git a/SSL/src/CommonForms/УстановкаВедущейКонечнойТочки/Module.bsl b/SSL/src/CommonForms/УстановкаВедущейКонечнойТочки/Module.bsl index 0b4ffa98f..72b577e23 100644 --- a/SSL/src/CommonForms/УстановкаВедущейКонечнойТочки/Module.bsl +++ b/SSL/src/CommonForms/УстановкаВедущейКонечнойТочки/Module.bsl @@ -13,7 +13,7 @@ КонечнаяТочка = Параметры.КонечнаяТочка; // Зачитываем значения настроек подключения. - ЗаполнитьЗначенияСвойств(ЭтотОбъект, РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспортаWS(КонечнаяТочка)); + ЗаполнитьЗначенияСвойств(ЭтотОбъект, РегистрыСведений.НастройкиТранспортаОбменаСообщениями.НастройкиТранспортаWS(КонечнаяТочка)); Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Установка ведущей конечной точки для ""%1""'"), ОбщегоНазначения.ЗначениеРеквизитаОбъекта(КонечнаяТочка, "Наименование")); diff --git a/SSL/src/CommonForms/УстановкаВнешнейКомпонентыНевозможна/Form.form b/SSL/src/CommonForms/УстановкаВнешнейКомпонентыНевозможна/Form.form new file mode 100644 index 000000000..0cc04b891 --- /dev/null +++ b/SSL/src/CommonForms/УстановкаВнешнейКомпонентыНевозможна/Form.form @@ -0,0 +1,193 @@ + + + + Шапка + 90 + + Предупреждение32 + 95 + + <key>ru</key> + <value>Предупреждение32</value> + + true + true + + true + + + Предупреждение32РасширеннаяПодсказка + 97 + Label + true + true + + Left + + + + Предупреждение32КонтекстноеМеню + 96 + true + + true + true + false + + + CommonPicture.Предупреждение32 + + + + + ДекорацияПояснение + 92 + + <key>ru</key> + <value>%1 + + +Не предусмотрена работа внешней компоненты +в клиентском приложении %2. +Используйте <link about:blank>поддерживаемое клиентское приложение</> или обратитесь к разработчику внешней компоненты.</value> + + true + true + + true + + + ДекорацияПояснениеРасширеннаяПодсказка + 94 + Label + true + true + + Left + + + + ДекорацияПояснениеКонтекстноеМеню + 93 + true + + true + Label + 40 + true + true + true + + Style.NormalTextFont + 100 + + + + URLProcessing + ДекорацияПояснениеОбработкаНавигационнойСсылки + + Left + + + true + true + + true + + + <key>ru</key> + <value>Шапка</value> + + + ШапкаРасширеннаяПодсказка + 91 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + NormalSeparation + true + true + Auto + Auto + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + Закрыть + 100 + + <key>ru</key> + <value>Закрыть</value> + + true + true + + true + + + ЗакрытьРасширеннаяПодсказка + 101 + Label + true + true + + Left + + + Form.StandardCommand.Close + Auto + true + true + true + UserCmds + Auto + + Center + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + auto + true + + ТекстПояснения + + String + + + true + + + ПоддерживаемыеКлиенты + + true + + + + + + diff --git a/SSL/src/CommonForms/УстановкаВнешнейКомпонентыНевозможна/Module.bsl b/SSL/src/CommonForms/УстановкаВнешнейКомпонентыНевозможна/Module.bsl new file mode 100644 index 000000000..e2ebe93af --- /dev/null +++ b/SSL/src/CommonForms/УстановкаВнешнейКомпонентыНевозможна/Module.bsl @@ -0,0 +1,99 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если Не ПустаяСтрока(Параметры.ТекстПояснения) Тогда + Элементы.ДекорацияПояснение.Заголовок = СтроковыеФункцииКлиентСервер.ФорматированнаяСтрока( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 + | + |Не предусмотрена работа внешней компоненты + |в клиентском приложении %2. + |Используйте поддерживаемое клиентское приложение или обратитесь к разработчику внешней компоненты.'"), + Параметры.ТекстПояснения, + ПредставлениеТекущегоКлиента())); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ДекорацияПояснениеОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ПоддерживаемыеКлиенты", Параметры.ПоддерживаемыеКлиенты); + + ОткрытьФорму("ОбщаяФорма.ПоддерживаемыеКлиентскиеПриложения", ПараметрыФормы); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Функция ПредставлениеТекущегоКлиента() + + СистемнаяИнформация = Новый СистемнаяИнформация; + +#Если ВебКлиент Тогда + Строка = СистемнаяИнформация.ИнформацияПрограммыПросмотра; + + Если СтрНайти(Строка, "Chrome/") > 0 Тогда + Браузер = "Chrome"; + ИначеЕсли СтрНайти(Строка, "MSIE") > 0 Тогда + Браузер = "Internet Explorer"; + ИначеЕсли СтрНайти(Строка, "Safari/") > 0 Тогда + Браузер = "Safari"; + ИначеЕсли СтрНайти(Строка, "Firefox/") > 0 Тогда + Браузер = "Firefox"; + КонецЕсли; + + Представление = НСтр("ru = 'веб-клиент'") + " " + Браузер + " " + НСтр("ru = 'в'"); +#ИначеЕсли МобильноеПриложениеКлиент Тогда + Представление = НСтр("ru = 'мобильное приложение'"); +#ИначеЕсли МобильныйКлиент Тогда + Представление = НСтр("ru = 'мобильный клиент'"); +#ИначеЕсли ТонкийКлиент Тогда + Представление = НСтр("ru = 'тонкий клиент'"); +#ИначеЕсли ТолстыйКлиентОбычноеПриложение Тогда + Представление = НСтр("ru = 'толстый клиент (обычное приложение)'"); +#ИначеЕсли ТолстыйКлиентУправляемоеПриложение Тогда + Представление = НСтр("ru = 'толстый клиент'"); +#КонецЕсли + + Если СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 Тогда + Представление = Представление + " " + "Windows x86"; + ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда + Представление = Представление + " " + "Windows x86-64"; + ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86 Тогда + Представление = Представление + " " + "Linux x86"; + ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86_64 Тогда + Представление = Представление + " " + "Linux x86-64"; + ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.MacOS_x86 Тогда + Представление = Представление + " " + "MacOS x86"; + ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.MacOS_x86_64 Тогда + Представление = Представление + " " + "MacOS x86-64"; + КонецЕсли; + + Возврат Представление; + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonForms/ДоступныеВидыКлиентовВнешнейКомпоненты/ДоступныеВидыКлиентовВнешнейКомпоненты.mdo b/SSL/src/CommonForms/УстановкаВнешнейКомпонентыНевозможна/УстановкаВнешнейКомпонентыНевозможна.mdo similarity index 61% rename from SSL/src/CommonForms/ДоступныеВидыКлиентовВнешнейКомпоненты/ДоступныеВидыКлиентовВнешнейКомпоненты.mdo rename to SSL/src/CommonForms/УстановкаВнешнейКомпонентыНевозможна/УстановкаВнешнейКомпонентыНевозможна.mdo index 751345b36..40ad71d4e 100644 --- a/SSL/src/CommonForms/ДоступныеВидыКлиентовВнешнейКомпоненты/ДоступныеВидыКлиентовВнешнейКомпоненты.mdo +++ b/SSL/src/CommonForms/УстановкаВнешнейКомпонентыНевозможна/УстановкаВнешнейКомпонентыНевозможна.mdo @@ -1,9 +1,9 @@ - ДоступныеВидыКлиентовВнешнейКомпоненты + УстановкаВнешнейКомпонентыНевозможна ru - Доступные виды клиентов внешней компоненты + Установка внешней компоненты невозможна PersonalComputer MobileDevice diff --git a/SSL/src/CommonForms/УстановленныеИсправления/Form.form b/SSL/src/CommonForms/УстановленныеИсправления/Form.form new file mode 100644 index 000000000..a9cd3926e --- /dev/null +++ b/SSL/src/CommonForms/УстановленныеИсправления/Form.form @@ -0,0 +1,887 @@ + + + + ГруппаИнформация + 76 + + ИнформацияКартинка + 62 + + <key>ru</key> + <value>Информация картинка</value> + + true + true + + true + + + ИнформацияКартинкаРасширеннаяПодсказка + 64 + Label + true + true + + Left + + + + ИнформацияКартинкаКонтекстноеМеню + 63 + true + + true + true + + + CommonPicture.Информация32 + + + + + ИнформацияОписание + 67 + + <key>ru</key> + <value>Изменения, которые будут сделаны, вступят в силу при следующем входе в программу.</value> + + true + true + + true + + + ИнформацияОписаниеРасширеннаяПодсказка + 69 + Label + true + true + + Left + + + + ИнформацияОписаниеКонтекстноеМеню + 68 + true + + Label + true + + Left + Center + 2 + + + true + true + + true + + + <key>ru</key> + <value>Информация</value> + + + ГруппаИнформацияРасширеннаяПодсказка + 77 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + УстановленныеИсправления + 1 + + <key>ru</key> + <value>Установленные исправления</value> + + true + true + + true + + + УстановленныеИсправления + + None + Change + Copy + EndEdit + MoveDown + MoveUp + ShowMultipleSelection + ShowRowRearrangement + SortListAsc + SortListDesc + + УстановленныеИсправленияГруппаКартинки + 32 + + УстановленныеИсправленияСтатус + 29 + true + true + + true + + + УстановленныеИсправления.Статус + + None + + УстановленныеИсправленияСтатусРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + УстановленныеИсправленияСтатусКонтекстноеМеню + 30 + true + + PictureField + Auto + true + Left + true + + true + true + true + true + + + 1 + + + + + УстановленныеИсправленияНаименование + 14 + true + true + + true + + + УстановленныеИсправления.Имя + + + УстановленныеИсправленияНаименованиеРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + УстановленныеИсправленияНаименованиеКонтекстноеМеню + 15 + true + + LabelField + Auto + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Исправления группа картинки</value> + + + УстановленныеИсправленияГруппаКартинкиРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + УстановленныеИсправленияОписание + 17 + true + true + + true + + + УстановленныеИсправления.Описание + + + УстановленныеИсправленияОписаниеРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + + УстановленныеИсправленияОписаниеКонтекстноеМеню + 18 + true + + LabelField + Auto + true + Left + true + + true + 2 + true + + + + УстановленныеИсправленияПрименимоДля + 37 + true + true + + true + + + УстановленныеИсправления.ПрименимоДля + + + УстановленныеИсправленияПрименимоДляРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + + УстановленныеИсправленияПрименимоДляКонтекстноеМеню + 38 + true + + LabelField + Auto + true + Left + true + + true + true + + + + УстановленныеИсправленияПутьКФайлу + 26 + true + true + + + УстановленныеИсправления.ПутьКФайлу + + + УстановленныеИсправленияПутьКФайлуРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + УстановленныеИсправленияПутьКФайлуКонтекстноеМеню + 27 + true + + LabelField + Auto + true + Left + true + + true + true + + + + УстановленныеИсправленияКоманднаяПанель + 3 + + ФормаУстановитьИсправление + 50 + + <key>ru</key> + <value>Установить исправление...</value> + + true + true + + true + + + ФормаУстановитьИсправлениеРасширеннаяПодсказка + 51 + Label + true + true + + Left + + + Form.Item.УстановленныеИсправления.StandardCommand.Add + Normal + Auto + true + true + UserCmds + Auto + + + ФормаУдалитьИсправление + 48 + + <key>ru</key> + <value>Удалить исправление</value> + + true + true + + true + + + ФормаУдалитьИсправлениеРасширеннаяПодсказка + 49 + Label + true + true + + Left + + + Form.Item.УстановленныеИсправления.StandardCommand.Delete + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + УстановленныеИсправленияСправка + 72 + true + true + + true + + + УстановленныеИсправленияСправкаРасширеннаяПодсказка + 73 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + + УстановленныеИсправленияИзменитьФорму + 70 + true + true + + true + + + УстановленныеИсправленияИзменитьФормуРасширеннаяПодсказка + 71 + Label + true + true + + Left + + + Form.StandardCommand.CustomizeForm + Normal + Auto + true + true + UserCmds + Auto + + + УстановленныеИсправленияВывестиСписок + 74 + true + true + + true + + + УстановленныеИсправленияВывестиСписокРасширеннаяПодсказка + 75 + Label + true + true + + Left + + + Form.Item.УстановленныеИсправления.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + + Left + + + BeforeAddRow + УстановленныеИсправленияПередНачаломДобавления + + + BeforeDeleteRow + УстановленныеИсправленияПередУдалением + + + УстановленныеИсправленияСтрокаПоиска + 5 + + УстановленныеИсправленияСтрокаПоискаРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + + УстановленныеИсправленияСтрокаПоискаКонтекстноеМеню + 6 + true + + УстановленныеИсправления + + true + + + + УстановленныеИсправленияСостояниеПросмотра + 8 + + УстановленныеИсправленияСостояниеПросмотраРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + + УстановленныеИсправленияСостояниеПросмотраКонтекстноеМеню + 9 + true + + ViewStatusAddition + УстановленныеИсправления + + true + + + + УстановленныеИсправленияУправлениеПоиском + 11 + + УстановленныеИсправленияУправлениеПоискомРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + УстановленныеИсправленияУправлениеПоискомКонтекстноеМеню + 12 + true + + SearchControlAddition + УстановленныеИсправления + + true + + + + УстановленныеИсправленияРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + + УстановленныеИсправленияКонтекстноеМеню + 2 + true + + true + true + true + true + true + MultiRow +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + + УстановленныеИсправления.Статус + + + CommonPicture.СостоянияРасширенийКонфигурации + + true + +
      + + ГруппаГоризонтальнаяГруппировка + 46 + + ДекорацияЖурналРегистрации + 40 + + <key>ru</key> + <value>Техническая информация об установке исправлений</value> + + true + true + + true + + + ДекорацияЖурналРегистрацииРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + + ДекорацияЖурналРегистрацииКонтекстноеМеню + 41 + true + + Label + true + true + + + Click + ДекорацияЖурналРегистрацииНажатие + + true + Left + + + true + true + + true + + + <key>ru</key> + <value>Горизонтальная группировка</value> + + + ГруппаГоризонтальнаяГруппировкаРасширеннаяПодсказка + 47 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + УстановленныеИсправления + + <key>ru</key> + <value>Установленные исправления</value> + + 1 + + ValueTable + + + true + + + true + + + Имя + + <key>ru</key> + <value>Наименование</value> + + 1 + + String + + + + true + + + true + + + + Описание + + <key>ru</key> + <value>Описание</value> + + 2 + + String + + + + true + + + true + + + + ПутьКФайлу + + <key>ru</key> + <value>Путь к файлу</value> + + 5 + + String + + + + true + + + true + + + + Статус + + <key>ru</key> + <value>Статус</value> + + 6 + + Number + + + + true + + + true + + + + ПрименимоДля + + <key>ru</key> + <value>Применимо для</value> + + 7 + + String + + + + true + + + true + + + + КонтрольнаяСумма + + <key>ru</key> + <value>Контрольная сумма</value> + + 3 + + String + + + + true + + + true + + + + ИдентификаторРасширения + + <key>ru</key> + <value>Идентификатор расширения</value> + + 4 + + String + + + + true + + + true + + + + Версия + + <key>ru</key> + <value>Версия</value> + + 8 + + String + + + + true + + + true + + + + + Фильтр + + <key>ru</key> + <value>Фильтр</value> + + 3 + + + true + + + true + + + + Исправления + + + + + + +
      diff --git a/SSL/src/CommonForms/УстановленныеИсправления/Help/ru.html b/SSL/src/CommonForms/УстановленныеИсправления/Help/ru.html new file mode 100644 index 000000000..846a8b228 --- /dev/null +++ b/SSL/src/CommonForms/УстановленныеИсправления/Help/ru.html @@ -0,0 +1,7 @@ + +

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

      +

      Открывается с помощью ссылки Установленные исправления (патчи) в разделе Администрирование - Обновление программы.

      +

      Установка исправлений

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

      Удаление исправлений

      +
      • Нажмите кнопку Удалить исправление, если установленное исправление (патч) по каким-либо причинам не устраивает.

      См. также:

      + \ No newline at end of file diff --git a/SSL/src/CommonForms/УстановленныеИсправления/Module.bsl b/SSL/src/CommonForms/УстановленныеИсправления/Module.bsl new file mode 100644 index 000000000..ce9e62aea --- /dev/null +++ b/SSL/src/CommonForms/УстановленныеИсправления/Module.bsl @@ -0,0 +1,336 @@ + +#Область ОписаниеПеременных + +&НаКлиенте +Перем ТекущийКонтекст; + +#КонецОбласти + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Если СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() Тогда + ВызватьИсключение НСтр("ru = 'Текущий режим работы не поддерживается.'"); + КонецЕсли; + + Фильтр = Параметры.Исправления; + + Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() + Или ОбщегоНазначения.РазделениеВключено() + Или ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() + Или Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда + Элементы.ФормаУстановитьИсправление.Видимость = Ложь; + Элементы.ФормаУдалитьИсправление.Видимость = Ложь; + Элементы.ГруппаИнформация.Видимость = Ложь; + КонецЕсли; + + ОбновитьСписокИсправлений(); + + Элементы.УстановленныеИсправленияПрименимоДля.Видимость = Ложь; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ДекорацияЖурналРегистрацииНажатие(Элемент) + МассивСобытий = Новый Массив; + МассивСобытий.Добавить(НСтр("ru = 'Исправления. Установка'")); + МассивСобытий.Добавить(НСтр("ru = 'Исправления. Изменение'")); + МассивСобытий.Добавить(НСтр("ru = 'Исправления. Удаление'")); + Отбор = Новый Структура("СобытиеЖурналаРегистрации", МассивСобытий); + ЖурналРегистрацииКлиент.ОткрытьЖурналРегистрации(Отбор); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыУстановленныеИсправления + +&НаКлиенте +Процедура УстановленныеИсправленияПередУдалением(Элемент, Отказ) + Отказ = Истина; + УдалитьРасширения(Элемент.ВыделенныеСтроки); +КонецПроцедуры + +&НаКлиенте +Процедура УстановленныеИсправленияПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) + Отказ = Истина; + Оповещение = Новый ОписаниеОповещения("ПослеУстановкиИсправлений", ЭтотОбъект); + ОткрытьФорму("Обработка.УстановкаОбновлений.Форма.Форма",,,,,, Оповещение); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура ОбновитьСписокИсправлений() + + УстановленныеИсправления.Очистить(); + Элементы.УстановленныеИсправленияПутьКФайлу.Видимость = Ложь; + + УстановитьПривилегированныйРежим(Истина); + Расширения = РасширенияКонфигурации.Получить(); + УстановитьПривилегированныйРежим(Ложь); + + Для Каждого Расширение Из Расширения Цикл + + Если Не ОбновлениеКонфигурации.ЭтоИсправление(Расширение) Тогда + Продолжить; + КонецЕсли; + + Если Фильтр <> Неопределено И Фильтр.НайтиПоЗначению(Расширение.Имя) = Неопределено Тогда + Продолжить; + КонецЕсли; + + СвойстваИсправления = ОбновлениеКонфигурации.СвойстваИсправления(Расширение.Имя); + + НоваяСтрока = УстановленныеИсправления.Добавить(); + НоваяСтрока.Имя = Расширение.Имя; + НоваяСтрока.КонтрольнаяСумма = Base64Строка(Расширение.ХешСумма); + НоваяСтрока.ИдентификаторРасширения = Расширение.УникальныйИдентификатор; + НоваяСтрока.Версия = Расширение.Версия; + Если СвойстваИсправления <> Неопределено Тогда + НоваяСтрока.Статус = 0; + НоваяСтрока.Описание = СвойстваИсправления.Description; + НоваяСтрока.ПрименимоДля = ИсправлениеПрименимоДля(СвойстваИсправления); + Иначе + НоваяСтрока.Статус = 1; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Функция ИсправлениеПрименимоДля(СвойстваИсправления) + + ПрименимоДля = Новый Массив; + Для Каждого Строка Из СвойстваИсправления.AppliedFor Цикл + ПрименимоДля.Добавить(Строка.ConfigurationName); + КонецЦикла; + + Возврат СтрСоединить(ПрименимоДля, Символы.ПС); + +КонецФункции + +&НаКлиенте +Процедура УдалитьРасширения(ВыделенныеСтроки) + + Если ВыделенныеСтроки.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Контекст = Новый Структура; + Контекст.Вставить("ВыделенныеСтроки", ВыделенныеСтроки); + + Оповещение = Новый ОписаниеОповещения("УдалитьРасширениеПослеПодтверждения", ЭтотОбъект, Контекст); + Если ВыделенныеСтроки.Количество() > 1 Тогда + ТекстВопроса = НСтр("ru = 'Удалить выделенные исправления?'", "ru"); + Иначе + ТекстВопроса = НСтр("ru = 'Удалить исправление?'", "ru"); + КонецЕсли; + + ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет); + +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьРасширениеПослеПодтверждения(Результат, Контекст) Экспорт + + Если Результат = КодВозвратаДиалога.Да Тогда + + Обработчик = Новый ОписаниеОповещения("УдалитьРасширениеПродолжение", ЭтотОбъект, Контекст); + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда + Запросы = ЗапросНаОтменуРазрешенийИспользованияВнешнегоМодуля(Контекст.ВыделенныеСтроки); + МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент"); + МодульРаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, Обработчик); + Иначе + ВыполнитьОбработкуОповещения(Обработчик, КодВозвратаДиалога.ОК); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьРасширениеПродолжение(Результат, Контекст) Экспорт + + Если Результат = КодВозвратаДиалога.ОК Тогда + ТекущийКонтекст = Контекст; + ПодключитьОбработчикОжидания("УдалитьРасширениеЗавершение", 0.1, Истина); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьРасширениеЗавершение() + + Контекст = ТекущийКонтекст; + + Попытка + УдалитьРасширенияНаСервере(Контекст.ВыделенныеСтроки); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ПоказатьПредупреждение(, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + Возврат; + КонецПопытки; + +КонецПроцедуры + +&НаСервере +Процедура УдалитьРасширенияНаСервере(ВыделенныеСтроки) + + УдаляемыеРасширения = Новый Массив; + + ТекстОшибки = ""; + Попытка + УдаляемоеРасширение = ""; + Для Каждого ЭлементСписка Из УстановленныеИсправления Цикл + Если ВыделенныеСтроки.Найти(ЭлементСписка.ПолучитьИдентификатор()) = Неопределено Тогда + Продолжить; + КонецЕсли; + Расширение = НайтиРасширение(ЭлементСписка.ИдентификаторРасширения); + Если Расширение <> Неопределено Тогда + ОписаниеРасширения = Новый Структура; + ОписаниеРасширения.Вставить("Удалено", Ложь); + ОписаниеРасширения.Вставить("Расширение", Расширение); + ОписаниеРасширения.Вставить("ДанныеРасширения", Расширение.ПолучитьДанные()); + УдаляемыеРасширения.Добавить(ОписаниеРасширения); + КонецЕсли; + КонецЦикла; + Индекс = УдаляемыеРасширения.Количество() - 1; + Пока Индекс >= 0 Цикл + ОписаниеРасширения = УдаляемыеРасширения[Индекс]; + ОтключитьПредупрежденияБезопасности(ОписаниеРасширения.Расширение); + УдаляемоеРасширение = ОписаниеРасширения.Расширение.Синоним; + ОписаниеРасширения.Расширение.Удалить(); + УдаляемоеРасширение = ""; + ОписаниеРасширения.Удалено = Истина; + Индекс = Индекс - 1; + КонецЦикла; + + Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() + И РасширенияКонфигурации.Получить().Количество() = 0 Тогда + + Справочники.ВерсииРасширений.ПриУдаленииВсехРасширений(); + КонецЕсли; + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось удалить расширение ""%1"" по причине: + | + |%2'"), + УдаляемоеРасширение, + КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + КонецПопытки; + + Если Не ЗначениеЗаполнено(ТекстОшибки) Тогда + Попытка + РегистрыСведений.ПараметрыРаботыВерсийРасширений.ОбновитьПараметрыРаботыРасширений(); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'После удаления, при подготовке оставшихся расширений к работе, произошла ошибка: + | + |%1'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + КонецПопытки; + КонецЕсли; + + Если ЗначениеЗаполнено(ТекстОшибки) Тогда + ИнформацияОбОшибкеВосстановления = Неопределено; + ВосстановлениеВыполнялось = Ложь; + Попытка + Для Каждого ОписаниеРасширения Из УдаляемыеРасширения Цикл + Если Не ОписаниеРасширения.Удалено Тогда + Продолжить; + КонецЕсли; + ОписаниеРасширения.Расширение.Записать(ОписаниеРасширения.ДанныеРасширения); + ВосстановлениеВыполнялось = Истина; + КонецЦикла; + Исключение + ИнформацияОбОшибкеВосстановления = ИнформацияОбОшибке(); + ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При попытке восстановить удаленные расширения произошла еще одна ошибка: + |%1'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибкеВосстановления)); + КонецПопытки; + Если ВосстановлениеВыполнялось + И ИнформацияОбОшибкеВосстановления = Неопределено Тогда + + ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС + + НСтр("ru = 'Удаленные расширения были восстановлены.'"); + КонецЕсли; + КонецЕсли; + + Если ЗначениеЗаполнено(ТекстОшибки) Тогда + ВызватьИсключение ТекстОшибки; + КонецЕсли; + + ОбновитьСписокИсправлений(); + +КонецПроцедуры + +&НаСервере +Функция НайтиРасширение(ИдентификаторРасширения) + + Отбор = Новый Структура; + Отбор.Вставить("УникальныйИдентификатор", Новый УникальныйИдентификатор(ИдентификаторРасширения)); + УстановитьПривилегированныйРежим(Истина); + Расширения = РасширенияКонфигурации.Получить(Отбор); + УстановитьПривилегированныйРежим(Ложь); + + Расширение = Неопределено; + + Если Расширения.Количество() = 1 Тогда + Расширение = Расширения[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..22f11aa47 --- /dev/null +++ b/SSL/src/CommonForms/УстановленныеИсправления/УстановленныеИсправления.mdo @@ -0,0 +1,20 @@ + + + УстановленныеИсправления + + ru + Установленные исправления + + + + ru + + + PersonalComputer + MobileDevice + true + + ru + Список установленных исправлений + + diff --git a/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl b/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl index dde7db113..773f81b87 100644 --- a/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl +++ b/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl @@ -17,13 +17,33 @@ Для каждого ЭлементСпискаВыбранных Из Параметры.СписокВыбранных Цикл Для каждого ЭлементМассива Из ЭлементСпискаВыбранных.Значение Цикл - - НоваяСтрока = ТаблицаКонтактов.Добавить(); - ЗаполнитьЗначенияСвойств(НоваяСтрока,ЭлементМассива); - НоваяСтрока.Группа = ЭлементСпискаВыбранных.Представление; - НоваяСтрока.ПолноеПредставление = ВзаимодействияКлиентСервер.ПолучитьПредставлениеАдресата( + + ПараметрыПоиска = Новый Структура; + ПараметрыПоиска.Вставить("Адрес", ЭлементМассива.Адрес); + + НайденныеСтроки = ТаблицаКонтактов.НайтиСтроки(ПараметрыПоиска); + + Если НайденныеСтроки.Количество() > 0 Тогда + + СтрокаКонтакта = НайденныеСтроки[0]; + + Если Не ЗначениеЗаполнено(СтрокаКонтакта.Контакт) + И ЗначениеЗаполнено(ЭлементМассива.Контакт) Тогда + + СтрокаКонтакта.Контакт = ЭлементМассива.Контакт; + + КонецЕсли; + + Иначе + + НоваяСтрока = ТаблицаКонтактов.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока,ЭлементМассива); + НоваяСтрока.Группа = ЭлементСпискаВыбранных.Представление; + НоваяСтрока.ПолноеПредставление = ВзаимодействияКлиентСервер.ПолучитьПредставлениеАдресата( ЭлементМассива.Представление,ЭлементМассива.Адрес, ""); - + + КонецЕсли; + КонецЦикла; КонецЦикла; diff --git a/SSL/src/CommonForms/ФормаВариантаОтчета/Form.form b/SSL/src/CommonForms/ФормаВариантаОтчета/Form.form index 174caba8b..7cfd53ce0 100644 --- a/SSL/src/CommonForms/ФормаВариантаОтчета/Form.form +++ b/SSL/src/CommonForms/ФормаВариантаОтчета/Form.form @@ -465,6 +465,7 @@ StdPicture.DataCompositionUserFields + HorizontalIfPossible auto false
      @@ -766,6 +767,7 @@ Page + HorizontalIfPossible LeftNarrowest auto false @@ -1228,6 +1230,7 @@ Page + HorizontalIfPossible LeftNarrowest auto false @@ -1831,6 +1834,7 @@ Page + HorizontalIfPossible LeftNarrowest auto false @@ -2430,6 +2434,7 @@ Page + HorizontalIfPossible LeftNarrowest auto false @@ -2895,6 +2900,7 @@ Page + HorizontalIfPossible auto false @@ -3358,6 +3364,7 @@ Page + HorizontalIfPossible auto false diff --git a/SSL/src/CommonForms/ФормаНастроекОтчета/Form.form b/SSL/src/CommonForms/ФормаНастроекОтчета/Form.form index 4164961e1..5dcf7d64d 100644 --- a/SSL/src/CommonForms/ФормаНастроекОтчета/Form.form +++ b/SSL/src/CommonForms/ФормаНастроекОтчета/Form.form @@ -851,6 +851,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -883,6 +884,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2489,6 +2491,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -4570,6 +4573,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -4598,6 +4602,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -4705,6 +4710,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -5534,6 +5540,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -7157,6 +7164,7 @@ Page + HorizontalIfPossible auto false @@ -7314,6 +7322,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -7452,6 +7461,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -7741,6 +7751,7 @@ UsualGroup + HorizontalIfPossible Auto WeakSeparation true diff --git a/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl b/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl index 44ac1ff66..8b7aac4d4 100644 --- a/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl +++ b/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl @@ -3083,10 +3083,11 @@ ЭлементКД.ПравоеЗначение = НовоеЗначение; КонецЕсли; КонецЕсли; + СтрокаТаблицы.Значение = НовоеЗначение; Если Не ПустаяСтрока(ФорматРедактирования) Тогда - СтрокаТаблицы.Значение = Формат(НовоеЗначение, ФорматРедактирования); + СтрокаТаблицы.ПредставлениеЗначения = Формат(НовоеЗначение, ФорматРедактирования); Иначе - СтрокаТаблицы.Значение = НовоеЗначение; + СтрокаТаблицы.ПредставлениеЗначения = НовоеЗначение; КонецЕсли; КонецПроцедуры @@ -5255,7 +5256,7 @@ Если ГруппаВывода.Размер > 0 Тогда Колонки = Элементы.Добавить(КолонкиИмя, Тип("ГруппаФормы"), ТекущаяГруппа); Колонки.Вид = ВидГруппыФормы.ОбычнаяГруппа; - Колонки.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + Колонки.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; Колонки.Отображение = ОтображениеОбычнойГруппы.Нет; Колонки.ОтображатьЗаголовок = Ложь; diff --git a/SSL/src/CommonForms/ФормаОтчета/Form.form b/SSL/src/CommonForms/ФормаОтчета/Form.form index dfc924062..80be390f8 100644 --- a/SSL/src/CommonForms/ФормаОтчета/Form.form +++ b/SSL/src/CommonForms/ФормаОтчета/Form.form @@ -24,6 +24,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/CommonForms/ФормаОтчета/Module.bsl b/SSL/src/CommonForms/ФормаОтчета/Module.bsl index 21f8a65f3..d817f7600 100644 --- a/SSL/src/CommonForms/ФормаОтчета/Module.bsl +++ b/SSL/src/CommonForms/ФормаОтчета/Module.bsl @@ -1934,20 +1934,8 @@ Для Каждого ОписаниеСвязи Из Информация.ОтключаемыеСвязи Цикл Связь = ОтключаемыеСвязи.Добавить(); ЗаполнитьЗначенияСвойств(Связь, ОписаниеСвязи); - Связь.ВедущийИдентификаторВФорме = ОписаниеСвязи.Ведущий.ИдентификаторЭлемента; + Связь.ВедущийИдентификаторВФорме = ОписаниеСвязи.Ведущий.ИдентификаторЭлемента; Связь.ПодчиненныйИдентификаторВФорме = ОписаниеСвязи.Подчиненный.ИдентификаторЭлемента; - - Если ОписаниеСвязи.Свойство("ВедущийТип") - И ТипЗнч(ОписаниеСвязи.ВедущийТип) = Тип("Тип") Тогда - Связь.ВедущийТип = Новый ОписаниеТипов( - ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ОписаниеСвязи.ВедущийТип)); - КонецЕсли; - - Если ОписаниеСвязи.Свойство("ПодчиненныйТип") - И ТипЗнч(ОписаниеСвязи.ПодчиненныйТип) = Тип("Тип") Тогда - Связь.ПодчиненныйТип = Новый ОписаниеТипов( - ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ОписаниеСвязи.ПодчиненныйТип)); - КонецЕсли; КонецЦикла; КонецПроцедуры diff --git a/SSL/src/CommonForms/ФормаПоиска/Form.form b/SSL/src/CommonForms/ФормаПоиска/Form.form index 865377dde..ff08060e8 100644 --- a/SSL/src/CommonForms/ФормаПоиска/Form.form +++ b/SSL/src/CommonForms/ФормаПоиска/Form.form @@ -97,6 +97,7 @@ UsualGroup + AlwaysHorizontal Center Auto true @@ -111,6 +112,7 @@ Шапка 42 + VeryHigh СтрокаПоиска 3 @@ -266,6 +268,7 @@ UsualGroup + AlwaysHorizontal Auto true true @@ -341,6 +344,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -508,6 +512,7 @@ UsualGroup + AlwaysHorizontal Auto true true @@ -518,6 +523,7 @@ HTMLСтраницаПредставление 39 + VeryHigh true true diff --git a/SSL/src/CommonModules/АдминистрированиеКластераCOMКлиентСервер/Module.bsl b/SSL/src/CommonModules/АдминистрированиеКластераCOMКлиентСервер/Module.bsl index 2b00b1d4b..44aebd9fe 100644 --- a/SSL/src/CommonModules/АдминистрированиеКластераCOMКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/АдминистрированиеКластераCOMКлиентСервер/Module.bsl @@ -141,18 +141,29 @@ Если ПроверятьПараметрыАдминистрированияКластера ИЛИ ПроверятьПараметрыАдминистрированияИнформационнойБазы Тогда - COMСоединитель = COMСоединитель(); - - СоединениеСАгентомСервера = СоединениеСАгентомСервера( - COMСоединитель, - ПараметрыАдминистрированияКластера.АдресАгентаСервера, - ПараметрыАдминистрированияКластера.ПортАгентаСервера); + Попытка + COMСоединитель = COMСоединитель(); - Кластер = ПолучитьКластер( - СоединениеСАгентомСервера, - ПараметрыАдминистрированияКластера.ПортКластера, - ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера, - ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера); + СоединениеСАгентомСервера = СоединениеСАгентомСервера( + COMСоединитель, + ПараметрыАдминистрированияКластера.АдресАгентаСервера, + ПараметрыАдминистрированияКластера.ПортАгентаСервера); + + Кластер = ПолучитьКластер( + СоединениеСАгентомСервера, + ПараметрыАдминистрированияКластера.ПортКластера, + ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера, + ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера); + Исключение +#Если ВебКлиент ИЛИ МобильныйКлиент Тогда + ВызватьИсключение; +#Иначе + ВызватьИсключение КраткоеПредставлениеОшибки(ИнформацияОбОшибке()) + Символы.ПС + Символы.ПС + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В случае ошибки о несоответствии версии компоненты ""comcntr"" следует зарегистрировать ее на компьютере %1 + |для учетной записи ОС Windows, от имени которой выполняется 1С:Предприятие. Например: + |regsvr32.exe ""%2\comcntr.dll""'"), ИмяКомпьютера(), КаталогПрограммы()); +#КонецЕсли + КонецПопытки; КонецЕсли; diff --git a/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/Module.bsl b/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/Module.bsl index eea8ea584..bca9215a2 100644 --- a/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/Module.bsl @@ -1,4 +1,4 @@ -#Если Не ВебКлиент Тогда +#Если Не ВебКлиент И НЕ МобильныйКлиент Тогда #Область СлужебныйПрограммныйИнтерфейс diff --git a/SSL/src/CommonModules/АдресныйКлассификатор/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификатор/Module.bsl index 5a90e9403..def11e199 100644 --- a/SSL/src/CommonModules/АдресныйКлассификатор/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификатор/Module.bsl @@ -207,10 +207,10 @@ // // Параметры: // Адреса - Массив - проверяемые адреса. Содержит структуры с полями: -// * Адрес - ОбъектXDTO, Строка - Проверяемый адрес как объект XDTO Адрес -// (http://www.v8.1c.ru/ssl/contactinfo) или его -// XML-сериализация соответствующая структуре XDTO-пакета. -// * ФорматАдреса - Строка - Формат адреса. Варианты: +// * Адрес - Проверяемый адрес во внутреннем формате JSON или в XML, +// соответствующем XDTO пакету Адрес (http://www.v8.1c.ru/ssl/contactinfo). +// или его XML-сериализация соответствующая структуре XDTO-пакета. +// * ФорматАдреса - Строка - Устарело. Формат адреса. Варианты: // * ФИАС адрес проверяется по всем уровням адреса. // * КЛАДР, у адреса не проверяются на соответствие номера домов, округа, // внутригородские районы, доп. территории и элементы доп. территорий. @@ -221,7 +221,7 @@ // ** Ключ - Строка - Служебный идентификатор места ошибки - путь XPath в объекте XDTO. // ** Текст - Строка - Текст ошибки. // ** Подсказка - Строка - Текст возможного исправления ошибки. -// * Варианты - Массив - Содержит описание найденных вариантов в виде массива структур с полями: +// * Варианты - Массив - Устарело. Содержит описание найденных вариантов в виде массива структур с полями: // ** Идентификатор - УникальныйИдентификатор - Уникальный идентификационный код адресного объекта ФИАС. // ** Индекс - Число - Почтовый индекс адресного объекта. // ** КодКЛАДР - Число - Код КЛАДР ближайшего объекта. @@ -242,7 +242,22 @@ // Функция ПроверитьАдреса(Адреса) Экспорт - Результат = АдресныйКлассификаторСлужебный.РезультатПроверкиАдресовПоКлассификатору(Адреса); + АдресаСтруктурой = Новый Массив; + Для каждого ПроверяемыйАдрес Из Адреса Цикл + Если ТипЗнч(ПроверяемыйАдрес) = Тип("Структура") Тогда + Если ПроверяемыйАдрес.Свойство("Адрес") Тогда + Адрес = Новый Структура("Адрес", АдресныйКлассификаторСлужебный.КонтактнаяИнформацияВСтруктуруJSON(ПроверяемыйАдрес.Адрес, "")) + Иначе + Адрес = ""; + КонецЕсли; + Иначе + Адрес = Новый Структура("Адрес", АдресныйКлассификаторСлужебный.КонтактнаяИнформацияВСтруктуруJSON(ПроверяемыйАдрес, "")) + КонецЕсли; + + АдресаСтруктурой.Добавить(Адрес); + КонецЦикла; + + Результат = АдресныйКлассификаторСлужебный.РезультатПроверкиАдресовПоКлассификатору(АдресаСтруктурой); Возврат Результат.Данные; КонецФункции @@ -289,14 +304,16 @@ // Возвращает коды адресного объекта. // // Параметры: -// Адрес - Строка - XML соответствующий структуре XDTO-пакета Адрес. +// Адрес - Строка - Адрес во внутреннем формате JSON или XML соответствующий структуре XDTO-пакета Адрес. // Источник - Строка - Источник получения кодов адреса: // "Сервис1С" - коды будут получены через веб-сервис 1С предоставляющего сведения об адресах РФ в формате ФИАС; -// "ЗагруженныеДанные" - коды будут определены по загруженным данным адресного классификатора. -// Если параметр не указан, то источник данных определяется автоматически. +// "ЗагруженныеДанные" - сначала будет попытка определить коды по загруженным данным адресного классификатора, +// а затем если коды не были определены, то будут получены через веб-сервис 1С. +// Если параметр не указан, то определение кодов будет аналогично параметру ЗагруженныеДанные. // Возвращаемое значение: // Структура - Коды адреса. Если адрес не найден, то поля структуры содержат пустые значения. // * Идентификатор - Строка - Уникальный идентификационный код адресного объекта ФИАС. +// * ИдентификаторДома - Строка - Уникальный идентификационный код дома(здания) адресного объекта ФИАС. // * КодКЛАДР - Строка - Код классификатор адресов России (КЛАДР). // * КодИФНСФЛ - Строка - Код инспекции ФНС обслуживающего физических лиц. // * КодИФНСЮЛ - Строка - Код инспекции ФНС обслуживающего юридические лица. @@ -306,9 +323,30 @@ // * ОКТМО - Строка - Код общероссийского классификатора территорий муниципальных образований. // Функция КодыАдреса(Адрес, Источник = Неопределено) Экспорт - Возврат АдресныйКлассификаторСлужебный.КодыАдреса(Адрес, Источник); + + Коды = АдресныйКлассификаторСлужебный.КодыАдреса(Адрес, Источник); + Если ТипЗнч(Коды) = Тип("Структура") И Коды.Свойство("КодыАдреса") Тогда + Коды = Коды.КодыАдреса; + КонецЕсли; + Возврат Коды; + КонецФункции +// Возвращает соответствие полных наименований адресных объектов и их сокращения. +// +// Параметры: +// НаименованияАдресныхОбъектов - Массив - Полные наименования адресных объектов. Если передан пустой массив, +// то будут возвращен полный список наименований и сокращений. +// +// Возвращаемое значение: +// Соответствие - Соответствие найденных полных наименований адресных объектов их сокращениям. +// +Функция СокращенияАдресныхОбъектов(НаименованияАдресныхОбъектов) Экспорт + Возврат АдресныйКлассификаторСлужебный.СокращенияАдресныхОбъектов(НаименованияАдресныхОбъектов); +КонецФункции + +#Область УстаревшиеПроцедурыИФункции + // Возвращает идентификационный код дома и адресного объекта с помощью веб-сервиса фирмы 1С предоставляющего // сведения об адресах РФ в формате ФИАС. Для получения идентификаторов требуется подключение // к Интернет-поддержке пользователей и наличие постоянного соединения с интернетом, @@ -332,21 +370,6 @@ Возврат АдресныйКлассификаторСлужебный.ОпределитьИдентификаторыАдреса(Адрес); КонецФункции -// Возвращает соответствие полных наименований адресных объектов и их сокращения. -// -// Параметры: -// НаименованияАдресныхОбъектов - Массив - Полные наименования адресных объектов. Если передан пустой массив, -// то будут возвращен полный список наименований и сокращений. -// -// Возвращаемое значение: -// Соответствие - Соответствие найденных полных наименований адресных объектов их сокращениям. -// -Функция СокращенияАдресныхОбъектов(НаименованияАдресныхОбъектов) Экспорт - Возврат АдресныйКлассификаторСлужебный.СокращенияАдресныхОбъектов(НаименованияАдресныхОбъектов); -КонецФункции - -#Область УстаревшиеПроцедурыИФункции - // Устарела. Следует использовать АдресныйКлассификатор.АдресныйКлассификаторЗагружен. // Определяет наличие адресных сведений в адресном классификаторе. // При использовании веб-сервиса фирмы 1С предоставляющего через интернет сведения об diff --git a/SSL/src/CommonModules/АдресныйКлассификаторВМоделиСервисаСлужебный/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификаторВМоделиСервисаСлужебный/Module.bsl index 1f84091f5..ccaeff5f2 100644 --- a/SSL/src/CommonModules/АдресныйКлассификаторВМоделиСервисаСлужебный/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификаторВМоделиСервисаСлужебный/Module.bsl @@ -28,8 +28,6 @@ Типы.Добавить(МетаданныеРегистров.СлужебныеАдресныеСведения); Типы.Добавить(МетаданныеРегистров.УровниСокращенийАдресныхСведений); - Типы.Добавить(МетаданныеРегистров.УдалитьАдресныйКлассификатор); - КонецПроцедуры // Вызывается при получении уведомления о новых данных. @@ -42,7 +40,7 @@ // Процедура ДоступныНовыеДанные(Знач Дескриптор, Загружать) Экспорт - Если Дескриптор.DataType = "ФИАС" Тогда + Если Дескриптор.DataType = "ФИАС30" Тогда Загружать = ПроверитьНаличиеНовыхДанных(Дескриптор); @@ -60,7 +58,7 @@ // Процедура ОбработатьНовыеДанные(Знач Дескриптор, Знач ПутьКФайлу) Экспорт - Если Дескриптор.DataType = "ФИАС" Тогда + Если Дескриптор.DataType = "ФИАС30" Тогда ОбработатьФИАС(Дескриптор, ПутьКФайлу); КонецЕсли; @@ -93,8 +91,8 @@ Процедура ЗарегистрироватьОбработчикиПоставляемыхДанных(Знач Обработчики) Обработчик = Обработчики.Добавить(); - Обработчик.ВидДанных = "ФИАС"; - Обработчик.КодОбработчика = "ФИАС"; + Обработчик.ВидДанных = "ФИАС30"; + Обработчик.КодОбработчика = "ФИАС30"; Обработчик.Обработчик = АдресныйКлассификаторВМоделиСервисаСлужебный; КонецПроцедуры @@ -160,7 +158,7 @@ КонецЕсли; ПараметрыТекущихДанных = ОписаниеПоследнейЗагрузкиФИАС(ПараметрыНовыхДанных.Регион); - Если ПараметрыТекущихДанных.Версия = Неопределено + Если ПараметрыТекущихДанных.Версия = Неопределено ИЛИ ПараметрыНовыхДанных.Версия > ПараметрыТекущихДанных.Версия Тогда Возврат Истина; КонецЕсли; diff --git a/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl index 121ea2d2b..bd24eec81 100644 --- a/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl @@ -20,11 +20,8 @@ КонецЕсли; ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента(); - Если ПараметрыРаботыКлиента.АдресныйКлассификаторУстарел И Не ПараметрыФормы.Свойство("КодРегионаДляЗагрузки") Тогда - ИмяФормы = "РегистрСведений.АдресныеОбъекты.Форма.АктуализацияУстаревшегоКлассификатора"; - Иначе - ИмяФормы = "РегистрСведений.АдресныеОбъекты.Форма.ЗагрузкаАдресногоКлассификатора"; - КонецЕсли; + ИмяФормы = "РегистрСведений.АдресныеОбъекты.Форма.ЗагрузкаАдресногоКлассификатора"; + ОткрытьФорму(ИмяФормы, ПараметрыФормы, ПараметрыОкна.Источник, ПараметрыОкна.Уникальность, @@ -254,7 +251,7 @@ Для Каждого КлючЗначение Из Представления Цикл СообщениеОбОшибке = НСтр("ru = 'Для региона ""%1"" не найден файл данных ""%2""'") + Символы.ПС; - СообщениеОбОшибке = СообщениеОбОшибке + НСтр("ru = 'Актуальные адресные сведения можно загрузить по адресу http://its.1c.ru/download/fias'"); + СообщениеОбОшибке = СообщениеОбОшибке + НСтр("ru = 'Актуальные адресные сведения можно загрузить по адресу http://its.1c.ru/download/fias2'"); ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(ДополнительныеПараметры.Результат.Ошибки, ДополнительныеПараметры.ПолеОшибки, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, КлючЗначение.Значение, ДополнительныеПараметры.ОтсутствующиеФайлы[КлючЗначение.Ключ]), Неопределено); diff --git a/SSL/src/CommonModules/АдресныйКлассификаторКлиентСервер/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификаторКлиентСервер/Module.bsl index c3e3c248f..1a4a60ffe 100644 --- a/SSL/src/CommonModules/АдресныйКлассификаторКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификаторКлиентСервер/Module.bsl @@ -43,23 +43,6 @@ Возврат Результат; КонецФункции -// Набор уровней для запросов в режиме совместимости с КЛАДР. -// -// Возвращаемое значение: -// ФиксированныйМассив - набор числовых уровней. -// -Функция УровниКлассификатораКЛАДР() Экспорт - - Уровни = Новый Массив; - Уровни.Добавить(1); - Уровни.Добавить(3); - Уровни.Добавить(4); - Уровни.Добавить(6); - Уровни.Добавить(7); - - Возврат Новый ФиксированныйМассив(Уровни); -КонецФункции - // Набор уровней для запросов ФИАС. // // Возвращаемое значение: @@ -81,5 +64,84 @@ Возврат Новый ФиксированныйМассив(Уровни); КонецФункции +Функция ЭтоМуниципальныйАдрес(ТипАдреса) Экспорт + Возврат СтрСравнить(ТипАдреса, "Муниципальный") = 0; +КонецФункции + +Функция ИменаУровнейАдреса(ТипАдреса, ВключатьУлицу) Экспорт + Уровни = Новый Массив; + + Уровни.Добавить("Area"); + Если ТипАдреса = "ЕАЭС" Тогда + + Уровни.Добавить("District"); + Уровни.Добавить("City"); + Уровни.Добавить("Locality"); + + Иначе + + Если ЭтоМуниципальныйАдрес(ТипАдреса) Тогда + Уровни.Добавить("MunDistrict"); + Уровни.Добавить("Settlement"); + Иначе + Уровни.Добавить("District"); + Уровни.Добавить("City"); + КонецЕсли; + + Уровни.Добавить("CityDistrict"); + Уровни.Добавить("Locality"); + Уровни.Добавить("Territory"); + + Если ВключатьУлицу Тогда + Уровни.Добавить("Street"); + КонецЕсли; + КонецЕсли; + Возврат Уровни; +КонецФункции + +Функция АдминистративноТерриториальныйАдрес() Экспорт + Возврат "Административно-территориальный"; +КонецФункции + +Функция МуниципальныйАдрес() Экспорт + Возврат "Муниципальный"; +КонецФункции + +Функция ЗначениеСтроенияИлиПомещения(Тип, Значение) Экспорт + Возврат Новый Структура("Type, Number", Тип, Значение); +КонецФункции + +Функция ОсновнаяСтрана() Экспорт + Возврат "Россия"; +КонецФункции + +Функция ПреобразоватьТипАдресаВебСервиса(ТипАдреса) Экспорт + + Если СтрСравнить(ТипАдреса, "MUNICIPAL") = 0 Тогда + Возврат МуниципальныйАдрес(); + ИначеЕсли СтрСравнить(ТипАдреса, "TERRITORIAL") = 0 Тогда + Возврат АдминистративноТерриториальныйАдрес(); + КонецЕсли; + + Возврат ТипАдреса; + +КонецФункции + +Функция ТипАдресаДляВебСервиса(ТипАдреса) Экспорт + + Если СтрСравнить(ТипАдреса, МуниципальныйАдрес()) = 0 Тогда + Возврат "MUNICIPAL"; + ИначеЕсли СтрСравнить(ТипАдреса, АдминистративноТерриториальныйАдрес()) = 0 Тогда + Возврат "TERRITORIAL" + КонецЕсли; + + Возврат ТипАдреса; + +КонецФункции + +Функция ПрефиксВерсииЗапроса() Экспорт + Возврат "rest/v1/"; +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/АдресныйКлассификаторПовтИсп/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификаторПовтИсп/Module.bsl index 5090ede34..8ac8164d4 100644 --- a/SSL/src/CommonModules/АдресныйКлассификаторПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификаторПовтИсп/Module.bsl @@ -1,40 +1,128 @@ #Область СлужебныеПроцедурыИФункции -// WSПрокси для вызова веб-сервиса 1С. +// HTTPСоединение для вызова веб-сервиса 1С. // // Возвращаемое значение: -// WSПрокси - объект для вызовов сервиса. +// HTTPСоединение - объект для вызовов сервиса. // -Функция СервисКлассификатора1С() Экспорт +Функция СервисКлассификатора1С(ВремяОжидания = 120) Экспорт УстановитьПривилегированныйРежим(Истина); Авторизация = АдресныйКлассификаторСлужебный.ПараметрыАутентификацииНаСайте(); УстановитьПривилегированныйРежим(Ложь); Если Авторизация = Неопределено Тогда - Логин = Неопределено; - Пароль = Неопределено; + ИмяПользователя = Неопределено; + ПарольПользователя = Неопределено; Иначе - Логин = Авторизация.Логин; - Пароль = Авторизация.Пароль; + ИмяПользователя = Авторизация.Логин; + ПарольПользователя = Авторизация.Пароль; КонецЕсли; - ТекущийURLВебСервиса = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("АдресныйКлассификатор", "URLСервисаКлассификатора1С"); - Если ТекущийURLВебСервиса = Неопределено Тогда - ТекущийURLВебСервиса = "https://api.orgaddress.1c.ru/orgaddress/v1?wsdl"; + ТекущийURLВебСервиса = "api.orgaddress.1c.ru"; + Прокси = Неопределено; + Порт = Неопределено; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда + МодульПолучениеФайловИзИнтернетаКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернетаКлиентСервер"); + Прокси = МодульПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси("https"); + КонецЕсли; + + ЗащищенноеСоединение = ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение(); + ИспользоватьАутентификациюОС = Ложь; + + СохраненныйТекущийURLВебСервиса = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("АдресныйКлассификатор", "URLСервисаКлассификатора1С"); + Если ТипЗнч(СохраненныйТекущийURLВебСервиса) = Тип("Строка") И ЗначениеЗаполнено(СохраненныйТекущийURLВебСервиса) Тогда + URLВебСервисаПоЧастям = СтрРазделить(СохраненныйТекущийURLВебСервиса, ":", Ложь); + ТекущийURLВебСервиса = СокрЛП(URLВебСервисаПоЧастям[0]); + Если URLВебСервисаПоЧастям.Количество() > 1 Тогда + ТипЧисло = Новый ОписаниеТипов("Число"); + Порт = ТипЧисло.ПривестиЗначение(URLВебСервисаПоЧастям[1]); + ЗащищенноеСоединение = Неопределено; + Если Порт = 0 Тогда + Порт = 80; + КонецЕсли; + КонецЕсли; КонецЕсли; - ПараметрыПодключения = ОбщегоНазначения.ПараметрыПодключенияWSПрокси(); - ПараметрыПодключения.АдресWSDL = ТекущийURLВебСервиса; - ПараметрыПодключения.URIПространстваИмен = "http://www.v8.1c.ru/ssl/AddressSystem"; - ПараметрыПодключения.ИмяСервиса = "AddressSystem"; - ПараметрыПодключения.ИмяТочкиПодключения = "AddressSystemSoap12"; - ПараметрыПодключения.ИмяПользователя = Логин; - ПараметрыПодключения.Пароль = Пароль; - ПараметрыПодключения.Таймаут = 10; + Попытка + + Соединение = Новый HTTPСоединение( + ТекущийURLВебСервиса, + Порт, + ИмяПользователя, + ПарольПользователя, + Прокси, + ВремяОжидания, + ЗащищенноеСоединение, + ИспользоватьАутентификациюОС); + + Сервер = Соединение.Сервер; + Порт = Соединение.Порт; + + Исключение + + ШаблонЗапроса = "%1:%2%3ping"; + URL = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗапроса, ТекущийURLВебСервиса, Порт, + АдресныйКлассификаторКлиентСервер.ПрефиксВерсииЗапроса()); + РезультатДиагностики = ОбщегоНазначенияКлиентСервер.ДиагностикаСоединения(URL); + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось установить HTTP-соединение с сервером %1:%2 + |по причине: + |%3 + | + |Результат диагностики: + |%4'"), + Сервер, Формат(Порт, "ЧГ="), + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), + РезультатДиагностики.ОписаниеОшибки); + + ЗаписьЖурналаРегистрации(АдресныйКлассификаторКлиентСервер.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); + + КонецПопытки; - Возврат ОбщегоНазначения.СоздатьWSПрокси(ПараметрыПодключения); + Возврат Соединение; КонецФункции -#КонецОбласти \ No newline at end of file +Функция СведенияОЗагрузкеСубъектовРФ() Экспорт + + УстановитьПривилегированныйРежим(Истина); + Результат = Новый Соответствие; + + // Веб-сервис 1С + Если НЕ ОбщегоНазначения.РазделениеВключено() Тогда + СервисРезультат = АдресныйКлассификаторСлужебный.ВерсияПоставщикаДанных(); + КлассификаторДоступен = (СервисРезультат.Данные = Истина); + Иначе + КлассификаторДоступен = Ложь; + КонецЕсли; + Результат.Вставить("КлассификаторДоступен", КлассификаторДоступен); + + ИспользоватьЗагруженные = Ложь; + + СведенияОЗагрузкеСубъектовРФ = АдресныйКлассификаторСлужебный.СведенияОЗагрузкеСубъектовРФ(); + Для каждого СведенияОбСубъектеРФ Из СведенияОЗагрузкеСубъектовРФ Цикл + + Сведения = Новый Структура(); + Если КлассификаторДоступен Тогда + Сведения.Вставить("ИспользоватьЗагруженные", СведенияОбСубъектеРФ.Загружено И НЕ СведенияОбСубъектеРФ.Устарело); + Иначе + Сведения.Вставить("ИспользоватьЗагруженные", СведенияОбСубъектеРФ.Загружено); + КонецЕсли; + + Если НЕ ИспользоватьЗагруженные И Сведения.ИспользоватьЗагруженные Тогда + ИспользоватьЗагруженные = Истина; + КонецЕсли; + Сведения.Вставить("ДатаЗагрузки", СведенияОбСубъектеРФ.ДатаЗагрузки); + Результат.Вставить(СведенияОбСубъектеРФ.КодСубъектаРФ, Сведения); + + КонецЦикла; + + Результат.Вставить("ИспользоватьЗагруженные", ИспользоватьЗагруженные); + + Возврат Новый ФиксированноеСоответствие(Результат); + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/АдресныйКлассификаторСлужебный/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификаторСлужебный/Module.bsl index 1a8935266..5f8725cad 100644 --- a/SSL/src/CommonModules/АдресныйКлассификаторСлужебный/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификаторСлужебный/Module.bsl @@ -1,5 +1,16 @@ #Область СлужебныйПрограммныйИнтерфейс +// Возвращает информацию о доступности адресных сведений. +// +// Возвращаемое значение: +// ФиксированноеСоответствие - с полями: +// * КлассификаторДоступен - Булево - классификатор доступен через веб-сервис. +// * ИспользоватьЗагруженные - Булево - в программу загружен классификатор. +// +Функция СведенияОДоступностиАдресныхСведений() Экспорт + Возврат АдресныйКлассификаторПовтИсп.СведенияОЗагрузкеСубъектовРФ(); +КонецФункции + // Проверка доступности поставщика - локальной базы или сервиса. // // Возвращаемое значение: @@ -16,23 +27,15 @@ Результат = Новый Структура("Данные"); СтруктураОписанияОшибкиПоставщика(Результат); - Источник = ИсточникДанныхАдресногоКлассификатора(); - Если ПустаяСтрока(Источник) Тогда - // Локальное, доступно всегда - ЗаполнитьВерсиюПоставщикаДанныхВнутр(Результат) - - ИначеЕсли Источник = "Сервис1С" Тогда - // Веб сервис 1С, может быть на обслуживании. - Попытка - ЗаполнитьВерсиюПоставщикаДанныхСервис1С(Результат); - Исключение - СтруктураОписанияОшибкиПоставщика(Результат, ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, - Результат.ПодробноеПредставлениеОшибки); + // Веб сервис 1С, может быть на обслуживании. + Попытка + ЗаполнитьВерсиюПоставщикаДанныхСервис1С(Результат); + Исключение + СтруктураОписанияОшибкиПоставщика(Результат, ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, + Результат.ПодробноеПредставлениеОшибки); КонецПопытки; - КонецЕсли; - Возврат Результат; КонецФункции @@ -65,7 +68,8 @@ | |УПОРЯДОЧИТЬ ПО | ДатаВерсии"; - Запрос.УстановитьПараметр("ИдентификаторРегиона", ИдентификаторРегиона); + + Запрос.УстановитьПараметр("ИдентификаторРегиона", Новый УникальныйИдентификатор(ИдентификаторРегиона)); Иначе ТекстЗапроса = "ВЫБРАТЬ ПЕРВЫЕ 1 | ЕСТЬNULL(ЗагруженныеВерсииАдресныхСведений.ДатаВерсии, ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)) КАК ДатаЗагрузки @@ -135,28 +139,15 @@ // Функция АдресаПоПочтовомуИндексуКлассификатора(Индекс, ДополнительныеПараметры) Экспорт - Результат = Новый Структура("Данные, ОбщаяЧастьПредставления", ТаблицаДанныхДляВыбораПоПочтовомуИндексу() ); + Результат = Новый Структура("Данные, ОбщаяЧастьПредставления", ТаблицаДанныхДляВыбораПоПочтовомуИндексу()); СтруктураОписанияОшибкиПоставщика(Результат); - Вариант = ДополнительныеПараметры.ФорматАдреса; - Если Вариант = "КЛАДР" Тогда - Уровни = АдресныйКлассификаторКлиентСервер.УровниКлассификатораКЛАДР(); - ИначеЕсли Вариант = "ФИАС" Тогда - Уровни = АдресныйКлассификаторКлиентСервер.УровниКлассификатораФИАС(); - Иначе - Возврат Результат; - - КонецЕсли; + ЗаполнитьАдресаПоПочтовомуИндексуКлассификатораВнутр(Результат, Индекс, ДополнительныеПараметры); + + Если Результат.Данные.Количество() = 0 Тогда - Источник = ИсточникДанныхАдресногоКлассификатора(); - Если ПустаяСтрока(Источник) Тогда - // Локальное, всегда корректное. - ЗаполнитьАдресаПоПочтовомуИндексуКлассификатораВнутр(Результат, Индекс, Уровни, ДополнительныеПараметры); - - ИначеЕсли Источник = "Сервис1С" Тогда - // Веб сервис 1С, может быть на обслуживании. Попытка - ЗаполнитьАдресаПоПочтовомуИндексуКлассификатораСервис1С(Результат, Индекс, Уровни); + ЗаполнитьАдресаПоПочтовомуИндексуКлассификатораСервис1С(Результат, Индекс); Исключение СтруктураОписанияОшибкиПоставщика(Результат, ИнформацияОбОшибке()); ЗаписьЖурналаРегистрации( СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , Результат.ПодробноеПредставлениеОшибки); @@ -167,47 +158,6 @@ Возврат Результат; КонецФункции -// Ищет в адресном классификаторе по загруженным регионам код субъекта РФ по почтовому индексу. -// -// Параметры: -// ПочтовыйИндекс - Число - почтовый индекс. -// -// Возвращаемое значение: -// Число - Код субъекта РФ, где расположен этот почтовый индекс. Неопределенно - если код не найден. -// -Функция КодСубъектаРФПоПочтовомуИндексуВКлассификаторе(ПочтовыйИндекс) Экспорт - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | АдресныеОбъекты.КодСубъектаРФ КАК КодСубъектаРФ - |ИЗ - | РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты - |ГДЕ - | АдресныеОбъекты.ПочтовыйИндекс = &ПочтовыйИндекс - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ ПЕРВЫЕ 1 - | ДомаЗданияСтроения.КодСубъектаРФ - |ИЗ - | РегистрСведений.ДомаЗданияСтроения КАК ДомаЗданияСтроения - |ГДЕ - | ДомаЗданияСтроения.ПочтовыйИндекс = &ПочтовыйИндекс"; - - Запрос.УстановитьПараметр("ПочтовыйИндекс", ПочтовыйИндекс); - РезультатЗапроса = Запрос.Выполнить().Выбрать(); - - Пока РезультатЗапроса.Следующий() Цикл - Если ЗначениеЗаполнено(РезультатЗапроса.КодСубъектаРФ) Тогда; - Возврат РезультатЗапроса.КодСубъектаРФ; - КонецЕсли; - КонецЦикла; - - Возврат Неопределено; - -КонецФункции - // Определить регион по индексу. // // Параметры: @@ -248,6 +198,325 @@ Возврат Неопределено; КонецФункции +// Локальная проверка одного адреса. +// +Процедура УстановитьИдентификаторыАдреса(Адрес) Экспорт + + ЗагруженныеАдресныеСведения = АдресныйКлассификаторПовтИсп.СведенияОЗагрузкеСубъектовРФ(); + КодРегиона = АдресныйКлассификатор.КодРегионаПоНаименованию(СокрЛП(Адрес.Area + " " + Адрес.AreaType)); + + Если ТипЗнч(КодРегиона) = Тип("Число") Тогда + Если ЗагруженныеАдресныеСведения.Получить(КодРегиона) <> Неопределено + И ЗагруженныеАдресныеСведения.Получить(КодРегиона).ИспользоватьЗагруженные Тогда + УстановитьИдентификаторыАдресаПоЗагруженнымДанным(Адрес); + Иначе + УстановитьИдентификаторыАдресаЧерезВебСервис(Адрес); + Адрес.addressType = АдресныйКлассификаторКлиентСервер.ПреобразоватьТипАдресаВебСервиса(Адрес.addressType); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +Функция РаспознатьАдрес(ЧастиАдреса) Экспорт + + ОбработатьОбщепринятыеСокращения(ЧастиАдреса); + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | ДанныеАдреса.Уровень КАК Уровень, + | ДанныеАдреса.Позиция КАК Позиция, + | ДанныеАдреса.Значение КАК Значение, + | ДанныеАдреса.Наименование КАК Наименование, + | ДанныеАдреса.Сокращение КАК Сокращение + |ПОМЕСТИТЬ ДанныеАдреса + |ИЗ + | &ДанныеАдреса КАК ДанныеАдреса + |ГДЕ ДанныеАдреса.Уровень >= 0 + | + |ИНДЕКСИРОВАТЬ ПО + | Уровень, + | Позиция, + | Наименование, + | Сокращение + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 10 + | МАКСИМУМ(АдресныеОбъекты.Уровень) КАК Уровень, + | ДанныеАдреса.Позиция КАК Позиция, + | ДанныеАдреса.Наименование КАК Наименование, + | ДанныеАдреса.Сокращение КАК Сокращение + |ИЗ + | ДанныеАдреса КАК ДанныеАдреса + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты + | ПО (ДанныеАдреса.Наименование = АдресныеОбъекты.Наименование) + | И (ДанныеАдреса.Сокращение = АдресныеОбъекты.Сокращение) + |ГДЕ + | НЕ АдресныеОбъекты.Идентификатор ЕСТЬ NULL + | + |СГРУППИРОВАТЬ ПО + |ДанныеАдреса.Наименование, + | ДанныеАдреса.Сокращение, + | ДанныеАдреса.Позиция + | + |УПОРЯДОЧИТЬ ПО ДанныеАдреса.Позиция + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ДанныеАдреса.Позиция КАК Позиция, + | ДанныеАдреса.Значение КАК Значение, + | ДанныеАдреса.Наименование КАК Наименование, + | ДанныеАдреса.Сокращение КАК Сокращение + | + |ИЗ + | ДанныеАдреса КАК ДанныеАдреса + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты + | ПО ДанныеАдреса.Наименование = АдресныеОбъекты.Наименование + | И ДанныеАдреса.Сокращение = АдресныеОбъекты.Сокращение + |ГДЕ + | АдресныеОбъекты.Идентификатор ЕСТЬ NULL + | + |УПОРЯДОЧИТЬ ПО ДанныеАдреса.Позиция + |"; + + Запрос.УстановитьПараметр("ДанныеАдреса", ЧастиАдреса); + РезультатЗапроса = Запрос.ВыполнитьПакет(); + + СопоставленныеЧастиАдреса = РезультатЗапроса[1].Выгрузить(); + ДомаЗдания = РезультатЗапроса[2].Выгрузить(); + + // дома здания + КодыДомовВладенийИСтроений = КодыДомовВладенийИСтроений(); + Квартиры = Новый Массив; + Строения = Новый Массив; + + СведенияОДоме = СведенияОДоме(); + + Для каждого ЭлементАдреса Из ДомаЗдания Цикл + + Тип = ВРег(СокрЛП(СтрЗаменить(ЭлементАдреса.Наименование, "№", ""))); + Значение = ЭлементАдреса.Сокращение; + + Если КодыДомовВладенийИСтроений.Дома[Тип] <> Неопределено Тогда + СведенияОДоме.ТипДома = ТРег(ЭлементАдреса.Наименование); + СведенияОДоме.НомерДома = Значение; + ИначеЕсли КодыДомовВладенийИСтроений.Строения[Тип] <> Неопределено Тогда + Строения.Добавить(АдресныйКлассификаторКлиентСервер.ЗначениеСтроенияИлиПомещения(ТРег(ЭлементАдреса.Наименование), Значение)); + Если КодыДомовВладенийИСтроений.Строения[Тип] = -1 Тогда + СведенияОДоме.НомерКорпуса = Значение; + Иначе + СведенияОДоме.ТипСтроения = ТРег(ЭлементАдреса.Наименование); + СведенияОДоме.НомерСтроения = Значение; + КонецЕсли; + Иначе + Квартиры.Добавить(АдресныйКлассификаторКлиентСервер.ЗначениеСтроенияИлиПомещения(ТРег(ЭлементАдреса.Наименование), Значение)); + КонецЕсли; + + КонецЦикла; + + // Ищем по сопоставленным частям адреса + ШаблонВыбор = " ВЫБОР + | КОГДА НЕ АдресныеОбъекты%1.Наименование ЕСТЬ NULL + | ТОГДА "", "" + АдресныеОбъекты%1.Наименование + "" "" + АдресныеОбъекты%1.Сокращение + | ИНАЧЕ """" + | КОНЕЦ"; + + ШаблонСоединение = "ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты%1 + | ПО АдресныеОбъекты%1.%3РодительскийИдентификатор = АдресныеОбъекты%2.Идентификатор"; + + ШаблонГде = "АдресныеОбъекты%1.Наименование = &ЧастьАдреса%2 И АдресныеОбъекты%1.Сокращение = &ЧастьАдресаСокращение%2"; + + ЗапросСопоставитьЧастиАдреса = Новый Запрос(); + + Выбор = Новый Массив; + Соединение = Новый Массив; + СоединениеМуниципальный = Новый Массив; + Где = Новый Массив; + + Если СопоставленныеЧастиАдреса.Количество() = 0 Тогда + Возврат Неопределено; + КонецЕсли; + + Для Счетчик = 1 По СопоставленныеЧастиАдреса.Количество() Цикл + + Выбор.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонВыбор, Счетчик)); + Соединение.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСоединение, Счетчик, Счетчик - 1, "")); + СоединениеМуниципальный.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСоединение, Счетчик, Счетчик - 1, "Муниципальный")); + Где.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонГде, Счетчик -1, Счетчик)); + + ЗапросСопоставитьЧастиАдреса.УстановитьПараметр("ЧастьАдреса" + Счетчик, СопоставленныеЧастиАдреса[Счетчик - 1].Наименование); + ЗапросСопоставитьЧастиАдреса.УстановитьПараметр("ЧастьАдресаСокращение" + Счетчик, СопоставленныеЧастиАдреса[Счетчик - 1].Сокращение); + + КонецЦикла; + + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 10 + | АдресныеОбъекты0.Наименование + "" "" + АдресныеОбъекты0.Сокращение + %1 КАК Представление, + | АдресныеОбъекты%2.Идентификатор КАК Идентификатор, + | ИСТИНА КАК Муниципальный, + | АдресныеОбъекты0.ДополнительныеАдресныеСведения КАК ДополнительныеАдресныеСведения, + | ВЫБОР + | КОГДА АдресныеОбъекты0.Уровень < 10 + | ТОГДА АдресныеОбъекты0.Уровень * 10 + | ИНАЧЕ АдресныеОбъекты0.Уровень + | КОНЕЦ КАК Уровень + |ПОМЕСТИТЬ МуниципальныеАдреса + |ИЗ + | РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты0 + | %3 + |ГДЕ + | %5 + | + |УПОРЯДОЧИТЬ ПО + | АдресныеОбъекты0.Уровень + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ ПЕРВЫЕ 10 + | АдресныеОбъекты0.Наименование + "" "" + АдресныеОбъекты0.Сокращение + %1 КАК Представление, + | АдресныеОбъекты%2.Идентификатор КАК Идентификатор, + | ЛОЖЬ КАК Муниципальный, + | АдресныеОбъекты0.ДополнительныеАдресныеСведения КАК ДополнительныеАдресныеСведения, + | ВЫБОР + | КОГДА АдресныеОбъекты0.Уровень < 10 + | ТОГДА АдресныеОбъекты0.Уровень * 10 + | ИНАЧЕ АдресныеОбъекты0.Уровень + | КОНЕЦ КАК Уровень + |ПОМЕСТИТЬ АдминистративныеАдреса + |ИЗ + | РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты0 + | %4 + |ГДЕ + | %5 + | + |УПОРЯДОЧИТЬ ПО + | АдресныеОбъекты0.Уровень + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ЕСТЬNULL(МуниципальныеАдреса.Представление, """") КАК Представление, + | ЕСТЬNULL(МуниципальныеАдреса.Идентификатор, """") КАК Идентификатор, + | МуниципальныеАдреса.Муниципальный КАК Муниципальный, + | МуниципальныеАдреса.ДополнительныеАдресныеСведения КАК ДополнительныеАдресныеСведения, + | ЕСТЬNULL(ДополнительныеСведения.ПочтовыйИндекс, """") КАК ПочтовыйИндекс, + | МуниципальныеАдреса.Уровень КАК Уровень + |ИЗ + | МуниципальныеАдреса КАК МуниципальныеАдреса + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеАдресныеСведения КАК ДополнительныеСведения + | ПО МуниципальныеАдреса.ДополнительныеАдресныеСведения = ДополнительныеСведения.Идентификатор + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ЕСТЬNULL(АдминистративныеАдреса.Представление, """"), + | ЕСТЬNULL(АдминистративныеАдреса.Идентификатор, """"), + | АдминистративныеАдреса.Муниципальный, + | АдминистративныеАдреса.ДополнительныеАдресныеСведения, + | ЕСТЬNULL(ДополнительныеСведения.ПочтовыйИндекс, """"), + | АдминистративныеАдреса.Уровень + |ИЗ + | АдминистративныеАдреса КАК АдминистративныеАдреса + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеАдресныеСведения КАК ДополнительныеСведения + | ПО АдминистративныеАдреса.ДополнительныеАдресныеСведения = ДополнительныеСведения.Идентификатор + | + |УПОРЯДОЧИТЬ ПО + | Уровень"; + + + ТекстЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстЗапроса, СтрСоединить(Выбор, " + "), + СопоставленныеЧастиАдреса.Количество() - 1, СтрСоединить(СоединениеМуниципальный, Символы.ПС), СтрСоединить(Соединение, Символы.ПС), СтрСоединить(Где, " И ")); + + ЗапросСопоставитьЧастиАдреса.Текст = ТекстЗапроса; + + НайденныеАдреса = ЗапросСопоставитьЧастиАдреса.Выполнить(); + + Если НайденныеАдреса.Пустой() Тогда + // Не удалось распознать адрес. + Возврат Неопределено; + + КонецЕсли; + + СтрокаИндекс = ЧастиАдреса.Найти(-1, "Уровень"); + Индекс = ?(СтрокаИндекс <> Неопределено, СтрокаИндекс.Значение, Неопределено); + + Сведения = Новый Структура("ЗагруженныеДанные", Истина); + ВариантыАдресов = НайденныеАдреса.Выгрузить(); + Если ВариантыАдресов.Количество() = 1 Или Индекс = Неопределено Тогда + + Сведения.Вставить("Идентификатор", ВариантыАдресов[0].Идентификатор); + АдресДанные = АктуальныеАдресныеСведения(Сведения); + Муниципальный = ВариантыАдресов[0].Муниципальный; + + Иначе + + Для каждого ВариантАдреса Из ВариантыАдресов Цикл + Сведения.Вставить("Идентификатор", ВариантАдреса.Идентификатор); + Муниципальный = ВариантАдреса.Муниципальный; + + АдресДанные = АктуальныеАдресныеСведения(Сведения); + Если Не АдресДанные.Отказ + И ТипЗнч(АдресДанные.Данные) = Тип("Структура") + И АдресДанные.Данные.Свойство("ZIPCode") + И СтрСравнить(АдресДанные.Данные.ZIPCode, Индекс) = 0 Тогда + Прервать; + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + Адрес = СформироватьАдресПоДаннымИзКлассификатора(АдресДанные.Данные); + Адрес.AddressType = ?(Муниципальный, + АдресныйКлассификаторКлиентСервер.МуниципальныйАдрес(), + АдресныйКлассификаторКлиентСервер.АдминистративноТерриториальныйАдрес()); + + ИдентификаторДомаИДополнительныеСведения = КодыПоИдентификаторуАдресногоОбъекта(Адрес.ID, СведенияОДоме); + + Если ИдентификаторДомаИДополнительныеСведения <> Неопределено Тогда + Адрес.HouseID = ИдентификаторДомаИДополнительныеСведения.ИдентификаторДома; + Адрес.HouseType = ТРег(СведенияОДоме.ТипДома); + Адрес.HouseNumber = ТРег(СведенияОДоме.НомерДома); + + Адрес.Buildings = Строения; + Адрес.Apartments = Квартиры; + + Адрес.OKTMO = Формат(ИдентификаторДомаИДополнительныеСведения.ОКТМО, "ЧГ=0"); + Адрес.OKATO = Формат(ИдентификаторДомаИДополнительныеСведения.ОКАТО, "ЧГ=0"); + + Адрес.IFNSFLCode = ИдентификаторДомаИДополнительныеСведения.КодИФНСФЛ; + Адрес.IFNSULCode = ИдентификаторДомаИДополнительныеСведения.КодИФНСЮЛ; + Адрес.IFNSFLAreaCode = ИдентификаторДомаИДополнительныеСведения.КодУчасткаИФНСФЛ; + Адрес.IFNSULAreaCode = ИдентификаторДомаИДополнительныеСведения.КодУчасткаИФНСЮЛ; + + Иначе + + Помещения = КодыПомещений(); + + // Дома не были найдены в классификаторе. Воссоздаем их по названиям строений. + Для каждого ЭлементАдреса Из ЧастиАдреса Цикл + + // Проверка на квартиру или здание. + Тип =СокрЛП(СтрЗаменить(ЭлементАдреса.Наименование, "№", "")); + Если КодыДомовВладенийИСтроений.Дома[ВРег(Тип)] <> Неопределено Тогда + Адрес.HouseType = ТРег(СведенияОДоме.ТипДома); + Адрес.HouseNumber = СокрЛП(СтрЗаменить(ЭлементАдреса.Сокращение, "№", "")); + ИначеЕсли КодыДомовВладенийИСтроений.Строения[ВРег(Тип)] <> Неопределено Тогда + Адрес.Buildings.Добавить(АдресныйКлассификаторКлиентСервер.ЗначениеСтроенияИлиПомещения(ТРег(Тип), СокрЛП(СтрЗаменить(ЭлементАдреса.Сокращение, "№", "")))); + ИначеЕсли Помещения[ВРег(Тип)] <> Неопределено Тогда + Адрес.Apartments.Добавить(АдресныйКлассификаторКлиентСервер.ЗначениеСтроенияИлиПомещения(ТРег(Тип), СокрЛП(СтрЗаменить(ЭлементАдреса.Сокращение, "№", "")))); + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + Возврат Адрес; + +КонецФункции + // Возвращает данные классификатора поля выбора по уровню. // // Параметры: @@ -277,22 +546,51 @@ // ** Представление - Строка - Представление варианта. // ** РегионЗагружен - Булево - Имеет смысл только для регионов. Истина, если есть записи. // -Функция АдресаДляИнтерактивногоВыбора(Родитель, Уровень, ДополнительныеПараметры) Экспорт +Функция АдресаДляИнтерактивногоВыбора(Родитель, Уровень, ТипАдреса, ДополнительныеПараметры) Экспорт - Результат = Новый Структура("Данные, Заголовок", ТаблицаДанныхДляИнтерактивногоВыбора() ); + Результат = Новый Структура("Данные, Заголовок", ТаблицаДанныхДляИнтерактивногоВыбора()); СтруктураОписанияОшибкиПоставщика(Результат); - - Уровни = АдресныйКлассификаторКлиентСервер.УровниКлассификатораФИАС(); - Источник = ИсточникДанныхАдресногоКлассификатора(); - Если ПустаяСтрока(Источник) Тогда - // Локальное, всегда корректное. - ЗаполнитьАдресаДляИнтерактивногоВыбораВнутр(Результат, Уровни, Родитель, Уровень, ДополнительныеПараметры); + ЗагруженныеАдресныеСведения = АдресныйКлассификаторПовтИсп.СведенияОЗагрузкеСубъектовРФ(); + + Если ЗагруженныеАдресныеСведения["ИспользоватьЗагруженные"] Тогда + ЗаполнитьАдресаДляИнтерактивногоВыбораВнутр(Результат, Родитель, Уровень, ТипАдреса, ДополнительныеПараметры); + КонецЕсли; - ИначеЕсли Источник = "Сервис1С" Тогда + Если Результат.Данные.Количество() = 0 И ЗагруженныеАдресныеСведения["КлассификаторДоступен"] = Истина Тогда + // Веб сервис 1С, может быть на обслуживании. Попытка - ЗаполнитьАдресаДляИнтерактивногоВыбораСервис1С(Результат, Уровни, Родитель, Уровень, ДополнительныеПараметры); + + Если ДополнительныеПараметры.Свойство("КоличествоЗаписей") Тогда + КоличествоЗаписей = Формат(ДополнительныеПараметры.КоличествоЗаписей,"ЧГ=0"); + Иначе + КоличествоЗаписей = "20"; + КонецЕсли; + + Если Уровень > 1 Тогда + ШаблонаЗапроса = "select?level=%1&base=0&limit=%2&parentId=%3"; + Иначе + ШаблонаЗапроса = "select?level=%1&base=0&limit=%2"; + КонецЕсли; + + ТекстGETЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонаЗапроса, + Строка(Уровень), КоличествоЗаписей, Строка(Родитель)); + + РезультатВебСервис = ВыполнитьЗапросЧерезВебСервис(ТекстGETЗапроса); + + Если РезультатВебСервис.Отказ Тогда + Возврат Результат; + КонецЕсли; + + Для каждого СтрокаРезультатаВебСервис Из РезультатВебСервис.Данные Цикл + НоваяСтрока = Результат.Данные.Добавить(); + НоваяСтрока.Идентификатор = СтрокаРезультатаВебСервис.id; + НоваяСтрока.Представление = СтрокаРезультатаВебСервис.value; + НоваяСтрока.РегионЗагружен = Ложь; + НоваяСтрока.Неактуален = Ложь; + КонецЦикла; + Исключение СтруктураОписанияОшибкиПоставщика(Результат, ИнформацияОбОшибке()); ЗаписьЖурналаРегистрации( СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , Результат.ПодробноеПредставлениеОшибки); @@ -314,17 +612,106 @@ Результат.Заголовок = НСтр("ru = 'Выберите населенный пункт'"); ИначеЕсли Уровень = 7 Тогда Результат.Заголовок = НСтр("ru = 'Выберите улицу'"); - ИначеЕсли Уровень = 90 Тогда - Результат.Заголовок = НСтр("ru = 'Выберите дополнительный элемент'"); - ИначеЕсли Уровень = 91 Тогда - Результат.Заголовок = НСтр("ru = 'Выберите подчиненный элемент'"); - ИначеЕсли Уровень = -1 Тогда - Результат.Заголовок = НСтр("ru = 'Выберите ориентир'"); + ИначеЕсли Уровень = 65 Тогда + Результат.Заголовок = НСтр("ru = 'Выберите территорию'"); + ИначеЕсли Уровень = 41 Тогда + Результат.Заголовок = НСтр("ru = 'Выберите поселение'"); + ИначеЕсли Уровень = 31 Тогда + Результат.Заголовок = НСтр("ru = 'Выберите муниципальный район'"); КонецЕсли; Возврат Результат; КонецФункции +// Возвращает данные классификатора поля выбора по уровню. +// +// Параметры: +// Родитель - УникальныйИдентификатор - Родительский объект. +// Уровень - Число - Требуемый уровень данных. 1-7, 90, 91 - адресные объекты, -1 +// - ориентиры. +// ДополнительныеПараметры - Структура - Описание настройке поиска. Поля: +// * ФорматАдреса - Строка - тип используемого классификатора. +// +// * РазмерПорции - Число - Необязательный размер порции возвращаемых данных. Если не указано +// или 0, то возвращает все элементы. +// * ПерваяЗапись - УникальныйИдентификатор - Элемент, с которого начинается порция данных. Сам элемент не +// входит в выборку. +// * Сортировка - Строка - Направление сортировки для порции. +// +// Возвращаемое значение: +// Структура - найденные варианты. Содержит поля: +// * Отказ - Булево - Поставщик не доступен. +// * ПодробноеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ +// = Ложь. +// * КраткоеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ +// = Ложь. +// * Заголовок - Строка - Строка с предложением выбора. +// * Данные - ТаблицаЗначений - Содержит данные для выбора. Колонки: +// ** Неактуален - Булево - Флаг неактуальности строки данных. +// ** Идентификатор - УникальныйИдентификатор - Код классификатора для поиска вариантов по индексу. +// ** Представление - Строка - Представление варианта. +// ** РегионЗагружен - Булево - Имеет смысл только для регионов. Истина, если есть записи. +// +Функция АдресныеОбъектыУровня(Родитель, Уровень, ТипАдреса, Знач СтрокаПоиска = "") Экспорт + + ДанныеВыбора = Новый Структура("Данные, Отказ", Новый СписокЗначений, Ложь); + + Результат = Новый Структура("Данные", ТаблицаДанныхДляИнтерактивногоВыбора()); + СтруктураОписанияОшибкиПоставщика(Результат); + + ЗагруженныеАдресныеСведения = АдресныйКлассификаторПовтИсп.СведенияОЗагрузкеСубъектовРФ(); + + Если ЗначениеЗаполнено(СтрокаПоиска) Тогда + ПреобразоватьВводАдреса(СтрокаПоиска); + КонецЕсли; + + Если ЗагруженныеАдресныеСведения["ИспользоватьЗагруженные"] Тогда + ДополнительныеПараметры = Новый Структура("СтрокаПоиска", СтрокаПоиска); + ЗаполнитьАдресаДляИнтерактивногоВыбораВнутр(Результат, Родитель, Уровень, ТипАдреса, ДополнительныеПараметры); + + Для каждого СведенияОбАдресе Из Результат.Данные Цикл + ДанныеВыбора.Данные.Добавить(СведенияОбАдресе.Идентификатор, СведенияОбАдресе.Представление); + КонецЦикла; + + КонецЕсли; + + Если Результат.Данные.Количество() = 0 И ЗагруженныеАдресныеСведения["КлассификаторДоступен"] = Истина Тогда + + // Веб сервис 1С, может быть на обслуживании. + Попытка + + СтрокаЗапроса = "select?level=%1&base=0&limit=20"; + + Если ЗначениеЗаполнено(Родитель) Тогда + СтрокаЗапроса = СтрокаЗапроса + "&parentId=" + СокрЛП(Родитель); + КонецЕсли; + + Если ЗначениеЗаполнено(СтрокаПоиска) Тогда + СтрокаЗапроса = СтрокаЗапроса + "&text=" + СокрЛП(СтрокаПоиска); + КонецЕсли; + + ТекстGETЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаЗапроса, Строка(Уровень)); + РезультатВебСервис = ВыполнитьЗапросЧерезВебСервис(ТекстGETЗапроса); + + Для каждого СтрокаДанных Из РезультатВебСервис.Данные Цикл + ДанныеВыбора.Данные.Добавить(СтрокаДанных.id, СтрокаДанных.value); + КонецЦикла; + + Если РезультатВебСервис.Отказ Тогда + ДанныеВыбора.Отказ = Истина; + Возврат ДанныеВыбора; + КонецЕсли; + + Исключение + СтруктураОписанияОшибкиПоставщика(Результат, ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации( СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , Результат.ПодробноеПредставлениеОшибки); + КонецПопытки; + + КонецЕсли; + + Возврат ДанныеВыбора; +КонецФункции + // Возвращает список для автоподбора элемента адреса, поиск по подобию. // // Параметры: @@ -333,7 +720,8 @@ // Уровни - Массив, ФиксированныйМассив - Набор требуемых уровней данных. 1-7, 90, 91 - адресные // объекты, -1 - ориентиры. // ДополнительныеПараметры - Структура - Описание настройке поиска. Поля: -// * ФорматАдреса - Строка - Тип используемого классификатора. +// * ТолькоВебСервис - Булево - Автоподбор только через веб-сервис. +// * ТипАдреса - Строка - Тип используемого классификатора. // // Возвращаемое значение: // Структура - найденные варианты. Содержит поля: @@ -342,51 +730,36 @@ // = Ложь. // * КраткоеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ // = Ложь. -// * Данные - ТаблицаЗначений - Содержит данные для выбора. Колонки: -// ** Неактуален - Булево - Флаг неактуальности строки данных. -// ** Идентификатор - УникальныйИдентификатор - Код классификатора для поиска вариантов по индексу. +// * Данные - СписокЗначение - Содержит данные для выбора. Колонки: // ** Представление - Строка - Представление варианта. -// ** РегионЗагружен - Булево - Имеет смысл только для регионов. Истина, если есть записи. +// ** Значение - Структура - с полями Идентификатор, Муниципальный, ЗагруженныеДанные. // -Функция ВариантыАвтоподбора(Текст, Родитель, Уровни, ДополнительныеПараметры) Экспорт +Функция ВариантыАвтоподбора(Текст, ДополнительныеПараметры) Экспорт - Результат = Новый Структура("Данные", ТаблицаДанныхАвтоподбора() ); - СтруктураОписанияОшибкиПоставщика(Результат); + Результат = Новый СписокЗначений(); - Вариант = ДополнительныеПараметры.ФорматАдреса; - Если Вариант = "КЛАДР" Тогда - ОграничениеУровней = АдресныйКлассификаторКлиентСервер.УровниКлассификатораКЛАДР(); - - ИначеЕсли Вариант = "ФИАС" Тогда - ОграничениеУровней = АдресныйКлассификаторКлиентСервер.УровниКлассификатораФИАС(); - - Иначе - Возврат Результат; - + ЗагруженныеАдресныеСведения = АдресныйКлассификаторПовтИсп.СведенияОЗагрузкеСубъектовРФ(); + Если ЗагруженныеАдресныеСведения["ИспользоватьЗагруженные"] Тогда + ЗаполнитьСписокАвтоподбораЧастиАдресаВнутр(Результат, Текст, ДополнительныеПараметры); + Если Результат.Количество() > 19 Тогда + Возврат Результат; + КонецЕсли; КонецЕсли; - // Ограничение поиска - УровниЗапроса = Новый Массив; - Для Каждого Уровень Из Уровни Цикл - Если ОграничениеУровней.Найти(Уровень) <> Неопределено Тогда - УровниЗапроса.Добавить(Уровень); + // Веб сервис 1С + Если ЗагруженныеАдресныеСведения["КлассификаторДоступен"] = Истина Тогда + Количество = 20 - Результат.Количество(); + + Родитель = Неопределено; + Если ДополнительныеПараметры.Свойство("Уровень") Тогда + + Если ДополнительныеПараметры.Уровень > 1 Тогда + Родитель = ДополнительныеПараметры.Идентификатор; + КонецЕсли; + КонецЕсли; - КонецЦикла; - - Источник = ИсточникДанныхАдресногоКлассификатора(); - Если ПустаяСтрока(Источник) Тогда - // Локальное, всегда корректное. - ЗаполнитьСписокАвтоподбораЧастиАдресаВнутр(Результат, Текст, Родитель, УровниЗапроса, ДополнительныеПараметры); - - ИначеЕсли Источник = "Сервис1С" Тогда - // Веб сервис 1С, может быть на обслуживании. - Попытка - ЗаполнитьСписокАвтоподбораЧастиАдресаСервис1С(Результат, Текст, Родитель, УровниЗапроса, ДополнительныеПараметры); - Исключение - СтруктураОписанияОшибкиПоставщика(Результат, ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации( СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , Результат.ПодробноеПредставлениеОшибки); - КонецПопытки; + ЗаполнитьСписокАвтоподбораЧастиАдресаСервис1С(Результат, Текст, Родитель, Количество, ДополнительныеПараметры); КонецЕсли; Возврат Результат; @@ -401,50 +774,65 @@ // Возвращаемое значение: // ТаблицаЗначений - найденные варианты. // -Функция СписокДомов(ИдентификаторАдресногоОбъекта, Знач СтрокаПоиска) Экспорт +Функция СписокДомов(ИдентификаторАдресногоОбъекта, Знач СтрокаПоиска, ПорцияПриПоиске = 20) Экспорт - ВариантыДомов = Новый ТаблицаЗначений; - ВариантыДомов.Колонки.Добавить("ДомЧислом", ОбщегоНазначения.ОписаниеТипаЧисло(5)); - ВариантыДомов.Колонки.Добавить("Дом", ОбщегоНазначения.ОписаниеТипаСтрока(20)); - ВариантыДомов.Колонки.Добавить("Корпус", ОбщегоНазначения.ОписаниеТипаСтрока(20)); - ВариантыДомов.Колонки.Добавить("Строение", ОбщегоНазначения.ОписаниеТипаСтрока(20)); - ВариантыДомов.Колонки.Добавить("Значение"); - ВариантыДомов.Колонки.Добавить("Представление"); + ВариантыДомов = КонструкторСпискаДомов(); Если СтрЗаканчиваетсяНа(СтрокаПоиска, "%") Тогда ТочноеСовпадение = Ложь; - СтрокаПоиска = Лев(СтрокаПоиска, СтрДлина(СтрокаПоиска) - 1); + СтрокаПоиска = Лев(СтрокаПоиска, СтрДлина(СтрокаПоиска) - 1); Иначе ТочноеСовпадение = Истина; КонецЕсли; - Источник = ИсточникДанныхАдресногоКлассификатора(); - Если ПустаяСтрока(Источник) Тогда - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ДомаЗданияСтроения.Строения КАК Строения - |ИЗ - | РегистрСведений.ДомаЗданияСтроения КАК ДомаЗданияСтроения - |ГДЕ - | ДомаЗданияСтроения.АдресныйОбъект = &АдресныйОбъект"; + ЗагруженныеАдресныеСведения = АдресныйКлассификаторПовтИсп.СведенияОЗагрузкеСубъектовРФ(); + Если ЗагруженныеАдресныеСведения["ИспользоватьЗагруженные"] Тогда - Запрос.УстановитьПараметр("АдресныйОбъект", ИдентификаторАдресногоОбъекта); - Запись = Запрос.Выполнить().Выбрать(); + СписокДомовИзЗагруженныхСведений(ВариантыДомов, ИдентификаторАдресногоОбъекта, СтрокаПоиска, ТочноеСовпадение); - Пока Запись.Следующий() Цикл - Если ЗначениеЗаполнено(Запись.Строения) Тогда - Описание = Запись.Строения.Получить(); - Если Не ПустаяСтрока(Описание) И СтрДлина(Описание) > 24 Тогда - Описание = Сред(Описание, 25); - Если Не ПустаяСтрока(Описание) Тогда - ИзвлечьСписокДомов(Описание, СтрокаПоиска, ВариантыДомов, ТочноеСовпадение); + КонецЕсли; + + Если ВариантыДомов.Количество() = 0 И ЗагруженныеАдресныеСведения["КлассификаторДоступен"] = Истина Тогда + + ТекстGETЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("selectHouse?parentId=%1&limit=%2", + Строка(ИдентификаторАдресногоОбъекта), Формат(ПорцияПриПоиске, "ЧГ=0")); + Если ЗначениеЗаполнено(СтрокаПоиска) Тогда + ТекстGETЗапроса = ТекстGETЗапроса + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("&text=%1", + СокрЛП(СтрокаПоиска)); + КонецЕсли; + + РезультатВебСервис = ВыполнитьЗапросЧерезВебСервис(ТекстGETЗапроса); + + Если РезультатВебСервис.Отказ Тогда + Возврат ВариантыДомов; + КонецЕсли; + + НаименованиеЗданийИСтроений = НаименованиеВладенийИСтроений(); + + Для каждого СведенияОДоме Из РезультатВебСервис.Данные Цикл + ДомЧислом = Формат(НомерДомаЧислом(СведенияОДоме.number), "ЧЦ=4; ЧН=; ЧВН=; ЧГ=0; ЧФ=1Ч"); + + ОписаниеДома = ОписаниеДома(); + Если СведенияОДоме.buildings.Количество() > 0 Тогда + Для каждого СведенияОСтроении Из СведенияОДоме.buildings Цикл + Если СтрСравнить(СведенияОСтроении.Type, "Корпус") = 0 Тогда + ОписаниеДома.Корпус= СведенияОСтроении.Number; + Иначе + ОписаниеДома.НазваниеСтроения = СведенияОСтроении.Type; + ОписаниеДома.Строение = СведенияОСтроении.Number; КонецЕсли; - КонецЕсли; + КонецЦикла; КонецЕсли; + + ОписаниеДома.Идентификатор = СведенияОДоме.id; + ОписаниеДома.Дом = СведенияОДоме.number; + ОписаниеДома.НазваниеВладения = СведенияОДоме.type; + ОписаниеДома.Индекс = Формат(СведенияОДоме.ZipCode, "ЧГ=0"); + ОписаниеДома.ОКТМО = Формат(СведенияОДоме.oktmo, "ЧГ=0"); + + ДобавитьИнформациюОДоме(ВариантыДомов, ОписаниеДома, НаименованиеЗданийИСтроений, СтрокаПоиска); КонецЦикла; - ИначеЕсли Источник = "Сервис1С" Тогда - ИзвлечьСписокДомовСервис1С(ИдентификаторАдресногоОбъекта, СтрокаПоиска, ВариантыДомов); + КонецЕсли; ВариантыДомов.Индексы.Добавить("ДомЧислом, Дом, Корпус, Строение"); @@ -468,8 +856,9 @@ Возврат Ложь; КонецЕсли; - Источник = ИсточникДанныхАдресногоКлассификатора(); - Если ПустаяСтрока(Источник) Тогда + ЗагруженныеАдресныеСведения = АдресныйКлассификаторПовтИсп.СведенияОЗагрузкеСубъектовРФ(); + Если ЗагруженныеАдресныеСведения["ИспользоватьЗагруженные"] Тогда + Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 @@ -480,32 +869,34 @@ | ДомаЗданияСтроения.АдресныйОбъект = &АдресныйОбъект"; Запрос.УстановитьПараметр("АдресныйОбъект", ИдентификаторАдресногоОбъекта); - Запись = Запрос.Выполнить().Выбрать(); - Пока Запись.Следующий() Цикл - Если ЗначениеЗаполнено(Запись.Строения) Тогда - Описание = Запись.Строения.Получить(); - Если Не ПустаяСтрока(Описание) Тогда - Описание = Сред(Описание, 25); - Если Не ПустаяСтрока(Описание) Тогда - Возврат Истина; - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЦикла; - ИначеЕсли Источник = "Сервис1С" Тогда - Сервис = АдресныйКлассификаторПовтИсп.СервисКлассификатора1С(); - КодЯзыка = ТекущийКодЛокализации(); - Порция = Сервис.Autocomplete(ИдентификаторАдресногоОбъекта, 0, НСтр("ru = 'ДОМ='"), 1, КодЯзыка, Метаданные.Имя); - Список = Порция.ПолучитьСписок("Item"); - Возврат Список.Количество() > 0; + ДомаНайдены = НЕ Запрос.Выполнить().Пустой(); + Если ДомаНайдены Тогда + Возврат Истина; + КонецЕсли; + + КонецЕсли; + + Если ЗагруженныеАдресныеСведения["КлассификаторДоступен"] = Истина Тогда + + ТекстGETЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("selectHouse?&parentId=%1&limit=1", + Строка(ИдентификаторАдресногоОбъекта)); + + РезультатВебСервис = ВыполнитьЗапросЧерезВебСервис(ТекстGETЗапроса); + + Если РезультатВебСервис.Отказ Тогда + Возврат Ложь; + КонецЕсли; + + Возврат РезультатВебСервис.Данные.Количество() > 0; + КонецЕсли; Возврат Ложь; КонецФункции -// Возвращает актуальные данные адресного объекта или ориентира с точностью до подчиненного (без домов). +// Возвращает актуальные данные адресного объекта или ориентира с точностью доя подчиненного (без домов). // // Параметры: // Идентификатор - УникальныйИдентификатор - Идентификатор адресного объекта или ориентира. @@ -517,59 +908,40 @@ // = Ложь. // * КраткоеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ // = Ложь. -// * Данные - ОбъектXDTO - Адрес, см (http://www.v8.1c.ru/ssl/AddressSystem) АдресРФ. +// * Данные - Структура - Адрес. // -Функция АктуальныеАдресныеСведения(Идентификатор) Экспорт +Функция АктуальныеАдресныеСведения(СведенияОбАдресномОбъекте) Экспорт - Данные = Неопределено; + Данные = Новый Структура; Результат = Новый Структура("Данные", Данные); СтруктураОписанияОшибкиПоставщика(Результат); - Источник = ИсточникДанныхАдресногоКлассификатора(); - Если ПустаяСтрока(Источник) Тогда - // Локальное, всегда корректное. - ЗаполнитьАктуальныеАдресныеСведенияВнутр(Результат, Идентификатор); - - ИначеЕсли Источник = "Сервис1С" Тогда - // Веб сервис 1С, может быть на обслуживании. - Попытка - ЗаполнитьАктуальныеАдресныеСведенияСервис1С(Результат, Идентификатор); - Исключение - СтруктураОписанияОшибкиПоставщика(Результат, ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации( СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , Результат.ПодробноеПредставлениеОшибки); - КонецПопытки; + Если СведенияОбАдресномОбъекте.Свойство("ЗагруженныеДанные") Тогда + ЗагруженныеДанные = СведенияОбАдресномОбъекте.ЗагруженныеДанные; + Иначе + ЗагруженныеАдресныеСведения = АдресныйКлассификаторПовтИсп.СведенияОЗагрузкеСубъектовРФ(); + ЗагруженныеДанные = ЗагруженныеАдресныеСведения["ИспользоватьЗагруженные"]; // Если неизвестен источник, то сначала ищем в загруженные данных. + КонецЕсли; + + Если СведенияОбАдресномОбъекте.Свойство("Муниципальный") Тогда + ЭтоМуниципальныйАдрес = СведенияОбАдресномОбъекте.Муниципальный; + Иначе + ЭтоМуниципальныйАдрес = Истина; + КонецЕсли; + + Если ЗагруженныеДанные = Истина Тогда + ЗаполнитьАктуальныеАдресныеСведенияВнутр(Результат.Данные, СведенияОбАдресномОбъекте); + КонецЕсли; + + Если АдресПустой(Результат.Данные) Тогда + ЗаполнитьАктуальныеАдресныеСведенияСервис1С(Результат, СведенияОбАдресномОбъекте.Идентификатор, ЭтоМуниципальныйАдрес); КонецЕсли; Возврат Результат; КонецФункции -Процедура УстановитьИдентификаторыНаселенногоПункта(ЧастиАдреса) Экспорт - - ПоляАдреса = Новый Соответствие(); - ВставитьЧастьАдреса("Регион", ЧастиАдреса.Регион, ПоляАдреса); - ВставитьЧастьАдреса("Округ", ЧастиАдреса.Округ, ПоляАдреса); - ВставитьЧастьАдреса("Район", ЧастиАдреса.Район, ПоляАдреса); - ВставитьЧастьАдреса("Город", ЧастиАдреса.Город, ПоляАдреса); - ВставитьЧастьАдреса("ВнутригородскойРайон", ЧастиАдреса.ВнутригРайон, ПоляАдреса); - ВставитьЧастьАдреса("НаселенныйПункт", ЧастиАдреса.НаселенныйПункт, ПоляАдреса); - ВставитьЧастьАдреса("Улица", ЧастиАдреса.Улица, ПоляАдреса); - - ИдентификаторыАдреса = ИдентификаторыАдреса(ПоляАдреса, Истина, Истина); - - Если ИдентификаторыАдреса <> Неопределено Тогда - Для каждого Часть Из ЧастиАдреса Цикл - Если ИдентификаторыАдреса.Свойство("Идентификатор" + Часть.Ключ) Тогда - Часть.Значение.Идентификатор = ИдентификаторыАдреса["Идентификатор" + Часть.Ключ]; - Иначе - Часть.Значение.Идентификатор = Неопределено; - КонецЕсли; - КонецЦикла; - КонецЕсли; - -КонецПроцедуры - // Проверяет данные на соответствие классификатору. // // Параметры: @@ -610,224 +982,58 @@ СтруктураОписанияОшибкиПоставщика(Результат); // Приводим типы - АдресаДляПроверки = Новый Массив; - ТипСтрока = Тип("Строка"); - - Для Каждого ПроверяемыйАдрес Из Адреса Цикл - Если ПроверяемыйАдрес.ФорматАдреса = "ФИАС" Тогда - Уровни = АдресныйКлассификаторКлиентСервер.УровниКлассификатораФИАС(); - Иначе - Уровни = АдресныйКлассификаторКлиентСервер.УровниКлассификатораКЛАДР(); - КонецЕсли; - - // Невозможно проверить адрес из-за некорректных сведений. Проверьте правильность заполнения адреса. - АдресXDTO = ПроверяемыйАдрес.Адрес; - Если ТипЗнч(АдресXDTO) = ТипСтрока Тогда - Если ЭтоКонтактнаяИнформацияВXML(АдресXDTO) Тогда - ПолныйАдресXDTO = ДесериализацияАдресаXDTO(АдресXDTO); - АдресXDTO = ПолныйАдресXDTO.Состав.Состав; + МестоПроверки = Новый Структура("ЗагруженныеСведения, ВебСервис", Новый Массив, Новый Массив); + + Если ТипЗнч(Адреса) <> Тип("Массив") Тогда + Если Адреса.Свойство("Area") Тогда + ЗагруженныеСведения = СведенияОРегионе(Адреса.Area + " "+ Адреса.AreaType); + Если ЗагруженныеСведения.Загружен Тогда + МестоПроверки.ЗагруженныеСведения.Добавить(Адреса); Иначе - АдресXDTO = Неопределено; + МестоПроверки.ВебСервис.Добавить(Адреса); КонецЕсли; КонецЕсли; - - АдресаДляПроверки.Добавить(Новый Структура("Адрес, Уровни", АдресXDTO, Уровни)); - КонецЦикла; - - Источник = ИсточникДанныхАдресногоКлассификатора(); - Если ПустаяСтрока(Источник) Тогда - // Локальное, всегда корректное. - ЗаполнитьРезультатПроверкиАдресаПоКлассификаторуВнутр(Результат, АдресаДляПроверки); - - ИначеЕсли Источник = "Сервис1С" Тогда - // Веб сервис 1С, может быть на обслуживании. - Попытка - ЗаполнитьРезультатПроверкиАдресаПоКлассификаторуСервис1С(Результат, АдресаДляПроверки); - Исключение - СтруктураОписанияОшибкиПоставщика(Результат, ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации( СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , Результат.ПодробноеПредставлениеОшибки); - КонецПопытки; - - КонецЕсли; - - Возврат Результат; - -КонецФункции - -// Определяет индекс и ОКТМО адреса по частям адреса. -// -Функция ИндексИОКТМОАдресаПоЧастямАдреса(Адрес, Идентификатор = Неопределено) Экспорт - - Результат = Новый Структура("Индекс, ОКТМО", Неопределено, Неопределено); - Источник = ИсточникДанныхАдресногоКлассификатора(); - Если ПустаяСтрока(Источник) Тогда - // Локальное - - Если НЕ ЗначениеЗаполнено(Идентификатор) Тогда - Идентификатор = ИдентификаторАдресногоОбъектаПоЧастямАдреса(Адрес, Истина); - КонецЕсли; - - Если Идентификатор <> Неопределено Тогда - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | АдресныеОбъекты.ПочтовыйИндекс - |ИЗ - | РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты - |ГДЕ - | АдресныеОбъекты.Идентификатор = &Идентификатор - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | АдресныеОбъекты.Дополнительно КАК Дополнительно, - | ДополнительныеАдресныеСведения.КодСубъектаРФ, - | ДополнительныеАдресныеСведения.OKATO, - | ДополнительныеАдресныеСведения.ОКТМО, - | ДополнительныеАдресныеСведения.КодИФНСФЛ, - | ДополнительныеАдресныеСведения.КодИФНСЮЛ, - | ДополнительныеАдресныеСведения.КодУчасткаИФНСФЛ, - | ДополнительныеАдресныеСведения.КодУчасткаИФНСЮЛ - |ИЗ - | РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеАдресныеСведения КАК ДополнительныеАдресныеСведения - | ПО АдресныеОбъекты.Дополнительно = ДополнительныеАдресныеСведения.Идентификатор - |ГДЕ - | АдресныеОбъекты.Идентификатор = &Идентификатор"; - - Запрос.УстановитьПараметр("Идентификатор", Идентификатор); - РезультатЗапроса = Запрос.ВыполнитьПакет(); - РезультатЗапросаИндекс = РезультатЗапроса[0].Выбрать(); - РезультатЗапросаОКТМО = РезультатЗапроса[1].Выбрать(); - - Если РезультатЗапросаИндекс.Следующий() Тогда - Если РезультатЗапросаИндекс.ПочтовыйИндекс = 0 Тогда - - // Расшифровка свойств адреса - Запрос = Новый Запрос( - "ВЫБРАТЬ - | Значение - |ИЗ - | РегистрСведений.СлужебныеАдресныеСведения - |ГДЕ - | Тип = ""ТипАдрЭл"" И Ключ = ""ПочтовыйИндекс"" - |;////////////////////////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | Расшифровка.Ключ КАК Значение, - | Расшифровка.Значение КАК ТипАдрЭл, - | - | ВЫБОР - | КОГДА НЕ ТипыВладения.Идентификатор ЕСТЬ NULL ТОГДА ТипыВладения.Идентификатор - | КОГДА НЕ ТипыСтроения.Идентификатор ЕСТЬ NULL ТОГДА ТипыСтроения.Идентификатор - | ИНАЧЕ 0 - | КОНЕЦ КАК Идентификатор - | - |ИЗ - | РегистрСведений.СлужебныеАдресныеСведения КАК Расшифровка - | - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.СлужебныеАдресныеСведения КАК ТипыВладения - |ПО - | ТипыВладения.Тип = ""ESTSTAT"" - | И ТипыВладения.Значение = Расшифровка.Ключ - | - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.СлужебныеАдресныеСведения КАК ТипыСтроения - |ПО - | ТипыСтроения.Тип = ""STRSTAT"" - | И ТипыСтроения.Значение = Расшифровка.Ключ - | - |ГДЕ - | Расшифровка.Тип = ""ДопАдрЭлНомер"""); - НаборРезультатов = Запрос.ВыполнитьПакет(); - - Таблица = НаборРезультатов[0].Выгрузить(); - Если Таблица.Количество() = 0 Тогда - ТипАдрЭлПочтовыйИндекс = ""; + Иначе + Для каждого АдресПроверки Из Адреса Цикл + Если АдресПроверки.Адрес.Свойство("Area") Тогда + Если ЗначениеЗаполнено(АдресПроверки.Адрес.Area) Тогда + ЗагруженныеСведения = СведенияОРегионе(АдресПроверки.Адрес.Area + " "+ АдресПроверки.Адрес.AreaType); + Если ЗагруженныеСведения.Загружен Тогда + МестоПроверки.ЗагруженныеСведения.Добавить(АдресПроверки); Иначе - ТипАдрЭлПочтовыйИндекс = Таблица[0].Значение; + МестоПроверки.ВебСервис.Добавить(АдресПроверки); КонецЕсли; - ТаблицаСокращенийЗданий = НаборРезультатов[1].Выгрузить(); - ТаблицаСокращенийЗданий.Индексы.Добавить("ТипАдрЭл"); - - ЗданияИПомещения = Новый Соответствие; - ТипЧисло = Новый ОписаниеТипов("Число"); - Для Каждого ДополнительныйЭлемент Из Адрес.ПолучитьСписок("ДопАдрЭл") Цикл - ТипАдресногоЭлемента = СокрЛП(ДополнительныйЭлемент.ТипАдрЭл); - - // Здание или помещение, почтовый индекс? - Если ТипАдресногоЭлемента = "" Тогда - ЗначениеНомера = ДополнительныйЭлемент.Номер; - СтрокаЗдания = ТаблицаСокращенийЗданий.Найти(ЗначениеНомера.Тип, "ТипАдрЭл"); - Если СтрокаЗдания <> Неопределено Тогда - ЗданияИПомещения[СтрокаЗдания.Значение] = Новый Структура("Вид, Значение", СтрокаЗдания.Идентификатор, ЗначениеНомера.Значение); - КонецЕсли; - Продолжить; - ИначеЕсли ТипАдресногоЭлемента = ТипАдрЭлПочтовыйИндекс Тогда - Результат.Индекс = ТипЧисло.ПривестиЗначение(ДополнительныйЭлемент.Значение); - Продолжить; - КонецЕсли; - КонецЦикла; - - Запрос = Новый Запрос; - Запрос.Текст ="ВЫБРАТЬ - | ДомаЗданияСтроения.ПочтовыйИндекс, - | ДомаЗданияСтроения.Строения - |ИЗ - | РегистрСведений.ДомаЗданияСтроения КАК ДомаЗданияСтроения - |ГДЕ - | ДомаЗданияСтроения.АдресныйОбъект = &Идентификатор"; - Запрос.УстановитьПараметр("Идентификатор", Идентификатор); - РезультатЗапросаСДомами = Запрос.Выполнить().Выгрузить(); - - Для Каждого Запись Из РезультатЗапросаСДомами Цикл - // Если Запись.Строения равно Null значит по этому адресу нет домов. - Если ЗначениеЗаполнено(Запись.Строения) Тогда - Описание = Запись.Строения.Получить(); - - Если Не ПустаяСтрока(Описание) Тогда - Описание = Сред(Описание, 25); - Если Не ПустаяСтрока(Описание) Тогда - Если ЗданияИПомещения.Количество() > 0 И ОписаниеЗданийФИАССодержитДанные(Описание, ЗданияИПомещения) Тогда - Результат.Индекс = Запись.ПочтовыйИндекс; - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЦикла; Иначе - Результат.Индекс = РезультатЗапросаИндекс.ПочтовыйИндекс; + МестоПроверки.ЗагруженныеСведения.Добавить(АдресПроверки); КонецЕсли; КонецЕсли; - - Если РезультатЗапросаОКТМО.Следующий() Тогда - Результат.ОКТМО = РезультатЗапросаОКТМО.ОКТМО; - КонецЕсли; - КонецЕсли; - - ИначеЕсли Источник = "Сервис1С" Тогда - // Веб сервис 1С, может быть на обслуживании. - АдресаДляПроверки = Новый Массив; - РезультатВебСервис = Новый Структура("Данные", Новый Массив); - СтруктураОписанияОшибкиПоставщика(РезультатВебСервис); - Уровни = АдресныйКлассификаторКлиентСервер.УровниКлассификатораФИАС(); - АдресаДляПроверки.Добавить(Новый Структура("Адрес, Уровни", Адрес, Уровни)); - Попытка - ЗаполнитьРезультатПроверкиАдресаПоКлассификаторуСервис1С(РезультатВебСервис, АдресаДляПроверки); - Исключение - СтруктураОписанияОшибкиПоставщика(РезультатВебСервис, ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации( СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , РезультатВебСервис.ПодробноеПредставлениеОшибки); - КонецПопытки; - - Если НЕ РезультатВебСервис.Отказ Тогда - Если РезультатВебСервис.Данные[0].Варианты.Количество() > 0 Тогда - Результат.Индекс = РезультатВебСервис.Данные[0].Варианты[0].Индекс; - Результат.ОКТМО = РезультатВебСервис.Данные[0].Варианты[0].ОКТМО - КонецЕсли; - КонецЕсли; + КонецЦикла; КонецЕсли; + ЗагруженныеАдресныеСведения = АдресныйКлассификаторПовтИсп.СведенияОЗагрузкеСубъектовРФ(); + Если ЗагруженныеАдресныеСведения["ИспользоватьЗагруженные"] Тогда + ЗаполнитьРезультатПроверкиАдресаПоКлассификаторуВнутр(Результат, МестоПроверки.ЗагруженныеСведения); + КонецЕсли; + + Если ЗагруженныеАдресныеСведения["КлассификаторДоступен"] = Истина Тогда + + Для каждого АдресаДляПроверки Из МестоПроверки.ВебСервис Цикл + + Попытка + + ЗаполнитьРезультатПроверкиАдресаПоКлассификаторуСервис1С(Результат, АдресаДляПроверки); + + Исключение + СтруктураОписанияОшибкиПоставщика(Результат, ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации( СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , Результат.ПодробноеПредставлениеОшибки); + КонецПопытки; + + КонецЦикла; + + КонецЕсли; + Возврат Результат; + КонецФункции // Возвращает соответствие полных наименований адресных объектов и их сокращения. @@ -901,208 +1107,26 @@ КонецФункции -Функция УстановитьСоответствиеЧастейАдресаИхУровню(ЧастиАдреса, Уровни) Экспорт - - ОбработатьОбщепринятыеСокращения(ЧастиАдреса); - ДоступныеУровни = УровниСодержащиеСовпадения(ЧастиАдреса, Уровни); - Если ДоступныеУровни.Найти(1) <> Неопределено Тогда - УстановитьУровниАдресаПоЧастямАдреса(ЧастиАдреса, ДоступныеУровни); - КонецЕсли; - - Возврат ЧастиАдреса; - -КонецФункции - -Процедура УстановитьУровниУлицыПоЧастямАдреса(ИдентификаторНаселенногоПункта, ЧастиАдреса) Экспорт - - Если ТипЗнч(ИдентификаторНаселенногоПункта) = Тип("Строка") Тогда - ИдентификаторНаселенногоПункта = Новый УникальныйИдентификатор(ИдентификаторНаселенногоПункта); - КонецЕсли; - - Шаблон = " ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК %1 - | ПО (%1.КодСубъектаРФ = НаселенныйПункт.КодСубъектаРФ) - | И (%1.КодОкруга = НаселенныйПункт.КодОкруга) - | И (%1.КодРайона = НаселенныйПункт.КодРайона) - | И (%1.КодГорода = НаселенныйПункт.КодГорода) - | И (%1.КодВнутригородскогоРайона = НаселенныйПункт.КодВнутригородскогоРайона) - | И (%1.КодНаселенногоПункта = НаселенныйПункт.КодНаселенногоПункта) - | И (%1.Наименование = ""%2"") - | И (%1.Сокращение = ""%3"") "; - СтрокаВыбрать = ""; - РазделительВыбрать = ""; - СтрокаИз = ""; - - Упорядочить = ""; - Для Индекс = 0 По ЧастиАдреса.Количество() -1 Цикл - ЧастьАдреса = ЧастиАдреса[Индекс]; - НазваниеТаблицы = "АдресныйОбъект"+ Строка(Индекс); - СтрокаВыбрать = СтрокаВыбрать + РазделительВыбрать + НазваниеТаблицы + ".Идентификатор КАК " + НазваниеТаблицы + "Идентификатор, " - + НазваниеТаблицы + ".Уровень КАК " + НазваниеТаблицы + "Уровень " ; - СтрокаИз = СтрокаИз + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, НазваниеТаблицы, - СтрЗаменить(ЧастьАдреса.Наименование, """",""""""), - СтрЗаменить(ЧастьАдреса.Сокращение, """","""""")); - Упорядочить = Упорядочить + РазделительВыбрать + НазваниеТаблицы + ".Актуален Убыв"; - РазделительВыбрать = ", "; - КонецЦикла; - - ТекстЗапроса = "ВЫБРАТЬ " + СтрокаВыбрать + " ИЗ РегистрСведений.АдресныеОбъекты КАК НаселенныйПункт " - + СтрокаИз + " ГДЕ НаселенныйПункт.Идентификатор = &Идентификатор"; - - Если ЗначениеЗаполнено(Упорядочить) Тогда - ТекстЗапроса = ТекстЗапроса + " УПОРЯДОЧИТЬ ПО " + Упорядочить; - КонецЕсли; - - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("Идентификатор", ИдентификаторНаселенногоПункта); - - Результат = Запрос.Выполнить().Выгрузить(); - Результат = Запрос.Выполнить().Выбрать(); - Если Результат.Следующий() Тогда - Для Индекс = 0 По ЧастиАдреса.Количество() - 1 Цикл - ЧастиАдреса[Индекс].Идентификатор = Результат["АдресныйОбъект"+ Строка(Индекс) + "Идентификатор"]; - ЧастиАдреса[Индекс].Уровень = Результат["АдресныйОбъект"+ Строка(Индекс) + "Уровень"]; - КонецЦикла; - КонецЕсли; - ЧастиАдреса.Сортировать("Уровень"); - -КонецПроцедуры - -// Распознавание населенного пункта по частям адреса. -// -Функция УстановитьСоответствиеЧастейАдресаИхУровнюДляНаселенногоПункта(ЧастиАдреса, Уровни) Экспорт - - ОбработатьОбщепринятыеСокращения(ЧастиАдреса); - ДоступныеУровни = УровниСодержащиеСовпадения(ЧастиАдреса, Уровни); - Если ДоступныеУровни.Найти(1) <> Неопределено Тогда - УстановитьУровниАдресаПоЧастямАдресаДляНаселенногоПункта(ДоступныеУровни, ЧастиАдреса); - КонецЕсли; - - Возврат ЧастиАдреса; - -КонецФункции - -// Определяет улицу и дополнительную территорию, функция используется для совместимости данных перенесенных из КЛАДР. -// -// Параметры: -// НаименованиеИСокращение - Структура - Наименование и Сокращение искомого объекта. -// Идентификатор - УникальныйИдентификатор - Идентификатора населенного пункт. -// Возвращаемое значение: -// Структура - Результат поиска. -Функция УлицаИДополнительнаяТерритория(Знач НаименованиеИСокращение, Знач Идентификатор) Экспорт - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | АдресныеОбъекты.Уровень КАК Уровень, - | АдресныеОбъекты.КодСубъектаРФ КАК КодСубъектаРФ, - | АдресныеОбъекты.КодОкруга КАК КодОкруга, - | АдресныеОбъекты.КодРайона КАК КодРайона, - | АдресныеОбъекты.КодГорода КАК КодГорода, - | АдресныеОбъекты.КодВнутригородскогоРайона КАК КодВнутригородскогоРайона, - | АдресныеОбъекты.КодНаселенногоПункта КАК КодНаселенногоПункта, - | АдресныеОбъекты.КодУлицы КАК КодУлицы, - | АдресныеОбъекты.КодДополнительногоЭлемента КАК КодДополнительногоЭлемента, - | АдресныеОбъекты.КодПодчиненногоЭлемента КАК КодПодчиненногоЭлемента, - | АдресныеОбъекты.Идентификатор КАК Идентификатор, - | АдресныеОбъекты.ПочтовыйИндекс КАК ПочтовыйИндекс, - | АдресныеОбъекты.Наименование КАК Наименование, - | АдресныеОбъекты.Сокращение КАК Сокращение - |ПОМЕСТИТЬ Родитель - |ИЗ - | РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты - |ГДЕ - | АдресныеОбъекты.Идентификатор = &Идентификатор - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | АдресныеОбъекты.Идентификатор КАК Идентификатор, - | АдресныеОбъекты.ПочтовыйИндекс КАК ПочтовыйИндекс, - | АдресныеОбъекты.Наименование КАК Наименование, - | АдресныеОбъекты.Сокращение КАК Сокращение, - | АдресныеОбъектыУлицы.Наименование КАК НаименованиеУлицы, - | АдресныеОбъектыУлицы.Сокращение КАК СокращениеУлицы, - | АдресныеОбъектыУлицы.Идентификатор КАК ИдентификаторУлицы - |ИЗ - | Родитель КАК Родитель - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУлицы - | ПО (АдресныеОбъектыУлицы.Уровень = 7) - | И (Родитель.КодУлицы = 0) - | И Родитель.КодСубъектаРФ = АдресныеОбъектыУлицы.КодСубъектаРФ - | И Родитель.КодОкруга = АдресныеОбъектыУлицы.КодОкруга - | И Родитель.КодРайона = АдресныеОбъектыУлицы.КодРайона - | И Родитель.КодГорода = АдресныеОбъектыУлицы.КодГорода - | И Родитель.КодВнутригородскогоРайона = АдресныеОбъектыУлицы.КодВнутригородскогоРайона - | И Родитель.КодНаселенногоПункта = АдресныеОбъектыУлицы.КодНаселенногоПункта - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты - | ПО (АдресныеОбъекты.Уровень = 90) - | И (АдресныеОбъектыУлицы.КодОкруга = АдресныеОбъекты.КодОкруга) - | И (АдресныеОбъектыУлицы.КодРайона = АдресныеОбъекты.КодРайона) - | И (АдресныеОбъектыУлицы.КодГорода = АдресныеОбъекты.КодГорода) - | И (АдресныеОбъектыУлицы.КодВнутригородскогоРайона = АдресныеОбъекты.КодВнутригородскогоРайона) - | И (АдресныеОбъектыУлицы.КодНаселенногоПункта = АдресныеОбъекты.КодНаселенногоПункта) - | И (АдресныеОбъектыУлицы.КодУлицы = АдресныеОбъекты.КодУлицы) - | И Родитель.КодСубъектаРФ = АдресныеОбъекты.КодСубъектаРФ - |ГДЕ - | АдресныеОбъекты.Наименование = &Наименование - | И АдресныеОбъекты.Сокращение = &Сокращение"; - - Запрос.УстановитьПараметр("Идентификатор", Идентификатор); - Запрос.УстановитьПараметр("Наименование", НаименованиеИСокращение.Наименование); - Запрос.УстановитьПараметр("Сокращение", НаименованиеИСокращение.Сокращение); - - РезультатЗапроса = Запрос.Выполнить().Выбрать(); - - НайденныйВариант = Новый Структура("ИдентификаторУлицы, Идентификатор, Значение"); - Если РезультатЗапроса.Следующий() Тогда - НайденныйВариант.ИдентификаторУлицы = РезультатЗапроса.ИдентификаторУлицы; - НайденныйВариант.Идентификатор = РезультатЗапроса.Идентификатор; - НайденныйВариант.Значение = РезультатЗапроса.Наименование + " " + РезультатЗапроса.Сокращение; - Возврат НайденныйВариант; - КонецЕсли; - - Возврат Неопределено; - -КонецФункции - // Определение кодов ОКАТО, ОКТМО, налоговых инспекций ФНС и др. адреса // // Параметры: -// Адрес - Строка - Адрес в формате XML -// Источник - Строка - Источник получения кодов адреса, Варианты: "Сервис1С", "ЗагруженныеДанные" -// если явно не указан явно, то определяется в настройках. +// Адрес - Строка - Адрес в формате JSON или XML +// Источник - Строка - Устарело. Код сначала ищется в загруженных данных и если не найден, то в веб-сервисе. +// // Возвращаемое значение: // Структура - Коды адреса. // -Функция КодыАдреса(Адрес, Источник = Неопределено) Экспорт +Функция КодыАдреса(Знач Адрес, Источник = Неопределено) Экспорт - Если НЕ (ЭтоКонтактнаяИнформацияВXML(Адрес) ИЛИ ТипЗнч(Адрес) = Тип("Структура")) Тогда - Возврат СтруктураКодовАдреса(); + Если ЭтоКонтактнаяИнформацияВXML(Адрес) Тогда + АдресСтруктура = КонтактнаяИнформацияВСтруктуруJSON(Адрес); + ИначеЕсли ЭтоКонтактнаяИнформацияВJSON(Адрес) Тогда + АдресСтруктура = СтрокаJSONВСтруктуру(Адрес); КонецЕсли; - ИскатьВезде = Ложь; - Если НЕ ЗначениеЗаполнено(Источник) Тогда - ИскатьВезде = Истина; - Источник = ИсточникДанныхАдресногоКлассификатора(); - Если ПустаяСтрока(Источник) ИЛИ Источник <> "Сервис1С" Тогда - Источник = "ЗагруженныеДанные"; - КонецЕсли; - КонецЕсли; + ИдентификаторАдресногоОбъекта = ?(ЗначениеЗаполнено(АдресСтруктура.ID), АдресСтруктура.ID, ""); - Результат = КодыАдресаИКодыКЛАДР(Адрес, Источник).КодыАдреса; - - Для каждого КлючИЗначение Из Результат Цикл - Если ЗначениеЗаполнено(КлючИЗначение.Значение) Тогда - Возврат Результат; - КонецЕсли; - КонецЦикла; - - Если ИскатьВезде Тогда - Источник = ?(Источник = "ЗагруженныеДанные", "Сервис1С", "ЗагруженныеДанные"); - Возврат КодыАдреса(Адрес, Источник); - КонецЕсли; - - Возврат Результат; + Возврат КодыАдресаИКодыКЛАДР(АдресСтруктура, ИдентификаторАдресногоОбъекта, Источник) КонецФункции @@ -1110,71 +1134,124 @@ // // Параметры: // Адрес - Строка - Адрес в формате XML или структура с полями адреса. +// ИдентификаторАдресногоОбъекта - Строка - идентификатор адреса. // Источник - Строка - Источник получения кодов адреса, Варианты: "Сервис1С", "ЗагруженныеДанные". // Возвращаемое значение: // Структура - Содержит 2 структуры: Коды адреса и Коды КЛАДР. // -Функция КодыАдресаИКодыКЛАДР(Знач Адрес, Источник = Неопределено) Экспорт +Функция КодыАдресаИКодыКЛАДР(Знач Адрес, Знач ИдентификаторАдресногоОбъекта = "", Источник = Неопределено) Экспорт + КодКЛАДРЗаполнены = Ложь; Результат = Новый Структура(); Результат.Вставить("КодыКЛАДР", СтруктураКодовКЛАДРПоУровням()); Результат.Вставить("КодыАдреса", СтруктураКодовАдреса()); - Результат.Вставить("Идентификаторы", СтруктураКодовКЛАДРПоУровням()); - Результат.Вставить("ИдентификаторАдресногоОбъекта", Неопределено); - Если НЕ (ЭтоКонтактнаяИнформацияВXML(Адрес) ИЛИ ТипЗнч(Адрес) = Тип("Структура")) Тогда - Возврат Результат; - КонецЕсли; + ЗагруженныеАдресныеСведения = АдресныйКлассификаторПовтИсп.СведенияОЗагрузкеСубъектовРФ(); - Если НЕ ЗначениеЗаполнено(Источник) Тогда - Источник = ИсточникДанныхАдресногоКлассификатора(); - Если ПустаяСтрока(Источник) ИЛИ Источник <> "Сервис1С" Тогда - Источник = "ЗагруженныеДанные"; - КонецЕсли; - КонецЕсли; + КешДомов = Новый Структура("НомерКорпуса, НомерСтроения, ТипСтроения"); + Для каждого Корпус Из Адрес.Buildings Цикл - Если ЭтоКонтактнаяИнформацияВXML(Адрес) Тогда - АдресXDTO = ДесериализацияАдресаXDTO(Адрес); - Адрес = АдресXDTO.Состав.Состав; + Если СтрСравнить(Корпус.Type, "Корпус") = 0 Тогда + КешДомов.НомерКорпуса = Корпус.Number; + Иначе + КешДомов.ТипСтроения = Корпус.Type; + КешДомов.НомерСтроения = Корпус.Number; + КонецЕсли; + + КонецЦикла; + + Если ПустаяСтрока(ИдентификаторАдресногоОбъекта) Тогда + Если Не ЗначениеЗаполнено(Адрес.ID) Тогда + УстановитьИдентификаторыАдреса(Адрес); + КонецЕсли; + ИдентификаторАдресногоОбъекта = Адрес.ID; КонецЕсли; - Если СтрСравнить(Источник, "Сервис1С") = 0 Тогда - Результат.КодыАдреса = КодыАдресаСервис(Адрес, Результат.Идентификаторы); - Результат.ИдентификаторАдресногоОбъекта = Результат.КодыАдреса.Идентификатор; - // Заполнить коды КЛАДР - Если ЗначениеЗаполнено(Результат.КодыАдреса.КодКЛАДР) Тогда - КодКЛАДР = Формат(Результат.КодыАдреса.КодКЛАДР, "ЧРГ=''; ЧГ=0"); + Результат.КодыАдреса.Идентификатор = ИдентификаторАдресногоОбъекта; + + Если ЗагруженныеАдресныеСведения["ИспользоватьЗагруженные"] И Источник <> "Сервис1С" Тогда + + ОсновныеКодыЗаполнены = Ложь; + // Основные коды + Если ЗначениеЗаполнено(ИдентификаторАдресногоОбъекта) Тогда - Если СтрДлина(КодКЛАДР) = 17 Тогда - Результат.КодыКЛАДР.Улица = КодКЛАДР; - КодКЛАДР = Лев(КодКЛАДР, 13); - КонецЕсли; + СведенияОДоме = СведенияОДоме(); - Если СтрДлина(КодКЛАДР) = 12 Тогда - КодКЛАДР = "0" + КодКЛАДР; - КонецЕсли; + СведенияОДоме.НомерДома = Адрес.HouseNumber; + СведенияОДоме.ТипДома = Адрес.HouseType; + СведенияОДоме.НомерКорпуса = КешДомов.НомерКорпуса; + СведенияОДоме.НомерСтроения = КешДомов.НомерСтроения; + СведенияОДоме.ТипСтроения = КешДомов.ТипСтроения; + + ОсновныеКодыЗаполнены = ЗаполнитьКодыАдреса(Результат.КодыАдреса, ИдентификаторАдресногоОбъекта, СведенияОДоме); + + КонецЕсли; + + КодКЛАДРЗаполнены = Ложь; + Если ЗначениеЗаполнено(ИдентификаторАдресногоОбъекта) Тогда + // Основные КЛАДР + Запрос = Новый Запрос("ВЫБРАТЬ ПЕРВЫЕ 1 + | АдресныеОбъекты.КодКЛАДР КАК КодКЛАДР + |ИЗ + | РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты + |ГДЕ + | АдресныеОбъекты.Идентификатор = &Идентификатор"); + + Запрос.УстановитьПараметр("Идентификатор", ИдентификаторАдресногоОбъекта); + + РезультатЗапроса = Запрос.Выполнить(); + + Если НЕ РезультатЗапроса.Пустой() Тогда - Если СтрДлина(КодКЛАДР) = 13 Тогда - Если ЗначениеЗаполнено(Адрес.СубъектРФ) Тогда - Результат.КодыКЛАДР.Регион = Лев(КодКЛАДР, 2) + "00000000000"; - КонецЕсли; - Район = ?(ПустаяСтрока(Адрес.СвРайМО), "", Адрес.СвРайМО.Район); - Если ЗначениеЗаполнено(Район) Тогда - Результат.КодыКЛАДР.Район = Лев(КодКЛАДР, 5) + "00000000"; - КонецЕсли; - Если ЗначениеЗаполнено(Адрес.Город) Тогда - Результат.КодыКЛАДР.Город = Лев(КодКЛАДР, 8) + "00000"; - КонецЕсли; - Если ЗначениеЗаполнено(Адрес.НаселПункт) Тогда - Результат.КодыКЛАДР.НаселенныйПункт = Лев(КодКЛАДР, 11) + "00"; - КонецЕсли; + Результат.КодыАдреса.КодКЛАДР = РезультатЗапроса.Выгрузить()[0].КодКЛАДР; + СформироватьКодыКЛАДР(Результат.КодыАдреса.КодКЛАДР, Адрес, Результат.КодыКЛАДР); + КодКЛАДРЗаполнены = Истина; КонецЕсли; КонецЕсли; - Иначе - Результат = КодыАдресаЗагруженныеДанные(Адрес); + + Если КодКЛАДРЗаполнены И ОсновныеКодыЗаполнены Тогда + + Возврат Результат; + + КонецЕсли; + + КонецЕсли; + + ОсновныеКодыЗаполнены = Ложь; + + // Получаем код КЛАДР из веб-сервиса. + Если ЗагруженныеАдресныеСведения["КлассификаторДоступен"] Тогда + + ТекстGETЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("selectByCode?code=%1&codeType=ID", + Строка(ИдентификаторАдресногоОбъекта)); + + РезультатВебСервис = ВыполнитьЗапросЧерезВебСервис(ТекстGETЗапроса); + + Если НЕ РезультатВебСервис.Отказ И РезультатВебСервис.Данные.Количество() > 0 Тогда + + Сведения = РезультатВебСервис.Данные[0]; + Если Не КодКЛАДРЗаполнены Тогда + Результат.КодыАдреса.КодКЛАДР = Сведения.codeKLADR; + СформироватьКодыКЛАДР(Результат.КодыАдреса.КодКЛАДР, Адрес, Результат.КодыКЛАДР); + КонецЕсли; + + Если Не ОсновныеКодыЗаполнены Тогда + + Результат.КодыАдреса.КодКЛАДР = Сведения.codeKLADR; + Результат.КодыАдреса.Идентификатор = Сведения.Id; + Результат.КодыАдреса.ОКАТО = Сведения.okato; + Результат.КодыАдреса.ОКТМО = Сведения.oktmo; + Результат.КодыАдреса.КодИФНСФЛ = Сведения.ifnsFlCode; + Результат.КодыАдреса.КодИФНСЮЛ = Сведения.ifnsUlCode; + Результат.КодыАдреса.КодУчасткаИФНСФЛ = Сведения.ifnsFlAreaCode; + Результат.КодыАдреса.КодУчасткаИФНСЮЛ = Сведения.ifnsUlAreaCode; + + КонецЕсли; + + КонецЕсли; + КонецЕсли; - ОпределитьФорматКодов(Результат.КодыАдреса); Возврат Результат; @@ -1281,35 +1358,27 @@ Запрос.УстановитьПараметр("Наименование", СведенияОРегионе.Наименование); Запрос.УстановитьПараметр("Сокращение", СведенияОРегионе.Сокращение); - РезультатЗапроса = Запрос.Выполнить().Выбрать(); + РезультатЗапроса = Запрос.Выполнить(); - Если РезультатЗапроса.Следующий() Тогда - Результат.Загружен = РезультатЗапроса.РегионЗагружен; - Результат.КодСубъектаРФ = РезультатЗапроса.КодСубъектаРФ; + Если РезультатЗапроса.Пустой() Тогда + ВыполнитьНачальноеЗаполнение(); + РезультатЗапроса = Запрос.Выполнить(); + КонецЕсли; + + ИнформацияОРегионе = РезультатЗапроса.Выбрать(); + + Если ИнформацияОРегионе.Следующий() Тогда + Результат.Загружен = ИнформацияОРегионе.РегионЗагружен; + Результат.КодСубъектаРФ = ИнформацияОРегионе.КодСубъектаРФ; + Иначе + Результат.Загружен = Ложь; + Результат.КодСубъектаРФ = ИнформацияОРегионе.КодСубъектаРФ; КонецЕсли; Возврат Результат; КонецФункции -// Возвращает краткую информацию о состоянии загруженности регионов. -// -// Возвращаемое значение: -// Структура - описание состояния. Содержит колонки. -// * КоличествоРегионов - Число - Общие количество регионов. -// * КоличествоЗагруженныхРегионов - Число - количество загруженных регионов. -Функция КраткиеСведенияОЗагрузкеСубъектовРФ() Экспорт - - Результат = Новый Структура("КоличествоРегионов, КоличествоЗагруженныхРегионов"); - - Результат.КоличествоЗагруженныхРегионов = АдресныйКлассификатор.КоличествоЗагруженныхРегионов(); - - Классификатор = РегистрыСведений.АдресныеОбъекты.КлассификаторСубъектовРФ(); - Результат.КоличествоРегионов = Классификатор.Количество(); - - Возврат Результат; -КонецФункции - // Возвращает настройку текущего источника данных адресов. // // Возвращаемое значение: @@ -1339,109 +1408,47 @@ // Считаем, что уникальность обеспечивается не идентификатором (что правильно), а кодом субъекта // из-за особенностей платформы по передаче уникального идентификатора в таблицу-параметр запроса. - Запрос = Новый Запрос("ВЫБРАТЬ - | Параметр.Наименование КАК Наименование, - | Параметр.Сокращение КАК Сокращение, - | Параметр.КодСубъектаРФ КАК КодСубъектаРФ - |ПОМЕСТИТЬ Классификатор - |ИЗ - | &Классификатор КАК Параметр - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ВЫБОР - | КОГДА ВсеДоступныеРегионы.Наименование ЕСТЬ NULL - | ТОГДА Классификатор.Наименование + "" "" + Классификатор.Сокращение - | ИНАЧЕ ВсеДоступныеРегионы.Наименование + "" "" + ВсеДоступныеРегионы.Сокращение - | КОНЕЦ КАК Представление, - | ВЫБОР - | КОГДА ВсеДоступныеРегионы.КодСубъектаРФ ЕСТЬ NULL - | ТОГДА Классификатор.КодСубъектаРФ - | ИНАЧЕ ВсеДоступныеРегионы.КодСубъектаРФ - | КОНЕЦ КАК КодСубъектаРФ, - | ИдентификаторыАдресныхОбъектов.Идентификатор КАК Идентификатор, - | ВЫБОР - | КОГДА АдресныеОбъекты.КодСубъектаРФ ЕСТЬ NULL - | ТОГДА ЛОЖЬ - | ИНАЧЕ ИСТИНА - | КОНЕЦ КАК Загружено, - | ЕСТЬNULL(Версии.ДатаВерсии, ДАТАВРЕМЯ(1, 1, 1)) КАК ДатаВерсии - |ИЗ - | (ВЫБРАТЬ РАЗЛИЧНЫЕ - | АдресныеОбъекты.Наименование КАК Наименование, - | АдресныеОбъекты.Сокращение КАК Сокращение, - | АдресныеОбъекты.КодСубъектаРФ КАК КодСубъектаРФ - | ИЗ - | РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты - | ГДЕ - | АдресныеОбъекты.Уровень = 1 - | И АдресныеОбъекты.КодОкруга = 0 - | И АдресныеОбъекты.КодРайона = 0 - | И АдресныеОбъекты.КодГорода = 0 - | И АдресныеОбъекты.КодВнутригородскогоРайона = 0 - | И АдресныеОбъекты.КодНаселенногоПункта = 0 - | И АдресныеОбъекты.КодУлицы = 0 - | И АдресныеОбъекты.КодДополнительногоЭлемента = 0 - | И АдресныеОбъекты.КодПодчиненногоЭлемента = 0) КАК ВсеДоступныеРегионы - | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ - | Регионы.КодСубъектаРФ КАК КодСубъектаРФ - | ИЗ - | РегистрСведений.АдресныеОбъекты КАК Регионы - | ГДЕ - | Регионы.Уровень = 1 - | И 1 В - | (ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты - | ГДЕ РегистрСведений.АдресныеОбъекты.Уровень = 2 - | И РегистрСведений.АдресныеОбъекты.КодСубъектаРФ = Регионы.КодСубъектаРФ - | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты - | ГДЕ РегистрСведений.АдресныеОбъекты.Уровень = 3 - | И РегистрСведений.АдресныеОбъекты.КодСубъектаРФ = Регионы.КодСубъектаРФ - | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты - | ГДЕ РегистрСведений.АдресныеОбъекты.Уровень = 4 - | И РегистрСведений.АдресныеОбъекты.КодСубъектаРФ = Регионы.КодСубъектаРФ - | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты - | ГДЕ РегистрСведений.АдресныеОбъекты.Уровень = 5 - | И РегистрСведений.АдресныеОбъекты.КодСубъектаРФ = Регионы.КодСубъектаРФ - | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты - | ГДЕ РегистрСведений.АдресныеОбъекты.Уровень = 6 - | И РегистрСведений.АдресныеОбъекты.КодСубъектаРФ = Регионы.КодСубъектаРФ - | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты - | ГДЕ РегистрСведений.АдресныеОбъекты.Уровень = 7 - | И РегистрСведений.АдресныеОбъекты.КодСубъектаРФ = Регионы.КодСубъектаРФ - | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты - | ГДЕ РегистрСведений.АдресныеОбъекты.Уровень = 90 - | И РегистрСведений.АдресныеОбъекты.КодСубъектаРФ = Регионы.КодСубъектаРФ - | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты - | ГДЕ РегистрСведений.АдресныеОбъекты.Уровень = 91 - | И РегистрСведений.АдресныеОбъекты.КодСубъектаРФ = Регионы.КодСубъектаРФ)) КАК АдресныеОбъекты - | ПО (АдресныеОбъекты.КодСубъектаРФ = ВсеДоступныеРегионы.КодСубъектаРФ) - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК ИдентификаторыАдресныхОбъектов - | ПО (ИдентификаторыАдресныхОбъектов.КодСубъектаРФ = ВсеДоступныеРегионы.КодСубъектаРФ) - | И (ИдентификаторыАдресныхОбъектов.Уровень = 1) - | И (ИдентификаторыАдресныхОбъектов.КодОкруга = 0) - | И (ИдентификаторыАдресныхОбъектов.КодРайона = 0) - | И (ИдентификаторыАдресныхОбъектов.КодГорода = 0) - | И (ИдентификаторыАдресныхОбъектов.КодВнутригородскогоРайона = 0) - | И (ИдентификаторыАдресныхОбъектов.КодНаселенногоПункта = 0) - | И (ИдентификаторыАдресныхОбъектов.КодУлицы = 0) - | И (ИдентификаторыАдресныхОбъектов.КодДополнительногоЭлемента = 0) - | И (ИдентификаторыАдресныхОбъектов.КодПодчиненногоЭлемента = 0) - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗагруженныеВерсииАдресныхСведений КАК Версии - | ПО (Версии.КодСубъектаРФ = ВсеДоступныеРегионы.КодСубъектаРФ) - | ПОЛНОЕ СОЕДИНЕНИЕ Классификатор КАК Классификатор - | ПО (Классификатор.КодСубъектаРФ = ВсеДоступныеРегионы.КодСубъектаРФ) - | - |УПОРЯДОЧИТЬ ПО - | ВЫБОР - | КОГДА ВсеДоступныеРегионы.КодСубъектаРФ ЕСТЬ NULL - | ТОГДА Классификатор.КодСубъектаРФ - | ИНАЧЕ ВсеДоступныеРегионы.КодСубъектаРФ - | КОНЕЦ"); - + Запрос = Новый Запрос("ВЫБРАТЬ + | Параметр.Наименование КАК Наименование, + | Параметр.Сокращение КАК Сокращение, + | Параметр.КодСубъектаРФ КАК КодСубъектаРФ + |ПОМЕСТИТЬ Классификатор + |ИЗ + | &Классификатор КАК Параметр + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Классификатор.Наименование + "" "" + Классификатор.Сокращение КАК Представление, + | Классификатор.КодСубъектаРФ КАК КодСубъектаРФ, + | ЗагруженныеВерсииАдресныхСведений.Версия КАК Версия, + | ЗагруженныеВерсииАдресныхСведений.ДатаВерсии КАК ДатаВерсии, + | ЗагруженныеВерсииАдресныхСведений.ДатаЗагрузки КАК ДатаЗагрузки, + | АдресныеОбъекты.Идентификатор КАК Идентификатор, + | НЕ ЗагруженныеВерсииАдресныхСведений.Версия ЕСТЬ NULL КАК Загружено, + | ДОБАВИТЬКДАТЕ(ЗагруженныеВерсииАдресныхСведений.ДатаЗагрузки, МЕСЯЦ, 1) < &ТекущаяДата КАК Устарело + |ИЗ + | Классификатор КАК Классификатор + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗагруженныеВерсииАдресныхСведений КАК ЗагруженныеВерсииАдресныхСведений + | ПО (Классификатор.КодСубъектаРФ = ЗагруженныеВерсииАдресныхСведений.КодСубъектаРФ) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты + | ПО АдресныеОбъекты.КодСубъектаРФ = Классификатор.КодСубъектаРФ + |ГДЕ + | АдресныеОбъекты.Уровень = 1 + |УПОРЯДОЧИТЬ ПО + | КодСубъектаРФ"); + Запрос.УстановитьПараметр("Классификатор", Классификатор); + Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДатаСеанса()); + + РезультатВыборкиЗагруженныхСведений = Запрос.Выполнить(); + Если РезультатВыборкиЗагруженныхСведений.Пустой() Тогда + ВыполнитьНачальноеЗаполнение(); + РезультатВыборкиЗагруженныхСведений = Запрос.Выполнить(); + КонецЕсли; + + ЗагруженныеСведения = РезультатВыборкиЗагруженныхСведений.Выгрузить(); - ЗагруженныеСведения = Запрос.Выполнить().Выгрузить(); ЗагруженныеСведения.Индексы.Добавить("Идентификатор"); ЗагруженныеСведения.Индексы.Добавить("КодСубъектаРФ"); ЗагруженныеСведения.Индексы.Добавить("Загружено"); @@ -1477,7 +1484,7 @@ // хранилище. // ОповещатьОПрогрессе - Булево - Флаг оповещения о прогрессе (см ДлительныеОперации.СообщитьПрогресс). // -Процедура ЗагрузитьКлассификаторАдресов(КодыСубъектовРФ, ОписаниеФайлов, ОповещатьОПрогрессе = Истина) Экспорт +Процедура ЗагрузитьКлассификаторАдресов(КодыСубъектовРФ, ОписаниеФайлов, ОповещатьОПрогрессе = Истина, ЗагружатьИсториюИзменений = Ложь) Экспорт ДатаЗагрузки = ТекущаяУниверсальнаяДата(); @@ -1521,6 +1528,30 @@ Архив = Новый ЧтениеZipФайла(ПолноеИмяФайла); Архив.ИзвлечьВсе(КаталогФайлов, РежимВосстановленияПутейФайловZIP.НеВосстанавливать); УдалитьВременныйФайл(ПолноеИмяФайла); + + ФайлыСтарогоФИАС = НайтиФайлы(КаталогФайлов, "*EXTRAINFO.FI"); + ФайлыНовогоФИАС = НайтиФайлы(КаталогФайлов, "*EXTRAACT.FI"); + + Если ФайлыНовогоФИАС.Количество() = 0 Тогда + + Если ФайлыСтарогоФИАС.Количество() > 0 Тогда + + ТекстПричины = НСтр("ru='Не допускается загрузка адресных сведений без поддержки муниципальных адресов.'"); + + Иначе + + ТекстПричины = НСтр("ru='Файл не содержит адресных сведений ФИАС'"); + + КонецЕсли; + + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, + ,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось загрузить адресные сведения из файла: %1 + |по причине: %2 + |Необходимо использовать адресные сведения расположенные по адресу https://its.1c.ru/download/fias2'"), ПолноеИмяФайла, ТекстПричины)); + ВызватьИсключение ТекстПричины; + + КонецЕсли; + КонецЕсли; КонецЦикла; @@ -1558,19 +1589,22 @@ КонецЕсли; Попытка + ВерсияСубъектаРФ = ИнформацияОЗагрузкеВерсии(СубъектРФ).Версия; - Если ВерсияСубъектаРФ <> СлужебныеАдресныеСведения.Версия Тогда - ЗагрузитьАдресныеОбъекты(СубъектРФ, КаталогФайлов, СлужебныеАдресныеСведения.Сведения); - ЗагрузитьДомаЗданияСтроения(СубъектРФ, КаталогФайлов, СлужебныеАдресныеСведения.Сведения); + + ЗагрузитьАдресныеОбъекты(СубъектРФ, КаталогФайлов, СлужебныеАдресныеСведения.Сведения); + ЗагрузитьДомаЗданияСтроения(СубъектРФ, КаталогФайлов, СлужебныеАдресныеСведения.Сведения); + + Если ЗагружатьИсториюИзменений Тогда ЗагрузитьИсториюАдресныхОбъектов(СубъектРФ, КаталогФайлов, СлужебныеАдресныеСведения.Сведения); ЗагрузитьПричиныИзмененияАдреса(СубъектРФ, КаталогФайлов, СлужебныеАдресныеСведения.Сведения); - ЗагрузитьДополнительныеСведения(СубъектРФ, КаталогФайлов, СлужебныеАдресныеСведения.Сведения); - ЗагрузитьАдресныеОриентиры(СубъектРФ, КаталогФайлов, СлужебныеАдресныеСведения.Сведения); - - // Ставим версию данных загрузки региона. - УстановитьИнформациюОЗагрузкеВерсии(СубъектРФ, СлужебныеАдресныеСведения.Версия, СлужебныеАдресныеСведения.ДатаВерсии, ДатаЗагрузки); КонецЕсли; + ЗагрузитьДополнительныеСведения(СубъектРФ, КаталогФайлов, СлужебныеАдресныеСведения.Сведения, ЗагружатьИсториюИзменений); + + // Ставим версию данных загрузки региона. + УстановитьИнформациюОЗагрузкеВерсии(СубъектРФ, СлужебныеАдресныеСведения.Версия, СлужебныеАдресныеСведения.ДатаВерсии, ДатаЗагрузки); + Исключение // Во время загрузки возникла ошибка, очищаем частично загруженные данные. КодыСубъектаРФ = Новый Массив; @@ -1582,14 +1616,8 @@ ВызватьИсключение; КонецПопытки; - // Очищаем загруженные данные в старом классификаторе. - ОчиститьСведенияУстаревшегоКлассификатора(СубъектРФ); - КонецЦикла; - // 3. Обновляем список субъектов РФ - убеждаемся, что у нас есть все корневые записи. - РегистрыСведений.АдресныеОбъекты.ОбновитьСоставСубъектовРФПоКлассификатору(); - // 4. Загружаем сокращения адресов. // Эти данные будут нужны при разборах адреса из строки. АдресныеСокращения = АдресныеСокращения(КаталогФайлов); @@ -1697,22 +1725,22 @@ КонецЕсли; МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); - Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта("РегистрСведений.АдресныеОбъекты"); - Если Разделы.Количество() = 0 Тогда - // Не вынесены в командный интерфейс. - РазделАдминистрирование = Метаданные.Подсистемы.Найти("Администрирование"); - Если РазделАдминистрирование = Неопределено Тогда - Возврат; - КонецЕсли; - Разделы.Добавить(РазделАдминистрирование); + Подсистема = Метаданные.Подсистемы.Найти("Администрирование"); + Если Подсистема = Неопределено + Или Не ПравоДоступа("Просмотр", Подсистема) + Или Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(Подсистема) Тогда + Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта("РегистрСведений.АдресныеОбъекты"); + Иначе + Разделы = Новый Массив; + Разделы.Добавить(Подсистема); КонецЕсли; // 1. Необходимость актуализировать адресный классификатор - в старом классификаторе больше нет записей о регионах. - КоличествоРегионов = ЗаполненныеРегионыУстаревшегоКлассификатора().Количество(); + УстаревшийКлассификатор = ЗаполненныеРегионыУстаревшегоКлассификатора(); Для Каждого Раздел Из Разделы Цикл Дело = ТекущиеДела.Добавить(); Дело.Идентификатор = "АктуализацияАдресногоКлассификатора"; - Дело.ЕстьДела = ?(КоличествоРегионов > 0, Истина, Ложь); + Дело.ЕстьДела = УстаревшийКлассификатор; Дело.Важное = Истина; Дело.СкрыватьВНастройках = Истина; Дело.Владелец = Раздел; @@ -1749,6 +1777,223 @@ #Область СлужебныеПроцедурыИФункции +// Локальная проверка одного адреса. +// +Процедура УстановитьИдентификаторыАдресаПоЗагруженнымДанным(Адрес) + + Запрос = Новый Запрос(); + + Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 20 + | АдресныеОбъектыУровень0.Наименование КАК НаименованиеУровень0, + | АдресныеОбъектыУровень0.Сокращение КАК СокращениеУровень0, + | АдресныеОбъектыУровень0.Идентификатор КАК ИдентификаторУровень0, + | АдресныеОбъектыУровень0.ДополнительныеАдресныеСведения КАК ДополнительныеСведения0, + | АдресныеОбъектыУровень1.Наименование КАК НаименованиеУровень1, + | АдресныеОбъектыУровень1.Сокращение КАК СокращениеУровень1, + | АдресныеОбъектыУровень1.Идентификатор КАК ИдентификаторУровень1, + | АдресныеОбъектыУровень1.ДополнительныеАдресныеСведения КАК ДополнительныеСведения1, + | АдресныеОбъектыУровень2.Наименование КАК НаименованиеУровень2, + | АдресныеОбъектыУровень2.Сокращение КАК СокращениеУровень2, + | АдресныеОбъектыУровень2.Идентификатор КАК ИдентификаторУровень2, + | АдресныеОбъектыУровень2.ДополнительныеАдресныеСведения КАК ДополнительныеСведения2, + | АдресныеОбъектыУровень3.Наименование КАК НаименованиеУровень3, + | АдресныеОбъектыУровень3.Сокращение КАК СокращениеУровень3, + | АдресныеОбъектыУровень3.Идентификатор КАК ИдентификаторУровень3, + | АдресныеОбъектыУровень3.ДополнительныеАдресныеСведения КАК ДополнительныеСведения3, + | АдресныеОбъектыУровень4.Наименование КАК НаименованиеУровень4, + | АдресныеОбъектыУровень4.Сокращение КАК СокращениеУровень4, + | АдресныеОбъектыУровень4.Идентификатор КАК ИдентификаторУровень4, + | АдресныеОбъектыУровень4.ДополнительныеАдресныеСведения КАК ДополнительныеСведения4, + | АдресныеОбъектыУровень5.Наименование КАК НаименованиеУровень5, + | АдресныеОбъектыУровень5.Сокращение КАК СокращениеУровень5, + | АдресныеОбъектыУровень5.Идентификатор КАК ИдентификаторУровень5, + | АдресныеОбъектыУровень5.ДополнительныеАдресныеСведения КАК ДополнительныеСведения5, + | ВЫБОР + | КОГДА НЕ АдресныеОбъектыУровень5.Идентификатор ЕСТЬ NULL + | ТОГДА АдресныеОбъектыУровень5.Идентификатор + | ИНАЧЕ ВЫБОР + | КОГДА НЕ АдресныеОбъектыУровень4.Идентификатор ЕСТЬ NULL + | ТОГДА АдресныеОбъектыУровень4.Идентификатор + | ИНАЧЕ ВЫБОР + | КОГДА НЕ АдресныеОбъектыУровень3.Идентификатор ЕСТЬ NULL + | ТОГДА АдресныеОбъектыУровень3.Идентификатор + | ИНАЧЕ ВЫБОР + | КОГДА НЕ АдресныеОбъектыУровень2.Идентификатор ЕСТЬ NULL + | ТОГДА АдресныеОбъектыУровень2.Идентификатор + | ИНАЧЕ ВЫБОР + | КОГДА НЕ АдресныеОбъектыУровень1.Идентификатор ЕСТЬ NULL + | ТОГДА АдресныеОбъектыУровень1.Идентификатор + | ИНАЧЕ ВЫБОР + | КОГДА НЕ АдресныеОбъектыУровень0.Идентификатор ЕСТЬ NULL + | ТОГДА АдресныеОбъектыУровень0.Идентификатор + | ИНАЧЕ АдресныеОбъектыУровень0.Идентификатор + | КОНЕЦ + | КОНЕЦ + | КОНЕЦ + | КОНЕЦ + | КОНЕЦ + | КОНЕЦ КАК Идентификатор + |ПОМЕСТИТЬ АдресныеОбъекты + |ИЗ + | РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень0 + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень1 + | ПО (АдресныеОбъектыУровень0.Идентификатор = АдресныеОбъектыУровень1.РодительскийИдентификатор) + | И (АдресныеОбъектыУровень1.Наименование = &Наименование1) + | И (АдресныеОбъектыУровень1.Сокращение = &Сокращение1) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень2 + | ПО (АдресныеОбъектыУровень1.Идентификатор = АдресныеОбъектыУровень2.РодительскийИдентификатор) + | И (АдресныеОбъектыУровень2.Наименование = &Наименование2) + | И (АдресныеОбъектыУровень2.Сокращение = &Сокращение2) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень3 + | ПО (АдресныеОбъектыУровень2.Идентификатор = АдресныеОбъектыУровень3.РодительскийИдентификатор) + | И (АдресныеОбъектыУровень3.Наименование = &Наименование3) + | И (АдресныеОбъектыУровень3.Сокращение = &Сокращение3) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень4 + | ПО (АдресныеОбъектыУровень3.Идентификатор = АдресныеОбъектыУровень4.РодительскийИдентификатор) + | И (АдресныеОбъектыУровень4.Наименование = &Наименование4) + | И (АдресныеОбъектыУровень4.Сокращение = &Сокращение4) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень5 + | ПО (АдресныеОбъектыУровень4.Идентификатор = АдресныеОбъектыУровень5.РодительскийИдентификатор) + | И (АдресныеОбъектыУровень5.Наименование = &Наименование5) + | И (АдресныеОбъектыУровень5.Сокращение = &Сокращение5) + |ГДЕ + | АдресныеОбъектыУровень0.Наименование = &Наименование0 + | И АдресныеОбъектыУровень0.Сокращение = &Сокращение0 + | И АдресныеОбъектыУровень0.Уровень = 1 + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ ПЕРВЫЕ 50 + | ДомаЗданияСтроения.АдресныйОбъект КАК АдресныйОбъект, + | ДомаЗданияСтроения.КодСубъектаРФ КАК КодСубъектаРФ, + | ДомаЗданияСтроения.ДополнительныеАдресныеСведения КАК ДополнительныеАдресныеСведения, + | ДомаЗданияСтроения.Строения КАК Строения, + | АдресныеОбъекты.Идентификатор КАК Идентификатор + |ИЗ + | АдресныеОбъекты КАК АдресныеОбъекты + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДомаЗданияСтроения КАК ДомаЗданияСтроения + | ПО ДомаЗданияСтроения.АдресныйОбъект = АдресныеОбъекты.Идентификатор + |"; + + Если АдресныйКлассификаторКлиентСервер.ЭтоМуниципальныйАдрес(Адрес.AddressType) Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, ".РодительскийИдентификатор", ".МуниципальныйРодительскийИдентификатор"); + КонецЕсли; + + ИменаУровнейАдреса = АдресныйКлассификаторКлиентСервер.ИменаУровнейАдреса(Адрес.AddressType, Истина); + АдресныеСведенияДляЗапроса = Новый Массив; + + Счетчик = 0; + КакиеУровниПроверять = Новый Соответствие; + + Для каждого УровеньАдреса Из ИменаУровнейАдреса Цикл + + Если ЗначениеЗаполнено(Адрес[УровеньАдреса]) Тогда + + Запрос.УстановитьПараметр("Наименование" + Строка(Счетчик), Адрес[УровеньАдреса]); + Запрос.УстановитьПараметр("Сокращение" + Строка(Счетчик), Адрес[УровеньАдреса + "Type"]); + КакиеУровниПроверять.Вставить(УровеньАдреса, Счетчик); + Счетчик = Счетчик + 1; + + КонецЕсли; + + КонецЦикла; + + // Заполняем пустые адресные сведения + Для ИндексСчетчик = Счетчик По 5 Цикл + Запрос.УстановитьПараметр("Наименование" + Строка(ИндексСчетчик), ""); + Запрос.УстановитьПараметр("Сокращение" + Строка(ИндексСчетчик), ""); + КонецЦикла; + + РезультатЗапроса = Запрос.ВыполнитьПакетСПромежуточнымиДанными(); + Адреса = РезультатЗапроса[0]; + Дома = РезультатЗапроса[1]; + + СписокКорректныхАдресов = Новый Массив; + Если Адреса.Пустой() Тогда + Возврат; + КонецЕсли; + + ПолученныйАдрес = Адреса.Выгрузить()[0]; + ИдентификаторАдресногоОбъекта = Неопределено; + МаксимальныйУровень = -1; + Для каждого Уровни Из КакиеУровниПроверять Цикл + НайденныйИдентификатор = ПолученныйАдрес["ИдентификаторУровень" + Уровни.Значение]; + Если ЗначениеЗаполнено(НайденныйИдентификатор) Тогда + Адрес[Уровни.Ключ + "Id"] = НайденныйИдентификатор; + Если МаксимальныйУровень < Уровни.Значение Тогда + ИдентификаторАдресногоОбъекта = НайденныйИдентификатор; + МаксимальныйУровень = Уровни.Значение; + КонецЕсли; + Иначе + Адрес[Уровни.Ключ + "Id"] = ""; + КонецЕсли; + + КонецЦикла; + Адрес["id"] = ИдентификаторАдресногоОбъекта; + + Если Не ЗначениеЗаполнено(ИдентификаторАдресногоОбъекта) Тогда + Возврат; + КонецЕсли; + + // Проверяем дома + + СведенияОДоме = СведенияОДоме(); + + СведенияОДоме.НомерДома = Адрес.HouseNumber; + СведенияОДоме.ТипДома = ?(ЗначениеЗаполнено(СведенияОДоме.НомерДома), Адрес.HouseType, ""); + + Для каждого ОписаниеСтроения Из Адрес.Buildings Цикл + Если СтрСравнить(ОписаниеСтроения.Type, "Корпус") = 0 Тогда + СведенияОДоме.НомерКорпуса = ОписаниеСтроения.Number; + Иначе + СведенияОДоме.НомерСтроения = ОписаниеСтроения.Number; + СведенияОДоме.ТипСтроения = ОписаниеСтроения.Type; + КонецЕсли; + КонецЦикла; + + Если Дома.Пустой() Тогда + Возврат; + КонецЕсли; + + Результат = НайтиСтрокуСДомом(Дома.Выгрузить(), СведенияОДоме); + Если Результат <> Неопределено Тогда + Адрес.HouseID = Результат.ИдентификаторДома; + КонецЕсли; + +КонецПроцедуры + +Процедура УстановитьИдентификаторыАдресаЧерезВебСервис(Адрес) + + Результат = Новый Структура("Данные", Новый Массив); + СтруктураОписанияОшибкиПоставщика(Результат); + АдресаДляПроверки = Новый Структура("Адрес", Адрес); + + ЗаполнитьРезультатПроверкиАдресаПоКлассификаторуСервис1С(Результат, АдресаДляПроверки); + + Если Результат.Отказ = Ложь Тогда + + Если Результат.Данные.Количество() > 0 И Результат.Данные[0].АдресПроверен Тогда + + Если Результат.Данные[0].Варианты.Количество() > 0 Тогда + + АдресИзСервиса = Результат.Данные[0].Варианты[0]; + Для каждого КлючЗначение Из Адрес Цикл + + Если СтрЗаканчиваетсяНа(ВРег(КлючЗначение.Ключ), "ID") Тогда + Адрес[КлючЗначение.Ключ] = ?(АдресИзСервиса.Свойство(КлючЗначение.Ключ), + АдресИзСервиса[КлючЗначение.Ключ], ""); + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + // Начальное заполнение данных адресного классификатора при первом запуске. // Процедура ВыполнитьНачальноеЗаполнение() Экспорт @@ -1757,12 +2002,6 @@ КонецПроцедуры -// Заполнение данных для проверки версии по загружаемым данным. -// -Процедура ЗаполнитьВерсиюПоставщикаДанныхВнутр(Результат) - Результат.Данные = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'БСП %1'"), СтандартныеПодсистемыСервер.ВерсияБиблиотеки()); -КонецПроцедуры - // Конструктор таблицы - результата выбора по почтовому индексу. // Функция ТаблицаДанныхДляВыбораПоПочтовомуИндексу() @@ -1780,24 +2019,6 @@ Возврат Данные; КонецФункции -// Конструктор таблицы - результата автоподбора. -// -Функция ТаблицаДанныхАвтоподбора() - - ТипБулево = Новый ОписаниеТипов("Булево"); - Данные = Новый ТаблицаЗначений; - Колонки = Данные.Колонки; - - Колонки.Добавить("Неактуален", ТипБулево); - Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("УникальныйИдентификатор")); - Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); - Колонки.Добавить("РегионЗагружен", ТипБулево); - Колонки.Добавить("Уровень", Новый ОписаниеТипов("Число")); - Колонки.Добавить("ТипАдресногоЭлемента", Новый ОписаниеТипов("Строка")); - - Возврат Данные -КонецФункции - Функция ОпределитьИдентификаторыАдреса(АдресДляПроверки) Экспорт Результат = Новый Структура("Отказ, ИдентификаторАдресногоОбъекта, ИдентификаторДома, ПодробноеПредставлениеОшибки, КраткоеПредставлениеОшибки", Ложь); @@ -1819,7 +2040,7 @@ Данные = Результат.Данные; Для Каждого ЭлементПроверки Из АдресаДляПроверки Цикл - ОдиночнаяПроверка = АнализОдногоАдресаПоКлассификатору(ЭлементПроверки.Адрес, ЭлементПроверки.Уровни); + ОдиночнаяПроверка = АнализОдногоАдресаПоКлассификатору(ЭлементПроверки.Адрес); Данные.Добавить(ОдиночнаяПроверка); КонецЦикла; @@ -1827,1363 +2048,1022 @@ // Заполнение актуальных данных адресного объекта или ориентира из загруженных данных. // -Процедура ЗаполнитьАктуальныеАдресныеСведенияВнутр(Результат, Идентификатор) +Процедура ЗаполнитьАктуальныеАдресныеСведенияВнутр(Результат, Значение) - ТекстЗапроса = "ВЫБРАТЬ - | СубъектРФ.Наименование + "" "" + СубъектРФ.Сокращение КАК СубъектРФПредставление, - | Округ.Наименование + "" "" + Округ.Сокращение КАК ОкругПредставление, - | Район.Наименование + "" "" + Район.Сокращение КАК РайонПредставление, - | Город.Наименование + "" "" + Город.Сокращение КАК ГородПредставление, - | ВнутригородскойРайон.Наименование + "" "" + ВнутригородскойРайон.Сокращение КАК ВнутригородскойРайонПредставление, - | НаселенныйПункт.Наименование + "" "" + НаселенныйПункт.Сокращение КАК НаселенныйПунктПредставление, - | Улица.Наименование + "" "" + Улица.Сокращение КАК УлицаПредставление, - | Дополнительный.Наименование + "" "" + Дополнительный.Сокращение КАК ДополнительныйПредставление, - | Подчиненный.Наименование + "" "" + Подчиненный.Сокращение КАК ПодчиненныйПредставление, - | - | ОбъектАдреса.ОписаниеОриентира КАК ОписаниеОриентира, - | - | ОбъектАдреса.ПочтовыйИндекс КАК ПочтовыйИндекс, - | ДополнительныеДанные.OKATO КАК ОКАТО, - | ДополнительныеДанные.ОКТМО КАК ОКТМО, - | - | СлужебныеАдресныеСведенияИндекс.Значение КАК ТипАдрЭлПочтовыйИндекс, - | ЕСТЬNULL(СлужебныеАдресныеСведенияДополнительный.Значение, УмолчаниеСлужебныхАдресныхСведенийДополнительный.Значение) КАК ТипАдрЭлДополнительный, - | ЕСТЬNULL(СлужебныеАдресныеСведенияПодчиненный.Значение, УмолчаниеСлужебныхАдресныхСведенийПодчиненный.Значение) КАК ТипАдрЭлПодчиненный - | - |ИЗ ( - | ВЫБРАТЬ - | КодСубъектаРФ КАК КодСубъектаРФ, - | КодОкруга КАК КодОкруга, - | КодРайона КАК КодРайона, - | КодГорода КАК КодГорода, - | КодВнутригородскогоРайона КАК КодВнутригородскогоРайона, - | КодНаселенногоПункта КАК КодНаселенногоПункта, - | КодУлицы КАК КодУлицы, - | КодДополнительногоЭлемента КАК КодДополнительногоЭлемента, - | КодПодчиненногоЭлемента КАК КодПодчиненногоЭлемента, - | ПочтовыйИндекс КАК ПочтовыйИндекс, - | Дополнительно КАК Дополнительно, - | NULL КАК ОписаниеОриентира - | ИЗ - | РегистрСведений.АдресныеОбъекты - | ГДЕ - | Идентификатор = &Идентификатор - | ОБЪЕДИНИТЬ ВСЕ - | ВЫБРАТЬ - | РегистрАдресныйОбъект.КодСубъектаРФ КАК КодСубъектаРФ, - | РегистрАдресныйОбъект.КодОкруга КАК КодОкруга, - | РегистрАдресныйОбъект.КодРайона КАК КодРайона, - | РегистрАдресныйОбъект.КодГорода КАК КодГорода, - | РегистрАдресныйОбъект.КодВнутригородскогоРайона КАК КодВнутригородскогоРайона, - | РегистрАдресныйОбъект.КодНаселенногоПункта КАК КодНаселенногоПункта, - | РегистрАдресныйОбъект.КодУлицы КАК КодУлицы, - | РегистрАдресныйОбъект.КодДополнительногоЭлемента КАК КодДополнительногоЭлемента, - | РегистрАдресныйОбъект.КодПодчиненногоЭлемента КАК КодПодчиненногоЭлемента, - | Ориентир.ПочтовыйИндекс КАК ПочтовыйИндекс, - | Ориентир.Дополнительно КАК Дополнительно, - | Ориентир.Описание КАК ОписаниеОриентира - | ИЗ - | РегистрСведений.ОриентирыАдресныхОбъектов КАК Ориентир - | ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК РегистрАдресныйОбъект - | ПО - | РегистрАдресныйОбъект.Идентификатор = Ориентир.АдресныйОбъект - | ГДЕ - | Ориентир.Идентификатор = &Идентификатор - | - |) КАК ОбъектАдреса - | - |// Иерархия объекта - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК СубъектРФ - |ПО - | СубъектРФ.Уровень = 1 - | И СубъектРФ.КодСубъектаРФ = ОбъектАдреса.КодСубъектаРФ - | И СубъектРФ.КодОкруга = 0 - | И СубъектРФ.КодРайона = 0 - | И СубъектРФ.КодГорода = 0 - | И СубъектРФ.КодВнутригородскогоРайона = 0 - | И СубъектРФ.КодНаселенногоПункта = 0 - | И СубъектРФ.КодУлицы = 0 - | И СубъектРФ.КодДополнительногоЭлемента = 0 - | И СубъектРФ.КодПодчиненногоЭлемента = 0 - | - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК Округ - |ПО - | Округ.Уровень = 2 - | И Округ.КодСубъектаРФ = ОбъектАдреса.КодСубъектаРФ - | И Округ.КодОкруга = ОбъектАдреса.КодОкруга - | И Округ.КодРайона = 0 - | И Округ.КодГорода = 0 - | И Округ.КодВнутригородскогоРайона = 0 - | И Округ.КодНаселенногоПункта = 0 - | И Округ.КодУлицы = 0 - | И Округ.КодДополнительногоЭлемента = 0 - | И Округ.КодПодчиненногоЭлемента = 0 - | - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК Район - |ПО - | Район.Уровень = 3 - | И Район.КодСубъектаРФ = ОбъектАдреса.КодСубъектаРФ - | И Район.КодОкруга = ОбъектАдреса.КодОкруга - | И Район.КодРайона = ОбъектАдреса.КодРайона - | И Район.КодГорода = 0 - | И Район.КодВнутригородскогоРайона = 0 - | И Район.КодНаселенногоПункта = 0 - | И Район.КодУлицы = 0 - | И Район.КодДополнительногоЭлемента = 0 - | И Район.КодПодчиненногоЭлемента = 0 - | - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК Город - |ПО - | Город.Уровень = 4 - | И Город.КодСубъектаРФ = ОбъектАдреса.КодСубъектаРФ - | И Город.КодОкруга = ОбъектАдреса.КодОкруга - | И Город.КодРайона = ОбъектАдреса.КодРайона - | И Город.КодГорода = ОбъектАдреса.КодГорода - | И Город.КодВнутригородскогоРайона = 0 - | И Город.КодНаселенногоПункта = 0 - | И Город.КодУлицы = 0 - | И Город.КодДополнительногоЭлемента = 0 - | И Город.КодПодчиненногоЭлемента = 0 - | - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК ВнутригородскойРайон - |ПО - | ВнутригородскойРайон.Уровень = 5 - | И ВнутригородскойРайон.КодСубъектаРФ = ОбъектАдреса.КодСубъектаРФ - | И ВнутригородскойРайон.КодОкруга = ОбъектАдреса.КодОкруга - | И ВнутригородскойРайон.КодРайона = ОбъектАдреса.КодРайона - | И ВнутригородскойРайон.КодГорода = ОбъектАдреса.КодГорода - | И ВнутригородскойРайон.КодВнутригородскогоРайона = ОбъектАдреса.КодВнутригородскогоРайона - | И ВнутригородскойРайон.КодНаселенногоПункта = 0 - | И ВнутригородскойРайон.КодУлицы = 0 - | И ВнутригородскойРайон.КодДополнительногоЭлемента = 0 - | И ВнутригородскойРайон.КодПодчиненногоЭлемента = 0 - | - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК НаселенныйПункт - |ПО - | НаселенныйПункт.Уровень = 6 - | И НаселенныйПункт.КодСубъектаРФ = ОбъектАдреса.КодСубъектаРФ - | И НаселенныйПункт.КодОкруга = ОбъектАдреса.КодОкруга - | И НаселенныйПункт.КодРайона = ОбъектАдреса.КодРайона - | И НаселенныйПункт.КодГорода = ОбъектАдреса.КодГорода - | И НаселенныйПункт.КодВнутригородскогоРайона = ОбъектАдреса.КодВнутригородскогоРайона - | И НаселенныйПункт.КодНаселенногоПункта = ОбъектАдреса.КодНаселенногоПункта - | И НаселенныйПункт.КодУлицы = 0 - | И НаселенныйПункт.КодДополнительногоЭлемента = 0 - | И НаселенныйПункт.КодПодчиненногоЭлемента = 0 - | - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК Улица - |ПО - | Улица.Уровень = 7 - | И Улица.КодСубъектаРФ = ОбъектАдреса.КодСубъектаРФ - | И Улица.КодОкруга = ОбъектАдреса.КодОкруга - | И Улица.КодРайона = ОбъектАдреса.КодРайона - | И Улица.КодГорода = ОбъектАдреса.КодГорода - | И Улица.КодВнутригородскогоРайона = ОбъектАдреса.КодВнутригородскогоРайона - | И Улица.КодНаселенногоПункта = ОбъектАдреса.КодНаселенногоПункта - | И Улица.КодУлицы = ОбъектАдреса.КодУлицы - | И Улица.КодДополнительногоЭлемента = 0 - | И Улица.КодПодчиненногоЭлемента = 0 - | - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК Дополнительный - |ПО - | Дополнительный.Уровень = 90 - | И Дополнительный.КодСубъектаРФ = ОбъектАдреса.КодСубъектаРФ - | И Дополнительный.КодОкруга = ОбъектАдреса.КодОкруга - | И Дополнительный.КодРайона = ОбъектАдреса.КодРайона - | И Дополнительный.КодГорода = ОбъектАдреса.КодГорода - | И Дополнительный.КодВнутригородскогоРайона = ОбъектАдреса.КодВнутригородскогоРайона - | И Дополнительный.КодНаселенногоПункта = ОбъектАдреса.КодНаселенногоПункта - | И Дополнительный.КодУлицы = ОбъектАдреса.КодУлицы - | И Дополнительный.КодДополнительногоЭлемента = ОбъектАдреса.КодДополнительногоЭлемента - | И Дополнительный.КодПодчиненногоЭлемента = 0 - | - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК Подчиненный - |ПО - | Подчиненный.Уровень = 91 - | И Подчиненный.КодСубъектаРФ = ОбъектАдреса.КодСубъектаРФ - | И Подчиненный.КодОкруга = ОбъектАдреса.КодОкруга - | И Подчиненный.КодРайона = ОбъектАдреса.КодРайона - | И Подчиненный.КодГорода = ОбъектАдреса.КодГорода - | И Подчиненный.КодВнутригородскогоРайона = ОбъектАдреса.КодВнутригородскогоРайона - | И Подчиненный.КодНаселенногоПункта = ОбъектАдреса.КодНаселенногоПункта - | И Подчиненный.КодУлицы = ОбъектАдреса.КодУлицы - | И Подчиненный.КодДополнительногоЭлемента = ОбъектАдреса.КодДополнительногоЭлемента - | И Подчиненный.КодПодчиненногоЭлемента = ОбъектАдреса.КодПодчиненногоЭлемента - | - |// Дополнительные данные - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.ДополнительныеАдресныеСведения КАК ДополнительныеДанные - |ПО - | ДополнительныеДанные.Идентификатор = ОбъектАдреса.Дополнительно - | - |// Значения типов для контактной информации - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.СлужебныеАдресныеСведения КАК СлужебныеАдресныеСведенияИндекс - |ПО - | СлужебныеАдресныеСведенияИндекс.Тип = ""ТипАдрЭл"" - | И СлужебныеАдресныеСведенияИндекс.Идентификатор = 0 - | И СлужебныеАдресныеСведенияИндекс.Ключ = ""ПочтовыйИндекс"" - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.СлужебныеАдресныеСведения КАК СлужебныеАдресныеСведенияДополнительный - |ПО - | СлужебныеАдресныеСведенияДополнительный.Тип = ""ТипАдрЭл"" - | И СлужебныеАдресныеСведенияДополнительный.Идентификатор = 90 - | И СлужебныеАдресныеСведенияДополнительный.Ключ = Дополнительный.Сокращение - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.СлужебныеАдресныеСведения КАК СлужебныеАдресныеСведенияПодчиненный - |ПО - | СлужебныеАдресныеСведенияПодчиненный.Тип = ""ТипАдрЭл"" - | И СлужебныеАдресныеСведенияПодчиненный.Идентификатор = 91 - | И СлужебныеАдресныеСведенияПодчиненный.Ключ = Подчиненный.Сокращение - | - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.СлужебныеАдресныеСведения КАК УмолчаниеСлужебныхАдресныхСведенийДополнительный - |ПО - | СлужебныеАдресныеСведенияДополнительный.Тип = ""ТипАдрЭл"" - | И СлужебныеАдресныеСведенияДополнительный.Идентификатор = 90 - | И СлужебныеАдресныеСведенияДополнительный.Ключ = """" - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.СлужебныеАдресныеСведения КАК УмолчаниеСлужебныхАдресныхСведенийПодчиненный - |ПО - | СлужебныеАдресныеСведенияПодчиненный.Тип = ""ТипАдрЭл"" - | И СлужебныеАдресныеСведенияПодчиненный.Идентификатор = 91 - | И СлужебныеАдресныеСведенияПодчиненный.Ключ = """""; - - // Пустой адрес - Адрес = ФабрикаXDTO.Создать( ФабрикаXDTO.Тип(ПространствоИменАдресаРФ(), "АдресРФ") ); - Результат.Данные = Адрес; - - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("Идентификатор", Новый УникальныйИдентификатор(Идентификатор)); - Выборка = Запрос.Выполнить().Выбрать(); - Если Не Выборка.Следующий() Тогда + Если НЕ ЗначениеЗаполнено(Значение.Идентификатор) Тогда Возврат; КонецЕсли; - УстановитьXDTOРеквизитОбъекта(Адрес, "СубъектРФ", Выборка.СубъектРФПредставление); - УстановитьXDTOРеквизитОбъекта(Адрес, "Округ", Выборка.ОкругПредставление); - УстановитьXDTOРеквизитОбъекта(Адрес, "СвРайМО/Район", Выборка.РайонПредставление); - УстановитьXDTOРеквизитОбъекта(Адрес, "Город", Выборка.ГородПредставление); - УстановитьXDTOРеквизитОбъекта(Адрес, "НаселПункт", Выборка.НаселенныйПунктПредставление); - УстановитьXDTOРеквизитОбъекта(Адрес, "ВнутригРайон", Выборка.ВнутригородскойРайонПредставление); - УстановитьXDTOРеквизитОбъекта(Адрес, "Улица", Выборка.УлицаПредставление); - УстановитьXDTOРеквизитОбъекта(Адрес, "ОКАТО", Выборка.ОКАТО); - УстановитьXDTOРеквизитОбъекта(Адрес, "ОКТМО", Выборка.ОКТМО); - УстановитьXDTOРеквизитОбъекта(Адрес, "Местоположение", Выборка.ОписаниеОриентира); + ТекстЗапроса = "ВЫБРАТЬ ПЕРВЫЕ 1 + | &ПредставлениеМуниципальный КАК ТипАдреса, + | ВЫБОР + | КОГДА НЕ АдресныеОбъектыУровень5.Наименование ЕСТЬ NULL + | ТОГДА АдресныеОбъектыУровень5.Наименование + "" "" + АдресныеОбъектыУровень5.Сокращение + "", "" + | ИНАЧЕ """" + | КОНЕЦ + ВЫБОР + | КОГДА НЕ АдресныеОбъектыУровень4.Наименование ЕСТЬ NULL + | ТОГДА АдресныеОбъектыУровень4.Наименование + "" "" + АдресныеОбъектыУровень4.Сокращение + "", "" + | ИНАЧЕ """" + | КОНЕЦ + ВЫБОР + | КОГДА НЕ АдресныеОбъектыУровень3.Наименование ЕСТЬ NULL + | ТОГДА АдресныеОбъектыУровень3.Наименование + "" "" + АдресныеОбъектыУровень3.Сокращение + "", "" + | ИНАЧЕ """" + | КОНЕЦ + ВЫБОР + | КОГДА НЕ АдресныеОбъектыУровень2.Наименование ЕСТЬ NULL + | ТОГДА АдресныеОбъектыУровень2.Наименование + "" "" + АдресныеОбъектыУровень2.Сокращение + "", "" + | ИНАЧЕ """" + | КОНЕЦ + ВЫБОР + | КОГДА НЕ АдресныеОбъектыУровень1.Наименование ЕСТЬ NULL + | ТОГДА АдресныеОбъектыУровень1.Наименование + "" "" + АдресныеОбъектыУровень1.Сокращение + "", "" + | ИНАЧЕ """" + | КОНЕЦ + АдресныеОбъектыУровень0.Наименование + "" "" + АдресныеОбъектыУровень0.Сокращение КАК Представление, + | ЕСТЬNULL(АдресныеОбъектыУровень0.Наименование, """") КАК НаименованиеУровень0, + | ЕСТЬNULL(АдресныеОбъектыУровень0.Сокращение, """") КАК СокращениеУровень0, + | ЕСТЬNULL(АдресныеОбъектыУровень0.Идентификатор, """") КАК ИдентификаторУровень0, + | АдресныеОбъектыУровень0.КодСубъектаРФ КАК КодСубъектаРФ, + | АдресныеОбъектыУровень0.КодКЛАДР КАК КодКЛАДР, + | АдресныеОбъектыУровень0.ДополнительныеАдресныеСведения КАК ДополнительныеАдресныеСведения, + | АдресныеОбъектыУровень0.Уровень КАК Уровень0, + | ЕСТЬNULL(АдресныеОбъектыУровень1.Наименование, """") КАК НаименованиеУровень1, + | ЕСТЬNULL(АдресныеОбъектыУровень1.Сокращение, """") КАК СокращениеУровень1, + | ЕСТЬNULL(АдресныеОбъектыУровень1.Идентификатор, """") КАК ИдентификаторУровень1, + | АдресныеОбъектыУровень1.Уровень КАК Уровень1, + | ЕСТЬNULL(АдресныеОбъектыУровень2.Наименование, """") КАК НаименованиеУровень2, + | ЕСТЬNULL(АдресныеОбъектыУровень2.Сокращение, """") КАК СокращениеУровень2, + | ЕСТЬNULL(АдресныеОбъектыУровень2.Идентификатор, """") КАК ИдентификаторУровень2, + | АдресныеОбъектыУровень2.Уровень КАК Уровень2, + | ЕСТЬNULL(АдресныеОбъектыУровень3.Наименование, """") КАК НаименованиеУровень3, + | ЕСТЬNULL(АдресныеОбъектыУровень3.Сокращение, """") КАК СокращениеУровень3, + | ЕСТЬNULL(АдресныеОбъектыУровень3.Идентификатор, """") КАК ИдентификаторУровень3, + | АдресныеОбъектыУровень3.Уровень КАК Уровень3, + | ЕСТЬNULL(АдресныеОбъектыУровень4.Наименование, """") КАК НаименованиеУровень4, + | ЕСТЬNULL(АдресныеОбъектыУровень4.Сокращение, """") КАК СокращениеУровень4, + | ЕСТЬNULL(АдресныеОбъектыУровень4.Идентификатор, """") КАК ИдентификаторУровень4, + | АдресныеОбъектыУровень4.Уровень КАК Уровень4, + | ЕСТЬNULL(АдресныеОбъектыУровень5.Наименование, """") КАК НаименованиеУровень5, + | ЕСТЬNULL(АдресныеОбъектыУровень5.Сокращение, """") КАК СокращениеУровень5, + | ЕСТЬNULL(АдресныеОбъектыУровень5.Идентификатор, """") КАК ИдентификаторУровень5, + | АдресныеОбъектыУровень5.Уровень КАК Уровень5, + | ЕСТЬNULL(ДополнительныеСведения.ПочтовыйИндекс, """") КАК ПочтовыйИндекс, + | ДополнительныеСведения.ОКТМО КАК ОКТМО, + | ДополнительныеСведения.OKATO КАК OKATO, + | ДополнительныеСведения.КодУчасткаИФНСЮЛ КАК КодУчасткаИФНСЮЛ, + | ДополнительныеСведения.КодУчасткаИФНСФЛ КАК КодУчасткаИФНСФЛ, + | ДополнительныеСведения.КодИФНСЮЛ КАК КодИФНСЮЛ, + | ДополнительныеСведения.КодИФНСФЛ КАК КодИФНСФЛ + |ИЗ + | РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень0 + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень1 + | ПО АдресныеОбъектыУровень0.МуниципальныйРодительскийИдентификатор = АдресныеОбъектыУровень1.Идентификатор + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень2 + | ПО (АдресныеОбъектыУровень1.МуниципальныйРодительскийИдентификатор = АдресныеОбъектыУровень2.Идентификатор) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень3 + | ПО (АдресныеОбъектыУровень2.МуниципальныйРодительскийИдентификатор = АдресныеОбъектыУровень3.Идентификатор) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень4 + | ПО (АдресныеОбъектыУровень3.МуниципальныйРодительскийИдентификатор = АдресныеОбъектыУровень4.Идентификатор) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень5 + | ПО (АдресныеОбъектыУровень4.МуниципальныйРодительскийИдентификатор = АдресныеОбъектыУровень5.Идентификатор) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеАдресныеСведения КАК ДополнительныеСведения + | ПО АдресныеОбъектыУровень0.ДополнительныеАдресныеСведения = ДополнительныеСведения.Идентификатор + |ГДЕ + | АдресныеОбъектыУровень0.Идентификатор = &Идентификатор + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ ПЕРВЫЕ 1 + | &ПредставлениеАдминистративный, + | ВЫБОР + | КОГДА НЕ АдресныеОбъектыУровень5.Наименование ЕСТЬ NULL + | ТОГДА АдресныеОбъектыУровень5.Наименование + "" "" + АдресныеОбъектыУровень5.Сокращение + "", "" + | ИНАЧЕ """" + | КОНЕЦ + ВЫБОР + | КОГДА НЕ АдресныеОбъектыУровень4.Наименование ЕСТЬ NULL + | ТОГДА АдресныеОбъектыУровень4.Наименование + "" "" + АдресныеОбъектыУровень4.Сокращение + "", "" + | ИНАЧЕ """" + | КОНЕЦ + ВЫБОР + | КОГДА НЕ АдресныеОбъектыУровень3.Наименование ЕСТЬ NULL + | ТОГДА АдресныеОбъектыУровень3.Наименование + "" "" + АдресныеОбъектыУровень3.Сокращение + "", "" + | ИНАЧЕ """" + | КОНЕЦ + ВЫБОР + | КОГДА НЕ АдресныеОбъектыУровень2.Наименование ЕСТЬ NULL + | ТОГДА АдресныеОбъектыУровень2.Наименование + "" "" + АдресныеОбъектыУровень2.Сокращение + "", "" + | ИНАЧЕ """" + | КОНЕЦ + ВЫБОР + | КОГДА НЕ АдресныеОбъектыУровень1.Наименование ЕСТЬ NULL + | ТОГДА АдресныеОбъектыУровень1.Наименование + "" "" + АдресныеОбъектыУровень1.Сокращение + "", "" + | ИНАЧЕ """" + | КОНЕЦ + АдресныеОбъектыУровень0.Наименование + "" "" + АдресныеОбъектыУровень0.Сокращение, + | ЕСТЬNULL(АдресныеОбъектыУровень0.Наименование, """"), + | ЕСТЬNULL(АдресныеОбъектыУровень0.Сокращение, """"), + | ЕСТЬNULL(АдресныеОбъектыУровень0.Идентификатор, """"), + | АдресныеОбъектыУровень0.КодСубъектаРФ, + | АдресныеОбъектыУровень0.КодКЛАДР, + | АдресныеОбъектыУровень0.ДополнительныеАдресныеСведения, + | АдресныеОбъектыУровень0.Уровень, + | ЕСТЬNULL(АдресныеОбъектыУровень1.Наименование, """"), + | ЕСТЬNULL(АдресныеОбъектыУровень1.Сокращение, """"), + | ЕСТЬNULL(АдресныеОбъектыУровень1.Идентификатор, """"), + | АдресныеОбъектыУровень1.Уровень, + | ЕСТЬNULL(АдресныеОбъектыУровень2.Наименование, """"), + | ЕСТЬNULL(АдресныеОбъектыУровень2.Сокращение, """"), + | ЕСТЬNULL(АдресныеОбъектыУровень2.Идентификатор, """"), + | АдресныеОбъектыУровень2.Уровень, + | ЕСТЬNULL(АдресныеОбъектыУровень3.Наименование, """"), + | ЕСТЬNULL(АдресныеОбъектыУровень3.Сокращение, """"), + | ЕСТЬNULL(АдресныеОбъектыУровень3.Идентификатор, """"), + | АдресныеОбъектыУровень3.Уровень, + | ЕСТЬNULL(АдресныеОбъектыУровень4.Наименование, """"), + | ЕСТЬNULL(АдресныеОбъектыУровень4.Сокращение, """"), + | ЕСТЬNULL(АдресныеОбъектыУровень4.Идентификатор, """"), + | АдресныеОбъектыУровень4.Уровень, + | ЕСТЬNULL(АдресныеОбъектыУровень5.Наименование, """"), + | ЕСТЬNULL(АдресныеОбъектыУровень5.Сокращение, """"), + | ЕСТЬNULL(АдресныеОбъектыУровень5.Идентификатор, """"), + | АдресныеОбъектыУровень5.Уровень, + | ЕСТЬNULL(ДополнительныеСведения.ПочтовыйИндекс, """"), + | ДополнительныеСведения.ОКТМО, + | ДополнительныеСведения.OKATO, + | ДополнительныеСведения.КодУчасткаИФНСЮЛ, + | ДополнительныеСведения.КодУчасткаИФНСФЛ, + | ДополнительныеСведения.КодИФНСЮЛ, + | ДополнительныеСведения.КодИФНСФЛ + |ИЗ + | РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень0 + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень1 + | ПО АдресныеОбъектыУровень0.РодительскийИдентификатор = АдресныеОбъектыУровень1.Идентификатор + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень2 + | ПО (АдресныеОбъектыУровень1.РодительскийИдентификатор = АдресныеОбъектыУровень2.Идентификатор) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень3 + | ПО (АдресныеОбъектыУровень2.РодительскийИдентификатор = АдресныеОбъектыУровень3.Идентификатор) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень4 + | ПО (АдресныеОбъектыУровень3.РодительскийИдентификатор = АдресныеОбъектыУровень4.Идентификатор) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень5 + | ПО (АдресныеОбъектыУровень4.РодительскийИдентификатор = АдресныеОбъектыУровень5.Идентификатор) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеАдресныеСведения КАК ДополнительныеСведения + | ПО АдресныеОбъектыУровень0.ДополнительныеАдресныеСведения = ДополнительныеСведения.Идентификатор + |ГДЕ + | АдресныеОбъектыУровень0.Идентификатор = &Идентификатор"; + Результат = ОписаниеАдреса(); - // Дополнительные свойства - ДобавитьXDTOРеквизитСписка(Адрес, "ДопАдрЭл", Новый Структура("ТипАдрЭл, Значение", Выборка.ТипАдрЭлПочтовыйИндекс, Выборка.ПочтовыйИндекс)); + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("ПредставлениеМуниципальный", АдресныйКлассификаторКлиентСервер.МуниципальныйАдрес()); + Запрос.УстановитьПараметр("ПредставлениеАдминистративный", АдресныйКлассификаторКлиентСервер.АдминистративноТерриториальныйАдрес()); + Запрос.УстановитьПараметр("Идентификатор", Новый УникальныйИдентификатор(Значение.Идентификатор)); - Если НЕ ПустаяСтрока(Выборка.ДополнительныйПредставление) Тогда - ДобавитьXDTOРеквизитСписка(Адрес, "ДопАдрЭл", Новый Структура("ТипАдрЭл, Значение", КодДополнительногоЭлемента(Выборка.ДополнительныйПредставление), - Выборка.ДополнительныйПредставление)); + РезультатЗапроса = Запрос.Выполнить(); + + Если РезультатЗапроса.Пустой() Тогда + Возврат; КонецЕсли; - ДобавитьXDTOРеквизитСписка(Адрес, "ДопАдрЭл", Новый Структура("ТипАдрЭл, Значение", "10400000", Выборка.ПодчиненныйПредставление)); + Выборка = РезультатЗапроса.Выгрузить(); + + Если Значение.Свойство("Муниципальный") Тогда + Результат["addressType"] = ?(Значение.Муниципальный, АдресныйКлассификаторКлиентСервер.МуниципальныйАдрес(), АдресныйКлассификаторКлиентСервер.АдминистративноТерриториальныйАдрес()); + Иначе + Результат["addressType"] = АдресныйКлассификаторКлиентСервер.МуниципальныйАдрес(); + КонецЕсли; + + Если Результат["addressType"] = АдресныйКлассификаторКлиентСервер.АдминистративноТерриториальныйАдрес() И Выборка.Количество() = 2 Тогда + СтрокаКодов = Выборка[1]; + Иначе + СтрокаКодов = Выборка[0]; + КонецЕсли; + + Результат.ZipCode = Формат(СтрокаКодов.ПочтовыйИндекс, "ЧГ=0"); + Результат.OKTMO = Формат(СтрокаКодов.ОКТМО, "ЧГ=0"); + Результат.OKATO = Формат(СтрокаКодов.OKATO, "ЧГ=0"); + Результат.IFNSULAreaCode = СтрокаКодов.КодУчасткаИФНСЮЛ; + Результат.IFNSFLAreaCode = СтрокаКодов.КодУчасткаИФНСФЛ; + Результат.IFNSULCode = СтрокаКодов.КодИФНСЮЛ; + Результат.IFNSFLCode = СтрокаКодов.КодИФНСФЛ; + + СловарьИменПолей = СловарьКлючейПолейАдресВСоответствииСУровнем(); + + Индекс = 5; + Пока Индекс >= 0 Цикл + ЗаполнитьПоляВСоответствииСУровнемАдреса(Результат, Выборка[1], Индекс, СловарьИменПолей); + Индекс = Индекс - 1; + КонецЦикла; + + Индекс = 5; + Пока Индекс >= 0 Цикл + ЗаполнитьПоляВСоответствииСУровнемАдреса(Результат, Выборка[0], Индекс, СловарьИменПолей); + Индекс = Индекс - 1; + КонецЦикла; КонецПроцедуры -// Заполнение данных для автоподбора из загруженных данных. -// -Процедура ЗаполнитьСписокАвтоподбораЧастиАдресаВнутр(Результат, Текст, Родитель, УровниЗапроса, ДополнительныеПараметры) - - ОтбиратьЗаписейДляАнализа = "300"; - ОтбиратьЗаписейДляСписка = "20"; - - ТекстПоиска = ЗамаскироватьСпецсимволыПодобия(Текст); +Функция АктуальныеАдресДляИсторического(Адрес) Запрос = Новый Запрос; - Запрос.УстановитьПараметр("НачалоФразы", ТекстПоиска + "%"); - Запрос.УстановитьПараметр("НачалоСлова", "% " + ТекстПоиска + "%"); - Запрос.УстановитьПараметр("Уровни", УровниЗапроса); - - Если ЗначениеЗаполнено(Родитель) Тогда - Запрос.УстановитьПараметр("Родитель", Новый УникальныйИдентификатор(Родитель)); - // Родитель указан явно - ТекстЗапросаПодходящиеОбъекты = "ВЫБРАТЬ ПЕРВЫЕ " + ОтбиратьЗаписейДляАнализа + " - | АдресныйОбъект.Уровень, - | АдресныйОбъект.КодСубъектаРФ, - | АдресныйОбъект.КодОкруга, - | АдресныйОбъект.КодРайона, - | АдресныйОбъект.КодГорода, - | АдресныйОбъект.КодВнутригородскогоРайона, - | АдресныйОбъект.КодНаселенногоПункта, - | АдресныйОбъект.КодУлицы, - | АдресныйОбъект.КодДополнительногоЭлемента, - | АдресныйОбъект.КодПодчиненногоЭлемента, - | АдресныйОбъект.Идентификатор, - | - | АдресныйОбъект.Наименование, - | АдресныйОбъект.Актуален КАК Актуален, - | АдресныйОбъект.Сокращение, - | - | ВЫБОР КОГДА 1 В ( - | ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты - | ГДЕ Уровень = 2 И КодСубъектаРФ = Регион.КодСубъектаРФ - | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты - | ГДЕ Уровень = 3 И КодСубъектаРФ = Регион.КодСубъектаРФ - | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты - | ГДЕ Уровень = 4 И КодСубъектаРФ = Регион.КодСубъектаРФ - | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты - | ГДЕ Уровень = 5 И КодСубъектаРФ = Регион.КодСубъектаРФ - | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты - | ГДЕ Уровень = 6 И КодСубъектаРФ = Регион.КодСубъектаРФ - | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты - | ГДЕ Уровень = 7 И КодСубъектаРФ = Регион.КодСубъектаРФ - | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты - | ГДЕ Уровень = 90 И КодСубъектаРФ = Регион.КодСубъектаРФ - | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты - | ГДЕ Уровень = 91 И КодСубъектаРФ = Регион.КодСубъектаРФ - | ) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК РегионЗагружен - |ПОМЕСТИТЬ - | ПодходящиеОбъекты - |ИЗ - | РегистрСведений.АдресныеОбъекты КАК РодительскийОбъект - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК АдресныйОбъект - |ПО - | АдресныйОбъект.Уровень В (&Уровни) - | И АдресныйОбъект.КодСубъектаРФ = РодительскийОбъект.КодСубъектаРФ - | И АдресныйОбъект.Идентификатор <> РодительскийОбъект.Идентификатор - | // Подобие наименование зависит от уровня - на улице включаем поиск по части фразы - | И ВЫБОР - | КОГДА 7 В (&Уровни) ТОГДА - | АдресныйОбъект.Наименование ПОДОБНО &НачалоФразы - | ИЛИ АдресныйОбъект.Наименование ПОДОБНО &НачалоСлова - | КОГДА 90 В (&Уровни) ТОГДА - | АдресныйОбъект.Наименование ПОДОБНО &НачалоФразы - | ИЛИ АдресныйОбъект.Наименование ПОДОБНО &НачалоСлова - | КОГДА 91 В (&Уровни) ТОГДА - | АдресныйОбъект.Наименование ПОДОБНО &НачалоФразы - | ИЛИ АдресныйОбъект.Наименование ПОДОБНО &НачалоСлова - | ИНАЧЕ - | АдресныйОбъект.Наименование ПОДОБНО &НачалоФразы - | КОНЕЦ - | - | И ВЫБОР - | КОГДА РодительскийОбъект.Уровень = 2 ТОГДА - | АдресныйОбъект.КодОкруга = РодительскийОбъект.КодОкруга - | - | КОГДА РодительскийОбъект.Уровень = 3 ТОГДА - | АдресныйОбъект.КодОкруга = РодительскийОбъект.КодОкруга - | И АдресныйОбъект.КодРайона = РодительскийОбъект.КодРайона - | - | КОГДА РодительскийОбъект.Уровень = 4 ТОГДА - | АдресныйОбъект.КодОкруга = РодительскийОбъект.КодОкруга - | И АдресныйОбъект.КодРайона = РодительскийОбъект.КодРайона - | И АдресныйОбъект.КодГорода = РодительскийОбъект.КодГорода - | - | КОГДА РодительскийОбъект.Уровень = 5 ТОГДА - | АдресныйОбъект.КодОкруга = РодительскийОбъект.КодОкруга - | И АдресныйОбъект.КодРайона = РодительскийОбъект.КодРайона - | И АдресныйОбъект.КодГорода = РодительскийОбъект.КодГорода - | И АдресныйОбъект.КодВнутригородскогоРайона = РодительскийОбъект.КодВнутригородскогоРайона - | - | КОГДА РодительскийОбъект.Уровень = 6 ТОГДА - | АдресныйОбъект.КодОкруга = РодительскийОбъект.КодОкруга - | И АдресныйОбъект.КодРайона = РодительскийОбъект.КодРайона - | И АдресныйОбъект.КодГорода = РодительскийОбъект.КодГорода - | И АдресныйОбъект.КодВнутригородскогоРайона = РодительскийОбъект.КодВнутригородскогоРайона - | И АдресныйОбъект.КодНаселенногоПункта = РодительскийОбъект.КодНаселенногоПункта - | - | КОГДА РодительскийОбъект.Уровень = 7 ТОГДА - | АдресныйОбъект.КодОкруга = РодительскийОбъект.КодОкруга - | И АдресныйОбъект.КодРайона = РодительскийОбъект.КодРайона - | И АдресныйОбъект.КодГорода = РодительскийОбъект.КодГорода - | И АдресныйОбъект.КодВнутригородскогоРайона = РодительскийОбъект.КодВнутригородскогоРайона - | И АдресныйОбъект.КодНаселенногоПункта = РодительскийОбъект.КодНаселенногоПункта - | И АдресныйОбъект.КодУлицы = РодительскийОбъект.КодУлицы - | - | КОГДА РодительскийОбъект.Уровень = 90 ТОГДА - | АдресныйОбъект.КодОкруга = РодительскийОбъект.КодОкруга - | И АдресныйОбъект.КодРайона = РодительскийОбъект.КодРайона - | И АдресныйОбъект.КодГорода = РодительскийОбъект.КодГорода - | И АдресныйОбъект.КодВнутригородскогоРайона = РодительскийОбъект.КодВнутригородскогоРайона - | И АдресныйОбъект.КодНаселенногоПункта = РодительскийОбъект.КодНаселенногоПункта - | И АдресныйОбъект.КодУлицы = РодительскийОбъект.КодУлицы - | И АдресныйОбъект.КодДополнительногоЭлемента = РодительскийОбъект.КодДополнительногоЭлемента - | - | КОГДА РодительскийОбъект.Уровень = 91 ТОГДА - | АдресныйОбъект.КодОкруга = РодительскийОбъект.КодОкруга - | И АдресныйОбъект.КодРайона = РодительскийОбъект.КодРайона - | И АдресныйОбъект.КодГорода = РодительскийОбъект.КодГорода - | И АдресныйОбъект.КодВнутригородскогоРайона = РодительскийОбъект.КодВнутригородскогоРайона - | И АдресныйОбъект.КодНаселенногоПункта = РодительскийОбъект.КодНаселенногоПункта - | И АдресныйОбъект.КодУлицы = РодительскийОбъект.КодУлицы - | И АдресныйОбъект.КодДополнительногоЭлемента = РодительскийОбъект.КодДополнительногоЭлемента - | И АдресныйОбъект.КодПодчиненногоЭлемента = РодительскийОбъект.КодПодчиненногоЭлемента - | - | ИНАЧЕ ИСТИНА - | КОНЕЦ - | - | И ВЫБОР - | КОГДА АдресныйОбъект.Уровень = 2 ТОГДА // Округ - | АдресныйОбъект.КодРайона = 0 - | И АдресныйОбъект.КодГорода = 0 - | И АдресныйОбъект.КодВнутригородскогоРайона = 0 - | И АдресныйОбъект.КодНаселенногоПункта = 0 - | И АдресныйОбъект.КодУлицы = 0 - | И АдресныйОбъект.КодДополнительногоЭлемента = 0 - | И АдресныйОбъект.КодПодчиненногоЭлемента = 0 - | - | КОГДА АдресныйОбъект.Уровень = 2 ТОГДА // Район - | АдресныйОбъект.КодОкруга = РодительскийОбъект.КодОкруга - | И АдресныйОбъект.КодГорода = 0 - | И АдресныйОбъект.КодВнутригородскогоРайона = 0 - | И АдресныйОбъект.КодНаселенногоПункта = 0 - | И АдресныйОбъект.КодУлицы = 0 - | И АдресныйОбъект.КодДополнительногоЭлемента = 0 - | И АдресныйОбъект.КодПодчиненногоЭлемента = 0 - | - | КОГДА АдресныйОбъект.Уровень = 4 ТОГДА // Город - | АдресныйОбъект.КодОкруга = РодительскийОбъект.КодОкруга - | И АдресныйОбъект.КодРайона = РодительскийОбъект.КодРайона - | И АдресныйОбъект.КодВнутригородскогоРайона = 0 - | И АдресныйОбъект.КодНаселенногоПункта = 0 - | И АдресныйОбъект.КодУлицы = 0 - | И АдресныйОбъект.КодДополнительногоЭлемента = 0 - | И АдресныйОбъект.КодПодчиненногоЭлемента = 0 - | - | КОГДА АдресныйОбъект.Уровень = 5 ТОГДА // Внутригородской район - | АдресныйОбъект.КодОкруга = РодительскийОбъект.КодОкруга - | И АдресныйОбъект.КодРайона = РодительскийОбъект.КодРайона - | И АдресныйОбъект.КодГорода = РодительскийОбъект.КодГорода - | И АдресныйОбъект.КодНаселенногоПункта = 0 - | И АдресныйОбъект.КодУлицы = 0 - | И АдресныйОбъект.КодДополнительногоЭлемента = 0 - | И АдресныйОбъект.КодПодчиненногоЭлемента = 0 - | - | КОГДА АдресныйОбъект.Уровень = 6 ТОГДА // Населенный пункт - | АдресныйОбъект.КодОкруга = РодительскийОбъект.КодОкруга - | И АдресныйОбъект.КодРайона = РодительскийОбъект.КодРайона - | И АдресныйОбъект.КодГорода = РодительскийОбъект.КодГорода - | И АдресныйОбъект.КодВнутригородскогоРайона = РодительскийОбъект.КодВнутригородскогоРайона - | И АдресныйОбъект.КодУлицы = 0 - | И АдресныйОбъект.КодДополнительногоЭлемента = 0 - | И АдресныйОбъект.КодПодчиненногоЭлемента = 0 - | - | КОГДА АдресныйОбъект.Уровень = 7 ТОГДА // Улица - | АдресныйОбъект.КодОкруга = РодительскийОбъект.КодОкруга - | И АдресныйОбъект.КодРайона = РодительскийОбъект.КодРайона - | И АдресныйОбъект.КодГорода = РодительскийОбъект.КодГорода - | И АдресныйОбъект.КодВнутригородскогоРайона = РодительскийОбъект.КодВнутригородскогоРайона - | И АдресныйОбъект.КодНаселенногоПункта = РодительскийОбъект.КодНаселенногоПункта - | И АдресныйОбъект.КодДополнительногоЭлемента = 0 - | И АдресныйОбъект.КодПодчиненногоЭлемента = 0 - | - | КОГДА АдресныйОбъект.Уровень = 90 ТОГДА // Дополнительный - | АдресныйОбъект.КодОкруга = РодительскийОбъект.КодОкруга - | И АдресныйОбъект.КодРайона = РодительскийОбъект.КодРайона - | И АдресныйОбъект.КодГорода = РодительскийОбъект.КодГорода - | И АдресныйОбъект.КодВнутригородскогоРайона = РодительскийОбъект.КодВнутригородскогоРайона - | И АдресныйОбъект.КодНаселенногоПункта = РодительскийОбъект.КодНаселенногоПункта - | И АдресныйОбъект.КодУлицы = РодительскийОбъект.КодУлицы - | И АдресныйОбъект.КодПодчиненногоЭлемента = 0 - | - | КОГДА АдресныйОбъект.Уровень = 91 ТОГДА // Подчиненный - | АдресныйОбъект.КодОкруга = РодительскийОбъект.КодОкруга - | И АдресныйОбъект.КодРайона = РодительскийОбъект.КодРайона - | И АдресныйОбъект.КодГорода = РодительскийОбъект.КодГорода - | И АдресныйОбъект.КодВнутригородскогоРайона = РодительскийОбъект.КодВнутригородскогоРайона - | И АдресныйОбъект.КодНаселенногоПункта = РодительскийОбъект.КодНаселенногоПункта - | И АдресныйОбъект.КодУлицы = РодительскийОбъект.КодУлицы - | И АдресныйОбъект.КодДополнительногоЭлемента = РодительскийОбъект.КодДополнительногоЭлемента - | - | ИНАЧЕ ИСТИНА - | КОНЕЦ - | - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК Регион - |ПО - | Регион.Уровень = 1 - | И Регион.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ - | И Регион.КодОкруга = 0 - | И Регион.КодРайона = 0 - | И Регион.КодГорода = 0 - | И Регион.КодВнутригородскогоРайона = 0 - | И Регион.КодНаселенногоПункта = 0 - | И Регион.КодУлицы = 0 - | И Регион.КодДополнительногоЭлемента = 0 - | И Регион.КодПодчиненногоЭлемента = 0 - |ГДЕ - | РодительскийОбъект.Идентификатор = &Родитель - | И НЕ АдресныйОбъект.Идентификатор ЕСТЬ NULL - |УПОРЯДОЧИТЬ ПО - | АдресныйОбъект.Уровень - |ИНДЕКСИРОВАТЬ ПО - | АдресныйОбъект.Уровень, - | АдресныйОбъект.КодСубъектаРФ, - | АдресныйОбъект.КодОкруга, - | АдресныйОбъект.КодРайона, - | АдресныйОбъект.КодГорода, - | АдресныйОбъект.КодВнутригородскогоРайона, - | АдресныйОбъект.КодНаселенногоПункта, - | АдресныйОбъект.КодУлицы, - | АдресныйОбъект.КодДополнительногоЭлемента, - | АдресныйОбъект.КодПодчиненногоЭлемента, - | АдресныйОбъект.Идентификатор - |"; - Иначе - Запрос.УстановитьПараметр("Родитель", Неопределено); - // Родитель НЕ указан - ТекстЗапросаПодходящиеОбъекты = "ВЫБРАТЬ ПЕРВЫЕ " + ОтбиратьЗаписейДляАнализа + " - | АдресныйОбъект.Уровень, - | АдресныйОбъект.КодСубъектаРФ, - | АдресныйОбъект.КодОкруга, - | АдресныйОбъект.КодРайона, - | АдресныйОбъект.КодГорода, - | АдресныйОбъект.КодВнутригородскогоРайона, - | АдресныйОбъект.КодНаселенногоПункта, - | АдресныйОбъект.КодУлицы, - | АдресныйОбъект.КодДополнительногоЭлемента, - | АдресныйОбъект.КодПодчиненногоЭлемента, - | АдресныйОбъект.Идентификатор, - | АдресныйОбъект.Наименование, - | АдресныйОбъект.Сокращение, - | АдресныйОбъект.Актуален КАК Актуален, - | - | ВЫБОР КОГДА 1 В ( - | ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты - | ГДЕ Уровень = 2 И КодСубъектаРФ = Регион.КодСубъектаРФ - | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты - | ГДЕ Уровень = 3 И КодСубъектаРФ = Регион.КодСубъектаРФ - | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты - | ГДЕ Уровень = 4 И КодСубъектаРФ = Регион.КодСубъектаРФ - | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты - | ГДЕ Уровень = 5 И КодСубъектаРФ = Регион.КодСубъектаРФ - | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты - | ГДЕ Уровень = 6 И КодСубъектаРФ = Регион.КодСубъектаРФ - | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты - | ГДЕ Уровень = 7 И КодСубъектаРФ = Регион.КодСубъектаРФ - | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты - | ГДЕ Уровень = 90 И КодСубъектаРФ = Регион.КодСубъектаРФ - | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты - | ГДЕ Уровень = 91 И КодСубъектаРФ = Регион.КодСубъектаРФ - | ) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК РегионЗагружен - |ПОМЕСТИТЬ - | ПодходящиеОбъекты - |ИЗ - | РегистрСведений.АдресныеОбъекты КАК АдресныйОбъект - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК Регион - |ПО - | Регион.Уровень = 1 - | И Регион.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ - | И Регион.КодОкруга = 0 - | И Регион.КодРайона = 0 - | И Регион.КодГорода = 0 - | И Регион.КодВнутригородскогоРайона = 0 - | И Регион.КодНаселенногоПункта = 0 - | И Регион.КодУлицы = 0 - | И Регион.КодДополнительногоЭлемента = 0 - | И Регион.КодПодчиненногоЭлемента = 0 - |ГДЕ - | АдресныйОбъект.Наименование ПОДОБНО &НачалоФразы - | И АдресныйОбъект.Уровень В (&Уровни) - |УПОРЯДОЧИТЬ ПО - | АдресныйОбъект.Уровень - |ИНДЕКСИРОВАТЬ ПО - | АдресныйОбъект.Уровень, - | АдресныйОбъект.КодСубъектаРФ, - | АдресныйОбъект.КодОкруга, - | АдресныйОбъект.КодРайона, - | АдресныйОбъект.КодГорода, - | АдресныйОбъект.КодВнутригородскогоРайона, - | АдресныйОбъект.КодНаселенногоПункта, - | АдресныйОбъект.КодУлицы, - | АдресныйОбъект.КодДополнительногоЭлемента, - | АдресныйОбъект.КодПодчиненногоЭлемента, - | АдресныйОбъект.Идентификатор - |"; - КонецЕсли; - - ТекстЗапроса = ТекстЗапросаПодходящиеОбъекты + " - |;///////////////////////////////////////////////////////////////////////////////// - | - |ВЫБРАТЬ ПЕРВЫЕ " + ОтбиратьЗаписейДляСписка + " - | СубъектРФ.Наименование КАК СубъектРФНаименование, - | СубъектРФ.Сокращение КАК СубъектРФСокращение, - | - | Округ.Наименование КАК ОкругНаименование, - | Округ.Сокращение КАК ОкругСокращение, - | - | Район.Наименование КАК РайонНаименование, - | Район.Сокращение КАК РайонСокращение, - | - | Город.Наименование КАК ГородНаименование, - | Город.Сокращение КАК ГородСокращение, - | - | ВнутригородскойРайон.Наименование КАК ВнутригородскойРайонНаименование, - | ВнутригородскойРайон.Сокращение КАК ВнутригородскойРайонСокращение, - | - | НаселенныйПункт.Наименование КАК НаселенныйПунктНаименование, - | НаселенныйПункт.Сокращение КАК НаселенныйПунктСокращение, - | - | Улица.Наименование КАК УлицаНаименование, - | Улица.Сокращение КАК УлицаСокращение, - | - | Дополнительный.Наименование КАК ДополнительныйНаименование, - | Дополнительный.Сокращение КАК ДополнительныйСокращение, - | - | Подчиненный.Наименование КАК ПодчиненныйНаименование, - | Подчиненный.Сокращение КАК ПодчиненныйСокращение, - | - | АдресныйОбъект.Идентификатор КАК Идентификатор, - | - | АдресныйОбъект.Наименование КАК Наименование, - | АдресныйОбъект.Сокращение КАК Сокращение, - | АдресныйОбъект.Уровень КАК Уровень, - | - | РегионЗагружен КАК РегионЗагружен, - | НЕ АдресныйОбъект.Актуален КАК Неактуален - | + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИсторияАдресныхОбъектов0.Идентификатор КАК Идентификатор, + | ИсторияАдресныхОбъектов0.АдресныйОбъект КАК АдресныйОбъект, + | ИсторияАдресныхОбъектов0.ОкончаниеДействияЗаписи КАК ОкончаниеДействияЗаписи + |ПОМЕСТИТЬ Адреса |ИЗ - | ПодходящиеОбъекты КАК АдресныйОбъект - | - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК СубъектРФ - |ПО - | 1 В (&Уровни) - | И СубъектРФ.Уровень = 1 - | И СубъектРФ.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ - | И СубъектРФ.КодОкруга = 0 - | И СубъектРФ.КодРайона = 0 - | И СубъектРФ.КодГорода = 0 - | И СубъектРФ.КодВнутригородскогоРайона = 0 - | И СубъектРФ.КодНаселенногоПункта = 0 - | И СубъектРФ.КодУлицы = 0 - | И СубъектРФ.КодДополнительногоЭлемента = 0 - | И СубъектРФ.КодПодчиненногоЭлемента = 0 - | И СубъектРФ.Идентификатор <> АдресныйОбъект.Идентификатор - | - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК Округ - |ПО - | 2 В (&Уровни) - | И Округ.Уровень = 2 - | И Округ.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ - | И Округ.КодОкруга = АдресныйОбъект.КодОкруга - | И Округ.КодРайона = 0 - | И Округ.КодГорода = 0 - | И Округ.КодВнутригородскогоРайона = 0 - | И Округ.КодНаселенногоПункта = 0 - | И Округ.КодУлицы = 0 - | И Округ.КодДополнительногоЭлемента = 0 - | И Округ.КодПодчиненногоЭлемента = 0 - | И Округ.Идентификатор <> АдресныйОбъект.Идентификатор - | - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК Район - |ПО - | 3 В (&Уровни) - | И Район.Уровень = 3 - | И Район.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ - | И Район.КодОкруга = АдресныйОбъект.КодОкруга - | И Район.КодРайона = АдресныйОбъект.КодРайона - | И Район.КодГорода = 0 - | И Район.КодВнутригородскогоРайона = 0 - | И Район.КодНаселенногоПункта = 0 - | И Район.КодУлицы = 0 - | И Район.КодДополнительногоЭлемента = 0 - | И Район.КодПодчиненногоЭлемента = 0 - | И Район.Идентификатор <> АдресныйОбъект.Идентификатор - | - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК Город - |ПО - | 4 В (&Уровни) - | И Город.Уровень = 4 - | И Город.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ - | И Город.КодОкруга = АдресныйОбъект.КодОкруга - | И Город.КодРайона = АдресныйОбъект.КодРайона - | И Город.КодГорода = АдресныйОбъект.КодГорода - | И Город.КодВнутригородскогоРайона = 0 - | И Город.КодНаселенногоПункта = 0 - | И Город.КодУлицы = 0 - | И Город.КодДополнительногоЭлемента = 0 - | И Город.КодПодчиненногоЭлемента = 0 - | И Город.Идентификатор <> АдресныйОбъект.Идентификатор - | - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК ВнутригородскойРайон - |ПО - | 5 В (&Уровни) - | И ВнутригородскойРайон.Уровень = 5 - | И ВнутригородскойРайон.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ - | И ВнутригородскойРайон.КодОкруга = АдресныйОбъект.КодОкруга - | И ВнутригородскойРайон.КодРайона = АдресныйОбъект.КодРайона - | И ВнутригородскойРайон.КодГорода = АдресныйОбъект.КодГорода - | И ВнутригородскойРайон.КодВнутригородскогоРайона = АдресныйОбъект.КодВнутригородскогоРайона - | И ВнутригородскойРайон.КодНаселенногоПункта = 0 - | И ВнутригородскойРайон.КодУлицы = 0 - | И ВнутригородскойРайон.КодДополнительногоЭлемента = 0 - | И ВнутригородскойРайон.КодПодчиненногоЭлемента = 0 - | И ВнутригородскойРайон.Идентификатор <> АдресныйОбъект.Идентификатор - | - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК НаселенныйПункт - |ПО - | 6 В (&Уровни) - | И НаселенныйПункт.Уровень = 6 - | И НаселенныйПункт.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ - | И НаселенныйПункт.КодОкруга = АдресныйОбъект.КодОкруга - | И НаселенныйПункт.КодРайона = АдресныйОбъект.КодРайона - | И НаселенныйПункт.КодГорода = АдресныйОбъект.КодГорода - | И НаселенныйПункт.КодВнутригородскогоРайона = АдресныйОбъект.КодВнутригородскогоРайона - | И НаселенныйПункт.КодНаселенногоПункта = АдресныйОбъект.КодНаселенногоПункта - | И НаселенныйПункт.КодУлицы = 0 - | И НаселенныйПункт.КодДополнительногоЭлемента = 0 - | И НаселенныйПункт.КодПодчиненногоЭлемента = 0 - | И НаселенныйПункт.Идентификатор <> АдресныйОбъект.Идентификатор - | - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК Улица - |ПО - | 7 В (&Уровни) - | И Улица.Уровень = 7 - | И Улица.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ - | И Улица.КодОкруга = АдресныйОбъект.КодОкруга - | И Улица.КодРайона = АдресныйОбъект.КодРайона - | И Улица.КодГорода = АдресныйОбъект.КодГорода - | И Улица.КодВнутригородскогоРайона = АдресныйОбъект.КодВнутригородскогоРайона - | И Улица.КодНаселенногоПункта = АдресныйОбъект.КодНаселенногоПункта - | И Улица.КодУлицы = АдресныйОбъект.КодУлицы - | И Улица.КодДополнительногоЭлемента = 0 - | И Улица.КодПодчиненногоЭлемента = 0 - | И Улица.Идентификатор <> АдресныйОбъект.Идентификатор - | - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК Дополнительный - |ПО - | 90 В (&Уровни) - | И Дополнительный.Уровень = 90 - | И Дополнительный.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ - | И Дополнительный.КодОкруга = АдресныйОбъект.КодОкруга - | И Дополнительный.КодРайона = АдресныйОбъект.КодРайона - | И Дополнительный.КодГорода = АдресныйОбъект.КодГорода - | И Дополнительный.КодВнутригородскогоРайона = АдресныйОбъект.КодВнутригородскогоРайона - | И Дополнительный.КодНаселенногоПункта = АдресныйОбъект.КодНаселенногоПункта - | И Дополнительный.КодУлицы = АдресныйОбъект.КодУлицы - | И Дополнительный.КодДополнительногоЭлемента = АдресныйОбъект.КодДополнительногоЭлемента - | И Дополнительный.КодПодчиненногоЭлемента = 0 - | И Дополнительный.Идентификатор <> АдресныйОбъект.Идентификатор - | - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК Подчиненный - |ПО - | 91 В (&Уровни) - | И Подчиненный.Уровень = 91 - | И Подчиненный.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ - | И Подчиненный.КодОкруга = АдресныйОбъект.КодОкруга - | И Подчиненный.КодРайона = АдресныйОбъект.КодРайона - | И Подчиненный.КодГорода = АдресныйОбъект.КодГорода - | И Подчиненный.КодВнутригородскогоРайона = АдресныйОбъект.КодВнутригородскогоРайона - | И Подчиненный.КодНаселенногоПункта = АдресныйОбъект.КодНаселенногоПункта - | И Подчиненный.КодУлицы = АдресныйОбъект.КодУлицы - | И Подчиненный.КодДополнительногоЭлемента = АдресныйОбъект.КодДополнительногоЭлемента - | И Подчиненный.КодПодчиненногоЭлемента = АдресныйОбъект.КодПодчиненногоЭлемента - | И Подчиненный.Идентификатор <> АдресныйОбъект.Идентификатор + | РегистрСведений.ИсторияАдресныхОбъектов КАК ИсторияАдресныхОбъектов0 + | &ТекстСоединения + |ГДЕ + | ИсторияАдресныхОбъектов0.Наименование = &Наименование0 + | И ИсторияАдресныхОбъектов0.КодСубъектаРФ = &КодСубъектаРФ + | И ИсторияАдресныхОбъектов0.Сокращение = &Сокращение0 + | &Отбор | |УПОРЯДОЧИТЬ ПО - | АдресныйОбъект.Уровень, - | ПодчиненныйНаименование, - | ДополнительныйНаименование, - | УлицаНаименование, - | НаселенныйПунктНаименование, - | ВнутригородскойРайонНаименование, - | ГородНаименование, - | РайонНаименование, - | ОкругНаименование, - | СубъектРФНаименование - |"; - - Запрос.Текст = ТекстЗапроса; + | ОкончаниеДействияЗаписи УБЫВ + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ ПЕРВЫЕ 1 + | ВЫБОР + | КОГДА НЕ АдресныеОбъектыУровень5.Наименование ЕСТЬ NULL + | ТОГДА АдресныеОбъектыУровень5.Наименование + "" "" + АдресныеОбъектыУровень5.Сокращение + "", "" + | ИНАЧЕ """" + | КОНЕЦ + ВЫБОР + | КОГДА НЕ АдресныеОбъектыУровень4.Наименование ЕСТЬ NULL + | ТОГДА АдресныеОбъектыУровень4.Наименование + "" "" + АдресныеОбъектыУровень4.Сокращение + "", "" + | ИНАЧЕ """" + | КОНЕЦ + ВЫБОР + | КОГДА НЕ АдресныеОбъектыУровень3.Наименование ЕСТЬ NULL + | ТОГДА АдресныеОбъектыУровень3.Наименование + "" "" + АдресныеОбъектыУровень3.Сокращение + "", "" + | ИНАЧЕ """" + | КОНЕЦ + ВЫБОР + | КОГДА НЕ АдресныеОбъектыУровень2.Наименование ЕСТЬ NULL + | ТОГДА АдресныеОбъектыУровень2.Наименование + "" "" + АдресныеОбъектыУровень2.Сокращение + "", "" + | ИНАЧЕ """" + | КОНЕЦ + ВЫБОР + | КОГДА НЕ АдресныеОбъектыУровень1.Наименование ЕСТЬ NULL + | ТОГДА АдресныеОбъектыУровень1.Наименование + "" "" + АдресныеОбъектыУровень1.Сокращение + "", "" + | ИНАЧЕ """" + | КОНЕЦ + АдресныеОбъектыУровень0.Наименование + "" "" + АдресныеОбъектыУровень0.Сокращение КАК Представление + |ИЗ + | Адреса КАК Адреса + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень0 + | ПО Адреса.АдресныйОбъект = АдресныеОбъектыУровень0.Идентификатор + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень1 + | ПО (АдресныеОбъектыУровень0.РодительскийИдентификатор = АдресныеОбъектыУровень1.Идентификатор) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень2 + | ПО (АдресныеОбъектыУровень1.РодительскийИдентификатор = АдресныеОбъектыУровень2.Идентификатор) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень3 + | ПО (АдресныеОбъектыУровень2.РодительскийИдентификатор = АдресныеОбъектыУровень3.Идентификатор) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень4 + | ПО (АдресныеОбъектыУровень3.РодительскийИдентификатор = АдресныеОбъектыУровень4.Идентификатор) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень5 + | ПО (АдресныеОбъектыУровень4.РодительскийИдентификатор = АдресныеОбъектыУровень5.Идентификатор)"; - Данные = Результат.Данные; - Для Каждого Строка Из Запрос.Выполнить().Выгрузить() Цикл - СтрокаРезультата = Данные.Добавить(); + КодСубъектаРФ = АдресныйКлассификатор.КодРегионаПоНаименованию(СокрЛП(Адрес.Area + " " + Адрес.AreaType)); + Запрос.УстановитьПараметр("КодСубъектаРФ", КодСубъектаРФ); + + ИменаУровнейАдреса = АдресныйКлассификаторКлиентСервер.ИменаУровнейАдреса(Адрес.AddressType, Истина); + АдресныеСведенияДляЗапроса = Новый Массив; + Счетчик = 0; + КакиеУровниПроверять = Новый Соответствие; + + Если АдресныйКлассификаторКлиентСервер.ЭтоМуниципальныйАдрес(Адрес.AddressType) Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, ".РодительскийИдентификатор", ".МуниципальныйРодительскийИдентификатор"); + КонецЕсли; + + ШаблонаСоединения = " + |ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИсторияАдресныхОбъектов КАК ИсторияАдресныхОбъектов%1 + | ПО (ИсторияАдресныхОбъектов%2.РодительскийИдентификатор = ИсторияАдресныхОбъектов%1.АдресныйОбъект) + | И (ИсторияАдресныхОбъектов%1.Наименование = &Наименование%1) + | И (ИсторияАдресныхОбъектов%1.Сокращение = &Сокращение%1)"; + + ТекстСоединения = ""; + + КоличествоУровней = ИменаУровнейАдреса.Количество() - 1; + Пока КоличествоУровней >= 0 Цикл + УровеньАдреса = ИменаУровнейАдреса[КоличествоУровней]; + + Если Адрес.Свойство(УровеньАдреса) И ЗначениеЗаполнено(Адрес[УровеньАдреса]) Тогда + + Запрос.УстановитьПараметр("Наименование" + Строка(Счетчик), Адрес[УровеньАдреса]); + Запрос.УстановитьПараметр("Сокращение" + Строка(Счетчик), Адрес[УровеньАдреса + "Type"]); + КакиеУровниПроверять.Вставить(УровеньАдреса, Счетчик); + + Если Счетчик > 0 Тогда + ТекстСоединения = ТекстСоединения + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонаСоединения, Счетчик, Счетчик - 1); + КонецЕсли; + Счетчик = Счетчик + 1; + + КонецЕсли; + КоличествоУровней = КоличествоУровней - 1; - ЗаполнитьЗначенияСвойств(СтрокаРезультата, Строка, "Идентификатор, РегионЗагружен, Неактуален, Уровень"); + КонецЦикла; + + ТекстОтбор = ?(Счетчик > 0, " И НЕ ИсторияАдресныхОбъектов1.Наименование ЕСТЬ NULL", ""); + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТекстСоединения", ТекстСоединения); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Отбор", ТекстОтбор); + + РезультатЗапроса = Запрос.Выполнить(); + + Если РезультатЗапроса.Пустой() Тогда + Возврат ""; + КонецЕсли; + + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выгрузить(); + + Возврат ВыборкаДетальныеЗаписи[0].Представление; + +КонецФункции + +Функция КодыПоИдентификаторуАдресногоОбъекта(АдресныйОбъект, СведенияОДоме) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ДомаЗданияСтроения.Строения КАК Строения, + | ДополнительныеСведения.ПочтовыйИндекс КАК ПочтовыйИндекс, + | ДополнительныеСведения.ОКТМО КАК ОКТМО, + | ДополнительныеСведения.OKATO КАК ОКАТО, + | ДополнительныеСведения.КодУчасткаИФНСЮЛ КАК КодУчасткаИФНСЮЛ, + | ДополнительныеСведения.КодУчасткаИФНСФЛ КАК КодУчасткаИФНСФЛ, + | ДополнительныеСведения.КодИФНСЮЛ КАК КодИФНСЮЛ, + | ДополнительныеСведения.КодИФНСФЛ КАК КодИФНСФЛ + |ИЗ + | РегистрСведений.ДомаЗданияСтроения КАК ДомаЗданияСтроения + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеАдресныеСведения КАК ДополнительныеСведения + | ПО ДомаЗданияСтроения.ДополнительныеАдресныеСведения = ДополнительныеСведения.Идентификатор + |ГДЕ + | ДомаЗданияСтроения.АдресныйОбъект = &АдресныйОбъект"; + + Запрос.УстановитьПараметр("АдресныйОбъект", АдресныйОбъект); + РезультатЗапроса = Запрос.Выполнить().Выгрузить(); + + Результат = НайтиСтрокуСДомом(РезультатЗапроса, СведенияОДоме); + + Если Результат <> Неопределено Тогда + + Коды = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(Результат.СтрокаДанных); + Коды.Удалить("Строения"); + Коды.Вставить("ИдентификаторДома", Результат.ИдентификаторДома); - Представление = ""; - ДобавитьВПредставлениеЭлементАдреса(Представление, Строка.Наименование, Строка.Сокращение); - ДобавитьВПредставлениеЭлементАдреса(Представление, Строка.ПодчиненныйНаименование, Строка.ПодчиненныйСокращение); - ДобавитьВПредставлениеЭлементАдреса(Представление, Строка.ДополнительныйНаименование, Строка.ДополнительныйСокращение); - ДобавитьВПредставлениеЭлементАдреса(Представление, Строка.УлицаНаименование, Строка.УлицаСокращение); - ДобавитьВПредставлениеЭлементАдреса(Представление, Строка.НаселенныйПунктНаименование, Строка.НаселенныйПунктСокращение); - ДобавитьВПредставлениеЭлементАдреса(Представление, Строка.ВнутригородскойРайонНаименование, Строка.ВнутригородскойРайонСокращение); - ДобавитьВПредставлениеЭлементАдреса(Представление, Строка.ГородНаименование, Строка.ГородСокращение); - ДобавитьВПредставлениеЭлементАдреса(Представление, Строка.РайонНаименование, Строка.РайонСокращение); - ДобавитьВПредставлениеЭлементАдреса(Представление, Строка.ОкругНаименование, Строка.ОкругСокращение); - ДобавитьВПредставлениеЭлементАдреса(Представление, Строка.СубъектРФНаименование, Строка.СубъектРФСокращение); - СтрокаРезультата.Представление = Представление; + Иначе + // Коды с точностью до дома не найдены. Поэтому используем коды адресного объекта + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ДополнительныеСведения.ПочтовыйИндекс КАК ПочтовыйИндекс, + | ДополнительныеСведения.ОКТМО КАК ОКТМО, + | ДополнительныеСведения.OKATO КАК ОКАТО, + | ДополнительныеСведения.КодУчасткаИФНСЮЛ КАК КодУчасткаИФНСЮЛ, + | ДополнительныеСведения.КодУчасткаИФНСФЛ КАК КодУчасткаИФНСФЛ, + | ДополнительныеСведения.КодИФНСЮЛ КАК КодИФНСЮЛ, + | ДополнительныеСведения.КодИФНСФЛ КАК КодИФНСФЛ + |ИЗ + | РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеАдресныеСведения КАК ДополнительныеСведения + | ПО АдресныеОбъекты.ДополнительныеАдресныеСведения = ДополнительныеСведения.Идентификатор + |ГДЕ + | АдресныеОбъекты.Идентификатор = &АдресныйОбъект"; + + Запрос.УстановитьПараметр("АдресныйОбъект", АдресныйОбъект); + + РезультатЗапроса = Запрос.Выполнить(); - Если СтрокаРезультата.РегионЗагружен = Ложь И НЕ ЗначениеЗаполнено(Строка.СубъектРФНаименование) Тогда - СтрокаРезультата.Неактуален = Ложь; + Если НЕ РезультатЗапроса.Пустой() Тогда + + Результат = РезультатЗапроса.Выгрузить()[0]; + Коды = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(Результат); + Коды.Вставить("ИдентификаторДома", ""); + + КонецЕсли; + КонецЕсли; + + Возврат Коды; + +КонецФункции + +Функция ОписаниеАдреса() + + Результат = Новый Структура; + + Результат.Вставить("value", ""); + Результат.Вставить("comment", ""); + Результат.Вставить("type", "Адрес"); + + Результат.Вставить("country", ""); + Результат.Вставить("addressType", АдресВСвободнойФорме()); + Результат.Вставить("countryCode", ""); + Результат.Вставить("ZIPcode", ""); + Результат.Вставить("area", ""); + Результат.Вставить("areaType", ""); + Результат.Вставить("city", ""); + Результат.Вставить("cityType", ""); + Результат.Вставить("street", ""); + Результат.Вставить("streetType", ""); + + Результат.Вставить("id", ""); + Результат.Вставить("areaCode", ""); + Результат.Вставить("areaId", ""); + Результат.Вставить("district", ""); + Результат.Вставить("districtType", ""); + Результат.Вставить("districtId", ""); + Результат.Вставить("munDistrict", ""); + Результат.Вставить("munDistrictType", ""); + Результат.Вставить("munDistrictId", ""); + Результат.Вставить("cityId", ""); + Результат.Вставить("settlement", ""); + Результат.Вставить("settlementType", ""); + Результат.Вставить("settlementId", ""); + Результат.Вставить("cityDistrict", ""); + Результат.Вставить("cityDistrictType", ""); + Результат.Вставить("cityDistrictId", ""); + Результат.Вставить("territory", ""); + Результат.Вставить("territoryType", ""); + Результат.Вставить("territoryId", ""); + Результат.Вставить("locality", ""); + Результат.Вставить("localityType", ""); + Результат.Вставить("localityId", ""); + Результат.Вставить("streetId", ""); + Результат.Вставить("houseType", ""); + Результат.Вставить("houseNumber", ""); + Результат.Вставить("houseId", ""); + Результат.Вставить("buildings", Новый Массив); + Результат.Вставить("apartments", Новый Массив); + Результат.Вставить("codeKLADR", ""); + Результат.Вставить("oktmo", ""); + Результат.Вставить("okato", ""); + Результат.Вставить("asInDocument", ""); + Результат.Вставить("ifnsFLCode", ""); + Результат.Вставить("ifnsULCode", ""); + Результат.Вставить("ifnsFLAreaCode", ""); + Результат.Вставить("ifnsULAreaCode", ""); + + Возврат Результат; + +КонецФункции + +Функция НайтиСтрокуСДомом(Знач Дома, Знач СведенияОДоме) + + Для каждого ИнформацияОДомах Из Дома Цикл + + Если НЕ ЗначениеЗаполнено(ИнформацияОДомах.Строения) Тогда + Продолжить; + КонецЕсли; + + СтрокаСоСпискомДомов = ИнформацияОДомах.Строения.Получить(); + Если ЗначениеЗаполнено(СтрокаСоСпискомДомов) Тогда + + ТипЧисло = Новый ОписаниеТипов("Число"); + МассивДомов = СтрРазделить(СтрокаСоСпискомДомов, Символы.Таб, Ложь); + + НаименованиеЗданийИСтроений = НаименованиеВладенийИСтроений(); + + Для каждого СтрокаДом Из МассивДомов Цикл + ДанныеОДоме = СтрРазделить(Сред(СтрокаДом, 25), "~", Истина); + ВидСтроения = Неопределено; + Строение = Неопределено; + Дом = Неопределено; + НазваниеВладения = Неопределено; + НазваниеСтроения = Неопределено; + Корпус = Неопределено; + + Если ЗначениеЗаполнено(ДанныеОДоме[0]) Тогда + ВидВладения = ТипЧисло.ПривестиЗначение(Лев(ДанныеОДоме[0], 1)); + Дом = Сред(ДанныеОДоме[0], 2); + + Если СтрСравнить(Дом, "НЕТ") = 0 Тогда + Дом = ""; + КонецЕсли; + + Если ЗначениеЗаполнено(Дом) Тогда + НазваниеВладения = НаименованиеЗданийИСтроений.Владения.Получить(ВидВладения); + КонецЕсли; + + Если ДанныеОДоме.Количество() > 1 Тогда + Корпус = ДанныеОДоме[1]; + Если ДанныеОДоме.Количество() > 2 Тогда + ВидСтроения = ТипЧисло.ПривестиЗначение(ДанныеОДоме[2]); + НазваниеСтроения = НаименованиеЗданийИСтроений.Строения.Получить(ВидСтроения); + Если ДанныеОДоме.Количество() > 3 Тогда + Строение = ДанныеОДоме[3]; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если СтрСравнить(СведенияОДоме.НомерДома, Дом) = 0 Тогда + + Если СтрСравнить(СведенияОДоме.ТипДома, НазваниеВладения) = 0 Тогда + + Если СтрСравнить(СведенияОДоме.НомерКорпуса, Корпус) = 0 + И СтрСравнить(СведенияОДоме.НомерСтроения, Строение) = 0 + И СтрСравнить(СведенияОДоме.ТипСтроения, НазваниеСтроения) = 0 Тогда + Результат = Новый Структура(); + Результат.Вставить("ИдентификаторДома", УникальныйИдентификаторИзСтроки64(Лев(СтрокаДом, 24))); + Результат.Вставить("СтрокаДанных", ИнформацияОДомах); + Возврат Результат; + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + КонецЦикла; + + Возврат Неопределено; + +КонецФункции + +// Заполнение данных для автоподбора из загруженных данных. +// +Процедура ЗаполнитьСписокАвтоподбораЧастиАдресаВнутр(Результат, Знач Текст, ДополнительныеПараметры) + + ПреобразоватьВводАдреса(Текст); + ТекстПоиска = ЗамаскироватьСпецсимволыПодобия(Текст); + СписокФраз = СтрРазделить(ТекстПоиска, " "); + + Запрос = Новый Запрос(); + + Если ДополнительныеПараметры.Свойство("Уровень") Тогда + + ТекстЗапроса = ОдноуровневыйАвтоподборНаселенногоПункта(ДополнительныеПараметры.ТипАдреса, ДополнительныеПараметры.Уровень); + + Запрос.УстановитьПараметр("Уровень", ДополнительныеПараметры.Уровень); + Если ДополнительныеПараметры.Уровень > 1 Тогда + Запрос.УстановитьПараметр("Идентификатор", ДополнительныеПараметры.Идентификатор); + КонецЕсли; + + Иначе + + ТекстЗапроса = КаскадныйСписокАвтоподбораНаселенногоПункта(); + + КонецЕсли; + + Запрос.Текст = ТекстЗапроса; + Запрос.УстановитьПараметр("НачалоФразы", "%" + ТекстПоиска + "%"); + + Результат = Новый СписокЗначений(); + + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Возврат; + КонецЕсли; + + Для Каждого Строка Из РезультатЗапроса.Выгрузить() Цикл + + ПочтовыйИндекс = ?(ЗначениеЗаполнено(Строка.ПочтовыйИндекс), " (" + Формат(Строка.ПочтовыйИндекс,"ЧГ=0") + ")", ""); + + Представление = Строка.Представление + ПочтовыйИндекс; + + Если НЕ ДополнительныеПараметры.Свойство("ТипАдреса") И НЕ Строка.Муниципальный Тогда + Представление = Новый ФорматированнаяСтрока(Представление, , ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); + КонецЕсли; + + ДобавитьВариантАдреса(Результат, Представление, Строка.Идентификатор, Строка.Муниципальный, Истина); + КонецЦикла; + +КонецПроцедуры + +// Преобразует введенные английские буквы к русской раскладке при подборе адреса +// +Процедура ПреобразоватьВводАдреса(Текст) + РусскиеКлавиши = "ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮЁ"; + АнглийскиеКлавиши = "QWERTYUIOP[]ASDFGHJKL;'ZXCVBNM,.`"; + Текст = ВРег(Текст); + Для Позиция = 0 По СтрДлина(Текст) Цикл + Символ = Сред(Текст, Позиция, 1); + ПозицияСимвола = СтрНайти(АнглийскиеКлавиши, Символ); + Если ПозицияСимвола > 0 Тогда + Текст = СтрЗаменить(Текст, Символ, Сред(РусскиеКлавиши, ПозицияСимвола, 1)); КонецЕсли; КонецЦикла; КонецПроцедуры +Функция ОдноуровневыйАвтоподборНаселенногоПункта(ТипаАдреса, Уровень, Порция = 20) + + ТекстЗапроса = "ВЫБРАТЬ %Порция% + | АдресныеОбъекты.Наименование + "" "" + АдресныеОбъекты.Сокращение КАК Представление, + | АдресныеОбъекты.Идентификатор КАК Идентификатор, + | АдресныеОбъекты.ДополнительныеАдресныеСведения КАК ДополнительныеАдресныеСведения, + | ДополнительныеСведения.ПочтовыйИндекс КАК ПочтовыйИндекс, + | &Муниципальный КАК Муниципальный + |ИЗ + | РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеАдресныеСведения КАК ДополнительныеСведения + | ПО АдресныеОбъекты.ДополнительныеАдресныеСведения = ДополнительныеСведения.Идентификатор + |ГДЕ + | АдресныеОбъекты.Наименование ПОДОБНО &НачалоФразы + | И АдресныеОбъекты.Уровень = &Уровень + | %ОтборПоИдентификатору% + | + |УПОРЯДОЧИТЬ ПО + | Представление"; + + ОтборПоИдентификатору = ?(Уровень > 1, "И АдресныеОбъекты.МуниципальныйРодительскийИдентификатор = &Идентификатор", ""); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%ОтборПоИдентификатору%", ОтборПоИдентификатору); + + Если Уровень = 31 Или Уровень = 41 Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "+ "" "" + АдресныеОбъекты.Сокращение", ""); + КонецЕсли; + + Если АдресныйКлассификаторКлиентСервер.ЭтоМуниципальныйАдрес(ТипаАдреса) Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Муниципальный", "ИСТИНА"); + Иначе + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Муниципальный", "ЛОЖЬ"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "МуниципальныйРодительскийИдентификатор", "РодительскийИдентификатор"); + КонецЕсли; + + Если Порция > 0 Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%Порция%", "ПЕРВЫЕ " + Строка(Порция)); + Иначе + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%Порция%", ""); + КонецЕсли; + + Возврат ТекстЗапроса; + +КонецФункции + +Функция КаскадныйСписокАвтоподбораНаселенногоПункта() + + ТекстЗапроса = "ВЫБРАТЬ ПЕРВЫЕ 10 + | ВЫБОР + | КОГДА АдресныеОбъекты.Уровень = 31 + | ИЛИ АдресныеОбъекты.Уровень = 41 + | ТОГДА АдресныеОбъекты.Наименование + | ИНАЧЕ АдресныеОбъекты.Наименование + "" "" + АдресныеОбъекты.Сокращение + | КОНЕЦ + ВЫБОР + | КОГДА НЕ АдресныеОбъектыУровень1.Наименование ЕСТЬ NULL + | ТОГДА ВЫБОР + | КОГДА АдресныеОбъектыУровень1.Уровень = 31 + | ИЛИ АдресныеОбъектыУровень1.Уровень = 41 + | ТОГДА "", "" + АдресныеОбъектыУровень1.Наименование + | ИНАЧЕ "", "" + АдресныеОбъектыУровень1.Наименование + "" "" + АдресныеОбъектыУровень1.Сокращение + | КОНЕЦ + | ИНАЧЕ """" + | КОНЕЦ + ВЫБОР + | КОГДА НЕ АдресныеОбъектыУровень2.Наименование ЕСТЬ NULL + | ТОГДА ВЫБОР + | КОГДА АдресныеОбъектыУровень2.Уровень = 31 + | ИЛИ АдресныеОбъектыУровень2.Уровень = 41 + | ТОГДА "", "" + АдресныеОбъектыУровень2.Наименование + | ИНАЧЕ "", "" + АдресныеОбъектыУровень2.Наименование + "" "" + АдресныеОбъектыУровень2.Сокращение + | КОНЕЦ + | ИНАЧЕ """" + | КОНЕЦ + ВЫБОР + | КОГДА НЕ АдресныеОбъектыУровень3.Наименование ЕСТЬ NULL + | ТОГДА ВЫБОР + | КОГДА АдресныеОбъектыУровень3.Уровень = 31 + | ИЛИ АдресныеОбъектыУровень3.Уровень = 41 + | ТОГДА "", "" + АдресныеОбъектыУровень3.Наименование + | ИНАЧЕ "", "" + АдресныеОбъектыУровень3.Наименование + "" "" + АдресныеОбъектыУровень3.Сокращение + | КОНЕЦ + | ИНАЧЕ """" + | КОНЕЦ + ВЫБОР + | КОГДА НЕ АдресныеОбъектыУровень4.Наименование ЕСТЬ NULL + | ТОГДА ВЫБОР + | КОГДА АдресныеОбъектыУровень4.Уровень = 31 + | ИЛИ АдресныеОбъектыУровень4.Уровень = 41 + | ТОГДА "", "" + АдресныеОбъектыУровень4.Наименование + | ИНАЧЕ "", "" + АдресныеОбъектыУровень4.Наименование + "" "" + АдресныеОбъектыУровень4.Сокращение + | КОНЕЦ + | ИНАЧЕ """" + | КОНЕЦ + ВЫБОР + | КОГДА НЕ АдресныеОбъектыУровень5.Наименование ЕСТЬ NULL + | ТОГДА ВЫБОР + | КОГДА АдресныеОбъектыУровень5.Уровень = 31 + | ИЛИ АдресныеОбъектыУровень5.Уровень = 41 + | ТОГДА "", "" + АдресныеОбъектыУровень5.Наименование + | ИНАЧЕ "", "" + АдресныеОбъектыУровень5.Наименование + "" "" + АдресныеОбъектыУровень5.Сокращение + | КОНЕЦ + | ИНАЧЕ """" + | КОНЕЦ КАК Представление, + | АдресныеОбъекты.Идентификатор КАК Идентификатор, + | ИСТИНА КАК Муниципальный, + | АдресныеОбъекты.ДополнительныеАдресныеСведения КАК ДополнительныеАдресныеСведения, + | ВЫБОР + | КОГДА АдресныеОбъекты.Уровень < 10 + | ТОГДА АдресныеОбъекты.Уровень * 10 + | ИНАЧЕ АдресныеОбъекты.Уровень + | КОНЕЦ КАК Уровень + |ПОМЕСТИТЬ МуниципальныеАдреса + |ИЗ + | РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень1 + | ПО АдресныеОбъекты.МуниципальныйРодительскийИдентификатор = АдресныеОбъектыУровень1.Идентификатор + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень2 + | ПО (АдресныеОбъектыУровень1.МуниципальныйРодительскийИдентификатор = АдресныеОбъектыУровень2.Идентификатор) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень3 + | ПО (АдресныеОбъектыУровень2.МуниципальныйРодительскийИдентификатор = АдресныеОбъектыУровень3.Идентификатор) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень4 + | ПО (АдресныеОбъектыУровень3.МуниципальныйРодительскийИдентификатор = АдресныеОбъектыУровень4.Идентификатор) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень5 + | ПО (АдресныеОбъектыУровень4.МуниципальныйРодительскийИдентификатор = АдресныеОбъектыУровень5.Идентификатор) + |ГДЕ + | АдресныеОбъекты.Наименование ПОДОБНО &НачалоФразы + | И АдресныеОбъекты.Уровень <> 7 + | И АдресныеОбъекты.Уровень <> 4 + | И АдресныеОбъекты.Уровень <> 3 + | + |УПОРЯДОЧИТЬ ПО + | АдресныеОбъекты.Уровень + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ ПЕРВЫЕ 10 + | АдресныеОбъекты.Наименование + "" "" + АдресныеОбъекты.Сокращение + ВЫБОР + | КОГДА НЕ АдресныеОбъектыУровень1.Наименование ЕСТЬ NULL + | ТОГДА "", "" + АдресныеОбъектыУровень1.Наименование + "" "" + АдресныеОбъектыУровень1.Сокращение + | ИНАЧЕ """" + | КОНЕЦ + ВЫБОР + | КОГДА НЕ АдресныеОбъектыУровень2.Наименование ЕСТЬ NULL + | ТОГДА "", "" + АдресныеОбъектыУровень2.Наименование + "" "" + АдресныеОбъектыУровень2.Сокращение + | ИНАЧЕ """" + | КОНЕЦ + ВЫБОР + | КОГДА НЕ АдресныеОбъектыУровень3.Наименование ЕСТЬ NULL + | ТОГДА "", "" + АдресныеОбъектыУровень3.Наименование + "" "" + АдресныеОбъектыУровень3.Сокращение + | ИНАЧЕ """" + | КОНЕЦ + ВЫБОР + | КОГДА НЕ АдресныеОбъектыУровень4.Наименование ЕСТЬ NULL + | ТОГДА "", "" + АдресныеОбъектыУровень4.Наименование + "" "" + АдресныеОбъектыУровень4.Сокращение + | ИНАЧЕ """" + | КОНЕЦ + ВЫБОР + | КОГДА НЕ АдресныеОбъектыУровень5.Наименование ЕСТЬ NULL + | ТОГДА "", "" + АдресныеОбъектыУровень5.Наименование + "" "" + АдресныеОбъектыУровень5.Сокращение + | ИНАЧЕ """" + | КОНЕЦ КАК Представление, + | АдресныеОбъекты.Идентификатор КАК Идентификатор, + | ЛОЖЬ КАК Муниципальный, + | АдресныеОбъекты.ДополнительныеАдресныеСведения КАК ДополнительныеАдресныеСведения, + | ВЫБОР + | КОГДА АдресныеОбъекты.Уровень < 10 + | ТОГДА АдресныеОбъекты.Уровень * 10 + | ИНАЧЕ АдресныеОбъекты.Уровень + | КОНЕЦ КАК Уровень + |ПОМЕСТИТЬ АдминистративныеАдреса + |ИЗ + | РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень1 + | ПО АдресныеОбъекты.РодительскийИдентификатор = АдресныеОбъектыУровень1.Идентификатор + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень2 + | ПО (АдресныеОбъектыУровень1.РодительскийИдентификатор = АдресныеОбъектыУровень2.Идентификатор) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень3 + | ПО (АдресныеОбъектыУровень2.РодительскийИдентификатор = АдресныеОбъектыУровень3.Идентификатор) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень4 + | ПО (АдресныеОбъектыУровень3.РодительскийИдентификатор = АдресныеОбъектыУровень4.Идентификатор) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень5 + | ПО (АдресныеОбъектыУровень4.РодительскийИдентификатор = АдресныеОбъектыУровень5.Идентификатор) + |ГДЕ + | АдресныеОбъекты.Наименование ПОДОБНО &НачалоФразы + | И АдресныеОбъекты.Уровень <> 7 + | И АдресныеОбъекты.Уровень <> 41 + | И АдресныеОбъекты.Уровень <> 31 + | + |УПОРЯДОЧИТЬ ПО + | АдресныеОбъекты.Уровень + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | МуниципальныеАдреса.Представление КАК Представление, + | МуниципальныеАдреса.Идентификатор КАК Идентификатор, + | МуниципальныеАдреса.Муниципальный КАК Муниципальный, + | МуниципальныеАдреса.ДополнительныеАдресныеСведения КАК ДополнительныеАдресныеСведения, + | ДополнительныеСведения.ПочтовыйИндекс КАК ПочтовыйИндекс, + | МуниципальныеАдреса.Уровень КАК Уровень + |ИЗ + | МуниципальныеАдреса КАК МуниципальныеАдреса + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеАдресныеСведения КАК ДополнительныеСведения + | ПО МуниципальныеАдреса.ДополнительныеАдресныеСведения = ДополнительныеСведения.Идентификатор + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | АдминистративныеАдреса.Представление, + | АдминистративныеАдреса.Идентификатор, + | АдминистративныеАдреса.Муниципальный, + | АдминистративныеАдреса.ДополнительныеАдресныеСведения, + | ДополнительныеСведения.ПочтовыйИндекс, + | АдминистративныеАдреса.Уровень + |ИЗ + | АдминистративныеАдреса КАК АдминистративныеАдреса + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеАдресныеСведения КАК ДополнительныеСведения + | ПО АдминистративныеАдреса.ДополнительныеАдресныеСведения = ДополнительныеСведения.Идентификатор + | + |УПОРЯДОЧИТЬ ПО + | Уровень"; + + Возврат ТекстЗапроса; + +КонецФункции + // Заполнение адреса по индексу из загруженных данных. // -Процедура ЗаполнитьАдресаПоПочтовомуИндексуКлассификатораВнутр(Результат, Индекс, Уровни, ДополнительныеПараметры) +Процедура ЗаполнитьАдресаПоПочтовомуИндексуКлассификатораВнутр(Результат, Индекс, ДополнительныеПараметры) ТекстЗапроса = "ВЫБРАТЬ - | АдресныеОбъекты.Уровень КАК Уровень, - | АдресныеОбъекты.КодСубъектаРФ КАК КодСубъектаРФ, - | АдресныеОбъекты.КодОкруга КАК КодОкруга, - | АдресныеОбъекты.КодРайона КАК КодРайона, - | АдресныеОбъекты.КодГорода КАК КодГорода, - | АдресныеОбъекты.КодВнутригородскогоРайона КАК КодВнутригородскогоРайона, - | АдресныеОбъекты.КодНаселенногоПункта КАК КодНаселенногоПункта, - | АдресныеОбъекты.КодУлицы КАК КодУлицы, - | АдресныеОбъекты.КодДополнительногоЭлемента КАК КодДополнительногоЭлемента, - | АдресныеОбъекты.КодПодчиненногоЭлемента КАК КодПодчиненногоЭлемента, - | АдресныеОбъекты.Идентификатор КАК Идентификатор, - | ДомаЗданияСтроения.ПочтовыйИндекс КАК ПочтовыйИндекс, - | АдресныеОбъекты.Наименование КАК Наименование, - | АдресныеОбъекты.Сокращение КАК Сокращение, - | АдресныеОбъекты.Дополнительно КАК Дополнительно, - | АдресныеОбъекты.КодКЛАДР КАК КодКЛАДР, - | АдресныеОбъекты.Актуален КАК Актуален, - | ВЫБОР КОГДА АдресныеОбъекты.Актуален ТОГДА ЛОЖЬ ИНАЧЕ ИСТИНА КОНЕЦ КАК Неактуален - |ПОМЕСТИТЬ АдресаПоИндексу + | ДомаЗданияСтроения.АдресныйОбъект КАК Идентификатор + |ПОМЕСТИТЬ Идентификаторы |ИЗ - | РегистрСведений.ДомаЗданияСтроения КАК ДомаЗданияСтроения - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты - | ПО ДомаЗданияСтроения.АдресныйОбъект = АдресныеОбъекты.Идентификатор + | РегистрСведений.ДополнительныеАдресныеСведения КАК ДополнительныеСведения + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДомаЗданияСтроения КАК ДомаЗданияСтроения + | ПО (ДомаЗданияСтроения.ДополнительныеАдресныеСведения = ДополнительныеСведения.Идентификатор) |ГДЕ - | ДомаЗданияСтроения.ПочтовыйИндекс = &ПочтовыйИндекс - | И АдресныеОбъекты.ПочтовыйИндекс = 0 - | И АдресныеОбъекты.Уровень В(&Уровни) + | ДополнительныеСведения.ПочтовыйИндекс = &ПочтовыйИндекс | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ - | АдресныеОбъекты.Уровень, - | АдресныеОбъекты.КодСубъектаРФ, - | АдресныеОбъекты.КодОкруга, - | АдресныеОбъекты.КодРайона, - | АдресныеОбъекты.КодГорода, - | АдресныеОбъекты.КодВнутригородскогоРайона, - | АдресныеОбъекты.КодНаселенногоПункта, - | АдресныеОбъекты.КодУлицы, - | АдресныеОбъекты.КодДополнительногоЭлемента, - | АдресныеОбъекты.КодПодчиненногоЭлемента, - | АдресныеОбъекты.Идентификатор, - | АдресныеОбъекты.ПочтовыйИндекс, - | АдресныеОбъекты.Наименование, - | АдресныеОбъекты.Сокращение, - | АдресныеОбъекты.Дополнительно, - | АдресныеОбъекты.КодКЛАДР, - | АдресныеОбъекты.Актуален КАК Актуален, - | ВЫБОР КОГДА АдресныеОбъекты.Актуален ТОГДА ЛОЖЬ ИНАЧЕ ИСТИНА КОНЕЦ КАК Неактуален + | АдресныеОбъекты.Идентификатор |ИЗ - | РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты + | РегистрСведений.ДополнительныеАдресныеСведения КАК ДополнительныеСведения + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты + | ПО (АдресныеОбъекты.ДополнительныеАдресныеСведения = ДополнительныеСведения.Идентификатор) |ГДЕ - | АдресныеОбъекты.ПочтовыйИндекс = &ПочтовыйИндекс - | И АдресныеОбъекты.Уровень В(&Уровни) + | ДополнительныеСведения.ПочтовыйИндекс = &ПочтовыйИндекс + | И НЕ АдресныеОбъекты.Идентификатор ЕСТЬ NULL |; | |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | СубъектРФ.Наименование КАК СубъектРФНаименование, - | СубъектРФ.Сокращение КАК СубъектРФСокращение, - | Округ.Наименование КАК ОкругНаименование, - | Округ.Сокращение КАК ОкругСокращение, - | Район.Наименование КАК РайонНаименование, - | Район.Сокращение КАК РайонСокращение, - | Город.Наименование КАК ГородНаименование, - | Город.Сокращение КАК ГородСокращение, - | ВнутригородскойРайон.Наименование КАК ВнутригородскойРайонНаименование, - | ВнутригородскойРайон.Сокращение КАК ВнутригородскойРайонСокращение, - | НаселенныйПункт.Наименование КАК НаселенныйПунктНаименование, - | НаселенныйПункт.Сокращение КАК НаселенныйПунктСокращение, - | Улица.Наименование КАК УлицаНаименование, - | Улица.Сокращение КАК УлицаСокращение, - | Дополнительный.Наименование КАК ДополнительныйНаименование, - | Дополнительный.Сокращение КАК ДополнительныйСокращение, - | Подчиненный.Наименование КАК ПодчиненныйНаименование, - | Подчиненный.Сокращение КАК ПодчиненныйСокращение, - | АдресныйОбъект.Идентификатор КАК Идентификатор, - | АдресныйОбъект.Наименование КАК Наименование, - | АдресныйОбъект.Сокращение КАК Сокращение, - | АдресныйОбъект.Актуален КАК Актуален, - | АдресныйОбъект.Неактуален КАК Неактуален + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | Идентификаторы.Идентификатор КАК Идентификатор, + | АдресныеОбъекты.РодительскийИдентификатор КАК РодительскийИдентификатор, + | АдресныеОбъекты.МуниципальныйРодительскийИдентификатор КАК МуниципальныйРодительскийИдентификатор, + | АдресныеОбъекты.Наименование КАК Наименование, + | АдресныеОбъекты.Сокращение КАК Сокращение + |ПОМЕСТИТЬ АдресныеОбъекты |ИЗ - | АдресаПоИндексу КАК АдресныйОбъект - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК СубъектРФ - | ПО (СубъектРФ.Уровень = 1) - | И (СубъектРФ.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ) - | И (СубъектРФ.КодОкруга = 0) - | И (СубъектРФ.КодРайона = 0) - | И (СубъектРФ.КодГорода = 0) - | И (СубъектРФ.КодВнутригородскогоРайона = 0) - | И (СубъектРФ.КодНаселенногоПункта = 0) - | И (СубъектРФ.КодУлицы = 0) - | И (СубъектРФ.КодДополнительногоЭлемента = 0) - | И (СубъектРФ.КодПодчиненногоЭлемента = 0) - | И (СубъектРФ.Идентификатор <> АдресныйОбъект.Идентификатор) - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК Округ - | ПО (Округ.Уровень = 2) - | И (Округ.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ) - | И (Округ.КодОкруга = АдресныйОбъект.КодОкруга) - | И (Округ.КодРайона = 0) - | И (Округ.КодГорода = 0) - | И (Округ.КодВнутригородскогоРайона = 0) - | И (Округ.КодНаселенногоПункта = 0) - | И (Округ.КодУлицы = 0) - | И (Округ.КодДополнительногоЭлемента = 0) - | И (Округ.КодПодчиненногоЭлемента = 0) - | И (Округ.Идентификатор <> АдресныйОбъект.Идентификатор) - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК Район - | ПО (Район.Уровень = 3) - | И (Район.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ) - | И (Район.КодОкруга = АдресныйОбъект.КодОкруга) - | И (Район.КодРайона = АдресныйОбъект.КодРайона) - | И (Район.КодГорода = 0) - | И (Район.КодВнутригородскогоРайона = 0) - | И (Район.КодНаселенногоПункта = 0) - | И (Район.КодУлицы = 0) - | И (Район.КодДополнительногоЭлемента = 0) - | И (Район.КодПодчиненногоЭлемента = 0) - | И (Район.Идентификатор <> АдресныйОбъект.Идентификатор) - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК Город - | ПО (Город.Уровень = 4) - | И (Город.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ) - | И (Город.КодОкруга = АдресныйОбъект.КодОкруга) - | И (Город.КодРайона = АдресныйОбъект.КодРайона) - | И (Город.КодГорода = АдресныйОбъект.КодГорода) - | И (Город.КодВнутригородскогоРайона = 0) - | И (Город.КодНаселенногоПункта = 0) - | И (Город.КодУлицы = 0) - | И (Город.КодДополнительногоЭлемента = 0) - | И (Город.КодПодчиненногоЭлемента = 0) - | И (Город.Идентификатор <> АдресныйОбъект.Идентификатор) - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК ВнутригородскойРайон - | ПО (ВнутригородскойРайон.Уровень = 5) - | И (ВнутригородскойРайон.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ) - | И (ВнутригородскойРайон.КодОкруга = АдресныйОбъект.КодОкруга) - | И (ВнутригородскойРайон.КодРайона = АдресныйОбъект.КодРайона) - | И (ВнутригородскойРайон.КодГорода = АдресныйОбъект.КодГорода) - | И (ВнутригородскойРайон.КодВнутригородскогоРайона = АдресныйОбъект.КодВнутригородскогоРайона) - | И (ВнутригородскойРайон.КодНаселенногоПункта = 0) - | И (ВнутригородскойРайон.КодУлицы = 0) - | И (ВнутригородскойРайон.КодДополнительногоЭлемента = 0) - | И (ВнутригородскойРайон.КодПодчиненногоЭлемента = 0) - | И (ВнутригородскойРайон.Идентификатор <> АдресныйОбъект.Идентификатор) - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК НаселенныйПункт - | ПО (НаселенныйПункт.Уровень = 6) - | И (НаселенныйПункт.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ) - | И (НаселенныйПункт.КодОкруга = АдресныйОбъект.КодОкруга) - | И (НаселенныйПункт.КодРайона = АдресныйОбъект.КодРайона) - | И (НаселенныйПункт.КодГорода = АдресныйОбъект.КодГорода) - | И (НаселенныйПункт.КодВнутригородскогоРайона = АдресныйОбъект.КодВнутригородскогоРайона) - | И (НаселенныйПункт.КодНаселенногоПункта = АдресныйОбъект.КодНаселенногоПункта) - | И (НаселенныйПункт.КодУлицы = 0) - | И (НаселенныйПункт.КодДополнительногоЭлемента = 0) - | И (НаселенныйПункт.КодПодчиненногоЭлемента = 0) - | И (НаселенныйПункт.Идентификатор <> АдресныйОбъект.Идентификатор) - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК Улица - | ПО (Улица.Уровень = 7) - | И (Улица.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ) - | И (Улица.КодОкруга = АдресныйОбъект.КодОкруга) - | И (Улица.КодРайона = АдресныйОбъект.КодРайона) - | И (Улица.КодГорода = АдресныйОбъект.КодГорода) - | И (Улица.КодВнутригородскогоРайона = АдресныйОбъект.КодВнутригородскогоРайона) - | И (Улица.КодНаселенногоПункта = АдресныйОбъект.КодНаселенногоПункта) - | И (Улица.КодУлицы = АдресныйОбъект.КодУлицы) - | И (Улица.КодДополнительногоЭлемента = 0) - | И (Улица.КодПодчиненногоЭлемента = 0) - | И (Улица.Идентификатор <> АдресныйОбъект.Идентификатор) - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК Дополнительный - | ПО (Дополнительный.Уровень = 90) - | И (Дополнительный.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ) - | И (Дополнительный.КодОкруга = АдресныйОбъект.КодОкруга) - | И (Дополнительный.КодРайона = АдресныйОбъект.КодРайона) - | И (Дополнительный.КодГорода = АдресныйОбъект.КодГорода) - | И (Дополнительный.КодВнутригородскогоРайона = АдресныйОбъект.КодВнутригородскогоРайона) - | И (Дополнительный.КодНаселенногоПункта = АдресныйОбъект.КодНаселенногоПункта) - | И (Дополнительный.КодУлицы = АдресныйОбъект.КодУлицы) - | И (Дополнительный.КодДополнительногоЭлемента = АдресныйОбъект.КодДополнительногоЭлемента) - | И (Дополнительный.КодПодчиненногоЭлемента = 0) - | И (Дополнительный.Идентификатор <> АдресныйОбъект.Идентификатор) - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК Подчиненный - | ПО (Подчиненный.Уровень = 91) - | И (Подчиненный.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ) - | И (Подчиненный.КодОкруга = АдресныйОбъект.КодОкруга) - | И (Подчиненный.КодРайона = АдресныйОбъект.КодРайона) - | И (Подчиненный.КодГорода = АдресныйОбъект.КодГорода) - | И (Подчиненный.КодВнутригородскогоРайона = АдресныйОбъект.КодВнутригородскогоРайона) - | И (Подчиненный.КодНаселенногоПункта = АдресныйОбъект.КодНаселенногоПункта) - | И (Подчиненный.КодУлицы = АдресныйОбъект.КодУлицы) - | И (Подчиненный.КодДополнительногоЭлемента = АдресныйОбъект.КодДополнительногоЭлемента) - | И (Подчиненный.КодПодчиненногоЭлемента = АдресныйОбъект.КодПодчиненногоЭлемента) - | И (Подчиненный.Идентификатор <> АдресныйОбъект.Идентификатор) + | Идентификаторы КАК Идентификаторы + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты + | ПО Идентификаторы.Идентификатор = АдресныеОбъекты.Идентификатор + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ ПЕРВЫЕ 200 + | ЛОЖЬ КАК Муниципальный, + | АдресныеОбъекты.Идентификатор КАК Идентификатор, + | АдресныеОбъекты.Наименование + "" "" + АдресныеОбъекты.Сокращение + ВЫБОР + | КОГДА НЕ АдресныеОбъекты1.Наименование ЕСТЬ NULL + | ТОГДА "", "" + АдресныеОбъекты1.Наименование + "" "" + АдресныеОбъекты1.Сокращение + | ИНАЧЕ """" + | КОНЕЦ + ВЫБОР + | КОГДА НЕ АдресныеОбъекты2.Наименование ЕСТЬ NULL + | ТОГДА "", "" + АдресныеОбъекты2.Наименование + "" "" + АдресныеОбъекты2.Сокращение + | ИНАЧЕ """" + | КОНЕЦ + ВЫБОР + | КОГДА НЕ АдресныеОбъекты3.Наименование ЕСТЬ NULL + | ТОГДА "", "" + АдресныеОбъекты3.Наименование + "" "" + АдресныеОбъекты3.Сокращение + | ИНАЧЕ """" + | КОНЕЦ + ВЫБОР + | КОГДА НЕ АдресныеОбъекты4.Наименование ЕСТЬ NULL + | ТОГДА "", "" + АдресныеОбъекты4.Наименование + "" "" + АдресныеОбъекты4.Сокращение + | ИНАЧЕ """" + | КОНЕЦ + ВЫБОР + | КОГДА НЕ АдресныеОбъекты5.Наименование ЕСТЬ NULL + | ТОГДА "", "" + АдресныеОбъекты5.Наименование + "" "" + АдресныеОбъекты5.Сокращение + | ИНАЧЕ """" + | КОНЕЦ КАК Представление + |ИЗ + | АдресныеОбъекты КАК АдресныеОбъекты + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты1 + | ПО АдресныеОбъекты.РодительскийИдентификатор = АдресныеОбъекты1.Идентификатор + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты2 + | ПО (АдресныеОбъекты1.РодительскийИдентификатор = АдресныеОбъекты2.Идентификатор) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты3 + | ПО (АдресныеОбъекты2.РодительскийИдентификатор = АдресныеОбъекты3.Идентификатор) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты4 + | ПО (АдресныеОбъекты3.РодительскийИдентификатор = АдресныеОбъекты4.Идентификатор) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты5 + | ПО (АдресныеОбъекты4.РодительскийИдентификатор = АдресныеОбъекты5.Идентификатор) |ГДЕ - | АдресныйОбъект.ПочтовыйИндекс = &ПочтовыйИндекс - | И АдресныйОбъект.Уровень В(&Уровни) + | АдресныеОбъекты.Наименование <> """" + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ ПЕРВЫЕ 200 + | ИСТИНА, + | АдресныеОбъекты.Идентификатор, + | АдресныеОбъекты.Наименование + "" "" + АдресныеОбъекты.Сокращение + ВЫБОР + | КОГДА НЕ АдресныеОбъекты1.Наименование ЕСТЬ NULL + | ТОГДА "", "" + АдресныеОбъекты1.Наименование + "" "" + АдресныеОбъекты1.Сокращение + | ИНАЧЕ """" + | КОНЕЦ + ВЫБОР + | КОГДА НЕ АдресныеОбъекты2.Наименование ЕСТЬ NULL + | ТОГДА "", "" + АдресныеОбъекты2.Наименование + "" "" + АдресныеОбъекты2.Сокращение + | ИНАЧЕ """" + | КОНЕЦ + ВЫБОР + | КОГДА НЕ АдресныеОбъекты3.Наименование ЕСТЬ NULL + | ТОГДА "", "" + АдресныеОбъекты3.Наименование + "" "" + АдресныеОбъекты3.Сокращение + | ИНАЧЕ """" + | КОНЕЦ + ВЫБОР + | КОГДА НЕ АдресныеОбъекты4.Наименование ЕСТЬ NULL + | ТОГДА "", "" + АдресныеОбъекты4.Наименование + "" "" + АдресныеОбъекты4.Сокращение + | ИНАЧЕ """" + | КОНЕЦ + ВЫБОР + | КОГДА НЕ АдресныеОбъекты5.Наименование ЕСТЬ NULL + | ТОГДА "", "" + АдресныеОбъекты5.Наименование + "" "" + АдресныеОбъекты5.Сокращение + | ИНАЧЕ """" + | КОНЕЦ + |ИЗ + | АдресныеОбъекты КАК АдресныеОбъекты + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты1 + | ПО АдресныеОбъекты.МуниципальныйРодительскийИдентификатор = АдресныеОбъекты1.Идентификатор + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты2 + | ПО (АдресныеОбъекты1.МуниципальныйРодительскийИдентификатор = АдресныеОбъекты2.Идентификатор) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты3 + | ПО (АдресныеОбъекты2.МуниципальныйРодительскийИдентификатор = АдресныеОбъекты3.Идентификатор) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты4 + | ПО (АдресныеОбъекты3.МуниципальныйРодительскийИдентификатор = АдресныеОбъекты4.Идентификатор) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты5 + | ПО (АдресныеОбъекты4.МуниципальныйРодительскийИдентификатор = АдресныеОбъекты5.Идентификатор) + |ГДЕ + | АдресныеОбъекты.Наименование <> """" | |УПОРЯДОЧИТЬ ПО - | Наименование - |ИТОГИ - | КОЛИЧЕСТВО(СубъектРФНаименование), - | КОЛИЧЕСТВО(ОкругНаименование), - | КОЛИЧЕСТВО(РайонНаименование), - | КОЛИЧЕСТВО(ГородНаименование), - | КОЛИЧЕСТВО(ВнутригородскойРайонНаименование), - | КОЛИЧЕСТВО(НаселенныйПунктНаименование), - | КОЛИЧЕСТВО(УлицаНаименование), - | КОЛИЧЕСТВО(ДополнительныйНаименование), - | КОЛИЧЕСТВО(ПодчиненныйНаименование) - |ПО - | ОБЩИЕ"; - + | Представление"; + + Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("ПочтовыйИндекс", Индекс); - Запрос.УстановитьПараметр("Уровни", Уровни); - ДеревоЗапроса = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); + Результат.Данные = Запрос.Выполнить().Выгрузить(); - СтрокиДерева = ДеревоЗапроса.Строки; - Если СтрокиДерева.Количество() = 0 Тогда - // Нечего заполнять - Возврат; - КонецЕсли; - - // По первой строке определяем общее название - то, что есть в каждой строке. - СтрокаИтогов = СтрокиДерева[0]; - ДетальныеСтроки = СтрокаИтогов.Строки; - ПерваяСтрока = ДетальныеСтроки[0]; - ВсегоДетальных = ДетальныеСтроки.Количество(); - - // Первые 18 колонок описывают иерархию, одна строка есть точно. - ОбщееПредставление = Формат(Индекс, "ЧЦ=6; ЧН=; ЧВН=; ЧГ="); - Пустые = Новый Структура; - - Позиция = 0; - Пока Позиция < 18 Цикл - ИмяКолонки = ДеревоЗапроса.Колонки[Позиция].Имя; - Если СтрокаИтогов[ИмяКолонки] = ВсегоДетальных Тогда - // Наименование - Пустые.Вставить(ИмяКолонки); - ОбщееПредставление = ОбщееПредставление + ", " + ПерваяСтрока[ИмяКолонки]; - // Сокращение - ИмяКолонки = ДеревоЗапроса.Колонки[Позиция + 1].Имя; - Пустые.Вставить(ИмяКолонки); - ОбщееПредставление = ОбщееПредставление + " " + ПерваяСтрока[ИмяКолонки]; - КонецЕсли; - Позиция = Позиция + 2; - КонецЦикла; - - Результат.ОбщаяЧастьПредставления = ОбщееПредставление; - Данные = Результат.Данные; - - Для Каждого Строка Из ДетальныеСтроки Цикл - // Убираем общие, из оставшихся будет полное наименование. - ЗаполнитьЗначенияСвойств(Строка, Пустые); - СтрокаРезультата = Данные.Добавить(); - СтрокаРезультата.Неактуален = Строка.Неактуален; - СтрокаРезультата.Идентификатор = Строка.Идентификатор; - - Представление = ""; - ДобавитьВПредставлениеЭлементАдреса(Представление, Строка.Наименование, Строка.Сокращение); - ДобавитьВПредставлениеЭлементАдреса(Представление, Строка.ПодчиненныйНаименование, Строка.ПодчиненныйСокращение); - ДобавитьВПредставлениеЭлементАдреса(Представление, Строка.ДополнительныйНаименование, Строка.ДополнительныйСокращение); - ДобавитьВПредставлениеЭлементАдреса(Представление, Строка.УлицаНаименование, Строка.УлицаСокращение); - ДобавитьВПредставлениеЭлементАдреса(Представление, Строка.НаселенныйПунктНаименование, Строка.НаселенныйПунктСокращение); - ДобавитьВПредставлениеЭлементАдреса(Представление, Строка.ВнутригородскойРайонНаименование, Строка.ВнутригородскойРайонСокращение); - ДобавитьВПредставлениеЭлементАдреса(Представление, Строка.ГородНаименование, Строка.ГородСокращение); - ДобавитьВПредставлениеЭлементАдреса(Представление, Строка.РайонНаименование, Строка.РайонСокращение); - ДобавитьВПредставлениеЭлементАдреса(Представление, Строка.ОкругНаименование, Строка.ОкругСокращение); - ДобавитьВПредставлениеЭлементАдреса(Представление, Строка.СубъектРФНаименование, Строка.СубъектРФСокращение); - СтрокаРезультата.Представление = Представление; - - КонецЦикла; - - Данные.Сортировать("Представление"); КонецПроцедуры // Заполнение данных для выбора адреса из загруженных данных. // -Процедура ЗаполнитьАдресаДляИнтерактивногоВыбораВнутр(Результат, Уровни, Родитель, Уровень, ДополнительныеПараметры) +Процедура ЗаполнитьАдресаДляИнтерактивногоВыбораВнутр(Результат, Родитель, Уровень, ТипАдреса, ДополнительныеПараметры) - ПараметрПерваяЗапись = Неопределено; - ТекстРазмерПорции = ""; - ТекстСортировкиПорции = ""; - СравнениеПорядкаПорции = ">="; + Запрос = Новый Запрос(); + Запрос.Текст = "ВЫБРАТЬ + | &Наименование КАК Представление, + | АдресныеОбъекты.Идентификатор КАК Идентификатор, + | АдресныеОбъекты.ДополнительныеАдресныеСведения КАК ДополнительныеАдресныеСведения, + | ДополнительныеСведения.ПочтовыйИндекс КАК ПочтовыйИндекс, + | ИСТИНА КАК Муниципальный + |ИЗ + | РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеАдресныеСведения КАК ДополнительныеСведения + | ПО АдресныеОбъекты.ДополнительныеАдресныеСведения = ДополнительныеСведения.Идентификатор + |ГДЕ + | АдресныеОбъекты.Уровень = &Уровень + | &ОтборПоИдентификатору &ОтборПоСтроке + | + |УПОРЯДОЧИТЬ ПО + | Представление"; - // Если передан параметр - размер порции, то отдаем порционно, иначе - все. - РазмерПорции = Неопределено; - ФормироватьПорцию = ДополнительныеПараметры.Свойство("РазмерПорции", РазмерПорции) И ЗначениеЗаполнено(РазмерПорции); - - Если ФормироватьПорцию Тогда - ТекстРазмерПорции = "ПЕРВЫЕ " + Формат(РазмерПорции, "ЧН=; ЧГ="); - - Если ДополнительныеПараметры.Свойство("ПерваяЗапись") И ЗначениеЗаполнено(ДополнительныеПараметры.ПерваяЗапись) Тогда - ПараметрПерваяЗапись = Новый УникальныйИдентификатор(ДополнительныеПараметры.ПерваяЗапись); - КонецЕсли; - - Если ДополнительныеПараметры.Свойство("Сортировка") И ЗначениеЗаполнено(ДополнительныеПараметры.Сортировка) Тогда - ТекстСортировкиПорции = ДополнительныеПараметры.Сортировка; - КонецЕсли; - - Если ТекстСортировкиПорции <> "ASC" Тогда - СравнениеПорядкаПорции = "<="; - КонецЕсли; - КонецЕсли; - - // Особые случаи - Если Уровень = 1 Тогда - // Запрос регионов, игнорируем родителя. - ТекстЗапроса = "ВЫБРАТЬ " + ТекстРазмерПорции + " - | Регион.Идентификатор КАК Идентификатор, - | Регион.Наименование + "" "" + Регион.Сокращение КАК Представление, - | - | ВЫБОР КОГДА 1 В ( - | ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты - | ГДЕ Уровень = 2 И КодСубъектаРФ = Регион.КодСубъектаРФ - | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты - | ГДЕ Уровень = 3 И КодСубъектаРФ = Регион.КодСубъектаРФ - | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты - | ГДЕ Уровень = 4 И КодСубъектаРФ = Регион.КодСубъектаРФ - | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты - | ГДЕ Уровень = 5 И КодСубъектаРФ = Регион.КодСубъектаРФ - | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты - | ГДЕ Уровень = 6 И КодСубъектаРФ = Регион.КодСубъектаРФ - | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты - | ГДЕ Уровень = 7 И КодСубъектаРФ = Регион.КодСубъектаРФ - | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты - | ГДЕ Уровень = 90 И КодСубъектаРФ = Регион.КодСубъектаРФ - | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты - | ГДЕ Уровень = 91 И КодСубъектаРФ = Регион.КодСубъектаРФ - | ) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК РегионЗагружен - | - |ИЗ - | РегистрСведений.АдресныеОбъекты КАК Регион - | - |" + ?(ПараметрПерваяЗапись = Неопределено, "", " - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК ТекущийПорядокПорции - |ПО - | ТекущийПорядокПорции.Идентификатор = &ПервыйЭлементПорции - |") + " - | - |ГДЕ - | Регион.Уровень = 1 - | И Регион.КодОкруга = 0 - | И Регион.КодРайона = 0 - | И Регион.КодГорода = 0 - | И Регион.КодВнутригородскогоРайона = 0 - | И Регион.КодНаселенногоПункта = 0 - | И Регион.КодУлицы = 0 - | И Регион.КодДополнительногоЭлемента = 0 - | И Регион.КодПодчиненногоЭлемента = 0 - | - |" + ?(ПараметрПерваяЗапись = Неопределено, "", " - | И Регион.Идентификатор <> ТекущийПорядокПорции.Идентификатор - | И Регион.Наименование + "" "" + Регион.Сокращение " + СравнениеПорядкаПорции + " ТекущийПорядокПорции.Наименование + "" "" + ТекущийПорядокПорции.Сокращение - |") + " - | - |УПОРЯДОЧИТЬ ПО - | Представление " + ТекстСортировкиПорции + " - |"; - ИначеЕсли Уровень = -1 Тогда - // Запрос ориентиров, родитель - адресный объект. - ТекстЗапроса = "ВЫБРАТЬ " + ТекстРазмерПорции + " - | Идентификатор КАК Идентификатор, - | Описание КАК Представление - |ИЗ - | РегистрСведений.ОриентирыАдресныхОбъектов КАК Ориентиры - | - |" + ?(ПараметрПерваяЗапись = Неопределено, "", " - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК ТекущийПорядокПорции - |ПО - | ТекущийПорядокПорции.Идентификатор = &ПервыйЭлементПорции - |") + " - | - |ГДЕ - | Ориентиры.АдресныйОбъект = &Родитель - | - |" + ?(ПараметрПерваяЗапись = Неопределено, "", " - | И Ориентиры.Идентификатор <> ТекущийПорядокПорции.Идентификатор - | И Ориентиры.Наименование + "" "" + Ориентиры.Сокращение " + СравнениеПорядкаПорции + " ТекущийПорядокПорции.Наименование + "" "" + ТекущийПорядокПорции.Сокращение - |") + " - | - |УПОРЯДОЧИТЬ ПО - | Представление " + ТекстСортировкиПорции + " - |"; + Запрос.УстановитьПараметр("Уровень", Уровень); + Если Уровень > 1 Тогда + Запрос.УстановитьПараметр("Идентификатор", Родитель); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтборПоИдентификатору", "И АдресныеОбъекты.РодительскийИдентификатор = &Идентификатор"); Иначе - // Обычный уровень - ТекстЗапроса = "ВЫБРАТЬ " + ТекстРазмерПорции + " - | АдресныйОбъект.Идентификатор КАК Идентификатор, - | АдресныйОбъект.Наименование + "" "" + АдресныйОбъект.Сокращение КАК Представление, - | ИСТИНА КАК РегионЗагружен, - | ВЫБОР КОГДА АдресныйОбъект.Актуален ТОГДА ЛОЖЬ ИНАЧЕ ИСТИНА КОНЕЦ КАК Неактуален - |ИЗ - | РегистрСведений.АдресныеОбъекты КАК РодительскийОбъект - | - |" + ?(ПараметрПерваяЗапись = Неопределено, "", " - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК ТекущийПорядокПорции - |ПО - | ТекущийПорядокПорции.Идентификатор = &ПервыйЭлементПорции - |") + " - | - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК АдресныйОбъект - |ПО - | АдресныйОбъект.Уровень = &Уровень - | И АдресныйОбъект.Уровень В (&Уровни) - | И АдресныйОбъект.КодСубъектаРФ = РодительскийОбъект.КодСубъектаРФ - |"; - Если Уровень = 2 Тогда - // Округ - ТекстЗапроса = ТекстЗапроса + " - | И АдресныйОбъект.КодРайона = 0 - | И АдресныйОбъект.КодГорода = 0 - | И АдресныйОбъект.КодВнутригородскогоРайона = 0 - | И АдресныйОбъект.КодНаселенногоПункта = 0 - | И АдресныйОбъект.КодУлицы = 0 - | И АдресныйОбъект.КодДополнительногоЭлемента = 0 - | И АдресныйОбъект.КодПодчиненногоЭлемента = 0 - |"; - ИначеЕсли Уровень = 3 Тогда - // Район - ТекстЗапроса = ТекстЗапроса + " - | И АдресныйОбъект.КодОкруга = РодительскийОбъект.КодОкруга - | И АдресныйОбъект.КодГорода = 0 - | И АдресныйОбъект.КодВнутригородскогоРайона = 0 - | И АдресныйОбъект.КодНаселенногоПункта = 0 - | И АдресныйОбъект.КодУлицы = 0 - | И АдресныйОбъект.КодДополнительногоЭлемента = 0 - | И АдресныйОбъект.КодПодчиненногоЭлемента = 0 - |"; - ИначеЕсли Уровень = 4 Тогда - // Город - ТекстЗапроса = ТекстЗапроса + " - | И АдресныйОбъект.КодОкруга = РодительскийОбъект.КодОкруга - | И АдресныйОбъект.КодРайона = РодительскийОбъект.КодРайона - | И АдресныйОбъект.КодВнутригородскогоРайона = 0 - | И АдресныйОбъект.КодНаселенногоПункта = 0 - | И АдресныйОбъект.КодУлицы = 0 - | И АдресныйОбъект.КодДополнительногоЭлемента = 0 - | И АдресныйОбъект.КодПодчиненногоЭлемента = 0 - |"; - ИначеЕсли Уровень = 5 Тогда - // Внутригородской район - ТекстЗапроса = ТекстЗапроса + " - | И АдресныйОбъект.КодОкруга = РодительскийОбъект.КодОкруга - | И АдресныйОбъект.КодРайона = РодительскийОбъект.КодРайона - | И АдресныйОбъект.КодГорода = РодительскийОбъект.КодГорода - | И АдресныйОбъект.КодНаселенногоПункта = 0 - | И АдресныйОбъект.КодУлицы = 0 - | И АдресныйОбъект.КодДополнительногоЭлемента = 0 - | И АдресныйОбъект.КодПодчиненногоЭлемента = 0 - |"; - ИначеЕсли Уровень = 6 Тогда - // Населенный пункт - ТекстЗапроса = ТекстЗапроса + " - | И АдресныйОбъект.КодОкруга = РодительскийОбъект.КодОкруга - | И АдресныйОбъект.КодРайона = РодительскийОбъект.КодРайона - | И АдресныйОбъект.КодГорода = РодительскийОбъект.КодГорода - | И АдресныйОбъект.КодВнутригородскогоРайона = РодительскийОбъект.КодВнутригородскогоРайона - | И АдресныйОбъект.КодУлицы = 0 - | И АдресныйОбъект.КодДополнительногоЭлемента = 0 - | И АдресныйОбъект.КодПодчиненногоЭлемента = 0 - |"; - ИначеЕсли Уровень = 7 Тогда - // Улица - ТекстЗапроса = ТекстЗапроса + " - | И АдресныйОбъект.КодОкруга = РодительскийОбъект.КодОкруга - | И АдресныйОбъект.КодРайона = РодительскийОбъект.КодРайона - | И АдресныйОбъект.КодГорода = РодительскийОбъект.КодГорода - | И АдресныйОбъект.КодВнутригородскогоРайона = РодительскийОбъект.КодВнутригородскогоРайона - | И АдресныйОбъект.КодНаселенногоПункта = РодительскийОбъект.КодНаселенногоПункта - | И АдресныйОбъект.КодДополнительногоЭлемента = 0 - | И АдресныйОбъект.КодПодчиненногоЭлемента = 0 - |"; - ИначеЕсли Уровень = 90 Тогда - // Дополнительный - ТекстЗапроса = ТекстЗапроса + " - | И АдресныйОбъект.КодОкруга = РодительскийОбъект.КодОкруга - | И АдресныйОбъект.КодРайона = РодительскийОбъект.КодРайона - | И АдресныйОбъект.КодГорода = РодительскийОбъект.КодГорода - | И АдресныйОбъект.КодВнутригородскогоРайона = РодительскийОбъект.КодВнутригородскогоРайона - | И АдресныйОбъект.КодНаселенногоПункта = РодительскийОбъект.КодНаселенногоПункта - | И АдресныйОбъект.КодУлицы = РодительскийОбъект.КодУлицы - | И АдресныйОбъект.КодПодчиненногоЭлемента = 0 - |"; - ИначеЕсли Уровень = 91 Тогда - // Подчиненный - ТекстЗапроса = ТекстЗапроса + " - | И АдресныйОбъект.КодОкруга = РодительскийОбъект.КодОкруга - | И АдресныйОбъект.КодРайона = РодительскийОбъект.КодРайона - | И АдресныйОбъект.КодГорода = РодительскийОбъект.КодГорода - | И АдресныйОбъект.КодВнутригородскогоРайона = РодительскийОбъект.КодВнутригородскогоРайона - | И АдресныйОбъект.КодНаселенногоПункта = РодительскийОбъект.КодНаселенногоПункта - | И АдресныйОбъект.КодУлицы = РодительскийОбъект.КодУлицы - | И АдресныйОбъект.КодДополнительногоЭлемента = РодительскийОбъект.КодДополнительногоЭлемента - |"; - Иначе - ВызватьИсключение НСтр("ru = 'Запрос некорректного уровня адресного объекта'"); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтборПоИдентификатору", ""); + КонецЕсли; + + Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") + И ДополнительныеПараметры.Свойство("СтрокаПоиска") + И ЗначениеЗаполнено(ДополнительныеПараметры.СтрокаПоиска) Тогда + + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтборПоСтроке", "И АдресныеОбъекты.Наименование ПОДОБНО &СтрокаПоиска"); + + Иначе + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтборПоСтроке", ""); + + КонецЕсли; + + Если АдресныйКлассификаторКлиентСервер.ЭтоМуниципальныйАдрес(ТипАдреса) Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, "РодительскийИдентификатор", "МуниципальныйРодительскийИдентификатор"); + КонецЕсли; + + Если Уровень = 31 Или Уровень = 41 Тогда + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Наименование", "АдресныеОбъекты.Наименование"); + Если ДополнительныеПараметры.Свойство("СтрокаПоиска") Тогда + Запрос.УстановитьПараметр("СтрокаПоиска", "%" + ДополнительныеПараметры.СтрокаПоиска + "%"); + КонецЕсли; + + Иначе + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Наименование", "АдресныеОбъекты.Наименование + "" "" + АдресныеОбъекты.Сокращение"); + Если ДополнительныеПараметры.Свойство("СтрокаПоиска") Тогда + Запрос.УстановитьПараметр("СтрокаПоиска", ДополнительныеПараметры.СтрокаПоиска + "%"); КонецЕсли; - ТекстЗапроса = ТекстЗапроса + " - |ГДЕ - | РодительскийОбъект.Идентификатор = &Родитель - | И РодительскийОбъект.Идентификатор <> АдресныйОбъект.Идентификатор - | - |" + ?(ПараметрПерваяЗапись = Неопределено, "", " - | И АдресныйОбъект.Идентификатор <> ТекущийПорядокПорции.Идентификатор - | И АдресныйОбъект.Наименование + "" "" + АдресныйОбъект.Сокращение " + СравнениеПорядкаПорции + " ТекущийПорядокПорции.Наименование + "" "" + ТекущийПорядокПорции.Сокращение - |") + " - | - |УПОРЯДОЧИТЬ ПО - | - | Представление " + ТекстСортировкиПорции + ", АдресныйОбъект.Актуален УБЫВ - |"; КонецЕсли; - - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("Уровень", Уровень); - Запрос.УстановитьПараметр("Уровни", Уровни); - Запрос.УстановитьПараметр("Родитель", Родитель); - - Запрос.УстановитьПараметр("ПервыйЭлементПорции", ПараметрПерваяЗапись); - - Выборка = Запрос.Выполнить().Выбрать(); Данные = Результат.Данные; - Если Уровень <> -1 Тогда - // Обычные объекты - Пока Выборка.Следующий() Цикл - ЗаполнитьЗначенияСвойств(Данные.Добавить(), Выборка); - КонецЦикла; + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда Возврат; КонецЕсли; - // Ориентиры. Описание - строка в хранилище. - Пока Выборка.Следующий() Цикл - Строка = Данные.Добавить(); - Строка.РегионЗагружен = Истина; - Строка.Идентификатор = Выборка.Идентификатор; - Строка.Представление = Выборка.Представление.Получить(); + Для Каждого Строка Из РезультатЗапроса.Выгрузить() Цикл + + ЗаполнитьЗначенияСвойств(Данные.Добавить(), Строка); + КонецЦикла; КонецПроцедуры @@ -3200,6 +3080,7 @@ Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("УникальныйИдентификатор")); Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); Колонки.Добавить("РегионЗагружен", ТипБулево); + Колонки.Добавить("ЭтоМуниципальный", ТипБулево); Данные.Индексы.Добавить("Идентификатор"); Данные.Индексы.Добавить("Представление"); @@ -3207,511 +3088,124 @@ Возврат Данные КонецФункции -// Заполнить коды адреса из загруженных данных +// Заполнение результата проверки адресного объекта по данным сервиса. // -// Параметры: -// Адрес - Структура - Структура содержащая поля адреса. -// -Функция КодыАдресаЗагруженныеДанные(АдресРФ) +Процедура ЗаполнитьРезультатПроверкиАдресаПоКлассификаторуСервис1С(Результат, Знач АдресаДляПроверки) - Адрес = Новый Структура(); - СубъектРФ = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(АдресРФ.СубъектРФ); - Адрес.Вставить("Регион", СубъектРФ.Наименование); - Адрес.Вставить("РегионСокращение", СубъектРФ.Сокращение); + Сервис = АдресныйКлассификаторПовтИсп.СервисКлассификатора1С(); - Район = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(ПолучитьXDTOРеквизитОбъекта(АдресРФ, "СвРайМО/Район")); - Адрес.Вставить("Район", Район.Наименование); + ПрефиксВерсииЗапроса = АдресныйКлассификаторКлиентСервер.ПрефиксВерсииЗапроса(); - Адрес.Вставить("Город", - АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(АдресРФ.Город).Наименование); - Адрес.Вставить("НаселенныйПункт", - АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(АдресРФ.НаселПункт).Наименование); - Адрес.Вставить("Улица", - АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(АдресРФ.Улица).Наименование); - Адрес.Вставить("Округ", - АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(АдресРФ.Округ).Наименование); - Адрес.Вставить("ВнутригРайон", - АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(АдресРФ.ВнутригРайон).Наименование); + HTTPЗапрос = Новый HTTPЗапрос(ПрефиксВерсииЗапроса + "verify"); + ДанныеЗапроса = Новый Массив(); + ДанныеЗапроса.Добавить(АдресаДляПроверки.Адрес); - КодыКЛАДР = СтруктураКодовКЛАДРПоУровням(); - Идентификаторы = СтруктураКодовКЛАДРПоУровням(); - КодыАдреса = СтруктураКодовАдреса(); - Результат = Новый Структура(); - Результат.Вставить("КодыКЛАДР", КодыКЛАДР); - Результат.Вставить("КодыАдреса", КодыАдреса); - Результат.Вставить("Идентификаторы", Идентификаторы); - Результат.Вставить("ИдентификаторАдресногоОбъекта", Неопределено); + АдресаДляПроверки.Адрес.addressType = АдресныйКлассификаторКлиентСервер.ТипАдресаДляВебСервиса(АдресаДляПроверки.Адрес.addressType); - ТекстСоединения = ""; - ТекстДляВыбрать = ""; - ИмяОбъектаДляДополнительныхСведений = "АдресныеОбъектыРегион"; + ПодготовитьАдресаДляПередачиВСервис(ДанныеЗапроса); + ДанныеДляЗапроса = Новый Структура("requests", ДанныеЗапроса); + Адрес = СтруктураВСтрокуJSON(ДанныеДляЗапроса); - Если ПустаяСтрока(Адрес.Округ) Тогда - сОкруг = "0"; - ТекстДляВыбрать = "НЕОПРЕДЕЛЕНО КАК КодКЛАДРОкруг, - |НЕОПРЕДЕЛЕНО КАК ИдентификаторОкруг," + Символы.ПС; - Иначе - ТекстСоединения = ТекстСоединения + Символы.ПС + "ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыОкруг - | ПО АдресныеОбъектыОкруг.Наименование = """ + Адрес.Округ + """ - | И АдресныеОбъектыРегион.КодСубъектаРФ = АдресныеОбъектыОкруг.КодСубъектаРФ - | И АдресныеОбъектыОкруг.Уровень = 2 - | И АдресныеОбъектыОкруг.КодРайона = 0 - | И АдресныеОбъектыОкруг.КодГорода = 0 - | И АдресныеОбъектыОкруг.КодВнутригородскогоРайона = 0 - | И АдресныеОбъектыОкруг.КодНаселенногоПункта = 0 - | И АдресныеОбъектыОкруг.КодУлицы = 0 - | И АдресныеОбъектыОкруг.КодДополнительногоЭлемента = 0 - | И АдресныеОбъектыОкруг.КодПодчиненногоЭлемента = 0"; - сОкруг = "АдресныеОбъектыОкруг.КодОкруга"; - ТекстДляВыбрать = "АдресныеОбъектыОкруг.КодКЛАДР КАК КодКЛАДРОкруг, - |АдресныеОбъектыОкруг.Идентификатор КАК ИдентификаторОкруг," + Символы.ПС; - - ИмяОбъектаДляДополнительныхСведений = "АдресныеОбъектыОкруг"; - КонецЕсли; + HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/json"); + HTTPЗапрос.УстановитьТелоИзСтроки(Адрес); - Если ПустаяСтрока(Адрес.Район) Тогда - сРайон = "0"; - ТекстДляВыбрать = ТекстДляВыбрать + "НЕОПРЕДЕЛЕНО КАК КодКЛАДРРайон, - |НЕОПРЕДЕЛЕНО КАК ИдентификаторРайон," + Символы.ПС; - Иначе - ТекстСоединения = ТекстСоединения + Символы.ПС + "ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыРайон - | ПО АдресныеОбъектыРайон.Наименование = """ + Адрес.Район + """ - | И АдресныеОбъектыРайон.КодОкруга = " + сОкруг + " - | И АдресныеОбъектыРегион.КодСубъектаРФ = АдресныеОбъектыРайон.КодСубъектаРФ - | И АдресныеОбъектыРайон.Уровень = 3 - | И АдресныеОбъектыРайон.КодГорода = 0 - | И АдресныеОбъектыРайон.КодВнутригородскогоРайона = 0 - | И АдресныеОбъектыРайон.КодНаселенногоПункта = 0 - | И АдресныеОбъектыРайон.КодУлицы = 0 - | И АдресныеОбъектыРайон.КодДополнительногоЭлемента = 0 - | И АдресныеОбъектыРайон.КодПодчиненногоЭлемента = 0"; - сРайон = "АдресныеОбъектыРайон.КодРайона"; - ТекстДляВыбрать = ТекстДляВыбрать + "АдресныеОбъектыРайон.КодКЛАДР КАК КодКЛАДРРайон, - |АдресныеОбъектыРайон.Идентификатор КАК ИдентификаторРайон," + Символы.ПС; - ИмяОбъектаДляДополнительныхСведений = "АдресныеОбъектыРайон"; - КонецЕсли; - - Если ПустаяСтрока(Адрес.Город) Тогда - сГород = "0"; - ТекстДляВыбрать = ТекстДляВыбрать + "НЕОПРЕДЕЛЕНО КАК КодКЛАДРГород, - |НЕОПРЕДЕЛЕНО КАК ИдентификаторГород," + Символы.ПС; - Иначе - ТекстСоединения = ТекстСоединения + Символы.ПС + " ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыГород - | ПО АдресныеОбъектыГород.Наименование = """ + Адрес.Город + """ - | И АдресныеОбъектыРегион.КодСубъектаРФ = АдресныеОбъектыГород.КодСубъектаРФ - | И АдресныеОбъектыГород.Уровень = 4 - | И АдресныеОбъектыГород.КодОкруга = " + сОкруг + " - | И АдресныеОбъектыГород.КодРайона = " + сРайон + " - | И АдресныеОбъектыГород.КодВнутригородскогоРайона = 0 - | И АдресныеОбъектыГород.КодНаселенногоПункта = 0 - | И АдресныеОбъектыГород.КодУлицы = 0 - | И АдресныеОбъектыГород.КодДополнительногоЭлемента = 0 - | И АдресныеОбъектыГород.КодПодчиненногоЭлемента = 0"; - - сГород = "АдресныеОбъектыГород.КодГорода"; - ТекстДляВыбрать = ТекстДляВыбрать + "АдресныеОбъектыГород.КодКЛАДР КАК КодКЛАДРГород, - |АдресныеОбъектыГород.Идентификатор КАК ИдентификаторГород," + Символы.ПС; - ИмяОбъектаДляДополнительныхСведений = "АдресныеОбъектыГород"; - КонецЕсли; - - Если ПустаяСтрока(Адрес.ВнутригРайон) Тогда - сВнутригородскойРайон = "0"; - ТекстДляВыбрать = ТекстДляВыбрать + "НЕОПРЕДЕЛЕНО КАК КодКЛАДРВнутригородскойРайон, - |НЕОПРЕДЕЛЕНО КАК ИдентификаторВнутригородскойРайон," + Символы.ПС; - Иначе - ТекстСоединения = ТекстСоединения + Символы.ПС + " ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыВнутригородскойРайон - | ПО АдресныеОбъектыВнутригородскойРайон.Наименование = """ + Адрес.ВнутригРайон + """ - | И АдресныеОбъектыРегион.КодСубъектаРФ = АдресныеОбъектыВнутригородскойРайон.КодСубъектаРФ - | И АдресныеОбъектыВнутригородскойРайон.КодОкруга = " + сОкруг + " - | И АдресныеОбъектыВнутригородскойРайон.КодРайона = " + сРайон + " - | И АдресныеОбъектыВнутригородскойРайон.КодГорода = " + сГород + " - | И АдресныеОбъектыВнутригородскойРайон.КодНаселенногоПункта = 0 - | И АдресныеОбъектыВнутригородскойРайон.КодУлицы = 0 - | И АдресныеОбъектыВнутригородскойРайон.КодДополнительногоЭлемента = 0 - | И АдресныеОбъектыВнутригородскойРайон.КодПодчиненногоЭлемента = 0"; - сВнутригородскойРайон = "АдресныеОбъектыВнутригородскойРайон.КодВнутригородскогоРайона"; - ТекстДляВыбрать = ТекстДляВыбрать + "АдресныеОбъектыВнутригородскойРайон.КодКЛАДР КАК КодКЛАДРВнутригородскойРайон, - |АдресныеОбъектыВнутригородскойРайон.Идентификатор КАК ИдентификаторВнутригородскойРайон," + Символы.ПС; - ИмяОбъектаДляДополнительныхСведений = "АдресныеОбъектыВнутригородскойРайон"; - КонецЕсли; - - Если ПустаяСтрока(Адрес.НаселенныйПункт) Тогда - сНаселенногоПункта = "0"; - ТекстДляВыбрать = ТекстДляВыбрать + "НЕОПРЕДЕЛЕНО КАК КодКЛАДРНаселенныйПункт, - |НЕОПРЕДЕЛЕНО КАК ИдентификаторНаселенныйПункт," + Символы.ПС; - Иначе - ТекстСоединения = ТекстСоединения + Символы.ПС + " ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыНаселенныйПункт - | ПО АдресныеОбъектыНаселенныйПункт.Наименование = """ + Адрес.НаселенныйПункт + """ - | И АдресныеОбъектыРегион.КодСубъектаРФ = АдресныеОбъектыНаселенныйПункт.КодСубъектаРФ - | И АдресныеОбъектыНаселенныйПункт.Уровень = 6 - | И АдресныеОбъектыНаселенныйПункт.КодОкруга = " + сОкруг + " - | И АдресныеОбъектыНаселенныйПункт.КодРайона = " + сРайон + " - | И АдресныеОбъектыНаселенныйПункт.КодГорода = " + сГород + " - | И АдресныеОбъектыНаселенныйПункт.КодВнутригородскогоРайона = " + сВнутригородскойРайон + " - | И АдресныеОбъектыНаселенныйПункт.КодУлицы = 0 - | И АдресныеОбъектыНаселенныйПункт.КодДополнительногоЭлемента = 0 - | И АдресныеОбъектыНаселенныйПункт.КодПодчиненногоЭлемента = 0"; - сНаселенногоПункта = "АдресныеОбъектыНаселенныйПункт.КодНаселенногоПункта"; - ТекстДляВыбрать = ТекстДляВыбрать + "АдресныеОбъектыНаселенныйПункт.КодКЛАДР КАК КодКЛАДРНаселенныйПункт, - |АдресныеОбъектыНаселенныйПункт.Идентификатор КАК ИдентификаторНаселенныйПункт," + Символы.ПС; - ИмяОбъектаДляДополнительныхСведений = "АдресныеОбъектыНаселенныйПункт"; - КонецЕсли; - - Если ПустаяСтрока(Адрес.Улица) Тогда - ТекстДляВыбрать = ТекстДляВыбрать + "НЕОПРЕДЕЛЕНО КАК КодКЛАДРУлица, - |НЕОПРЕДЕЛЕНО КАК ИдентификаторУлица," + Символы.ПС; - Иначе - ТекстСоединения = ТекстСоединения + Символы.ПС + " ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУлица - | ПО АдресныеОбъектыУлица.Наименование = """ + Адрес.Улица + """ - | И АдресныеОбъектыРегион.КодСубъектаРФ = АдресныеОбъектыУлица.КодСубъектаРФ - | И АдресныеОбъектыУлица.Уровень = 7 - | И АдресныеОбъектыУлица.КодОкруга = " + сОкруг + " - | И АдресныеОбъектыУлица.КодРайона = " + сРайон + " - | И АдресныеОбъектыУлица.КодГорода = " + сГород + " - | И АдресныеОбъектыУлица.КодВнутригородскогоРайона = " + сВнутригородскойРайон + " - | И АдресныеОбъектыУлица.КодНаселенногоПункта = " + сНаселенногоПункта + " - | И АдресныеОбъектыУлица.КодДополнительногоЭлемента = 0 - | И АдресныеОбъектыУлица.КодПодчиненногоЭлемента = 0"; - - ТекстДляВыбрать = ТекстДляВыбрать + "АдресныеОбъектыУлица.КодКЛАДР КАК КодКЛАДРУлица, - |АдресныеОбъектыУлица.Идентификатор КАК ИдентификаторУлица," + Символы.ПС; - ИмяОбъектаДляДополнительныхСведений = "АдресныеОбъектыУлица"; - КонецЕсли; - ТекстДляВыбрать = ТекстДляВыбрать + ИмяОбъектаДляДополнительныхСведений + ".Идентификатор КАК Идентификатор, "; - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | АдресныеОбъектыРегион.КодКЛАДР КАК КодКЛАДРРегион, - | АдресныеОбъектыРегион.Идентификатор КАК ИдентификаторРегион, - | АдресныеОбъектыРегион.КодСубъектаРФ КАК КодСубъектаРФ, " + ТекстДляВыбрать + " - | ДополнительныеАдресныеСведения.OKATO КАК OKATO, - | ДополнительныеАдресныеСведения.ОКТМО КАК ОКТМО, - | ДополнительныеАдресныеСведения.КодИФНСФЛ, - | ДополнительныеАдресныеСведения.КодИФНСЮЛ, - | ДополнительныеАдресныеСведения.КодУчасткаИФНСФЛ, - | ДополнительныеАдресныеСведения.КодУчасткаИФНСЮЛ - |ИЗ - | РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыРегион " + ТекстСоединения + " - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеАдресныеСведения КАК ДополнительныеАдресныеСведения - | ПО (" + ИмяОбъектаДляДополнительныхСведений + ".Дополнительно = ДополнительныеАдресныеСведения.Идентификатор) - |ГДЕ - | АдресныеОбъектыРегион.Наименование = &Регион - | И АдресныеОбъектыРегион.Уровень = 1 - | И АдресныеОбъектыРегион.КодОкруга = 0 - | И АдресныеОбъектыРегион.КодРайона = 0 - | И АдресныеОбъектыРегион.КодГорода = 0 - | И АдресныеОбъектыРегион.КодВнутригородскогоРайона = 0 - | И АдресныеОбъектыРегион.КодНаселенногоПункта = 0 - | И АдресныеОбъектыРегион.КодУлицы = 0 - | И АдресныеОбъектыРегион.КодДополнительногоЭлемента = 0 - | И АдресныеОбъектыРегион.КодПодчиненногоЭлемента = 0 - | И АдресныеОбъектыРегион.Сокращение = &РегионСокращение"; - - Запрос.УстановитьПараметр("Регион", Адрес.Регион); - Запрос.УстановитьПараметр("РегионСокращение", Адрес.РегионСокращение); - - РезультатЗапроса = Запрос.Выполнить().Выбрать(); - - Если РезультатЗапроса.Следующий() Тогда - КодКЛАДР = 0; - УстановитьКодКладр(Результат.КодыКЛАДР, "Регион", РезультатЗапроса.КодКЛАДРРегион, КодКЛАДР); - УстановитьКодКладр(Результат.КодыКЛАДР, "Округ", РезультатЗапроса.КодКЛАДРОкруг, КодКЛАДР); - УстановитьКодКладр(Результат.КодыКЛАДР, "Район", РезультатЗапроса.КодКЛАДРРайон, КодКЛАДР); - УстановитьКодКладр(Результат.КодыКЛАДР, "Город", РезультатЗапроса.КодКЛАДРГород, КодКЛАДР); - УстановитьКодКладр(Результат.КодыКЛАДР, "ВнутригородскойРайон", РезультатЗапроса.КодКЛАДРВнутригородскойРайон, КодКЛАДР); - УстановитьКодКладр(Результат.КодыКЛАДР, "НаселенныйПункт", РезультатЗапроса.КодКЛАДРНаселенныйПункт, КодКЛАДР); - УстановитьКодКладр(Результат.КодыКЛАДР, "Улица", РезультатЗапроса.КодКЛАДРУлица, КодКЛАДР); - - ИдентификаторАдресногоОбъекта = Неопределено; - УстановитьИдентификатор(Результат.Идентификаторы, "Регион", РезультатЗапроса.ИдентификаторРегион, ИдентификаторАдресногоОбъекта); - УстановитьИдентификатор(Результат.Идентификаторы, "Округ", РезультатЗапроса.ИдентификаторОкруг, ИдентификаторАдресногоОбъекта); - УстановитьИдентификатор(Результат.Идентификаторы, "Район", РезультатЗапроса.ИдентификаторРайон, ИдентификаторАдресногоОбъекта); - УстановитьИдентификатор(Результат.Идентификаторы, "Город", РезультатЗапроса.ИдентификаторГород, ИдентификаторАдресногоОбъекта); - УстановитьИдентификатор(Результат.Идентификаторы, "ВнутригородскойРайон", РезультатЗапроса.ИдентификаторВнутригородскойРайон, ИдентификаторАдресногоОбъекта); - УстановитьИдентификатор(Результат.Идентификаторы, "НаселенныйПункт", РезультатЗапроса.ИдентификаторНаселенныйПункт, ИдентификаторАдресногоОбъекта); - УстановитьИдентификатор(Результат.Идентификаторы, "Улица", РезультатЗапроса.ИдентификаторУлица, ИдентификаторАдресногоОбъекта); - Результат.Вставить("ИдентификаторАдресногоОбъекта", ИдентификаторАдресногоОбъекта); - - ЗаполнитьЗначенияСвойств(Результат.КодыАдреса, РезультатЗапроса); - Если НЕ ЗначениеЗаполнено(Результат.КодыАдреса.ОКТМО) ИЛИ Результат.КодыАдреса.ОКТМО = 0 Тогда - // Получение кодов под идентификатору - СведенияОДоме = ЗданияАдреса(АдресРФ); - Если СведенияОДоме.Количество() > 0 И ЗначениеЗаполнено(РезультатЗапроса.Идентификатор) Тогда - ЗаполнитьКодыПоИдентификаторуДома(РезультатЗапроса.Идентификатор, СведенияОДоме, Результат.КодыАдреса); - КонецЕсли; - КонецЕсли; - - Результат.КодыАдреса.КодКЛАДР = КодКЛАДР; - КонецЕсли; - - Возврат Результат; -КонецФункции - -Процедура ОпределитьФорматКодов(КодыАдреса) - - Если ЗначениеЗаполнено(КодыАдреса.ОКТМО) Тогда - - ОКТМОЧисло = КодыАдреса.ОКТМО; - ОКТМОСтрока = Формат(ОКТМОЧисло, "ЧГ=0"); - - Если СтрДлина(ОКТМОСтрока) < 8 Тогда - КодыАдреса.ОКТМО = Формат(ОКТМОЧисло, "ЧЦ=8; ЧВН=; ЧГ=0"); - ИначеЕсли СтрДлина(ОКТМОСтрока) = 10 Тогда - КодыАдреса.ОКТМО = Формат(ОКТМОЧисло, "ЧЦ=11; ЧВН=; ЧГ=0"); - Иначе - КодыАдреса.ОКТМО = ОКТМОСтрока; - КонецЕсли - - КонецЕсли; - Если ЗначениеЗаполнено(КодыАдреса.OKATO) Тогда - КодыАдреса.OKATO = Формат(КодыАдреса.OKATO, "ЧГ=0"); - КонецЕсли; - -КонецПроцедуры - -// Определяет индекс и ОКТМО адреса по частям адреса. -// -// Параметры: -// АдресРФ - ОбъектXDTO - Адрес РФ. -// -// Возвращаемое значение: -// Структура - Коды адреса. -// -Функция КодыАдресаСервис(АдресРФ, Идентификаторы) - - Результат = СтруктураКодовАдреса(); - - АдресаДляПроверки = Новый Массив; - РезультатВебСервис = Новый Структура("Данные", Новый Массив); - СтруктураОписанияОшибкиПоставщика(РезультатВебСервис); - Уровни = АдресныйКлассификаторКлиентСервер.УровниКлассификатораФИАС(); - АдресаДляПроверки.Добавить(Новый Структура("Адрес, Уровни", АдресРФ , Уровни)); Попытка - ЗаполнитьРезультатПроверкиАдресаПоКлассификаторуСервис1С(РезультатВебСервис, АдресаДляПроверки, Истина); + РезультатПроверки = Сервис.ОтправитьДляОбработки(HTTPЗапрос); Исключение - СтруктураОписанияОшибкиПоставщика(РезультатВебСервис, ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации( СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , РезультатВебСервис.ПодробноеПредставлениеОшибки); + Результат.Отказ = Истина; + Результат.ПодробноеПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + Результат.КраткоеПредставлениеОшибки = НСтр("ru='При получении данных из веб-сервиса возникли проблемы.'"); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, Результат.ПодробноеПредставлениеОшибки); + Возврат; КонецПопытки; - Если НЕ РезультатВебСервис.Отказ Тогда - Если РезультатВебСервис.Данные[0].Варианты.Количество() > 0 Тогда - ЗаполнитьЗначенияСвойств(Результат, РезультатВебСервис.Данные[0].Варианты[0]); - Если ТипЗнч(Идентификаторы) = Тип("Структура") Тогда - Идентификаторы = РезультатВебСервис.Данные[0].Идентификаторы; + Результат.Отказ = Ложь; + ПолученныеДанные = РезультатПроверки.ПолучитьТелоКакСтроку("UTF-8"); + + Данные = Новый Массив; + Если РезультатПроверки.КодСостояния = 200 Тогда + Данные = СтрокаJSONВСтруктуру(ПолученныеДанные); + + Иначе + ТекстОшибки = НСтр("ru='При получении данных из веб-сервиса возникли проблемы. Сервер вернул код %1. %2'"); + Результат.ПодробноеПредставлениеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, РезультатПроверки.КодСостояния, ПолученныеДанные); + Результат.КраткоеПредставлениеОшибки = НСтр("ru='При получении данных из веб-сервиса возникли проблемы.'"); + Результат.Отказ = Истина; + Возврат; + КонецЕсли; + + Если ПолученныеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + Для Каждого ЭлементПроверки Из Данные Цикл + + РезультатПроверки = Новый Структура(); + РезультатПроверки.Вставить("id", ""); + РезультатПроверки.Вставить("АдресПроверен", Ложь); + РезультатПроверки.Вставить("Варианты", Новый Массив); + РезультатПроверки.Вставить("Ошибки", Новый Массив); + + РезультатПроверки.id = ЭлементПроверки.id; + + Если ЭлементПроверки.Свойство("status") Тогда + РезультатПроверки.АдресПроверен = Булево(ЭлементПроверки.status); + КонецЕсли; + + Если ЭлементПроверки.Свойство("errorMessage") И ЗначениеЗаполнено(ЭлементПроверки.errorMessage) Тогда + ОписаниеОшибки = Новый Структура("Ключ,Текст,Подсказка"); + ОписаниеОшибки.Ключ = ЭлементПроверки.errorField; + ОписаниеОшибки.Текст = ЭлементПроверки.errorMessage; + РезультатПроверки.Ошибки.Добавить(ОписаниеОшибки); + КонецЕсли; + + Если ЭлементПроверки.Свойство("value") И ЗначениеЗаполнено(ЭлементПроверки.value) Тогда + РезультатПроверки.Варианты.Добавить(ЭлементПроверки.value); + КонецЕсли; + + Результат.Данные.Добавить(РезультатПроверки); + КонецЦикла; + +КонецПроцедуры + +Функция ПодготовитьАдресаДляПередачиВСервис(Адреса) + + МуниципальныеУровни = Новый Соответствие; + МуниципальныеУровни.Вставить("MunDistrictID", Истина); + МуниципальныеУровни.Вставить("SettlementID", Истина); + + Для каждого Адрес Из Адреса Цикл + Для каждого КлючЗначение Из Адрес Цикл + Если ПустаяСтрока(КлючЗначение.Значение) Или МуниципальныеУровни.Получить(КлючЗначение.Ключ) = Истина Тогда + Адрес[КлючЗначение.Ключ] = Неопределено; КонецЕсли; - КонецЕсли; - КонецЕсли; - - Возврат Результат; -КонецФункции - -// Читает здания и помещения адреса. -// -// Параметры: -// XDTOАдрес - ОбъектXDTO - Контактная информация или XDTO адреса. -// -// Возвращаемое значение: -// Соответствие - Наименование здания и значение. -// -Функция ЗданияАдреса(XDTOАдрес) - - Результат = Новый Соответствие; - Для Каждого ДопЭлемент Из XDTOАдрес.ДопАдрЭл Цикл - Если ДопЭлемент.Номер <> Неопределено Тогда - КодОбъекта = ДопЭлемент.Номер.Тип; - ТипОбъекта = ТипОбъектаПоКодуСериализации(КодОбъекта); - Если ТипОбъекта <> Неопределено И (ТипОбъекта.Тип < 3) Тогда - Результат.Вставить(ВРег(ТипОбъекта.Наименование), ДопЭлемент.Номер.Значение); - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Возврат Результат; -КонецФункции - -Процедура УстановитьКодКЛАДР(КодыКЛАДР, ИмяПоля, Значение, КодКЛАДР) - КодыКЛАДР[ИмяПоля] = Значение; - Если ЗначениеЗаполнено(Значение) Тогда - КодКладр = Значение; - КонецЕсли; -КонецПроцедуры - -Процедура УстановитьИдентификатор(Идентификаторы, ИмяПоля, Значение, Идентификатор) - Идентификаторы[ИмяПоля] = Значение; - Если ЗначениеЗаполнено(Значение) Тогда - Идентификатор = Значение; - КонецЕсли; -КонецПроцедуры - -// Заполнение результата проверки адресного объекта по данным сервиса. -// -Процедура ЗаполнитьРезультатПроверкиАдресаПоКлассификаторуСервис1С(Результат, АдресаДляПроверки, ДобавитьИдентификаторы = Ложь) - - Сервис = АдресныйКлассификаторПовтИсп.СервисКлассификатора1С(); - - СписокДляПроверки = Сервис.ФабрикаXDTO.Создать(Сервис.ФабрикаXDTO.Тип(ПространствоИмен(), "AddressList")); - ТипЭлементаСписка = СписокДляПроверки.Свойства().Получить("Item").Тип; - - Для Каждого ЭлементПроверки Из АдресаДляПроверки Цикл - ПроверяемыйАдрес = СписокДляПроверки.Item.Добавить(Сервис.ФабрикаXDTO.Создать(ТипЭлементаСписка)); - АдресВXML = ОбщегоНазначения.ОбъектXDTOВСтрокуXML(ЭлементПроверки.Адрес); - АдресВXML = СтрЗаменить(АдресВXML, "http://www.v8.1c.ru/ssl/contactinfo_ru", "http://www.v8.1c.ru/ssl/contactinfo"); // Локализация - ПроверяемыйАдрес.Address = ОбщегоНазначения.ОбъектXDTOИзСтрокиXML(АдресВXML, Сервис.ФабрикаXDTO); - ПроверяемыйАдрес.Levels = ЭлементПроверки.Уровни; - КонецЦикла; - - КодЯзыка = ТекущийКодЛокализации(); - - РезультатПроверки = Сервис.Analyze(СписокДляПроверки, КодЯзыка, Ложь, Метаданные.Имя); - - // Формируем структуру результата. - Данные = Результат.Данные; - Индекс = 0; - Для Каждого ЭлементПроверки Из РезультатПроверки.Item Цикл - ДанныеДляАдреса = Новый Структура("Ошибки, Варианты, АдресПроверен", Новый Массив, Новый Массив, Истина); - - ОшибкиПроверки = ДанныеДляАдреса.Ошибки; - ВариантыАдреса = ДанныеДляАдреса.Варианты; - - Для Каждого Ошибка Из ЭлементПроверки.Error Цикл - ОшибкаАдреса = Новый Структура("Ключ, Текст, Подсказка", Ошибка.Key, Ошибка.Text, Ошибка.Suggestion); - ОшибкиПроверки.Добавить(ОшибкаАдреса); КонецЦикла; - - Для Каждого Вариант Из ЭлементПроверки.Variant Цикл - ВариантАдреса = Новый Структура("Идентификатор, Индекс, КодКЛАДР", Вариант.ID, Вариант.PostalCode, Вариант.KLADRCode); - ВариантАдреса.Вставить("OKATO", Вариант.OKATO); - ВариантАдреса.Вставить("ОКТМО", Вариант.OKTMO); - ВариантАдреса.Вставить("КодИФНСФЛ", Вариант.IFNSFL); - ВариантАдреса.Вставить("КодИФНСЮЛ", Вариант.IFNSUL); - ВариантАдреса.Вставить("КодУчасткаИФНСФЛ", Вариант.TERRIFNSFL); - ВариантАдреса.Вставить("КодУчасткаИФНСЮЛ", Вариант.TERRIFNSUL); - ВариантыАдреса.Добавить(ВариантАдреса); - КонецЦикла; - - Если ДобавитьИдентификаторы Тогда - - СтруктураКодов = СтруктураКодовКЛАДРПоУровням(); - ЗаполнитьИдентификаторыАдресаПоКлассификаторуСервис1С(Результат, СписокДляПроверки.Item[Индекс].Address, СписокДляПроверки.Item[Индекс].Levels, СтруктураКодов); - ДанныеДляАдреса.Вставить("Идентификаторы", СтруктураКодов); - КонецЕсли; - - Данные.Добавить(ДанныеДляАдреса); + Адрес.Вставить("house", Адрес.HouseNumber); КонецЦикла; -КонецПроцедуры - -// Заполнение результата проверки адресного объекта по данным сервиса. -// -Процедура ЗаполнитьИдентификаторыАдресаПоКлассификаторуСервис1С(Результат, АдресДляПроверки, Уровни, СтруктураКодов) - - Сервис = АдресныйКлассификаторПовтИсп.СервисКлассификатора1С(); - - СписокДляПроверки = Сервис.ФабрикаXDTO.Создать(Сервис.ФабрикаXDTO.Тип(ПространствоИмен(), "AddressList")); - ТипЭлементаСписка = СписокДляПроверки.Свойства().Получить("Item").Тип; - - КопияАдреса = АдресДляПроверки; - - ПроверяемыйАдрес = СписокДляПроверки.Item.Добавить(Сервис.ФабрикаXDTO.Создать(ТипЭлементаСписка)); - АдресВXML = ОбщегоНазначения.ОбъектXDTOВСтрокуXML(АдресДляПроверки); - АдресВXML = СтрЗаменить(АдресВXML, "http://www.v8.1c.ru/ssl/contactinfo_ru", "http://www.v8.1c.ru/ssl/contactinfo"); // Локализация - ПроверяемыйАдрес.Address = ОбщегоНазначения.ОбъектXDTOИзСтрокиXML(АдресВXML, Сервис.ФабрикаXDTO); - ПроверяемыйАдрес.Levels = Уровни; - - КодЯзыка = ТекущийКодЛокализации(); - - СоответствиеУровней = Новый Соответствие; - СоответствиеУровней.Вставить("Улица", "Улица"); - СоответствиеУровней.Вставить("НаселПункт", "НаселенныйПункт"); - СоответствиеУровней.Вставить("ВнутригРайон", "ВнутригородскойРайон"); - СоответствиеУровней.Вставить("Город", "Город"); - СоответствиеУровней.Вставить("СвРайМО", "Район"); - СоответствиеУровней.Вставить("Округ", "Округ"); - СоответствиеУровней.Вставить("СубъектРФ", "Регион"); - - СписокУровней = Новый Массив; - СписокУровней.Добавить("Улица"); - СписокУровней.Добавить("НаселПункт"); - СписокУровней.Добавить("ВнутригРайон"); - СписокУровней.Добавить("Город"); - СписокУровней.Добавить("СвРайМО"); - СписокУровней.Добавить("Округ"); - СписокУровней.Добавить("СубъектРФ"); - - ЗаполненныеУровни = Новый Массив; - - Для каждого ИмяУровня Из СписокУровней Цикл - Значение = АдресДляПроверки[ИмяУровня]; - Если ТипЗнч(Значение) = Тип("ОбъектXDTO") И ИмяУровня= "СвРайМО" Тогда - Значение = Значение.Район; - КонецЕсли; - Если ЗначениеЗаполнено(Значение) Тогда - ЗаполненныеУровни.Добавить(ИмяУровня); - КонецЕсли; - КонецЦикла; - - Для каждого ИмяУровня Из ЗаполненныеУровни Цикл - - РезультатПроверки = Сервис.Analyze(СписокДляПроверки, КодЯзыка, Ложь, Метаданные.Имя); - - Если РезультатПроверки.Item.Количество() > 0 И РезультатПроверки.Item[0].Variant.Количество() Тогда - СтруктураКодов[СоответствиеУровней[ИмяУровня]] = РезультатПроверки.Item[0].Variant[0].ID; - КонецЕсли; - - Если ИмяУровня <> "СвРайМО" Тогда - СписокДляПроверки.Item[0].Address[ИмяУровня] = ""; - Иначе - СписокДляПроверки.Item[0].Address[ИмяУровня].Район = ""; - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры +КонецФункции // Заполнение адреса по данным сервиса 1С. // -Процедура ЗаполнитьАдресаПоПочтовомуИндексуКлассификатораСервис1С(Результат, Индекс, Уровни) +Процедура ЗаполнитьАдресаПоПочтовомуИндексуКлассификатораСервис1С(Результат, Индекс) - Сервис = АдресныйКлассификаторПовтИсп.СервисКлассификатора1С(); + ТекстGETЗапроса = "selectByCode?code=%ZipCode%&codeType=POSTAL_CODE"; + ТекстGETЗапроса = СтрЗаменить(ТекстGETЗапроса, "%ZipCode%", Формат(Индекс, "ЧГ=0")); - // Выбираем все записи - ПерваяЗапись = Неопределено; - РазмерПорции = 1000; - КодЯзыка = ТекущийКодЛокализации(); + РезультатВебСервис = ВыполнитьЗапросЧерезВебСервис(ТекстGETЗапроса); - Данные = Результат.Данные; - Порция = Сервис.SelectByPostalCode(Индекс, Уровни, ПерваяЗапись, "ASC", РазмерПорции, КодЯзыка, Метаданные.Имя); - Список = Порция.ПолучитьСписок("Item"); - - Если Список.Количество() = 0 Тогда + Если РезультатВебСервис.Отказ Тогда Возврат; КонецЕсли; - Результат.ОбщаяЧастьПредставления = Формат(Индекс, "ЧГ=0") + ", " + Порция.Title; - Для Каждого Строка Из Список Цикл - ПерваяЗапись = Строка.ID; + Для каждого СтрокаДанных Из РезультатВебСервис.Данные Цикл + + НоваяСтрока = Результат.Данные.Добавить(); + НоваяСтрока.Представление = СтрокаДанных.value; + НоваяСтрока.Муниципальный = (СтрСравнить(СтрокаДанных.addressType, "TERRITORIAL") <> 0); + НоваяСтрока.Идентификатор = СтрокаДанных.id; - СтрокаРезультата = Данные.Добавить(); - СтрокаРезультата.Идентификатор = Новый УникальныйИдентификатор(ПерваяЗапись); - СтрокаРезультата.Представление = Строка.Presentation; - СтрокаРезультата.Неактуален = НЕ Строка.Actual; КонецЦикла; - -КонецПроцедуры - -Процедура ДобавитьВПредставлениеЭлементАдреса(Представление, Знач Наименование, Знач Сокращение) - - Наименование = СокрЛП(Наименование); - Наименование = ?(Наименование = "", "", СокрЛП(Наименование + " " + СокрЛ(Сокращение))); - - Если Не ПустаяСтрока(Наименование) Тогда - Если Не ПустаяСтрока(Представление) Тогда - Представление = Представление + ", " + Наименование; - Иначе - Представление = Наименование; - КонецЕсли; - КонецЕсли; КонецПроцедуры @@ -3719,198 +3213,115 @@ // Процедура ЗаполнитьВерсиюПоставщикаДанныхСервис1С(Результат) - КодЯзыка = ТекущийКодЛокализации(); - Сервис = АдресныйКлассификаторПовтИсп.СервисКлассификатора1С(); - Результат.Данные = Сервис.Ping(КодЯзыка, Метаданные.Имя); + РезультатВебСервис = ВыполнитьЗапросЧерезВебСервис("ping", 7); -КонецПроцедуры - -// Заполнение данных для выбора адреса по данным сервиса 1С. -// -Процедура ЗаполнитьАдресаДляИнтерактивногоВыбораСервис1С(Результат, Уровни, Родитель, Уровень, ДополнительныеПараметры) - Сервис = АдресныйКлассификаторПовтИсп.СервисКлассификатора1С(); - - РодительУровня = ?(ЗначениеЗаполнено(Родитель), Строка(Родитель), Неопределено); - КодЯзыка = ТекущийКодЛокализации(); - - Данные = Результат.Данные; - - // Если передан параметр - размер порции, то отдаем порционно, иначе - все. - ФормироватьПорцию = ДополнительныеПараметры.Свойство("РазмерПорции"); - Если ФормироватьПорцию Тогда - // Транслируем в порционный вызов. - РазмерПорции = ДополнительныеПараметры.РазмерПорции; - ПерваяЗапись = ?(ЗначениеЗаполнено(ДополнительныеПараметры.ПерваяЗапись), Строка(ДополнительныеПараметры.ПерваяЗапись), Неопределено); - Сортировка = ?(ЗначениеЗаполнено(ДополнительныеПараметры.Сортировка), Строка(ДополнительныеПараметры.Сортировка), "ASC"); - - Если ЗначениеЗаполнено(ПерваяЗапись) Тогда - ДлинаПервойЗаписи = СтрДлина(ПерваяЗапись); - ПерваяЗаписьСтрока = Лев("00000000-0000-0000-0000-000000000000", 36 - ДлинаПервойЗаписи) + ПерваяЗапись; - ПерваяЗапись = Новый УникальныйИдентификатор(ПерваяЗаписьСтрока); - КонецЕсли; - - Порция = Сервис.Select(РодительУровня, Уровень, ПерваяЗапись, Сортировка, РазмерПорции, КодЯзыка, Метаданные.Имя); - Результат.Заголовок = Порция.Title; - Список = Порция.ПолучитьСписок("Item"); - - Для Каждого Строка Из Список Цикл - СтрокаРезультата = Данные.Добавить(); - СтрокаРезультата.РегионЗагружен = Истина; - СтрокаРезультата.Идентификатор = Новый УникальныйИдентификатор(Строка.ID); - СтрокаРезультата.Представление = Строка.Presentation; - СтрокаРезультата.Неактуален = НЕ Строка.Actual; - КонецЦикла; - - Данные.Сортировать("Представление"); - - Возврат; + Если РезультатВебСервис.Отказ Тогда + Результат.Данные = Ложь; + Иначе + Результат.Данные = РезультатВебСервис.Данные; КонецЕсли; - // Выбираем все записи (дополнительные территории). - ПерваяЗапись = Неопределено; - РазмерПорции = 1000; - - Порция = Сервис.Select(РодительУровня, Уровень, Неопределено, "ASC", РазмерПорции, КодЯзыка, Метаданные.Имя); - Результат.Заголовок = Порция.Title; - Список = Порция.ПолучитьСписок("Item"); - - Для Каждого Строка Из Список Цикл - ПерваяЗапись = Строка.ID; - СтрокаРезультата = Данные.Добавить(); - СтрокаРезультата.РегионЗагружен = Истина; - СтрокаРезультата.Идентификатор = Новый УникальныйИдентификатор(ПерваяЗапись); - СтрокаРезультата.Представление = Строка.Presentation; - СтрокаРезультата.Неактуален = НЕ Строка.Actual; - КонецЦикла; - - Данные.Сортировать("Представление"); - КонецПроцедуры // Заполнение данных для автоподбора по данным сервиса 1С. +// Пример: autocomplete?text=test&parentGuid=g-u-i-d&base=30&limit=15. // -Процедура ЗаполнитьСписокАвтоподбораЧастиАдресаСервис1С(Результат, Текст, Родитель, Уровни, ДополнительныеПараметры) +Процедура ЗаполнитьСписокАвтоподбораЧастиАдресаСервис1С(ВариантыАдреса, Текст, Родитель, Количество, ДополнительныеПараметры) - Сервис = АдресныйКлассификаторПовтИсп.СервисКлассификатора1С(); + ТекстGETЗапроса = "autocomplete?text=" + КодироватьСтроку(Текст, СпособКодированияСтроки.КодировкаURL); + Если ЗначениеЗаполнено(Родитель) Тогда + ТекстGETЗапроса = ТекстGETЗапроса + "&parentGuid=" + Строка(Родитель); + КонецЕсли; + Если ЗначениеЗаполнено(Количество) Тогда + ТекстGETЗапроса = ТекстGETЗапроса + "&limit=" + Формат(Количество, "ЧГ=0"); + КонецЕсли; - УровниЗапроса = ?(ТипЗнч(Уровни) = Тип("Массив"), Новый ФиксированныйМассив(Уровни), Уровни); - КодЯзыка = ТекущийКодЛокализации(); - Данные = Результат.Данные; + РезультатВебСервис = ВыполнитьЗапросЧерезВебСервис(ТекстGETЗапроса); - Порция = Сервис.Autocomplete(Строка(Родитель), УровниЗапроса, Текст, 20, КодЯзыка, Метаданные.Имя); - Список = Порция.ПолучитьСписок("Item"); - ТребуетсяПоискПоДополнительнымТерритория = Уровни.Найти(90) <> Неопределено; + Если РезультатВебСервис.Отказ Тогда + Возврат; + КонецЕсли; - Для Каждого Строка Из Список Цикл - СтрокаРезультата = Данные.Добавить(); - СтрокаРезультата.РегионЗагружен = Истина; - Если ТребуетсяПоискПоДополнительнымТерритория Тогда - ДанныеПоСтроке = Сервис.GetActualInfo(Строка.ID, КодЯзыка, Метаданные.Имя); - Если ДанныеПоСтроке.ДопАдрЭл.Количество() > 0 Тогда - Для каждого Вариант Из ДанныеПоСтроке.ДопАдрЭл Цикл - Если СтрСравнить(Вариант.Значение, Строка.Presentation) = 0 Тогда - СтрокаРезультата.Уровень = 90; - Прервать; - КонецЕсли; - КонецЦикла; - КонецЕсли; - КонецЕсли; - СтрокаРезультата.Идентификатор = Новый УникальныйИдентификатор(Строка.ID); - СтрокаРезультата.Представление = Строка.Presentation; - СтрокаРезультата.Неактуален = НЕ Строка.Actual; - КонецЦикла; + Если РезультатВебСервис.Количество() > 0 И РезультатВебСервис.Данные <> Неопределено Тогда + Для каждого Данные Из РезультатВебСервис.Данные Цикл + ЭтоМуниципальныйАдрес = (СтрСравнить(Данные.addressType, "TERRITORIAL") <> 0); + ДобавитьВариантАдреса(ВариантыАдреса, Данные.value, Данные.id, ЭтоМуниципальныйАдрес, Ложь, СтруктураВСтрокуJSON(Данные)); + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +Процедура ДобавитьВариантАдреса(ВариантыАдреса, Представление, Идентификатор, Муниципальный, ЗагруженныеДанные, Данные = "") + + Сведения = Новый Структура(); + Сведения.Вставить("Отказ", Ложь); + Сведения.Вставить("Адрес", Данные); + Сведения.Вставить("Идентификатор", Идентификатор); + Сведения.Вставить("Представление", Представление); + Сведения.Вставить("Муниципальный", Муниципальный); + Сведения.Вставить("ЗагруженныеДанные", ЗагруженныеДанные); + + Если Не Муниципальный Тогда + Представление = Новый ФорматированнаяСтрока(Представление,, ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); + КонецЕсли; + + ВариантыАдреса.Добавить(Сведения, Представление); КонецПроцедуры // Заполнение актуальных данных адресного объекта или ориентира по данным сервиса 1С. +// Пример: GET /selectByCode?code=111111&codeType=ID. // -Процедура ЗаполнитьАктуальныеАдресныеСведенияСервис1С(Результат, Идентификатор) +Процедура ЗаполнитьАктуальныеАдресныеСведенияСервис1С(Результат, Идентификатор, ЭтоМуниципальныйАдрес = Истина) - Сервис = АдресныйКлассификаторПовтИсп.СервисКлассификатора1С(); + РезультатВебСервис = АдресныеСведенияСервис1СПоКоду(Результат, Идентификатор, "ID"); + + Если РезультатВебСервис.Отказ Тогда + Возврат; + КонецЕсли; + + Если РезультатВебСервис.Данные.Количество() > 0 Тогда + Если РезультатВебСервис.Данные.Количество() > 1 Тогда + ИскомыйТипаАдреса = ?(ЭтоМуниципальныйАдрес, "MUNICIPAL", "TERRITORIAL"); + Для каждого Адрес Из РезультатВебСервис.Данные Цикл + Если СтрСравнить(Адрес.addressType, ИскомыйТипаАдреса) = 0 Тогда + Прервать; + КонецЕсли; + КонецЦикла; + Иначе + Адрес = РезультатВебСервис.Данные[0]; + КонецЕсли; + + Если СтрСравнить(Адрес.addressType, "TERRITORIAL") = 0 Тогда + Адрес.addressType = АдресныйКлассификаторКлиентСервер.АдминистративноТерриториальныйАдрес(); + Иначе + Адрес.addressType = АдресныйКлассификаторКлиентСервер.МуниципальныйАдрес(); + КонецЕсли; + + ОписаниеАдреса = ОписаниеАдреса(); + ЗаполнитьЗначенияСвойств(ОписаниеАдреса, Адрес); + Для каждого ПолеАдреса Из ОписаниеАдреса Цикл + Если ПолеАдреса.Значение = Неопределено Тогда + ОписаниеАдреса[ПолеАдреса.Ключ] = ""; + КонецЕсли; + КонецЦикла; + + Результат.Данные = ОписаниеАдреса; + + Иначе + Результат.Данные = ОписаниеАдреса(); + КонецЕсли; - КодЯзыка = ТекущийКодЛокализации(); - Данные = Сервис.GetActualInfo(Строка(Идентификатор), КодЯзыка, Метаданные.Имя); - Результат.Данные = Данные; КонецПроцедуры -Функция ИдентификаторыАдресаПоКлассификаторуСервис1С(АдресаДляПроверки, ИскатьПоУлице, ВсеИдентификаторыАдреса); +Функция АдресныеСведенияСервис1СПоКоду(Результат, Знач Идентификатор, Знач ИмяКода) - Результат = Новый Структура; - Идентификатор = Неопределено; + ШаблонЗапроса = "selectByCode?code=%1&codeType=%2"; + ТекстGETЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗапроса, Строка(Идентификатор), ИмяКода); - Идентификатор = ИдентификаторЭлементаАдресаСервис1С(АдресаДляПроверки["Регион"].Наименование, - АдресаДляПроверки["Регион"].Сокращение, Идентификатор, 1); - Результат.Вставить("ИдентификаторРегион", Идентификатор); + Возврат ВыполнитьЗапросЧерезВебСервис(ТекстGETЗапроса); - Если ЗначениеЗаполнено(АдресаДляПроверки["Округ"].Наименование) Тогда - Идентификатор = ИдентификаторЭлементаАдресаСервис1С(АдресаДляПроверки["Округ"].Наименование, - АдресаДляПроверки["Округ"].Сокращение, Идентификатор, 2); - Результат.Вставить("ИдентификаторОкруг", Идентификатор); - КонецЕсли; - - Если ЗначениеЗаполнено(АдресаДляПроверки["Район"].Наименование) Тогда - Идентификатор = ИдентификаторЭлементаАдресаСервис1С(АдресаДляПроверки["Район"].Наименование, - АдресаДляПроверки["Район"].Сокращение, Идентификатор, 3); - Результат.Вставить("ИдентификаторРайон", Идентификатор); - КонецЕсли; - - Если ЗначениеЗаполнено(АдресаДляПроверки["Город"].Наименование) Тогда - Идентификатор = ИдентификаторЭлементаАдресаСервис1С(АдресаДляПроверки["Город"].Наименование, - АдресаДляПроверки["Город"].Сокращение, Идентификатор, 4); - Результат.Вставить("ИдентификаторГород", Идентификатор); - КонецЕсли; - - Если ЗначениеЗаполнено(АдресаДляПроверки["ВнутригородскойРайон"].Наименование) Тогда - Идентификатор = ИдентификаторЭлементаАдресаСервис1С(АдресаДляПроверки["ВнутригородскойРайон"].Наименование, - АдресаДляПроверки["ВнутригородскойРайон"].Сокращение, Идентификатор, 5); - Результат.Вставить("ИдентификаторВнутригРайон", Идентификатор); - КонецЕсли; - - Если ЗначениеЗаполнено(АдресаДляПроверки["НаселенныйПункт"].Наименование) Тогда - Идентификатор = ИдентификаторЭлементаАдресаСервис1С(АдресаДляПроверки["НаселенныйПункт"].Наименование, - АдресаДляПроверки["НаселенныйПункт"].Сокращение, Идентификатор, 6); - Результат.Вставить("ИдентификаторНаселенныйПункт", Идентификатор); - КонецЕсли; - - Если ИскатьПоУлице И ЗначениеЗаполнено(АдресаДляПроверки["Улица"].Наименование) Тогда - Идентификатор = ИдентификаторЭлементаАдресаСервис1С(АдресаДляПроверки["Улица"].Наименование, - АдресаДляПроверки["Улица"].Сокращение, Идентификатор, 7); - Результат.Вставить("ИдентификаторУлица", Идентификатор); - КонецЕсли; - - Если ВсеИдентификаторыАдреса Тогда - Возврат Результат; - КонецЕсли; - Возврат Идентификатор; - -КонецФункции - -Функция ИдентификаторЭлементаАдресаСервис1С(Наименование, Сокращение, ИдентификаторРодитель, Уровень) - - Если НЕ ЗначениеЗаполнено(ИдентификаторРодитель) И Уровень > 1 Тогда - Возврат Неопределено; // т.к. мы не знаем объект верхнего уровня, то нет смысла искать. - КонецЕсли; - - Если СтрДлина(Наименование) < 3 Тогда - Возврат Неопределено; // Autocomplete в веб-сервисе принимает строки с длинной 3 и более - КонецЕсли; - - Сервис = АдресныйКлассификаторПовтИсп.СервисКлассификатора1С(); - КодЯзыка = ТекущийКодЛокализации(); - - Порция = Сервис.Autocomplete(ИдентификаторРодитель, Уровень, Наименование, 100, КодЯзыка, Метаданные.Имя); - Представление = Наименование + " " + Сокращение; - - Список = Порция.ПолучитьСписок("Item"); - Для Каждого Строка Из Список Цикл - Если Строка.Presentation = Представление Тогда - Возврат Новый УникальныйИдентификатор(Строка.ID); - КонецЕсли; - КонецЦикла; - - Возврат Неопределено; - КонецФункции // Получает идентификаторы адреса через веб-сервис. @@ -3963,1383 +3374,530 @@ КонецПроцедуры -Процедура ЗаполнитьКодыПоИдентификаторуДома(ИдентификаторАдресногоОбъекта, СведенияОДоме, Коды) +// Локальная проверка одного адреса. +// +Функция АнализОдногоАдресаПоКлассификатору(Адрес) - Источник = ИсточникДанныхАдресногоКлассификатора(); - Если ПустаяСтрока(Источник) Тогда - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ДомаЗданияСтроения.Строения КАК Строения - |ИЗ - | РегистрСведений.ДомаЗданияСтроения КАК ДомаЗданияСтроения - |ГДЕ - | ДомаЗданияСтроения.АдресныйОбъект = &АдресныйОбъект"; - - Запрос.УстановитьПараметр("АдресныйОбъект", ИдентификаторАдресногоОбъекта); - Запись = Запрос.Выполнить().Выбрать(); - - Пока Запись.Следующий() Цикл - Если ЗначениеЗаполнено(Запись.Строения) Тогда - Описание = Запись.Строения.Получить(); - Если Не ПустаяСтрока(Описание) Тогда - ИдентификаторДома = ИдентификаторДома(Описание, СведенияОДоме); - Если ЗначениеЗаполнено(ИдентификаторДома) Тогда - Прервать; - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЦикла; + Результат = Новый Структура("Ошибки, Варианты, АдресПроверен", Новый Массив, Новый Массив, Истина); + ОшибкиПроверки = Результат.Ошибки; + ВариантыАдреса = Результат.Варианты; + + // Субъект должен быть всегда + Если ПустаяСтрока(Адрес.Area) Тогда + // Нет субъекта + ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "СубъектРФ", НСтр("ru = 'Не указан субъект РФ адреса'") ); + Возврат Результат; КонецЕсли; - Если ЗначениеЗаполнено(ИдентификаторДома) Тогда + РегионЗагруженВАдресныеСведения = СведенияОРегионе(Адрес.Area + " " + Адрес.AreaType).Загружен; + Если РегионЗагруженВАдресныеСведения = Неопределено Тогда + ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "СубъектРФ", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Регион ""%1"" не существует'"), Адрес.Area + " " + Адрес.AreaType)); + Результат.АдресПроверен = Истина; + Возврат Результат; + ИначеЕсли НЕ РегионЗагруженВАдресныеСведения Тогда + ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "СубъектРФ", НСтр("ru = 'Отсутствуют адресные сведения по региону'") + ": " + Адрес.Area + " " + Адрес.AreaType + "."); + Результат.АдресПроверен = Ложь; + Возврат Результат; + КонецЕсли; + + // Расшифровка свойств адреса + Запрос = Новый Запрос("ВЫБРАТЬ + | Значение + |ИЗ + | РегистрСведений.СлужебныеАдресныеСведения + |ГДЕ + | Тип = ""ТипАдрЭл"" И Ключ = ""ПочтовыйИндекс"" + |;////////////////////////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Ключ КАК Сокращение, + | Идентификатор КАК Идентификатор, + | Значение КАК Значение + |ИЗ + | РегистрСведений.СлужебныеАдресныеСведения + |ГДЕ + | Тип = ""ТипАдрЭл"" + | И ( + | Идентификатор = 91 ИЛИ Идентификатор = 90 + | ) + |;////////////////////////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Расшифровка.Ключ КАК Значение, + | Расшифровка.Значение КАК ТипАдрЭл, + | + | ВЫБОР + | КОГДА НЕ ТипыВладения.Идентификатор ЕСТЬ NULL ТОГДА ТипыВладения.Идентификатор + | КОГДА НЕ ТипыСтроения.Идентификатор ЕСТЬ NULL ТОГДА ТипыСтроения.Идентификатор + | ИНАЧЕ 0 + | КОНЕЦ КАК Идентификатор + | + |ИЗ + | РегистрСведений.СлужебныеАдресныеСведения КАК Расшифровка + | + |ЛЕВОЕ СОЕДИНЕНИЕ + | РегистрСведений.СлужебныеАдресныеСведения КАК ТипыВладения + |ПО + | ТипыВладения.Тип = ""ESTSTAT"" + | И ТипыВладения.Значение = Расшифровка.Ключ + | + |ЛЕВОЕ СОЕДИНЕНИЕ + | РегистрСведений.СлужебныеАдресныеСведения КАК ТипыСтроения + |ПО + | ТипыСтроения.Тип = ""STRSTAT"" + | И ТипыСтроения.Значение = Расшифровка.Ключ + | + |ГДЕ + | Расшифровка.Тип = ""ДопАдрЭлНомер"""); + НаборРезультатов = Запрос.ВыполнитьПакет(); + + Таблица = НаборРезультатов[0].Выгрузить(); + Если Таблица.Количество() = 0 Тогда + ТипАдрЭлПочтовыйИндекс = ""; + Иначе + ТипАдрЭлПочтовыйИндекс = Таблица[0].Значение; + КонецЕсли; + + ТаблицаСокращенийДополнительных = НаборРезультатов[1].Выгрузить(); + ТаблицаСокращенийДополнительных.Индексы.Добавить("Сокращение, Значение"); + + ТаблицаСокращенийЗданий = НаборРезультатов[2].Выгрузить(); + ТаблицаСокращенийЗданий.Индексы.Добавить("ТипАдрЭл"); + + Дополнительный = Новый Структура("Наименование, Сокращение"); + Подчиненный = Новый Структура("Наименование, Сокращение"); + ЗданияИПомещения = Новый Соответствие; + + Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 20 +| АдресныеОбъектыУровень0.Наименование КАК НаименованиеУровень0, +| АдресныеОбъектыУровень0.Сокращение КАК СокращениеУровень0, +| АдресныеОбъектыУровень0.Идентификатор КАК ИдентификаторУровень0, +| АдресныеОбъектыУровень0.ДополнительныеАдресныеСведения КАК ДополнительныеСведения0, +| АдресныеОбъектыУровень1.Наименование КАК НаименованиеУровень1, +| АдресныеОбъектыУровень1.Сокращение КАК СокращениеУровень1, +| АдресныеОбъектыУровень1.Идентификатор КАК ИдентификаторУровень1, +| АдресныеОбъектыУровень1.ДополнительныеАдресныеСведения КАК ДополнительныеСведения1, +| АдресныеОбъектыУровень2.Наименование КАК НаименованиеУровень2, +| АдресныеОбъектыУровень2.Сокращение КАК СокращениеУровень2, +| АдресныеОбъектыУровень2.Идентификатор КАК ИдентификаторУровень2, +| АдресныеОбъектыУровень2.ДополнительныеАдресныеСведения КАК ДополнительныеСведения2, +| АдресныеОбъектыУровень3.Наименование КАК НаименованиеУровень3, +| АдресныеОбъектыУровень3.Сокращение КАК СокращениеУровень3, +| АдресныеОбъектыУровень3.Идентификатор КАК ИдентификаторУровень3, +| АдресныеОбъектыУровень3.ДополнительныеАдресныеСведения КАК ДополнительныеСведения3, +| АдресныеОбъектыУровень4.Наименование КАК НаименованиеУровень4, +| АдресныеОбъектыУровень4.Сокращение КАК СокращениеУровень4, +| АдресныеОбъектыУровень4.Идентификатор КАК ИдентификаторУровень4, +| АдресныеОбъектыУровень4.ДополнительныеАдресныеСведения КАК ДополнительныеСведения4, +| АдресныеОбъектыУровень5.Наименование КАК НаименованиеУровень5, +| АдресныеОбъектыУровень5.Сокращение КАК СокращениеУровень5, +| АдресныеОбъектыУровень5.Идентификатор КАК ИдентификаторУровень5, +| АдресныеОбъектыУровень5.ДополнительныеАдресныеСведения КАК ДополнительныеСведения5, +| ВЫБОР +| КОГДА НЕ АдресныеОбъектыУровень5.Идентификатор ЕСТЬ NULL +| ТОГДА АдресныеОбъектыУровень5.Идентификатор +| ИНАЧЕ ВЫБОР +| КОГДА НЕ АдресныеОбъектыУровень4.Идентификатор ЕСТЬ NULL +| ТОГДА АдресныеОбъектыУровень4.Идентификатор +| ИНАЧЕ ВЫБОР +| КОГДА НЕ АдресныеОбъектыУровень3.Идентификатор ЕСТЬ NULL +| ТОГДА АдресныеОбъектыУровень3.Идентификатор +| ИНАЧЕ ВЫБОР +| КОГДА НЕ АдресныеОбъектыУровень2.Идентификатор ЕСТЬ NULL +| ТОГДА АдресныеОбъектыУровень2.Идентификатор +| ИНАЧЕ ВЫБОР +| КОГДА НЕ АдресныеОбъектыУровень1.Идентификатор ЕСТЬ NULL +| ТОГДА АдресныеОбъектыУровень1.Идентификатор +| ИНАЧЕ ВЫБОР +| КОГДА НЕ АдресныеОбъектыУровень0.Идентификатор ЕСТЬ NULL +| ТОГДА АдресныеОбъектыУровень0.Идентификатор +| ИНАЧЕ АдресныеОбъектыУровень0.Идентификатор +| КОНЕЦ +| КОНЕЦ +| КОНЕЦ +| КОНЕЦ +| КОНЕЦ +| КОНЕЦ КАК Идентификатор +|ПОМЕСТИТЬ АдресныеОбъекты +|ИЗ +| РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень0 +| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень1 +| ПО (АдресныеОбъектыУровень0.Идентификатор = АдресныеОбъектыУровень1.РодительскийИдентификатор) +| И (АдресныеОбъектыУровень1.Наименование = &Наименование1) +| И (АдресныеОбъектыУровень1.Сокращение = &Сокращение1) +| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень2 +| ПО (АдресныеОбъектыУровень1.Идентификатор = АдресныеОбъектыУровень2.РодительскийИдентификатор) +| И (АдресныеОбъектыУровень2.Наименование = &Наименование2) +| И (АдресныеОбъектыУровень2.Сокращение = &Сокращение2) +| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень3 +| ПО (АдресныеОбъектыУровень2.Идентификатор = АдресныеОбъектыУровень3.РодительскийИдентификатор) +| И (АдресныеОбъектыУровень3.Наименование = &Наименование3) +| И (АдресныеОбъектыУровень3.Сокращение = &Сокращение3) +| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень4 +| ПО (АдресныеОбъектыУровень3.Идентификатор = АдресныеОбъектыУровень4.РодительскийИдентификатор) +| И (АдресныеОбъектыУровень4.Наименование = &Наименование4) +| И (АдресныеОбъектыУровень4.Сокращение = &Сокращение4) +| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень5 +| ПО (АдресныеОбъектыУровень4.Идентификатор = АдресныеОбъектыУровень5.РодительскийИдентификатор) +| И (АдресныеОбъектыУровень5.Наименование = &Наименование5) +| И (АдресныеОбъектыУровень5.Сокращение = &Сокращение5) +|ГДЕ +| АдресныеОбъектыУровень0.Наименование = &Наименование0 +| И АдресныеОбъектыУровень0.Сокращение = &Сокращение0 +| И АдресныеОбъектыУровень0.Уровень = 1 +|; +| +|//////////////////////////////////////////////////////////////////////////////// +|ВЫБРАТЬ ПЕРВЫЕ 50 +| ДомаЗданияСтроения.АдресныйОбъект КАК АдресныйОбъект, +| ДомаЗданияСтроения.КодСубъектаРФ КАК КодСубъектаРФ, +| ДомаЗданияСтроения.ДополнительныеАдресныеСведения КАК ДополнительныеАдресныеСведения, +| ДомаЗданияСтроения.Строения КАК Строения, +| АдресныеОбъекты.Идентификатор КАК Идентификатор +|ИЗ +| АдресныеОбъекты КАК АдресныеОбъекты +| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДомаЗданияСтроения КАК ДомаЗданияСтроения +| ПО ДомаЗданияСтроения.АдресныйОбъект = АдресныеОбъекты.Идентификатор +| ГДЕ НЕ ДомаЗданияСтроения.Строения ЕСТЬ NULL +|; +| +|//////////////////////////////////////////////////////////////////////////////// +|ВЫБРАТЬ +| АдресныеОбъекты.Идентификатор КАК Идентификатор, +| АдресныеОбъекты.КодСубъектаРФ КАК КодСубъектаРФ, +| АдресныеОбъекты.РодительскийИдентификатор КАК РодительскийИдентификатор, +| АдресныеОбъекты.МуниципальныйРодительскийИдентификатор КАК МуниципальныйРодительскийИдентификатор, +| АдресныеОбъекты.Наименование КАК Наименование, +| АдресныеОбъекты.Сокращение КАК Сокращение, +| АдресныеОбъекты.КодКЛАДР КАК КодКЛАДР, +| АдресныеОбъекты.ДополнительныеАдресныеСведения КАК ДополнительныеАдресныеСведения, +| АдресныеОбъекты.Уровень КАК Уровень +|ПОМЕСТИТЬ АдресныйОбъект +|ИЗ +| АдресныеОбъекты КАК АдресныеОбъектыИсточник +| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты +| ПО (АдресныеОбъекты.Идентификатор = АдресныеОбъектыИсточник.Идентификатор) +|; +| +|//////////////////////////////////////////////////////////////////////////////// +|ВЫБРАТЬ +| АдресныйОбъект.Идентификатор КАК Идентификатор, +| ДополнительныеСведения.ПочтовыйИндекс КАК ПочтовыйИндекс, +| ДополнительныеСведения.ОКТМО КАК ОКТМО +|ИЗ +| АдресныйОбъект КАК АдресныйОбъект +| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеАдресныеСведения КАК ДополнительныеСведения +| ПО (ДополнительныеСведения.Идентификатор = АдресныйОбъект.ДополнительныеАдресныеСведения)"; + + + ИменаУровнейАдреса = АдресныйКлассификаторКлиентСервер.ИменаУровнейАдреса(Адрес.AddressType, Истина); + АдресныеСведенияДляЗапроса = Новый Массив; + Счетчик = 0; + КакиеУровниПроверять = Новый Соответствие; + + Если АдресныйКлассификаторКлиентСервер.ЭтоМуниципальныйАдрес(Адрес.AddressType) Тогда + Запрос.Текст= СтрЗаменить(Запрос.Текст, ".РодительскийИдентификатор", ".МуниципальныйРодительскийИдентификатор"); + КонецЕсли; + + Для каждого УровеньАдреса Из ИменаУровнейАдреса Цикл + Если Адрес.Свойство(УровеньАдреса) И ЗначениеЗаполнено(Адрес[УровеньАдреса]) Тогда + + Запрос.УстановитьПараметр("Наименование" + Строка(Счетчик), Адрес[УровеньАдреса]); + Запрос.УстановитьПараметр("Сокращение" + Строка(Счетчик), Адрес[УровеньАдреса + "Type"]); + КакиеУровниПроверять.Вставить(УровеньАдреса, Счетчик); + Счетчик = Счетчик + 1; + + КонецЕсли; + КонецЦикла; + + // Заполняем пустые адресные сведения + Для ИндексСчетчик = Счетчик По 5 Цикл + Запрос.УстановитьПараметр("Наименование" + Строка(ИндексСчетчик), ""); + Запрос.УстановитьПараметр("Сокращение" + Строка(ИндексСчетчик), ""); + КонецЦикла; + + РезультатЗапроса = Запрос.ВыполнитьПакетСПромежуточнымиДанными(); + Адреса = РезультатЗапроса[0]; + Дома = РезультатЗапроса[1]; + АдресныйОбъект = РезультатЗапроса[2]; + ДополнительныеСведения = РезультатЗапроса[3]; + + СписокКорректныхАдресов = Новый Массив; + Для каждого АдресСтрока Из Адреса.Выгрузить() Цикл + + Если КакиеУровниПроверять["Distict"] <> Неопределено И АдресСтрока["Наименование" + КакиеУровниПроверять["Distict"]] = NULL Тогда + ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "СвРайМО/Район", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Район ""%1"" отсутствует в адресном классификаторе'"), Адрес.District + " " + Адрес.DistrictType)); + КонецЕсли; + + Если НЕ ДанныеУровняКорректные(Адрес, "Area", НСтр("ru='Субъект РФ'"), АдресСтрока, КакиеУровниПроверять, ОшибкиПроверки) Тогда + Продолжить; + КонецЕсли; + + Если НЕ ДанныеУровняКорректные(Адрес, "MunDistrict", НСтр("ru='Муниципальный район'"), АдресСтрока, КакиеУровниПроверять, ОшибкиПроверки) Тогда + Продолжить; + КонецЕсли; + + Если НЕ ДанныеУровняКорректные(Адрес, "Distict", НСтр("ru='Район'"), АдресСтрока, КакиеУровниПроверять, ОшибкиПроверки) Тогда + Продолжить; + КонецЕсли; + + Если НЕ ДанныеУровняКорректные(Адрес, "Settlement", НСтр("ru='Поселение'"), АдресСтрока, КакиеУровниПроверять, ОшибкиПроверки) Тогда + Продолжить; + КонецЕсли; + + Если НЕ ДанныеУровняКорректные(Адрес, "City", НСтр("ru='Город'"), АдресСтрока, КакиеУровниПроверять, ОшибкиПроверки) Тогда + Продолжить; + КонецЕсли; + + Если НЕ ДанныеУровняКорректные(Адрес, "CityDistrict", НСтр("ru='Внутригородской район'"), АдресСтрока, КакиеУровниПроверять, ОшибкиПроверки) Тогда + Продолжить; + КонецЕсли; + + Если НЕ ДанныеУровняКорректные(Адрес, "Territory", НСтр("ru='Территория'"), АдресСтрока, КакиеУровниПроверять, ОшибкиПроверки) Тогда + Продолжить; + КонецЕсли; + + Если НЕ ДанныеУровняКорректные(Адрес, "Locality", НСтр("ru='Населенный пункт'"), АдресСтрока, КакиеУровниПроверять, ОшибкиПроверки) Тогда + Продолжить; + КонецЕсли; + + Если НЕ ДанныеУровняКорректные(Адрес, "Street", НСтр("ru='Улица'"), АдресСтрока, КакиеУровниПроверять, ОшибкиПроверки) Тогда + Продолжить; + КонецЕсли; + + СписокКорректныхАдресов.Добавить(АдресСтрока); + КонецЦикла; + + Если СписокКорректныхАдресов.Количество() = 0 Тогда + ИсторическийАдрес = АктуальныеАдресДляИсторического(Адрес); + Если ЗначениеЗаполнено(ИсторическийАдрес) Тогда + ОшибкиПроверки.Очистить(); + ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Представление", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Адрес некорректный, т.к. он устарел + |Актуальный: %1'"), ИсторическийАдрес)); + КонецЕсли; + + Возврат Результат; + КонецЕсли; + + // Проверяем дома + НомерДомаАдрес = Адрес.HouseNumber; + ТипДомаАдрес = ?(ЗначениеЗаполнено(НомерДомаАдрес), Адрес.HouseType, ""); + НомерКорпусаАдрес = Неопределено; + НомерСтроенияАдрес = Неопределено; + ТипСтроенияАдрес = Неопределено; + + Для каждого ОписаниеСтроения Из Адрес.Buildings Цикл + Если СтрСравнить(ОписаниеСтроения.Type, "Корпус") = 0 Тогда + НомерКорпусаАдрес = ОписаниеСтроения.Number; + Иначе + НомерСтроенияАдрес = ОписаниеСтроения.Number; + ТипСтроенияАдрес = ОписаниеСтроения.Type; + КонецЕсли; + КонецЦикла; + + Если ПустаяСтрока(НомерДомаАдрес) И Адрес.Buildings.Количество() = 0 Тогда + Возврат Результат; // У адреса нет домов, корпусов и строений. Возможно это почтовый адреса с а/я или до востребования. + КонецЕсли; + + ВариантыДомов = КонструкторСпискаДомов(); + + ДомаКорректный = Дома.Пустой(); // Домов нет, любой дом считаем корректным. + ИдентификаторДополнительныхСведений = Неопределено; + + ПохожиеВарианты = Новый Массив; + Для каждого ИнформацияОДомах Из Дома.Выгрузить() Цикл + + Если ПустаяСтрока(ИнформацияОДомах.Строения) Тогда + Продолжить; + КонецЕсли; + + СтрокаСоСпискомДомов = ИнформацияОДомах.Строения.Получить(); + Если ЗначениеЗаполнено(СтрокаСоСпискомДомов) Тогда + + ТипЧисло = Новый ОписаниеТипов("Число"); + МассивДомов = СтрРазделить(СтрокаСоСпискомДомов, Символы.Таб, Ложь); + + НаименованиеЗданийИСтроений = НаименованиеВладенийИСтроений(); + + Для каждого СтрокаДом Из МассивДомов Цикл + СведенияОДоме = СтрРазделить(Сред(СтрокаДом, 25), "~", Истина); + ВидСтроения = Неопределено; + Строение = Неопределено; + Дом = Неопределено; + НазваниеВладения = Неопределено; + НазваниеСтроения = Неопределено; + Корпус = Неопределено; + + Если ЗначениеЗаполнено(СведенияОДоме[0]) Тогда + ВидВладения = ТипЧисло.ПривестиЗначение(Лев(СведенияОДоме[0], 1)); + Дом = Сред(СведенияОДоме[0], 2); + + Если СтрСравнить(Дом, "НЕТ") = 0 Тогда + Дом = ""; + КонецЕсли; + + Если ЗначениеЗаполнено(Дом) Тогда + НазваниеВладения = НаименованиеЗданийИСтроений.Владения.Получить(ВидВладения); + КонецЕсли; + + Если СведенияОДоме.Количество() > 1 Тогда + Корпус = СведенияОДоме[1]; + Если СведенияОДоме.Количество() > 2 Тогда + ВидСтроения = ТипЧисло.ПривестиЗначение(СведенияОДоме[2]); + НазваниеСтроения = НаименованиеЗданийИСтроений.Строения.Получить(ВидСтроения); + Если СведенияОДоме.Количество() > 3 Тогда + Строение = СведенияОДоме[3]; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если СтрСравнить(НомерДомаАдрес, Дом) = 0 Тогда + + Если СтрСравнить(ТипДомаАдрес, НазваниеВладения) = 0 Тогда + + Если СтрСравнить(НомерКорпусаАдрес, Корпус) = 0 + И СтрСравнить(НомерСтроенияАдрес, Строение) = 0 + И СтрСравнить(ТипСтроенияАдрес, НазваниеСтроения) = 0 Тогда + ДомаКорректный = Истина; + ИдентификаторДополнительныхСведений = ИнформацияОДомах.ДополнительныеАдресныеСведения; + Прервать; + Иначе + // дома совал полностью, но владения и корпус нет + ТекстПроСтроения = ""; + Разделитель = ""; + Если ЗначениеЗаполнено(Корпус) Тогда + ТекстПроСтроения = НСтр("ru='корпус'") + " " + Корпус; + Разделитель = ", "; + КонецЕсли; + + Если ЗначениеЗаполнено(Строение) Тогда + ТекстПроСтроения = ТекстПроСтроения + Разделитель + НазваниеСтроения + " " + Строение; + КонецЕсли; + + ПохожиеВарианты.Добавить(НРег(НазваниеВладения) + " №" + Дом + ?(ПустаяСтрока(ТекстПроСтроения), "", ", " + ТекстПроСтроения)); + + КонецЕсли; + + Иначе + + // номер дома совал, но тип нет + ТекстПроДом = НРег(НазваниеВладения) + " №" + Дом; + Если ПохожиеВарианты.Найти(ТекстПроДом) = Неопределено Тогда + ПохожиеВарианты.Добавить(ТекстПроДом ); + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + Если ДомаКорректный = Истина Тогда + Прервать; + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + КонецЦикла; + + Если НЕ ДомаКорректный Тогда + + ПолеСОшибкой = ?(ЗначениеЗаполнено(НомерДомаАдрес), "Дом", "Строение"); + НаборПредставлениеДома = Новый Массив; + Если ЗначениеЗаполнено(НомерДомаАдрес) Тогда + НаборПредставлениеДома.Добавить(Строка(ТипДомаАдрес) + " № "+ НомерДомаАдрес); + КонецЕсли; + Если ЗначениеЗаполнено(НомерКорпусаАдрес) Тогда + НаборПредставлениеДома.Добавить(НСтр("ru='Корпус'") + " " + НомерКорпусаАдрес); + КонецЕсли; + Если ЗначениеЗаполнено(НомерСтроенияАдрес) Тогда + НаборПредставлениеДома.Добавить(Строка(ТипСтроенияАдрес) + " " + НомерСтроенияАдрес); + КонецЕсли; + ПредставлениеДома = СтрСоединить(НаборПредставлениеДома, ", "); + + Подсказка = ""; + Если ПохожиеВарианты.Количество() = 1 Тогда + Подсказка = ", " + НСтр("ru = 'но есть'") + " " + """" + ПохожиеВарианты[0]+ """."; + ИначеЕсли ПохожиеВарианты.Количество() > 1 Тогда + ПервоеЗначение = ПохожиеВарианты[0]; + Если ПохожиеВарианты.Количество() = 2 Тогда + Подсказка = НСтр("ru = 'но есть ""%1"" или ""%2"".'"); + ВтороеЗначение = ПохожиеВарианты[1]; + Иначе + Подсказка = НСтр("ru = 'но есть ""%1"" и другие варианты(%2).'"); + ВтороеЗначение = Строка(ПохожиеВарианты.Количество()); + КонецЕсли; + Подсказка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(", " + Подсказка, ПервоеЗначение, ВтороеЗначение); + Иначе + Подсказка = "."; + КонецЕсли; + + ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, ПолеСОшибкой, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '""%1"" отсутствует в адресном классификаторе%2'"), ПредставлениеДома, Подсказка)); + Возврат Результат; + + КонецЕсли; + + // Проверка индекса + Если ЗначениеЗаполнено(ИдентификаторДополнительныхСведений) Тогда + Запрос = Новый Запрос; Запрос.Текст = - "ВЫБРАТЬ - | ДополнительныеАдресныеСведения.Идентификатор, - | ДополнительныеАдресныеСведения.КодСубъектаРФ, - | ДополнительныеАдресныеСведения.OKATO, - | ДополнительныеАдресныеСведения.ОКТМО, - | ДополнительныеАдресныеСведения.КодИФНСФЛ, - | ДополнительныеАдресныеСведения.КодИФНСЮЛ, - | ДополнительныеАдресныеСведения.КодУчасткаИФНСФЛ, - | ДополнительныеАдресныеСведения.КодУчасткаИФНСЮЛ + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ДополнительныеАдресныеСведения.ПочтовыйИндекс КАК ПочтовыйИндекс |ИЗ | РегистрСведений.ДополнительныеАдресныеСведения КАК ДополнительныеАдресныеСведения |ГДЕ | ДополнительныеАдресныеСведения.Идентификатор = &Идентификатор"; - Запрос.УстановитьПараметр("Идентификатор", ИдентификаторДома); + Запрос.УстановитьПараметр("Идентификатор", ИдентификаторДополнительныхСведений); - РезультатЗапроса = Запрос.Выполнить().Выбрать(); + РезультатЗапроса = Запрос.Выполнить(); - Если РезультатЗапроса.Следующий() Тогда - ЗаполнитьЗначенияСвойств(Коды, РезультатЗапроса); + Если НЕ РезультатЗапроса.Пустой() Тогда + ДополнительныеАдресныеСведения = РезультатЗапроса.Выгрузить()[0]; + КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -// Локальная проверка одного адреса. -// -Функция АнализОдногоАдресаПоКлассификатору(Адрес, Уровни) - - Результат = Новый Структура("Ошибки, Варианты, АдресПроверен", Новый Массив, Новый Массив, Истина); - ОшибкиПроверки = Результат.Ошибки; - ВариантыАдреса = Результат.Варианты; - - Если ТипЗнч(Адрес) <> Тип("ОбъектXDTO") Тогда - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Адрес", НСтр("ru = 'Невозможно проверить адрес из-за некорректных сведений. Проверьте правильность заполнения адреса.'")); - Возврат Результат; - КонецЕсли; - - // Субъект должен быть всегда - СубъектРФ = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(Адрес.СубъектРФ); - Если ПустаяСтрока(СубъектРФ.Наименование) Тогда - // Нет субъекта - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "СубъектРФ", НСтр("ru = 'Не указан субъект РФ адреса'") ); - Возврат Результат; - ИначеЕсли Уровни.Найти(1) = Неопределено Тогда - // В уровнях должно быть указано всегда. - ВызватьИсключение НСтр("ru = 'В уровнях для проверки адреса не указан уровень субъекта РФ.'"); - КонецЕсли; - - РегионЗагруженВАдресныеСведения = СведенияОРегионе(Адрес.СубъектРФ).Загружен; - Если РегионЗагруженВАдресныеСведения = Неопределено Тогда - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "СубъектРФ", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Регион ""%1"" не существует'"), Адрес.СубъектРФ)); - Результат.АдресПроверен = Истина; - Возврат Результат; - ИначеЕсли НЕ РегионЗагруженВАдресныеСведения Тогда - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "СубъектРФ", НСтр("ru = 'Отсутствуют адресные сведения по региону'") + ": " + Адрес.СубъектРФ + "."); - Результат.АдресПроверен = Ложь; - Возврат Результат; - КонецЕсли; - - // Расшифровка свойств адреса - Запрос = Новый Запрос("ВЫБРАТЬ - | Значение - |ИЗ - | РегистрСведений.СлужебныеАдресныеСведения - |ГДЕ - | Тип = ""ТипАдрЭл"" И Ключ = ""ПочтовыйИндекс"" - |;////////////////////////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | Ключ КАК Сокращение, - | Идентификатор КАК Идентификатор, - | Значение КАК Значение - |ИЗ - | РегистрСведений.СлужебныеАдресныеСведения - |ГДЕ - | Тип = ""ТипАдрЭл"" - | И ( - | Идентификатор = 91 ИЛИ Идентификатор = 90 - | ) - |;////////////////////////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | Расшифровка.Ключ КАК Значение, - | Расшифровка.Значение КАК ТипАдрЭл, - | - | ВЫБОР - | КОГДА НЕ ТипыВладения.Идентификатор ЕСТЬ NULL ТОГДА ТипыВладения.Идентификатор - | КОГДА НЕ ТипыСтроения.Идентификатор ЕСТЬ NULL ТОГДА ТипыСтроения.Идентификатор - | ИНАЧЕ 0 - | КОНЕЦ КАК Идентификатор - | - |ИЗ - | РегистрСведений.СлужебныеАдресныеСведения КАК Расшифровка - | - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.СлужебныеАдресныеСведения КАК ТипыВладения - |ПО - | ТипыВладения.Тип = ""ESTSTAT"" - | И ТипыВладения.Значение = Расшифровка.Ключ - | - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.СлужебныеАдресныеСведения КАК ТипыСтроения - |ПО - | ТипыСтроения.Тип = ""STRSTAT"" - | И ТипыСтроения.Значение = Расшифровка.Ключ - | - |ГДЕ - | Расшифровка.Тип = ""ДопАдрЭлНомер"""); - НаборРезультатов = Запрос.ВыполнитьПакет(); - - Таблица = НаборРезультатов[0].Выгрузить(); - Если Таблица.Количество() = 0 Тогда - ТипАдрЭлПочтовыйИндекс = ""; Иначе - ТипАдрЭлПочтовыйИндекс = Таблица[0].Значение; - КонецЕсли; - - ТаблицаСокращенийДополнительных = НаборРезультатов[1].Выгрузить(); - ТаблицаСокращенийДополнительных.Индексы.Добавить("Сокращение, Значение"); - - ТаблицаСокращенийЗданий = НаборРезультатов[2].Выгрузить(); - ТаблицаСокращенийЗданий.Индексы.Добавить("ТипАдрЭл"); - - Дополнительный = Новый Структура("Наименование, Сокращение"); - Подчиненный = Новый Структура("Наименование, Сокращение"); - ЗданияИПомещения = Новый Соответствие; - - Для Каждого ДополнительныйЭлемент Из Адрес.ПолучитьСписок("ДопАдрЭл") Цикл - ТипАдресногоЭлемента = СокрЛП(ДополнительныйЭлемент.ТипАдрЭл); - // Здание или помещение, почтовый индекс? - Если ТипАдресногоЭлемента = "" Тогда - ЗначениеНомера = ДополнительныйЭлемент.Номер; - СтрокаЗдания = ТаблицаСокращенийЗданий.Найти(ЗначениеНомера.Тип, "ТипАдрЭл"); - Если СтрокаЗдания <> Неопределено Тогда - ЗданияИПомещения[СтрокаЗдания.Значение] = Новый Структура("Вид, Значение", СтрокаЗдания.Идентификатор, ЗначениеНомера.Значение); - КонецЕсли; - Продолжить; - ИначеЕсли ТипАдресногоЭлемента = ТипАдрЭлПочтовыйИндекс Тогда - Продолжить; + Если НЕ ДополнительныеСведения.Пустой() Тогда + ДополнительныеАдресныеСведения = ДополнительныеСведения.Выгрузить()[0]; КонецЕсли; - // Дополнительный или подчиненный? - Вариант = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(ДополнительныйЭлемент.Значение); - - // У ФИАС некоторые сокращения ошибочно содержат в конце точку. Для поиска вариантов эту точку необходимо убрать. - СокращениеВарианта = ?( СтрЗаканчиваетсяНа(Вариант.Сокращение, "."), Лев(Вариант.Сокращение, СтрДлина(Вариант.Сокращение) - 1), Вариант.Сокращение); - // У ФИАС необходимо учитывать кв-л - ДополнитьТаблицуСокращений(ТаблицаСокращенийДополнительных); - - СтрокиВариантов = ТаблицаСокращенийДополнительных.НайтиСтроки(Новый Структура("Сокращение, Значение, Идентификатор", СокращениеВарианта, ТипАдресногоЭлемента, 90)); - Если СтрокиВариантов.Количество() > 0 Тогда - Код = СтрокиВариантов[0].Идентификатор; - Дополнительный = Вариант; - Иначе - СтрокиВариантов = ТаблицаСокращенийДополнительных.НайтиСтроки(Новый Структура("Сокращение, Значение, Идентификатор", СокращениеВарианта, ТипАдресногоЭлемента, 91)); - Если СтрокиВариантов.Количество() > 0 Тогда - Подчиненный = Вариант; - КонецЕсли; - КонецЕсли; - - КонецЦикла; - - Округ = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(Адрес.Округ); - Район = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(ПолучитьXDTOРеквизитОбъекта(Адрес, "СвРайМО/Район")); - Город = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(Адрес.Город); - ВнутригородскойРайон = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(Адрес.ВнутригРайон); - НаселенныйПункт = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(Адрес.НаселПункт); - Улица = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(Адрес.Улица); - - ИндексЭлемент = ПолучитьXDTOРеквизитОбъекта(Адрес, "ДопАдрЭл[ТипАдрЭл='10100000']"); - Индекс = ?(ИндексЭлемент <> Неопределено, ИндексЭлемент.Значение, ""); - - ПроверятьОкруг = Не ПустаяСтрока(Округ.Наименование); - ПроверятьРайон = Не ПустаяСтрока(Район.Наименование); - ПроверятьГород = Не ПустаяСтрока(Город.Наименование); - ПроверятьВнутригородскойРайон = Не ПустаяСтрока(ВнутригородскойРайон.Наименование); - ПроверятьНаселенныйПункт = Не ПустаяСтрока(НаселенныйПункт.Наименование); - ПроверятьУлицу = Не ПустаяСтрока(Улица.Наименование); - ПроверятьДополнительный = Не ПустаяСтрока(Дополнительный.Наименование); - ПроверятьПодчиненный = Не ПустаяСтрока(Подчиненный.Наименование); - - ПолеАдресныйОбъектИдентификатор = ?(ПроверятьПодчиненный, "Подчиненный.Идентификатор", - ?(ПроверятьДополнительный, "Дополнительный.Идентификатор", - ?(ПроверятьУлицу, "Улица.Идентификатор", - ?(ПроверятьНаселенныйПункт, "НаселенныйПункт.Идентификатор", - ?(ПроверятьВнутригородскойРайон, "ВнутригородскойРайон.Идентификатор", - ?(ПроверятьГород, "Город.Идентификатор", - ?(ПроверятьРайон, "Район.Идентификатор", - ?(ПроверятьОкруг, "Округ.Идентификатор", "СубъектРФ.Идентификатор")))))))); - - ТекстУпорядочить = "УПОРЯДОЧИТЬ ПО СубъектРФ.Актуален УБЫВ"; - ТекстОпциональныхПолейУпорядочиванияЗапросаПроверкиАдреса(ТекстУпорядочить, ПроверятьОкруг, "Округ"); - ТекстОпциональныхПолейУпорядочиванияЗапросаПроверкиАдреса(ТекстУпорядочить, ПроверятьРайон, "Район"); - ТекстОпциональныхПолейУпорядочиванияЗапросаПроверкиАдреса(ТекстУпорядочить, ПроверятьГород, "Город"); - ТекстОпциональныхПолейУпорядочиванияЗапросаПроверкиАдреса(ТекстУпорядочить, ПроверятьВнутригородскойРайон, "ВнутригородскойРайон"); - ТекстОпциональныхПолейУпорядочиванияЗапросаПроверкиАдреса(ТекстУпорядочить, ПроверятьНаселенныйПункт, "НаселенныйПункт"); - ТекстОпциональныхПолейУпорядочиванияЗапросаПроверкиАдреса(ТекстУпорядочить, ПроверятьУлицу, "Улица"); - ТекстОпциональныхПолейУпорядочиванияЗапросаПроверкиАдреса(ТекстУпорядочить, ПроверятьДополнительный, "Дополнительный"); - ТекстОпциональныхПолейУпорядочиванияЗапросаПроверкиАдреса(ТекстУпорядочить, ПроверятьПодчиненный, "Подчиненный"); - - Запрос.Текст = "ВЫБРАТЬ - | ИСТИНА КАК СубъектРФНайден, - | СубъектРФ.Идентификатор КАК СубъектРФИдентификатор, - | СубъектРФ.ПочтовыйИндекс КАК СубъектРФПочтовыйИндекс, - | СубъектРФ.КодСубъектаРФ КАК СубъектРФКод, - | СубъектРФ.КодКЛАДР КАК СубъектРФКодКЛАДР, - | СубъектРФ.Дополнительно КАК СубъектРФДополнительно, - | СубъектРФДополнительно.OKATO КАК СубъектРФДополнительноOKATO, - | СубъектРФДополнительно.ОКТМО КАК СубъектРФДополнительноОКТМО, - | СубъектРФДополнительно.КодИФНСФЛ КАК СубъектРФДополнительноКодИФНСФЛ, - | СубъектРФДополнительно.КодИФНСЮЛ КАК СубъектРФДополнительноКодИФНСЮЛ, - | СубъектРФДополнительно.КодУчасткаИФНСФЛ КАК СубъектРФДополнительноКодУчасткаИФНСФЛ, - | СубъектРФДополнительно.КодУчасткаИФНСЮЛ КАК СубъектРФДополнительноКодУчасткаИФНСЮЛ, - | - | " + ТекстОпциональныхПолейЗапросаПроверкиАдреса(ПроверятьОкруг, "Округ") + " - | " + ТекстОпциональныхПолейЗапросаПроверкиАдреса(ПроверятьРайон, "Район") + " - | " + ТекстОпциональныхПолейЗапросаПроверкиАдреса(ПроверятьГород, "Город") + " - | " + ТекстОпциональныхПолейЗапросаПроверкиАдреса(ПроверятьВнутригородскойРайон, "ВнутригородскойРайон") + " - | " + ТекстОпциональныхПолейЗапросаПроверкиАдреса(ПроверятьНаселенныйПункт, "НаселенныйПункт") + " - | " + ТекстОпциональныхПолейЗапросаПроверкиАдреса(ПроверятьУлицу, "Улица") + " - | " + ТекстОпциональныхПолейЗапросаПроверкиАдреса(ПроверятьДополнительный, "Дополнительный") + " - | " + ТекстОпциональныхПолейЗапросаПроверкиАдреса(ПроверятьПодчиненный, "Подчиненный") + " - | - | ДомаЗданияСтроения.ПочтовыйИндекс КАК ДомаПочтовыйИндекс, - | NULL КАК ДомаКодКЛАДР, - | NULL КАК ДомаДополнительно, - | NULL КАК ДомаДополнительноOKATO, - | NULL КАК ДомаДополнительноОКТМО, - | NULL КАК ДомаДополнительноКодИФНСФЛ, - | NULL КАК ДомаДополнительноКодИФНСЮЛ, - | NULL КАК ДомаДополнительноКодУчасткаИФНСФЛ, - | NULL КАК ДомаДополнительноКодУчасткаИФНСЮЛ, - | - | ДомаЗданияСтроения.Строения КАК Строения - | - |ИЗ - | // Иерархия подчиненности - | РегистрСведений.АдресныеОбъекты КАК СубъектРФ - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.ДополнительныеАдресныеСведения КАК СубъектРФДополнительно - |ПО - | СубъектРФДополнительно.Идентификатор = СубъектРФ.Дополнительно - | - |" + ?(ПроверятьОкруг, " - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК Округ - |ПО - | Округ.Наименование = &ОкругНаименование - | И Округ.Сокращение = &ОкругСокращение - | И Округ.Уровень = 2 - | И Округ.КодСубъектаРФ = СубъектРФ.КодСубъектаРФ - | И Округ.КодРайона = 0 - | И Округ.КодГорода = 0 - | И Округ.КодВнутригородскогоРайона = 0 - | И Округ.КодНаселенногоПункта = 0 - | И Округ.КодУлицы = 0 - | И Округ.КодДополнительногоЭлемента = 0 - | И Округ.КодПодчиненногоЭлемента = 0 - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.ДополнительныеАдресныеСведения КАК ОкругДополнительно - |ПО - | ОкругДополнительно.Идентификатор = Округ.Дополнительно - |", "") + " - | - |" + ?(ПроверятьРайон, " - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК Район - |ПО - | Район.Наименование = &РайонНаименование - | И Район.Сокращение = &РайонСокращение - | И Район.Уровень = 3 - | И Район.КодСубъектаРФ = СубъектРФ.КодСубъектаРФ - | И Район.КодОкруга = " + ?(ПроверятьОкруг, "Округ.КодОкруга", "0") + " - | И Район.КодГорода = 0 - | И Район.КодВнутригородскогоРайона = 0 - | И Район.КодНаселенногоПункта = 0 - | И Район.КодУлицы = 0 - | И Район.КодДополнительногоЭлемента = 0 - | И Район.КодПодчиненногоЭлемента = 0 - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.ДополнительныеАдресныеСведения КАК РайонДополнительно - |ПО - | РайонДополнительно.Идентификатор = Район.Дополнительно - |", "") + " - | - |" + ?(ПроверятьГород, " - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК Город - |ПО - | Город.Наименование = &ГородНаименование - | И Город.Сокращение = &ГородСокращение - | И Город.Уровень = 4 - | И Город.КодСубъектаРФ = СубъектРФ.КодСубъектаРФ - | И Город.КодОкруга = " + ?(ПроверятьОкруг, "Округ.КодОкруга", "0") + " - | И Город.КодРайона = " + ?(ПроверятьРайон, "Район.КодРайона", "0") + " - | И Город.КодВнутригородскогоРайона = 0 - | И Город.КодНаселенногоПункта = 0 - | И Город.КодУлицы = 0 - | И Город.КодДополнительногоЭлемента = 0 - | И Город.КодПодчиненногоЭлемента = 0 - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.ДополнительныеАдресныеСведения КАК ГородДополнительно - |ПО - | ГородДополнительно.Идентификатор = Город.Дополнительно - |", "") + " - | - |" + ?(ПроверятьВнутригородскойРайон, " - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК ВнутригородскойРайон - |ПО - | ВнутригородскойРайон.Наименование = &ВнутригородскойРайонНаименование - | И ВнутригородскойРайон.Сокращение = &ВнутригородскойРайонСокращение - | И ВнутригородскойРайон.Уровень = 5 - | И ВнутригородскойРайон.КодСубъектаРФ = СубъектРФ.КодСубъектаРФ - | И ВнутригородскойРайон.КодОкруга = " + ?(ПроверятьОкруг, "Округ.КодОкруга", "0") + " - | И ВнутригородскойРайон.КодРайона = " + ?(ПроверятьРайон, "Район.КодРайона", "0") + " - | И ВнутригородскойРайон.КодГорода = " + ?(ПроверятьГород, "Город.КодГорода", "0") + " - | И ВнутригородскойРайон.КодНаселенногоПункта = 0 - | И ВнутригородскойРайон.КодУлицы = 0 - | И ВнутригородскойРайон.КодДополнительногоЭлемента = 0 - | И ВнутригородскойРайон.КодПодчиненногоЭлемента = 0 - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.ДополнительныеАдресныеСведения КАК ВнутригородскойРайонДополнительно - |ПО - | ВнутригородскойРайонДополнительно.Идентификатор = ВнутригородскойРайон.Дополнительно - |", "") + " - | - |" + ?(ПроверятьНаселенныйПункт, " - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК НаселенныйПункт - |ПО - | НаселенныйПункт.Наименование = &НаселенныйПунктНаименование - | И НаселенныйПункт.Сокращение = &НаселенныйПунктСокращение - | И НаселенныйПункт.Уровень = 6 - | И НаселенныйПункт.КодСубъектаРФ = СубъектРФ.КодСубъектаРФ - | И НаселенныйПункт.КодОкруга = " + ?(ПроверятьОкруг, "Округ.КодОкруга", "0") + " - | И НаселенныйПункт.КодРайона = " + ?(ПроверятьРайон, "Район.КодРайона", "0") + " - | И НаселенныйПункт.КодГорода = " + ?(ПроверятьГород, "Город.КодГорода", "0") + " - | И НаселенныйПункт.КодВнутригородскогоРайона = " + ?(ПроверятьВнутригородскойРайон, "ВнутригородскойРайон.КодВнутригородскогоРайона", "0") + " - | И НаселенныйПункт.КодУлицы = 0 - | И НаселенныйПункт.КодДополнительногоЭлемента = 0 - | И НаселенныйПункт.КодПодчиненногоЭлемента = 0 - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.ДополнительныеАдресныеСведения КАК НаселенныйПунктДополнительно - |ПО - | НаселенныйПунктДополнительно.Идентификатор = НаселенныйПункт.Дополнительно - |", "") + " - | - |" + ?(ПроверятьУлицу, " - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК Улица - |ПО - | Улица.Наименование = &УлицаНаименование - | И Улица.Сокращение = &УлицаСокращение - | И Улица.Уровень = 7 - | И Улица.КодСубъектаРФ = СубъектРФ.КодСубъектаРФ - | И Улица.КодОкруга = " + ?(ПроверятьОкруг, "Округ.КодОкруга", "0") + " - | И Улица.КодРайона = " + ?(ПроверятьРайон, "Район.КодРайона", "0") + " - | И Улица.КодГорода = " + ?(ПроверятьГород, "Город.КодГорода", "0") + " - | И Улица.КодВнутригородскогоРайона = " + ?(ПроверятьВнутригородскойРайон, "ВнутригородскойРайон.КодВнутригородскогоРайона", "0") + " - | И Улица.КодНаселенногоПункта = " + ?(ПроверятьНаселенныйПункт, "НаселенныйПункт.КодНаселенногоПункта", "0") + " - | И Улица.КодДополнительногоЭлемента = 0 - | И Улица.КодПодчиненногоЭлемента = 0 - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.ДополнительныеАдресныеСведения КАК УлицаДополнительно - |ПО - | УлицаДополнительно.Идентификатор = Улица.Дополнительно - |", "") + " - | - |" + ?(ПроверятьДополнительный, " - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК Дополнительный - |ПО - | Дополнительный.Наименование = &ДополнительныйНаименование - | И Дополнительный.Сокращение = &ДополнительныйСокращение - | И Дополнительный.Уровень = 90 - | И Дополнительный.КодСубъектаРФ = СубъектРФ.КодСубъектаРФ - | И Дополнительный.КодОкруга = " + ?(ПроверятьОкруг, "Округ.КодОкруга", "0") + " - | И Дополнительный.КодРайона = " + ?(ПроверятьРайон, "Район.КодРайона", "0") + " - | И Дополнительный.КодГорода = " + ?(ПроверятьГород, "Город.КодГорода", "0") + " - | И Дополнительный.КодВнутригородскогоРайона = " + ?(ПроверятьВнутригородскойРайон, "ВнутригородскойРайон.КодВнутригородскогоРайона", "0") + " - | И Дополнительный.КодНаселенногоПункта = " + ?(ПроверятьНаселенныйПункт, "НаселенныйПункт.КодНаселенногоПункта", "0") + " - | И Дополнительный.КодУлицы = " + ?(ПроверятьУлицу, "Улица.КодУлицы", "0") + " - | И Дополнительный.КодПодчиненногоЭлемента = 0 - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.ДополнительныеАдресныеСведения КАК ДополнительныйДополнительно - |ПО - | ДополнительныйДополнительно.Идентификатор = Дополнительный.Дополнительно - |", "") + " - | - |" + ?(ПроверятьПодчиненный, " - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК Подчиненный - |ПО - | Подчиненный.Наименование = &ПодчиненныйНаименование - | И Подчиненный.Сокращение = &ПодчиненныйСокращение - | И Подчиненный.Уровень = 91 - | И Подчиненный.КодСубъектаРФ = СубъектРФ.КодСубъектаРФ - | И Подчиненный.КодОкруга = " + ?(ПроверятьОкруг, "Округ.КодОкруга", "0") + " - | И Подчиненный.КодРайона = " + ?(ПроверятьРайон, "Район.КодРайона", "0") + " - | И Подчиненный.КодГорода = " + ?(ПроверятьГород, "Город.КодГорода", "0") + " - | И Подчиненный.КодВнутригородскогоРайона = " + ?(ПроверятьВнутригородскойРайон, "ВнутригородскойРайон.КодВнутригородскогоРайона", "0") + " - | И Подчиненный.КодНаселенногоПункта = " + ?(ПроверятьНаселенныйПункт, "НаселенныйПункт.КодНаселенногоПункта", "0") + " - | И Подчиненный.КодУлицы = " + ?(ПроверятьУлицу, "Улица.КодУлицы", "0") + " - | И Подчиненный.КодДополнительногоЭлемента = " + ?(ПроверятьДополнительный, "Дополнительный.КодДополнительногоЭлемента", "0") + " - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.ДополнительныеАдресныеСведения КАК ПодчиненныйДополнительно - |ПО - | ПодчиненныйДополнительно.Идентификатор = Подчиненный.Дополнительно - |", "") + " - | - |// Записи зданий и строений - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.ДомаЗданияСтроения КАК ДомаЗданияСтроения - |ПО - | ДомаЗданияСтроения.АдресныйОбъект = " + ПолеАдресныйОбъектИдентификатор + " - | - |// Условие на регион, который есть всегда - |ГДЕ - | СубъектРФ.Наименование = &СубъектРФНаименование - | И СубъектРФ.Сокращение = &СубъектРФСокращение - | И СубъектРФ.Уровень = 1 - | И СубъектРФ.КодОкруга = 0 - | И СубъектРФ.КодРайона = 0 - | И СубъектРФ.КодГорода = 0 - | И СубъектРФ.КодВнутригородскогоРайона = 0 - | И СубъектРФ.КодНаселенногоПункта = 0 - | И СубъектРФ.КодУлицы = 0 - | И СубъектРФ.КодДополнительногоЭлемента = 0 - | И СубъектРФ.КодПодчиненногоЭлемента = 0 - | " + ТекстУпорядочить; - - Запрос.УстановитьПараметр("СубъектРФНаименование", СубъектРФ.Наименование); - Запрос.УстановитьПараметр("СубъектРФСокращение", СубъектРФ.Сокращение); - - Запрос.УстановитьПараметр("ОкругНаименование", Округ.Наименование); - Запрос.УстановитьПараметр("ОкругСокращение", Округ.Сокращение); - - Запрос.УстановитьПараметр("РайонНаименование", Район.Наименование); - Запрос.УстановитьПараметр("РайонСокращение", Район.Сокращение); - - Запрос.УстановитьПараметр("ГородНаименование", Город.Наименование); - Запрос.УстановитьПараметр("ГородСокращение", Город.Сокращение); - - Запрос.УстановитьПараметр("ВнутригородскойРайонНаименование", ВнутригородскойРайон.Наименование); - Запрос.УстановитьПараметр("ВнутригородскойРайонСокращение", ВнутригородскойРайон.Сокращение); - - Запрос.УстановитьПараметр("НаселенныйПунктНаименование", НаселенныйПункт.Наименование); - Запрос.УстановитьПараметр("НаселенныйПунктСокращение", НаселенныйПункт.Сокращение); - - Запрос.УстановитьПараметр("УлицаНаименование", Улица.Наименование); - Запрос.УстановитьПараметр("УлицаСокращение", Улица.Сокращение); - - Запрос.УстановитьПараметр("ДополнительныйНаименование", Дополнительный.Наименование); - Запрос.УстановитьПараметр("ДополнительныйСокращение", Дополнительный.Сокращение); - - Запрос.УстановитьПараметр("ПодчиненныйНаименование", Подчиненный.Наименование); - Запрос.УстановитьПараметр("ПодчиненныйСокращение", Подчиненный.Сокращение); - - РезультатЗапроса = Запрос.Выполнить(); - Если РезультатЗапроса.Пустой() Тогда - // Нет региона - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "СубъектРФ", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Субъект РФ (регион) ""%1"" не найден в адресном классификаторе'"), СубъектРФ.Наименование + " " + СубъектРФ.Сокращение)); - Возврат Результат; - КонецЕсли; - // Оставляем только записи со всеми корректными данными. - ЗаписиДомов = РезультатЗапроса.Выгрузить(); - КорректныеЗаписи = Новый Массив; - - УлицаНайдена = Ложь; - ВариантАдреса = Новый Структура; - ПроверитьИсторию = Ложь; - - Для Каждого Запись Из ЗаписиДомов Цикл; - ЗаполнитьПочтовыйИндексИКодКЛАДРПоИерархииФИАС(ВариантАдреса, Запись); - - Если ПроверятьОкруг И Не Запись.ОкругНайден И Запись.ОкругАктуален = Истина Тогда - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Округ", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Округ ""%1"" отсутствует в адресном классификаторе'"), Округ.Наименование + " " + Округ.Сокращение)); - КонецЕсли; - - Если ПроверятьРайон И Не Запись.РайонНайден И Запись.РайонАктуален = Истина Тогда - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "СвРайМО/Район", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Район ""%1"" отсутствует в адресном классификаторе'"), Район.Наименование + " " + Район.Сокращение)); - КонецЕсли; - - Если ПроверятьГород И Не Запись.ГородНайден И Запись.ГородАктуален = Истина Тогда - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Город", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Город ""%1"" отсутствует в адресном классификаторе'"), Город.Наименование + " " + Город.Сокращение)); - КонецЕсли; - - Если ПроверятьВнутригородскойРайон И Не Запись.ВнутригородскойРайонНайден И Запись.ВнутригородскойРайонАктуален = Истина Тогда - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "ВнутригРайон", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Внутригородской район ""%1"" отсутствует в адресном классификаторе'"), - ВнутригородскойРайон.Наименование + " " + ВнутригородскойРайон.Сокращение)); - КонецЕсли; - - Если ПроверятьНаселенныйПункт И Не Запись.НаселенныйПунктНайден И Запись.НаселенныйПунктАктуален = Истина Тогда - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "НаселПункт", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Населенный пункт ""%1"" отсутствует в адресном классификаторе'"), - НаселенныйПункт.Наименование + " " + НаселенныйПункт.Сокращение)); - ИначеЕсли ПроверятьНаселенныйПункт И Запись.НаселенныйПунктНайден <> Истина Тогда - ПроверитьИсторию = Истина; - КонецЕсли; - - Если ПроверятьУлицу И Запись.УлицаНайден И Запись.УлицаАктуален = Истина Тогда - УлицаНайдена = Истина; - КонецЕсли; - - Если ПроверятьДополнительный И Не Запись.ДополнительныйНайден И Запись.ДополнительныйАктуален = Истина Тогда - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Дополнительный", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Дополнительная территория ""%1""отсутствует в адресном классификаторе'"), - Дополнительный.Наименование + " " + Дополнительный.Сокращение)); - ИначеЕсли ПроверятьДополнительный И Запись.ДополнительныйНайден <> Истина Тогда - ПроверитьИсторию = Истина; - КонецЕсли; - - Если ПроверятьПодчиненный И Не Запись.ПодчиненныйНайден И Запись.ПодчиненныйАктуален = Истина Тогда - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Подчиненный", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Элемент дополнительной территории ""%1"" отсутствует в адресном классификаторе'"), - Подчиненный.Наименование + " " + Подчиненный.Сокращение)); - КонецЕсли; - - Если ОшибкиПроверки.Количество() = 0 Тогда - // Вся запись правильная - КорректныеЗаписи.Добавить(Запись); - КонецЕсли; - КонецЦикла; - - Если ПроверятьУлицу И НЕ УлицаНайдена Тогда - ИсторияОбъекта = ИсторияАдресногоОбъекта(Улица.Наименование, Улица.Сокращение, Запись); - Если ИсторияОбъекта.Количество() > 0 Тогда - Для каждого СтрокаОбъект Из ИсторияОбъекта Цикл - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Улица", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Улица ""%1"" была переименована в ""%2""'"), СтрокаОбъект.Значение, СтрокаОбъект.Представление)); - КонецЦикла; - Иначе - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Улица", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Улица ""%1"" отсутствует в адресном классификаторе'"), Улица.Наименование + " " + Улица.Сокращение)); - КонецЕсли; + ПочтовыйИндекс = Формат(ДополнительныеАдресныеСведения.ПочтовыйИндекс, "ЧГ=0"); + Если СтрСравнить(ПочтовыйИндекс, Адрес.ZipCode) <> 0 Тогда + ДополнительныйТекст = ?(ЗначениеЗаполнено(ПочтовыйИндекс), " " + НСтр("ru='Возможно, правильный индекс'") + " " + ПочтовыйИндекс, ""); + ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Индекс", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Индекс ""%1"" не соответствует адресу.%2'"), Адрес.ZipCode, ДополнительныйТекст)); КонецЕсли; - Если ПроверитьИсторию Тогда - НовыйАдрес = АнализИсторииОдногоАдресаПоКлассификатору(Адрес, Уровни); - Если НовыйАдрес <> Неопределено Тогда - - Результат.Вставить("Исторический", Истина); - Результат.Варианты.Добавить(НовыйАдрес); - Возврат Результат; - - КонецЕсли; - КонецЕсли; - - Если КорректныеЗаписи.Количество() = 0 Тогда - // Нет смысла искать дома и выдавать варианты, надо посмотреть в историю. - Возврат Результат; - КонецЕсли; - - ЕстьЗаписиДомов = Ложь; - ИндексКорректный = Ложь; - НеточныеСовпадения = Новый СписокЗначений; - - Если НЕ Уровни.Найти(90) = Неопределено Тогда - Для Каждого Запись Из КорректныеЗаписи Цикл - // Если Запись.Строения равно Null значит по этому адресу нет домов. - Если ЗначениеЗаполнено(Запись.Строения) Тогда - Описание = Запись.Строения.Получить(); - - ВариантАдреса = Новый Структура; - Если Не ПустаяСтрока(Описание) Тогда - ИдентификаторДополнительно = УникальныйИдентификаторИзСтроки64(Лев(Описание, 24)); - Описание = Сред(Описание, 25); - Если Не ПустаяСтрока(Описание) Тогда - ЕстьЗаписиДомов = Истина; - - Если ОписаниеЗданийФИАССодержитДанные(Описание, ЗданияИПомещения, НеточныеСовпадения) Тогда - ЗаполнитьИдентификаторПоИерархииФИАС(ВариантАдреса, Запись); - ЗаполнитьДополнительныеДанныеПоИерархииФИАС(ВариантАдреса, Запись, ИдентификаторДополнительно); - ЗаполнитьПочтовыйИндексИКодКЛАДРПоИерархииФИАС(ВариантАдреса, Запись); - Если ЗначениеЗаполнено(Индекс) И ВариантАдреса.Свойство("Индекс") И Формат(ВариантАдреса.Индекс, "ЧРГ=; ЧГ=0") = Индекс Тогда - ИндексКорректный = Истина; - КонецЕсли; - ВариантыАдреса.Добавить(ВариантАдреса); - КонецЕсли; - КонецЕсли; - КонецЕсли; - Иначе - ИндексКорректный = Истина; // Индекс на уровни домов доп. территории считаем корректным. - КонецЕсли; - КонецЦикла; - КонецЕсли; - - ЕстьВарианты = ВариантыАдреса.Количество() > 0; - Если ЕстьЗаписиДомов И Не ЕстьВарианты Тогда - ОписаниеЗданияПоСоответствиюФИАС = ОписаниеЗданияПоСоответствиюФИАС(ЗданияИПомещения); - Если ЗначениеЗаполнено(ОписаниеЗданияПоСоответствиюФИАС) Тогда - Подсказка = ""; - Если НеточныеСовпадения.Количество() = 1 Тогда - Подсказка = ", " + НСтр("ru = 'но есть'") + """" + НеточныеСовпадения[0]+ """"; - ИначеЕсли НеточныеСовпадения.Количество() > 1 Тогда - ПервоеЗначение = НеточныеСовпадения[0]; - Если НеточныеСовпадения.Количество() = 2 Тогда - Подсказка = НСтр("ru = 'но есть ""%1"" или ""%2""'"); - ВтороеЗначение = НеточныеСовпадения[1]; - Иначе - Подсказка = НСтр("ru = 'но есть ""%1"" и другие варианты(%2)'"); - ВтороеЗначение = Строка(НеточныеСовпадения.Количество()); - КонецЕсли; - Подсказка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(", " + Подсказка, ПервоеЗначение, ВтороеЗначение); - КонецЕсли; - - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Подчиненный", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '""%1"" отсутствует в адресном классификаторе'"), ОписаниеЗданияПоСоответствиюФИАС(ЗданияИПомещения)) + Подсказка); - КонецЕсли; - - ВариантАдреса = Новый Структура; - ЗаполнитьПочтовыйИндексИКодКЛАДРПоИерархииФИАС(ВариантАдреса, Запись); - Если ЗначениеЗаполнено(Индекс) И ВариантАдреса.Свойство("Индекс") И Формат(ВариантАдреса.Индекс, "ЧРГ=; ЧГ=0") = Индекс Тогда - ИндексКорректный = Истина; - КонецЕсли; - - ИначеЕсли Не ЕстьЗаписиДомов И Не ЕстьВарианты Тогда - // Добавляем варианты, ошибкой не считаем. - Для Каждого Запись Из КорректныеЗаписи Цикл - ВариантАдреса = Новый Структура; - ЗаполнитьИдентификаторПоИерархииФИАС(ВариантАдреса, Запись); - ЗаполнитьДополнительныеДанныеПоИерархииФИАС(ВариантАдреса, Запись, Неопределено); - ЗаполнитьПочтовыйИндексИКодКЛАДРПоИерархииФИАС(ВариантАдреса, Запись); - ВариантыАдреса.Добавить(ВариантАдреса); - - Если ЗначениеЗаполнено(Индекс) И ВариантАдреса.Свойство("Индекс") И Формат(ВариантАдреса.Индекс, "ЧРГ=; ЧГ=0") = Индекс Тогда - ИндексКорректный = Истина; - КонецЕсли; - КонецЦикла; - - КонецЕсли; - - // Проверить индекс - Если НЕ ИндексКорректный И ЗначениеЗаполнено(Индекс) И ОшибкиПроверки.Количество() = 0 Тогда - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Индекс", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Индекс ""%1"" в адресном классификаторе не соответствует введенному адресу'"), Индекс)); - КонецЕсли; - - Возврат Результат; -КонецФункции - -Процедура ДополнитьТаблицуСокращений(ТаблицаСокращенийДополнительных) - - НоваяСтрока = ТаблицаСокращенийДополнительных.Вставить(0); - НоваяСтрока.Идентификатор = 90; - НоваяСтрока.Значение = "10200000"; - НоваяСтрока.Сокращение = "кв-л"; - - НоваяСтрока = ТаблицаСокращенийДополнительных.Вставить(0); - НоваяСтрока.Идентификатор = 90; - НоваяСтрока.Значение = "10200000"; - НоваяСтрока.Сокращение = "р-н"; - -КонецПроцедуры - -// История - -Функция ИсторияАдресногоОбъекта(Наименование, Сокращение, Запись) - - Результат = Новый СписокЗначений; - - ТекстЗапроса = "ВЫБРАТЬ - | АдресныеОбъекты.КодСубъектаРФ КАК КодСубъектаРФ, - | АдресныеОбъекты.КодОкруга КАК КодОкруга, - | АдресныеОбъекты.КодРайона КАК КодРайона, - | АдресныеОбъекты.КодГорода КАК КодГорода, - | АдресныеОбъекты.КодВнутригородскогоРайона КАК КодВнутригородскогоРайона, - | АдресныеОбъекты.КодНаселенногоПункта КАК КодНаселенногоПункта - |ПОМЕСТИТЬ ТаблицаАдресногоОбъекта - |ИЗ - | РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты - |ГДЕ - | АдресныеОбъекты.Идентификатор = &Идентификатор - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ИсторияАдресныхОбъектов.Идентификатор КАК Идентификатор, - | ИсторияАдресныхОбъектов.ТекущийКодСубъектаРФ КАК ТекущийКодСубъектаРФ, - | ИсторияАдресныхОбъектов.ПочтовыйИндекс КАК ПочтовыйИндекс, - | ИсторияАдресныхОбъектов.Наименование КАК Наименование, - | ИсторияАдресныхОбъектов.Сокращение КАК Сокращение, - | ИсторияАдресныхОбъектов.Дополнительно КАК Дополнительно, - | ИсторияАдресныхОбъектов.КодКЛАДР КАК КодКЛАДР, - | ИсторияАдресныхОбъектов.АдресныйОбъект КАК АдресныйОбъект, - | ИсторияАдресныхОбъектов.НачалоДействияЗаписи КАК НачалоДействияЗаписи, - | ИсторияАдресныхОбъектов.ОкончаниеДействияЗаписи КАК ОкончаниеДействияЗаписи, - | ИсторияАдресныхОбъектов.Операция КАК Операция, - | ИсторияАдресныхОбъектов.Уровень КАК Уровень, - | АдресныеОбъекты.Наименование КАК ТекущиеНаименование, - | АдресныеОбъекты.Сокращение КАК ТекущиеСокращение - |ИЗ - | ТаблицаАдресногоОбъекта КАК ТекущийАдрес - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИсторияАдресныхОбъектов КАК ИсторияАдресныхОбъектов - | ПО (ИсторияАдресныхОбъектов.КодСубъектаРФ = ТекущийАдрес.КодСубъектаРФ) - | И (ИсторияАдресныхОбъектов.КодОкруга = ТекущийАдрес.КодОкруга) - | И (ИсторияАдресныхОбъектов.КодРайона = ТекущийАдрес.КодРайона) - | И (ИсторияАдресныхОбъектов.КодГорода = ТекущийАдрес.КодГорода) - | И (ИсторияАдресныхОбъектов.КодВнутригородскогоРайона = ТекущийАдрес.КодВнутригородскогоРайона) - | И (ИсторияАдресныхОбъектов.КодНаселенногоПункта = ТекущийАдрес.КодНаселенногоПункта) - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты - | ПО (ИсторияАдресныхОбъектов.АдресныйОбъект = АдресныеОбъекты.Идентификатор) - |ГДЕ - | ИсторияАдресныхОбъектов.Наименование = &Наименование - | И ИсторияАдресныхОбъектов.Сокращение = &Сокращение"; - - Вариант = Новый Структура; - ЗаполнитьИдентификаторПоИерархииФИАС(Вариант, Запись); - Если Не ЗначениеЗаполнено(Вариант.Идентификатор) Тогда - Возврат Результат; - КонецЕсли; - - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("Наименование", Наименование); - Запрос.УстановитьПараметр("Сокращение", Сокращение); - Запрос.УстановитьПараметр("Идентификатор", Вариант.Идентификатор); - - РезультатЗапроса = Запрос.Выполнить(); - ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); - - Пока ВыборкаДетальныеЗаписи.Следующий() Цикл - Результат.Добавить(Наименование + " " + Сокращение, ВыборкаДетальныеЗаписи.ТекущиеНаименование + " " + ВыборкаДетальныеЗаписи.ТекущиеСокращение); - КонецЦикла; - Возврат Результат; КонецФункции -Процедура ТекстОпциональныхПолейУпорядочиванияЗапросаПроверкиАдресаИстория(ТекстЗапроса, Флаг, ИмяПоля) - Если Флаг Тогда - ТекстЗапроса = ТекстЗапроса + ", " + Символы.ПС + ИмяПоля + ".ОкончаниеДействияЗаписи УБЫВ"; - КонецЕсли; -КонецПроцедуры - -Функция ТекстОпциональныхПолейЗапросаПроверкиАдресаИстория(ФлагПроверки, ИмяПоля) +Функция ДанныеУровняКорректные(Знач Адрес, Знач ИмяУровня, Знач ПредставлениеУровня, Знач АдресСтрока, Знач КакиеУровниПроверять, Знач ОшибкиПроверки) - Если ФлагПроверки Тогда - Вариант = " - | ВЫБОР КОГДА [Поле].Идентификатор ЕСТЬ NULL ТОГДА ЛОЖЬ ИНАЧЕ ИСТИНА КОНЕЦ КАК [Поле]Найден, - | [Поле].АдресныйОбъект КАК [Поле]АдресныйОбъект, - | [Поле].Идентификатор КАК [Поле]Идентификатор, - | [Поле].ПочтовыйИндекс КАК [Поле]ПочтовыйИндекс, - | [Поле].КодКЛАДР КАК [Поле]КодКЛАДР, - | [Поле].Дополнительно КАК [Поле]Дополнительно, - |"; - Иначе - Вариант = " - | NULL КАК [Поле]Найден, - | NULL КАК [Поле]Идентификатор, - | NULL КАК [Поле]ПочтовыйИндекс, - | NULL КАК [Поле]КодКЛАДР, - | NULL КАК [Поле]Дополнительно, - |"; - КонецЕсли; - - Возврат СтрЗаменить(Вариант, "[Поле]", ИмяПоля); -КонецФункции - -// Локальная проверка одного адреса. -// -Функция АнализИсторииОдногоАдресаПоКлассификатору(Адрес, Уровни) - - Результат = Новый Структура("Ошибки, Варианты, АдресПроверен", Новый Массив, Новый Массив, Истина); - ОшибкиПроверки = Результат.Ошибки; - ВариантыАдреса = Результат.Варианты; - - Если ТипЗнч(Адрес) <> Тип("ОбъектXDTO") Тогда - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Адрес", НСтр("ru = 'Невозможно проверить адрес из-за некорректных сведений. Проверьте правильность заполнения адреса.'")); - Возврат Результат; + Если КакиеУровниПроверять[ИмяУровня] <> Неопределено И ПустаяСтрока(АдресСтрока["НаименованиеУровень" + КакиеУровниПроверять[ИмяУровня]]) Тогда + ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, ПредставлениеУровня, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 ""%2"" отсутствует в адресном классификаторе'"), ПредставлениеУровня, + Адрес[ИмяУровня] + " " + Адрес[ИмяУровня + "Type"])); + Возврат Ложь; КонецЕсли; - //// Субъект должен быть всегда - СубъектРФ = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(Адрес.СубъектРФ); + Возврат Истина; - Если ПустаяСтрока(СубъектРФ.Наименование) Тогда - // Нет субъекта - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "СубъектРФ", НСтр("ru = 'Не указан субъект РФ адреса'") ); - Возврат Результат; - ИначеЕсли Уровни.Найти(1) = Неопределено Тогда - // В уровнях должно быть указано всегда. - ВызватьИсключение НСтр("ru = 'В уровнях для проверки адреса не указан уровень субъекта РФ.'"); - КонецЕсли; - - КодСубъектРФ = АдресныйКлассификатор.КодРегионаПоНаименованию(Адрес.СубъектРФ); - - РегионЗагруженВАдресныеСведения = СведенияОРегионе(Адрес.СубъектРФ).Загружен; - Если РегионЗагруженВАдресныеСведения = Неопределено Тогда - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "СубъектРФ", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Регион ""%1"" не существует'"), Адрес.СубъектРФ)); - Результат.АдресПроверен = Истина; - Возврат Результат; - ИначеЕсли НЕ РегионЗагруженВАдресныеСведения Тогда - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "СубъектРФ", НСтр("ru = 'Отсутствуют адресные сведения по региону'") + ": " + Адрес.СубъектРФ + "."); - Результат.АдресПроверен = Ложь; - Возврат Результат; - КонецЕсли; - - // Расшифровка свойств адреса - Запрос = Новый Запрос("ВЫБРАТЬ - | Значение - |ИЗ - | РегистрСведений.СлужебныеАдресныеСведения - |ГДЕ - | Тип = ""ТипАдрЭл"" И Ключ = ""ПочтовыйИндекс"" - |;////////////////////////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | Ключ КАК Сокращение, - | Идентификатор КАК Идентификатор, - | Значение КАК Значение - |ИЗ - | РегистрСведений.СлужебныеАдресныеСведения - |ГДЕ - | Тип = ""ТипАдрЭл"" - | И ( - | Идентификатор = 91 ИЛИ Идентификатор = 90 - | ) - |;////////////////////////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | Расшифровка.Ключ КАК Значение, - | Расшифровка.Значение КАК ТипАдрЭл, - | - | ВЫБОР - | КОГДА НЕ ТипыВладения.Идентификатор ЕСТЬ NULL ТОГДА ТипыВладения.Идентификатор - | КОГДА НЕ ТипыСтроения.Идентификатор ЕСТЬ NULL ТОГДА ТипыСтроения.Идентификатор - | ИНАЧЕ 0 - | КОНЕЦ КАК Идентификатор - | - |ИЗ - | РегистрСведений.СлужебныеАдресныеСведения КАК Расшифровка - | - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.СлужебныеАдресныеСведения КАК ТипыВладения - |ПО - | ТипыВладения.Тип = ""ESTSTAT"" - | И ТипыВладения.Значение = Расшифровка.Ключ - | - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.СлужебныеАдресныеСведения КАК ТипыСтроения - |ПО - | ТипыСтроения.Тип = ""STRSTAT"" - | И ТипыСтроения.Значение = Расшифровка.Ключ - | - |ГДЕ - | Расшифровка.Тип = ""ДопАдрЭлНомер"""); - НаборРезультатов = Запрос.ВыполнитьПакет(); - - Таблица = НаборРезультатов[0].Выгрузить(); - Если Таблица.Количество() = 0 Тогда - ТипАдрЭлПочтовыйИндекс = ""; - Иначе - ТипАдрЭлПочтовыйИндекс = Таблица[0].Значение; - КонецЕсли; - - ТаблицаСокращенийДополнительных = НаборРезультатов[1].Выгрузить(); - ТаблицаСокращенийДополнительных.Индексы.Добавить("Сокращение, Значение"); - - ТаблицаСокращенийЗданий = НаборРезультатов[2].Выгрузить(); - ТаблицаСокращенийЗданий.Индексы.Добавить("ТипАдрЭл"); - - Дополнительный = Новый Структура("Наименование, Сокращение"); - Подчиненный = Новый Структура("Наименование, Сокращение"); - ЗданияИПомещения = Новый Соответствие; - - Для Каждого ДополнительныйЭлемент Из Адрес.ПолучитьСписок("ДопАдрЭл") Цикл - ТипАдресногоЭлемента = СокрЛП(ДополнительныйЭлемент.ТипАдрЭл); - - // Здание или помещение, почтовый индекс? - Если ТипАдресногоЭлемента = "" Тогда - ЗначениеНомера = ДополнительныйЭлемент.Номер; - СтрокаЗдания = ТаблицаСокращенийЗданий.Найти(ЗначениеНомера.Тип, "ТипАдрЭл"); - Если СтрокаЗдания <> Неопределено Тогда - ЗданияИПомещения[СтрокаЗдания.Значение] = Новый Структура("Вид, Значение", СтрокаЗдания.Идентификатор, ЗначениеНомера.Значение); - КонецЕсли; - Продолжить; - ИначеЕсли ТипАдресногоЭлемента = ТипАдрЭлПочтовыйИндекс Тогда - Продолжить; - КонецЕсли; - - // Дополнительный или подчиненный? - Вариант = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(ДополнительныйЭлемент.Значение); - - // У ФИАС некоторые сокращения ошибочно содержат в конце точку. Для поиска вариантов эту точку необходимо убрать. - СокращениеВарианта = ?( СтрЗаканчиваетсяНа(Вариант.Сокращение, "."), Лев(Вариант.Сокращение, СтрДлина(Вариант.Сокращение) - 1), Вариант.Сокращение); - // У ФИАС необходимо учитывать кв-л - ДополнитьТаблицуСокращений(ТаблицаСокращенийДополнительных); - - СтрокиВариантов = ТаблицаСокращенийДополнительных.НайтиСтроки(Новый Структура("Сокращение, Значение, Идентификатор", СокращениеВарианта, ТипАдресногоЭлемента, 90)); - Если СтрокиВариантов.Количество() > 0 Тогда - Код = СтрокиВариантов[0].Идентификатор; - Дополнительный = Вариант; - Иначе - СтрокиВариантов = ТаблицаСокращенийДополнительных.НайтиСтроки(Новый Структура("Сокращение, Значение, Идентификатор", СокращениеВарианта, ТипАдресногоЭлемента, 91)); - Если СтрокиВариантов.Количество() > 0 Тогда - Подчиненный = Вариант; - КонецЕсли; - КонецЕсли; - - КонецЦикла; - - Округ = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(Адрес.Округ); - Район = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(ПолучитьXDTOРеквизитОбъекта(Адрес, "СвРайМО/Район")); - Город = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(Адрес.Город); - ВнутригородскойРайон = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(Адрес.ВнутригРайон); - НаселенныйПункт = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(Адрес.НаселПункт); - Улица = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(Адрес.Улица); - - ИндексЭлемент = ПолучитьXDTOРеквизитОбъекта(Адрес, "ДопАдрЭл[ТипАдрЭл='10100000']"); - Индекс = ?(ИндексЭлемент <> Неопределено, ИндексЭлемент.Значение, ""); - - ПроверятьОкруг = Не ПустаяСтрока(Округ.Наименование); - ПроверятьРайон = Не ПустаяСтрока(Район.Наименование); - ПроверятьГород = Не ПустаяСтрока(Город.Наименование); - ПроверятьВнутригородскойРайон = Не ПустаяСтрока(ВнутригородскойРайон.Наименование); - ПроверятьНаселенныйПункт = Не ПустаяСтрока(НаселенныйПункт.Наименование); - ПроверятьУлицу = Не ПустаяСтрока(Улица.Наименование); - ПроверятьДополнительный = Не ПустаяСтрока(Дополнительный.Наименование); - ПроверятьПодчиненный = Не ПустаяСтрока(Подчиненный.Наименование); - - ПолеАдресныйОбъектИдентификатор = ?(ПроверятьПодчиненный, "Подчиненный.Идентификатор", - ?(ПроверятьДополнительный, "Дополнительный.Идентификатор", - ?(ПроверятьУлицу, "Улица.Идентификатор", - ?(ПроверятьНаселенныйПункт, "НаселенныйПункт.Идентификатор", - ?(ПроверятьВнутригородскойРайон, "ВнутригородскойРайон.Идентификатор", - ?(ПроверятьГород, "Город.Идентификатор", - ?(ПроверятьРайон, "Район.Идентификатор", - ?(ПроверятьОкруг, "Округ.Идентификатор", "СубъектРФ.Идентификатор")))))))); - - ТекстУпорядочить = "УПОРЯДОЧИТЬ ПО СубъектРФ.ОкончаниеДействияЗаписи УБЫВ"; - ТекстОпциональныхПолейУпорядочиванияЗапросаПроверкиАдресаИстория(ТекстУпорядочить, ПроверятьОкруг, "Округ"); - ТекстОпциональныхПолейУпорядочиванияЗапросаПроверкиАдресаИстория(ТекстУпорядочить, ПроверятьРайон, "Район"); - ТекстОпциональныхПолейУпорядочиванияЗапросаПроверкиАдресаИстория(ТекстУпорядочить, ПроверятьГород, "Город"); - ТекстОпциональныхПолейУпорядочиванияЗапросаПроверкиАдресаИстория(ТекстУпорядочить, ПроверятьВнутригородскойРайон, "ВнутригородскойРайон"); - ТекстОпциональныхПолейУпорядочиванияЗапросаПроверкиАдресаИстория(ТекстУпорядочить, ПроверятьНаселенныйПункт, "НаселенныйПункт"); - ТекстОпциональныхПолейУпорядочиванияЗапросаПроверкиАдресаИстория(ТекстУпорядочить, ПроверятьУлицу, "Улица"); - ТекстОпциональныхПолейУпорядочиванияЗапросаПроверкиАдресаИстория(ТекстУпорядочить, ПроверятьДополнительный, "Дополнительный"); - ТекстОпциональныхПолейУпорядочиванияЗапросаПроверкиАдресаИстория(ТекстУпорядочить, ПроверятьПодчиненный, "Подчиненный"); - - Запрос.Текст = "ВЫБРАТЬ - | ИСТИНА КАК СубъектРФНайден, - | СубъектРФ.Идентификатор КАК СубъектРФИдентификатор, - | СубъектРФ.ПочтовыйИндекс КАК СубъектРФПочтовыйИндекс, - | СубъектРФ.КодСубъектаРФ КАК СубъектРФКод, - | СубъектРФ.КодКЛАДР КАК СубъектРФКодКЛАДР, - | СубъектРФ.Дополнительно КАК СубъектРФДополнительно, - | - | " + ТекстОпциональныхПолейЗапросаПроверкиАдресаИстория(ПроверятьОкруг, "Округ") + " - | " + ТекстОпциональныхПолейЗапросаПроверкиАдресаИстория(ПроверятьРайон, "Район") + " - | " + ТекстОпциональныхПолейЗапросаПроверкиАдресаИстория(ПроверятьГород, "Город") + " - | " + ТекстОпциональныхПолейЗапросаПроверкиАдресаИстория(ПроверятьВнутригородскойРайон, "ВнутригородскойРайон") + " - | " + ТекстОпциональныхПолейЗапросаПроверкиАдресаИстория(ПроверятьНаселенныйПункт, "НаселенныйПункт") + " - | " + ТекстОпциональныхПолейЗапросаПроверкиАдресаИстория(ПроверятьУлицу, "Улица") + " - | " + ТекстОпциональныхПолейЗапросаПроверкиАдресаИстория(ПроверятьДополнительный, "Дополнительный") + " - | " + ТекстОпциональныхПолейЗапросаПроверкиАдресаИстория(ПроверятьПодчиненный, "Подчиненный") + " - | - | NULL КАК ДомаКодКЛАДР - | - |ИЗ - | // Иерархия подчиненности - | РегистрСведений.ИсторияАдресныхОбъектов КАК СубъектРФ - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.ДополнительныеАдресныеСведения КАК СубъектРФДополнительно - |ПО - | СубъектРФДополнительно.Идентификатор = СубъектРФ.Дополнительно - | - |" + ?(ПроверятьОкруг, " - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК Округ - |ПО - | Округ.Наименование = &ОкругНаименование - | И Округ.Сокращение = &ОкругСокращение - | И Округ.Уровень = 2 - | И Округ.КодСубъектаРФ = СубъектРФ.КодСубъектаРФ - | И Округ.КодРайона = 0 - | И Округ.КодГорода = 0 - | И Округ.КодВнутригородскогоРайона = 0 - | И Округ.КодНаселенногоПункта = 0 - | И Округ.КодУлицы = 0 - | И Округ.КодДополнительногоЭлемента = 0 - | И Округ.КодПодчиненногоЭлемента = 0 - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.ДополнительныеАдресныеСведения КАК ОкругДополнительно - |ПО - | ОкругДополнительно.Идентификатор = Округ.Дополнительно - |", "") + " - | - |" + ?(ПроверятьРайон, " - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.ИсторияАдресныхОбъектов КАК Район - |ПО - | Район.Наименование = &РайонНаименование - | И Район.Сокращение = &РайонСокращение - | И Район.Уровень = 3 - | И Район.КодСубъектаРФ = СубъектРФ.КодСубъектаРФ - | И Район.КодОкруга = " + ?(ПроверятьОкруг, "Округ.КодОкруга", "0") + " - | И Район.КодГорода = 0 - | И Район.КодВнутригородскогоРайона = 0 - | И Район.КодНаселенногоПункта = 0 - | И Район.КодУлицы = 0 - | И Район.КодДополнительногоЭлемента = 0 - | И Район.КодПодчиненногоЭлемента = 0 - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.ДополнительныеАдресныеСведения КАК РайонДополнительно - |ПО - | РайонДополнительно.Идентификатор = Район.Дополнительно - |", "") + " - | - |" + ?(ПроверятьГород, " - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.ИсторияАдресныхОбъектов КАК Город - |ПО - | Город.Наименование = &ГородНаименование - | И Город.Сокращение = &ГородСокращение - | И Город.Уровень = 4 - | И Город.КодСубъектаРФ = СубъектРФ.КодСубъектаРФ - | И Город.КодОкруга = " + ?(ПроверятьОкруг, "Округ.КодОкруга", "0") + " - | И Город.КодРайона = " + ?(ПроверятьРайон, "Район.КодРайона", "0") + " - | И Город.КодВнутригородскогоРайона = 0 - | И Город.КодНаселенногоПункта = 0 - | И Город.КодУлицы = 0 - | И Город.КодДополнительногоЭлемента = 0 - | И Город.КодПодчиненногоЭлемента = 0 - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.ДополнительныеАдресныеСведения КАК ГородДополнительно - |ПО - | ГородДополнительно.Идентификатор = Город.Дополнительно - |", "") + " - | - |" + ?(ПроверятьВнутригородскойРайон, " - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.ИсторияАдресныхОбъектов КАК ВнутригородскойРайон - |ПО - | ВнутригородскойРайон.Наименование = &ВнутригородскойРайонНаименование - | И ВнутригородскойРайон.Сокращение = &ВнутригородскойРайонСокращение - | И ВнутригородскойРайон.Уровень = 5 - | И ВнутригородскойРайон.КодСубъектаРФ = СубъектРФ.КодСубъектаРФ - | И ВнутригородскойРайон.КодОкруга = " + ?(ПроверятьОкруг, "Округ.КодОкруга", "0") + " - | И ВнутригородскойРайон.КодРайона = " + ?(ПроверятьРайон, "Район.КодРайона", "0") + " - | И ВнутригородскойРайон.КодГорода = " + ?(ПроверятьГород, "Город.КодГорода", "0") + " - | И ВнутригородскойРайон.КодНаселенногоПункта = 0 - | И ВнутригородскойРайон.КодУлицы = 0 - | И ВнутригородскойРайон.КодДополнительногоЭлемента = 0 - | И ВнутригородскойРайон.КодПодчиненногоЭлемента = 0 - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.ДополнительныеАдресныеСведения КАК ВнутригородскойРайонДополнительно - |ПО - | ВнутригородскойРайонДополнительно.Идентификатор = ВнутригородскойРайон.Дополнительно - |", "") + " - | - |" + ?(ПроверятьНаселенныйПункт, " - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.ИсторияАдресныхОбъектов КАК НаселенныйПункт - |ПО - | НаселенныйПункт.Наименование = &НаселенныйПунктНаименование - | И НаселенныйПункт.Сокращение = &НаселенныйПунктСокращение - | И НаселенныйПункт.Уровень = 6 - | И НаселенныйПункт.КодСубъектаРФ = СубъектРФ.КодСубъектаРФ - | И НаселенныйПункт.КодОкруга = " + ?(ПроверятьОкруг, "Округ.КодОкруга", "0") + " - | И НаселенныйПункт.КодРайона = " + ?(ПроверятьРайон, "Район.КодРайона", "0") + " - | И НаселенныйПункт.КодГорода = " + ?(ПроверятьГород, "Город.КодГорода", "0") + " - | И НаселенныйПункт.КодВнутригородскогоРайона = " + ?(ПроверятьВнутригородскойРайон, "ВнутригородскойРайон.КодВнутригородскогоРайона", "0") + " - | И НаселенныйПункт.КодУлицы = 0 - | И НаселенныйПункт.КодДополнительногоЭлемента = 0 - | И НаселенныйПункт.КодПодчиненногоЭлемента = 0 - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.ДополнительныеАдресныеСведения КАК НаселенныйПунктДополнительно - |ПО - | НаселенныйПунктДополнительно.Идентификатор = НаселенныйПункт.Дополнительно - |", "") + " - | - |" + ?(ПроверятьУлицу, " - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.ИсторияАдресныхОбъектов КАК Улица - |ПО - | Улица.Наименование = &УлицаНаименование - | И Улица.Сокращение = &УлицаСокращение - | И Улица.Уровень = 7 - | И Улица.КодСубъектаРФ = СубъектРФ.КодСубъектаРФ - | И Улица.КодОкруга = " + ?(ПроверятьОкруг, "Округ.КодОкруга", "0") + " - | И Улица.КодРайона = " + ?(ПроверятьРайон, "Район.КодРайона", "0") + " - | И Улица.КодГорода = " + ?(ПроверятьГород, "Город.КодГорода", "0") + " - | И Улица.КодВнутригородскогоРайона = " + ?(ПроверятьВнутригородскойРайон, "ВнутригородскойРайон.КодВнутригородскогоРайона", "0") + " - | И Улица.КодНаселенногоПункта = " + ?(ПроверятьНаселенныйПункт, "НаселенныйПункт.КодНаселенногоПункта", "0") + " - | И Улица.КодДополнительногоЭлемента = 0 - | И Улица.КодПодчиненногоЭлемента = 0 - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.ДополнительныеАдресныеСведения КАК УлицаДополнительно - |ПО - | УлицаДополнительно.Идентификатор = Улица.Дополнительно - |", "") + " - | - |" + ?(ПроверятьДополнительный, " - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.ИсторияАдресныхОбъектов КАК Дополнительный - |ПО - | Дополнительный.Наименование = &ДополнительныйНаименование - | И Дополнительный.Сокращение = &ДополнительныйСокращение - | И Дополнительный.Уровень = 65 - | И Дополнительный.КодСубъектаРФ = СубъектРФ.КодСубъектаРФ - | И Дополнительный.КодОкруга = " + ?(ПроверятьОкруг, "Округ.КодОкруга", "0") + " - | И Дополнительный.КодРайона = " + ?(ПроверятьРайон, "Район.КодРайона", "0") + " - | И Дополнительный.КодГорода = " + ?(ПроверятьГород, "Город.КодГорода", "0") + " - | И Дополнительный.КодВнутригородскогоРайона = " + ?(ПроверятьВнутригородскойРайон, "ВнутригородскойРайон.КодВнутригородскогоРайона", "0") + " - | И Дополнительный.КодНаселенногоПункта = " + ?(ПроверятьНаселенныйПункт, "НаселенныйПункт.КодНаселенногоПункта", "0") + " - | И Дополнительный.КодУлицы = " + ?(ПроверятьУлицу, "Улица.КодУлицы", "0") + " - | И Дополнительный.КодПодчиненногоЭлемента = 0 - |", "") + " - | - |" + ?(ПроверятьПодчиненный, " - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.ИсторияАдресныхОбъектов КАК Подчиненный - |ПО - | Подчиненный.Наименование = &ПодчиненныйНаименование - | И Подчиненный.Сокращение = &ПодчиненныйСокращение - | И Подчиненный.Уровень = 7 - | И Подчиненный.КодСубъектаРФ = СубъектРФ.КодСубъектаРФ - | И Подчиненный.КодОкруга = " + ?(ПроверятьОкруг, "Округ.КодОкруга", "0") + " - | И Подчиненный.КодРайона = " + ?(ПроверятьРайон, "Район.КодРайона", "0") + " - | И Подчиненный.КодГорода = " + ?(ПроверятьГород, "Город.КодГорода", "0") + " - | И Подчиненный.КодВнутригородскогоРайона = " + ?(ПроверятьВнутригородскойРайон, "ВнутригородскойРайон.КодВнутригородскогоРайона", "0") + " - | И Подчиненный.КодНаселенногоПункта = " + ?(ПроверятьНаселенныйПункт, "НаселенныйПункт.КодНаселенногоПункта", "0") + " - | И Подчиненный.КодУлицы = " + ?(ПроверятьУлицу, "Улица.КодУлицы", "0") + " - | И Подчиненный.КодДополнительногоЭлемента = " + ?(ПроверятьДополнительный, "Дополнительный.КодДополнительногоЭлемента", "0") + " - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.ДополнительныеАдресныеСведения КАК ПодчиненныйДополнительно - |ПО - | ПодчиненныйДополнительно.Идентификатор = Подчиненный.Дополнительно - |", "") + " - | - |// Условие на регион, который есть всегда - |ГДЕ - | СубъектРФ.КодСубъектаРФ = &КодСубъектРФ - | И СубъектРФ.КодОкруга = 0 - | И СубъектРФ.КодРайона = 0 - | И СубъектРФ.КодГорода = 0 - | И СубъектРФ.КодВнутригородскогоРайона = 0 - | И СубъектРФ.КодНаселенногоПункта = 0 - | И СубъектРФ.КодУлицы = 0 - | И СубъектРФ.КодДополнительногоЭлемента = 0 - | И СубъектРФ.КодПодчиненногоЭлемента = 0 - | " + ТекстУпорядочить; - - Запрос.УстановитьПараметр("КодСубъектРФ", КодСубъектРФ); - - Запрос.УстановитьПараметр("ОкругНаименование", Округ.Наименование); - Запрос.УстановитьПараметр("ОкругСокращение", Округ.Сокращение); - - Запрос.УстановитьПараметр("РайонНаименование", Район.Наименование); - Запрос.УстановитьПараметр("РайонСокращение", Район.Сокращение); - - Запрос.УстановитьПараметр("ГородНаименование", Город.Наименование); - Запрос.УстановитьПараметр("ГородСокращение", Город.Сокращение); - - Запрос.УстановитьПараметр("ВнутригородскойРайонНаименование", ВнутригородскойРайон.Наименование); - Запрос.УстановитьПараметр("ВнутригородскойРайонСокращение", ВнутригородскойРайон.Сокращение); - - Запрос.УстановитьПараметр("НаселенныйПунктНаименование", НаселенныйПункт.Наименование); - Запрос.УстановитьПараметр("НаселенныйПунктСокращение", НаселенныйПункт.Сокращение); - - Запрос.УстановитьПараметр("УлицаНаименование", Улица.Наименование); - Запрос.УстановитьПараметр("УлицаСокращение", Улица.Сокращение); - - Запрос.УстановитьПараметр("ДополнительныйНаименование", Дополнительный.Наименование); - Запрос.УстановитьПараметр("ДополнительныйСокращение", Дополнительный.Сокращение); - - Запрос.УстановитьПараметр("ПодчиненныйНаименование", Подчиненный.Наименование); - Запрос.УстановитьПараметр("ПодчиненныйСокращение", Подчиненный.Сокращение); - - РезультатЗапроса = Запрос.Выполнить(); - - Если РезультатЗапроса.Пустой() Тогда - // Нет региона - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "СубъектРФ", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Субъект РФ (регион) ""%1"" не найден в адресном классификаторе'"), СубъектРФ.Наименование + " " + СубъектРФ.Сокращение)); - Возврат Результат; - - КонецЕсли; - - // Оставляем только записи со всеми корректными данными. - ЗаписиДомов = РезультатЗапроса.Выгрузить(); - - КорректныеЗаписи = Новый Массив; - - УлицаНайдена = Ложь; - ВариантАдреса = Новый Структура; - История = Новый Соответствие; - Для Каждого Запись Из ЗаписиДомов Цикл; - ЗаполнитьПочтовыйИндексИКодКЛАДРПоИерархииФИАС(ВариантАдреса, Запись, Ложь); - - Если ПроверятьОкруг И Не Запись.ОкругНайден Тогда - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Округ", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Округ ""%1"" отсутствует в адресном классификаторе'"), Округ.Наименование + " " + Округ.Сокращение)); - КонецЕсли; - - Если ПроверятьРайон И Не Запись.РайонНайден Тогда - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "СвРайМО/Район", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Район ""%1"" отсутствует в адресном классификаторе'"), Район.Наименование + " " + Район.Сокращение)); - КонецЕсли; - - Если ПроверятьГород И Не Запись.ГородНайден Тогда - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Город", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Город ""%1"" отсутствует в адресном классификаторе'"), Город.Наименование + " " + Город.Сокращение)); - КонецЕсли; - - Если ПроверятьВнутригородскойРайон И Не Запись.ВнутригородскойРайонНайден Тогда - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "ВнутригРайон", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Внутригородской район ""%1"" отсутствует в адресном классификаторе'"), - ВнутригородскойРайон.Наименование + " " + ВнутригородскойРайон.Сокращение)); - КонецЕсли; - - Если ПроверятьНаселенныйПункт И Не Запись.НаселенныйПунктНайден Тогда - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "НаселПункт", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Населенный пункт ""%1"" отсутствует в адресном классификаторе'"), - НаселенныйПункт.Наименование + " " + НаселенныйПункт.Сокращение)); - КонецЕсли; - - Если ПроверятьУлицу И Не Запись.УлицаНайден Тогда - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Улица", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Улица ""%1""отсутствует в адресном классификаторе'"), - Улица.Наименование + " " + Улица.Сокращение)); - КонецЕсли; - - Если ПроверятьДополнительный И Не Запись.ДополнительныйНайден Тогда - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Дополнительный", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Дополнительная территория ""%1""отсутствует в адресном классификаторе'"), - Дополнительный.Наименование + " " + Дополнительный.Сокращение)); - КонецЕсли; - - Если ПроверятьПодчиненный И Не Запись.ПодчиненныйНайден Тогда - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Подчиненный", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Элемент дополнительной территории ""%1"" отсутствует в адресном классификаторе'"), - Подчиненный.Наименование + " " + Подчиненный.Сокращение)); - КонецЕсли; - - Если ОшибкиПроверки.Количество() = 0 Тогда - - Если ПроверятьДополнительный Тогда - АдресНовый = АктуальныеАдресныеСведения(Запись.ДополнительныйАдресныйОбъект); - Возврат АдресНовый; - КонецЕсли; - - Если ПроверятьУлицу И Запись.УлицаНайден Тогда - УлицаНайдена = Истина; - АдресНовый = АктуальныеАдресныеСведения(Запись.УлицаАдресныйОбъект); - Возврат АдресНовый; - КонецЕсли; - - // Вся запись правильная - КорректныеЗаписи.Добавить(АдресНовый); - КонецЕсли; - КонецЦикла; - - Если ПроверятьУлицу И НЕ УлицаНайдена Тогда - ИсторияОбъекта = ИсторияАдресногоОбъекта(Улица.Наименование, Улица.Сокращение, Запись); - Если ИсторияОбъекта.Количество() > 0 Тогда - Для каждого СтрокаОбъект Из ИсторияОбъекта Цикл - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Улица", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Улица ""%1"" была переименована в ""%2""'"), СтрокаОбъект.Значение, СтрокаОбъект.Представление)); - КонецЦикла; - Иначе - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Улица", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Улица ""%1"" отсутствует в адресном классификаторе'"), Улица.Наименование + " " + Улица.Сокращение)); - КонецЕсли; - КонецЕсли; - - Если КорректныеЗаписи.Количество() = 0 Тогда - // Нет смысла искать дома и выдавать варианты, надо посмотреть в историю. - Возврат Результат; - КонецЕсли; - - Возврат Результат; -КонецФункции - -// Функция - Сформировать описание здания. -// -// Параметры: -// НазваниеВладения - Строка - Наименование владения (Дом, Владение, Домовладение). -// НомерВладения - Строка - Номер владения, дома. -// НомерКорпуса - Строка - Номер корпуса. -// НазваниеСтроения - Строка - Наименование строения (Строения, Сооружение, Участок, Литера). -// НомерСтроения - Строка - Номер строения, сооружения. -// ДополнительныеПараметры - Структура - Расширение возможностей строки описания здания. -// -// Возвращаемое значение: -// Строка, ФорматированнаяСтрока - Представление дома. -// -Функция СформироватьОписаниеЗдания(НазваниеВладения, НомерВладения, НомерКорпуса, НазваниеСтроения, НомерСтроения, ДополнительныеПараметры = Неопределено) - - ВыделятьСтрокуПоиска = Ложь; - Если ДополнительныеПараметры <> Неопределено Тогда - Если ДополнительныеПараметры.Свойство("СтрокаПоиска") Тогда - ВыделятьСтрокуПоиска = Истина; - СтрокаПоиска = ДополнительныеПараметры.СтрокаПоиска; - КонецЕсли; - КонецЕсли; - - КорпусИСтроение = ""; - Если ЗначениеЗаполнено(НомерКорпуса) Тогда - КорпусИСтроение = ", "+ НСтр("ru = 'корпус'") + " " + НомерКорпуса; - КонецЕсли; - - Если ЗначениеЗаполнено(НомерСтроения) Тогда - КорпусИСтроение = КорпусИСтроение + ", " + НазваниеСтроения + " " + СокрЛП(НомерСтроения); - КонецЕсли; - - Если ВыделятьСтрокуПоиска Тогда - Дом = Строка(НазваниеВладения) + Новый ФорматированнаяСтрока(НазваниеВладения + " ", - Новый ФорматированнаяСтрока(СтрокаПоиска, Новый Шрифт(,, Истина) , ЦветаСтиля.РезультатУспехЦвет), - Сред(НомерВладения, СтрДлина(СтрокаПоиска) + 1)); - Результат = Новый ФорматированнаяСтрока(Дом, КорпусИСтроение); - Иначе - Результат = Строка(НазваниеВладения) + " " + НомерВладения + КорпусИСтроение; - КонецЕсли; - - Возврат Результат; - -КонецФункции - -Функция КодДополнительногоЭлемента(ДополнительныйПредставление) - - Сокращение = ВРег(АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(ДополнительныйПредставление).Сокращение); - Если Сокращение = "ГСК" Тогда - Возврат "10600000"; - ИначеЕсли Сокращение = "СНТ" Тогда - Возврат "10300000"; - ИначеЕсли Сокращение = "ТЕР" Тогда - Возврат "10700000"; - КонецЕсли; - - Возврат "10200000"; КонецФункции Функция СтруктураКодовАдреса() Коды = Новый Структура(); Коды.Вставить("КодКЛАДР"); Коды.Вставить("Идентификатор"); - Коды.Вставить("OKATO"); + Коды.Вставить("ОКАТО"); Коды.Вставить("ОКТМО"); Коды.Вставить("КодИФНСФЛ"); Коды.Вставить("КодИФНСЮЛ"); @@ -5353,129 +3911,6 @@ Возврат Новый Структура("Регион, Округ, Район, Город, ВнутригородскойРайон, НаселенныйПункт, Улица"); КонецФункции -// Возвращает строку с описанием типа по коду части адреса. -// Противоположность функции "КодСериализацииОбъектаАдресации". -// -// Параметры: -// Код - Строка - код -// -// Возвращаемое значение: -// Число - Тип -// -Функция ТипОбъектаПоКодуСериализации(Код) - Для Каждого Элемент Из ТипыОбъектовАдресацииАдресаРФ() Цикл - Если Элемент.Код = Код Тогда - Возврат Элемент; - КонецЕсли; - КонецЦикла; - - Возврат Неопределено; -КонецФункции - -// Возвращает массив структур с информацией о частях адреса согласно приказу ФНС ММВ-7-1/525 от 31.08.2011. -// -// Возвращаемое значение: -// Массив - содержит структуры - описания. -// -Функция ТипыОбъектовАдресацииАдресаРФ() - - Результат = Новый Массив; - - // Код, Наименование, Тип, Порядок, КодФИАС - // Тип: 1 - владение, 2 - здание, 3 - помещение. - - Результат.Добавить(СтрокаОбъектаАдресации("1010", НСтр("ru = 'Дом'"), 1, 1, 2)); - Результат.Добавить(СтрокаОбъектаАдресации("1020", НСтр("ru = 'Владение'"), 1, 2, 1)); - Результат.Добавить(СтрокаОбъектаАдресации("1030", НСтр("ru = 'Домовладение'"), 1, 3, 3)); - - Результат.Добавить(СтрокаОбъектаАдресации("1050", НСтр("ru = 'Корпус'"), 2, 1)); - Результат.Добавить(СтрокаОбъектаАдресации("1060", НСтр("ru = 'Строение'"), 2, 2, 1)); - Результат.Добавить(СтрокаОбъектаАдресации("1080", НСтр("ru = 'Литера'"), 2, 3, 3)); - Результат.Добавить(СтрокаОбъектаАдресации("1070", НСтр("ru = 'Сооружение'"), 2, 4, 2)); - Результат.Добавить(СтрокаОбъектаАдресации("1040", НСтр("ru = 'Участок'"), 2, 5)); - - Результат.Добавить(СтрокаОбъектаАдресации("2010", НСтр("ru = 'Квартира'"), 3, 1)); - Результат.Добавить(СтрокаОбъектаАдресации("2030", НСтр("ru = 'Офис'"), 3, 2)); - Результат.Добавить(СтрокаОбъектаАдресации("2040", НСтр("ru = 'Бокс'"), 3, 3)); - Результат.Добавить(СтрокаОбъектаАдресации("2020", НСтр("ru = 'Помещение'"), 3, 4)); - Результат.Добавить(СтрокаОбъектаАдресации("2050", НСтр("ru = 'Комната'"), 3, 5)); - Результат.Добавить(СтрокаОбъектаАдресации("2060", НСтр("ru = 'Этаж'"), 3, 6)); - Результат.Добавить(СтрокаОбъектаАдресации("2070", НСтр("ru = 'А/я'"), 3, 7)); - Результат.Добавить(СтрокаОбъектаАдресации("2080", НСтр("ru = 'В/ч'"), 3, 8)); - Результат.Добавить(СтрокаОбъектаАдресации("2090", НСтр("ru = 'П/о'"), 3, 9)); - // Наши сокращения для поддержки обратной совместимости при парсинге. - Результат.Добавить(СтрокаОбъектаАдресации("2010", НСтр("ru = 'кв.'"), 3, 6)); - Результат.Добавить(СтрокаОбъектаАдресации("2030", НСтр("ru = 'оф.'"), 3, 7)); - - // Уточняющие объекты - Результат.Добавить(СтрокаОбъектаАдресации("10100000", НСтр("ru = 'Почтовый индекс'"))); - Результат.Добавить(СтрокаОбъектаАдресации("10200000", НСтр("ru = 'Адресная точка'"))); - Результат.Добавить(СтрокаОбъектаАдресации("10300000", НСтр("ru = 'Садовое товарищество'"))); - Результат.Добавить(СтрокаОбъектаАдресации("10400000", НСтр("ru = 'Элемент улично-дорожной сети, планировочной структуры дополнительного адресного элемента'"))); - Результат.Добавить(СтрокаОбъектаАдресации("10500000", НСтр("ru = 'Промышленная зона'"))); - Результат.Добавить(СтрокаОбъектаАдресации("10600000", НСтр("ru = 'Гаражно-строительный кооператив'"))); - Результат.Добавить(СтрокаОбъектаАдресации("10700000", НСтр("ru = 'Территория'"))); - - Возврат Результат; -КонецФункции - -Функция СтрокаОбъектаАдресации(Код, Наименование, Тип = 0, Порядок = 0, КодФИАС = 0) - - СтруктураОбъектаАдресации = Новый Структура; - СтруктураОбъектаАдресации.Вставить("Код", Код); - СтруктураОбъектаАдресации.Вставить("Наименование", Наименование); - СтруктураОбъектаАдресации.Вставить("Тип", Тип); - СтруктураОбъектаАдресации.Вставить("Порядок", Порядок); - СтруктураОбъектаАдресации.Вставить("КодФИАС", КодФИАС); - СтруктураОбъектаАдресации.Вставить("Сокращение", НРег(Наименование)); - СтруктураОбъектаАдресации.Вставить("Ключ", ВРег(Наименование)); - Возврат СтруктураОбъектаАдресации; - -КонецФункции - -Процедура ТекстОпциональныхПолейУпорядочиванияЗапросаПроверкиАдреса(ТекстЗапроса, Флаг, ИмяПоля) - Если Флаг Тогда - ТекстЗапроса = ТекстЗапроса + ", " + Символы.ПС + ИмяПоля + ".Актуален УБЫВ"; - КонецЕсли; -КонецПроцедуры - -Функция ТекстОпциональныхПолейЗапросаПроверкиАдреса(ФлагПроверки, ИмяПоля) - - Если ФлагПроверки Тогда - Вариант = " - | ВЫБОР КОГДА [Поле].Идентификатор ЕСТЬ NULL ТОГДА ЛОЖЬ ИНАЧЕ ИСТИНА КОНЕЦ КАК [Поле]Найден, - | [Поле].Актуален КАК [Поле]Актуален, - | [Поле].Идентификатор КАК [Поле]Идентификатор, - | [Поле].ПочтовыйИндекс КАК [Поле]ПочтовыйИндекс, - | [Поле].КодКЛАДР КАК [Поле]КодКЛАДР, - | [Поле].Дополнительно КАК [Поле]Дополнительно, - | [Поле]Дополнительно.OKATO КАК [Поле]ДополнительноOKATO, - | [Поле]Дополнительно.ОКТМО КАК [Поле]ДополнительноОКТМО, - | [Поле]Дополнительно.КодИФНСФЛ КАК [Поле]ДополнительноКодИФНСФЛ, - | [Поле]Дополнительно.КодИФНСЮЛ КАК [Поле]ДополнительноКодИФНСЮЛ, - | [Поле]Дополнительно.КодУчасткаИФНСФЛ КАК [Поле]ДополнительноКодУчасткаИФНСФЛ, - | [Поле]Дополнительно.КодУчасткаИФНСЮЛ КАК [Поле]ДополнительноКодУчасткаИФНСЮЛ, - |"; - Иначе - Вариант = " - | NULL КАК [Поле]Найден, - | NULL КАК [Поле]Актуален, - | NULL КАК [Поле]Идентификатор, - | NULL КАК [Поле]ПочтовыйИндекс, - | NULL КАК [Поле]КодКЛАДР, - | NULL КАК [Поле]Дополнительно, - | NULL КАК [Поле]ДополнительноOKATO, - | NULL КАК [Поле]ДополнительноОКТМО, - | NULL КАК [Поле]ДополнительноКодИФНСФЛ, - | NULL КАК [Поле]ДополнительноКодИФНСЮЛ, - | NULL КАК [Поле]ДополнительноКодУчасткаИФНСФЛ, - | NULL КАК [Поле]ДополнительноКодУчасткаИФНСЮЛ, - |"; - КонецЕсли; - - Возврат СтрЗаменить(Вариант, "[Поле]", ИмяПоля); -КонецФункции - Функция ПараметрыАутентификацииНаСайте() Экспорт Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей") Тогда @@ -5487,241 +3922,6 @@ КонецФункции -// Возвращает идентификатор адресного объекта по частям адреса. -// -// Параметры: -// Адрес - ФабрикаXDTO - Адрес объекта. -// ИскатьПоУлице - Булево - Искать по улице. -// Возвращаемое значение: -// УникальныйИдентификатор - идентификатор адресного объекта. -Функция ИдентификаторАдресногоОбъектаПоЧастямАдреса(Адрес, ИскатьПоУлице = Ложь) - - Если Адрес = Неопределено ИЛИ ПустаяСтрока(Адрес.СубъектРФ) Тогда - Возврат Неопределено; - КонецЕсли; - - ПоляАдреса = Новый Соответствие(); // Регион - ПоляАдреса.Вставить("Регион", АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(Адрес.СубъектРФ)); - ПоляАдреса.Вставить("Округ", АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(Адрес.Округ)); - Район = ?(ПустаяСтрока(Адрес.СвРайМО), "", Адрес.СвРайМО.Район); - ПоляАдреса.Вставить("Район", АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(Район)); - ПоляАдреса.Вставить("Город", АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(Адрес.Город)); - ПоляАдреса.Вставить("ВнутригородскойРайон", АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(Адрес.ВнутригРайон)); - ПоляАдреса.Вставить("НаселенныйПункт", АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(Адрес.НаселПункт)); - ПоляАдреса.Вставить("Улица", АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(Адрес.Улица)); - Возврат ИдентификаторыАдреса(ПоляАдреса, ИскатьПоУлице); - -КонецФункции - -Функция ИдентификаторыАдреса(ПоляАдреса, ИскатьПоУлице, ВсеИдентификаторыАдреса = Ложь) - - Источник = ИсточникДанныхАдресногоКлассификатора(); - Если Источник = "Сервис1С" Тогда - Попытка - Возврат ИдентификаторыАдресаПоКлассификаторуСервис1С(ПоляАдреса, ИскатьПоУлице, ВсеИдентификаторыАдреса); - Исключение - РезультатВебСервис = СтруктураОписанияОшибкиПоставщика(, ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , РезультатВебСервис.ПодробноеПредставлениеОшибки); - Возврат Неопределено; - КонецПопытки; - КонецЕсли; - - Возврат ИдентификаторыАдресаПоКлассификатору(ПоляАдреса, ИскатьПоУлице, ВсеИдентификаторыАдреса); - -КонецФункции - -Функция ИдентификаторыАдресаПоКлассификатору(ПоляАдреса, ИскатьПоУлице, ВсеИдентификаторыАдреса = Ложь) - - ТекстСоединения = ""; - ТекстУпорядочить = " УПОРЯДОЧИТЬ ПО АдресныйОбъектРегион.Актуален УБЫВ"; - - Если ВсеИдентификаторыАдреса Тогда - ТекстВыбратьИдентификаторы = "АдресныйОбъектРегион.Идентификатор КАК ИдентификаторРегион, "; - Иначе - ТекстВыбратьИдентификаторы = "АдресныйОбъектРегион.Идентификатор КАК Идентификатор"; - КонецЕсли; - - Если ПустаяСтрока(ПоляАдреса["Округ"].Наименование) Тогда - сОкруг = "0"; - Иначе - ТекстСоединения = ТекстСоединения + Символы.ПС + "ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыОкруг - | ПО АдресныеОбъектыОкруг.Наименование = """ + ПоляАдреса["Округ"].Наименование + """ - | И АдресныеОбъектыОкруг.КодСубъектаРФ = АдресныйОбъектРегион.КодСубъектаРФ - | И АдресныеОбъектыОкруг.Уровень = 2 - | И АдресныеОбъектыОкруг.КодРайона = 0 - | И АдресныеОбъектыОкруг.КодГорода = 0 - | И АдресныеОбъектыОкруг.КодВнутригородскогоРайона = 0 - | И АдресныеОбъектыОкруг.КодНаселенногоПункта = 0 - | И АдресныеОбъектыОкруг.КодУлицы = 0 - | И АдресныеОбъектыОкруг.КодДополнительногоЭлемента = 0 - | И АдресныеОбъектыОкруг.КодПодчиненногоЭлемента = 0"; - сОкруг = "АдресныеОбъектыОкруг.КодОкруга"; - ТекстУпорядочить = ТекстУпорядочить + ", АдресныеОбъектыОкруг.Актуален УБЫВ"; - Если ВсеИдентификаторыАдреса Тогда - ТекстВыбратьИдентификаторы = ТекстВыбратьИдентификаторы + "АдресныеОбъектыОкруг.Идентификатор КАК ИдентификаторОкруг, "; - Иначе - ТекстВыбратьИдентификаторы = "АдресныеОбъектыОкруг.Идентификатор КАК Идентификатор"; - КонецЕсли; - КонецЕсли; - - Если ПустаяСтрока(ПоляАдреса["Район"].Наименование) Тогда - сРайон = "0"; - Иначе - ТекстСоединения = ТекстСоединения + Символы.ПС + "ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыРайон - | ПО АдресныеОбъектыРайон.Наименование = """ + ПоляАдреса["Район"].Наименование + """ - | И АдресныеОбъектыРайон.КодОкруга = " + сОкруг + " - | И АдресныеОбъектыРайон.КодСубъектаРФ = АдресныйОбъектРегион.КодСубъектаРФ - | И АдресныеОбъектыРайон.Уровень = 3 - | И АдресныеОбъектыРайон.КодГорода = 0 - | И АдресныеОбъектыРайон.КодВнутригородскогоРайона = 0 - | И АдресныеОбъектыРайон.КодНаселенногоПункта = 0 - | И АдресныеОбъектыРайон.КодУлицы = 0 - | И АдресныеОбъектыРайон.КодДополнительногоЭлемента = 0 - | И АдресныеОбъектыРайон.КодПодчиненногоЭлемента = 0"; - сРайон = "АдресныеОбъектыРайон.КодРайона"; - ТекстУпорядочить = ТекстУпорядочить + ", АдресныеОбъектыРайон.Актуален УБЫВ"; - Если ВсеИдентификаторыАдреса Тогда - ТекстВыбратьИдентификаторы = ТекстВыбратьИдентификаторы + "АдресныеОбъектыРайон.Идентификатор КАК ИдентификаторРайон, "; - Иначе - ТекстВыбратьИдентификаторы = "АдресныеОбъектыРайон.Идентификатор КАК Идентификатор"; - КонецЕсли; - КонецЕсли; - - Если ПустаяСтрока(ПоляАдреса["Город"].Наименование) Тогда - сГород = "0"; - Иначе - ТекстСоединения = ТекстСоединения + Символы.ПС + " ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыГород - | ПО АдресныеОбъектыГород.Наименование = """ + ПоляАдреса["Город"].Наименование + """ - | И АдресныеОбъектыГород.КодСубъектаРФ = АдресныйОбъектРегион.КодСубъектаРФ - | И АдресныеОбъектыГород.Уровень = 4 - | И АдресныеОбъектыГород.КодОкруга = " + сОкруг + " - | И АдресныеОбъектыГород.КодРайона = " + сРайон + " - | И АдресныеОбъектыГород.КодВнутригородскогоРайона = 0 - | И АдресныеОбъектыГород.КодНаселенногоПункта = 0 - | И АдресныеОбъектыГород.КодУлицы = 0 - | И АдресныеОбъектыГород.КодДополнительногоЭлемента = 0 - | И АдресныеОбъектыГород.КодПодчиненногоЭлемента = 0"; - сГород = "АдресныеОбъектыГород.КодГорода"; - ТекстУпорядочить = ТекстУпорядочить + ", АдресныеОбъектыГород.Актуален УБЫВ"; - Если ВсеИдентификаторыАдреса Тогда - ТекстВыбратьИдентификаторы = ТекстВыбратьИдентификаторы + "АдресныеОбъектыГород.Идентификатор КАК ИдентификаторГород, "; - Иначе - ТекстВыбратьИдентификаторы = "АдресныеОбъектыГород.Идентификатор КАК Идентификатор"; - КонецЕсли; - КонецЕсли; - - Если ПустаяСтрока(ПоляАдреса["ВнутригородскойРайон"].Наименование) Тогда - сВнутригородскойРайон = "0"; - Иначе - ТекстСоединения = ТекстСоединения + Символы.ПС + " ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыВнутригородскойРайон - | ПО АдресныеОбъектыВнутригородскойРайон.Наименование = """ + ПоляАдреса["ВнутригородскойРайон"].Наименование + """ - | И АдресныеОбъектыВнутригородскойРайон.КодСубъектаРФ = АдресныйОбъектРегион.КодСубъектаРФ - | И АдресныеОбъектыВнутригородскойРайон.КодОкруга = " + сОкруг + " - | И АдресныеОбъектыВнутригородскойРайон.КодРайона = " + сРайон + " - | И АдресныеОбъектыВнутригородскойРайон.КодГорода = " + сГород + " - | И АдресныеОбъектыВнутригородскойРайон.КодНаселенногоПункта = 0 - | И АдресныеОбъектыВнутригородскойРайон.КодУлицы = 0 - | И АдресныеОбъектыВнутригородскойРайон.КодДополнительногоЭлемента = 0 - | И АдресныеОбъектыВнутригородскойРайон.КодПодчиненногоЭлемента = 0"; - сВнутригородскойРайон = "АдресныеОбъектыВнутригородскойРайон.КодВнутригородскогоРайона"; - ТекстУпорядочить = ТекстУпорядочить + ", АдресныеОбъектыВнутригородскойРайон.Актуален УБЫВ"; - Если ВсеИдентификаторыАдреса Тогда - ТекстВыбратьИдентификаторы = ТекстВыбратьИдентификаторы + "АдресныеОбъектыВнутригородскойРайон.Идентификатор КАК ИдентификаторВнутригРайон, "; - Иначе - ТекстВыбратьИдентификаторы = "АдресныеОбъектыВнутригородскойРайон.Идентификатор КАК Идентификатор"; - КонецЕсли; - КонецЕсли; - - Если ПустаяСтрока(ПоляАдреса["НаселенныйПункт"].Наименование) Тогда - сНаселенногоПункта = "0"; - Иначе - ТекстСоединения = ТекстСоединения + Символы.ПС + " ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыНаселенныйПункт - | ПО АдресныеОбъектыНаселенныйПункт.Наименование = """ + ПоляАдреса["НаселенныйПункт"].Наименование + """ - | И АдресныеОбъектыНаселенныйПункт.КодСубъектаРФ = АдресныйОбъектРегион.КодСубъектаРФ - | И АдресныеОбъектыНаселенныйПункт.Уровень = 6 - | И АдресныеОбъектыНаселенныйПункт.КодОкруга = " + сОкруг + " - | И АдресныеОбъектыНаселенныйПункт.КодРайона = " + сРайон + " - | И АдресныеОбъектыНаселенныйПункт.КодГорода = " + сГород + " - | И АдресныеОбъектыНаселенныйПункт.КодВнутригородскогоРайона = " + сВнутригородскойРайон + " - | И АдресныеОбъектыНаселенныйПункт.КодУлицы = 0 - | И АдресныеОбъектыНаселенныйПункт.КодДополнительногоЭлемента = 0 - | И АдресныеОбъектыНаселенныйПункт.КодПодчиненногоЭлемента = 0"; - сНаселенногоПункта = "АдресныеОбъектыНаселенныйПункт.КодНаселенногоПункта"; - ТекстУпорядочить = ТекстУпорядочить + ", АдресныеОбъектыНаселенныйПункт.Актуален УБЫВ"; - Если ВсеИдентификаторыАдреса Тогда - ТекстВыбратьИдентификаторы = ТекстВыбратьИдентификаторы + "АдресныеОбъектыНаселенныйПункт.Идентификатор КАК ИдентификаторНаселенныйПункт, "; - Иначе - ТекстВыбратьИдентификаторы = "АдресныеОбъектыНаселенныйПункт.Идентификатор КАК Идентификатор"; - КонецЕсли; - КонецЕсли; - - Если ИскатьПоУлице И НЕ ПустаяСтрока(ПоляАдреса["Улица"].Наименование) Тогда - ТекстСоединения = ТекстСоединения + Символы.ПС + " ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУлица - | ПО АдресныеОбъектыУлица.Наименование = """ + ПоляАдреса["Улица"].Наименование + """ - | И АдресныеОбъектыУлица.КодСубъектаРФ = АдресныйОбъектРегион.КодСубъектаРФ - | И АдресныеОбъектыУлица.Уровень = 7 - | И АдресныеОбъектыУлица.КодОкруга = " + сОкруг + " - | И АдресныеОбъектыУлица.КодРайона = " + сРайон + " - | И АдресныеОбъектыУлица.КодГорода = " + сГород + " - | И АдресныеОбъектыУлица.КодВнутригородскогоРайона = " + сВнутригородскойРайон + " - | И АдресныеОбъектыУлица.КодНаселенногоПункта = " + сНаселенногоПункта + " - | И АдресныеОбъектыУлица.КодДополнительногоЭлемента = 0 - | И АдресныеОбъектыУлица.КодПодчиненногоЭлемента = 0"; - ТекстУпорядочить = ТекстУпорядочить + ", АдресныеОбъектыУлица.Актуален УБЫВ"; - Если ВсеИдентификаторыАдреса Тогда - ТекстВыбратьИдентификаторы = ТекстВыбратьИдентификаторы + "АдресныеОбъектыУлица.Идентификатор КАК ИдентификаторУлица, "; - Иначе - ТекстВыбратьИдентификаторы = "АдресныеОбъектыУлица.Идентификатор КАК Идентификатор"; - КонецЕсли; - КонецЕсли; - - Если ВсеИдентификаторыАдреса Тогда - ТекстВыбратьИдентификаторы = Лев(ТекстВыбратьИдентификаторы, СтрДлина(ТекстВыбратьИдентификаторы) - 2); - КонецЕсли; - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | " + ТекстВыбратьИдентификаторы + " - |ИЗ - | РегистрСведений.АдресныеОбъекты КАК АдресныйОбъектРегион " + ТекстСоединения + " - |ГДЕ - | АдресныйОбъектРегион.Наименование = &Регион - | И АдресныйОбъектРегион.Уровень = 1 - | И АдресныйОбъектРегион.КодОкруга = 0 - | И АдресныйОбъектРегион.КодРайона = 0 - | И АдресныйОбъектРегион.КодГорода = 0 - | И АдресныйОбъектРегион.КодВнутригородскогоРайона = 0 - | И АдресныйОбъектРегион.КодНаселенногоПункта = 0 - | И АдресныйОбъектРегион.КодУлицы = 0 - | И АдресныйОбъектРегион.КодДополнительногоЭлемента = 0 - | И АдресныйОбъектРегион.КодПодчиненногоЭлемента = 0 - | И АдресныйОбъектРегион.Сокращение = &РегионСокращение - | " + ТекстУпорядочить; - - Запрос.УстановитьПараметр("Регион", ПоляАдреса["Регион"].Наименование); - Запрос.УстановитьПараметр("РегионСокращение", ПоляАдреса["Регион"].Сокращение); - - РезультатЗапроса = Запрос.Выполнить().Выгрузить(); - - Если РезультатЗапроса.Количество() > 0 Тогда - Идентификаторы = РезультатЗапроса[0]; - Если ВсеИдентификаторыАдреса Тогда - Результат = Новый Структура; - Для каждого Колонка Из РезультатЗапроса.Колонки Цикл - Результат.Вставить(Колонка.Имя, Идентификаторы[Колонка.Имя]); - КонецЦикла; - Возврат Результат; - Иначе - Если ЗначениеЗаполнено(Идентификаторы.Идентификатор) Тогда - Возврат Идентификаторы.Идентификатор; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - Возврат Неопределено; -КонецФункции - Процедура ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ВсеОшибки, Ключ, Текст, Подсказка = Неопределено) Ошибка = Новый Структура("Ключ, Текст, Подсказка", Ключ, Текст, Подсказка); @@ -5729,213 +3929,6 @@ КонецПроцедуры -Функция ОписаниеЗданийФИАССодержитДанные(Описание, ЗданияИПомещения, НеточныеСовпадения = Неопределено) - - Если ЗданияИПомещения["Дом"] <> Неопределено Тогда - НомерДомаИлиВладенияЗдания = ВРег(СокрЛП(ЗданияИПомещения["Дом"].Значение)); - Иначе - НомерДомаИлиВладенияЗдания = ""; - КонецЕсли; - - Если ПустаяСтрока(НомерДомаИлиВладенияЗдания) И ЗданияИПомещения["Владение"] <> Неопределено Тогда - НомерДомаИлиВладенияЗдания = ВРег(СокрЛП(ЗданияИПомещения["Владение"].Значение)); - КонецЕсли; - Если ПустаяСтрока(НомерДомаИлиВладенияЗдания) И ЗданияИПомещения["Домовладение"] <> Неопределено Тогда - НомерДомаИлиВладенияЗдания = ВРег(СокрЛП(ЗданияИПомещения["Домовладение"].Значение)); - КонецЕсли; - - Если ЗданияИПомещения["Корпус"] <> Неопределено Тогда - НомерКорпусаЗдания = ВРег(СокрЛП(ЗданияИПомещения["Корпус"].Значение)); - Иначе - НомерКорпусаЗдания = ""; - КонецЕсли; - - Если ЗданияИПомещения["Строение"] <> Неопределено Тогда - НомерСтроенияЗдания = ВРег(СокрЛП(ЗданияИПомещения["Строение"].Значение)); - Иначе - НомерСтроенияЗдания = ""; - КонецЕсли; - - Если ПустаяСтрока(НомерСтроенияЗдания) И ЗданияИПомещения["Литер"] <> Неопределено Тогда - НомерСтроенияЗдания = ВРег(СокрЛП(ЗданияИПомещения["Литер"].Значение)); - КонецЕсли; - - Если ПустаяСтрока(НомерСтроенияЗдания) И ЗданияИПомещения["Литера"] <> Неопределено Тогда - НомерСтроенияЗдания = ВРег(СокрЛП(ЗданияИПомещения["Литера"].Значение)); - КонецЕсли; - - Если ПустаяСтрока(НомерСтроенияЗдания) И ЗданияИПомещения["Сооружение"] <> Неопределено Тогда - НомерСтроенияЗдания = ВРег(СокрЛП(ЗданияИПомещения["Сооружение"].Значение)); - КонецЕсли; - - Если ПустаяСтрока(НомерСтроенияЗдания) И ЗданияИПомещения["Участок"] <> Неопределено Тогда - НомерСтроенияЗдания = ВРег(СокрЛП(ЗданияИПомещения["Участок"].Значение)); - КонецЕсли; - - СтрокиОписания = СтрЗаменить(Описание, Символы.ПС, ""); - СтрокиОписания = ВРег(СтрЗаменить(Описание, Символы.Таб, Символы.ПС)); - - НаименованиеВладенийИСтроений = НаименованиеВладенийИСтроений(); - ТипЧисло = Новый ОписаниеТипов("Число"); - Интервалы = Новый Массив; - - ЧислоСтрок = СтрЧислоСтрок(СтрокиОписания); - Позиция = 1; - - Пока Позиция <= ЧислоСтрок Цикл - Строка = СтрПолучитьСтроку(СтрокиОписания, Позиция); - - Если Строка = "H" Тогда - // Точное описание - сравниваем. - ВидВладения = ТипЧисло.ПривестиЗначение(СтрПолучитьСтроку(СтрокиОписания, Позиция + 1)); - НомерВладения = СокрЛП(СтрПолучитьСтроку(СтрокиОписания, Позиция + 2)); - НомерКорпуса = СокрЛП(СтрПолучитьСтроку(СтрокиОписания, Позиция + 3)); - НомерСтроения = СокрЛП(СтрПолучитьСтроку(СтрокиОписания, Позиция + 5)); - Если СтрНайти(НомерСтроения, "+") > 0 Тогда - НомерСтроения = СокрЛП(Лев(НомерСтроения, СтрНайти(НомерСтроения, "+") - 1)); // отрезаем идентификатор - КонецЕсли; - - Если НомерВладения = НомерДомаИлиВладенияЗдания - И НомерКорпуса = НомерКорпусаЗдания - И НомерСтроения = НомерСтроенияЗдания Тогда - // Точное попадания - Возврат Истина; - ИначеЕсли НеточныеСовпадения <> Неопределено И НомерВладения = НомерДомаИлиВладенияЗдания Тогда - НазванияВладения = НаименованиеВладенийИСтроений.Владения.Получить(ВидВладения); - НазванияСтроения = НаименованиеВладенийИСтроений.Строения.Получить(ВидВладения); - ОписаниеЗдания = СформироватьОписаниеЗдания(НазванияВладения, НомерВладения, НомерКорпуса, НазванияСтроения, НомерСтроения); - Хеш = Новый ХешированиеДанных(ХешФункция.MD5); - Хеш.Добавить(ОписаниеЗдания); - Если НеточныеСовпадения.НайтиПоЗначению(хеш.ХешСумма) = Неопределено Тогда - НеточныеСовпадения.Добавить(хеш.ХешСумма, ОписаниеЗдания); - КонецЕсли; - КонецЕсли; - - Позиция = Позиция + 5; - - ИначеЕсли Строка = "I" Тогда - // Интервалы набираем для последующей проверки. - Интервал = Новый Структура; - Интервал.Вставить("Вид", ТипЧисло.ПривестиЗначение( СтрПолучитьСтроку(СтрокиОписания, Позиция + 1) )); - Интервал.Вставить("Начало", ТипЧисло.ПривестиЗначение( СтрПолучитьСтроку(СтрокиОписания, Позиция + 2) )); - Интервал.Вставить("Конец", ТипЧисло.ПривестиЗначение( СтрПолучитьСтроку(СтрокиОписания, Позиция + 3) )); - Интервалы.Добавить(Интервал); - - Позиция = Позиция + 3; - КонецЕсли; - - Позиция = Позиция + 1; - КонецЦикла; - - // Продолжаем поиск в интервалах - первые цифры. - НомерЧислом = ""; - Для Позиция = 1 По СтрДлина(НомерДомаИлиВладенияЗдания) Цикл - Символ = Сред(НомерДомаИлиВладенияЗдания, Позиция, 1); - Если СтрНайти("0123456789", Символ) = 0 Тогда - Прервать; - КонецЕсли; - НомерЧислом = НомерЧислом + Символ; - КонецЦикла; - - НомерЧислом = ТипЧисло.ПривестиЗначение(НомерЧислом); - НомерЧетный = НомерЧислом % 2 = 0; - - Для Каждого Интервал Из Интервалы Цикл - ВидИнтервала = Интервал.Вид; - - Если ВидИнтервала = 2 Тогда - Если НомерЧетный Тогда - // Четный - Если (Интервал.Начало <= НомерЧислом Или Интервал.Начало = 0) - И (Интервал.Конец >= НомерЧислом Или Интервал.Конец = 0) Тогда - Возврат Истина; - КонецЕсли; - КонецЕсли; - - ИначеЕсли ВидИнтервала = 3 Тогда - Если Не НомерЧетный Тогда - // Нечетный - Если (Интервал.Начало <= НомерЧислом Или Интервал.Начало = 0) - И (Интервал.Конец >= НомерЧислом Или Интервал.Конец = 0) Тогда - Возврат Истина; - КонецЕсли; - КонецЕсли; - - Иначе - // Обычный - Если (Интервал.Начало <= НомерЧислом Или Интервал.Начало = 0) - И (Интервал.Конец >= НомерЧислом Или Интервал.Конец = 0) Тогда - Возврат Истина; - КонецЕсли; - - КонецЕсли; - - КонецЦикла; - - Возврат Ложь; -КонецФункции - -Процедура ЗаполнитьИдентификаторПоИерархииФИАС(Вариант, ЗаписьИсточника) - - УстановитьРеквизитЗаписиФИАСИерархически(Вариант, "Идентификатор", ЗаписьИсточника, "Идентификатор"); - -КонецПроцедуры - -Процедура ЗаполнитьПочтовыйИндексИКодКЛАДРПоИерархииФИАС(Вариант, ЗаписьИсточника, ПроверятьДома = Истина) - - УстановитьРеквизитЗаписиФИАСИерархически(Вариант, "Индекс", ЗаписьИсточника, "ПочтовыйИндекс", ПроверятьДома); - УстановитьРеквизитЗаписиФИАСИерархически(Вариант, "КодКЛАДР", ЗаписьИсточника, "КодКЛАДР", ПроверятьДома); - -КонецПроцедуры - -Процедура ЗаполнитьДополнительныеДанныеПоИерархииФИАС(Вариант, ЗаписьИсточника, Идентификатор) - - УстановитьРеквизитЗаписиФИАСИерархически(Вариант, "ОКАТО", ЗаписьИсточника, "ДополнительноOKATO"); - УстановитьРеквизитЗаписиФИАСИерархически(Вариант, "ОКТМО", ЗаписьИсточника, "ДополнительноОКТМО"); - УстановитьРеквизитЗаписиФИАСИерархически(Вариант, "КодИФНСФЛ", ЗаписьИсточника, "ДополнительноКодИФНСФЛ"); - УстановитьРеквизитЗаписиФИАСИерархически(Вариант, "КодИФНСЮЛ", ЗаписьИсточника, "ДополнительноКодИФНСЮЛ"); - УстановитьРеквизитЗаписиФИАСИерархически(Вариант, "КодУчасткаИФНСФЛ", ЗаписьИсточника, "ДополнительноКодУчасткаИФНСФЛ"); - УстановитьРеквизитЗаписиФИАСИерархически(Вариант, "КодУчасткаИФНСЮЛ", ЗаписьИсточника, "ДополнительноКодУчасткаИФНСЮЛ"); - -КонецПроцедуры - -Процедура УстановитьРеквизитЗаписиФИАСИерархически(Приемник, ИмяПоляПриемника, Источник, ИмяПоляИсточника, ПроверятьДома = Истина) - - Варианты = Новый Массив; - Если ПроверятьДома И ИмяПоляИсточника <> "Идентификатор" Тогда - Варианты.Добавить("Дома"); - КонецЕсли; - Варианты.Добавить("Подчиненный"); - Варианты.Добавить("Дополнительный"); - Варианты.Добавить("Улица"); - Варианты.Добавить("НаселенныйПункт"); - Варианты.Добавить("ВнутригородскойРайон"); - Варианты.Добавить("Город"); - Варианты.Добавить("Район"); - Варианты.Добавить("Округ"); - Варианты.Добавить("СубъектРФ"); - - Для Каждого ИмяВарианта Из Варианты Цикл - Имя = ИмяВарианта + ИмяПоляИсточника; - Если ЗначениеЗаполнено(Источник[Имя]) Тогда - Приемник.Вставить(ИмяПоляПриемника, Источник[Имя]); - Возврат; - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -Функция ОписаниеЗданияПоСоответствиюФИАС(ЗданияИПомещения) - - Результат = ""; - - Для Каждого КлючЗначение Из ЗданияИПомещения Цикл - Результат = Результат + ", " + КлючЗначение.Ключ + " " + КлючЗначение.Значение.Значение; - КонецЦикла; - - Возврат СокрЛП(Сред(Результат, 2)); -КонецФункции - // Десериализует объект из XML. // Функция ДесериализацияАдресаXDTO(Строка) @@ -5951,12 +3944,6 @@ Возврат Результат КонецФункции -// Пространство имен для операций XDTO с адресом. -// -Функция ПространствоИменАдресаРФ() - Возврат "http://www.v8.1c.ru/ssl/AddressSystem"; -КонецФункции - // Преобразует XML. Обратная совместимость. // Функция ПередЧтениемXDTOКонтактнаяИнформация(ТекстXML) @@ -6016,88 +4003,42 @@ КонецФункции -// Устанавливает в XDTO адресе значение по XPath. +// Определяет словарь наименований полей адреса в соответствии с уровнем. // -Процедура УстановитьXDTOРеквизитОбъекта(ОбъектXDTO, ПутьXPath, Значение) +Функция СловарьКлючейПолейАдресВСоответствииСУровнем() - Если Не ЗначениеЗаполнено(Значение) Тогда - Возврат; - КонецЕсли; + Словарь = Новый Соответствие; - // Части XPath - ЧастиПути = СтрЗаменить(ПутьXPath, "/", Символы.ПС); - ЧастейПути = СтрЧислоСтрок(ЧастиПути); + Словарь.Вставить(1, "Area"); + Словарь.Вставить(3, "District"); + Словарь.Вставить(31, "MunDistrict"); + Словарь.Вставить(4, "City"); + Словарь.Вставить(41, "Settlement"); + Словарь.Вставить(5, "CityDistrict"); + Словарь.Вставить(6, "Locality"); + Словарь.Вставить(65, "Territory"); + Словарь.Вставить(7, "Street"); - ВедущийОбъект = ОбъектXDTO; - Объект = ОбъектXDTO; + Возврат Словарь; - Для Позиция = 1 По ЧастейПути Цикл - ЧастьПути = СтрПолучитьСтроку(ЧастиПути, Позиция); - Если ЧастейПути = 1 Тогда - Прервать; - КонецЕсли; - - Свойство = Объект.Свойства().Получить(ЧастьПути); - Если Не Объект.Установлено(Свойство) Тогда - Объект.Установить(Свойство, ФабрикаXDTO.Создать(Свойство.Тип)); - КонецЕсли; - ВедущийОбъект = Объект; - Объект = Объект[ЧастьПути]; - КонецЦикла; - - Если Объект <> Неопределено Тогда - Объект[ЧастьПути] = Значение; - - ИначеЕсли ВедущийОбъект <> Неопределено Тогда - ВедущийОбъект[ЧастьПути] = Значение; - - КонецЕсли; - -КонецПроцедуры - -// Устанавливает в XDTO адресе значение по XPath. -// -Процедура ДобавитьXDTOРеквизитСписка(ОбъектXDTO, ИмяСвойстваСписка, ЗначенияАтрибутов, ИмяКлюча = "ТипАдрЭл", ИмяАтрибута = "Значение") - - Если Не ЗначениеЗаполнено(ЗначенияАтрибутов[ИмяКлюча]) Тогда - // Нет ключа - Возврат; - ИначеЕсли Не ЗначениеЗаполнено(ЗначенияАтрибутов[ИмяАтрибута]) Тогда - // Нет значения - Возврат; - КонецЕсли; - - Свойство = ОбъектXDTO.Свойства().Получить(ИмяСвойстваСписка); - ЭлементСписка = ОбъектXDTO.ПолучитьСписок(Свойство).Добавить( ФабрикаXDTO.Создать(Свойство.Тип) ); - - Для Каждого КлючЗначение Из ЗначенияАтрибутов Цикл - ЭлементСписка[КлючЗначение.Ключ] = КлючЗначение.Значение; - КонецЦикла; -КонецПроцедуры - -// Возвращает значение реквизита из XDTO адреса по XPath. -// -Функция ПолучитьXDTOРеквизитОбъекта(ОбъектXTDO, XPath) - - // Переносов строки в XPath не ожидаем. - СтрокаСвойств = СтрЗаменить(СтрЗаменить(XPath, "/", Символы.ПС), Символы.ПС + Символы.ПС, "/"); - - ЧислоСвойств = СтрЧислоСтрок(СтрокаСвойств); - Если ЧислоСвойств = 1 Тогда - Возврат ОбъектXTDO.Получить(СтрокаСвойств); - КонецЕсли; - - Результат = ?(ЧислоСвойств = 0, Неопределено, ОбъектXTDO); - Для Индекс = 1 По ЧислоСвойств Цикл - Результат = Результат.Получить(СтрПолучитьСтроку(СтрокаСвойств, Индекс)); - Если Результат = Неопределено Тогда - Прервать; - КонецЕсли; - КонецЦикла; - - Возврат Результат; КонецФункции +Процедура ЗаполнитьПоляВСоответствииСУровнемАдреса(Адрес, Выборка, Суффикс, СловарьИменПолей) + + Если ЗначениеЗаполнено(Выборка["НаименованиеУровень" + Суффикс]) Тогда + + Идентификатор = Выборка["ИдентификаторУровень" + Суффикс]; + ИмяУровня = СловарьИменПолей[Выборка["Уровень" + Суффикс]]; + + Адрес[ИмяУровня] = Выборка["НаименованиеУровень" + Суффикс]; + Адрес[ИмяУровня + "Type"] = Выборка["СокращениеУровень" + Суффикс]; + Адрес[ИмяУровня + "Id"] = ?(ЗначениеЗаполнено(Идентификатор), Новый УникальныйИдентификатор(Идентификатор), ""); + Адрес.ID = Адрес[ИмяУровня + "Id"]; + + КонецЕсли; + +КонецПроцедуры + // Возвращает строку для поиска в операторе ПОДОБНО. // Функция ЗамаскироватьСпецсимволыПодобия(Текст) @@ -6175,714 +4116,23 @@ И ПустаяСтрока(НераспознаннаяЧастьАдреса.Сокращение) Тогда НераспознаннаяЧастьАдреса.Сокращение = "г"; НераспознаннаяЧастьАдреса.Значение = НераспознаннаяЧастьАдреса.Наименование + " " + НераспознаннаяЧастьАдреса.Сокращение; - КонецЕсли; - Если ВРЕГ(НераспознаннаяЧастьАдреса.Наименование) = "КОРП" Тогда + ИначеЕсли ВРЕГ(НераспознаннаяЧастьАдреса.Наименование) = "КОРП" Или ВРЕГ(НераспознаннаяЧастьАдреса.Наименование) = "КОРП." Тогда НераспознаннаяЧастьАдреса.Наименование = "Корпус"; - КонецЕсли; - Если ВРЕГ(НераспознаннаяЧастьАдреса.Наименование) = "КВ" Тогда + ИначеЕсли ВРЕГ(НераспознаннаяЧастьАдреса.Наименование) = "КВ" Или ВРЕГ(НераспознаннаяЧастьАдреса.Наименование) = "КВ." Тогда НераспознаннаяЧастьАдреса.Наименование = "Квартира"; - КонецЕсли; - Если ВРЕГ(НераспознаннаяЧастьАдреса.Наименование) = "Д" Тогда + ИначеЕсли ВРЕГ(НераспознаннаяЧастьАдреса.Наименование) = "ОФ" Или ВРЕГ(НераспознаннаяЧастьАдреса.Наименование) = "ОФ." Тогда + НераспознаннаяЧастьАдреса.Наименование = "Квартира"; + ИначеЕсли ВРЕГ(НераспознаннаяЧастьАдреса.Наименование) = "ПОМЕЩ" Или ВРЕГ(НераспознаннаяЧастьАдреса.Наименование) = "ПОМЕЩ." Тогда + НераспознаннаяЧастьАдреса.Наименование = "Квартира"; + ИначеЕсли ВРЕГ(НераспознаннаяЧастьАдреса.Наименование) = "Д" Или ВРЕГ(НераспознаннаяЧастьАдреса.Наименование) = "Д." Тогда НераспознаннаяЧастьАдреса.Наименование = "Дом"; - КонецЕсли; - Если ВРЕГ(НераспознаннаяЧастьАдреса.Наименование) = "ЛИТЕР" Тогда - НераспознаннаяЧастьАдреса.Наименование = "Литера"; + ИначеЕсли ВРЕГ(НераспознаннаяЧастьАдреса.Наименование) = "ЛИТЕРА" Тогда + НераспознаннаяЧастьАдреса.Наименование = "Литер"; КонецЕсли; КонецЦикла; КонецПроцедуры -Функция УровниСодержащиеСовпадения(ДанныеАнализа, Уровни) - - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | ДанныеАдреса.Наименование КАК Наименование, - | ДанныеАдреса.Сокращение КАК Сокращение - |ПОМЕСТИТЬ ДанныеАдреса - |ИЗ - | &ДанныеАдреса КАК ДанныеАдреса - | - |ИНДЕКСИРОВАТЬ ПО - | Наименование, - | Сокращение - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ВЫБОР - | КОГДА НЕ АдресныеОбъектыРегион.Уровень ЕСТЬ NULL - | ТОГДА АдресныеОбъектыРегион.Уровень - | ИНАЧЕ 0 - | КОНЕЦ КАК Уровень - |ИЗ - | ДанныеАдреса КАК ДанныеАдреса - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыРегион - | ПО (АдресныеОбъектыРегион.Уровень В (&Уровни)) - | И ДанныеАдреса.Наименование = АдресныеОбъектыРегион.Наименование - | И ДанныеАдреса.Сокращение = АдресныеОбъектыРегион.Сокращение - |ГДЕ - | ВЫБОР - | КОГДА НЕ АдресныеОбъектыРегион.Уровень ЕСТЬ NULL - | ТОГДА АдресныеОбъектыРегион.Уровень - | ИНАЧЕ 0 - | КОНЕЦ > 0 - | - |СГРУППИРОВАТЬ ПО - | АдресныеОбъектыРегион.Уровень - | - |УПОРЯДОЧИТЬ ПО - | Уровень"; - - Запрос.УстановитьПараметр("ДанныеАдреса", ДанныеАнализа); - Запрос.УстановитьПараметр("Уровни", Уровни); - - РезультатЗапроса = Запрос.Выполнить().Выгрузить(); - ДоступныеУровни = РезультатЗапроса.ВыгрузитьКолонку("Уровень"); - - Возврат ДоступныеУровни; -КонецФункции - -// Установка соответствия населенного пункта по частям адреса. -// -Процедура УстановитьУровниАдресаПоЧастямАдресаДляНаселенногоПункта(Уровни, ЧастиАдреса) - - ТекстЗапроса = "ВЫБРАТЬ - | ДанныеАдреса.Уровень КАК Уровень, - | ДанныеАдреса.Позиция КАК Позиция, - | ДанныеАдреса.Значение КАК Значение, - | ДанныеАдреса.Наименование КАК Наименование, - | ДанныеАдреса.Сокращение КАК Сокращение - |ПОМЕСТИТЬ ДанныеАдреса - |ИЗ - | &ДанныеАдреса КАК ДанныеАдреса - | - |ИНДЕКСИРОВАТЬ ПО - | Уровень, - | Позиция, - | Наименование, - | Сокращение - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | АдресныеОбъекты.Идентификатор КАК Идентификатор, - | АдресныеОбъекты.Наименование КАК Наименование, - | АдресныеОбъекты.Сокращение КАК Сокращение, - | АдресныеОбъекты.Уровень КАК Уровень, - | АдресныеОбъекты.КодСубъектаРФ КАК КодСубъектаРФ - |ПОМЕСТИТЬ СубъектРФ - |ИЗ - | ДанныеАдреса КАК ДанныеАдреса - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты - | ПО (АдресныеОбъекты.Уровень = 1) - | И ДанныеАдреса.Наименование = АдресныеОбъекты.Наименование - | И ДанныеАдреса.Сокращение = АдресныеОбъекты.Сокращение - |ГДЕ - | НЕ АдресныеОбъекты.Идентификатор ЕСТЬ NULL - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | АдресныеОбъекты.Идентификатор КАК Идентификатор, - | АдресныеОбъекты.Наименование КАК Наименование, - | АдресныеОбъекты.Сокращение КАК Сокращение, - | АдресныеОбъекты.Уровень КАК Уровень, - | АдресныеОбъекты.КодСубъектаРФ КАК КодСубъектаРФ, - | АдресныеОбъекты.КодОкруга КАК КодОкруга - |ПОМЕСТИТЬ Округ - |ИЗ - | ДанныеАдреса КАК ДанныеАдреса - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты - | ПО (АдресныеОбъекты.Уровень = 2) - | И ДанныеАдреса.Наименование = АдресныеОбъекты.Наименование - | И ДанныеАдреса.Сокращение = АдресныеОбъекты.Сокращение - |ГДЕ - | НЕ АдресныеОбъекты.Идентификатор ЕСТЬ NULL - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | АдресныеОбъекты.Идентификатор КАК Идентификатор, - | АдресныеОбъекты.Наименование КАК Наименование, - | АдресныеОбъекты.Сокращение КАК Сокращение, - | АдресныеОбъекты.Уровень КАК Уровень, - | АдресныеОбъекты.КодСубъектаРФ КАК КодСубъектаРФ, - | АдресныеОбъекты.КодОкруга КАК КодОкруга, - | АдресныеОбъекты.КодРайона КАК КодРайона, - | АдресныеОбъекты.КодГорода КАК КодГорода - |ПОМЕСТИТЬ Район - |ИЗ - | ДанныеАдреса КАК ДанныеАдреса - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты - | ПО (АдресныеОбъекты.Уровень = 3) - | И ДанныеАдреса.Наименование = АдресныеОбъекты.Наименование - | И ДанныеАдреса.Сокращение = АдресныеОбъекты.Сокращение - |ГДЕ - | НЕ АдресныеОбъекты.Идентификатор ЕСТЬ NULL - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | АдресныеОбъекты.Идентификатор КАК Идентификатор, - | АдресныеОбъекты.Наименование КАК Наименование, - | АдресныеОбъекты.Сокращение КАК Сокращение, - | АдресныеОбъекты.Уровень КАК Уровень, - | АдресныеОбъекты.КодСубъектаРФ КАК КодСубъектаРФ, - | АдресныеОбъекты.КодОкруга КАК КодОкруга, - | АдресныеОбъекты.КодРайона КАК КодРайона, - | АдресныеОбъекты.КодГорода КАК КодГорода - |ПОМЕСТИТЬ Город - |ИЗ - | ДанныеАдреса КАК ДанныеАдреса - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты - | ПО (АдресныеОбъекты.Уровень = 4) - | И ДанныеАдреса.Наименование = АдресныеОбъекты.Наименование - | И ДанныеАдреса.Сокращение = АдресныеОбъекты.Сокращение - |ГДЕ - | НЕ АдресныеОбъекты.Идентификатор ЕСТЬ NULL - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | АдресныеОбъекты.Идентификатор КАК Идентификатор, - | АдресныеОбъекты.Наименование КАК Наименование, - | АдресныеОбъекты.Сокращение КАК Сокращение, - | АдресныеОбъекты.Уровень КАК Уровень, - | АдресныеОбъекты.КодСубъектаРФ КАК КодСубъектаРФ, - | АдресныеОбъекты.КодОкруга КАК КодОкруга, - | АдресныеОбъекты.КодРайона КАК КодРайона, - | АдресныеОбъекты.КодГорода КАК КодГорода, - | АдресныеОбъекты.КодВнутригородскогоРайона, - | АдресныеОбъекты.КодНаселенногоПункта - |ПОМЕСТИТЬ ВнутригородскойРайон - |ИЗ - | ДанныеАдреса КАК ДанныеАдреса - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты - | ПО (АдресныеОбъекты.Уровень = 5) - | И ДанныеАдреса.Наименование = АдресныеОбъекты.Наименование - | И ДанныеАдреса.Сокращение = АдресныеОбъекты.Сокращение - |ГДЕ - | НЕ АдресныеОбъекты.Идентификатор ЕСТЬ NULL - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | АдресныеОбъекты.Идентификатор КАК Идентификатор, - | АдресныеОбъекты.Наименование КАК Наименование, - | АдресныеОбъекты.Сокращение КАК Сокращение, - | АдресныеОбъекты.Уровень КАК Уровень, - | АдресныеОбъекты.КодСубъектаРФ КАК КодСубъектаРФ, - | АдресныеОбъекты.КодОкруга КАК КодОкруга, - | АдресныеОбъекты.КодРайона КАК КодРайона, - | АдресныеОбъекты.КодГорода КАК КодГорода, - | АдресныеОбъекты.КодВнутригородскогоРайона, - | АдресныеОбъекты.КодНаселенногоПункта - |ПОМЕСТИТЬ НаселенныйПункт - |ИЗ - | ДанныеАдреса КАК ДанныеАдреса - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты - | ПО (АдресныеОбъекты.Уровень = 6) - | И ДанныеАдреса.Наименование = АдресныеОбъекты.Наименование - | И ДанныеАдреса.Сокращение = АдресныеОбъекты.Сокращение - |ГДЕ - | НЕ АдресныеОбъекты.Идентификатор ЕСТЬ NULL ;"; - - КодОкруга = "0"; - КодРайона = "0"; - КодГорода = "0"; - КодВнутригородскогоРайона = "0"; - ТекстСоединения = ""; - ТекстЗапросаВыборки = ""; - СписокПолей = Новый Структура(); - Для каждого Уровень Из Уровни Цикл - Если Уровень = 1 Тогда - СписокПолей.Вставить("СубъектРФ"); - ТекстСоединения = ТекстСоединения + " СубъектРФ КАК СубъектРФ "; - ИначеЕсли Уровень = 2 Тогда - СписокПолей.Вставить("Округ"); - ТекстСоединения = ТекстСоединения + " ЛЕВОЕ СОЕДИНЕНИЕ Округ КАК Округ - | ПО СубъектаРФ.КодСубъектаРФ = Округ.КодСубъектаРФ"; - КодОкруга = "Округ.КодОкруга"; - ИначеЕсли Уровень = 3 Тогда - СписокПолей.Вставить("Район"); - ТекстСоединения = ТекстСоединения + " ЛЕВОЕ СОЕДИНЕНИЕ Район КАК Район - | ПО Район.КодСубъектаРФ = СубъектРФ.КодСубъектаРФ - | И Район.КодОкруга = " + КодОкруга; - КодРайона = "Район.КодРайона"; - ИначеЕсли Уровень = 4 Тогда - СписокПолей.Вставить("Город"); - ТекстСоединения = ТекстСоединения + " ЛЕВОЕ СОЕДИНЕНИЕ Город КАК Город - | ПО Город.КодСубъектаРФ = СубъектРФ.КодСубъектаРФ - | И Город.КодОкруга = " + КодОкруга + " - | И Город.КодРайона = " + КодРайона; - КодГорода = "Город.КодГорода"; - ИначеЕсли Уровень = 5 Тогда - СписокПолей.Вставить("ВнутригородскойРайон"); - ТекстСоединения = ТекстСоединения + " ЛЕВОЕ СОЕДИНЕНИЕ ВнутригородскойРайон КАК ВнутригородскойРайон - | ПО ВнутригородскойРайон.КодСубъектаРФ = СубъектРФ.КодСубъектаРФ - | И ВнутригородскойРайон.КодОкруга = " + КодОкруга + " - | И ВнутригородскойРайон.КодРайона = " + КодРайона + " - | И ВнутригородскойРайон.КодГорода = " + КодГорода; - КодВнутригородскогоРайона = "ВнутригородскойРайон.КодВнутригородскогоРайона"; - ИначеЕсли Уровень = 6 Тогда - СписокПолей.Вставить("НаселенныйПункт"); - ТекстСоединения = ТекстСоединения + " ЛЕВОЕ СОЕДИНЕНИЕ НаселенныйПункт КАК НаселенныйПункт - | ПО НаселенныйПункт.КодСубъектаРФ = СубъектРФ.КодСубъектаРФ - | И НаселенныйПункт.КодОкруга = " + КодОкруга + " - | И НаселенныйПункт.КодРайона = " + КодРайона + " - | И НаселенныйПункт.КодГорода = " + КодГорода + " - | И НаселенныйПункт.КодВнутригородскогоРайона = " + КодВнутригородскогоРайона; - КонецЕсли; - КонецЦикла; - - Разделитель = ""; - Для каждого Элемент Из СписокПолей Цикл - ТекстЗапросаВыборки = ТекстЗапросаВыборки + Разделитель + " " + Элемент.Ключ - + ".Наименование + "" "" + " + Элемент.Ключ + ".Сокращение КАК "+ Элемент.Ключ + ", " - + Элемент.Ключ +".Уровень КАК " + Элемент.Ключ + "Уровень"; - Разделитель = ", "; - КонецЦикла; - - Если НЕ ПустаяСтрока(ТекстЗапросаВыборки) Тогда - - ТекстЗапросаВыборки = "ВЫБРАТЬ " + ТекстЗапросаВыборки + " ИЗ " + ТекстСоединения; - ТекстЗапроса = ТекстЗапроса + ТекстЗапросаВыборки; - Запрос = Новый Запрос(ТекстЗапроса); - - Запрос.УстановитьПараметр("ДанныеАдреса", ЧастиАдреса); - - Результат = Запрос.Выполнить().Выбрать(); - Если Результат.Следующий() Тогда - Для каждого Элемент Из СписокПолей Цикл - СтрокаАдреса = ЧастиАдреса.Найти(Результат[Элемент.Ключ], "Значение"); - Если СтрокаАдреса <> Неопределено Тогда - СтрокаАдреса.Уровень = Результат[Элемент.Ключ + "Уровень"]; - КонецЕсли; - КонецЦикла; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -Процедура УстановитьУровниАдресаПоЧастямАдреса(ЧастиАдреса, Уровни) - - ТекстЗапроса = "ВЫБРАТЬ - | ДанныеАдреса.Уровень КАК Уровень, - | ДанныеАдреса.Позиция КАК Позиция, - | ДанныеАдреса.Значение КАК Значение, - | ДанныеАдреса.Наименование КАК Наименование, - | ДанныеАдреса.Сокращение КАК Сокращение - |ПОМЕСТИТЬ ДанныеАдреса - |ИЗ - | &ДанныеАдреса КАК ДанныеАдреса - | - |ИНДЕКСИРОВАТЬ ПО - | Уровень, - | Позиция, - | Наименование, - | Сокращение - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | АдресныеОбъекты.Идентификатор КАК Идентификатор, - | АдресныеОбъекты.Наименование КАК Наименование, - | АдресныеОбъекты.Сокращение КАК Сокращение, - | АдресныеОбъекты.Уровень КАК Уровень, - | АдресныеОбъекты.КодСубъектаРФ КАК КодСубъектаРФ - |ПОМЕСТИТЬ СубъектРФ - |ИЗ - | ДанныеАдреса КАК ДанныеАдреса - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты - | ПО (АдресныеОбъекты.Уровень = 1) - | И ДанныеАдреса.Наименование = АдресныеОбъекты.Наименование - | И ДанныеАдреса.Сокращение = АдресныеОбъекты.Сокращение - |ГДЕ - | НЕ АдресныеОбъекты.Идентификатор ЕСТЬ NULL - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | АдресныеОбъекты.Идентификатор КАК Идентификатор, - | АдресныеОбъекты.Наименование КАК Наименование, - | АдресныеОбъекты.Сокращение КАК Сокращение, - | АдресныеОбъекты.Уровень КАК Уровень, - | АдресныеОбъекты.КодСубъектаРФ КАК КодСубъектаРФ, - | АдресныеОбъекты.КодОкруга КАК КодОкруга - |ПОМЕСТИТЬ Округ - |ИЗ - | ДанныеАдреса КАК ДанныеАдреса - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты - | ПО (АдресныеОбъекты.Уровень = 2) - | И ДанныеАдреса.Наименование = АдресныеОбъекты.Наименование - | И ДанныеАдреса.Сокращение = АдресныеОбъекты.Сокращение - |ГДЕ - | НЕ АдресныеОбъекты.Идентификатор ЕСТЬ NULL - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | АдресныеОбъекты.Идентификатор КАК Идентификатор, - | АдресныеОбъекты.Наименование КАК Наименование, - | АдресныеОбъекты.Сокращение КАК Сокращение, - | АдресныеОбъекты.Уровень КАК Уровень, - | АдресныеОбъекты.КодСубъектаРФ КАК КодСубъектаРФ, - | АдресныеОбъекты.КодОкруга КАК КодОкруга, - | АдресныеОбъекты.КодРайона КАК КодРайона, - | АдресныеОбъекты.КодГорода КАК КодГорода - |ПОМЕСТИТЬ Район - |ИЗ - | ДанныеАдреса КАК ДанныеАдреса - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты - | ПО (АдресныеОбъекты.Уровень = 3) - | И ДанныеАдреса.Наименование = АдресныеОбъекты.Наименование - | И ДанныеАдреса.Сокращение = АдресныеОбъекты.Сокращение - |ГДЕ - | НЕ АдресныеОбъекты.Идентификатор ЕСТЬ NULL - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | АдресныеОбъекты.Идентификатор КАК Идентификатор, - | АдресныеОбъекты.Наименование КАК Наименование, - | АдресныеОбъекты.Сокращение КАК Сокращение, - | АдресныеОбъекты.Уровень КАК Уровень, - | АдресныеОбъекты.КодСубъектаРФ КАК КодСубъектаРФ, - | АдресныеОбъекты.КодОкруга КАК КодОкруга, - | АдресныеОбъекты.КодРайона КАК КодРайона, - | АдресныеОбъекты.КодГорода КАК КодГорода - |ПОМЕСТИТЬ Город - |ИЗ - | ДанныеАдреса КАК ДанныеАдреса - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты - | ПО (АдресныеОбъекты.Уровень = 4) - | И ДанныеАдреса.Наименование = АдресныеОбъекты.Наименование - | И ДанныеАдреса.Сокращение = АдресныеОбъекты.Сокращение - |ГДЕ - | НЕ АдресныеОбъекты.Идентификатор ЕСТЬ NULL - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | АдресныеОбъекты.Идентификатор КАК Идентификатор, - | АдресныеОбъекты.Наименование КАК Наименование, - | АдресныеОбъекты.Сокращение КАК Сокращение, - | АдресныеОбъекты.Уровень КАК Уровень, - | АдресныеОбъекты.КодСубъектаРФ КАК КодСубъектаРФ, - | АдресныеОбъекты.КодОкруга КАК КодОкруга, - | АдресныеОбъекты.КодРайона КАК КодРайона, - | АдресныеОбъекты.КодГорода КАК КодГорода, - | АдресныеОбъекты.КодВнутригородскогоРайона, - | АдресныеОбъекты.КодНаселенногоПункта - |ПОМЕСТИТЬ ВнутригородскойРайон - |ИЗ - | ДанныеАдреса КАК ДанныеАдреса - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты - | ПО (АдресныеОбъекты.Уровень = 5) - | И ДанныеАдреса.Наименование = АдресныеОбъекты.Наименование - | И ДанныеАдреса.Сокращение = АдресныеОбъекты.Сокращение - |ГДЕ - | НЕ АдресныеОбъекты.Идентификатор ЕСТЬ NULL - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | АдресныеОбъекты.Идентификатор КАК Идентификатор, - | АдресныеОбъекты.Наименование КАК Наименование, - | АдресныеОбъекты.Сокращение КАК Сокращение, - | АдресныеОбъекты.Уровень КАК Уровень, - | АдресныеОбъекты.КодСубъектаРФ КАК КодСубъектаРФ, - | АдресныеОбъекты.КодОкруга КАК КодОкруга, - | АдресныеОбъекты.КодРайона КАК КодРайона, - | АдресныеОбъекты.КодГорода КАК КодГорода, - | АдресныеОбъекты.КодВнутригородскогоРайона, - | АдресныеОбъекты.КодНаселенногоПункта - |ПОМЕСТИТЬ НаселенныйПункт - |ИЗ - | ДанныеАдреса КАК ДанныеАдреса - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты - | ПО (АдресныеОбъекты.Уровень = 6) - | И ДанныеАдреса.Наименование = АдресныеОбъекты.Наименование - | И ДанныеАдреса.Сокращение = АдресныеОбъекты.Сокращение - |ГДЕ - | НЕ АдресныеОбъекты.Идентификатор ЕСТЬ NULL - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | АдресныеОбъекты.Идентификатор КАК Идентификатор, - | АдресныеОбъекты.Наименование КАК Наименование, - | АдресныеОбъекты.Сокращение КАК Сокращение, - | АдресныеОбъекты.Уровень КАК Уровень, - | АдресныеОбъекты.КодСубъектаРФ КАК КодСубъектаРФ, - | АдресныеОбъекты.КодОкруга КАК КодОкруга, - | АдресныеОбъекты.КодРайона КАК КодРайона, - | АдресныеОбъекты.КодГорода КАК КодГорода, - | АдресныеОбъекты.КодВнутригородскогоРайона, - | АдресныеОбъекты.КодНаселенногоПункта, - | АдресныеОбъекты.КодУлицы - |ПОМЕСТИТЬ Улицы - |ИЗ - | ДанныеАдреса КАК ДанныеАдреса - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты - | ПО (АдресныеОбъекты.Уровень = 7) - | И ДанныеАдреса.Наименование = АдресныеОбъекты.Наименование - | И ДанныеАдреса.Сокращение = АдресныеОбъекты.Сокращение - |ГДЕ - | НЕ АдресныеОбъекты.Идентификатор ЕСТЬ NULL - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | АдресныеОбъекты.Идентификатор КАК Идентификатор, - | АдресныеОбъекты.Наименование КАК Наименование, - | АдресныеОбъекты.Сокращение КАК Сокращение, - | АдресныеОбъекты.Уровень КАК Уровень, - | АдресныеОбъекты.КодСубъектаРФ КАК КодСубъектаРФ, - | АдресныеОбъекты.КодОкруга КАК КодОкруга, - | АдресныеОбъекты.КодРайона КАК КодРайона, - | АдресныеОбъекты.КодГорода КАК КодГорода, - | АдресныеОбъекты.КодВнутригородскогоРайона, - | АдресныеОбъекты.КодНаселенногоПункта, - | АдресныеОбъекты.КодУлицы, - | АдресныеОбъекты.КодДополнительногоЭлемента - |ПОМЕСТИТЬ ДополнительнаяТерритория - |ИЗ - | ДанныеАдреса КАК ДанныеАдреса - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты - | ПО (АдресныеОбъекты.Уровень = 90) - | И ДанныеАдреса.Наименование = АдресныеОбъекты.Наименование - | И ДанныеАдреса.Сокращение = АдресныеОбъекты.Сокращение - |ГДЕ - | НЕ АдресныеОбъекты.Идентификатор ЕСТЬ NULL - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | АдресныеОбъекты.Идентификатор КАК Идентификатор, - | АдресныеОбъекты.Наименование КАК Наименование, - | АдресныеОбъекты.Сокращение КАК Сокращение, - | АдресныеОбъекты.Уровень КАК Уровень, - | АдресныеОбъекты.КодСубъектаРФ КАК КодСубъектаРФ, - | АдресныеОбъекты.КодОкруга КАК КодОкруга, - | АдресныеОбъекты.КодРайона КАК КодРайона, - | АдресныеОбъекты.КодГорода КАК КодГорода, - | АдресныеОбъекты.КодВнутригородскогоРайона, - | АдресныеОбъекты.КодНаселенногоПункта, - | АдресныеОбъекты.КодУлицы, - | АдресныеОбъекты.КодДополнительногоЭлемента, - | АдресныеОбъекты.КодПодчиненногоЭлемента - |ПОМЕСТИТЬ ЭлементДополнительнойТерритории - |ИЗ - | ДанныеАдреса КАК ДанныеАдреса - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты - | ПО (АдресныеОбъекты.Уровень = 91) - | И ДанныеАдреса.Наименование = АдресныеОбъекты.Наименование - | И ДанныеАдреса.Сокращение = АдресныеОбъекты.Сокращение - |ГДЕ - | НЕ АдресныеОбъекты.Идентификатор ЕСТЬ NULL ;"; - - КодОкруга = "0"; - КодРайона = "0"; - КодГорода = "0"; - КодВнутригородскогоРайона = "0"; - КодНаселенногоПункта = "0"; - ТекстСоединения = ""; - ТекстЗапросаВыборки = ""; - СписокПолей = Новый Соответствие(); - Для каждого Уровень Из Уровни Цикл - Если Уровень = 1 Тогда - СписокПолей.Вставить("СубъектРФ", "КодСубъектаРФ"); - ТекстСоединения = " СубъектРФ КАК СубъектРФ "; - ИначеЕсли Уровень = 2 Тогда - СписокПолей.Вставить("Округ", "КодОкруга"); - ТекстСоединения = ТекстСоединения + " ЛЕВОЕ СОЕДИНЕНИЕ Округ КАК Округ - | ПО СубъектаРФ.КодСубъектаРФ = Округ.КодСубъектаРФ"; - КодОкруга = "Округ.КодОкруга"; - ИначеЕсли Уровень = 3 Тогда - СписокПолей.Вставить("Район", "КодРайона"); - ТекстСоединения = ТекстСоединения + " ЛЕВОЕ СОЕДИНЕНИЕ Район КАК Район - | ПО Район.КодСубъектаРФ = СубъектРФ.КодСубъектаРФ - | И Район.КодОкруга = " + КодОкруга; - КодРайона = "Район.КодРайона"; - ИначеЕсли Уровень = 4 Тогда - СписокПолей.Вставить("Город", "КодГорода"); - ТекстСоединения = ТекстСоединения + " ЛЕВОЕ СОЕДИНЕНИЕ Город КАК Город - | ПО Город.КодСубъектаРФ = СубъектРФ.КодСубъектаРФ - | И Город.КодОкруга = " + КодОкруга + " - | И Город.КодРайона = " + КодРайона; - КодГорода = "Город.КодГорода"; - ИначеЕсли Уровень = 5 Тогда - СписокПолей.Вставить("ВнутригородскойРайон", "КодВнутригородскогоРайона"); - ТекстСоединения = ТекстСоединения + " ЛЕВОЕ СОЕДИНЕНИЕ ВнутригородскойРайон КАК ВнутригородскойРайон - | ПО ВнутригородскойРайон.КодСубъектаРФ = СубъектРФ.КодСубъектаРФ - | И ВнутригородскойРайон.КодОкруга = " + КодОкруга + " - | И ВнутригородскойРайон.КодРайона = " + КодРайона + " - | И ВнутригородскойРайон.КодГорода = " + КодГорода; - КодВнутригородскогоРайона = "ВнутригородскойРайон.КодВнутригородскогоРайона"; - ИначеЕсли Уровень = 6 Тогда - СписокПолей.Вставить("НаселенныйПункт", "КодНаселенногоПункта"); - ТекстСоединения = ТекстСоединения + " ЛЕВОЕ СОЕДИНЕНИЕ НаселенныйПункт КАК НаселенныйПункт - | ПО НаселенныйПункт.КодСубъектаРФ = СубъектРФ.КодСубъектаРФ - | И НаселенныйПункт.КодОкруга = " + КодОкруга + " - | И НаселенныйПункт.КодРайона = " + КодРайона + " - | И НаселенныйПункт.КодГорода = " + КодГорода + " - | И НаселенныйПункт.КодВнутригородскогоРайона = " + КодВнутригородскогоРайона; - КодНаселенногоПункта = "НаселенныйПункт.КодНаселенногоПункта"; - ИначеЕсли Уровень = 7 Тогда - СписокПолей.Вставить("Улицы", "КодУлицы"); - ТекстСоединения = ТекстСоединения + " ЛЕВОЕ СОЕДИНЕНИЕ Улицы КАК Улицы - | ПО Улицы.КодСубъектаРФ = СубъектРФ.КодСубъектаРФ - | И Улицы.КодОкруга = " + КодОкруга + " - | И Улицы.КодРайона = " + КодРайона + " - | И Улицы.КодГорода = " + КодГорода + " - | И Улицы.КодВнутригородскогоРайона = " + КодВнутригородскогоРайона + " - | И Улицы.КодНаселенногоПункта = " + КодНаселенногоПункта; - КонецЕсли; - КонецЦикла; - - Разделитель = ""; - ТекстУпорядочить = " УПОРЯДОЧИТЬ ПО "; - Для каждого Элемент Из СписокПолей Цикл - ТекстЗапросаВыборки = ТекстЗапросаВыборки + Разделитель + " " + Элемент.Ключ - + ".Наименование + "" "" + " + Элемент.Ключ + ".Сокращение КАК "+ Элемент.Ключ + ", " + Элемент.Ключ + ".Уровень КАК " - + Элемент.Ключ + "Уровень, " + Элемент.Ключ + "." + Элемент.Значение + " КАК " + Элемент.Значение; - ТекстУпорядочить = ТекстУпорядочить + Разделитель + Элемент.Ключ + ".Уровень"; - Разделитель = ", "; - КонецЦикла; - ТекстУпорядочить = ТекстУпорядочить + " УБЫВ"; - - Разделитель = ""; - УсловиеГдеДляДополнительныхТерриторий = ""; - Если НЕ ПустаяСтрока(ТекстЗапросаВыборки) Тогда - - ТекстЗапросаВыборки = "ВЫБРАТЬ " + ТекстЗапросаВыборки + " ИЗ " + ТекстСоединения; - ТекстЗапроса = ТекстЗапроса + ТекстЗапросаВыборки + ТекстУпорядочить; - Запрос = Новый Запрос(ТекстЗапроса); - - Запрос.УстановитьПараметр("ДанныеАдреса", ЧастиАдреса); - - Результат = Запрос.Выполнить().Выбрать(); - Если Результат.Следующий() Тогда - Для каждого Элемент Из СписокПолей Цикл - СтрокаАдреса = ЧастиАдреса.Найти(Результат[Элемент.Ключ], "Значение"); - Если СтрокаАдреса <> Неопределено Тогда - СтрокаАдреса.Уровень = Результат[Элемент.Ключ + "Уровень"]; - УсловиеГдеДляДополнительныхТерриторий = УсловиеГдеДляДополнительныхТерриторий + Разделитель - + "АдресныеОбъекты." + СписокПолей.Получить(Элемент.Ключ) + " = " + Формат(Результат[Элемент.Значение], "ЧРГ=; ЧГ=0"); - Иначе - УсловиеГдеДляДополнительныхТерриторий = УсловиеГдеДляДополнительныхТерриторий + Разделитель - + "АдресныеОбъекты." + СписокПолей.Получить(Элемент.Ключ) + " = 0"; - КонецЕсли; - Разделитель = " И "; - КонецЦикла; - КонецЕсли; - КонецЕсли; - - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | ДанныеАдреса.Уровень КАК Уровень, - | ДанныеАдреса.Позиция КАК Позиция, - | ДанныеАдреса.Значение КАК Значение, - | ДанныеАдреса.Наименование КАК Наименование, - | ДанныеАдреса.Сокращение КАК Сокращение - |ПОМЕСТИТЬ ДанныеАдреса - |ИЗ - | &ДанныеАдреса КАК ДанныеАдреса - |ГДЕ - | ДанныеАдреса.Уровень = 0 - | - |ИНДЕКСИРОВАТЬ ПО - | Уровень, - | Позиция, - | Наименование, - | Сокращение - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | АдресныеОбъекты.Идентификатор КАК Идентификатор, - | АдресныеОбъекты.Наименование КАК Наименование, - | АдресныеОбъекты.Сокращение КАК Сокращение, - | АдресныеОбъекты.Уровень КАК Уровень, - | АдресныеОбъекты.КодСубъектаРФ КАК КодСубъектаРФ, - | АдресныеОбъекты.КодОкруга КАК КодОкруга, - | АдресныеОбъекты.КодРайона КАК КодРайона, - | АдресныеОбъекты.КодГорода КАК КодГорода, - | АдресныеОбъекты.КодВнутригородскогоРайона, - | АдресныеОбъекты.КодНаселенногоПункта, - | АдресныеОбъекты.КодУлицы, - | АдресныеОбъекты.КодДополнительногоЭлемента - |ПОМЕСТИТЬ ДополнительнаяТерритория - |ИЗ - | ДанныеАдреса КАК ДанныеАдреса - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты - | ПО (АдресныеОбъекты.Уровень = 90) - | И ДанныеАдреса.Наименование = АдресныеОбъекты.Наименование - | И ДанныеАдреса.Сокращение = АдресныеОбъекты.Сокращение - |ГДЕ - | НЕ АдресныеОбъекты.Идентификатор ЕСТЬ NULL И " + УсловиеГдеДляДополнительныхТерриторий + " - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | АдресныеОбъекты.Идентификатор КАК Идентификатор, - | АдресныеОбъекты.Наименование КАК Наименование, - | АдресныеОбъекты.Сокращение КАК Сокращение, - | АдресныеОбъекты.Уровень КАК Уровень, - | АдресныеОбъекты.КодСубъектаРФ КАК КодСубъектаРФ, - | АдресныеОбъекты.КодОкруга КАК КодОкруга, - | АдресныеОбъекты.КодРайона КАК КодРайона, - | АдресныеОбъекты.КодГорода КАК КодГорода, - | АдресныеОбъекты.КодВнутригородскогоРайона, - | АдресныеОбъекты.КодНаселенногоПункта, - | АдресныеОбъекты.КодУлицы, - | АдресныеОбъекты.КодДополнительногоЭлемента, - | АдресныеОбъекты.КодПодчиненногоЭлемента - |ПОМЕСТИТЬ ЭлементДополнительнойТерритории - |ИЗ - | ДанныеАдреса КАК ДанныеАдреса - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты - | ПО (АдресныеОбъекты.Уровень = 91) - | И ДанныеАдреса.Наименование = АдресныеОбъекты.Наименование - | И ДанныеАдреса.Сокращение = АдресныеОбъекты.Сокращение - |ГДЕ - | НЕ АдресныеОбъекты.Идентификатор ЕСТЬ NULL И " + УсловиеГдеДляДополнительныхТерриторий + " - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | АдресныеОбъекты.Наименование + "" "" + АдресныеОбъекты.Сокращение КАК ДополнительнаяТерритория, - | АдресныеОбъекты.Уровень КАК ДополнительнаяТерриторияУровень, - | ЭлементДополнительнойТерритории.Наименование + "" "" + ЭлементДополнительнойТерритории.Сокращение КАК ЭлементДополнительнойТерритории, - | ЭлементДополнительнойТерритории.Уровень КАК ЭлементДополнительнойТерриторииУровень - |ИЗ - | ДополнительнаяТерритория КАК АдресныеОбъекты - | ЛЕВОЕ СОЕДИНЕНИЕ ЭлементДополнительнойТерритории КАК ЭлементДополнительнойТерритории - | ПО АдресныеОбъекты.КодДополнительногоЭлемента = ЭлементДополнительнойТерритории.КодДополнительногоЭлемента - |ГДЕ " + УсловиеГдеДляДополнительныхТерриторий; - - Запрос.УстановитьПараметр("ДанныеАдреса", ЧастиАдреса); - ВыборкаДетальныеЗаписи = Запрос.Выполнить().Выбрать(); - - Если ВыборкаДетальныеЗаписи.Следующий() Тогда - - Если ЗначениеЗаполнено(ВыборкаДетальныеЗаписи.ДополнительнаяТерритория) Тогда - СтрокаАдреса = ЧастиАдреса.Найти(ВыборкаДетальныеЗаписи.ДополнительнаяТерритория, "Значение"); - Если СтрокаАдреса <> Неопределено Тогда - СтрокаАдреса.Уровень = ВыборкаДетальныеЗаписи.ДополнительнаяТерриторияУровень; - КонецЕсли; - КонецЕсли; - Если ЗначениеЗаполнено(ВыборкаДетальныеЗаписи.ЭлементДополнительнойТерритории) Тогда - СтрокаАдреса = ЧастиАдреса.Найти(ВыборкаДетальныеЗаписи.ЭлементДополнительнойТерритории, "Значение"); - Если СтрокаАдреса <> Неопределено Тогда - СтрокаАдреса.Уровень = ВыборкаДетальныеЗаписи.ЭлементДополнительнойТерриторииУровень; - КонецЕсли; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - Функция ПерваяБукваЗаглавная(Строка) Возврат ВРег(Лев(Строка, 1)) + Сред(НРег(Строка), 2); // Использовать ТРег нельзя. КонецФункции @@ -6893,7 +4143,7 @@ // Процедура ФоновоеЗаданиеЗагрузкиКлассификатораАдресов(Параметры, АдресРезультата) Экспорт - ЗагрузитьКлассификаторАдресов(Параметры[0], Параметры[1]); + ЗагрузитьКлассификаторАдресов(Параметры[0], Параметры[1],, Параметры[3]); КонецПроцедуры @@ -6901,7 +4151,7 @@ // Процедура ФоновоеЗаданиеЗагрузкиКлассификатораАдресовССайта(Параметры, АдресРезультата) Экспорт - ЗагрузитьКлассификаторАдресовССайта(Параметры[0]); + ЗагрузитьКлассификаторАдресовССайта(Параметры[0],, Параметры[1]); КонецПроцедуры @@ -6917,22 +4167,6 @@ #Область ПреобразованиеТиповДанныхФИАС -// Преобразует УникальныйИдентификатор в ДвоичныеДанные. -// -// Параметры: -// Идентификатор - УникальныйИдентификатор, Строка - исходные данные. -// -// Возвращаемое значение: -// ДвоичныеДанные - результат преобразования. -// -Функция УникальныйИдентификаторВДвоичныеДанные(Идентификатор) - - ТипXDTOДвоичныеДанные = ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "hexBinary"); - ЗначениеHEX = ФабрикаXDTO.Создать(ТипXDTOДвоичныеДанные, СтрЗаменить(XMLСтрока(Идентификатор), "-", "")); - - Возврат ЗначениеHEX.Значение; -КонецФункции - // Преобразует ДвоичныеДанные в УникальныйИдентификатор. // Выполняет обратное действие для функции УникальныйИдентификаторВДвоичныеДанные. // @@ -6953,20 +4187,6 @@ Возврат Новый УникальныйИдентификатор( Сред(СтрокаУИД, 1, 8) + "-" + Сред(СтрокаУИД, 9, 4) + "-" + Сред(СтрокаУИД, 13, 4) + "-" + Сред(СтрокаУИД, 17, 4) + "-" + Сред(СтрокаУИД, 21) ); КонецФункции -// Преобразует УникальныйИдентификатор в строку base 64. -// -// Параметры: -// Идентификатор - УникальныйИдентификатор, Строка - исходные данные. -// -// Возвращаемое значение: -// Строка - результат преобразования. -// -Функция УникальныйИдентификаторВСтроку64(Идентификатор) - - Возврат ДвоичныеДанныеВСтроку( УникальныйИдентификаторВДвоичныеДанные(Идентификатор) ); - -КонецФункции - // Преобразует строку base64 в УникальныйИдентификатор. // // Параметры: @@ -6982,20 +4202,6 @@ КонецФункции -// Преобразует ДвоичныеДанные -// -// Параметры: -// ДвоичныеДанные - исходные данные. -// -// Возвращаемое значение: -// Строка - результат преобразования в base64. -// -Функция ДвоичныеДанныеВСтроку(ДвоичныеДанные) - - Возврат XMLСтрока(ДвоичныеДанные); - -КонецФункции - // Преобразует строку в ДвоичныеДанные. // // Параметры: @@ -7014,50 +4220,19 @@ #Область ПереносУстаревшегоКлассификатора -// Фоновая актуализация адресного классификатора. -// -Процедура ФоновыйПереносДанныхУстаревшегоКлассификатора(ПараметрыВыгрузки, АдресХранилища) Экспорт +Функция ЗаполненныеРегионыУстаревшегоКлассификатора() - Регионы = ЗаполненныеРегионыУстаревшегоКлассификатора(); - Если Регионы.Количество() > 0 Тогда - ПеренестиДанныеУстаревшегоКлассификатор(Регионы); - КонецЕсли; - -КонецПроцедуры - -Функция ЗаполненныеРегионыУстаревшегоКлассификатора() Экспорт - - Результат = Новый Массив; - Если Метаданные.РегистрыСведений.Найти("УдалитьАдресныйКлассификатор") <> Неопределено - И ПравоДоступа("Изменение", Метаданные.РегистрыСведений.АдресныеОбъекты) Тогда + Если ПравоДоступа("Изменение", Метаданные.РегистрыСведений.АдресныеОбъекты) Тогда УстановитьПривилегированныйРежим(Истина); - // Выбираем все регионы, по которым еще есть записи. - Запрос = Новый Запрос(" - |ВЫБРАТЬ РАЗЛИЧНЫЕ - | Регионы.КодАдресногоОбъектаВКоде КАК КодСубъектаРФ - |ИЗ - | РегистрСведений.УдалитьАдресныйКлассификатор КАК Регионы - |ГДЕ - | Регионы.ТипАдресногоЭлемента = 1 - | И 1 В ( - | ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.УдалитьАдресныйКлассификатор - | ГДЕ ТипАдресногоЭлемента = 2 И КодАдресногоОбъектаВКоде = Регионы.КодАдресногоОбъектаВКоде - | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.УдалитьАдресныйКлассификатор - | ГДЕ ТипАдресногоЭлемента = 3 И КодАдресногоОбъектаВКоде = Регионы.КодАдресногоОбъектаВКоде - | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.УдалитьАдресныйКлассификатор - | ГДЕ ТипАдресногоЭлемента = 4 И КодАдресногоОбъектаВКоде = Регионы.КодАдресногоОбъектаВКоде - | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.УдалитьАдресныйКлассификатор - | ГДЕ ТипАдресногоЭлемента = 5 И КодАдресногоОбъектаВКоде = Регионы.КодАдресногоОбъектаВКоде - | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.УдалитьАдресныйКлассификатор - | ГДЕ ТипАдресногоЭлемента = 6 И КодАдресногоОбъектаВКоде = Регионы.КодАдресногоОбъектаВКоде - | ) - |"); + Если ПустаяСтрока(Константы.ИсточникДанныхАдресногоКлассификатора.Получить()) Тогда + Возврат Истина; + КонецЕсли; - Результат = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("КодСубъектаРФ"); КонецЕсли; - Возврат Результат; + + Возврат Ложь; КонецФункции @@ -7065,680 +4240,18 @@ // Функция УстаревшийКлассификаторСодержитСведения() - Если Метаданные.РегистрыСведений.Найти("УдалитьАдресныйКлассификатор") <> Неопределено - И ПравоДоступа("Изменение", Метаданные.РегистрыСведений.АдресныеОбъекты) Тогда + Если ПравоДоступа("Изменение", Метаданные.РегистрыСведений.АдресныеОбъекты) Тогда УстановитьПривилегированныйРежим(Истина); - Запрос = Новый Запрос(" - |ВЫБРАТЬ ПЕРВЫЕ 1 - | Регионы.КодАдресногоОбъектаВКоде КАК КодСубъектаРФ - |ИЗ - | РегистрСведений.УдалитьАдресныйКлассификатор КАК Регионы - |ГДЕ - | Регионы.ТипАдресногоЭлемента > 1 - |"); - - Результат = Запрос.Выполнить().Выбрать(); - - Если Результат.Следующий() Тогда + Если ПустаяСтрока(Константы.ИсточникДанныхАдресногоКлассификатора.Получить()) Тогда Возврат Истина; КонецЕсли; + КонецЕсли; + Возврат Ложь; -КонецФункции -Процедура ПеренестиДанныеУстаревшегоКлассификатор(КодыСубъектовРФ) - - // 1. Переносим все заказанные субъекты. - ВсегоСубъектов = КодыСубъектовРФ.Количество(); - НомерПоПорядку = 0; - - ДатаЗагрузки = ТекущаяУниверсальнаяДата(); - ДатаВерсии = ДатаЗагрузки; - - Для Каждого СубъектРФ Из КодыСубъектовРФ Цикл - - НомерПоПорядку = НомерПоПорядку + 1; - ДлительныеОперации.СообщитьПрогресс(,СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Актуализация сведений о регионе ""%1 - %2"" (осталось %3) ...'"), - СубъектРФ, АдресныйКлассификатор.НаименованиеРегионаПоКоду(СубъектРФ), - Формат(ВсегоСубъектов - НомерПоПорядку, "ЧН="))); - - НачатьТранзакцию(); - Попытка - ПеренестиРегионИзДанныхКЛАДР(СубъектРФ); - - // Ставим версию данных загрузки региона. - УстановитьИнформациюОЗагрузкеВерсии(СубъектРФ, "КЛАДР", ДатаВерсии, ДатаЗагрузки); - - // Очищаем загруженные данные в старом классификаторе. - ОчиститьСведенияУстаревшегоКлассификатора(СубъектРФ); - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - - КонецЦикла; - - // 4. Обновляем список субъектов РФ - убеждаемся, что у нас есть все корневые записи. - РегистрыСведений.АдресныеОбъекты.ОбновитьСоставСубъектовРФПоКлассификатору(Истина); - - // 5. Перерасчитываем сокращения адресов по фактически загруженным данным. - // Эти данные будут нужны при разборах адреса из строки. - РассчитатьУровниСокращенийАдресныхСведений(); -КонецПроцедуры - -Процедура ПеренестиРегионИзДанныхКЛАДР(СубъектРФ) - - ДополнительныеАдресныеСведения = РегистрыСведений.ДополнительныеАдресныеСведения.СоздатьНаборЗаписей(); - АдресныеОбъекты = РегистрыСведений.АдресныеОбъекты.СоздатьНаборЗаписей(); - ИсторияАдресныхОбъектов = РегистрыСведений.ИсторияАдресныхОбъектов.СоздатьНаборЗаписей(); - ДомаЗданияСтроения = РегистрыСведений.ДомаЗданияСтроения.СоздатьНаборЗаписей(); - - ТаблицыДанных = Новый Структура; - ТаблицыДанных.Вставить("КлассификаторСубъектовРФ", РегистрыСведений.АдресныеОбъекты.КлассификаторСубъектовРФ()); - ТаблицыДанных.Вставить("СлужебныеАдресныеСведения", СлужебныеАдресныеСведенияДляОбработкиКЛАДР()); - - ТаблицыДанных.Вставить("АдресныеОбъекты", АдресныеОбъекты.ВыгрузитьКолонки()); - ТаблицыДанных.АдресныеОбъекты.Индексы.Добавить("Идентификатор"); - ТаблицыДанных.АдресныеОбъекты.Индексы.Добавить("КодКЛАДР"); - - ТаблицыДанных.Вставить("ИсторияАдресныхОбъектов", ИсторияАдресныхОбъектов); - ТаблицыДанных.Вставить("ДомаЗданияСтроения", ДомаЗданияСтроения.ВыгрузитьКолонки()); - ТаблицыДанных.ДомаЗданияСтроения.Колонки.Добавить("СоответствиеСтроений"); - ТаблицыДанных.ДомаЗданияСтроения.Индексы.Добавить("АдресныйОбъект, ПочтовыйИндекс, КодСубъектаРФ"); - - ТаблицыДанных.Вставить("ДополнительныеСведения", ДополнительныеАдресныеСведения.ВыгрузитьКолонки()); - ТаблицыДанных.ДополнительныеСведения.Индексы.Добавить("КодСубъектаРФ, OKATO, ОКТМО, КодИФНСФЛ, КодИФНСЮЛ, КодУчасткаИФНСФЛ, КодУчасткаИФНСЮЛ"); - - ТаблицыДанных.Вставить("ТипыЧастейЗдания", ТипыЧастейЗданияКЛАДР()); - - // 1. Адреса и дополнительные сведения. - ЗаполнитьАдресныеОбъектыРегистраКЛАДР(СубъектРФ, ТаблицыДанных); - - // 2. Дома - по загруженным актуальным данным. - ЗаполнитьДомаЗданияСтроенияКЛАДР(СубъектРФ, ТаблицыДанных); - - // 3. Запись собранного - АдресныеОбъекты.Загрузить(ТаблицыДанных.АдресныеОбъекты); - АдресныеОбъекты.Отбор.КодСубъектаРФ.Установить(СубъектРФ); - ОбновлениеИнформационнойБазы.ЗаписатьДанные(АдресныеОбъекты); - - // Дома с упаковкой - Сжатие = Новый СжатиеДанных(9); - Для Каждого Строка Из ТаблицыДанных.ДомаЗданияСтроения Цикл - НоваяСтрока = ДомаЗданияСтроения.Добавить(); - ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка, , "Строения"); - - ВсеСтроения = ""; - Для Каждого КлючЗначение Из Строка.СоответствиеСтроений Цикл - ВсеСтроения = ВсеСтроения + КлючЗначение.Значение + Символы.ПС; - КонецЦикла; - - НоваяСтрока.Строения = Новый ХранилищеЗначения(ВсеСтроения, Сжатие); - КонецЦикла; - ДомаЗданияСтроения.Отбор.КодСубъектаРФ.Установить(СубъектРФ); - ОбновлениеИнформационнойБазы.ЗаписатьДанные(ДомаЗданияСтроения); - - // Все дополнительные - ДополнительныеАдресныеСведения.Загрузить(ТаблицыДанных.ДополнительныеСведения); - ДополнительныеАдресныеСведения.Отбор.КодСубъектаРФ.Установить(СубъектРФ); - ОбновлениеИнформационнойБазы.ЗаписатьДанные(ДополнительныеАдресныеСведения); - - // Служебные адресные сведения - НаборСлужебныеАдресныеСведения = РегистрыСведений.СлужебныеАдресныеСведения.СоздатьНаборЗаписей(); - НаборСлужебныеАдресныеСведения.Загрузить(ТаблицыДанных.СлужебныеАдресныеСведения); - ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборСлужебныеАдресныеСведения); - - // 4. Истории нет - Набор = РегистрыСведений.ИсторияАдресныхОбъектов.СоздатьНаборЗаписей(); - Набор.Отбор.КодСубъектаРФ.Установить(СубъектРФ); - ОбновлениеИнформационнойБазы.ЗаписатьДанные(Набор); - - // 5. Ориентиров нет - Набор = РегистрыСведений.ОриентирыАдресныхОбъектов.СоздатьНаборЗаписей(); - Набор.Отбор.КодСубъектаРФ.Установить(СубъектРФ); - ОбновлениеИнформационнойБазы.ЗаписатьДанные(Набор); - - // 6. Причин изменения нет - Набор = РегистрыСведений.ПричиныИзмененияАдресныхСведений.СоздатьНаборЗаписей(); - Набор.Отбор.КодСубъектаРФ.Установить(СубъектРФ); - ОбновлениеИнформационнойБазы.ЗаписатьДанные(Набор); - -КонецПроцедуры - -Процедура ЗаполнитьАдресныеОбъектыРегистраКЛАДР(СубъектРФ, ТаблицыДанных) - - УстановитьПривилегированныйРежим(Истина); - - ТипЧисло = Новый ОписаниеТипов("Число"); - - ТаблицаАдресныхОбъектов = ТаблицыДанных.АдресныеОбъекты; - ИсторияАдресныхОбъектов = ТаблицыДанных.ИсторияАдресныхОбъектов; - ТаблицаДополнительных = ТаблицыДанных.ДополнительныеСведения; - ТаблицаКлассификатора = ТаблицыДанных.КлассификаторСубъектовРФ; - - // Выбираем уровни 1 - 5, до улиц, без домов. - Запрос = Новый Запрос(" - |ВЫБРАТЬ - | ТипАдресногоЭлемента, КодАдресногоОбъектаВКоде, КодРайонаВКоде, КодГородаВКоде, КодНаселенногоПунктаВКоде, КодУлицыВКоде, Код, - | Наименование, Сокращение, Индекс, ПризнакАктуальности - |ИЗ - | РегистрСведений.УдалитьАдресныйКлассификатор - |ГДЕ - | ТипАдресногоЭлемента = 1 - | И КодАдресногоОбъектаВКоде = &КодСубъектаРФ - |ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ - | ТипАдресногоЭлемента, КодАдресногоОбъектаВКоде, КодРайонаВКоде, КодГородаВКоде, КодНаселенногоПунктаВКоде, КодУлицыВКоде, Код, - | Наименование, Сокращение, Индекс, ПризнакАктуальности - |ИЗ - | РегистрСведений.УдалитьАдресныйКлассификатор - |ГДЕ - | ТипАдресногоЭлемента = 2 - | И КодАдресногоОбъектаВКоде = &КодСубъектаРФ - |ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ - | ТипАдресногоЭлемента, КодАдресногоОбъектаВКоде, КодРайонаВКоде, КодГородаВКоде, КодНаселенногоПунктаВКоде, КодУлицыВКоде, Код, - | Наименование, Сокращение, Индекс, ПризнакАктуальности - |ИЗ - | РегистрСведений.УдалитьАдресныйКлассификатор - |ГДЕ - | ТипАдресногоЭлемента = 3 - | И КодАдресногоОбъектаВКоде = &КодСубъектаРФ - |ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ - | ТипАдресногоЭлемента, КодАдресногоОбъектаВКоде, КодРайонаВКоде, КодГородаВКоде, КодНаселенногоПунктаВКоде, КодУлицыВКоде, Код, - | Наименование, Сокращение, Индекс, ПризнакАктуальности - |ИЗ - | РегистрСведений.УдалитьАдресныйКлассификатор - |ГДЕ - | ТипАдресногоЭлемента = 4 - | И КодАдресногоОбъектаВКоде = &КодСубъектаРФ - |ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ - | ТипАдресногоЭлемента, КодАдресногоОбъектаВКоде, КодРайонаВКоде, КодГородаВКоде, КодНаселенногоПунктаВКоде, КодУлицыВКоде, Код, - | Наименование, Сокращение, Индекс, ПризнакАктуальности - |ИЗ - | РегистрСведений.УдалитьАдресныйКлассификатор - |ГДЕ - | ТипАдресногоЭлемента = 5 - | И КодАдресногоОбъектаВКоде = &КодСубъектаРФ - |"); - - Запрос.УстановитьПараметр("КодСубъектаРФ", СубъектРФ); - Выборка = Запрос.Выполнить().Выбрать(); - - Пока Выборка.Следующий() Цикл - - Если Выборка.ПризнакАктуальности <> 0 Тогда - // Историческая запись - НоваяСтрока = ИсторияАдресныхОбъектов.Добавить(); - НоваяСтрока.ТекущийКодСубъектаРФ = СубъектРФ; - Иначе - // Актуальные данные - НоваяСтрока = ТаблицаАдресныхОбъектов.Добавить(); - НоваяСтрока.Актуален = Истина; - КонецЕсли; - - НоваяСтрока.КодСубъектаРФ = СубъектРФ; - НоваяСтрока.КодОкруга = 0; // Не поддерживается в КЛАДР - НоваяСтрока.КодРайона = Выборка.КодРайонаВКоде; - НоваяСтрока.КодГорода = Выборка.КодГородаВКоде; - НоваяСтрока.КодВнутригородскогоРайона = 0; // Не поддерживается в КЛАДР - НоваяСтрока.КодНаселенногоПункта = Выборка.КодНаселенногоПунктаВКоде; - - НоваяСтрока.КодУлицы = Выборка.КодУлицыВКоде; - НоваяСтрока.КодКЛАДР = Цел(Выборка.Код / 10000 ); - - НоваяСтрока.КодДополнительногоЭлемента = 0; // Не поддерживается в КЛАДР - НоваяСтрока.КодПодчиненногоЭлемента = 0; // Не поддерживается в КЛАДР - - // Уровень вычисляется по кодам иерархии. - НоваяСтрока.Уровень = УровеньПоИерархическимКодамЗаписи(НоваяСтрока); - - Идентификатор = Новый УникальныйИдентификатор; - Если НоваяСтрока.Уровень = 1 Тогда - // Идентификатор субъекта подставим из классификатора. - СтрокаСубъекта = ТаблицаКлассификатора.Найти(СубъектРФ, "КодСубъектаРФ"); - Если СтрокаСубъекта <> Неопределено Тогда - Идентификатор = СтрокаСубъекта.Идентификатор; - КонецЕсли; - КонецЕсли; - - НоваяСтрока.Идентификатор = Идентификатор; - НоваяСтрока.ПочтовыйИндекс = ТипЧисло.ПривестиЗначение(Выборка.Индекс); - НоваяСтрока.Наименование = Выборка.Наименование; - НоваяСтрока.Сокращение = Выборка.Сокращение; - - НоваяСтрока.Дополнительно = ИдентификаторДополнительныхСведенийКЛАДР(ТаблицаДополнительных, СубъектРФ, 0, 0, 0); - - КонецЦикла; - -КонецПроцедуры - -Процедура ЗаполнитьДомаЗданияСтроенияКЛАДР(СубъектРФ, ТаблицыДанных) - - УстановитьПривилегированныйРежим(Истина); - - ТипЧисло = Новый ОписаниеТипов("Число"); - - ТаблицаАдресныхОбъектов = ТаблицыДанных.АдресныеОбъекты; - ТаблицаДополнительных = ТаблицыДанных.ДополнительныеСведения; - - // Выбираем уровни 6 - только дома. - Запрос = Новый Запрос(" - |ВЫБРАТЬ - | ТипАдресногоЭлемента, КодАдресногоОбъектаВКоде, КодРайонаВКоде, КодГородаВКоде, КодНаселенногоПунктаВКоде, КодУлицыВКоде, Код, - | Наименование, Сокращение, Индекс, ПризнакАктуальности - |ИЗ - | РегистрСведений.УдалитьАдресныйКлассификатор - |ГДЕ - | ТипАдресногоЭлемента = 6 - | И КодАдресногоОбъектаВКоде = &КодСубъектаРФ - |"); - - Запрос.УстановитьПараметр("КодСубъектаРФ", СубъектРФ); - Выборка = Запрос.Выполнить().Выбрать(); - - Пока Выборка.Следующий() Цикл - ЕстьЗаписиДомов = Истина; - Пока ЕстьЗаписиДомов Цикл - КодАдресногоОбъекта = Цел(Выборка.Код / 10000); - СтрокаАдресногоОбъекта = ТаблицаАдресныхОбъектов.Найти(КодАдресногоОбъекта, "КодКЛАДР"); - ИдентификаторАдресногоОбъекта = ?(СтрокаАдресногоОбъекта = Неопределено, Неопределено, СтрокаАдресногоОбъекта.Идентификатор); - Если ИдентификаторАдресногоОбъекта <> Неопределено Тогда - - Описание = Выборка.Наименование; - - ПараметрыДомов = Новый Структура; - ПараметрыДомов.Вставить("АдресныйОбъект", ИдентификаторАдресногоОбъекта); - ПараметрыДомов.Вставить("ПочтовыйИндекс", ТипЧисло.ПривестиЗначение(Выборка.Индекс)); - ПараметрыДомов.Вставить("КодСубъектаРФ", СубъектРФ); - - ДополнительныйИдентификатор = ИдентификаторДополнительныхСведенийКЛАДР(ТаблицаДополнительных, СубъектРФ, 0, 0, 0); - - ДобавитьЗаписиДомовЗданийСтроенийКЛАДР(Описание, ПараметрыДомов, ДополнительныйИдентификатор, ТаблицыДанных); - КонецЕсли; - ЕстьЗаписиДомов = Выборка.Следующий(); - КонецЦикла; - КонецЦикла; - -КонецПроцедуры - -// Минимальные служебные сведения. -// Идентификаторы надо бы зачитать из РегистрСведений.СлужебныеАдресныеСведения, но их там может и не быть. -// -Функция СлужебныеАдресныеСведенияДляОбработкиКЛАДР() - - ТаблицаАдресныхСведений = РегистрыСведений.СлужебныеАдресныеСведения.СоздатьНаборЗаписей().ВыгрузитьКолонки(); - - ДобавитьСтрокуАдресныхСведений("INTVSTAT", 1, Неопределено, "Обычный", ТаблицаАдресныхСведений); - ДобавитьСтрокуАдресныхСведений("INTVSTAT", 2, Неопределено, "Четный", ТаблицаАдресныхСведений); - ДобавитьСтрокуАдресныхСведений("INTVSTAT", 3, Неопределено, "Нечетный", ТаблицаАдресныхСведений); - // Дома - ДобавитьСтрокуАдресныхСведений("ESTSTAT", 1, Неопределено, "Владение", ТаблицаАдресныхСведений); - ДобавитьСтрокуАдресныхСведений("ESTSTAT", 2, Неопределено, "Дом", ТаблицаАдресныхСведений); - ДобавитьСтрокуАдресныхСведений("ESTSTAT", 3, Неопределено, "Домовладение", ТаблицаАдресныхСведений); - // Строения - ДобавитьСтрокуАдресныхСведений("STRSTAT", 1, "стр", "Строение", ТаблицаАдресныхСведений); - ДобавитьСтрокуАдресныхСведений("STRSTAT", 2, "сооружение", "Сооружение", ТаблицаАдресныхСведений); - ДобавитьСтрокуАдресныхСведений("STRSTAT", 3, "литера", "Литера", ТаблицаАдресныхСведений); - ДобавитьСтрокуАдресныхСведений("STRSTAT", 3, "литер", "Литер", ТаблицаАдресныхСведений); - // Дополнительные адресные элементы - ДобавитьСтрокуАдресныхСведений("ДопАдрЭлНомер", 0, "Бокс", "2040", ТаблицаАдресныхСведений); - ДобавитьСтрокуАдресныхСведений("ДопАдрЭлНомер", 0, "Владение", "1020", ТаблицаАдресныхСведений); - ДобавитьСтрокуАдресныхСведений("ДопАдрЭлНомер", 0, "Дом", "1010", ТаблицаАдресныхСведений); - ДобавитьСтрокуАдресныхСведений("ДопАдрЭлНомер", 0, "Домовладение", "1030", ТаблицаАдресныхСведений); - ДобавитьСтрокуАдресныхСведений("ДопАдрЭлНомер", 0, "Квартира", "2010", ТаблицаАдресныхСведений); - ДобавитьСтрокуАдресныхСведений("ДопАдрЭлНомер", 0, "Комната", "2050", ТаблицаАдресныхСведений); - ДобавитьСтрокуАдресныхСведений("ДопАдрЭлНомер", 0, "Корпус", "1050", ТаблицаАдресныхСведений); - ДобавитьСтрокуАдресныхСведений("ДопАдрЭлНомер", 0, "Литера", "1080", ТаблицаАдресныхСведений); - ДобавитьСтрокуАдресныхСведений("ДопАдрЭлНомер", 0, "Офис", "2030", ТаблицаАдресныхСведений); - ДобавитьСтрокуАдресныхСведений("ДопАдрЭлНомер", 0, "Помещение", "2020", ТаблицаАдресныхСведений); - ДобавитьСтрокуАдресныхСведений("ДопАдрЭлНомер", 0, "Сооружение", "1070", ТаблицаАдресныхСведений); - ДобавитьСтрокуАдресныхСведений("ДопАдрЭлНомер", 0, "Строение", "1060", ТаблицаАдресныхСведений); - ДобавитьСтрокуАдресныхСведений("ДопАдрЭлНомер", 0, "Участок", "1040", ТаблицаАдресныхСведений); - - ТаблицаАдресныхСведений.Индексы.Добавить("Тип, Значение"); - - Возврат ТаблицаАдресныхСведений; - -КонецФункции - -Функция ДобавитьСтрокуАдресныхСведений(Тип, Идентификатор, Ключ, Значение, СлужебныеАдресныеСведения) - - Строка = СлужебныеАдресныеСведения.Добавить(); - Строка.Тип = Тип; - Строка.Идентификатор = Идентификатор; - Строка.Ключ = Ключ; - Строка.Значение = Значение; - - Возврат СлужебныеАдресныеСведения; -КонецФункции - -// Формирует таблицу префиксов - разделителей данных КЛАДР, типов зданий. -// -// Возвращаемое значение: -// ТаблицаЗначений - Возможные варианты. Содержит колонки: -// * Префикс - Строка - префикс-разделитель. -// * Идентификатор - Строка - идентификатор для структуры. -// * ТипСтатуса - Строка - тип для поиска идентификатора в таблице статусов. -// * Длина - Число - длина префикса. -// -Функция ТипыЧастейЗданияКЛАДР() - - ПрефиксыЗданий = Новый ТаблицаЗначений; - ПрефиксыЗданий.Колонки.Добавить("Префикс"); - ПрефиксыЗданий.Колонки.Добавить("Идентификатор"); - ПрефиксыЗданий.Колонки.Добавить("ТипСтатуса"); - ПрефиксыЗданий.Колонки.Добавить("Длина"); - - ДобавитьПрефиксЗданияКЛАДР("ДОМ", "Дом", "ESTSTAT", ПрефиксыЗданий); - ДобавитьПрефиксЗданияКЛАДР("ВЛД", "Владение", "ESTSTAT", ПрефиксыЗданий); - ДобавитьПрефиксЗданияКЛАДР("ДВЛД", "Домовладение", "ESTSTAT", ПрефиксыЗданий); - ДобавитьПрефиксЗданияКЛАДР("КОРПУС", "Корпус", "", ПрефиксыЗданий); - ДобавитьПрефиксЗданияКЛАДР("К", "Корпус", "", ПрефиксыЗданий); - ДобавитьПрефиксЗданияКЛАДР("СТР", "Строение", "STRSTAT", ПрефиксыЗданий); - ДобавитьПрефиксЗданияКЛАДР("СТРОЕНИЕ", "Строение", "STRSTAT", ПрефиксыЗданий); - ДобавитьПрефиксЗданияКЛАДР("ЛИТЕРА", "Литера", "STRSTAT", ПрефиксыЗданий); - ДобавитьПрефиксЗданияКЛАДР("ЛИТЕР", "Литера", "STRSTAT", ПрефиксыЗданий); - ДобавитьПрефиксЗданияКЛАДР("СООРУЖЕНИЕ", "Сооружение", "STRSTAT", ПрефиксыЗданий); - ДобавитьПрефиксЗданияКЛАДР("УЧАСТОК", "Участок", "STRSTAT", ПрефиксыЗданий); - - ПрефиксыЗданий.Сортировать("Длина УБЫВ, Префикс"); - - Возврат ПрефиксыЗданий; -КонецФункции - -Процедура ДобавитьПрефиксЗданияКЛАДР(Префикс, Идентификатор, ТипСтатуса, Таблица) - - Строка = Таблица.Добавить(); - Строка.Префикс = Префикс; - Строка.Идентификатор = Идентификатор; - Строка.ТипСтатуса = ТипСтатуса; - Строка.Длина = СтрДлина(Префикс); - -КонецПроцедуры - -// Расчет уровня ФИАС по набору кодов от младшего к старшим. -// -Функция УровеньПоИерархическимКодамЗаписи(Запись) - - Если Запись.КодПодчиненногоЭлемента > 0 Тогда - Возврат 91; - - ИначеЕсли Запись.КодДополнительногоЭлемента > 0 Тогда - Возврат 90; - - ИначеЕсли Запись.КодУлицы > 0 Тогда - Возврат 7; - - ИначеЕсли Запись.КодНаселенногоПункта > 0 Тогда - Возврат 6; - - ИначеЕсли Запись.КодВнутригородскогоРайона > 0 Тогда - Возврат 5; - - ИначеЕсли Запись.КодГорода > 0 Тогда - Возврат 4; - - ИначеЕсли Запись.КодРайона > 0 Тогда - Возврат 3; - - ИначеЕсли Запись.КодОкруга > 0 Тогда - Возврат 2; - - ИначеЕсли Запись.КодСубъектаРФ > 0 Тогда - Возврат 1; - - КонецЕсли; - - Возврат Неопределено; -КонецФункции - -Функция ИдентификаторДополнительныхСведенийКЛАДР(ТаблицаДополнительных, СубъектРФ, ОКАТО, КодИФНС, КодУчастка) - - Фильтр = Новый Структура; - Фильтр.Вставить("КодСубъектаРФ", СубъектРФ); - Фильтр.Вставить("OKATO", ОКАТО); - Фильтр.Вставить("ОКТМО", 0); - Фильтр.Вставить("КодИФНСФЛ", КодИФНС); - Фильтр.Вставить("КодИФНСЮЛ", КодИФНС); - Фильтр.Вставить("КодУчасткаИФНСФЛ", КодУчастка); - Фильтр.Вставить("КодУчасткаИФНСЮЛ", КодУчастка); - - ВариантыСтрок = ТаблицаДополнительных.НайтиСтроки(Фильтр); - Если ВариантыСтрок.Количество() = 0 Тогда - СтрокаКодов = ТаблицаДополнительных.Добавить(); - ЗаполнитьЗначенияСвойств(СтрокаКодов, Фильтр); - СтрокаКодов.Идентификатор = Новый УникальныйИдентификатор; - Иначе - СтрокаКодов = ВариантыСтрок[0]; - КонецЕсли; - - Возврат СтрокаКодов.Идентификатор; -КонецФункции - -// Формирует все записи по одной строк домов КЛАДР. -// -Процедура ДобавитьЗаписиДомовЗданийСтроенийКЛАДР(Описание, ПараметрыДомов, ДополнительныйИдентификатор, ТаблицыДанных) - - ДополнительныйИдентификаторСтрокой = УникальныйИдентификаторВСтроку64(ДополнительныйИдентификатор); - ДомаЗданияСтроения = ТаблицыДанных.ДомаЗданияСтроения; - - // Разбиваем описание на части. - ВариантыОписаний = ВРег(СтрЗаменить( СокрЛП(СтрЗаменить(Описание, ",", Символы.ПС)), " ", "")); - Для НомерСтроки = 1 По СтрЧислоСтрок(ВариантыОписаний) Цикл - ОдиночноеОписание = ВРег( СокрЛП( СтрПолучитьСтроку(ВариантыОписаний, НомерСтроки))); - Если ПустаяСтрока(ОдиночноеОписание) Тогда - Продолжить; - КонецЕсли; - - // Ищем куда добавлять - ВариантыЗаписей = ДомаЗданияСтроения.НайтиСтроки(ПараметрыДомов); - Если ВариантыЗаписей.Количество() = 0 Тогда - ЗаписьДомов = ДомаЗданияСтроения.Добавить(); - ЗаполнитьЗначенияСвойств(ЗаписьДомов, ПараметрыДомов); - ЗаписьДомов.СоответствиеСтроений = Новый Соответствие; - Иначе - ЗаписьДомов = ВариантыЗаписей[0]; - КонецЕсли; - - // Проверяем на диапазон - ОписаниеДиапазона = ОписаниеДиапазонаКЛАДР(ОдиночноеОписание, ТаблицыДанных); - Если ОписаниеДиапазона <> Неопределено Тогда - ДобавитьСтроковоеОписаниеСтроений(ЗаписьДомов.СоответствиеСтроений, ДополнительныйИдентификаторСтрокой, ОписаниеДиапазона); - - Иначе - // Проверяем на дом - ОписаниеЗдания = ОписаниеЗданияКЛАДР(ОдиночноеОписание, ТаблицыДанных); - Если ОписаниеЗдания <> Неопределено Тогда - ДобавитьСтроковоеОписаниеСтроений(ЗаписьДомов.СоответствиеСтроений, ДополнительныйИдентификаторСтрокой, ОписаниеЗдания); - КонецЕсли; - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - -// Модифицируем ОписаниеСтроений, добавляя Описание в строку с нужным ДополнительныйИдентификатор64. -// -Процедура ДобавитьСтроковоеОписаниеСтроений(СоответствиеСтроений, ДополнительныйИдентификатор64, Описание) - Разделитель = Символы.Таб; - - Строка = СоответствиеСтроений[ДополнительныйИдентификатор64]; - Если Строка = Неопределено Тогда - Строка = ДополнительныйИдентификатор64; - КонецЕсли; - - СоответствиеСтроений[ДополнительныйИдентификатор64] = Строка + Разделитель + Описание; -КонецПроцедуры - -// Возвращает строку описания диапазона в терминах ФИАС или Неопределено, если строка - не диапазон. -// -Функция ОписаниеДиапазонаКЛАДР(Описание, ТаблицыДанных) - - ПозицияДефиса = СтрНайти(Описание, "-"); - Символ = Лев(Описание, 1); - - Если Символ = "Н" Тогда - // Нечетный - Фильтр = Новый Структура("Тип, Значение", "INTVSTAT", "Нечетный"); - ИначеЕсли Символ = "Ч" Тогда - // Четный - Фильтр = Новый Структура("Тип, Значение", "INTVSTAT", "Четный"); - ИначеЕсли ПозицияДефиса > 0 И ЭтоЦифра(Символ) Тогда - // Обычный - Фильтр = Новый Структура("Тип, Значение", "INTVSTAT", "Обычный"); - Иначе - // Не диапазон - Возврат Неопределено - КонецЕсли; - - ВариантыТипов = ТаблицыДанных.СлужебныеАдресныеСведения.НайтиСтроки(Фильтр); - Если ВариантыТипов.Количество() = 0 Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка поиска типа диапазона для %1'"), Описание); - КонецЕсли; - - Разделитель = Символы.Таб; - Результат = "i" - + Разделитель + Формат(ВариантыТипов[0].Идентификатор, "ЧН=; ЧГ=") // Тип интервала - + Разделитель + ?(ПозицияДефиса = 0, "", Сред(Описание, 2, ПозицияДефиса - 2)) // Начало интервала - + Разделитель + ?(ПозицияДефиса = 0, "", Сред(Описание, ПозицияДефиса + 1)); // Конец интервала - - Возврат Результат; -КонецФункции - -// Возвращает строку описания здания в терминах ФИАС или Неопределено, если строка - не здание. -// -Функция ОписаниеЗданияКЛАДР(Описание, ТаблицыДанных) - - СлужебныеАдресныеСведения = ТаблицыДанных.СлужебныеАдресныеСведения; - ТипыЧастейЗдания = ТаблицыДанных.ТипыЧастейЗдания; - - СтруктураОписания = СтруктураОписанияЗданияКЛАДР(Описание, ТипыЧастейЗдания); - - ТипВладения = 0; - ТипСтроения = 0; - НомерКорпуса = ""; - НомерДома = ""; - НомерСтроения = ""; - - Для Каждого КлючЗначение Из СтруктураОписания Цикл - Значение = СокрЛП(КлючЗначение.Значение); - Ключ = КлючЗначение.Ключ; - - Если ПустаяСтрока(Значение) Тогда - Продолжить; - КонецЕсли; - - СтрокаОписания = ТипыЧастейЗдания.Найти(КлючЗначение.Ключ, "Идентификатор"); - Если СтрокаОписания = Неопределено Тогда - Продолжить; - КонецЕсли; - - ТипСтатуса = СтрокаОписания.ТипСтатуса; - Если ТипСтатуса = "" Тогда - // Корпус - НомерКорпуса = Значение; - Продолжить; - КонецЕсли; - - ВариантыТипов = СлужебныеАдресныеСведения.НайтиСтроки( Новый Структура("Тип, Значение", ТипСтатуса, Ключ) ); - Если ВариантыТипов.Количество() = 0 Тогда - Продолжить; - КонецЕсли; - Вариант = ВариантыТипов[0].Значение; - ТипВарианта = ВариантыТипов[0].Идентификатор; - Если Вариант = "Дом" Или Вариант = "Владение" Или Вариант = "Домовладение" Тогда - ТипВладения = ТипВарианта; - НомерДома = Значение; - Иначе - ТипСтроения = ТипВарианта; - НомерСтроения = Значение; - КонецЕсли; - - КонецЦикла; - - Если НомерДома = "" И НомерКорпуса = "" И НомерСтроения = "" Тогда - Возврат Неопределено; - КонецЕсли; - - Разделитель = Символы.Таб; - - Результат = "h" - + Разделитель + Формат(ТипВладения, "ЧН=; ЧГ=") - + Разделитель + НомерДома - + Разделитель + НомерКорпуса - + Разделитель + Формат(ТипСтроения, "ЧН=; ЧГ=") - + Разделитель + НомерСтроения; - - Возврат Результат; -КонецФункции - -Функция ЭтоЦифра(Символ) - - Возврат СтрНайти("0123456789", Символ) > 0; - -КонецФункции - -// Разбирает строковое описание отдельного здания КЛАДР. -// -// Параметры: -// Описание - Строка - Описание одиночного здания КЛАДР. -// ТипыЧастейЗдания - ТаблицаЗначений - Для разбора сокращений, результат функции ТипыЧастейЗдания. -// -// Возвращаемое значение: -// Структура - Ключ - идентификатор, значение - номер здания. -// Набор идентификаторов определяется по данным таблицы-результата ТипыЧастейЗдания. -// Неопределено - если описание не удалось распознать. -// -Функция СтруктураОписанияЗданияКЛАДР(Описание, ТипыЧастейЗдания) - - Текст = Описание; - Результат = Новый Структура; - - // Идентификатор по умолчанию для возможно пустого первого ключа. - Идентификатор = "Дом"; - Результат.Вставить(Идентификатор); - - ЕстьЕщеЧасти = Истина; - - Пока ЕстьЕщеЧасти Цикл - // Тип текущей части - Позиция = 1; - Для Каждого ТипЧасти Из ТипыЧастейЗдания Цикл - Если СтрНачинаетсяС(Текст, ТипЧасти.Префикс) Тогда - Идентификатор = ТипЧасти.Идентификатор; - Позиция = 1 + ТипЧасти.Длина; - Прервать; - КонецЕсли; - КонецЦикла; - Текст = Сред(Текст, Позиция); - - // Значение части - Позиция = 0; - Для Каждого ТипЧасти Из ТипыЧастейЗдания Цикл - // Ищем ближайший следующий тип, после которого должно быть значение. - ТестПозиции = СтрНайти(Текст, ТипЧасти.Префикс); - Если ТестПозиции > 0 // Нашли - И (Позиция = 0 Или ТестПозиции<Позиция) // Ближайший - И Не ПустаяСтрока(Сред(Текст, ТестПозиции + ТипЧасти.Длина, 1)) Тогда // Со значением - Позиция = ТестПозиции; - КонецЕсли; - КонецЦикла; - - ЕстьЕщеЧасти = Позиция > 0; - Если ЕстьЕщеЧасти Тогда - Значение = Лев(Текст, Позиция-1); - Текст = Сред(Текст, Позиция); - Иначе - Значение = Текст; - КонецЕсли; - - Результат.Вставить(Идентификатор, СтрЗаменить(Значение, "_", "-")); - КонецЦикла; - - Возврат Результат; КонецФункции #КонецОбласти @@ -7752,12 +4265,8 @@ // Функция ИсточникДанныхАдресногоКлассификатораВебСервис() Экспорт - Источник = ИсточникДанныхАдресногоКлассификатора(); - Если НЕ ПустаяСтрока(Источник) И Источник = "Сервис1С" Тогда - Возврат Истина; - КонецЕсли; - - Возврат Ложь; + СервисРезультат = ВерсияПоставщикаДанных(); + Возврат СервисРезультат.Данные = Истина; КонецФункции @@ -7795,44 +4304,54 @@ // СтрокаПоиска - Строка - Строка отбора. // ВариантыДомов - Список значений - Список домов. // -Процедура ИзвлечьСписокДомов(СтрокаСоСпискомДомов, СтрокаПоиска, ВариантыДомов, ТочноеСовпадение) +Процедура ИзвлечьСписокДомов(СтрокаСоСпискомДомов, СтрокаПоиска, ВариантыДомов, Запись, ТочноеСовпадение) ТипЧисло = Новый ОписаниеТипов("Число"); - СтрокаСоСпискомДомов = СтрЗаменить(СтрокаСоСпискомДомов, Символы.ПС, ""); - СтрокаСоСпискомДомов = ВРег(СтрЗаменить(СтрокаСоСпискомДомов, Символы.Таб, Символы.ПС)); - ЧислоСтрок = СтрЧислоСтрок(СтрокаСоСпискомДомов); - Позиция = 1; - Интервалы = Новый Массив; + МассивДомов = СтрРазделить(СтрокаСоСпискомДомов, Символы.Таб, Ложь); НаименованиеЗданийИСтроений = НаименованиеВладенийИСтроений(); - Пока Позиция <= ЧислоСтрок Цикл - Строка = СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция); + Для каждого Дом Из МассивДомов Цикл + ИдентификаторДома = Лев(Дом, 24); + НомерДома = СтрРазделить(Сред(Дом, 25), "~", Истина); - Если Строка = "H" Тогда - ОписаниеДома = ОписаниеДома(); - - ОписаниеДома.ВидВладения = ТипЧисло.ПривестиЗначение(СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 1)); - ОписаниеДома.Дом = СокрЛП(СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 2)); - ОписаниеДома.ДомЧислом = НомерДомаЧислом(ОписаниеДома.Дом); - ОписаниеДома.Корпус = СокрЛП(СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 3)); - ОписаниеДома.ВидСтроения = ТипЧисло.ПривестиЗначение(СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 4)); - ОписаниеДома.Строение = СокрЛП(СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 5)); - ОписаниеДома.НазваниеВладения = СокрЛП(НаименованиеЗданийИСтроений.Владения.Получить(ОписаниеДома.ВидВладения)); - - ПозицияУИД = СтрНайти(ОписаниеДома.Строение, "+"); - Если ПозицияУИД > 0 Тогда - ОписаниеДома.Строение = СокрЛП(Лев(ОписаниеДома.Строение, ПозицияУИД - 1)); + ОписаниеДома.Идентификатор = УникальныйИдентификаторИзСтроки64(Лев(Дом, 24)); + Если ЗначениеЗаполнено(НомерДома[0]) Тогда + ОписаниеДома.ВидВладения = ТипЧисло.ПривестиЗначение(Лев(НомерДома[0], 1)); + ОписаниеДома.Дом = Сред(НомерДома[0], 2); + ДомЧислом = Формат(НомерДомаЧислом(ОписаниеДома.Дом), "ЧЦ=4; ЧН=; ЧВН=; ЧГ=0; ЧФ=1Ч"); + Если ЗначениеЗаполнено(ОписаниеДома.ВидВладения) Тогда + ОписаниеДома.НазваниеВладения = НаименованиеЗданийИСтроений.Владения.Получить(ОписаниеДома.ВидВладения); + КонецЕсли; + Иначе + ДомЧислом = "10000"; КонецЕсли; + ОписаниеДома.Индекс = Формат(Запись.ПочтовыйИндекс, "ЧГ=0"); + ОписаниеДома.ОКТМО = Формат(Запись.ОКТМО, "ЧГ=0"); + + Если НомерДома.Количество() > 1 Тогда + ОписаниеДома.Корпус = НомерДома[1]; + КорпусЧислом = Формат(НомерДомаЧислом(ОписаниеДома.Корпус), "ЧЦ=4; ЧН=; ЧВН=; ЧГ=0; ЧФ=1Ч"); + Если НомерДома.Количество() > 2 Тогда + ОписаниеДома.ВидСтроения = ТипЧисло.ПривестиЗначение(НомерДома[2]); + Если НомерДома.Количество() > 3 Тогда + ОписаниеДома.Строение = НомерДома[3]; + КонецЕсли; + КонецЕсли; + Иначе + КорпусЧислом = "10000"; + КонецЕсли; + ОписаниеДома.ДомЧислом = ТипЧисло.ПривестиЗначение(ДомЧислом + КорпусЧислом); + Если ЗначениеЗаполнено(СтрокаПоиска) Тогда Если ТочноеСовпадение Тогда Если СтрСравнить(ОписаниеДома.Дом, СтрокаПоиска) = 0 Тогда ДобавитьИнформациюОДоме(ВариантыДомов, ОписаниеДома, НаименованиеЗданийИСтроений, СтрокаПоиска); КонецЕсли; Иначе - Если СтрНачинаетсяС(ОписаниеДома.Дом, СтрокаПоиска) Тогда + Если СтрНачинаетсяС(ОписаниеДома.Дом, СтрокаПоиска) Или (ПустаяСтрока(ОписаниеДома.Дом) И СтрНачинаетсяС(ОписаниеДома.Корпус, СтрокаПоиска)) Тогда ДобавитьИнформациюОДоме(ВариантыДомов, ОписаниеДома, НаименованиеЗданийИСтроений, СтрокаПоиска); КонецЕсли; КонецЕсли; @@ -7840,200 +4359,14 @@ ДобавитьИнформациюОДоме(ВариантыДомов, ОписаниеДома, НаименованиеЗданийИСтроений); КонецЕсли; - Позиция = Позиция + 5; - - ИначеЕсли Строка = "I" Тогда - - // Интервалы набираем для последующего добавления. - Интервал = Новый Структура; - Интервал.Вставить("Вид", ТипЧисло.ПривестиЗначение(СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 1))); - Интервал.Вставить("Начало", ТипЧисло.ПривестиЗначение(СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 2))); - Интервал.Вставить("Конец", ТипЧисло.ПривестиЗначение(СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 3))); - Интервалы.Добавить(Интервал); - - Позиция = Позиция + 3; - КонецЕсли; - - Позиция = Позиция + 1; - КонецЦикла; - - Для Каждого Интервал Из Интервалы Цикл - ВидИнтервала = Интервал.Вид; - - Для НомерВладения = Интервал.Начало По Интервал.Конец Цикл - - Если ВариантыДомов.Найти(НомерВладения, "ДомЧислом") = Неопределено Тогда - Если ПустаяСтрока(СтрокаПоиска) ИЛИ СтрНачинаетсяС(НомерВладения, СтрокаПоиска) Тогда - НомерДомаИСтроения = Новый Структура(); - - НазваниеВладения = НаименованиеЗданийИСтроений.Владения.Получить(0); - НомерДомаИСтроения.Вставить("Дом", Новый Структура("ВидВладения, НомерВладения", НазваниеВладения, НомерВладения)); - - ТекстДом = Новый ФорматированнаяСтрока(НазваниеВладения + " ", - Новый ФорматированнаяСтрока(СтрокаПоиска, Новый Шрифт(,, Истина) , ЦветаСтиля.РезультатУспехЦвет), - Сред(НомерВладения, СтрДлина(СтрокаПоиска) + 1)); - - ИнформацияОДоме = ВариантыДомов.Добавить(); - ИнформацияОДоме.ДомЧислом = НомерВладения; - ИнформацияОДоме.Дом = НомерВладения; - ИнформацияОДоме.Значение = НомерДомаИСтроения; - ИнформацияОДоме.Представление = ТекстДом; - КонецЕсли; - КонецЕсли; - - - Если ВидИнтервала = 2 ИЛИ ВидИнтервала = 3 Тогда - // Четный и нечетный интервал - НомерВладения = НомерВладения + 1; - КонецЕсли; - КонецЦикла; - КонецЦикла; КонецПроцедуры -// Извлекает список домов полученного из регистра сведения описания и добавляет их в список значений. -// -// Параметры: -// СтрокаСоСпискомДомов - Строка - описание списка домов из регистра сведения. -// СтрокаПоиска - Строка - Строка отбора. -// ВариантыДомов - Список значений - Список домов. -// -Функция ИдентификаторДома(СтрокаСоСпискомДомов, СведенияОДоме) - - Если СтрДлина(СтрокаСоСпискомДомов) > 25 Тогда - Идентификатор = УникальныйИдентификаторИзСтроки64(Лев(СтрокаСоСпискомДомов, 25)); - Иначе - Возврат Неопределено; - КонецЕсли; - СтрокаСоСпискомДомов = Сред(СтрокаСоСпискомДомов, 25); - - ТипЧисло = Новый ОписаниеТипов("Число"); - СтрокаСоСпискомДомов = СтрЗаменить(СтрокаСоСпискомДомов, Символы.ПС, ""); - СтрокаСоСпискомДомов = СтрЗаменить(СтрокаСоСпискомДомов, Символы.Таб, Символы.ПС); - ЧислоСтрок = СтрЧислоСтрок(СтрокаСоСпискомДомов); - Позиция = 1; - Интервалы = Новый Массив; - - НаименованиеЗданийИСтроений = НаименованиеВладенийИСтроений(); - - Пока Позиция <= ЧислоСтрок Цикл - Строка = СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция); - - Если Строка = "h" ИЛИ Строка = "H" Тогда - - ОписаниеДома = ОписаниеДома(); - - ОписаниеДома.ВидВладения = ТипЧисло.ПривестиЗначение(СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 1)); - ОписаниеДома.Дом = СокрЛП(СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 2)); - ОписаниеДома.ДомЧислом = НомерДомаЧислом(ОписаниеДома.Дом); - ОписаниеДома.Корпус = СокрЛП(СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 3)); - ОписаниеДома.ВидСтроения = ТипЧисло.ПривестиЗначение(СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 4)); - ОписаниеДома.Строение = СокрЛП(СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 5)); - ОписаниеДома.НазваниеВладения = СокрЛП(НаименованиеЗданийИСтроений.Владения.Получить(ОписаниеДома.ВидВладения)); - ОписаниеДома.НазваниеСтроения = СокрЛП(НаименованиеЗданийИСтроений.Строения.Получить(ОписаниеДома.ВидСтроения)); - - ПозицияУИД = СтрНайти(ОписаниеДома.Строение, "+"); - Если ПозицияУИД > 0 Тогда - Идентификатор = УникальныйИдентификаторИзСтроки64(Сред(ОписаниеДома.Строение, ПозицияУИД + 2, 25)); - ОписаниеДома.Строение = СокрЛП(Лев(ОписаниеДома.Строение, ПозицияУИД - 1)); - КонецЕсли; - - НомерДомаКорректный = Ложь; - НомерКорпусаКорректный = Ложь; - НомерСтроенияКорректный = Ложь; - - НомерДома = СведенияОДоме.Получить(ВРег(ОписаниеДома.НазваниеВладения)); - Если НомерДома <> Неопределено Тогда - НомерДомаКорректный = (СтрСравнить(НомерДома, ОписаниеДома.Дом) = 0); - ИначеЕсли НЕ ЗначениеЗаполнено(ОписаниеДома.Дом) ИЛИ ОписаниеДома.Дом = НСтр("ru = 'НЕТ'") Тогда - НомерДомаКорректный = Истина; - КонецЕсли; - - НомерКорпуса = СведенияОДоме.Получить("КОРПУС"); - Если НомерКорпуса <> Неопределено Тогда - НомерКорпусаКорректный = (СтрСравнить(НомерКорпуса, ОписаниеДома.Корпус) = 0); - ИначеЕсли НЕ ЗначениеЗаполнено(ОписаниеДома.Корпус) Тогда - НомерКорпусаКорректный = Истина; - КонецЕсли; - - НомерСтроения = СведенияОДоме.Получить(ВРег(ОписаниеДома.НазваниеСтроения)); - Если НомерСтроения <> Неопределено Тогда - НомерСтроенияКорректный = (СтрСравнить(НомерСтроения, ОписаниеДома.Строение) = 0); - ИначеЕсли НЕ ЗначениеЗаполнено(ОписаниеДома.Строение) Тогда - НомерСтроенияКорректный = Истина; - КонецЕсли; - - Если НомерСтроенияКорректный И НомерДомаКорректный И НомерКорпусаКорректный Тогда - Возврат Идентификатор; - КонецЕсли; - - Позиция = Позиция + 5; - - ИначеЕсли Строка = "i" ИЛИ Строка = "I" Тогда - - // Интервалы набираем для последующего добавления. - Интервал = Новый Структура; - Интервал.Вставить("Вид", ТипЧисло.ПривестиЗначение(СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 1))); - Интервал.Вставить("Начало", ТипЧисло.ПривестиЗначение(СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 2))); - Интервал.Вставить("Конец", ТипЧисло.ПривестиЗначение(СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 3))); - Интервалы.Добавить(Интервал); - - Позиция = Позиция + 3; - КонецЕсли; - - Позиция = Позиция + 1; - КонецЦикла; - - Возврат Неопределено; - -КонецФункции - - -Функция ИзвлечьСписокДомовСервис1С(ИдентификаторРодитель, СтрокаПоиска, ВариантыДомов) - - Если НЕ ЗначениеЗаполнено(ИдентификаторРодитель) Тогда - Возврат ВариантыДомов; - КонецЕсли; - - НаименованиеЗданийИСтроений = НаименованиеВладенийИСтроений(); - - Сервис = АдресныйКлассификаторПовтИсп.СервисКлассификатора1С(); - КодЯзыка = ТекущийКодЛокализации(); - - Порция = Сервис.Autocomplete(ИдентификаторРодитель, 0, НСтр("ru = 'ДОМ='") + СтрокаПоиска, 2000, КодЯзыка, Метаданные.Имя); - - Список = Порция.ПолучитьСписок("Item"); - Для Каждого Строка Из Список Цикл - - МассивДомов = СтрРазделить(Строка.Presentation, ","); - ОписаниеДома = ОписаниеДома(); - - Для каждого Дом Из МассивДомов Цикл - КлючЗначение = СтрРазделить(Дом, "="); - ТипАдресногоОбъекта = ВРег(КлючЗначение[0]); - Если ТипАдресногоОбъекта = НСтр("ru = 'ДОМ'") - ИЛИ ТипАдресногоОбъекта = НСтр("ru = 'ВЛАДЕНИЕ'") - ИЛИ ТипАдресногоОбъекта = НСтр("ru = 'ДОМОВЛАДЕНИЕ'") Тогда - ОписаниеДома.Дом = СокрЛП(КлючЗначение[1]); - ОписаниеДома.ДомЧислом = НомерДомаЧислом(КлючЗначение[1]); - ОписаниеДома.НазваниеВладения = ПерваяБукваЗаглавная(ТипАдресногоОбъекта); - ИначеЕсли ТипАдресногоОбъекта = "КОРПУС" Тогда - ОписаниеДома.Корпус = СокрЛП(КлючЗначение[1]); - ИначеЕсли ТипАдресногоОбъекта <> "ИНДЕКС" Тогда - ОписаниеДома.Строение = СокрЛП(КлючЗначение[1]); - ОписаниеДома.НазваниеСтроения = НРег(ТипАдресногоОбъекта); - КонецЕсли; - КонецЦикла; - - ДобавитьИнформациюОДоме(ВариантыДомов, ОписаниеДома, НаименованиеЗданийИСтроений, СтрокаПоиска); - КонецЦикла; - - Возврат ВариантыДомов; -КонецФункции - Функция ОписаниеДома() - ОписаниеДома = Новый Структура("ДомЧислом, Дом, Корпус, Строение, ВидСтроения, ВидВладения, НазваниеВладения, НазваниеСтроения"); + ОписаниеДома = Новый Структура("ДомЧислом, Дом, Корпус, Строение, ВидСтроения, ВидВладения, НазваниеВладения, НазваниеСтроения, Идентификатор"); + ОписаниеДома.Вставить("Индекс", ""); + ОписаниеДома.Вставить("ОКТМО", ""); ОписаниеДома.ВидВладения = 0; ОписаниеДома.ВидСтроения = 0; ОписаниеДома.НазваниеСтроения = ""; @@ -8042,20 +4375,32 @@ Процедура ДобавитьИнформациюОДоме(ВариантыДомов, ОписаниеДома, НаименованиеЗданийИСтроений, СтрокаПоиска = "") - НомерДомаИСтроения = Новый Структура(); + НомерДомаИСтроения = Новый Структура("Идентификатор,Индекс,ОКТМО"); НомерДомаИСтроения.Вставить("Дом", Новый Структура("ВидВладения, НомерВладения", ОписаниеДома.НазваниеВладения, ОписаниеДома.Дом)); Если ЗначениеЗаполнено(ОписаниеДома.Дом) Тогда - ТекстПроДом = Новый ФорматированнаяСтрока(ОписаниеДома.НазваниеВладения + " ", - Новый ФорматированнаяСтрока(СтрокаПоиска, Новый Шрифт(,, Истина) , ЦветаСтиля.РезультатУспехЦвет), - Сред(ОписаниеДома.Дом, СтрДлина(СтрокаПоиска) + 1)); + Если ПустаяСтрока(СтрокаПоиска) Или Не СтрНачинаетсяС(ОписаниеДома.Дом, СтрокаПоиска) Тогда + ТекстПроДом = ОписаниеДома.НазваниеВладения + " " + ОписаниеДома.Дом; + Иначе + ТекстПроДом = Новый ФорматированнаяСтрока(ОписаниеДома.НазваниеВладения + " ", + Новый ФорматированнаяСтрока(СтрокаПоиска, Новый Шрифт(,, Истина) , ЦветаСтиля.РезультатУспехЦвет), + Сред(ОписаниеДома.Дом, СтрДлина(СтрокаПоиска) + 1)); + КонецЕсли; Иначе ТекстПроДом = ""; КонецЕсли; Если ЗначениеЗаполнено(ОписаниеДома.Корпус) Тогда - ТекстПроСтроения = НСтр("ru = 'корпус'") + " " + ОписаниеДома.Корпус; + + Если ПустаяСтрока(СтрокаПоиска) Или Не СтрНачинаетсяС(ОписаниеДома.Корпус, СтрокаПоиска) Тогда + ТекстПроСтроения = НСтр("ru = 'корпус'") + " " + ОписаниеДома.Корпус; + Иначе + ТекстПроСтроения = Новый ФорматированнаяСтрока(НСтр("ru = 'корпус'") + " ", + Новый ФорматированнаяСтрока(СтрокаПоиска, Новый Шрифт(,, Истина) , ЦветаСтиля.РезультатУспехЦвет), + Сред(ОписаниеДома.Корпус, СтрДлина(СтрокаПоиска) + 1)); + КонецЕсли; + НомерДомаИСтроения.Вставить("Корпус", Новый Структура("ВидКорпуса, НомерКорпуса", "Корпус", ОписаниеДома.Корпус)); Иначе ТекстПроСтроения = ""; @@ -8066,39 +4411,35 @@ НРег(НаименованиеЗданийИСтроений.Строения.Получить(ОписаниеДома.ВидСтроения)), ОписаниеДома.НазваниеСтроения); Разделитель = ?(ПустаяСтрока(ТекстПроСтроения), "", ", "); - ТекстПроСтроения = ТекстПроСтроения + Разделитель + НазваниеСтроения + " " + СокрЛП(ОписаниеДома.Строение); + ТекстПроСтроения = Новый ФорматированнаяСтрока(ТекстПроСтроения, Разделитель + НазваниеСтроения + " " + СокрЛП(ОписаниеДома.Строение)); НомерДомаИСтроения.Вставить("Строение", Новый Структура("ВидСтроения, НомерСтроения", НазваниеСтроения, ОписаниеДома.Строение)); КонецЕсли; Если ЗначениеЗаполнено(ТекстПроДом) Тогда Разделитель = ?(ПустаяСтрока(ТекстПроСтроения), "", ", "); - ТекстПроДомФормат = Новый ФорматированнаяСтрока(ТекстПроДом, Разделитель + ТекстПроСтроения); + ТекстПроДомФормат = Новый ФорматированнаяСтрока(ТекстПроДом, Разделитель, ТекстПроСтроения); Иначе ТекстПроДомФормат = ТекстПроСтроения; КонецЕсли; ИнформацияОДоме = ВариантыДомов.Добавить(); ЗаполнитьЗначенияСвойств(ИнформацияОДоме, ОписаниеДома); - ИнформацияОДоме.Значение = НомерДомаИСтроения; - ИнформацияОДоме.Представление = ТекстПроДомФормат; + НомерДомаИСтроения.Идентификатор = ОписаниеДома.Идентификатор; + НомерДомаИСтроения.Индекс = ОписаниеДома.Индекс; + НомерДомаИСтроения.ОКТМО = ОписаниеДома.ОКТМО; + ИнформацияОДоме.Значение = НомерДомаИСтроения; + ИнформацияОДоме.Представление = ТекстПроДомФормат; КонецПроцедуры Функция НомерДомаЧислом(ИсходнаяСтрока) - ИтоговаяСтрока = ""; - ДлинаСтроки = СтрДлина(ИсходнаяСтрока); - Для Индекс = 1 По ДлинаСтроки Цикл - Символ = Сред(ИсходнаяСтрока, Индекс, 1); - Цифра = КодСимвола(Символ); - Если Цифра > 47 И Цифра < 58 Тогда - ИтоговаяСтрока = ИтоговаяСтрока + Символ; - Иначе - Прервать; - КонецЕсли; - КонецЦикла; + НаборСимволов = СтрРазделить(ИсходнаяСтрока, "0123456789", Ложь); + СимволыДляУдаления = СтрСоединить(НаборСимволов); + НаборЦифр = СтрРазделить(ИсходнаяСтрока, СимволыДляУдаления, Ложь); + ИтоговоеЧисло = СтрСоединить(НаборЦифр); - Возврат ?(ПустаяСтрока(ИтоговаяСтрока), 0, Число(ИтоговаяСтрока)); + Возврат ?(ПустаяСтрока(ИтоговоеЧисло), 0, Число(ИтоговоеЧисло)); КонецФункции // Информация о наименование владений и строений. @@ -8112,35 +4453,15 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ - | Расшифровка.Ключ КАК Значение, - | Расшифровка.Значение КАК ТипАдрЭл, - | ВЫБОР - | КОГДА НЕ ТипыВладения.Идентификатор ЕСТЬ NULL - | ТОГДА ТипыВладения.Тип - | КОГДА НЕ ТипыСтроения.Идентификатор ЕСТЬ NULL - | ТОГДА ТипыСтроения.Тип - | ИНАЧЕ 0 - | КОНЕЦ КАК Тип, - | ВЫБОР - | КОГДА НЕ ТипыВладения.Идентификатор ЕСТЬ NULL - | ТОГДА ТипыВладения.Идентификатор - | КОГДА НЕ ТипыСтроения.Идентификатор ЕСТЬ NULL - | ТОГДА ТипыСтроения.Идентификатор - | ИНАЧЕ 0 - | КОНЕЦ КАК Идентификатор + | СлужебныеАдресныеСведения.Тип КАК Тип, + | СлужебныеАдресныеСведения.Идентификатор КАК Идентификатор, + | СлужебныеАдресныеСведения.Ключ КАК Ключ, + | СлужебныеАдресныеСведения.Значение КАК Значение |ИЗ - | РегистрСведений.СлужебныеАдресныеСведения КАК Расшифровка - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СлужебныеАдресныеСведения КАК ТипыВладения - | ПО (ТипыВладения.Значение = Расшифровка.Ключ) - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СлужебныеАдресныеСведения КАК ТипыСтроения - | ПО (ТипыСтроения.Значение = Расшифровка.Ключ) + | РегистрСведений.СлужебныеАдресныеСведения КАК СлужебныеАдресныеСведения |ГДЕ - | Расшифровка.Тип = ""ДопАдрЭлНомер"" - | И (ТипыВладения.Тип = ""ESTSTAT"" - | ИЛИ ТипыСтроения.Тип = ""STRSTAT"") - | - |УПОРЯДОЧИТЬ ПО - | Тип"; + | СлужебныеАдресныеСведения.Тип = ""ESTSTAT"" + | ИЛИ СлужебныеАдресныеСведения.Тип = ""STRSTAT"""; РезультатЗапроса = Запрос.Выполнить().Выбрать(); @@ -8156,25 +4477,56 @@ КонецФункции -// Удаляет устаревшие данные КЛАДР. -// -Процедура ОчиститьУстаревшиеАдресныеСведенияКЛАДР(Параметры, АдресРезультата) Экспорт +Функция КодыДомовВладенийИСтроений() - УстановитьПривилегированныйРежим(Истина); + Результат = Новый Структура("Дома, Строения", Новый Соответствие, Новый Соответствие); Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 - | УдалитьАдресныйКлассификатор.Код + Запрос.Текст = + "ВЫБРАТЬ + | СлужебныеАдресныеСведения.Тип КАК Тип, + | СлужебныеАдресныеСведения.Идентификатор КАК Идентификатор, + | СлужебныеАдресныеСведения.Ключ КАК Ключ, + | СлужебныеАдресныеСведения.Значение КАК Значение |ИЗ - | РегистрСведений.УдалитьАдресныйКлассификатор КАК УдалитьАдресныйКлассификатор"; + | РегистрСведений.СлужебныеАдресныеСведения КАК СлужебныеАдресныеСведения + |ГДЕ + | (СлужебныеАдресныеСведения.Тип = ""ESTSTAT"" + | ИЛИ СлужебныеАдресныеСведения.Тип = ""STRSTAT"") + | И СлужебныеАдресныеСведения.Идентификатор > 0"; РезультатЗапроса = Запрос.Выполнить().Выбрать(); - Если РезультатЗапроса .Следующий() Тогда - ВесьРегистр = РегистрыСведений.УдалитьАдресныйКлассификатор.СоздатьНаборЗаписей(); - ОбновлениеИнформационнойБазы.ЗаписатьДанные(ВесьРегистр); - КонецЕсли; -КонецПроцедуры + Пока РезультатЗапроса.Следующий() Цикл + Если РезультатЗапроса.Тип = "ESTSTAT" Тогда + Результат.Дома.Вставить(ВРег(РезультатЗапроса.Значение), РезультатЗапроса.Идентификатор); + ИначеЕсли РезультатЗапроса.Тип = "STRSTAT" Тогда + Результат.Строения.Вставить(ВРег(РезультатЗапроса.Значение), РезультатЗапроса.Идентификатор); + КонецЕсли; + КонецЦикла; + + Результат.Строения.Вставить(ВРег(НСтр("ru='Корпус'")), -1); + + Возврат Результат; + +КонецФункции + +Функция КодыПомещений() + + Результат = Новый Соответствие; + Результат.Вставить(ВРег(НСтр("ru = 'Комната'")), 1); + Результат.Вставить(ВРег(НСтр("ru = 'Помещение'")), 2); + Результат.Вставить(ВРег(НСтр("ru = 'Квартира'")), 3); + Результат.Вставить(ВРег(НСтр("ru = 'Офис'")), 4); + Результат.Вставить(ВРег(НСтр("ru = 'Бокс'")), 5); + Результат.Вставить(ВРег(НСтр("ru = 'Этаж'")), 6); + Результат.Вставить(ВРег(НСтр("ru = 'А/я'")), 7); + Результат.Вставить(ВРег(НСтр("ru = 'В/ч'")), 8); + Результат.Вставить(ВРег(НСтр("ru = 'П/о'")), 9); + + Возврат Результат; + +КонецФункции // Загрузка всех данных классификатора адресов с сайта. // @@ -8185,7 +4537,7 @@ // * Логин - Строка - Данные авторизации. // * Пароль - Строка - Данные авторизации. // -Процедура ЗагрузитьКлассификаторАдресовССайта(КодыСубъектовРФ = Неопределено, ИсходнаяАвторизация = Неопределено) +Процедура ЗагрузитьКлассификаторАдресовССайта(КодыСубъектовРФ = Неопределено, ИсходнаяАвторизация = Неопределено, ЗагружатьИсториюАдресов = Ложь) Если НЕ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда Возврат; @@ -8238,7 +4590,7 @@ ОписаниеФайлов.Добавить( Новый Структура("Имя, Хранение", ПутьДляСохранения, ПутьДляСохранения) ); КонецЦикла; - ЗагрузитьКлассификаторАдресов(КодыСубъектовДляЗагрузки, ОписаниеФайлов); + ЗагрузитьКлассификаторАдресов(КодыСубъектовДляЗагрузки, ОписаниеФайлов,, ЗагружатьИсториюАдресов); УдалитьВременныйФайл(ВременныйКаталог); КонецПроцедуры @@ -8291,7 +4643,7 @@ // Функция АдресФайлаОписанияДоступныхВерсий() - Возврат "http://downloads.1c.ru/ipp/ITSREPV/V8Update/fias/version.zip"; + Возврат "http://downloads.1c.ru/ipp/ITSREPV/V8Update/fias2/version.zip"; КонецФункции @@ -8428,27 +4780,6 @@ Возврат Результат; КонецФункции -Процедура РассчитатьУровниСокращенийАдресныхСведений() - - Запрос = Новый Запрос(" - |ВЫБРАТЬ РАЗЛИЧНЫЕ - | Уровень КАК Уровень, - | Сокращение КАК Сокращение - |ИЗ - | РегистрСведений.АдресныеОбъекты - |ОБЪЕДИНИТЬ - |ВЫБРАТЬ - | Уровень, Сокращение - |ИЗ - | РегистрСведений.ИсторияАдресныхОбъектов"); - Варианты = Запрос.Выполнить().Выгрузить(); - - Сокращения = РегистрыСведений.УровниСокращенийАдресныхСведений.СоздатьНаборЗаписей(); - Сокращения.Загрузить(Варианты); - ОбновлениеИнформационнойБазы.ЗаписатьДанные(Сокращения); - -КонецПроцедуры - // Вычитываем справочную информацию и информацию о версии. // Функция СлужебныеАдресныеСведения(КодСубъектаРФ, КаталогФайлов) @@ -8460,18 +4791,37 @@ ТекущаяЗапись = Неопределено; ФайлЗагрузки = ФайлЗагрузкиСубъектаРФ(КодСубъектаРФ, КаталогФайлов, "ADDRSTATUS", "AddressStatuses"); - Пока СледующаяЗаписьФайлаЗагрузкиСубъектаРФ(ФайлЗагрузки, ТекущаяЗапись) Цикл + ТекущаяЗапись = ФайлЗагрузки.ФайлЧтения; + Пока ТекущаяЗапись.Прочитать() Цикл + + Если ТекущаяЗапись.ТипУзла <> ТипУзлаXML.НачалоЭлемента Тогда + Продолжить; + КонецЕсли; + + ТипЗаписи = ТекущаяЗапись.ЗначениеАтрибута("TYPE"); + Значение = ТекущаяЗапись.ЗначениеАтрибута("VALUE"); + + Если СтрСравнить(ТипЗаписи, "STRSTAT") = 0 + И ТекущаяЗапись.ЗначениеАтрибута("ID") = "3" + И СтрСравнить(Значение, "Литер") <> 0 Тогда + Продолжить; + КонецЕсли; + Запись = Сведения.Добавить(); - Запись.Тип = ТекущаяЗапись.TYPE; - Запись.Идентификатор = ТекущаяЗапись.ID; - Запись.Ключ = ТекущаяЗапись.KEY; - Запись.Значение = ТекущаяЗапись.VALUE; + Запись.Тип = ТипЗаписи; + Запись.Идентификатор = ТекущаяЗапись.ЗначениеАтрибута("ID"); + Запись.Ключ = ТекущаяЗапись.ЗначениеАтрибута("KEY"); + Запись.Значение = Значение; + КонецЦикла; + НенужныеСимволы = СтрСоединить(СтрРазделить(ФайлЗагрузки.ДатаВерсии, "0123456789")); + ДатаВерсии = Дата(СтрСоединить(СтрРазделить(ФайлЗагрузки.ДатаВерсии, НенужныеСимволы))); + Результат = Новый Структура("Сведения", Сведения); Результат.Вставить("Версия", ФайлЗагрузки.Версия); - Результат.Вставить("ДатаВерсии", ФайлЗагрузки.ДатаВерсии); + Результат.Вставить("ДатаВерсии", ДатаВерсии); ЗакрытьФайлЗагрузкиСубъектаРФ(ФайлЗагрузки); @@ -8486,9 +4836,9 @@ // Возвращаемое значение: // Булево - результат проверки. // -Функция ЭтоКонтактнаяИнформацияВXML(Знач Текст) +Функция ЭтоКонтактнаяИнформацияВJSON(Знач Текст) - Возврат ТипЗнч(Текст) = Тип("Строка") И СтрНачинаетсяС(СокрЛ(Текст), "<"); + Возврат ТипЗнч(Текст) = Тип("Строка") И СтрНачинаетсяС(СокрЛ(Текст), "{"); КонецФункции @@ -8503,12 +4853,21 @@ ТекущаяЗапись = Неопределено; ФайлЗагрузки = ФайлЗагрузкиСубъектаРФ(Неопределено, КаталогФайлов, "SOCRBASE", "AddressStatuses"); - Пока СледующаяЗаписьФайлаЗагрузкиСубъектаРФ(ФайлЗагрузки, ТекущаяЗапись) Цикл - Если ВРег(ТекущаяЗапись.TYPE) = "SOCRBASE" И ЗначениеЗаполнено(ТекущаяЗапись.KEY) Тогда + ТекущаяЗапись = ФайлЗагрузки.ФайлЧтения; + Пока ТекущаяЗапись.Прочитать() Цикл + + Если ТекущаяЗапись.ТипУзла <> ТипУзлаXML.НачалоЭлемента Тогда + Продолжить; + КонецЕсли; + + ТипЗаписи = ТекущаяЗапись.ЗначениеАтрибута("TYPE"); + Ключ = ТекущаяЗапись.ЗначениеАтрибута("KEY"); + + Если СтрСравнить(ТипЗаписи, "SOCRBASE") = 0 И ЗначениеЗаполнено(Ключ) Тогда Запись = Сведения.Добавить(); - Запись.Уровень = ТекущаяЗапись.ID; - Запись.Сокращение = ТекущаяЗапись.KEY; - Запись.Значение = ТекущаяЗапись.VALUE; + Запись.Уровень = ТекущаяЗапись.ЗначениеАтрибута("ID"); + Запись.Сокращение = Ключ; + Запись.Значение = ТекущаяЗапись.ЗначениеАтрибута("VALUE"); КонецЕсли; КонецЦикла; @@ -8521,12 +4880,6 @@ Возврат Результат; КонецФункции -Процедура ВставитьЧастьАдреса(Имя, Значение, ПоляАдреса) - Значение.Наименование = СтрЗаменить(Значение.Наименование, """", """"""); - Значение.Сокращение = СтрЗаменить(Значение.Сокращение, """", """"""); - ПоляАдреса.Вставить(Имя, Значение); -КонецПроцедуры - Процедура ЗагрузитьАдресныеОбъекты(КодСубъектаРФ, КаталогФайлов, ВидыСведений) Набор = РегистрыСведений.АдресныеОбъекты.СоздатьНаборЗаписей(); @@ -8534,27 +4887,32 @@ ФайлЗагрузки = ФайлЗагрузкиСубъектаРФ(КодСубъектаРФ, КаталогФайлов, "ADDROBJ", "AddressObjects"); - ТекущаяЗапись = Неопределено; - Пока СледующаяЗаписьФайлаЗагрузкиСубъектаРФ(ФайлЗагрузки, ТекущаяЗапись)Цикл + Если ФайлЗагрузки = Неопределено Тогда + ВызватьИсключение НСтр("ru='Загрузка адресных сведений прервана. В загружаемых файлах не найден файл с адресными сведениями.'"); + Возврат; + КонецЕсли; + + ТекущаяЗапись = ФайлЗагрузки.ФайлЧтения; + Пока ТекущаяЗапись.Прочитать() Цикл + + Если ТекущаяЗапись.ТипУзла <> ТипУзлаXML.НачалоЭлемента Тогда + Продолжить; + КонецЕсли; + Запись = Набор.Добавить(); - Запись.КодСубъектаРФ = ТекущаяЗапись.REGIONCODE; - Запись.КодОкруга = ТекущаяЗапись.AUTOCODE; - Запись.КодРайона = ТекущаяЗапись.AREACODE; - Запись.КодГорода = ТекущаяЗапись.CITYCODE; - Запись.КодВнутригородскогоРайона = ТекущаяЗапись.CTARCODE; - Запись.КодНаселенногоПункта = ТекущаяЗапись.PLACECODE; - Запись.КодУлицы = ТекущаяЗапись.STREETCODE; - Запись.КодДополнительногоЭлемента = ТекущаяЗапись.EXTRCODE; - Запись.КодПодчиненногоЭлемента = ТекущаяЗапись.SEXTCODE; - Запись.Уровень = ТекущаяЗапись.AOLEVEL; - Запись.Идентификатор = УникальныйИдентификаторИзДвоичныхДанных(ТекущаяЗапись.AOGUID); - Запись.ПочтовыйИндекс = ТекущаяЗапись.POSTALCODE; - Запись.Наименование = ТекущаяЗапись.FORMALNAME; - Запись.Сокращение = ТекущаяЗапись.SHORTNAME; - Запись.Дополнительно = УникальныйИдентификаторИзДвоичныхДанных(ТекущаяЗапись.EXTRAGUID); - Запись.КодКЛАДР = ТекущаяЗапись.CODE; - Запись.Актуален = ?(ТекущаяЗапись.CURRSTATUS = 0, Истина, Ложь); + Запись.КодСубъектаРФ = КодСубъектаРФ; + Запись.Уровень = ТекущаяЗапись.ЗначениеАтрибута("AOLEVEL"); + Запись.Идентификатор = УникальныйИдентификаторИзСтроки64(ТекущаяЗапись.ЗначениеАтрибута("AOGUID")); + Если Запись.Уровень > 1 Тогда + Запись.РодительскийИдентификатор = УникальныйИдентификаторИзСтроки64(ТекущаяЗапись.ЗначениеАтрибута("PARENTGUID")); + Запись.МуниципальныйРодительскийИдентификатор = УникальныйИдентификаторИзСтроки64(ТекущаяЗапись.ЗначениеАтрибута("PARENTGUIDMUN")); + КонецЕсли; + + Запись.Наименование = ТекущаяЗапись.ЗначениеАтрибута("FORMALNAME"); + Запись.Сокращение = ТекущаяЗапись.ЗначениеАтрибута("SHORTNAME"); + Запись.ДополнительныеАдресныеСведения = УникальныйИдентификаторИзСтроки64(ТекущаяЗапись.ЗначениеАтрибута("EXTRAGUID")); + Запись.КодКЛАДР = ТекущаяЗапись.ЗначениеАтрибута("CODE"); КонецЦикла; ОбновлениеИнформационнойБазы.ЗаписатьДанные(Набор); @@ -8565,87 +4923,8 @@ Процедура ЗагрузитьДомаЗданияСтроения(КодСубъектаРФ, КаталогФайлов, ВидыСведений) ФайлЗагрузки = ФайлЗагрузкиСубъектаРФ(КодСубъектаРФ, КаталогФайлов, "HOUSE", "Houses"); - СистемнаяИнформация = Новый СистемнаяИнформация; + ЗагрузитьДомаЗданияСтроенияОднимНабором(КодСубъектаРФ, ФайлЗагрузки); - Если ФайлЗагрузки.РазмерФайла > 10485760 И СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 Тогда - ЗагрузитьДомаЗданияСтроенияПорциями(КодСубъектаРФ, ФайлЗагрузки); - Иначе - ЗагрузитьДомаЗданияСтроенияОднимНабором(КодСубъектаРФ, ФайлЗагрузки); - КонецЕсли; - -КонецПроцедуры - -Процедура ЗагрузитьДомаЗданияСтроенияПорциями(КодСубъектаРФ, ФайлЗагрузки) - - ВременнаяТаблица = Новый ТаблицаЗначений; - ВременнаяТаблица.Колонки.Добавить("КодСубъектаРФ", Новый ОписаниеТипов("Число")); - ВременнаяТаблица.Колонки.Добавить("АдресныйОбъект", Новый ОписаниеТипов("УникальныйИдентификатор")); - ВременнаяТаблица.Колонки.Добавить("ПочтовыйИндекс", Новый ОписаниеТипов("Число")); - ВременнаяТаблица.Колонки.Добавить("Строения"); - ВременнаяТаблица.Индексы.Добавить("ПочтовыйИндекс"); - - Индексы = Новый Соответствие; - - Сжатие = Новый СжатиеДанных(9); - - Набор = РегистрыСведений.ДомаЗданияСтроения.СоздатьНаборЗаписей(); - Набор.Отбор.КодСубъектаРФ.Установить(КодСубъектаРФ); - - КлючевыеКолонки = "КодСубъектаРФ, АдресныйОбъект, ПочтовыйИндекс"; - Таблица = Набор.ВыгрузитьКолонки(КлючевыеКолонки); - Таблица.Индексы.Добавить(КлючевыеКолонки); - Фильтр = Новый Структура(КлючевыеКолонки); - - ТекущаяЗапись = Неопределено; - Пока СледующаяЗаписьФайлаЗагрузкиСубъектаРФ(ФайлЗагрузки, ТекущаяЗапись) Цикл - - Фильтр.КодСубъектаРФ = КодСубъектаРФ; - Фильтр.АдресныйОбъект = УникальныйИдентификаторИзДвоичныхДанных(ТекущаяЗапись.AOGUID); - Фильтр.ПочтовыйИндекс = ТекущаяЗапись.POSTALCODE; - Если Таблица.НайтиСтроки(Фильтр).Количество() > 0 Тогда - Продолжить; - КонецЕсли; - - Индексы.Вставить(ТекущаяЗапись.POSTALCODE, Истина); - - НоваяСтрока = ВременнаяТаблица.Добавить(); - НоваяСтрока.КодСубъектаРФ = КодСубъектаРФ; - НоваяСтрока.АдресныйОбъект = УникальныйИдентификаторИзДвоичныхДанных(ТекущаяЗапись.AOGUID); - НоваяСтрока.ПочтовыйИндекс = ТекущаяЗапись.POSTALCODE; - - ОписаниеЗданийXDTO = ТекущаяЗапись.ПолучитьXDTO("BUILDINGS"); - НоваяСтрока.Строения = Новый ХранилищеЗначения(ОписаниеЗданийXDTO.ЛексическоеЗначение, Сжатие); - - ЗаполнитьЗначенияСвойств(Таблица.Добавить(), НоваяСтрока); - КонецЦикла; - ЗакрытьФайлЗагрузкиСубъектаРФ(ФайлЗагрузки); - ФайлЗагрузки = Неопределено; - - Таблица = Неопределено; - - Для каждого Индекс Из Индексы Цикл - - Отбор = Новый Структура("ПочтовыйИндекс", Индекс.Ключ); - НайденныеСтроки = ВременнаяТаблица.НайтиСтроки(Отбор); - - Набор = РегистрыСведений.ДомаЗданияСтроения.СоздатьНаборЗаписей(); - Набор.Отбор.КодСубъектаРФ.Установить(КодСубъектаРФ); - Набор.Отбор.ПочтовыйИндекс.Установить(Индекс.Ключ); - - Для каждого Строка Из НайденныеСтроки Цикл - - Запись = Набор.Добавить(); - Запись.КодСубъектаРФ = КодСубъектаРФ; - Запись.АдресныйОбъект = Строка.АдресныйОбъект; - Запись.ПочтовыйИндекс = Строка.ПочтовыйИндекс; - Запись.Строения = Строка.Строения; - - КонецЦикла; - - ОбновлениеИнформационнойБазы.ЗаписатьДанные(Набор); - Набор = Неопределено; - КонецЦикла; - КонецПроцедуры Процедура ЗагрузитьДомаЗданияСтроенияОднимНабором(КодСубъектаРФ, ФайлЗагрузки) @@ -8655,31 +4934,21 @@ Набор = РегистрыСведений.ДомаЗданияСтроения.СоздатьНаборЗаписей(); Набор.Отбор.КодСубъектаРФ.Установить(КодСубъектаРФ); - КлючевыеКолонки = "КодСубъектаРФ, АдресныйОбъект, ПочтовыйИндекс"; - Таблица = Набор.ВыгрузитьКолонки(КлючевыеКолонки); - Таблица.Индексы.Добавить(КлючевыеКолонки); - Фильтр = Новый Структура(КлючевыеКолонки); - - ТекущаяЗапись = Неопределено; - Пока СледующаяЗаписьФайлаЗагрузкиСубъектаРФ(ФайлЗагрузки, ТекущаяЗапись) Цикл + ТекущаяЗапись = ФайлЗагрузки.ФайлЧтения; + + Пока ТекущаяЗапись.Прочитать() Цикл - Фильтр.КодСубъектаРФ = КодСубъектаРФ; - Фильтр.АдресныйОбъект = УникальныйИдентификаторИзДвоичныхДанных(ТекущаяЗапись.AOGUID); - Фильтр.ПочтовыйИндекс = ТекущаяЗапись.POSTALCODE; - Если Таблица.НайтиСтроки(Фильтр).Количество() > 0 Тогда + Если ТекущаяЗапись.ТипУзла <> ТипУзлаXML.НачалоЭлемента Тогда Продолжить; КонецЕсли; Запись = Набор.Добавить(); Запись.КодСубъектаРФ = КодСубъектаРФ; - Запись.АдресныйОбъект = УникальныйИдентификаторИзДвоичныхДанных(ТекущаяЗапись.AOGUID); - Запись.ПочтовыйИндекс = ТекущаяЗапись.POSTALCODE; + Запись.АдресныйОбъект = УникальныйИдентификаторИзСтроки64(ТекущаяЗапись.ЗначениеАтрибута("AOGUID")); + Запись.ДополнительныеАдресныеСведения = УникальныйИдентификаторИзСтроки64(ТекущаяЗапись.ЗначениеАтрибута("EXTRAGUID")); + Запись.Строения = Новый ХранилищеЗначения(ТекущаяЗапись.ЗначениеАтрибута("BUILDINGS"), Сжатие); - ОписаниеЗданийXDTO = ТекущаяЗапись.ПолучитьXDTO("BUILDINGS"); - Запись.Строения = Новый ХранилищеЗначения(ОписаниеЗданийXDTO.ЛексическоеЗначение, Сжатие); - - ЗаполнитьЗначенияСвойств(Таблица.Добавить(), Запись); КонецЦикла; ОбновлениеИнформационнойБазы.ЗаписатьДанные(Набор); @@ -8687,27 +4956,46 @@ КонецПроцедуры -Процедура ЗагрузитьДополнительныеСведения(КодСубъектаРФ, КаталогФайлов, ВидыСведений) +Процедура ЗагрузитьДополнительныеСведения(КодСубъектаРФ, КаталогФайлов, ВидыСведений, ЗагружатьИсториюИзменений) Набор = РегистрыСведений.ДополнительныеАдресныеСведения.СоздатьНаборЗаписей(); Набор.Отбор.КодСубъектаРФ.Установить(КодСубъектаРФ); - ФайлЗагрузки = ФайлЗагрузкиСубъектаРФ(КодСубъектаРФ, КаталогФайлов, "EXTRAINFO", "AdditionalAddressInfo"); + ЗагрузитьВНаборДополнительныеСведенияИзФайла(Набор, "EXTRAACT", КаталогФайлов, КодСубъектаРФ); - ТекущаяЗапись = Неопределено; - Пока СледующаяЗаписьФайлаЗагрузкиСубъектаРФ(ФайлЗагрузки, ТекущаяЗапись) Цикл + Если ЗагружатьИсториюИзменений Тогда + ЗагрузитьВНаборДополнительныеСведенияИзФайла(Набор, "EXTRAHIS", КаталогФайлов, КодСубъектаРФ); + КонецЕсли; + + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Набор); + +КонецПроцедуры + +Процедура ЗагрузитьВНаборДополнительныеСведенияИзФайла(Набор, Знач ИмяФайла, Знач КаталогФайлов, Знач КодСубъектаРФ) + + ФайлЗагрузки = ФайлЗагрузкиСубъектаРФ(КодСубъектаРФ, КаталогФайлов, ИмяФайла, "AdditionalAddressInfo"); + + ТекущаяЗапись = ФайлЗагрузки.ФайлЧтения; + + Пока ТекущаяЗапись.Прочитать() Цикл + + Если ТекущаяЗапись.ТипУзла <> ТипУзлаXML.НачалоЭлемента Тогда + Продолжить; + КонецЕсли; + Запись = Набор.Добавить(); Запись.КодСубъектаРФ = КодСубъектаРФ; - Запись.Идентификатор = УникальныйИдентификаторИзДвоичныхДанных(ТекущаяЗапись.EXTRAGUID); - Запись.OKATO = ТекущаяЗапись.OKATO; - Запись.ОКТМО = ТекущаяЗапись.OKTMO; - Запись.КодИФНСФЛ = ТекущаяЗапись.IFNSFL; - Запись.КодИФНСЮЛ = ТекущаяЗапись.IFNSUL; - Запись.КодУчасткаИФНСФЛ = ТекущаяЗапись.TERRIFNSFL; - Запись.КодУчасткаИФНСЮЛ = ТекущаяЗапись.TERRIFNSUL; + Запись.Идентификатор = УникальныйИдентификаторИзСтроки64(ТекущаяЗапись.ЗначениеАтрибута("EXTRAGUID")); + + Запись.ПочтовыйИндекс = ТекущаяЗапись.ЗначениеАтрибута("POSTALCODE"); + Запись.OKATO = ТекущаяЗапись.ЗначениеАтрибута("OKATO"); + Запись.ОКТМО = ТекущаяЗапись.ЗначениеАтрибута("OKTMO"); + Запись.КодИФНСФЛ = ТекущаяЗапись.ЗначениеАтрибута("IFNSFL"); + Запись.КодИФНСЮЛ = ТекущаяЗапись.ЗначениеАтрибута("IFNSUL"); + Запись.КодУчасткаИФНСФЛ = ТекущаяЗапись.ЗначениеАтрибута("TERRIFNSFL"); + Запись.КодУчасткаИФНСЮЛ = ТекущаяЗапись.ЗначениеАтрибута("TERRIFNSUL"); КонецЦикла; - ОбновлениеИнформационнойБазы.ЗаписатьДанные(Набор); ЗакрытьФайлЗагрузкиСубъектаРФ(ФайлЗагрузки); КонецПроцедуры @@ -8715,138 +5003,55 @@ Процедура ЗагрузитьИсториюАдресныхОбъектов(КодСубъектаРФ, КаталогФайлов, ВидыСведений) ФайлЗагрузки = ФайлЗагрузкиСубъектаРФ(КодСубъектаРФ, КаталогФайлов, "ARCHOBJ", "ArchiveObjects"); - СистемнаяИнформация = Новый СистемнаяИнформация; - Если ФайлЗагрузки.РазмерФайла > 10485760 И СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 Тогда - ЗагрузитьИсториюАдресныхОбъектовПорциями(КодСубъектаРФ, ФайлЗагрузки); - Иначе - ЗагрузитьИсториюАдресныхОбъектовОднимНабором(КодСубъектаРФ, ФайлЗагрузки); + Если ФайлЗагрузки = Неопределено Тогда + ВызватьИсключение НСтр("ru='Загрузка адресных сведений прервана. В загружаемых файлах не найден файл с адресными сведениями.'"); + Возврат; КонецЕсли; -КонецПроцедуры - -Процедура ЗагрузитьИсториюАдресныхОбъектовПорциями(КодСубъектаРФ, ФайлЗагрузки) - - ВременнаяТаблица = Новый ТаблицаЗначений; - ВременнаяТаблица.Колонки.Добавить("Уровень", ОбщегоНазначения.ОписаниеТипаЧисло(2)); - ВременнаяТаблица.Колонки.Добавить("КодСубъектаРФ", ОбщегоНазначения.ОписаниеТипаЧисло(2)); - ВременнаяТаблица.Колонки.Добавить("КодОкруга", ОбщегоНазначения.ОписаниеТипаЧисло(1)); - ВременнаяТаблица.Колонки.Добавить("КодРайона", ОбщегоНазначения.ОписаниеТипаЧисло(3)); - ВременнаяТаблица.Колонки.Добавить("КодГорода", ОбщегоНазначения.ОписаниеТипаЧисло(3)); - ВременнаяТаблица.Колонки.Добавить("КодВнутригородскогоРайона", ОбщегоНазначения.ОписаниеТипаЧисло(3)); - ВременнаяТаблица.Колонки.Добавить("КодНаселенногоПункта", ОбщегоНазначения.ОписаниеТипаЧисло(3)); - ВременнаяТаблица.Колонки.Добавить("КодУлицы", ОбщегоНазначения.ОписаниеТипаЧисло(4)); - ВременнаяТаблица.Колонки.Добавить("КодДополнительногоЭлемента", ОбщегоНазначения.ОписаниеТипаЧисло(4)); - ВременнаяТаблица.Колонки.Добавить("КодПодчиненногоЭлемента", ОбщегоНазначения.ОписаниеТипаЧисло(3)); - ВременнаяТаблица.Колонки.Добавить("ТекущийКодСубъектаРФ", ОбщегоНазначения.ОписаниеТипаЧисло(2)); - - ВременнаяТаблица.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("УникальныйИдентификатор")); - - ВременнаяТаблица.Колонки.Добавить("ПочтовыйИндекс", Новый ОписаниеТипов("Число")); - ВременнаяТаблица.Колонки.Добавить("Наименование", ОбщегоНазначения.ОписаниеТипаСтрока(120)); - ВременнаяТаблица.Колонки.Добавить("Сокращение", ОбщегоНазначения.ОписаниеТипаСтрока(10)); - ВременнаяТаблица.Колонки.Добавить("Дополнительно", Новый ОписаниеТипов("УникальныйИдентификатор")); - ВременнаяТаблица.Колонки.Добавить("КодКЛАДР", ОбщегоНазначения.ОписаниеТипаЧисло(17)); - ВременнаяТаблица.Колонки.Добавить("АдресныйОбъект", Новый ОписаниеТипов("УникальныйИдентификатор")); - ВременнаяТаблица.Колонки.Добавить("НачалоДействияЗаписи", ОбщегоНазначения.ОписаниеТипаДата(ЧастиДаты.ДатаВремя)); - ВременнаяТаблица.Колонки.Добавить("ОкончаниеДействияЗаписи", ОбщегоНазначения.ОписаниеТипаДата(ЧастиДаты.ДатаВремя)); - ВременнаяТаблица.Колонки.Добавить("Операция", ОбщегоНазначения.ОписаниеТипаЧисло(2)); - - ВременнаяТаблица.Индексы.Добавить("КодРайона"); - - КодыРайонов = Новый Соответствие; - - ТекущаяЗапись = Неопределено; - Пока СледующаяЗаписьФайлаЗагрузкиСубъектаРФ(ФайлЗагрузки, ТекущаяЗапись) Цикл - - НоваяСтрока = ВременнаяТаблица.Добавить(); - - НоваяСтрока.Уровень = ТекущаяЗапись.AOLEVEL; - НоваяСтрока.КодСубъектаРФ = ТекущаяЗапись.REGIONCODE; - НоваяСтрока.КодОкруга = ТекущаяЗапись.AUTOCODE; - НоваяСтрока.КодРайона = ТекущаяЗапись.AREACODE; - НоваяСтрока.КодГорода = ТекущаяЗапись.CITYCODE; - НоваяСтрока.КодВнутригородскогоРайона = ТекущаяЗапись.CTARCODE; - НоваяСтрока.КодНаселенногоПункта = ТекущаяЗапись.PLACECODE; - НоваяСтрока.КодУлицы = ТекущаяЗапись.STREETCODE; - НоваяСтрока.КодДополнительногоЭлемента = ТекущаяЗапись.EXTRCODE; - НоваяСтрока.КодПодчиненногоЭлемента = ТекущаяЗапись.SEXTCODE; - НоваяСтрока.Идентификатор = УникальныйИдентификаторИзДвоичныхДанных(ТекущаяЗапись.AOID); - НоваяСтрока.ТекущийКодСубъектаРФ = КодСубъектаРФ; - - НоваяСтрока.ПочтовыйИндекс = ТекущаяЗапись.POSTALCODE; - НоваяСтрока.Наименование = ТекущаяЗапись.FORMALNAME; - НоваяСтрока.Сокращение = ТекущаяЗапись.SHORTNAME; - НоваяСтрока.Дополнительно = УникальныйИдентификаторИзДвоичныхДанных(ТекущаяЗапись.EXTRAGUID); - НоваяСтрока.КодКЛАДР = ТекущаяЗапись.CODE; - НоваяСтрока.АдресныйОбъект = УникальныйИдентификаторИзДвоичныхДанных(ТекущаяЗапись.AOGUID); - НоваяСтрока.НачалоДействияЗаписи = ТекущаяЗапись.STARTDATE; - НоваяСтрока.ОкончаниеДействияЗаписи = ТекущаяЗапись.ENDDATE; - НоваяСтрока.Операция = ТекущаяЗапись.OPERSTATUS; - - КодыРайонов.Вставить(НоваяСтрока.КодРайона, Истина); - ТекущаяЗапись = Неопределено; - КонецЦикла; - - ЗакрытьФайлЗагрузкиСубъектаРФ(ФайлЗагрузки); - - ФайлЗагрузки = Неопределено; - - Для каждого КодРайона Из КодыРайонов Цикл - Отбор = Новый Структура("КодРайона", КодРайона.Ключ); - НайденныеСтроки = ВременнаяТаблица.НайтиСтроки(Отбор); - Набор = РегистрыСведений.ИсторияАдресныхОбъектов.СоздатьНаборЗаписей(); - Набор.Отбор.КодСубъектаРФ.Установить(КодСубъектаРФ); - Набор.Отбор.КодРайона.Установить(КодРайона.Ключ); - - Для каждого Строка Из НайденныеСтроки Цикл - Запись = Набор.Добавить(); - ЗаполнитьЗначенияСвойств(Запись, Строка); - КонецЦикла; - ОбновлениеИнформационнойБазы.ЗаписатьДанные(Набор); - Набор = Неопределено; - НайденныеСтроки = Неопределено; - КонецЦикла; - -КонецПроцедуры - -Процедура ЗагрузитьИсториюАдресныхОбъектовОднимНабором(Знач КодСубъектаРФ, Знач ФайлЗагрузки) - Набор = РегистрыСведений.ИсторияАдресныхОбъектов.СоздатьНаборЗаписей(); Набор.Отбор.КодСубъектаРФ.Установить(КодСубъектаРФ); - ТекущаяЗапись = Неопределено; - Пока СледующаяЗаписьФайлаЗагрузкиСубъектаРФ(ФайлЗагрузки, ТекущаяЗапись) Цикл + ТекущаяЗапись = ФайлЗагрузки.ФайлЧтения; + + Пока ТекущаяЗапись.Прочитать() Цикл + + Если ТекущаяЗапись.ТипУзла <> ТипУзлаXML.НачалоЭлемента Тогда + Продолжить; + КонецЕсли; Запись = Набор.Добавить(); - Запись.Уровень = ТекущаяЗапись.AOLEVEL; - Запись.КодСубъектаРФ = ТекущаяЗапись.REGIONCODE; - Запись.КодОкруга = ТекущаяЗапись.AUTOCODE; - Запись.КодРайона = ТекущаяЗапись.AREACODE; - Запись.КодГорода = ТекущаяЗапись.CITYCODE; - Запись.КодВнутригородскогоРайона = ТекущаяЗапись.CTARCODE; - Запись.КодНаселенногоПункта = ТекущаяЗапись.PLACECODE; - Запись.КодУлицы = ТекущаяЗапись.STREETCODE; - Запись.КодДополнительногоЭлемента = ТекущаяЗапись.EXTRCODE; - Запись.КодПодчиненногоЭлемента = ТекущаяЗапись.SEXTCODE; - Запись.Идентификатор = УникальныйИдентификаторИзДвоичныхДанных(ТекущаяЗапись.AOID); + + Запись.КодСубъектаРФ = КодСубъектаРФ; + Запись.Уровень = ТекущаяЗапись.ЗначениеАтрибута("AOLEVEL"); + + Запись.Идентификатор = УникальныйИдентификаторИзСтроки64(ТекущаяЗапись.ЗначениеАтрибута("AOID")); + Запись.АдресныйОбъект = УникальныйИдентификаторИзСтроки64(ТекущаяЗапись.ЗначениеАтрибута("AOGUID")); + Запись.РодительскийИдентификатор = УникальныйИдентификаторИзСтроки64(ТекущаяЗапись.ЗначениеАтрибута("PARENTGUID")); + Запись.МуниципальныйРодительскийИдентификатор = УникальныйИдентификаторИзСтроки64(ТекущаяЗапись.ЗначениеАтрибута("PARENTGUIDMUN")); + Запись.ДополнительныеАдресныеСведения = УникальныйИдентификаторИзСтроки64(ТекущаяЗапись.ЗначениеАтрибута("EXTRAGUID")); + + Запись.Наименование = ТекущаяЗапись.ЗначениеАтрибута("FORMALNAME"); + Запись.Сокращение = ТекущаяЗапись.ЗначениеАтрибута("SHORTNAME"); + Запись.Операция = ТекущаяЗапись.ЗначениеАтрибута("OPERSTATUS"); + + Если ЗначениеЗаполнено(ТекущаяЗапись.ЗначениеАтрибута("STARTDATE")) Тогда + Запись.НачалоДействияЗаписи = Дата(ТекущаяЗапись.ЗначениеАтрибута("STARTDATE")); + КонецЕсли; + + Если ЗначениеЗаполнено(ТекущаяЗапись.ЗначениеАтрибута("ENDDATE")) Тогда + Запись.ОкончаниеДействияЗаписи = Дата(ТекущаяЗапись.ЗначениеАтрибута("ENDDATE")); + КонецЕсли; + Запись.ТекущийКодСубъектаРФ = КодСубъектаРФ; - Запись.ПочтовыйИндекс = ТекущаяЗапись.POSTALCODE; - Запись.Наименование = ТекущаяЗапись.FORMALNAME; - Запись.Сокращение = ТекущаяЗапись.SHORTNAME; - Запись.Дополнительно = УникальныйИдентификаторИзДвоичныхДанных(ТекущаяЗапись.EXTRAGUID); - Запись.КодКЛАДР = ТекущаяЗапись.CODE; - Запись.АдресныйОбъект = УникальныйИдентификаторИзДвоичныхДанных(ТекущаяЗапись.AOGUID); - Запись.НачалоДействияЗаписи = ТекущаяЗапись.STARTDATE; - Запись.ОкончаниеДействияЗаписи = ТекущаяЗапись.ENDDATE; - Запись.Операция = ТекущаяЗапись.OPERSTATUS КонецЦикла; ОбновлениеИнформационнойБазы.ЗаписатьДанные(Набор); ЗакрытьФайлЗагрузкиСубъектаРФ(ФайлЗагрузки); КонецПроцедуры + Процедура ЗагрузитьПричиныИзмененияАдреса(КодСубъектаРФ, КаталогФайлов, ВидыСведений) Сжатие = Новый СжатиеДанных(9); @@ -8855,40 +5060,21 @@ Набор.Отбор.КодСубъектаРФ.Установить(КодСубъектаРФ); ФайлЗагрузки = ФайлЗагрузкиСубъектаРФ(КодСубъектаРФ, КаталогФайлов, "ARCHDOCS", "RegulatoryDocs"); - ТекущаяЗапись = Неопределено; - Пока СледующаяЗаписьФайлаЗагрузкиСубъектаРФ(ФайлЗагрузки, ТекущаяЗапись) Цикл + ТекущаяЗапись = ФайлЗагрузки.ФайлЧтения; + Пока ТекущаяЗапись.Прочитать() Цикл + + Если ТекущаяЗапись.ТипУзла <> ТипУзлаXML.НачалоЭлемента Тогда + Продолжить; + КонецЕсли; + Запись = Набор.Добавить(); Запись.КодСубъектаРФ = КодСубъектаРФ; - Запись.Идентификатор = УникальныйИдентификаторИзДвоичныхДанных(ТекущаяЗапись.DOCID); - Запись.ИзмененныйОбъект = УникальныйИдентификаторИзДвоичныхДанных(ТекущаяЗапись.OBJID); - Запись.СодержитОписание = ТекущаяЗапись.ISDESCR; - Запись.Описание = Новый ХранилищеЗначения(ТекущаяЗапись.DESCR, Сжатие); - КонецЦикла; - - ОбновлениеИнформационнойБазы.ЗаписатьДанные(Набор); - ЗакрытьФайлЗагрузкиСубъектаРФ(ФайлЗагрузки); - -КонецПроцедуры - -Процедура ЗагрузитьАдресныеОриентиры(КодСубъектаРФ, КаталогФайлов, ВидыСведений) - - Сжатие = Новый СжатиеДанных(9); - - Набор = РегистрыСведений.ОриентирыАдресныхОбъектов.СоздатьНаборЗаписей(); - Набор.Отбор.КодСубъектаРФ.Установить(КодСубъектаРФ); - ФайлЗагрузки = ФайлЗагрузкиСубъектаРФ(КодСубъектаРФ, КаталогФайлов, "LANDMARKS", "Landmarks"); - - ТекущаяЗапись = Неопределено; - Пока СледующаяЗаписьФайлаЗагрузкиСубъектаРФ(ФайлЗагрузки, ТекущаяЗапись) Цикл - Запись = Набор.Добавить(); + Запись.Идентификатор = УникальныйИдентификаторИзСтроки64(ТекущаяЗапись.ЗначениеАтрибута("DOCID")); + Запись.ИзмененныйОбъект = УникальныйИдентификаторИзСтроки64(ТекущаяЗапись.ЗначениеАтрибута("OBJID")); + Запись.СодержитОписание = ТекущаяЗапись.ЗначениеАтрибута("ISDESCR"); + Запись.Описание = Новый ХранилищеЗначения(ТекущаяЗапись.ЗначениеАтрибута("DESCR"), Сжатие); - Запись.КодСубъектаРФ = КодСубъектаРФ; - Запись.Идентификатор = УникальныйИдентификаторИзДвоичныхДанных(ТекущаяЗапись.LANDGUID); - Запись.АдресныйОбъект = УникальныйИдентификаторИзДвоичныхДанных(ТекущаяЗапись.AOGUID); - Запись.ПочтовыйИндекс = ТекущаяЗапись.POSTALCODE; - Запись.Дополнительно = УникальныйИдентификаторИзДвоичныхДанных(ТекущаяЗапись.EXTRAGUID); - Запись.Описание = Новый ХранилищеЗначения(ТекущаяЗапись.LOCATION, Сжатие); КонецЦикла; ОбновлениеИнформационнойБазы.ЗаписатьДанные(Набор); @@ -8948,26 +5134,62 @@ КонецПроцедуры Процедура ОчиститьАдресныеОбъекты(КодСубъектаРФ) + // Очищаем, не трогая запись региона. - Набор = РегистрыСведений.АдресныеОбъекты.СоздатьНаборЗаписей(); - Отбор = Набор.Отбор; + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | АдресныеОбъекты.Идентификатор КАК Идентификатор, + | АдресныеОбъекты.КодСубъектаРФ КАК КодСубъектаРФ, + | АдресныеОбъекты.РодительскийИдентификатор КАК РодительскийИдентификатор, + | АдресныеОбъекты.МуниципальныйРодительскийИдентификатор КАК МуниципальныйРодительскийИдентификатор, + | АдресныеОбъекты.Наименование КАК Наименование, + | АдресныеОбъекты.Сокращение КАК Сокращение, + | АдресныеОбъекты.КодКЛАДР КАК КодКЛАДР, + | АдресныеОбъекты.ДополнительныеАдресныеСведения КАК ДополнительныеАдресныеСведения, + | АдресныеОбъекты.Уровень КАК Уровень + |ИЗ + | РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты + |ГДЕ + | АдресныеОбъекты.КодСубъектаРФ = &КодСубъектаРФ + | И АдресныеОбъекты.Уровень = 1"; - Отбор.Уровень.Установить(1); - Отбор.КодСубъектаРФ.Установить(КодСубъектаРФ); - Отбор.КодОкруга.Установить(0); - Отбор.КодРайона.Установить(0); - Отбор.КодГорода.Установить(0); - Отбор.КодВнутригородскогоРайона.Установить(0); - Отбор.КодНаселенногоПункта.Установить(0); - Отбор.КодУлицы.Установить(0); - Отбор.КодДополнительногоЭлемента.Установить(0); - Отбор.КодПодчиненногоЭлемента.Установить(0); - Набор.Прочитать(); + Запрос.УстановитьПараметр("КодСубъектаРФ", КодСубъектаРФ); + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + + Классификатор = РегистрыСведений.АдресныеОбъекты.КлассификаторСубъектовРФ(); + СтрокаРегиона = Классификатор.Найти(КодСубъектаРФ, "КодСубъектаРФ"); + Если СтрокаРегиона = Неопределено Тогда + Возврат; + КонецЕсли; + СведенияОбРегионе = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(СтрокаРегиона); + + Иначе + + СведенияОбРегионе = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(РезультатЗапроса.Выгрузить()[0]); + + КонецЕсли; - Отбор.Сбросить(); - Отбор.КодСубъектаРФ.Установить(КодСубъектаРФ); - ОбновлениеИнформационнойБазы.ЗаписатьДанные(Набор); + НачатьТранзакцию(); + Попытка + + Набор = РегистрыСведений.АдресныеОбъекты.СоздатьНаборЗаписей(); + Набор.Отбор.КодСубъектаРФ.Установить(КодСубъектаРФ); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Набор); + + Набор = РегистрыСведений.АдресныеОбъекты.СоздатьНаборЗаписей(); + Набор.Отбор.КодСубъектаРФ.Установить(КодСубъектаРФ); + НоваяЗапись = Набор.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяЗапись, СведенияОбРегионе); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Набор); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры @@ -9034,43 +5256,6 @@ КонецПроцедуры -Процедура ОчиститьСведенияУстаревшегоКлассификатора(КодСубъектаРФ) - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос(" - |ВЫБРАТЬ ПЕРВЫЕ 1 - | ТипАдресногоЭлемента, - | КодАдресногоОбъектаВКоде, - | КодРайонаВКоде, - | КодГородаВКоде, - | КодНаселенногоПунктаВКоде, - | КодУлицыВКоде, - | Код, - | Наименование, - | Сокращение, - | Индекс, - | АльтернативныеНазвания, - | ПризнакАктуальности - |ИЗ - | РегистрСведений.УдалитьАдресныйКлассификатор - |ГДЕ - | ТипАдресногоЭлемента = 1 - | И КодАдресногоОбъектаВКоде = &КодСубъектаРФ"); - Запрос.УстановитьПараметр("КодСубъектаРФ", КодСубъектаРФ); - Регион = Запрос.Выполнить().Выгрузить(); - - Набор = РегистрыСведений.УдалитьАдресныйКлассификатор.СоздатьНаборЗаписей(); - Набор.Отбор.КодАдресногоОбъектаВКоде.Установить(КодСубъектаРФ); - - Если Регион.Количество() > 0 Тогда - ЗаполнитьЗначенияСвойств(Набор.Добавить(), Регион[0]); - КонецЕсли; - - ОбновлениеИнформационнойБазы.ЗаписатьДанные(Набор); - -КонецПроцедуры - // Инициализирует структуру описания файла данных адресных сведений. // Функция ФайлЗагрузкиСубъектаРФ(КодСубъектаРФ, КаталогФайлов, КлючВида, ИмяОписывающегоУзла) @@ -9134,18 +5319,14 @@ КореньНайден = ФайлЧтения.ПерейтиКСодержимому() <> ТипУзлаXML.Ничего; Пока КореньНайден Цикл Если ФайлЧтения.ТипУзла = ТипУзлаXML.НачалоЭлемента И ФайлЧтения.ЛокальноеИмя = ИмяОписывающегоУзла Тогда - // Корявое чтение с типизацией. - Результат.Версия = ТипизированныйАтрибутXDTO(ФайлЧтения, ТипXDTOЗаголовка, "Version"); - Результат.ДатаВерсии = ТипизированныйАтрибутXDTO(ФайлЧтения, ТипXDTOЗаголовка, "UpdateDate"); + Результат.Версия = ФайлЧтения.ЗначениеАтрибута("Version"); + Результат.ДатаВерсии = ФайлЧтения.ЗначениеАтрибута("UpdateDate"); Прервать; КонецЕсли; КореньНайден = ФайлЧтения.Прочитать(); КонецЦикла; - Если КореньНайден Тогда - // Позиционируемся на следующий узел. - ФайлЧтения.Прочитать(); - Иначе + Если НЕ КореньНайден Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В файле ""%1"" не найден корневой узел %2'"), Результат.ПолноеИмя, ИмяОписывающегоУзла); КонецЕсли; @@ -9206,14 +5387,6 @@ Возврат Результат; КонецФункции -Функция ТипизированныйАтрибутXDTO(ФайлЧтения, ТипЗаписи, ИмяАтрибута) - - ТипАтрибута = ТипЗаписи.Свойства.Получить(ИмяАтрибута).Тип; - ЗначениеXDTO = ФабрикаXDTO.Создать(ТипАтрибута, ФайлЧтения.ПолучитьАтрибут(ИмяАтрибута)); - - Возврат ЗначениеXDTO.Значение; -КонецФункции - // Завершает работу с набором данных. // Процедура ЗакрытьФайлЗагрузкиСубъектаРФ(ОписаниеФайла) @@ -9227,20 +5400,6 @@ КонецПроцедуры -// Читает следующую запись -// -Функция СледующаяЗаписьФайлаЗагрузкиСубъектаРФ(ФайлЗагрузки, ТекущаяЗапись) - Чтение = ФайлЗагрузки.ФайлЧтения; - - Если Чтение.ТипУзла <> ТипУзлаXML.НачалоЭлемента Тогда - ТекущаяЗапись = Неопределено; - Возврат Ложь; - КонецЕсли; - - ТекущаяЗапись = ФабрикаXDTO.ПрочитатьXML(Чтение, ФайлЗагрузки.ТипXDTOЗаписи); - Возврат Истина; -КонецФункции - // Противоположность ОбщегоНазначенияКлиентСервер.СтруктураURI // Функция URIПоСтруктуре(СтруктураURI) @@ -9308,6 +5467,1088 @@ КонецФункции +// Заполняет коды по структуре адреса. +// +Функция ЗаполнитьКодыАдреса(Результат, ИдентификаторАдресногоОбъекта, СведенияОДоме) + + Коды = КодыПоИдентификаторуАдресногоОбъекта(ИдентификаторАдресногоОбъекта, СведенияОДоме); + Если Коды <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(Результат, Коды); + Результат.ОКТМО = Формат(Результат.ОКТМО, "ЧГ=0"); + Результат.ОКАТО = Формат(Результат.ОКАТО, "ЧГ=0"); + Результат.Вставить("ИдентификаторДома", Коды.ИдентификаторДома); + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +Функция ВыполнитьЗапросЧерезВебСервис(СтрокаЗапроса, ВремяОжидания = 120) + + Сервис = АдресныйКлассификаторПовтИсп.СервисКлассификатора1С(ВремяОжидания); + + Результат = Новый Структура("Отказ, ПодробноеПредставлениеОшибки, КодСостояния, Данные"); + + ТекстURL = АдресныйКлассификаторКлиентСервер.ПрефиксВерсииЗапроса() + СтрокаЗапроса; + HTTPЗапрос = Новый HTTPЗапрос(ТекстURL); + + Попытка + Ответ = Сервис.Получить(HTTPЗапрос); + Исключение + Результат.Отказ = Истина; + Результат.ПодробноеПредставлениеОшибки =Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ТекстОшибки = НСтр("ru='При выполнении запроса:'") + ТекстURL + Символы.ПС + Результат.ПодробноеПредставлениеОшибки; + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); + Возврат Результат; + КонецПопытки; + + Результат.Отказ = Ложь; + Результат.КодСостояния = Ответ.КодСостояния; + + Если Результат.КодСостояния = 200 Тогда + ПолученныеДанные = Ответ.ПолучитьТелоКакСтроку("UTF-8"); + Результат.Данные = СтрокаJSONВСтруктуру(ПолученныеДанные); + Иначе + ОтветОтСервера = Ответ.ПолучитьТелоКакСтроку("UTF-8"); + Результат.ПодробноеПредставлениеОшибки = НСтр("ru='При получении данных из веб-сервиса возникли проблемы.'" + ОтветОтСервера); + Результат.Отказ = Истина; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Конвертация + +Функция СтруктураВСтрокуJSON(Значение) + + ЗаписьJSON = Новый ЗаписьJSON; + ЗаписьJSON.УстановитьСтроку(); + + ЗаписатьJSON(ЗаписьJSON, Значение,, "АдаптацияПолейКонтактнойИнформации", АдресныйКлассификаторСлужебный); + + Возврат ЗаписьJSON.Закрыть(); + +КонецФункции + +Функция АдаптацияПолейКонтактнойИнформации(Свойство, Значение, ДополнительныеПараметрыФункцииПреобразования, Отказ) Экспорт + + Если ТипЗнч(Значение) = Тип("УникальныйИдентификатор") Тогда + Возврат Строка(Значение); + КонецЕсли; + +КонецФункции + +Функция СтрокаJSONВСтруктуру(Значение) + + ЧтениеJSON = Новый ЧтениеJSON; + ЧтениеJSON.УстановитьСтроку(Значение); + + Результат = ПрочитатьJSON(ЧтениеJSON,,,, "ВосстановлениеПолейКонтактнойИнформации", АдресныйКлассификаторСлужебный); + + ЧтениеJSON.Закрыть(); + + Возврат Результат; + +КонецФункции + +Функция ВосстановлениеПолейКонтактнойИнформации(Свойство, Значение, ДополнительныеПараметрыФункцииПреобразования) Экспорт + + Если СтрЗаканчиваетсяНа(ВРег(Свойство), "ID") И СтрДлина(Значение) = 36 Тогда + Возврат Новый УникальныйИдентификатор(Значение); + КонецЕсли; + +КонецФункции + +// Описание национальных полей структуры контактной информации для хранения ее в формате JSON. +// Основной список полей определяется в одноименной функции общего модуля . +// +// ТипКонтактнойИнформации - ПеречислениеСсылка.ТипыКонтактнойИнформации - +// Тип контактной информации, определяющий состав полей контактной информации. +// +// Возвращаемое значение: +// Структура - Поля контактной информации добавленные к основным полям: +// Для типа контактной информации адрес: +// * ID - Строка - Идентификационный код последнего адресного объекта в иерархи адреса. +// * AddressType - Строка - установленный пользователем тип адреса(только для адресов РФ). +// Варианты: "Муниципальный", "Административно-территориальный". +// * AreaCode - Строка - код региона РФ. +// * AreaID - Строка - идентификатор региона. +// * District - Строка - представление района у адресов по административно-территориальному делению. +// * DistrictType - Строка - сокращение района у адресов по административно-территориальному делению. +// * DistrictID - Строка - идентификатор региона у адресов по административно-территориальному делению. +// * MunDistrict - Строка - представление муниципального района у адресов по муниципальному делению. +// * MunDistrictType - Строка - сокращение муниципального района у адресов по муниципальному делению. +// * MunDistrictID - Строка - идентификатор муниципального района у адресов по муниципальному делению. +// * CityID - Строка - идентификатор муниципального города у адресов по административно-территориальному делению. +// * Settlement - Строка - представление поселения у адресов по муниципальному делению. +// * SettlementType - Строка - сокращение поселения у адресов по муниципальному делению. +// * SettlementID - Строка - идентификатор поселения. +// * CityDistrict - Строка - представление внутригородского района. +// * CityDistrictType - Строка - сокращение внутригородского района. +// * CityDistrictID - Строка - идентификатор внутригородского района. +// * Territory - Строка - представление территории. +// * TerritoryType - Строка - сокращение территории. +// * TerritoryID - Строка - идентификатор территории. +// * Locality - Строка - представление населенного пункта. +// * LocalityType - Строка - сокращение населенного пункта. +// * LocalityID - Строка - идентификатор населенного пункта. +// * StreetID - Строка - идентификатор улицы. +// * HouseType - Строка - тип дома, владения. +// * HouseNumber - Строка - номер дома, владения. +// * HouseID - Строка - идентификатор дома. +// * Buildings - Массив - содержит структуры(поля структуры: Type, Number) с перечнем корпусов (строений) адреса. +// * Apartments - Массив - содержит структуры(поля структуры: Type, Number) с перечнем помещений адреса. +// * CodeKLADR - Строка - Код КЛАДР. +// * OKTMO - Строка - Код ОКТМО. +// * OKATO - Строка - Код ОКАТО. +// * IFNSFLCode - Строка - Код ИФНСФЛ. +// * IFNSULCode - Строка - Код ИФНСЮЛ. +// * IFNSFLAreaCode - Строка - Код участка ИФНСФЛ. +// * IFNSULAreaCode - Строка - Код участка ИФНСЮЛ. +// +Функция ОписаниеНовойКонтактнойИнформации() + + Результат = Новый Структура; + + Результат.Вставить("value", ""); + Результат.Вставить("comment", ""); + Результат.Вставить("type", "Адрес"); + Результат.Вставить("country", ""); + Результат.Вставить("addressType", АдресВСвободнойФорме()); + Результат.Вставить("countryCode", ""); + Результат.Вставить("ZIPcode", ""); + Результат.Вставить("area", ""); + Результат.Вставить("areaType", ""); + Результат.Вставить("city", ""); + Результат.Вставить("cityType", ""); + Результат.Вставить("street", ""); + Результат.Вставить("streetType", ""); + Результат.Вставить("id", ""); + Результат.Вставить("areaCode", ""); + Результат.Вставить("areaId", ""); + Результат.Вставить("district", ""); + Результат.Вставить("districtType", ""); + Результат.Вставить("districtId", ""); + Результат.Вставить("munDistrict", ""); + Результат.Вставить("munDistrictType", ""); + Результат.Вставить("munDistrictId", ""); + Результат.Вставить("cityId", ""); + Результат.Вставить("settlement", ""); + Результат.Вставить("settlementType", ""); + Результат.Вставить("settlementId", ""); + Результат.Вставить("cityDistrict", ""); + Результат.Вставить("cityDistrictType", ""); + Результат.Вставить("cityDistrictId", ""); + Результат.Вставить("territory", ""); + Результат.Вставить("territoryType", ""); + Результат.Вставить("territoryId", ""); + Результат.Вставить("locality", ""); + Результат.Вставить("localityType", ""); + Результат.Вставить("localityId", ""); + Результат.Вставить("streetId", ""); + Результат.Вставить("houseType", ""); + Результат.Вставить("houseNumber", ""); + Результат.Вставить("houseId", ""); + Результат.Вставить("buildings", Новый Массив); + Результат.Вставить("apartments", Новый Массив); + Результат.Вставить("codeKLADR", ""); + Результат.Вставить("oktmo", ""); + Результат.Вставить("okato", ""); + Результат.Вставить("asInDocument", ""); + Результат.Вставить("ifnsFLCode", ""); + Результат.Вставить("ifnsULCode", ""); + Результат.Вставить("ifnsFLAreaCode", ""); + Результат.Вставить("ifnsULAreaCode", ""); + + Возврат Результат; + +КонецФункции + +Процедура СписокДомовИзЗагруженныхСведений(Знач ВариантыДомов, Знач ИдентификаторАдресногоОбъекта, Знач СтрокаПоиска, Знач ТочноеСовпадение) + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | ДомаЗданияСтроения.Строения КАК Строения, + | ЕСТЬNULL(ДополнительныеСведения.ОКТМО, """") КАК ОКТМО, + | ЕСТЬNULL(ДополнительныеСведения.ПочтовыйИндекс, """") КАК ПочтовыйИндекс + |ИЗ + | РегистрСведений.ДомаЗданияСтроения КАК ДомаЗданияСтроения + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеАдресныеСведения КАК ДополнительныеСведения + | ПО (ДополнительныеСведения.Идентификатор = ДомаЗданияСтроения.ДополнительныеАдресныеСведения) + |ГДЕ + | ДомаЗданияСтроения.АдресныйОбъект = &АдресныйОбъект"; + + Запрос.УстановитьПараметр("АдресныйОбъект", ИдентификаторАдресногоОбъекта); + Запись = Запрос.Выполнить().Выбрать(); + + Пока Запись.Следующий() Цикл + Если ЗначениеЗаполнено(Запись.Строения) Тогда + Описание = Запись.Строения.Получить(); + Если ЗначениеЗаполнено(Описание) Тогда + ИзвлечьСписокДомов(Описание, СтрокаПоиска, ВариантыДомов, Запись, ТочноеСовпадение); + КонецЕсли; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Функция КонструкторСпискаДомов() + + ВариантыДомов = Новый ТаблицаЗначений; + ВариантыДомов.Колонки.Добавить("ДомЧислом", ОбщегоНазначения.ОписаниеТипаЧисло(12)); + ВариантыДомов.Колонки.Добавить("Дом", ОбщегоНазначения.ОписаниеТипаСтрока(20)); + ВариантыДомов.Колонки.Добавить("Корпус", ОбщегоНазначения.ОписаниеТипаСтрока(20)); + ВариантыДомов.Колонки.Добавить("Строение", ОбщегоНазначения.ОписаниеТипаСтрока(20)); + ВариантыДомов.Колонки.Добавить("Значение"); + ВариантыДомов.Колонки.Добавить("Представление"); + ВариантыДомов.Колонки.Добавить("Идентификатор"); + + Возврат ВариантыДомов; + +КонецФункции + +Функция СопоставлениеУровнейАдреса() + Уровни = Новый Массив; + Уровни.Добавить("Area"); + Уровни.Добавить("MunDistrict"); + Уровни.Добавить("District"); + Уровни.Добавить("Settlement"); + Уровни.Добавить("City"); + Уровни.Добавить("CityDistrict"); + Уровни.Добавить("Locality"); + Уровни.Добавить("Territory"); + Уровни.Добавить("Street"); + + Возврат Уровни; + +КонецФункции + +Процедура УстановитьЗначениеУровняАдреса(Адрес, СтруктураДанных, ИмяУровня) + + Адрес[ИмяУровня] = СокрЛП(СтруктураДанных[ИмяУровня]); + Адрес[ИмяУровня + "Type"] = СокрЛП(СтруктураДанных[ИмяУровня + "Type"]); + Адрес[ИмяУровня + "Id"] = СтруктураДанных[ИмяУровня + "Id"]; + +КонецПроцедуры + +// Возвращает структуру, описывающую населенный пункт в иерархии младший-старший +// для текущего адресного классификатора. Имена ключей структуры зависят от +// классификатора. +// +// Параметры: +// Идентификатор - УникальныйИдентификатор - Идентификатор объекта. Если указан, то структура +// заполняется данными для этого объекта. +// ВариантКлассификатора - Строка - Требуемый вид классификатора. +// +// Возвращаемое значение: +// Структура - описание населенного пункта. +// +Функция СформироватьАдресПоДаннымИзКлассификатора(АдресныеСведенияДанные) + + Адрес = ОписаниеНовойКонтактнойИнформации(); + + ЗаполнитьЗначенияСвойств(Адрес, АдресныеСведенияДанные, "addressType,codeKLADR,id,ifnsFLAreaCode,ifnsFLCode,ifnsULAreaCode,ifnsULCode,okato,oktmo,ZIPCode,value"); + + Если ПустаяСтрока(Адрес.Country) Тогда + Адрес.Вставить("Country", Строка(АдресныйКлассификаторКлиентСервер.ОсновнаяСтрана())); + КонецЕсли; + + Для каждого ИмяУровня Из СопоставлениеУровнейАдреса() Цикл + УстановитьЗначениеУровняАдреса(Адрес, АдресныеСведенияДанные, ИмяУровня); + КонецЦикла; + + Возврат Адрес; +КонецФункции + +Функция СведенияОДоме() + + СведенияОДоме = Новый Структура(); + + СведенияОДоме.Вставить("НомерДома", ""); + СведенияОДоме.Вставить("ТипДома", ""); + СведенияОДоме.Вставить("НомерКорпуса", ""); + СведенияОДоме.Вставить("НомерСтроения", ""); + СведенияОДоме.Вставить("ТипСтроения", ""); + + Возврат СведенияОДоме; + +КонецФункции + +///////////////////////////////////// +// Обратная совместимость + +// Возвращает признак того, является ли строка данных контактной информации XML данными. +// +// Параметры: +// Текст - Строка - Проверяемая строка. +// +// Возвращаемое значение: +// Булево - результат проверки. +// +Функция ЭтоКонтактнаяИнформацияВXML(Знач Текст) + + Возврат ТипЗнч(Текст) = Тип("Строка") И СтрНачинаетсяС(СокрЛ(Текст), "<"); + +КонецФункции + +// Преобразует формат из XML в JSON +// +Функция КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация, Представление = "") Экспорт + + Результат = ОписаниеНовойКонтактнойИнформации(); + ОсновнаяСтрана = АдресныйКлассификаторКлиентСервер.ОсновнаяСтрана(); + + НаименованиеСтраны = ""; + Формат9Запятых = Ложь; + ЭлементыАдреса = Новый Соответствие; + + Если ТипЗнч(КонтактнаяИнформация) = Тип("Строка") Тогда + Если ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнформация) Тогда + XDTOАдрес = ДесериализацияАдресаXDTO(КонтактнаяИнформация); + Если XDTOАдрес.Свойства().Получить("Представление") <> Неопределено Тогда + Результат.Value = XDTOАдрес.Представление; + КонецЕсли; + Если XDTOАдрес.Свойства().Получить("Комментарий") <> Неопределено И ТипЗнч(XDTOАдрес.Комментарий) = Тип("Строка") Тогда + Результат.Comment = XDTOАдрес.Комментарий; + КонецЕсли; + ИначеЕсли ЭтоКонтактнаяИнформацияВJSON(КонтактнаяИнформация) Тогда + Результат = СтрокаJSONВСтруктуру(КонтактнаяИнформация); + УстановитьИдентификаторыАдреса(Результат); + Возврат Результат; + Иначе + Возврат Результат; + КонецЕсли; + Иначе + Возврат Результат; + КонецЕсли; + + ПространствоИмен = ПространствоИмен(); + Состав = XDTOАдрес.Состав; + + Если Состав = Неопределено Тогда + Возврат Результат; + КонецЕсли; + + XDTOТип = Состав.Тип(); + + Если XDTOТип = ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") + Или XDTOТип = ФабрикаXDTO.Тип("http://www.v8.1c.ru/ssl/contactinfo", "Адрес") Тогда + + Если Состав.Свойства().Получить("Страна") <> Неопределено И ЗначениеЗаполнено(Состав.Страна) Тогда + НаименованиеСтраны = Состав.Страна; + Иначе + НаименованиеСтраны = АдресныйКлассификаторКлиентСервер.ОсновнаяСтрана(); + КонецЕсли; + + АдресРФ = Состав.Состав; + + ИначеЕсли XDTOТип = ФабрикаXDTO.Тип(ПространствоИмен(), "АдресРФ") Тогда + АдресРФ = Состав; + Иначе + Возврат Результат; + КонецЕсли; + + Если АдресРФ = Неопределено Тогда + Возврат Результат; + ИначеЕсли ТипЗнч(АдресРФ) = Тип("Строка") Тогда + + Если СтрЧислоВхождений(АдресРФ, ",") = 9 Тогда + + Результат.AddressType = АдресныйКлассификаторКлиентСервер.АдминистративноТерриториальныйАдрес(); + + ЧастиАдреса = СтрРазделить(АдресРФ, ","); + Результат.ZIPCode = ЧастиАдреса[1]; + + НаименованиеИСокращение = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(ЧастиАдреса[2]); + Результат.Area = НаименованиеИСокращение.Наименование; + Результат.AreaType = НаименованиеИСокращение.Сокращение; + + НаименованиеИСокращение = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(ЧастиАдреса[3]); + Результат.District = НаименованиеИСокращение.Наименование; + Результат.DistrictType = НаименованиеИСокращение.Сокращение; + + НаименованиеИСокращение = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(ЧастиАдреса[4]); + Результат.City = НаименованиеИСокращение.Наименование; + Результат.CityType = НаименованиеИСокращение.Сокращение; + + НаименованиеИСокращение = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(ЧастиАдреса[5]); + Результат.Locality = НаименованиеИСокращение.Наименование; + Результат.LocalityType = НаименованиеИСокращение.Сокращение; + + НаименованиеИСокращение = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(ЧастиАдреса[6]); + Результат.Street = НаименованиеИСокращение.Наименование; + Результат.StreetType = НаименованиеИСокращение.Сокращение; + + НаименованиеИСокращение = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(ЧастиАдреса[7]); + Результат.HouseNumber = НаименованиеИСокращение.Сокращение; + Результат.HouseType = НаименованиеИСокращение.Наименование; + + Если ЗначениеЗаполнено(ЧастиАдреса[8]) Тогда + НаименованиеИСокращение = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(ЧастиАдреса[8]); + Результат.Buildings.Добавить(АдресныйКлассификаторКлиентСервер.ЗначениеСтроенияИлиПомещения( + НаименованиеИСокращение.Сокращение, НаименованиеИСокращение.Наименование)); + КонецЕсли; + + Если ЗначениеЗаполнено(ЧастиАдреса[9]) Тогда + НаименованиеИСокращение = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(ЧастиАдреса[9]); + Результат.Apartments.Добавить(АдресныйКлассификаторКлиентСервер.ЗначениеСтроенияИлиПомещения( + НаименованиеИСокращение.Сокращение, НаименованиеИСокращение.Наименование)); + КонецЕсли; + КонецЕсли; + Иначе + + Если ЗначениеЗаполнено(АдресРФ.Адрес_по_документу) Тогда + Результат.AddressType = АдресВСвободнойФорме(); + Иначе + Результат.AddressType = АдресныйКлассификаторКлиентСервер.АдминистративноТерриториальныйАдрес(); + КонецЕсли; + + Результат.Country = НаименованиеСтраны; + Результат.ZIPCode = ПочтовыйИндексАдреса(АдресРФ); + Результат.OKTMO = Формат(АдресРФ.ОКТМО, "ЧГ=0"); + Результат.OKATO = Формат(АдресРФ.ОКАТО, "ЧГ=0"); + + СубъектРФ = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(АдресРФ.СубъектРФ); + Результат.Area = Строка(СубъектРФ.Наименование); + Результат.AreaType = Строка(СубъектРФ.Сокращение); + + РайонАдреса = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(РайонАдреса(АдресРФ)); + Результат.District = Строка(РайонАдреса.Наименование); + Результат.DistrictType = Строка(РайонАдреса.Сокращение); + + Город = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(АдресРФ.Город); + Результат.City = Строка(Город.Наименование); + Результат.CityType = Строка(Город.Сокращение); + + НаселПункт = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(АдресРФ.НаселПункт); + Результат.Locality = Строка(НаселПункт.Наименование); + Результат.LocalityType = Строка(НаселПункт.Сокращение); + + Улица = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(АдресРФ.Улица); + Результат.Street = Строка(Улица.Наименование); + Результат.StreetType = Строка(Улица.Сокращение); + + ВнутригРайон = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(АдресРФ.ВнутригРайон); + Результат.CityDistrict = Строка(ВнутригРайон.Наименование); + Результат.CityDistrictType = Строка(ВнутригРайон.Сокращение); + + ЗначениеДополнительныхЭлементов = ЗначениеДополнительныхЭлементов(АдресРФ); + Если ЗначениеЗаполнено(ЗначениеДополнительныхЭлементов.ДополнительныйЭлемент) Тогда + ДополнительныйЭлемент = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(ЗначениеДополнительныхЭлементов.ДополнительныйЭлемент); + Результат.Territory = Строка(ДополнительныйЭлемент.Наименование); + Результат.TerritoryType = Строка(ДополнительныйЭлемент.Сокращение); + КонецЕсли; + Если ЗначениеЗаполнено(ЗначениеДополнительныхЭлементов.ПодчиненныйЭлемент) Тогда + ПодчиненныйЭлемент = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(ЗначениеДополнительныхЭлементов.ПодчиненныйЭлемент); + Результат.Street = Строка(ПодчиненныйЭлемент.Наименование); + Результат.StreetType = Строка(ПодчиненныйЭлемент.Сокращение); + КонецЕсли; + + ЗданияИПомещения = ЗданияИПомещенияАдреса(АдресРФ); + Для каждого Здание Из ЗданияИПомещения.Здания Цикл + Если Здание.Вид = 1 Тогда + Результат.HouseType = Здание.Тип; + Результат.HouseNumber = Здание.Значение; + Иначе + Результат.Buildings.Добавить(ЗначениеСтроенияИлиПомещения(Здание.Тип, Здание.Значение)); + КонецЕсли; + КонецЦикла; + + Для каждого Помещение Из ЗданияИПомещения.Помещения Цикл + Результат.Apartments.Добавить(ЗначениеСтроенияИлиПомещения(Помещение.Тип, Помещение.Значение)); + КонецЦикла; + + + КонецЕсли; + + УстановитьИдентификаторыАдреса(Результат); + + Возврат Результат; + +КонецФункции + +Функция АдресВСвободнойФорме() + Возврат НСтр("ru='ВСвободнойФорме'"); +КонецФункции + +// Возвращает значения уровней 90(дополнительный элемент) и 91(подчиненный) из адреса. +// +Функция ЗначениеДополнительныхЭлементов(Знач XDTOАдрес) + + Результат = Новый Структура("ДополнительныйЭлемент, ПодчиненныйЭлемент"); + + АдресРФ = НациональныйАдрес(XDTOАдрес); + Если АдресРФ = Неопределено Тогда + Возврат Результат; + КонецЕсли; + + ДополнительныйЭлементАдреса = НайтиДополнительныйЭлементАдреса(АдресРФ).Значение; + + Результат.ДополнительныйЭлемент = ДополнительныйЭлементАдреса; + Результат.ПодчиненныйЭлемент = ДополнительныйЭлементАдреса(АдресРФ, XPathДополнительногоОбъектаАдресации(91)); + + Возврат Результат; + +КонецФункции + +// Читает и устанавливает здания и помещения адреса. +// +// Параметры: +// XDTOАдрес - ОбъектXDTO - Контактная информация или XDTO адреса. +// НовоеЗначение - Структура - устанавливаемое значение. Ожидаются поля: +// * Здания - ТаблицаЗначений с колонками: +// ** Тип - Строка - тип внутреннего классификатора дополнительных адресных +// объектов. Например "Корпус". +// ** Значение - Строка - значение номера дома, квартиры и т.п. +// * Помещения - ТаблицаЗначений с колонками, аналогично полю Здание. +// +// Возвращаемое значение: +// Структура - текущие данные. Содержит поля: +// * Здания - ТаблицаЗначений с колонками: +// ** Тип - Строка - тип внутреннего классификатора дополнительных адресных объектов. +// Например "Корпус". +// ** Сокращение - Строка - сокращение названия для использования в представлении. +// ** Значение - Строка - значение номера дома, квартиры и т.п. +// ** ПутьXPath - Строка - путь к значению объекта. +// * Помещения - ТаблицаЗначений с колонками, аналогично полю Здание. +// +Функция ЗданияИПомещенияАдреса(XDTOАдрес, НовоеЗначение = Неопределено) + + Результат = Новый Структура("Здания, Помещения", + ТаблицаЗначений("Тип, Значение, Сокращение, ПутьXPath, Вид", "Тип, Вид"), + ТаблицаЗначений("Тип, Значение, Сокращение, ПутьXPath, Вид", "Тип, Вид")); + + АдресРФ = НациональныйАдрес(XDTOАдрес); + Если АдресРФ = Неопределено Тогда + Возврат Результат; + КонецЕсли; + + Если НовоеЗначение <> Неопределено Тогда + // Запись + Если НовоеЗначение.Свойство("Здания") Тогда + Для Каждого Строка Из НовоеЗначение.Здания Цикл + ВставитьЗданиеПомещение(XDTOАдрес, Строка.Тип, Строка.Значение); + КонецЦикла; + КонецЕсли; + Если НовоеЗначение.Свойство("Помещения") Тогда + Для Каждого Строка Из НовоеЗначение.Помещения Цикл + ВставитьЗданиеПомещение(XDTOАдрес, Строка.Тип, Строка.Значение); + КонецЦикла; + КонецЕсли; + Возврат НовоеЗначение + КонецЕсли; + + // Чтение + Для Каждого ДопЭлемент Из АдресРФ.ДопАдрЭл Цикл + Если ДопЭлемент.Номер <> Неопределено Тогда + КодОбъекта = ДопЭлемент.Номер.Тип; + ТипОбъекта = ТипОбъектаПоКодуСериализации(КодОбъекта); + Если ТипОбъекта <> Неопределено Тогда + Вид = ТипОбъекта.Тип; + Если Вид = 1 Или Вид = 2 Тогда + НоваяСтрока = Результат.Здания.Добавить(); + ИначеЕсли Вид = 3 Тогда + НоваяСтрока = Результат.Помещения.Добавить(); + Иначе + НоваяСтрока = Неопределено; + КонецЕсли; + Если НоваяСтрока <> Неопределено Тогда + НоваяСтрока.Тип = ТипОбъекта.Наименование; + НоваяСтрока.Значение = ДопЭлемент.Номер.Значение; + НоваяСтрока.Сокращение = ТипОбъекта.Сокращение; + НоваяСтрока.ПутьXPath = XPathНомераДополнительногоОбъектаАдресации(НоваяСтрока.Тип); + НоваяСтрока.Вид = Вид; + КонецЕсли; + Иначе + НоваяСтрока = Результат.Помещения.Добавить(); + НоваяСтрока.Тип = ДопЭлемент.Номер.Тип; + НоваяСтрока.Значение = ДопЭлемент.Номер.Значение; + НоваяСтрока.Сокращение = ДопЭлемент.Номер.Тип; + НоваяСтрока.ПутьXPath = XPathНомераДополнительногоОбъектаАдресации("2000"); + НоваяСтрока.Вид = 3; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Результат.Здания.Сортировать("Вид"); + Результат.Помещения.Сортировать("Вид"); + + Возврат Результат; +КонецФункции + +Процедура ВставитьЗданиеПомещение(XDTOАдрес, Тип, Значение) + Если ПустаяСтрока(Значение) Тогда + Возврат; + КонецЕсли; + + Запись = XDTOАдрес.Получить(XPathНомераДополнительногоОбъектаАдресации(Тип)); + Если Запись = Неопределено Тогда + Запись = XDTOАдрес.ДопАдрЭл.Добавить( ФабрикаXDTO.Создать(XDTOАдрес.ДопАдрЭл.ВладеющееСвойство.Тип)); + Запись.Номер = ФабрикаXDTO.Создать(Запись.Свойства().Получить("Номер").Тип); + Запись.Номер.Значение = Значение; + + КодТипа = КодСериализацииОбъектаАдресации(Тип); + Если КодТипа = Неопределено Тогда + КодТипа = Тип; + КонецЕсли; + Запись.Номер.Тип = КодТипа + Иначе + Запись.Значение = Значение; + КонецЕсли; + +КонецПроцедуры + +// Конструктор таблицы значений. +// +Функция ТаблицаЗначений(СписокКолонок, СписокИндексов = "") + ТаблицаРезультата = Новый ТаблицаЗначений; + + Для Каждого КлючЗначение Из (Новый Структура(СписокКолонок)) Цикл + ТаблицаРезультата.Колонки.Добавить(КлючЗначение.Ключ); + КонецЦикла; + + СтрокиИндексов = СтрЗаменить(СписокИндексов, "|", Символы.ПС); + Для НомерИндекса = 1 По СтрЧислоСтрок(СтрокиИндексов) Цикл + КолонкиИндекса = СокрЛП(СтрПолучитьСтроку(СтрокиИндексов, НомерИндекса)); + Для Каждого КлючЗначение Из (Новый Структура(КолонкиИндекса)) Цикл + ТаблицаРезультата.Индексы.Добавить(КлючЗначение.Ключ); + КонецЦикла; + КонецЦикла; + + Возврат ТаблицаРезультата; +КонецФункции + +Функция КодСериализацииДополнительногоОбъектаАдресации(Уровень, ТипаАдресногоЭлемента = "") + + Если Уровень = 90 Тогда + Если ВРег(ТипаАдресногоЭлемента) = "ГСК" Тогда + Возврат "10600000"; + ИначеЕсли ВРег(ТипаАдресногоЭлемента) = "СНТ" Тогда + Возврат "10300000"; + ИначеЕсли ВРег(ТипаАдресногоЭлемента) = "ТЕР" Тогда + Возврат "10700000"; + Иначе + Возврат "10200000"; + КонецЕсли; + ИначеЕсли Уровень = 91 Тогда + Возврат "10400000"; + КонецЕсли; + + // Все остальное - считаем ориентиром. + Возврат "Местоположение"; +КонецФункции + +// Возвращает XPath для дополнительного объекта адресации по умолчанию. +// +// Параметры; +// Уровень - Число - уровень объекта. 90 - дополнительный(Варианты: ГСК, СНТ, ТЕР), 91 - подчиненный, -1 - +// Ориентир. +// +// Возвращаемое значение: +// Строка - XPath +// +Функция XPathДополнительногоОбъектаАдресации(Уровень, ТипаАдресногоЭлемента = "") + КодСериализации = КодСериализацииДополнительногоОбъектаАдресации(Уровень, ТипаАдресногоЭлемента); + Возврат "ДопАдрЭл[ТипАдрЭл='" + КодСериализации + "']"; +КонецФункции + +Функция ПочтовыйИндексАдреса(XDTOАдрес, НовоеЗначение = Неопределено) + + АдресРФ = НациональныйАдрес(XDTOАдрес); + Если АдресРФ = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Если НовоеЗначение = Неопределено Тогда + // Чтение + Результат = АдресРФ.Получить(XPathПочтовогоИндекса()); + Если Результат <> Неопределено Тогда + Результат = Результат.Значение; + КонецЕсли; + Возврат Результат; + КонецЕсли; + + // Запись + КодИндекса = КодСериализацииПочтовогоИндекса(); + + ЗаписьИндекса = АдресРФ.Получить(XPathПочтовогоИндекса()); + Если ЗаписьИндекса = Неопределено Тогда + ЗаписьИндекса = АдресРФ.ДопАдрЭл.Добавить(ФабрикаXDTO.Создать(XDTOАдрес.ДопАдрЭл.ВладеющееСвойство.Тип)); + ЗаписьИндекса.ТипАдрЭл = КодИндекса; + КонецЕсли; + + ЗаписьИндекса.Значение = СокрЛП(НовоеЗначение); + Возврат НовоеЗначение; +КонецФункции + +Функция КодСериализацииОбъектаАдресации(СтрокаЗначения) + + Ключ = ВРег(СокрЛП(СтрокаЗначения)); + Для Каждого Элемент Из ТипыОбъектовАдресацииАдресаРФ() Цикл + Если Элемент.Ключ = Ключ Тогда + Возврат Элемент.Код; + КонецЕсли; + КонецЦикла; + + Возврат Неопределено; +КонецФункции + +// Возвращает массив структур с информацией о частях адреса согласно приказу ФНС ММВ-7-1/525 от 31.08.2011. +// +// Возвращаемое значение: +// Массив - содержит структуры - описания. +// +Функция ТипыОбъектовАдресацииАдресаРФ() + + Результат = Новый Массив; + + // Код, Наименование, Тип, Порядок, КодФИАС + // Тип: 1 - владение, 2 - здание, 3 - помещение. + + Результат.Добавить(СтрокаОбъектаАдресации("1010", НСтр("ru = 'Дом'"), 1, 1, 2)); + Результат.Добавить(СтрокаОбъектаАдресации("1020", НСтр("ru = 'Владение'"), 1, 2, 1)); + Результат.Добавить(СтрокаОбъектаАдресации("1030", НСтр("ru = 'Домовладение'"), 1, 3, 3)); + + Результат.Добавить(СтрокаОбъектаАдресации("1050", НСтр("ru = 'Корпус'"), 2, 1)); + Результат.Добавить(СтрокаОбъектаАдресации("1060", НСтр("ru = 'Строение'"), 2, 2, 1)); + Результат.Добавить(СтрокаОбъектаАдресации("1080", НСтр("ru = 'Литера'"), 2, 3, 3)); + Результат.Добавить(СтрокаОбъектаАдресации("1090", НСтр("ru = 'Литер'"), 2, 6, 3)); + Результат.Добавить(СтрокаОбъектаАдресации("1070", НСтр("ru = 'Сооружение'"), 2, 4, 2)); + Результат.Добавить(СтрокаОбъектаАдресации("1040", НСтр("ru = 'Участок'"), 2, 5)); + + Результат.Добавить(СтрокаОбъектаАдресации("2010", НСтр("ru = 'Квартира'"), 3, 1)); + Результат.Добавить(СтрокаОбъектаАдресации("2030", НСтр("ru = 'Офис'"), 3, 2)); + Результат.Добавить(СтрокаОбъектаАдресации("2040", НСтр("ru = 'Бокс'"), 3, 3)); + Результат.Добавить(СтрокаОбъектаАдресации("2020", НСтр("ru = 'Помещение'"), 3, 4)); + Результат.Добавить(СтрокаОбъектаАдресации("2050", НСтр("ru = 'Комната'"), 3, 5)); + Результат.Добавить(СтрокаОбъектаАдресации("2060", НСтр("ru = 'Этаж'"), 3, 6)); + Результат.Добавить(СтрокаОбъектаАдресации("2070", НСтр("ru = 'А/я'"), 3, 7)); + Результат.Добавить(СтрокаОбъектаАдресации("2080", НСтр("ru = 'В/ч'"), 3, 8)); + Результат.Добавить(СтрокаОбъектаАдресации("2090", НСтр("ru = 'П/о'"), 3, 9)); + // Наши сокращения для поддержки обратной совместимости при парсинге. + Результат.Добавить(СтрокаОбъектаАдресации("2010", НСтр("ru = 'кв.'"), 3, 6)); + Результат.Добавить(СтрокаОбъектаАдресации("2030", НСтр("ru = 'оф.'"), 3, 7)); + // Ввод помещения вручную. + Результат.Добавить(СтрокаОбъектаАдресации("2000", НСтр("ru = ''"), 3, 0)); + + // Уточняющие объекты + Результат.Добавить(СтрокаОбъектаАдресации("10100000", НСтр("ru = 'Почтовый индекс'"))); + Результат.Добавить(СтрокаОбъектаАдресации("10200000", НСтр("ru = 'Адресная точка'"))); + Результат.Добавить(СтрокаОбъектаАдресации("10300000", НСтр("ru = 'Садовое товарищество'"))); + Результат.Добавить(СтрокаОбъектаАдресации("10400000", НСтр("ru = 'Элемент улично-дорожной сети, планировочной структуры дополнительного адресного элемента'"))); + Результат.Добавить(СтрокаОбъектаАдресации("10500000", НСтр("ru = 'Промышленная зона'"))); + Результат.Добавить(СтрокаОбъектаАдресации("10600000", НСтр("ru = 'Гаражно-строительный кооператив'"))); + Результат.Добавить(СтрокаОбъектаАдресации("10700000", НСтр("ru = 'Территория'"))); + + Возврат Результат; +КонецФункции + +Функция СтрокаОбъектаАдресации(Код, Наименование, Тип = 0, Порядок = 0, КодФИАС = 0) + + СтруктураОбъектаАдресации = Новый Структура; + СтруктураОбъектаАдресации.Вставить("Код", Код); + СтруктураОбъектаАдресации.Вставить("Наименование", Наименование); + СтруктураОбъектаАдресации.Вставить("Тип", Тип); + СтруктураОбъектаАдресации.Вставить("Порядок", Порядок); + СтруктураОбъектаАдресации.Вставить("КодФИАС", КодФИАС); + СтруктураОбъектаАдресации.Вставить("Сокращение", НРег(Наименование)); + СтруктураОбъектаАдресации.Вставить("Ключ", ВРег(Наименование)); + Возврат СтруктураОбъектаАдресации; + +КонецФункции + +// Возвращает код дополнительной части адреса для почтового индекса. +// +// Возвращаемое значение: +// Строка - код +// +Функция КодСериализацииПочтовогоИндекса() + + Возврат КодСериализацииОбъектаАдресации(НСтр("ru = 'Почтовый индекс'")); + +КонецФункции + +// Читает и устанавливает район адреса. +// +// Параметры: +// XDTOАдрес - ОбъектXDTO - Контактная информация или XDTO адреса. +// НовоеЗначение - Строка - устанавливаемое значение. +// +// Возвращаемое значение: +// Строка - новое значение. +// +Функция РайонАдреса(XDTOАдрес, НовоеЗначение = Неопределено) + + Если НовоеЗначение = Неопределено Тогда + // Чтение + + Результат = Неопределено; + + XDTOТип = XDTOАдрес.Тип(); + Если XDTOТип = ФабрикаXDTO.Тип(ПространствоИмен(), "АдресРФ") + Или XDTOТип = ФабрикаXDTO.Тип("http://www.v8.1c.ru/ssl/contactinfo_ru", "АдресРФ") Тогда + АдресРФ = XDTOАдрес; + Иначе + АдресРФ = XDTOАдрес.Состав; + КонецЕсли; + + Если ТипЗнч(АдресРФ) = Тип("ОбъектXDTO") Тогда + Возврат ПолучитьXDTOРеквизитОбъекта(АдресРФ, XPathРайона()); + КонецЕсли; + + Возврат Неопределено; + КонецЕсли; + + // Запись + Запись = СвРайМО(XDTOАдрес); + Запись.Район = НовоеЗначение; + Возврат НовоеЗначение; +КонецФункции + +Функция СвРайМО(АдресРФ) + Если АдресРФ.СвРайМО <> Неопределено Тогда + Возврат АдресРФ.СвРайМО; + КонецЕсли; + + АдресРФ.СвРайМО = ФабрикаXDTO.Создать( АдресРФ.Свойства().Получить("СвРайМО").Тип ); + Возврат АдресРФ.СвРайМО; +КонецФункции + +// Возвращает XPath для района. +// +// Возвращаемое значение: +// Строка - XPath +// +Функция XPathРайона() + + Возврат "СвРайМО/Район"; + +КонецФункции + +// Возвращает извлеченный XDTO российского адреса или Неопределено для адреса иностранного. +// +// Параметры: +// ОбъектИнформации - ОбъектXDTO - Контактная информация или XDTO адреса. +// +// Возвращаемое значение: +// ОбъектXDTO - российский адрес. +// Неопределено - нет российского адреса. +// +Функция НациональныйАдрес(ОбъектИнформации) + Результат = Неопределено; + ТипXDTO = Тип("ОбъектXDTO"); + + Если ТипЗнч(ОбъектИнформации) = ТипXDTO Тогда + ПространствоИмен = ПространствоИмен(); + + Если ОбъектИнформации.Тип() = ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация") Тогда + Адрес = ОбъектИнформации.Состав; + Иначе + Адрес = ОбъектИнформации; + КонецЕсли; + + Если ТипЗнч(Адрес) = ТипXDTO И Адрес.Тип() = ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") Тогда + Адрес = Адрес.Состав; + КонецЕсли; + + Если ТипЗнч(Адрес) = ТипXDTO Тогда + Результат = Адрес; + КонецЕсли; + КонецЕсли; + + Возврат Результат; +КонецФункции + +Функция ЗначениеСтроенияИлиПомещения(Тип, Значение) + Возврат Новый Структура("Type, Number", Тип, Значение); +КонецФункции + +// Возвращает дополнительный адреса. +// +Функция НайтиДополнительныйЭлементАдреса(АдресРФ) + + ВариантыДополнительногоЭлементаАдреса = ВариантыДополнительногоЭлементаАдреса(); + + XPath = ""; + ДополнительныйЭлементАдреса = Неопределено; + Для каждого ВариантДополнительныйЭлементАдреса Из ВариантыДополнительногоЭлементаАдреса Цикл + XPath = XPathДополнительногоОбъектаАдресации(90, ВариантДополнительныйЭлементАдреса); + ДополнительныйЭлементАдреса = ДополнительныйЭлементАдреса(АдресРФ, XPath); + Если ДополнительныйЭлементАдреса <> Неопределено Тогда + Прервать; + КонецЕсли; + КонецЦикла; + + Возврат Новый Структура("Значение, XPath", ДополнительныйЭлементАдреса, XPath); + +КонецФункции + +Функция ВариантыДополнительногоЭлементаАдреса() + + ВариантыДополнительногоЭлементаАдреса = Новый Массив; + ВариантыДополнительногоЭлементаАдреса.Добавить("СНТ"); + ВариантыДополнительногоЭлементаАдреса.Добавить("ГСК"); + ВариантыДополнительногоЭлементаАдреса.Добавить("ТЕР"); + ВариантыДополнительногоЭлементаАдреса.Добавить(""); + Возврат ВариантыДополнительногоЭлементаАдреса; + +КонецФункции + +// Читает дополнительные элемент адреса по его пути. +// +// Параметры: +// XDTOАдрес - ОбъектXDTO - Контактная информация или XDTO адреса. +// XPathЭлемента - Строка - Путь к элементу. +// +// Возвращаемое значение: +// Строка - значение элемента. +Функция ДополнительныйЭлементАдреса(XDTOАдрес, XPathЭлемента) + + АдресРФ = НациональныйАдрес(XDTOАдрес); + Если АдресРФ = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Результат = АдресРФ.Получить(XPathЭлемента); + Если Результат <> Неопределено Тогда + Возврат Результат.Значение; + КонецЕсли; + + Возврат Результат; +КонецФункции + +Процедура СформироватьКодыКЛАДР(КодКЛАДР, Адрес, КодыКЛАДР) + + КодКЛАДР = Формат(КодКЛАДР, "ЧРГ=''; ЧГ=0"); + + Если СтрДлина(КодКЛАДР) = 17 Тогда + КодыКЛАДР.Улица = КодКЛАДР; + КодКЛАДР = Лев(КодКЛАДР, 13); + Иначе + КодКЛАДР = Лев(КодКЛАДР, 13); + КонецЕсли; + + Если СтрДлина(КодКЛАДР) = 12 Тогда + КодКЛАДР = "0" + КодКЛАДР; + КонецЕсли; + + Если СтрДлина(КодКЛАДР) = 13 Тогда + + Если ЗначениеЗаполнено(Адрес.Area) Тогда + КодыКЛАДР.Регион = Лев(КодКЛАДР, 2) + "00000000000"; + КонецЕсли; + Если ЗначениеЗаполнено(Адрес.District) Тогда + КодыКЛАДР.Район = Лев(КодКЛАДР, 5) + "00000000"; + КонецЕсли; + Если ЗначениеЗаполнено(Адрес.City) Тогда + КодыКЛАДР.Город = Лев(КодКЛАДР, 8) + "00000"; + КонецЕсли; + Если ЗначениеЗаполнено(Адрес.Settlement) Тогда + КодыКЛАДР.НаселенныйПункт = Лев(КодКЛАДР, 11) + "00"; + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +// Получение глубокого свойства объекта. +// +Функция ПолучитьXDTOРеквизитОбъекта(ОбъектXTDO, XPath) + + // Переносов строки в XPath не ожидаем. + СтрокаСвойств = СтрЗаменить(СтрЗаменить(XPath, "/", Символы.ПС), Символы.ПС + Символы.ПС, "/"); + + ЧислоСвойств = СтрЧислоСтрок(СтрокаСвойств); + Если ЧислоСвойств = 1 Тогда + Результат = ОбъектXTDO.Получить(СтрокаСвойств); + Если ТипЗнч(Результат) = Тип("ОбъектXDTO") Тогда + Возврат Результат.Значение; + КонецЕсли; + Возврат Результат; + КонецЕсли; + + Результат = ?(ЧислоСвойств = 0, Неопределено, ОбъектXTDO); + Для Индекс = 1 По ЧислоСвойств Цикл + Результат = Результат.Получить(СтрПолучитьСтроку(СтрокаСвойств, Индекс)); + Если Результат = Неопределено Тогда + Прервать; + КонецЕсли; + КонецЦикла; + + Возврат Результат; +КонецФункции + +// Возвращает строку с описанием типа по коду части адреса. +// Противоположность функции "КодСериализацииОбъектаАдресации". +// +// Параметры: +// Код - Строка - код +// +// Возвращаемое значение: +// Число - Тип +// +Функция ТипОбъектаПоКодуСериализации(Код) + Для Каждого Элемент Из ТипыОбъектовАдресацииАдресаРФ() Цикл + Если Элемент.Код = Код Тогда + Возврат Элемент; + КонецЕсли; + КонецЦикла; + + Возврат Неопределено; +КонецФункции + +// Возвращает XPath для номера дополнительного объекта адресации. +// +// Параметры; +// СтрокаЗначения - Строка - искомый тип, например "Дом", "Корпус". +// +// Возвращаемое значение: +// Строка - XPath +// +Функция XPathНомераДополнительногоОбъектаАдресации(СтрокаЗначения) + + Код = КодСериализацииОбъектаАдресации(СтрокаЗначения); + Если Код = Неопределено Тогда + Код = СтрЗаменить(СтрокаЗначения, "'", ""); + КонецЕсли; + + Возврат "ДопАдрЭл/Номер[Тип='" + Код + "']"; +КонецФункции + +// Возвращает XPath для почтового индекса. +// +// Возвращаемое значение: +// Строка - XPath +// +Функция XPathПочтовогоИндекса() + + Возврат "ДопАдрЭл[ТипАдрЭл='" + КодСериализацииПочтовогоИндекса() + "']"; + +КонецФункции + +Функция АдресПустой(Знач Владелец) + + // Список игнорируемых при сравнении свойств текущего владельца - особенности контактной информации. + СписокИгнорируемыхПолей = Новый Соответствие; + СписокИгнорируемыхПолей.Вставить("value", Истина); + СписокИгнорируемыхПолей.Вставить("comment", Истина); + СписокИгнорируемыхПолей.Вставить("type", Истина); + СписокИгнорируемыхПолей.Вставить("addressType", Истина); + СписокИгнорируемыхПолей.Вставить("country", Истина); + СписокИгнорируемыхПолей.Вставить("countryCode", Истина); + + Для каждого ПолеАдреса Из Владелец Цикл + Если СписокИгнорируемыхПолей.Получить(ПолеАдреса.Ключ) <> Истина И ЗначениеЗаполнено(ПолеАдреса.Значение) Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; + +КонецФункции + #КонецОбласти #КонецОбласти diff --git a/SSL/src/CommonModules/Анкетирование/Module.bsl b/SSL/src/CommonModules/Анкетирование/Module.bsl index d8e5e0c09..1d06130b4 100644 --- a/SSL/src/CommonModules/Анкетирование/Module.bsl +++ b/SSL/src/CommonModules/Анкетирование/Module.bsl @@ -908,7 +908,7 @@ ЭлементГруппаВопросаБулево.Вид = ВидГруппыФормы.ОбычнаяГруппа; ЭлементГруппаВопросаБулево.ОтображатьЗаголовок = Ложь; ЭлементГруппаВопросаБулево.Отображение = ОтображениеОбычнойГруппы.Нет; - ЭлементГруппаВопросаБулево.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + ЭлементГруппаВопросаБулево.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; ЭлементГруппаВопросаБулево.РастягиватьПоГоризонтали = Истина; ЭлементГруппаВопросаБулево.РастягиватьПоВертикали = Ложь; КонецЕсли; @@ -1076,7 +1076,7 @@ ЭлементГруппаВариантОтвета.Вид = ВидГруппыФормы.ОбычнаяГруппа; ЭлементГруппаВариантОтвета.Отображение = ОтображениеОбычнойГруппы.Нет; - ЭлементГруппаВариантОтвета.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + ЭлементГруппаВариантОтвета.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; ЭлементГруппаВариантОтвета.ОтображатьЗаголовок = Ложь; ЭлементГруппаВариантОтвета.РастягиватьПоГоризонтали = Истина; @@ -1316,7 +1316,7 @@ ЭлементГруппаВопросаБулево.Вид = ВидГруппыФормы.ОбычнаяГруппа; ЭлементГруппаВопросаБулево.ОтображатьЗаголовок = Ложь; ЭлементГруппаВопросаБулево.Отображение = ОтображениеОбычнойГруппы.Нет; - ЭлементГруппаВопросаБулево.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + ЭлементГруппаВопросаБулево.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; ЭлементГруппаВопросаБулево.РастягиватьПоГоризонтали = Истина; ЭлементГруппаВопросаБулево.РастягиватьПоВертикали = Ложь; КонецЕсли; @@ -1458,7 +1458,7 @@ ЭлементГруппаВариантОтвета.Вид = ВидГруппыФормы.ОбычнаяГруппа; ЭлементГруппаВариантОтвета.Отображение = ОтображениеОбычнойГруппы.Нет; - ЭлементГруппаВариантОтвета.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + ЭлементГруппаВариантОтвета.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; ЭлементГруппаВариантОтвета.ОтображатьЗаголовок = Ложь; ЭлементГруппаВариантОтвета.РастягиватьПоГоризонтали = Истина; diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl index 75086f8a7..60f690d97 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl @@ -1209,6 +1209,16 @@ КонецПроцедуры +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииСписковСОграничениемДоступа(Списки) Экспорт + + Списки.Вставить(Метаданные.РегистрыСведений.ДанныеБизнесПроцессов, Истина); + Списки.Вставить(Метаданные.РегистрыСведений.ИсполнителиЗадач, Истина); + Списки.Вставить(Метаданные.БизнесПроцессы.Задание, Истина); + Списки.Вставить(Метаданные.Задачи.ЗадачаИсполнителя, Истина); + +КонецПроцедуры + // См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов. Процедура ПриНастройкеВариантовОтчетов(Настройки) Экспорт МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); @@ -2187,67 +2197,64 @@ Функция КоличествоЗадачИсполнителя() Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | КОЛИЧЕСТВО(ЗадачиПоИсполнителю.Ссылка) КАК Количество - |ИЗ - | Задача.ЗадачаИсполнителя.ЗадачиПоИсполнителю КАК ЗадачиПоИсполнителю - |ГДЕ - | НЕ ЗадачиПоИсполнителю.ПометкаУдаления - | И НЕ ЗадачиПоИсполнителю.Выполнена - | И ЗадачиПоИсполнителю.СостояниеБизнесПроцесса = ЗНАЧЕНИЕ(Перечисление.СостоянияБизнесПроцессов.Активен) - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | КОЛИЧЕСТВО(ЗадачиПоИсполнителю.Ссылка) - |ИЗ - | Задача.ЗадачаИсполнителя.ЗадачиПоИсполнителю КАК ЗадачиПоИсполнителю - |ГДЕ - | ЗадачиПоИсполнителю.СрокИсполнения <> ДАТАВРЕМЯ(1, 1, 1) И ЗадачиПоИсполнителю.СрокИсполнения <= &ТекущаяДата - | И НЕ ЗадачиПоИсполнителю.ПометкаУдаления - | И НЕ ЗадачиПоИсполнителю.Выполнена - | И ЗадачиПоИсполнителю.СостояниеБизнесПроцесса = ЗНАЧЕНИЕ(Перечисление.СостоянияБизнесПроцессов.Активен) - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | КОЛИЧЕСТВО(ЗадачиПоИсполнителю.Ссылка) - |ИЗ - | Задача.ЗадачаИсполнителя.ЗадачиПоИсполнителю КАК ЗадачиПоИсполнителю - |ГДЕ - | ЗадачиПоИсполнителю.СрокИсполнения > &ТекущаяДата - | И ЗадачиПоИсполнителю.СрокИсполнения <= &Сегодня - | И НЕ ЗадачиПоИсполнителю.ПометкаУдаления - | И НЕ ЗадачиПоИсполнителю.Выполнена - | И ЗадачиПоИсполнителю.СостояниеБизнесПроцесса = ЗНАЧЕНИЕ(Перечисление.СостоянияБизнесПроцессов.Активен) - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | КОЛИЧЕСТВО(ЗадачиПоИсполнителю.Ссылка) - |ИЗ - | Задача.ЗадачаИсполнителя.ЗадачиПоИсполнителю КАК ЗадачиПоИсполнителю - |ГДЕ - | ЗадачиПоИсполнителю.СрокИсполнения > &Сегодня - | И ЗадачиПоИсполнителю.СрокИсполнения <= &КонецНедели - | И НЕ ЗадачиПоИсполнителю.ПометкаУдаления - | И НЕ ЗадачиПоИсполнителю.Выполнена - | И ЗадачиПоИсполнителю.СостояниеБизнесПроцесса = ЗНАЧЕНИЕ(Перечисление.СостоянияБизнесПроцессов.Активен) - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | КОЛИЧЕСТВО(ЗадачиПоИсполнителю.Ссылка) - |ИЗ - | Задача.ЗадачаИсполнителя.ЗадачиПоИсполнителю КАК ЗадачиПоИсполнителю - |ГДЕ - | ЗадачиПоИсполнителю.СрокИсполнения > &КонецНедели - | И ЗадачиПоИсполнителю.СрокИсполнения <= &КонецСледующейНедели - | И НЕ ЗадачиПоИсполнителю.ПометкаУдаления - | И НЕ ЗадачиПоИсполнителю.Выполнена - | И ЗадачиПоИсполнителю.СостояниеБизнесПроцесса = ЗНАЧЕНИЕ(Перечисление.СостоянияБизнесПроцессов.Активен)"; - + Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ЗадачиПоИсполнителю.Ссылка КАК Ссылка, + | ЗадачиПоИсполнителю.СрокИсполнения КАК СрокИсполнения + |ПОМЕСТИТЬ БизнесПроцессыПользователя + |ИЗ + | Задача.ЗадачаИсполнителя.ЗадачиПоИсполнителю КАК ЗадачиПоИсполнителю + |ГДЕ + | НЕ ЗадачиПоИсполнителю.ПометкаУдаления + | И НЕ ЗадачиПоИсполнителю.Выполнена + | И ЗадачиПоИсполнителю.СостояниеБизнесПроцесса = ЗНАЧЕНИЕ(Перечисление.СостоянияБизнесПроцессов.Активен) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | КОЛИЧЕСТВО(БизнесПроцессыПользователя.Ссылка) КАК Количество + |ИЗ + | БизнесПроцессыПользователя КАК БизнесПроцессыПользователя + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | КОЛИЧЕСТВО(БизнесПроцессыПользователя.Ссылка) + |ИЗ + | БизнесПроцессыПользователя КАК БизнесПроцессыПользователя + |ГДЕ + | БизнесПроцессыПользователя.СрокИсполнения <> ДАТАВРЕМЯ(1, 1, 1) + | И БизнесПроцессыПользователя.СрокИсполнения <= &ТекущаяДата + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | КОЛИЧЕСТВО(БизнесПроцессыПользователя.Ссылка) + |ИЗ + | БизнесПроцессыПользователя КАК БизнесПроцессыПользователя + |ГДЕ + | БизнесПроцессыПользователя.СрокИсполнения > &ТекущаяДата + | И БизнесПроцессыПользователя.СрокИсполнения <= &Сегодня + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | КОЛИЧЕСТВО(БизнесПроцессыПользователя.Ссылка) + |ИЗ + | БизнесПроцессыПользователя КАК БизнесПроцессыПользователя + |ГДЕ + | БизнесПроцессыПользователя.СрокИсполнения > &Сегодня + | И БизнесПроцессыПользователя.СрокИсполнения <= &КонецНедели + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | КОЛИЧЕСТВО(БизнесПроцессыПользователя.Ссылка) + |ИЗ + | БизнесПроцессыПользователя КАК БизнесПроцессыПользователя + |ГДЕ + | БизнесПроцессыПользователя.СрокИсполнения > &КонецНедели + | И БизнесПроцессыПользователя.СрокИсполнения <= &КонецСледующейНедели"; + Сегодня = Новый СтандартныйПериод(ВариантСтандартногоПериода.Сегодня); ЭтаНеделя = Новый СтандартныйПериод(ВариантСтандартногоПериода.ЭтаНеделя); СледующаяНеделя = Новый СтандартныйПериод(ВариантСтандартногоПериода.СледующаяНеделя); diff --git a/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl index 1a35e3711..16aec3452 100644 --- a/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl @@ -137,8 +137,11 @@ Попытка Отчеты[ОтчетМетаданные.Имя].НастроитьВариантыОтчета(Настройки, НастройкиОтчета); Исключение - ТекстОшибки = НСтр("ru = 'Не удалось настроить варианты отчета из модуля менеджера:'"); - ТекстОшибки = ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Недопустимое значение параметра КлючВарианта в процедуре ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера. + |Не удалось настроить варианты отчета из модуля менеджера по причине: + |%1'"), + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗаписатьВЖурнал(УровеньЖурналаРегистрации.Ошибка, ТекстОшибки, ОтчетМетаданные); КонецПопытки; КонецПроцедуры @@ -223,8 +226,8 @@ Если СтрокаОтчет = Неопределено Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка получения описания отчета ""%1"": он не подключен к подсистеме ""%2"". - |Проверьте свойство ""Хранилище вариантов"" в свойствах отчета.'"), + НСтр("ru = 'Недопустимое значение параметра Отчет в процедуре ВариантыОтчетов.ОписаниеОтчета. + |Отчет ""%1"" не подключен к подсистеме ""%2"". Проверьте свойство ""Хранилище вариантов"" в свойствах отчета.'"), Строка(Отчет), ВариантыОтчетовКлиентСервер.НаименованиеПодсистемы("")); КонецЕсли; @@ -318,7 +321,8 @@ Если СтрокаВариант = Неопределено Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Вариант ""%1"" не найден для отчета ""%2"".'"), + НСтр("ru = 'Недопустимое значение параметра КлючВарианта в процедуре ВариантыОтчетов.ОписаниеВарианта: + |вариант ""%1"" отсутствует в отчете ""%2"".'"), КлючВарианта, СтрокаОтчет.Метаданные.Имя); КонецЕсли; @@ -592,7 +596,7 @@ Запрос.Текст = СтрЗаменить(ШаблонЗапроса, "&Условие", "ТипОтчета = ЗНАЧЕНИЕ(Перечисление.ТипыОтчетов.Внутренний)"); ИначеЕсли ТипЗнч(Ключ) = Тип("ОбъектМетаданных") Тогда Запрос.Текст = СтрЗаменить(ШаблонЗапроса, "&Условие", "Отчет = &Отчет"); - Запрос.УстановитьПараметр("Отчет", СтандартныеПодсистемыСервер.ИдентификаторОбъектаМетаданных(Ключ)); + Запрос.УстановитьПараметр("Отчет", ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Ключ)); ИначеЕсли ТипЗнч(Ключ) = Тип("СправочникСсылка.ВариантыОтчетов") Тогда Запрос.Текст = СтрЗаменить(ШаблонЗапроса, "&Условие", "Ссылка = &Ссылка"); Запрос.УстановитьПараметр("Ссылка", Ключ); @@ -952,7 +956,7 @@ // то настройки размещения можно взять только из метаданных отчета. Найденные = ПодсистемыОтчетов.НайтиСтроки(Новый Структура("ОтчетПолноеИмя", СтрокаТаблицы.ОтчетПолноеИмя)); Для Каждого СтрокаПодсистема Из Найденные Цикл - СсылкаПодсистемы = СтандартныеПодсистемыСервер.ИдентификаторОбъектаМетаданных(СтрокаПодсистема.ПодсистемаМетаданные); + СсылкаПодсистемы = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(СтрокаПодсистема.ПодсистемаМетаданные); Если ТипЗнч(СсылкаПодсистемы) = Тип("Строка") Тогда Продолжить; КонецЕсли; @@ -1935,7 +1939,7 @@ Иначе - Результат.Отчет = СтандартныеПодсистемыСервер.ИдентификаторОбъектаМетаданных(Результат.ОтчетМетаданные); + Результат.Отчет = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Результат.ОтчетМетаданные); Результат.ТипОтчета = ВариантыОтчетовКлиентСервер.ТипОтчета(Результат.Отчет); КонецЕсли; @@ -1948,7 +1952,9 @@ // Для отчета по внедрению. // Формирует дерево настроек и размещения предопределенных вариантов отчетов. -// Только для отчетов, подключенных к подсистеме. +// Только для отчетов, подключенных к подсистеме. +// После завершения работы с настройками следует вызвать ОтчетыСервер.ОчиститьДеревоЗначений +// для очистки от циклических ссылок для корректного освобождение памяти. // // Возвращаемое значение: // ДеревоЗначений - Настройки предопределенных вариантов отчетов, подключенных к подсистеме. @@ -2049,11 +2055,15 @@ ПодсистемыОтчетов = РазмещениеОтчетовВПодсистемах(); КэшФлажкаХранилища = Неопределено; Для Каждого ОтчетМетаданные Из Метаданные.Отчеты Цикл + Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() И ОтчетМетаданные.РасширениеКонфигурации() <> Неопределено Тогда + Продолжить; + КонецЕсли; + Если Не ОтчетПодключенКХранилищу(ОтчетМетаданные, КэшФлажкаХранилища) Тогда Продолжить; КонецЕсли; - ОтчетСсылка = СтандартныеПодсистемыСервер.ИдентификаторОбъектаМетаданных(ОтчетМетаданные); + ОтчетСсылка = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОтчетМетаданные); ОтчетТип = ВариантыОтчетовКлиентСервер.ТипОтчета(ОтчетСсылка, Истина); Если ФильтрПоТипуОтчетов <> Неопределено И ФильтрПоТипуОтчетов <> ОтчетТип Тогда Продолжить; @@ -2337,9 +2347,9 @@ Обработчик.Процедура = "ВариантыОтчетов.ОтложенноеОбновлениеРазделенныхДанныхКонфигурацииПолное"; Обработчик.Комментарий = НСтр("ru = 'Обновление индекса поиска отчетов, сохраненных пользователями.'"); - // 3.4. Установить ссылки на идентификаторы объектов метаданных в настройках вариантов универсального отчета. + // 3.4. Установить соответствующие ссылки на идентификаторы объектов метаданных в настройках вариантов универсального отчета. Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.4.6.23"; + Обработчик.Версия = "3.0.1.81"; Обработчик.Идентификатор = Новый УникальныйИдентификатор("6cd3c6c1-6919-4e18-9725-eb6dbb841f4a"); Обработчик.РежимВыполнения = "Отложенно"; Обработчик.ОчередьОтложеннойОбработки = 1; @@ -2349,9 +2359,9 @@ Обработчик.ИзменяемыеОбъекты = "Справочник.ВариантыОтчетов"; Обработчик.БлокируемыеОбъекты = "Справочник.ВариантыОтчетов"; Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; - Обработчик.Комментарий = НСтр("ru = 'Установка параметра ИсточникДанных в настройках вариантов отчета ""Универсальный отчет"". - |Для того чтобы формировать варианты этого отчета следует дождаться завершения обработки.'"); - + Обработчик.Комментарий = НСтр("ru = 'Установка параметра ИсточникДанных в настройках вариантов универсального отчета. + |После завершения обработки, переименование объектов метаданных не приведет к потере сохраненных вариантов отчетов'"); + КонецПроцедуры // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок. @@ -2555,6 +2565,15 @@ КонецЦикла; КонецПроцедуры +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииСписковСОграничениемДоступа(Списки) Экспорт + + Списки.Вставить(Метаданные.Справочники.ВариантыОтчетов, Истина); + Списки.Вставить(Метаданные.Справочники.ПользовательскиеНастройкиОтчетов, Истина); + Списки.Вставить(Метаданные.РегистрыСведений.НастройкиВариантовОтчетов, Истина); + +КонецПроцедуры + // См. ЦентрМониторингаПереопределяемый.ПриСбореПоказателейСтатистикиКонфигурации. Процедура ПриСбореПоказателейСтатистикиКонфигурации() Экспорт @@ -3111,13 +3130,13 @@ // Записывает в журнал регистрации событие завершения процедуры. Процедура ЗаписатьВЖурналЗавершениеПроцедуры(ИмяПроцедуры, ИзмененоОбъектов = Неопределено) - Текст = НСтр("ru = 'Завершение процедуры ""%1"".'"); + Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Завершение процедуры ""%1"".'"), ИмяПроцедуры); Если ИзмененоОбъектов <> Неопределено Тогда - Текст = Текст + " " + НСтр("ru = 'Изменено %2 объектов.'"); + Текст = Текст + " " + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Изменено %1 объектов.'"), ИзмененоОбъектов); КонецЕсли; ЗаписьЖурналаРегистрации(ВариантыОтчетовКлиентСервер.НаименованиеПодсистемы(Неопределено), - УровеньЖурналаРегистрации.Информация,,, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Запуск процедуры ""%1"".'"), ИмяПроцедуры, ИзмененоОбъектов)); // Не переводить на СтрШаблон. + УровеньЖурналаРегистрации.Информация, , , Текст); КонецПроцедуры @@ -3497,13 +3516,13 @@ ЗаписатьВЖурналЗавершениеПроцедуры(ПредставлениеПроцедуры, Записано); - Если Ошибок > 0 И НомерПопытки <= 30 Тогда - // Следующий запуск должен состояться. - ТекстОшибки = ПредставлениеПроцедуры + ":" - + Символы.ПС + НСтр("ru = 'Не удалось уменьшить количество быстрых настроек %1 отчетов.'"); - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, Ошибок); - ВызватьИсключение ТекстОшибки; + Если Ошибок > 0 Тогда + ТекстОшибки = ПредставлениеПроцедуры + ":" + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось уменьшить количество быстрых настроек %1 отчетов.'"), Ошибок); + ЗаписьЖурналаРегистрации(ВариантыОтчетовКлиентСервер.НаименованиеПодсистемы(Неопределено), + УровеньЖурналаРегистрации.Предупреждение, , , ТекстОшибки); КонецЕсли; + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -3669,7 +3688,7 @@ | ВариантыОтчетов.Пользовательский | И ВариантыОтчетов.ТипОтчета = &ТипОтчета | И ВариантыОтчетов.Отчет В(&ДоступныеОтчеты)"; - Запрос.УстановитьПараметр("ДоступныеОтчеты", ВариантыОтчетовПовтИсп.ДоступныеОтчеты(Ложь)); + Запрос.УстановитьПараметр("ДоступныеОтчеты", Новый Массив(ВариантыОтчетовПовтИсп.ДоступныеОтчеты(Ложь))); Если Кэш.Режим = "РазделенныеДанныеКонфигурации" Тогда Запрос.УстановитьПараметр("ТипОтчета", Перечисления.ТипыОтчетов.Внутренний); ИначеЕсли Кэш.Режим = "РазделенныеДанныеРасширений" Тогда @@ -3754,10 +3773,8 @@ КонецЕсли; КонецЦикла; - // Для платформы (очистка коллекции вручную для освобождение памяти от цикличных ссылок). Если Кэш.ОбщиеДанные Тогда - ДеревоВариантов.Колонки.Очистить(); - ДеревоВариантов.Строки.Очистить(); + ОтчетыСервер.ОчиститьДеревоЗначений(ДеревоВариантов); КонецЕсли; ЗаписатьВЖурналЗавершениеПроцедуры(ПредставлениеПроцедуры); @@ -3948,7 +3965,7 @@ ВариантОбъект.Родитель = ОписаниеВарианта.ВариантРодитель; Для Каждого КлючИЗначение Из ОписаниеВарианта.Размещение Цикл - СсылкаПодсистемы = СтандартныеПодсистемыСервер.ИдентификаторОбъектаМетаданных(КлючИЗначение.Ключ); + СсылкаПодсистемы = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(КлючИЗначение.Ключ); Если ТипЗнч(СсылкаПодсистемы) = Тип("Строка") Тогда Продолжить; КонецЕсли; @@ -3997,7 +4014,7 @@ КонецЕсли; Для Каждого КлючИЗначение Из ОписаниеВарианта.Размещение Цикл - Подсистема = СтандартныеПодсистемыСервер.ИдентификаторОбъектаМетаданных(КлючИЗначение.Ключ); + Подсистема = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(КлючИЗначение.Ключ); Если ТипЗнч(Подсистема) = Тип("Строка") Тогда Продолжить; КонецЕсли; @@ -4528,7 +4545,7 @@ Продолжить; // Заполнение невозможно. КонецЕсли; - ПодсистемаСсылка = СтандартныеПодсистемыСервер.ИдентификаторОбъектаМетаданных(ПодсистемаМетаданные); + ПодсистемаСсылка = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ПодсистемаМетаданные); Если Не ЗначениеЗаполнено(ПодсистемаСсылка) Или ТипЗнч(ПодсистемаСсылка) = Тип("Строка") Тогда ВариантОбъект.Размещение.Удалить(СтрокаТаблицы); Продолжить; // Заполнение невозможно. @@ -5107,8 +5124,8 @@ Информация = ОтчетыСервер.РасширеннаяИнформацияОНастройках(КомпоновщикНастроекКД, НастройкиОтчета, ОтчетОбъект, УсловияВывода); БыстрыеНастройки = Информация.ПользовательскиеНастройки.Скопировать(Новый Структура("ВыводРазрешен, Быстрая", Истина, Истина)); - ОтчетыСервер.ОчиститьРасширеннуюИнформациюОНастройках(Информация); Если БыстрыеНастройки.Количество() <= 2 Тогда + ОтчетыСервер.ОчиститьРасширеннуюИнформациюОНастройках(Информация); Возврат Ложь; // Уменьшение количества не требуется. КонецЕсли; @@ -5127,16 +5144,20 @@ КонецЦикла; ВариантОбъект.Настройки = Новый ХранилищеЗначения(КомпоновщикНастроекКД.Настройки); + ОтчетыСервер.ОчиститьРасширеннуюИнформациюОНастройках(Информация); Возврат Истина; КонецФункции Функция НастройкиФормыОтчета(ОтчетСсылка, КлючВарианта, ОтчетОбъект) Экспорт НастройкиОтчета = ОтчетыКлиентСервер.ПолучитьНастройкиОтчетаПоУмолчанию(); + ОтчетыСНастройками = ВариантыОтчетовПовтИсп.Параметры().ОтчетыСНастройками; - Если ОтчетыСНастройками.Найти(ОтчетСсылка) = Неопределено Тогда + Если ОтчетыСНастройками.Найти(ОтчетСсылка) = Неопределено + И (ОтчетОбъект = Неопределено Или Метаданные.Отчеты.Содержит(ОтчетОбъект.Метаданные()))Тогда Возврат НастройкиОтчета; КонецЕсли; + Если ОтчетОбъект = Неопределено Тогда Подключение = ПодключитьОтчетОбъект(ОтчетСсылка, Ложь); Если Подключение.Успех Тогда @@ -5149,7 +5170,13 @@ Возврат НастройкиОтчета; КонецЕсли; КонецЕсли; - ОтчетОбъект.ОпределитьНастройкиФормы(Неопределено, КлючВарианта, НастройкиОтчета); + + Попытка + ОтчетОбъект.ОпределитьНастройкиФормы(Неопределено, КлючВарианта, НастройкиОтчета); + Исключение + НастройкиОтчета = ОтчетыКлиентСервер.ПолучитьНастройкиОтчетаПоУмолчанию(); + КонецПопытки; + Если Не ГлобальныеНастройки().РазрешеноИзменятьВарианты Тогда НастройкиОтчета.РазрешеноИзменятьВарианты = Ложь; КонецЕсли; @@ -5937,7 +5964,7 @@ Функция ОтключенныеВариантыОтчетов(Знач ОтчетыПользователя = Неопределено) Экспорт Если ОтчетыПользователя = Неопределено Тогда - ОтчетыПользователя = ВариантыОтчетовПовтИсп.ДоступныеОтчеты(); + ОтчетыПользователя = Новый Массив(ВариантыОтчетовПовтИсп.ДоступныеОтчеты()); КонецЕсли; // Получить варианты, недоступные по функциональным опциям. @@ -5999,7 +6026,7 @@ ОтключенныеРазработчиком = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку(0); ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ОтключенныеВарианты, ОтключенныеРазработчиком); - Возврат Новый ФиксированныйМассив(ОтключенныеВарианты); + Возврат ОтключенныеВарианты; КонецФункции diff --git a/SSL/src/CommonModules/ВариантыОтчетовПовтИсп/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовПовтИсп/Module.bsl index 79cbb134a..fa5fe1de4 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовПовтИсп/Module.bsl @@ -12,12 +12,10 @@ Результат = Новый Массив; ПолныеИменаОтчетов = Новый Массив; - УстановленныеРасширенияДоступны = Неопределено; ПоУмолчаниюВсеПодключены = Неопределено; Для Каждого ОтчетМетаданные Из Метаданные.Отчеты Цикл Если Не ПравоДоступа("Просмотр", ОтчетМетаданные) - Или Не ВариантыОтчетов.ОтчетПодключенКХранилищу(ОтчетМетаданные, ПоУмолчаниюВсеПодключены) - Или СтандартныеПодсистемыСервер.ЭтоОбъектРасширенияНеразделенногоПользователя(ОтчетМетаданные, УстановленныеРасширенияДоступны) Тогда + Или Не ВариантыОтчетов.ОтчетПодключенКХранилищу(ОтчетМетаданные, ПоУмолчаниюВсеПодключены) Тогда Продолжить; КонецЕсли; Если ПроверятьФункциональныеОпции @@ -45,7 +43,7 @@ // СправочникСсылка.ПредопределенныеВариантыОтчетовРасширений. // Функция ОтключенныеВариантыПрограммы() Экспорт - Возврат ВариантыОтчетов.ОтключенныеВариантыОтчетов(); + Возврат Новый ФиксированныйМассив(ВариантыОтчетов.ОтключенныеВариантыОтчетов()); КонецФункции #КонецОбласти @@ -86,7 +84,6 @@ МассивПолныхИмен = Новый Массив; ПолныеИменаСтрокДерева = Новый Соответствие; - УстановленныеРасширенияДоступны = Неопределено; ИдентификаторНачальнойСтраницы = ВариантыОтчетовКлиентСервер.ИдентификаторНачальнойСтраницы(); СписокРазделов = ВариантыОтчетов.СписокРазделов(); @@ -110,8 +107,7 @@ Если Не ЭтоНачальнаяСтраница И (Не ПравоДоступа("Просмотр", РазделМетаданные) - Или Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(РазделМетаданные) - Или СтандартныеПодсистемыСервер.ЭтоОбъектРасширенияНеразделенногоПользователя(РазделМетаданные, УстановленныеРасширенияДоступны)) Тогда + Или Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(РазделМетаданные)) Тогда Продолжить; // Подсистема не доступна по ФО или по правам. КонецЕсли; @@ -139,7 +135,7 @@ Приоритет = Приоритет + 1; СтрокаДерева.Приоритет = Формат(Приоритет, "ЧЦ=4; ЧДЦ=0; ЧВН=; ЧГ=0"); Если Не ЭтоНачальнаяСтраница Тогда - ДобавитьПодсистемыТекущегоПользователя(СтрокаДерева, РазделМетаданные, МассивПолныхИмен, ПолныеИменаСтрокДерева, УстановленныеРасширенияДоступны); + ДобавитьПодсистемыТекущегоПользователя(СтрокаДерева, РазделМетаданные, МассивПолныхИмен, ПолныеИменаСтрокДерева); КонецЕсли; КонецЦикла; @@ -163,7 +159,7 @@ КонецФункции // Добавляет подсистемы родителя с фильтром по правам доступа и функциональным опциям. -Процедура ДобавитьПодсистемыТекущегоПользователя(СтрокаРодителя, МетаданныеРодителя, МассивПолныхИмен, ПолныеИменаСтрокДерева, УстановленныеРасширенияДоступны) +Процедура ДобавитьПодсистемыТекущегоПользователя(СтрокаРодителя, МетаданныеРодителя, МассивПолныхИмен, ПолныеИменаСтрокДерева) ПриоритетРодителя = СтрокаРодителя.Приоритет; Приоритет = 0; @@ -172,8 +168,7 @@ Если Не ПодсистемаМетаданные.ВключатьВКомандныйИнтерфейс Или Не ПравоДоступа("Просмотр", ПодсистемаМетаданные) - Или Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(ПодсистемаМетаданные) - Или СтандартныеПодсистемыСервер.ЭтоОбъектРасширенияНеразделенногоПользователя(ПодсистемаМетаданные, УстановленныеРасширенияДоступны) Тогда + Или Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(ПодсистемаМетаданные) Тогда Продолжить; // Подсистема не доступна по ФО или по правам. КонецЕсли; @@ -196,7 +191,7 @@ КонецЕсли; СтрокаДерева.Приоритет = ПриоритетРодителя + Формат(Приоритет, "ЧЦ=4; ЧДЦ=0; ЧВН=; ЧГ=0"); - ДобавитьПодсистемыТекущегоПользователя(СтрокаДерева, ПодсистемаМетаданные, МассивПолныхИмен, ПолныеИменаСтрокДерева, УстановленныеРасширенияДоступны); + ДобавитьПодсистемыТекущегоПользователя(СтрокаДерева, ПодсистемаМетаданные, МассивПолныхИмен, ПолныеИменаСтрокДерева); КонецЦикла; КонецПроцедуры diff --git a/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl b/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl index 17f6f4e74..2f963382e 100644 --- a/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl +++ b/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl @@ -265,12 +265,13 @@ // Записывает версию объекта в информационную базу. // // Параметры: -// Источник - Объект - записываемый объект ИБ; +// Источник - СправочникОбъект, ДокументОбъект и т.п. - записываемый объект ИБ; // РежимЗаписи - РежимЗаписиДокумента. // -//Процедура ЗаписатьВерсиюОбъекта(Источник, РежимЗаписиПроведение = Ложь) Экспорт Процедура ЗаписатьВерсиюОбъекта(Знач Источник, РежимЗаписи = Неопределено) Экспорт + // Безусловная проверка на ОбменДанными.Загрузка не требуется, т.к. в момент записи + // версионируемого объекта при обмене необходимо сохранить его текущую версию в истории версий. Если Не ПолучитьФункциональнуюОпцию("ИспользоватьВерсионированиеОбъектов") Тогда Возврат; КонецЕсли; @@ -284,8 +285,8 @@ КонецЕсли; Если Источник.ОбменДанными.Загрузка - И Источник.ДополнительныеСвойства.Свойство("ПропуститьЗаписьВерсииОбъекта") - И ПривилегированныйРежим() Тогда + И Источник.ДополнительныеСвойства.Свойство("ПропуститьЗаписьВерсииОбъекта") + И ПривилегированныйРежим() Тогда Возврат; КонецЕсли; @@ -1357,6 +1358,13 @@ Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.УстановитьПараметр("ИзмененныеПользователем", ИзмененныеПользователем); + Если ТранзакцияАктивна() Тогда + БлокировкаДанных = Новый БлокировкаДанных(); + ЭлементБлокировки = БлокировкаДанных.Добавить("РегистрСведений.ВерсииОбъектов"); + ЭлементБлокировки.УстановитьЗначение("Объект", Ссылка); + БлокировкаДанных.Заблокировать(); + КонецЕсли; + Выборка = Запрос.Выполнить().Выбрать(); Выборка.Следующий(); diff --git a/SSL/src/CommonModules/ВерсионированиеОбъектовСобытия/Module.bsl b/SSL/src/CommonModules/ВерсионированиеОбъектовСобытия/Module.bsl index a0bcbbd46..2dfd3de20 100644 --- a/SSL/src/CommonModules/ВерсионированиеОбъектовСобытия/Module.bsl +++ b/SSL/src/CommonModules/ВерсионированиеОбъектовСобытия/Module.bsl @@ -8,6 +8,8 @@ // Процедура ЗаписатьВерсиюОбъекта(Источник, Отказ) Экспорт + // Безусловная проверка на ОбменДанными.Загрузка не требуется, т.к. в момент записи + // версионируемого объекта при обмене необходимо сохранить его текущую версию в истории версий. ВерсионированиеОбъектов.ЗаписатьВерсиюОбъекта(Источник, Ложь); КонецПроцедуры @@ -23,6 +25,8 @@ // Изменение значения параметра позволяет изменить режим проведения. Процедура ЗаписатьВерсиюДокумента(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт + // Безусловная проверка на ОбменДанными.Загрузка не требуется, т.к. в момент записи + // версионируемого объекта при обмене необходимо сохранить его текущую версию в истории версий. ВерсионированиеОбъектов.ЗаписатьВерсиюОбъекта(Источник, РежимЗаписи); КонецПроцедуры diff --git a/SSL/src/CommonModules/Взаимодействия/Module.bsl b/SSL/src/CommonModules/Взаимодействия/Module.bsl index 329356d5a..064a28717 100644 --- a/SSL/src/CommonModules/Взаимодействия/Module.bsl +++ b/SSL/src/CommonModules/Взаимодействия/Module.bsl @@ -348,7 +348,7 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// Шаблоны сообщений +// Шаблоны сообщений. Процедура СоздатьПисьмо(Сообщение, УчетнаяЗапись) Экспорт @@ -671,6 +671,29 @@ КонецПроцедуры +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииСписковСОграничениемДоступа(Списки) Экспорт + + Списки.Вставить(Метаданные.Справочники.ВстречаПрисоединенныеФайлы, Истина); + Списки.Вставить(Метаданные.Справочники.ЗапланированноеВзаимодействиеПрисоединенныеФайлы, Истина); + Списки.Вставить(Метаданные.Справочники.ПапкиЭлектронныхПисем, Истина); + Списки.Вставить(Метаданные.Справочники.ПравилаОбработкиЭлектроннойПочты, Истина); + Списки.Вставить(Метаданные.Справочники.СообщениеSMSПрисоединенныеФайлы, Истина); + Списки.Вставить(Метаданные.Справочники.ТелефонныйЗвонокПрисоединенныеФайлы, Истина); + Списки.Вставить(Метаданные.Справочники.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы, Истина); + Списки.Вставить(Метаданные.Справочники.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы, Истина); + Списки.Вставить(Метаданные.Документы.Встреча, Истина); + Списки.Вставить(Метаданные.Документы.ЗапланированноеВзаимодействие, Истина); + Списки.Вставить(Метаданные.Документы.СообщениеSMS, Истина); + Списки.Вставить(Метаданные.Документы.ТелефонныйЗвонок, Истина); + Списки.Вставить(Метаданные.Документы.ЭлектронноеПисьмоВходящее, Истина); + Списки.Вставить(Метаданные.Документы.ЭлектронноеПисьмоИсходящее, Истина); + Списки.Вставить(Метаданные.ЖурналыДокументов.Взаимодействия, Истина); + Списки.Вставить(Метаданные.РегистрыСведений.НастройкиУчетныхЗаписейЭлектроннойПочты, Истина); + Списки.Вставить(Метаданные.РегистрыСведений.ПредметыПапкиВзаимодействий, Истина); + +КонецПроцедуры + // См. УправлениеДоступомПереопределяемый.ПриЗаполненииВидовОграниченийПравОбъектовМетаданных. Процедура ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(Описание) Экспорт @@ -687,6 +710,7 @@ |Справочник.ПапкиЭлектронныхПисем.Изменение.УчетныеЗаписиЭлектроннойПочты |Справочник.ПравилаОбработкиЭлектроннойПочты.Чтение.УчетныеЗаписиЭлектроннойПочты |Справочник.ПравилаОбработкиЭлектроннойПочты.Изменение.УчетныеЗаписиЭлектроннойПочты + |РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты.Чтение.УчетныеЗаписиЭлектроннойПочты |"; КонецЕсли; @@ -710,13 +734,17 @@ |ЖурналДокументов.Взаимодействия.Чтение.Объект.Документ.ТелефонныйЗвонок |ЖурналДокументов.Взаимодействия.Чтение.Объект.Документ.ЭлектронноеПисьмоВходящее |ЖурналДокументов.Взаимодействия.Чтение.Объект.Документ.ЭлектронноеПисьмоИсходящее - |РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты.Чтение.УчетныеЗаписиЭлектроннойПочты + |РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты.Чтение.Пользователи |РегистрСведений.ПредметыПапкиВзаимодействий.Изменение.Объект.Документ.Встреча |РегистрСведений.ПредметыПапкиВзаимодействий.Изменение.Объект.Документ.ЗапланированноеВзаимодействие |РегистрСведений.ПредметыПапкиВзаимодействий.Изменение.Объект.Документ.СообщениеSMS |РегистрСведений.ПредметыПапкиВзаимодействий.Изменение.Объект.Документ.ТелефонныйЗвонок |РегистрСведений.ПредметыПапкиВзаимодействий.Изменение.Объект.Документ.ЭлектронноеПисьмоВходящее |РегистрСведений.ПредметыПапкиВзаимодействий.Изменение.Объект.Документ.ЭлектронноеПисьмоИсходящее + |Справочник.ПапкиЭлектронныхПисем.Чтение.Пользователи + |Справочник.ПапкиЭлектронныхПисем.Изменение.Пользователи + |Справочник.ПравилаОбработкиЭлектроннойПочты.Чтение.Пользователи + |Справочник.ПравилаОбработкиЭлектроннойПочты.Изменение.Пользователи |"; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда @@ -2197,7 +2225,6 @@ ЗаполнитьЗначенияСвойств(Форма, СтруктураРеквизитов, "Предмет, Рассмотрено, РассмотретьПосле"); КонецПроцедуры - /////////////////////////////////////////////////////////////////////////////////// // Процедуры и функции работы с взаимодействиями. @@ -2857,15 +2884,17 @@ КонецЕсли; + ПараметрыПисьма.Вставить("Соединение", Соединение); + Если ПротоколПочты = "" Или ПротоколПочты = "IMAP" Тогда Если ПротоколПочты = "IMAP" Тогда ПараметрыПисьма.Вставить("ПротоколПочты","IMAP"); КонецЕсли; - ИдентификаторПисьма = РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(Объект.УчетнаяЗапись, ПараметрыПисьма ,Соединение, ПротоколПочты); + ИдентификаторПисьма = РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(Объект.УчетнаяЗапись, ПараметрыПисьма); ИначеЕсли ПротоколПочты = "Все" Тогда - ИдентификаторПисьма = РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(Объект.УчетнаяЗапись, ПараметрыПисьма ,Соединение, ""); + ИдентификаторПисьма = РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(Объект.УчетнаяЗапись, ПараметрыПисьма); ПараметрыПисьма.Вставить("ПротоколПочты","IMAP"); - Объект.ИдентификаторСообщенияОтправкаIMAP = РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(Объект.УчетнаяЗапись, ПараметрыПисьма ,Соединение, "IMAP"); + Объект.ИдентификаторСообщенияОтправкаIMAP = РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(Объект.УчетнаяЗапись, ПараметрыПисьма); КонецЕсли; Возврат ИдентификаторПисьма; @@ -2997,16 +3026,14 @@ ЭлектронныеПодписиВладельца = МодульЭлектроннаяПодпись.УстановленныеПодписи(ВыборкаВложения.Ссылка); НомерСтроки = 1; Для каждого ЭП Из ЭлектронныеПодписиВладельца Цикл - - СоотвВложения.Вставить(ВыборкаВложения.ПолноеНаименование + СоотвВложения.Вставить(ВыборкаВложения.ПолноеНаименование + "-DS("+ НомерСтроки + ")." - + РасширениеДляФайловПодписи, ЭП.Подпись); + + РасширениеДляФайловПодписи, ЭП.Подпись); НомерСтроки = НомерСтроки + 1; - КонецЦикла; - + КонецЕсли; - + КонецЦикла; Пока НомерОтображаемогоВложения <= КоличествоВложений Цикл @@ -4655,13 +4682,13 @@ ТекстКОбработке = ТекстHTML; - Если СтрЧислоВхождений(ТекстКОбработке,"" КонецЕсли; НомерПопытки = 1; ТекстПисьма = СодержимоеТегаHTML(ТекстКОбработке, "html", Истина, НомерПопытки); - Пока СтрНайти(ТекстПисьма, ""; - НайденнаяПозицияНачало = СтрНайти(Текст, Начало, НаправлениеПоиска.СНачала, 1, НомерПоПорядку); - НайденнаяПозицияОкончание = СтрНайти(Текст, Окончание, НаправлениеПоиска.СНачала, 1, НомерПоПорядку); + НайденнаяПозицияНачало = СтрНайти(НРег(Текст), НРег(Начало), НаправлениеПоиска.СНачала, 1, НомерПоПорядку); + НайденнаяПозицияОкончание = СтрНайти(НРег(Текст), НРег(Окончание), НаправлениеПоиска.СНачала, 1, НомерПоПорядку); Если НайденнаяПозицияНачало = 0 Или НайденнаяПозицияОкончание = 0 Тогда Возврат ""; @@ -4758,7 +4785,7 @@ Содержимое = Сред(Текст, НайденнаяПозицияНачало, - НайденнаяПозицияОкончание - НайденнаяПозицияНачало); + НайденнаяПозицияОкончание - НайденнаяПозицияНачало + СтрДлина(Окончание)); Если ВключатьОткрывающийЗакрывающийТег Тогда @@ -8185,6 +8212,12 @@ Процедура ЗаполнитьПодменюСтатус(ГруппаПодменю , Форма) Экспорт + Если Не ПолучитьФункциональнуюОпцию("ИспользоватьПризнакРассмотрено") Тогда + + Возврат; + + КонецЕсли; + СписокСтатусов = ВзаимодействияКлиентСервер.СписокСтатусов(); Для Инд = 0 По СписокСтатусов.Количество() - 1 Цикл @@ -8360,6 +8393,9 @@ КонецФункции +/////////////////////////////////////////////////////////////////////////////////// +// Шаблоны сообщений + // Формирует структуру для записи в регистр сведений ПредметыПапкиВзаимодействий. // // Параметры: @@ -8391,9 +8427,6 @@ КонецФункции -/////////////////////////////////////////////////////////////////////////////////// -// Шаблоны сообщений - Функция КомментарийПоНаименованиюШаблона(НаименованиеШаблона) Возврат НСтр("ru = 'Создано и отправлено по шаблону'") + " - " + НаименованиеШаблона; diff --git a/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl b/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl index 451372221..3e4c301ed 100644 --- a/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl @@ -253,8 +253,8 @@ ДанныеУчастникаИсточник.ПредставлениеКонтакта)); ИначеЕсли (ТипЗнч(Основание) = Тип("ДокументСсылка.СообщениеSMS") - И Источник.Элементы.Адресаты.ТекущиеДанные <> Неопределено) - И Источник.Элементы.Найти("Адресаты") <> Неопределено Тогда + И Источник.Элементы.Найти("Адресаты") <> Неопределено + И Источник.Элементы.Адресаты.ТекущиеДанные <> Неопределено) Тогда ДанныеУчастникаИсточник = Источник.Элементы.Адресаты.ТекущиеДанные; ПараметрыОткрытияФормы.Вставить("ДанныеУчастника",Новый Структура("Контакт,КакСвязаться,Представление", @@ -477,6 +477,11 @@ КонецЕсли; + ИначеЕсли ИмяСобытия = "ЗаписьВзаимодействия" + И Параметр = Форма.Объект.Ссылка Тогда + + Форма.Прочитать(); + КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonModules/ВнешниеКомпонентыВМоделиСервисаСлужебный/Module.bsl b/SSL/src/CommonModules/ВнешниеКомпонентыВМоделиСервисаСлужебный/Module.bsl new file mode 100644 index 000000000..aac16bddd --- /dev/null +++ b/SSL/src/CommonModules/ВнешниеКомпонентыВМоделиСервисаСлужебный/Module.bsl @@ -0,0 +1,119 @@ + + +#Область СлужебныйПрограммныйИнтерфейс + +// См. ВнешниеКомпонентыСервер.ОбновитьОбщуюКомпоненту. +Процедура ОбновитьОбщуюКомпоненту(ОписаниеКомпоненты) Экспорт + + Если Не ОбщегоНазначения.РазделениеВключено() Или ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + ВызватьИсключение + НСтр("ru = 'Загрузка общий внешних компонент возможна только в неразделенном режиме модели сервиса.'"); + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые внешние компоненты.Загрузка поставляемой компоненты'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Информация,,, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Инициирована загрузка поставляемой обработки + |%1'"), + ВнешниеКомпонентыСлужебный.ПредставлениеКомпоненты( + ОписаниеКомпоненты.Идентификатор, + ОписаниеКомпоненты.Версия))); + + Ссылка = Справочники.ОбщиеВнешниеКомпоненты.НайтиПоИдентификатору( + ОписаниеКомпоненты.Идентификатор, + ОписаниеКомпоненты.Версия); + + Если Ссылка.Пустая() Тогда + ОбщаяКомпонента = Справочники.ОбщиеВнешниеКомпоненты.СоздатьЭлемент(); + Иначе + ОбщаяКомпонента = Ссылка.ПолучитьОбъект(); + КонецЕсли; + + ОбщаяКомпонента.Заполнить(Неопределено); // Конструктор по умолчанию. + + ДвоичныеДанныеКомпоненты = Новый ДвоичныеДанные(ОписаниеКомпоненты.ПутьКФайлу); + АдресХранилищаФайла = ПоместитьВоВременноеХранилище(ДвоичныеДанныеКомпоненты); + Информация = ВнешниеКомпонентыСлужебный.ИнформацияОКомпонентеИзФайла(АдресХранилищаФайла, Ложь); + + Если Не Информация.Разобрано Тогда + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые внешние компоненты.Загрузка поставляемой компоненты'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , , Информация.ОписаниеОшибки); + Возврат; + КонецЕсли; + + ЗаполнитьЗначенияСвойств(ОбщаяКомпонента, Информация.Реквизиты); // По данным манифеста. + ЗаполнитьЗначенияСвойств(ОбщаяКомпонента, ОписаниеКомпоненты); // По данным с сайта. + + ОбщаяКомпонента.ХранилищеКомпоненты = Новый ХранилищеЗначения(ДвоичныеДанныеКомпоненты); + + Попытка + ОбщаяКомпонента.Записать(); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые внешние компоненты.Загрузка поставляемой компоненты'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + УстановитьПривилегированныйРежим(Ложь); + +КонецПроцедуры + +#Область ОбработчикиСобытийПодсистемКонфигурации + +// См. ГрупповоеИзменениеОбъектовПереопределяемый.ПриОпределенииОбъектовСРедактируемымиРеквизитами. +Процедура ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты) Экспорт + + Объекты.Вставить(Метаданные.Справочники.ОбщиеВнешниеКомпоненты.ПолноеИмя(), "РеквизитыРедактируемыеВГрупповойОбработке"); + +КонецПроцедуры + +// См. ВыгрузкаЗагрузкаДанныхПереопределяемый.ПриЗаполненииТиповИсключаемыхИзВыгрузкиЗагрузки. +Процедура ПриЗаполненииТиповИсключаемыхИзВыгрузкиЗагрузки(Типы) Экспорт + + Типы.Добавить(Метаданные.Справочники.ОбщиеВнешниеКомпоненты); + +КонецПроцедуры + +// См. СтандартныеПодсистемыСервер.ПриОтправкеДанныхГлавному. +Процедура ПриОтправкеДанныхГлавному(ЭлементДанных, ОтправкаЭлемента, Получатель) Экспорт + + Если ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ОбщиеВнешниеКомпоненты") Тогда + ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать; + КонецЕсли; + +КонецПроцедуры + +// См. СтандартныеПодсистемыСервер.ПриОтправкеДанныхПодчиненному. +Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза, Получатель) Экспорт + + Если ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ОбщиеВнешниеКомпоненты") Тогда + ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать; + КонецЕсли; + +КонецПроцедуры + +// См. СтандартныеПодсистемыСервер.ПриПолученииДанныхОтГлавного. +Процедура ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель) Экспорт + + Если ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ОбщиеВнешниеКомпоненты") Тогда + ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; + КонецЕсли; + +КонецПроцедуры + +// См. СтандартныеПодсистемыСервер.ПриПолученииДанныхОтПодчиненного. +Процедура ПриПолученииДанныхОтПодчиненного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель) Экспорт + + Если ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ОбщиеВнешниеКомпоненты") Тогда + ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти diff --git a/SSL/src/CommonModules/ЦентрМониторингаВызовСервераПовтИсп/ЦентрМониторингаВызовСервераПовтИсп.mdo b/SSL/src/CommonModules/ВнешниеКомпонентыВМоделиСервисаСлужебный/ВнешниеКомпонентыВМоделиСервисаСлужебный.mdo similarity index 50% rename from SSL/src/CommonModules/ЦентрМониторингаВызовСервераПовтИсп/ЦентрМониторингаВызовСервераПовтИсп.mdo rename to SSL/src/CommonModules/ВнешниеКомпонентыВМоделиСервисаСлужебный/ВнешниеКомпонентыВМоделиСервисаСлужебный.mdo index 2cca0fb09..db4c118c1 100644 --- a/SSL/src/CommonModules/ЦентрМониторингаВызовСервераПовтИсп/ЦентрМониторингаВызовСервераПовтИсп.mdo +++ b/SSL/src/CommonModules/ВнешниеКомпонентыВМоделиСервисаСлужебный/ВнешниеКомпонентыВМоделиСервисаСлужебный.mdo @@ -1,12 +1,11 @@ - - ЦентрМониторингаВызовСервераПовтИсп + + ВнешниеКомпонентыВМоделиСервисаСлужебный 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..04caaa466 --- /dev/null +++ b/SSL/src/CommonModules/ВнешниеКомпонентыВМоделиСервисаСлужебныйКлиент/Module.bsl @@ -0,0 +1,10 @@ + +#Область СлужебныйПрограммныйИнтерфейс + +Функция ЭтоКомпонентаИзХранилища(Местоположение) Экспорт + + Возврат СтрНачинаетсяС(Местоположение, "e1cib/data/Справочник.ОбщиеВнешниеКомпоненты.ХранилищеКомпоненты"); + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ВнешниеКомпонентыВМоделиСервисаСлужебныйКлиент/ВнешниеКомпонентыВМоделиСервисаСлужебныйКлиент.mdo b/SSL/src/CommonModules/ВнешниеКомпонентыВМоделиСервисаСлужебныйКлиент/ВнешниеКомпонентыВМоделиСервисаСлужебныйКлиент.mdo new file mode 100644 index 000000000..984d510f1 --- /dev/null +++ b/SSL/src/CommonModules/ВнешниеКомпонентыВМоделиСервисаСлужебныйКлиент/ВнешниеКомпонентыВМоделиСервисаСлужебныйКлиент.mdo @@ -0,0 +1,10 @@ + + + ВнешниеКомпонентыВМоделиСервисаСлужебныйКлиент + + ru + Внешние компоненты в модели сервиса служебный клиент + + true + true + diff --git a/SSL/src/CommonModules/ВнешниеКомпонентыВызовСервера/Module.bsl b/SSL/src/CommonModules/ВнешниеКомпонентыВызовСервера/Module.bsl index 4adf1ad9c..45db1aba7 100644 --- a/SSL/src/CommonModules/ВнешниеКомпонентыВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеКомпонентыВызовСервера/Module.bsl @@ -1,18 +1,18 @@ #Область ПрограммныйИнтерфейс -// Возвращает информацию о внешней компоненте по идентификатору и версии. +// Информация о внешней компоненте по идентификатору и версии. // // Параметры: -// Идентификатор - Строка - идентификатор объекта внешней компоненты. -// Версия - Строка, Неопределено - версия компоненты. +// Идентификатор - Строка - идентификатор объекта внешней компоненты. +// Версия - Строка - (необязательный) версия компоненты. // // Возвращаемое значение: // Структура - информация о компоненте -// * Существует - Булево - признак отсутствия компоненты. +// * Существует - Булево - признак отсутствия компоненты. // * ОписаниеОшибки - Строка - краткое описание ошибки. -// * Идентификатор - Строка - идентификатор объекта внешней компоненты. -// * Версия - Строка - версия компоненты. -// * Наименование - Строка - наименование и краткая информация о компоненте. +// * Идентификатор - Строка - идентификатор объекта внешней компоненты. +// * Версия - Строка - версия компоненты. +// * Наименование - Строка - наименование и краткая информация о компоненте. // // Пример: // @@ -28,77 +28,44 @@ // Функция ИнформацияОКомпоненте(Идентификатор, Версия = Неопределено) Экспорт - Результат = Новый Структура; - Результат.Вставить("Существует", Ложь); - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Идентификатор", Идентификатор); - Если Версия = Неопределено Тогда - Запрос.Текст = - "ВЫБРАТЬ - | ВнешниеКомпоненты.Идентификатор КАК Идентификатор, - | МАКСИМУМ(ВнешниеКомпоненты.ДатаВерсии) КАК ДатаВерсии - |ПОМЕСТИТЬ ВТ_МаксимальнаяВерсияКомпоненты - |ИЗ - | Справочник.ВнешниеКомпоненты КАК ВнешниеКомпоненты - |ГДЕ - | ВнешниеКомпоненты.Идентификатор = &Идентификатор - | - |СГРУППИРОВАТЬ ПО - | ВнешниеКомпоненты.Идентификатор - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ВнешниеКомпоненты.Идентификатор КАК Идентификатор, - | ВнешниеКомпоненты.Версия КАК Версия, - | ВнешниеКомпоненты.Наименование КАК Наименование, - | ВнешниеКомпоненты.Использование КАК Использование - |ИЗ - | ВТ_МаксимальнаяВерсияКомпоненты КАК ВТ_МаксимальнаяВерсияКомпоненты - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВнешниеКомпоненты КАК ВнешниеКомпоненты - | ПО (ВнешниеКомпоненты.Идентификатор = ВТ_МаксимальнаяВерсияКомпоненты.Идентификатор) - | И ВТ_МаксимальнаяВерсияКомпоненты.ДатаВерсии = ВнешниеКомпоненты.ДатаВерсии"; - Иначе - Запрос.УстановитьПараметр("Версия", Версия); - Запрос.Текст = - "ВЫБРАТЬ - | ВнешниеКомпоненты.Идентификатор КАК Идентификатор, - | ВнешниеКомпоненты.Версия КАК Версия, - | ВнешниеКомпоненты.Наименование КАК Наименование, - | ВнешниеКомпоненты.Использование КАК Использование - |ИЗ - | Справочник.ВнешниеКомпоненты КАК ВнешниеКомпоненты - |ГДЕ - | ВнешниеКомпоненты.Идентификатор = &Идентификатор - | И ВнешниеКомпоненты.Версия = &Версия"; + Результат = РезультатИнформацияОКомпоненте(); + Результат.Идентификатор = Идентификатор; + Результат.Существует = Ложь; + + Информация = ВнешниеКомпонентыСлужебный.ИнформацияОСохраненнойКомпоненте(Идентификатор, Версия); + + Если Информация.Состояние = "НеНайдена" + Или Информация.Состояние = "НайденаВОбщемХранилище" Тогда + Результат.ОписаниеОшибки = НСтр("ru = 'Внешняя компонента не найдена'"); + Возврат Результат; + КонецЕсли; + + Результат.Существует = Истина; + + Если Информация.Состояние = "ОтключенаАдминистратором" Тогда + Результат.ОписаниеОшибки = НСтр("ru = 'Внешняя компонента отключена'"); + КонецЕсли; + + Результат.Версия = Информация.Реквизиты.Версия; + Результат.Наименование = Информация.Реквизиты.Наименование; + + Возврат Результат; + +КонецФункции - КонецЕсли; +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция РезультатИнформацияОКомпоненте() - РезультатЗапроса = Запрос.Выполнить(); - - Если РезультатЗапроса.Пустой() Тогда - - Результат.Вставить("ОписаниеОшибки", НСтр("ru = 'Внешняя компонента не найдена'")); - Возврат Результат; - - КонецЕсли; + Результат = Новый Структура; + Результат.Вставить("Существует"); + Результат.Вставить("Идентификатор"); + Результат.Вставить("Версия"); + Результат.Вставить("Наименование"); + Результат.Вставить("ОписаниеОшибки"); - Выборка = РезультатЗапроса.Выбрать(); - Выборка.Следующий(); - - Если Выборка.Использование = Перечисления.ВариантыИспользованияВнешнихКомпонент.Отключена Тогда - - Результат.Вставить("ОписаниеОшибки", НСтр("ru = 'Внешняя компонента отключена'")); - Возврат Результат; - - КонецЕсли; - - Результат.Вставить("Идентификатор", Выборка.Идентификатор); - Результат.Вставить("Версия" , Выборка.Версия); - Результат.Вставить("Наименование" , Выборка.Наименование); - - Результат.Вставить("Существует", Истина); Возврат Результат; КонецФункции diff --git a/SSL/src/CommonModules/ВнешниеКомпонентыКлиент/Module.bsl b/SSL/src/CommonModules/ВнешниеКомпонентыКлиент/Module.bsl index d4157c7cc..9346fd961 100644 --- a/SSL/src/CommonModules/ВнешниеКомпонентыКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеКомпонентыКлиент/Module.bsl @@ -1,21 +1,22 @@ #Область ПрограммныйИнтерфейс -// Возвращает структуру параметров для см. процедуру ПодключитьКомпоненту. +// Структура параметров для см. процедуру ПодключитьКомпоненту. // // Возвращаемое значение: // Структура - коллекция параметров: -// * Кэшировать - Булево - (по умолчанию Истина) использовать механизм кэширования компонент на клиенте. +// * Кэшировать - Булево - (по умолчанию Истина) использовать механизм кэширования компонент на клиенте. // * ПредложитьУстановить - Булево - (по умолчанию Истина) предлагать устанавливать и обновлять компоненту. -// * ТекстПояснения - Строка - для чего нужна компонента и что не будет работать, если ее не устанавливать. -// * ИдентификаторыСозданияОбъектов - Массив - идентификатор создания экземпляра модуля объекта, -// используется только для компонент, у которых есть несколько идентификаторов создания объектов, -// при задании параметр Идентификатор будет использоваться только для определения компоненты. +// * ТекстПояснения - Строка - для чего нужна компонента и что не будет работать, если ее не устанавливать. +// * ИдентификаторыСозданияОбъектов - Массив - массив строк идентификаторов создания экземпляров модуля объекта, +// используется только для компонент, у которых есть несколько идентификаторов создания объектов, +// при задании параметр Идентификатор будет использоваться только для определения компоненты. // // Пример: // // ПараметрыПодключения = ВнешниеКомпонентыКлиент.ПараметрыПодключения(); -// ПараметрыПодключения.ТекстПояснения = НСтр("ru = 'Для использования сканера штрихкодов требуется -// |внешняя компонента «1С:Сканеры штрихкода (NativeApi)».'"); +// ПараметрыПодключения.ТекстПояснения = +// НСтр("ru = 'Для использования сканера штрихкодов требуется +// |внешняя компонента «1С:Сканеры штрихкода (NativeApi)».'"); // Функция ПараметрыПодключения() Экспорт @@ -36,24 +37,25 @@ // Параметры: // Оповещение - ОписаниеОповещения - Описание оповещения о подключении со следующими параметрами: // * Результат - Структура - результат подключения компоненты: -// ** Подключено - Булево - признак подключения. -// ** ПодключаемыйМодуль - AddIn - экземпляр объекта внешней компоненты; -// - ФиксированноеСоответствие - экземпляры объектов внешней компоненты, -// указанные в ПараметрыПодключения.ИдентификаторыСозданияОбъектов, -// Ключ - Идентификатор, Значение - экземпляр объекта. -// ** ОписаниеОшибки - Строка - краткое описание ошибки. При отмене пользователем пустая строка. +// ** Подключено - Булево - признак подключения. +// ** ПодключаемыйМодуль - AddIn - экземпляр объекта внешней компоненты; +// - ФиксированноеСоответствие - экземпляры объектов внешней компоненты, +// указанные в ПараметрыПодключения.ИдентификаторыСозданияОбъектов, +// Ключ - Идентификатор, Значение - экземпляр объекта. +// ** ОписаниеОшибки - Строка - краткое описание ошибки. При отмене пользователем пустая строка. // * ДополнительныеПараметры - Структура - значение, которое было указано при создании объекта ОписаниеОповещения. -// Идентификатор - Строка - идентификатор объекта внешней компоненты. -// Версия - Строка, Неопределено - версия компоненты. -// ПараметрыПодключения - Структура, Неопределено - см. функцию ПараметрыПодключения. +// Идентификатор - Строка - идентификатор объекта внешней компоненты. +// Версия - Строка - (необязательный) версия компоненты. +// ПараметрыПодключения - Структура - (необязательный) см. функцию ПараметрыПодключения. // // Пример: // // Оповещение = Новый ОписаниеОповещения("ПодключитьКомпонентуЗавершение", ЭтотОбъект); // // ПараметрыПодключения = ВнешниеКомпонентыКлиент.ПараметрыПодключения(); -// ПараметрыПодключения.ТекстПояснения = НСтр("ru = 'Для использования сканера штрихкодов требуется -// |внешняя компонента «1С:Сканеры штрихкода (NativeApi)».'"); +// ПараметрыПодключения.ТекстПояснения = +// НСтр("ru = 'Для использования сканера штрихкодов требуется +// |внешняя компонента «1С:Сканеры штрихкода (NativeApi)».'"); // // ВнешниеКомпонентыКлиент.ПодключитьКомпоненту(Оповещение, "InputDevice",, ПараметрыПодключения); // @@ -81,36 +83,21 @@ Процедура ПодключитьКомпоненту(Оповещение, Идентификатор, Версия = Неопределено, ПараметрыПодключения = Неопределено) Экспорт - // Для переводчиков: должно быть названо AttachAddInEx потому что AttachAddIn зарезервировано платформой. - - Параметры = ПараметрыПодключения(); - Если ПараметрыПодключения <> Неопределено Тогда - ЗаполнитьЗначенияСвойств(Параметры, ПараметрыПодключения); + Если ПараметрыПодключения = Неопределено Тогда + ПараметрыПодключения = ПараметрыПодключения(); КонецЕсли; Контекст = Новый Структура; Контекст.Вставить("Оповещение", Оповещение); Контекст.Вставить("Идентификатор", Идентификатор); - Контекст.Вставить("Кэшировать", Параметры.Кэшировать); - Контекст.Вставить("ПредложитьУстановить", Параметры.ПредложитьУстановить); - Контекст.Вставить("ТекстПояснения", Параметры.ТекстПояснения); - Контекст.Вставить("ИдентификаторыСозданияОбъектов", Параметры.ИдентификаторыСозданияОбъектов); + Контекст.Вставить("Версия", Версия); + Контекст.Вставить("Кэшировать", ПараметрыПодключения.Кэшировать); + Контекст.Вставить("ПредложитьУстановить", ПараметрыПодключения.ПредложитьУстановить); + Контекст.Вставить("ПредложитьЗагрузить", ПараметрыПодключения.ПредложитьУстановить); + Контекст.Вставить("ТекстПояснения", ПараметрыПодключения.ТекстПояснения); + Контекст.Вставить("ИдентификаторыСозданияОбъектов", ПараметрыПодключения.ИдентификаторыСозданияОбъектов); - ДлительнаяОперация = ВнешниеКомпонентыСлужебныйВызовСервера.НачатьПодготовкуКомпонентыКПодключению( - Идентификатор, Версия); - - // В случае, если пользователь закроет форму адрес результата потеряется и - // будет невозможно освободить память, потому адрес результата помещаем в контекст. - Контекст.Вставить("АдресРезультатаПодготовкиКомпоненты", ДлительнаяОперация.АдресРезультата); - - ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(Неопределено); - ПараметрыОжидания.ТекстСообщения = НСтр("ru = 'Подготовка компоненты...'"); - ПараметрыОжидания.ВыводитьОкноОжидания = Истина; - - Оповещение = Новый ОписаниеОповещения("ПодключитьКомпонентуПослеПодготовки", - ВнешниеКомпонентыСлужебныйКлиент, Контекст); - - ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, Оповещение, ПараметрыОжидания); + ВнешниеКомпонентыСлужебныйКлиент.ПодключитьКомпоненту(Контекст); КонецПроцедуры @@ -120,13 +107,13 @@ // Параметры: // Оповещение - ОписаниеОповещения - Описание оповещения о подключении со следующими параметрами: // * Результат - Структура - результат подключения компоненты: -// ** Подключено - Булево - признак подключения. +// ** Подключено - Булево - признак подключения. // ** ПодключаемыйМодуль - AddIn - экземпляр объекта внешней компоненты. -// ** ОписаниеОшибки - Строка - краткое описание ошибки. +// ** ОписаниеОшибки - Строка - краткое описание ошибки. // * ДополнительныеПараметры - Структура - значение, которое было указано при создании объекта ОписаниеОповещения. -// Идентификатор - Строка - идентификатор объекта внешней компоненты. -// ИдентификаторСозданияОбъекта - Строка, Неопределено - идентификатор создания экземпляра модуля объекта -// (только для компонент, у которых идентификатор создания объекта отличается от ProgID). +// Идентификатор - Строка - идентификатор объекта внешней компоненты. +// ИдентификаторСозданияОбъекта - Строка - (необязательный) идентификатор создания экземпляра модуля объекта +// (только для компонент, у которых идентификатор создания объекта отличается от ProgID). // // Пример: // @@ -165,7 +152,7 @@ КонецПроцедуры -// Возвращает структуру параметров для см. процедуру УстановитьКомпоненту. +// Структура параметров для см. процедуру УстановитьКомпоненту. // // Возвращаемое значение: // Структура - коллекция параметров: @@ -174,8 +161,9 @@ // Пример: // // ПараметрыУстановки = ВнешниеКомпонентыКлиент.ПараметрыУстановки(); -// ПараметрыУстановки.ТекстПояснения = НСтр("ru = 'Для использования сканера штрихкодов требуется -// |внешняя компонента «1С:Сканеры штрихкода (NativeApi)».'"); +// ПараметрыУстановки.ТекстПояснения = +// НСтр("ru = 'Для использования сканера штрихкодов требуется +// |внешняя компонента «1С:Сканеры штрихкода (NativeApi)».'"); // Функция ПараметрыУстановки() Экспорт @@ -192,20 +180,21 @@ // Параметры: // Оповещение - ОписаниеОповещения - Описание оповещения об установке внешней компоненты: // * Результат - Структура - результат установки компоненты: -// ** Установлено - Булево - признак установки. +// ** Установлено - Булево - признак установки. // ** ОписаниеОшибки - Строка - краткое описание ошибки. При отмене пользователем пустая строка. // * ДополнительныеПараметры - Структура - значение, которое было указано при создании объекта ОписаниеОповещения. -// Идентификатор - Строка - идентификатор объекта внешней компоненты. -// Версия - Строка, Неопределено - версия компоненты. -// ПараметрыУстановки - Структура, Неопределено - см. функцию ПараметрыУстановки. +// Идентификатор - Строка - идентификатор объекта внешней компоненты. +// Версия - Строка - (необязательный) версия компоненты. +// ПараметрыУстановки - Структура - (необязательный) см. функцию ПараметрыУстановки. // // Пример: // // Оповещение = Новый ОписаниеОповещения("УстановитьКомпонентуЗавершение", ЭтотОбъект); // // ПараметрыУстановки = ВнешниеКомпонентыКлиент.ПараметрыУстановки(); -// ПараметрыУстановки.ТекстПояснения = НСтр("ru = 'Для использования сканера штрихкодов требуется -// |внешняя компонента «1С:Сканеры штрихкода (NativeApi)».'"); +// ПараметрыУстановки.ТекстПояснения = +// НСтр("ru = 'Для использования сканера штрихкодов требуется +// |внешняя компонента «1С:Сканеры штрихкода (NativeApi)».'"); // // ВнешниеКомпонентыКлиент.УстановитьКомпоненту(Оповещение, "InputDevice",, ПараметрыУстановки); // @@ -218,57 +207,69 @@ // // КонецПроцедуры // -Процедура УстановитьКомпоненту(Оповещение, Идентификатор, Версия = Неопределено, +Процедура УстановитьКомпоненту(Оповещение, Идентификатор, Версия = Неопределено, ПараметрыУстановки = Неопределено) Экспорт - // Для переводчиков: должно быть названо InstallAddInEx потому что InstallAddIn зарезервировано платформой. - - Параметры = ПараметрыУстановки(); - Если ПараметрыУстановки <> Неопределено Тогда - ЗаполнитьЗначенияСвойств(Параметры, ПараметрыУстановки); + Если ПараметрыУстановки = Неопределено Тогда + ПараметрыУстановки = ПараметрыУстановки(); КонецЕсли; Контекст = Новый Структура; Контекст.Вставить("Оповещение", Оповещение); Контекст.Вставить("Идентификатор", Идентификатор); - Контекст.Вставить("ТекстПояснения", Параметры.ТекстПояснения); + Контекст.Вставить("Версия", Версия); + Контекст.Вставить("ПредложитьЗагрузить", Истина); + Контекст.Вставить("ТекстПояснения", ПараметрыУстановки.ТекстПояснения); - ДлительнаяОперация = ВнешниеКомпонентыСлужебныйВызовСервера.НачатьПодготовкуКомпонентыКПодключению( - Идентификатор, Версия); - - // В случае, если пользователь закроет форму адрес результата потеряется и - // будет невозможно освободить память, потому адрес результата помещаем в контекст. - Контекст.Вставить("АдресРезультатаПодготовкиКомпоненты", ДлительнаяОперация.АдресРезультата); - - ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(Неопределено); - ПараметрыОжидания.ТекстСообщения = НСтр("ru = 'Подготовка компоненты...'"); - ПараметрыОжидания.ВыводитьОкноОжидания = Истина; - - Оповещение = Новый ОписаниеОповещения("УстановитьКомпонентуПослеПодготовки", - ВнешниеКомпонентыСлужебныйКлиент, Контекст); - - ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, Оповещение, ПараметрыОжидания); + ВнешниеКомпонентыСлужебныйКлиент.УстановитьКомпоненту(Контекст); КонецПроцедуры -// Возвращает структуру параметров для см. процедуру ЗагрузитьКомпонентуИзФайла. +// Возвращает структуру параметров для описания правил поиска дополнительной информации в составе внешней компоненты +// см. процедуру ЗагрузитьКомпонентуИзФайла. // // Возвращаемое значение: // Структура - коллекция параметров: -// * Идентификатор - Строка, Неопределено - идентификатор объекта внешней компоненты. -// * Версия - Строка, Неопределено - версия компоненты. +// * ИмяФайлаXML - Строка - (необязательный) имя файла в составе компоненты из которого будет извлечена информация. +// * ВыражениеXPath - Строка - (необязательный) XPath путь до информации в файле. // // Пример: // +// ПараметрыЗагрузки = ВнешниеКомпонентыКлиент.ПараметрыПоискаДополнительнойИнформации(); +// ПараметрыЗагрузки.ИмяФайлаXML = "INFO.XML"; +// ПараметрыЗагрузки.ВыражениеXPath = "//drivers/component/@type"; +// +Функция ПараметрыПоискаДополнительнойИнформации() Экспорт + + Параметры = Новый Структура; + Параметры.Вставить("ИмяФайлаXML", ""); + Параметры.Вставить("ВыражениеXPath", ""); + + Возврат Параметры; + +КонецФункции + +// Структура параметров для см. процедуру ЗагрузитьКомпонентуИзФайла. +// +// Возвращаемое значение: +// Структура - коллекция параметров: +// * Идентификатор - Строка -(необязательный) идентификатор объекта внешней компоненты. +// * Версия - Строка - (необязательный) версия компоненты. +// * ПараметрыПоискаДополнительнойИнформации - Соответствие - (необязательный) параметры. +// ** Ключ - Строка - Идентификатор дополнительной запрошенной информации. +// ** Значение - Строка - см. функцию ПараметрыПоискаДополнительнойИнформации. +// Пример: +// // ПараметрыЗагрузки = ВнешниеКомпонентыКлиент.ПараметрыЗагрузки(); // ПараметрыЗагрузки.Идентификатор = "InputDevice"; -// ПараметрыЗагрузки.Версия = "8.1.7.10"; +// ПараметрыЗагрузки.Версия = "8.1.7.10"; // Функция ПараметрыЗагрузки() Экспорт Параметры = Новый Структура; Параметры.Вставить("Идентификатор", Неопределено); - Параметры.Вставить("Версия" , Неопределено); + Параметры.Вставить("Версия", Неопределено); + Параметры.Вставить("ПараметрыПоискаДополнительнойИнформации", Новый Соответствие); Возврат Параметры; @@ -279,22 +280,24 @@ // Параметры: // Оповещение - ОписаниеОповещения - Описание оповещения об установке внешней компоненты: // * Результат - Структура - результат загрузки компоненты: -// ** Загружена - Булево - признак загрузки. +// ** Загружена - Булево - признак загрузки. // ** Идентификатор - Строка - идентификатор объекта внешней компоненты. -// ** Версия - Строка - версия загруженной компоненты. -// ** Наименование - Строка - наименование загруженной компоненты. -// ** ОписаниеОшибки - Строка - краткое описание ошибки. При отмене пользователем пустая строка. +// ** Версия - Строка - версия загруженной компоненты. +// ** Наименование - Строка - наименование загруженной компоненты. +// ** ДополнительнаяИнформация - Соответствие - дополнительная информация о компоненте. +// если не запрашивалась - пустое соответствие. +// *** Ключ - Строка - см. функцию ПараметрыПоискаДополнительнойИнформации. +// *** Значение - Строка - см. функцию ПараметрыПоискаДополнительнойИнформации. // * ДополнительныеПараметры - Структура - значение, которое было указано при создании объекта ОписаниеОповещения. -// ПараметрыЗагрузки - Структура, Неопределено - см. функцию ПараметрыЗагрузки. +// ПараметрыЗагрузки - Структура - (необязательный) см. функцию ПараметрыЗагрузки. // // Пример: // // ПараметрыЗагрузки = ВнешниеКомпонентыКлиент.ПараметрыЗагрузки(); // ПараметрыЗагрузки.Идентификатор = "InputDevice"; -// ПараметрыЗагрузки.Версия = "8.1.7.10"; +// ПараметрыЗагрузки.Версия = "8.1.7.10"; // -// Оповещение = Новый ОписаниеОповещения( -// "ЗагрузитьКомпонентуИзФайлаПослеЗагрузкиКомпоненты", ЭтотОбъект); +// Оповещение = Новый ОписаниеОповещения("ЗагрузитьКомпонентуИзФайлаПослеЗагрузкиКомпоненты", ЭтотОбъект); // // ВнешниеКомпонентыКлиент.ЗагрузитьКомпонентуИзФайла(Оповещение, ПараметрыЗагрузки); // @@ -303,22 +306,23 @@ // // Если Результат.Загружено Тогда // Идентификатор = Результат.Идентификатор; -// Версия = Результат.Версия; +// Версия = Результат.Версия; // КонецЕсли; // // КонецПроцедуры // Процедура ЗагрузитьКомпонентуИзФайла(Оповещение, ПараметрыЗагрузки = Неопределено) Экспорт - Параметры = ПараметрыЗагрузки(); - Если ПараметрыЗагрузки <> Неопределено Тогда - ЗаполнитьЗначенияСвойств(Параметры, ПараметрыЗагрузки); + Если ПараметрыЗагрузки = Неопределено Тогда + ПараметрыЗагрузки = ПараметрыЗагрузки(); КонецЕсли; Контекст = Новый Структура; - Контекст.Вставить("Оповещение" , Оповещение); - Контекст.Вставить("Идентификатор", Параметры.Идентификатор); - Контекст.Вставить("Версия" , Параметры.Версия); + Контекст.Вставить("Оповещение", Оповещение); + Контекст.Вставить("Идентификатор", ПараметрыЗагрузки.Идентификатор); + Контекст.Вставить("Версия", ПараметрыЗагрузки.Версия); + Контекст.Вставить("ПараметрыПоискаДополнительнойИнформации", + ПараметрыЗагрузки.ПараметрыПоискаДополнительнойИнформации); ВнешниеКомпонентыСлужебныйКлиент.ЗагрузитьКомпонентуИзФайла(Контекст); diff --git a/SSL/src/CommonModules/ВнешниеКомпонентыСервер/Module.bsl b/SSL/src/CommonModules/ВнешниеКомпонентыСервер/Module.bsl new file mode 100644 index 000000000..2a249bd47 --- /dev/null +++ b/SSL/src/CommonModules/ВнешниеКомпонентыСервер/Module.bsl @@ -0,0 +1,211 @@ + +#Область ПрограммныйИнтерфейс + +#Область ДляВызоваИзДругихПодсистем + +// ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент + +// Возвращает таблицу описаний внешних компонент, которые требуется обновлять автоматически с Портала 1С:ИТС. +// +// Возвращаемое значение: +// ТаблицаЗначений - См. ПолучениеВнешнихКомпонент.ОписаниеВнешнихКомпонент +// подсистемы ПолучениеВнешнихКомпонент Библиотеки интернет-поддержки пользователей (БИП). +// +Функция АвтоматическиОбновляемыеКомпоненты() Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ВнешниеКомпоненты.Идентификатор КАК Идентификатор, + | ВнешниеКомпоненты.Версия КАК Версия + |ИЗ + | Справочник.ВнешниеКомпоненты КАК ВнешниеКомпоненты + |ГДЕ + | ВнешниеКомпоненты.ОбновлятьСПортала1СИТС"; + + РезультатЗапроса = Запрос.Выполнить(); + Выборка = РезультатЗапроса.Выбрать(); + + МодульПолучениеВнешнихКомпонент = ОбщегоНазначения.ОбщийМодуль("ПолучениеВнешнихКомпонент"); + ОписаниеВнешнихКомпонент = МодульПолучениеВнешнихКомпонент.ОписаниеВнешнихКомпонент(); + + Пока Выборка.Следующий() Цикл + ОписаниеКомпоненты = ОписаниеВнешнихКомпонент.Добавить(); + ОписаниеКомпоненты.Идентификатор = Выборка.Идентификатор; + ОписаниеКомпоненты.Версия = Выборка.Версия; + КонецЦикла; + + Возврат ОписаниеВнешнихКомпонент; + +КонецФункции + +// Выполняет обновление внешних компонент. +// +// Параметры: +// ДанныеВнешнихКомпонент - ТаблицаЗначений - таблица обновляемых компонент. +// ** Идентификатор - Строка - идентификатор. +// ** Версия - Строка - версия. +// ** ДатаВерсии - Строка - дата версии. +// ** Наименование - Строка - наименование. +// ** ИмяФайла - Строка - имя файла. +// ** АдресФайла - Строка - адрес файла. +// ** КодОшибки - Строка - код ошибки. +// АдресРезультата - Строка - (необязательный) адрес временного хранилища. +// Если указан, в него будет помещено описание результата операции. +// +Процедура ОбновитьВнешниеКомпоненты(ДанныеВнешнихКомпонент, АдресРезультата = Неопределено) Экспорт + + Результат = ""; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ВнешниеКомпоненты.Ссылка КАК Ссылка, + | ВнешниеКомпоненты.Идентификатор КАК Идентификатор + |ИЗ + | Справочник.ВнешниеКомпоненты КАК ВнешниеКомпоненты + |ГДЕ + | ВнешниеКомпоненты.Идентификатор В(&Идентификаторы)"; + + Запрос.УстановитьПараметр("Идентификаторы", ДанныеВнешнихКомпонент.ВыгрузитьКолонку("Идентификатор")); + + РезультатЗапроса = Запрос.Выполнить(); + Выборка = РезультатЗапроса.Выбрать(); + + // Обход результата запроса. + Для каждого СтрокаРезультата Из ДанныеВнешнихКомпонент Цикл + + ПредставлениеКомпоненты = ВнешниеКомпонентыСлужебный.ПредставлениеКомпоненты( + СтрокаРезультата.Идентификатор, + СтрокаРезультата.Версия); + + КодОшибки = СтрокаРезультата.КодОшибки; + + Если ЗначениеЗаполнено(КодОшибки) Тогда + + Если КодОшибки = "АктуальнаяВерсия" Тогда + Результат = Результат + ПредставлениеКомпоненты + " - " + НСтр("ru = 'Актуальная версия.'") + Символы.ПС; + Продолжить; + КонецЕсли; + + ИнформацияОбОшибке = ""; + Если КодОшибки = "ОтсутствуетКомпонента" Тогда + ИнформацияОбОшибке = НСтр("ru = 'В сервисе внешних компонент не обнаружена внешняя компонента'"); + ИначеЕсли КодОшибки = "ФайлНеЗагружен" Тогда + ИнформацияОбОшибке = НСтр("ru = 'При попытке загрузить файл внешней компоненты из сервиса, возникла ошибка'"); + КонецЕсли; + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При загрузке внешней компоненты %1 возникала ошибка: + |%2'"), + ПредставлениеКомпоненты, + ИнформацияОбОшибке); + + Результат = Результат + ПредставлениеКомпоненты + " - " + ИнформацияОбОшибке + Символы.ПС; + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, + ТекстОшибки); + + Продолжить; + КонецЕсли; + + Информация = ВнешниеКомпонентыСлужебный.ИнформацияОКомпонентеИзФайла(СтрокаРезультата.АдресФайла, Ложь); + + Если Не Информация.Разобрано Тогда + + Результат = Результат + ПредставлениеКомпоненты + " - " + Информация.ОписаниеОшибки + Символы.ПС; + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, Информация.ОписаниеОшибки); + + Продолжить; + КонецЕсли; + + // Поиск ссылки. + Отбор = Новый Структура("Идентификатор", СтрокаРезультата.Идентификатор); + Если Выборка.НайтиСледующий(Отбор) Тогда + + Объект = Выборка.Ссылка.ПолучитьОбъект(); + + // Когда уже загружена компонента по дате более свежая, чем на Портале 1С:ИТС, обновление не следует выполнять. + Если Объект.ДатаВерсии > СтрокаРезультата.ДатаВерсии Тогда + Продолжить; + КонецЕсли; + + ЗаполнитьЗначенияСвойств(Объект, Информация.Реквизиты); // По данным манифеста. + ЗаполнитьЗначенияСвойств(Объект, СтрокаРезультата); // По данным с сайта. + + Объект.ДополнительныеСвойства.Вставить("ДвоичныеДанныеКомпоненты", Информация.ДвоичныеДанные); + + Объект.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Загружена с Портала 1С:ИТС. %1.'"), + ТекущаяДатаСеанса()); + + Попытка + Объект.Записать(); + Результат = Результат + + ПредставлениеКомпоненты + " - " + НСтр("ru = 'Успешно обновлена.'") + Символы.ПС; + Исключение + Результат = Результат + + ПредставлениеКомпоненты + " - " + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()) + Символы.ПС; + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + КонецЕсли; + + КонецЦикла; + + Если ЗначениеЗаполнено(АдресРезультата) Тогда + ПоместитьВоВременноеХранилище(Результат, АдресРезультата); + КонецЕсли; + +КонецПроцедуры + +// Структура параметров для см. процедуру ОбновитьОбщуюКомпоненту. +// +// Возвращаемое значение: +// Структура - коллекция параметров: +// * Идентификатор - Строка - идентификатор. +// * Версия - Строка - версия. +// * ДатаВерсии - Дата - дата версии. +// * Наименование - Строка - наименование. +// * ИмяФайла - Строка - имя файла. +// * ПутьКФайлу - Строка - путь к файлу. +// +Функция ОписаниеПоставляемойОбщейКомпоненты() Экспорт + + Описание = Новый Структура; + Описание.Вставить("Идентификатор"); + Описание.Вставить("Версия"); + Описание.Вставить("ДатаВерсии"); + Описание.Вставить("Наименование"); + Описание.Вставить("ИмяФайла"); + Описание.Вставить("ПутьКФайлу"); + Возврат Описание; + +КонецФункции + +// Выполняет обновление общих внешних компонент. +// +// Параметры: +// ОписаниеКомпоненты - Структура - См. функцию ОписаниеПоставляемойОбщейКомпоненты. +// +Процедура ОбновитьОбщуюКомпоненту(ОписаниеКомпоненты) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ВнешниеКомпонентыВМоделиСервиса") Тогда + МодульВнешниеКомпонентыВМоделиСервисаСлужебный = ОбщегоНазначения.ОбщийМодуль("ВнешниеКомпонентыВМоделиСервисаСлужебный"); + МодульВнешниеКомпонентыВМоделиСервисаСлужебный.ОбновитьОбщуюКомпоненту(ОписаниеКомпоненты); + КонецЕсли; + +КонецПроцедуры + +// Конец ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент + +#КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбменДаннымиКлиентСервер/ОбменДаннымиКлиентСервер.mdo b/SSL/src/CommonModules/ВнешниеКомпонентыСервер/ВнешниеКомпонентыСервер.mdo similarity index 54% rename from SSL/src/CommonModules/ОбменДаннымиКлиентСервер/ОбменДаннымиКлиентСервер.mdo rename to SSL/src/CommonModules/ВнешниеКомпонентыСервер/ВнешниеКомпонентыСервер.mdo index fa0b831e0..7efe2a9a7 100644 --- a/SSL/src/CommonModules/ОбменДаннымиКлиентСервер/ОбменДаннымиКлиентСервер.mdo +++ b/SSL/src/CommonModules/ВнешниеКомпонентыСервер/ВнешниеКомпонентыСервер.mdo @@ -1,11 +1,10 @@ - - ОбменДаннымиКлиентСервер + + ВнешниеКомпонентыСервер ru - Обмен данными клиент сервер + Внешние компоненты сервер - true true true true diff --git a/SSL/src/CommonModules/ВнешниеКомпонентыСлужебный/Module.bsl b/SSL/src/CommonModules/ВнешниеКомпонентыСлужебный/Module.bsl index d5793309b..8736f6343 100644 --- a/SSL/src/CommonModules/ВнешниеКомпонентыСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеКомпонентыСлужебный/Module.bsl @@ -1,28 +1,214 @@ #Область СлужебныйПрограммныйИнтерфейс -// Проверят доступна ли загрузка внешних компонент с сайта. +// Представление компоненты для журнала регистрации // -Функция ДоступнаЗагрузкаССайта() Экспорт +Функция ПредставлениеКомпоненты(Идентификатор, Версия) Экспорт - Возврат ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ВнешниеКомпоненты") - И Не ОбщегоНазначения.РазделениеВключено(); + Если ЗначениеЗаполнено(Версия) Тогда + ПредставлениеКомпоненты = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 (версии %2)'"), + Идентификатор, + Версия); + Иначе + ПредставлениеКомпоненты = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 (последней версии)'"), + Идентификатор, + Версия); + КонецЕсли; + + Возврат ПредставлениеКомпоненты; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +// Проверят доступна ли загрузка внешних компонент с портала. +// +// Возвращаемое значение: +// Булево - признак доступности. +// +Функция ДоступнаЗагрузкаСПортала() Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент") Тогда + МодульПолучениеВнешнихКомпонент = ОбщегоНазначения.ОбщийМодуль("ПолучениеВнешнихКомпонент"); + Возврат МодульПолучениеВнешнихКомпонент.ДоступнаЗагрузкаВнешнихКомпонент(); + КонецЕсли; + + Возврат Ложь; + +КонецФункции -// См. РегламентныеЗаданияПереопределяемый.ПриОпределенииНастроекРегламентныхЗаданий. -Процедура ПриОпределенииНастроекРегламентныхЗаданий(Зависимости) Экспорт +// Разбирает файл компоненты для получения служебной информации о компоненте +// +// Параметры: +// АдресХранилищаФайла - Строка - адрес хранилища, в котором расположены двоичные данные файла компоненты. +// ВыполнятьРазборИнфоФайла - Булево - (необязательный) требуется ли дополнительно анализировать +// данные файла INFO.XML, если он есть. +// ПараметрыПоискаДополнительнойИнформации - Соответствие - (необязательный) +// См. ВнешниеКомпонентыКлиент.ПараметрыЗагрузки. +// +// Возвращаемое значение: +// Структура - состав информации. +// * Разобрано - Булево - признак успешного разбора компоненты. +// * Реквизиты - Структура - разобранные реквизиты компоненты. +// ** Windows_x86 - Булево +// ** Windows_x86_64 - Булево +// ** Linux_x86 - Булево +// ** Linux_x86_64 - Булево +// ** Windows_x86_Firefox - Булево +// ** Linux_x86_Firefox - Булево +// ** Linux_x86_64_Firefox - Булево +// ** Windows_x86_MSIE - Булево +// ** Windows_x86_64_MSIE - Булево +// ** Windows_x86_Chrome - Булево +// ** Linux_x86_Chrome - Булево +// ** Linux_x86_64_Chrome - Булево +// ** MacOS_x86_64_Safari - Булево +// ** Идентификатор - Строка +// ** Наименование - Строка +// ** Версия - Строка +// ** ДатаВерсии - Дата +// ** ИмяФайла - Строка +// * ДвоичныеДанные - ДвоичныеДанные - выгрузка файла компоненты. +// * ДополнительнаяИнформация - Соответствие - информация, полученная по переданным параметрам поиска. +// * ОписаниеОшибки - Строка - текст ошибки, в случае, если не разобрано. +// +Функция ИнформацияОКомпонентеИзФайла(АдресХранилищаФайла, ВыполнятьРазборИнфоФайла = Истина, + Знач ПараметрыПоискаДополнительнойИнформации = Неопределено) Экспорт - Зависимость = Зависимости.Добавить(); - Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ОбновлениеВнешнихКомпонентССайта; - Зависимость.ДоступноВПодчиненномУзлеРИБ = Истина; - Зависимость.ДоступноВАвтономномРабочемМесте = Истина; - Зависимость.ДоступноВМоделиСервиса = Ложь; + Если ПараметрыПоискаДополнительнойИнформации = Неопределено Тогда + ПараметрыПоискаДополнительнойИнформации = Новый Соответствие; + КонецЕсли; -КонецПроцедуры + // Значения заполнения по умолчанию. + Реквизиты = РеквизитыКомпоненты(); + + // Дополнительная запрашиваемая информация. + ДополнительнаяИнформация = Новый Соответствие; + + // Получение и загрузка двоичных данных компоненты. + ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресХранилищаФайла); + + // Очищаем выделенную память в хранилище + УдалитьИзВременногоХранилища(АдресХранилищаФайла); + + // Контроль соответствия компоненты. + НайденМанифест = Ложь; + + // Разбор данных архива компоненты. + Попытка + Поток = ДвоичныеДанные.ОткрытьПотокДляЧтения(); + ЧтениеАрхива = Новый ЧтениеZipФайла(Поток); + Исключение + ТекстОшибки = НСтр("ru = 'В файле отсутствует информация о компоненте.'"); + + Результат = РезультатРазбораКомпоненты(); + Результат.ОписаниеОшибки = ТекстОшибки; + + Возврат Результат; + КонецПопытки; + + ВременныйКаталог = ОбщегоНазначения.СоздатьВременныйКаталог("ExtComp"); + + Для Каждого ЭлементАрхива Из ЧтениеАрхива.Элементы Цикл + + Если ЭлементАрхива.Зашифрован Тогда + + // Очищаем временные файлы и освобождаем память. + ОбщегоНазначения.УдалитьВременныйКаталог(ВременныйКаталог); + ЧтениеАрхива.Закрыть(); + Поток.Закрыть(); + + ТекстОшибки = НСтр("ru = 'ZIP-архив не должен быть зашифрован.'"); + + Результат = РезультатРазбораКомпоненты(); + Результат.ОписаниеОшибки = ТекстОшибки; + + Возврат Результат; + + КонецЕсли; + + Попытка + + // Поиск и разбор манифеста. + Если НРег(ЭлементАрхива.ИсходноеПолноеИмя) = "manifest.xml" Тогда + + Реквизиты.ДатаВерсии = ЭлементАрхива.ВремяИзменения; + + ЧтениеАрхива.Извлечь(ЭлементАрхива, ВременныйКаталог); + ВременныйФайлXML = ВременныйКаталог + ПолучитьРазделительПути() + ЭлементАрхива.ПолноеИмя; + РазобратьМанифестКомпоненты(ВременныйФайлXML, Реквизиты); + + НайденМанифест = Истина; + + КонецЕсли; + + Если НРег(ЭлементАрхива.ИсходноеПолноеИмя) = "info.xml" И ВыполнятьРазборИнфоФайла Тогда + + ЧтениеАрхива.Извлечь(ЭлементАрхива, ВременныйКаталог); + ВременныйФайлXML = ВременныйКаталог + ПолучитьРазделительПути() + ЭлементАрхива.ПолноеИмя; + РазобратьИнфоКомпоненты(ВременныйФайлXML, Реквизиты); + + КонецЕсли; + + Для Каждого ПараметрПоиска Из ПараметрыПоискаДополнительнойИнформации Цикл + + ИмяФайлаXML = ПараметрПоиска.Значение.ИмяФайлаXML; + + Если ЭлементАрхива.ИсходноеПолноеИмя = ИмяФайлаXML Тогда + + КлючДополнительнойИнформации = ПараметрПоиска.Ключ; + ВыражениеXPath = ПараметрПоиска.Значение.ВыражениеXPath; + + ЧтениеАрхива.Извлечь(ЭлементАрхива, ВременныйКаталог); + ВременныйФайлXML = ВременныйКаталог + ПолучитьРазделительПути() + ЭлементАрхива.ПолноеИмя; + + ДокументDOM = ДокументDOM(ВременныйФайлXML); + ЗначениеXPath = ВычислитьВыражениеXPath(ВыражениеXPath, ДокументDOM); + + ДополнительнаяИнформация.Вставить(КлючДополнительнойИнформации, ЗначениеXPath); + + КонецЕсли; + + КонецЦикла; + + Исключение + Результат = РезультатРазбораКомпоненты(); + Результат.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при разборе файла %1 + |%2'"), + ЭлементАрхива.ИсходноеПолноеИмя, + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + + Возврат Результат; + КонецПопытки; + КонецЦикла; + + // Очищаем временные файлы и освобождаем память. + ОбщегоНазначения.УдалитьВременныйКаталог(ВременныйКаталог); + ЧтениеАрхива.Закрыть(); + Поток.Закрыть(); + + // Контроль соответствия компоненты. + Если Не НайденМанифест Тогда + ТекстОшибки = НСтр("ru = 'В архиве компоненты отсутствует обязательный файл MANIFEST.XML.'"); + + Результат = РезультатРазбораКомпоненты(); + Результат.ОписаниеОшибки = ТекстОшибки; + + Возврат Результат; + КонецЕсли; + + Результат = РезультатРазбораКомпоненты(); + Результат.Разобрано = Истина; + Результат.Реквизиты = Реквизиты; + Результат.ДвоичныеДанные = ДвоичныеДанные; + Результат.ДополнительнаяИнформация = ДополнительнаяИнформация; + + Возврат Результат; + +КонецФункции + +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ГрупповоеИзменениеОбъектовПереопределяемый.ПриОпределенииОбъектовСРедактируемымиРеквизитами. Процедура ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты) Экспорт @@ -41,11 +227,6 @@ // См. СтандартныеПодсистемыСервер.ПриОтправкеДанныхГлавному. Процедура ПриОтправкеДанныхГлавному(ЭлементДанных, ОтправкаЭлемента, Получатель) Экспорт - // Стандартная обработка не переопределяется. - Если ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать Тогда - Возврат; - КонецЕсли; - Если ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ВнешниеКомпоненты") Тогда ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать; КонецЕсли; @@ -55,11 +236,6 @@ // См. СтандартныеПодсистемыСервер.ПриОтправкеДанныхПодчиненному. Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза, Получатель) Экспорт - // Стандартная обработка не переопределяется. - Если ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать Тогда - Возврат; - КонецЕсли; - Если ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ВнешниеКомпоненты") Тогда ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать; КонецЕсли; @@ -69,11 +245,6 @@ // См. СтандартныеПодсистемыСервер.ПриПолученииДанныхОтГлавного. Процедура ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель) Экспорт - // Стандартная обработка не переопределяется. - Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда - Возврат; - КонецЕсли; - Если ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ВнешниеКомпоненты") Тогда ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; КонецЕсли; @@ -83,11 +254,6 @@ // См. СтандартныеПодсистемыСервер.ПриПолученииДанныхОтПодчиненного. Процедура ПриПолученииДанныхОтПодчиненного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель) Экспорт - // Стандартная обработка не переопределяется. - Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда - Возврат; - КонецЕсли; - Если ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ВнешниеКомпоненты") Тогда ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; КонецЕсли; @@ -96,304 +262,173 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции -// Возвращает ссылку на справочник внешней компоненты по идентификатору и версии. -// -// Параметры: -// Идентификатор - Строка - идентификатор объекта внешнего компонента. -// Версия - Строка, Неопределено - версия компоненты. -// -// Возвращаемое значение: -// СправочникСсылка.ВнешниеКомпоненты - ссылка на контейнер внешней компоненты в информационной базе. -// -Функция СсылкаПоИдентификатору(Идентификатор, Версия = Неопределено) Экспорт +#Область ИнформацияОСохраненнойКомпоненте + +Функция ДоступнаЗагрузкаИзФайла() - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Идентификатор", Идентификатор); - Если Версия = Неопределено Тогда - Запрос.Текст = - "ВЫБРАТЬ - | ВнешниеКомпоненты.Идентификатор КАК Идентификатор, - | МАКСИМУМ(ВнешниеКомпоненты.ДатаВерсии) КАК ДатаВерсии - |ПОМЕСТИТЬ ВТ_МаксимальнаяВерсияКомпоненты - |ИЗ - | Справочник.ВнешниеКомпоненты КАК ВнешниеКомпоненты - |ГДЕ - | ВнешниеКомпоненты.Идентификатор = &Идентификатор - | - |СГРУППИРОВАТЬ ПО - | ВнешниеКомпоненты.Идентификатор - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ВнешниеКомпоненты.Ссылка КАК Ссылка, - | ВнешниеКомпоненты.Использование КАК Использование - |ИЗ - | ВТ_МаксимальнаяВерсияКомпоненты КАК ВТ_МаксимальнаяВерсияКомпоненты - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВнешниеКомпоненты КАК ВнешниеКомпоненты - | ПО (ВнешниеКомпоненты.Идентификатор = ВТ_МаксимальнаяВерсияКомпоненты.Идентификатор) - | И ВТ_МаксимальнаяВерсияКомпоненты.ДатаВерсии = ВнешниеКомпоненты.ДатаВерсии"; - Иначе - Запрос.УстановитьПараметр("Версия", Версия); - Запрос.Текст = - "ВЫБРАТЬ - | ВнешниеКомпоненты.Ссылка КАК Ссылка, - | ВнешниеКомпоненты.Использование КАК Использование - |ИЗ - | Справочник.ВнешниеКомпоненты КАК ВнешниеКомпоненты - |ГДЕ - | ВнешниеКомпоненты.Идентификатор = &Идентификатор - | И ВнешниеКомпоненты.Версия = &Версия"; - - КонецЕсли; - - Результат = Запрос.Выполнить(); - - Если Результат.Пустой() Тогда - Возврат Справочники.ВнешниеКомпоненты.ПустаяСсылка(); - КонецЕсли; - - Выборка = Результат.Выбрать(); - Выборка.Следующий(); - - Если Выборка.Использование = Перечисления.ВариантыИспользованияВнешнихКомпонент.Отключена Тогда - ВызватьИсключение НСтр("ru = 'Внешняя компонента отключена. - |Необходимо обратиться к администратору.'"); - КонецЕсли; - - Возврат Результат.Выгрузить()[0].Ссылка; + Возврат Пользователи.ЭтоПолноправныйПользователь(,, Ложь); КонецФункции -// Выполняется в длительной операции. -// Выполняет подготовку компоненты к подключению и возвращает информацию для проверки -// совместимости компоненты на клиенте. -// В случае отсутствия компоненты, выполняет ее получение средствами подсистемы интернет поддержки. -// Компонента помещается во временное хранилище до завершения сеанса, -// Для оптимизации памяти после попытки подключения рекомендуется выполнить очистку хранилища. -// // Параметры: // Параметры - Структура - параметры подготовки. // * Идентификатор - Строка - идентификатор объекта внешнего компонента. -// * Версия - Строка, Неопределено - версия компоненты. +// * Версия - Строка, Неопределено - версия компоненты. // -// АдресРезультата - Строка - Адрес в хранилище с результатом. -// * Структура - информация о компоненте -// * Подготовлена - Булево - признак отсутствия компоненты. -// * ОписаниеОшибки - Строка - краткое описание ошибки. -// * Местоположение - Строка - временное хранилище двоичных данных ZIP-архива компоненты. +// Возвращаемое значение: +// Структура - РезультатИнформацииОСохраненнойКомпоненте() // -Процедура ПодготовитьКомпонентуКПодключению(Параметры, АдресРезультата) Экспорт +Функция ИнформацияОСохраненнойКомпоненте(Идентификатор, Версия = Неопределено) Экспорт - Идентификатор = Параметры.Идентификатор; - Версия = Параметры.Версия; + Результат = РезультатИнформацииОСохраненнойКомпоненте(); - Ссылка = СсылкаПоИдентификатору(Идентификатор, Версия); - Если Ссылка.Пустая() Тогда + // Шаг поиска компоненты. + + СсылкаИзХранилища = Справочники.ВнешниеКомпоненты.НайтиПоИдентификатору(Идентификатор, Версия); + + Если ОбщегоНазначения.РазделениеВключено() + И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ВнешниеКомпонентыВМоделиСервиса") Тогда - Если ОбщегоНазначения.РазделениеВключено() Тогда + МодульСправочникиОбщиеВнешниеКомпоненты = ОбщегоНазначения.ОбщийМодуль("Справочники.ОбщиеВнешниеКомпоненты"); - Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.РаботаВМоделиСервиса.ВнешниеКомпонентыВМоделиСервиса") Тогда - - МодульВнешниеКомпоненты = ОбщегоНазначения.ОбщийМодуль("ВнешниеКомпонентыВМоделиСервисаСлужебный"); - Результат = МодульВнешниеКомпоненты.ПолучениеСлужебнойИнформацииОКомпоненте(Идентификатор, Версия); - - ПоместитьВоВременноеХранилище(Результат, АдресРезультата); - Возврат; - - КонецЕсли; - + СсылкаИзОбщегоХранилища = МодульСправочникиОбщиеВнешниеКомпоненты.НайтиПоИдентификатору(Идентификатор, Версия); + Если СсылкаИзХранилища.Пустая() И СсылкаИзОбщегоХранилища.Пустая() Тогда + Результат.Состояние = "НеНайдена"; + ИначеЕсли СсылкаИзХранилища.Пустая() Тогда + Результат.Состояние = "НайденаВОбщемХранилище"; + Результат.Ссылка = СсылкаИзОбщегоХранилища; Иначе - - Если ДоступнаЗагрузкаССайта() Тогда - - Ссылка = НоваяКомпонентаССайта(Идентификатор, Версия); - + Если Не ЗначениеЗаполнено(Версия) Тогда + ВерсияХранилища = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаИзХранилища, "ДатаВерсии"); + ВерсияОбщегоХранилища = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаИзОбщегоХранилища, "ДатаВерсии"); + + Если ВерсияОбщегоХранилища > ВерсияХранилища Тогда + Результат.Состояние = "НайденаВОбщемХранилище"; + Результат.Ссылка = СсылкаИзОбщегоХранилища; + Иначе + Результат.Состояние = "НайденаВХранилище"; + Результат.Ссылка = СсылкаИзХранилища; + КонецЕсли; + Иначе + Результат.Состояние = "НайденаВХранилище"; + Результат.Ссылка = СсылкаИзХранилища; КонецЕсли; - + КонецЕсли + + Иначе + + Если СсылкаИзХранилища.Пустая() Тогда + Результат.Состояние = "НеНайдена"; + Иначе + Результат.Состояние = "НайденаВХранилище"; + Результат.Ссылка = СсылкаИзХранилища; + КонецЕсли + + КонецЕсли; + + // Шаг анализа используемой компоненты + + Если Результат.Состояние = "НеНайдена" Тогда + Возврат Результат; + КонецЕсли; + + Реквизиты = РеквизитыКомпоненты(); + Если Результат.Состояние = "НайденаВХранилище" Тогда + Реквизиты.Вставить("Использование"); + // Требуется для определения статуса ОтключенаАдминистратором. + // Есть только у компонент областей. + КонецЕсли; + Если Результат.Состояние = "НайденаВОбщемХранилище" Тогда + Реквизиты.Удалить("ИмяФайла"); + // У общих компонент нет признака. + КонецЕсли; + + РеквизитыОбъекта = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Результат.Ссылка, Реквизиты); + + ЗаполнитьЗначенияСвойств(Результат.Реквизиты, РеквизитыОбъекта); + Результат.Местоположение = ПолучитьНавигационнуюСсылку(Результат.Ссылка, "ХранилищеКомпоненты"); + + Если Результат.Состояние = "НайденаВХранилище" Тогда + Если РеквизитыОбъекта.Использование <> Перечисления.ВариантыИспользованияВнешнихКомпонент.Используется Тогда + Результат.Состояние = "ОтключенаАдминистратором"; КонецЕсли; - КонецЕсли; - Если Ссылка.Пустая() Тогда + Возврат Результат - ТекстОшибки = НСтр("ru = 'Требуется загрузить внешнюю компоненту в информационную базу. - |Рекомендуем обратиться к администратору.'"); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); - ВызватьИсключение ТекстОшибки; - - КонецЕсли; +КонецФункции + +Функция РезультатИнформацииОСохраненнойКомпоненте() Результат = Новый Структура; - Результат.Вставить("Windows_x86"); - Результат.Вставить("Windows_x86_64"); - Результат.Вставить("Linux_x86"); - Результат.Вставить("Linux_x86_64"); - Результат.Вставить("Windows_x86_Firefox"); - Результат.Вставить("Linux_x86_Firefox"); - Результат.Вставить("Linux_x86_64_Firefox"); - Результат.Вставить("Windows_x86_MSIE"); - Результат.Вставить("Windows_x86_64_MSIE"); - Результат.Вставить("Windows_x86_Chrome"); - Результат.Вставить("Linux_x86_Chrome"); - Результат.Вставить("Linux_x86_64_Chrome"); - Результат.Вставить("MacOS_x86_64_Safari"); + Результат.Вставить("Ссылка"); + Результат.Вставить("Реквизиты", РеквизитыКомпоненты()); + Результат.Вставить("Местоположение"); + Результат.Вставить("Состояние"); + // Варианты: + // * НеНайдена + // * НайденаВХранилище + // * НайденаВОбщемХранилище + // * ОтключенаАдминистратором - Реквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, Результат); - - ЗаполнитьЗначенияСвойств(Результат, Реквизиты); - - Местоположение = ПолучитьНавигационнуюСсылку(Ссылка, "ХранилищеКомпоненты"); - Результат.Вставить("Местоположение", Местоположение); - - ПоместитьВоВременноеХранилище(Результат, АдресРезультата); - -КонецПроцедуры - -// Разбирает файл компоненты для получения служебной информации о компоненте -// -Функция ИнформацияОКомпоненте(АдресХранилищаФайла, ВыполнятьРазборИнфоФайла = Истина) Экспорт - - // Проверка адреса временного хранилища - Если Не ЭтоАдресВременногоХранилища(АдресХранилищаФайла) Тогда - ТекстОшибки = НСтр("ru = 'Не корректный адрес временного хранилища.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Регистрация внешней компоненты'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); - ВызватьИсключение ТекстОшибки; - КонецЕсли; - - // Значения заполнения по умолчанию. - Реквизиты = Новый Структура; - Реквизиты.Вставить("Windows_x86", Ложь); - Реквизиты.Вставить("Windows_x86_64", Ложь); - Реквизиты.Вставить("Linux_x86", Ложь); - Реквизиты.Вставить("Linux_x86_64", Ложь); - Реквизиты.Вставить("Windows_x86_Firefox", Ложь); - Реквизиты.Вставить("Linux_x86_Firefox", Ложь); - Реквизиты.Вставить("Linux_x86_64_Firefox", Ложь); - Реквизиты.Вставить("Windows_x86_MSIE", Ложь); - Реквизиты.Вставить("Windows_x86_64_MSIE", Ложь); - Реквизиты.Вставить("Windows_x86_Chrome", Ложь); - Реквизиты.Вставить("Linux_x86_Chrome", Ложь); - Реквизиты.Вставить("Linux_x86_64_Chrome", Ложь); - Реквизиты.Вставить("MacOS_x86_64_Safari", Ложь); - Реквизиты.Вставить("Идентификатор", Неопределено); - Реквизиты.Вставить("Наименование", Неопределено); - Реквизиты.Вставить("Версия", Неопределено); - Реквизиты.Вставить("ДатаВерсии", Неопределено); - Реквизиты.Вставить("ИмяФайла", Неопределено); - - // Получение и загрузка двоичных данных компоненты. - ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресХранилищаФайла); - - // Очищаем выделенную память в хранилище - УдалитьИзВременногоХранилища(АдресХранилищаФайла); - - // Контроль соответствия компоненты. - НайденМанифест = Ложь; - - // Разбор данных архива компоненты. - Попытка - - Поток = ДвоичныеДанные.ОткрытьПотокДляЧтения(); - ЧтениеАрхива = Новый ЧтениеZipФайла(Поток); - - Исключение - - ТекстОшибки = НСтр("ru = 'В файле отсутствует информация о компоненте.'"); - - Результат = Новый Структура; - Результат.Вставить("Разобрано", Ложь); - Результат.Вставить("ОписаниеОшибки", ТекстОшибки); - - Возврат Результат; - - КонецПопытки; - - ВременныйКаталог = ОбщегоНазначения.СоздатьВременныйКаталог("ExtComp"); - - Для каждого ЭлементАрхива Из ЧтениеАрхива.Элементы Цикл - - Если ЭлементАрхива.Зашифрован Тогда - - // Очищаем временные файлы и освобождаем память. - ОбщегоНазначения.УдалитьВременныйКаталог(ВременныйКаталог); - ЧтениеАрхива.Закрыть(); - Поток.Закрыть(); - - ТекстОшибки = НСтр("ru = 'ZIP-архив не должен быть зашифрован.'"); - - Результат = Новый Структура; - Результат.Вставить("Разобрано", Ложь); - Результат.Вставить("ОписаниеОшибки", ТекстОшибки); - - Возврат Результат; - - КонецЕсли; - - // Поиск и разбор манифеста. - Если НРег(ЭлементАрхива.ПолноеИмя) = "manifest.xml" Тогда - - ЧтениеАрхива.Извлечь(ЭлементАрхива, ВременныйКаталог); - - ВременныйФайлXML = ВременныйКаталог + ПолучитьРазделительПути() + ЭлементАрхива.ПолноеИмя; - РазобратьМанифестКомпоненты(ВременныйФайлXML, Реквизиты); - - ОписаниеФайла = Новый Файл(ВременныйФайлXML); - Реквизиты.ДатаВерсии = ОписаниеФайла.ПолучитьВремяИзменения(); - - НайденМанифест = Истина; - - КонецЕсли; - - Если НРег(ЭлементАрхива.ПолноеИмя) = "info.xml" И ВыполнятьРазборИнфоФайла Тогда - - ЧтениеАрхива.Извлечь(ЭлементАрхива, ВременныйКаталог); - - ВременныйФайлXML = ВременныйКаталог + ПолучитьРазделительПути() + ЭлементАрхива.ПолноеИмя; - РазобратьИнфоКомпоненты(ВременныйФайлXML, Реквизиты); - - КонецЕсли; - - КонецЦикла; - - // Очищаем временные файлы и освобождаем память. - ОбщегоНазначения.УдалитьВременныйКаталог(ВременныйКаталог); - ЧтениеАрхива.Закрыть(); - Поток.Закрыть(); - - // Контроль соответствия компоненты. - Если Не НайденМанифест Тогда - - ТекстОшибки = НСтр("ru = 'В архиве компоненты отсутствует обязательный файл MANIFEST.XML.'"); - - Результат = Новый Структура; - Результат.Вставить("Разобрано", Ложь); - Результат.Вставить("ОписаниеОшибки", ТекстОшибки); - - Возврат Результат; - - КонецЕсли; - - Результат = Новый Структура; - Результат.Вставить("Разобрано", Истина); - Результат.Вставить("Реквизиты" , Реквизиты); - Результат.Вставить("ДвоичныеДанные", ДвоичныеДанные); + Результат.Вставить("ДоступнаЗагрузкаИзФайла", ДоступнаЗагрузкаИзФайла()); + Результат.Вставить("ДоступнаЗагрузкаСПортала", ДоступнаЗагрузкаСПортала()); Возврат Результат; КонецФункции -Процедура РазобратьМанифестКомпоненты(ВременныйФайлXML, Реквизиты) +Функция РеквизитыКомпоненты() + + Реквизиты = Новый Структура; + Реквизиты.Вставить("Windows_x86"); + Реквизиты.Вставить("Windows_x86_64"); + Реквизиты.Вставить("Linux_x86"); + Реквизиты.Вставить("Linux_x86_64"); + Реквизиты.Вставить("Windows_x86_Firefox"); + Реквизиты.Вставить("Linux_x86_Firefox"); + Реквизиты.Вставить("Linux_x86_64_Firefox"); + Реквизиты.Вставить("Windows_x86_MSIE"); + Реквизиты.Вставить("Windows_x86_64_MSIE"); + Реквизиты.Вставить("Windows_x86_Chrome"); + Реквизиты.Вставить("Linux_x86_Chrome"); + Реквизиты.Вставить("Linux_x86_64_Chrome"); + Реквизиты.Вставить("MacOS_x86_64_Safari"); + Реквизиты.Вставить("Идентификатор"); + Реквизиты.Вставить("Наименование"); + Реквизиты.Вставить("Версия"); + Реквизиты.Вставить("ДатаВерсии"); + Реквизиты.Вставить("ИмяФайла"); + + Возврат Реквизиты; + +КонецФункции + +#КонецОбласти + +#Область РазборКомпонентыИзФайла + +Функция РезультатРазбораКомпоненты() + + Результат = Новый Структура; + Результат.Вставить("Разобрано", Ложь); + Результат.Вставить("Реквизиты", Новый Структура); + Результат.Вставить("ДвоичныеДанные", Неопределено); + Результат.Вставить("ДополнительнаяИнформация", Новый Соответствие); + Результат.Вставить("ОписаниеОшибки", ""); + + Возврат Результат; + +КонецФункции + +Процедура РазобратьМанифестКомпоненты(ФайлXML, Реквизиты) ЧтениеXML = Новый ЧтениеXML; - ЧтениеXML.ОткрытьФайл(ВременныйФайлXML); + ЧтениеXML.ОткрытьФайл(ФайлXML); ЧтениеXML.ПерейтиКСодержимому(); Если ЧтениеXML.Имя = "bundle" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда @@ -504,13 +539,13 @@ КонецПроцедуры -Процедура РазобратьИнфоКомпоненты(ВременныйФайлXML, Реквизиты) +Процедура РазобратьИнфоКомпоненты(ФайлXML, Реквизиты) ИнфоРазобран = Ложь; - // Пытаемся разобрать по формату БПО + // Пытаемся разобрать по формату БПО. ЧтениеXML = Новый ЧтениеXML; - ЧтениеXML.ОткрытьФайл(ВременныйФайлXML); + ЧтениеXML.ОткрытьФайл(ФайлXML); ЧтениеXML.ПерейтиКСодержимому(); Если ЧтениеXML.Имя = "drivers" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда @@ -532,9 +567,9 @@ Если Не ИнфоРазобран Тогда - // Пытаемся разобрать по формату БЭД + // Пытаемся разобрать по формату БЭД. ЧтениеXML = Новый ЧтениеXML; - ЧтениеXML.ОткрытьФайл(ВременныйФайлXML); + ЧтениеXML.ОткрытьФайл(ФайлXML); info = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML); Реквизиты.Идентификатор = info.progid; @@ -547,36 +582,117 @@ КонецПроцедуры -#Область ЗагрузкаССайта +Функция ВычислитьВыражениеXPath(Выражение, ДокументDOM) + + ЗначениеXPath = Неопределено; + + Разыменователь = ДокументDOM.СоздатьРазыменовательПИ(); + РезультатXPath = ДокументDOM.ВычислитьВыражениеXPath(Выражение, ДокументDOM, Разыменователь); + + УзелРезультата = РезультатXPath.ПолучитьСледующий(); + Если ТипЗнч(УзелРезультата) = Тип("АтрибутDOM") Тогда + ЗначениеXPath = УзелРезультата.Значение; + КонецЕсли; + + Возврат ЗначениеXPath + +КонецФункции -// Только при наличии подсистемы БИП.ВнешниеКомпоненты -// -Функция НоваяКомпонентаССайта(Идентификатор, Версия = Неопределено) +Функция ДокументDOM(ПутьКФайлу) - Таблица = Новый ТаблицаЗначений; - Таблица.Колонки.Добавить("Идентификатор"); - Таблица.Колонки.Добавить("Версия"); - Таблица.Колонки.Добавить("ТекущаяВерсия"); + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.ОткрытьФайл(ПутьКФайлу); + ПостроительDOM = Новый ПостроительDOM; + ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML); + ЧтениеXML.Закрыть(); - СтрокаТаблицы = Таблица.Добавить(); - СтрокаТаблицы.Идентификатор = Идентификатор; - СтрокаТаблицы.Версия = Версия; - СтрокаТаблицы.ТекущаяВерсия = Неопределено; + Возврат ДокументDOM; - МодульВнешниеКомпонентыИнтернетПоддержка = ОбщегоНазначения.ОбщийМодуль("ВнешниеКомпонентыИнтернетПоддержка"); - Результат = МодульВнешниеКомпонентыИнтернетПоддержка.ЗагрузитьКомпонентыССайта(Таблица); +КонецФункции + +#КонецОбласти + +#Область ЗагрузкаСПортала + +Процедура ПроверитьДоступностьЗагрузкиСПортала() - Если Результат.Количество() = 0 Тогда - ТекстОшибки = НСтр("ru = 'На сайте 1С нет требуемой компоненты.'"); + Если Не ДоступнаЗагрузкаСПортала() Тогда + ВызватьИсключение + НСтр("ru = 'Обновление внешних компонент не доступно. + |Требуется подсистема обновления внешних компонент библиотеки интернет поддержки.'"); + КонецЕсли; + +КонецПроцедуры + +Процедура НоваяКомпонентаСПортала(ПараметрыПроцедуры, АдресРезультата) Экспорт + + Идентификатор = ПараметрыПроцедуры.Идентификатор; + Версия = ПараметрыПроцедуры.Версия; + + ПроверитьДоступностьЗагрузкиСПортала(); + + МодульПолучениеВнешнихКомпонент = ОбщегоНазначения.ОбщийМодуль("ПолучениеВнешнихКомпонент"); + + ОписаниеВнешнихКомпонент = МодульПолучениеВнешнихКомпонент.ОписаниеВнешнихКомпонент(); + ОписаниеВнешнейКомпоненты = ОписаниеВнешнихКомпонент.Добавить(); + ОписаниеВнешнейКомпоненты.Идентификатор = Идентификатор; + ОписаниеВнешнейКомпоненты.Версия = Версия; + + Если Не ЗначениеЗаполнено(Версия) Тогда + РезультатОперации = МодульПолучениеВнешнихКомпонент.АктуальныеВерсииВнешнихКомпонент(ОписаниеВнешнихКомпонент); + Иначе + РезультатОперации = МодульПолучениеВнешнихКомпонент.ВерсииВнешнихКомпонент(ОписаниеВнешнихКомпонент); + КонецЕсли; + + Если ЗначениеЗаполнено(РезультатОперации.КодОшибки) Тогда + ТекстИсключения = ?(Пользователи.ЭтоПолноправныйПользователь(), + РезультатОперации.ИнформацияОбОшибке, + РезультатОперации.СообщениеОбОшибке); + ВызватьИсключение ТекстИсключения; + КонецЕсли; + + Если РезультатОперации.ДанныеВнешнихКомпонент.Количество() = 0 Тогда + ТекстИсключения = НСтр("ru = 'На Портале 1С:ИТС внешняя компонента не обнаружена.'"); ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); + УровеньЖурналаРегистрации.Ошибка,,, ТекстИсключения); + ВызватьИсключение ТекстИсключения; + КонецЕсли; + + СтрокаРезультата = РезультатОперации.ДанныеВнешнихКомпонент[0]; // Фокусировка на первой строке результата. + + КодОшибки = СтрокаРезультата.КодОшибки; + + Если ЗначениеЗаполнено(КодОшибки) Тогда + + ИнформацияОбОшибке = ""; + Если КодОшибки = "ОтсутствуетКомпонента" Тогда + ИнформацияОбОшибке = НСтр("ru = 'В сервисе внешних компонент не обнаружена внешняя компонента'"); + ИначеЕсли КодОшибки = "ОтсутствуетВерсия" Тогда + ИнформацияОбОшибке = НСтр("ru = 'В сервисе внешних компонент не обнаружена требуемая версия внешней компоненты'"); + ИначеЕсли КодОшибки = "ФайлНеЗагружен" Тогда + ИнформацияОбОшибке = НСтр("ru = 'При попытке загрузить файл внешней компоненты из сервиса, возникла ошибка'"); + ИначеЕсли КодОшибки = "АктуальнаяВерсия" Тогда + ИнформацияОбОшибке = + НСтр("ru = 'Скорее всего произошла ошибка сервера при загрузке компоненты. + |Получен код ошибки: АктуальнаяВерсия, однако в ИБ компоненты не обнаружено.'"); + КонецЕсли; + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При загрузке внешней компоненты %1 возникала ошибка: + |%2'"), + ПредставлениеКомпоненты(Идентификатор, Версия), + ИнформацияОбОшибке); + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, + ТекстОшибки); + ВызватьИсключение ТекстОшибки; КонецЕсли; - СтрокаРезультата = Результат[0]; // Фокусировка на первой строке результата. - - Информация = ИнформацияОКомпоненте(СтрокаРезультата.АдресХранилищаФайла, Ложь); + Информация = ИнформацияОКомпонентеИзФайла(СтрокаРезультата.АдресФайла, Ложь); Если Не Информация.Разобрано Тогда ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", @@ -587,180 +703,68 @@ УстановитьПривилегированныйРежим(Истина); - // Создание экземпляра компоненты. - Объект = Справочники.ВнешниеКомпоненты.СоздатьЭлемент(); - Объект.Заполнить(Неопределено); // Конструктор по умолчанию. - - ЗаполнитьЗначенияСвойств(Объект, Информация.Реквизиты); // По данным манифеста. - ЗаполнитьЗначенияСвойств(Объект, СтрокаРезультата); // По данным с сайта. - - Объект.ДополнительныеСвойства.Вставить("ДвоичныеДанныеКомпоненты", Информация.ДвоичныеДанные); - - - // Если это компонента последней версии, то устанавливаем ОбновлятьССайта. - Если Версия = Неопределено Тогда // Если изначальный запрос конкретной версии - пропускаем. - - // Запрос требуется для случая, для контроля наличия компоненты старшей версии с отключенным обновлением. - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Идентификатор", Идентификатор); - Запрос.Текст = - "ВЫБРАТЬ - | МАКСИМУМ(ВнешниеКомпоненты.ДатаВерсии) КАК ДатаВерсии - |ИЗ - | Справочник.ВнешниеКомпоненты КАК ВнешниеКомпоненты - |ГДЕ - | ВнешниеКомпоненты.Идентификатор = &Идентификатор"; - - Результат = Запрос.Выполнить(); - Выборка = Результат.Выбрать(); - Выборка.Следующий(); - ЭтоМаксимальнаяВерсия = (Выборка.ДатаВерсии = Null) Или (Выборка.ДатаВерсии = Объект.ДатаВерсии); - - Объект.ОбновлятьССайта = ЭтоМаксимальнаяВерсия; - - КонецЕсли; - + НачатьТранзакцию(); Попытка + // Создание экземпляра компоненты. + Объект = Справочники.ВнешниеКомпоненты.СоздатьЭлемент(); + Объект.Заполнить(Неопределено); // Конструктор по умолчанию. + + ЗаполнитьЗначенияСвойств(Объект, Информация.Реквизиты); // По данным манифеста. + ЗаполнитьЗначенияСвойств(Объект, СтрокаРезультата); // По данным с сайта. + + Объект.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Загружена с Портала 1С:ИТС. %1.'"), + ТекущаяДатаСеанса()); + + Объект.ДополнительныеСвойства.Вставить("ДвоичныеДанныеКомпоненты", Информация.ДвоичныеДанные); + + Если Не ЗначениеЗаполнено(Версия) Тогда // Если запрос конкретной версии - пропускаем. + Объект.ОбновлятьСПортала1СИТС = Объект.ЭтоКомпонентаПоследнейВерсии(); + КонецЕсли; + Объект.Записать(); + ЗафиксироватьТранзакцию(); Исключение + ОтменитьТранзакцию(); ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; КонецПопытки; - УстановитьПривилегированныйРежим(Ложь); - - Возврат Объект.Ссылка; - -КонецФункции - -// Выполняется в длительной операции. -// Вызывается из формы элемента и списка. -// -Процедура ОбновитьКомпонентыССайта(МассивСсылок, АдресРезультата) Экспорт - - Если Не ДоступнаЗагрузкаССайта() Тогда - ВызватьИсключение НСтр("ru = 'Обновление внешних компонент не доступно. - |Требуется подсистема обновления внешних компонент библиотеки интернет поддержки.'"); - КонецЕсли; - - // Фильтруем ссылки, убирая обновление для компонент без признака - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("МассивСсылок", МассивСсылок); - Запрос.Текст = - "ВЫБРАТЬ - | ВнешниеКомпоненты.Идентификатор КАК Идентификатор, - | НЕОПРЕДЕЛЕНО КАК Версия, - | ВнешниеКомпоненты.Версия КАК ТекущаяВерсия, - | ВнешниеКомпоненты.Ссылка КАК Ссылка - |ИЗ - | Справочник.ВнешниеКомпоненты КАК ВнешниеКомпоненты - |ГДЕ - | ВнешниеКомпоненты.Ссылка В(&МассивСсылок) - | И ВнешниеКомпоненты.ОбновлятьССайта"; - - ОбновитьКомпонентыССайтаПоЗапросу(Запрос); - КонецПроцедуры -// Только при наличии подсистемы БИП.ВнешниеКомпоненты. -// -Процедура ОбновитьКомпонентыССайтаПоЗапросу(Запрос) +Процедура ОбновитьКомпонентыСПортала(ПараметрыПроцедуры, АдресРезультата) Экспорт - Если Не ДоступнаЗагрузкаССайта() Тогда - ВызватьИсключение НСтр("ru = 'Обновление внешних компонент не доступно. - |Требуется подсистема обновления внешних компонент библиотеки интернет поддержки.'"); - КонецЕсли; + МассивСсылок = ПараметрыПроцедуры.МассивСсылок; - РезультатЗапроса = Запрос.Выполнить(); + ПроверитьДоступностьЗагрузкиСПортала(); - Если РезультатЗапроса.Пустой() Тогда - Возврат; - КонецЕсли; + МодульПолучениеВнешнихКомпонент = ОбщегоНазначения.ОбщийМодуль("ПолучениеВнешнихКомпонент"); + ОписаниеВнешнихКомпонент = МодульПолучениеВнешнихКомпонент.ОписаниеВнешнихКомпонент(); - // Выборка для поиска ссылок при обработке результата запроса с сайта. - Выборка = РезультатЗапроса.Выбрать(); - - // Выполнение запроса к сайту. - Таблица = РезультатЗапроса.Выгрузить(); - - МодульВнешниеКомпонентыИнтернетПоддержка = ОбщегоНазначения.ОбщийМодуль("ВнешниеКомпонентыИнтернетПоддержка"); - Результат = МодульВнешниеКомпонентыИнтернетПоддержка.ЗагрузитьКомпонентыССайта(Таблица); - - // Обход результата запроса с сайта. - Для каждого СтрокаРезультата Из Результат Цикл - - Информация = ИнформацияОКомпоненте(СтрокаРезультата.АдресХранилищаФайла, Ложь); - - Если Не Информация.Разобрано Тогда - ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, , , Информация.ОписаниеОшибки); - ВызватьИсключение Информация.ОписаниеОшибки; - КонецЕсли; - - // Поиск ссылки. - Отбор = Новый Структура("Идентификатор", СтрокаРезультата.Идентификатор); - Если Выборка.НайтиСледующий(Отбор) Тогда - - Объект = Выборка.Ссылка.ПолучитьОбъект(); - - ЗаполнитьЗначенияСвойств(Объект, Информация.Реквизиты); // По данным манифеста. - ЗаполнитьЗначенияСвойств(Объект, СтрокаРезультата); // По данным с сайта. - - Объект.ДополнительныеСвойства.Вставить("ДвоичныеДанныеКомпоненты", Информация.ДвоичныеДанные); - - Попытка - Объект.Записать(); - Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; - - КонецЕсли; - + Для Каждого Ссылка Из МассивСсылок Цикл + Реквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, "Идентификатор, Версия"); + ОписаниеКомпоненты = ОписаниеВнешнихКомпонент.Добавить(); + ОписаниеКомпоненты.Идентификатор = Реквизиты.Идентификатор; + ОписаниеКомпоненты.Версия = Реквизиты.Версия; КонецЦикла; -КонецПроцедуры - -#КонецОбласти - -//////////////////////////////////////////////////////////////////////////////// -// Обработчики выполнения регламентный заданий. - -// Обновление всех компонент. -// -Процедура ОбновитьВсеКомпонентыССайта() Экспорт + РезультатОперации = МодульПолучениеВнешнихКомпонент.АктуальныеВерсииВнешнихКомпонент(ОписаниеВнешнихКомпонент); - ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.ОбновлениеВнешнихКомпонентССайта); - - Если ОбщегоНазначения.РазделениеВключено() Тогда - ВызватьИсключение НСтр("ru = 'Недопустимое использование регламентного задания: - |Нельзя использовать регламентное задание в разделенном режиме.'"); + Если ЗначениеЗаполнено(РезультатОперации.КодОшибки) Тогда + ТекстИсключения = ?(Пользователи.ЭтоПолноправныйПользователь(), + РезультатОперации.ИнформацияОбОшибке, + РезультатОперации.СообщениеОбОшибке); + ВызватьИсключение ТекстИсключения; КонецЕсли; - Если Не ДоступнаЗагрузкаССайта() Тогда - ВызватьИсключение НСтр("ru = 'Недопустимое использование регламентного задания: - |Нельзя использовать регламентное задание в конфигурации - |без подсистемы Интернет Поддержки.'"); - КонецЕсли; - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ВнешниеКомпоненты.Идентификатор КАК Идентификатор, - | НЕОПРЕДЕЛЕНО КАК Версия, - | ВнешниеКомпоненты.Версия КАК ТекущаяВерсия, - | ВнешниеКомпоненты.Ссылка КАК Ссылка - |ИЗ - | Справочник.ВнешниеКомпоненты КАК ВнешниеКомпоненты - |ГДЕ - | ВнешниеКомпоненты.ОбновлятьССайта"; - - ОбновитьКомпонентыССайтаПоЗапросу(Запрос); + ВнешниеКомпонентыСервер.ОбновитьВнешниеКомпоненты(РезультатОперации.ДанныеВнешнихКомпонент, АдресРезультата); КонецПроцедуры #КонецОбласти +#КонецОбласти + diff --git a/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйВызовСервера/Module.bsl index c393d4ca7..a541b40c6 100644 --- a/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйВызовСервера/Module.bsl @@ -1,54 +1,10 @@ #Область СлужебныеПроцедурыИФункции -// Возвращает ссылку на справочник внешней компоненты по идентификатору и версии. +// См. ВнешниеКомпонентыСлужебный.ИнформацияОСохраненнойКомпоненте // -// Параметры: -// Идентификатор - Строка - идентификатор объекта внешнего компонента. -// Версия - Строка, Неопределено - версия компоненты. -// -// Возвращаемое значение: -// СправочникСсылка.ВнешниеКомпоненты - ссылка на контейнер внешней компоненты в информационной базе. -// -Функция СсылкаПоИдентификатору(Идентификатор, Версия = Неопределено) Экспорт +Функция ИнформацияОСохраненнойКомпоненте(Идентификатор, Версия = Неопределено) Экспорт - Возврат ВнешниеКомпонентыСлужебный.СсылкаПоИдентификатору(Идентификатор, Версия); - -КонецФункции - -// Выполняет подготовку компоненты к подключению и возвращает информацию для проверки -// совместимости компоненты на клиенте. -// В случае отсутствия компоненты, выполняет ее получение средствами подсистемы интернет поддержки. -// Компонента помещается во временное хранилище до завершения сеанса, -// Для оптимизации памяти после попытки подключения рекомендуется выполнить очистку хранилища. -// -// Параметры: -// Идентификатор - Строка - идентификатор объекта внешнего компонента. -// Версия - Строка, Неопределено - версия компоненты. -// -// Возвращаемое значение: -// Структура - параметры выполнения задания (см. ДлительныеОперации.ВыполнитьВФоне). -// -Функция НачатьПодготовкуКомпонентыКПодключению(Идентификатор, Версия = Неопределено) Экспорт - - Параметры = Новый Структура; - Параметры.Вставить("Идентификатор", Идентификатор); - Параметры.Вставить("Версия" , Версия); - - ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(Новый УникальныйИдентификатор); - ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Подготовка компоненты...'"); - - Возврат ДлительныеОперации.ВыполнитьВФоне("ВнешниеКомпонентыСлужебный.ПодготовитьКомпонентуКПодключению", - Параметры, ПараметрыВыполнения); - -КонецФункции - -// Получает результат подготовки компоненты к подключению возвращает его и очищает память. -// -Функция РезультатПодготовкиКомпонентыКПодключению(АдресРезультата) Экспорт - - Результат = ПолучитьИзВременногоХранилища(АдресРезультата); - УдалитьИзВременногоХранилища(АдресРезультата); - Возврат Результат; + Возврат ВнешниеКомпонентыСлужебный.ИнформацияОСохраненнойКомпоненте(Идентификатор, Версия); КонецФункции @@ -60,13 +16,5 @@ КонецФункции -// Проверяет доступность -// -Функция ДоступнаЗагрузкаКомпонентыИзФайла() Экспорт - - Возврат Пользователи.ЭтоПолноправныйПользователь(,, Ложь); - -КонецФункции - #КонецОбласти diff --git a/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйКлиент/Module.bsl index 4abf52b93..fce1b970f 100644 --- a/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйКлиент/Module.bsl @@ -11,86 +11,242 @@ #Область СлужебныеПроцедурыИФункции -#Область ПодключениеВнешнейКомпоненты +#Область ПроверитьДоступностьКомпоненты -// Вызывается после подготовки длительной операцией -// -Процедура ПодключитьКомпонентуПослеПодготовки(Результат, Контекст) Экспорт - - // Ответ: - // - Структура - Выполнено - результат в структуре. - // - Неопределено - Отменено пользователем. - Если Результат = Неопределено Тогда - - // Освобождаем выделенную память. - УдалитьИзВременногоХранилища(Контекст.АдресРезультатаПодготовкиКомпоненты); // Вызов сервера. - Возврат; - КонецЕсли; +Процедура ПроверитьДоступностьКомпоненты(Оповещение, Контекст) - // В контексте АдресРезультата больше не нужен, теперь он актуализирован в Результат.АдресРезультата. - Контекст.Удалить("АдресРезультатаПодготовкиКомпоненты"); + Информация = ВнешниеКомпонентыСлужебныйВызовСервера.ИнформацияОСохраненнойКомпоненте( + Контекст.Идентификатор, + Контекст.Версия); - // Результат.Статус: - // - "Ошибка" - описание в ОписаниеОшибки. - // - "Выполнено" - результат в Результат.АдресРезультата. - Если Результат.Статус = "Выполнено" Тогда + Контекст.Вставить("Местоположение", Информация.Местоположение); + + // Информация.Состояние: + // * НеНайдена + // * НайденаВХранилище + // * НайденаВОбщемХранилище + // * ОтключенаАдминистратором + + Результат = РезультатДоступностиКомпоненты(); + + Если Информация.Состояние = "ОтключенаАдминистратором" Тогда - Информация = ВнешниеКомпонентыСлужебныйВызовСервера.РезультатПодготовкиКомпонентыКПодключению( - Результат.АдресРезультата); // Вызов сервера. + Результат.ОписаниеОшибки = НСтр("ru = 'Отключена администратором.'"); + ВыполнитьОбработкуОповещения(Оповещение, Результат); - Доступна = ПроверитьДоступностьКомпоненты(Информация); + ИначеЕсли Информация.Состояние = "НеНайдена" Тогда - Если Доступна Тогда + Если Информация.ДоступнаЗагрузкаСПортала + И Контекст.ПредложитьЗагрузить Тогда - Контекст.Вставить("Местоположение", Информация.Местоположение); - ОбщегоНазначенияСлужебныйКлиент.ПодключитьКомпоненту(Контекст); + КонтекстПоиска = Новый Структура; + КонтекстПоиска.Вставить("Оповещение", Оповещение); + КонтекстПоиска.Вставить("Контекст", Контекст); + + ОповещениеФормы = Новый ОписаниеОповещения( + "ПроверитьДоступностьКомпонентыПослеПоискаКомпонентыНаПортале", + ЭтотОбъект, + КонтекстПоиска); + + ПоискКомпонентыНаПортале(ОповещениеФормы, Контекст); + + Иначе + Результат.ОписаниеОшибки = НСтр("ru = 'Компонента не найдена в хранилище.'"); + ВыполнитьОбработкуОповещения(Оповещение, Результат); + КонецЕсли; + + Иначе + + Если ТекущийКлиентПоддерживаетсяКомпонентой(Информация.Реквизиты) Тогда + + Результат.Доступна = Истина; + ВыполнитьОбработкуОповещения(Оповещение, Результат); Иначе - Оповещение = Новый ОписаниеОповещения( - "ПодключитьКомпонентуЗавершениеНеДоступноВКлиенте", ЭтотОбъект, Контекст); + ОповещениеФормы = Новый ОписаниеОповещения( + "ПроверитьДоступностьКомпонентыПослеОтображенияДоступныхВидовКлиентов", + ЭтотОбъект, + Оповещение); ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("ТекстПояснения", Контекст.ТекстПояснения); - ПараметрыФормы.Вставить("ПоддерживаемыеКлиенты", Информация); + ПараметрыФормы.Вставить("ПоддерживаемыеКлиенты", Информация.Реквизиты); - ОткрытьФорму("ОбщаяФорма.ДоступныеВидыКлиентовВнешнейКомпоненты", - ПараметрыФормы,,,,, Оповещение); + ОткрытьФорму("ОбщаяФорма.УстановкаВнешнейКомпонентыНевозможна", + ПараметрыФормы,,,,, ОповещениеФормы); КонецЕсли; - Иначе - - // Освобождаем выделенную память. - УдалитьИзВременногоХранилища(Результат.АдресРезультата); // Вызов сервера. - - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось подключить внешнюю компоненту ""%1"" на клиенте - |из хранилища внешних компонент - |по причине: - |%2'"), - Контекст.Идентификатор, - Результат.КраткоеПредставлениеОшибки); - - ОбщегоНазначенияСлужебныйКлиент.ПодключитьКомпонентуОповеститьОбОшибке(ТекстОшибки, Контекст); - КонецЕсли; КонецПроцедуры -// -Процедура ПодключитьКомпонентуЗавершениеНеДоступноВКлиенте(Результат, Контекст) Экспорт +Процедура ПроверитьДоступностьКомпонентыПослеПоискаКомпонентыНаПортале(Загружена, КонтекстПоиска) Экспорт - ТекстОшибки = ""; - ОбщегоНазначенияСлужебныйКлиент.ПодключитьКомпонентуОповеститьОбОшибке(ТекстОшибки, Контекст); + Оповещение = КонтекстПоиска.Оповещение; + Контекст = КонтекстПоиска.Контекст; + + Если Загружена Тогда + Контекст.ПредложитьЗагрузить = Ложь; + ПроверитьДоступностьКомпоненты(Оповещение, Контекст); + Иначе + ВыполнитьОбработкуОповещения(Оповещение, РезультатДоступностиКомпоненты()); + КонецЕсли; КонецПроцедуры -// Параметры: -// Контекст - Структура - контекст процедуры: -// * Оповещение - ОписаниеОповещения - . -// * Идентификатор - Строка - . -// * ИдентификаторСозданияОбъекта - Строка, Неопределено - . +Процедура ПроверитьДоступностьКомпонентыПослеОтображенияДоступныхВидовКлиентов(Результат, Оповещение) Экспорт + + ВыполнитьОбработкуОповещения(Оповещение, РезультатДоступностиКомпоненты()); + +КонецПроцедуры + +Функция РезультатДоступностиКомпоненты() + + Результат = Новый Структура; + Результат.Вставить("Доступна", Ложь); + Результат.Вставить("ОписаниеОшибки"); + + Возврат Результат; + +КонецФункции + +Функция ТекущийКлиентПоддерживаетсяКомпонентой(Реквизиты) + + СистемнаяИнформация = Новый СистемнаяИнформация; + + Браузер = Неопределено; +#Если ВебКлиент Тогда + Строка = СистемнаяИнформация.ИнформацияПрограммыПросмотра; + + Если СтрНайти(Строка, "Chrome/") > 0 Тогда + Браузер = "Chrome"; + ИначеЕсли СтрНайти(Строка, "MSIE") > 0 Тогда + Браузер = "MSIE"; + ИначеЕсли СтрНайти(Строка, "Safari/") > 0 Тогда + Браузер = "Safari"; + ИначеЕсли СтрНайти(Строка, "Firefox/") > 0 Тогда + Браузер = "Firefox"; + КонецЕсли; +#КонецЕсли + + Если СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86 Тогда + + Если Браузер = Неопределено Тогда + Возврат Реквизиты.Linux_x86; + КонецЕсли; + + Если Браузер = "Firefox" Тогда + Возврат Реквизиты.Linux_x86_Firefox; + КонецЕсли; + + Если Браузер = "Chrome" Тогда + Возврат Реквизиты.Linux_x86_Chrome; + КонецЕсли; + + ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86_64 Тогда + + Если Браузер = Неопределено Тогда + Возврат Реквизиты.Linux_x86_64; + КонецЕсли; + + Если Браузер = "Firefox" Тогда + Возврат Реквизиты.Linux_x86_64_Firefox; + КонецЕсли; + + Если Браузер = "Chrome" Тогда + Возврат Реквизиты.Linux_x86_64_Chrome; + КонецЕсли; + + ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.MacOS_x86_64 Тогда + + Если Браузер = "Safari" Тогда + Возврат Реквизиты.MacOS_x86_64_Safari; + КонецЕсли; + + ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 Тогда + + Если Браузер = Неопределено Тогда + Возврат Реквизиты.Windows_x86; + КонецЕсли; + + Если Браузер = "Firefox" Тогда + Возврат Реквизиты.Windows_x86_Firefox; + КонецЕсли; + + Если Браузер = "Chrome" Тогда + Возврат Реквизиты.Windows_x86_Chrome; + КонецЕсли; + + Если Браузер = "MSIE" Тогда + Возврат Реквизиты.Windows_x86_MSIE; + КонецЕсли; + + ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда + + Если Браузер = Неопределено Тогда + Возврат Реквизиты.Windows_x86_64; + КонецЕсли; + + Если Браузер = "Firefox" Тогда + Возврат Реквизиты.Windows_x86_Firefox; + КонецЕсли; + + Если Браузер = "Chrome" Тогда + Возврат Реквизиты.Windows_x86_Chrome; + КонецЕсли; + + Если Браузер = "MSIE" Тогда + Возврат Реквизиты.Windows_x86_64_MSIE; + КонецЕсли; + + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +#КонецОбласти + +#Область ПодключитьКомпоненту + +Процедура ПодключитьКомпоненту(Контекст) Экспорт + + Оповещение = Новый ОписаниеОповещения( + "ПодключитьКомпонентуПослеПроверкиДоступности", + ЭтотОбъект, + Контекст); + + ПроверитьДоступностьКомпоненты(Оповещение, Контекст); + +КонецПроцедуры + +Процедура ПодключитьКомпонентуПослеПроверкиДоступности(Результат, Контекст) Экспорт + + Если Результат.Доступна Тогда + ОбщегоНазначенияСлужебныйКлиент.ПодключитьКомпоненту(Контекст); + Иначе + Если Не ПустаяСтрока(Результат.ОписаниеОшибки) Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось подключить внешнюю компоненту ""%1"" на клиенте + |из хранилища внешних компонент + |по причине: + |%2'"), + Контекст.Идентификатор, + Результат.ОписаниеОшибки); + КонецЕсли; + + ОбщегоНазначенияСлужебныйКлиент.ПодключитьКомпонентуОповеститьОбОшибке(ТекстОшибки, Контекст); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ПодключитьКомпонентуИзРеестраWindows + +// см. функцию ВнешниеКомпонентыКлиент.ПодключитьКомпонентуИзРеестраWindows. // Процедура ПодключитьКомпонентуИзРеестраWindows(Контекст) Экспорт @@ -189,230 +345,87 @@ #КонецОбласти -#Область УстановкаВнешнейКомпоненты +#Область УстановитьКомпоненту -// Вызывается после подготовки длительной операцией -// -Процедура УстановитьКомпонентуПослеПодготовки(Результат, Контекст) Экспорт +Процедура УстановитьКомпоненту(Контекст) Экспорт + + Оповещение = Новый ОписаниеОповещения( + "УстановитьКомпонентуПослеПроверкиДоступности", + ЭтотОбъект, + Контекст); + + ПроверитьДоступностьКомпоненты(Оповещение, Контекст); + +КонецПроцедуры - // Ответ: - // - Структура - Выполнено - результат в структуре. - // - Неопределено - Отменено пользователем. - Если Результат = Неопределено Тогда - - // Освобождаем выделенную память. - УдалитьИзВременногоХранилища(Контекст.АдресРезультатаПодготовкиКомпоненты); // Вызов сервера. - Возврат; - КонецЕсли; +Процедура УстановитьКомпонентуПослеПроверкиДоступности(Результат, Контекст) Экспорт - // В контексте АдресРезультата больше не нужен, теперь он актуализирован в Результат.АдресРезультата. - Контекст.Удалить("АдресРезультатаПодготовкиКомпоненты"); - - // Результат.Статус: - // - "Ошибка" - описание в ОписаниеОшибки. - // - "Выполнено" - результат в Результат.АдресРезультата. - Если Результат.Статус = "Выполнено" Тогда - - Информация = ПолучитьИзВременногоХранилища(Результат.АдресРезультата); // Вызов сервера. - - // Освобождаем выделенную память. - УдалитьИзВременногоХранилища(Результат.АдресРезультата); // Вызов сервера. - - Доступна = ПроверитьДоступностьКомпоненты(Информация); - - Если Доступна Тогда - - Контекст.Вставить("Местоположение", Информация.Местоположение); - ОбщегоНазначенияСлужебныйКлиент.УстановитьКомпоненту(Контекст); - - Иначе - - ОповещениеФормы = Новый ОписаниеОповещения( - "УстановитьКомпонентуПослеОтображенияДоступныхВидовКлиентов", ЭтотОбъект, Контекст); - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ТекстПояснения" , Контекст.ТекстПояснения); - ПараметрыФормы.Вставить("ПоддерживаемыеКлиенты", Информация); - - ОткрытьФорму("ОбщаяФорма.ДоступныеВидыКлиентовВнешнейКомпоненты", - ПараметрыФормы,,,,, ОповещениеФормы); - - КонецЕсли; - - Иначе - - // Освобождаем выделенную память. - УдалитьИзВременногоХранилища(Результат.АдресРезультата); // Вызов сервера. - + Если Результат.Доступна Тогда + ОбщегоНазначенияСлужебныйКлиент.УстановитьКомпоненту(Контекст); + Иначе ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось установить внешнюю компоненту ""%1"" на клиенте + НСтр("ru = 'Не удалось подключить внешнюю компоненту ""%1"" на клиенте |из хранилища внешних компонент |по причине: |%2'"), Контекст.Идентификатор, - Результат.КраткоеПредставлениеОшибки); - + Результат.ОписаниеОшибки); + ОбщегоНазначенияСлужебныйКлиент.УстановитьКомпонентуОповеститьОбОшибке(ТекстОшибки, Контекст); - КонецЕсли; КонецПроцедуры -// -Процедура УстановитьКомпонентуПослеОтображенияДоступныхВидовКлиентов(Результат, Контекст) Экспорт - - ТекстОшибки = ""; - ОбщегоНазначенияСлужебныйКлиент.УстановитьКомпонентуОповеститьОбОшибке(ТекстОшибки, Контекст); - -КонецПроцедуры - #КонецОбласти +#Область ЗагрузитьКомпонентуИзФайла -// Параметры: -// Информация - Структура - См. функцию. -// -Функция ПроверитьДоступностьКомпоненты(Информация) - - СистемнаяИнформация = Новый СистемнаяИнформация; - - Браузер = Неопределено; - #Если ВебКлиент Тогда - - Строка = СистемнаяИнформация.ИнформацияПрограммыПросмотра; - - Если СтрНайти(Строка, "Chrome/") > 0 Тогда - Браузер = "Chrome"; - ИначеЕсли СтрНайти(Строка, "MSIE") > 0 Тогда - Браузер = "MSIE"; - ИначеЕсли СтрНайти(Строка, "Safari/") > 0 Тогда - Браузер = "Safari"; - ИначеЕсли СтрНайти(Строка, "Firefox/") > 0 Тогда - Браузер = "Firefox"; - КонецЕсли; - #КонецЕсли - - Если СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86 Тогда - - Если Браузер = Неопределено Тогда - Возврат Информация.Linux_x86; - КонецЕсли; - - Если Браузер = "Firefox" Тогда - Возврат Информация.Linux_x86_Firefox; - КонецЕсли; - - Если Браузер = "Chrome" Тогда - Возврат Информация.Linux_x86_Chrome; - КонецЕсли; - - ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86_64 Тогда - - Если Браузер = Неопределено Тогда - Возврат Информация.Linux_x86_64; - КонецЕсли; - - Если Браузер = "Firefox" Тогда - Возврат Информация.Linux_x86_64_Firefox; - КонецЕсли; - - Если Браузер = "Chrome" Тогда - Возврат Информация.Linux_x86_64_Chrome; - КонецЕсли; - - ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.MacOS_x86_64 Тогда - - Если Браузер = "Safari" Тогда - Возврат Информация.MacOS_x86_64_Safari; - КонецЕсли; - - ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 Тогда - - Если Браузер = Неопределено Тогда - Возврат Информация.Windows_x86; - КонецЕсли; - - Если Браузер = "Firefox" Тогда - Возврат Информация.Windows_x86_Firefox; - КонецЕсли; - - Если Браузер = "Chrome" Тогда - Возврат Информация.Windows_x86_Chrome; - КонецЕсли; - - Если Браузер = "MSIE" Тогда - Возврат Информация.Windows_x86_MSIE; - КонецЕсли; - - ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда - - Если Браузер = Неопределено Тогда - Возврат Информация.Windows_x86_64; - КонецЕсли; - - Если Браузер = "Firefox" Тогда - Возврат Информация.Windows_x86_Firefox; - КонецЕсли; - - Если Браузер = "Chrome" Тогда - Возврат Информация.Windows_x86_Chrome; - КонецЕсли; - - Если Браузер = "MSIE" Тогда - Возврат Информация.Windows_x86_64_MSIE; - КонецЕсли; - - КонецЕсли; - - Возврат Ложь; - -КонецФункции - - -#Область ЗагрузкаВнешнейКомпоненты - -// Параметры: -// Контекст - Структура - контекст процедуры: -// * Оповещение - ОписаниеОповещения - . -// * Идентификатор - Строка, Неопределено - . -// * Версия - Строка, Неопределено - . +// см. функцию ВнешниеКомпонентыКлиент.ЗагрузитьКомпонентуИзФайла. // Процедура ЗагрузитьКомпонентуИзФайла(Контекст) Экспорт - Если ВнешниеКомпонентыСлужебныйВызовСервера.ДоступнаЗагрузкаКомпонентыИзФайла() Тогда + Информация = ВнешниеКомпонентыСлужебныйВызовСервера.ИнформацияОСохраненнойКомпоненте(Контекст.Идентификатор, Контекст.Версия); + + Если Информация.ДоступнаЗагрузкаИзФайла Тогда + + ПараметрыПоискаДополнительнойИнформации = Контекст.ПараметрыПоискаДополнительнойИнформации; ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("ПоказатьДиалогЗагрузкиИзФайлаПриОткрытии", Истина); - ПараметрыФормы.Вставить("ВернутьРезультатЗагрузкиИзФайла" , Истина); + ПараметрыФормы.Вставить("ВернутьРезультатЗагрузкиИзФайла", Истина); + ПараметрыФормы.Вставить("ПараметрыПоискаДополнительнойИнформации", ПараметрыПоискаДополнительнойИнформации); - Если Контекст.Идентификатор <> Неопределено Тогда - Ссылка = ВнешниеКомпонентыСлужебныйВызовСервера.СсылкаПоИдентификатору(Контекст.Идентификатор, Контекст.Версия); - Если Не Ссылка.Пустая() Тогда - ПараметрыФормы.Вставить("Ключ", Ссылка); - КонецЕсли; + Если Информация.Состояние = "НайденаВХранилище" + Или Информация.Состояние = "ОтключенаАдминистратором" Тогда + + ПараметрыФормы.Вставить("ПоказатьДиалогЗагрузкиИзФайлаПриОткрытии", Ложь); + ПараметрыФормы.Вставить("Ключ", Информация.Ссылка); КонецЕсли; Оповещение = Новый ОписаниеОповещения("ЗагрузитьКомпонентуИзФайлаПослеЗагрузки", ЭтотОбъект, Контекст); - ОткрытьФорму("Справочник.ВнешниеКомпоненты.ФормаОбъекта", ПараметрыФормы,,,,, Оповещение); Иначе - ТекстОшибки = - НСтр("ru = 'Не удалось загрузить внешнюю компоненту в хранилище внешних компонент + Оповещение = Новый ОписаниеОповещения("ЗагрузитьКомпонентуИзФайлаПослеПредупрежденияДоступности", ЭтотОбъект, Контекст); + ПоказатьПредупреждение(Оповещение, + НСтр("ru = 'Загрузка внешней компоненты прервана |по причине: - |Требуются права администратора'"); - - Результат = Новый Структура; - Результат.Вставить("Загружено", Ложь); - Результат.Вставить("ОписаниеОшибки", ТекстОшибки); - - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); + |Требуются права администратора'")); КонецЕсли; КонецПроцедуры +// Продолжение процедуры ЗагрузитьКомпонентуИзФайла. +Процедура ЗагрузитьКомпонентуИзФайлаПослеПредупрежденияДоступности(Контекст) Экспорт + + Результат = РезультатЗагрузкиКомпоненты(); + Результат.Загружена = Ложь; + ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); + +КонецПроцедуры + // Продолжение процедуры ЗагрузитьКомпонентуИзФайла. Процедура ЗагрузитьКомпонентуИзФайлаПослеЗагрузки(Результат, Контекст) Экспорт @@ -420,22 +433,93 @@ // - Структура - Загружено. // - Неопределено - Закрыто окно. - Загружено = (ТипЗнч(Результат) = Тип("Структура")); + ПользовательЗакрылОкно = (Результат = Неопределено); - Если Не Загружено Тогда - Результат = Новый Структура; - Результат.Вставить("ОписаниеОшибки", ""); + Оповещение = Контекст.Оповещение; + + Если ПользовательЗакрылОкно Тогда + Результат = РезультатЗагрузкиКомпоненты(); + Результат.Загружена = Ложь; КонецЕсли; - Результат.Вставить("Загружено", Загружено); + ВыполнитьОбработкуОповещения(Оповещение, Результат); - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); +КонецПроцедуры + +// Продолжение процедуры ЗагрузитьКомпонентуИзФайла. +Функция РезультатЗагрузкиКомпоненты() Экспорт + + Результат = Новый Структура; + Результат.Вставить("Загружена", Ложь); + Результат.Вставить("Идентификатор", ""); + Результат.Вставить("Версия", ""); + Результат.Вставить("Наименование", ""); + Результат.Вставить("ДополнительнаяИнформация", Новый Соответствие); + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область ПоискКомпонентыНаПортале + +// Параметры: +// Оповещение - ОписаниеОповещения - . +// Контекст - Структура - контекст процедуры: +// * ТекстПояснения - Строка - . +// * Идентификатор - Строка - . +// * Версия - Строка, Неопределено - . +// +Процедура ПоискКомпонентыНаПортале(Оповещение, Контекст) + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ТекстПояснения", Контекст.ТекстПояснения); + ПараметрыФормы.Вставить("Идентификатор", Контекст.Идентификатор); + ПараметрыФормы.Вставить("Версия", Контекст.Версия); + + ОповещениеФормы = Новый ОписаниеОповещения("ПоискКомпонентыНаПорталеПриФормированииРезультата", ЭтотОбъект, Оповещение); + + ОткрытьФорму("Справочник.ВнешниеКомпоненты.Форма.ПоискКомпонентыНаПортале1СИТС", + ПараметрыФормы,,,,, ОповещениеФормы) + +КонецПроцедуры + +Процедура ПоискКомпонентыНаПорталеПриФормированииРезультата(Результат, Оповещение) Экспорт + + Загружена = (Результат = Истина); // При закрытии формы будет Неопределено. + ВыполнитьОбработкуОповещения(Оповещение, Загружена); КонецПроцедуры #КонецОбласти -#Область СохранениеВнешнейКомпоненты +#Область ОбновитьКомпонентыСПортала + +// Параметры: +// МассивСсылок - Массив - . +// +Процедура ОбновитьКомпонентыСПортала(Оповещение, МассивСсылок) Экспорт + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("МассивСсылок", МассивСсылок); + + ОповещениеФормы = Новый ОписаниеОповещения("ОбновитьКомпонентыСПорталаПриФормированииРезультата", ЭтотОбъект, Оповещение); + + ОткрытьФорму("Справочник.ВнешниеКомпоненты.Форма.ОбновлениеКомпонентСПортала1СИТС", + ПараметрыФормы,,,,, ОповещениеФормы); + +КонецПроцедуры + +Процедура ОбновитьКомпонентыСПорталаПриФормированииРезультата(Результат, Оповещение) Экспорт + + ВыполнитьОбработкуОповещения(Оповещение, Неопределено); + +КонецПроцедуры + +#КонецОбласти + +#Область СохранитьКомпонентуВФайл // Параметры: // Ссылка - СправочникСсылка.ВнешниеКомпоненты - контейнер внешней компоненты в информационной базе. diff --git a/SSL/src/CommonModules/ВызовОнлайнПоддержкиКлиент/Module.bsl b/SSL/src/CommonModules/ВызовОнлайнПоддержкиКлиент/Module.bsl index 406f84494..369bf2309 100644 --- a/SSL/src/CommonModules/ВызовОнлайнПоддержкиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВызовОнлайнПоддержкиКлиент/Module.bsl @@ -175,26 +175,36 @@ КонецПроцедуры // Продолжение процедуры (см. выше). -Процедура ВызватьОнлайнПоддержкуПослеПроверкиПутиИзХранилища(ПутьИзХранилищаВерен, ДополнительныеПараметры) Экспорт +Процедура ВызватьОнлайнПоддержкуПослеПроверкиПутиИзХранилища(ПутьИзХранилищаВерен, Контекст) Экспорт УчетнаяЗапись = ВызовОнлайнПоддержкиВызовСервера.НастройкиУчетнойЗаписиПользователя(); - ПараметрыЗапускаВызовОнлайнПоддержки = " /StartedFrom1CConf"; + ПараметрыЗапускаВызовОнлайнПоддержки = Новый Массив; + ПараметрыЗапускаВызовОнлайнПоддержки.Добавить("/StartedFrom1CConf"); Если УчетнаяЗапись.ИспользоватьЛП Тогда - Если УчетнаяЗапись.Логин <> "" И УчетнаяЗапись.Пароль <> "" Тогда - ПараметрыЗапускаВызовОнлайнПоддержки = ПараметрыЗапускаВызовОнлайнПоддержки + " /login:" + УчетнаяЗапись.Логин + " /password:" + УчетнаяЗапись.Пароль; + Если Не ПустаяСтрока(УчетнаяЗапись.Логин) И Не ПустаяСтрока(УчетнаяЗапись.Пароль) Тогда + ПараметрыЗапускаВызовОнлайнПоддержки.Добавить("/login:"); + ПараметрыЗапускаВызовОнлайнПоддержки.Добавить(УчетнаяЗапись.Логин); + ПараметрыЗапускаВызовОнлайнПоддержки.Добавить("/password:"); + ПараметрыЗапускаВызовОнлайнПоддержки.Добавить(УчетнаяЗапись.Пароль); КонецЕсли; КонецЕсли; Если ПутьИзХранилищаВерен Тогда - ОбщегоНазначенияКлиент.ЗапуститьПрограмму("""" + ДополнительныеПараметры.ПутьИзХранилища + """" + ПараметрыЗапускаВызовОнлайнПоддержки); + КомандаЗапуска = Новый Массив; + КомандаЗапуска.Добавить(Контекст.ПутьИзХранилища); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(КомандаЗапуска, ПараметрыЗапускаВызовОнлайнПоддержки); + ОбщегоНазначенияКлиент.ЗапуститьПрограмму(КомандаЗапуска); Возврат; КонецЕсли; - Если ДополнительныеПараметры.ПутьИзРеестраВерен Тогда - ОбщегоНазначенияКлиент.ЗапуститьПрограмму("""" + ДополнительныеПараметры.ПутьИзРеестра + """" + ПараметрыЗапускаВызовОнлайнПоддержки); + Если Контекст.ПутьИзРеестраВерен Тогда + КомандаЗапуска = Новый Массив; + КомандаЗапуска.Добавить(Контекст.ПутьИзРеестра); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(КомандаЗапуска, ПараметрыЗапускаВызовОнлайнПоддержки); + ОбщегоНазначенияКлиент.ЗапуститьПрограмму(КомандаЗапуска); Возврат; КонецЕсли; diff --git a/SSL/src/CommonModules/ДлительныеОперации/Module.bsl b/SSL/src/CommonModules/ДлительныеОперации/Module.bsl index c77fa00eb..3601c6131 100644 --- a/SSL/src/CommonModules/ДлительныеОперации/Module.bsl +++ b/SSL/src/CommonModules/ДлительныеОперации/Module.bsl @@ -13,8 +13,8 @@ // Параметры: // ИмяПроцедуры - Строка - имя экспортной процедуры общего модуля, модуля менеджера объекта // или модуля обработки, которую необходимо выполнить в фоне. -// Например, "МойОбщийМодуль.МояПроцедура", "Отчет.ЗагруженныеДанные.Сформировать" -// или "Обработка.ЗагрузкаДанных.МодульОбъекта.Загрузить". +// Например, "МойОбщийМодуль.МояПроцедура", "Отчеты.ЗагруженныеДанные.Сформировать" +// или "Обработки.ЗагрузкаДанных.МодульОбъекта.Загрузить". // У процедуры может быть два или три формальных параметра: // * Параметры - Структура - произвольные параметры ПараметрыПроцедуры; // * АдресРезультата - Строка - адрес временного хранилища, в которое нужно @@ -43,6 +43,44 @@ // * КраткоеПредставлениеОшибки - Строка - краткая информация об исключении, если Статус = "Ошибка". // * ПодробноеПредставлениеОшибки - Строка - подробная информация об исключении, если Статус = "Ошибка". // +// Пример: +// В общем виде процесс запуска и обработки результата длительной операции выглядит следующим образом: +// +// 1) процедура, которая будет исполняться в фоне, располагается в модуле менеджера объекта или в серверном общем модуле: +// Процедура ВыполнитьДействие(Параметры, АдресРезультата) Экспорт +// ... +// ПоместитьВоВременноеХранилище(Результат, АдресРезультата); +// КонецПроцедуры +// +// 2) запуск операции на сервере и подключение обработчика ожидания: +// &НаКлиенте +// Процедура ВыполнитьДействие() +// ДлительнаяОперация = НачатьВыполнениеНаСервере(); +// ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); +// ... +// ОповещениеОЗавершении = Новый ОписаниеОповещения("ВыполнитьДействиеЗавершение", ЭтотОбъект); +// ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОповещениеОЗавершении, ПараметрыОжидания); +// КонецПроцедуры +// +// &НаСервере +// Функция НачатьВыполнениеНаСервере() +// ПараметрыПроцедуры = Новый Структура; +// ... +// ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); +// ... +// Возврат ДлительныеОперации.ВыполнитьВФоне("Обработки.МояОбработка.ВыполнитьДействие", +// ПараметрыПроцедуры, ПараметрыВыполнения); +// КонецФункции +// +// 3) обработка результата выполнения операции: +// &НаКлиенте +// Процедура ВыполнитьДействиеЗавершение(Результат, ДополнительныеПараметры) Экспорт +// Если Результат = Неопределено Тогда +// Возврат; +// КонецЕсли; +// ВывестиРезультат(Результат); +// КонецПроцедуры +// Функция ВыполнитьВФоне(Знач ИмяПроцедуры, Знач ПараметрыПроцедуры, Знач ПараметрыВыполнения) Экспорт ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("ДлительныеОперации.ВыполнитьВФоне", "ПараметрыВыполнения", @@ -202,14 +240,16 @@ КонецФункции -// Регистрирует информацию о ходе выполнения фонового задания. -// В дальнейшем ее можно считать при помощи функции ПрочитатьПрогресс. +// Регистрирует информацию о ходе выполнения длительной операции. +// В дальнейшем ее можно считать при помощи функции ДлительныеОперации.ПрочитатьПрогресс. +// Во избежание избыточного потребления памяти и ее утечек при выполнении одной длительной операции +// не следует сообщать прогресс более 100 раз. // // Параметры: -// Процент - Число - Необязательный. Процент выполнения. -// Текст - Строка - Необязательный. Информация о текущей операции. -// ДополнительныеПараметры - Произвольный - Необязательный. Любая дополнительная информация, -// которую необходимо передать на клиент. Значение должно быть простым (сериализуемым в XML строку). +// Процент - Число - Процент выполнения. +// Текст - Строка - Информация о текущей операции. +// ДополнительныеПараметры - Произвольный - Любая дополнительная информация, которую необходимо передать на клиент. +// Значение должно быть простым (сериализуемым в XML строку). // Процедура СообщитьПрогресс(Знач Процент = Неопределено, Знач Текст = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт @@ -235,7 +275,8 @@ КонецПроцедуры -// Считывает информацию о ходе выполнения фонового задания. +// Считывает информацию о ходе выполнения длительной операции, +// записанную процедурой ДлительныеОперации.СообщитьПрогресс. // // Параметры: // ИдентификаторЗадания - УникальныйИдентификатор - идентификатор фонового задания. @@ -289,7 +330,8 @@ КонецПроцедуры // Проверяет состояние фонового задания по переданному идентификатору. -// При аварийном завершении задания вызывает исключение. +// При аварийном завершении задания вызывает исключение, возникшее в нем, +// либо исключение общего вида "Не удалось выполнить данную операцию. Подробности см. в Журнале регистрации". // // Параметры: // ИдентификаторЗадания - УникальныйИдентификатор - идентификатор фонового задания. @@ -342,12 +384,20 @@ // Получает сообщения пользователю, отфильтровывает служебные сообщения о состоянии длительной операции. // // Параметры: -// УдалятьПолученные - Булево - Признак необходимости удаления полученных сообщений. -// ИдентификаторЗадания - УникальныйИдентификатор - идентификатор фонового задания. +// УдалятьПолученные - Булево - Признак необходимости удаления полученных сообщений. +// ИдентификаторЗадания - УникальныйИдентификатор - Идентификатор фонового задания, соответствующего длительной +// операции, у которой требуется получить сообщения пользователю. +// Если не задан, то сообщения пользователю возвращаются +// из сеанса текущего пользователя. // // Возвращаемое значение: -//  Массив - ФиксированныйМассив - Массив объектов СообщениеПользователю, которые были сформированы в -// фоновом задании. +//  ФиксированныйМассив - объекты СообщениеПользователю, которые были сформированы в фоновом задании. +// +// Пример: +// Операция = ДлительныеОперации.ВыполнитьВФоне(...); +// ... +// Сообщения = ДлительныеОперации.СообщенияПользователю(Истина, Операция.ИдентификаторЗадания); +// Функция СообщенияПользователю(УдалятьПолученные = Ложь, ИдентификаторЗадания = Неопределено) Экспорт Если ЗначениеЗаполнено(ИдентификаторЗадания) Тогда @@ -484,7 +534,7 @@ Задание = НайтиЗаданиеПоИдентификатору(ИдентификаторЗадания); Если Задание = Неопределено Тогда Пояснение = НСтр("ru = 'Операция не выполнена из-за аварийного завершения фонового задания. - |Фоновое задание не найдено:'") + " " + Строка(ИдентификаторЗадания); + |Фоновое задание не найдено'") + ": " + Строка(ИдентификаторЗадания); ЗаписьЖурналаРегистрации(НСтр("ru = 'Длительные операции'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , Пояснение); Если ИсключениеПриОшибке Тогда diff --git a/SSL/src/CommonModules/ДлительныеОперацииГлобальный/Module.bsl b/SSL/src/CommonModules/ДлительныеОперацииГлобальный/Module.bsl index acc7d6c34..6ddccf152 100644 --- a/SSL/src/CommonModules/ДлительныеОперацииГлобальный/Module.bsl +++ b/SSL/src/CommonModules/ДлительныеОперацииГлобальный/Module.bsl @@ -100,7 +100,7 @@ Если Статус.Статус = "Выполнено" Тогда - ДлительныеОперацииКлиент.ПоказатьОповещение(ДлительнаяОперация); + ДлительныеОперацииКлиент.ПоказатьОповещение(ДлительнаяОперация.ОповещениеПользователя); ВыполнитьОповещение(ДлительнаяОперация, Статус); Возврат Истина; diff --git a/SSL/src/CommonModules/ДлительныеОперацииКлиент/Module.bsl b/SSL/src/CommonModules/ДлительныеОперацииКлиент/Module.bsl index 459861bb4..b15003057 100644 --- a/SSL/src/CommonModules/ДлительныеОперацииКлиент/Module.bsl +++ b/SSL/src/CommonModules/ДлительныеОперацииКлиент/Module.bsl @@ -44,7 +44,7 @@ КонецЕсли; Если ДлительнаяОперация.Статус = "Выполнено" И ПараметрыОжидания <> Неопределено Тогда - ПоказатьОповещение(ПараметрыОжидания); + ПоказатьОповещение(ПараметрыОжидания.ОповещениеПользователя); КонецЕсли; ВыполнитьОбработкуОповещения(ОповещениеОЗавершении, Результат); КонецЕсли; @@ -260,9 +260,9 @@ КонецПроцедуры -Процедура ПоказатьОповещение(ДлительнаяОперация) Экспорт +Процедура ПоказатьОповещение(ОповещениеПользователя) Экспорт - Оповещение = ДлительнаяОперация.ОповещениеПользователя; + Оповещение = ОповещениеПользователя; Если Не Оповещение.Показать Тогда Возврат; КонецЕсли; diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl index d9d2db61f..4af51621b 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl @@ -597,7 +597,7 @@ СсылкаРодителяИлиРаздела = Размещение; Иначе Если ЗначениеЗаполнено(Размещение) Тогда - СсылкаРодителяИлиРаздела = СтандартныеПодсистемыСервер.ИдентификаторОбъектаМетаданных(Размещение); + СсылкаРодителяИлиРаздела = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Размещение); Иначе СсылкаРодителяИлиРаздела = Неопределено; КонецЕсли; @@ -1023,6 +1023,13 @@ КонецПроцедуры +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииСписковСОграничениемДоступа(Списки) Экспорт + + Списки.Вставить(Метаданные.Справочники.ДополнительныеОтчетыИОбработки, Истина); + +КонецПроцедуры + // См. УправлениеДоступомПереопределяемый.ПриЗаполненииИспользованияВидаДоступа. Процедура ПриЗаполненииИспользованияВидаДоступа(ВидДоступа, Использование) Экспорт @@ -2166,9 +2173,7 @@ Или Раздел = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка() Тогда Возврат НСтр("ru = 'Начальная страница'"); Иначе - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Раздел ""%1""'"), - ПредставлениеОбъектаМетаданных(Раздел)); + Возврат ПредставлениеОбъектаМетаданных(Раздел); КонецЕсли; КонецФункции @@ -2743,11 +2748,12 @@ Процедура ВыгрузитьОтчетыИОбработкиВФайлы(ОтчетыИОбработки) ОтчетыИОбработки.Колонки.Добавить("ДвоичныеДанные"); - Кавычка = """"; Параметры = Новый Структура; Параметры.Вставить("РабочийКаталог", ОбщегоНазначения.СоздатьВременныйКаталог("ARADP")); - КлючЗапуска = " /DumpConfigToFiles " + Кавычка + Параметры.РабочийКаталог + Кавычка; - Выгрузка = ПакетныйЗапускКонфигуратора(Параметры, КлючЗапуска); + КомандаЗапуска = Новый Массив; + КомандаЗапуска.Добавить("/DumpConfigToFiles"); + КомандаЗапуска.Добавить(Параметры.РабочийКаталог); + Выгрузка = ПакетныйЗапускКонфигуратора(Параметры, КомандаЗапуска); Если Не Выгрузка.Успех Тогда ТекстОшибки = СокрЛП( НСтр("ru = 'Не удалось выгрузить отчеты и обработки конфигурации во внешние файлы:'") @@ -2816,8 +2822,11 @@ КонецЕсли; ПолноеИмяФайла = Параметры.РабочийКаталог + СтрокаТаблицы.ИмяФайла; - КлючЗапуска = " /LoadExternalDataProcessorOrReportFromFiles " + Кавычка + ПолноеИмяСхемыОбъекта + Кавычка + " " + Кавычка + ПолноеИмяФайла + Кавычка; - СозданиеОбработки = ПакетныйЗапускКонфигуратора(Параметры, КлючЗапуска); + КомандаЗапуска = Новый Массив; + КомандаЗапуска.Добавить("/LoadExternalDataProcessorOrReportFromFiles"); + КомандаЗапуска.Добавить(ПолноеИмяСхемыОбъекта); + КомандаЗапуска.Добавить(ПолноеИмяФайла); + СозданиеОбработки = ПакетныйЗапускКонфигуратора(Параметры, КомандаЗапуска); Если Не СозданиеОбработки.Успех Тогда ТекстОшибки = НСтр("ru = 'Не удалось создать ""%1"" из внешнего файла ""%2"":%3'"); ЗаписатьПредупреждение(Неопределено, ТекстОшибки, СтрокаТаблицы.ПолноеИмя, ПолноеИмяСхемыОбъекта, Символы.ПС + СокрЛП(СозданиеОбработки.Кратко + Символы.ПС + СозданиеОбработки.Подробно)); @@ -2834,9 +2843,8 @@ КонецПроцедуры -Функция ПакетныйЗапускКонфигуратора(Параметры, КлючЗапуска) +Функция ПакетныйЗапускКонфигуратора(Параметры, КомандаЗапуска) Результат = Новый Структура("Успех, Кратко, Подробно", Ложь, "", ""); - Кавычка = """"; ОбразецПараметров = Новый Структура("РабочийКаталог, Пользователь, Пароль, КаталогBIN, ПутьККонфигурации, КаталогКопии1CD"); ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(Параметры, ОбразецПараметров, Ложь); Если Не ЗначениеЗаполнено(Параметры.Пользователь) Тогда @@ -2856,31 +2864,36 @@ Параметры.КаталогКопии1CD = Параметры.РабочийКаталог + "BaseCopy" + ПолучитьРазделительПути(); СоздатьКаталог(Параметры.КаталогКопии1CD); КопироватьФайл(КаталогИнформационнойБазы + "\1Cv8.1CD", Параметры.КаталогКопии1CD + "1Cv8.1CD"); - Параметры.ПутьККонфигурации = "File=" + Кавычка + Параметры.КаталогКопии1CD + Кавычка + ";"; + Параметры.ПутьККонфигурации = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + "File=""%1"";", Параметры.КаталогКопии1CD); Иначе Результат.Кратко = НСтр("ru = 'Для выгрузки модулей необходимо закрыть конфигуратор.'"); Возврат Результат; КонецЕсли; КонецЕсли; - Параметры.ПутьККонфигурации = СтрЗаменить(Параметры.ПутьККонфигурации, Кавычка, Кавычка + Кавычка); КонецЕсли; ИмяФайлаСообщений = Параметры.РабочийКаталог + "Выгрузка.log"; - СтрокаКоманды = Кавычка + Параметры.КаталогBIN + "1cv8.exe" + Кавычка + " DESIGNER" - + " /IBConnectionString " + Кавычка + Параметры.ПутьККонфигурации + Кавычка - + ?(Параметры.Пользователь = "", - "", - " /N " + Кавычка + Параметры.Пользователь + Кавычка + " /P " + Кавычка + Параметры.Пароль + Кавычка) - + КлючЗапуска - + " /Out " + Кавычка + ИмяФайлаСообщений + Кавычка - + " /DisableStartupDialogs" // Без стартового диалога и диалогов аутентификации. - + " /DisableStartupMessages"; // Без стартовых предупреждений. + КомандаЗапуска = Новый Массив; + КомандаЗапуска.Добавить(Параметры.КаталогBIN + "1cv8.exe"); + КомандаЗапуска.Добавить("DESIGNER"); + КомандаЗапуска.Добавить("/IBConnectionString"); + КомандаЗапуска.Добавить(Параметры.ПутьККонфигурации); + КомандаЗапуска.Добавить("/N"); + КомандаЗапуска.Добавить(Параметры.Пользователь); + КомандаЗапуска.Добавить("/P"); + КомандаЗапуска.Добавить(Параметры.Пароль); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(КомандаЗапуска, КомандаЗапуска); + КомандаЗапуска.Добавить("/Out"); + КомандаЗапуска.Добавить(ИмяФайлаСообщений); + КомандаЗапуска.Добавить("/DisableStartupMessages"); + КомандаЗапуска.Добавить("/DisableStartupDialogs"); ПараметрыЗапускаКоманды = ОбщегоНазначенияКлиентСервер.ПараметрыЗапускаПрограммы(); ПараметрыЗапускаКоманды.ДождатьсяЗавершения = Истина; - РезультатЗапуска = ОбщегоНазначенияКлиентСервер.ЗапуститьПрограмму(СтрокаКоманды, ПараметрыЗапускаКоманды); + РезультатЗапуска = ОбщегоНазначенияКлиентСервер.ЗапуститьПрограмму(КомандаЗапуска, ПараметрыЗапускаКоманды); КодВозврата = РезультатЗапуска.КодВозврата; Если КодВозврата = 0 Тогда @@ -3413,9 +3426,9 @@ ТекстОшибки = НСтр("ru='Невозможно подключить дополнительную обработку из файла. |Возможно, она не подходит для этой версии программы.'"); КонецЕсли; - РезультатРегистрации.ТекстОшибки = ТекстОшибки; - РезультатРегистрации.КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС + НСтр("ru = 'Техническая информация:'") + Символы.ПС; + РезультатРегистрации.КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); + РезультатРегистрации.ТекстОшибки = ТекстОшибки + РезультатРегистрации.КраткоеПредставлениеОшибки; ЗаписатьОшибку(Объект.Ссылка, ТекстОшибки + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); Возврат; КонецЕсли; diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl index 1b380d698..ceb0a7b2f 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl @@ -473,7 +473,7 @@ // Строка - Представление подсистемы. // Функция НаименованиеПодсистемы(ДляПользователя) Экспорт - КодЯзыка = ?(ДляПользователя, ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка(), ""); + КодЯзыка = ?(ДляПользователя, "", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); Возврат НСтр("ru = 'Дополнительные отчеты и обработки'", КодЯзыка); КонецФункции diff --git a/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl b/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl index f62a099a4..c747d3cad 100644 --- a/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl +++ b/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl @@ -516,6 +516,25 @@ КонецПроцедуры +Функция ЖурналДляТехподдержки(ОтборЖурналаРегистрации, КоличествоСобытий) Экспорт + + Отбор = Новый Структура; + Для Каждого ЭлементОтбора Из ОтборЖурналаРегистрации Цикл + Отбор.Вставить(ЭлементОтбора.Ключ, ЭлементОтбора.Значение); + КонецЦикла; + СмещениеВремениСервера = СмещениеВремениСервера(); + ПреобразованиеОтбора(Отбор, СмещениеВремениСервера); + + // Выгрузка отбираемых событий и формирование структуры таблицы. + ВременныйФайл = ПолучитьИмяВременногоФайла("xml"); + ВыгрузитьЖурналРегистрации(ВременныйФайл, Отбор, , , КоличествоСобытий); + ДвоичныеДанные = Новый ДвоичныеДанные(ВременныйФайл); + УдалитьФайлы(ВременныйФайл); + + Возврат ПоместитьВоВременноеХранилище(ДвоичныеДанные); + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. diff --git a/SSL/src/CommonModules/ЗаметкиПользователяСлужебный/Module.bsl b/SSL/src/CommonModules/ЗаметкиПользователяСлужебный/Module.bsl index ef058ef8d..1fec4fc2c 100644 --- a/SSL/src/CommonModules/ЗаметкиПользователяСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ЗаметкиПользователяСлужебный/Module.bsl @@ -57,6 +57,13 @@ КонецПроцедуры +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииСписковСОграничениемДоступа(Списки) Экспорт + + Списки.Вставить(Метаданные.Справочники.Заметки, Истина); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/CommonModules/ЗащитаПерсональныхДанных/Module.bsl b/SSL/src/CommonModules/ЗащитаПерсональныхДанных/Module.bsl index 7e069df23..97a444854 100644 --- a/SSL/src/CommonModules/ЗащитаПерсональныхДанных/Module.bsl +++ b/SSL/src/CommonModules/ЗащитаПерсональныхДанных/Module.bsl @@ -733,8 +733,41 @@ #Область СлужебныйПрограммныйИнтерфейс -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +Процедура ЗаполнитьДанныеОбновленияОбластейПерсональныхДанных(ПараметрыОбновления) Экспорт + +КонецПроцедуры + +// Переносит сведения о защищаемых областях персональных данных. +// +Процедура ПеренестиЗащищаемыеОбластиПерсональныхДанных(ПараметрыОбновления) Экспорт + + Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; + КонецЕсли; + + ПараметрыОбновления.ОбработкаЗавершена = Ложь; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ОбластиПерсональныхДанных.ИмяОбласти КАК ИмяОбласти, + | ОбластиПерсональныхДанных.ИспользованиеСобытийЖурналаРегистрации КАК ИспользованиеСобытийЖурналаРегистрации + |ИЗ + | РегистрСведений.УдалитьОбластиПерсональныхДанных КАК ОбластиПерсональныхДанных"; + + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + ПараметрыОбновления.ОбработкаЗавершена = Истина; + Возврат; + КонецЕсли; + + НаборЗаписей = РегистрыСведений.ОбластиПерсональныхДанных.СоздатьНаборЗаписей(); + НаборЗаписей.Загрузить(РезультатЗапроса.Выгрузить()); + ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписей); + + ПараметрыОбновления.ОбработкаЗавершена = Истина; + +КонецПроцедуры // Определяет объекты, в которых есть процедура ДобавитьКомандыПечати(). // @@ -747,6 +780,33 @@ КонецПроцедуры +Функция ПриПодготовкеСпискаМакетовВФорматеОфисныхДокументовФормируемыхНаСервере(СписокМакетов) Экспорт + СписокМакетов.Добавить("Документ.СогласиеНаОбработкуПерсональныхДанных.ПФ_DOC_СогласиеНаОбработкуПерсональныхДанных_ru"); +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики событий подсистем конфигурации. + +// См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. +Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт + + Если Не ОбщегоНазначения.РазделениеВключено() Тогда + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "3.0.1.53"; + Обработчик.Процедура = "ЗащитаПерсональныхДанных.ПеренестиЗащищаемыеОбластиПерсональныхДанных"; + Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.ОчередьОтложеннойОбработки = 1; + Обработчик.ПроцедураЗаполненияДанныхОбновления = "ЗащитаПерсональныхДанных.ЗаполнитьДанныеОбновленияОбластейПерсональныхДанных"; + Обработчик.ЗапускатьИВПодчиненномУзлеРИБСФильтрами = Истина; + Обработчик.ЧитаемыеОбъекты = "РегистрСведений.УдалитьОбластиПерсональныхДанных"; + Обработчик.ИзменяемыеОбъекты = "РегистрСведений.ОбластиПерсональныхДанных"; + Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; + Обработчик.Идентификатор = Новый УникальныйИдентификатор("7211dd8a-028a-49d9-a23a-d2738bf0995f"); + Обработчик.Комментарий = НСтр("ru = 'Перенос сведений о защищаемых областях персональных данных.'"); + КонецЕсли; + +КонецПроцедуры + // См. ТекущиеДелаПереопределяемый.ПриОпределенииОбработчиковТекущихДел. Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт diff --git a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхКлиент/Module.bsl b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхКлиент/Module.bsl index 6d79d2d76..861647093 100644 --- a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхКлиент/Module.bsl @@ -67,36 +67,18 @@ Если Кнопка = Неопределено Тогда Возврат; КонецЕсли; - + ПоказыватьСоСкрытымиПДн = Не Кнопка.Пометка; Кнопка.Пометка = ПоказыватьСоСкрытымиПДн; Список.Параметры.УстановитьЗначениеПараметра("ПоказыватьСоСкрытымиПДн", ПоказыватьСоСкрытымиПДн); - + КонецПроцедуры #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс -// Клиентский обработчик печати -// -Функция ПечатьСогласияНаОбработкуПерсональныхДанных(ПараметрыПечати) Экспорт - - ИмяМенеджераПечати = ПараметрыПечати.МенеджерПечати; - ИмяМакета = ПараметрыПечати.Идентификатор; - СоставДокументов = ПараметрыПечати.ОбъектыПечати; - - МакетИДанныеОбъекта = УправлениеПечатьюВызовСервера.МакетыИДанныеОбъектовДляПечати(ИмяМенеджераПечати, ИмяМакета, СоставДокументов); - - Для Каждого Согласие Из СоставДокументов Цикл - НапечататьСогласиеНаОбработкуПерсональныхДанныхСубъекта(Согласие, МакетИДанныеОбъекта, ИмяМакета); - КонецЦикла; - - Возврат Неопределено; - -КонецФункции - // Настраивает элементы формы НастройкиПользователейИПрав обработки ПанельАдминистрированияБСП. // Запускает фоновое изменение настроек скрытия персональных данных. // @@ -137,68 +119,15 @@ Обработчик = Новый ОписаниеОповещения("ПослеИзмененияНастроекСкрытияПерсональныхДанных", ЭтотОбъект, ДополнительныеПараметры); ДлительныеОперацииКлиент.ОжидатьЗавершение(ФоновоеЗадание, Обработчик, НастройкиОжидания); - + КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции -Процедура НапечататьСогласиеНаОбработкуПерсональныхДанныхСубъекта(Согласие, МакетИДанныеОбъекта, ИмяМакета) - - ТипМакета = МакетИДанныеОбъекта.Макеты.ТипыМакетов[ИмяМакета]; - ДвоичныеДанныеМакетов = МакетИДанныеОбъекта.Макеты.ДвоичныеДанныеМакетов; - Области = МакетИДанныеОбъекта.Макеты.ОписаниеОбластей; - ДанныеОбъекта = МакетИДанныеОбъекта.Данные[Согласие][ИмяМакета]; - - Макет = УправлениеПечатьюКлиент.ИнициализироватьМакетОфисногоДокумента(ДвоичныеДанныеМакетов[ИмяМакета], ТипМакета, ИмяМакета); - Если Макет = Неопределено Тогда - Возврат; - КонецЕсли; - - ЗакрытьОкноПечатнойФормы = Ложь; - Попытка - ПечатнаяФорма = УправлениеПечатьюКлиент.ИнициализироватьПечатнуюФорму(ТипМакета, Макет.НастройкиСтраницыМакета); - Если ПечатнаяФорма = Неопределено Тогда - УправлениеПечатьюКлиент.ОчиститьСсылки(Макет); - Возврат; - КонецЕсли; - - // Вывод обычных областей с параметрами. - Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["Заголовок"]); - УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь); - - Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["НомерДата"]); - УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь); - - Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["Преамбула"]); - УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь); - - Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["ОсновнойТекст"]); - УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь); - - Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["РеквизитыОператора"]); - УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь); - - Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["РеквизитыСубъекта"]); - УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь); - - Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["Подпись"]); - УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь); - - УправлениеПечатьюКлиент.ПоказатьДокумент(ПечатнаяФорма); - Исключение - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - ЗакрытьОкноПечатнойФормы = Истина; - КонецПопытки; - - УправлениеПечатьюКлиент.ОчиститьСсылки(ПечатнаяФорма, ЗакрытьОкноПечатнойФормы); - УправлениеПечатьюКлиент.ОчиститьСсылки(Макет); - -КонецПроцедуры - Процедура ПослеИзмененияНастроекСкрытияПерсональныхДанных(ФоновоеЗадание, ДополнительныеПараметры) Экспорт - + Форма = ДополнительныеПараметры.Форма; ДоступностьЭлементов = ДополнительныеПараметры.ДоступностьЭлементов; @@ -241,7 +170,7 @@ КонецЕсли; КонецЕсли; - + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПереопределяемый/Module.bsl b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПереопределяемый/Module.bsl index 88abc4b18..b52d7e67c 100644 --- a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПереопределяемый/Module.bsl @@ -54,6 +54,19 @@ +КонецПроцедуры + +// Вызывается при заполнении формы "Согласие на обработку персональных данных". +// Предназначена для заполнения поля ФИО ответственного за обработку ПДн. +// +// Параметры: +// ФизическоеЛицо - ОпределяемыйТип.ФизическоеЛицо - ответственный за обработку персональных данных. +// ФИО - Строка - ФИО ответственного, которые нужно заполнить. +// +Процедура ЗаполнитьФИОФизическогоЛица(ФизическоеЛицо, ФИО) Экспорт + + + КонецПроцедуры // Позволяет проверить возможность скрытия персональных данных и задать состав исключений для записи в данных. diff --git a/SSL/src/CommonModules/ИнтеграцияПодсистемБСП/Module.bsl b/SSL/src/CommonModules/ИнтеграцияПодсистемБСП/Module.bsl index af8e815c7..b0f6cf039 100644 --- a/SSL/src/CommonModules/ИнтеграцияПодсистемБСП/Module.bsl +++ b/SSL/src/CommonModules/ИнтеграцияПодсистемБСП/Module.bsl @@ -12,6 +12,7 @@ Процедура ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики) Экспорт ОбновлениеИнформационнойБазыСлужебный.ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики); + ПользователиСлужебный.ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов"); @@ -33,11 +34,6 @@ МодульОбменДаннымиСервер.ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики); КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Пользователи") Тогда - МодульПользователиСлужебный = ОбщегоНазначения.ОбщийМодуль("ПользователиСлужебный"); - МодульПользователиСлужебный.ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики); - КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РегламентныеЗадания") Тогда МодульРегламентныеЗаданияСлужебный = ОбщегоНазначения.ОбщийМодуль("РегламентныеЗаданияСлужебный"); МодульРегламентныеЗаданияСлужебный.ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики); @@ -103,6 +99,8 @@ // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПереименованийОбъектовМетаданных. Процедура ПриДобавленииПереименованийОбъектовМетаданных(Итог) Экспорт + СтандартныеПодсистемыСервер.ПриДобавленииПереименованийОбъектовМетаданных(Итог); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АнализЖурналаРегистрации") Тогда МодульАнализЖурналаРегистрацииСлужебный = ОбщегоНазначения.ОбщийМодуль("АнализЖурналаРегистрацииСлужебный"); МодульАнализЖурналаРегистрацииСлужебный.ПриДобавленииПереименованийОбъектовМетаданных(Итог); @@ -212,7 +210,12 @@ МодульВнешниеКомпонентыСлужебный = ОбщегоНазначения.ОбщийМодуль("ВнешниеКомпонентыСлужебный"); МодульВнешниеКомпонентыСлужебный.ПриОтправкеДанныхГлавному(ЭлементДанных, ОтправкаЭлемента, Получатель); КонецЕсли; - + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ВнешниеКомпонентыВМоделиСервиса") Тогда + МодульВнешниеКомпонентыВМоделиСервисаСлужебный = ОбщегоНазначения.ОбщийМодуль("ВнешниеКомпонентыВМоделиСервисаСлужебный"); + МодульВнешниеКомпонентыВМоделиСервисаСлужебный.ПриОтправкеДанныхГлавному(ЭлементДанных, ОтправкаЭлемента, Получатель); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда МодульДатыЗапретаИзмененияСлужебный = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзмененияСлужебный"); МодульДатыЗапретаИзмененияСлужебный.ПриОтправкеДанныхГлавному(ЭлементДанных, ОтправкаЭлемента, Получатель); @@ -248,6 +251,11 @@ МодульВнешниеКомпонентыСлужебный.ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза, Получатель); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ВнешниеКомпонентыВМоделиСервиса") Тогда + МодульВнешниеКомпонентыВМоделиСервисаСлужебный = ОбщегоНазначения.ОбщийМодуль("ВнешниеКомпонентыВМоделиСервисаСлужебный"); + МодульВнешниеКомпонентыВМоделиСервисаСлужебный.ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза, Получатель); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда МодульДатыЗапретаИзмененияСлужебный = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзмененияСлужебный"); МодульДатыЗапретаИзмененияСлужебный.ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза, Получатель); @@ -283,6 +291,11 @@ МодульВнешниеКомпонентыСлужебный.ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ВнешниеКомпонентыВМоделиСервиса") Тогда + МодульВнешниеКомпонентыВМоделиСервисаСлужебный = ОбщегоНазначения.ОбщийМодуль("ВнешниеКомпонентыВМоделиСервисаСлужебный"); + МодульВнешниеКомпонентыВМоделиСервисаСлужебный.ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда МодульДатыЗапретаИзмененияСлужебный = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзмененияСлужебный"); МодульДатыЗапретаИзмененияСлужебный.ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель); @@ -332,6 +345,11 @@ МодульВнешниеКомпонентыСлужебный.ПриПолученииДанныхОтПодчиненного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ВнешниеКомпонентыВМоделиСервиса") Тогда + МодульВнешниеКомпонентыВМоделиСервисаСлужебный = ОбщегоНазначения.ОбщийМодуль("ВнешниеКомпонентыВМоделиСервисаСлужебный"); + МодульВнешниеКомпонентыВМоделиСервисаСлужебный.ПриПолученииДанныхОтПодчиненного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда МодульДатыЗапретаИзмененияСлужебный = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзмененияСлужебный"); МодульДатыЗапретаИзмененияСлужебный.ПриПолученииДанныхОтПодчиненного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель); @@ -695,6 +713,7 @@ Процедура ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты) Экспорт СтандартныеПодсистемыСервер.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); + ПользователиСлужебный.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Анкетирование") Тогда МодульАнкетирование = ОбщегоНазначения.ОбщийМодуль("Анкетирование"); @@ -731,6 +750,11 @@ МодульВнешниеКомпонентыСлужебный.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ВнешниеКомпонентыВМоделиСервиса") Тогда + МодульВнешниеКомпонентыВМоделиСервисаСлужебный = ОбщегоНазначения.ОбщийМодуль("ВнешниеКомпонентыВМоделиСервисаСлужебный"); + МодульВнешниеКомпонентыВМоделиСервисаСлужебный.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); МодульДополнительныеОтчетыИОбработки.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); @@ -751,11 +775,6 @@ МодульОбменДаннымиСервер.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Пользователи") Тогда - МодульПользователиСлужебный = ОбщегоНазначения.ОбщийМодуль("ПользователиСлужебный"); - МодульПользователиСлужебный.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); - КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда МодульРаботаСФайламиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебный"); МодульРаботаСФайламиСлужебный.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); @@ -825,6 +844,7 @@ Процедура ПриОпределенииСправочниковДляЗагрузкиДанных(ЗагружаемыеСправочники) Экспорт СтандартныеПодсистемыСервер.ПриОпределенииСправочниковДляЗагрузкиДанных(ЗагружаемыеСправочники); + ПользователиСлужебный.ПриОпределенииСправочниковДляЗагрузкиДанных(ЗагружаемыеСправочники); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда МодульУправлениеКонтактнойИнформациейСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформациейСлужебный"); @@ -836,10 +856,6 @@ МодульРаботаСКурсамиВалют.ПриОпределенииСправочниковДляЗагрузкиДанных(ЗагружаемыеСправочники); КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Пользователи") Тогда - МодульПользователиСлужебный = ОбщегоНазначения.ОбщийМодуль("ПользователиСлужебный"); - МодульПользователиСлужебный.ПриОпределенииСправочниковДляЗагрузкиДанных(ЗагружаемыеСправочники); - КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.БизнесПроцессыИЗадачи") Тогда МодульБизнесПроцессыИЗадачиСервер = ОбщегоНазначения.ОбщийМодуль("БизнесПроцессыИЗадачиСервер"); @@ -919,6 +935,21 @@ #КонецОбласти + +#Область КонтрольВеденияУчета + +// См. КонтрольВеденияУчетаПереопределяемый.ПриОпределенииПроверок. +Процедура ПриОпределенииПроверок(ГруппыПроверок, Проверки) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебный"); + МодульРаботаСФайламиСлужебный.ПриОпределенииПроверок(ГруппыПроверок, Проверки); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + #Область НапоминанияПользователя // См. НапоминанияПользователяПереопределяемый.ПриЗаполненииСпискаРеквизитовИсточникаСДатамиДляНапоминания. @@ -943,10 +974,7 @@ // См. ОбменДаннымиПереопределяемый.ПриНастройкеПодчиненногоУзлаРИБ. Процедура ПриНастройкеПодчиненногоУзлаРИБ() Экспорт - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Пользователи") Тогда - МодульПользователиСлужебный = ОбщегоНазначения.ОбщийМодуль("ПользователиСлужебный"); - МодульПользователиСлужебный.ПриНастройкеПодчиненногоУзлаРИБ(); - КонецЕсли; + ПользователиСлужебный.ПриНастройкеПодчиненногоУзлаРИБ(); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда МодульРаботаСПочтовымиСообщениямиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениямиСлужебный"); @@ -1037,6 +1065,11 @@ МодульСоединенияИБ.ПриДобавленииОбработчиковОбновления(Обработчики); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗащитаПерсональныхДанных") Тогда + МодульЗащитаПерсональныхДанных = ОбщегоНазначения.ОбщийМодуль("ЗащитаПерсональныхДанных"); + МодульЗащитаПерсональныхДанных.ПриДобавленииОбработчиковОбновления(Обработчики); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ИнформацияПриЗапуске") Тогда МодульИнформацияПриЗапуске = ОбщегоНазначения.ОбщийМодуль("ИнформацияПриЗапуске"); МодульИнформацияПриЗапуске.ПриДобавленииОбработчиковОбновления(Обработчики); @@ -1052,6 +1085,11 @@ МодульУправлениеКонтактнойИнформациейСлужебный.ПриДобавленииОбработчиковОбновления(Обработчики); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтрольВеденияУчета") Тогда + МодульКонтрольВеденияУчетаСлужебный = ОбщегоНазначения.ОбщийМодуль("КонтрольВеденияУчетаСлужебный"); + МодульКонтрольВеденияУчетаСлужебный.ПриДобавленииОбработчиковОбновления(Обработчики); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); МодульОбменДаннымиСервер.ПриДобавленииОбработчиковОбновления(Обработчики); @@ -1084,10 +1122,7 @@ МодульПолучениеФайловИзИнтернетаСлужебный.ПриДобавленииОбработчиковОбновления(Обработчики); КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Пользователи") Тогда - МодульПользователиСлужебный = ОбщегоНазначения.ОбщийМодуль("ПользователиСлужебный"); - МодульПользователиСлужебный.ПриДобавленииОбработчиковОбновления(Обработчики); - КонецЕсли; + ПользователиСлужебный.ПриДобавленииОбработчиковОбновления(Обработчики); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса") Тогда МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); @@ -1184,16 +1219,16 @@ МодульЦентрМониторингаСлужебный.ПриДобавленииОбработчиковОбновления(Обработчики); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ШаблоныСообщений") Тогда + МодульШаблоныСообщенийСлужебный = ОбщегоНазначения.ОбщийМодуль("ШаблоныСообщенийСлужебный"); + МодульШаблоныСообщенийСлужебный.ПриДобавленииОбработчиковОбновления(Обработчики); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда МодульЭлектроннаяПодписьСлужебный = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебный"); МодульЭлектроннаяПодписьСлужебный.ПриДобавленииОбработчиковОбновления(Обработчики); КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтрольВеденияУчета") Тогда - МодульКонтрольВеденияУчетаСлужебный = ОбщегоНазначения.ОбщийМодуль("КонтрольВеденияУчетаСлужебный"); - МодульКонтрольВеденияУчетаСлужебный.ПриДобавленииОбработчиковОбновления(Обработчики); - КонецЕсли; - КонецПроцедуры // См. ОбновлениеИнформационнойБазыБСП.ПослеОбновленияИнформационнойБазы. @@ -1228,6 +1263,19 @@ #КонецОбласти +#Область Печать + +Функция ПриПодготовкеСпискаМакетовВФорматеОфисныхДокументовФормируемыхНаСервере(СписокМакетов) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗащитаПерсональныхДанных") Тогда + МодульЗащитаПерсональныхДанных = ОбщегоНазначения.ОбщийМодуль("ЗащитаПерсональныхДанных"); + МодульЗащитаПерсональныхДанных.ПриПодготовкеСпискаМакетовВФорматеОфисныхДокументовФормируемыхНаСервере(СписокМакетов); + КонецЕсли; + +КонецФункции + +#КонецОбласти + #Область ПодключаемыеКоманды // См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииВидовПодключаемыхКоманд. @@ -1802,45 +1850,6 @@ #Область РаботаВМоделиСервиса_ОчередьЗаданий -// См. ОчередьЗаданийПереопределяемый.ПриОпределенииИспользованияРегламентныхЗаданий. -Процедура ПриОпределенииИспользованияРегламентныхЗаданий(ТаблицаИспользования) Экспорт - - ИнтеграцияСТехнологиейСервиса.ПриОпределенииИспользованияРегламентныхЗаданий(ТаблицаИспользования); - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса") Тогда - МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); - МодульРаботаВМоделиСервиса.ПриОпределенииИспользованияРегламентныхЗаданий(ТаблицаИспользования); - КонецЕсли; - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса") Тогда - МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса"); - МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса.ПриОпределенииИспользованияРегламентныхЗаданий(ТаблицаИспользования); - КонецЕсли; - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ФайловыеФункцииВМоделиСервиса") Тогда - МодульФайловыеФункцииСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ФайловыеФункцииСлужебныйВМоделиСервиса"); - МодульФайловыеФункцииСлужебныйВМоделиСервиса.ПриОпределенииИспользованияРегламентныхЗаданий(ТаблицаИспользования); - КонецЕсли; - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РегламентныеЗадания") Тогда - МодульРегламентныеЗаданияСлужебный = ОбщегоНазначения.ОбщийМодуль("РегламентныеЗаданияСлужебный"); - МодульРегламентныеЗаданияСлужебный.ПриОпределенииИспользованияРегламентныхЗаданий(ТаблицаИспользования); - КонецЕсли; - -КонецПроцедуры - -// См. ОчередьЗаданийПереопределяемый.ПриОпределенииОбработчиковОшибок. -Процедура ПриОпределенииОбработчиковОшибок(ОбработчикиОшибок) Экспорт - - ИнтеграцияСТехнологиейСервиса.ПриОпределенииОбработчиковОшибок(ОбработчикиОшибок); - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.РезервноеКопированиеОбластейДанных") Тогда - МодульРезервноеКопированиеОбластейДанных = ОбщегоНазначения.ОбщийМодуль("РезервноеКопированиеОбластейДанных"); - МодульРезервноеКопированиеОбластейДанных.ПриОпределенииОбработчиковОшибок(ОбработчикиОшибок); - КонецЕсли; - -КонецПроцедуры - // См. ОчередьЗаданийПереопределяемый.ПриПолученииСпискаШаблонов. Процедура ПриПолученииСпискаШаблонов(ШаблоныЗаданий) Экспорт @@ -1862,7 +1871,7 @@ МодульЗащитаПерсональныхДанных = ОбщегоНазначения.ОбщийМодуль("ЗащитаПерсональныхДанных"); МодульЗащитаПерсональныхДанных.ПриПолученииСпискаШаблонов(ШаблоныЗаданий); КонецЕсли; - + ОбновлениеИнформационнойБазыСлужебный.ПриПолученииСпискаШаблонов(ШаблоныЗаданий); ПользователиСлужебный.ПриПолученииСпискаШаблонов(ШаблоныЗаданий); @@ -1911,16 +1920,16 @@ МодульВерсионированиеОбъектов.ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам); КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.КалендарныеГрафикиВМоделиСервиса") Тогда - МодульКалендарныеГрафикиСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("КалендарныеГрафикиСлужебныйВМоделиСервиса"); - МодульКалендарныеГрафикиСлужебныйВМоделиСервиса.ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам); - КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ВалютыВМоделиСервиса") Тогда МодульКурсыВалютСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("КурсыВалютСлужебныйВМоделиСервиса"); МодульКурсыВалютСлужебныйВМоделиСервиса.ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.КалендарныеГрафикиВМоделиСервиса") Тогда + МодульКалендарныеГрафикиСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("КалендарныеГрафикиСлужебныйВМоделиСервиса"); + МодульКалендарныеГрафикиСлужебныйВМоделиСервиса.ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса") Тогда МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса"); МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса.ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам); @@ -1948,6 +1957,45 @@ КонецПроцедуры +// См. ОчередьЗаданийПереопределяемый.ПриОпределенииОбработчиковОшибок. +Процедура ПриОпределенииОбработчиковОшибок(ОбработчикиОшибок) Экспорт + + ИнтеграцияСТехнологиейСервиса.ПриОпределенииОбработчиковОшибок(ОбработчикиОшибок); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.РезервноеКопированиеОбластейДанных") Тогда + МодульРезервноеКопированиеОбластейДанных = ОбщегоНазначения.ОбщийМодуль("РезервноеКопированиеОбластейДанных"); + МодульРезервноеКопированиеОбластейДанных.ПриОпределенииОбработчиковОшибок(ОбработчикиОшибок); + КонецЕсли; + +КонецПроцедуры + +// См. ОчередьЗаданийПереопределяемый.ПриОпределенииИспользованияРегламентныхЗаданий. +Процедура ПриОпределенииИспользованияРегламентныхЗаданий(ТаблицаИспользования) Экспорт + + ИнтеграцияСТехнологиейСервиса.ПриОпределенииИспользованияРегламентныхЗаданий(ТаблицаИспользования); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса") Тогда + МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); + МодульРаботаВМоделиСервиса.ПриОпределенииИспользованияРегламентныхЗаданий(ТаблицаИспользования); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса") Тогда + МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса"); + МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса.ПриОпределенииИспользованияРегламентныхЗаданий(ТаблицаИспользования); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ФайловыеФункцииВМоделиСервиса") Тогда + МодульФайловыеФункцииСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ФайловыеФункцииСлужебныйВМоделиСервиса"); + МодульФайловыеФункцииСлужебныйВМоделиСервиса.ПриОпределенииИспользованияРегламентныхЗаданий(ТаблицаИспользования); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РегламентныеЗадания") Тогда + МодульРегламентныеЗаданияСлужебный = ОбщегоНазначения.ОбщийМодуль("РегламентныеЗаданияСлужебный"); + МодульРегламентныеЗаданияСлужебный.ПриОпределенииИспользованияРегламентныхЗаданий(ТаблицаИспользования); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область РаботаВМоделиСервиса_ПоставляемыеДанные @@ -2019,7 +2067,7 @@ МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов"); МодульВерсионированиеОбъектов.ПриОпределенииНастроекРегламентныхЗаданий(Настройки); КонецЕсли; - + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") Тогда МодульВзаимодействия = ОбщегоНазначения.ОбщийМодуль("Взаимодействия"); МодульВзаимодействия.ПриОпределенииНастроекРегламентныхЗаданий(Настройки); @@ -2029,7 +2077,7 @@ МодульЗащитаПерсональныхДанных = ОбщегоНазначения.ОбщийМодуль("ЗащитаПерсональныхДанных"); МодульЗащитаПерсональныхДанных.ПриОпределенииНастроекРегламентныхЗаданий(Настройки); КонецЕсли; - + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); МодульОбменДаннымиСервер.ПриОпределенииНастроекРегламентныхЗаданий(Настройки); @@ -2070,11 +2118,6 @@ МодульУдалениеПомеченныхОбъектовСлужебный.ПриОпределенииНастроекРегламентныхЗаданий(Настройки); КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВнешниеКомпоненты") Тогда - МодульВнешниеКомпонентыСлужебный = ОбщегоНазначения.ОбщийМодуль("ВнешниеКомпонентыСлужебный"); - МодульВнешниеКомпонентыСлужебный.ПриОпределенииНастроекРегламентныхЗаданий(Настройки); - КонецЕсли; - ИнтеграцияСТехнологиейСервиса.ПриОпределенииНастроекРегламентныхЗаданий(Настройки); КонецПроцедуры @@ -2227,6 +2270,76 @@ КонецПроцедуры +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииСписковСОграничениемДоступа(Списки) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.БизнесПроцессыИЗадачи") Тогда + МодульБизнесПроцессыИЗадачиСервер = ОбщегоНазначения.ОбщийМодуль("БизнесПроцессыИЗадачиСервер"); + МодульБизнесПроцессыИЗадачиСервер.ПриЗаполненииСписковСОграничениемДоступа(Списки); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); + МодульВариантыОтчетов.ПриЗаполненииСписковСОграничениемДоступа(Списки); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") Тогда + МодульВзаимодействия = ОбщегоНазначения.ОбщийМодуль("Взаимодействия"); + МодульВзаимодействия.ПриЗаполненииСписковСОграничениемДоступа(Списки); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда + МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); + МодульДополнительныеОтчетыИОбработки.ПриЗаполненииСписковСОграничениемДоступа(Списки); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗаметкиПользователя") Тогда + МодульЗаметкиПользователяСлужебный = ОбщегоНазначения.ОбщийМодуль("ЗаметкиПользователяСлужебный"); + МодульЗаметкиПользователяСлужебный.ПриЗаполненииСписковСОграничениемДоступа(Списки); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.НапоминанияПользователя") Тогда + МодульНапоминанияПользователяСлужебный = ОбщегоНазначения.ОбщийМодуль("НапоминанияПользователяСлужебный"); + МодульНапоминанияПользователяСлужебный.ПриЗаполненииСписковСОграничениемДоступа(Списки); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Пользователи") Тогда + МодульПользователиСлужебный = ОбщегоНазначения.ОбщийМодуль("ПользователиСлужебный"); + МодульПользователиСлужебный.ПриЗаполненииСписковСОграничениемДоступа(Списки); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда + МодульРаботаСПочтовымиСообщениямиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениямиСлужебный"); + МодульРаботаСПочтовымиСообщениямиСлужебный.ПриЗаполненииСписковСОграничениемДоступа(Списки); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебный"); + МодульРаботаСФайламиСлужебный.ПриЗаполненииСписковСОграничениемДоступа(Списки); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РассылкаОтчетов") Тогда + МодульРассылкаОтчетов = ОбщегоНазначения.ОбщийМодуль("РассылкаОтчетов"); + МодульРассылкаОтчетов.ПриЗаполненииСписковСОграничениемДоступа(Списки); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствамиСлужебный"); + МодульУправлениеСвойствамиСлужебный.ПриЗаполненииСписковСОграничениемДоступа(Списки); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); + МодульУправлениеДоступомСлужебный.ПриЗаполненииСписковСОграничениемДоступа(Списки); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ШаблоныСообщений") Тогда + МодульШаблоныСообщенийСлужебный = ОбщегоНазначения.ОбщийМодуль("ШаблоныСообщенийСлужебный"); + МодульШаблоныСообщенийСлужебный.ПриЗаполненииСписковСОграничениемДоступа(Списки); + КонецЕсли; + +КонецПроцедуры + // См. УправлениеДоступомПереопределяемый.ПриЗаполненииПоставляемыхПрофилейГруппДоступа. Процедура ПриЗаполненииПоставляемыхПрофилейГруппДоступа(ОписанияПрофилей, ПараметрыОбновления) Экспорт @@ -2290,10 +2403,7 @@ МодульДополнительныеОтчетыИОбработки.ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(Описание); КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Пользователи") Тогда - МодульПользователиСлужебный = ОбщегоНазначения.ОбщийМодуль("ПользователиСлужебный"); - МодульПользователиСлужебный.ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(Описание); - КонецЕсли; + ПользователиСлужебный.ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(Описание); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда МодульРаботаСПочтовымиСообщениямиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениямиСлужебный"); diff --git a/SSL/src/CommonModules/ИнтеграцияСТехнологиейСервиса/Module.bsl b/SSL/src/CommonModules/ИнтеграцияСТехнологиейСервиса/Module.bsl index 33e3bafe8..290c7cc94 100644 --- a/SSL/src/CommonModules/ИнтеграцияСТехнологиейСервиса/Module.bsl +++ b/SSL/src/CommonModules/ИнтеграцияСТехнологиейСервиса/Module.bsl @@ -78,11 +78,21 @@ МодульВнешниеКомпонентыСлужебный.ПриЗаполненииТиповИсключаемыхИзВыгрузкиЗагрузки(Типы); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ВнешниеКомпонентыВМоделиСервиса") Тогда + МодульВнешниеКомпонентыВМоделиСервисаСлужебный = ОбщегоНазначения.ОбщийМодуль("ВнешниеКомпонентыВМоделиСервисаСлужебный"); + МодульВнешниеКомпонентыВМоделиСервисаСлужебный.ПриЗаполненииТиповИсключаемыхИзВыгрузкиЗагрузки(Типы); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗавершениеРаботыПользователей") Тогда МодульСоединенияИБ = ОбщегоНазначения.ОбщийМодуль("СоединенияИБ"); МодульСоединенияИБ.ПриЗаполненииТиповИсключаемыхИзВыгрузкиЗагрузки(Типы); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтрольВеденияУчета") Тогда + МодульКонтрольВеденияУчетаСлужебный = ОбщегоНазначения.ОбщийМодуль("КонтрольВеденияУчетаСлужебный"); + МодульКонтрольВеденияУчетаСлужебный.ПриЗаполненииТиповИсключаемыхИзВыгрузкиЗагрузки(Типы); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.АдресныйКлассификаторВМоделиСервиса") Тогда МодульАдресныйКлассификаторВМоделиСервисаСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторВМоделиСервисаСлужебный"); МодульАдресныйКлассификаторВМоделиСервисаСлужебный.ПриЗаполненииТиповИсключаемыхИзВыгрузкиЗагрузки(Типы); @@ -128,10 +138,7 @@ // См. ВыгрузкаЗагрузкаДанныхПереопределяемый.ПослеЗагрузкиДанных. Процедура ПослеЗагрузкиДанных(Контейнер) Экспорт - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Пользователи") Тогда - МодульПользователиСлужебный = ОбщегоНазначения.ОбщийМодуль("ПользователиСлужебный"); - МодульПользователиСлужебный.ПослеЗагрузкиДанных(Контейнер); - КонецЕсли; + ПользователиСлужебный.ПослеЗагрузкиДанных(Контейнер); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РегламентныеЗадания") Тогда МодульРегламентныеЗаданияСлужебный = ОбщегоНазначения.ОбщийМодуль("РегламентныеЗаданияСлужебный"); @@ -163,8 +170,6 @@ МодульУправлениеДоступомСлужебныйВМоделиСервиса.ПослеЗагрузкиДанных(Контейнер); КонецЕсли; - ОбновлениеИнформационнойБазыСлужебный.ПослеЗагрузкиДанных(Контейнер); - КонецПроцедуры // См. ВыгрузкаЗагрузкаДанныхПереопределяемый.ПриРегистрацииОбработчиковВыгрузкиДанных. @@ -750,41 +755,12 @@ #Область РаботаВМоделиСервиса_ОчередьЗаданий -// См. ОчередьЗаданийПереопределяемый.ПриОпределенииИспользованияРегламентныхЗаданий. -Процедура ПриОпределенииИспользованияРегламентныхЗаданий(ТаблицаИспользования) Экспорт - - Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда - МодульТехнологияСервиса = ОбщегоНазначения.ОбщийМодуль("ТехнологияСервиса"); - Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(МодульТехнологияСервиса.ВерсияБиблиотеки(), "1.0.16.7") >= 0 Тогда - МодульТехнологияСервисаИнтеграцияСБСП = ОбщегоНазначения.ОбщийМодуль("ТехнологияСервисаИнтеграцияСБСП"); - МодульТехнологияСервисаИнтеграцияСБСП.ПриОпределенииИспользованияРегламентныхЗаданий(ТаблицаИспользования); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -// См. ОчередьЗаданийПереопределяемый.ПриОпределенииОбработчиковОшибок. -Процедура ПриОпределенииОбработчиковОшибок(ОбработчикиОшибок) Экспорт - - Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда - МодульТехнологияСервиса = ОбщегоНазначения.ОбщийМодуль("ТехнологияСервиса"); - Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(МодульТехнологияСервиса.ВерсияБиблиотеки(), "1.0.16.7") >= 0 Тогда - МодульТехнологияСервисаИнтеграцияСБСП = ОбщегоНазначения.ОбщийМодуль("ТехнологияСервисаИнтеграцияСБСП"); - МодульТехнологияСервисаИнтеграцияСБСП.ПриОпределенииОбработчиковОшибок(ОбработчикиОшибок); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - // См. ОчередьЗаданийПереопределяемый.ПриПолученииСпискаШаблонов. Процедура ПриПолученииСпискаШаблонов(ШаблоныЗаданий) Экспорт Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда - МодульТехнологияСервиса = ОбщегоНазначения.ОбщийМодуль("ТехнологияСервиса"); - Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(МодульТехнологияСервиса.ВерсияБиблиотеки(), "1.0.16.7") >= 0 Тогда - МодульТехнологияСервисаИнтеграцияСБСП = ОбщегоНазначения.ОбщийМодуль("ТехнологияСервисаИнтеграцияСБСП"); - МодульТехнологияСервисаИнтеграцияСБСП.ПриПолученииСпискаШаблонов(ШаблоныЗаданий); - КонецЕсли; + МодульТехнологияСервисаИнтеграцияСБСП = ОбщегоНазначения.ОбщийМодуль("ТехнологияСервисаИнтеграцияСБСП"); + МодульТехнологияСервисаИнтеграцияСБСП.ПриПолученииСпискаШаблонов(ШаблоныЗаданий); КонецЕсли; КонецПроцедуры @@ -799,6 +775,26 @@ КонецПроцедуры +// См. ОчередьЗаданийПереопределяемый.ПриОпределенииОбработчиковОшибок. +Процедура ПриОпределенииОбработчиковОшибок(ОбработчикиОшибок) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда + МодульТехнологияСервисаИнтеграцияСБСП = ОбщегоНазначения.ОбщийМодуль("ТехнологияСервисаИнтеграцияСБСП"); + МодульТехнологияСервисаИнтеграцияСБСП.ПриОпределенииОбработчиковОшибок(ОбработчикиОшибок); + КонецЕсли; + +КонецПроцедуры + +// См. ОчередьЗаданийПереопределяемый.ПриОпределенииИспользованияРегламентныхЗаданий. +Процедура ПриОпределенииИспользованияРегламентныхЗаданий(ТаблицаИспользования) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда + МодульТехнологияСервисаИнтеграцияСБСП = ОбщегоНазначения.ОбщийМодуль("ТехнологияСервисаИнтеграцияСБСП"); + МодульТехнологияСервисаИнтеграцияСБСП.ПриОпределенииИспользованияРегламентныхЗаданий(ТаблицаИспользования); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область РаботаВМоделиСервиса_ПоставляемыеДанные diff --git a/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl b/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl index d2c64169a..70c07f900 100644 --- a/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl +++ b/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl @@ -542,20 +542,24 @@ КонецЕсли; Описатель.Идентификатор = ИдентификаторКлассификатора(); + Описатель.Наименование = НСтр("ru = 'Производственные календари'"); Описатель.ОбновлятьАвтоматически = Истина; Описатель.ОбщиеДанные = Истина; + Описатель.ОбработкаРазделенныхДанных = Истина; + Описатель.СохранятьФайлВКэш = Истина; + Классификаторы.Добавить(Описатель); КонецПроцедуры // См. РаботаСКлассификаторамиПереопределяемый.ПриЗагрузкеКлассификатора. -Процедура ПриЗагрузкеКлассификатора(Идентификатор, Версия, Адрес, Обработан) Экспорт +Процедура ПриЗагрузкеКлассификатора(Идентификатор, Версия, Адрес, Обработан, ДополнительныеПараметры) Экспорт Если Идентификатор <> ИдентификаторКлассификатора() Тогда Возврат; КонецЕсли; - ЗагрузитьДанныеПроизводственныхКалендарей(Версия, Адрес, Обработан); + ЗагрузитьДанныеПроизводственныхКалендарей(Версия, Адрес, Обработан, ДополнительныеПараметры); КонецПроцедуры @@ -735,6 +739,20 @@ Возврат; КонецЕсли; + ЗаполнитьДанныеЗависимыеОтПроизводственныхКалендарей(ТаблицаИзменений); + +КонецПроцедуры + +// Предназначена для обновления в областях данных связанных с производственным календарем элементов, +// например, Графиков работы. +// +// Параметры: +// ТаблицаИзменений - таблица с колонками. +// - КодПроизводственногоКалендаря - код производственного календаря, данные которого изменились, +// - Год - год, за который нужно обновить данные. +// +Процедура ЗаполнитьДанныеЗависимыеОтПроизводственныхКалендарей(ТаблицаИзменений) Экспорт + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ГрафикиРаботы") Тогда МодульГрафикиРаботы = ОбщегоНазначения.ОбщийМодуль("ГрафикиРаботы"); МодульГрафикиРаботы.ОбновитьГрафикиРаботыПоДаннымПроизводственныхКалендарей(ТаблицаИзменений); @@ -744,6 +762,15 @@ КонецПроцедуры +// Определяет внутренний идентификатор классификатора для подсистемы РаботаСКлассификаторами. +// +// Возвращаемое значение: +// Строка - идентификатор классификатора. +// +Функция ИдентификаторКлассификатора() Экспорт + Возврат "Calendars"; +КонецФункции + // Определяет версию данных календарей, встроенных в конфигурацию. // // Возвращаемое значение: @@ -882,13 +909,13 @@ Обработчик.ОбщиеДанные = Истина; Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.4.6.4"; + Обработчик.Версия = "3.0.1.66"; Обработчик.Процедура = "КалендарныеГрафики.ОбновитьДанныеЗависимыхПроизводственныхКалендарей"; Обработчик.РежимВыполнения = "Оперативно"; Обработчик.ОбщиеДанные = Истина; Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.4.6.36"; + Обработчик.Версия = "3.0.1.102"; Обработчик.Процедура = "КалендарныеГрафики.ОбновитьИспользованиеНесколькихПроизводственныхКалендарей"; Обработчик.РежимВыполнения = "Оперативно"; Обработчик.ОбщиеДанные = Истина; @@ -975,12 +1002,7 @@ КонецФункции -// Определяет внутренний идентификатор классификатора для подсистемы РаботаСКлассификаторами. -Функция ИдентификаторКлассификатора() - Возврат "Calendars"; -КонецФункции - -Процедура ЗагрузитьДанныеПроизводственныхКалендарей(Версия, Адрес, Обработан) +Процедура ЗагрузитьДанныеПроизводственныхКалендарей(Версия, Адрес, Обработан, ДополнительныеПараметры) Если Версия <= ВерсияКалендарей() Тогда Обработан = Истина; @@ -997,7 +1019,13 @@ ДанныеXML = ДанныеКлассификатора["ДанныеПроизводственныхКалендарей"]; ТаблицаДанных = Справочники.ПроизводственныеКалендари.ДанныеПроизводственныхКалендарейИзXML(ДанныеXML, ТаблицаКалендарей); ТаблицаИзменений = Справочники.ПроизводственныеКалендари.ОбновитьДанныеПроизводственныхКалендарей(ТаблицаДанных); - РаспространитьИзмененияДанныхПроизводственныхКалендарей(ТаблицаИзменений); + + КалендарныеГрафикиПереопределяемый.ПриОбновленииПроизводственныхКалендарей(ТаблицаИзменений); + + // Таблицу изменений включаем в состав дополнительных параметров для обновления областей данных. + ПараметрыОбновления = Новый Структура("ТаблицаИзменений"); + ПараметрыОбновления.ТаблицаИзменений = ТаблицаИзменений; + ДополнительныеПараметры.Вставить(ИдентификаторКлассификатора(), ПараметрыОбновления); Обработан = Истина; @@ -1226,12 +1254,7 @@ ТаблицаИзменений = ПараметрыОбновления.ТаблицаИзменений; ТаблицаИзменений.Свернуть("КодПроизводственногоКалендаря, Год"); - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ГрафикиРаботы") Тогда - МодульГрафикиРаботы = ОбщегоНазначения.ОбщийМодуль("ГрафикиРаботы"); - МодульГрафикиРаботы.ОбновитьГрафикиРаботыПоДаннымПроизводственныхКалендарей(ТаблицаИзменений); - КонецЕсли; - - КалендарныеГрафикиПереопределяемый.ПриОбновленииДанныхЗависимыхОтПроизводственныхКалендарей(ТаблицаИзменений); + ЗаполнитьДанныеЗависимыеОтПроизводственныхКалендарей(ТаблицаИзменений); ПараметрыОбновления.ОбработкаЗавершена = Истина; diff --git a/SSL/src/CommonModules/КалендарныеГрафикиВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/КалендарныеГрафикиВМоделиСервиса/Module.bsl new file mode 100644 index 000000000..dbb5a3886 --- /dev/null +++ b/SSL/src/CommonModules/КалендарныеГрафикиВМоделиСервиса/Module.bsl @@ -0,0 +1,28 @@ +#Область ПрограммныйИнтерфейс + +#Область ДляВызоваИзДругихПодсистем + +// ИнтернетПоддержкаПользователей.РаботаВМоделиСервиса.РаботаСКлассификаторами + +// См. РаботаСКлассификаторамиВМоделиСервисаПереопределяемый.ПриОбработкеОбластиДанных. +Процедура ПриОбработкеОбластиДанных(Идентификатор, Версия, ДополнительныеПараметры) Экспорт + + Если Идентификатор <> КалендарныеГрафики.ИдентификаторКлассификатора() Тогда + Возврат; + КонецЕсли; + + Если Не ДополнительныеПараметры.Свойство(Идентификатор) Тогда + Возврат; + КонецЕсли; + + ПараметрыОбновления = ДополнительныеПараметры[Идентификатор]; + + КалендарныеГрафики.ЗаполнитьДанныеЗависимыеОтПроизводственныхКалендарей(ПараметрыОбновления.ТаблицаИзменений); + +КонецПроцедуры + +// Конец ИнтернетПоддержкаПользователей.РаботаВМоделиСервиса.РаботаСКлассификаторами + +#КонецОбласти + +#КонецОбласти diff --git a/SSL/src/CommonModules/КалендарныеГрафикиВМоделиСервиса/КалендарныеГрафикиВМоделиСервиса.mdo b/SSL/src/CommonModules/КалендарныеГрафикиВМоделиСервиса/КалендарныеГрафикиВМоделиСервиса.mdo new file mode 100644 index 000000000..55a8f0964 --- /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 236b0a7a1..b64e29d70 100644 --- a/SSL/src/CommonModules/КалендарныеГрафикиСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/КалендарныеГрафикиСлужебныйВМоделиСервиса/Module.bsl @@ -71,11 +71,7 @@ УстановитьПривилегированныйРежим(Ложь); НачатьТранзакцию(); Попытка - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ГрафикиРаботы") Тогда - МодульГрафикиРаботы = ОбщегоНазначения.ОбщийМодуль("ГрафикиРаботы"); - МодульГрафикиРаботы.ОбновитьГрафикиРаботыПоДаннымПроизводственныхКалендарей(УсловияОбновления); - КонецЕсли; - КалендарныеГрафикиПереопределяемый.ПриОбновленииДанныхЗависимыхОтПроизводственныхКалендарей(УсловияОбновления); + КалендарныеГрафики.ЗаполнитьДанныеЗависимыеОтПроизводственныхКалендарей(УсловияОбновления); ПоставляемыеДанные.ОбластьОбработана(ИдентификаторФайла, КодОбработчика, ОбластьДанных); ЗафиксироватьТранзакцию(); Исключение diff --git a/SSL/src/CommonModules/КонтрольВеденияУчета/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчета/Module.bsl index 08e7ef8bf..5ef85a730 100644 --- a/SSL/src/CommonModules/КонтрольВеденияУчета/Module.bsl +++ b/SSL/src/CommonModules/КонтрольВеденияУчета/Module.bsl @@ -44,24 +44,7 @@ КонецЕсли; Если ПараметрыВыполненияПроверки <> Неопределено Тогда - - Если ТипЗнч(ПараметрыВыполненияПроверки) = Тип("Структура") Тогда - ПараметрыВыполнения = Новый Массив; - ПараметрыВыполнения.Добавить(ПараметрыВыполненияПроверки); - ПараметрыВыполненияПроверки = ПараметрыВыполнения; - КонецЕсли; - - ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("КонтрольВеденияУчета.ВыполнитьПроверку", "ПараметрыВыполненияПроверки", - ПараметрыВыполненияПроверки, Тип("Массив")); - - Для Каждого ПараметрПроверки Из ПараметрыВыполненияПроверки Цикл - ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("КонтрольВеденияУчета.ВыполнитьПроверку", "ПараметрыВыполненияПроверки.Элемент", - ПараметрПроверки, Тип("Структура")); - Для Каждого ТекущийПараметр Из ПараметрПроверки Цикл - ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("КонтрольВеденияУчета.ВыполнитьПроверку", - ТекущийПараметр.Ключ, ТекущийПараметр.Значение, КонтрольВеденияУчетаСлужебный.ОжидаемыеТипыСвойствВидовПроверок()); - КонецЦикла; - КонецЦикла; + ПроверитьПараметрыВыполненияПроверки(ПараметрыВыполненияПроверки, "КонтрольВеденияУчета.ВыполнитьПроверку"); КонецЕсли; КонтрольВеденияУчетаСлужебный.ВыполнитьПроверку(ВыполняемаяПроверка, ПараметрыВыполненияПроверки); @@ -124,41 +107,7 @@ ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ВидПроверок", ВидПроверок, КонтрольВеденияУчетаСлужебный.ОписаниеТипаВидПроверки()); ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ПоискПоТочномуСоответствию", ПоискПоТочномуСоответствию, Тип("Булево")); - СводнаяИнформация = Новый Структура; - СводнаяИнформация.Вставить("Количество", 0); - СводнаяИнформация.Вставить("ЕстьОшибки", Ложь); - - МассивВидовПроверок = Новый Массив; - Если ТипЗнч(ВидПроверок) = Тип("СправочникСсылка.ВидыПроверок") Тогда - МассивВидовПроверок.Добавить(ВидПроверок); - Иначе - МассивВидовПроверок = КонтрольВеденияУчетаСлужебный.ПолучитьВидыПроверок(ВидПроверок, ПоискПоТочномуСоответствию); - Если МассивВидовПроверок.Количество() = 0 Тогда - Возврат СводнаяИнформация; - КонецЕсли; - КонецЕсли; - - Запрос = Новый Запрос( - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | КОЛИЧЕСТВО(*) КАК Количество, - | ЕСТЬNULL(МАКСИМУМ(ВЫБОР - | КОГДА РезультатыПроверкиУчета.ВажностьПроблемы = ЗНАЧЕНИЕ(Перечисление.ВажностьПроблемыУчета.Ошибка) - | ТОГДА ИСТИНА - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ), ЛОЖЬ) КАК ЕстьОшибки - |ИЗ - | РегистрСведений.РезультатыПроверкиУчета КАК РезультатыПроверкиУчета - |ГДЕ - | НЕ РезультатыПроверкиУчета.ИгнорироватьПроблему - | И РезультатыПроверкиУчета.ВидПроверки В (&МассивВидовПроверок)"); - - Запрос.УстановитьПараметр("МассивВидовПроверок", МассивВидовПроверок); - Результат = Запрос.Выполнить().Выбрать(); - Результат.Следующий(); - - ЗаполнитьЗначенияСвойств(СводнаяИнформация, Результат); - - Возврат СводнаяИнформация; + Возврат КонтрольВеденияУчетаСлужебный.СводнаяИнформацияПоВидамПроверок(ВидПроверок, ПоискПоТочномуСоответствию); КонецФункции @@ -206,53 +155,7 @@ ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ВидПроверок", ВидПроверок, КонтрольВеденияУчетаСлужебный.ОписаниеТипаВидПроверки()); ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ПоискПоТочномуСоответствию", ПоискПоТочномуСоответствию, Тип("Булево")); - ПодробнаяИнформация = Новый ТаблицаЗначений; - КолонкиПодробнойИнформации = ПодробнаяИнформация.Колонки; - КолонкиПодробнойИнформации.Добавить("ПроблемныйОбъект", ОбщегоНазначения.ОписаниеТипаВсеСсылки()); - КолонкиПодробнойИнформации.Добавить("ВажностьПроблемы", Новый ОписаниеТипов("ПеречислениеСсылка.ВажностьПроблемыУчета")); - КолонкиПодробнойИнформации.Добавить("ПравилоПроверки", Новый ОписаниеТипов("СправочникСсылка.ПравилаПроверкиУчета")); - КолонкиПодробнойИнформации.Добавить("ВидПроверки", Новый ОписаниеТипов("СправочникСсылка.ВидыПроверок")); - КолонкиПодробнойИнформации.Добавить("УточнениеПроблемы", Новый ОписаниеТипов("Строка")); - КолонкиПодробнойИнформации.Добавить("Ответственный", Новый ОписаниеТипов("СправочникСсылка.Пользователи")); - КолонкиПодробнойИнформации.Добавить("Выявлено", Новый ОписаниеТипов("Дата")); - КолонкиПодробнойИнформации.Добавить("ДополнительнаяИнформация", Новый ОписаниеТипов("ХранилищеЗначения")); - - МассивВидовПроверок = Новый Массив; - - Если ТипЗнч(ВидПроверок) = Тип("СправочникСсылка.ВидыПроверок") Тогда - МассивВидовПроверок.Добавить(ВидПроверок); - Иначе - МассивВидовПроверок = КонтрольВеденияУчетаСлужебный.ПолучитьВидыПроверок(ВидПроверок, ПоискПоТочномуСоответствию); - КонецЕсли; - - Если МассивВидовПроверок.Количество() = 0 Тогда - Возврат ПодробнаяИнформация; - КонецЕсли; - - Запрос = Новый Запрос( - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | РезультатыПроверкиУчета.ПроблемныйОбъект КАК ПроблемныйОбъект, - | РезультатыПроверкиУчета.ПравилоПроверки КАК ПравилоПроверки, - | РезультатыПроверкиУчета.ВажностьПроблемы КАК ВажностьПроблемы, - | РезультатыПроверкиУчета.ВидПроверки КАК ВидПроверки, - | РезультатыПроверкиУчета.УточнениеПроблемы КАК УточнениеПроблемы, - | РезультатыПроверкиУчета.Ответственный КАК Ответственный, - | РезультатыПроверкиУчета.Выявлено КАК Выявлено, - | РезультатыПроверкиУчета.ДополнительнаяИнформация КАК ДополнительнаяИнформация - |ИЗ - | РегистрСведений.РезультатыПроверкиУчета КАК РезультатыПроверкиУчета - |ГДЕ - | НЕ РезультатыПроверкиУчета.ИгнорироватьПроблему - | И РезультатыПроверкиУчета.ВидПроверки В(&МассивВидовПроверок)"); - - Запрос.УстановитьПараметр("МассивВидовПроверок", МассивВидовПроверок); - Результат = Запрос.Выполнить(); - - Если Не Результат.Пустой() Тогда - ПодробнаяИнформация = Результат.Выгрузить(); - КонецЕсли; - - Возврат ПодробнаяИнформация; + Возврат КонтрольВеденияУчетаСлужебный.ПодробнаяИнформацияПоВидамПроверок(ВидПроверок, ПоискПоТочномуСоответствию); КонецФункции @@ -275,17 +178,15 @@ // Возвращает количество проблем, выявленных у переданного объекта. // // Параметры: -// СсылкаНаОбъект - ЛюбаяСсылка - Ссылка на объект, для которого нужно вычислить количество проблем. +// ПроблемныйОбъект - ЛюбаяСсылка - объект, для которого нужно вычислить количество проблем. // // Возвращаемое значение: -// Число - Количество найденных проблем по переданной ссылке на объект. +// Число // -Функция КоличествоПроблемПоОбъекту(СсылкаНаОбъект) Экспорт +Функция КоличествоПроблемПоОбъекту(ПроблемныйОбъект) Экспорт - ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("КонтрольВеденияУчета.КоличествоПроблемПоОбъекту", "СсылкаНаОбъект", - СсылкаНаОбъект, ОбщегоНазначения.ОписаниеТипаВсеСсылки()); - - ТекущийПользовательПолноправный = Пользователи.ЭтоПолноправныйПользователь(); + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("КонтрольВеденияУчета.КоличествоПроблемПоОбъекту", "ПроблемныйОбъект", + ПроблемныйОбъект, ОбщегоНазначения.ОписаниеТипаВсеСсылки()); Запрос = Новый Запрос( "ВЫБРАТЬ РАЗРЕШЕННЫЕ @@ -295,37 +196,22 @@ |ГДЕ | РезультатыПроверкиУчета.ПроблемныйОбъект = &ПроблемныйОбъект | И НЕ РезультатыПроверкиУчета.ИгнорироватьПроблему"); - Запрос.УстановитьПараметр("ПроблемныйОбъект", СсылкаНаОбъект); - - Если Не ТекущийПользовательПолноправный Тогда - УстановитьПривилегированныйРежим(Истина); - КонецЕсли; + Запрос.УстановитьПараметр("ПроблемныйОбъект", ПроблемныйОбъект); + УстановитьПривилегированныйРежим(Истина); Результат = Запрос.Выполнить().Выбрать(); - Если Результат.Следующий() Тогда - КоличествоПроблем = Результат.Количество; - Иначе - КоличествоПроблем = 0; - КонецЕсли; - - Если Не ТекущийПользовательПолноправный Тогда - УстановитьПривилегированныйРежим(Ложь); - КонецЕсли; - - Запрос = Неопределено; - - Возврат КоличествоПроблем; + Возврат ?(Результат.Следующий(), Результат.Количество, 0); КонецФункции // Вычисляет количество проблем, выявленных переданным правилом проверки. // // Параметры: -// ПравилоПроверки - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на правило, для которого +// ПравилоПроверки - СправочникСсылка.ПравилаПроверкиУчета - правило, для которого // нужно вычислить количество проблем. // // Возвращаемое значение: -// Число - Количество найденных проблем по переданному правилу проверки. +// Число // Функция КоличествоПроблемПоПравилуПроверки(ПравилоПроверки) Экспорт @@ -388,38 +274,78 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для добавления проверок ведения учета. - -// Формирует описание проблемы в виде структуры. +// Очищает результаты предыдущих проверок, оставляя только те проблемы, которые были проигнорированы ранее +// (признак ИгнорироватьПроблему = Истина). +// Для непараметрических проверок предыдущие результаты очищаются автоматически, а затем выполняется алгоритм проверки. +// Для проверок с параметрами предварительную очистку предыдущих результатов следует выполнять явно с помощью +// этой процедуры в самом алгоритме проверки. В противном случае, одна и та же проблема будет регистрироваться +// многократно при нескольких последовательных запусках проверки. // // Параметры: -// ПроблемныйОбъект - ЛюбаяСсылка - Ссылка на объект "Источник" проблем. -// ПараметрыПроверки - Структура - Параметры проверки которую необходимо выполнить: -// * Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на выполненную проверку. -// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к которому относится -// выполненная проверка. -// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность проблемы учета -// "Информация", "Предупреждение", "Ошибка" и "ПолезныйСовет". +// Проверка - СправочникСсылка.ПравилаПроверкиУчета - проверка, +// результаты которой необходимо очистить. +// ПараметрыВыполненияПроверки - Структура - см. КонтрольВеденияУчета.ПараметрыВыполненияПроверки. +// - Массив - несколько параметров проверки (элементы массива типа Структура, +// как описано выше). +// +Процедура ОчиститьРезультатыПредыдущихПроверок(Знач Проверка, Знач ПараметрыВыполненияПроверки) Экспорт + + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("КонтрольВеденияУчета.ОчиститьРезультатыПредыдущихПроверок", "Проверка", + Проверка, Тип("СправочникСсылка.ПравилаПроверкиУчета")); + ПроверитьПараметрыВыполненияПроверки(ПараметрыВыполненияПроверки, "КонтрольВеденияУчета.ОчиститьРезультатыПредыдущихПроверок"); + + КонтрольВеденияУчетаСлужебный.ОчиститьРезультатыПредыдущихПроверок(Проверка, ПараметрыВыполненияПроверки); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для регистрации проблем ведения учета. + +// Формирует описание проблемы для последующей регистрации +// с помощью процедуры КонтрольВеденияУчета.ЗаписатьПроблему в процедуре-обработчике проверки. +// +// Параметры: +// ПроблемныйОбъект - ЛюбаяСсылка - объект, с которым связана выявленная проблема. +// ПараметрыПроверки - Структура - Параметры выполняемой проверки, значение которых следует взять из одноименного +// параметра процедуры-обработчика проверки. +// * Проверка - СправочникСсылка.ПравилаПроверкиУчета - выполненная проверку. +// * ВидПроверки - СправочникСсылка.ВидыПроверок - вид проверки, к которому относится выполненная проверка. +// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность, с которой следует +// зарегистрировать выявленную проблемы учета: +// Информация, Предупреждение, Ошибка, ПолезныйСовет или ВажнаяИнформация. +// * Идентификатор - Строка - Строковый идентификатор проверки. +// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых +// объектов (только для объектов с датой). Объекты, дата которых меньше +// указанной, не следует проверять. По умолчанию не заполнено (т.е. проверять все). +// * ЛимитПроблем - Число - Количество проверяемых объектов. +// По умолчанию 1000. Если указано 0, то следует проверить все объекты. +// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к +// которому относится выполненная проверка. // // Возвращаемое значение: // Структура - описание проблемы: -// * ПроблемныйОбъект - ЛюбаяСсылка - Ссылка на объект "Источник" проблем. -// * Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на выполненную проверку. -// Взято из переданной структуры ПараметрыПроверки. -// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к которому относится -// выполненная проверка. Взято из переданной структуры ПараметрыПроверки -// * ВажностьПроблемы - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к которому относится -// выполненная проверка. Взято из переданной структуры ПараметрыПроверки. -// * УточнениеПроблемы - Строка - Строка уточнения проблемы. По умолчанию не заполнена. -// * КлючУникальности - УникальныйИдентификатор - Ключ уникальности проблемы. -// * Выявлено - Дата - Серверное время обнаружения проблемы. -// * ДополнительнаяИнформация - ХранилищеЗначений - Служебное свойство с дополнительными -// сведениями, связанными с выявленной проблемой. -// По умолчанию Неопределено. -// * Ответственный - СправочникСсылка.Пользователи - Заполнен если есть возможность -// идентифицировать ответственного в проблемном объекте. -// По умолчанию Неопределено. +// * ПроблемныйОбъект - ЛюбаяСсылка - Ссылка на объект "Источник" проблем. +// * Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на выполненную проверку. +// Взято из переданной структуры ПараметрыПроверки. +// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к которому относится +// выполненная проверка. Взято из переданной структуры ПараметрыПроверки +// * ВажностьПроблемы - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к которому относится +// выполненная проверка. Взято из переданной структуры ПараметрыПроверки. +// * УточнениеПроблемы - Строка - Строка уточнения проблемы. По умолчанию не заполнена. +// * КлючУникальности - УникальныйИдентификатор - Ключ уникальности проблемы. +// * Выявлено - Дата - Момент обнаружения проблемы. +// * ДополнительнаяИнформация - ХранилищеЗначений, Неопределено - произвольные дополнительные сведения, связанные +// с выявленной проблемой. По умолчанию Неопределено. +// * Ответственный - СправочникСсылка.Пользователи, Неопределено - Заполнен, если за проблемный объект +// имеется конкретный ответственный. По умолчанию Неопределено. +// +// Пример: +// Проблема = КонтрольВеденияУчета.ОписаниеПроблемы(ПроблемныйДокумент, ПараметрыПроверки); +// Проблема.ВидПроверки = ВидПроверки; +// Проблема.УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( +// НСтр("ru = 'По контрагенту ""%1"" имеется непроведенный документ ""%2""'"), Результат.Контрагент, +// ПроблемныйДокумент); +// КонтрольВеденияУчета.ЗаписатьПроблему(Проблема, ПараметрыПроверки); // Функция ОписаниеПроблемы(ПроблемныйОбъект, ПараметрыПроверки) Экспорт @@ -436,28 +362,8 @@ // Записывает результат выполнения проверки. // // Параметры: -// Проблема - Структура - описание проблемы. -// * ПроблемныйОбъект - ЛюбаяСсылка - ссылка на объект "Источник" проблем. -// * ПравилоПроверки - СправочникСсылка.ПравилаПроверкиУчета - ссылка на выполненную проверку. -// * ВидПроверки - СправочникСсылка.ВидыПроверок - ссылка на вид проверки, к которому -// относится выполненная проверка. -// * КлючУникальности - УникальныйИдентификатор - ключ уникальности проблемы. -// * УточнениеПроблемы - Строка - строка-уточнение найденной проблемы. -// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - важность проблемы учета -// "Информация", "Предупреждение", "Ошибка" и "ПолезныйСовет". -// * Ответственный - СправочникСсылка.Пользователи - заполнен если есть возможность -// идентифицировать ответственного в проблемном объекте. -// * ИгнорироватьПроблему - Булево - флаг игнорирования проблемы. Если имеет значение "Истина", -// запись о проблеме игнорируется подсистемой. -// * ДополнительнаяИнформация - ХранилищеЗначений - служебное свойство с дополнительными -// сведениями, связанными с выявленной проблемой. -// * Выявлено - Дата - серверное время идентификации проблемы. -// -// ПараметрыПроверки - Структура - описание дополнительных параметров проверки. Необязательный параметр. -// * ЛимитПроблем - Число - количество проверяемых объектов. -// По умолчанию 1000. Если указано 0, то следует проверить все объекты. -// * ИтерацияПроверки - Число - очередная итерация проверки. Используется совместно с параметром -// ЛимитПроблем для определения предельного количества итераций. +// Проблема - Структура - см. КонтрольВеденияУчета.ОписаниеПроблемы. +// ПараметрыПроверки - Структура - см. параметр ПараметрыПроверки в КонтрольВеденияУчета.ОписаниеПроблемы. // Процедура ЗаписатьПроблему(Проблема, ПараметрыПроверки = Неопределено) Экспорт @@ -473,6 +379,32 @@ КонецПроцедуры +// Устанавливает или снимает признак игнорирования проблемы ведения учета. +// При установке параметра Игнорировать в Истина проблема перестает выводиться пользователям в формах объектов +// и отчете о результатах проверок. Например, это полезно, если пользователь решил, что +// обнаруженная проблема не существенна или ей не планируется заниматься. +// При сбросе в значение Ложь проблема вновь становится актуальной. +// +// Параметры: +// ОписаниеПроблемы - Структура - описание проблемы: +// * ПроблемныйОбъект - ЛюбаяСсылка - ссылка на объект, с которым связана проблема. +// * ПравилоПроверки - СправочникСсылка.ПравилаПроверкиУчета - выполненная проверка с описанием проблемы. +// * ВидПроверок - СправочникСсылка.ВидыПроверок - вид проверки. +// * УточнениеПроблемы - Строка - текстовое уточнение найденной проблемы. +// * ДополнительнаяИнформация - ХранилищеЗначения - дополнительная информация об игнорируемой проблеме. +// Игнорировать - Булево - устанавливаемое значение для указанной проблемы. +// +Процедура ИгнорироватьПроблему(Знач ОписаниеПроблемы, Знач Игнорировать) Экспорт + + ИмяПроцедуры = "КонтрольВеденияУчета.ИгнорироватьПроблему"; + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "Игнорировать", Игнорировать, Тип("Булево")); + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ОписаниеПроблемы", ОписаниеПроблемы, Тип("Структура"), + КонтрольВеденияУчетаСлужебный.ОжидаемыеТипыСвойствОписанияПроблемы(Ложь)); + + КонтрольВеденияУчетаСлужебный.ИгнорироватьПроблему(ОписаниеПроблемы, Игнорировать); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции для встраивания подсистемы в формы объектов конфигурации. @@ -494,7 +426,7 @@ ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ДополнительныеСвойства", ДополнительныеСвойства, Тип("Структура")); КонецЕсли; - Если Не КонтрольВеденияУчетаСлужебный.ПодсистемаДоступна() Тогда + Если Не ПодсистемаДоступна() Тогда Возврат; КонецЕсли; @@ -598,7 +530,7 @@ ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ДополнительныеСвойства", ДополнительныеСвойства, Тип("Структура")); КонецЕсли; - Если Не КонтрольВеденияУчетаСлужебный.ПодсистемаДоступна() Тогда + Если Не ПодсистемаДоступна() Тогда Возврат; КонецЕсли; @@ -663,7 +595,7 @@ ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ТекущийОбъект", ТекущийОбъект, КонтрольВеденияУчетаСлужебныйПовтИсп.ОписаниеТипаВсеОбъекты()); - Если Не КонтрольВеденияУчетаСлужебный.ПодсистемаДоступна() Тогда + Если Не ПодсистемаДоступна() Тогда Возврат; КонецЕсли; @@ -714,6 +646,17 @@ //////////////////////////////////////////////////////////////////////////////// // Прочие процедуры и функции. +// Возвращает Истина, если есть права на просмотр проблем ведения учета. +// +// Возвращаемое значение: +// Булево +// +Функция ПодсистемаДоступна() Экспорт + + Возврат КонтрольВеденияУчетаСлужебный.ПодсистемаДоступна(); + +КонецФункции + // Возвращает виды проверки по переданным параметрам. // // Параметры: @@ -726,9 +669,8 @@ // чтобы соответствующие свойства были равны свойствам структуры. По умолчанию Истина. // // Возвращаемое значение: -// Массив из СправочникСсылка.ВидыПроверок - Найденные элементы справочника, либо пустой массив -// в случае если поиск не дал результата. в случае поиска по точному соответствию массив -// содержит единственный элемент. +// Массив - элементы СправочникСсылка.ВидыПроверок, либо пустой массив, если поиск не дал результата. +// При поиска по точному соответствию массив содержит единственный элемент. // Функция ВидыПроверок(ВидПроверок, ПоискПоТочномуСоответствию = Истина) Экспорт @@ -736,7 +678,7 @@ ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ВидПроверок", ВидПроверок, КонтрольВеденияУчетаСлужебный.ОписаниеТипаВидПроверки()); ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ПоискПоТочномуСоответствию", ПоискПоТочномуСоответствию, Тип("Булево")); - Возврат КонтрольВеденияУчетаСлужебный.ПолучитьВидыПроверок(ВидПроверок, ПоискПоТочномуСоответствию); + Возврат КонтрольВеденияУчетаСлужебный.ВидыПроверок(ВидПроверок, ПоискПоТочномуСоответствию); КонецФункции @@ -744,7 +686,9 @@ // для регистрации или отбора результатов ведения учета. // // Параметры: -// ПараметрыВыполненияПроверки - Структура - см. КонтрольВеденияУчета.ПараметрыВыполненияПроверки. +// ПараметрыВыполненияПроверки - Строка, Структура - сведения, идентифицирующие вид проверки: +// - Строка - строковый идентификатор вида проверки (Свойство1). +// - Структура - см. КонтрольВеденияУчета.ПараметрыВыполненияПроверки. // ТолькоПоиск - Булево - если Истина и вид проверки с заданными параметрами не существует, // возвращается пустая ссылка; если Ложь, то создается элемент и возвращается ссылка на него. // @@ -753,14 +697,19 @@ // В случае если осуществлялся только поиск (параметр ТолькоПоиск = Истина) // и элемент не был найден, возвращается пустая ссылка на справочник СправочникСсылка.ВидыПроверок. // -Функция ВидПроверки(Знач ПараметрыВыполненияПроверки, ТолькоПоиск = Ложь) Экспорт +// Пример: +// ВидПроверки = КонтрольВеденияУчета.ВидПроверки("СистемныеПроверки"); +// +Функция ВидПроверки(Знач ПараметрыВыполненияПроверки, Знач ТолькоПоиск = Ложь) Экспорт + ДопустимыеТипы = Новый Массив; + ДопустимыеТипы.Добавить(Тип("Строка")); + ДопустимыеТипы.Добавить(Тип("Структура")); ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("КонтрольВеденияУчета.ВидПроверки", - "ПараметрыВыполненияПроверки", ПараметрыВыполненияПроверки, Тип("Структура")); - Для Каждого ТекущееПоле Из ПараметрыВыполненияПроверки Цикл - ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("КонтрольВеденияУчета.ВидПроверки", - "ПараметрыВыполненияПроверки." + ТекущееПоле.Ключ, ТекущееПоле.Значение, КонтрольВеденияУчетаСлужебный.ОжидаемыеТипыСвойствВидовПроверок()); - КонецЦикла; + "ПараметрыВыполненияПроверки", ПараметрыВыполненияПроверки, ДопустимыеТипы); + Если ТипЗнч(ПараметрыВыполненияПроверки) = Тип("Структура") Тогда + ПроверитьПараметрВыполненияПроверки(ПараметрыВыполненияПроверки, "КонтрольВеденияУчета.ВидПроверки"); + КонецЕсли; ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("КонтрольВеденияУчета.ВидПроверки", "ТолькоПоиск", ТолькоПоиск, Тип("Булево")); Возврат КонтрольВеденияУчетаСлужебный.ВидПроверки(ПараметрыВыполненияПроверки, ТолькоПоиск); @@ -815,7 +764,7 @@ Если ТипЗнч(ВидПроверок) = Тип("СправочникСсылка.ВидыПроверок") Тогда МассивВидовПроверок.Добавить(ВидПроверок); Иначе - МассивВидовПроверок = КонтрольВеденияУчетаСлужебный.ПолучитьВидыПроверок(ВидПроверок, ПоискПоТочномуСоответствию); + МассивВидовПроверок = КонтрольВеденияУчетаСлужебный.ВидыПроверок(ВидПроверок, ПоискПоТочномуСоответствию); КонецЕсли; Если МассивВидовПроверок.Количество() = 0 Тогда @@ -885,7 +834,7 @@ Если ТипЗнч(ВидПроверок) = Тип("СправочникСсылка.ВидыПроверок") Тогда МассивВидовПроверок.Добавить(ВидПроверок); Иначе - МассивВидовПроверок = КонтрольВеденияУчетаСлужебный.ПолучитьВидыПроверок(ВидПроверок, ПоискПоТочномуСоответствию); + МассивВидовПроверок = КонтрольВеденияУчетаСлужебный.ВидыПроверок(ВидПроверок, ПоискПоТочномуСоответствию); Если МассивВидовПроверок.Количество() = 0 Тогда Возврат СводнаяИнформация; КонецЕсли; @@ -918,3 +867,36 @@ #КонецОбласти #КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ПроверитьПараметрыВыполненияПроверки(ПараметрыВыполненияПроверки, ИмяПроцедурыИлиФункции) + + Если ТипЗнч(ПараметрыВыполненияПроверки) = Тип("Структура") Тогда + ПараметрыВыполнения = Новый Массив; + ПараметрыВыполнения.Добавить(ПараметрыВыполненияПроверки); + ПараметрыВыполненияПроверки = ПараметрыВыполнения; + КонецЕсли; + + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедурыИлиФункции, "ПараметрыВыполненияПроверки", + ПараметрыВыполненияПроверки, Тип("Массив")); + + Для Каждого ПараметрПроверки Из ПараметрыВыполненияПроверки Цикл + ПроверитьПараметрВыполненияПроверки(ПараметрПроверки, ИмяПроцедурыИлиФункции); + КонецЦикла; + +КонецПроцедуры + +Процедура ПроверитьПараметрВыполненияПроверки(ПараметрПроверки, ИмяПроцедурыИлиФункции) + + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедурыИлиФункции, "ПараметрыВыполненияПроверки.Элемент", + ПараметрПроверки, Тип("Структура")); + Для Каждого ТекущийПараметр Из ПараметрПроверки Цикл + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедурыИлиФункции, + ТекущийПараметр.Ключ, ТекущийПараметр.Значение, КонтрольВеденияУчетаСлужебный.ОжидаемыеТипыСвойствВидовПроверок()); + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаПереопределяемый/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчетаПереопределяемый/Module.bsl index 61a232de6..973c60084 100644 --- a/SSL/src/CommonModules/КонтрольВеденияУчетаПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаПереопределяемый/Module.bsl @@ -35,44 +35,53 @@ // "<Название программного продукта>.<Идентификатор проверки>". // Например: "СтандартныеПодсистемы.СистемныеПроверки". // * КонтекстПроверокВеденияУчета - ОпределяемыйТип.КонтекстПроверокВеденияУчета - значение, дополнительно -// уточняющее принадлежность группы проверок ведения учета к определенной категории. +// уточняющее принадлежность группы проверок ведения учета к определенной +// категории. // * Комментарий - Строка - комментарий к группе проверок. // // Проверки - ТаблицаЗначений - Таблица, в которую добавляются проверки: -// * ИдентификаторГруппы - Строка - Строковый идентификатор группы проверок, например: -// "СистемныеПроверки", "ЗакрытиеМесяца", "ПроверкиНДС" и т.п. +// * ИдентификаторГруппы - Строка - Строковый идентификатор группы проверок, например: +// "СистемныеПроверки", "ЗакрытиеМесяца", "ПроверкиНДС" и т.п. // Обязателен для заполнения. -// * Наименование - Строка - Наименование проверки, выводимое пользователю. -// * Причины - Строка - Описание возможных причин, которые приводят к возникновению -// проблемы. -// * Рекомендация - Строка - Рекомендация по решению возникшей проблемы. -// * Идентификатор - Строка - Строковый идентификатор элемента. Обязателен для заполнения. -// Формат идентификатора должен быть следующим: -// <Название программного продукта>.<Идентификатор проверки>. Например: -// СтандартныеПодсистемы.СистемныеПроверки. -// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых -// объектов (только для объектов с датой). Объекты, дата которых меньше -// указанной, не следует проверять. По умолчанию не заполнено (т.е. -// проверять все). -// * ЛимитПроблем - Число - Количество проверяемых объектов. По умолчанию 1000. -// Если указан 0, то следует проверять все объекты. -// * ОбработчикПроверки - Строка - Имя экспортной процедуры-обработчика серверного общего -// модуля в виде ИмяМодуля.ИмяПроцедуры. -// * ОбработчикПереходаКИсправлению - Строка - Имя экспортной процедуры-обработчика клиентского общего -// модуля для перехода к исправлению проблемы в виде ИмяМодуля.ИмяПроцедуры. -// * БезОбработчикаПроверки - Булево - признак служебной проверки, которая не имеет процедуры-обработчика. -// * ЗапрещеноИзменениеВажности - Булево - Если Истина, то администратор не сможет перенастраивать -// важность данной проверки. -// * КонтекстПроверокВеденияУчета - ОпределяемыйТип.КонтекстПроверокВеденияУчета - значение, дополнительно -// уточняющее принадлежность проверки ведения учета к определенной группе -// или категории. +// * Наименование - Строка - Наименование проверки, выводимое пользователю. +// * Причины - Строка - Описание возможных причин, которые приводят к возникновению проблемы. +// * Рекомендация - Строка - Рекомендация по решению возникшей проблемы. +// * Идентификатор - Строка - Строковый идентификатор элемента. Обязателен для заполнения. +// Формат идентификатора должен быть следующим: +// <Название программного продукта>.<Идентификатор проверки>. Например: +// СтандартныеПодсистемы.СистемныеПроверки. +// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых объектов +// (только для объектов с датой, например, документов). Объекты, дата +// которых меньше указанной, не следует проверять. По умолчанию +// не заполнено (т.е. проверять все). +// * ЛимитПроблем - Число - Количество проверяемых объектов. По умолчанию 1000. +// Если указан 0, то следует проверять все объекты. +// * ОбработчикПроверки - Строка - Имя экспортной процедуры-обработчика серверного общего модуля +// в виде ИмяМодуля.ИмяПроцедуры. +// * ОбработчикПереходаКИсправлению - Строка - Имя экспортной процедуры-обработчика клиентского общего модуля +// для перехода к исправлению проблемы в виде "ИмяМодуля.ИмяПроцедуры" +// или полное имя формы, которую следует открыть для исправления проблемы. +// Процедура-обработчик принимает на вход два параметра: +// ПараметрыИсправления - Структура - со свойствами: +// ИдентификаторПроверки - Строка - строковый идентификатор проверки; +// ВидПроверки - СправочникСсылка.ВидыПроверок - вид проверки, +// дополнительно уточняющий область исправления проблемы; +// ДополнительныеПараметры - Неопределено - параметр не используется. +// При открытии формы в нее передаются такие же параметры, как свойства +// указанной выше структуры ПараметрыИсправления. +// * БезОбработчикаПроверки - Булево - признак служебной проверки, которая не имеет процедуры-обработчика. +// * ЗапрещеноИзменениеВажности - Булево - Если Истина, то администратор не сможет перенастраивать +// важность данной проверки. +// * КонтекстПроверокВеденияУчета - ОпределяемыйТип.КонтекстПроверокВеденияУчета - значение, дополнительно +// уточняющее принадлежность проверки ведения учета к определенной группе +// или категории. // * УточнениеКонтекстаПроверокВеденияУчета - ОпределяемыйТип.УточнениеКонтекстаПроверокВеденияУчета - второе значение, // дополнительно уточняющее принадлежность проверки ведения учета // к определенной группе или категории. -// * ДополнительныеПараметры - ХранилищеЗначений - Дополнительная информация о проверке для программного -// использования. -// * Комментарий - Строка - комментарий к проверке. -// * Отключена - Булево - если Истина, то проверка не будет выполняться в фоне по расписанию. +// * ДополнительныеПараметры - ХранилищеЗначений - Произвольная дополнительная информация о проверке +// для программного использования. +// * Комментарий - Строка - текстовый комментарий к проверке. +// * Отключена - Булево - если Истина, то проверка не будет выполняться в фоне по расписанию. // // Пример: // 1) Добавление проверки diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебный/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебный/Module.bsl index 1c196a306..7e73601cb 100644 --- a/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебный/Module.bsl +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебный/Module.bsl @@ -4,17 +4,17 @@ // См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт - Если ЕстьИзмененияПараметровСистемныхПроверок() Тогда + Если ЕстьИзмененияПараметровПроверокУчета() Тогда Обработчик = Обработчики.Добавить(); Обработчик.Версия = "*"; Обработчик.РежимВыполнения = "Отложенно"; Обработчик.Комментарий = НСтр("ru = 'Обновляются правила проверки учета в соответствие с изменениями в новой версии программы. - |До завершения обработки часть проверок ведения учета будет недоступна.'"); + |До завершения обработки часть проверок ведения учета будет недоступна.'"); Обработчик.Процедура = "КонтрольВеденияУчетаСлужебный.ОбновитьВспомогательныеДанныеПоИзменениямКонфигурации"; КонецЕсли; Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.4.5.2"; + Обработчик.Версия = "3.0.1.25"; Обработчик.Идентификатор = Новый УникальныйИдентификатор("4a240e04-87df-4c10-9f7f-97969c61e84f"); Обработчик.Процедура = "РегистрыСведений.РезультатыПроверкиУчета.ОбработатьДанныеДляПереходаНаНовуюВерсию"; Обработчик.РежимВыполнения = "Отложенно"; @@ -25,11 +25,11 @@ Обработчик.БлокируемыеОбъекты = "РегистрСведений.РезультатыПроверкиУчета"; Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика(); Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; - Обработчик.Комментарий = НСтр("ru = 'Заполнение измерения ИгнорироватьПроблему регистра сведений РезультатыПроверкиУчета - |по значению одноименного ресурса предыдущей версии.'"); + Обработчик.Комментарий = + НСтр("ru = 'Начальное заполнение признака ИгнорироватьПроблему и расчет контрольных сумм в регистре сведений ""Результаты проверки учета"" для повышение производительности.'"); Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.4.6.113"; + Обработчик.Версия = "3.0.1.195"; Обработчик.Идентификатор = Новый УникальныйИдентификатор("fcd45d27-8e5d-45dd-9648-deff60825ae1"); Обработчик.Процедура = "Справочники.ПравилаПроверкиУчета.ОбработатьДанныеДляПереходаНаНовуюВерсию"; Обработчик.РежимВыполнения = "Отложенно"; @@ -50,8 +50,8 @@ Возврат; КонецЕсли; - ВидПроверки = ВидПроверки(ПараметрыВыполненияПроверки("СистемныеПроверки")); - Проблемы = КонтрольВеденияУчета.СводнаяИнформацияПоВидамПроверок(ВидПроверки); + ВидПроверки = ВидПроверки("СистемныеПроверки"); + Проблемы = СводнаяИнформацияПоВидамПроверок(ВидПроверки); МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта("Отчет.РезультатыПроверкиУчета"); @@ -64,89 +64,39 @@ Дело.Владелец = Раздел; Дело.Представление = НСтр("ru = 'Некорректные данные'"); Дело.Количество = Проблемы.Количество; - Дело.ПараметрыФормы = Проблемы; + Дело.ПараметрыФормы = Новый Структура("ВидПроверки", ВидПроверки); Дело.Форма = "Отчет.РезультатыПроверкиУчета.Форма"; КонецЦикла; КонецПроцедуры -#Область СинхронизацияСправочникаВидовПроверок - -// см. КонтрольВеденияУчета.ПолучитьВидыПроверок. -Функция ПолучитьВидыПроверок(ВидПроверок, ПоискПоТочномуСоответствию = Истина) Экспорт +// См. ВыгрузкаЗагрузкаДанныхПереопределяемый.ПриЗаполненииТиповИсключаемыхИзВыгрузкиЗагрузки. +Процедура ПриЗаполненииТиповИсключаемыхИзВыгрузкиЗагрузки(Типы) Экспорт - ВидПроверкиМассив = Новый Массив; - ПараметрыСинхронизации = Новый Структура; - - Если ТипЗнч(ВидПроверок) = Тип("СправочникСсылка.ВидыПроверок") Тогда - - ВидПроверкиМассив.Добавить(ВидПроверок); - - ИначеЕсли ТипЗнч(ВидПроверок) = Тип("Строка") Тогда - - ПараметрыСинхронизации.Вставить("Наименование", ""); - ПараметрыСинхронизации.Вставить("Свойство1", ВидПроверок); - ВидПроверкиМассив = ОбычныйПоискВидаПроверки(ПараметрыСинхронизации, ПоискПоТочномуСоответствию); - - ИначеЕсли ТипЗнч(ВидПроверок) = Тип("Массив") Тогда - - ПараметрыСинхронизации = Новый Структура; - КоличествоЭлементов = ВидПроверок.Количество(); - Для Индекс = 0 По КоличествоЭлементов - 1 Цикл - ПараметрыСинхронизации.Вставить("Свойство" + Формат(Индекс + 1, "ЧГ=0"), ВидПроверок.Получить(Индекс)); - КонецЦикла; - - Если ПараметрыСинхронизации.Количество() > КоличествоСвойств() Тогда - ВидПроверкиМассив = РасширенныйПоискВидаПроверки(ПараметрыСинхронизации, ВидПроверок.Количество()); - Иначе - ПараметрыСинхронизации.Вставить("Наименование", ""); - ВидПроверкиМассив = ОбычныйПоискВидаПроверки(ПараметрыСинхронизации, ПоискПоТочномуСоответствию); - КонецЕсли; - - КонецЕсли; - - Возврат ВидПроверкиМассив; - -КонецФункции - -#КонецОбласти - -#Область СинхронизацияСправочникаПроверок - -// Обновляет вспомогательные данные, которые зависят от конфигурации частично. -// -// Обновляется при наличии изменений конфигурации, записанных в параметры -// ограничения доступа при обновлении базы данных на текущую версию конфигурации. -// -Процедура ОбновитьВспомогательныеДанныеПоИзменениямКонфигурации(Параметры = Неопределено) Экспорт - - Блокировка = Новый БлокировкаДанных; - Блокировка.Добавить("Справочник.ПравилаПроверкиУчета"); - - НачатьТранзакцию(); - Попытка - Блокировка.Заблокировать(); - ОбновитьВспомогательныеДанныеСправочникаПоИзменениямКонфигурации(); - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; + // Результаты проверки ведения учета будут заново сформированы при следующей проверке, + // поэтому их не требуется выгружать и загружать. + Типы.Добавить(Метаданные.РегистрыСведений.РезультатыПроверкиУчета); КонецПроцедуры -// Процедура Обновляет состав системных проверок ведения учета -// при изменении конфигурации. +// См. КонтрольВеденияУчетаПереопределяемый.ПриПолученииСпискаШаблонов. +Процедура ПриПолученииСпискаШаблонов(ШаблоныЗаданий) Экспорт + + ШаблоныЗаданий.Добавить("ПроверкаВеденияУчета"); + +КонецПроцедуры + +// Обновляет состав системных проверок ведения учета при изменении конфигурации. // // Параметры: -// ЕстьИзменения - Булево (возвращаемое значение) - если производилась запись, -// устанавливается Истина, иначе не изменяется. +// ЕстьИзменения - Булево - Возвращаемое значение. Если производилась запись, устанавливается Истина, +// иначе не изменяется. // -Процедура ОбновитьПараметрыСистемныхПроверок(ЕстьИзменения = Неопределено) Экспорт +Процедура ОбновитьПараметрыПроверокУчета(ЕстьИзменения = Неопределено) Экспорт УстановитьПривилегированныйРежим(Истина); - ХэшированиеСистемныхПроверок = ХэшированиеСистемныхПроверок(); + ХэшированиеСистемныхПроверок = ХэшПроверок(); НачатьТранзакцию(); Попытка @@ -172,758 +122,204 @@ КонецПроцедуры -Функция ЕстьИзмененияПараметровСистемныхПроверок() Экспорт +Функция ЕстьПроблемыСистемныхПроверок() Экспорт - УстановитьПривилегированныйРежим(Истина); - - ПоследниеИзменения = СтандартныеПодсистемыСервер.ИзмененияПараметраРаботыПрограммы("СтандартныеПодсистемы.КонтрольВеденияУчета.СистемныеПроверки"); - Возврат ПоследниеИзменения = Неопределено Или ПоследниеИзменения.Количество() > 0; + СводнаяИнформацияПоВидамПроверок = СводнаяИнформацияПоВидамПроверок("СистемныеПроверки"); + Возврат СводнаяИнформацияПоВидамПроверок.Количество > 0; КонецФункции #КонецОбласти -#Область ОписанияАлгоритмовПоставляемыхПроверок - -// Исполняет проверку ссылочной целостности. -// -Процедура ПроверитьСсылочнуюЦелостность(Проверка, ПараметрыПроверки) Экспорт - - Если ОбщегоНазначения.РазделениеВключено() Тогда - Возврат; - КонецЕсли; - - КэшБитыхСсылок = Новый Соответствие; - ПараметрыПроверки.Вставить("КэшСсылок", Новый Соответствие); - - Для Каждого ВидМетаданных Из СсылочныеВидыОбъектовМетаданных() Цикл - Для Каждого ОбъектМетаданных Из ВидМетаданных Цикл - НайтиБитыеСсылки(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок); - КонецЦикла; - КонецЦикла; - - Для Каждого ВидМетаданных Из РегистрыКакОбъектыМетаданных() Цикл - Для Каждого ОбъектМетаданных Из ВидМетаданных Цикл - НайтиБитыеСсылкиВРегистрах(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок); - КонецЦикла; - КонецЦикла; - ПараметрыПроверки.Удалить("КэшСсылок"); - -КонецПроцедуры - -// Исполняет проверку заполненности обязательных реквизитов. -// -Процедура ПроверитьНезаполненныеОбязательныеРеквизиты(Проверка, ПараметрыПроверки) Экспорт - - Для Каждого ВидМетаданных Из СсылочныеВидыОбъектовМетаданных() Цикл - - Для Каждого ОбъектМетаданных Из ВидМетаданных Цикл - Если ЭтоНеразделенныйОбъектМетаданных(ОбъектМетаданных.ПолноеИмя()) Тогда - Продолжить; - КонецЕсли; - Если Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(ОбъектМетаданных) Тогда - Продолжить; - КонецЕсли; - НайтиНезаполненныеОбязательныеРеквизиты(ОбъектМетаданных, ПараметрыПроверки); - КонецЦикла; - - КонецЦикла; - - Для Каждого ВидМетаданных Из РегистрыКакОбъектыМетаданных() Цикл - Для Каждого ОбъектМетаданных Из ВидМетаданных Цикл - Если ЭтоНеразделенныйОбъектМетаданных(ОбъектМетаданных.ПолноеИмя()) Тогда - Продолжить; - КонецЕсли; - Если Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(ОбъектМетаданных) Тогда - Продолжить; - КонецЕсли; - НайтиНезаполненныеОбязательныеРеквизитыВРегистрах(ОбъектМетаданных, ПараметрыПроверки); - КонецЦикла; - КонецЦикла; - -КонецПроцедуры - -// Исполняет проверку наличия циклических ссылок. -// -Процедура ПроверитьЦиклическиеСсылки(Проверка, ПараметрыПроверки) Экспорт - - Для Каждого ВидМетаданных Из СсылочныеВидыОбъектовМетаданных() Цикл - Для Каждого ОбъектМетаданных Из ВидМетаданных Цикл - Если ЭтоНеразделенныйОбъектМетаданных(ОбъектМетаданных.ПолноеИмя()) Тогда - Продолжить; - КонецЕсли; - Если Не ЕстьИерархия(ОбъектМетаданных.СтандартныеРеквизиты) Тогда - Продолжить; - КонецЕсли; - НайтиЦиклическиеСсылки(ОбъектМетаданных, ПараметрыПроверки); - КонецЦикла; - КонецЦикла; - -КонецПроцедуры - -// Исполняет проверку наличия отсутствующих предопределенных элементов. -// -Процедура ПроверитьОтсутствующиеПредопределенныеЭлементы(Проверка, ПараметрыПроверки) Экспорт - - Если ОбщегоНазначения.РазделениеВключено() Тогда - Возврат; - КонецЕсли; - - // Сброс кэша перед вызовом функции ОбщегоНазначенияКлиентСервер.ПредопределенныйЭлемент. - ОбновитьПовторноИспользуемыеЗначения(); - - ВидыОбъектовМетаданных = Новый Массив; - ВидыОбъектовМетаданных.Добавить(Метаданные.Справочники); - ВидыОбъектовМетаданных.Добавить(Метаданные.ПланыВидовХарактеристик); - ВидыОбъектовМетаданных.Добавить(Метаданные.ПланыСчетов); - ВидыОбъектовМетаданных.Добавить(Метаданные.ПланыВидовРасчета); - - Для Каждого ВидМетаданных Из ВидыОбъектовМетаданных Цикл - Для Каждого ОбъектМетаданных Из ВидМетаданных Цикл - Если ОбъектМетаданных.ОбновлениеПредопределенныхДанных = Метаданные.СвойстваОбъектов.ОбновлениеПредопределенныхДанных.НеОбновлятьАвтоматически Тогда - Продолжить; - КонецЕсли; - НайтиОтсутствующиеПредопределенныеЭлементы(ОбъектМетаданных, ПараметрыПроверки); - КонецЦикла; - КонецЦикла; - -КонецПроцедуры - -// Исполняет проверку наличия дублирующихся предопределенных элементов. -// -Процедура ПроверитьДублированиеПредопределенныхЭлементов(Проверка, ПараметрыПроверки) Экспорт - - Если ОбщегоНазначения.РазделениеВключено() Тогда - Возврат; - КонецЕсли; - - ВидыОбъектовМетаданных = Новый Массив; - ВидыОбъектовМетаданных.Добавить(Метаданные.Справочники); - ВидыОбъектовМетаданных.Добавить(Метаданные.ПланыВидовХарактеристик); - ВидыОбъектовМетаданных.Добавить(Метаданные.ПланыСчетов); - ВидыОбъектовМетаданных.Добавить(Метаданные.ПланыВидовРасчета); - - Для Каждого ВидМетаданных Из ВидыОбъектовМетаданных Цикл - - Если ВидМетаданных.Количество() = 0 Тогда - Продолжить; - КонецЕсли; - - НайтиДублиПредопределенныхЭлементов(ВидМетаданных, ПараметрыПроверки); - - КонецЦикла; - -КонецПроцедуры - -// Исполняет проверку отсутствующих предопределенных узлов плана обмена. -// -Процедура ПроверитьНаличиеПредопределенныхУзловПлановОбмена(Проверка, ПараметрыПроверки) Экспорт - - Если ОбщегоНазначения.РазделениеВключено() Тогда - Возврат; - КонецЕсли; - - МетаданныеПланыОбмена = Метаданные.ПланыОбмена; - Для Каждого МетаданныеПланОбмена Из МетаданныеПланыОбмена Цикл - - Если ПланыОбмена[МетаданныеПланОбмена.Имя].ЭтотУзел() <> Неопределено Тогда - Продолжить; - КонецЕсли; - - Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(МетаданныеПланОбмена.ПолноеИмя()), ПараметрыПроверки); - Проблема.УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В плане обмена ""%1"" отсутствует предопределенный узел (ЭтотУзел() = Неопределено).'"), МетаданныеПланОбмена.Имя); - ЗаписатьПроблему(Проблема, ПараметрыПроверки); - - КонецЦикла; - -КонецПроцедуры - -#КонецОбласти - -#Область ОписаниеАлгоритмовИсправленияПроблем - -Процедура ИсправитьПроблемуЦиклическихСсылокВФоновомЗадании(Знач ПараметрыПроверки, АдресХранилища = Неопределено) Экспорт - - Проверка = ПроверкаПоИдентификатору(ПараметрыПроверки.ИдентификаторПроверки); - Если Не ЗначениеЗаполнено(Проверка) Тогда - Возврат; - КонецЕсли; - - ИсправитьПроблемуЦиклическихСсылок(Проверка); - -КонецПроцедуры - -#КонецОбласти - -#Область НастройкаРегламентныхЗаданий - -// См. КонтрольВеденияУчетаПереопределяемый.ПриПолученииСпискаШаблонов. -Процедура ПриПолученииСпискаШаблонов(ШаблоныЗаданий) Экспорт - - ШаблоныЗаданий.Добавить("ПроверкаВеденияУчета"); - -КонецПроцедуры - -// Возвращает параметры проверки по переданному идентификатору регламентного задания. -// -// Параметры -// ИдентификаторРегламентногоЗадания - Строка - Поле для связки с текущим фоновым заданием. -// -// Возвращаемое значение - Структура со свойствами, Неопределено: -// * Идентификатор - Строка - Строковый идентификатор проверки. -// -Функция ПараметрыПроверкиПоИдентификаторуРегламентногоЗадания(ИдентификаторРегламентногоЗадания) Экспорт - - Запрос = Новый Запрос( - "ВЫБРАТЬ ПЕРВЫЕ 1 - | ПравилаПроверкиУчета.Идентификатор КАК Идентификатор - |ИЗ - | Справочник.ПравилаПроверкиУчета КАК ПравилаПроверкиУчета - |ГДЕ - | ПравилаПроверкиУчета.ИдентификаторРегламентногоЗадания = &ИдентификаторРегламентногоЗадания - | И ПравилаПроверкиУчета.Использование"); - - Запрос.УстановитьПараметр("ИдентификаторРегламентногоЗадания", Строка(ИдентификаторРегламентногоЗадания)); - Результат = Запрос.Выполнить().Выбрать(); - - Если Не Результат.Следующий() Тогда - Возврат Неопределено; - Иначе - - СтруктураВозврата = Новый Структура; - СтруктураВозврата.Вставить("Идентификатор", Результат.Идентификатор); - - Возврат СтруктураВозврата; - - КонецЕсли; - -КонецФункции - -#КонецОбласти - -#Область ПользовательскаяИндикацияОшибок - -// Размещает группу индикатора ошибок на управляемой форме. -// -// Параметры: -// УправляемаяФорма - УправляемаяФорма - Форма объекта на которой нужно разместить группу индикатора. -// КлючУникальностиИмен - Строка - Строковый ключ уникальности добавляемых элементов на форму. Нужен для -// минимизации рисков пересечения с уже существующими элементами. -// ИмяРодителяГруппы - Строка, Неопределено - Строковое имя группы формы в контексте которой -// требуется разместить группу индикатора. Если неопределено, то в качестве -// контекста выступает управляемая форма. Если на форме не находится такого -// элемента генерируется исключение. -// ВыводитьСнизу - Булево - Определяет местоположение добавляемой группы, -// сигнализирующей об ошибке Если принимает значение "Истина", -// то группа будет добавлена в конец коллекции подчиненных -// элементов группы родителя. В противном случае группа будет -// расположена сразу за основной командной панелью формы объекта. -// -Функция РазместитьГруппуИндикатораОшибки(УправляемаяФорма, КлючУникальностиИмен, ИмяРодителяГруппы = Неопределено, ВыводитьСнизу = Ложь) Экспорт - - ВсеЭлементыФормы = УправляемаяФорма.Элементы; - - Если ИмяРодителяГруппы = Неопределено Тогда - КонтекстРазмещения = УправляемаяФорма; - Иначе - РодительГруппы = ВсеЭлементыФормы.Найти(ИмяРодителяГруппы); - Если РодительГруппы = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не найдена группа формы: ""%1""'"), ИмяРодителяГруппы); - Иначе - КонтекстРазмещения = РодительГруппы; - КонецЕсли; - КонецЕсли; - - ГруппаИндикатораОшибки = ВсеЭлементыФормы.Добавить("ГруппаИндикатораОшибки_" + КлючУникальностиИмен, Тип("ГруппаФормы"), КонтекстРазмещения); - ГруппаИндикатораОшибки.Вид = ВидГруппыФормы.ОбычнаяГруппа; - ГруппаИндикатораОшибки.ОтображатьЗаголовок = Ложь; - ГруппаИндикатораОшибки.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; - ГруппаИндикатораОшибки.РастягиватьПоГоризонтали = Истина; - ГруппаИндикатораОшибки.ЦветФона = ЦветаСтиля.ФонУправляющегоПоля; - - ПодчиненныеЭлементыКонтекста = КонтекстРазмещения.ПодчиненныеЭлементы; - Если ВыводитьСнизу Тогда - ВсеЭлементыФормы.Переместить(ГруппаИндикатораОшибки, КонтекстРазмещения); - Иначе - Если ПодчиненныеЭлементыКонтекста.Количество() > 0 Тогда - ВсеЭлементыФормы.Переместить(ГруппаИндикатораОшибки, КонтекстРазмещения, ПодчиненныеЭлементыКонтекста.Получить(0)); - КонецЕсли; - КонецЕсли; - - Возврат ГруппаИндикатораОшибки; - -КонецФункции - -// Заполняет размещенную ранее группу индикатора ошибок элементами -// идентифицирующими наличие ошибок и позволяющими перейти к отчету по этим ошибкам. -// -// Параметры -// УправляемаяФорма - УправляемаяФорма - Форма объекта на которой расположена группа индикатора. -// ГруппаИндикатораОшибки - ГруппаФормы - Группа управляемой формы на которой будут располагаться -// элементы-декорации, которые будут идентифицировать наличие ошибок с возможностью -// перехода к отчету. -// КлючУникальностиИмен - Строка - Строковый ключ уникальности добавляемых элементов на форму. Нужен для -// минимизации рисков пересечения с уже существующими элементами. -// КартинкаИндикатораПроблем - Картинка, Неопределено - Картинка идентифицирующая наличие проблем у текущего объекта. -// Может быть переопределена конечным разработчиком - достаточно добавить параметр при вызове. -// ОбщаяСтрокаИндикатор - ФорматированнаяСтрока - Общая строка-индикатор наличия ошибок. Состоит из -// поясняющего текста и гиперссылки открывающей отчет по проблемам объекта.. -// -Процедура ЗаполнитьГруппуИндикатораОшибки(УправляемаяФорма, ГруппаИндикатораОшибки, КлючУникальностиИмен, - ОбщаяСтрокаИндикатор, КартинкаИндикатораПроблем = Неопределено) Экспорт - - ЭлементыУправляемойФормы = УправляемаяФорма.Элементы; - - КартинкаИндикаторОшибки = ЭлементыУправляемойФормы.Добавить("ДекорацияКартинка_" + КлючУникальностиИмен, Тип("ДекорацияФормы"), ГруппаИндикатораОшибки); - КартинкаИндикаторОшибки.Вид = ВидДекорацииФормы.Картинка; - КартинкаИндикаторОшибки.Картинка = ?(КартинкаИндикатораПроблем = Неопределено, БиблиотекаКартинок.Предупреждение, КартинкаИндикатораПроблем); - КартинкаИндикаторОшибки.РазмерКартинки = РазмерКартинки.РеальныйРазмер; - - ДекорацияНадпись = ЭлементыУправляемойФормы.Добавить("ДекорацияНадпись_" + КлючУникальностиИмен, Тип("ДекорацияФормы"), ГруппаИндикатораОшибки); - ДекорацияНадпись.Вид = ВидДекорацииФормы.Надпись; - ДекорацияНадпись.Заголовок = ОбщаяСтрокаИндикатор; - ДекорацияНадпись.ВертикальноеПоложение = ВертикальноеПоложениеЭлемента.Центр; - ДекорацияНадпись.УстановитьДействие("ОбработкаНавигационнойСсылки", "Подключаемый_ОткрытьОтчетПоПроблемам"); - -КонецПроцедуры - -// Формирует общую строку-индикатор наличия ошибок. Состоит из поясняющего текста и -// гиперссылки открывающей отчет по проблемам объекта. -// -// Параметры -// УправляемаяФорма - УправляемаяФорма - Форма объекта на которой расположена группа индикатора. -// СсылкаНаОбъект - ЛюбаяСсылка - Ссылка на объект по которому найдены ошибки. -// КоличествоПроблемПоОбъекту - Число - Найденное количество проблем по объекту. -// ПояснениеИндикатораПроблем - Строка, Неопределено - Строка идентифицирующая наличие проблем у текущего объекта. -// Может быть переопределена конечным разработчиком - достаточно добавить параметр при вызове. -// ГиперссылкаИндикатораПроблем - Строка, Неопределено - Строка представляющая гиперссылку, при нажатии -// на которую будет открыт и сформирован отчет по проблемам текущего объекта. -// -Функция СформироватьОбщуюСтрокуИндикатор(УправляемаяФорма, СсылкаНаОбъект, КоличествоПроблемПоОбъекту, - ПояснениеИндикатораПроблем = Неопределено, ГиперссылкаИндикатораПроблем = Неопределено) Экспорт - - ТекстоваяСсылка = "Основной"; - - Если ПояснениеИндикатораПроблем <> Неопределено Тогда - ПоясняющаяНадпись = ПояснениеИндикатораПроблем - Иначе - ПоясняющаяНадпись = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'С этим %1'"), ПредставлениеОбъектаПоТипу(СсылкаНаОбъект)); - КонецЕсли; - - Если ГиперссылкаИндикатораПроблем <> Неопределено Тогда - Гиперссылка = ГиперссылкаИндикатораПроблем; - Иначе - Гиперссылка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='есть проблемы (%1)'"), Формат(КоличествоПроблемПоОбъекту, "ЧГ=0")); - КонецЕсли; - - Возврат Новый ФорматированнаяСтрока(ПоясняющаяНадпись + " ", Новый ФорматированнаяСтрока(Гиперссылка, , , , ТекстоваяСсылка)); - -КонецФункции - -// См. КонтрольВеденияУчетаПереопределяемый.ПриОпределенииПараметровГруппыИндикации. -Процедура ПриОпределенииПараметровГруппыИндикации(ПараметрыГруппыИндикации, ТипСсылки) Экспорт - - ПараметрыГруппыИндикации.Вставить("ИмяРодителяГруппы", Неопределено); - ПараметрыГруппыИндикации.Вставить("ВыводитьСнизу", Ложь); - -КонецПроцедуры - -// См. КонтрольВеденияУчетаПереопределяемый.ПриОпределенииПараметровКолонкиИндикации. -Процедура ПриОпределенииПараметровКолонкиИндикации(ПараметрыКолонкиИндикации, ПолноеИмя) Экспорт - - ПараметрыКолонкиИндикации.Вставить("ПоложениеЗаголовка", ПоложениеЗаголовкаЭлементаФормы.Нет); - ПараметрыКолонкиИндикации.Вставить("Ширина", 2); - ПараметрыКолонкиИндикации.Вставить("ВыводитьПоследней", Ложь); - -КонецПроцедуры - -#КонецОбласти - -#Область ВыполнениеПроверок - -// См. КонтрольВеденияУчета.ВыполнитьПроверку. -Процедура ВыполнитьПроверку(Проверка, ПараметрыВыполненияПроверки = Неопределено) Экспорт - - Если ТипЗнч(Проверка) = Тип("Строка") Тогда - ВыполняемаяПроверка = КонтрольВеденияУчета.ПроверкаПоИдентификатору(Проверка); - Иначе - ВыполняемаяПроверка = Проверка; - КонецЕсли; - - Если Не ОбновлениеИнформационнойБазы.ОбъектОбработан(ВыполняемаяПроверка).Обработан Тогда - Возврат; - КонецЕсли; - - ПараметрыПроверки = ПодготовитьПараметрыПроверки(ВыполняемаяПроверка, ПараметрыВыполненияПроверки); - Если ПроверкаОтложена(ПараметрыПроверки.ИдентификаторРегламентногоЗадания) Тогда - Возврат; - КонецЕсли; - - ПроверкиВеденияУчета = КонтрольВеденияУчетаСлужебныйПовтИсп.ПроверкиВеденияУчета(); - Проверки = ПроверкиВеденияУчета.Проверки; - СтрокаПроверки = Проверки.Найти(ПараметрыПроверки.Идентификатор, "Идентификатор"); - Если СтрокаПроверки = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Проверка ведения учета с идентификатором ""%1"" не существует (см. КонтрольВеденияУчетаПереопределяемый.ПриОпределенииПроверок)'"), - ПараметрыПроверки.Идентификатор); - КонецЕсли; - - Если СтрокаПроверки.БезОбработчикаПроверки Тогда - Возврат; - КонецЕсли; - - ОчиститьРезультатыПредыдущихПроверок(ВыполняемаяПроверка, ПараметрыПроверки.ПараметрыВыполненияПроверки); - - - МодульОценкаПроизводительности = Неопределено; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности") Тогда - МодульОценкаПроизводительности = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительности"); - ОписаниеЗамера = МодульОценкаПроизводительности.НачатьЗамерДлительнойОперации(ПараметрыПроверки.Идентификатор); - КонецЕсли; - - ПараметрыОбработчика = Новый Массив; - ПараметрыОбработчика.Добавить(ВыполняемаяПроверка); - ПараметрыОбработчика.Добавить(ПараметрыПроверки); - ОбщегоНазначения.ВыполнитьМетодКонфигурации(СтрокаПроверки.ОбработчикПроверки, ПараметрыОбработчика); - - Если МодульОценкаПроизводительности <> Неопределено Тогда - МодульОценкаПроизводительности.ЗакончитьЗамерДлительнойОперации(ОписаниеЗамера, 0); - КонецЕсли; - -КонецПроцедуры - -// Обработчик регламентного задания "ПроверкаВеденияУчета". Предназначен для обработки -// фонового запуска проверок системы. -// -// Параметры: -// ИдентификаторРегламентногоЗадания - Строка, Неопределено - Строковый идентификатор регламентного задания. -// -Процедура ПроверитьВедениеУчета(ИдентификаторРегламентногоЗадания = Неопределено) Экспорт - - ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.ПроверкаВеденияУчета); - - Если ИдентификаторРегламентногоЗадания <> Неопределено Тогда - - ПараметрыПроверки = ПараметрыПроверкиПоИдентификаторуРегламентногоЗадания(ИдентификаторРегламентногоЗадания); - Если ПараметрыПроверки <> Неопределено Тогда - ВыполнитьПроверку(ПараметрыПроверки.Идентификатор); - КонецЕсли; - - Иначе - - Запрос = Новый Запрос( - "ВЫБРАТЬ - | ПравилаПроверкиУчета.Идентификатор КАК Идентификатор - |ИЗ - | Справочник.ПравилаПроверкиУчета КАК ПравилаПроверкиУчета - |ГДЕ - | ПравилаПроверкиУчета.СпособВыполнения = ЗНАЧЕНИЕ(Перечисление.СпособВыполненияПроверки.ПоОбщемуРасписанию) - | И ПравилаПроверкиУчета.Использование"); - - Результат = Запрос.Выполнить().Выбрать(); - Пока Результат.Следующий() Цикл - ВыполнитьПроверку(Результат.Идентификатор); - КонецЦикла; - - КонецЕсли; - -КонецПроцедуры - -// Выполнение массива проверок по переданным параметрам. -// Параметры: -// ПараметрыПроверки - Массив - Массив, состоящий из структур вида: -// Элемент массива - Структура Параметры проверки которую необходимо выполнить, либо массив -// аналогичных структур (если нужно пакетное исполнение): -// * Идентификатор - Строка - Строковый идентификатор проверки. -// * Представление - Строка - Пользовательское представление проверки. -// * ИдентификаторРегламентногоЗадания - Строка - Строковый идентификатор регламентного задания, -// соответствующего проверке. -// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых -// объектов (только для объектов с датой). Объекты, дата которых -// меньше указанной, не следует проверять. По умолчанию не -// заполнено (т.е. проверять все). -// * ЛимитПроблем - Число - Количество проверяемых объектов. -// По умолчанию 1000. Если указано 0, то следует проверить все объекты. -// АдресХранилища - Строка - Адрес во временном хранилище для размещения результата. -// -Процедура ВыполнитьПроверкиВФоновомЗадании(Знач ПараметрыПроверки, АдресХранилища = Неопределено) Экспорт - - МассивПараметров = ПараметрыПроверки.МассивПараметров; - Для Каждого ПараметрыПроверки Из МассивПараметров Цикл - ВыполнитьПроверку(ПараметрыПроверки.Идентификатор); - КонецЦикла; - -КонецПроцедуры - -// См. КонтрольВеденияУчетаПереопределяемый.ПроверкаПоИдентификатору. -Функция ПроверкаПоИдентификатору(Идентификатор) Экспорт - - Запрос = Новый Запрос( - "ВЫБРАТЬ ПЕРВЫЕ 1 - | ПравилаПроверкиУчета.Ссылка КАК Проверка - |ИЗ - | Справочник.ПравилаПроверкиУчета КАК ПравилаПроверкиУчета - |ГДЕ - | ПравилаПроверкиУчета.Идентификатор = &Идентификатор - | И НЕ ПравилаПроверкиУчета.ПометкаУдаления"); - - Запрос.УстановитьПараметр("Идентификатор", Идентификатор); - Результат = Запрос.Выполнить().Выбрать(); - - Если Не Результат.Следующий() Тогда - Возврат Справочники.ПравилаПроверкиУчета.ПустаяСсылка(); - Иначе - Возврат Результат.Проверка; - КонецЕсли; - -КонецФункции - -// См. КонтрольВеденияУчетаПереопределяемый.ВыполнитьПроверкиВКонтексте. -Функция ПроверкиПоКонтексту(КонтекстПроверокВеденияУчета) Экспорт - - Запрос = Новый Запрос( - "ВЫБРАТЬ - | ""ВыборкаЭлементовБезРодителейСУчетомКонтекста"" КАК НазначениеЗапроса, - | ЗНАЧЕНИЕ(Справочник.ПравилаПроверкиУчета.ПустаяСсылка) КАК Родитель, - | ПравилаПроверкиУчета.Ссылка КАК Проверка - |ИЗ - | Справочник.ПравилаПроверкиУчета КАК ПравилаПроверкиУчета - |ГДЕ - | НЕ ПравилаПроверкиУчета.ЭтоГруппа - | И ПравилаПроверкиУчета.Использование - | И ПравилаПроверкиУчета.Родитель = ЗНАЧЕНИЕ(Справочник.ПравилаПроверкиУчета.ПустаяСсылка) - | И ПравилаПроверкиУчета.КонтекстПроверокВеденияУчета = &КонтекстПроверокВеденияУчета - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | ""ВыборкаГруппСУчетомКонтекста"", - | ПравилаПроверкиУчета.Родитель, - | ПравилаПроверкиУчета.Ссылка - |ИЗ - | Справочник.ПравилаПроверкиУчета КАК ПравилаПроверкиУчета - |ГДЕ - | ПравилаПроверкиУчета.ЭтоГруппа - | И ПравилаПроверкиУчета.КонтекстПроверокВеденияУчета = &КонтекстПроверокВеденияУчета - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | ""ВыборкаЭлементовСРодителямиБезУчетаКонтекста"", - | ПравилаПроверкиУчета.Родитель, - | ПравилаПроверкиУчета.Ссылка - |ИЗ - | Справочник.ПравилаПроверкиУчета КАК ПравилаПроверкиУчета - |ГДЕ - | НЕ ПравилаПроверкиУчета.ЭтоГруппа - | И ПравилаПроверкиУчета.Использование - | И ПравилаПроверкиУчета.Родитель <> ЗНАЧЕНИЕ(Справочник.ПравилаПроверкиУчета.ПустаяСсылка)"); - - Запрос.УстановитьПараметр("КонтекстПроверокВеденияУчета", КонтекстПроверокВеденияУчета); - Результат = Запрос.Выполнить().Выгрузить(); - - МассивПроверок = Новый Массив; - ЦелевыеРодители = Результат.Скопировать(Результат.НайтиСтроки(Новый Структура("НазначениеЗапроса", "ВыборкаГруппСУчетомКонтекста")), "Родитель, Проверка"); - - Для Каждого СтрокаРезультата Из Результат Цикл - - Если СтрокаРезультата.НазначениеЗапроса = "ВыборкаЭлементовБезРодителейСУчетомКонтекста" - Или (СтрокаРезультата.НазначениеЗапроса = "ВыборкаЭлементовСРодителямиБезУчетаКонтекста" - И ЦелевыеРодители.Найти(СтрокаРезультата.Родитель) <> Неопределено) Тогда - МассивПроверок.Добавить(СтрокаРезультата.Проверка); - КонецЕсли; - - КонецЦикла; - - Возврат ОбщегоНазначенияКлиентСервер.СвернутьМассив(МассивПроверок); - -КонецФункции - -// См. КонтрольВеденияУчета.ПараметрыВыполненияПроверки. -Функция ПараметрыВыполненияПроверки(Знач Свойство1, Знач Свойство2 = Неопределено, Знач Свойство3 = Неопределено, - Знач Свойство4 = Неопределено, Знач Свойство5 = Неопределено, Знач МассивСвойств = Неопределено) Экспорт - - КоличествоСвойств = КоличествоСвойств(); - НайденКрайнийЗначащийПараметр = Ложь; - - Для Индекс = 2 По КоличествоСвойств Цикл - ЗначениеПараметра = Вычислить("Свойство" + Формат(Индекс, "ЧГ=0")); - Если ЗначениеПараметра = Неопределено Тогда - Если Не НайденКрайнийЗначащийПараметр Тогда - НайденКрайнийЗначащийПараметр = Истина; - КонецЕсли; - Иначе - Если НайденКрайнийЗначащийПараметр Тогда - ВызватьИсключение НСтр("ru = 'Параметры выполнения проверки заданы не по порядку в КонтрольВеденияУчета.ПараметрыВыполненияПроверки.'"); - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Если МассивСвойств <> Неопределено И Свойство5 = Неопределено Тогда - ВызватьИсключение НСтр("ru = 'Параметры выполнения проверки заданы не по порядку в КонтрольВеденияУчета.ПараметрыВыполненияПроверки.'"); - КонецЕсли; - - ВсеПараметры = Новый Массив; - ВсеПараметры.Добавить(Свойство1); - Для Индекс = 2 По КоличествоСвойств Цикл - - ИмяСвойства = "Свойство" + Формат(Индекс, "ЧГ=0"); - ЗначениеСвойства = Вычислить(ИмяСвойства); - - Если ЗначениеСвойства = Неопределено Тогда - Прервать; - КонецЕсли; - - ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("КонтрольВеденияУчета.ПараметрыВыполненияПроверки", ИмяСвойства, ЗначениеСвойства, ОжидаемыеТипыСвойствВидовПроверок()); - ВсеПараметры.Добавить(ЗначениеСвойства); - - КонецЦикла; - - Если МассивСвойств <> Неопределено Тогда - Для Каждого ЭлементМассива Из МассивСвойств Цикл - - ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("КонтрольВеденияУчета.ПараметрыВыполненияПроверки", ИмяСвойства, ЗначениеСвойства, ОжидаемыеТипыСвойствВидовПроверок()); - ВсеПараметры.Добавить(ЭлементМассива); - - КонецЦикла; - КонецЕсли; - - ПредставлениеВидаПроверки = ""; - ПараметрыВыполненияПроверки = Новый Структура; - - Для Каждого ТекущийПараметр Из ВсеПараметры Цикл - - Если ОбщегоНазначения.ЭтоСсылка(ТипЗнч(ТекущийПараметр)) Тогда - ЗначениеПредставления = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ТекущийПараметр, Новый Структура("Представление", "ПредставлениеСсылки(Ссылка)")); - ПредставлениеВидаПроверки = ПредставлениеВидаПроверки + ?(ЗначениеЗаполнено(ПредставлениеВидаПроверки), ", ", "") + ЗначениеПредставления["Представление"]; - Иначе - ПредставлениеВидаПроверки = ПредставлениеВидаПроверки + ?(ЗначениеЗаполнено(ПредставлениеВидаПроверки), ", ", "") + Формат(ТекущийПараметр, "ДЛФ=Д; ЧГ=0"); - КонецЕсли; - ПараметрыВыполненияПроверки.Вставить("Свойство" + Формат(ВсеПараметры.Найти(ТекущийПараметр) + 1, "ЧГ=0"), ТекущийПараметр); - - КонецЦикла; - - ПараметрыВыполненияПроверки.Вставить("Наименование", ПредставлениеВидаПроверки); - - Возврат ПараметрыВыполненияПроверки; - -КонецФункции - -#КонецОбласти - -#Область ПроцедурыИФункцииОбщегоНазначения - -// См. КонтрольВеденияУчетаПереопределяемый.ПриОпределенииНастроек. -Функция ГлобальныеНастройки() Экспорт - - Настройки = Новый Структура; - - Настройки.Вставить("КартинкаИндикатораПроблем", БиблиотекаКартинок.Предупреждение); - Настройки.Вставить("ПояснениеИндикатораПроблем", Неопределено); - Настройки.Вставить("ГиперссылкаИндикатораПроблем", Неопределено); - - КонтрольВеденияУчетаПереопределяемый.ПриОпределенииНастроек(Настройки); - - Возврат Настройки; - -КонецФункции - -// Возвращает массив проблемных объектов. Максимально "облегчена" для прироста производительности. -// -// Параметры: -// КлючиСтрок - Массив - Массив, содержащий все ключи строк динамического списка. -// -// Возвращаемое значение - Массив из ЛюбаяСсылка - массив проблемных объектов. -// -Функция ПроблемныеОбъекты(КлючиСтрок) Экспорт - - ТекущийПользовательПолноправный = Пользователи.ЭтоПолноправныйПользователь(); - - Запрос = Новый Запрос( - "ВЫБРАТЬ РАЗЛИЧНЫЕ - | РезультатыПроверкиУчета.ПроблемныйОбъект КАК ПроблемныйОбъект - |ИЗ - | РегистрСведений.РезультатыПроверкиУчета КАК РезультатыПроверкиУчета - |ГДЕ - | РезультатыПроверкиУчета.ПроблемныйОбъект В(&СписокОбъектов) - | И НЕ РезультатыПроверкиУчета.ИгнорироватьПроблему"); - Запрос.УстановитьПараметр("СписокОбъектов", КлючиСтрок); - - Если Не ТекущийПользовательПолноправный Тогда - УстановитьПривилегированныйРежим(Истина); - КонецЕсли; - - ПроблемныеОбъекты = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ПроблемныйОбъект"); - - Если Не ТекущийПользовательПолноправный Тогда - УстановитьПривилегированныйРежим(Ложь); - КонецЕсли; - - Возврат ПроблемныеОбъекты; - -КонецФункции - -// См. КонтрольВеденияУчета.ОписаниеПроблемы. -Функция ОписаниеПроблемы(ПроблемныйОбъект, ПараметрыПроверки) Экспорт - - Результат = Новый Структура; - Результат.Вставить("ПроблемныйОбъект", ПроблемныйОбъект); - Результат.Вставить("ПравилоПроверки", ПараметрыПроверки.Проверка); - Результат.Вставить("ВажностьПроблемы", ПараметрыПроверки.ВажностьПроблемы); - Результат.Вставить("УточнениеПроблемы", ""); - Результат.Вставить("КлючУникальности", Новый УникальныйИдентификатор); - Результат.Вставить("Выявлено", ТекущаяДатаСеанса()); - Результат.Вставить("ДополнительнаяИнформация", Новый ХранилищеЗначения(Неопределено)); - Результат.Вставить("Ответственный", Неопределено); - Результат.Вставить("ВидПроверки", ?(ПараметрыПроверки.ПараметрыВыполненияПроверки.Количество() = 1, - ВидПроверки(ПараметрыПроверки.ПараметрыВыполненияПроверки[0]), Неопределено)); - Возврат Результат; - -КонецФункции - -// См. КонтрольВеденияУчета.ЗаписатьПроблему. -Процедура ЗаписатьПроблему(ОшибкаПроверки, ПараметрыПроверки = Неопределено) Экспорт - - Если ПараметрыПроверки <> Неопределено И ЭтоПоследняяИтерацияПроверки(ПараметрыПроверки) Тогда - Возврат; - КонецЕсли; - - Если Не ЗначениеЗаполнено(ОшибкаПроверки.ВидПроверки) Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'При записи проблемы по проверке ""%1"" не указан вид проверки.'"), - ОшибкаПроверки.ПравилоПроверки); - КонецЕсли; - - ПроблемныйОбъект = ОшибкаПроверки.ПроблемныйОбъект; - КоллекцияРеквизитов = ОшибкаПроверки.ПроблемныйОбъект.Метаданные().Реквизиты; - - КонтрольВеденияУчетаПереопределяемый.ПередЗаписьюПроблемы(ОшибкаПроверки, ПроблемныйОбъект, КоллекцияРеквизитов); - - НаборЗаписей = РегистрыСведений.РезультатыПроверкиУчета.СоздатьНаборЗаписей(); - - Отбор = НаборЗаписей.Отбор; - Отбор.ВидПроверки.Установить(ОшибкаПроверки.ВидПроверки); - Отбор.ПравилоПроверки.Установить(ОшибкаПроверки.ПравилоПроверки); - Отбор.ПроблемныйОбъект.Установить(ПроблемныйОбъект); - Отбор.КлючУникальности.Установить(ОшибкаПроверки.КлючУникальности); - - НоваяЗапись = НаборЗаписей.Добавить(); - ЗаполнитьЗначенияСвойств(НоваяЗапись, ОшибкаПроверки); - - НаборЗаписей.Записать(); - -КонецПроцедуры - -#КонецОбласти - -#КонецОбласти - #Область СлужебныеПроцедурыИФункции -#Область СинхронизацияСправочникаВидовПроверокСлужебная +// См. КонтрольВеденияУчета.СводнаяИнформацияПоВидамПроверок. +Функция СводнаяИнформацияПоВидамПроверок(ВидПроверок, ПоискПоТочномуСоответствию = Истина) Экспорт + + СводнаяИнформация = Новый Структура; + СводнаяИнформация.Вставить("Количество", 0); + СводнаяИнформация.Вставить("ЕстьОшибки", Ложь); + + МассивВидовПроверок = Новый Массив; + + Если ТипЗнч(ВидПроверок) = Тип("СправочникСсылка.ВидыПроверок") Тогда + МассивВидовПроверок.Добавить(ВидПроверок); + ИначеЕсли ТипЗнч(ВидПроверок) = Тип("Строка") Тогда + ПараметрыВыполненияПроверки = ПараметрыВыполненияПроверки(ВидПроверок); + МассивВидовПроверок = ВидыПроверок(ПараметрыВыполненияПроверки, ПоискПоТочномуСоответствию); + Иначе + + КоличествоПараметров = ВидПроверок.Количество(); + Если КоличествоПараметров = 1 Тогда + ПараметрыВыполненияПроверки = ПараметрыВыполненияПроверки(ВидПроверок.Получить(0)); + ИначеЕсли КоличествоПараметров = 2 Тогда + ПараметрыВыполненияПроверки = ПараметрыВыполненияПроверки(ВидПроверок.Получить(0), ВидПроверок.Получить(1)); + ИначеЕсли КоличествоПараметров = 3 Тогда + ПараметрыВыполненияПроверки = ПараметрыВыполненияПроверки(ВидПроверок.Получить(0), + ВидПроверок.Получить(1), ВидПроверок.Получить(2)); + ИначеЕсли КоличествоПараметров = 4 Тогда + ПараметрыВыполненияПроверки = ПараметрыВыполненияПроверки(ВидПроверок.Получить(0), + ВидПроверок.Получить(1), ВидПроверок.Получить(2), ВидПроверок.Получить(3)); + ИначеЕсли КоличествоПараметров = 5 Тогда + ПараметрыВыполненияПроверки = ПараметрыВыполненияПроверки(ВидПроверок.Получить(0), + ВидПроверок.Получить(1), ВидПроверок.Получить(2), ВидПроверок.Получить(3), ВидПроверок.Получить(4)); + Иначе + МассивОстатков = Новый Массив; + Для Индекс = 5 По КоличествоПараметров Цикл + МассивОстатков.Добавить(ВидПроверок.Получить(Индекс)); + КонецЦикла; + ПараметрыВыполненияПроверки = ПараметрыВыполненияПроверки(ВидПроверок.Получить(0), + ВидПроверок.Получить(1), ВидПроверок.Получить(2), ВидПроверок.Получить(3), ВидПроверок.Получить(4), МассивОстатков); + КонецЕсли; + + МассивВидовПроверок = ВидыПроверок(ПараметрыВыполненияПроверки, ПоискПоТочномуСоответствию); + + КонецЕсли; + + Запрос = Новый Запрос( + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | КОЛИЧЕСТВО(*) КАК Количество, + | ЕСТЬNULL(МАКСИМУМ(ВЫБОР + | КОГДА РезультатыПроверкиУчета.ВажностьПроблемы = ЗНАЧЕНИЕ(Перечисление.ВажностьПроблемыУчета.Ошибка) + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ), ЛОЖЬ) КАК ЕстьОшибки + |ИЗ + | РегистрСведений.РезультатыПроверкиУчета КАК РезультатыПроверкиУчета + |ГДЕ + | НЕ РезультатыПроверкиУчета.ИгнорироватьПроблему + | И РезультатыПроверкиУчета.ВидПроверки В (&МассивВидовПроверок)"); + + Запрос.УстановитьПараметр("МассивВидовПроверок", МассивВидовПроверок); + Результат = Запрос.Выполнить().Выбрать(); + Результат.Следующий(); + + ЗаполнитьЗначенияСвойств(СводнаяИнформация, Результат); + Возврат СводнаяИнформация; + +КонецФункции + +// См. КонтрольВеденияУчета.ПодробнаяИнформацияПоВидамПроверок. +Функция ПодробнаяИнформацияПоВидамПроверок(ВидПроверок, ПоискПоТочномуСоответствию = Истина) Экспорт + + ПодробнаяИнформация = Новый ТаблицаЗначений; + КолонкиПодробнойИнформации = ПодробнаяИнформация.Колонки; + КолонкиПодробнойИнформации.Добавить("ПроблемныйОбъект", ОбщегоНазначения.ОписаниеТипаВсеСсылки()); + КолонкиПодробнойИнформации.Добавить("ВажностьПроблемы", Новый ОписаниеТипов("ПеречислениеСсылка.ВажностьПроблемыУчета")); + КолонкиПодробнойИнформации.Добавить("ПравилоПроверки", Новый ОписаниеТипов("СправочникСсылка.ПравилаПроверкиУчета")); + КолонкиПодробнойИнформации.Добавить("ВидПроверки", Новый ОписаниеТипов("СправочникСсылка.ВидыПроверок")); + КолонкиПодробнойИнформации.Добавить("УточнениеПроблемы", Новый ОписаниеТипов("Строка")); + КолонкиПодробнойИнформации.Добавить("Ответственный", Новый ОписаниеТипов("СправочникСсылка.Пользователи")); + КолонкиПодробнойИнформации.Добавить("Выявлено", Новый ОписаниеТипов("Дата")); + КолонкиПодробнойИнформации.Добавить("ДополнительнаяИнформация", Новый ОписаниеТипов("ХранилищеЗначения")); + + МассивВидовПроверок = Новый Массив; + + Если ТипЗнч(ВидПроверок) = Тип("СправочникСсылка.ВидыПроверок") Тогда + МассивВидовПроверок.Добавить(ВидПроверок); + ИначеЕсли ТипЗнч(ВидПроверок) = Тип("Строка") Тогда + ПараметрыВыполненияПроверки = ПараметрыВыполненияПроверки(ВидПроверок); + МассивВидовПроверок = ВидыПроверок(ПараметрыВыполненияПроверки, ПоискПоТочномуСоответствию); + Иначе + + КоличествоПараметров = ВидПроверок.Количество(); + Если КоличествоПараметров = 1 Тогда + ПараметрыВыполненияПроверки = ПараметрыВыполненияПроверки(ВидПроверок.Получить(0)); + ИначеЕсли КоличествоПараметров = 2 Тогда + ПараметрыВыполненияПроверки = ПараметрыВыполненияПроверки(ВидПроверок.Получить(0), ВидПроверок.Получить(1)); + ИначеЕсли КоличествоПараметров = 3 Тогда + ПараметрыВыполненияПроверки = ПараметрыВыполненияПроверки(ВидПроверок.Получить(0), + ВидПроверок.Получить(1), ВидПроверок.Получить(2)); + ИначеЕсли КоличествоПараметров = 4 Тогда + ПараметрыВыполненияПроверки = ПараметрыВыполненияПроверки(ВидПроверок.Получить(0), + ВидПроверок.Получить(1), ВидПроверок.Получить(2), ВидПроверок.Получить(3)); + ИначеЕсли КоличествоПараметров = 5 Тогда + ПараметрыВыполненияПроверки = ПараметрыВыполненияПроверки(ВидПроверок.Получить(0), + ВидПроверок.Получить(1), ВидПроверок.Получить(2), ВидПроверок.Получить(3), ВидПроверок.Получить(4)); + Иначе + МассивОстатков = Новый Массив; + Для Индекс = 5 По КоличествоПараметров Цикл + МассивОстатков.Добавить(ВидПроверок.Получить(Индекс)); + КонецЦикла; + ПараметрыВыполненияПроверки = ПараметрыВыполненияПроверки(ВидПроверок.Получить(0), + ВидПроверок.Получить(1), ВидПроверок.Получить(2), ВидПроверок.Получить(3), ВидПроверок.Получить(4), МассивОстатков); + КонецЕсли; + + МассивВидовПроверок = ВидыПроверок(ПараметрыВыполненияПроверки, ПоискПоТочномуСоответствию); + + КонецЕсли; + + Если МассивВидовПроверок.Количество() = 0 Тогда + Возврат ПодробнаяИнформация; + КонецЕсли; + + Запрос = Новый Запрос( + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | РезультатыПроверкиУчета.ПроблемныйОбъект КАК ПроблемныйОбъект, + | РезультатыПроверкиУчета.ПравилоПроверки КАК ПравилоПроверки, + | РезультатыПроверкиУчета.ВажностьПроблемы КАК ВажностьПроблемы, + | РезультатыПроверкиУчета.ВидПроверки КАК ВидПроверки, + | РезультатыПроверкиУчета.УточнениеПроблемы КАК УточнениеПроблемы, + | РезультатыПроверкиУчета.Ответственный КАК Ответственный, + | РезультатыПроверкиУчета.Выявлено КАК Выявлено, + | РезультатыПроверкиУчета.ДополнительнаяИнформация КАК ДополнительнаяИнформация + |ИЗ + | РегистрСведений.РезультатыПроверкиУчета КАК РезультатыПроверкиУчета + |ГДЕ + | НЕ РезультатыПроверкиУчета.ИгнорироватьПроблему + | И РезультатыПроверкиУчета.ВидПроверки В(&МассивВидовПроверок)"); + + Запрос.УстановитьПараметр("МассивВидовПроверок", МассивВидовПроверок); + Результат = Запрос.Выполнить(); + + Если Не Результат.Пустой() Тогда + ПодробнаяИнформация = Результат.Выгрузить(); + КонецЕсли; + + Возврат ПодробнаяИнформация; + +КонецФункции + +// См. КонтрольВеденияУчета.ВидыПроверок. +Функция ВидыПроверок(ВидПроверок, ПоискПоТочномуСоответствию = Истина) Экспорт + + Если ТипЗнч(ВидПроверок) = Тип("СправочникСсылка.ВидыПроверок") Тогда + Результат = Новый Массив; + Результат.Добавить(ВидПроверок); + Возврат Результат; + КонецЕсли; + + Если ТипЗнч(ВидПроверок) = Тип("Строка") Тогда + ПараметрыВыполненияПроверки = ПараметрыВыполненияПроверки(ВидПроверок); + ИначеЕсли ТипЗнч(ВидПроверок) = Тип("Массив") Тогда + ПараметрыВыполненияПроверки = ПараметрыВыполненияПроверкиИзМассива(ВидПроверок); + Иначе + ПараметрыВыполненияПроверки = ВидПроверок; + КонецЕсли; + + Если ТипЗнч(ПараметрыВыполненияПроверки) = Тип("Структура") Тогда + Возврат ОбычныйПоискВидаПроверки(ПараметрыВыполненияПроверки, ПоискПоТочномуСоответствию); + + ИначеЕсли ТипЗнч(ПараметрыВыполненияПроверки) = Тип("Массив") Тогда + + Если ПараметрыВыполненияПроверки.Количество() > КоличествоСвойств() Тогда + Возврат РасширенныйПоискВидаПроверки(ПараметрыВыполненияПроверки, ПараметрыВыполненияПроверки.Количество()); + Иначе + Возврат ОбычныйПоискВидаПроверки(ПараметрыВыполненияПроверки, ПоискПоТочномуСоответствию); + КонецЕсли; + + КонецЕсли; + + Возврат Новый Массив; + +КонецФункции // См. КонтрольВеденияУчета.ВидПроверки. -Функция ВидПроверки(ПараметрыВыполненияПроверки, ТолькоПоиск = Ложь) Экспорт +Функция ВидПроверки(Знач ПараметрыВыполненияПроверки, Знач ТолькоПоиск = Ложь) Экспорт + + Если ТипЗнч(ПараметрыВыполненияПроверки) = Тип("Строка") Тогда + ПараметрыВыполненияПроверки = ПараметрыВыполненияПроверки(ПараметрыВыполненияПроверки); + КонецЕсли; НачатьТранзакцию(); Попытка @@ -1190,19 +586,249 @@ КонецФункции -#КонецОбласти - -#Область СинхронизацияСправочникаПроверокСлужебная - -Процедура ОбновлениеСправочникаПроверок(ГруппыПроверок, Проверки) +// См. КонтрольВеденияУчетаПереопределяемый.ПриОпределенииНастроек. +Функция ГлобальныеНастройки() Экспорт - ПроверкаУникальностиЗаданныхЭлементов(ГруппыПроверок, Проверки); + Настройки = Новый Структура; + Настройки.Вставить("КартинкаИндикатораПроблем", БиблиотекаКартинок.Предупреждение); + Настройки.Вставить("ПояснениеИндикатораПроблем", Неопределено); + Настройки.Вставить("ГиперссылкаИндикатораПроблем", Неопределено); - ДобавитьГруппыПроверок(ГруппыПроверок); - ДобавитьПроверки(Проверки); + КонтрольВеденияУчетаПереопределяемый.ПриОпределенииНастроек(Настройки); + + Возврат Настройки; + +КонецФункции + +// Возвращает массив проблемных объектов. Максимально "облегчена" для прироста производительности. +// +// Параметры: +// КлючиСтрок - Массив - Массив, содержащий все ключи строк динамического списка. +// +// Возвращаемое значение - Массив из ЛюбаяСсылка - массив проблемных объектов. +// +Функция ПроблемныеОбъекты(КлючиСтрок) Экспорт + + ТекущийПользовательПолноправный = Пользователи.ЭтоПолноправныйПользователь(); + + Запрос = Новый Запрос( + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | РезультатыПроверкиУчета.ПроблемныйОбъект КАК ПроблемныйОбъект + |ИЗ + | РегистрСведений.РезультатыПроверкиУчета КАК РезультатыПроверкиУчета + |ГДЕ + | РезультатыПроверкиУчета.ПроблемныйОбъект В(&СписокОбъектов) + | И НЕ РезультатыПроверкиУчета.ИгнорироватьПроблему"); + Запрос.УстановитьПараметр("СписокОбъектов", КлючиСтрок); + + Если Не ТекущийПользовательПолноправный Тогда + УстановитьПривилегированныйРежим(Истина); + КонецЕсли; + + ПроблемныеОбъекты = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ПроблемныйОбъект"); + + Если Не ТекущийПользовательПолноправный Тогда + УстановитьПривилегированныйРежим(Ложь); + КонецЕсли; + + Возврат ПроблемныеОбъекты; + +КонецФункции + +// См. КонтрольВеденияУчета.ОписаниеПроблемы. +Функция ОписаниеПроблемы(ПроблемныйОбъект, ПараметрыПроверки) Экспорт + + Результат = Новый Структура; + Результат.Вставить("ПроблемныйОбъект", ПроблемныйОбъект); + Результат.Вставить("ПравилоПроверки", ПараметрыПроверки.Проверка); + Результат.Вставить("ВажностьПроблемы", ПараметрыПроверки.ВажностьПроблемы); + Результат.Вставить("УточнениеПроблемы", ""); + Результат.Вставить("КлючУникальности", Новый УникальныйИдентификатор); + Результат.Вставить("Выявлено", ТекущаяДатаСеанса()); + Результат.Вставить("ДополнительнаяИнформация", Новый ХранилищеЗначения(Неопределено)); + Результат.Вставить("Ответственный", Неопределено); + Результат.Вставить("ВидПроверки", ?(ПараметрыПроверки.ПараметрыВыполненияПроверки.Количество() = 1, + ВидПроверки(ПараметрыПроверки.ПараметрыВыполненияПроверки[0]), Неопределено)); + Возврат Результат; + +КонецФункции + +// См. КонтрольВеденияУчета.ЗаписатьПроблему. +Процедура ЗаписатьПроблему(ОшибкаПроверки, ПараметрыПроверки = Неопределено) Экспорт + + Если ПараметрыПроверки <> Неопределено И ЭтоПоследняяИтерацияПроверки(ПараметрыПроверки) Тогда + Возврат; + КонецЕсли; + + Если Не ЗначениеЗаполнено(ОшибкаПроверки.ВидПроверки) Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При записи проблемы по проверке ""%1"" не указан вид проверки.'"), + ОшибкаПроверки.ПравилоПроверки); + КонецЕсли; + + ПроблемныйОбъект = ОшибкаПроверки.ПроблемныйОбъект; + КоллекцияРеквизитов = ПроблемныйОбъект.Метаданные().Реквизиты; + + КонтрольВеденияУчетаПереопределяемый.ПередЗаписьюПроблемы(ОшибкаПроверки, ПроблемныйОбъект, КоллекцияРеквизитов); + + ОшибкаПроверки.Вставить("КонтрольнаяСумма", КонтрольнаяСуммаПроблемы(ОшибкаПроверки)); + Если ЭтаПроблемаИгнорируется(ОшибкаПроверки.КонтрольнаяСумма) Тогда + Возврат; + КонецЕсли; + + НаборЗаписей = РегистрыСведений.РезультатыПроверкиУчета.СоздатьНаборЗаписей(); + Отбор = НаборЗаписей.Отбор; + Отбор.ПроблемныйОбъект.Установить(ПроблемныйОбъект); + Отбор.ПравилоПроверки.Установить(ОшибкаПроверки.ПравилоПроверки); + Отбор.ВидПроверки.Установить(ОшибкаПроверки.ВидПроверки); + Отбор.КлючУникальности.Установить(ОшибкаПроверки.КлючУникальности); + + НоваяЗапись = НаборЗаписей.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяЗапись, ОшибкаПроверки); + + НаборЗаписей.Записать(); КонецПроцедуры +// См. КонтрольВеденияУчета.ИгнорироватьПроблему. +Процедура ИгнорироватьПроблему(ОписаниеПроблемы, Значение) Экспорт + + НачатьТранзакцию(); + Попытка + БлокировкаДанных = Новый БлокировкаДанных; + ЭлементБлокировкиДанных = БлокировкаДанных.Добавить("РегистрСведений.РезультатыПроверкиУчета"); + ЭлементБлокировкиДанных.УстановитьЗначение("ПроблемныйОбъект", ОписаниеПроблемы.ПроблемныйОбъект); + ЭлементБлокировкиДанных.УстановитьЗначение("ПравилоПроверки", ОписаниеПроблемы.ПравилоПроверки); + ЭлементБлокировкиДанных.УстановитьЗначение("ВидПроверки", ОписаниеПроблемы.ВидПроверки); + БлокировкаДанных.Заблокировать(); + + КонтрольнаяСумма = КонтрольнаяСуммаПроблемы(ОписаниеПроблемы); + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | РезультатыПроверкиУчета.ИгнорироватьПроблему КАК ИгнорироватьПроблему, + | РезультатыПроверкиУчета.ПроблемныйОбъект КАК ПроблемныйОбъект, + | РезультатыПроверкиУчета.ПравилоПроверки КАК ПравилоПроверки, + | РезультатыПроверкиУчета.ВидПроверки КАК ВидПроверки, + | РезультатыПроверкиУчета.ДополнительнаяИнформация КАК ДополнительнаяИнформация + |ИЗ + | РегистрСведений.РезультатыПроверкиУчета КАК РезультатыПроверкиУчета + |ГДЕ + | РезультатыПроверкиУчета.КонтрольнаяСумма = &КонтрольнаяСумма"); + + Запрос.УстановитьПараметр("КонтрольнаяСумма", КонтрольнаяСумма); + Результат = Запрос.Выполнить(); + Если Результат.Пустой() Тогда + ОтменитьТранзакцию(); + Возврат; + КонецЕсли; + + КонтрольнаяСуммаПереданнойДопИнформации = ""; + Если ОписаниеПроблемы.Свойство("ДополнительнаяИнформация") Тогда + КонтрольнаяСуммаПереданнойДопИнформации = ОбщегоНазначения.КонтрольнаяСуммаСтрокой(ОписаниеПроблемы.ДополнительнаяИнформация); + КонецЕсли; + + Выборка = Результат.Выбрать(); + Пока Выборка.Следующий() Цикл + + Если ЗначениеЗаполнено(КонтрольнаяСуммаПереданнойДопИнформации) Тогда + + КонтрольнаяСуммаНайденнойДопИнформации = ОбщегоНазначения.КонтрольнаяСуммаСтрокой(Выборка.ДополнительнаяИнформация); + Если КонтрольнаяСуммаНайденнойДопИнформации <> КонтрольнаяСуммаПереданнойДопИнформации Тогда + Продолжить; + КонецЕсли; + + КонецЕсли; + + Если Выборка.ИгнорироватьПроблему <> Значение Тогда + + НаборЗаписей = РегистрыСведений.РезультатыПроверкиУчета.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ПроблемныйОбъект.Установить(Выборка.ПроблемныйОбъект); + НаборЗаписей.Отбор.ПравилоПроверки.Установить(Выборка.ПравилоПроверки); + НаборЗаписей.Отбор.ВидПроверки.Установить(Выборка.ВидПроверки); + НаборЗаписей.Прочитать(); + + Запись = НаборЗаписей.Получить(0); + Запись.ИгнорироватьПроблему = Значение; + НаборЗаписей.Записать(); + + КонецЕсли; + + КонецЦикла; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Возвращает параметры проверки по переданному идентификатору регламентного задания. +// +// Параметры +// ИдентификаторРегламентногоЗадания - Строка - Поле для связки с текущим фоновым заданием. +// +// Возвращаемое значение - Структура со свойствами, Неопределено: +// * Идентификатор - Строка - Строковый идентификатор проверки. +// +Функция ПараметрыПроверкиПоИдентификаторуРегламентногоЗадания(ИдентификаторРегламентногоЗадания) + + Запрос = Новый Запрос( + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ПравилаПроверкиУчета.Идентификатор КАК Идентификатор + |ИЗ + | Справочник.ПравилаПроверкиУчета КАК ПравилаПроверкиУчета + |ГДЕ + | ПравилаПроверкиУчета.ИдентификаторРегламентногоЗадания = &ИдентификаторРегламентногоЗадания + | И ПравилаПроверкиУчета.Использование"); + + Запрос.УстановитьПараметр("ИдентификаторРегламентногоЗадания", Строка(ИдентификаторРегламентногоЗадания)); + Результат = Запрос.Выполнить().Выбрать(); + + Если Не Результат.Следующий() Тогда + Возврат Неопределено; + Иначе + + СтруктураВозврата = Новый Структура; + СтруктураВозврата.Вставить("Идентификатор", Результат.Идентификатор); + + Возврат СтруктураВозврата; + + КонецЕсли; + +КонецФункции + +#Область ОбновлениеСправочникаПроверок + +// Обновляет вспомогательные данные, которые зависят от конфигурации частично. +// +Процедура ОбновитьВспомогательныеДанныеПоИзменениямКонфигурации(Параметры = Неопределено) Экспорт + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + Блокировка.Добавить("Справочник.ПравилаПроверкиУчета"); + Блокировка.Заблокировать(); + + ОбновитьВспомогательныеДанныеСправочникаПоИзменениямКонфигурации(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +Функция ЕстьИзмененияПараметровПроверокУчета() Экспорт + + УстановитьПривилегированныйРежим(Истина); + ПоследниеИзменения = СтандартныеПодсистемыСервер.ИзмененияПараметраРаботыПрограммы( + "СтандартныеПодсистемы.КонтрольВеденияУчета.СистемныеПроверки"); + Возврат ПоследниеИзменения = Неопределено Или ПоследниеИзменения.Количество() > 0; + +КонецФункции + Процедура ДобавитьГруппыПроверок(ГруппыПроверок) Для Каждого ГруппаПроверок Из ГруппыПроверок Цикл @@ -1362,9 +988,10 @@ Процедура ОбновитьВспомогательныеДанныеСправочникаПоИзменениямКонфигурации() УстановитьПривилегированныйРежим(Истина); - ПроверкиВеденияУчета = КонтрольВеденияУчетаСлужебныйПовтИсп.ПроверкиВеденияУчета(); - ОбновлениеСправочникаПроверок(ПроверкиВеденияУчета.ГруппыПроверок, ПроверкиВеденияУчета.Проверки); + ПроверкаУникальностиЗаданныхЭлементов(ПроверкиВеденияУчета.ГруппыПроверок, ПроверкиВеденияУчета.Проверки); + ДобавитьГруппыПроверок(ПроверкиВеденияУчета.ГруппыПроверок); + ДобавитьПроверки(ПроверкиВеденияУчета.Проверки); КонецПроцедуры @@ -1461,7 +1088,7 @@ КонецПроцедуры -// Функция формирует хэш таблицы проверок, для сравнения с предыдущим хешем, +// Формирует хэш таблицы проверок, для сравнения с предыдущим хешем, // хранящимся в информационной базе (РегистрСведений.ПараметрыРаботыПрограммы). // Хэш формируется следующим образом: Формируются таблицы проверок (будущие элементы справочника // ПравилаПроверкиУчета) и групп проверок (будущие группы указанного справочника) на текущий @@ -1469,11 +1096,11 @@ // которого рассчитывается фиксированное соответствие, от которого, в свою очередь, рассчитывается хэш-сумма. // // Возвращаемое значение: -// ФиксированноеСоответствие - Фиксированное соответствие, содержащее указанную хэш-сумму. +// ФиксированноеСоответствие - хэш-сумма. // -Функция ХэшированиеСистемныхПроверок() +Функция ХэшПроверок() - ДанныеСистемныхПроверок = Новый Соответствие; + ДанныеПроверок = Новый Соответствие; ПроверкиВеденияУчета = КонтрольВеденияУчетаСлужебныйПовтИсп.ПроверкиВеденияУчета(); МассивХэша = Новый Массив; @@ -1499,14 +1126,583 @@ КонецЦикла; - ДанныеСистемныхПроверок.Вставить(ОбщегоНазначения.КонтрольнаяСуммаСтрокой(Новый ФиксированныйМассив(МассивХэша))); + ДанныеПроверок.Вставить(ОбщегоНазначения.КонтрольнаяСуммаСтрокой(Новый ФиксированныйМассив(МассивХэша))); - Возврат Новый ФиксированноеСоответствие(ДанныеСистемныхПроверок); + Возврат Новый ФиксированноеСоответствие(ДанныеПроверок); КонецФункции #КонецОбласти +#Область ПоставляемыеПроверки + +// Исполняет проверку ссылочной целостности. +// +Процедура ПроверитьСсылочнуюЦелостность(Проверка, ПараметрыПроверки) Экспорт + + Если ОбщегоНазначения.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + КэшБитыхСсылок = Новый Соответствие; + ПараметрыПроверки.Вставить("КэшСсылок", Новый Соответствие); + + Для Каждого ВидМетаданных Из СсылочныеВидыОбъектовМетаданных() Цикл + Для Каждого ОбъектМетаданных Из ВидМетаданных Цикл + НайтиБитыеСсылки(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок); + КонецЦикла; + КонецЦикла; + + Для Каждого ВидМетаданных Из РегистрыКакОбъектыМетаданных() Цикл + Для Каждого ОбъектМетаданных Из ВидМетаданных Цикл + НайтиБитыеСсылкиВРегистрах(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок); + КонецЦикла; + КонецЦикла; + ПараметрыПроверки.Удалить("КэшСсылок"); + +КонецПроцедуры + +// Исполняет проверку заполненности обязательных реквизитов. +// +Процедура ПроверитьНезаполненныеОбязательныеРеквизиты(Проверка, ПараметрыПроверки) Экспорт + + Для Каждого ВидМетаданных Из СсылочныеВидыОбъектовМетаданных() Цикл + + Для Каждого ОбъектМетаданных Из ВидМетаданных Цикл + Если ЭтоНеразделенныйОбъектМетаданных(ОбъектМетаданных.ПолноеИмя()) Тогда + Продолжить; + КонецЕсли; + Если Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(ОбъектМетаданных) Тогда + Продолжить; + КонецЕсли; + НайтиНезаполненныеОбязательныеРеквизиты(ОбъектМетаданных, ПараметрыПроверки); + КонецЦикла; + + КонецЦикла; + + Для Каждого ВидМетаданных Из РегистрыКакОбъектыМетаданных() Цикл + Для Каждого ОбъектМетаданных Из ВидМетаданных Цикл + Если ЭтоНеразделенныйОбъектМетаданных(ОбъектМетаданных.ПолноеИмя()) Тогда + Продолжить; + КонецЕсли; + Если Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(ОбъектМетаданных) Тогда + Продолжить; + КонецЕсли; + НайтиНезаполненныеОбязательныеРеквизитыВРегистрах(ОбъектМетаданных, ПараметрыПроверки); + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + +// Исполняет проверку наличия циклических ссылок. +// +Процедура ПроверитьЦиклическиеСсылки(Проверка, ПараметрыПроверки) Экспорт + + Для Каждого ВидМетаданных Из СсылочныеВидыОбъектовМетаданных() Цикл + Для Каждого ОбъектМетаданных Из ВидМетаданных Цикл + Если ЭтоНеразделенныйОбъектМетаданных(ОбъектМетаданных.ПолноеИмя()) Тогда + Продолжить; + КонецЕсли; + Если Не ЕстьИерархия(ОбъектМетаданных.СтандартныеРеквизиты) Тогда + Продолжить; + КонецЕсли; + НайтиЦиклическиеСсылки(ОбъектМетаданных, ПараметрыПроверки); + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + +Процедура ИсправитьПроблемуЦиклическихСсылокВФоновомЗадании(Знач ПараметрыПроверки, АдресХранилища = Неопределено) Экспорт + + Проверка = ПроверкаПоИдентификатору(ПараметрыПроверки.ИдентификаторПроверки); + Если Не ЗначениеЗаполнено(Проверка) Тогда + Возврат; + КонецЕсли; + + ИсправитьПроблемуЦиклическихСсылок(Проверка); + +КонецПроцедуры + +// Исполняет проверку наличия отсутствующих предопределенных элементов. +// +Процедура ПроверитьОтсутствующиеПредопределенныеЭлементы(Проверка, ПараметрыПроверки) Экспорт + + Если ОбщегоНазначения.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + // Сброс кэша перед вызовом функции ОбщегоНазначенияКлиентСервер.ПредопределенныйЭлемент. + ОбновитьПовторноИспользуемыеЗначения(); + + ВидыОбъектовМетаданных = Новый Массив; + ВидыОбъектовМетаданных.Добавить(Метаданные.Справочники); + ВидыОбъектовМетаданных.Добавить(Метаданные.ПланыВидовХарактеристик); + ВидыОбъектовМетаданных.Добавить(Метаданные.ПланыСчетов); + ВидыОбъектовМетаданных.Добавить(Метаданные.ПланыВидовРасчета); + + Для Каждого ВидМетаданных Из ВидыОбъектовМетаданных Цикл + Для Каждого ОбъектМетаданных Из ВидМетаданных Цикл + Если ОбъектМетаданных.ОбновлениеПредопределенныхДанных = Метаданные.СвойстваОбъектов.ОбновлениеПредопределенныхДанных.НеОбновлятьАвтоматически Тогда + Продолжить; + КонецЕсли; + НайтиОтсутствующиеПредопределенныеЭлементы(ОбъектМетаданных, ПараметрыПроверки); + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + +// Исполняет проверку наличия дублирующихся предопределенных элементов. +// +Процедура ПроверитьДублированиеПредопределенныхЭлементов(Проверка, ПараметрыПроверки) Экспорт + + Если ОбщегоНазначения.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + ВидыОбъектовМетаданных = Новый Массив; + ВидыОбъектовМетаданных.Добавить(Метаданные.Справочники); + ВидыОбъектовМетаданных.Добавить(Метаданные.ПланыВидовХарактеристик); + ВидыОбъектовМетаданных.Добавить(Метаданные.ПланыСчетов); + ВидыОбъектовМетаданных.Добавить(Метаданные.ПланыВидовРасчета); + + Для Каждого ВидМетаданных Из ВидыОбъектовМетаданных Цикл + + Если ВидМетаданных.Количество() = 0 Тогда + Продолжить; + КонецЕсли; + + НайтиДублиПредопределенныхЭлементов(ВидМетаданных, ПараметрыПроверки); + + КонецЦикла; + +КонецПроцедуры + +// Исполняет проверку отсутствующих предопределенных узлов плана обмена. +// +Процедура ПроверитьНаличиеПредопределенныхУзловПлановОбмена(Проверка, ПараметрыПроверки) Экспорт + + Если ОбщегоНазначения.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + МетаданныеПланыОбмена = Метаданные.ПланыОбмена; + Для Каждого МетаданныеПланОбмена Из МетаданныеПланыОбмена Цикл + + Если ПланыОбмена[МетаданныеПланОбмена.Имя].ЭтотУзел() <> Неопределено Тогда + Продолжить; + КонецЕсли; + + Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(МетаданныеПланОбмена.ПолноеИмя()), ПараметрыПроверки); + Проблема.УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В плане обмена ""%1"" отсутствует предопределенный узел (ЭтотУзел() = Неопределено).'"), МетаданныеПланОбмена.Имя); + ЗаписатьПроблему(Проблема, ПараметрыПроверки); + + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область ПользовательскаяИндикацияОшибок + +// Размещает группу индикатора ошибок на управляемой форме. +// +// Параметры: +// УправляемаяФорма - УправляемаяФорма - Форма объекта на которой нужно разместить группу индикатора. +// КлючУникальностиИмен - Строка - Строковый ключ уникальности добавляемых элементов на форму. Нужен для +// минимизации рисков пересечения с уже существующими элементами. +// ИмяРодителяГруппы - Строка, Неопределено - Строковое имя группы формы в контексте которой +// требуется разместить группу индикатора. Если неопределено, то в качестве +// контекста выступает управляемая форма. Если на форме не находится такого +// элемента генерируется исключение. +// ВыводитьСнизу - Булево - Определяет местоположение добавляемой группы, +// сигнализирующей об ошибке Если принимает значение "Истина", +// то группа будет добавлена в конец коллекции подчиненных +// элементов группы родителя. В противном случае группа будет +// расположена сразу за основной командной панелью формы объекта. +// +Функция РазместитьГруппуИндикатораОшибки(УправляемаяФорма, КлючУникальностиИмен, ИмяРодителяГруппы = Неопределено, ВыводитьСнизу = Ложь) Экспорт + + ВсеЭлементыФормы = УправляемаяФорма.Элементы; + + Если ИмяРодителяГруппы = Неопределено Тогда + КонтекстРазмещения = УправляемаяФорма; + Иначе + РодительГруппы = ВсеЭлементыФормы.Найти(ИмяРодителяГруппы); + Если РодительГруппы = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не найдена группа формы: ""%1""'"), ИмяРодителяГруппы); + Иначе + КонтекстРазмещения = РодительГруппы; + КонецЕсли; + КонецЕсли; + + ГруппаИндикатораОшибки = ВсеЭлементыФормы.Добавить("ГруппаИндикатораОшибки_" + КлючУникальностиИмен, Тип("ГруппаФормы"), КонтекстРазмещения); + ГруппаИндикатораОшибки.Вид = ВидГруппыФормы.ОбычнаяГруппа; + ГруппаИндикатораОшибки.ОтображатьЗаголовок = Ложь; + ГруппаИндикатораОшибки.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; + ГруппаИндикатораОшибки.РастягиватьПоГоризонтали = Истина; + ГруппаИндикатораОшибки.ЦветФона = ЦветаСтиля.ФонУправляющегоПоля; + + ПодчиненныеЭлементыКонтекста = КонтекстРазмещения.ПодчиненныеЭлементы; + Если ВыводитьСнизу Тогда + ВсеЭлементыФормы.Переместить(ГруппаИндикатораОшибки, КонтекстРазмещения); + Иначе + Если ПодчиненныеЭлементыКонтекста.Количество() > 0 Тогда + ВсеЭлементыФормы.Переместить(ГруппаИндикатораОшибки, КонтекстРазмещения, ПодчиненныеЭлементыКонтекста.Получить(0)); + КонецЕсли; + КонецЕсли; + + Возврат ГруппаИндикатораОшибки; + +КонецФункции + +// Заполняет размещенную ранее группу индикатора ошибок элементами +// идентифицирующими наличие ошибок и позволяющими перейти к отчету по этим ошибкам. +// +// Параметры +// УправляемаяФорма - УправляемаяФорма - Форма объекта на которой расположена группа индикатора. +// ГруппаИндикатораОшибки - ГруппаФормы - Группа управляемой формы на которой будут располагаться +// элементы-декорации, которые будут идентифицировать наличие ошибок с возможностью +// перехода к отчету. +// КлючУникальностиИмен - Строка - Строковый ключ уникальности добавляемых элементов на форму. Нужен для +// минимизации рисков пересечения с уже существующими элементами. +// КартинкаИндикатораПроблем - Картинка, Неопределено - Картинка идентифицирующая наличие проблем у текущего объекта. +// Может быть переопределена конечным разработчиком - достаточно добавить параметр при вызове. +// ОбщаяСтрокаИндикатор - ФорматированнаяСтрока - Общая строка-индикатор наличия ошибок. Состоит из +// поясняющего текста и гиперссылки открывающей отчет по проблемам объекта.. +// +Процедура ЗаполнитьГруппуИндикатораОшибки(УправляемаяФорма, ГруппаИндикатораОшибки, КлючУникальностиИмен, + ОбщаяСтрокаИндикатор, КартинкаИндикатораПроблем = Неопределено) Экспорт + + ЭлементыУправляемойФормы = УправляемаяФорма.Элементы; + + КартинкаИндикаторОшибки = ЭлементыУправляемойФормы.Добавить("ДекорацияКартинка_" + КлючУникальностиИмен, Тип("ДекорацияФормы"), ГруппаИндикатораОшибки); + КартинкаИндикаторОшибки.Вид = ВидДекорацииФормы.Картинка; + КартинкаИндикаторОшибки.Картинка = ?(КартинкаИндикатораПроблем = Неопределено, БиблиотекаКартинок.Предупреждение, КартинкаИндикатораПроблем); + КартинкаИндикаторОшибки.РазмерКартинки = РазмерКартинки.РеальныйРазмер; + + ДекорацияНадпись = ЭлементыУправляемойФормы.Добавить("ДекорацияНадпись_" + КлючУникальностиИмен, Тип("ДекорацияФормы"), ГруппаИндикатораОшибки); + ДекорацияНадпись.Вид = ВидДекорацииФормы.Надпись; + ДекорацияНадпись.Заголовок = ОбщаяСтрокаИндикатор; + ДекорацияНадпись.ВертикальноеПоложение = ВертикальноеПоложениеЭлемента.Центр; + ДекорацияНадпись.УстановитьДействие("ОбработкаНавигационнойСсылки", "Подключаемый_ОткрытьОтчетПоПроблемам"); + +КонецПроцедуры + +// Формирует общую строку-индикатор наличия ошибок. Состоит из поясняющего текста и +// гиперссылки открывающей отчет по проблемам объекта. +// +// Параметры +// УправляемаяФорма - УправляемаяФорма - Форма объекта на которой расположена группа индикатора. +// СсылкаНаОбъект - ЛюбаяСсылка - Ссылка на объект по которому найдены ошибки. +// КоличествоПроблемПоОбъекту - Число - Найденное количество проблем по объекту. +// ПояснениеИндикатораПроблем - Строка, Неопределено - Строка идентифицирующая наличие проблем у текущего объекта. +// Может быть переопределена конечным разработчиком - достаточно добавить параметр при вызове. +// ГиперссылкаИндикатораПроблем - Строка, Неопределено - Строка представляющая гиперссылку, при нажатии +// на которую будет открыт и сформирован отчет по проблемам текущего объекта. +// +Функция СформироватьОбщуюСтрокуИндикатор(УправляемаяФорма, СсылкаНаОбъект, КоличествоПроблемПоОбъекту, + ПояснениеИндикатораПроблем = Неопределено, ГиперссылкаИндикатораПроблем = Неопределено) Экспорт + + ТекстоваяСсылка = "Основной"; + + Если ПояснениеИндикатораПроблем <> Неопределено Тогда + ПоясняющаяНадпись = ПояснениеИндикатораПроблем + Иначе + ПоясняющаяНадпись = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'С этим %1'"), ПредставлениеОбъектаПоТипу(СсылкаНаОбъект)); + КонецЕсли; + + Если ГиперссылкаИндикатораПроблем <> Неопределено Тогда + Гиперссылка = ГиперссылкаИндикатораПроблем; + Иначе + Гиперссылка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='есть проблемы (%1)'"), Формат(КоличествоПроблемПоОбъекту, "ЧГ=0")); + КонецЕсли; + + Возврат Новый ФорматированнаяСтрока(ПоясняющаяНадпись + " ", Новый ФорматированнаяСтрока(Гиперссылка, , , , ТекстоваяСсылка)); + +КонецФункции + +// См. КонтрольВеденияУчетаПереопределяемый.ПриОпределенииПараметровГруппыИндикации. +Процедура ПриОпределенииПараметровГруппыИндикации(ПараметрыГруппыИндикации, ТипСсылки) Экспорт + + ПараметрыГруппыИндикации.Вставить("ИмяРодителяГруппы", Неопределено); + ПараметрыГруппыИндикации.Вставить("ВыводитьСнизу", Ложь); + +КонецПроцедуры + +// См. КонтрольВеденияУчетаПереопределяемый.ПриОпределенииПараметровКолонкиИндикации. +Процедура ПриОпределенииПараметровКолонкиИндикации(ПараметрыКолонкиИндикации, ПолноеИмя) Экспорт + + ПараметрыКолонкиИндикации.Вставить("ПоложениеЗаголовка", ПоложениеЗаголовкаЭлементаФормы.Нет); + ПараметрыКолонкиИндикации.Вставить("Ширина", 2); + ПараметрыКолонкиИндикации.Вставить("ВыводитьПоследней", Ложь); + +КонецПроцедуры + +#КонецОбласти + +#Область ВыполнениеПроверок + +// См. КонтрольВеденияУчета.ВыполнитьПроверку. +Процедура ВыполнитьПроверку(Проверка, ПараметрыВыполненияПроверки = Неопределено) Экспорт + + Если ТипЗнч(Проверка) = Тип("Строка") Тогда + ВыполняемаяПроверка = КонтрольВеденияУчета.ПроверкаПоИдентификатору(Проверка); + Иначе + ВыполняемаяПроверка = Проверка; + КонецЕсли; + + Если Не ОбновлениеИнформационнойБазы.ОбъектОбработан(ВыполняемаяПроверка).Обработан Тогда + Возврат; + КонецЕсли; + + ЗаданыПараметрыВыполненияПроверки = ПараметрыВыполненияПроверки <> Неопределено; + ПараметрыПроверки = ПодготовитьПараметрыПроверки(ВыполняемаяПроверка, ПараметрыВыполненияПроверки); + Если ПроверкаУжеВыполняется(ПараметрыПроверки.ИдентификаторРегламентногоЗадания) Тогда + Возврат; + КонецЕсли; + + ПроверкиВеденияУчета = КонтрольВеденияУчетаСлужебныйПовтИсп.ПроверкиВеденияУчета(); + Проверки = ПроверкиВеденияУчета.Проверки; + СтрокаПроверки = Проверки.Найти(ПараметрыПроверки.Идентификатор, "Идентификатор"); + Если СтрокаПроверки = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Проверка ведения учета с идентификатором ""%1"" не существует (см. КонтрольВеденияУчетаПереопределяемый.ПриОпределенииПроверок)'"), + ПараметрыПроверки.Идентификатор); + КонецЕсли; + + Если СтрокаПроверки.БезОбработчикаПроверки Тогда + Возврат; + КонецЕсли; + + Если Не ЗаданыПараметрыВыполненияПроверки Тогда + ОчиститьРезультатыПредыдущихПроверок(ВыполняемаяПроверка, ПараметрыПроверки.ПараметрыВыполненияПроверки); + КонецЕсли; + + МодульОценкаПроизводительности = Неопределено; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности") Тогда + МодульОценкаПроизводительности = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительности"); + ОписаниеЗамера = МодульОценкаПроизводительности.НачатьЗамерДлительнойОперации(ПараметрыПроверки.Идентификатор); + КонецЕсли; + + ПараметрыОбработчика = Новый Массив; + ПараметрыОбработчика.Добавить(ВыполняемаяПроверка); + ПараметрыОбработчика.Добавить(ПараметрыПроверки); + ОбщегоНазначения.ВыполнитьМетодКонфигурации(СтрокаПроверки.ОбработчикПроверки, ПараметрыОбработчика); + + Если МодульОценкаПроизводительности <> Неопределено Тогда + МодульОценкаПроизводительности.ЗакончитьЗамерДлительнойОперации(ОписаниеЗамера, 0); + КонецЕсли; + +КонецПроцедуры + +// Обработчик регламентного задания "ПроверкаВеденияУчета". Предназначен для обработки +// фонового запуска проверок системы. +// +// Параметры: +// ИдентификаторРегламентногоЗадания - Строка, Неопределено - Строковый идентификатор регламентного задания. +// +Процедура ПроверитьВедениеУчета(ИдентификаторРегламентногоЗадания = Неопределено) Экспорт + + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.ПроверкаВеденияУчета); + + Если ИдентификаторРегламентногоЗадания <> Неопределено Тогда + + ПараметрыПроверки = ПараметрыПроверкиПоИдентификаторуРегламентногоЗадания(ИдентификаторРегламентногоЗадания); + Если ПараметрыПроверки <> Неопределено Тогда + ВыполнитьПроверку(ПараметрыПроверки.Идентификатор); + КонецЕсли; + + Иначе + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ПравилаПроверкиУчета.Идентификатор КАК Идентификатор + |ИЗ + | Справочник.ПравилаПроверкиУчета КАК ПравилаПроверкиУчета + |ГДЕ + | ПравилаПроверкиУчета.СпособВыполнения = ЗНАЧЕНИЕ(Перечисление.СпособВыполненияПроверки.ПоОбщемуРасписанию) + | И ПравилаПроверкиУчета.Использование"); + + Результат = Запрос.Выполнить().Выбрать(); + Пока Результат.Следующий() Цикл + ВыполнитьПроверку(Результат.Идентификатор); + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры + +// Выполняет несколько проверок по переданным параметрам. +// +// Параметры: +// ПараметрыПроверки - Массив - элементы типа Структура, см. параметр +// ПараметрыПроверки в КонтрольВеденияУчета.ОписаниеПроблемы +// АдресХранилища - Строка - Адрес во временном хранилище для размещения результата. +// +Процедура ВыполнитьПроверкиВФоновомЗадании(Знач ПараметрыПроверки, АдресХранилища = Неопределено) Экспорт + + МассивПараметров = ПараметрыПроверки.МассивПараметров; + Для Каждого ПараметрыПроверки Из МассивПараметров Цикл + ВыполнитьПроверку(ПараметрыПроверки.Идентификатор); + КонецЦикла; + +КонецПроцедуры + +// См. КонтрольВеденияУчетаПереопределяемый.ПроверкаПоИдентификатору. +Функция ПроверкаПоИдентификатору(Идентификатор) Экспорт + + Запрос = Новый Запрос( + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ПравилаПроверкиУчета.Ссылка КАК Проверка + |ИЗ + | Справочник.ПравилаПроверкиУчета КАК ПравилаПроверкиУчета + |ГДЕ + | ПравилаПроверкиУчета.Идентификатор = &Идентификатор + | И НЕ ПравилаПроверкиУчета.ПометкаУдаления"); + + Запрос.УстановитьПараметр("Идентификатор", Идентификатор); + Результат = Запрос.Выполнить().Выбрать(); + + Если Не Результат.Следующий() Тогда + Возврат Справочники.ПравилаПроверкиУчета.ПустаяСсылка(); + Иначе + Возврат Результат.Проверка; + КонецЕсли; + +КонецФункции + +// См. КонтрольВеденияУчетаПереопределяемый.ВыполнитьПроверкиВКонтексте. +Функция ПроверкиПоКонтексту(КонтекстПроверокВеденияУчета) Экспорт + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ""ВыборкаЭлементовБезРодителейСУчетомКонтекста"" КАК НазначениеЗапроса, + | ЗНАЧЕНИЕ(Справочник.ПравилаПроверкиУчета.ПустаяСсылка) КАК Родитель, + | ПравилаПроверкиУчета.Ссылка КАК Проверка + |ИЗ + | Справочник.ПравилаПроверкиУчета КАК ПравилаПроверкиУчета + |ГДЕ + | НЕ ПравилаПроверкиУчета.ЭтоГруппа + | И ПравилаПроверкиУчета.Использование + | И ПравилаПроверкиУчета.Родитель = ЗНАЧЕНИЕ(Справочник.ПравилаПроверкиУчета.ПустаяСсылка) + | И ПравилаПроверкиУчета.КонтекстПроверокВеденияУчета = &КонтекстПроверокВеденияУчета + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ""ВыборкаГруппСУчетомКонтекста"", + | ПравилаПроверкиУчета.Родитель, + | ПравилаПроверкиУчета.Ссылка + |ИЗ + | Справочник.ПравилаПроверкиУчета КАК ПравилаПроверкиУчета + |ГДЕ + | ПравилаПроверкиУчета.ЭтоГруппа + | И ПравилаПроверкиУчета.КонтекстПроверокВеденияУчета = &КонтекстПроверокВеденияУчета + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ""ВыборкаЭлементовСРодителямиБезУчетаКонтекста"", + | ПравилаПроверкиУчета.Родитель, + | ПравилаПроверкиУчета.Ссылка + |ИЗ + | Справочник.ПравилаПроверкиУчета КАК ПравилаПроверкиУчета + |ГДЕ + | НЕ ПравилаПроверкиУчета.ЭтоГруппа + | И ПравилаПроверкиУчета.Использование + | И ПравилаПроверкиУчета.Родитель <> ЗНАЧЕНИЕ(Справочник.ПравилаПроверкиУчета.ПустаяСсылка)"); + + Запрос.УстановитьПараметр("КонтекстПроверокВеденияУчета", КонтекстПроверокВеденияУчета); + Результат = Запрос.Выполнить().Выгрузить(); + + МассивПроверок = Новый Массив; + ЦелевыеРодители = Результат.Скопировать(Результат.НайтиСтроки(Новый Структура("НазначениеЗапроса", "ВыборкаГруппСУчетомКонтекста")), "Родитель, Проверка"); + + Для Каждого СтрокаРезультата Из Результат Цикл + + Если СтрокаРезультата.НазначениеЗапроса = "ВыборкаЭлементовБезРодителейСУчетомКонтекста" + Или (СтрокаРезультата.НазначениеЗапроса = "ВыборкаЭлементовСРодителямиБезУчетаКонтекста" + И ЦелевыеРодители.Найти(СтрокаРезультата.Родитель) <> Неопределено) Тогда + МассивПроверок.Добавить(СтрокаРезультата.Проверка); + КонецЕсли; + + КонецЦикла; + + Возврат ОбщегоНазначенияКлиентСервер.СвернутьМассив(МассивПроверок); + +КонецФункции + +// См. КонтрольВеденияУчета.ПараметрыВыполненияПроверки. +Функция ПараметрыВыполненияПроверки(Знач Свойство1, Знач Свойство2 = Неопределено, Знач Свойство3 = Неопределено, + Знач Свойство4 = Неопределено, Знач Свойство5 = Неопределено, Знач ДополнительныеСвойства = Неопределено) Экспорт + + КоличествоСвойств = КоличествоСвойств(); + НайденКрайнийЗначащийПараметр = Ложь; + + Для Индекс = 2 По КоличествоСвойств Цикл + ЗначениеПараметра = Вычислить("Свойство" + Формат(Индекс, "ЧГ=0")); + Если ЗначениеПараметра = Неопределено Тогда + Если Не НайденКрайнийЗначащийПараметр Тогда + НайденКрайнийЗначащийПараметр = Истина; + КонецЕсли; + Иначе + Если НайденКрайнийЗначащийПараметр Тогда + ВызватьИсключение НСтр("ru = 'Параметры выполнения проверки заданы не по порядку в КонтрольВеденияУчета.ПараметрыВыполненияПроверки.'"); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Если ДополнительныеСвойства <> Неопределено И Свойство5 = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Параметры выполнения проверки заданы не по порядку в КонтрольВеденияУчета.ПараметрыВыполненияПроверки.'"); + КонецЕсли; + + ВсеПараметры = Новый Массив; + ВсеПараметры.Добавить(Свойство1); + Для Индекс = 2 По КоличествоСвойств Цикл + + ИмяСвойства = "Свойство" + Формат(Индекс, "ЧГ=0"); + ЗначениеСвойства = Вычислить(ИмяСвойства); + Если ЗначениеСвойства = Неопределено Тогда + Прервать; + КонецЕсли; + ВсеПараметры.Добавить(ЗначениеСвойства); + + КонецЦикла; + + Если ДополнительныеСвойства <> Неопределено Тогда + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ВсеПараметры, ДополнительныеСвойства); + КонецЕсли; + + Возврат ПараметрыВыполненияПроверкиИзМассива(ВсеПараметры); + +КонецФункции + +Функция ПараметрыВыполненияПроверкиИзМассива(Знач Параметры) + + НаименованиеВидаПроверки = ""; + Индекс = 1; + Результат = Новый Структура; + + Для Каждого ТекущийПараметр Из Параметры Цикл + + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("КонтрольВеденияУчета.ПараметрыВыполненияПроверки", + "Свойство" + Формат(Индекс, "ЧГ=0"), ТекущийПараметр, ОжидаемыеТипыСвойствВидовПроверок()); + + НаименованиеВидаПроверки = НаименованиеВидаПроверки + ?(ЗначениеЗаполнено(НаименованиеВидаПроверки), ", ", "") + + Формат(ТекущийПараметр, "ДЛФ=Д; ЧГ=0"); + Результат.Вставить("Свойство" + Формат(Параметры.Найти(ТекущийПараметр) + 1, "ЧГ=0"), ТекущийПараметр); + + Индекс = Индекс + 1; + + КонецЦикла; + + Результат.Вставить("Наименование", НаименованиеВидаПроверки); + Возврат Результат; + +КонецФункции + +#КонецОбласти + #Область КонтрольСсылочнойЦелостности Процедура НайтиБитыеСсылки(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок) @@ -1554,6 +1750,7 @@ Для Каждого СсылочныйРеквизит Из Ссылки Цикл ТекущаяСсылка = СсылочныйРеквизит.Значение; + Если Не ЗначениеЗаполнено(ТекущаяСсылка) Или Не ОбщегоНазначения.ЗначениеСсылочногоТипа(ТекущаяСсылка) Тогда Продолжить; КонецЕсли; @@ -1571,7 +1768,7 @@ Если ОбнаруженаБитаяСсылка Тогда УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='У объекта ""%1"" в реквизите ""%2"" указан несуществующий элемент: ""%3"".'"), + НСтр("ru='У объекта ""%1"" в реквизите ""%2"" указана ссылка на несуществующий элемент: ""%3"".'"), СсылкаНаОбъект, СсылочныйРеквизит.Ключ, ТекущаяСсылка); Иначе Если ПараметрыПроверки.КэшСсылок.Количество() = РазмерКэшаПроверенныхСсылок Тогда @@ -1579,9 +1776,9 @@ КонецЕсли; ПараметрыПроверки.КэшСсылок.Вставить(ТекущаяСсылка, ""); КонецЕсли; - + КонецЦикла; - + Если РеквизитыТабличныхЧастейОбъекта.Количество() <> 0 Тогда РезультатыЗапросовПоРеквизитамТЧ = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СсылкаНаОбъект, РеквизитыТабличныхЧастейОбъекта); @@ -1610,7 +1807,7 @@ Если ОбнаруженаБитаяСсылка Тогда УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'У объекта ""%1"" в реквизите ""%2"" табличной части ""%3"" (строка № %4) указан несуществующий элемент: ""%5"".'"), + НСтр("ru = 'У объекта ""%1"" в реквизите ""%2"" табличной части ""%3"" (строка № %4) указана ссылка на несуществующий элемент: ""%5"".'"), СсылкаНаОбъект, ИмяРеквизитаТЧ, СтрЗаменить(РезультатЗапросаПоРеквизитамТЧ.Ключ, ИмяРеквизитаТЧ, ""), ТекущийНомерСтроки, ТекущаяСсылка); Иначе @@ -1707,19 +1904,6 @@ КонецФункции -Функция СодержитСсылочныйТип(Реквизит) - - ТипыРеквизита = Реквизит.Тип.Типы(); - Для Каждого ТекущийТип Из ТипыРеквизита Цикл - Если ОбщегоНазначения.ЭтоСсылка(ТекущийТип) Тогда - Возврат Истина; - КонецЕсли; - КонецЦикла; - - Возврат Ложь; - -КонецФункции - #Область КонтрольСсылочнойЦелостностиВРегистрах Процедура НайтиБитыеСсылкиВРегистрах(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок) @@ -1733,111 +1917,77 @@ ИначеЕсли ОбщегоНазначения.ЭтоРегистрСведений(ОбъектМетаданных) Тогда НайтиБитыеСсылкиВРегистрахСведений(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок); ИначеЕсли ОбщегоНазначения.ЭтоРегистрБухгалтерии(ОбъектМетаданных) Тогда - НайтиБитыеСсылкиВРегистрахБухгалтерии(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок); + НайтиБитыеСсылкиВРегистрахБухгалтерии(ОбъектМетаданных, ПараметрыПроверки, ВидыСубконто(ОбъектМетаданных), КэшБитыхСсылок); ИначеЕсли ОбщегоНазначения.ЭтоРегистрРасчета(ОбъектМетаданных) Тогда НайтиБитыеСсылкиВРегистрахРасчета(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок); КонецЕсли; КонецПроцедуры -#Область КонтрольСсылочнойЦелостностиВРегистрахНакопления - Процедура НайтиБитыеСсылкиВРегистрахНакопления(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок) РазмерКэшаПроверенныхСсылок = РазмерКэшаПроверенныхСсылок(); - ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); - Измерения = ОбъектМетаданных.Измерения; - Реквизиты = ОбъектМетаданных.Реквизиты; - ИнформацияОМетаданных = Новый ТаблицаЗначений; - ИнформацияОМетаданных.Колонки.Добавить("ТипМетаданныхВИменительномПадеже", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(16))); - ИнформацияОМетаданных.Колонки.Добавить("ТипМетаданныхВТворительномПадеже", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(16))); - ИнформацияОМетаданных.Колонки.Добавить("ИмяМетаданных", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(128))); - - ПоляВыборки = "НомерСтроки Как НомерСтроки, Регистратор Как РегистраторРеквизитСсылка, ПредставлениеСсылки(Регистратор) Как РегистраторРеквизитПредставление"; - ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), - Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "Реквизит", НСтр("ru = 'реквизите'"), "Регистратор")); - Для Каждого Измерение Из Измерения Цикл - ИмяИзмерения = Измерение.Имя; - ПоляВыборки = ПоляВыборки + "," + ИмяИзмерения + " Как " + ИмяИзмерения - + "ИзмерениеСсылка,ПредставлениеСсылки(" + ИмяИзмерения + ") Как " + ИмяИзмерения + "ИзмерениеПредставление"; - ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), - Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "Измерение", НСтр("ru = 'измерении'"), ИмяИзмерения)); - КонецЦикла; - Для Каждого Реквизит Из Реквизиты Цикл - ИмяРеквизита = Реквизит.Имя; - ПоляВыборки = ПоляВыборки + "," + ИмяРеквизита + " Как " + ИмяРеквизита - + "РеквизитСсылка,ПредставлениеСсылки(" + ИмяРеквизита + ") Как " + ИмяРеквизита + "РеквизитПредставление"; - ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), - Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "Реквизит", НСтр("ru = 'реквизите'"), ИмяРеквизита)); - КонецЦикла; + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + РеквизитыРегистра = СсылочныеРеквизитыРегистра(ОбъектМетаданных); ТекстЗапроса = "ВЫБРАТЬ ПЕРВЫЕ 1000 - | &ПоляВыборки КАК ПоляВыборки + | ОбъектМетаданных.Регистратор КАК РегистраторРеквизитСсылка, + | ПРЕДСТАВЛЕНИЕССЫЛКИ(ОбъектМетаданных.Регистратор) КАК РегистраторПредставление, + | ОбъектМетаданных.Период КАК Период |ИЗ | &ОбъектМетаданных КАК ОбъектМетаданных |ГДЕ - | ВЫБОР - | КОГДА ОбъектМетаданных.Регистратор = &Регистратор - | ТОГДА ОбъектМетаданных.НомерСтроки > &НомерСтроки - | ИНАЧЕ ОбъектМетаданных.Регистратор > &Регистратор - | КОНЕЦ - | И ОбъектМетаданных.Период > &ДатаНачалаПроверки + | ОбъектМетаданных.Период > &ДатаНачалаПроверки + | + |СГРУППИРОВАТЬ ПО + | ОбъектМетаданных.Период, + | ОбъектМетаданных.Регистратор | |УПОРЯДОЧИТЬ ПО - | ОбъектМетаданных.Регистратор, - | ОбъектМетаданных.НомерСтроки"; + | ОбъектМетаданных.Период"; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "КАК ПоляВыборки", ""); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОбъектМетаданных", ПолноеИмя); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПоляВыборки", ПоляВыборки); Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("НомерСтроки", 0); Запрос.УстановитьПараметр("ДатаНачалаПроверки", ПараметрыПроверки.ДатаНачалаПроверки); - Запрос.УстановитьПараметр("Регистратор", ""); - Результат = Запрос.Выполнить().Выгрузить(); - Пока Истина Цикл - - Если Результат.Количество() = 0 Тогда - Прервать; - КонецЕсли; + МенеджерРегистра = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя); + + Пока Результат.Количество() > 0 Цикл Для Каждого СтрокаРезультата Из Результат Цикл - Для Каждого ПодчиненныйОбъект Из ИнформацияОМетаданных Цикл + ТекущийНаборЗаписей = МенеджерРегистра.СоздатьНаборЗаписей(); + ТекущийНаборЗаписей.Отбор.Регистратор.Установить(СтрокаРезультата.РегистраторРеквизитСсылка); + ТекущийНаборЗаписей.Прочитать(); + + НомераПроблемныхЗаписей = ""; + Для Каждого ТекущаяЗапись Из ТекущийНаборЗаписей Цикл - ТекущаяСсылка = СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Ссылка"]; - УточнениеПроблемы = ""; - - Если Не ОбщегоНазначения.ЗначениеСсылочногоТипа(ТекущаяСсылка) Или Не ЗначениеЗаполнено(ТекущаяСсылка) Тогда - Продолжить; - КонецЕсли; - - Если ПараметрыПроверки.КэшСсылок[ТекущаяСсылка] <> Неопределено Тогда - Продолжить; - КонецЕсли; - - Если КэшБитыхСсылок.Получить(ТекущаяСсылка) <> Неопределено Тогда + Для Каждого ИмяРеквизита Из РеквизитыРегистра Цикл - УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") - + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У регистра накопления ""%1"" в %2, записи №%3 по регистратору ""%4"" указан несуществующий элемент: ""%5"".'"), - ОбъектМетаданных.Представление(), ПодчиненныйОбъект.ТипМетаданныхВТворительномПадеже, - Формат(СтрокаРезультата.НомерСтроки, "ЧГ=0"), СтрокаРезультата["РегистраторРеквизитПредставление"], - СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Представление"]); - - Иначе + ТекущаяСсылка = ТекущаяЗапись[ИмяРеквизита]; - Если Не ОбщегоНазначения.СсылкаСуществует(ТекущаяСсылка) Тогда - УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") - + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У регистра накопления ""%1"" в %2, записи №%3 по регистратору ""%4"" указан несуществующий элемент: ""%5"".'"), - ОбъектМетаданных.Представление(), ПодчиненныйОбъект.ТипМетаданныхВТворительномПадеже, - Формат(СтрокаРезультата.НомерСтроки, "ЧГ=0"), СтрокаРезультата["РегистраторРеквизитПредставление"], - СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Представление"]); + Если Не ОбщегоНазначения.ЗначениеСсылочногоТипа(ТекущаяСсылка) Или Не ЗначениеЗаполнено(ТекущаяСсылка) Тогда + Продолжить; + КонецЕсли; + + Если ПараметрыПроверки.КэшСсылок[ТекущаяСсылка] <> Неопределено Тогда + Продолжить; + КонецЕсли; + + ОбнаруженаБитаяСсылка = КэшБитыхСсылок.Получить(ТекущаяСсылка) <> Неопределено; + Если Не ОбнаруженаБитаяСсылка И Не ОбщегоНазначения.СсылкаСуществует(ТекущаяСсылка) Тогда КэшБитыхСсылок.Вставить(ТекущаяСсылка, ""); + ОбнаруженаБитаяСсылка = Истина; + КонецЕсли; + + Если ОбнаруженаБитаяСсылка Тогда + НомераПроблемныхЗаписей = НомераПроблемныхЗаписей + ?(ЗначениеЗаполнено(НомераПроблемныхЗаписей), ", ", "") + + Формат(ТекущийНаборЗаписей.Индекс(ТекущаяЗапись) + 1, "ЧГ=0"); Иначе Если ПараметрыПроверки.КэшСсылок.Количество() = РазмерКэшаПроверенныхСсылок Тогда ПараметрыПроверки.КэшСсылок.Очистить(); @@ -1845,192 +1995,170 @@ ПараметрыПроверки.КэшСсылок.Вставить(ТекущаяСсылка, ""); КонецЕсли; - КонецЕсли; - - Если Не ЗначениеЗаполнено(УточнениеПроблемы) Тогда - Продолжить; - КонецЕсли; - - СтруктураНабораЗаписей = Новый Структура; - СтруктураНабораЗаписей.Вставить("Регистратор", СтрокаРезультата["РегистраторРеквизитСсылка"]); - - Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных), ПараметрыПроверки); - - Проблема.УточнениеПроблемы = НСтр("ru = 'Обнаружено нарушение ссылочной целостности:'") + Символы.ПС + УточнениеПроблемы; - Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(СтруктураНабораЗаписей); - - ЗаписатьПроблему(Проблема, ПараметрыПроверки); + КонецЦикла; КонецЦикла; + Если ПустаяСтрока(НомераПроблемныхЗаписей) Тогда + Продолжить; + КонецЕсли; + + Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных), ПараметрыПроверки); + + Проблема.УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'У регистра накопления ""%1"" в записях с номерами %2 по регистратору ""%3"" указаны ссылки на несуществующие данные.'"), + ОбъектМетаданных.Представление(), НомераПроблемныхЗаписей, СтрокаРезультата.РегистраторПредставление); + + ДополнительнаяИнформация = Новый Структура; + ДополнительнаяИнформация.Вставить("Регистратор", СтрокаРезультата.РегистраторРеквизитСсылка); + Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(ДополнительнаяИнформация); + + ЗаписатьПроблему(Проблема, ПараметрыПроверки); + КонецЦикла; - Запрос.УстановитьПараметр("НомерСтроки", СтрокаРезультата["НомерСтроки"]); - Запрос.УстановитьПараметр("Регистратор", СтрокаРезультата["РегистраторРеквизитСсылка"]); + Запрос.УстановитьПараметр("ДатаНачалаПроверки", СтрокаРезультата.Период); Результат = Запрос.Выполнить().Выгрузить(); КонецЦикла; - + КонецПроцедуры -#КонецОбласти - -#Область КонтрольСсылочнойЦелостностиВРегистрахСведений - Процедура НайтиБитыеСсылкиВРегистрахСведений(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок) - Измерения = ОбъектМетаданных.Измерения; - Ресурсы = ОбъектМетаданных.Ресурсы; - Реквизиты = ОбъектМетаданных.Реквизиты; - - ИнформацияОМетаданных = Новый ТаблицаЗначений; - ИнформацияОМетаданных.Колонки.Добавить("ТипМетаданныхВИменительномПадеже", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(16))); - ИнформацияОМетаданных.Колонки.Добавить("ТипМетаданныхВТворительномПадеже", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(16))); - ИнформацияОМетаданных.Колонки.Добавить("ИмяМетаданных", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(128))); - - ПоляВыборки = ""; - Для Каждого Измерение Из Измерения Цикл - ИмяИзмерения = Измерение.Имя; - ПоляВыборки = ПоляВыборки + ?(ЗначениеЗаполнено(ПоляВыборки), ",", "") + ИмяИзмерения + " Как " + ИмяИзмерения - + "ИзмерениеСсылка,ПредставлениеСсылки(" + ИмяИзмерения + ") Как " + ИмяИзмерения + "ИзмерениеПредставление"; - ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), - Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "Измерение", НСтр("ru = 'измерении'"), ИмяИзмерения)); - КонецЦикла; - - Для Каждого Ресурс Из Ресурсы Цикл - ИмяРесурса = Ресурс.Имя; - ПоляВыборки = ПоляВыборки + ?(ЗначениеЗаполнено(ПоляВыборки), ",", "") + ИмяРесурса + " Как " + ИмяРесурса - + "РесурсСсылка,ПредставлениеСсылки(" + ИмяРесурса + ") Как " + ИмяРесурса + "РесурсПредставление"; - ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), - Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "Ресурс", НСтр("ru = 'ресурсе'"), ИмяРесурса)); - КонецЦикла; - - Для Каждого Реквизит Из Реквизиты Цикл - ИмяРеквизита = Реквизит.Имя; - ПоляВыборки = ПоляВыборки + ?(ЗначениеЗаполнено(ПоляВыборки), ",", "") + ИмяРеквизита + " Как " + ИмяРеквизита - + "РеквизитСсылка,ПредставлениеСсылки(" + ИмяРеквизита + ") Как " + ИмяРеквизита + "РеквизитПредставление"; - ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), - Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "Реквизит", НСтр("ru = 'реквизите'"), ИмяРеквизита)); - КонецЦикла; - Если ОбъектМетаданных.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.ПодчинениеРегистратору Тогда - НайтиБитыеСсылкиВПодчиненныхРегистрахСведений(ОбъектМетаданных, ПоляВыборки, ИнформацияОМетаданных, ПараметрыПроверки, КэшБитыхСсылок); + НайтиБитыеСсылкиВПодчиненныхРегистрахСведений(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок); Иначе Если ОбъектМетаданных.ПериодичностьРегистраСведений <> Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический Тогда - НайтиБитыеСсылкиВНеПодчиненныхПериодическихРегистрахСведений(ОбъектМетаданных, ПоляВыборки, ИнформацияОМетаданных, ПараметрыПроверки, КэшБитыхСсылок); + НайтиБитыеСсылкиВНезависимыхПериодическихРегистрахСведений(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок); Иначе - НайтиБитыеСсылкиВНеПодчиненныхНеПериодическихРегистрахСведений(ОбъектМетаданных, ПоляВыборки, ИнформацияОМетаданных, ПараметрыПроверки, КэшБитыхСсылок); + НайтиБитыеСсылкиВНезависимыхНеПериодическихРегистрахСведений(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок); КонецЕсли; КонецЕсли; КонецПроцедуры -Процедура НайтиБитыеСсылкиВПодчиненныхРегистрахСведений(ОбъектМетаданных, ПоляВыборки, ИнформацияОМетаданных, ПараметрыПроверки, КэшБитыхСсылок) +Процедура НайтиБитыеСсылкиВПодчиненныхРегистрахСведений(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок) - ПоляВыборки = ПоляВыборки + ", НомерСтроки Как НомерСтроки, Регистратор Как РегистраторРеквизитСсылка, ПредставлениеСсылки(Регистратор) Как РегистраторРеквизитПредставление"; - ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), - Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "Реквизит", НСтр("ru = 'реквизите'"), "Регистратор")); + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + РеквизитыРегистра = СсылочныеРеквизитыРегистра(ОбъектМетаданных); + + ЭтотРегистрПериодический = ОбъектМетаданных.ПериодичностьРегистраСведений <> Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический; + Если ЭтотРегистрПериодический Тогда + + Запрос = Новый Запрос( + "ВЫБРАТЬ ПЕРВЫЕ 1000 + | ОбъектМетаданных.Регистратор КАК РегистраторРеквизитСсылка, + | ПРЕДСТАВЛЕНИЕССЫЛКИ(ОбъектМетаданных.Регистратор) КАК РегистраторПредставление, + | ОбъектМетаданных.Период КАК Период + |ИЗ + | &ОбъектМетаданных КАК ОбъектМетаданных + |ГДЕ + | ОбъектМетаданных.Период > &ДатаНачалаПроверки + | + |СГРУППИРОВАТЬ ПО + | ОбъектМетаданных.Период, + | ОбъектМетаданных.Регистратор + | + |УПОРЯДОЧИТЬ ПО + | ОбъектМетаданных.Период"); - Запрос = Новый Запрос( - "ВЫБРАТЬ ПЕРВЫЕ 1000 - | &ПоляВыборки КАК ПоляВыборки - |ИЗ - | &ОбъектМетаданных КАК ОбъектМетаданных - |ГДЕ - | ВЫБОР - | КОГДА ОбъектМетаданных.Регистратор = &Регистратор - | ТОГДА ОбъектМетаданных.НомерСтроки > &НомерСтроки - | ИНАЧЕ ОбъектМетаданных.Регистратор > &Регистратор - | КОНЕЦ - | И &Периодичность - | - |УПОРЯДОЧИТЬ ПО - | ОбъектМетаданных.Регистратор, - | ОбъектМетаданных.НомерСтроки"); - - Запрос.Текст = СтрЗаменить(Запрос.Текст, "КАК ПоляВыборки", ""); - Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОбъектМетаданных", ОбъектМетаданных.ПолноеИмя()); - Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ПоляВыборки", ПоляВыборки); - - Запрос.УстановитьПараметр("НомерСтроки", 0); - Запрос.УстановитьПараметр("Регистратор", ""); - - Если ОбъектМетаданных.ПериодичностьРегистраСведений = Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический Тогда - Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Периодичность", "Истина"); - Иначе - Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Периодичность", "ОбъектМетаданных.Период > &ДатаНачалаПроверки"); Запрос.УстановитьПараметр("ДатаНачалаПроверки", ПараметрыПроверки.ДатаНачалаПроверки); + + Иначе + + Запрос = Новый Запрос( + "ВЫБРАТЬ ПЕРВЫЕ 1000 + | ОбъектМетаданных.Регистратор КАК РегистраторРеквизитСсылка, + | ПРЕДСТАВЛЕНИЕССЫЛКИ(ОбъектМетаданных.Регистратор) КАК РегистраторПредставление + |ИЗ + | &ОбъектМетаданных КАК ОбъектМетаданных + |ГДЕ + | ОбъектМетаданных.Регистратор > &Регистратор + | + |СГРУППИРОВАТЬ ПО + | ОбъектМетаданных.Регистратор + | + |УПОРЯДОЧИТЬ ПО + | ОбъектМетаданных.Регистратор"); + + Запрос.УстановитьПараметр("Регистратор", ""); + КонецЕсли; - Результат = Запрос.Выполнить().Выгрузить(); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОбъектМетаданных", ПолноеИмя); + Результат = Запрос.Выполнить().Выгрузить(); - Пока Истина Цикл - - Если Результат.Количество() = 0 Тогда - Прервать; - КонецЕсли; + МенеджерРегистра = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя); + + Пока Результат.Количество() > 0 Цикл Для Каждого СтрокаРезультата Из Результат Цикл - Для Каждого ПодчиненныйОбъект Из ИнформацияОМетаданных Цикл + ТекущийНаборЗаписей = МенеджерРегистра.СоздатьНаборЗаписей(); + ТекущийНаборЗаписей.Отбор.Регистратор.Установить(СтрокаРезультата.РегистраторРеквизитСсылка); + ТекущийНаборЗаписей.Прочитать(); + + НомераПроблемныхЗаписей = ""; + Для Каждого ТекущаяЗапись Из ТекущийНаборЗаписей Цикл - ТекущаяСсылка = СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Ссылка"]; - УточнениеПроблемы = ""; - - Если Не ОбщегоНазначения.ЗначениеСсылочногоТипа(ТекущаяСсылка) Или Не ЗначениеЗаполнено(ТекущаяСсылка) Тогда - Продолжить; - КонецЕсли; - - Если КэшБитыхСсылок.Получить(ТекущаяСсылка) <> Неопределено Тогда + Для Каждого ИмяРеквизита Из РеквизитыРегистра Цикл - УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") - + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У регистра сведений ""%1"" в %2, записи №%3 по регистратору ""%4"" указан несуществующий элемент: ""%5"".'"), - ОбъектМетаданных.Представление(), ПодчиненныйОбъект.ТипМетаданныхВТворительномПадеже, - Формат(СтрокаРезультата.НомерСтроки, "ЧГ=0"), СтрокаРезультата["РегистраторРеквизитПредставление"], - СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Представление"]); - - Иначе - - Если Не ОбщегоНазначения.СсылкаСуществует(ТекущаяСсылка) Тогда - - УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") - + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У регистра сведений ""%1"" в %2, записи №%3 по регистратору ""%4"" указан несуществующий элемент: ""%5"".'"), - ОбъектМетаданных.Представление(), ПодчиненныйОбъект.ТипМетаданныхВТворительномПадеже, - Формат(СтрокаРезультата.НомерСтроки, "ЧГ=0"), СтрокаРезультата["РегистраторРеквизитПредставление"], - СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Представление"]); - КэшБитыхСсылок.Вставить(ТекущаяСсылка, ""); - + ТекущаяСсылка = ТекущаяЗапись[ИмяРеквизита]; + Если Не ОбщегоНазначения.ЗначениеСсылочногоТипа(ТекущаяСсылка) Или Не ЗначениеЗаполнено(ТекущаяСсылка) Тогда + Продолжить; КонецЕсли; - КонецЕсли; - - Если Не ЗначениеЗаполнено(УточнениеПроблемы) Тогда - Продолжить; - КонецЕсли; - - СтруктураНабораЗаписей = Новый Структура; - СтруктураНабораЗаписей.Вставить("Регистратор", СтрокаРезультата["РегистраторРеквизитСсылка"]); - - Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных), ПараметрыПроверки); - - Проблема.УточнениеПроблемы = НСтр("ru = 'Обнаружено нарушение ссылочной целостности:'") + Символы.ПС + УточнениеПроблемы; - Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(СтруктураНабораЗаписей); - - ЗаписатьПроблему(Проблема, ПараметрыПроверки); + ОбнаруженаБитаяСсылка = КэшБитыхСсылок.Получить(ТекущаяСсылка) <> Неопределено; + Если Не ОбнаруженаБитаяСсылка И Не ОбщегоНазначения.СсылкаСуществует(ТекущаяСсылка) Тогда + КэшБитыхСсылок.Вставить(ТекущаяСсылка, ""); + ОбнаруженаБитаяСсылка = Истина; + КонецЕсли; + + Если ОбнаруженаБитаяСсылка Тогда + НомераПроблемныхЗаписей = НомераПроблемныхЗаписей + ?(ЗначениеЗаполнено(НомераПроблемныхЗаписей), ", ", "") + + Формат(ТекущийНаборЗаписей.Индекс(ТекущаяЗапись) + 1, "ЧГ=0"); + КонецЕсли; + + КонецЦикла; КонецЦикла; + Если ПустаяСтрока(НомераПроблемныхЗаписей) Тогда + Продолжить; + КонецЕсли; + + Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных), ПараметрыПроверки); + + Проблема.УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'У регистра сведений ""%1"" в записях с номерами %2 по регистратору ""%3"" указаны ссылки на несуществующие данные.'"), + ОбъектМетаданных.Представление(), НомераПроблемныхЗаписей, СтрокаРезультата.РегистраторПредставление); + + ДополнительнаяИнформация = Новый Структура; + ДополнительнаяИнформация.Вставить("Регистратор", СтрокаРезультата.РегистраторРеквизитСсылка); + Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(ДополнительнаяИнформация); + + ЗаписатьПроблему(Проблема, ПараметрыПроверки); + КонецЦикла; - Запрос.УстановитьПараметр("НомерСтроки", СтрокаРезультата["НомерСтроки"]); - Запрос.УстановитьПараметр("Регистратор", СтрокаРезультата["РегистраторРеквизитСсылка"]); + Если ЭтотРегистрПериодический Тогда + Запрос.УстановитьПараметр("ДатаНачалаПроверки", СтрокаРезультата.Период); + Иначе + Запрос.УстановитьПараметр("Регистратор", СтрокаРезультата.РегистраторРеквизитСсылка); + КонецЕсли; + Результат = Запрос.Выполнить().Выгрузить(); КонецЦикла; КонецПроцедуры -Процедура НайтиБитыеСсылкиВНеПодчиненныхПериодическихРегистрахСведений(ОбъектМетаданных, ПоляВыборки, ИнформацияОМетаданных, ПараметрыПроверки, КэшБитыхСсылок) +Процедура НайтиБитыеСсылкиВНезависимыхПериодическихРегистрахСведений(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок) + + ИнформацияОНезависимомРегистре = ИнформацияОНезависимомРегистре(ОбъектМетаданных); + ПоляВыборки = ИнформацияОНезависимомРегистре.ПоляВыборки; + ИнформацияОРегистре = ИнформацияОНезависимомРегистре.ИнформацияОРегистре; УсловиеПоИзмерениям = ""; ПоляУпорядочивания = "Период"; @@ -2055,13 +2183,13 @@ ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПоляУпорядочивания", ПоляУпорядочивания); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПоляВыборки КАК ПоляВыборки", ПоляВыборки); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОбъектМетаданных", ОбъектМетаданных.ПолноеИмя()); + ТекстПервогоЗапроса = СтрЗаменить(ТекстЗапроса, "&Условие", "Истина"); ТекстЗапросаСУсловием = СтрЗаменить(ТекстЗапроса, "&Условие", УсловиеПоИзмерениям); Запрос = Новый Запрос(ТекстПервогоЗапроса); Запрос.УстановитьПараметр("Период", ПараметрыПроверки.ДатаНачалаПроверки); - - Результат = Запрос.Выполнить().Выгрузить(); + Результат = Запрос.Выполнить().Выгрузить(); ЭтоПервыйПроход = Истина; Пока Результат.Количество() > 0 Цикл @@ -2077,53 +2205,40 @@ Продолжить; КонецЕсли; - Для Каждого ПодчиненныйОбъект Из ИнформацияОМетаданных Цикл - - ТекущаяСсылка = СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Ссылка"]; - УточнениеПроблемы = ""; + Для Каждого ИнформацияОРеквизите Из ИнформацияОРегистре Цикл + ТекущаяСсылка = СтрокаРезультата[ИнформацияОРеквизите.ИмяМетаданных + ИнформацияОРеквизите.ТипМетаданныхВИменительномПадеже + "Ссылка"]; Если Не ОбщегоНазначения.ЗначениеСсылочногоТипа(ТекущаяСсылка) Или Не ЗначениеЗаполнено(ТекущаяСсылка) Тогда Продолжить; КонецЕсли; - Если КэшБитыхСсылок.Получить(ТекущаяСсылка) <> Неопределено Тогда - - УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") - + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='У регистра сведений ""%1"" в %2, по комбинации измерений ""%3"" указан несуществующий элемент: ""%4"".'"), - ОбъектМетаданных.Представление(), ПодчиненныйОбъект.ТипМетаданныхВТворительномПадеже, - ПоляУпорядочивания, СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Представление"]); - - ИначеЕсли Не ОбщегоНазначения.СсылкаСуществует(ТекущаяСсылка) Тогда - - УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") - + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='У регистра сведений ""%1"" в %2, по комбинации измерений ""%3"" указан несуществующий элемент: ""%4"".'"), - ОбъектМетаданных.Представление(), ПодчиненныйОбъект.ТипМетаданныхВТворительномПадеже, - ПоляУпорядочивания, СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Представление"]); + ОбнаруженаБитаяСсылка = КэшБитыхСсылок.Получить(ТекущаяСсылка) <> Неопределено; + Если Не ОбнаруженаБитаяСсылка И Не ОбщегоНазначения.СсылкаСуществует(ТекущаяСсылка) Тогда КэшБитыхСсылок.Вставить(ТекущаяСсылка, ""); - + ОбнаруженаБитаяСсылка = Истина; КонецЕсли; - Если Не ЗначениеЗаполнено(УточнениеПроблемы) Тогда + Если Не ОбнаруженаБитаяСсылка Тогда Продолжить; КонецЕсли; - СтруктураНабораЗаписей = Новый Структура; - СтруктураНабораЗаписей.Вставить("Период", СтрокаРезультата["Период"]); + ДополнительнаяИнформация = Новый Структура; + ДополнительнаяИнформация.Вставить("Период", СтрокаРезультата.Период); Для Каждого Измерение Из Измерения Цикл ИзмерениеСсылка = СтрокаРезультата[Измерение.Имя + "ИзмерениеСсылка"]; Если КэшБитыхСсылок.Получить(ИзмерениеСсылка) <> Неопределено Тогда Продолжить; КонецЕсли; - СтруктураНабораЗаписей.Вставить(Измерение.Имя, ИзмерениеСсылка); + ДополнительнаяИнформация.Вставить(Измерение.Имя, ИзмерениеСсылка); КонецЦикла; Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных), ПараметрыПроверки); - - Проблема.УточнениеПроблемы = НСтр("ru = 'Обнаружено нарушение ссылочной целостности:'") + Символы.ПС + УточнениеПроблемы; - Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(СтруктураНабораЗаписей); - + Проблема.УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='У регистра сведений ""%1"" в %2, по комбинации измерений ""%3"" указана ссылка на несуществующий элемент: ""%4"".'"), + ОбъектМетаданных.Представление(), ИнформацияОРеквизите.ТипМетаданныхВТворительномПадеже, + ПоляУпорядочивания, + СтрокаРезультата[ИнформацияОРеквизите.ИмяМетаданных + ИнформацияОРеквизите.ТипМетаданныхВИменительномПадеже + "Представление"]); + Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(ДополнительнаяИнформация); ЗаписатьПроблему(Проблема, ПараметрыПроверки); КонецЦикла; @@ -2145,15 +2260,19 @@ КонецПроцедуры -Процедура НайтиБитыеСсылкиВНеПодчиненныхНеПериодическихРегистрахСведений(ОбъектМетаданных, ПоляВыборки, ИнформацияОМетаданных, ПараметрыПроверки, КэшБитыхСсылок) +Процедура НайтиБитыеСсылкиВНезависимыхНеПериодическихРегистрахСведений(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок) - Условие = ""; - ПоляУпорядочивания = ""; - Измерения = ОбъектМетаданных.Измерения; + ИнформацияОНезависимомРегистре = ИнформацияОНезависимомРегистре(ОбъектМетаданных); + ПоляВыборки = ИнформацияОНезависимомРегистре.ПоляВыборки; + ИнформацияОРегистре = ИнформацияОНезависимомРегистре.ИнформацияОРегистре; + + УсловиеПоИзмерениям = ""; + ПоляУпорядочивания = ""; + Измерения = ОбъектМетаданных.Измерения; Для Каждого Измерение Из Измерения Цикл - Условие = Условие + ?(ЗначениеЗаполнено(Условие), " И ", "") + Измерение.Имя + " >= &" + Измерение.Имя; - ПоляУпорядочивания = ПоляУпорядочивания + ?(ЗначениеЗаполнено(ПоляУпорядочивания), ", ", "") + Измерение.Имя; + УсловиеПоИзмерениям = УсловиеПоИзмерениям + ?(ЗначениеЗаполнено(УсловиеПоИзмерениям), " И ", "") + Измерение.Имя + " >= &" + Измерение.Имя; + ПоляУпорядочивания = ПоляУпорядочивания + ?(ЗначениеЗаполнено(ПоляУпорядочивания), ", ", "") + Измерение.Имя; КонецЦикла; ТекстЗапроса = @@ -2162,23 +2281,27 @@ |ИЗ | &ОбъектМетаданных КАК ОбъектМетаданных |ГДЕ - | &Условие"; + | &Условие + | + |УПОРЯДОЧИТЬ ПО + | &ПоляУпорядочивания"; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Условие", "ИСТИНА УПОРЯДОЧИТЬ ПО " + ПоляУпорядочивания); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "КАК ПоляВыборки", ""); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПоляУпорядочивания", ПоляУпорядочивания); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПоляВыборки КАК ПоляВыборки", ПоляВыборки); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОбъектМетаданных", ОбъектМетаданных.ПолноеИмя()); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПоляВыборки", ПоляВыборки); - Запрос = Новый Запрос(ТекстЗапроса); + ТекстПервогоЗапроса = СтрЗаменить(ТекстЗапроса, "&Условие", "Истина"); + ТекстЗапросаСУсловием = СтрЗаменить(ТекстЗапроса, "&Условие", УсловиеПоИзмерениям); + + Запрос = Новый Запрос(ТекстПервогоЗапроса); Результат = Запрос.Выполнить().Выгрузить(); - УсловиеАбсолюта = "ГДЕ" + Символы.ПС + Символы.Таб + "ИСТИНА"; + ЭтоПервыйПроход = Истина; - Пока Истина Цикл + Пока Результат.Количество() > 0 Цикл - ЭтоПервыйПроход = СтрНайти(Запрос.Текст, УсловиеАбсолюта) <> 0; - - Если Результат.Количество() = 0 Или (Не ЭтоПервыйПроход И Результат.Количество() = 1) Тогда + // Последняя запись уже проверена на предыдущей итерации. + Если Не ЭтоПервыйПроход И Результат.Количество() = 1 Тогда Прервать; КонецЕсли; @@ -2188,54 +2311,39 @@ Продолжить; КонецЕсли; - Для Каждого ПодчиненныйОбъект Из ИнформацияОМетаданных Цикл - - ТекущаяСсылка = СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Ссылка"]; - УточнениеПроблемы = ""; + Для Каждого ИнформацияОРеквизите Из ИнформацияОРегистре Цикл + ТекущаяСсылка = СтрокаРезультата[ИнформацияОРеквизите.ИмяМетаданных + ИнформацияОРеквизите.ТипМетаданныхВИменительномПадеже + "Ссылка"]; Если Не ОбщегоНазначения.ЗначениеСсылочногоТипа(ТекущаяСсылка) Или Не ЗначениеЗаполнено(ТекущаяСсылка) Тогда Продолжить; КонецЕсли; - Если КэшБитыхСсылок.Получить(ТекущаяСсылка) <> Неопределено Тогда - - УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") - + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У регистра сведений ""%1"" в %2, по комбинации измерений ""%3"" указан несуществующий элемент: ""%4"".'"), - ОбъектМетаданных.Представление(), ПодчиненныйОбъект.ТипМетаданныхВТворительномПадеже, - ПоляУпорядочивания, СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Представление"]); - - Иначе - - Если Не ОбщегоНазначения.СсылкаСуществует(ТекущаяСсылка) Тогда - - УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") - + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У регистра сведений ""%1"" в %2, по комбинации измерений ""%3"" указан несуществующий элемент: ""%4"".'"), - ОбъектМетаданных.Представление(), ПодчиненныйОбъект.ТипМетаданныхВТворительномПадеже, - ПоляУпорядочивания, СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Представление"]); - КэшБитыхСсылок.Вставить(ТекущаяСсылка, ""); - - КонецЕсли; - + ОбнаруженаБитаяСсылка = КэшБитыхСсылок.Получить(ТекущаяСсылка) <> Неопределено; + Если Не ОбнаруженаБитаяСсылка И Не ОбщегоНазначения.СсылкаСуществует(ТекущаяСсылка) Тогда + КэшБитыхСсылок.Вставить(ТекущаяСсылка, ""); + ОбнаруженаБитаяСсылка = Истина; КонецЕсли; - Если Не ЗначениеЗаполнено(УточнениеПроблемы) Тогда + Если Не ОбнаруженаБитаяСсылка Тогда Продолжить; КонецЕсли; - СтруктураНабораЗаписей = Новый Структура; + ДополнительнаяИнформация = Новый Структура; Для Каждого Измерение Из Измерения Цикл ИзмерениеСсылка = СтрокаРезультата[Измерение.Имя + "ИзмерениеСсылка"]; Если КэшБитыхСсылок.Получить(ИзмерениеСсылка) <> Неопределено Тогда Продолжить; КонецЕсли; - СтруктураНабораЗаписей.Вставить(Измерение.Имя, ИзмерениеСсылка); + ДополнительнаяИнформация.Вставить(Измерение.Имя, ИзмерениеСсылка); КонецЦикла; Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных), ПараметрыПроверки); - - Проблема.УточнениеПроблемы = НСтр("ru = 'Обнаружено нарушение ссылочной целостности:'") + Символы.ПС + УточнениеПроблемы; - Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(СтруктураНабораЗаписей); - + Проблема.УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='У регистра сведений ""%1"" в %2, по комбинации измерений ""%3"" указана ссылка на несуществующий элемент: ""%4"".'"), + ОбъектМетаданных.Представление(), ИнформацияОРеквизите.ТипМетаданныхВТворительномПадеже, + ПоляУпорядочивания, + СтрокаРезультата[ИнформацияОРеквизите.ИмяМетаданных + ИнформацияОРеквизите.ТипМетаданныхВИменительномПадеже + "Представление"]); + Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(ДополнительнаяИнформация); ЗаписатьПроблему(Проблема, ПараметрыПроверки); КонецЦикла; @@ -2243,7 +2351,8 @@ КонецЦикла; Если ЭтоПервыйПроход Тогда - Запрос.Текст = СтрЗаменить(Запрос.Текст, УсловиеАбсолюта, "Где " + Условие); + ЭтоПервыйПроход = Ложь; + Запрос.Текст = ТекстЗапросаСУсловием; КонецЕсли; Для Каждого Измерение Из Измерения Цикл @@ -2256,415 +2365,384 @@ КонецПроцедуры -#КонецОбласти - -#Область КонтрольСсылочнойЦелостностиВРегистрахБухгалтерии - -Процедура НайтиБитыеСсылкиВРегистрахБухгалтерии(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок) +Процедура НайтиБитыеСсылкиВРегистрахБухгалтерии(ОбъектМетаданных, ПараметрыПроверки, ВидыСубконто, КэшБитыхСсылок) РазмерКэшаПроверенныхСсылок = РазмерКэшаПроверенныхСсылок(); + + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + КорреспонденцияОбъекта = ОбъектМетаданных.Корреспонденция; + Измерения = ОбъектМетаданных.Измерения; Реквизиты = ОбъектМетаданных.Реквизиты; СтандартныеРеквизиты = ОбъектМетаданных.СтандартныеРеквизиты; - МаксимальноеКоличествоСубконто = ОбъектМетаданных.ПланСчетов.МаксКоличествоСубконто; - КорреспонденцияОбъекта = ОбъектМетаданных.Корреспонденция; + СсылочныеРеквизиты = Новый Массив; - ИнформацияОМетаданных = Новый ТаблицаЗначений; - ИнформацияОМетаданных.Колонки.Добавить("ТипМетаданныхВИменительномПадеже", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(64))); - ИнформацияОМетаданных.Колонки.Добавить("ТипМетаданныхВТворительномПадеже", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(64))); - ИнформацияОМетаданных.Колонки.Добавить("ИмяМетаданных", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(128))); - - ПоляВыборки = "НомерСтроки Как НомерСтроки, Регистратор Как РегистраторРеквизитСсылка, ПредставлениеСсылки(Регистратор) Как РегистраторРеквизитПредставление"; - ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), - Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "Реквизит", НСтр("ru = 'реквизите'"), "Регистратор")); - - Для ИндексСубконто = 1 По МаксимальноеКоличествоСубконто Цикл - - Если КорреспонденцияОбъекта Тогда - - ИндексСтрокой = Формат(ИндексСубконто, "ЧГ=0"); - - ИмяСубконтоДт = "СубконтоДт" + ИндексСтрокой; - ПоляВыборки = ПоляВыборки + "," + ИмяСубконтоДт + " Как " + ИмяСубконтоДт - + "СубконтоДтСсылка,ПредставлениеСсылки(" + ИмяСубконтоДт + ") Как " + ИмяСубконтоДт + "СубконтоДтПредставление"; - ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), - Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "СубконтоДт", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'субконто дт %1'"), ИндексСтрокой), ИмяСубконтоДт)); - - ИмяСубконтоКт = "СубконтоКт" + ИндексСтрокой; - ПоляВыборки = ПоляВыборки + "," + ИмяСубконтоКт + " Как " + ИмяСубконтоКт - + "СубконтоКтСсылка,ПредставлениеСсылки(" + ИмяСубконтоКт + ") Как " + ИмяСубконтоКт + "СубконтоКтПредставление"; - ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), - Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "СубконтоКт", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'субконто кт %1'"), ИндексСтрокой), ИмяСубконтоКт)); - - ИмяВидаСубконтоДт = "ВидСубконтоДт" + ИндексСтрокой; - ПоляВыборки = ПоляВыборки + "," + ИмяВидаСубконтоДт + " Как " + ИмяВидаСубконтоДт - + "ВидСубконтоДтСсылка,ПредставлениеСсылки(" + ИмяВидаСубконтоДт + ") Как " + ИмяВидаСубконтоДт + "ВидСубконтоДтПредставление"; - ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), - Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "ВидСубконтоДт", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'виде субконто дт %1'"), ИндексСтрокой), ИмяВидаСубконтоДт)); - - ИмяВидаСубконтоКт = "ВидСубконтоКт" + ИндексСтрокой; - ПоляВыборки = ПоляВыборки + "," + ИмяВидаСубконтоКт + " Как " + ИмяВидаСубконтоКт - + "ВидСубконтоКтСсылка,ПредставлениеСсылки(" + ИмяВидаСубконтоКт + ") Как " + ИмяВидаСубконтоКт + "ВидСубконтоКтПредставление"; - ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), - Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "ВидСубконтоКт", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'виде субконто кт %1'"), ИндексСтрокой), ИмяВидаСубконтоКт)); - - Иначе - - ИмяСубконто = "Субконто" + ИндексСтрокой; - ПоляВыборки = ПоляВыборки + "," + ИмяСубконто + " Как " + ИмяСубконто - + "СубконтоСсылка,ПредставлениеСсылки(" + ИмяСубконто + ") Как " + ИмяСубконто + "СубконтоПредставление"; - ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), - Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "Субконто", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'субконто %1'"), ИндексСтрокой), ИмяСубконто)); - - ИмяВидаСубконто = "ВидСубконто" + ИндексСтрокой; - ПоляВыборки = ПоляВыборки + "," + ИмяВидаСубконто + " Как " + ИмяВидаСубконто - + "ВидСубконтоСсылка,ПредставлениеСсылки(" + ИмяВидаСубконто + ") Как " + ИмяВидаСубконто + "ВидСубконтоПредставление"; - ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), - Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "ВидСубконто", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'виде субконто %1'"), ИндексСтрокой), ИмяВидаСубконто)); - - КонецЕсли; - - КонецЦикла; - - Если КорреспонденцияОбъекта Тогда - - ИмяСчетаДт = "СчетДт"; - ПоляВыборки = ПоляВыборки + "," + ИмяСчетаДт + " Как " + ИмяСчетаДт - + "СчетДтСсылка,ПредставлениеСсылки(" + ИмяСчетаДт + ") Как " + ИмяСчетаДт + "СчетДтПредставление"; - ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), - Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "СчетДт", - НСтр("ru = 'счете дт'"), ИмяСчетаДт)); - - ИмяСчетаКт = "СчетКт"; - ПоляВыборки = ПоляВыборки + "," + ИмяСчетаКт + " Как " + ИмяСчетаКт - + "СчетКтСсылка,ПредставлениеСсылки(" + ИмяСчетаКт + ") Как " + ИмяСчетаКт + "СчетКтПредставление"; - ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), - Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "СчетКт", - НСтр("ru = 'счете кт'"), ИмяСчетаКт)); - + Если Не КорреспонденцияОбъекта Тогда + СсылочныеРеквизиты.Добавить("Счет"); Иначе - - ИмяСчета = "Счет"; - ПоляВыборки = ПоляВыборки + "," + ИмяСчета + " Как " + ИмяСчета - + "ИмяСчетаСсылка,ПредставлениеСсылки(" + ИмяСчета + ") Как " + ИмяСчета + "ИмяСчетаПредставление"; - ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), - Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "Счет", - НСтр("ru = 'счете'"), ИмяСчета)); - + СсылочныеРеквизиты.Добавить("СчетДт"); + СсылочныеРеквизиты.Добавить("СчетКт"); КонецЕсли; Для Каждого Измерение Из Измерения Цикл - Если Не (Измерение.Балансовый Или Не КорреспонденцияОбъекта) Тогда - - ИмяИзмеренияДт = Измерение.Имя + "Дт"; - ПоляВыборки = ПоляВыборки + "," + ИмяИзмеренияДт + " Как " + ИмяИзмеренияДт - + "ИзмерениеДтСсылка,ПредставлениеСсылки(" + ИмяИзмеренияДт + ") Как " + ИмяИзмеренияДт + "ИзмерениеДтПредставление"; - ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), - Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "ИзмерениеДт", НСтр("ru = 'измерении дт'"), ИмяИзмеренияДт)); - - ИмяИзмеренияКт = Измерение.Имя + "Кт"; - ПоляВыборки = ПоляВыборки + "," + ИмяИзмеренияКт + " Как " + ИмяИзмеренияКт - + "ИзмерениеКтСсылка,ПредставлениеСсылки(" + ИмяИзмеренияКт + ") Как " + ИмяИзмеренияКт + "ИзмерениеКтПредставление"; - ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), - Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "ИзмерениеКт", НСтр("ru = 'измерении кт'"), ИмяИзмеренияКт)); - + Если Не СодержитСсылочныйТип(Измерение) Тогда + Продолжить; + КонецЕсли; + + Если Измерение.Балансовый Или Не КорреспонденцияОбъекта Тогда + СсылочныеРеквизиты.Добавить(Измерение.Имя); Иначе - - ИмяИзмерения = Измерение.Имя; - ПоляВыборки = ПоляВыборки + "," + ИмяИзмерения + " Как " + ИмяИзмерения - + "ИзмерениеСсылка,ПредставлениеСсылки(" + ИмяИзмерения + ") Как " + ИмяИзмерения + "ИзмерениеПредставление"; - ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), - Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "Измерение", НСтр("ru = 'измерении'"), ИмяИзмерения)); - + СсылочныеРеквизиты.Добавить(Измерение.Имя + "Дт"); + СсылочныеРеквизиты.Добавить(Измерение.Имя + "Кт"); КонецЕсли; КонецЦикла; Для Каждого Реквизит Из Реквизиты Цикл - ИмяРеквизита = Реквизит.Имя; - ПоляВыборки = ПоляВыборки + "," + ИмяРеквизита + " Как " + ИмяРеквизита - + "РеквизитСсылка,ПредставлениеСсылки(" + ИмяРеквизита + ") Как " + ИмяРеквизита + "РеквизитПредставление"; - ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), - Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "Реквизит", НСтр("ru = 'реквизите'"), ИмяРеквизита)); - КонецЦикла; - - Для Каждого СтандартныйРеквизит Из СтандартныеРеквизиты Цикл - - ИмяСтандартногоРеквизита = СтандартныйРеквизит.Имя; - Если ИмяСтандартногоРеквизита = "Регистратор" Или ИмяСтандартногоРеквизита = "НомерСтроки" Или СтрНайти(ИмяСтандартногоРеквизита, "Субконто") <> 0 Тогда + Если Не СодержитСсылочныйТип(Реквизит) Тогда Продолжить; КонецЕсли; - - ПоляВыборки = ПоляВыборки + "," + ИмяСтандартногоРеквизита + " Как " + ИмяСтандартногоРеквизита - + "СтандартныйРеквизитСсылка,ПредставлениеСсылки(" + ИмяСтандартногоРеквизита + ") Как " + ИмяСтандартногоРеквизита + "СтандартныйРеквизитПредставление"; - ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), - Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "СтандартныйРеквизит", НСтр("ru = 'стандартном реквизите'"), ИмяСтандартногоРеквизита)); - + СсылочныеРеквизиты.Добавить(Реквизит.Имя); КонецЦикла; Запрос = Новый Запрос( "ВЫБРАТЬ ПЕРВЫЕ 1000 - | &ПоляВыборки КАК ПоляВыборки + | ОбъектМетаданных.Регистратор КАК РегистраторРеквизитСсылка, + | ПРЕДСТАВЛЕНИЕССЫЛКИ(ОбъектМетаданных.Регистратор) КАК РегистраторПредставление, + | ОбъектМетаданных.Период КАК Период |ИЗ | &ОбъектМетаданных КАК ОбъектМетаданных | + |СГРУППИРОВАТЬ ПО + | ОбъектМетаданных.Период, + | ОбъектМетаданных.Регистратор + | |УПОРЯДОЧИТЬ ПО - | ОбъектМетаданных.Регистратор, - | ОбъектМетаданных.НомерСтроки"); - - Условие = - "Период > &ДатаНачалаПроверки - |И ВЫБОР - | КОГДА Регистратор = &Регистратор - | ТОГДА НомерСтроки > &НомерСтроки - | ИНАЧЕ Регистратор > &Регистратор - | КОНЕЦ"; - - Запрос.Текст = СтрЗаменить(Запрос.Текст, "КАК ПоляВыборки", ""); - Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОбъектМетаданных", ОбъектМетаданных.ПолноеИмя() + ".ДвиженияССубконто(, , " + Условие + ", , )"); - Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ПоляВыборки", ПоляВыборки); + | ОбъектМетаданных.Период"); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОбъектМетаданных", ПолноеИмя + ".ДвиженияССубконто(, , Период > &ДатаНачалаПроверки, , )"); Запрос.УстановитьПараметр("ДатаНачалаПроверки", ПараметрыПроверки.ДатаНачалаПроверки); - Запрос.УстановитьПараметр("НомерСтроки", 0); - Запрос.УстановитьПараметр("Регистратор", ""); - Результат = Запрос.Выполнить().Выгрузить(); - Пока Истина Цикл - - Если Результат.Количество() = 0 Тогда - Прервать; - КонецЕсли; + МенеджерРегистра = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя); + + Пока Результат.Количество() > 0 Цикл Для Каждого СтрокаРезультата Из Результат Цикл - Для Каждого ПодчиненныйОбъект Из ИнформацияОМетаданных Цикл - - ТекущаяСсылка = СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Ссылка"]; - УточнениеПроблемы = ""; - - Если Не ОбщегоНазначения.ЗначениеСсылочногоТипа(ТекущаяСсылка) Или Не ЗначениеЗаполнено(ТекущаяСсылка) Тогда - Продолжить; - КонецЕсли; - - Если ПараметрыПроверки.КэшСсылок[ТекущаяСсылка] <> Неопределено Тогда - Продолжить; - КонецЕсли; + ТекущийНаборЗаписей = МенеджерРегистра.СоздатьНаборЗаписей(); + ТекущийНаборЗаписей.Отбор.Регистратор.Установить(СтрокаРезультата.РегистраторРеквизитСсылка); + ТекущийНаборЗаписей.Прочитать(); - Если КэшБитыхСсылок.Получить(ТекущаяСсылка) <> Неопределено Тогда - - УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") - + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У регистра бухгалтерии ""%1"" в %2, записи №%3 по регистратору ""%4"" указан несуществующий элемент: ""%5"".'"), - ОбъектМетаданных.Представление(), ПодчиненныйОбъект.ТипМетаданныхВТворительномПадеже, - Формат(СтрокаРезультата.НомерСтроки, "ЧГ=0"), СтрокаРезультата["РегистраторРеквизитПредставление"], - СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Представление"]); - - Иначе - - Если Не ОбщегоНазначения.СсылкаСуществует(ТекущаяСсылка) Тогда - УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") - + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У регистра бухгалтерии ""%1"" в %2, записи №%3 по регистратору ""%4"" указан несуществующий элемент: ""%5"".'"), - ОбъектМетаданных.Представление(), ПодчиненныйОбъект.ТипМетаданныхВТворительномПадеже, - Формат(СтрокаРезультата.НомерСтроки, "ЧГ=0"), СтрокаРезультата["РегистраторРеквизитПредставление"], - СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Представление"]); - КэшБитыхСсылок.Вставить(ТекущаяСсылка, ""); + НомераПроблемныхЗаписей = ""; + Для Каждого ТекущаяЗапись Из ТекущийНаборЗаписей Цикл + + ПроверяемыеОбъекты = Новый Массив; + + Для Каждого ВидСубконто Из ВидыСубконто Цикл + Если Не КорреспонденцияОбъекта Тогда + ПроверяемыеОбъекты.Добавить(ТекущаяЗапись.Субконто[ВидСубконто]); Иначе + ПроверяемыеОбъекты.Добавить(ТекущаяЗапись.СубконтоДт[ВидСубконто]); + ПроверяемыеОбъекты.Добавить(ТекущаяЗапись.СубконтоКт[ВидСубконто]); + КонецЕсли; + КонецЦикла; + + Для Каждого ИмяРеквизита Из СсылочныеРеквизиты Цикл + ПроверяемыеОбъекты.Добавить(ТекущаяЗапись[ИмяРеквизита]); + КонецЦикла; + + Для Каждого ПроверяемыйОбъект Из ПроверяемыеОбъекты Цикл + + Если Не ОбщегоНазначения.ЗначениеСсылочногоТипа(ПроверяемыйОбъект) Или Не ЗначениеЗаполнено(ПроверяемыйОбъект) Тогда + Продолжить; + КонецЕсли; + + Если ПараметрыПроверки.КэшСсылок[ПроверяемыйОбъект] <> Неопределено Тогда + Продолжить; + КонецЕсли; + + ОбнаруженаБитаяСсылка = КэшБитыхСсылок.Получить(ПроверяемыйОбъект) <> Неопределено; + Если Не ОбнаруженаБитаяСсылка И Не ОбщегоНазначения.СсылкаСуществует(ПроверяемыйОбъект) Тогда + КэшБитыхСсылок.Вставить(ПроверяемыйОбъект, ""); + ОбнаруженаБитаяСсылка = Истина; + КонецЕсли; + + Если Не ОбнаруженаБитаяСсылка Тогда Если ПараметрыПроверки.КэшСсылок.Количество() = РазмерКэшаПроверенныхСсылок Тогда ПараметрыПроверки.КэшСсылок.Очистить(); КонецЕсли; - ПараметрыПроверки.КэшСсылок.Вставить(ТекущаяСсылка, ""); + ПараметрыПроверки.КэшСсылок.Вставить(ПроверяемыйОбъект, ""); + Продолжить; КонецЕсли; - - КонецЕсли; - Если Не ЗначениеЗаполнено(УточнениеПроблемы) Тогда - Продолжить; - КонецЕсли; - - СтруктураНабораЗаписей = Новый Структура; - СтруктураНабораЗаписей.Вставить("Регистратор", СтрокаРезультата["РегистраторРеквизитСсылка"]); - - Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных), ПараметрыПроверки); - - Проблема.УточнениеПроблемы = НСтр("ru = 'Обнаружено нарушение ссылочной целостности:'") + Символы.ПС + УточнениеПроблемы; - Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(СтруктураНабораЗаписей); - - ЗаписатьПроблему(Проблема, ПараметрыПроверки); + НомераПроблемныхЗаписей = НомераПроблемныхЗаписей + ?(ЗначениеЗаполнено(НомераПроблемныхЗаписей), ", ", "") + + Формат(ТекущийНаборЗаписей.Индекс(ТекущаяЗапись) + 1, "ЧГ=0"); + + КонецЦикла; КонецЦикла; + Если ПустаяСтрока(НомераПроблемныхЗаписей) Тогда + Продолжить; + КонецЕсли; + + Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных), ПараметрыПроверки); + + Проблема.УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'У регистра бухгалтерии ""%1"" в записях с номерами %2 по регистратору ""%3"" указаны ссылки на несуществующие данные.'"), + ОбъектМетаданных.Представление(), НомераПроблемныхЗаписей, СтрокаРезультата.РегистраторПредставление); + + ДополнительнаяИнформация = Новый Структура; + ДополнительнаяИнформация.Вставить("Регистратор", СтрокаРезультата.РегистраторРеквизитСсылка); + Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(ДополнительнаяИнформация); + + ЗаписатьПроблему(Проблема, ПараметрыПроверки); + КонецЦикла; - Запрос.УстановитьПараметр("НомерСтроки", СтрокаРезультата["НомерСтроки"]); - Запрос.УстановитьПараметр("Регистратор", СтрокаРезультата["РегистраторРеквизитСсылка"]); + Запрос.УстановитьПараметр("ДатаНачалаПроверки", СтрокаРезультата.Период); Результат = Запрос.Выполнить().Выгрузить(); КонецЦикла; КонецПроцедуры -#КонецОбласти - -#Область КонтрольСсылочнойЦелостностиВРегистрахРасчета - Процедура НайтиБитыеСсылкиВРегистрахРасчета(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок) РазмерКэшаПроверенныхСсылок = РазмерКэшаПроверенныхСсылок(); - ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); - Измерения = ОбъектМетаданных.Измерения; - Реквизиты = ОбъектМетаданных.Реквизиты; - СтандартныеРеквизиты = ОбъектМетаданных.СтандартныеРеквизиты; + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + РеквизитыРегистра = СсылочныеРеквизитыРегистра(ОбъектМетаданных); - ИнформацияОМетаданных = Новый ТаблицаЗначений; - ИнформацияОМетаданных.Колонки.Добавить("ТипМетаданныхВИменительномПадеже", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(64))); - ИнформацияОМетаданных.Колонки.Добавить("ТипМетаданныхВТворительномПадеже", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(64))); - ИнформацияОМетаданных.Колонки.Добавить("ИмяМетаданных", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(128))); - - ПоляВыборки = "НомерСтроки Как НомерСтроки, Регистратор Как РегистраторРеквизитСсылка, ПредставлениеСсылки(Регистратор) Как РегистраторРеквизитПредставление"; - ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), - Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "Реквизит", НСтр("ru = 'реквизите'"), "Регистратор")); - Для Каждого Измерение Из Измерения Цикл - ИмяИзмерения = Измерение.Имя; - ПоляВыборки = ПоляВыборки + "," + ИмяИзмерения + " Как " + ИмяИзмерения - + "ИзмерениеСсылка,ПредставлениеСсылки(" + ИмяИзмерения + ") Как " + ИмяИзмерения + "ИзмерениеПредставление"; - ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), - Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "Измерение", НСтр("ru = 'измерении'"), ИмяИзмерения)); - КонецЦикла; - - Для Каждого Реквизит Из Реквизиты Цикл - ИмяРеквизита = Реквизит.Имя; - ПоляВыборки = ПоляВыборки + "," + ИмяРеквизита + " Как " + ИмяРеквизита - + "РеквизитСсылка,ПредставлениеСсылки(" + ИмяРеквизита + ") Как " + ИмяРеквизита + "РеквизитПредставление"; - ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), - Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "Реквизит", НСтр("ru = 'реквизите'"), ИмяРеквизита)); - КонецЦикла; - - Для Каждого СтандартныйРеквизит Из СтандартныеРеквизиты Цикл - - ИмяСтандартногоРеквизита = СтандартныйРеквизит.Имя; - - Если ИмяСтандартногоРеквизита = "Регистратор" Или ИмяСтандартногоРеквизита = "НомерСтроки" Тогда - Продолжить; - КонецЕсли; - - ПоляВыборки = ПоляВыборки + "," + ИмяСтандартногоРеквизита + " Как " + ИмяСтандартногоРеквизита - + "СтандартныйРеквизитСсылка,ПредставлениеСсылки(" + ИмяСтандартногоРеквизита + ") Как " + ИмяСтандартногоРеквизита + "СтандартныйРеквизитПредставление"; - ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), - Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "СтандартныйРеквизит", НСтр("ru = 'стандартном реквизите'"), ИмяСтандартногоРеквизита)); - - КонецЦикла; - - ТекстЗапроса = + Запрос = Новый Запрос( "ВЫБРАТЬ ПЕРВЫЕ 1000 - | &ПоляВыборки КАК ПоляВыборки + | ОбъектМетаданных.Регистратор КАК РегистраторРеквизитСсылка, + | ПРЕДСТАВЛЕНИЕССЫЛКИ(ОбъектМетаданных.Регистратор) КАК РегистраторПредставление, + | ОбъектМетаданных.ПериодРегистрации КАК Период |ИЗ | &ОбъектМетаданных КАК ОбъектМетаданных |ГДЕ - | ВЫБОР - | КОГДА ОбъектМетаданных.Регистратор = &Регистратор - | ТОГДА ОбъектМетаданных.НомерСтроки > &НомерСтроки - | ИНАЧЕ ОбъектМетаданных.Регистратор > &Регистратор - | КОНЕЦ - | И ОбъектМетаданных.ПериодРегистрации > &ДатаНачалаПроверки + | ОбъектМетаданных.ПериодРегистрации > &ДатаНачалаПроверки + | + |СГРУППИРОВАТЬ ПО + | ОбъектМетаданных.ПериодРегистрации, + | ОбъектМетаданных.Регистратор | |УПОРЯДОЧИТЬ ПО - | ОбъектМетаданных.Регистратор, - | ОбъектМетаданных.НомерСтроки"; + | ОбъектМетаданных.ПериодРегистрации"); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "КАК ПоляВыборки", ""); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОбъектМетаданных", ПолноеИмя); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПоляВыборки", ПоляВыборки); - - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("НомерСтроки", 0); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОбъектМетаданных", ПолноеИмя); Запрос.УстановитьПараметр("ДатаНачалаПроверки", ПараметрыПроверки.ДатаНачалаПроверки); - Запрос.УстановитьПараметр("Регистратор", ""); - Результат = Запрос.Выполнить().Выгрузить(); - Пока Истина Цикл - - Если Результат.Количество() = 0 Тогда - Прервать; - КонецЕсли; + МенеджерРегистра = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя); + + Пока Результат.Количество() > 0 Цикл Для Каждого СтрокаРезультата Из Результат Цикл - Для Каждого ПодчиненныйОбъект Из ИнформацияОМетаданных Цикл + ТекущийНаборЗаписей = МенеджерРегистра.СоздатьНаборЗаписей(); + ТекущийНаборЗаписей.Отбор.Регистратор.Установить(СтрокаРезультата.РегистраторРеквизитСсылка); + ТекущийНаборЗаписей.Прочитать(); + + НомераПроблемныхЗаписей = ""; + Для Каждого ТекущаяЗапись Из ТекущийНаборЗаписей Цикл - ТекущаяСсылка = СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Ссылка"]; - УточнениеПроблемы = ""; - - Если Не ОбщегоНазначения.ЗначениеСсылочногоТипа(ТекущаяСсылка) Или Не ЗначениеЗаполнено(ТекущаяСсылка) Тогда - Продолжить; - КонецЕсли; - - Если ПараметрыПроверки.КэшСсылок[ТекущаяСсылка] <> Неопределено Тогда - Продолжить; - КонецЕсли; - - Если КэшБитыхСсылок.Получить(ТекущаяСсылка) <> Неопределено Тогда + Для Каждого ИмяРеквизита Из РеквизитыРегистра Цикл - УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") - + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У регистра расчета ""%1"" в %2, записи №%3 по регистратору ""%4"" указан несуществующий элемент: ""%5"".'"), - ОбъектМетаданных.Представление(), ПодчиненныйОбъект.ТипМетаданныхВТворительномПадеже, - Формат(СтрокаРезультата.НомерСтроки, "ЧГ=0"), СтрокаРезультата["РегистраторРеквизитПредставление"], - СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Представление"]); + ТекущаяСсылка = ТекущаяЗапись[ИмяРеквизита]; + Если Не ОбщегоНазначения.ЗначениеСсылочногоТипа(ТекущаяСсылка) Или Не ЗначениеЗаполнено(ТекущаяСсылка) Тогда + Продолжить; + КонецЕсли; - Иначе + Если ПараметрыПроверки.КэшСсылок[ТекущаяСсылка] <> Неопределено Тогда + Продолжить; + КонецЕсли; - Если Не ОбщегоНазначения.СсылкаСуществует(ТекущаяСсылка) Тогда - УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") - + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У регистра расчета ""%1"" в %2, записи №%3 по регистратору ""%4"" указан несуществующий элемент: ""%5"".'"), - ОбъектМетаданных.Представление(), ПодчиненныйОбъект.ТипМетаданныхВТворительномПадеже, - Формат(СтрокаРезультата.НомерСтроки, "ЧГ=0"), СтрокаРезультата["РегистраторРеквизитПредставление"], - СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Представление"]); + ОбнаруженаБитаяСсылка = КэшБитыхСсылок.Получить(ТекущаяСсылка) <> Неопределено; + Если Не ОбнаруженаБитаяСсылка И Не ОбщегоНазначения.СсылкаСуществует(ТекущаяСсылка) Тогда КэшБитыхСсылок.Вставить(ТекущаяСсылка, ""); - Иначе + ОбнаруженаБитаяСсылка = Истина; + КонецЕсли; + + Если Не ОбнаруженаБитаяСсылка Тогда Если ПараметрыПроверки.КэшСсылок.Количество() = РазмерКэшаПроверенныхСсылок Тогда ПараметрыПроверки.КэшСсылок.Очистить(); КонецЕсли; ПараметрыПроверки.КэшСсылок.Вставить(ТекущаяСсылка, ""); + Продолжить; КонецЕсли; + + НомераПроблемныхЗаписей = НомераПроблемныхЗаписей + ?(ЗначениеЗаполнено(НомераПроблемныхЗаписей), ", ", "") + + Формат(ТекущийНаборЗаписей.Индекс(ТекущаяЗапись) + 1, "ЧГ=0"); - КонецЕсли; - - Если Не ЗначениеЗаполнено(УточнениеПроблемы) Тогда - Продолжить; - КонецЕсли; - - СтруктураНабораЗаписей = Новый Структура; - СтруктураНабораЗаписей.Вставить("Регистратор", СтрокаРезультата["РегистраторРеквизитСсылка"]); - - Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных), ПараметрыПроверки); - - Проблема.УточнениеПроблемы = НСтр("ru = 'Обнаружено нарушение ссылочной целостности:'") + Символы.ПС + УточнениеПроблемы; - Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(СтруктураНабораЗаписей); - - ЗаписатьПроблему(Проблема, ПараметрыПроверки); + КонецЦикла; КонецЦикла; + Если ПустаяСтрока(НомераПроблемныхЗаписей) Тогда + Продолжить; + КонецЕсли; + + Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных), ПараметрыПроверки); + + Проблема.УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'У регистра расчета ""%1"" в записях с номерами %2 по регистратору ""%3"" указаны ссылки на несуществующие данные.'"), + ОбъектМетаданных.Представление(), НомераПроблемныхЗаписей, СтрокаРезультата.РегистраторПредставление); + + ДополнительнаяИнформация = Новый Структура; + ДополнительнаяИнформация.Вставить("Регистратор", СтрокаРезультата.РегистраторРеквизитСсылка); + Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(ДополнительнаяИнформация); + + ЗаписатьПроблему(Проблема, ПараметрыПроверки); + КонецЦикла; - Запрос.УстановитьПараметр("НомерСтроки", СтрокаРезультата["НомерСтроки"]); - Запрос.УстановитьПараметр("Регистратор", СтрокаРезультата["РегистраторРеквизитСсылка"]); + Запрос.УстановитьПараметр("ДатаНачалаПроверки", СтрокаРезультата.Период); Результат = Запрос.Выполнить().Выгрузить(); КонецЦикла; КонецПроцедуры -#КонецОбласти +Функция СсылочныеРеквизитыРегистра(ОбъектМетаданных) + + Измерения = ОбъектМетаданных.Измерения; + Реквизиты = ОбъектМетаданных.Реквизиты; + + Результат = Новый Массив; + + Для Каждого Реквизит Из Реквизиты Цикл + Если СодержитСсылочныйТип(Реквизит) Тогда + Результат.Добавить(Реквизит.Имя); + КонецЕсли; + КонецЦикла; + + Если ОбщегоНазначения.ЭтоРегистрРасчета(ОбъектМетаданных) Тогда + + Для Каждого Измерение Из Измерения Цикл + Если СодержитСсылочныйТип(Измерение) Тогда + Результат.Добавить(Измерение.Имя); + КонецЕсли; + КонецЦикла; + + СтандартныеРеквизиты = ОбъектМетаданных.СтандартныеРеквизиты; + Для Каждого СтандартныйРеквизит Из СтандартныеРеквизиты Цикл + Если СтандартныйРеквизит.Имя = "Регистратор" Или Не СодержитСсылочныйТип(СтандартныйРеквизит) Тогда + Продолжить; + КонецЕсли; + Результат.Добавить(СтандартныйРеквизит.Имя); + КонецЦикла; + + ИначеЕсли ОбщегоНазначения.ЭтоРегистрСведений(ОбъектМетаданных) Или ОбщегоНазначения.ЭтоРегистрНакопления(ОбъектМетаданных) Тогда + + Для Каждого Измерение Из Измерения Цикл + Если СодержитСсылочныйТип(Измерение) Тогда + Результат.Добавить(Измерение.Имя); + КонецЕсли; + КонецЦикла; + + Ресурсы = ОбъектМетаданных.Ресурсы; + Для Каждого Ресурс Из Ресурсы Цикл + Если СодержитСсылочныйТип(Ресурс) Тогда + Результат.Добавить(Ресурс.Имя); + КонецЕсли; + КонецЦикла; + + КонецЕсли; + + Возврат Результат; + +КонецФункции +Функция СодержитСсылочныйТип(Реквизит) + + ТипыРеквизита = Реквизит.Тип.Типы(); + Для Каждого ТекущийТип Из ТипыРеквизита Цикл + Если ОбщегоНазначения.ЭтоСсылка(ТекущийТип) Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + Возврат Ложь; + +КонецФункции + +Функция ВидыСубконто(ОбъектМетаданных) + + ВидыСубконтоОМ = ОбъектМетаданных.ПланСчетов.ВидыСубконто; + Если Не СодержитСсылочныйТип(ВидыСубконтоОМ) Тогда + Возврат Новый Массив; + КонецЕсли; + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ПланВидовХарактеристик.Ссылка КАК ВидСубконто + |ИЗ + | &ПланВидовХарактеристик КАК ПланВидовХарактеристик"); + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ПланВидовХарактеристик", ОбъектМетаданных.ПланСчетов.ВидыСубконто.ПолноеИмя()); + Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ВидСубконто"); + +КонецФункции + +Функция ИнформацияОНезависимомРегистре(ОбъектМетаданных, ПолучитьИзмерения = Истина, ПолучитьРесурсы = Истина, ПолучитьРеквизиты = Истина) + + ИнформацияОРегистре = Новый ТаблицаЗначений; + ИнформацияОРегистре.Колонки.Добавить("ТипМетаданныхВИменительномПадеже", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(16))); + ИнформацияОРегистре.Колонки.Добавить("ТипМетаданныхВТворительномПадеже", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(16))); + ИнформацияОРегистре.Колонки.Добавить("ИмяМетаданных", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(128))); + + ПоляВыборки = ""; + + Если ПолучитьИзмерения Тогда + Измерения = ОбъектМетаданных.Измерения; + Для Каждого Измерение Из Измерения Цикл + ИмяИзмерения = Измерение.Имя; + ПоляВыборки = ПоляВыборки + ?(ЗначениеЗаполнено(ПоляВыборки), ",", "") + ИмяИзмерения + " Как " + ИмяИзмерения + + "ИзмерениеСсылка,ПредставлениеСсылки(" + ИмяИзмерения + ") Как " + ИмяИзмерения + "ИзмерениеПредставление"; + ЗаполнитьЗначенияСвойств(ИнформацияОРегистре.Добавить(), + Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", + "Измерение", НСтр("ru = 'измерении'"), ИмяИзмерения)); + КонецЦикла; + КонецЕсли; + + Если ПолучитьРесурсы Тогда + Ресурсы = ОбъектМетаданных.Ресурсы; + Для Каждого Ресурс Из Ресурсы Цикл + ИмяРесурса = Ресурс.Имя; + ПоляВыборки = ПоляВыборки + ?(ЗначениеЗаполнено(ПоляВыборки), ",", "") + ИмяРесурса + " Как " + ИмяРесурса + + "РесурсСсылка,ПредставлениеСсылки(" + ИмяРесурса + ") Как " + ИмяРесурса + "РесурсПредставление"; + ЗаполнитьЗначенияСвойств(ИнформацияОРегистре.Добавить(), + Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", + "Ресурс", НСтр("ru = 'ресурсе'"), ИмяРесурса)); + КонецЦикла; + КонецЕсли; + + Если ПолучитьРеквизиты Тогда + Реквизиты = ОбъектМетаданных.Реквизиты; + Для Каждого Реквизит Из Реквизиты Цикл + ИмяРеквизита = Реквизит.Имя; + ПоляВыборки = ПоляВыборки + ?(ЗначениеЗаполнено(ПоляВыборки), ",", "") + ИмяРеквизита + " Как " + ИмяРеквизита + + "РеквизитСсылка,ПредставлениеСсылки(" + ИмяРеквизита + ") Как " + ИмяРеквизита + "РеквизитПредставление"; + ЗаполнитьЗначенияСвойств(ИнформацияОРегистре.Добавить(), + Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", + "Реквизит", НСтр("ru = 'реквизите'"), ИмяРеквизита)); + КонецЦикла; + КонецЕсли; + + Возврат Новый Структура("ИнформацияОРегистре, ПоляВыборки", ИнформацияОРегистре, ПоляВыборки); + +КонецФункции + +Функция РазмерКэшаПроверенныхСсылок() + + Возврат 100000; + +КонецФункции + #КонецОбласти #КонецОбласти @@ -2700,12 +2778,7 @@ ОбщееКоличествоДанных = 0; ОграничениеПоДате = ПараметрыПроверки.ДатаНачалаПроверки; - - Пока Истина Цикл - - Если Результат.Количество() = 0 Тогда - Прервать; - КонецЕсли; + Пока Результат.Количество() > 0 Цикл Если МодульОценкаПроизводительности <> Неопределено Тогда ОписаниеЗамера = МодульОценкаПроизводительности.НачатьЗамерДлительнойОперации(ПараметрыПроверки.Идентификатор + "." + ПолноеИмя); @@ -2729,19 +2802,14 @@ Продолжить; КонецЕсли; - УточнениеПроблемы = ""; ПроверяемыйОбъект = СсылкаНаОбъект.ПолучитьОбъект(); - Если Не ПроверяемыйОбъект.ПроверитьЗаполнение() Тогда - УточнениеПроблемы = УточнениеПроблемы(ПолучитьСообщенияПользователю(Истина)); - КонецЕсли; - - Если Не ЗначениеЗаполнено(УточнениеПроблемы) Тогда + Если ПроверяемыйОбъект.ПроверитьЗаполнение() Тогда Продолжить; КонецЕсли; Проблема = ОписаниеПроблемы(СсылкаНаОбъект, ПараметрыПроверки); - Проблема.УточнениеПроблемы = НСтр("ru = 'Не заполнены реквизиты, обязательные к заполнению:'") + Символы.ПС + УточнениеПроблемы; + Проблема.УточнениеПроблемы = НСтр("ru = 'Не заполнены реквизиты, обязательные к заполнению:'") + Символы.ПС + ОшибкиЗаполненияОбъекта(); Если Реквизиты.Найти("Ответственный") <> Неопределено Тогда Проблема.Вставить("Ответственный", ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаНаОбъект, "Ответственный")); КонецЕсли; @@ -2751,7 +2819,6 @@ КонецЦикла; ОбщееКоличествоДанных = ОбщееКоличествоДанных + Результат.Количество(); - Если МодульОценкаПроизводительности <> Неопределено Тогда МодульОценкаПроизводительности.ЗакончитьЗамерДлительнойОперации(ОписаниеЗамера, ОбщееКоличествоДанных); КонецЕсли; @@ -2870,8 +2937,8 @@ КонецЕсли; - Результат = Запрос.Выполнить().Выгрузить(); - МенеджерРегистра = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя); + Результат = Запрос.Выполнить().Выгрузить(); + МенеджерРегистра = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя); ОбщееКоличествоДанных = 0; Пока Результат.Количество() > 0 Цикл @@ -2946,16 +3013,15 @@ Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОбъектМетаданных", ПолноеИмя); Запрос.УстановитьПараметр("Регистратор", ""); - Результат = Запрос.Выполнить().Выгрузить(); - МенеджерРегистра = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя); - ОбщееКоличествоДанных = 0; + Результат = Запрос.Выполнить().Выгрузить(); + МенеджерРегистра = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя); + ОбщееКоличествоДанных = 0; Пока Результат.Количество() > 0 Цикл Если МодульОценкаПроизводительности <> Неопределено Тогда ОписаниеЗамера = МодульОценкаПроизводительности.НачатьЗамерДлительнойОперации(ПараметрыПроверки.Идентификатор + "." + ПолноеИмя); КонецЕсли; - Для Каждого СтрокаРезультата Из Результат Цикл ТекущийНаборЗаписей = МенеджерРегистра.СоздатьНаборЗаписей(); @@ -2982,7 +3048,6 @@ КонецЦикла; ОбщееКоличествоДанных = ОбщееКоличествоДанных + Результат.Количество(); - Если МодульОценкаПроизводительности <> Неопределено Тогда МодульОценкаПроизводительности.ЗакончитьЗамерДлительнойОперации(ОписаниеЗамера, ОбщееКоличествоДанных); КонецЕсли; @@ -3001,15 +3066,15 @@ МодульОценкаПроизводительности = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительности"); КонецЕсли; - ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); МенеджерРегистра = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя); - Условие = ""; - ПоляУпорядочивания = ""; - Измерения = ОбъектМетаданных.Измерения; + УсловиеПоИзмерениям = ""; + ПоляУпорядочивания = ""; + Измерения = ОбъектМетаданных.Измерения; Для Каждого Измерение Из Измерения Цикл - Условие = Условие + ?(ЗначениеЗаполнено(Условие), " И ", "") + Измерение.Имя + " >= &" + Измерение.Имя; - ПоляУпорядочивания = ПоляУпорядочивания + ?(ЗначениеЗаполнено(ПоляУпорядочивания), ", ", "") + Измерение.Имя; + УсловиеПоИзмерениям = УсловиеПоИзмерениям + ?(ЗначениеЗаполнено(УсловиеПоИзмерениям), " И ", "") + Измерение.Имя + " >= &" + Измерение.Имя; + ПоляУпорядочивания = ПоляУпорядочивания + ?(ЗначениеЗаполнено(ПоляУпорядочивания), ", ", "") + Измерение.Имя; КонецЦикла; ПоляВыборки = ИнформацияОНезависимомРегистре(ОбъектМетаданных, Истина, Ложь, Ложь).ПоляВыборки; @@ -3020,22 +3085,26 @@ |ИЗ | &ОбъектМетаданных КАК ОбъектМетаданных |ГДЕ - | &Условие"; + | &Условие + | + |УПОРЯДОЧИТЬ ПО + | &ПоляУпорядочивания"; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Условие", "ИСТИНА УПОРЯДОЧИТЬ ПО " + ПоляУпорядочивания); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "КАК ПоляВыборки", ""); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПоляУпорядочивания", ПоляУпорядочивания); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПоляВыборки КАК ПоляВыборки", ПоляВыборки); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОбъектМетаданных", ОбъектМетаданных.ПолноеИмя()); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПоляВыборки", ПоляВыборки); - ОбщееКоличествоДанных = 0; + ТекстПервогоЗапроса = СтрЗаменить(ТекстЗапроса, "&Условие", "Истина"); + ТекстЗапросаСУсловием = СтрЗаменить(ТекстЗапроса, "&Условие", УсловиеПоИзмерениям); - Запрос = Новый Запрос(ТекстЗапроса); + Запрос = Новый Запрос(ТекстПервогоЗапроса); Результат = Запрос.Выполнить().Выгрузить(); - УсловиеПервогоПрохода = "ГДЕ" + Символы.ПС + Символы.Таб + "ИСТИНА"; + ЭтоПервыйПроход = Истина; + ОбщееКоличествоДанных = 0; Пока Результат.Количество() > 0 Цикл - ЭтоПервыйПроход = СтрНайти(Запрос.Текст, УсловиеПервогоПрохода) <> 0; + // Последняя запись уже проверена на предыдущей итерации. Если Не ЭтоПервыйПроход И Результат.Количество() = 1 Тогда Прервать; КонецЕсли; @@ -3091,20 +3160,20 @@ КонецЦикла; - ОбщееКоличествоДанных = ОбщееКоличествоДанных + Результат.Количество(); - - Если МодульОценкаПроизводительности <> Неопределено Тогда - МодульОценкаПроизводительности.ЗакончитьЗамерДлительнойОперации(ОписаниеЗамера, ОбщееКоличествоДанных); - КонецЕсли; - Если ЭтоПервыйПроход Тогда - Запрос.Текст = СтрЗаменить(Запрос.Текст, УсловиеПервогоПрохода, "Где " + Условие); + ЭтоПервыйПроход = Ложь; + Запрос.Текст = ТекстЗапросаСУсловием; КонецЕсли; Для Каждого Измерение Из Измерения Цикл Запрос.УстановитьПараметр(Измерение.Имя, СтрокаРезультата[Измерение.Имя + "ИзмерениеСсылка"]); КонецЦикла; + ОбщееКоличествоДанных = ОбщееКоличествоДанных + Результат.Количество(); + Если МодульОценкаПроизводительности <> Неопределено Тогда + МодульОценкаПроизводительности.ЗакончитьЗамерДлительнойОперации(ОписаниеЗамера, ОбщееКоличествоДанных); + КонецЕсли; + Результат = Запрос.Выполнить().Выгрузить(); КонецЦикла; @@ -3151,11 +3220,10 @@ Запрос = Новый Запрос(ТекстПервогоЗапроса); Запрос.УстановитьПараметр("Период", ПараметрыПроверки.ДатаНачалаПроверки); - ОбщееКоличествоДанных = 0; - Результат = Запрос.Выполнить().Выгрузить(); ЭтоПервыйПроход = Истина; + ОбщееКоличествоДанных = 0; Пока Результат.Количество() > 0 Цикл // Последняя запись уже проверена на предыдущей итерации. @@ -3172,8 +3240,8 @@ ТекущийНаборЗаписей = МенеджерРегистра.СоздатьНаборЗаписей(); ОтборТекущегоНабора = ТекущийНаборЗаписей.Отбор; - ПредставлениеОтбораНабораЗаписей = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - "• %1 = ""%2""", НСтр("ru = 'Период'"), СтрокаРезультата.Период); + ПредставлениеОтбораНабораЗаписей = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(" • %1 = ""%2""", + НСтр("ru = 'Период'"), СтрокаРезультата.Период); Для Каждого Измерение Из Измерения Цикл ИмяИзмерения = Измерение.Имя; @@ -3190,17 +3258,13 @@ КонецЦикла; ТекущийНаборЗаписей.Прочитать(); - УточнениеПроблемы = ""; - Если Не ТекущийНаборЗаписей.ПроверитьЗаполнение() Тогда - УточнениеПроблемы = ОшибкиЗаполненияОбъекта(); - КонецЕсли; - - Если Не ЗначениеЗаполнено(УточнениеПроблемы) Тогда + Если ТекущийНаборЗаписей.ПроверитьЗаполнение() Тогда Продолжить; КонецЕсли; + УточнениеПроблемы = ОшибкиЗаполненияОбъекта(); СтруктураНабораЗаписей = Новый Структура; - СтруктураНабораЗаписей.Вставить("Период", СтрокаРезультата["Период"]); + СтруктураНабораЗаписей.Вставить("Период", СтрокаРезультата.Период); Для Каждого Измерение Из Измерения Цикл ИзмерениеСсылка = СтрокаРезультата[Измерение.Имя + "ИзмерениеСсылка"]; СтруктураНабораЗаписей.Вставить(Измерение.Имя, ИзмерениеСсылка); @@ -3208,28 +3272,20 @@ Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных), ПараметрыПроверки); - Проблема.УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'У записи с полями: + Проблема.УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'У записи с полями: |%1, - |обнаружены незаполненные данные, обязательные к заполнению: %2'"), - ПредставлениеОтбораНабораЗаписей, Символы.ПС + УточнениеПроблемы); + |обнаружены незаполненные данные, обязательные к заполнению: %2'"), ПредставлениеОтбораНабораЗаписей, Символы.ПС + УточнениеПроблемы); Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(СтруктураНабораЗаписей); ЗаписатьПроблему(Проблема, ПараметрыПроверки); КонецЦикла; - ОбщееКоличествоДанных = ОбщееКоличествоДанных + Результат.Количество(); - - Если МодульОценкаПроизводительности <> Неопределено Тогда - МодульОценкаПроизводительности.ЗакончитьЗамерДлительнойОперации(ОписаниеЗамера, ОбщееКоличествоДанных); - КонецЕсли; - Если ЭтоПервыйПроход Тогда ЭтоПервыйПроход = Ложь; Запрос.Текст = ТекстЗапросаСУсловием; КонецЕсли; - Запрос.УстановитьПараметр("Период", СтрокаРезультата["Период"]); + Запрос.УстановитьПараметр("Период", СтрокаРезультата.Период); Для Каждого Измерение Из Измерения Цикл Запрос.УстановитьПараметр(Измерение.Имя, СтрокаРезультата[Измерение.Имя + "ИзмерениеСсылка"]); КонецЦикла; @@ -3240,72 +3296,6 @@ КонецПроцедуры -Функция ОшибкиЗаполненияОбъекта() - - УточнениеПроблемы = ""; - Для Каждого ПользовательскоеСообщение Из ПолучитьСообщенияПользователю(Истина) Цикл - УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + ПользовательскоеСообщение.Текст; - КонецЦикла; - - Возврат ?(ПустаяСтрока(УточнениеПроблемы), НСтр("ru = 'Для подробной информации необходимо открыть форму объекта.'"), УточнениеПроблемы); - -КонецФункции - -Функция ИнформацияОНезависимомРегистре(ОбъектМетаданных, ПолучитьИзмерения = Истина, ПолучитьРесурсы = Истина, ПолучитьРеквизиты = Истина) - - ИнформацияОРегистре = Новый ТаблицаЗначений; - ИнформацияОРегистре.Колонки.Добавить("ТипМетаданныхВИменительномПадеже", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(16))); - ИнформацияОРегистре.Колонки.Добавить("ТипМетаданныхВТворительномПадеже", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(16))); - ИнформацияОРегистре.Колонки.Добавить("ИмяМетаданных", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(128))); - - ПоляВыборки = ""; - - Если ПолучитьИзмерения Тогда - Измерения = ОбъектМетаданных.Измерения; - Для Каждого Измерение Из Измерения Цикл - ИмяИзмерения = Измерение.Имя; - ПоляВыборки = ПоляВыборки + ?(ЗначениеЗаполнено(ПоляВыборки), ",", "") + ИмяИзмерения + " Как " + ИмяИзмерения - + "ИзмерениеСсылка,ПредставлениеСсылки(" + ИмяИзмерения + ") Как " + ИмяИзмерения + "ИзмерениеПредставление"; - ЗаполнитьЗначенияСвойств(ИнформацияОРегистре.Добавить(), - Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", - "Измерение", НСтр("ru = 'измерении'"), ИмяИзмерения)); - КонецЦикла; - КонецЕсли; - - Если ПолучитьРесурсы Тогда - Ресурсы = ОбъектМетаданных.Ресурсы; - Для Каждого Ресурс Из Ресурсы Цикл - ИмяРесурса = Ресурс.Имя; - ПоляВыборки = ПоляВыборки + ?(ЗначениеЗаполнено(ПоляВыборки), ",", "") + ИмяРесурса + " Как " + ИмяРесурса - + "РесурсСсылка,ПредставлениеСсылки(" + ИмяРесурса + ") Как " + ИмяРесурса + "РесурсПредставление"; - ЗаполнитьЗначенияСвойств(ИнформацияОРегистре.Добавить(), - Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", - "Ресурс", НСтр("ru = 'ресурсе'"), ИмяРесурса)); - КонецЦикла; - КонецЕсли; - - Если ПолучитьРеквизиты Тогда - Реквизиты = ОбъектМетаданных.Реквизиты; - Для Каждого Реквизит Из Реквизиты Цикл - ИмяРеквизита = Реквизит.Имя; - ПоляВыборки = ПоляВыборки + ?(ЗначениеЗаполнено(ПоляВыборки), ",", "") + ИмяРеквизита + " Как " + ИмяРеквизита - + "РеквизитСсылка,ПредставлениеСсылки(" + ИмяРеквизита + ") Как " + ИмяРеквизита + "РеквизитПредставление"; - ЗаполнитьЗначенияСвойств(ИнформацияОРегистре.Добавить(), - Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", - "Реквизит", НСтр("ru = 'реквизите'"), ИмяРеквизита)); - КонецЦикла; - КонецЕсли; - - Возврат Новый Структура("ИнформацияОРегистре, ПоляВыборки", ИнформацияОРегистре, ПоляВыборки); - -КонецФункции - -Функция РазмерКэшаПроверенныхСсылок() - - Возврат 100000; - -КонецФункции - #КонецОбласти #Область ПроверкаЦиклическихСсылок @@ -3336,11 +3326,7 @@ Результат = Запрос.Выполнить().Выгрузить(); МассивИсключений = Новый Массив; - Пока Истина Цикл - - Если Результат.Количество() = 0 Тогда - Прервать; - КонецЕсли; + Пока Результат.Количество() > 0 Цикл Для Каждого СтрокаРезультата Из Результат Цикл @@ -3360,7 +3346,7 @@ Для Каждого ЭлементЦикла Из ЦиклВМассиве Цикл ЗначениеПредставления = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ЭлементЦикла, Новый Структура("Представление", "ПредставлениеСсылки(Ссылка)")); - Путь = Путь + ?(ЗначениеЗаполнено(Путь), " -> ", "") + ЗначениеПредставления["Представление"]; + Путь = Путь + ?(ЗначениеЗаполнено(Путь), " -> ", "") + ЗначениеПредставления.Представление; МассивИсключений.Добавить(ЭлементЦикла); КонецЦикла; @@ -3415,6 +3401,93 @@ КонецФункции +// Исправляет циклические ссылки по принципу: у кого больше терминальных элементов в подчинении, +// тот остается родителем. +// +// Параметры: +// Проверка - СправочникСсылка.ПравилаПроверкиУчета - Проверка, найденные проблемы которой +// исправляются данным методом. +// +Процедура ИсправитьПроблемуЦиклическихСсылок(Проверка) + + ТаблицаПотомства = Новый ТаблицаЗначений; + ТаблицаПотомства.Колонки.Добавить("ЭлементЦикла"); + ТаблицаПотомства.Колонки.Добавить("КоличествоДетей", Новый ОписаниеТипов("Число")); + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | РезультатыПроверкиУчета.ПроблемныйОбъект КАК ПроблемныйОбъект + |ИЗ + | РегистрСведений.РезультатыПроверкиУчета КАК РезультатыПроверкиУчета + |ГДЕ + | НЕ РезультатыПроверкиУчета.ИгнорироватьПроблему + | И РезультатыПроверкиУчета.ПравилоПроверки = &ПравилоПроверки"); + + Запрос.УстановитьПараметр("ПравилоПроверки", Проверка); + Результат = Запрос.Выполнить().Выбрать(); + + Пока Результат.Следующий() Цикл + + ПроблемныйОбъектСсылка = Результат.ПроблемныйОбъект; + Родитель = ПроблемныйОбъектСсылка.Родитель; + + НайденЦикл = Ложь; + ЦиклВМассиве = Новый Массив; + ПроверитьЗацикливаниеУровней(ПроблемныйОбъектСсылка, Родитель, НайденЦикл, ЦиклВМассиве); + Если Не НайденЦикл Тогда + Продолжить; + КонецЕсли; + + ПоследнийОбъектЦикла = ЦиклВМассиве.Получить(ЦиклВМассиве.Количество() - 1); + + КоличествоДетейПервого = КоличествоДочернихЭлементов(ПроблемныйОбъектСсылка, Родитель); + КоличествоДетейВторого = КоличествоДочернихЭлементов(ПоследнийОбъектЦикла, Родитель); + + Если КоличествоДетейПервого > КоличествоДетейВторого Тогда + ПроблемныйОбъект = ПроблемныйОбъектСсылка.ПолучитьОбъект(); + Иначе + ПроблемныйОбъект = ПоследнийОбъектЦикла.ПолучитьОбъект(); + КонецЕсли; + + ПроблемныйОбъект.Родитель = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПроблемныйОбъектСсылка.Метаданные().ПолноеИмя()).ПустаяСсылка(); + ПроблемныйОбъект.ОбменДанными.Загрузка = Истина; + ПроблемныйОбъект.Записать(); + + КонецЦикла; + +КонецПроцедуры + +Функция КоличествоДочернихЭлементов(СсылкаНаОбъект, ИсключениеВыборки, Знач НачальноеЗначение = 0) + + КоличествоДетей = НачальноеЗначение; + + ТекстЗапроса = + "ВЫБРАТЬ + | ОбъектМетаданных.Ссылка КАК Ссылка + |ИЗ + | &ОбъектМетаданных КАК ОбъектМетаданных + |ГДЕ + | ОбъектМетаданных.Родитель = &Родитель + | И ОбъектМетаданных.Ссылка <> &ИсключениеВыборки"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОбъектМетаданных", СсылкаНаОбъект.Метаданные().ПолноеИмя()); + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("Родитель", СсылкаНаОбъект); + Запрос.УстановитьПараметр("ИсключениеВыборки", ИсключениеВыборки); + Результат = Запрос.Выполнить(); + + Если Не Результат.Пустой() Тогда + Выгрузка = Результат.Выгрузить(); + КоличествоДетей = КоличествоДетей + Выгрузка.Количество(); + Для Каждого ЭлементПотомства Из Выгрузка Цикл + КоличествоДетей = КоличествоДочернихЭлементов(ЭлементПотомства.Ссылка, ИсключениеВыборки, КоличествоДетей); + КонецЦикла; + КонецЕсли; + Возврат КоличествоДетей; + +КонецФункции + #КонецОбласти #Область ПроверкаОтсутствующихПредопределенныхЭлементов @@ -3508,7 +3581,7 @@ Если Не ЗначениеЗаполнено(Пакеты) Тогда Возврат; КонецЕсли; - + Запрос = Новый Запрос(Пакеты + ";" + Выборки + " ИТОГИ ПО ПроблемныйОбъект, ИмяПредопределенныхДанных"); Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; @@ -3559,157 +3632,52 @@ #КонецОбласти -#Область ИсправлениеПроблемЦиклическиеСсылки +#Область Прочее -// Исправляет проблему циклических ссылок по принципу, у кого больше терминальных элементов -// в подчинении, тот и остается родителем. -// -// Параметры: -// Проверка - СправочникСсылка.ПравилаПроверкиУчета - Проверка, найденные проблемы которой -// исправляются данным методом. -// -Процедура ИсправитьПроблемуЦиклическихСсылок(Проверка) +Функция ПредставлениеПроблемногоОбъекта(ПроблемныйОбъект, ПроблемныйОбъектПредставление, ДополнительнаяИнформация) Экспорт - ТаблицаПотомства = Новый ТаблицаЗначений; - ТаблицаПотомства.Колонки.Добавить("ЭлементЦикла"); - ТаблицаПотомства.Колонки.Добавить("КоличествоДетей", Новый ОписаниеТипов("Число")); + Результат = ПроблемныйОбъектПредставление + " (" + ПроблемныйОбъект.Метаданные().Представление() + ")"; + Если ТипЗнч(ПроблемныйОбъект) <> Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда + Возврат Результат; + КонецЕсли; - Запрос = Новый Запрос( - "ВЫБРАТЬ - | РезультатыПроверкиУчета.ПроблемныйОбъект КАК ПроблемныйОбъект - |ИЗ - | РегистрСведений.РезультатыПроверкиУчета КАК РезультатыПроверкиУчета - |ГДЕ - | НЕ РезультатыПроверкиУчета.ИгнорироватьПроблему - | И РезультатыПроверкиУчета.ПравилоПроверки = &ПравилоПроверки"); + Результат = Строка(ПроблемныйОбъект) + "<РасшифровкаСписка>" + Символы.ПС + ПроблемныйОбъект.ПолноеИмя; + Если Не ОбщегоНазначения.ЭтоРегистр(Метаданные.НайтиПоПолномуИмени(ПроблемныйОбъект.ПолноеИмя)) Тогда + Возврат Результат; + КонецЕсли; + + СтруктураНабора = ДополнительнаяИнформация.Получить(); + Если ТипЗнч(СтруктураНабора) <> Тип("Структура") Тогда + Возврат Результат; + КонецЕсли; - Запрос.УстановитьПараметр("ПравилоПроверки", Проверка); - Результат = Запрос.Выполнить().Выбрать(); - - Пока Результат.Следующий() Цикл + Для Каждого ЭлементНабора Из СтруктураНабора Цикл - ПроблемныйОбъектСсылка = Результат.ПроблемныйОбъект; - Родитель = ПроблемныйОбъектСсылка.Родитель; + ЗначениеОтбора = ЭлементНабора.Значение; + ТипЗначенияОтбора = ТипЗнч(ЗначениеОтбора); + ИнформацияОТипе = ""; - НайденЦикл = Ложь; - ЦиклВМассиве = Новый Массив; - ПроверитьЗацикливаниеУровней(ПроблемныйОбъектСсылка, Родитель, НайденЦикл, ЦиклВМассиве); - Если Не НайденЦикл Тогда - Продолжить; - КонецЕсли; - - ПоследнийОбъектЦикла = ЦиклВМассиве.Получить(ЦиклВМассиве.Количество() - 1); - - КоличествоДетейПервого = КоличествоДочернихЭлементов(ПроблемныйОбъектСсылка, Родитель); - КоличествоДетейВторого = КоличествоДочернихЭлементов(ПоследнийОбъектЦикла, Родитель); - - Если КоличествоДетейПервого > КоличествоДетейВторого Тогда - ПроблемныйОбъект = ПроблемныйОбъектСсылка.ПолучитьОбъект(); - Иначе - ПроблемныйОбъект = ПоследнийОбъектЦикла.ПолучитьОбъект(); + Если ТипЗначенияОтбора = Тип("Число") Тогда + ИнформацияОТипе = "Число"; + ИначеЕсли ТипЗначенияОтбора = Тип("Строка") Тогда + ИнформацияОТипе = "Строка"; + ИначеЕсли ТипЗначенияОтбора = Тип("Булево") Тогда + ИнформацияОТипе = "Булево"; + ИначеЕсли ТипЗначенияОтбора = Тип("Дата") Тогда + ИнформацияОТипе = "Дата"; + ИначеЕсли ОбщегоНазначения.ЭтоСсылка(ТипЗначенияОтбора) Тогда + ИнформацияОТипе = ЗначениеОтбора.Метаданные().ПолноеИмя(); КонецЕсли; - ПроблемныйОбъект.Родитель = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПроблемныйОбъектСсылка.Метаданные().ПолноеИмя()).ПустаяСсылка(); - ПроблемныйОбъект.ОбменДанными.Загрузка = Истина; - ПроблемныйОбъект.Записать(); + Результат = Результат + Символы.ПС + Строка(ЭлементНабора.Ключ) + "~~~" + ИнформацияОТипе + "~~~" + Строка(XMLСтрока(ЗначениеОтбора)); КонецЦикла; -КонецПроцедуры - -Функция КоличествоДочернихЭлементов(СсылкаНаОбъект, ИсключениеВыборки, Знач НачальноеЗначение = 0) - - КоличествоДетей = НачальноеЗначение; - - ТекстЗапроса = - "ВЫБРАТЬ - | ОбъектМетаданных.Ссылка КАК Ссылка - |ИЗ - | &ОбъектМетаданных КАК ОбъектМетаданных - |ГДЕ - | ОбъектМетаданных.Родитель = &Родитель - | И ОбъектМетаданных.Ссылка <> &ИсключениеВыборки"; - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОбъектМетаданных", СсылкаНаОбъект.Метаданные().ПолноеИмя()); - - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("Родитель", СсылкаНаОбъект); - Запрос.УстановитьПараметр("ИсключениеВыборки", ИсключениеВыборки); - Результат = Запрос.Выполнить(); - - Если Не Результат.Пустой() Тогда - Выгрузка = Результат.Выгрузить(); - КоличествоДетей = КоличествоДетей + Выгрузка.Количество(); - Для Каждого ЭлементПотомства Из Выгрузка Цикл - КоличествоДетей = КоличествоДочернихЭлементов(ЭлементПотомства.Ссылка, ИсключениеВыборки, КоличествоДетей); - КонецЦикла; - КонецЕсли; - Возврат КоличествоДетей; + Возврат Результат; КонецФункции -#КонецОбласти - -#Область ДополнительнаяФункциональностьДляРаботыВСКД - -Функция ОформитьПредставлениеПроблемногоОбъекта(ПроблемныйОбъект, ПроблемныйОбъектПредставление, ДополнительнаяИнформация) Экспорт - - ОформленноеПредставлениеОбъекта = ПроблемныйОбъектПредставление + " (" + ПроблемныйОбъект.Метаданные().Представление() + ")"; - - Если ТипЗнч(ПроблемныйОбъект) <> Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда - Возврат ОформленноеПредставлениеОбъекта; - Иначе - ПолноеИмя = ПроблемныйОбъект.ПолноеИмя; - Если Не ОбщегоНазначения.ЭтоРегистр(Метаданные.НайтиПоПолномуИмени(ПолноеИмя)) Тогда - Возврат ПроблемныйОбъектПредставление; - Иначе - - СтруктураНабора = ДополнительнаяИнформация.Получить(); - - Если ТипЗнч(СтруктураНабора) <> Тип("Структура") Тогда - Возврат ОформленноеПредставлениеОбъекта; - КонецЕсли; - - СтрокаРазмещения = Строка(ПроблемныйОбъект) + "<РазмещениеСтруктурыНабораЗаписейДляПоследующейРасшифровки>" + Символы.ПС + ПолноеИмя; - Для Каждого ЭлементНабора Из СтруктураНабора Цикл - - ЗначениеОтбора = ЭлементНабора.Значение; - ТипЗначенияОтбора = ТипЗнч(ЗначениеОтбора); - ИнформацияОТипе = ""; - - Если ТипЗначенияОтбора = Тип("Число") Тогда - ИнформацияОТипе = "Число"; - ИначеЕсли ТипЗначенияОтбора = Тип("Строка") Тогда - ИнформацияОТипе = "Строка"; - ИначеЕсли ТипЗначенияОтбора = Тип("Булево") Тогда - ИнформацияОТипе = "Булево"; - ИначеЕсли ТипЗначенияОтбора = Тип("Дата") Тогда - ИнформацияОТипе = "Дата"; - ИначеЕсли ОбщегоНазначения.ЭтоСсылка(ТипЗначенияОтбора) Тогда - ИнформацияОТипе = ЗначениеОтбора.Метаданные().ПолноеИмя(); - КонецЕсли; - - СтрокаРазмещения = СтрокаРазмещения + Символы.ПС + Строка(ЭлементНабора.Ключ) + "~~~" + ИнформацияОТипе + "~~~" + Строка(XMLСтрока(ЗначениеОтбора)); - - КонецЦикла; - - Возврат СтрокаРазмещения; - - КонецЕсли; - КонецЕсли; - -КонецФункции - -#КонецОбласти - -#Область ПроцедурыИФункцииОбщегоНазначенияСлужебная - -// Проверяет доступность регистра, содержащего обнаруженные проблемы, по правам. -// Используется при формировании индикации проблемных объектов. -// -// Возвращаемое значение: -// Булево - Признак доступности регистра согласно настройкам прав. -// +// См. КонтрольВеденияУчета.ПодсистемаДоступна. Функция ПодсистемаДоступна() Экспорт Возврат ПравоДоступа("Просмотр", Метаданные.РегистрыСведений.РезультатыПроверкиУчета); @@ -3729,28 +3697,28 @@ КонецФункции -Функция УточнениеПроблемы(МассивСообщений) +Функция ОшибкиЗаполненияОбъекта() УточнениеПроблемы = ""; - Для Каждого ПользовательскоеСообщение Из МассивСообщений Цикл + Для Каждого ПользовательскоеСообщение Из ПолучитьСообщенияПользователю(Истина) Цикл УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + ПользовательскоеСообщение.Текст; КонецЦикла; - Возврат УточнениеПроблемы; + Возврат ?(ПустаяСтрока(УточнениеПроблемы), НСтр("ru = 'Для подробной информации необходимо открыть форму объекта.'"), УточнениеПроблемы); КонецФункции -Функция ПроверкаОтложена(ИдентификаторРегламентногоЗадания) +Функция ПроверкаУжеВыполняется(ИдентификаторРегламентногоЗадания) - ПроверкаОтложена = Ложь; + Результат = Ложь; Если ЗначениеЗаполнено(ИдентификаторРегламентногоЗадания) Тогда Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(Новый УникальныйИдентификатор(ИдентификаторРегламентногоЗадания)); Если Задание <> Неопределено И Задание.Состояние = СостояниеФоновогоЗадания.Активно Тогда - ПроверкаОтложена = Истина; + Результат = Истина; КонецЕсли; КонецЕсли; - Возврат ПроверкаОтложена; + Возврат Результат; КонецФункции @@ -3765,31 +3733,7 @@ // - Массив - несколько параметров проверки (элементы массива типа Структура, как описано выше). // // Возвращаемое значение: -// Структура - параметры проверки: -// * ДатаНачалаПроверки - Дата - левая граница временного интервала, с которого нужно -// проверять данные информационной базы. Актуальна только для -// проверок, которые работают с данными зависящими от времени. -// По умолчанию это пустая дата. -// * Идентификатор - Строка - строковый идентификатор проверки. -// * ИдентификаторРегламентногоЗадания - Строка - строковый идентификатор регламентного задания, -// осуществляющего указанную проверку. -// * ЛимитПроблем - Число - лимит проблем по указанной проверке. При его достижении -// итерации проверки ходят вхолостую. По умолчанию равен 1000. -// * Наименование - Строка - наименование проверки. -// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность проблемы учета -// Информация, Предупреждение, Ошибка, ПолезныйСовет и ВажнаяИнформация. -// * ПроверкаБылаОстановлена - Булево - признак того была ли остановлена проверка. -// * РучнойЗапуск - Булево - признак того была ли проверка запущена вручную -// т.е не регламентным заданием. -// * Проверка - СправочникСсылка.ПравилаПроверкиУчета - ссылка на проверку. -// * ГлобальныеНастройки - Структура - структура со значениями: -// ** КартинкаИндикатораПроблем - Картинка, которая будет выводиться в качестве -// индикатора ошибки в колонке динамического списка -// форм списков и на специальной панели форм объектов. -// ** ПояснениеИндикатораПроблем - Строка - Поясняющая строка к ошибке. -// ** ГиперссылкаИндикатораПроблем - Строка - Текст гиперссылки, при нажатии на которую, -// будет сформирован и открыт отчет с ошибками. -// * ИтерацияПроверки - Число - итерация проверки. +// Структура - см. параметр ПараметрыПроверки в КонтрольВеденияУчета.ОписаниеПроблемы. // Функция ПодготовитьПараметрыПроверки(Знач Проверка, Знач ПараметрыВыполненияПроверки) @@ -3824,22 +3768,12 @@ КонецФункции -// Производит очистку результатов предыдущих итераций проверки, пропуская -// те проблемы, которые были проигнорированы пользователем (ИгнорироватьПроблему = Истина). -// -// Параметры: -// Проверка - СправочникСсылка.ПравилаПроверкиУчета - проверка, информацию по -// которой необходимо очистить. -// ПараметрыВыполненияПроверки - Структура, Массив - произвольные дополнительные параметры проверки, -// которые уточняют, что и как именно проверять. -// - Структура - один параметр проверки. Состав свойств см. КонтрольВеденияУчета.ПараметрыВыполненияПроверки. -// - Массив - несколько параметров проверки (элементы массива типа Структура, как описано выше). -// -Процедура ОчиститьРезультатыПредыдущихПроверок(Проверка, ПараметрыВыполненияПроверки) +// См. КонтрольВеденияУчета.ОчиститьРезультатыПредыдущихПроверок. +Процедура ОчиститьРезультатыПредыдущихПроверок(Проверка, ПараметрыВыполненияПроверки) Экспорт - Для Каждого ТекущиеПараметры Из ПараметрыВыполненияПроверки Цикл + Для Каждого ПараметрВыполненияПроверки Из ПараметрыВыполненияПроверки Цикл - ВидПроверки = ВидПроверки(ТекущиеПараметры, Истина); + ВидПроверки = ВидПроверки(ПараметрВыполненияПроверки, Истина); Если Не ЗначениеЗаполнено(ВидПроверки) Тогда Продолжить; КонецЕсли; @@ -3857,10 +3791,10 @@ // Выполняет проверку превышения количества итераций проверки допустимого лимита. // // Параметры: -// ПараметрыПроверки - Структура - см. КонтрольВеденияУчетаСлужебный.ПодготовитьПараметрыПроверки. +// ПараметрыПроверки - Структура - см. параметр ПараметрыПроверки в КонтрольВеденияУчета.ОписаниеПроблемы. // // Возвращаемое значение: -// Булево - Признак того достигнута ли последняя итерация. +// Булево - Признак того, достигнута ли последняя итерация. // Функция ЭтоПоследняяИтерацияПроверки(ПараметрыПроверки) @@ -3943,7 +3877,7 @@ КонецФункции -// Возвращает структуру типов параметров проверки. +// Возвращает допустимые типы параметров проверки. // // Возвращаемое значение: // Структура - см. КонтрольВеденияУчетаСлужебный.ПодготовитьПараметрыПроверки. @@ -3965,7 +3899,7 @@ КонецФункции -// Возвращает описание типов полей вида проверки - см. реквизиты СвойствоN справочника ВидыПроверок. +// Возвращает допустимые типы свойств вида проверки - см. реквизиты СвойствоN справочника ВидыПроверок. // // Возвращаемое значение: // ОписаниеТипов - все ссылочные типы, а также типы Булево, Строка, Число и Дата. @@ -3982,44 +3916,53 @@ КонецФункции -// Возвращает структуру типов описания проблемы. +// Возвращает допустимые типы свойств описания проблемы. +// +// Параметры: +// ПолноеОписаниеПроблемы - Булево - влияет на состав свойств возвращаемого значения. // // Возвращаемое значение: -// Проблема - Структура - Сформированная алгоритмом проверки структура проблемы. +// Проблема - Структура - типы свойств проблемы: // * ПроблемныйОбъект - ЛюбаяСсылка - Ссылка на объект "Источник" проблем. // * ПравилоПроверки - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на выполненную проверку. // * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к которому // относится выполненная проверка. -// * КлючУникальности - УникальныйИдентификатор - Ключ уникальности проблемы. // * УточнениеПроблемы - Строка - Строка-уточнение найденной проблемы. +// * КлючУникальности - УникальныйИдентификатор - Ключ уникальности проблемы. +// Возвращается, если параметр ПолноеОписаниеПроблемы = Истина. // * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность проблемы учета // "Информация", "Предупреждение", "Ошибка" и "ПолезныйСовет". +// Возвращается, если параметр ПолноеОписаниеПроблемы = Истина. // * Ответственный - СправочникСсылка.Пользователи - Заполнен если есть возможность // идентифицировать ответственного в проблемном объекте. +// Возвращается, если параметр ПолноеОписаниеПроблемы = Истина. // * ИгнорироватьПроблему - Булево - Флаг игнорирования проблемы. Если имеет значение "Истина", // запись о проблеме игнорируется подсистемой. +// Возвращается, если параметр ПолноеОписаниеПроблемы = Истина. // * ДополнительнаяИнформация - ХранилищеЗначений - Служебное свойство с дополнительными // сведениями, связанными с выявленной проблемой. +// Возвращается, если параметр ПолноеОписаниеПроблемы = Истина. // * Выявлено - Дата - Серверное время идентификации проблемы. +// Возвращается, если параметр ПолноеОписаниеПроблемы = Истина. // -// -Функция ОжидаемыеТипыСвойствОписанияПроблемы() Экспорт +Функция ОжидаемыеТипыСвойствОписанияПроблемы(Знач ПолноеОписаниеПроблемы = Истина) Экспорт ОжидаемыеТипыСвойств = Новый Структура; - ОжидаемыеТипыСвойств.Вставить("ВажностьПроблемы", Тип("ПеречислениеСсылка.ВажностьПроблемыУчета")); - ОжидаемыеТипыСвойств.Вставить("ВидПроверки", Тип("СправочникСсылка.ВидыПроверок")); - ОжидаемыеТипыСвойств.Вставить("Выявлено", Тип("Дата")); - ОжидаемыеТипыСвойств.Вставить("ДополнительнаяИнформация", Тип("ХранилищеЗначения")); - ОжидаемыеТипыСвойств.Вставить("КлючУникальности", Тип("УникальныйИдентификатор")); - МассивТипов = Новый Массив; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Пользователи") Тогда - МассивТипов.Добавить(Тип("СправочникСсылка.Пользователи")); + ОжидаемыеТипыСвойств.Вставить("ПроблемныйОбъект", ОбщегоНазначения.ОписаниеТипаВсеСсылки()); + ОжидаемыеТипыСвойств.Вставить("ПравилоПроверки", Тип("СправочникСсылка.ПравилаПроверкиУчета")); + ОжидаемыеТипыСвойств.Вставить("ВидПроверки", Тип("СправочникСсылка.ВидыПроверок")); + ОжидаемыеТипыСвойств.Вставить("УточнениеПроблемы", Тип("Строка")); + + Если ПолноеОписаниеПроблемы Тогда + ОжидаемыеТипыСвойств.Вставить("ВажностьПроблемы", Тип("ПеречислениеСсылка.ВажностьПроблемыУчета")); + ОжидаемыеТипыСвойств.Вставить("Выявлено", Тип("Дата")); + ОжидаемыеТипыСвойств.Вставить("КлючУникальности", Тип("УникальныйИдентификатор")); + ОжидаемыеТипыСвойств.Вставить("ДополнительнаяИнформация", Тип("ХранилищеЗначения")); + ТипыОтветственного = Новый Массив; + ТипыОтветственного.Добавить(Тип("СправочникСсылка.Пользователи")); + ТипыОтветственного.Добавить(Тип("Неопределено")); + ОжидаемыеТипыСвойств.Вставить("Ответственный", ТипыОтветственного); КонецЕсли; - МассивТипов.Добавить(Тип("Неопределено")); - ОжидаемыеТипыСвойств.Вставить("Ответственный", МассивТипов); - ОжидаемыеТипыСвойств.Вставить("ПравилоПроверки", Тип("СправочникСсылка.ПравилаПроверкиУчета")); - ОжидаемыеТипыСвойств.Вставить("ПроблемныйОбъект", ОбщегоНазначения.ОписаниеТипаВсеСсылки()); - ОжидаемыеТипыСвойств.Вставить("УточнениеПроблемы", Тип("Строка")); Возврат ОжидаемыеТипыСвойств; @@ -4051,6 +3994,49 @@ КонецФункции +#Область ИгнорированиеПроблемСлужебная + +// Формирует контрольную сумму измерений ПроблемныйОбъект, ПравилоПроверки, ВидПроверки +// и ресурса УточнениеПроблемы по алгоритму MD5. +// +// Параметры: +// Проблема - Структура - см. одноименный параметр КонтрольВеденияУчета.ЗаписатьПроблему. +// +// Возвращаемое значение: +// Строка - контрольная сумма измерений регистра результатов проверок: ПроблемныйОбъект, +// ПравилоПроверки, ВидПроверки и ресурса УточнениеПроблемы по алгоритму MD5. +// +Функция КонтрольнаяСуммаПроблемы(Проблема) Экспорт + + СтруктураПроблемы = Новый Структура("ПроблемныйОбъект, ПравилоПроверки, ВидПроверки, УточнениеПроблемы"); + ЗаполнитьЗначенияСвойств(СтруктураПроблемы, Проблема); + Возврат ОбщегоНазначения.КонтрольнаяСуммаСтрокой(СтруктураПроблемы); + +КонецФункции + +// Возвращает Истина, если проблема была проигнорирована. +// +// Параметры: +// КонтрольнаяСумма - Строка - контрольная сумма записи регистра по алгоритму MD5. +// +Функция ЭтаПроблемаИгнорируется(КонтрольнаяСумма) + + Запрос = Новый Запрос( + "ВЫБРАТЬ ПЕРВЫЕ 1 + | РезультатыПроверкиУчета.ПроблемныйОбъект КАК ПроблемныйОбъект + |ИЗ + | РегистрСведений.РезультатыПроверкиУчета КАК РезультатыПроверкиУчета + |ГДЕ + | РезультатыПроверкиУчета.КонтрольнаяСумма = &КонтрольнаяСумма + | И РезультатыПроверкиУчета.ИгнорироватьПроблему"); + + Запрос.УстановитьПараметр("КонтрольнаяСумма", КонтрольнаяСумма); + Возврат Не Запрос.Выполнить().Пустой(); + +КонецФункции + +#КонецОбласти + #КонецОбласти #КонецОбласти diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйКлиент/Module.bsl index b4a2ff2b4..8a9c976f8 100644 --- a/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйКлиент/Module.bsl @@ -12,23 +12,24 @@ // Процедура ОбработкаВыбораТабличногоДокумента(ФормаОтчета, Элемент, Область, СтандартнаяОбработка) Экспорт - Если ФормаОтчета.НастройкиОтчета.ПолноеИмя = "Отчет.РезультатыПроверкиУчета" Тогда - Расшифровка = Область.Расшифровка; - Если ТипЗнч(Расшифровка) = Тип("Структура") Тогда - - СтандартнаяОбработка = Ложь; - Если Расшифровка.Свойство("Назначение") Тогда - Если Расшифровка.Назначение = "ИсправитьПроблемы" Тогда - ИсправитьПроблему(ФормаОтчета, Расшифровка); - ИначеЕсли Расшифровка.Назначение = "ОткрытьФормуРегистра" Тогда - ОткрытьФормуРегистраСПроблемнымНаборомЗаписей(ФормаОтчета, Расшифровка); - КонецЕсли; + Если ФормаОтчета.НастройкиОтчета.ПолноеИмя <> "Отчет.РезультатыПроверкиУчета" Тогда + Возврат; + КонецЕсли; + + Расшифровка = Область.Расшифровка; + Если ТипЗнч(Расшифровка) = Тип("Структура") Тогда + + СтандартнаяОбработка = Ложь; + Если Расшифровка.Свойство("Назначение") Тогда + Если Расшифровка.Назначение = "ИсправитьПроблемы" Тогда + ИсправитьПроблему(ФормаОтчета, Расшифровка); + ИначеЕсли Расшифровка.Назначение = "ОткрытьФормуСписка" Тогда + ОткрытьПроблемныйСписок(ФормаОтчета, Расшифровка); КонецЕсли; - КонецЕсли; КонецЕсли; - + КонецПроцедуры // Открывает форму отчета с отбором по проблемам, препятствующим нормальному обновлению @@ -63,65 +64,56 @@ #Область СлужебныеПроцедурыИФункции -// Процедура открывающая форму для интерактивный действий пользователя -// для решения проблемы. +// Открывает форму для интерактивных действий пользователя для решения проблемы. // // Параметры: -// Форма - УправляемаяФорма - Форма отчета. -// Расшифровка - Структура - Структура, содержащая данные по исправлению проблемы -// расшифровки ячейки отчета по результатам проверок учета. +// Форма - УправляемаяФорма - форма отчета РезультатыПроверкиУчета. +// Расшифровка - Структура - дополнительные сведения для исправления проблемы: // * Назначение - Строка - Строковый идентификатор назначения расшифровки. // * ИдентификаторПроверки - Строка - Строковый индикатор проверки. -// * ОбработчикПереходаКИсправлению - Строка - Имя функции-обработчика исправления проблемы. -// Под функцией-обработчиком понимать экспортную процедуру -// клиентского общего модуля. Либо полное имя открываемой формы. -// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверок. +// * ОбработчикПереходаКИсправлению - Строка - Имя экспортной клиентской процедуры-обработчика исправления +// проблемы или полное имя открываемой формы. +// * ВидПроверки - СправочникСсылка.ВидыПроверок - вид проверки, +// дополнительно уточняющий область исправления проблемы. // Процедура ИсправитьПроблему(Форма, Расшифровка) - ОбработчикПереходаКИсправлению = Расшифровка.ОбработчикПереходаКИсправлению; - ИдентификаторПроверки = Расшифровка.ИдентификаторПроверки; - ВидПроверки = Расшифровка.ВидПроверки; + ПараметрыИсправления = Новый Структура; + ПараметрыИсправления.Вставить("ИдентификаторПроверки", Расшифровка.ИдентификаторПроверки); + ПараметрыИсправления.Вставить("ВидПроверки", Расшифровка.ВидПроверки); + ОбработчикПереходаКИсправлению = Расшифровка.ОбработчикПереходаКИсправлению; Если СтрНачинаетсяС(ОбработчикПереходаКИсправлению, "ОбщаяФорма.") Или СтрНайти(ОбработчикПереходаКИсправлению, ".Форма") > 0 Тогда - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ИдентификаторПроверки", ИдентификаторПроверки); - ПараметрыФормы.Вставить("ВидПроверки", ВидПроверки); - - ОткрытьФорму(ОбработчикПереходаКИсправлению, ПараметрыФормы, Форма); - + ОткрытьФорму(ОбработчикПереходаКИсправлению, ПараметрыИсправления, Форма); Иначе - ОбработчикИсправления = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ОбработчикПереходаКИсправлению, "."); - ИсполняемыйФрагмент = ОбработчикИсправления[0] + "." + ОбработчикИсправления[1] + "(ИдентификаторПроверки, ВидПроверки)"; - Результат = Вычислить(ИсполняемыйФрагмент); + МодульОбработчикаИсправления = ОбщегоНазначенияКлиент.ОбщийМодуль(ОбработчикИсправления[0]); + ИмяПроцедуры = ОбработчикИсправления[1]; + + ВыполнитьОбработкуОповещения(Новый ОписаниеОповещения(ИмяПроцедуры, МодульОбработчикаИсправления), ПараметрыИсправления); КонецЕсли; КонецПроцедуры -// Процедура открывающая форму регистра сведений с проблемным набором записей +// Открывает форму списка (в случае регистра - с проблемным набором записей). // // Параметры: // Форма - УправляемаяФорма - Форма отчета. // Расшифровка - Структура - Структура, содержащая данные по исправлению проблемы // расшифровки ячейки отчета по результатам проверок учета. // * Назначение - Строка - Строковый идентификатор назначения расшифровки. -// * ПолноеИмяРегистра - Строка - Полное имя целевого регистра сведений. -// * ОтборНабораЗаписей - Структура - Отбор целевого набора записей. +// * ПолноеИмяОбъекта - Строка - Полное имя объекта метаданных. +// * Отбор - Структура - Отбор в форме списка. // -Процедура ОткрытьФормуРегистраСПроблемнымНаборомЗаписей(Форма, Расшифровка) - - ПолноеИмяРегистра = Расшифровка.ПолноеИмяРегистра; - ОтборНабораЗаписей = Расшифровка.ОтборНабораЗаписей; +Процедура ОткрытьПроблемныйСписок(Форма, Расшифровка) ПользовательскиеНастройки = Новый ПользовательскиеНастройкиКомпоновкиДанных; ОтборКомпоновки = ПользовательскиеНастройки.Элементы.Добавить(Тип("ОтборКомпоновкиДанных")); - ФормаРегистра = ПолучитьФорму(ПолноеИмяРегистра + ".ФормаСписка", , Форма); + ФормаРегистра = ПолучитьФорму(Расшифровка.ПолноеИмяОбъекта + ".ФормаСписка", , Форма); - Для Каждого ЭлементОтбораНабора Из ОтборНабораЗаписей Цикл + Для Каждого ЭлементОтбораНабора Из Расшифровка.Отбор Цикл ЭлементОтбора = ОтборКомпоновки.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ЭлементОтбораНабора.Ключ); diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйПовтИсп/Module.bsl index cbce6dad8..72a3d7518 100644 --- a/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйПовтИсп/Module.bsl @@ -15,9 +15,11 @@ ДобавитьСистемныеПроверкиВеденияУчета(ГруппыПроверок, Проверки); + ИнтеграцияПодсистемБСП.ПриОпределенииПроверок(ГруппыПроверок, Проверки); КонтрольВеденияУчетаПереопределяемый.ПриОпределенииПроверок(ГруппыПроверок, Проверки); - КонтрольВеденияУчетаПереопределяемый.ПриОпределенииПрикладныхПроверок(ГруппыПроверок, Проверки); + // Для обратной совместимости. + КонтрольВеденияУчетаПереопределяемый.ПриОпределенииПрикладныхПроверок(ГруппыПроверок, Проверки); ОбеспечитьОбратнуюСовместимость(Проверки); Возврат Новый ФиксированнаяСтруктура("ГруппыПроверок, Проверки", ГруппыПроверок, Проверки); @@ -75,69 +77,73 @@ Проверка.ИдентификаторГруппы = ГруппаПроверок.Идентификатор; Проверка.Наименование = НСтр("ru='Проверка незаполненных обязательных реквизитов'"); Проверка.Причины = НСтр("ru='Некорректная синхронизация данных с другими программами или импорт данных.'"); - Проверка.Рекомендация = НСтр("ru='Правильно настроить синхронизацию данных и заполнить обязательные реквизиты. - |В случае обнаружения незаполненных обязательных полей у регистров, то в большинстве - |случаев, для устранения проблемы, требуется заполнение соответствующих полей в документе-регистраторе.'"); + Проверка.Рекомендация = НСтр("ru='Перенастроить синхронизацию данных или заполнить обязательные реквизиты вручную. + |Для этого можно также воспользоваться групповым изменением реквизитов (в разделе Администрирование). + |В случае обнаружения незаполненных обязательных полей у регистров, то в большинстве + |случаев, для устранения проблемы, достаточно заполнить соответствующие поля в документе-регистраторе.'"); Проверка.Идентификатор = "СтандартныеПодсистемы.ПроверкаНезаполненныхОбязательныхРеквизитов"; Проверка.ОбработчикПроверки = "КонтрольВеденияУчетаСлужебный.ПроверитьНезаполненныеОбязательныеРеквизиты"; Проверка.КонтекстПроверокВеденияУчета = "СистемныеПроверки"; - Проверка.Отключена = Истина; + Проверка.Отключена = Истина; Проверка = Проверки.Добавить(); Проверка.ИдентификаторГруппы = ГруппаПроверок.Идентификатор; Проверка.Наименование = НСтр("ru='Проверка ссылочной целостности'"); - Проверка.Причины = НСтр("ru='Некорректная синхронизация данных с другими программами или импорт данных.'"); - Проверка.Рекомендация = НСтр("ru='• Завершить работу всех пользователей и установить блокировку входа в программу; - |• Сделать резервную копию информационной базы; - |• Запустить конфигуратор, меню Администрирование, Тестирования и исправление, включив два флажка для проверка логической и ссылочной целостности - | См. подробнее на ИТС: https://its.1c.ru/db/v83doc#bookmark:adm:TI000000142 - |• Снять блокировку входа в программу. - | - |Если работа ведется в распределенной информационной базе (РИБ), то исправление следует запускать только в главном узле. - |Затем выполнить синхронизацию с подчиненными узлами. - |В случае обнаружения битых ссылок в регистрах, то в большинстве случаев, для устранения проблемы - |требуется устранить соответствующие битые ссылки в документах-регистраторах.'"); + Проверка.Причины = НСтр("ru='Случайное или преднамеренное удаление данных без контроля ссылочной целостности, сбои в работе оборудования, некорректная синхронизация данных с другими программами или импорт данных, ошибки в сторонних инструментах (например, внешних обработках или расширениях).'"); + Проверка.Рекомендация = НСтр("ru='В зависимости от ситуации следует выбрать один из вариантов: + |• восстановить удаленные данные из резервной копии, + |• или очистить ссылки на удаленные данные (если они больше не требуются). + | + |Для очистки ссылок на удаленные данные следует: + |• Завершить работу всех пользователей, установить блокировку входа в программу и сделать резервную копию информационной базы; + |• Запустить конфигуратор, меню Администрирование - Тестирования и исправление, включить два флажка для проверки логической и ссылочной целостности + | См. подробнее на ИТС: https://its.1c.ru/db/v83doc#bookmark:adm:TI000000142 + |• Дождаться завершения тестирования и исправления, снять блокировку входа в программу. + | + |Если работа ведется в распределенной информационной базе (РИБ), то исправление следует запускать только в главном узле. + |Затем выполнить синхронизацию с подчиненными узлами. + |В случае обнаружения битых ссылок в регистрах, то в большинстве случаев, для устранения проблемы + |достаточно устранить соответствующие битые ссылки в документах-регистраторах.'"); Проверка.Идентификатор = "СтандартныеПодсистемы.ПроверкаСсылочнойЦелостности"; Проверка.ОбработчикПроверки = "КонтрольВеденияУчетаСлужебный.ПроверитьСсылочнуюЦелостность"; Проверка.КонтекстПроверокВеденияУчета = "СистемныеПроверки"; - Проверка.Отключена = Истина; + Проверка.Отключена = Истина; Проверка = Проверки.Добавить(); Проверка.ИдентификаторГруппы = ГруппаПроверок.Идентификатор; Проверка.Наименование = НСтр("ru='Проверка циклических ссылок'"); Проверка.Причины = НСтр("ru='Некорректная синхронизация данных с другими программами или импорт данных.'"); - Проверка.Рекомендация = НСтр("ru='• Завершить работу всех пользователей и установить блокировку входа в программу; - |• Сделать резервную копию информационной базы; - |• Запустить конфигуратор, меню Администрирование, Тестирования и исправление, включив два флажка для проверка логической и ссылочной целостности - | См. подробнее на ИТС: https://its.1c.ru/db/v83doc#bookmark:adm:TI000000142 - |• Снять блокировку входа в программу. - | - |Если работа ведется в распределенной информационной базе (РИБ), то исправление следует запускать только в главном узле. - |Затем выполнить синхронизацию с подчиненными узлами.'"); + Проверка.Рекомендация = НСтр("ru='У одного из элементов очистить ссылку на родительский элемент (для автоматического исправления нажать ссылку ниже). + |Если работа ведется в распределенной информационной базе (РИБ), то исправление следует запускать только в главном узле. + |Затем выполнить синхронизацию с подчиненными узлами.'"); Проверка.Идентификатор = "СтандартныеПодсистемы.ПроверкаЦиклическихСсылок"; Проверка.ОбработчикПроверки = "КонтрольВеденияУчетаСлужебный.ПроверитьЦиклическиеСсылки"; - Проверка.ОбработчикПереходаКИсправлению = "Отчет.РезультатыПроверкиУчета.Форма.ИсправлениеЦиклическихСсылок"; + Проверка.ОбработчикПереходаКИсправлению = "Отчет.РезультатыПроверкиУчета.Форма.АвтоисправлениеПроблемы"; + Проверка.КонтекстПроверокВеденияУчета = "СистемныеПроверки"; + Проверка.Отключена = Истина; + + Проверка = Проверки.Добавить(); + Проверка.ИдентификаторГруппы = ГруппаПроверок.Идентификатор; + Проверка.Наименование = НСтр("ru='Проверка отсутствующих предопределенных элементов'"); + Проверка.Причины = НСтр("ru='Некорректная синхронизация данных с другими программами или импорт данных, ошибки в сторонних инструментах (например, внешних обработках или расширениях).'"); + Проверка.Рекомендация = НСтр("ru='В зависимости от ситуации следует выбрать один из вариантов: + |• подобрать и указать в качестве предопределенного один из существующих элементов в списке; + |• восстановить предопределенные элементы из резервной копии; + |• создать отсутствующие предопределенные элементы заново (для этого нажмите ссылку ниже). + |Если работа ведется в распределенной информационной базе (РИБ), то исправление следует запускать только в главном узле. + |Затем выполнить синхронизацию с подчиненными узлами.'"); + Проверка.Идентификатор = "СтандартныеПодсистемы.ПроверкаОтсутствующихПредопределенныхЭлементов"; + Проверка.ОбработчикПроверки = "КонтрольВеденияУчетаСлужебный.ПроверитьОтсутствующиеПредопределенныеЭлементы"; + Проверка.ОбработчикПереходаКИсправлению = "Отчет.РезультатыПроверкиУчета.Форма.АвтоисправлениеПроблемы"; Проверка.КонтекстПроверокВеденияУчета = "СистемныеПроверки"; Проверка.Отключена = Истина; - Проверка = Проверки.Добавить(); - Проверка.ИдентификаторГруппы = ГруппаПроверок.Идентификатор; - Проверка.Наименование = НСтр("ru='Проверка отсутствующих предопределенных элементов'"); - Проверка.Причины = НСтр("ru='Некорректная синхронизация данных с другими программами или импорт данных.'"); - Проверка.Рекомендация = НСтр("ru='• Запустить исправление по ссылке ниже. - |Если работа ведется в распределенной информационной базе (РИБ), то исправление следует запускать только в главном узле. - |Затем выполнить синхронизацию с подчиненными узлами.'"); - Проверка.Идентификатор = "СтандартныеПодсистемы.ПроверкаОтсутствующихПредопределенныхЭлементов"; - Проверка.ОбработчикПроверки = "КонтрольВеденияУчетаСлужебный.ПроверитьОтсутствующиеПредопределенныеЭлементы"; - Проверка.КонтекстПроверокВеденияУчета = "СистемныеПроверки"; - Проверка.Отключена = Истина; - Проверка = Проверки.Добавить(); Проверка.ИдентификаторГруппы = ГруппаПроверок.Идентификатор; Проверка.Наименование = НСтр("ru='Проверка дублирования предопределенных элементов'"); Проверка.Причины = НСтр("ru='Некорректная синхронизация данных с другими программами или импорт данных.'"); - Проверка.Рекомендация = НСтр("ru='• Запустить поиск и удаление дублей по ссылке ниже. - |Если работа ведется в распределенной информационной базе (РИБ), то исправление следует запускать только в главном узле. + Проверка.Рекомендация = НСтр("ru='Запустить поиск и удаление дублей (в разделе Администрирование). + |Если работа ведется в распределенной информационной базе (РИБ), то исправление следует выполнять только в главном узле. |Затем выполнить синхронизацию с подчиненными узлами.'"); Проверка.Идентификатор = "СтандартныеПодсистемы.ПроверкаДублированияПредопределенныхЭлементов"; Проверка.ОбработчикПроверки = "КонтрольВеденияУчетаСлужебный.ПроверитьДублированиеПредопределенныхЭлементов"; @@ -149,11 +155,10 @@ Проверка.Наименование = НСтр("ru='Проверка отсутствия предопределенных узлов плана обмена'"); Проверка.Причины = НСтр("ru='Некорректное поведение программы при работе на устаревших версиях платформы 1С:Предприятие.'"); Проверка.Рекомендация = НСтр("ru='• Перейти на версию платформы 1С:Предприятие 8.3.9.2033 или выше; - |• Завершить работу всех пользователей и установить блокировку входа в программу; - |• Сделать резервную копию информационной базы; - |• Запустить конфигуратор, меню Администрирование, Тестирования и исправление, включив два флажка для проверка логической и ссылочной целостности + |• Завершить работу всех пользователей, установить блокировку входа в программу и сделать резервную копию информационной базы; + |• Запустить конфигуратор, меню Администрирование - Тестирования и исправление, включить два флажка для проверки логической и ссылочной целостности | См. подробнее на ИТС: https://its.1c.ru/db/v83doc#bookmark:adm:TI000000142 - |• Снять блокировку входа в программу. + |• Дождаться завершения тестирования и исправления, снять блокировку входа в программу. | |Если работа ведется в распределенной информационной базе (РИБ), то исправление следует запускать только в главном узле. |Затем выполнить синхронизацию с подчиненными узлами.'"); @@ -162,22 +167,6 @@ Проверка.КонтекстПроверокВеденияУчета = "СистемныеПроверки"; Проверка.Отключена = Истина; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда - - Проверка = Проверки.Добавить(); - Проверка.ИдентификаторГруппы = ГруппаПроверок.Идентификатор; - Проверка.Наименование = НСтр("ru='Поиск ссылок на несуществующие файлы в томах хранения'"); - Проверка.Причины = НСтр("ru='Файл был физически удален или перемещен на диске в следствие работы антивирусных программ, - |непреднамеренных действий администратора и.т.д.'"); - Проверка.Рекомендация = НСтр("ru='• Пометить файл в программе на удаление; - |• Или восстановить файл на диске в томе из резервной копии.'"); - Проверка.Идентификатор = "СтандартныеПодсистемы.ПроверкаСсылокНаНесуществующиеФайлыВТоме"; - Проверка.ОбработчикПроверки = "РаботаСФайламиСлужебный.ПроверкаСсылокНаНесуществующиеФайлыВТоме"; - Проверка.КонтекстПроверокВеденияУчета = "СистемныеПроверки"; - Проверка.Отключена = Истина; - - КонецЕсли; - КонецПроцедуры // Создает таблицу групп проверок diff --git a/SSL/src/CommonModules/НапоминанияПользователяСлужебный/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяСлужебный/Module.bsl index d082c3700..ea1b1e59c 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяСлужебный/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяСлужебный/Module.bsl @@ -30,6 +30,13 @@ КонецПроцедуры +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииСписковСОграничениемДоступа(Списки) Экспорт + + Списки.Вставить(Метаданные.РегистрыСведений.НапоминанияПользователя, Истина); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент/Module.bsl b/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент/Module.bsl index b5f881976..2b1bb34ef 100644 --- a/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент/Module.bsl +++ b/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент/Module.bsl @@ -175,7 +175,7 @@ Иначе - ЗавершитьНастройкуРазрешенийНаИспользованиеВнешнихРесурсовАсинхронно(ОповещениеОЗакрытии); + ВыполнитьОбработкуОповещения(ОповещениеОЗакрытии, КодВозвратаДиалога.ОК); КонецЕсли; diff --git a/SSL/src/CommonModules/ОбменДаннымиXDTOСервер/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиXDTOСервер/Module.bsl index feed76b06..188d83267 100644 --- a/SSL/src/CommonModules/ОбменДаннымиXDTOСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиXDTOСервер/Module.bsl @@ -28,13 +28,13 @@ // Функция ИнициализироватьКомпонентыОбмена(НаправлениеОбмена) Экспорт - КомпонентыОбмена = Новый Структура(" - |ВерсияФорматаОбмена, - |XMLСхема, - |МенеджерОбмена, - |УзелКорреспондента, - |УзелКорреспондентаОбъект, - |ВерсияФорматаМенеджераОбмена"); + КомпонентыОбмена = Новый Структура; + КомпонентыОбмена.Вставить("ВерсияФорматаОбмена"); + КомпонентыОбмена.Вставить("XMLСхема"); + КомпонентыОбмена.Вставить("МенеджерОбмена"); + КомпонентыОбмена.Вставить("УзелКорреспондента"); + КомпонентыОбмена.Вставить("УзелКорреспондентаОбъект"); + КомпонентыОбмена.Вставить("ВерсияФорматаМенеджераОбмена"); КомпонентыОбмена.Вставить("НаправлениеОбмена", НаправлениеОбмена); КомпонентыОбмена.Вставить("ЭтоОбменЧерезПланОбмена", Истина); @@ -43,19 +43,22 @@ КомпонентыОбмена.Вставить("КлючСообщенияЖурналаРегистрации", ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными()); КомпонентыОбмена.Вставить("ИспользоватьКвитирование", Истина); + КомпонентыОбмена.Вставить("ТолькоНастройкиXDTO", Ложь); + КомпонентыОбмена.Вставить("ПоддерживаемыеОбъектыXDTO", Новый Массив); + СостояниеОбменаДанными = Новый Структура; СостояниеОбменаДанными.Вставить("УзелИнформационнойБазы"); СостояниеОбменаДанными.Вставить("ДействиеПриОбмене"); СостояниеОбменаДанными.Вставить("ДатаНачала"); СостояниеОбменаДанными.Вставить("ДатаОкончания"); СостояниеОбменаДанными.Вставить("РезультатВыполненияОбмена"); - КомпонентыОбмена.Вставить("СостояниеОбменаДанными", СостояниеОбменаДанными); ВедениеПротоколаДанных = Новый Структура; ВедениеПротоколаДанных.Вставить("ФайлПротоколаДанных", Неопределено); ВедениеПротоколаДанных.Вставить("ВыводВПротоколИнформационныхСообщений", Ложь); ВедениеПротоколаДанных.Вставить("ДописыватьДанныеВПротоколОбмена", Истина); + КомпонентыОбмена.Вставить("ВедениеПротоколаДанных", ВедениеПротоколаДанных); КомпонентыОбмена.Вставить("ИспользоватьТранзакции", Истина); @@ -107,6 +110,16 @@ КомпонентыОбмена.Вставить("ОбъектыДляОтложеннойЗаписи", Новый Соответствие); + ТаблицаПоддерживаемыеОбъекты = Новый ТаблицаЗначений; + ИнициализироватьТаблицуПоддерживаемыхОбъектовФормата(ТаблицаПоддерживаемыеОбъекты, "ОтправкаПолучение"); + + КомпонентыОбмена.Вставить("НастройкиXDTOКорреспондента", Новый Структура); + КомпонентыОбмена.НастройкиXDTOКорреспондента.Вставить("Формат", ""); + КомпонентыОбмена.НастройкиXDTOКорреспондента.Вставить("ПоддерживаемыеОбъекты", ТаблицаПоддерживаемыеОбъекты); + КомпонентыОбмена.НастройкиXDTOКорреспондента.Вставить("ПоддерживаемыеВерсии", Новый Массив); + + КомпонентыОбмена.Вставить("ПрефиксКорреспондента"); + КонецЕсли; Возврат КомпонентыОбмена; @@ -126,7 +139,7 @@ // Вычисление версии формата менеджера обмена - от этого зависит формирование правил. Попытка - КомпонентыОбмена.Вставить("ВерсияФорматаМенеджераОбмена",МенеджерОбмена.ВерсияФорматаМенеджераОбмена()); + КомпонентыОбмена.Вставить("ВерсияФорматаМенеджераОбмена", МенеджерОбмена.ВерсияФорматаМенеджераОбмена()); Исключение КомпонентыОбмена.Вставить("ВерсияФорматаМенеджераОбмена", "1"); КонецПопытки; @@ -562,6 +575,11 @@ ПравилоКонвертации = КомпонентыОбмена.ПравилаКонвертацииОбъектов.Найти(ТекущееПКО.Ключ, "ИмяПКО"); + Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена + И КомпонентыОбмена.ПоддерживаемыеОбъектыXDTO.Найти(ПравилоКонвертации.ОбъектФормата) = Неопределено Тогда + Продолжить; + КонецЕсли; + // 2. Конвертируем Данные в Структуру по правилам конвертации. ДанныеXDTO = ДанныеXDTOИзДанныхИБ(КомпонентыОбмена, Объект, ПравилоКонвертации, Неопределено); @@ -1287,6 +1305,119 @@ КонецПроцедуры +// Открывает файл выгрузки данных, записывает заголовок файла в соответствие с форматом обмена. +// +// Параметры: +// КомпонентыОбмена - Структура - содержит все правила и параметры обмена. +// ИмяФайлаОбмена - строка - имя файла обмена. +// +Процедура ОткрытьФайлВыгрузки(КомпонентыОбмена, ИмяФайлаОбмена = "") Экспорт + + ФайлОбмена = Новый ЗаписьXML; + Если ИмяФайлаОбмена <> "" Тогда + ФайлОбмена.ОткрытьФайл(ИмяФайлаОбмена); + Иначе + ФайлОбмена.УстановитьСтроку(); + КонецЕсли; + ФайлОбмена.ЗаписатьОбъявлениеXML(); + + ЗаписьСообщения = Неопределено; + + Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена Тогда + + ЗаписьСообщения = Новый Структура("НомерПринятого, НомерСообщения, Получатель"); + ЗаписьСообщения.Получатель = КомпонентыОбмена.УзелКорреспондента; + + Если ТранзакцияАктивна() Тогда + ВызватьИсключение НСтр("ru = 'Блокировка на обмен данными не может быть установлена в активной транзакции.'"); + КонецЕсли; + + // Устанавливаем блокировку на узел получателя. + Попытка + ЗаблокироватьДанныеДляРедактирования(ЗаписьСообщения.Получатель); + Исключение + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка установки блокировки на обмен данными. + |Возможно, обмен данными выполняется другим сеансом. + | + |Подробности: + |%1'"), + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + ДанныеПолучателя = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ЗаписьСообщения.Получатель, "НомерОтправленного, НомерПринятого, Код"); + + ЗаписьСообщения.НомерСообщения = ДанныеПолучателя.НомерОтправленного + 1; + ЗаписьСообщения.НомерПринятого = ДанныеПолучателя.НомерПринятого; + + КонецЕсли; + + // Записываем элемент + ФайлОбмена.ЗаписатьНачалоЭлемента("Message"); + ФайлОбмена.ЗаписатьСоответствиеПространстваИмен("msg", "http://www.1c.ru/SSL/Exchange/Message"); + ФайлОбмена.ЗаписатьСоответствиеПространстваИмен("xs", "http://www.w3.org/2001/XMLSchema"); + ФайлОбмена.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance"); + + // Записываем элемент
      + Header = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(XMLБазоваяСхема(), "Header")); + Header.Format = КомпонентыОбмена.XMLСхема; + Header.CreationDate = ТекущаяУниверсальнаяДата(); + + Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена Тогда + ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(ЗаписьСообщения.Получатель); + ПсевдонимПредопределенногоУзла = ОбменДаннымиСервер.ПсевдонимПредопределенногоУзла(ЗаписьСообщения.Получатель); + + Confirmation = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(XMLБазоваяСхема(), "Confirmation")); + Confirmation.ExchangePlan = ИмяПланаОбмена; + + Confirmation.To = ОбменДаннымиСервер.ИдентификаторУзлаКорреспондентаДляОбмена(ЗаписьСообщения.Получатель); + Если ЗначениеЗаполнено(ПсевдонимПредопределенногоУзла) Тогда + // Требуется корректировка кода узла отправителя. + Confirmation.From = СокрЛП(ПсевдонимПредопределенногоУзла); + Иначе + Confirmation.From = ОбменДаннымиСервер.ИдентификаторЭтогоУзлаДляОбмена(ЗаписьСообщения.Получатель); + КонецЕсли; + + Если КомпонентыОбмена.ТолькоНастройкиXDTO Тогда + Confirmation.MessageNo = 0; + Confirmation.ReceivedNo = 0; + Иначе + Confirmation.MessageNo = ЗаписьСообщения.НомерСообщения; + Confirmation.ReceivedNo = ЗаписьСообщения.НомерПринятого; + КонецЕсли; + + Header.Confirmation = Confirmation; + + Для Каждого ВерсияФормата Из ВерсииФорматаОбменаМассив(ЗаписьСообщения.Получатель) Цикл + Header.AvailableVersion.Добавить(ВерсияФормата); + КонецЦикла; + + Если ЗначениеЗаполнено(ПсевдонимПредопределенногоУзла) Тогда + // Тип Header является Упорядоченным, поэтому важен порядок присвоения значений свойств. + // В противном случае может быть не пройдена валидация по схеме. + Header.NewFrom = ОбменДаннымиСервер.ИдентификаторЭтогоУзлаДляОбмена(ЗаписьСообщения.Получатель); + КонецЕсли; + + ВыгрузитьПоддерживаемыеОбъектыФормата(Header, ЗаписьСообщения.Получатель); + + Header.Prefix = ОбменДаннымиСервер.ПрефиксИнформационнойБазы(); + + Иначе + Header.AvailableVersion.Добавить(КомпонентыОбмена.ВерсияФорматаОбмена); + КонецЕсли; + + ФабрикаXDTO.ЗаписатьXML(ФайлОбмена, Header); + + Если Не КомпонентыОбмена.ТолькоНастройкиXDTO Тогда + // Записываем элемент + ФайлОбмена.ЗаписатьНачалоЭлемента("Body"); + ФайлОбмена.ЗаписатьСоответствиеПространстваИмен("", КомпонентыОбмена.XMLСхема); + КонецЕсли; + + КомпонентыОбмена.Вставить("ФайлОбмена", ФайлОбмена); + +КонецПроцедуры + #КонецОбласти #Область ПолучениеДанных @@ -1676,6 +1807,11 @@ ПравилоКонвертации = ПКОПоИмени(КомпонентыОбмена, ТекущееПКО.Ключ); + Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена + И КомпонентыОбмена.ПоддерживаемыеОбъектыXDTO.Найти(ПравилоКонвертации.ОбъектФормата) = Неопределено Тогда + Продолжить; + КонецЕсли; + #Область ПроверкаСоответствияТаблицеДляЗагрузки Если ТаблицыДляЗагрузки <> Неопределено Тогда ТипИсточникаСтрокой = ОбъектXDTO.Тип().Имя; @@ -1820,12 +1956,6 @@ // Процедура ПроизвестиЧтениеДанныхВРежимеАнализа(КомпонентыОбмена, ПараметрыАнализа = Неопределено) Экспорт - // Параметры по умолчанию - ПараметрыСбораСтатистики = Новый Структура("СобиратьСтатистикуКлассификаторов", Ложь); - Если ПараметрыАнализа <> Неопределено Тогда - ЗаполнитьЗначенияСвойств(ПараметрыСбораСтатистики, ПараметрыАнализа); - КонецЕсли; - Попытка КомпонентыОбмена.МенеджерОбмена.ПередКонвертацией(КомпонентыОбмена); Исключение @@ -1885,7 +2015,12 @@ // 1. Поиск правила конвертации. Для Каждого ТекущееПКО Из ИспользованиеПКО Цикл - ПравилоКонвертации = КомпонентыОбмена.ПравилаКонвертацииОбъектов.Найти(ТекущееПКО.Ключ, "ИмяПКО"); + ПравилоКонвертации = ПКОПоИмени(КомпонентыОбмена, ТекущееПКО.Ключ); + + Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена + И КомпонентыОбмена.ПоддерживаемыеОбъектыXDTO.Найти(ПравилоКонвертации.ОбъектФормата) = Неопределено Тогда + Продолжить; + КонецЕсли; ВариантИдентификации = СокрЛП(ПравилоКонвертации.ВариантИдентификации); СинхронизироватьПоИдентификатору = (ВариантИдентификации = "СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска" @@ -1943,103 +2078,6 @@ КонецПроцедуры -// Открывает файл выгрузки данных, записывает заголовок файла в соответствие с форматом обмена. -// -// Параметры: -// КомпонентыОбмена - Структура - содержит все правила и параметры обмена. -// ИмяФайлаОбмена - строка - имя файла обмена. -// -Процедура ОткрытьФайлВыгрузки(КомпонентыОбмена, ИмяФайлаОбмена = "") Экспорт - - ФайлОбмена = Новый ЗаписьXML; - Если ИмяФайлаОбмена <> "" Тогда - ФайлОбмена.ОткрытьФайл(ИмяФайлаОбмена); - Иначе - ФайлОбмена.УстановитьСтроку(); - КонецЕсли; - ФайлОбмена.ЗаписатьОбъявлениеXML(); - - ЗаписьСообщения = Неопределено; - - Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена Тогда - - ЗаписьСообщения = Новый Структура("НомерПринятого, НомерСообщения, Получатель"); - ЗаписьСообщения.Получатель = КомпонентыОбмена.УзелКорреспондента; - - Если ТранзакцияАктивна() Тогда - ВызватьИсключение НСтр("ru = 'Блокировка на обмен данными не может быть установлена в активной транзакции.'"); - КонецЕсли; - - // Устанавливаем блокировку на узел получателя. - Попытка - ЗаблокироватьДанныеДляРедактирования(ЗаписьСообщения.Получатель); - Исключение - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка установки блокировки на обмен данными. - |Возможно, обмен данными выполняется другим сеансом. - | - |Подробности: - |%1'"), - КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; - - ДанныеПолучателя = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ЗаписьСообщения.Получатель, "НомерОтправленного, НомерПринятого, Код"); - - ЗаписьСообщения.НомерСообщения = ДанныеПолучателя.НомерОтправленного + 1; - ЗаписьСообщения.НомерПринятого = ДанныеПолучателя.НомерПринятого; - - КонецЕсли; - - // Записываем элемент - ФайлОбмена.ЗаписатьНачалоЭлемента("Message"); - ФайлОбмена.ЗаписатьСоответствиеПространстваИмен("msg", "http://www.1c.ru/SSL/Exchange/Message"); - ФайлОбмена.ЗаписатьСоответствиеПространстваИмен("xs", "http://www.w3.org/2001/XMLSchema"); - ФайлОбмена.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance"); - - // Записываем элемент
      - Header = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(XMLБазоваяСхема(), "Header")); - Header.Format = КомпонентыОбмена.XMLСхема; - Header.CreationDate = ТекущаяУниверсальнаяДата(); - - Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена Тогда - ИмяПланаОбмена = ЗаписьСообщения.Получатель.Метаданные().Имя; - Confirmation = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(XMLБазоваяСхема(), "Confirmation")); - Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена Тогда - Confirmation.ExchangePlan = ИмяПланаОбмена; - Confirmation.To = СокрЛП(ДанныеПолучателя.Код); - Confirmation.From = СокрЛП(ОбменДаннымиПовтИсп.ПолучитьКодЭтогоУзлаДляПланаОбмена(Confirmation.ExchangePlan)); - Confirmation.MessageNo = ЗаписьСообщения.НомерСообщения; - Confirmation.ReceivedNo = ЗаписьСообщения.НомерПринятого; - - ПсевдонимПредопределенногоУзла = ОбменДаннымиСервер.ПсевдонимПредопределенногоУзла(ЗаписьСообщения.Получатель); - Если ЗначениеЗаполнено(ПсевдонимПредопределенногоУзла) Тогда - // Требуется корректировка кода узла отправителя. - Confirmation.From = СокрЛП(ПсевдонимПредопределенногоУзла); - КонецЕсли; - КонецЕсли; - Header.Confirmation = Confirmation; - - Для Каждого ВерсияФормата Из ВерсииФорматаОбменаМассив(КомпонентыОбмена.УзелКорреспондента) Цикл - Header.AvailableVersion.Добавить(ВерсияФормата); - КонецЦикла; - ПсевдонимПредопределенногоУзла = ОбменДаннымиСервер.ПсевдонимПредопределенногоУзла(КомпонентыОбмена.УзелКорреспондента); - Если ЗначениеЗаполнено(ПсевдонимПредопределенногоУзла) Тогда - Header.NewFrom = ОбменДаннымиСервер.КодПредопределенногоУзлаПланаОбмена(ИмяПланаОбмена); - КонецЕсли; - Иначе - Header.AvailableVersion.Добавить(КомпонентыОбмена.ВерсияФорматаОбмена); - КонецЕсли; - - ФабрикаXDTO.ЗаписатьXML(ФайлОбмена, Header); - - // Записываем элемент - ФайлОбмена.ЗаписатьНачалоЭлемента("Body"); - ФайлОбмена.ЗаписатьСоответствиеПространстваИмен("", КомпонентыОбмена.XMLСхема); - - КомпонентыОбмена.Вставить("ФайлОбмена", ФайлОбмена); - -КонецПроцедуры - // Открывает файл загрузки данных, записывает заголовок файла в соответствие с форматом обмена. // // Параметры: @@ -2052,15 +2090,14 @@ ЧтениеXML = Новый ЧтениеXML; - НомерИтерации = 0; КомпонентыОбмена.ФлагОшибки = Истина; - Пока НомерИтерации = 0 Цикл - - НомерИтерации = 1; + + ПрерватьЦикл = Ложь; + Пока Не ПрерватьЦикл Цикл + ПрерватьЦикл = Истина; Попытка ЧтениеXML.ОткрытьФайл(ИмяФайлаОбмена); - ЧтениеXML.Прочитать(); // Message КомпонентыОбмена.Вставить("ФайлОбмена", ЧтениеXML); Исключение СтрокаСообщенияОбОшибке = НСтр("ru = 'Ошибка при загрузке данных: %1'"); @@ -2069,6 +2106,7 @@ Прервать; КонецПопытки; + ЧтениеXML.Прочитать(); // Message Если (ЧтениеXML.ТипУзла <> ТипУзлаXML.НачалоЭлемента Или ЧтениеXML.ЛокальноеИмя <> "Message") Тогда Если СообщениеОтНеобновленнойНастройки(ЧтениеXML) Тогда @@ -2093,18 +2131,9 @@ КонецЕсли; Header = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ФабрикаXDTO.Тип(XMLБазоваяСхема(), "Header")); - Если ЧтениеXML.ТипУзла <> ТипУзлаXML.НачалоЭлемента - Или ЧтениеXML.ЛокальноеИмя <> "Body" Тогда - ЗаписатьВПротоколВыполнения(КомпонентыОбмена, 9); - Прервать; - КонецЕсли; - КомпонентыОбмена.XMLСхема = Header.Format; + URIФормата = Header.Format; - ФорматОбмена = РазложитьФорматОбмена(Header.Format); - КомпонентыОбмена.ВерсияФорматаОбмена = ФорматОбмена.Версия; - КомпонентыОбмена.МенеджерОбмена = МенеджерОбменаВерсииФормата(КомпонентыОбмена.ВерсияФорматаОбмена, - КомпонентыОбмена.УзелКорреспондента); Если ЭтоОбменЧерезПланОбмена Тогда Если Не Header.Установлено("Confirmation") Тогда @@ -2114,140 +2143,148 @@ Confirmation = Header.Confirmation; - КодОтКого = Confirmation.From; - КодКому = Confirmation.To; - - КодОтКогоНовый = ""; - Если Header.Установлено("NewFrom") Тогда - КодОтКогоНовый = Header.NewFrom; - КонецЕсли; - ИмяПланаОбмена = Confirmation.ExchangePlan; - КомпонентыОбмена.НомерВходящегоСообщения = Confirmation.MessageNo; - КомпонентыОбмена.НомерСообщенияПолученногоКорреспондентом = Confirmation.ReceivedNo; - - Если КомпонентыОбмена.НомерВходящегоСообщения <= 0 Тогда - КомпонентыОбмена.ИспользоватьКвитирование = Ложь; - КонецЕсли; Если Метаданные.ПланыОбмена.Найти(ИмяПланаОбмена) = Неопределено Тогда ЗаписатьВПротоколВыполнения(КомпонентыОбмена, 177); Прервать; КонецЕсли; - ПолучательИзСообщения = ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду(КодКому); - Если ПолучательИзСообщения <> ПланыОбмена[ИмяПланаОбмена].ЭтотУзел() Тогда - // Возможно, задан виртуальный код получателя. - ПсевдонимПредопределенногоУзла = ОбменДаннымиСервер.ПсевдонимПредопределенногоУзла(КомпонентыОбмена.УзелКорреспондента); - Если ПсевдонимПредопределенногоУзла <> КодКому Тогда - ЗаписатьВПротоколВыполнения(КомпонентыОбмена, 178); - Прервать; - КонецЕсли; - КонецЕсли; - - ОтправительИзСообщения = ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду(КодОтКого); - Если (ОтправительИзСообщения.Пустая() - Или ОтправительИзСообщения <> КомпонентыОбмена.УзелКорреспондента) - И ЗначениеЗаполнено(КодОтКогоНовый) Тогда - ОтправительИзСообщения = ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду(КодОтКогоНовый); - КонецЕсли; - - Если ОтправительИзСообщения.Пустая() - Или ОтправительИзСообщения <> КомпонентыОбмена.УзелКорреспондента Тогда - - СтрокаСообщения = НСтр("ru = 'Не найден узел обмена для загрузки данных. План обмена: %1, Код: %2'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ИмяПланаОбмена, КодОтКого); - ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СтрокаСообщения); - Прервать; - - КонецЕсли; - - // Проверяем базовый формат - МенеджерПланаОбмена = МенеджерПланаОбмена(КомпонентыОбмена.УзелКорреспондента); ФорматПланаОбмена = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, "ФорматОбмена"); - Если ФорматПланаОбмена <> ФорматОбмена.БазовыйФормат Тогда - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Формат сообщения обмена <%1> не соответствует формату плана обмена <%2>.'"), - ФорматОбмена.БазовыйФормат, - ФорматПланаОбмена); - ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СтрокаСообщения); - Прервать; - КонецЕсли; - // Проверяем версию формата сообщения обмена. - Если ВерсииФорматаОбменаМассив(КомпонентыОбмена.УзелКорреспондента).Найти(ФорматОбмена.Версия) = Неопределено Тогда - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Версия формата сообщения обмена <%1> не поддерживается.'"), - ФорматОбмена.Версия); - ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СтрокаСообщения); - Прервать; - КонецЕсли; + КомпонентыОбмена.ТолькоНастройкиXDTO = + Не ОбменДаннымиСервер.НастройкаСинхронизацииЗавершена(КомпонентыОбмена.УзелКорреспондента) + Или (URIФормата = ФорматПланаОбмена); - Если КомпонентыОбмена.ИспользоватьКвитирование Тогда + КомпонентыОбмена.НомерВходящегоСообщения = Confirmation.MessageNo; + КомпонентыОбмена.НомерСообщенияПолученногоКорреспондентом = Confirmation.ReceivedNo; + + Если Не КомпонентыОбмена.ТолькоНастройкиXDTO Тогда + КомпонентыОбмена.XMLСхема = URIФормата; - НомерПринятого = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(КомпонентыОбмена.УзелКорреспондента, "НомерПринятого"); + ФорматОбмена = РазложитьФорматОбмена(КомпонентыОбмена.XMLСхема); - Если НомерПринятого >= КомпонентыОбмена.НомерВходящегоСообщения Тогда - - // Номер сообщения меньше либо равен ранее принятому. - КомпонентыОбмена.СостояниеОбменаДанными.РезультатВыполненияОбмена = - Перечисления.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято; - - ЗаписатьВПротоколВыполнения(КомпонентыОбмена, 174,,,,, Истина); + // Проверяем базовый формат. + Если ФорматПланаОбмена <> ФорматОбмена.БазовыйФормат Тогда + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Формат сообщения обмена ""%1"" не соответствует формату плана обмена ""%2"".'"), + ФорматОбмена.БазовыйФормат, + ФорматПланаОбмена); + ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СтрокаСообщения); Прервать; КонецЕсли; - // Добавляем публичные идентификаторы для ссылочных объектов, о получении которых отчитался узел-корреспондент. - ДобавитьВыгруженныеОбъектыВРегистрПубличныеИдентификаторы(КомпонентыОбмена); + // Проверяем версию формата сообщения обмена. + Если ВерсииФорматаОбменаМассив(КомпонентыОбмена.УзелКорреспондента).Найти(ФорматОбмена.Версия) = Неопределено Тогда + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Версия ""%1"" формата сообщения обмена ""%2"" не поддерживается.'"), + ФорматОбмена.Версия, ФорматОбмена.БазовыйФормат); + ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СтрокаСообщения); + Прервать; + КонецЕсли; - // Удаляем регистрацию изменений, о получении которых отчитался узел-корреспондент. - ПланыОбмена.УдалитьРегистрациюИзменений(КомпонентыОбмена.УзелКорреспондента, КомпонентыОбмена.НомерСообщенияПолученногоКорреспондентом); + КомпонентыОбмена.ВерсияФорматаОбмена = ФорматОбмена.Версия; + КомпонентыОбмена.МенеджерОбмена = МенеджерОбменаВерсииФормата(КомпонентыОбмена.ВерсияФорматаОбмена, + КомпонентыОбмена.УзелКорреспондента); + + КодОтКого = Confirmation.From; + КодКому = Confirmation.To; - // Снимаем признак начальной выгрузки данных. - РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.СнятьПризнакНачальнойВыгрузкиДанных( - КомпонентыОбмена.УзелКорреспондента, КомпонентыОбмена.НомерСообщенияПолученногоКорреспондентом); + КодОтКогоНовый = ""; + Если Header.Установлено("NewFrom") Тогда + КодОтКогоНовый = Header.NewFrom; + КонецЕсли; + Если КомпонентыОбмена.НомерВходящегоСообщения <= 0 Тогда + КомпонентыОбмена.ИспользоватьКвитирование = Ложь; + КонецЕсли; + + ПолучательИзСообщения = ОбменДаннымиСервер.УзелПланаОбменаПоКоду(ИмяПланаОбмена, КодКому); + Если ПолучательИзСообщения <> ПланыОбмена[ИмяПланаОбмена].ЭтотУзел() Тогда + // Возможно, задан виртуальный код получателя. + ПсевдонимПредопределенногоУзла = ОбменДаннымиСервер.ПсевдонимПредопределенногоУзла(КомпонентыОбмена.УзелКорреспондента); + Если ПсевдонимПредопределенногоУзла <> КодКому Тогда + ЗаписатьВПротоколВыполнения(КомпонентыОбмена, 178); + Прервать; + КонецЕсли; + КонецЕсли; + + ОтправительИзСообщения = ОбменДаннымиСервер.УзелПланаОбменаПоКоду(ИмяПланаОбмена, КодОтКого); + Если (ОтправительИзСообщения = Неопределено + Или ОтправительИзСообщения <> КомпонентыОбмена.УзелКорреспондента) + И ЗначениеЗаполнено(КодОтКогоНовый) Тогда + ОтправительИзСообщения = ОбменДаннымиСервер.УзелПланаОбменаПоКоду(ИмяПланаОбмена, КодОтКогоНовый); + КонецЕсли; + + Если ОтправительИзСообщения = Неопределено + Или ОтправительИзСообщения <> КомпонентыОбмена.УзелКорреспондента Тогда + + СтрокаСообщения = НСтр("ru = 'Не найден узел обмена для загрузки данных. План обмена: %1, Идентификатор: %2'"); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ИмяПланаОбмена, КодОтКого); + ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СтрокаСообщения); + Прервать; + + КонецЕсли; + + Если КомпонентыОбмена.ИспользоватьКвитирование Тогда + + НомерПринятого = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(КомпонентыОбмена.УзелКорреспондента, "НомерПринятого"); + + Если НомерПринятого >= КомпонентыОбмена.НомерВходящегоСообщения Тогда + + // Номер сообщения меньше либо равен ранее принятому. + КомпонентыОбмена.СостояниеОбменаДанными.РезультатВыполненияОбмена = + Перечисления.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято; + + ЗаписатьВПротоколВыполнения(КомпонентыОбмена, 174,,,,, Истина); + Прервать; + КонецЕсли; + + // Добавляем публичные идентификаторы для ссылочных объектов, о получении которых отчитался узел-корреспондент. + ДобавитьВыгруженныеОбъектыВРегистрПубличныеИдентификаторы(КомпонентыОбмена); + + // Удаляем регистрацию изменений, о получении которых отчитался узел-корреспондент. + ПланыОбмена.УдалитьРегистрациюИзменений(КомпонентыОбмена.УзелКорреспондента, КомпонентыОбмена.НомерСообщенияПолученногоКорреспондентом); + + // Снимаем признак начальной выгрузки данных. + РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.СнятьПризнакНачальнойВыгрузкиДанных( + КомпонентыОбмена.УзелКорреспондента, КомпонентыОбмена.НомерСообщенияПолученногоКорреспондентом); + + КонецЕсли; + КонецЕсли; - // Проверяем возможность увеличения версии и поддержку кодировки по УИДам в корреспонденте. - ДоступныеВерсииОтправителя = Header.AvailableVersion; - ДоступныеВерсииПолучателя = ВерсииФорматаОбменаМассив(КомпонентыОбмена.УзелКорреспондента); - НомерВерсииКорреспондента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(КомпонентыОбмена.УзелКорреспондента, "ВерсияФорматаОбмена"); - МаксимальнаяОбщаяВерсия = "0.0"; - - КомпонентыОбмена.Вставить("КорреспондентПоддерживаетИдентификаторОбменаДанными", Ложь); - ПроверяемаяВерсия = НомерВерсииСПоддержкойИдентификатораОбменаДанными(); - Для Каждого ДоступнаяВерсияОтправителя Из ДоступныеВерсииОтправителя Цикл - ДоступнаяВерсияОтправителя = СокрЛП(ДоступнаяВерсияОтправителя); + ЗаполнитьСтруктуруНастроекXDTOКорреспондента(КомпонентыОбмена.НастройкиXDTOКорреспондента, + Header, Не (URIФормата = ФорматПланаОбмена), КомпонентыОбмена.УзелКорреспондента); - // Проверяем поддерживается ли кодировка по УИДам в корреспонденте. - Если Не КомпонентыОбмена.КорреспондентПоддерживаетИдентификаторОбменаДанными - И СравнитьВерсии(ДоступнаяВерсияОтправителя, ПроверяемаяВерсия) >= 0 Тогда - КомпонентыОбмена.КорреспондентПоддерживаетИдентификаторОбменаДанными = Истина; - КонецЕсли; - - Если ДоступныеВерсииПолучателя.Найти(ДоступнаяВерсияОтправителя) = Неопределено Тогда - Продолжить; - КонецЕсли; - - // Проверяем возможность увеличения версии. - Если СравнитьВерсии(ДоступнаяВерсияОтправителя, МаксимальнаяОбщаяВерсия) >= 0 Тогда - МаксимальнаяОбщаяВерсия = ДоступнаяВерсияОтправителя; - КонецЕсли; - КонецЦикла; - - Если МаксимальнаяОбщаяВерсия <> НомерВерсииКорреспондента Тогда - // Обнаружена более свежая общая версия. - УзелКорреспондентаОбъект = КомпонентыОбмена.УзелКорреспондента.ПолучитьОбъект(); - УзелКорреспондентаОбъект.ВерсияФорматаОбмена = МаксимальнаяОбщаяВерсия; - УзелКорреспондентаОбъект.Записать(); - ЗаписатьВПротоколВыполнения(КомпонентыОбмена, - НСтр("ru = 'Изменен номер версии формата обмена.'"), , Ложь, , , Истина); + Если Header.Установлено("Prefix") Тогда + КомпонентыОбмена.ПрефиксКорреспондента = Header.Prefix; КонецЕсли; + // Проверяем поддержку кодировки по УИДам в корреспонденте. + КомпонентыОбмена.Вставить("КорреспондентПоддерживаетИдентификаторОбменаДанными", + КомпонентыОбмена.НастройкиXDTOКорреспондента.ПоддерживаемыеВерсии.Найти(НомерВерсииСПоддержкойИдентификатораОбменаДанными()) <> Неопределено); + + Иначе + + КомпонентыОбмена.XMLСхема = URIФормата; + + ФорматОбмена = РазложитьФорматОбмена(КомпонентыОбмена.XMLСхема); + + КомпонентыОбмена.ВерсияФорматаОбмена = ФорматОбмена.Версия; + КомпонентыОбмена.МенеджерОбмена = МенеджерОбменаВерсииФормата(КомпонентыОбмена.ВерсияФорматаОбмена); + КонецЕсли; - ЧтениеXML.Прочитать(); // Body + Если Не КомпонентыОбмена.ТолькоНастройкиXDTO Тогда + Если ЧтениеXML.ТипУзла <> ТипУзлаXML.НачалоЭлемента + Или ЧтениеXML.ЛокальноеИмя <> "Body" Тогда + ЗаписатьВПротоколВыполнения(КомпонентыОбмена, 9); + Прервать; + КонецЕсли; + + ЧтениеXML.Прочитать(); // Body + КонецЕсли; КомпонентыОбмена.ФлагОшибки = Ложь; @@ -2588,6 +2625,155 @@ #КонецОбласти +// Возвращает таблицу поддерживаемых в обмене объектов формата для указанного плана обмена. +// Перечень формируется на основании правил обмена из модулей менеджера обмена по соответствующим версиям. +// +// Параметры: +// ИмяПланаОбмена - Строка - Имя плана обмена XDTO. +// Режим - Строка - Вид запрашиваемой информации: "Отправка" | "Получение" | "ОтправкаПолучение". +// "Отправка" - будут возвращены все объекты, для которых поддерживается отправка; +// "Получение" - будут возвращены все объекты, для которых поддерживается получение; +// "ОтправкаПолучение" - будут возвращены все поддерживаемые объекты. +// По умолчанию "ОтправкаПолучение". +// УзелОбмена - ПланОбменаСсылка, Неопределено - узел плана обмена, соответствующий корреспонденту. +// +// Возвращаемое значение: +// ТаблицаЗначений - состав поддерживаемых объектов формата в разрезе версий. +// * Версия - Строка - Версия формата, например, "1.5". +// * Объект - Строка - Имя объекта формата, например, "Справочник.Номенклатура". +// * Отправка - Булево - Признак поддержки отправки данного объекта формата. +// * Получение - Булево - Признак поддержки получения данного объекта формата. +// +Функция ПоддерживаемыеОбъектыФормата(ИмяПланаОбмена, Режим = "ОтправкаПолучение", УзелОбмена = Неопределено) Экспорт + + ТаблицаОбъекты = Новый ТаблицаЗначений; + ИнициализироватьТаблицуПоддерживаемыхОбъектовФормата(ТаблицаОбъекты, Режим); + + ВерсииФормата = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, "ВерсииФорматаОбмена"); + + Для Каждого Версия Из ВерсииФормата Цикл + + Если СтрНайти(Режим, "Отправка") Тогда + КомпонентыОбмена = ИнициализироватьКомпонентыОбмена("Отправка"); + + КомпонентыОбмена.ВерсияФорматаОбмена = Версия.Ключ; + КомпонентыОбмена.МенеджерОбмена = Версия.Значение; + + КомпонентыОбмена.XMLСхема = ФорматОбмена(ИмяПланаОбмена, КомпонентыОбмена.ВерсияФорматаОбмена); + + ИнициализироватьТаблицыПравилОбмена(КомпонентыОбмена); + + Для Каждого ПравилоКонвертации Из КомпонентыОбмена.ПравилаКонвертацииОбъектов Цикл + + Отбор = Новый Структура; + Отбор.Вставить("Версия", Версия.Ключ); + Отбор.Вставить("Объект", ПравилоКонвертации.ТипXDTO.Имя); + + СтрокиОбъекты = ТаблицаОбъекты.НайтиСтроки(Отбор); + Если СтрокиОбъекты.Количество() = 0 Тогда + СтрокаОбъекты = ТаблицаОбъекты.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаОбъекты, Отбор); + Иначе + СтрокаОбъекты = СтрокиОбъекты[0]; + КонецЕсли; + + СтрокаОбъекты.Отправка = Истина; + + КонецЦикла; + КонецЕсли; + + Если СтрНайти(Режим, "Получение") Тогда + КомпонентыОбмена = ИнициализироватьКомпонентыОбмена("Получение"); + + КомпонентыОбмена.ВерсияФорматаОбмена = Версия.Ключ; + КомпонентыОбмена.МенеджерОбмена = Версия.Значение; + + КомпонентыОбмена.XMLСхема = ФорматОбмена(ИмяПланаОбмена, КомпонентыОбмена.ВерсияФорматаОбмена); + + ИнициализироватьТаблицыПравилОбмена(КомпонентыОбмена); + + Для Каждого ПравилоОбработки Из КомпонентыОбмена.ПравилаОбработкиДанных Цикл + + Отбор = Новый Структура; + Отбор.Вставить("Версия", Версия.Ключ); + Отбор.Вставить("Объект", ПравилоОбработки.ОбъектВыборкиФормат); + + СтрокиОбъекты = ТаблицаОбъекты.НайтиСтроки(Отбор); + Если СтрокиОбъекты.Количество() = 0 Тогда + СтрокаОбъекты = ТаблицаОбъекты.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаОбъекты, Отбор); + Иначе + СтрокаОбъекты = СтрокиОбъекты[0]; + КонецЕсли; + + СтрокаОбъекты.Получение = Истина; + + КонецЦикла; + КонецЕсли; + + КонецЦикла; + + ЕстьАлгоритм = ОбменДаннымиСервер.ЕстьАлгоритмМенеджераПланаОбмена( + "ПриОпределенииПоддерживаемыхОбъектовФормата", ИмяПланаОбмена); + Если ЕстьАлгоритм Тогда + ПланыОбмена[ИмяПланаОбмена].ПриОпределенииПоддерживаемыхОбъектовФормата(ТаблицаОбъекты, Режим, УзелОбмена); + КонецЕсли; + + Возврат ТаблицаОбъекты; + +КонецФункции + +// Возвращает таблицу поддерживаемых в обмене объектов формата для указанного корреспондента. +// +// Параметры: +// УзелОбмена - ПланОбменаСсылка - Узел плана обмена XDTO соответствующего корреспондента. +// Режим - Строка - Вид запрашиваемой информации: "Отправка" | "Получение" | "ОтправкаПолучение". +// "Отправка" - будут возвращены все объекты, для которых поддерживается отправка; +// "Получение" - будут возвращены все объекты, для которых поддерживается получение; +// "ОтправкаПолучение" - будут возвращены все поддерживаемые объекты. +// По умолчанию "ОтправкаПолучение". +// +// Возвращаемое значение: +// ТаблицаЗначений - состав поддерживаемых объектов формата в разрезе версий. +// * Версия - Строка - Версия формата, например, "1.5". +// * Объект - Строка - Имя объекта формата, например, "Справочник.Номенклатура". +// * Отправка - Булево - Признак поддержки корреспондентом отправки данного объекта формата. +// * Получение - Булево - Признак поддержки корреспондентом получения данного объекта формата. +// +Функция ПоддерживаемыеОбъектыФорматаКорреспондента(УзелОбмена, Режим = "ОтправкаПолучение") Экспорт + + ТаблицаОбъекты = Новый ТаблицаЗначений; + ИнициализироватьТаблицуПоддерживаемыхОбъектовФормата(ТаблицаОбъекты, Режим); + + НастройкиКорреспондента = РегистрыСведений.НастройкиОбменаДаннымиXDTO.ЗначениеНастройкиКорреспондента(УзелОбмена, "ПоддерживаемыеОбъекты"); + + Если Не НастройкиКорреспондента = Неопределено Тогда + + Для Каждого СтрокаНастройкиКорреспондента Из НастройкиКорреспондента Цикл + + Если (СтрНайти(Режим, "Отправка") И СтрокаНастройкиКорреспондента.Отправка) + Или (СтрНайти(Режим, "Получение") И СтрокаНастройкиКорреспондента.Получение) Тогда + СтрокаОбъекты = ТаблицаОбъекты.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаОбъекты, СтрокаНастройкиКорреспондента); + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелОбмена); + ЕстьАлгоритм = ОбменДаннымиСервер.ЕстьАлгоритмМенеджераПланаОбмена( + "ПриОпределенииПоддерживаемыхКорреспондентомОбъектовФормата", ИмяПланаОбмена); + Если ЕстьАлгоритм Тогда + ПланыОбмена[ИмяПланаОбмена].ПриОпределенииПоддерживаемыхКорреспондентомОбъектовФормата(УзелОбмена, ТаблицаОбъекты, Режим); + КонецЕсли; + + ТаблицаОбъекты.Индексы.Добавить("Объект"); + + Возврат ТаблицаОбъекты; + +КонецФункции + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -2659,7 +2845,7 @@ #КонецОбласти -#Область ПолучениеДанные +#Область ПолучениеДанных // Функция проверяет формат сообщения обмена: соответствует ли он формату обмена через EnterpriseData. // @@ -2669,6 +2855,7 @@ // Возвращаемое значение // Истина - формат соответствует, ложь - не соответствует. Функция ПроверитьФорматСообщенияОбмена(ЧтениеXML) Экспорт + Если (ЧтениеXML.ТипУзла <> ТипУзлаXML.НачалоЭлемента Или ЧтениеXML.ЛокальноеИмя <> "Message") Тогда Возврат Ложь; @@ -2679,11 +2866,13 @@ Или ЧтениеXML.ЛокальноеИмя <> "Header" Тогда Возврат Ложь; КонецЕсли; + Попытка - Header = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ФабрикаXDTO.Тип("http://www.1c.ru/SSL/Exchange/Message", "Header")); + Header = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ФабрикаXDTO.Тип(XMLБазоваяСхема(), "Header")); Исключение Возврат Ложь; КонецПопытки; + Если ЧтениеXML.ТипУзла <> ТипУзлаXML.НачалоЭлемента Или ЧтениеXML.ЛокальноеИмя <> "Body" Тогда Возврат Ложь; @@ -2736,11 +2925,15 @@ // ВерсияФормата - Строка. // Функция ФорматОбмена(Знач ИмяПланаОбмена, Знач ВерсияФормата) Экспорт - ФорматОбмена = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, "ФорматОбмена"); - ЭлементыФормата = СтрРазделить(ФорматОбмена, "/"); - ЭлементыФормата.Добавить(ВерсияФормата); - Возврат СтрСоединить(ЭлементыФормата, "/"); + ФорматОбмена = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, "ФорматОбмена"); + + Если Не ПустаяСтрока(ВерсияФормата) Тогда + ФорматОбмена = ФорматОбмена + "/" + ВерсияФормата; + КонецЕсли; + + Возврат ФорматОбмена; + КонецФункции // Возвращает строку с номером версии формата обмена, поддерживаемой получателем данных. @@ -2763,16 +2956,28 @@ // Возвращает признак поддерживается ли для узла версия формата, для которой предусмотрена кодировка узлов // с использованием уникальных идентификаторов. +// Функция ПоддерживаетсяВерсияСИдентификаторомОбменаДанными(Знач УзелИнформационнойБазы) Экспорт + ПроверяемаяВерсия = НомерВерсииСПоддержкойИдентификатораОбменаДанными(); - Если УзелИнформационнойБазы.ЭтотУзел Или Не ЗначениеЗаполнено(УзелИнформационнойБазы) Тогда - ИмяПланаОбмена = УзелИнформационнойБазы.Метаданные().Имя; - ОписаниеВариантаНастройки = ОбменДаннымиПовтИсп.ОписаниеВариантаНастройки(ИмяПланаОбмена, "", ""); - ВерсияФорматаКорреспондента = ОписаниеВариантаНастройки.Отборы.ВерсияФорматаОбмена; + + ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы); + + Результат = Ложь; + + Если УзелИнформационнойБазы = ПланыОбмена[ИмяПланаОбмена].ЭтотУзел() + Или Не ЗначениеЗаполнено(УзелИнформационнойБазы) Тогда + + ПоддерживаемыеВерсии = ВерсииФорматаОбмена(УзелИнформационнойБазы); + + Результат = (ПоддерживаемыеВерсии[ПроверяемаяВерсия] <> Неопределено); Иначе - ВерсияФорматаКорреспондента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелИнформационнойБазы,"ВерсияФорматаОбмена"); + ВерсияФорматаКорреспондента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелИнформационнойБазы, "ВерсияФорматаОбмена"); + + Результат = (СравнитьВерсии(ВерсияФорматаКорреспондента, ПроверяемаяВерсия) >= 0); КонецЕсли; - Возврат (СравнитьВерсии(ВерсияФорматаКорреспондента,ПроверяемаяВерсия) >= 0); + + Возврат Результат; КонецФункции @@ -2862,6 +3067,57 @@ КонецПроцедуры +Процедура ЗаполнитьПоддерживаемыеОбъектыXDTO(КомпонентыОбмена) Экспорт + + Если Не КомпонентыОбмена.ЭтоОбменЧерезПланОбмена + Или Не ЗначениеЗаполнено(КомпонентыОбмена.УзелКорреспондента) Тогда + Возврат; + КонецЕсли; + + ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(КомпонентыОбмена.УзелКорреспондента); + + ОбъектыБазы = Неопределено; + ОбъектыБазыКорреспондента = Неопределено; + + Если КомпонентыОбмена.НаправлениеОбмена = "Отправка" Тогда + + // Для отправки поддерживаются объекты: + // отправка которых поддерживается из этой базы + // и получение которых поддерживается в базе-корреспонденте. + + ТаблицаОбъектыБазы = ПоддерживаемыеОбъектыФормата(ИмяПланаОбмена, "Отправка", КомпонентыОбмена.УзелКорреспондента); + ТаблицаОбъектыБазыКорреспондента = ПоддерживаемыеОбъектыФорматаКорреспондента(КомпонентыОбмена.УзелКорреспондента, "Получение"); + + ИначеЕсли КомпонентыОбмена.НаправлениеОбмена = "Получение" Тогда + + // Для получения поддерживаются объекты: + // получение которых поддерживается в этой базе + // и отправка которых поддерживается в базе-корреспонденте. + + ТаблицаОбъектыБазы = ПоддерживаемыеОбъектыФормата(ИмяПланаОбмена, "Получение", КомпонентыОбмена.УзелКорреспондента); + ТаблицаОбъектыБазыКорреспондента = ПоддерживаемыеОбъектыФорматаКорреспондента(КомпонентыОбмена.УзелКорреспондента, "Отправка"); + + Иначе + + Возврат; + + КонецЕсли; + + ОтборПоВерсии = Новый Структура("Версия", КомпонентыОбмена.ВерсияФорматаОбмена); + + ТаблицаОбъектыБазыПоВерсии = ТаблицаОбъектыБазы.Скопировать(ОтборПоВерсии); + ТаблицаОбъектыБазыКорреспондентаПоВерсии = ТаблицаОбъектыБазыКорреспондента.Скопировать(ОтборПоВерсии); + + Для Каждого СтрокаОбъектыБазыПоВерсии Из ТаблицаОбъектыБазыПоВерсии Цикл + Если ТаблицаОбъектыБазыКорреспондентаПоВерсии.Найти(СтрокаОбъектыБазыПоВерсии.Объект, "Объект") = Неопределено Тогда + Продолжить; + КонецЕсли; + + КомпонентыОбмена.ПоддерживаемыеОбъектыXDTO.Добавить(СтрокаОбъектыБазыПоВерсии.Объект); + КонецЦикла; + +КонецПроцедуры + #КонецОбласти #КонецОбласти @@ -3427,6 +3683,12 @@ Если ПравилоКонвертации <> Неопределено Тогда // ПКО передали явно (при вызове удаления для конкретного ПКО). + + Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена + И КомпонентыОбмена.ПоддерживаемыеОбъектыXDTO.Найти(ПравилоКонвертации.ОбъектФормата) = Неопределено Тогда + Возврат; + КонецЕсли; + ЗаписатьУдалениеОбъектаXDTO(КомпонентыОбмена, Ссылка, ПравилоКонвертации.ТипСсылкиXDTO); Иначе @@ -3445,6 +3707,11 @@ Продолжить; КонецЕсли; + Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена + И КомпонентыОбмена.ПоддерживаемыеОбъектыXDTO.Найти(ПравилоКонвертации.ОбъектФормата) = Неопределено Тогда + Продолжить; + КонецЕсли; + // "Свертка" ПКО по типу ссылки XDTO. ТипСсылкиXDTO = ПравилоКонвертации.ТипСсылкиXDTO; Если ОбработанныеТипыСсылокXDTO.Найти(ТипСсылкиXDTO) = Неопределено Тогда @@ -3657,6 +3924,91 @@ КонецФункции +Процедура ВыгрузитьПоддерживаемыеОбъектыФормата(Header, УзелКорреспондента) + + СтрокаВсеВерсии = ""; + Для Каждого AvailableVersion Из Header.AvailableVersion Цикл + Если ПустаяСтрока(СтрокаВсеВерсии) Тогда + СтрокаВсеВерсии = AvailableVersion; + Иначе + СтрокаВсеВерсии = AvailableVersion + "," + СтрокаВсеВерсии; + КонецЕсли; + КонецЦикла; + + ТаблицаПоддерживаемыеОбъекты = ПоддерживаемыеОбъектыФормата( + ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелКорреспондента)); + + ТаблицаПоддерживаемыеОбъекты.Сортировать("Объект, Версия"); + + AvailableObjectTypes = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(XMLБазоваяСхема(), "AvailableObjectTypes")); + + ТекущийОбъект = Неопределено; + Для Каждого СтрокаПоддерживаемыеОбъекты Из ТаблицаПоддерживаемыеОбъекты Цикл + Если ТекущийОбъект = Неопределено Тогда + СоздатьНовыйОбъект = Истина; + ИначеЕсли ТекущийОбъект.Name <> СтрокаПоддерживаемыеОбъекты.Объект Тогда + + Если ТекущийОбъект.Sending = СтрокаВсеВерсии Тогда + ТекущийОбъект.Sending = "*"; + КонецЕсли; + + Если ТекущийОбъект.Receiving = СтрокаВсеВерсии Тогда + ТекущийОбъект.Receiving = "*"; + КонецЕсли; + + AvailableObjectTypes.ObjectType.Добавить(ТекущийОбъект); + СоздатьНовыйОбъект = Истина; + Иначе + СоздатьНовыйОбъект = Ложь; + КонецЕсли; + + Если СоздатьНовыйОбъект Тогда + ТекущийОбъект = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(XMLБазоваяСхема(), "ObjectType")); + ТекущийОбъект.Name = СтрокаПоддерживаемыеОбъекты.Объект; + + ТекущийОбъект.Sending = ""; + ТекущийОбъект.Receiving = ""; + КонецЕсли; + + Если СтрокаПоддерживаемыеОбъекты.Отправка Тогда + Если ПустаяСтрока(ТекущийОбъект.Sending) Тогда + ТекущийОбъект.Sending = СтрокаПоддерживаемыеОбъекты.Версия; + Иначе + ТекущийОбъект.Sending = ТекущийОбъект.Sending + "," + СтрокаПоддерживаемыеОбъекты.Версия; + КонецЕсли; + КонецЕсли; + + Если СтрокаПоддерживаемыеОбъекты.Получение Тогда + Если ПустаяСтрока(ТекущийОбъект.Receiving) Тогда + ТекущийОбъект.Receiving = СтрокаПоддерживаемыеОбъекты.Версия; + Иначе + ТекущийОбъект.Receiving = ТекущийОбъект.Receiving + "," + СтрокаПоддерживаемыеОбъекты.Версия; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Если ТекущийОбъект <> Неопределено Тогда + Если ТекущийОбъект.Sending = СтрокаВсеВерсии Тогда + ТекущийОбъект.Sending = "*"; + КонецЕсли; + + Если ТекущийОбъект.Receiving = СтрокаВсеВерсии Тогда + ТекущийОбъект.Receiving = "*"; + КонецЕсли; + + AvailableObjectTypes.ObjectType.Добавить(ТекущийОбъект); + КонецЕсли; + + Если AvailableObjectTypes.ObjectType.Количество() > 0 Тогда + Header.AvailableObjectTypes = AvailableObjectTypes; + Иначе + Header.AvailableObjectTypes = Неопределено; + КонецЕсли; + + РегистрыСведений.НастройкиОбменаДаннымиXDTO.ОбновитьНастройки(УзелКорреспондента, "ПоддерживаемыеОбъекты", ТаблицаПоддерживаемыеОбъекты); + +КонецПроцедуры + #КонецОбласти #Область ПолучениеДанных @@ -4241,15 +4593,18 @@ КонецЕсли; Для Каждого КонвертацииТЧ Из ПравилоКонвертации.СвойстваТабличныхЧастей Цикл + ИмяТЧ = КонвертацииТЧ.ТЧКонфигурации; - Если Не ЗначениеЗаполнено(ИмяТЧ) Тогда + Если ПустаяСтрока(ИмяТЧ) Тогда Продолжить; КонецЕсли; ДанныеИБ[ИмяТЧ].Очистить(); ДанныеИБ[ИмяТЧ].Загрузить(ПолученныеДанные[ИмяТЧ].Выгрузить()); + КонецЦикла; + КонецПроцедуры Функция ИнициализироватьПолученныеДанные(ПравилоКонвертации) @@ -4695,7 +5050,13 @@ Для Каждого ПравилоКонвертацииИмя Из МассивИменПКО Цикл - ПравилоКонвертации = КомпонентыОбмена.ПравилаКонвертацииОбъектов.Найти(ПравилоКонвертацииИмя, "ИмяПКО"); + ПравилоКонвертации = ПКОПоИмени(КомпонентыОбмена, ПравилоКонвертацииИмя); + + Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена + И КомпонентыОбмена.ПоддерживаемыеОбъектыXDTO.Найти(ПравилоКонвертации.ОбъектФормата) = Неопределено Тогда + Продолжить; + КонецЕсли; + Если ПравилоКонвертации.ВариантИдентификации = "СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска" Или ПравилоКонвертации.ВариантИдентификации = "ПоУникальномуИдентификатору" Тогда @@ -4895,6 +5256,157 @@ КонецФункции +Процедура ОбновитьПрефиксКорреспондента(КомпонентыОбмена) Экспорт + + Если ЗначениеЗаполнено(КомпонентыОбмена.ПрефиксКорреспондента) Тогда + Префиксы = РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ПрефиксыУзла(КомпонентыОбмена.УзелКорреспондента); + Если Не ЗначениеЗаполнено(Префиксы.ПрефиксКорреспондента) Тогда + РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ОбновитьПрефиксы( + КомпонентыОбмена.УзелКорреспондента, , КомпонентыОбмена.ПрефиксКорреспондента); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура ОбновитьНастройкиXDTOКорреспондента(КомпонентыОбмена) Экспорт + + // Проверяем возможность увеличения версии в корреспонденте. + НомерВерсииКорреспондента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(КомпонентыОбмена.УзелКорреспондента, "ВерсияФорматаОбмена"); + МаксимальнаяОбщаяВерсия = МаксимальнаяОбщаяВерсияФормата( + ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(КомпонентыОбмена.УзелКорреспондента), + КомпонентыОбмена.НастройкиXDTOКорреспондента.ПоддерживаемыеВерсии); + + Если МаксимальнаяОбщаяВерсия <> НомерВерсииКорреспондента Тогда + УзелКорреспондентаОбъект = КомпонентыОбмена.УзелКорреспондента.ПолучитьОбъект(); + УзелКорреспондентаОбъект.ВерсияФорматаОбмена = МаксимальнаяОбщаяВерсия; + УзелКорреспондентаОбъект.Записать(); + ЗаписатьВПротоколВыполнения(КомпонентыОбмена, + НСтр("ru = 'Изменен номер версии формата обмена.'"), , Ложь, , , Истина); + КонецЕсли; + + РегистрыСведений.НастройкиОбменаДаннымиXDTO.ОбновитьНастройкиКорреспондента(КомпонентыОбмена.УзелКорреспондента, + "ПоддерживаемыеОбъекты", + КомпонентыОбмена.НастройкиXDTOКорреспондента.ПоддерживаемыеОбъекты); + +КонецПроцедуры + +Процедура ЗаполнитьСтруктуруНастроекXDTOКорреспондента(СтруктураНастроек, + Header, ФорматСодержитВерсию = Истина, УзелОбмена = Неопределено) Экспорт + + СтруктураНастроек.Вставить("Формат", ""); + СтруктураНастроек.Вставить("ПоддерживаемыеВерсии", Новый Массив); + СтруктураНастроек.Вставить("ПоддерживаемыеОбъекты", Новый ТаблицаЗначений); + + ИнициализироватьТаблицуПоддерживаемыхОбъектовФормата( + СтруктураНастроек.ПоддерживаемыеОбъекты, "ОтправкаПолучение"); + + Если ФорматСодержитВерсию Тогда + ФорматОбмена = РазложитьФорматОбмена(Header.Format); + СтруктураНастроек.Формат = ФорматОбмена.БазовыйФормат; + Иначе + СтруктураНастроек.Формат = Header.Format; + КонецЕсли; + + Для Каждого AvailableVersion Из Header.AvailableVersion Цикл + СтруктураНастроек.ПоддерживаемыеВерсии.Добавить(AvailableVersion); + КонецЦикла; + + Если Не Header.Установлено("AvailableObjectTypes") + И Не УзелОбмена = Неопределено + И ФорматСодержитВерсию Тогда + // Обратная совместимость с 2.x. + // Поскольку от корреспондента нет и не может быть получено информации о поддержке объектов, + // принимаем, что он умеет отправлять все объекты, которые эта база может получать, + // и может получать все объекты, которые эта база может отправлять. + // В качестве версии формата принимается максимальная общая версия. + + ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелОбмена); + + ТаблицаОбъектыБазы = ПоддерживаемыеОбъектыФормата(ИмяПланаОбмена, + "ОтправкаПолучение", ?(УзелОбмена.Пустая(), Неопределено, УзелОбмена)); + + Для Каждого Версия Из СтруктураНастроек.ПоддерживаемыеВерсии Цикл + ОтборПоВерсии = Новый Структура("Версия", Версия); + + СтрокиОбъектыБазы = ТаблицаОбъектыБазы.НайтиСтроки(ОтборПоВерсии); + Для Каждого СтрокаОбъектыБазы Из СтрокиОбъектыБазы Цикл + + СтрокаОбъектыКорреспондента = СтруктураНастроек.ПоддерживаемыеОбъекты.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаОбъектыКорреспондента, СтрокаОбъектыБазы, "Версия, Объект"); + СтрокаОбъектыКорреспондента.Отправка = СтрокаОбъектыБазы.Получение; + СтрокаОбъектыКорреспондента.Получение = СтрокаОбъектыБазы.Отправка; + + КонецЦикла; + КонецЦикла; + + Возврат; + КонецЕсли; + + Если Header.AvailableObjectTypes = Неопределено Тогда + Возврат; + КонецЕсли; + + Для Каждого ObjectType Из Header.AvailableObjectTypes.ObjectType Цикл + + Отправка = Новый Массив; + Получение = Новый Массив; + + Если Не ПустаяСтрока(ObjectType.Sending) Тогда + + Если ObjectType.Sending = "*" Тогда + Для Каждого Версия Из СтруктураНастроек.ПоддерживаемыеВерсии Цикл + Отправка.Добавить(СокрЛП(Версия)); + КонецЦикла; + Иначе + Для Каждого Версия Из СтрРазделить(ObjectType.Sending, ",", Ложь) Цикл + Отправка.Добавить(СокрЛП(Версия)); + КонецЦикла; + КонецЕсли; + + КонецЕсли; + + Если Не ПустаяСтрока(ObjectType.Receiving) Тогда + + Если ObjectType.Receiving = "*" Тогда + Для Каждого Версия Из СтруктураНастроек.ПоддерживаемыеВерсии Цикл + Получение.Добавить(СокрЛП(Версия)); + КонецЦикла; + Иначе + Для Каждого Версия Из СтрРазделить(ObjectType.Receiving, ",", Ложь) Цикл + Получение.Добавить(СокрЛП(Версия)); + КонецЦикла; + КонецЕсли; + + КонецЕсли; + + Для Каждого Версия Из Отправка Цикл + + СтрокаОбъект = СтруктураНастроек.ПоддерживаемыеОбъекты.Добавить(); + СтрокаОбъект.Объект = ObjectType.Name; + СтрокаОбъект.Версия = Версия; + СтрокаОбъект.Отправка = Истина; + + Индекс = Получение.Найти(Версия); + Если Не Индекс = Неопределено Тогда + СтрокаОбъект.Получение = Истина; + Получение.Удалить(Индекс); + КонецЕсли; + + КонецЦикла; + + Для Каждого Версия Из Получение Цикл + + СтрокаОбъект = СтруктураНастроек.ПоддерживаемыеОбъекты.Добавить(); + СтрокаОбъект.Объект = ObjectType.Name; + СтрокаОбъект.Версия = Версия; + СтрокаОбъект.Получение = Истина; + + КонецЦикла; + + КонецЦикла; + +КонецПроцедуры + #КонецОбласти #Область ПоискПравилОбмена @@ -5323,23 +5835,51 @@ #Область ПроцедурыИФункцииВерсионированияФорматаОбмена +Функция МаксимальнаяОбщаяВерсияФормата(ИмяПланаОбмена, ВерсииФорматаКорреспондента) Экспорт + + МаксимальнаяОбщаяВерсия = "0.0"; + + ВерсииФормата = ВерсииФорматаОбменаМассив(ПланыОбмена[ИмяПланаОбмена].ЭтотУзел()); + + Для Каждого ВерсияКорреспондента Из ВерсииФорматаКорреспондента Цикл + ВерсияКорреспондента = СокрЛП(ВерсияКорреспондента); + + Если ВерсииФормата.Найти(ВерсияКорреспондента) = Неопределено Тогда + Продолжить; + КонецЕсли; + + Если СравнитьВерсии(ВерсияКорреспондента, МаксимальнаяОбщаяВерсия) >= 0 Тогда + МаксимальнаяОбщаяВерсия = ВерсияКорреспондента; + КонецЕсли; + КонецЦикла; + + Возврат МаксимальнаяОбщаяВерсия; + +КонецФункции + Функция ВерсииФорматаОбмена(Знач УзелИнформационнойБазы) ВерсииФорматаОбмена = Новый Соответствие; + ИмяПланаОбмена = ""; Если ЗначениеЗаполнено(УзелИнформационнойБазы) Тогда - ИмяПланаОбмена = УзелИнформационнойБазы.Метаданные().Имя; - ВерсииФорматаОбмена = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена,"ВерсииФорматаОбмена"); + ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы); + ВерсииФорматаОбмена = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, "ВерсииФорматаОбмена"); Иначе ОбменДаннымиПереопределяемый.ПриПолученииДоступныхВерсийФормата(ВерсииФорматаОбмена); КонецЕсли; Если ВерсииФорматаОбмена.Количество() = 0 Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не заданы версии формата обмена. - |Имя плана обмена: %1 - |Процедура: ПолучитьВерсииФорматаОбмена(<ВерсииФорматаОбмена>)'"), - УзелИнформационнойБазы.Метаданные().Имя); + Если ЗначениеЗаполнено(УзелИнформационнойБазы) Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не заданы версии формата обмена. + |Имя плана обмена: %1 + |Процедура: ПолучитьВерсииФорматаОбмена(<ВерсииФорматаОбмена>)'"), + ИмяПланаОбмена); + Иначе + ВызватьИсключение НСтр("ru = 'Не заданы версии формата обмена. + |Процедура: ОбменДаннымиПереопределяемый.ПриПолученииДоступныхВерсийФормата(<ВерсииФорматаОбмена>)'"); + КонецЕсли; КонецЕсли; Результат = Новый Соответствие; @@ -5590,16 +6130,27 @@ КонецФункции -Функция МенеджерПланаОбмена(Знач УзелИнформационнойБазы) - - Возврат ПланыОбмена[УзелИнформационнойБазы.Метаданные().Имя]; - -КонецФункции - Функция НомерВерсииСПоддержкойИдентификатораОбменаДанными() Возврат "1.5"; КонецФункции +Процедура ИнициализироватьТаблицуПоддерживаемыхОбъектовФормата(ТаблицаОбъекты, Режим) + + ТаблицаОбъекты.Колонки.Добавить("Версия", Новый ОписаниеТипов("Строка")); + ТаблицаОбъекты.Колонки.Добавить("Объект", Новый ОписаниеТипов("Строка")); + + Если СтрНайти(Режим, "Отправка") Тогда + ТаблицаОбъекты.Колонки.Добавить("Отправка", Новый ОписаниеТипов("Булево")); + КонецЕсли; + + Если СтрНайти(Режим, "Получение") Тогда + ТаблицаОбъекты.Колонки.Добавить("Получение", Новый ОписаниеТипов("Булево")); + КонецЕсли; + + ТаблицаОбъекты.Индексы.Добавить("Версия, Объект"); + +КонецПроцедуры + #КонецОбласти #КонецОбласти diff --git a/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl index 983cfa15f..daa4c2495 100644 --- a/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl @@ -151,8 +151,6 @@ КонецПроцедуры -// - // Выполняет проверку актуальности КЭШа механизма регистрации объектов. // Если кэш неактуальный, то выполняется инициализация КЭШа актуальными значениями. // @@ -214,8 +212,6 @@ КонецПроцедуры -// - // Фиксирует успешное выполнение обмена данными в системе. // Процедура ЗафиксироватьВыполнениеВыгрузкиДанныхВРежимеДлительнойОперации(Знач УзелИнформационнойБазы, Знач ДатаНачала) Экспорт @@ -348,21 +344,6 @@ КонецФункции -// Получает код предопределенного узла плана обмена. -// -// Параметры: -// ИмяПланаОбмена - Строка - имя плана обмена как оно задано в конфигураторе. -// -// Возвращаемое значение: -// Строка - код предопределенного узла плана обмена. -// -Функция ПолучитьКодЭтогоУзлаДляПланаОбмена(ИмяПланаОбмена) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Возврат ОбменДаннымиПовтИсп.ПолучитьКодЭтогоУзлаДляПланаОбмена(ИмяПланаОбмена); -КонецФункции - // Возвращает массив всех ссылочных типов, определенных в конфигурации. // Функция ВсеСсылочныеТипыКонфигурации() Экспорт @@ -371,44 +352,6 @@ КонецФункции -// Получает состояние длительной операции (фонового задания), выполняемой в базе-корреспонденте. -// -Функция СостояниеДлительнойОперации(Знач ИдентификаторОперации, - Знач URLВебСервиса, - Знач ИмяПользователя, - Знач Пароль, - СтрокаСообщенияОбОшибке = "") Экспорт - - Попытка - - ПараметрыПодключения = ОбменДаннымиСервер.СтруктураПараметровWS(); - ПараметрыПодключения.WSURLВебСервиса = URLВебСервиса; - ПараметрыПодключения.WSИмяПользователя = ИмяПользователя; - ПараметрыПодключения.WSПароль = Пароль; - - WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси(ПараметрыПодключения, СтрокаСообщенияОбОшибке); - - Если WSПрокси = Неопределено Тогда - ВызватьИсключение СтрокаСообщенияОбОшибке; - КонецЕсли; - - Результат = WSПрокси.GetContinuousOperationStatus(ИдентификаторОперации, СтрокаСообщенияОбОшибке); - - Исключение - Результат = "Failed"; - СтрокаСообщенияОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - + ?(ЗначениеЗаполнено(СтрокаСообщенияОбОшибке), Символы.ПС + СтрокаСообщенияОбОшибке, ""); - КонецПопытки; - - Если Результат = "Failed" Тогда - СтрокаСообщения = НСтр("ru = 'Ошибка в базе-корреспонденте: %1'"); - СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, СтрокаСообщенияОбОшибке); - КонецЕсли; - - Возврат Результат; - -КонецФункции - // Получает состояние длительной операции (фонового задания), выполняемой в базе-корреспонденте для узла информационной // базы. // @@ -420,7 +363,8 @@ Попытка УстановитьПривилегированныйРежим(Истина); - ПараметрыПодключения = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспортаWS(УзелИнформационнойБазы, ПараметрыАутентификации); + ПараметрыПодключения = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспортаWS( + УзелИнформационнойБазы, ПараметрыАутентификации); WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси(ПараметрыПодключения, СтрокаСообщенияОбОшибке); @@ -445,44 +389,6 @@ КонецФункции -// Получает сообщение обмена из базы-корреспондента через веб-сервис. -// Сохраняет полученное сообщение обмена во временный каталог. -// -Функция ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондентаЧерезВебСервис( - Отказ, - УзелИнформационнойБазы, - ИдентификаторФайла, - ДлительнаяОперация, - ИдентификаторОперации, - Знач ПараметрыАутентификации = Неопределено) Экспорт - - Возврат ОбменДаннымиСервер.ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондентаЧерезВебСервис( - Отказ, - УзелИнформационнойБазы, - ИдентификаторФайла, - ДлительнаяОперация, - ИдентификаторОперации, - ПараметрыАутентификации); -КонецФункции - -// Получает сообщение обмена из базы-корреспондента через веб-сервис. -// Сохраняет полученное сообщение обмена во временный каталог. -// Используется в том случае, если получение сообщения обмена выполнялось в контексте фонового задания в -// базе-корреспонденте. -// -Функция ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондентаЧерезВебСервисЗавершениеДлительнойОперации( - Отказ, - УзелИнформационнойБазы, - ИдентификаторФайла, - Знач ПараметрыАутентификации = Неопределено) Экспорт - - Возврат ОбменДаннымиСервер.ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондентаЧерезВебСервисЗавершениеДлительнойОперации( - Отказ, - УзелИнформационнойБазы, - ИдентификаторФайла, - ПараметрыАутентификации); -КонецФункции - // Возвращает признак изменения конфигурации для подчиненного узла распределенной ИБ. // Функция ТребуетсяУстановкаОбновления() Экспорт @@ -663,7 +569,7 @@ УстановитьПривилегированныйРежим(Истина); - Возврат ОбменДаннымиПовтИсп.УзлыПланаОбмена(ИмяПланаОбмена); + Возврат ОбменДаннымиСервер.УзлыПланаОбмена(ИмяПланаОбмена); КонецФункции @@ -863,4 +769,4 @@ КонецФункции -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl index f4c8f67f2..af0cb1460 100644 --- a/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl @@ -84,38 +84,20 @@ // Открывает форму помощника настройки обмена данными для заданного плана обмена. // // Параметры: -// ИмяПланаОбмена - Строка - имя плана обмена, как объекта метаданных, для которого необходимо открыть помощник. -// НастройкаОбменаССервисом - Булево - Признак того, что настраивается обмен с приложением в модели сервиса. +// ИмяПланаОбмена - Строка - имя плана обмена, как объекта метаданных, +// для которого необходимо открыть помощник. +// ИдентификаторНастройки - Строка - идентификатор варианта настройки обмена данными. // -Процедура ОткрытьПомощникНастройкиОбменаДанными(Знач ИмяПланаОбмена, НастройкаОбменаССервисом = Ложь) Экспорт +Процедура ОткрытьПомощникНастройкиОбменаДанными(Знач ИмяПланаОбмена, Знач ИдентификаторНастройки) Экспорт - ДополнительнаяНастройка = ""; + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ИмяПланаОбмена", ИмяПланаОбмена); + ПараметрыФормы.Вставить("ИдентификаторНастройки", ИдентификаторНастройки); - Если СтрНайти(ИмяПланаОбмена, "КорреспондентВМоделиСервиса") > 0 Тогда - - ИмяПланаОбмена = СтрЗаменить(ИмяПланаОбмена, "КорреспондентВМоделиСервиса", ""); - - НастройкаОбменаССервисом = Истина; - - КонецЕсли; + КлючФормы = ИмяПланаОбмена + "_" + ИдентификаторНастройки; - Если СтрНайти(ИмяПланаОбмена, "ИдентификаторНастройки") > 0 Тогда - - ЧислоСимволовИмяПланаОбмена = СтрНайти(ИмяПланаОбмена, "ИдентификаторНастройки") - 1; - - ДополнительнаяНастройка = Прав(ИмяПланаОбмена, СтрДлина(ИмяПланаОбмена) - ЧислоСимволовИмяПланаОбмена - 22); - ИмяПланаОбмена = Лев(ИмяПланаОбмена, ЧислоСимволовИмяПланаОбмена); - - КонецЕсли; - - ПараметрыФормы = Новый Структура("ИмяПланаОбмена", ИмяПланаОбмена); - ПараметрыФормы.Вставить("ДополнительнаяНастройка", ДополнительнаяНастройка); - - Если НастройкаОбменаССервисом Тогда - ПараметрыФормы.Вставить("НастройкаОбменаССервисом"); - КонецЕсли; - - ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.Форма", ПараметрыФормы, , ИмяПланаОбмена + НастройкаОбменаССервисом, , , , РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.НастройкаПодключения", ПараметрыФормы, , + КлючФормы, , , , РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); КонецПроцедуры @@ -291,19 +273,10 @@ |с помощью параметра запуска конфигуратора /ResetMasterNode.'"); ПоказатьПредупреждение(, ТекстПредупреждения); Иначе + ПараметрыПомощника = Новый Структура; + ПараметрыПомощника.Вставить("УзелОбмена", УзелИнформационнойБазы); - ТекстВопроса = НСтр("ru = 'Удалить настройку синхронизации данных?'"); - - // В режиме сервиса с помощью этой процедуры выполняется удаление настройки обмена с локальной версией. - // В этом случае вместо "Удалить настройку" используем оборот "Отключить синхронизацию". - ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗапуске(); - Если ПараметрыРаботыКлиента.РазделениеВключено Тогда - ТекстВопроса = НСтр("ru = 'Отключить синхронизацию с %1?'"); - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, Строка(УзелИнформационнойБазы)); - КонецЕсли; - - ОписаниеОповещения = Новый ОписаниеОповещения("УдалитьНастройкуСинхронизацииЗавершение", ЭтотОбъект, УзелИнформационнойБазы); - ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Да); + ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.УдалениеНастройкиСинхронизации", ПараметрыПомощника); КонецЕсли; КонецПроцедуры @@ -370,8 +343,13 @@ КонецЕсли; КонецЦикла; - ПараметрыФормы = Новый Структура("ИмяПланаОбмена, ЭтоПродолжениеНастройкиВПодчиненномУзлеРИБ", ПараметрыРаботыКлиента.ИмяПланаОбменаРИБ, Истина); - ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.Форма", ПараметрыФормы, , , , , , РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс); + ПараметрыПомощника = Новый Структура; + ПараметрыПомощника.Вставить("ИмяПланаОбмена", ПараметрыРаботыКлиента.ИмяПланаОбменаРИБ); + ПараметрыПомощника.Вставить("ИдентификаторНастройки", ПараметрыРаботыКлиента.ИдентификаторНастройкиУзлаРИБ); + ПараметрыПомощника.Вставить("НастройкаНовойСинхронизации"); + ПараметрыПомощника.Вставить("ПродолжениеНастройкиВПодчиненномУзлеРИБ"); + + ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.НастройкаСинхронизации", ПараметрыПомощника); КонецЕсли; КонецПроцедуры @@ -503,7 +481,13 @@ Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда МодульПолучениеФайловИзИнтернетаКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПолучениеФайловИзИнтернетаКлиент"); - МодульПолучениеФайловИзИнтернетаКлиент.ОткрытьФормуПараметровПроксиСервера(); + + ПараметрыФормы = Неопределено; + Если ОбщегоНазначенияКлиент.ИнформационнаяБазаФайловая() Тогда + ПараметрыФормы = Новый Структура("НастройкаПроксиНаКлиенте", Истина); + КонецЕсли; + + МодульПолучениеФайловИзИнтернетаКлиент.ОткрытьФормуПараметровПроксиСервера(ПараметрыФормы); КонецЕсли; КонецПроцедуры @@ -516,7 +500,7 @@ Процедура ИнтерактивнаяОбработкаПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском(Параметры, Контекст) Экспорт Форма = ОткрытьФорму( - "РегистрСведений.НастройкиТранспортаОбмена.Форма.ПовторнаяСинхронизацияДанныхПередЗапуском", , , , , , + "РегистрСведений.НастройкиТранспортаОбменаДанными.Форма.ПовторнаяСинхронизацияДанныхПередЗапуском", , , , , , Новый ОписаниеОповещения( "ПослеЗакрытияФормыПовторнаяСинхронизацияДанныхПередЗапуском", ЭтотОбъект, Параметры)); @@ -716,197 +700,6 @@ КонецПроцедуры -// Передает файлы на сервер, запрашивая установку расширения для работы с файлами. -// -// Параметры: -// ОповещениеЗавершения - ОписаниеОповещения - Экспортная процедура, которая будет вызвана следующими параметрами: -// Результат - Массив - Содержит структуры с полями Имя, Хранение, -// ОписаниеОшибки для каждого файла. -// ДополнительныеПараметры - Неопределено. -// -// ИменаФайлов - Массив - Массив имен файлов для передачи. -// ИдентификаторФормы - УникальныйИдентификатор - Параметр для хранилища. -// ТекстПредупреждения - Строка - Текст предупреждения о необходимости установки расширения для -// работы с файлами. -// -Процедура ПередатьФайлыНаСервер(ОповещениеЗавершения, Знач ИменаФайлов, Знач ИдентификаторФормы = Неопределено, Знач ТекстПредупреждения = Неопределено) Экспорт - - ДанныеФайлов = Новый Массив; - ЕстьПустые = Ложь; - - Для Каждого ИмяФайла Из ИменаФайлов Цикл - ОписаниеФайла = Новый Структура("Имя, Хранение, ОписаниеОшибки", ИмяФайла); - Если ПустаяСтрока(ИмяФайла) Тогда - ЕстьПустые = Истина; - ОписаниеФайла.ОписаниеОшибки = НСтр("ru = 'Файл не выбран.'"); - КонецЕсли; - ДанныеФайлов.Добавить(ОписаниеФайла); - КонецЦикла; - - Если ЕстьПустые Тогда - ВыполнитьОбработкуОповещения(ОповещениеЗавершения, ДанныеФайлов); - Возврат; - КонецЕсли; - - Оповещение= Новый ОписаниеОповещения("ПередатьФайлНаСерверЗавершениеПодключенияРасширения", ЭтотОбъект, Новый Структура); - Оповещение.ДополнительныеПараметры.Вставить("Оповещение", ОповещениеЗавершения); - Оповещение.ДополнительныеПараметры.Вставить("ДанныеФайлов", ДанныеФайлов); - Оповещение.ДополнительныеПараметры.Вставить("ИдентификаторФормы", ИдентификаторФормы); - - Если ТекстПредупреждения = Неопределено Тогда - Если ИменаФайлов.Количество() = 1 Тогда - ТекстПредупреждения = НСтр("ru = 'Для передачи файла на сервер необходимо установить расширение для веб-клиента 1С:Предприятие.'"); - Иначе - ТекстПредупреждения = НСтр("ru = 'Для передачи файлов на сервер необходимо установить расширение для веб-клиента 1С:Предприятие.'"); - КонецЕсли; - КонецЕсли; - - ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение, ТекстПредупреждения, Ложь); -КонецПроцедуры - -// Обработчик немодального завершения передачи файлов на сервер. -// -Процедура ПередатьФайлНаСерверЗавершениеПодключенияРасширения(Знач Результат, Знач ДополнительныеПараметры) Экспорт - Если Не Результат Тогда - Возврат; - КонецЕсли; - // Расширение успешно установлено. - - ПараметрыЗаполненияСпискаДляПередачи = Новый Структура; - ПараметрыЗаполненияСпискаДляПередачи.Вставить("ДанныеФайлов", ДополнительныеПараметры.ДанныеФайлов); - ПараметрыЗаполненияСпискаДляПередачи.Вставить("СписокДляПередачи", Новый Массив); - ПараметрыЗаполненияСпискаДляПередачи.Вставить("БылиОшибки", Ложь); - ПараметрыЗаполненияСпискаДляПередачи.Вставить("НомерПозиции", 0); - ДополнительныеПараметры.Вставить("ПараметрыЗаполненияСпискаДляПередачи", ПараметрыЗаполненияСпискаДляПередачи); - - ПередатьФайлНаСерверЗавершениеПодключенияРасширенияЗаполнитьСписокДляПередачи(ДополнительныеПараметры); - -КонецПроцедуры - -// Продолжение процедуры (см. выше). -// -Процедура ПередатьФайлНаСерверЗавершениеПодключенияРасширенияЗаполнитьСписокДляПередачи(ДополнительныеПараметры) - - ПараметрыЗаполненияСпискаДляПередачи = ДополнительныеПараметры.ПараметрыЗаполненияСпискаДляПередачи; - Путь = ПараметрыЗаполненияСпискаДляПередачи.ДанныеФайлов[ПараметрыЗаполненияСпискаДляПередачи.НомерПозиции].Имя; - Оповещение = Новый ОписаниеОповещения( - "ПередатьФайлНаСерверЗавершениеПодключенияРасширенияПослеИнициализацииФайла", - ЭтотОбъект, - ДополнительныеПараметры); - - ПроверяемыйФайл = Новый Файл(); - ПроверяемыйФайл.НачатьИнициализацию(Оповещение, Путь); - -КонецПроцедуры - -// Продолжение процедуры (см. выше). -// -Процедура ПередатьФайлНаСерверЗавершениеПодключенияРасширенияПослеИнициализацииФайла(Файл, ДополнительныеПараметры) Экспорт - - ДополнительныеПараметры.ПараметрыЗаполненияСпискаДляПередачи.Вставить("Файл", Файл); - Оповещение = Новый ОписаниеОповещения( - "ПередатьФайлНаСерверЗавершениеПодключенияРасширенияПослеПроверкиСуществованияФайла", - ЭтотОбъект, - ДополнительныеПараметры); - - Файл.НачатьПроверкуСуществования(Оповещение); - -КонецПроцедуры - -// Продолжение процедуры (см. выше). -// -Процедура ПередатьФайлНаСерверЗавершениеПодключенияРасширенияПослеПроверкиСуществованияФайла(Существует, ДополнительныеПараметры) Экспорт - - ПараметрыЗаполненияСпискаДляПередачи = ДополнительныеПараметры.ПараметрыЗаполненияСпискаДляПередачи; - Если Не Существует Тогда - ПараметрыЗаполненияСпискаДляПередачи.БылиОшибки = Истина; - Элемент = ПараметрыЗаполненияСпискаДляПередачи.ДанныеФайлов[ПараметрыЗаполненияСпискаДляПередачи.НомерПозиции]; - Элемент.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Файл ""%1"" не существует или к нему нет доступа'"), Элемент.Имя); - - // Переходим к следующему файлу, либо завершаем заполнение списка для передачи. - Если ПараметрыЗаполненияСпискаДляПередачи.НомерПозиции = ПараметрыЗаполненияСпискаДляПередачи.ДанныеФайлов.ВГраница() Тогда - ПередатьФайлНаСерверЗавершениеПодключенияРасширенияДействияПослеЗаполненияСпискаПередачи(ДополнительныеПараметры); - Иначе - ПараметрыЗаполненияСпискаДляПередачи.НомерПозиции = ПараметрыЗаполненияСпискаДляПередачи.НомерПозиции + 1; - ПередатьФайлНаСерверЗавершениеПодключенияРасширенияЗаполнитьСписокДляПередачи(ДополнительныеПараметры); - КонецЕсли; - - Иначе - - Оповещение = Новый ОписаниеОповещения( - "ПередатьФайлНаСерверЗавершениеПодключенияРасширенияПослеПроверкиНаКаталог", - ЭтотОбъект, - ДополнительныеПараметры); - - ДополнительныеПараметры.ПараметрыЗаполненияСпискаДляПередачи.Файл.НачатьПроверкуЭтоКаталог(Оповещение); - КонецЕсли; - -КонецПроцедуры - -// Продолжение процедуры (см. выше). -// -Процедура ПередатьФайлНаСерверЗавершениеПодключенияРасширенияПослеПроверкиНаКаталог(ЭтоКаталог, ДополнительныеПараметры) Экспорт - - ПараметрыЗаполненияСпискаДляПередачи = ДополнительныеПараметры.ПараметрыЗаполненияСпискаДляПередачи; - Элемент = ПараметрыЗаполненияСпискаДляПередачи.ДанныеФайлов[ПараметрыЗаполненияСпискаДляПередачи.НомерПозиции]; - - Если ЭтоКаталог Тогда - ПараметрыЗаполненияСпискаДляПередачи.БылиОшибки = Истина; - Элемент.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Файл ""%1"" не существует или к нему нет доступа'"), Элемент.Имя); - Иначе - ПараметрыЗаполненияСпискаДляПередачи.СписокДляПередачи.Добавить(Новый ОписаниеПередаваемогоФайла(Элемент.Имя)); - КонецЕсли; - - // Переходим к следующему файлу, либо завершаем заполнение списка для передачи. - Если ПараметрыЗаполненияСпискаДляПередачи.НомерПозиции = ПараметрыЗаполненияСпискаДляПередачи.ДанныеФайлов.ВГраница() Тогда - ПередатьФайлНаСерверЗавершениеПодключенияРасширенияДействияПослеЗаполненияСпискаПередачи(ДополнительныеПараметры); - Иначе - ПараметрыЗаполненияСпискаДляПередачи.НомерПозиции = ПараметрыЗаполненияСпискаДляПередачи.НомерПозиции + 1; - ПередатьФайлНаСерверЗавершениеПодключенияРасширенияЗаполнитьСписокДляПередачи(ДополнительныеПараметры); - КонецЕсли; - -КонецПроцедуры - -// Продолжение процедуры (см. выше). -// -Процедура ПередатьФайлНаСерверЗавершениеПодключенияРасширенияДействияПослеЗаполненияСпискаПередачи(ДополнительныеПараметры) - - ПараметрыЗаполненияСпискаДляПередачи = ДополнительныеПараметры.ПараметрыЗаполненияСпискаДляПередачи; - - Если ПараметрыЗаполненияСпискаДляПередачи.БылиОшибки Тогда - - // Оповещаем исходного вызывающего. - ВыполнитьОбработкуОповещения(ДополнительныеПараметры.Оповещение, ДополнительныеПараметры.ДанныеФайлов); - - Иначе - ПомещенныеФайлы = Новый Массив; - - ОписаниеОповещения = Новый ОписаниеОповещения("ПередатьФайлНаСерверЗавершениеПодключенияРасширенияДействияПослеПомещенияФайлов", - ЭтотОбъект, ДополнительныеПараметры); - - НачатьПомещениеФайлов( - ОписаниеОповещения, - ПараметрыЗаполненияСпискаДляПередачи.СписокДляПередачи,, - Ложь, - ДополнительныеПараметры.ИдентификаторФормы); - - КонецЕсли; - -КонецПроцедуры - -// Продолжение процедуры (см. выше). -// -Процедура ПередатьФайлНаСерверЗавершениеПодключенияРасширенияДействияПослеПомещенияФайлов(ПомещенныеФайлы, ДополнительныеПараметры) Экспорт - - Для Индекс = 0 По ПомещенныеФайлы.ВГраница() Цикл - ДополнительныеПараметры.ДанныеФайлов[Индекс].Хранение = ПомещенныеФайлы[Индекс].Хранение; - КонецЦикла; - - // Оповещаем исходного вызывающего. - ВыполнитьОбработкуОповещения(ДополнительныеПараметры.Оповещение, ДополнительныеПараметры.ДанныеФайлов); - -КонецПроцедуры - // Передает файл на сервер интерактивно, без расширения для работы с файлами. // // Параметры: @@ -1061,20 +854,11 @@ Получаемые.Добавить( Новый ОписаниеПередаваемогоФайла(ДополнительныеПараметры.ПолучаемыйФайл.Имя, ДополнительныеПараметры.ПолучаемыйФайл.Хранение) ); - ОписаниеОповещенияПолученияФайлов = Новый ОписаниеОповещения( - "ВыбратьИСохранитьФайлНаКлиентеПослеПолученияФайлов", - ЭтотОбъект, ДополнительныеПараметры); - + ОписаниеОповещенияПолученияФайлов = Новый ОписаниеОповещения; НачатьПолучениеФайлов(ОписаниеОповещенияПолученияФайлов, Получаемые, ДиалогСохранения, Истина); КонецПроцедуры -// Продолжение процедуры (см. выше). -// -Процедура ВыбратьИСохранитьФайлНаКлиентеПослеПолученияФайлов(ПолученныеФайлы, ДополнительныеПараметры) Экспорт - // Обработка не требуется. -КонецПроцедуры - // Добавляет поля в целевую структуру, если их там нет. // // Параметры: @@ -1217,18 +1001,72 @@ // Открывает форму интерактивного выполнения обмена данными для заданного узла плана обмена. // // Параметры: -// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого необходимо открыть форму; -// Владелец - форма-владелец для открываемой формы; +// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого необходимо открыть форму; +// Владелец - форма-владелец для открываемой формы; +// ДополнительныеПараметры - Структура - Произвольная структура, которая будет передана в открываемую форму помощника. +// ОповещениеОЗакрытии - ОписаниеОповещения - Описание оповещения, которое будет вызвано при закрытии формы помощника. // -Процедура ОткрытьПомощникСопоставленияОбъектовОбработкаКоманды(УзелИнформационнойБазы, Владелец) Экспорт +Процедура ОткрытьПомощникСопоставленияОбъектовОбработкаКоманды(УзелИнформационнойБазы, + Владелец, ДополнительныеПараметры = Неопределено, ОповещениеОЗакрытии = Неопределено) Экспорт // Открываем форму помощника сопоставления объектов; // в качестве параметра формы задаем узел информационной базы; ПараметрыФормы = Новый Структура("УзелИнформационнойБазы", УзелИнформационнойБазы); ПараметрыФормы.Вставить("РасширенныйРежимДополненияВыгрузки", Истина); + Если Не ДополнительныеПараметры = Неопределено Тогда + Для Каждого ТекущийПараметр Из ДополнительныеПараметры Цикл + ПараметрыФормы.Вставить(ТекущийПараметр.Ключ, ТекущийПараметр.Значение); + КонецЦикла; + КонецЕсли; + ИмяФормы = "Обработка.ПомощникИнтерактивногоОбменаДанными.Форма"; - ОткрытьФорму(ИмяФормы, ПараметрыФормы, Владелец, УзелИнформационнойБазы, , , ,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + ОткрытьФорму(ИмяФормы, ПараметрыФормы, Владелец, УзелИнформационнойБазы, , , ОповещениеОЗакрытии, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + +КонецПроцедуры + +// Открывает форму результатов выполнения обмена данными для заданного списка узлов планов обмена. +// +// Параметры: +// СписокУзлов - Массив - перечень значений типа ПланОбменаСсылка - узлов планов обмена, +// для которых необходимо открыть форму. +// ПараметрыОткрытия - Структура - дополнительные параметры, передаваемые в процедуру ОткрытьФорму: +// * Владелец - см. описание параметра Владелец процедуры ОткрытьФорму. +// * Уникальность - см. описание параметра Уникальность процедуры ОткрытьФорму. +// * Окно - см. описание параметра Окно процедуры ОткрытьФорму. +// +Процедура ОткрытьРезультатыОбменаДанными(СписокУзлов = Неопределено, ПараметрыОткрытия = Неопределено) Экспорт + + ПараметрыФормы = Неопределено; + Владелец = Неопределено; + Уникальность = Неопределено; + Окно = Неопределено; + + Если Не СписокУзлов = Неопределено Тогда + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("УзлыОбмена", СписокУзлов); + КонецЕсли; + + Если Не ПараметрыОткрытия = Неопределено Тогда + ПараметрыОткрытия.Свойство("Владелец", Владелец); + ПараметрыОткрытия.Свойство("Уникальность", Уникальность); + ПараметрыОткрытия.Свойство("Окно", Окно); + КонецЕсли; + + ОткрытьФорму("РегистрСведений.РезультатыОбменаДанными.Форма.Форма", ПараметрыФормы, + Владелец, Уникальность, Окно); + +КонецПроцедуры + +// Открывает форму настройки новой синхронизации данных. +// +Процедура ОткрытьФормуНастройкиНовойСинхронизацииДанных(ФормаНовойСинхронизацииДанных = "", ДополнительныеПараметры = Неопределено) Экспорт + + Если ПустаяСтрока(ФормаНовойСинхронизацииДанных) Тогда + ФормаНовойСинхронизацииДанных = "Обработка.ПомощникСозданияОбменаДанными.Форма.НоваяСинхронизацияДанных"; + КонецЕсли; + + ОткрытьФорму(ФормаНовойСинхронизацииДанных, ДополнительныеПараметры); КонецПроцедуры @@ -1280,68 +1118,6 @@ ОткрытьФорму("Обработка.РегистрацияИзмененийДляОбменаДанными.Форма", ПараметрыФормы,, УзелИнформационнойБазы); КонецПроцедуры -// Обработчик оповещения -// -Процедура УдалитьНастройкуСинхронизацииЗавершение(Ответ, УзелИнформационнойБазы) Экспорт - - Если Ответ = КодВозвратаДиалога.Да Тогда - - ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПослеУдаленияРазрешений", ЭтотОбъект, УзелИнформационнойБазы); - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда - Запросы = ОбменДаннымиВызовСервера.ЗапросНаОчисткуРазрешенийИспользованияВнешнихРесурсов(УзелИнформационнойБазы); - МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент"); - МодульРаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, Неопределено, ОповещениеОЗакрытии); - Иначе - ВыполнитьОбработкуОповещения(ОповещениеОЗакрытии, КодВозвратаДиалога.ОК); - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -Процедура ПослеУдаленияРазрешений(Результат, УзелИнформационнойБазы)Экспорт - - Если Результат = КодВозвратаДиалога.ОК Тогда - - ОбменДаннымиВызовСервера.УдалитьНастройкуСинхронизации(УзелИнформационнойБазы); - Оповестить("Запись_УзелПланаОбмена"); - ЗакрытьФормы("ФормаУзла"); - - КонецЕсли; - -КонецПроцедуры - -// Закрывает все открытые формы, в имени которых встречается указанная подстрока, -// и у которых не установлен флаг модифицированности. -// -Процедура ЗакрытьФормы(Знач ИмяФормы) - - Окна = ПолучитьОкна(); - - Если Окна <> Неопределено Тогда - - Для Каждого Окно Из Окна Цикл - - Если Не Окно.Основное Тогда - - Форма = Окно.ПолучитьСодержимое(); - - Если ТипЗнч(Форма) = Тип("УправляемаяФорма") - И Не Форма.Модифицированность - И СтрНайти(Форма.ИмяФормы, ИмяФормы) <> 0 Тогда - - Форма.Закрыть(); - - КонецЕсли; - - КонецЕсли; - - КонецЦикла; - - КонецЕсли; - -КонецПроцедуры - // Регистрирует обработчик для открытия новой формы сразу после закрытия текущей. // Процедура ОткрытьФормуПослеЗакрытияТекущей(ТекущаяФорма, Знач ИмяФормы, Знач Параметры = Неопределено, Знач ПараметрыОткрытия = Неопределено) Экспорт @@ -1740,4 +1516,4 @@ Возврат Истина; КонецФункции -#КонецОбласти +#КонецОбласти \ 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 f016bf0dd..000000000 --- a/SSL/src/CommonModules/ОбменДаннымиКлиентСервер/Module.bsl +++ /dev/null @@ -1,84 +0,0 @@ -#Область СлужебныеПроцедурыИФункции - -// Для внутреннего использования. -// -Процедура ПроверитьНедопустимыеСимволыВИмениПользователяWSПрокси(Знач ИмяПользователя) Экспорт - - Если СтрокаСодержитСимвол(ИмяПользователя, НедопустимыеСимволыВИмениПользователяWSПрокси()) Тогда - - СтрокаСообщения = НСтр("ru = 'В имени пользователя %1 содержатся недопустимые символы. - |Имя пользователя не должно содержать символы %2.'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ИмяПользователя, НедопустимыеСимволыВИмениПользователяWSПрокси()); - ВызватьИсключение СтрокаСообщения; - КонецЕсли; - -КонецПроцедуры - -// Для внутреннего использования. -// -Процедура ПроверитьКорректностьФорматаАдресаWSПрокси(Знач АдресWSПрокси) Экспорт - - ЭтоИнтернетАдрес = Ложь; - ДопустимыеПрефиксыWSПрокси = ДопустимыеПрефиксыWSПрокси(); - - Для Каждого Префикс Из ДопустимыеПрефиксыWSПрокси Цикл - Если Лев(НРег(АдресWSПрокси), СтрДлина(Префикс)) = НРег(Префикс) Тогда - ЭтоИнтернетАдрес = Истина; - Прервать; - КонецЕсли; - КонецЦикла; - - Если Не ЭтоИнтернетАдрес Тогда - СтрокаПрефиксов = ""; - Для Каждого Префикс Из ДопустимыеПрефиксыWSПрокси Цикл - СтрокаПрефиксов = СтрокаПрефиксов + ?(ПустаяСтрока(СтрокаПрефиксов), """", " или """) + Префикс + """"; - КонецЦикла; - - СтрокаСообщения = НСтр("ru = 'Неверный формат адреса ""%1"". - |Адрес должен начинаться с префикса Интернет протокола %2 (например: ""http://myserver.com/service"").'"); - - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, АдресWSПрокси, СтрокаПрефиксов); - - ВызватьИсключение СтрокаСообщения; - КонецЕсли; - -КонецПроцедуры - -// Для внутреннего использования. -// -Функция НедопустимыеСимволыВИмениПользователяWSПрокси() Экспорт - - Возврат ":"; - -КонецФункции - -// Для внутреннего использования. -// -Функция ДопустимыеПрефиксыWSПрокси() - - Результат = Новый Массив(); - - Результат.Добавить("http"); - Результат.Добавить("https"); - - Возврат Результат; - -КонецФункции - -// Для внутреннего использования. -// -Функция СтрокаСодержитСимвол(Знач Строка, Знач СтрокаСимволов) - - Для Индекс = 1 По СтрДлина(СтрокаСимволов) Цикл - Символ = Сред(СтрокаСимволов, Индекс, 1); - - Если СтрНайти(Строка, Символ) <> 0 Тогда - Возврат Истина; - КонецЕсли; - КонецЦикла; - - Возврат Ложь; - -КонецФункции - -#КонецОбласти diff --git a/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl index 4a87e7c79..b1b9a3f1c 100644 --- a/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl @@ -134,10 +134,12 @@ Результат = Ложь; Если ПланыОбменаБСП().Найти(ИмяПланаОбмена) <> Неопределено Тогда - Результат = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена,"ПланОбменаИспользуетсяВМоделиСервиса",""); + Результат = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, + "ПланОбменаИспользуетсяВМоделиСервиса", ""); КонецЕсли; Возврат Результат; + КонецФункции // Заполняет перечень кодов возможных ошибок. @@ -340,13 +342,9 @@ // См. ОбменДаннымиСервер.УзелПланаОбменаПоКоду. // Функция УзелПланаОбменаПоКоду(ИмяПланаОбмена, КодУзла) Экспорт - СсылкаУзел = ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду(КодУзла); - Если Не ЗначениеЗаполнено(СсылкаУзел) Тогда - Возврат Неопределено; - КонецЕсли; + Возврат ОбменДаннымиСервер.УзелПланаОбменаПоКоду(ИмяПланаОбмена, КодУзла); - Возврат СсылкаУзел; КонецФункции #КонецОбласти @@ -560,8 +558,6 @@ Возврат Результат; КонецФункции -// - // Получает таблицу реквизитов регистрации объектов для механизма выборочной регистрации объектов. // // Параметры: @@ -614,7 +610,7 @@ // Функция ПолучитьЭтотУзелПланаОбмена(ИмяПланаОбмена) Экспорт - Возврат ПланыОбмена[ИмяПланаОбмена].ЭтотУзел() + Возврат ПланыОбмена[ИмяПланаОбмена].ЭтотУзел(); КонецФункции @@ -649,18 +645,19 @@ // Возвращает признак принадлежности узла к плану обмена стандартного обмена (без правил конвертации). // // Параметры: -// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого требуется получить значение функции. +// ИмяПланаОбмена - Строка - имя плана обмена, для которого требуется получить значение функции. // // Возвращаемое значение: // Истина - узел принадлежит плану обмена стандартного обмена, иначе Ложь. // -Функция ЭтоУзелСтандартногоОбменаДанными(УзелИнформационнойБазы) Экспорт - Если ОбменДаннымиСервер.ЭтоПланОбменаXDTO(УзелИнформационнойБазы) Тогда +Функция ЭтоУзелСтандартногоОбменаДанными(ИмяПланаОбмена) Экспорт + + Если ОбменДаннымиСервер.ЭтоПланОбменаXDTO(ИмяПланаОбмена) Тогда Возврат Ложь; КонецЕсли; - Возврат Не ЭтоУзелРаспределеннойИнформационнойБазы(УзелИнформационнойБазы) - И Не ЕстьМакетПланаОбмена(ПолучитьИмяПланаОбмена(УзелИнформационнойБазы), "ПравилаОбмена"); + Возврат Не ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(ИмяПланаОбмена) + И Не ОбменДаннымиПовтИсп.ЕстьМакетПланаОбмена(ИмяПланаОбмена, "ПравилаОбмена"); КонецФункции @@ -680,7 +677,7 @@ Возврат Не ЭтоУзелРаспределеннойИнформационнойБазы(УзелИнформационнойБазы) И ЕстьМакетПланаОбмена(ПолучитьИмяПланаОбмена(УзелИнформационнойБазы), "ПравилаОбмена"); КонецЕсли; - // + КонецФункции // Возвращает признак принадлежности узла к плану обмена, который использует функционал обмена БСП. @@ -712,10 +709,28 @@ КонецФункции +// Возвращает признак принадлежности узла к плану обмена, используемому для обмена сообщениями. +// +// Параметры: +// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого требуется получить значение функции. +// +// Возвращаемое значение: +// Истина - узел принадлежит плану обмена сообщениями, иначе Ложь. +// +Функция ЭтоУзелОбменаСообщениями(УзелИнформационнойБазы) Экспорт + + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменСообщениями") Тогда + Возврат Ложь; + КонецЕсли; + + Возврат ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы) = "ОбменСообщениями"; + +КонецФункции + // Получает имя плана обмена как объекта метаданного для заданного узла. // // Параметры: -// УзелПланаОбмена - ПланОбменаСсылка, ПланОбменаОбъект - узел плана обмена. +// УзелПланаОбмена - ПланОбменаСсылка - узел плана обмена. // // Возвращаемое значение: // Имя - Строка - имя плана обмена как объекта метаданного. @@ -726,30 +741,6 @@ КонецФункции -// Получает массив всех узлов для заданного плана обмена кроме предопределенного узла. -// -// Параметры: -// ИмяПланаОбмена - Строка - имя плана обмена как оно задано в конфигураторе. -// -// Возвращаемое значение: -// МассивУзлов - Массив - массив всех узлов для заданного плана обмена кроме предопределенного узла. -// -Функция УзлыПланаОбмена(ИмяПланаОбмена) Экспорт - - ТекстЗапроса = " - |ВЫБРАТЬ - | ПланОбмена.Ссылка - |ИЗ ПланОбмена." + ИмяПланаОбмена + " КАК ПланОбмена - |ГДЕ - | НЕ ПланОбмена.ЭтотУзел"; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - - Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); - -КонецФункции - // Получает список макетов типовых правил обмена из конфигурации для заданного плана обмена; // список заполняется именами и синонимами макетов правил. // @@ -805,6 +796,7 @@ КонецЦикла; Возврат СписокПлановОбмена; + КонецФункции // Получает массив имен разделенных планов обмена конфигурации, которые используют функционал БСП. @@ -864,9 +856,7 @@ ТаблицыОбщие = Новый Массив; ТаблицыЭтойБазы = Новый Массив; - ТаблицыКорреспондента = Новый Массив; ВсеТаблицыЭтойБазы = Новый Массив; - ВсеТаблицыКорреспондента = Новый Массив; ОбщиеДанныеУзлов = ОбменДаннымиСервер.ОбщиеДанныеУзлов(ИмяПланаОбмена, ВерсияКорреспондента, ИдентификаторНастройки); @@ -886,7 +876,7 @@ КонецЕсли; - НастройкиЭтойБазы = ОбменДаннымиСервер.НастройкаОтборовНаУзле(ИмяПланаОбмена, ВерсияКорреспондента,, ИдентификаторНастройки); + НастройкиЭтойБазы = ОбменДаннымиСервер.НастройкаОтборовНаУзле(ИмяПланаОбмена, ВерсияКорреспондента, ИдентификаторНастройки); НастройкиЭтойБазы = ОбменДаннымиСобытия.КлючиСтруктурыВСтроку(НастройкиЭтойБазы); @@ -894,12 +884,12 @@ Для Каждого ТабличнаяЧасть Из ТабличныеЧасти Цикл + ВсеТаблицыЭтойБазы.Добавить(ТабличнаяЧасть); + Если СтрНайти(НастройкиЭтойБазы, ТабличнаяЧасть) <> 0 Тогда ТаблицыЭтойБазы.Добавить(ТабличнаяЧасть); - ВсеТаблицыЭтойБазы.Добавить(ТабличнаяЧасть); - КонецЕсли; КонецЦикла; @@ -908,10 +898,10 @@ Для Каждого ТабличнаяЧасть Из ТабличныеЧасти Цикл + ВсеТаблицыЭтойБазы.Добавить(ТабличнаяЧасть); + Если СтрНайти(НастройкиЭтойБазы, ТабличнаяЧасть) <> 0 Тогда - ВсеТаблицыЭтойБазы.Добавить(ТабличнаяЧасть); - Если СтрНайти(ОбщиеДанныеУзлов, ТабличнаяЧасть) = 0 Тогда ТаблицыЭтойБазы.Добавить(ТабличнаяЧасть); @@ -924,50 +914,13 @@ КонецЕсли; - НастройкиКорреспондента = ОбменДаннымиСервер.НастройкаОтборовНаУзлеБазыКорреспондента(ИмяПланаОбмена, ВерсияКорреспондента,, ИдентификаторНастройки); - - Если ПустаяСтрока(ОбщиеДанныеУзлов) Тогда - - Для Каждого НастройкаКорреспондента Из НастройкиКорреспондента Цикл - - Если ТипЗнч(НастройкаКорреспондента.Значение) = Тип("Структура") Тогда - - ТаблицыКорреспондента.Добавить(НастройкаКорреспондента.Ключ); - - ВсеТаблицыКорреспондента.Добавить(НастройкаКорреспондента.Ключ); - - КонецЕсли; - - КонецЦикла; - - Иначе - - Для Каждого НастройкаКорреспондента Из НастройкиКорреспондента Цикл - - Если ТипЗнч(НастройкаКорреспондента.Значение) = Тип("Структура") Тогда - - ВсеТаблицыКорреспондента.Добавить(НастройкаКорреспондента.Ключ); - - Если СтрНайти(ОбщиеДанныеУзлов, НастройкаКорреспондента.Ключ) = 0 Тогда - - ТаблицыКорреспондента.Добавить(НастройкаКорреспондента.Ключ); - - КонецЕсли; - - КонецЕсли; - - КонецЦикла; - - КонецЕсли; - Результат = Новый Структура; Результат.Вставить("ТаблицыОбщие", ТаблицыОбщие); Результат.Вставить("ТаблицыЭтойБазы", ТаблицыЭтойБазы); - Результат.Вставить("ТаблицыКорреспондента", ТаблицыКорреспондента); Результат.Вставить("ВсеТаблицыЭтойБазы", ВсеТаблицыЭтойБазы); - Результат.Вставить("ВсеТаблицыКорреспондента", ВсеТаблицыКорреспондента); Возврат Результат; + КонецФункции // Получает менеджер плана обмена по имени плана обмена. @@ -1046,56 +999,67 @@ // // Параметры: // УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого требуется получить значение функции. -// ВариантНастройки - Строка - идентификатор варианта настройки обмена. +// ВариантНастройки - Строка - идентификатор варианта настройки синхронизации данных. // // Возвращаемое значение: // Массив - Используемые транспорты сообщений обмена для узла. // Функция ИспользуемыеТранспортыСообщенийОбмена(УзелИнформационнойБазы, Знач ВариантНастройки = "") Экспорт - ИмяПланаОбмена = ПолучитьИмяПланаОбмена(УзелИнформационнойБазы); + + ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы); Если Не УзелИнформационнойБазы.Пустая() Тогда ВариантНастройки = ОбменДаннымиСервер.СохраненныйВариантНастройкиУзлаПланаОбмена(УзелИнформационнойБазы); КонецЕсли; - ОписаниеВариантаНастройки = ОбменДаннымиПовтИсп.ОписаниеВариантаНастройки( - ИмяПланаОбмена, ВариантНастройки, "", ""); + ОписаниеВариантаНастройки = ОбменДаннымиПовтИсп.ОписаниеВариантаНастройки(ИмяПланаОбмена, + ВариантНастройки, "", ""); Результат = ОписаниеВариантаНастройки.ИспользуемыеТранспортыСообщенийОбмена; + Если Результат.Количество() = 0 Тогда Результат = ОбменДаннымиСервер.ВсеТранспортыСообщенийОбменаКонфигурации(); КонецЕсли; - // Для базовых версий конфигураций обмен через COM-соединение не поддерживаем. - Если СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() Тогда - ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Результат, Перечисления.ВидыТранспортаСообщенийОбмена.COM); + + // Обмен через COM-соединение не поддерживается: + // - для базовых версий конфигураций; + // - для РИБ; + // - для стандартного обмена (без использования правил конвертации); + // - если сервер 1С запущен на ОС Linux. + // + Если СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() + Или ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(ИмяПланаОбмена) + Или ОбменДаннымиПовтИсп.ЭтоУзелСтандартногоОбменаДанными(ИмяПланаОбмена) + Или ОбщегоНазначения.ЭтоLinuxСервер() Тогда + + ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Результат, + Перечисления.ВидыТранспортаСообщенийОбмена.COM); + КонецЕсли; + + // Обмен через WS-соединение не поддерживается: + // - для РИБ, не являющихся АРМ. + // + Если ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(ИмяПланаОбмена) + И Не ОбменДаннымиПовтИсп.ЭтоУзелАвтономногоРабочегоМеста(УзелИнформационнойБазы) Тогда - // Для обмена в РИБ обмен через COM-соединение не поддерживаем. - Если ЭтоУзелРаспределеннойИнформационнойБазы(УзелИнформационнойБазы) Тогда - - ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Результат, Перечисления.ВидыТранспортаСообщенийОбмена.COM); - - Если Не ЭтоУзелАвтономногоРабочегоМеста(УзелИнформационнойБазы) Тогда - ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Результат, Перечисления.ВидыТранспортаСообщенийОбмена.WS); - КонецЕсли; + ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Результат, + Перечисления.ВидыТранспортаСообщенийОбмена.WS); КонецЕсли; - // Для Стандартного обмена (без использования правил конвертации) обмен через COM-соединение не поддерживаем. - Если ЭтоУзелСтандартногоОбменаДанными(УзелИнформационнойБазы) Тогда + // Обмен через WS-соединение в пассивном режиме не поддерживается: + // - для обменов, не являющихся обменом через XDTO. + // + Если Не ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ИмяПланаОбмена) Тогда - ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Результат, Перечисления.ВидыТранспортаСообщенийОбмена.COM); - - КонецЕсли; - - // Если сервер 1С запущен на ОС Linux, то обмен через COM-соединение не поддерживается. - Если ОбщегоНазначения.ЭтоLinuxСервер() Тогда - - ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Результат, Перечисления.ВидыТранспортаСообщенийОбмена.COM); + ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Результат, + Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим); КонецЕсли; Возврат Результат; + КонецФункции // Устанавливает внешнее соединение с информационной базой и возвращает указатель на это соединение. @@ -1132,7 +1096,7 @@ Функция ВнешнееСоединениеДляУзлаИнформационнойБазы(УзелИнформационнойБазы) Экспорт Возврат ОбменДаннымиСервер.УстановитьВнешнееСоединениеСБазой( - РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспорта( + РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспорта( УзелИнформационнойБазы, Перечисления.ВидыТранспортаСообщенийОбмена.COM)); КонецФункции @@ -1194,7 +1158,12 @@ Если ТипЗнч(Корреспондент) = Тип("Структура") Тогда СтруктураНастроек = Корреспондент; Иначе - СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспортаWS(Корреспондент); + Если ОбменДаннымиПовтИсп.ЭтоУзелОбменаСообщениями(Корреспондент) Тогда + МодульНастройкиТранспортаОбменаСообщениями = РегистрыСведений["НастройкиТранспортаОбменаСообщениями"]; + СтруктураНастроек = МодульНастройкиТранспортаОбменаСообщениями.НастройкиТранспортаWS(Корреспондент); + Иначе + СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспортаWS(Корреспондент); + КонецЕсли; КонецЕсли; ПараметрыПодключения = Новый Структура; @@ -1203,6 +1172,7 @@ ПараметрыПодключения.Вставить("Password", СтруктураНастроек.WSПароль); Возврат ОбщегоНазначения.ПолучитьВерсииИнтерфейса(ПараметрыПодключения, "ОбменДанными"); + КонецФункции // Возвращает массив всех ссылочных типов, определенных в конфигурации. @@ -1564,35 +1534,4 @@ КонецФункции -// Устарела. Следует использовать новую (см. ОбменДаннымиПовтИсп.УзелПланаОбменаПоКоду). -// -Функция НайтиУзелПланаОбменаПоКоду(ИмяПланаОбмена, КодУзла) Экспорт - ТекстЗапроса = - "ВЫБРАТЬ - | ПланОбмена.Ссылка КАК Ссылка - |ИЗ - | ПланОбмена.[ИмяПланаОбмена] КАК ПланОбмена - |ГДЕ - | ПланОбмена.Код = &Код"; - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяПланаОбмена]", ИмяПланаОбмена); - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Код", КодУзла); - Запрос.Текст = ТекстЗапроса; - - РезультатЗапроса = Запрос.Выполнить(); - - Если РезультатЗапроса.Пустой() Тогда - - Возврат Неопределено; - - КонецЕсли; - - Выборка = РезультатЗапроса.Выбрать(); - Выборка.Следующий(); - - Возврат Выборка.Ссылка; -КонецФункции - -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl index 7098a93fe..aaf75234f 100644 --- a/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl @@ -73,57 +73,22 @@ КонецПроцедуры -// Процедура-обработчик события "ПриСозданииНаСервере" для формы настройки узлов плана обмена. +// Процедура-обработчик события "ПриЗаписиНаСервере" для формы узла плана обмена. // // Параметры: -// Форма - УправляемаяФорма - форма, из которой вызвана процедура. -// Отказ - Булево - признак отказа от создания формы. Если установить в Истина, то форма создана не будет. -// -Процедура ФормаНастройкиУзловПриСозданииНаСервере(Форма, Отказ) Экспорт +// ТекущийОбъект - ПланОбменаОбъект - записываемый узел плана обмена. +// Отказ - Булево - входящий, признак отказа от записи узла обмена. +// Если установлен в Истина, то для узла не будет +// зафиксировано завершение настройки синхронизации. +// +Процедура ФормаУзлаПриЗаписиНаСервере(ТекущийОбъект, Отказ) Экспорт - Параметры = Форма.Параметры; - - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Если Отказ Тогда Возврат; КонецЕсли; - ИдентификаторНастройки = ""; - - Если Форма.Параметры.Свойство("ИдентификаторНастройки") Тогда - ИдентификаторНастройки = Форма.Параметры.ИдентификаторНастройки; - КонецЕсли; - - УстановитьОбязательныеРеквизитыФормы(Форма, ОбязательныеРеквизитыФормыНастройкиУзлов()); - - Форма.ВерсияКорреспондента = Параметры.ВерсияКорреспондента; - - Контекст = Новый Структура; - - Если Параметры.Свойство("ПолучитьЗначенияПоУмолчанию") Тогда - - ИмяПланаОбмена = СтрРазделить(Форма.ИмяФормы, ".")[1]; - НастройкаОтборовНаУзле = НастройкаОтборовНаУзле(ИмяПланаОбмена, Параметры.ВерсияКорреспондента,, - ИдентификаторНастройки); - НастройкаОтборовНаУзлеБазыКорреспондента = НастройкаОтборовНаУзлеБазыКорреспондента(ИмяПланаОбмена, - Параметры.ВерсияКорреспондента,, ИдентификаторНастройки); - ИзменитьСтруктуруХраненияТабличныхЧастей(НастройкаОтборовНаУзлеБазыКорреспондента); - - Иначе - - НастройкаОтборовНаУзле = Форма.Параметры.Настройки.НастройкаОтборовНаУзле; - НастройкаОтборовНаУзлеБазыКорреспондента = Форма.Параметры.Настройки.НастройкаОтборовНаУзлеБазыКорреспондента; - - КонецЕсли; - - Контекст.Вставить("НастройкаОтборовНаУзле", НастройкаОтборовНаУзле); - Контекст.Вставить("НастройкаОтборовНаУзлеБазыКорреспондента", НастройкаОтборовНаУзлеБазыКорреспондента); - - Форма.Контекст = Контекст; - - ЗаполнитьДанныеФормы(Форма); - - Если Не Параметры.Свойство("ПроверкаЗаполнения") И Не Параметры.Свойство("ПолучитьЗначенияПоУмолчанию") Тогда - ВыполнитьСравнениеИОбъединениеТаблицФормы(Форма, Отказ); + Если Не НастройкаСинхронизацииЗавершена(ТекущийОбъект.Ссылка) Тогда + ЗавершитьНастройкуСинхронизацииДанных(ТекущийОбъект.Ссылка); КонецЕсли; КонецПроцедуры @@ -149,173 +114,12 @@ ПроверитьОбязательныеРеквизитыФормы(Форма, "НастройкаОтборовНаУзле, ВерсияКорреспондента"); Форма.ВерсияКорреспондента = Форма.Параметры.ВерсияКорреспондента; - Форма.НастройкаОтборовНаУзле = НастройкаОтборовНаУзле(ИмяПланаОбмена, Форма.ВерсияКорреспондента, ,ИдентификаторНастройки); + Форма.НастройкаОтборовНаУзле = НастройкаОтборовНаУзле(ИмяПланаОбмена, Форма.ВерсияКорреспондента, ИдентификаторНастройки); ФормаНастройкиУзлаОбработчикПриСозданииНаСервере(Форма, "НастройкаОтборовНаУзле"); КонецПроцедуры -// Процедура-обработчик события "ПриСозданииНаСервере" для формы настройки узла базы корреспондента. -// -// Параметры: -// Форма - УправляемаяФорма - форма базы корреспондента. -// ИмяПланаОбмена - Строка - имя плана обмена, для которого создана форма. -// Данные - Соответствие - содержит список таблиц базы данных для задания правил синхронизации данных. -// -Процедура ФормаНастройкиУзлаБазыКорреспондентаПриСозданииНаСервере(Форма, ИмяПланаОбмена, Данные = Неопределено) Экспорт - - Если Форма.Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. - Возврат; - КонецЕсли; - - ИдентификаторНастройки = ""; - - Если Форма.Параметры.Свойство("ИдентификаторНастройки") Тогда - ИдентификаторНастройки = Форма.Параметры.ИдентификаторНастройки; - КонецЕсли; - - ПроверитьОбязательныеРеквизитыФормы(Форма, "ВерсияКорреспондента, НастройкаОтборовНаУзле, ПараметрыВнешнегоСоединения"); - - Форма.ВерсияКорреспондента = Форма.Параметры.ВерсияКорреспондента; - Форма.ПараметрыВнешнегоСоединения = Форма.Параметры.ПараметрыВнешнегоСоединения; - Форма.НастройкаОтборовНаУзле = НастройкаОтборовНаУзлеБазыКорреспондента(ИмяПланаОбмена, Форма.ВерсияКорреспондента,, - ИдентификаторНастройки); - - ФормаНастройкиУзлаОбработчикПриСозданииНаСервере(Форма, "НастройкаОтборовНаУзле"); - - Если Данные <> Неопределено И ТипЗнч(Данные) = Тип("Соответствие") Тогда - - Подключение = ВнешнееСоединениеСБазой(Форма.ПараметрыВнешнегоСоединения); - СтрокаСообщенияОбОшибке = Подключение.ПодробноеОписаниеОшибки; - ВнешнееСоединение = Подключение.Соединение; - - Если ВнешнееСоединение = Неопределено Тогда - ВызватьИсключение СтрокаСообщенияОбОшибке; - КонецЕсли; - - Для Каждого Таблица Из Данные Цикл - - Если Форма.ПараметрыВнешнегоСоединения.ВерсияКорреспондента_2_1_1_7 - ИЛИ Форма.ПараметрыВнешнегоСоединения.ВерсияКорреспондента_2_0_1_6 Тогда - - ТаблицаБазыКорреспондента = ОбщегоНазначения.ЗначениеИзСтрокиXML(ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПолучитьОбъектыТаблицы_2_0_1_6(Таблица.Ключ)); - - Иначе - - ТаблицаБазыКорреспондента = ЗначениеИзСтрокиВнутр(ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПолучитьОбъектыТаблицы(Таблица.Ключ)); - - КонецЕсли; - - Данные.Вставить(Таблица.Ключ, ТаблицаЗначенийИзДереваЗначений(ТаблицаБазыКорреспондента)); - - КонецЦикла; - - КонецЕсли; - -КонецПроцедуры - -// Процедура-обработчик события "ПриСозданииНаСервере" для формы настройки значений по умолчанию. -// -// Параметры: -// Форма - УправляемаяФорма - форма, из которой вызвана процедура. -// ИмяПланаОбмена - Строка - имя плана обмена, для которого создана форма. -// -Процедура ФормаНастройкиЗначенийПоУмолчаниюПриСозданииНаСервере(Форма, ИмяПланаОбмена) Экспорт - - Если Форма.Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. - Возврат; - КонецЕсли; - - ИдентификаторНастройки = ""; - - Если Форма.Параметры.Свойство("ИдентификаторНастройки") Тогда - ИдентификаторНастройки = Форма.Параметры.ИдентификаторНастройки; - КонецЕсли; - - ПроверитьОбязательныеРеквизитыФормы(Форма, "ЗначенияПоУмолчаниюНаУзле, ВерсияКорреспондента"); - - Форма.ВерсияКорреспондента = Форма.Параметры.ВерсияКорреспондента; - Форма.ЗначенияПоУмолчаниюНаУзле = ЗначенияПоУмолчаниюНаУзле(ИмяПланаОбмена, Форма.ВерсияКорреспондента,, - ИдентификаторНастройки); - - ФормаНастройкиУзлаОбработчикПриСозданииНаСервере(Форма, "ЗначенияПоУмолчаниюНаУзле"); - -КонецПроцедуры - -// Процедура-обработчик события "ПриСозданииНаСервере" для формы настройки значений по умолчанию, -// через внешнее соединение для базы корреспондента. -// -// Параметры: -// Форма - УправляемаяФорма - форма, из которой вызвана процедура. -// ИмяПланаОбмена - Строка - имя плана обмена, для которого создана форма. -// ДополнительныеДанные - Произвольный - для получения дополнительных данных. -// -Процедура ФормаНастройкиЗначенийПоУмолчаниюБазыКорреспондентаПриСозданииНаСервере(Форма, ИмяПланаОбмена, ДополнительныеДанные = Неопределено) Экспорт - - Если Форма.Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. - Возврат; - КонецЕсли; - - ИдентификаторНастройки = ""; - - Если Форма.Параметры.Свойство("ИдентификаторНастройки") Тогда - ИдентификаторНастройки = Форма.Параметры.ИдентификаторНастройки; - КонецЕсли; - - ПроверитьОбязательныеРеквизитыФормы(Форма, "ВерсияКорреспондента, ЗначенияПоУмолчаниюНаУзле, ПараметрыВнешнегоСоединения"); - - Форма.ВерсияКорреспондента = Форма.Параметры.ВерсияКорреспондента; - Форма.ПараметрыВнешнегоСоединения = Форма.Параметры.ПараметрыВнешнегоСоединения; - Форма.ЗначенияПоУмолчаниюНаУзле = ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента(ИмяПланаОбмена, Форма.ВерсияКорреспондента,, - ИдентификаторНастройки); - - ФормаНастройкиУзлаОбработчикПриСозданииНаСервере(Форма, "ЗначенияПоУмолчаниюНаУзле"); - - Если Форма.ПараметрыВнешнегоСоединения.ТипСоединения = "ВременноеХранилище" Тогда - - ДополнительныеДанные = ПолучитьИзВременногоХранилища( - Форма.ПараметрыВнешнегоСоединения.АдресВременногоХранилища).Получить().Получить("{ДополнительныеДанные}"); - КонецЕсли; - -КонецПроцедуры - -// Удаляет из списка реквизитов для обязательного заполнения те реквизиты, -// которые не отображаются на форме. -// -// Параметры: -// ПроверяемыеРеквизиты - Массив - список реквизитов, для которых выполняется проверка заполнения. -// Элементы - ВсеЭлементыФормы - содержит коллекцию всех элементов управляемой формы. -// -Процедура ОпределитьПроверяемыеРеквизитыСУчетомНастроекВидимостиПолейФормы(ПроверяемыеРеквизиты, Элементы) Экспорт - - ОбратныйИндекс = ПроверяемыеРеквизиты.Количество() - 1; - - Пока ОбратныйИндекс >= 0 Цикл - - ИмяРеквизита = ПроверяемыеРеквизиты[ОбратныйИндекс]; - - Для Каждого Элемент Из Элементы Цикл - - Если ТипЗнч(Элемент) = Тип("ПолеФормы") Тогда - - Если Элемент.ПутьКДанным = ИмяРеквизита - И Не Элемент.Видимость Тогда - - ПроверяемыеРеквизиты.Удалить(ОбратныйИндекс); - Прервать; - - КонецЕсли; - - КонецЕсли; - - КонецЦикла; - - ОбратныйИндекс = ОбратныйИндекс - 1; - - КонецЦикла; - -КонецПроцедуры - // Определяет необходимость выполнения обработчика события "ПослеВыгрузкиДанных" при обмене в РИБ. // // Параметры: @@ -472,13 +276,12 @@ ВариантНастройки = ""; - ИмяПланаОбмена = УзелПланаОбмена.Метаданные().Имя; + ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелПланаОбмена); Если ОбщегоНазначения.ЕстьРеквизитОбъекта("ВариантНастройки", УзелПланаОбмена.Метаданные()) Тогда УстановитьПривилегированныйРежим(Истина); - ВариантНастройки = УзелПланаОбмена.ВариантНастройки; - УстановитьПривилегированныйРежим(Ложь); + ВариантНастройки = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелПланаОбмена, "ВариантНастройки"); КонецЕсли; @@ -499,6 +302,7 @@ Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FILE); Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FTP); Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL); + Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим); Возврат Результат; КонецФункции @@ -517,14 +321,20 @@ // определяется из параметров транспорта, заданных для узла плана обмена при // настройке обмена. Необязательный, значение по умолчанию Неопределено. // ТолькоПараметры - Булево - содержит признак выборочной загрузки данных при обмене РИБ. +// ДополнительныеПараметры - Структура - зарезервировано для служебного использования. // Процедура ВыполнитьДействиеОбменаДляУзлаИнформационнойБазы( Отказ, УзелИнформационнойБазы, ДействиеПриОбмене, ВидТранспортаСообщенийОбмена = Неопределено, - Знач ТолькоПараметры = Ложь) Экспорт - + Знач ТолькоПараметры = Ложь, + ДополнительныеПараметры = Неопределено) Экспорт + + Если ДополнительныеПараметры = Неопределено Тогда + ДополнительныеПараметры = Новый Структура; + КонецЕсли; + УстановитьПривилегированныйРежим(Истина); // ИНИЦИАЛИЗАЦИЯ ОБМЕНА ДАННЫМИ @@ -541,6 +351,10 @@ Возврат; КонецЕсли; + Для Каждого Параметр Из ДополнительныеПараметры Цикл + СтруктураНастроекОбмена.ДополнительныеПараметры.Вставить(Параметр.Ключ, Параметр.Значение); + КонецЦикла; + СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено; СтруктураНастроекОбмена.ДатаНачала = ТекущаяДатаСеанса(); @@ -553,6 +367,10 @@ ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); + Для Каждого Параметр Из СтруктураНастроекОбмена.ДополнительныеПараметры Цикл + ДополнительныеПараметры.Вставить(Параметр.Ключ, Параметр.Значение); + КонецЦикла; + Если Не РезультатВыполненияОбменаВыполнено(СтруктураНастроекОбмена.РезультатВыполненияОбмена) Тогда Отказ = Истина; @@ -637,39 +455,6 @@ Возврат Ложь; КонецФункции -// Возвращает имена реквизитов значений по умолчанию для узла базы корреспондента. -// Передаваемый массив повторяет состав реквизитов шапки плана обмена базы корреспондента. -// -// Параметры: -// ИмяПланаОбмена - Строка - Имя плана обмена. -// ВерсияКорреспондента - Строка - Номер версии корреспондента. Используется, например, для разного -// состава значений по умолчанию на узле для разных версий корреспондента. -// ИдентификаторНастройки - Строка - имя дополнительной настройки обмена. -// -// Возвращаемое значение: -// ФиксированныйМассив - фиксированный массив строк, содержащий имена реквизитов значений -// по умолчанию для узла базы корреспондента. -// -Функция ТаблицыКорреспондентаДляЗначенийПоУмолчанию(Знач ИмяПланаОбмена, Знач ВерсияКорреспондента, Знач ИдентификаторНастройки = "") Экспорт - - Результат = Новый Массив; - - ЗначенияПоУмолчанию = ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента(ИмяПланаОбмена, ВерсияКорреспондента,, ИдентификаторНастройки); - - Для Каждого Элемент Из ЗначенияПоУмолчанию Цикл - - Если Не СтрЗаканчиваетсяНа(Элемент.Ключ, "_Ключ") Тогда - Продолжить; - КонецЕсли; - - Результат.Добавить(Лев(Элемент.Ключ, СтрДлина(Элемент.Ключ) - 5)); - - КонецЦикла; - - Возврат Новый ФиксированныйМассив(Результат); - -КонецФункции - // Возвращает данные таблиц для реквизитов узла обмена. // // Параметры: @@ -954,6 +739,35 @@ Возврат ПолучитьWSПроксиПоПараметрамПодключения(СтруктураНастроек, СтрокаСообщенияОбОшибке, СообщениеПользователю, Истина); КонецФункции +// Функция возвращает объект WSПрокси веб-сервиса Exchange_3_0_1_1, созданный с переданными параметрами. +// +// Параметры: +// СтруктураНастроек - Структура - параметры для WSПрокси; +// * WSURLВебСервиса - Строка - месторасположение wsdl. +// * WSИмяСервиса - Строка - имя сервиса. +// * WSURLПространстваИменСервиса - Строка - URI пространства имен web-сервиса. +// * WSИмяПользователя - Строка - имя пользователя для входа на сервер. +// * WSПароль - Строка - пароль пользователя. +// * WSТаймаут - Число - таймаут на операции выполняемые через полученное прокси. +// СтрокаСообщенияОбОшибке - строка - содержит подробное описание ошибки в случае неуспешного подключения; +// СообщениеПользователю - строка - содержит краткое описание ошибки в случае неуспешного подключения. +// Таймаут - число - таймаут. +// +// Возвращаемое значение: +// WSПрокси - объект WSПрокси веб-сервиса Exchange_3_0_1_1. +// +Функция ПолучитьWSПрокси_3_0_1_1(СтруктураНастроек, СтрокаСообщенияОбОшибке = "", СообщениеПользователю = "", Таймаут = 600) Экспорт + + УдалитьНезначащиеСимволыВНастройкахПодключения(СтруктураНастроек); + + СтруктураНастроек.Вставить("WSURLПространстваИменСервиса", "http://www.1c.ru/SSL/Exchange_3_0_1_1"); + СтруктураНастроек.Вставить("WSИмяСервиса", "Exchange_3_0_1_1"); + СтруктураНастроек.Вставить("WSТаймаут", Таймаут); + + Возврат ПолучитьWSПроксиПоПараметрамПодключения(СтруктураНастроек, СтрокаСообщенияОбОшибке, СообщениеПользователю, Истина); + +КонецФункции + // Возвращает допустимое количество элементов, обрабатываемых в одной транзакции загрузки данных. // // Возвращаемое значение: @@ -1043,6 +857,125 @@ КонецФункции +#Область СохранениеНастроекСинхронизацииДанных + +// Начинает сохранение настроек синхронизации данных в длительной операции. +// При сохранении настроек выполняется перенос на узел обмена переданных данных заполнения, +// и устанавливается признак, что настройка синхронизации завершена. +// Рекомендуется использовать в помощнике настройки синхронизации данных. +// +// Параметры: +// НастройкиСинхронизации - Структура - структура параметров для сохранения настроек. +// * УзелОбмена - ПланОбменаСсылка - узел плана обмена, для которого выполняется сохранение настроек синхронизации. +// * ДанныеЗаполнения - Структура - произвольная структура для заполнения настроек на узле. +// Будет передана в алгоритм "ПриСохраненииНастроекСинхронизацииДанных" (при его наличии). +// ПараметрыОбработчика - Структура - исходящий служебный параметр. Зарезервирован для внутреннего использования. +// Применяется для отслеживания состояния длительной операции. +// На вход следует передавать реквизит формы типа "Произвольный", +// не используемый ни в каких других операциях. +// ПродолжитьОжидание - Булево - исходящий параметр. Истина, если сохранение настройки запущено в длительной операции. +// Для отслеживания состояния в этом случае следует использовать процедуру +// ОбменДаннымиСервер.ПриОжиданииСохраненияНастроекСинхронизации. +// +Процедура ПриНачалеСохраненияНастроекСинхронизации(НастройкиСинхронизации, ПараметрыОбработчика, ПродолжитьОжидание = Истина) Экспорт + + Обработки.ПомощникСозданияОбменаДанными.ПриНачалеСохраненияНастроекСинхронизации(НастройкиСинхронизации, + ПараметрыОбработчика, + ПродолжитьОжидание); + +КонецПроцедуры + +// Используется при ожидании завершения настройки синхронизации данных. +// Проверяет статус выполнения длительной операции по сохранению настройки, и возвращает признак +// необходимости продолжения ожидания, либо сообщает, что операция сохранения настройки завершена. +// +// Параметры: +// ПараметрыОбработчика - Структура - входящий/исходящий служебный параметр. Зарезервирован для внутреннего использования. +// Применяется для отслеживания состояния длительной операции. +// На вход следует передавать реквизит формы типа "Произвольный", +// который был использован при запуске настройки синхронизации +// вызовом метода ОбменДаннымиСервер.ПриНачалеСохраненияНастроекСинхронизации. +// ПродолжитьОжидание - Булево - исходящий параметр. Истина, если необходимо продолжить ожидание завершения +// операции сохранения настройки синхронизации, Ложь - если настройка +// синхронизации завершена. +// +Процедура ПриОжиданииСохраненияНастроекСинхронизации(ПараметрыОбработчика, ПродолжитьОжидание) Экспорт + + Обработки.ПомощникСозданияОбменаДанными.ПриОжиданииСохраненияНастроекСинхронизации(ПараметрыОбработчика, + ПродолжитьОжидание); + +КонецПроцедуры + +// Получает статус завершения операции настройки синхронизации. Вызывается, когда процедуры +// ОбменДаннымиСервер.ПриНачалеСохраненияНастроекСинхронизации или ОбменДаннымиСервер.ПриОжиданииСохраненияНастроекСинхронизации +// устанавливают флаг ПродолжитьОжидание в значение Ложь. +// +// Параметры: +// ПараметрыОбработчика - Структура - входящий служебный параметр. Зарезервирован для внутреннего использования. +// Применяется для получения состояния длительной операции. +// На вход следует передавать реквизит формы типа "Произвольный", +// который был использован при запуске настройки синхронизации +// вызовом метода ОбменДаннымиСервер.ПриНачалеСохраненияНастроекСинхронизации. +// СтатусЗавершения - Структура - исходящий параметр, возвращает состояние завершения длительной операции. +// * Отказ - Булево - Истина, если при запуске, или в ходе выполнения длительной операции произошла ошибка. +// * СообщениеОбОшибке - Строка - текст ошибки, произошедшей при выполнении длительной операции, если Отказ = Истина. +// * Результат - Структура - состояние сохранения настройки синхронизации. +// ** НастройкиСохранены - Булево - Истина, если настройка синхронизации успешно завершена. +// ** СообщениеОбОшибке - Строка - текст ошибки, возникшей непосредственно в транзакции сохранения настройки синхронизации. +// +Процедура ПриЗавершенииСохраненияНастроекСинхронизации(ПараметрыОбработчика, СтатусЗавершения) Экспорт + + Обработки.ПомощникСозданияОбменаДанными.ПриЗавершенииСохраненияНастроекСинхронизации(ПараметрыОбработчика, + СтатусЗавершения); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбщиеНастройкиУзловИнформационныхБаз + +// Устанавливает признак завершения настройки синхронизации данных. +// +// Параметры: +// УзелОбмена - ПланОбменаСсылка - Узел обмена, для которого необходимо установить признак. +// +Процедура ЗавершитьНастройкуСинхронизацииДанных(УзелОбмена) Экспорт + + РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.УстановитьПризнакНастройкаЗавершена(УзелОбмена); + +КонецПроцедуры + +// Возвращает признак завершения настройки синхронизации для узла обмена. +// +// Параметры: +// УзелОбмена - ПланОбменаСсылка - Узел обмена, для которого необходимо получить признак. +// +// Возвращаемое значение: +// Булево - Истина, если настройка синхронизации для переданного узла завершена. +// +Функция НастройкаСинхронизацииЗавершена(УзелОбмена) Экспорт + + Если ОбменДаннымиПовтИсп.ЭтоУзелОбменаСообщениями(УзелОбмена) Тогда + Возврат Истина; + Иначе + Возврат РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.НастройкаЗавершена(УзелОбмена); + КонецЕсли; + +КонецФункции + +// Устанавливает признак успешного создания начального образа узла РИБ. +// +// Параметры: +// УзелОбмена - ПланОбменаСсылка - Узел обмена, для которого необходимо установить признак. +// +Процедура ЗавершитьСозданиеНачальногоОбраза(УзелОбмена) Экспорт + + РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.УстановитьПризнакНачальныйОбразСоздан(УзелОбмена); + +КонецПроцедуры + +#КонецОбласти + #Область ДляВызоваИзДругихПодсистем // ТехнологияСервиса.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса @@ -1060,7 +993,13 @@ // Функция УзелПланаОбменаПоКоду(ИмяПланаОбмена, КодУзла) Экспорт - Возврат ОбменДаннымиПовтИсп.УзелПланаОбменаПоКоду(ИмяПланаОбмена, КодУзла); + СсылкаУзел = ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду(КодУзла); + + Если Не ЗначениеЗаполнено(СсылкаУзел) Тогда + Возврат Неопределено; + КонецЕсли; + + Возврат СсылкаУзел; КонецФункции @@ -1145,6 +1084,28 @@ КонецПроцедуры +// Возвращает идентификатор настройки обмена, соответствующий конкретному корреспонденту. +// +// Параметры: +// ИмяПланаОбмена - Строка - имя плана обмена, который используется для настройки обмена. +// ВерсияКорреспондента - Строка - номер версии корреспондента, с которым настраивается обмен. +// ИмяКорреспондента - Строка - имя корреспондента (см. функцию ИмяКонфигурацииИсточника +// на стороне конфигурации-корреспондента). +// +// Возвращаемое значение: +// Массив - массив строк с идентификаторами настройки для корреспондента. +// +Функция ВариантыНастроекОбменаДляКорреспондента(ИмяПланаОбмена, ВерсияКорреспондента, ИмяКорреспондента) Экспорт + + НастройкиПланаОбмена = НастройкиПланаОбмена(ИмяПланаОбмена, ВерсияКорреспондента, ИмяКорреспондента, Истина); + Если НастройкиПланаОбмена.ВариантыНастроекОбмена.Количество() = 0 Тогда + Возврат Новый Массив; + Иначе + Возврат НастройкиПланаОбмена.ВариантыНастроекОбмена.ВыгрузитьКолонку("ИдентификаторНастройки"); + КонецЕсли; + +КонецФункции + // Возвращает идентификатор настройки обмена, соответствующий конкретному корреспонденту. // // Параметры: @@ -1323,10 +1284,10 @@ Если УзелИнформационнойБазы <> Неопределено Тогда - ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); + РегистрыСведений.УдалитьНастройкиТранспортаОбмена.ПеренестиНастройкиТранспортаОбменаДаннымиКорреспондента(УзелИнформационнойБазы); + ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); // Загрузка только параметров работы программы. - ПараметрыОбмена = ПараметрыОбмена(); ПараметрыОбмена.ВидТранспортаСообщенийОбмена = ВидТранспорта; ПараметрыОбмена.ВыполнятьЗагрузку = Истина; @@ -1452,9 +1413,11 @@ ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипДанных); Если ОбъектМетаданных <> Неопределено Тогда - ЗаписьXML.ЗаписатьАтрибут("Type", ОбъектМетаданных.ПолноеИмя()); + ЗаписьXML.ЗаписатьАтрибут("Type", ОбъектМетаданных.ПолноеИмя()); + ИначеЕсли ТипДанных = Тип("УникальныйИдентификатор") Тогда + ЗаписьXML.ЗаписатьАтрибут("Type", "УникальныйИдентификатор"); Иначе - ЗаписьXML.ЗаписатьАтрибут("Type", Строка(ТипДанных)); + ЗаписьXML.ЗаписатьАтрибут("Type", Строка(ТипДанных)); КонецЕсли; ЗаписьXML.ЗаписатьАтрибут("Val", XMLСтрока(ЭлементОтбора.Значение)); @@ -1495,10 +1458,6 @@ Для Каждого ХранилищеЗначений Из МассивЗначений Цикл ИмяФайла = ПолноеИмяФайлаДанныхОтложенногоОбновления(); - Если ХранилищеЗначений = Неопределено Тогда - Возврат; - КонецЕсли; - ДвоичныеДанные = ХранилищеЗначений.Получить(); Если ДвоичныеДанные = Неопределено Тогда Возврат; @@ -1585,7 +1544,11 @@ ОбъектКОбработке.Отбор[ИмяОтбора].Установить(СсылкаНаЗначение); Иначе - ОбъектКОбработке.Отбор[ИмяОтбора].Установить(XMLЗначение(Тип(ТипЗначенияОтбора),ЗначениеОтбора)); + Если ВРег(СтрЗаменить(ТипЗначенияОтбора, " ", "")) = "УНИКАЛЬНЫЙИДЕНТИФИКАТОР" Тогда + ОбъектКОбработке.Отбор[ИмяОтбора].Установить(XMLЗначение(Тип("УникальныйИдентификатор"), ЗначениеОтбора)); + Иначе + ОбъектКОбработке.Отбор[ИмяОтбора].Установить(XMLЗначение(Тип(ТипЗначенияОтбора), ЗначениеОтбора)); + КонецЕсли; КонецЕсли; КонецЕсли; @@ -1698,6 +1661,7 @@ КонецЕсли; ЗначениеКонстанты.Добавить(ДанныеОбновления); + Константы.ДанныеДляОтложенногоОбновления.Установить(Новый ХранилищеЗначения(ЗначениеКонстанты)); ЗафиксироватьТранзакцию(); @@ -2202,6 +2166,58 @@ #Область Прочее +// Возвращает строку недопустимых символов в имени пользователя, +// используемого для аутентификации при создании WSПрокси. +// +// Возвращаемое значение: +// Строка - строка недопустимых символов в имени пользователя. +// +Функция НедопустимыеСимволыВИмениПользователяWSПрокси() Экспорт + + Возврат ":"; + +КонецФункции + +Функция ИдентификаторЭтогоУзлаДляОбмена(УзелОбмена) Экспорт + + ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелОбмена); + + КодУзла = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПланыОбмена[ИмяПланаОбмена].ЭтотУзел(), "Код"); + + Если ОбменДаннымиПовтИсп.ЭтоУзелРазделенногоОбменаДаннымиБСП(УзелОбмена) Тогда + ПрефиксыУзла = РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ПрефиксыУзла(УзелОбмена); + + Если СтрДлина(КодУзла) = 2 + И Не ПустаяСтрока(ПрефиксыУзла.Префикс) Тогда + // В качестве кода для целей идентификации при обмене использует префикс, + // установленный при создании настройки подключения. + КодУзла = ПрефиксыУзла.Префикс; + КонецЕсли; + КонецЕсли; + + Возврат КодУзла; + +КонецФункции + +Функция ИдентификаторУзлаКорреспондентаДляОбмена(УзелОбмена) Экспорт + + КодУзла = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелОбмена, "Код"); + + Если ОбменДаннымиПовтИсп.ЭтоУзелРазделенногоОбменаДаннымиБСП(УзелОбмена) Тогда + ПрефиксыУзла = РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ПрефиксыУзла(УзелОбмена); + + Если СтрДлина(КодУзла) = 2 + И Не ПустаяСтрока(ПрефиксыУзла.ПрефиксКорреспондента) Тогда + // В качестве кода для целей идентификации при обмене использует префикс, + // установленный при создании настройки подключения. + КодУзла = ПрефиксыУзла.ПрефиксКорреспондента; + КонецЕсли; + КонецЕсли; + + Возврат КодУзла; + +КонецФункции + // Определяет является ли план обмена БСП разделенным. // // Параметры: @@ -2237,78 +2253,13 @@ СтруктураПараметров.Вставить("WSПароль"); Возврат СтруктураПараметров; + КонецФункции -Функция ТаблицаМонитораОбменаДанными(Знач ПланыОбмена, Знач ДополнительныеСвойстваПланаОбмена = "", Знач ТолькоОшибочные = Ложь) Экспорт +Функция ТаблицаМонитораОбменаДанными(Знач ПланыОбмена, Знач ДополнительныеСвойстваПланаОбмена = "") Экспорт - ТекстЗапроса = "ВЫБРАТЬ - | СостоянияОбменовДанными.УзелИнформационнойБазы КАК УзелИнформационнойБазы, - | СостоянияОбменовДанными.ДатаОкончания КАК ДатаОкончания, - | ВЫБОР - | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято) - | ИЛИ СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.ВыполненоСПредупреждениями) - | ТОГДА 2 - | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.Выполнено) - | ТОГДА ВЫБОР - | КОГДА ЕСТЬNULL(КоличествоПроблем.Количество, 0) > 0 - | ТОГДА 2 - | ИНАЧЕ 0 - | КОНЕЦ - | ИНАЧЕ 1 - | КОНЕЦ КАК РезультатВыполненияОбмена - |ПОМЕСТИТЬ СостоянияОбменовДаннымиЗагрузка - |ИЗ - | РегистрСведений.СостоянияОбменовДанными КАК СостоянияОбменовДанными - | ЛЕВОЕ СОЕДИНЕНИЕ КоличествоПроблем КАК КоличествоПроблем - | ПО СостоянияОбменовДанными.УзелИнформационнойБазы = КоличествоПроблем.УзелИнформационнойБазы - |ГДЕ - | СостоянияОбменовДанными.ДействиеПриОбмене = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ЗагрузкаДанных) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | СостоянияОбменовДанными.УзелИнформационнойБазы КАК УзелИнформационнойБазы, - | СостоянияОбменовДанными.ДатаОкончания КАК ДатаОкончания, - | ВЫБОР - | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято) - | ТОГДА 2 - | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.ВыполненоСПредупреждениями) - | ТОГДА 2 - | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.Выполнено) - | ТОГДА 0 - | ИНАЧЕ 1 - | КОНЕЦ КАК РезультатВыполненияОбмена - |ПОМЕСТИТЬ СостоянияОбменовДаннымиВыгрузка - |ИЗ - | РегистрСведений.СостоянияОбменовДанными КАК СостоянияОбменовДанными - |ГДЕ - | СостоянияОбменовДанными.ДействиеПриОбмене = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ВыгрузкаДанных) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | СостоянияУспешныхОбменовДанными.УзелИнформационнойБазы КАК УзелИнформационнойБазы, - | СостоянияУспешныхОбменовДанными.ДатаОкончания КАК ДатаОкончания - |ПОМЕСТИТЬ СостоянияУспешныхОбменовДаннымиЗагрузка - |ИЗ - | РегистрСведений.СостоянияУспешныхОбменовДанными КАК СостоянияУспешныхОбменовДанными - |ГДЕ - | СостоянияУспешныхОбменовДанными.ДействиеПриОбмене = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ЗагрузкаДанных) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | СостоянияУспешныхОбменовДанными.УзелИнформационнойБазы КАК УзелИнформационнойБазы, - | СостоянияУспешныхОбменовДанными.ДатаОкончания КАК ДатаОкончания - |ПОМЕСТИТЬ СостоянияУспешныхОбменовДаннымиВыгрузка - |ИЗ - | РегистрСведений.СостоянияУспешныхОбменовДанными КАК СостоянияУспешныхОбменовДанными - |ГДЕ - | СостоянияУспешныхОбменовДанными.ДействиеПриОбмене = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ВыгрузкаДанных) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ + Запрос = Новый Запрос( + "ВЫБРАТЬ | СценарииОбменовДаннымиНастройкиОбмена.УзелИнформационнойБазы КАК УзелИнформационнойБазы |ПОМЕСТИТЬ СценарииСинхронизацииДанных |ИЗ @@ -2323,84 +2274,103 @@ |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ПланыОбмена.УзелИнформационнойБазы КАК УзелИнформационнойБазы, - | ПланыОбмена.Наименование КАК НаименованиеКорреспондента, | | [ДополнительныеСвойстваПланаОбмена] | | ЕСТЬNULL(СостоянияОбменовДаннымиВыгрузка.РезультатВыполненияОбмена, 0) КАК РезультатПоследнейВыгрузкиДанных, | ЕСТЬNULL(СостоянияОбменовДаннымиЗагрузка.РезультатВыполненияОбмена, 0) КАК РезультатПоследнейЗагрузкиДанных, - | СостоянияОбменовДаннымиЗагрузка.ДатаОкончания КАК ДатаПоследнейЗагрузки, - | СостоянияОбменовДаннымиВыгрузка.ДатаОкончания КАК ДатаПоследнейВыгрузки, - | СостоянияУспешныхОбменовДаннымиЗагрузка.ДатаОкончания КАК ДатаПоследнейУспешнойЗагрузки, - | СостоянияУспешныхОбменовДаннымиВыгрузка.ДатаОкончания КАК ДатаПоследнейУспешнойВыгрузки, + | ЕСТЬNULL(СостоянияОбменовДаннымиЗагрузка.ДатаНачала, ДАТАВРЕМЯ(1, 1, 1)) КАК ДатаНачалаПоследнейЗагрузки, + | ЕСТЬNULL(СостоянияОбменовДаннымиЗагрузка.ДатаОкончания, ДАТАВРЕМЯ(1, 1, 1)) КАК ДатаОкончанияПоследнейЗагрузки, + | ЕСТЬNULL(СостоянияОбменовДаннымиВыгрузка.ДатаНачала, ДАТАВРЕМЯ(1, 1, 1)) КАК ДатаНачалаПоследнейВыгрузки, + | ЕСТЬNULL(СостоянияОбменовДаннымиВыгрузка.ДатаОкончания, ДАТАВРЕМЯ(1, 1, 1)) КАК ДатаОкончанияПоследнейВыгрузки, + | ЕСТЬNULL(СостоянияУспешныхОбменовДаннымиЗагрузка.ДатаОкончания, ДАТАВРЕМЯ(1, 1, 1)) КАК ДатаОкончанияПоследнейУспешнойЗагрузки, + | ЕСТЬNULL(СостоянияУспешныхОбменовДаннымиВыгрузка.ДатаОкончания, ДАТАВРЕМЯ(1, 1, 1)) КАК ДатаОкончанияПоследнейУспешнойВыгрузки, | ВЫБОР | КОГДА СценарииСинхронизацииДанных.УзелИнформационнойБазы ЕСТЬ NULL | ТОГДА 0 | ИНАЧЕ 1 - | КОНЕЦ КАК РасписаниеНастроено + | КОНЕЦ КАК РасписаниеНастроено, + | ОбщиеНастройкиУзловИнформационныхБаз.ВерсияКорреспондента КАК ВерсияКорреспондента, + | ОбщиеНастройкиУзловИнформационныхБаз.ПрефиксКорреспондента КАК ПрефиксКорреспондента, + | ОбщиеНастройкиУзловИнформационныхБаз.НастройкаЗавершена КАК НастройкаЗавершена, + | ВЫБОР + | КОГДА ЕСТЬNULL(СостоянияОбменовДаннымиВыгрузка.РезультатВыполненияОбмена, 0) = 0 + | И ЕСТЬNULL(СостоянияОбменовДаннымиЗагрузка.РезультатВыполненияОбмена, 0) = 0 + | ТОГДА ЛОЖЬ + | ИНАЧЕ ИСТИНА + | КОНЕЦ КАК ЕстьОшибки, + | ЕСТЬNULL(СообщенияДляСопоставленияДанных.ПолученоСообщениеДляСопоставленияДанных, ЛОЖЬ) КАК ПолученоСообщениеДляСопоставленияДанных, + | ЕСТЬNULL(СообщенияДляСопоставленияДанных.ДатаЗакладкиПоследнегоСообщения, ДАТАВРЕМЯ(1, 1, 1)) КАК ДатаСообщенияДляСопоставленияДанных |ИЗ | ПланыОбменаКонфигурации КАК ПланыОбмена + | ЛЕВОЕ СОЕДИНЕНИЕ ОбщиеНастройкиУзловИнформационныхБаз КАК ОбщиеНастройкиУзловИнформационныхБаз + | ПО (ОбщиеНастройкиУзловИнформационныхБаз.УзелИнформационнойБазы = ПланыОбмена.УзелИнформационнойБазы) | ЛЕВОЕ СОЕДИНЕНИЕ СостоянияОбменовДаннымиЗагрузка КАК СостоянияОбменовДаннымиЗагрузка - | ПО ПланыОбмена.УзелИнформационнойБазы = СостоянияОбменовДаннымиЗагрузка.УзелИнформационнойБазы + | ПО (СостоянияОбменовДаннымиЗагрузка.УзелИнформационнойБазы = ПланыОбмена.УзелИнформационнойБазы) | ЛЕВОЕ СОЕДИНЕНИЕ СостоянияОбменовДаннымиВыгрузка КАК СостоянияОбменовДаннымиВыгрузка - | ПО ПланыОбмена.УзелИнформационнойБазы = СостоянияОбменовДаннымиВыгрузка.УзелИнформационнойБазы + | ПО (СостоянияОбменовДаннымиВыгрузка.УзелИнформационнойБазы = ПланыОбмена.УзелИнформационнойБазы) | ЛЕВОЕ СОЕДИНЕНИЕ СостоянияУспешныхОбменовДаннымиЗагрузка КАК СостоянияУспешныхОбменовДаннымиЗагрузка - | ПО ПланыОбмена.УзелИнформационнойБазы = СостоянияУспешныхОбменовДаннымиЗагрузка.УзелИнформационнойБазы + | ПО (СостоянияУспешныхОбменовДаннымиЗагрузка.УзелИнформационнойБазы = ПланыОбмена.УзелИнформационнойБазы) | ЛЕВОЕ СОЕДИНЕНИЕ СостоянияУспешныхОбменовДаннымиВыгрузка КАК СостоянияУспешныхОбменовДаннымиВыгрузка - | ПО ПланыОбмена.УзелИнформационнойБазы = СостоянияУспешныхОбменовДаннымиВыгрузка.УзелИнформационнойБазы + | ПО (СостоянияУспешныхОбменовДаннымиВыгрузка.УзелИнформационнойБазы = ПланыОбмена.УзелИнформационнойБазы) | ЛЕВОЕ СОЕДИНЕНИЕ СценарииСинхронизацииДанных КАК СценарииСинхронизацииДанных - | ПО ПланыОбмена.УзелИнформационнойБазы = СценарииСинхронизацииДанных.УзелИнформационнойБазы - | - |[Отбор] + | ПО (СценарииСинхронизацииДанных.УзелИнформационнойБазы = ПланыОбмена.УзелИнформационнойБазы) + | ЛЕВОЕ СОЕДИНЕНИЕ СообщенияДляСопоставленияДанных КАК СообщенияДляСопоставленияДанных + | ПО СообщенияДляСопоставленияДанных.УзелИнформационнойБазы = ПланыОбмена.УзелИнформационнойБазы | |УПОРЯДОЧИТЬ ПО - | ПланыОбмена.Наименование"; - - УстановитьПривилегированныйРежим(Истина); + | ПланыОбмена.Наименование"); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "[ДополнительныеСвойстваПланаОбмена]", + ДополнительныеСвойстваПланаОбменаСтрокой(ДополнительныеСвойстваПланаОбмена)); + МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; - - ПолучитьПланыОбменаДляМонитора(МенеджерВременныхТаблиц, ПланыОбмена, ДополнительныеСвойстваПланаОбмена); - ПолучитьРезультатыОбменаДляМонитора(МенеджерВременныхТаблиц, ПланыОбмена); - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ДополнительныеСвойстваПланаОбмена]", ДополнительныеСвойстваПланаОбменаСтрокой(ДополнительныеСвойстваПланаОбмена)); - - Если ТолькоОшибочные Тогда - Отбор = " - |ГДЕ - | ЕСТЬNULL(СостоянияОбменовДаннымиВыгрузка.РезультатВыполненияОбмена, 0) <> 0 - | ИЛИ ЕСТЬNULL(СостоянияОбменовДаннымиЗагрузка.РезультатВыполненияОбмена, 0) <> 0"; - Иначе - Отбор = ""; - КонецЕсли; - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[Отбор]", Отбор); - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; + УстановитьПривилегированныйРежим(Истина); + ПолучитьПланыОбменаДляМонитора(МенеджерВременныхТаблиц, ПланыОбмена, ДополнительныеСвойстваПланаОбмена); + ПолучитьРезультатыОбменаДляМонитора(МенеджерВременныхТаблиц); + ПолучитьСостоянияОбменовДанными(МенеджерВременныхТаблиц); + ПолучитьСообщенияДляСопоставленияДанных(МенеджерВременныхТаблиц); + ПолучитьОбщиеНастройкиУзловИнформационныхБаз(МенеджерВременныхТаблиц); + НастройкиСинхронизации = Запрос.Выполнить().Выгрузить(); - НастройкиСинхронизации.Колонки.Добавить("ПредставлениеДатыПоследнейЗагрузки"); - НастройкиСинхронизации.Колонки.Добавить("ПредставлениеДатыПоследнейВыгрузки"); - НастройкиСинхронизации.Колонки.Добавить("ПредставлениеДатыПоследнейУспешнойЗагрузки"); - НастройкиСинхронизации.Колонки.Добавить("ПредставлениеДатыПоследнейУспешнойВыгрузки"); + НастройкиСинхронизации.Колонки.Добавить("ВариантОбменаДанными", Новый ОписаниеТипов("Строка")); - НастройкиСинхронизации.Колонки.Добавить("ИмяПланаОбмена", Новый ОписаниеТипов("Строка")); + НастройкиСинхронизации.Колонки.Добавить("ИмяПланаОбмена", Новый ОписаниеТипов("Строка")); + + НастройкиСинхронизации.Колонки.Добавить("ДатаПоследнегоЗапуска", Новый ОписаниеТипов("Дата")); + НастройкиСинхронизации.Колонки.Добавить("ПредставлениеДатыПоследнегоЗапуска", Новый ОписаниеТипов("Строка")); + + НастройкиСинхронизации.Колонки.Добавить("ПредставлениеДатыПоследнейЗагрузки", Новый ОписаниеТипов("Строка")); + НастройкиСинхронизации.Колонки.Добавить("ПредставлениеДатыПоследнейВыгрузки", Новый ОписаниеТипов("Строка")); + + НастройкиСинхронизации.Колонки.Добавить("ПредставлениеДатыПоследнейУспешнойЗагрузки", Новый ОписаниеТипов("Строка")); + НастройкиСинхронизации.Колонки.Добавить("ПредставлениеДатыПоследнейУспешнойВыгрузки", Новый ОписаниеТипов("Строка")); + + НастройкиСинхронизации.Колонки.Добавить("ПредставлениеДатыСообщенияДляСопоставленияДанных", Новый ОписаниеТипов("Строка")); Для Каждого НастройкаСинхронизации Из НастройкиСинхронизации Цикл - НастройкаСинхронизации.ПредставлениеДатыПоследнейЗагрузки = ОтносительнаяДатаСинхронизации(НастройкаСинхронизации.ДатаПоследнейЗагрузки); - НастройкаСинхронизации.ПредставлениеДатыПоследнейВыгрузки = ОтносительнаяДатаСинхронизации(НастройкаСинхронизации.ДатаПоследнейВыгрузки); - НастройкаСинхронизации.ПредставлениеДатыПоследнейУспешнойЗагрузки = ОтносительнаяДатаСинхронизации(НастройкаСинхронизации.ДатаПоследнейУспешнойЗагрузки); - НастройкаСинхронизации.ПредставлениеДатыПоследнейУспешнойВыгрузки = ОтносительнаяДатаСинхронизации(НастройкаСинхронизации.ДатаПоследнейУспешнойВыгрузки); + НастройкаСинхронизации.ДатаПоследнегоЗапуска = Макс(НастройкаСинхронизации.ДатаНачалаПоследнейЗагрузки, + НастройкаСинхронизации.ДатаНачалаПоследнейВыгрузки); + НастройкаСинхронизации.ПредставлениеДатыПоследнегоЗапуска = ОтносительнаяДатаСинхронизации( + НастройкаСинхронизации.ДатаПоследнегоЗапуска); + + НастройкаСинхронизации.ПредставлениеДатыПоследнейЗагрузки = ОтносительнаяДатаСинхронизации( + НастройкаСинхронизации.ДатаОкончанияПоследнейЗагрузки); + НастройкаСинхронизации.ПредставлениеДатыПоследнейВыгрузки = ОтносительнаяДатаСинхронизации( + НастройкаСинхронизации.ДатаОкончанияПоследнейВыгрузки); + НастройкаСинхронизации.ПредставлениеДатыПоследнейУспешнойЗагрузки = ОтносительнаяДатаСинхронизации( + НастройкаСинхронизации.ДатаОкончанияПоследнейУспешнойЗагрузки); + НастройкаСинхронизации.ПредставлениеДатыПоследнейУспешнойВыгрузки = ОтносительнаяДатаСинхронизации( + НастройкаСинхронизации.ДатаОкончанияПоследнейУспешнойВыгрузки); + + НастройкаСинхронизации.ПредставлениеДатыСообщенияДляСопоставленияДанных = ОтносительнаяДатаСинхронизации( + МестноеВремя(НастройкаСинхронизации.ДатаСообщенияДляСопоставленияДанных)); НастройкаСинхронизации.ВариантОбменаДанными = ВариантОбменаДанными(НастройкаСинхронизации.УзелИнформационнойБазы); - - НастройкаСинхронизации.ИмяПланаОбмена = ЗначениеНастройкиПланаОбмена( - НастройкаСинхронизации.УзелИнформационнойБазы.Метаданные().Имя, - "НаименованиеКонфигурацииКорреспондента", - НастройкаСинхронизации.ВариантОбменаДанными); + НастройкаСинхронизации.ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(НастройкаСинхронизации.УзелИнформационнойБазы); КонецЦикла; @@ -2419,7 +2389,7 @@ КонецЕсли; ИначеЕсли ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() - И НЕ ОбменДаннымиВызовСервера.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском("ЗагрузкаРазрешена") Тогда + И Не ОбменДаннымиВызовСервера.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском("ЗагрузкаРазрешена") Тогда Если ПриложениеВИнтернете Тогда ВызватьИсключение НСтр("ru = 'Приложение в Интернете находится в состоянии обновления.'"); @@ -2431,13 +2401,27 @@ КонецПроцедуры -Процедура ПроверитьИспользованиеОбменаДанными() Экспорт +Процедура ПроверитьИспользованиеОбменаДанными(УстановитьИспользование = Ложь) Экспорт - Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") Тогда + Если Не ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") Тогда - ТекстСообщения = НСтр("ru = 'Синхронизация данных запрещена администратором.'"); - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), УровеньЖурналаРегистрации.Ошибка,,,ТекстСообщения); - ВызватьИсключение ТекстСообщения; + Если Не ОбщегоНазначения.РазделениеВключено() + И УстановитьИспользование + И ПравоДоступа("Редактирование", Метаданные.Константы.ИспользоватьСинхронизациюДанных) Тогда + + Попытка + Константы.ИспользоватьСинхронизациюДанных.Установить(Истина); + Исключение + ТекстСообщения = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), УровеньЖурналаРегистрации.Ошибка,,,ТекстСообщения); + ВызватьИсключение ТекстСообщения; + КонецПопытки; + + Иначе + ТекстСообщения = НСтр("ru = 'Синхронизация данных запрещена администратором.'"); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), УровеньЖурналаРегистрации.Ошибка,,,ТекстСообщения); + ВызватьИсключение ТекстСообщения; + КонецЕсли; КонецЕсли; @@ -2451,7 +2435,7 @@ СтруктураПараметров.Вставить("ВыполнятьЗагрузку", Истина); СтруктураПараметров.Вставить("ВыполнятьВыгрузку", Истина); - СтруктураПараметров.Вставить("ТолькоПараметры", Ложь); + СтруктураПараметров.Вставить("ТолькоПараметры", Ложь); СтруктураПараметров.Вставить("ДлительнаяОперацияРазрешена", Ложь); СтруктураПараметров.Вставить("ДлительнаяОперация", Ложь); @@ -2459,6 +2443,8 @@ СтруктураПараметров.Вставить("ИдентификаторФайла", ""); СтруктураПараметров.Вставить("ПараметрыАутентификации", Неопределено); + СтруктураПараметров.Вставить("СообщениеДляСопоставленияДанных", Ложь); + Возврат СтруктураПараметров; КонецФункции @@ -2489,9 +2475,15 @@ // * ТолькоПараметры - Булево - содержит признак выборочной загрузки данных при обмене РИБ. // Необязательный, значение по умолчанию Ложь. // Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибки при выполнении обмена. +// ДополнительныеПараметры - Структура - зарезервировано для служебного использования. // -Процедура ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, ПараметрыОбмена, Отказ) Экспорт - +Процедура ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, + ПараметрыОбмена, Отказ, ДополнительныеПараметры = Неопределено) Экспорт + + Если ДополнительныеПараметры = Неопределено Тогда + ДополнительныеПараметры = Новый Структура; + КонецЕсли; + ДействиеЗагрузка = Перечисления.ДействияПриОбмене.ЗагрузкаДанных; ДействиеВыгрузка = Перечисления.ДействияПриОбмене.ВыгрузкаДанных; @@ -2505,25 +2497,25 @@ ПроверитьВозможностьВнешнегоСоединения(); Если ПараметрыОбмена.ВыполнятьЗагрузку Тогда - ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыПоВнешнемуСоединению(Отказ, УзелИнформационнойБазы, - ДействиеЗагрузка, Неопределено); + ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыПоВнешнемуСоединению(Отказ, + УзелИнформационнойБазы, ДействиеЗагрузка, Неопределено); КонецЕсли; Если ПараметрыОбмена.ВыполнятьВыгрузку Тогда - ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыПоВнешнемуСоединению(Отказ, УзелИнформационнойБазы, - ДействиеВыгрузка, Неопределено); + ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыПоВнешнемуСоединению(Отказ, + УзелИнформационнойБазы, ДействиеВыгрузка, Неопределено, ПараметрыОбмена.СообщениеДляСопоставленияДанных); КонецЕсли; ИначеЕсли ПараметрыОбмена.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда // Обмен через Web-сервис Если ПараметрыОбмена.ВыполнятьЗагрузку Тогда - ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыЧерезWebСервис(УзелИнформационнойБазы, - ДействиеЗагрузка, ПараметрыОбмена, Отказ); + ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыЧерезWebСервис(Отказ, + УзелИнформационнойБазы, ДействиеЗагрузка, ПараметрыОбмена); КонецЕсли; Если ПараметрыОбмена.ВыполнятьВыгрузку Тогда - ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыЧерезWebСервис(УзелИнформационнойБазы, - ДействиеВыгрузка, ПараметрыОбмена, Отказ); + ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыЧерезWebСервис(Отказ, + УзелИнформационнойБазы, ДействиеВыгрузка, ПараметрыОбмена); КонецЕсли; Иначе // Обмен через обычные каналы связи. @@ -2533,12 +2525,12 @@ Если ПараметрыОбмена.ВыполнятьЗагрузку Тогда ВыполнитьДействиеОбменаДляУзлаИнформационнойБазы(Отказ, УзелИнформационнойБазы, - ДействиеЗагрузка, ВидТранспортаСообщенийОбмена, ТолькоПараметры); + ДействиеЗагрузка, ВидТранспортаСообщенийОбмена, ТолькоПараметры, ДополнительныеПараметры); КонецЕсли; Если ПараметрыОбмена.ВыполнятьВыгрузку Тогда ВыполнитьДействиеОбменаДляУзлаИнформационнойБазы(Отказ, УзелИнформационнойБазы, - ДействиеВыгрузка, ВидТранспортаСообщенийОбмена, ТолькоПараметры); + ДействиеВыгрузка, ВидТранспортаСообщенийОбмена, ТолькоПараметры, ДополнительныеПараметры); КонецЕсли; КонецЕсли; @@ -2552,7 +2544,7 @@ ДелатьКонтрольныйВызов = Ложь) Экспорт Попытка - ОбменДаннымиКлиентСервер.ПроверитьКорректностьФорматаАдресаWSПрокси(СтруктураНастроек.WSURLВебСервиса); + ПроверитьКорректностьФорматаАдресаWSПрокси(СтруктураНастроек.WSURLВебСервиса); Исключение СообщениеПользователю = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); СтрокаСообщенияОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); @@ -2561,7 +2553,7 @@ КонецПопытки; Попытка - ОбменДаннымиКлиентСервер.ПроверитьНедопустимыеСимволыВИмениПользователяWSПрокси(СтруктураНастроек.WSИмяПользователя); + ПроверитьНедопустимыеСимволыВИмениПользователяWSПрокси(СтруктураНастроек.WSИмяПользователя); Исключение СообщениеПользователю = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); СтрокаСообщенияОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); @@ -2609,6 +2601,7 @@ КонецЕсли; УстановитьПривилегированныйРежим(Истина); + ОбщегоНазначения.УдалитьДанныеИзБезопасногоХранилища(УзелИнформационнойБазы); ОбъектУзла.Удалить(); КонецПроцедуры @@ -2789,40 +2782,43 @@ // Используется в обработчике обновления ИБ. Процедура ПеренестиПаролиВБезопасноеХранилище() Экспорт - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | НастройкиТранспортаОбмена.Узел, - | НастройкиТранспортаОбмена.УдалитьCOMПарольПользователя, - | НастройкиТранспортаОбмена.УдалитьFTPСоединениеПароль, - | НастройкиТранспортаОбмена.УдалитьWSПароль, - | НастройкиТранспортаОбмена.УдалитьПарольАрхиваСообщенияОбмена + Запрос = Новый Запрос( + "ВЫБРАТЬ + | НастройкиТранспорта.УзелИнформационнойБазы, + | НастройкиТранспорта.УдалитьCOMПарольПользователя, + | НастройкиТранспорта.УдалитьFTPСоединениеПароль, + | НастройкиТранспорта.УдалитьWSПароль, + | НастройкиТранспорта.УдалитьПарольАрхиваСообщенияОбмена |ИЗ - | РегистрСведений.НастройкиТранспортаОбмена КАК НастройкиТранспортаОбмена"; + | РегистрСведений.УдалитьНастройкиТранспортаОбмена КАК НастройкиТранспорта"); + РезультатЗапроса = Запрос.Выполнить().Выбрать(); Пока РезультатЗапроса.Следующий() Цикл - Если НЕ ПустаяСтрока(РезультатЗапроса.УдалитьCOMПарольПользователя) - ИЛИ НЕ ПустаяСтрока(РезультатЗапроса.УдалитьFTPСоединениеПароль) - ИЛИ НЕ ПустаяСтрока(РезультатЗапроса.УдалитьWSПароль) - ИЛИ НЕ ПустаяСтрока(РезультатЗапроса.УдалитьПарольАрхиваСообщенияОбмена) Тогда + Если Не ПустаяСтрока(РезультатЗапроса.УдалитьCOMПарольПользователя) + Или Не ПустаяСтрока(РезультатЗапроса.УдалитьFTPСоединениеПароль) + Или Не ПустаяСтрока(РезультатЗапроса.УдалитьWSПароль) + Или Не ПустаяСтрока(РезультатЗапроса.УдалитьПарольАрхиваСообщенияОбмена) Тогда НачатьТранзакцию(); Попытка УстановитьПривилегированныйРежим(Истина); - ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(РезультатЗапроса.Узел, РезультатЗапроса.УдалитьCOMПарольПользователя, "COMПарольПользователя"); - ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(РезультатЗапроса.Узел, РезультатЗапроса.УдалитьFTPСоединениеПароль, "FTPСоединениеПароль"); - ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(РезультатЗапроса.Узел, РезультатЗапроса.УдалитьWSПароль, "WSПароль"); - ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(РезультатЗапроса.Узел, РезультатЗапроса.УдалитьПарольАрхиваСообщенияОбмена, "ПарольАрхиваСообщенияОбмен"); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(РезультатЗапроса.УзелИнформационнойБазы, РезультатЗапроса.УдалитьCOMПарольПользователя, "COMПарольПользователя"); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(РезультатЗапроса.УзелИнформационнойБазы, РезультатЗапроса.УдалитьFTPСоединениеПароль, "FTPСоединениеПароль"); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(РезультатЗапроса.УзелИнформационнойБазы, РезультатЗапроса.УдалитьWSПароль, "WSПароль"); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(РезультатЗапроса.УзелИнформационнойБазы, РезультатЗапроса.УдалитьПарольАрхиваСообщенияОбмена, "ПарольАрхиваСообщенияОбмен"); УстановитьПривилегированныйРежим(Ложь); - НастройкиТранспортаОбмена = РегистрыСведений.НастройкиТранспортаОбмена.СоздатьМенеджерЗаписи(); - НастройкиТранспортаОбмена.Узел = РезультатЗапроса.Узел; - НастройкиТранспортаОбмена.Прочитать(); - НастройкиТранспортаОбмена.УдалитьCOMПарольПользователя = ""; - НастройкиТранспортаОбмена.УдалитьFTPСоединениеПароль = ""; - НастройкиТранспортаОбмена.УдалитьWSПароль = ""; - НастройкиТранспортаОбмена.УдалитьПарольАрхиваСообщенияОбмена = ""; - НастройкиТранспортаОбмена.Записать(); + + СтруктураЗаписи = Новый Структура("УзелИнформационнойБазы", РезультатЗапроса.УзелИнформационнойБазы); + СтруктураЗаписи.Вставить("УдалитьCOMПарольПользователя", ""); + СтруктураЗаписи.Вставить("УдалитьFTPСоединениеПароль", ""); + СтруктураЗаписи.Вставить("УдалитьWSПароль", ""); + СтруктураЗаписи.Вставить("УдалитьПарольАрхиваСообщенияОбмена", ""); + + ОбновитьЗаписьВРегистрСведений(СтруктураЗаписи, "УдалитьНастройкиТранспортаОбмена"); + ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); + СтрокаСообщенияОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщенияОбОшибке); КонецПопытки; @@ -2837,6 +2833,7 @@ // См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт + Обработчик = Обработчики.Добавить(); Обработчик.Версия = "*"; Обработчик.Процедура = "ОбменДаннымиСервер.УстановитьКодыПредопределенныхУзлов"; @@ -2888,6 +2885,48 @@ Обработчик.Процедура = "ОбменДаннымиСервер.УдалитьРольНастройкаСинхронизацииДанных"; Обработчик.РежимВыполнения = "Оперативно"; + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "3.0.1.91"; + Обработчик.Комментарий = + НСтр("ru = 'Перенос настроек подключения обменов данными в новый регистр ""Настройки транспорта обмена данными"".'"); + Обработчик.Идентификатор = Новый УникальныйИдентификатор("8d5f1092-f569-4c03-aca9-65625809b853"); + Обработчик.Процедура = "РегистрыСведений.УдалитьНастройкиТранспортаОбмена.ОбработатьДанныеДляПереходаНаНовуюВерсию"; + Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.ЧитаемыеОбъекты = "РегистрСведений.УдалитьНастройкиТранспортаОбмена"; + Обработчик.ИзменяемыеОбъекты = "РегистрСведений.УдалитьНастройкиТранспортаОбмена,РегистрСведений.НастройкиТранспортаОбменаДанными"; + Обработчик.ОчередьОтложеннойОбработки = 1; + Обработчик.ЗапускатьИВПодчиненномУзлеРИБСФильтрами = Истина; + Обработчик.ПроцедураЗаполненияДанныхОбновления = "РегистрыСведений.УдалитьНастройкиТранспортаОбмена.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"; + Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "3.0.1.91"; + Обработчик.Комментарий = + НСтр("ru = 'Заполнение вспомогательных настроек обмена данными в регистре ""Общие настройки узлов информационных баз"".'"); + Обработчик.Идентификатор = Новый УникальныйИдентификатор("e1cd64f1-3df9-4ea6-8076-1ba0627ba104"); + Обработчик.Процедура = "РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ОбработатьДанныеДляПереходаНаНовуюВерсию"; + Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.ЧитаемыеОбъекты = "РегистрСведений.ОбщиеНастройкиУзловИнформационныхБаз"; + Обработчик.ИзменяемыеОбъекты = "РегистрСведений.ОбщиеНастройкиУзловИнформационныхБаз"; + Обработчик.ОчередьОтложеннойОбработки = 1; + Обработчик.ЗапускатьИВПодчиненномУзлеРИБСФильтрами = Истина; + Обработчик.ПроцедураЗаполненияДанныхОбновления = "РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"; + Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "3.0.1.91"; + Обработчик.Комментарий = + НСтр("ru = 'Первоначальное заполнение настроек обмена данными XDTO.'"); + Обработчик.Идентификатор = Новый УникальныйИдентификатор("2ea5ec7e-547b-4e8b-9c3f-d2d8652c8cdf"); + Обработчик.Процедура = "РегистрыСведений.НастройкиОбменаДаннымиXDTO.ОбработатьДанныеДляПереходаНаНовуюВерсию"; + Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.ЧитаемыеОбъекты = "РегистрСведений.НастройкиОбменаДаннымиXDTO"; + Обработчик.ИзменяемыеОбъекты = "РегистрСведений.НастройкиОбменаДаннымиXDTO"; + Обработчик.ОчередьОтложеннойОбработки = 1; + Обработчик.ЗапускатьИВПодчиненномУзлеРИБСФильтрами = Истина; + Обработчик.ПроцедураЗаполненияДанныхОбновления = "РегистрыСведений.НастройкиОбменаДаннымиXDTO.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"; + Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; + КонецПроцедуры // См. ОбновлениеИнформационнойБазыБСП.ПередОбновлениемИнформационнойБазы. @@ -2952,6 +2991,7 @@ МассивВерсий = Новый Массив; МассивВерсий.Добавить("2.0.1.6"); МассивВерсий.Добавить("2.1.1.7"); + МассивВерсий.Добавить("3.0.1.1"); СтруктураПоддерживаемыхВерсий.Вставить("ОбменДанными", МассивВерсий); КонецПроцедуры @@ -2977,6 +3017,13 @@ УстановитьПривилегированныйРежим(Ложь); + Если Параметры.Свойство("ОткрытьПомощникСозданияОбменаДаннымиДляНастройкиПодчиненногоУзла") Тогда + + ЭтотУзел = ПланыОбмена[Параметры.ИмяПланаОбменаРИБ].ЭтотУзел(); + Параметры.Вставить("ИдентификаторНастройкиУзлаРИБ", СохраненныйВариантНастройкиУзлаПланаОбмена(ЭтотУзел)); + + КонецЕсли; + Если Не Параметры.Свойство("ОткрытьПомощникСозданияОбменаДаннымиДляНастройкиПодчиненногоУзла") И ПравоДоступа("Просмотр", Метаданные.ОбщиеКоманды.Синхронизировать) Тогда @@ -3094,17 +3141,20 @@ КонецЕсли; Для Каждого УзелСсылка Из ПредопределенныеУзлыПлановОбменаБСП() Цикл - Если НЕ ЭтоПланОбменаXDTO(УзелСсылка) Тогда + + Если Не ЭтоПланОбменаXDTO(УзелСсылка) Тогда Продолжить; - ИначеЕсли НЕ ОбменДаннымиXDTOСервер.ПоддерживаетсяВерсияСИдентификаторомОбменаДанными(УзелСсылка) Тогда + ИначеЕсли Не ОбменДаннымиXDTOСервер.ПоддерживаетсяВерсияСИдентификаторомОбменаДанными(УзелСсылка) Тогда Продолжить; КонецЕсли; + КодПредопределенногоУзла = СокрЛП(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелСсылка, "Код")); - Если НЕ ЗначениеЗаполнено(КодПредопределенногоУзла) + Если Не ЗначениеЗаполнено(КодПредопределенногоУзла) // Не был выполнен переход на новую кодировку узлов. Или СтрДлина(КодПредопределенногоУзла) < 36 // Требуется перекодировка в связи с тем, что код сформирован по логике БТС. Или КодПредопределенногоУзла = КодИзМоделиСервиса Тогда + УникальныйИдентификаторОбменаДанными = Строка(Новый УникальныйИдентификатор); УзелОбъект = УзелСсылка.ПолучитьОбъект(); @@ -3114,14 +3164,20 @@ Если ЗначениеЗаполнено(КодПредопределенногоУзла) Тогда // Сохранение предыдущего кода узла в регистре виртуальных кодов. - ТекстЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ВЫБРАТЬ - | %1.Ссылка КАК Ссылка - |ИЗ - | ПланОбмена.%1 КАК %1 - |ГДЕ - | %1.ЭтотУзел = ЛОЖЬ - | И %1.ПометкаУдаления = ЛОЖЬ", УзелОбъект.Метаданные().Имя); + ТекстЗапроса = + "ВЫБРАТЬ + | Т.Ссылка КАК Ссылка + |ИЗ + | #ТаблицаПланаОбмена КАК Т + |ГДЕ + | НЕ Т.ЭтотУзел + | И НЕ Т.ПометкаУдаления"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, + "#ТаблицаПланаОбмена", "ПланОбмена." + ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелСсылка)); + Запрос = Новый Запрос(ТекстЗапроса); + КорреспондентыПланаОбмена = Запрос.Выполнить().Выбрать(); Пока КорреспондентыПланаОбмена.Следующий() Цикл ВиртуальныйКод = ВиртуальныеКоды.Добавить(); @@ -3129,6 +3185,7 @@ ВиртуальныйКод.КодУзла = КодПредопределенногоУзла; КонецЦикла; КонецЕсли; + КонецЕсли; КонецЦикла; @@ -3152,31 +3209,41 @@ #Область СлужебныеПроцедурыИФункции +Функция ПолученоСообщениеСДаннымиДляСопоставления(УзелОбмена) Экспорт + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | СообщенияДляСопоставленияДанных.ПолученоСообщениеДляСопоставленияДанных КАК ПолученоСообщениеДляСопоставленияДанных + |ИЗ + | #ТаблицаПланаОбмена КАК ТаблицаПланаОбмена + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ СообщенияДляСопоставленияДанных КАК СообщенияДляСопоставленияДанных + | ПО (СообщенияДляСопоставленияДанных.УзелИнформационнойБазы = ТаблицаПланаОбмена.Ссылка) + |ГДЕ + | ТаблицаПланаОбмена.Ссылка = &УзелОбмена"); + Запрос.УстановитьПараметр("УзелОбмена", УзелОбмена); + Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "#ТаблицаПланаОбмена", "ПланОбмена." + ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелОбмена)); + + ПолучитьСообщенияДляСопоставленияДанных(Запрос.МенеджерВременныхТаблиц); + + Выборка = Запрос.Выполнить().Выбрать(); + + Если Выборка.Следующий() Тогда + Возврат Выборка.ПолученоСообщениеДляСопоставленияДанных; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + Функция ПредопределенныеУзлыПлановОбменаБСП() Результат = Новый Массив; - ТекстЗапроса = ""; - ПланыОбменаБСП = ОбменДаннымиПовтИсп.ПланыОбменаБСП(); Для Каждого ИмяПланаОбмена Из ОбменДаннымиПовтИсп.ПланыОбменаБСП() Цикл - - Если НЕ ПустаяСтрока(ТекстЗапроса) Тогда - ТекстЗапроса = ТекстЗапроса + Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС; - КонецЕсли; - - ТекстЗапроса = ТекстЗапроса + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ВЫБРАТЬ - | %1.Ссылка КАК Ссылка - |ИЗ - | ПланОбмена.%1 КАК %1 - |ГДЕ - | %1.ЭтотУзел = ИСТИНА", ИмяПланаОбмена); - + Результат.Добавить(ПланыОбмена[ИмяПланаОбмена].ЭтотУзел()); КонецЦикла; - Если ПустаяСтрока(ТекстЗапроса) Тогда - Возврат Результат; - КонецЕсли; - Запрос = Новый Запрос(ТекстЗапроса); - Результат = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); Возврат Результат; @@ -3198,6 +3265,75 @@ КонецПроцедуры +Процедура ПроверитьНедопустимыеСимволыВИмениПользователяWSПрокси(Знач ИмяПользователя) + + НедопустимыеСимволы = НедопустимыеСимволыВИмениПользователяWSПрокси(); + + Если СтрокаСодержитСимвол(ИмяПользователя, НедопустимыеСимволы) Тогда + + СтрокаСообщения = НСтр("ru = 'В имени пользователя %1 содержатся недопустимые символы. + |Имя пользователя не должно содержать символы %2.'"); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ИмяПользователя, НедопустимыеСимволы); + + ВызватьИсключение СтрокаСообщения; + + КонецЕсли; + +КонецПроцедуры + +Процедура ПроверитьКорректностьФорматаАдресаWSПрокси(Знач АдресWSПрокси) + + ЭтоИнтернетАдрес = Ложь; + ДопустимыеПрефиксыWSПрокси = ДопустимыеПрефиксыWSПрокси(); + + Для Каждого Префикс Из ДопустимыеПрефиксыWSПрокси Цикл + Если Лев(НРег(АдресWSПрокси), СтрДлина(Префикс)) = НРег(Префикс) Тогда + ЭтоИнтернетАдрес = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Если Не ЭтоИнтернетАдрес Тогда + СтрокаПрефиксов = ""; + Для Каждого Префикс Из ДопустимыеПрефиксыWSПрокси Цикл + СтрокаПрефиксов = СтрокаПрефиксов + ?(ПустаяСтрока(СтрокаПрефиксов), """", " или """) + Префикс + """"; + КонецЦикла; + + СтрокаСообщения = НСтр("ru = 'Неверный формат адреса ""%1"". + |Адрес должен начинаться с префикса Интернет протокола %2 (например: ""http://myserver.com/service"").'"); + + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, АдресWSПрокси, СтрокаПрефиксов); + + ВызватьИсключение СтрокаСообщения; + КонецЕсли; + +КонецПроцедуры + +Функция СтрокаСодержитСимвол(Знач Строка, Знач СтрокаСимволов) + + Для Индекс = 1 По СтрДлина(СтрокаСимволов) Цикл + Символ = Сред(СтрокаСимволов, Индекс, 1); + + Если СтрНайти(Строка, Символ) <> 0 Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + Возврат Ложь; + +КонецФункции + +Функция ДопустимыеПрефиксыWSПрокси() + + Результат = Новый Массив(); + + Результат.Добавить("http"); + Результат.Добавить("https"); + + Возврат Результат; + +КонецФункции + #Область ОбновлениеИнформационнойБазы // Устанавливает признак того, что для всех узлов планов обмена необходимо выполнить процедуру @@ -3214,19 +3350,13 @@ // Процедура УстановитьРежимВыгрузкиОбъектовДляВсехУзловИнформационнойБазы() Экспорт - СписокПлановОбмена = ОбменДаннымиПовтИсп.СписокПлановОбменаБСП(); - - Для Каждого Элемент Из СписокПлановОбмена Цикл + Для Каждого ИмяПланаОбмена Из ОбменДаннымиПовтИсп.ПланыОбменаБСП() Цикл - ИмяПланаОбмена = Элемент.Значение; - - Если Метаданные.ПланыОбмена[ИмяПланаОбмена].РаспределеннаяИнформационнаяБаза Тогда + Если ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(ИмяПланаОбмена) Тогда Продолжить; КонецЕсли; - МассивУзлов = ОбменДаннымиПовтИсп.УзлыПланаОбмена(ИмяПланаОбмена); - - Для Каждого Узел Из МассивУзлов Цикл + Для Каждого Узел Из УзлыПланаОбмена(ИмяПланаОбмена) Цикл ИменаРеквизитов = ОбщегоНазначения.ИменаРеквизитовПоТипу(Узел, Тип("ПеречислениеСсылка.РежимыВыгрузкиОбъектовОбмена")); @@ -3309,7 +3439,7 @@ Процедура ОбновитьКонстантуНастройкаПодчиненногоУзлаРИБЗавершена() Экспорт Если ЭтоПодчиненныйУзелРИБ() - И РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспортаДляУзлаЗаданы(ГлавныйУзел()) Тогда + И РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспортаДляУзлаЗаданы(ГлавныйУзел()) Тогда Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Установить(Истина); @@ -3364,29 +3494,29 @@ КонецПроцедуры -// Устанавливает значение реквизита WSЗапомнитьПароль в РС.НастройкиТранспортаОбмена в значение Истина. +// Устанавливает значение реквизита WSЗапомнитьПароль в РС.УдалитьНастройкиТранспортаОбмена в значение Истина. // Процедура УстановитьПризнакСохраненияПароляДляОбменаЧерезИнтернет() Экспорт ТекстЗапроса = "ВЫБРАТЬ - | НастройкиТранспортаОбмена.Узел КАК Узел + | НастройкиТранспорта.УзелИнформационнойБазы КАК УзелИнформационнойБазы |ИЗ - | РегистрСведений.НастройкиТранспортаОбмена КАК НастройкиТранспортаОбмена + | РегистрСведений.УдалитьНастройкиТранспортаОбмена КАК НастройкиТранспорта |ГДЕ - | НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию = ЗНАЧЕНИЕ(Перечисление.ВидыТранспортаСообщенийОбмена.WS)"; + | НастройкиТранспорта.ВидТранспортаСообщенийОбменаПоУмолчанию = ЗНАЧЕНИЕ(Перечисление.ВидыТранспортаСообщенийОбмена.WS)"; Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; - Выборка = Запрос.Выполнить().Выбрать(); + Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл - // обновляем запись в РС СтруктураЗаписи = Новый Структура; - СтруктураЗаписи.Вставить("Узел", Выборка.Узел); + СтруктураЗаписи.Вставить("УзелИнформационнойБазы", Выборка.УзелИнформационнойБазы); СтруктураЗаписи.Вставить("WSЗапомнитьПароль", Истина); - РегистрыСведений.НастройкиТранспортаОбмена.ОбновитьЗапись(СтруктураЗаписи); + + ОбновитьЗаписьВРегистрСведений(СтруктураЗаписи, "УдалитьНастройкиТранспортаОбмена"); КонецЦикла; @@ -3512,13 +3642,14 @@ КоличествоЭлементовВТранзакции = КоличествоЭлементовВТранзакцииВыполняемогоДействия(Выборка.ВыполняемоеДействие); - ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыПоВнешнемуСоединению(ОтказПоСтрокеСценария, Выборка.УзелИнформационнойБазы, Выборка.ВыполняемоеДействие, КоличествоЭлементовВТранзакции); + ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыПоВнешнемуСоединению(ОтказПоСтрокеСценария, + Выборка.УзелИнформационнойБазы, Выборка.ВыполняемоеДействие, КоличествоЭлементовВТранзакции); ИначеЕсли Выборка.ОбменЧерезВебСервис Тогда ПараметрыОбмена = ПараметрыОбмена(); - ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыЧерезWebСервис(Выборка.УзелИнформационнойБазы, - Выборка.ВыполняемоеДействие, ПараметрыОбмена, ОтказПоСтрокеСценария); + ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыЧерезWebСервис(ОтказПоСтрокеСценария, + Выборка.УзелИнформационнойБазы, Выборка.ВыполняемоеДействие, ПараметрыОбмена); Иначе @@ -3704,7 +3835,7 @@ ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы); ТекущийУзелПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(ИмяПланаОбмена); - КодТекущегоУзлаПланаОбмена = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущийУзелПланаОбмена, "Код"); + КодТекущегоУзлаПланаОбмена = ИдентификаторЭтогоУзлаДляОбмена(УзелИнформационнойБазы); ШаблонИмениФайлаСообщения = ШаблонИмениФайлаСообщения(ТекущийУзелПланаОбмена, УзелИнформационнойБазы, Ложь); @@ -3824,7 +3955,7 @@ ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы); ТекущийУзелПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(ИмяПланаОбмена); - КодТекущегоУзлаПланаОбмена = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущийУзелПланаОбмена, "Код"); + КодТекущегоУзлаПланаОбмена = ИдентификаторЭтогоУзлаДляОбмена(УзелИнформационнойБазы); // Параметры, которые будут определены в функции. ИмяКаталогаСообщенияОбмена = ""; @@ -4109,7 +4240,8 @@ КонецПроцедуры // Выполняет удаление файлов сообщений обмена, которые не были удалены из-за сбоев в работе системы. -// Удалению подлежат файлы с датой размещения более суток от текущей универсальной даты. +// Удалению подлежат файлы обмена с датой размещения более суток от текущей универсальной даты, +// и файлы для сопоставления с датой размещения более 7 суток от текущей универсальной даты. // Анализируется РС.СообщенияОбменаДанными и РС.СообщенияОбменаДаннымиОбластейДанных. // // Параметры: @@ -4119,7 +4251,7 @@ ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.УдалениеНеактуальнойИнформацииСинхронизации); - Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") Тогда + Если Не ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") Тогда Возврат; КонецЕсли; @@ -4127,45 +4259,81 @@ УстановитьПривилегированныйРежим(Истина); - // Удаляем неактуальные сообщения обмена, отмеченные в РС.СообщенияОбменаДанными. - ТекстЗапроса = - "ВЫБРАТЬ - | СообщенияОбменаДанными.ИдентификаторСообщения КАК ИдентификаторСообщения, - | СообщенияОбменаДанными.ИмяФайлаСообщения КАК ИмяФайла - |ИЗ - | РегистрСведений.СообщенияОбменаДанными КАК СообщенияОбменаДанными - |ГДЕ - | СообщенияОбменаДанными.ДатаЗакладкиСообщения < &ДатаАктуальности"; - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ДатаАктуальности", ТекущаяУниверсальнаяДата() - 60 * 60 * 24); - Запрос.Текст = ТекстЗапроса; - - Выборка = Запрос.Выполнить().Выбрать(); - - Пока Выборка.Следующий() Цикл + Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + // Удаляем неактуальные сообщения обмена, отмеченные в РС.СообщенияОбменаДанными. + ТекстЗапроса = + "ВЫБРАТЬ + | СообщенияОбменаДанными.ИдентификаторСообщения КАК ИдентификаторСообщения, + | СообщенияОбменаДанными.ИмяФайлаСообщения КАК ИмяФайла, + | СообщенияОбменаДанными.ДатаЗакладкиСообщения КАК ДатаЗакладкиСообщения, + | ОбщиеНастройкиУзловИнформационныхБаз.УзелИнформационнойБазы КАК УзелИнформационнойБазы, + | ВЫБОР + | КОГДА ОбщиеНастройкиУзловИнформационныхБаз.УзелИнформационнойБазы ЕСТЬ NULL + | ТОГДА ЛОЖЬ + | ИНАЧЕ ИСТИНА + | КОНЕЦ КАК СообщениеДляСопоставления + |ПОМЕСТИТЬ ВТСообщенияОбмена + |ИЗ + | РегистрСведений.СообщенияОбменаДанными КАК СообщенияОбменаДанными + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОбщиеНастройкиУзловИнформационныхБаз КАК ОбщиеНастройкиУзловИнформационныхБаз + | ПО (ОбщиеНастройкиУзловИнформационныхБаз.СообщениеДляСопоставленияДанных = СообщенияОбменаДанными.ИдентификаторСообщения) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВТСообщенияОбмена.ИдентификаторСообщения КАК ИдентификаторСообщения, + | ВТСообщенияОбмена.ИмяФайла КАК ИмяФайла, + | ВТСообщенияОбмена.СообщениеДляСопоставления КАК СообщениеДляСопоставления, + | ВТСообщенияОбмена.УзелИнформационнойБазы КАК УзелИнформационнойБазы + |ИЗ + | ВТСообщенияОбмена КАК ВТСообщенияОбмена + |ГДЕ + | ВЫБОР + | КОГДА ВТСообщенияОбмена.СообщениеДляСопоставления + | ТОГДА ВТСообщенияОбмена.ДатаЗакладкиСообщения < &ДатаАктуальностиДляСопоставления + | ИНАЧЕ ВТСообщенияОбмена.ДатаЗакладкиСообщения < &ДатаАктуальности + | КОНЕЦ"; - ПолноеИмяФайлаСообщения = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременногоХранилищаФайлов(), Выборка.ИмяФайла); + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ДатаАктуальности", ТекущаяУниверсальнаяДата() - 60 * 60 * 24); + Запрос.УстановитьПараметр("ДатаАктуальностиДляСопоставления", ТекущаяУниверсальнаяДата() - 60 * 60 * 24 * 7); + Запрос.Текст = ТекстЗапроса; - ФайлСообщения = Новый Файл(ПолноеИмяФайлаСообщения); + Выборка = Запрос.Выполнить().Выбрать(); - Если ФайлСообщения.Существует() Тогда + Пока Выборка.Следующий() Цикл - Попытка - УдалитьФайлы(ФайлСообщения.ПолноеИмя); - Исключение - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - Продолжить; - КонецПопытки; - КонецЕсли; + ПолноеИмяФайлаСообщения = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременногоХранилищаФайлов(), Выборка.ИмяФайла); + + ФайлСообщения = Новый Файл(ПолноеИмяФайлаСообщения); + + Если ФайлСообщения.Существует() Тогда + + Попытка + УдалитьФайлы(ФайлСообщения.ПолноеИмя); + Исключение + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Продолжить; + КонецПопытки; + КонецЕсли; + + // Удаляем информацию о файле сообщения обмена из хранилища. + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("ИдентификаторСообщения", Строка(Выборка.ИдентификаторСообщения)); + РегистрыСведений.СообщенияОбменаДанными.УдалитьЗапись(СтруктураЗаписи); + + Если Выборка.СообщениеДляСопоставления Тогда + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("УзелИнформационнойБазы", Выборка.УзелИнформационнойБазы); + СтруктураЗаписи.Вставить("СообщениеДляСопоставленияДанных", ""); + + ОбновитьЗаписьВРегистрСведений(СтруктураЗаписи, "ОбщиеНастройкиУзловИнформационныхБаз"); + КонецЕсли; + + КонецЦикла; - // Удаляем информацию о файле сообщения обмена из хранилища. - СтруктураЗаписи = Новый Структура; - СтруктураЗаписи.Вставить("ИдентификаторСообщения", Строка(Выборка.ИдентификаторСообщения)); - РегистрыСведений.СообщенияОбменаДанными.УдалитьЗапись(СтруктураЗаписи); - - КонецЦикла; + КонецЕсли; // Удаляем неактуальные сообщения обмена, отмеченные в РС.СообщенияОбменаДаннымиОбластейДанных. Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса") Тогда @@ -4204,7 +4372,7 @@ ВыполнитьВыгрузку = Истина; - НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспорта(УзелИнформационнойБазы); + НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспорта(УзелИнформационнойБазы); ВидТранспорта = НастройкиТранспорта.ВидТранспортаСообщенийОбменаПоУмолчанию; @@ -4430,6 +4598,29 @@ КонецЕсли; + СостояниеОбработки = ОбновлениеИнформационнойБазы.ОбъектОбработан(ПараметрыОбмена.УзелИнформационнойБазы); + + Если Не СостояниеОбработки.Обработан Тогда + РегистрыСведений.УдалитьНастройкиТранспортаОбмена.ПеренестиНастройкиТранспортаОбменаДаннымиКорреспондента(ПараметрыОбмена.УзелИнформационнойБазы); + РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ОбновитьОбщиеНастройкиКорреспондента(ПараметрыОбмена.УзелИнформационнойБазы); + РегистрыСведений.НастройкиОбменаДаннымиXDTO.ОбновитьНастройкиОбменаДаннымиXDTOКорреспондента(ПараметрыОбмена.УзелИнформационнойБазы); + КонецЕсли; + + Если Не НастройкаСинхронизацииЗавершена(ПараметрыОбмена.УзелИнформационнойБазы) Тогда + + ПредставлениеПрограммы = ?(ОбщегоНазначения.РазделениеВключено(), + Метаданные.Синоним, ОбменДаннымиПовтИсп.ИмяЭтойИнформационнойБазы()); + + ДанныеКорреспондента = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ПараметрыОбмена.УзелИнформационнойБазы, + "Код, Наименование"); + + СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В ""%1"" настройка синхронизации данных с ""%2"" (идентификатор ""%3"") еще не завершена.'"), + ПредставлениеПрограммы, ДанныеКорреспондента.Наименование, ДанныеКорреспондента.Код); + + ВызватьИсключение СтрокаСообщенияОбОшибке; + КонецЕсли; + // ИНИЦИАЛИЗАЦИЯ ОБМЕНА ДАННЫМИ СтруктураНастроекОбмена = ОбменДаннымиПовтИсп.НастройкиОбменаУзлаИнформационнойБазы( ПараметрыОбмена.УзелИнформационнойБазы, ПараметрыОбмена.ДействиеПриОбмене, Неопределено, Ложь); @@ -4561,7 +4752,8 @@ КонецФункции -Процедура ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыЧерезWebСервис(УзелИнформационнойБазы, ДействиеПриОбмене, ПараметрыОбмена, Отказ) +Процедура ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыЧерезWebСервис(Отказ, + УзелИнформационнойБазы, ДействиеПриОбмене, ПараметрыОбмена) ТолькоПараметры = ПараметрыОбмена.ТолькоПараметры; @@ -4736,10 +4928,16 @@ СтрокаСообщенияОбОшибке = ""; // Получаем прокси веб-сервиса для узла информационной базы. + МинимальнаяВерсия = ""; + Если ПараметрыОбмена.СообщениеДляСопоставленияДанных Тогда + МинимальнаяВерсия = "3.0.1.1"; + КонецЕсли; + Прокси = WSПроксиДляУзлаИнформационнойБазы( УзелИнформационнойБазы, СтрокаСообщенияОбОшибке, - ПараметрыОбмена.ПараметрыАутентификации); + ПараметрыОбмена.ПараметрыАутентификации, + МинимальнаяВерсия); Если Прокси = Неопределено Тогда @@ -4803,18 +5001,24 @@ ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; + + Если ПараметрыОбмена.СообщениеДляСопоставленияДанных Тогда + Прокси.PutMessageForDataMatching(СтруктураНастроекОбмена.ИмяПланаОбмена, + СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод, + ИдентификаторФайлаСтрокой); + Иначе + Прокси.DownloadData(СтруктураНастроекОбмена.ИмяПланаОбмена, + СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод, + ИдентификаторФайлаСтрокой, + ПараметрыОбмена.ДлительнаяОперация, + ПараметрыОбмена.ИдентификаторОперации, + ПараметрыОбмена.ДлительнаяОперацияРазрешена); - Прокси.DownloadData(СтруктураНастроекОбмена.ИмяПланаОбмена, - СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод, - ИдентификаторФайлаСтрокой, - ПараметрыОбмена.ДлительнаяОперация, - ПараметрыОбмена.ИдентификаторОперации, - ПараметрыОбмена.ДлительнаяОперацияРазрешена); - - Если ПараметрыОбмена.ДлительнаяОперация Тогда - ЗаписьЖурналаРегистрацииОбменаДанными(НСтр("ru = 'Ожидание загрузки данных в базе-корреспонденте...'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), СтруктураНастроекОбмена); - Возврат; + Если ПараметрыОбмена.ДлительнаяОперация Тогда + ЗаписьЖурналаРегистрацииОбменаДанными(НСтр("ru = 'Ожидание загрузки данных в базе-корреспонденте...'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), СтруктураНастроекОбмена); + Возврат; + КонецЕсли; КонецЕсли; Исключение @@ -4843,8 +5047,10 @@ // Отправка сообщения обмена только в случае успешной выгрузки данных. Если РезультатВыполненияОбменаВыполнено(СтруктураНастроекОбмена.РезультатВыполненияОбмена) Тогда - Прокси.Download(СтруктураНастроекОбмена.ИмяПланаОбмена, СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод, Новый ХранилищеЗначения(СообщениеОбмена, Новый СжатиеДанных(9))); - + Прокси.Download(СтруктураНастроекОбмена.ИмяПланаОбмена, + СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод, + Новый ХранилищеЗначения(СообщениеОбмена, Новый СжатиеДанных(9))); + КонецЕсли; Исключение @@ -4866,7 +5072,8 @@ Процедура ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыПоВнешнемуСоединению(Отказ, УзелИнформационнойБазы, ДействиеПриОбмене, - КоличествоЭлементовВТранзакции) + КоличествоЭлементовВТранзакции, + СообщениеДляСопоставленияДанных = Ложь) УстановитьПривилегированныйРежим(Истина); @@ -5111,15 +5318,22 @@ УстановитьОбщиеПараметрыДляОбработкиОбменаДанными(ОбработкаДляЗагрузкиДанных, СтруктураНастроекОбменаВнешнееСоединение, ОбменСБСП20); + Если СообщениеДляСопоставленияДанных Тогда + ОбработкаДляЗагрузкиДанных.РежимЗагрузкиДанных = "ЗагрузкаСообщенияДляСопоставленияДанных"; + КонецЕсли; + ОбработкаДляЗагрузкиДанных.КоличествоОбъектовНаТранзакцию = СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции; ОбработкаДляЗагрузкиДанных.ИспользоватьТранзакции = (ОбработкаДляЗагрузкиДанных.КоличествоОбъектовНаТранзакцию <> 1); // Получаем инициализированную обработку для выгрузки данных. ОбработкаОбменаДаннымиXML = СтруктураНастроекОбмена.ОбработкаОбменаДанными; ОбработкаОбменаДаннымиXML.ИмяФайлаОбмена = ""; - Если НЕ ЭтоПланОбменаXDTO Тогда + + Если Не ЭтоПланОбменаXDTO Тогда + ОбработкаОбменаДаннымиXML.ВнешнееСоединение = ВнешнееСоединение; ОбработкаОбменаДаннымиXML.ЗагрузкаДанныхВыполняетсяВоВнешнемСоединении = Истина; + КонецЕсли; // ВЫГРУЗКА (ЭТА БАЗА) - ЗАГРУЗКА (КОРРЕСПОНДЕНТ) @@ -5182,7 +5396,25 @@ // Загрузка данных только при успешном получении сообщения обмена. Если СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено Тогда - ПрочитатьСообщениеСИзменениямиДляУзла(СтруктураНастроекОбмена, СообщениеОбмена,, ТолькоПараметры); + Если СтруктураНастроекОбмена.ДополнительныеПараметры.Свойство("СообщениеДляСопоставленияДанных") Тогда + + ИмяФайлаДляПомещенияВХранилище = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( + КаталогВременногоХранилищаФайлов(), + УникальноеИмяФайлаСообщенияОбмена()); + + ПереместитьФайл(СообщениеОбмена, ИмяФайлаДляПомещенияВХранилище); + + ИдентификаторФайла = ПоместитьФайлВХранилище(ИмяФайлаДляПомещенияВХранилище); + + РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ПоместитьСообщениеДляСопоставленияДанных( + СтруктураНастроекОбмена.УзелИнформационнойБазы, ИдентификаторФайла); + + Возврат; + + КонецЕсли; + + + ПрочитатьСообщениеСИзменениямиДляУзла(СтруктураНастроекОбмена, СообщениеОбмена, , ТолькоПараметры); КонецЕсли; @@ -5483,7 +5715,8 @@ // Параметры: // СтруктураНастроекОбмена - Структура - структура со всеми необходимыми данными и объектами для выполнения обмена. // -Процедура ПрочитатьСообщениеСИзменениямиДляУзла(СтруктураНастроекОбмена, Знач ИмяФайлаСообщенияОбмена = "", СообщениеОбмена = "", Знач ТолькоПараметры = Ложь) +Процедура ПрочитатьСообщениеСИзменениямиДляУзла(СтруктураНастроекОбмена, + Знач ИмяФайлаСообщенияОбмена = "", СообщениеОбмена = "", Знач ТолькоПараметры = Ложь) Если СтруктураНастроекОбмена.ЭтоОбменВРИБ Тогда // Обмен в РИБ @@ -5559,6 +5792,12 @@ // загрузка данных ОбработкаОбменаДаннымиXML.ВыполнитьЗагрузкуДанных(); + Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(СтруктураНастроекОбмена.ИмяПланаОбмена) Тогда + ПолученыДанныеДляСопоставления = (ОбработкаОбменаДаннымиXML.КомпонентыОбмена.НомерВходящегоСообщения > 0 + И ОбработкаОбменаДаннымиXML.КомпонентыОбмена.НомерСообщенияПолученногоКорреспондентом = 0); + СтруктураНастроекОбмена.ДополнительныеПараметры.Вставить("ПолученыДанныеДляСопоставления", ПолученыДанныеДляСопоставления); + КонецЕсли; + СтруктураНастроекОбмена.РезультатВыполненияОбмена = ОбработкаОбменаДаннымиXML.РезультатВыполненияОбмена(); // Фиксируем состояние выполнения обмена данными. @@ -6090,6 +6329,24 @@ КонецФункции +Функция СобытиеЖурналаРегистрацииУдалениеОбменаДанными() Экспорт + + Возврат НСтр("ru = 'Обмен данными.Удаление обмена данными'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + +КонецФункции + +Функция СобытиеЖурналаРегистрацииРегистрацияДанныхДляНачальнойВыгрузки() Экспорт + + Возврат НСтр("ru = 'Обмен данными.Регистрация данных для начальной выгрузки'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + +КонецФункции + +Функция СобытиеЖурналаРегистрацииВыгрузкаДанныхДляСопоставления() Экспорт + + Возврат НСтр("ru = 'Обмен данными.Выгрузка данных для сопоставления'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + +КонецФункции + Функция СобытиеЖурналаРегистрацииУдалениеВременногоФайла() Экспорт Возврат НСтр("ru = 'Обмен данными.Удаление временного файла'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); @@ -6393,6 +6650,7 @@ Прокси.SaveFileFromParts(ИдентификаторСессии, КоличествоЧастей, ИдентификаторФайла); Возврат ИдентификаторФайла; + КонецФункции // Получение файла по его идентификатору. @@ -6420,6 +6678,7 @@ КонецЕсли; Возврат ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременногоХранилищаФайлов(), ИмяФайла); + КонецФункции // Сохранение файла. @@ -6455,6 +6714,7 @@ КонецЕсли; Возврат ИдентификаторФайла; + КонецФункции // Получение имени файла по его идентификатору из хранилища. @@ -6911,13 +7171,13 @@ #Область ОберткиДляРаботыСПрограммнымИнтерфейсомМенеджераПланаОбмена -Функция НастройкаОтборовНаУзле(Знач ИмяПланаОбмена, Знач ВерсияКорреспондента, ИмяФормы = "", ИдентификаторНастройки = "") Экспорт +Функция НастройкаОтборовНаУзле(Знач ИмяПланаОбмена, Знач ВерсияКорреспондента, ИдентификаторНастройки = "") Экспорт Если ПустаяСтрока(ВерсияКорреспондента) Тогда ВерсияКорреспондента = "0.0.0.0"; КонецЕсли; ОписаниеВариантаНастройки = ОбменДаннымиПовтИсп.ОписаниеВариантаНастройки(ИмяПланаОбмена, ИдентификаторНастройки, ВерсияКорреспондента); - ИмяФормы = ОписаниеВариантаНастройки.ИмяФормыОтборов; + Результат = Неопределено; Если ЗначениеЗаполнено(ОписаниеВариантаНастройки.Отборы) Тогда Результат = ОписаниеВариантаНастройки.Отборы; @@ -6976,8 +7236,7 @@ КонецФункции -Функция ОбщиеДанныеУзлов(Знач ИмяПланаОбмена, Знач ВерсияКорреспондента, Знач ИдентификаторНастройки, - ИмяФормы = "") Экспорт +Функция ОбщиеДанныеУзлов(Знач ИмяПланаОбмена, Знач ВерсияКорреспондента, Знач ИдентификаторНастройки) Экспорт Если ПустаяСтрока(ВерсияКорреспондента) Тогда ВерсияКорреспондента = "0.0.0.0"; @@ -6985,76 +7244,9 @@ ОписаниеВариантаНастройки = ОбменДаннымиПовтИсп.ОписаниеВариантаНастройки(ИмяПланаОбмена, ИдентификаторНастройки, ВерсияКорреспондента); - ИмяФормы = ОписаниеВариантаНастройки.ИмяФормыОбщиеДанныеУзлов; - Результат = ОписаниеВариантаНастройки.ОбщиеДанныеУзлов; Возврат СтрЗаменить(Результат, " ", ""); -КонецФункции - -Функция НастройкаОтборовНаУзлеБазыКорреспондента(Знач ИмяПланаОбмена, Знач ВерсияКорреспондента, - ИмяФормы = "", ИдентификаторНастройки = "") Экспорт - - Если ПустаяСтрока(ВерсияКорреспондента) Тогда - ВерсияКорреспондента = "0.0.0.0"; - КонецЕсли; - ОписаниеВариантаНастройки = ОбменДаннымиПовтИсп.ОписаниеВариантаНастройки(ИмяПланаОбмена, - ИдентификаторНастройки, ВерсияКорреспондента); - ИмяФормы = ОписаниеВариантаНастройки.ИмяФормыОтборовКорреспондента; - - Результат = Неопределено; - - Если ЗначениеЗаполнено(ОписаниеВариантаНастройки.ОтборыКорреспондента) Тогда - Результат = ОписаниеВариантаНастройки.ОтборыКорреспондента; - КонецЕсли; - - Если Результат = Неопределено Тогда - Результат = Новый Структура; - КонецЕсли; - - Возврат Результат; -КонецФункции - -Функция ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента(Знач ИмяПланаОбмена, Знач ВерсияКорреспондента, - ИмяФормы = "", ИдентификаторНастройки = "") Экспорт - - Если ПустаяСтрока(ВерсияКорреспондента) Тогда - ВерсияКорреспондента = "0.0.0.0"; - КонецЕсли; - ОписаниеВариантаНастройки = ОбменДаннымиПовтИсп.ОписаниеВариантаНастройки(ИмяПланаОбмена, - ИдентификаторНастройки, ВерсияКорреспондента); - ИмяФормы = ОписаниеВариантаНастройки.ИмяФормыЗначенийПоУмолчаниюКорреспондента; - Результат = Неопределено; - Если ЗначениеЗаполнено(ОписаниеВариантаНастройки.ЗначенияПоУмолчаниюКорреспондента) Тогда - Результат = ОписаниеВариантаНастройки.ЗначенияПоУмолчаниюКорреспондента; - КонецЕсли; - - Если Результат = Неопределено Тогда - Результат = Новый Структура; - КонецЕсли; - - Возврат Результат; -КонецФункции - -Функция ОписаниеОграниченийПередачиДанныхБазыКорреспондента(Знач ИмяПланаОбмена, Знач НастройкаОтборовНаУзле, Знач ВерсияКорреспондента, ИдентификаторНастройки = "") Экспорт - Если НЕ ЕстьАлгоритмМенеджераПланаОбмена("ОписаниеОграниченийПередачиДанныхБазыКорреспондента", ИмяПланаОбмена) Тогда - Возврат ""; - ИначеЕсли ПустаяСтрока(ВерсияКорреспондента) Тогда - ВерсияКорреспондента = "0.0.0.0"; - КонецЕсли; - - Возврат ПланыОбмена[ИмяПланаОбмена].ОписаниеОграниченийПередачиДанныхБазыКорреспондента(НастройкаОтборовНаУзле, ВерсияКорреспондента, ИдентификаторНастройки); - -КонецФункции - -Функция ОписаниеЗначенийПоУмолчаниюБазыКорреспондента(Знач ИмяПланаОбмена, Знач ЗначенияПоУмолчаниюНаУзле, Знач ВерсияКорреспондента, ИдентификаторНастройки = "") Экспорт - Если НЕ ЕстьАлгоритмМенеджераПланаОбмена("ОписаниеЗначенийПоУмолчаниюБазыКорреспондента", ИмяПланаОбмена) Тогда - Возврат ""; - ИначеЕсли ПустаяСтрока(ВерсияКорреспондента) Тогда - ВерсияКорреспондента = "0.0.0.0"; - КонецЕсли; - - Возврат ПланыОбмена[ИмяПланаОбмена].ОписаниеЗначенийПоУмолчаниюБазыКорреспондента(ЗначенияПоУмолчаниюНаУзле, ВерсияКорреспондента, ИдентификаторНастройки); КонецФункции @@ -7149,11 +7341,14 @@ // Булево. // Функция ЕстьАлгоритмМенеджераПланаОбмена(ИмяАлгоритма, ИмяПланаОбмена) Экспорт + НастройкиПланаОбмена = ОбменДаннымиПовтИсп.НастройкиПланаОбмена(ИмяПланаОбмена); - АлгоритмыМодуля = НастройкиПланаОбмена.Алгоритмы; + АлгоритмНайден = Неопределено; - АлгоритмыМодуля.Свойство(ИмяАлгоритма, АлгоритмНайден); + НастройкиПланаОбмена.Алгоритмы.Свойство(ИмяАлгоритма, АлгоритмНайден); + Возврат (АлгоритмНайден = Истина); + КонецФункции #КонецОбласти @@ -7422,12 +7617,7 @@ // возвращаемое значение МассивПлановОбмена = Новый Массив; - // Список всех узлов в конфигурации. - СписокПлановОбмена = ОбменДаннымиПовтИсп.СписокПлановОбменаБСП(); - - Для Каждого Элемент Из СписокПлановОбмена Цикл - - ИмяПланаОбмена = Элемент.Значение; + Для Каждого ИмяПланаОбмена Из ОбменДаннымиПовтИсп.ПланыОбменаБСП() Цикл Если Не ПланОбменаНеСодержитУзлов(ИмяПланаОбмена) Тогда @@ -7592,18 +7782,17 @@ Функция ПланОбменаНеСодержитУзлов(Знач ИмяПланаОбмена) - ТекстЗапроса = " - |ВЫБРАТЬ ПЕРВЫЕ 1 1 + Запрос = Новый Запрос( + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА |ИЗ - | ПланОбмена." + ИмяПланаОбмена + " КАК ПланОбмена + | #ИмяТаблицыПланаОбмена КАК ПланОбмена |ГДЕ - | НЕ ПланОбмена.ЭтотУзел - |"; + | НЕ ПланОбмена.ЭтотУзел"); - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; + Запрос.Текст = СтрЗаменить(Запрос.Текст, "#ИмяТаблицыПланаОбмена", "ПланОбмена." + ИмяПланаОбмена); - Возврат Запрос.Выполнить().Пустой() + Возврат Запрос.Выполнить().Пустой(); КонецФункции @@ -7654,8 +7843,8 @@ ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы); - НастройкаОтборовНаУзле = НастройкаОтборовНаУзле(ИмяПланаОбмена, ВерсияКорреспондента,, - СохраненныйВариантНастройкиУзлаПланаОбмена(УзелИнформационнойБазы)); + НастройкаОтборовНаУзле = НастройкаОтборовНаУзле(ИмяПланаОбмена, + ВерсияКорреспондента, СохраненныйВариантНастройкиУзлаПланаОбмена(УзелИнформационнойБазы)); Для Каждого Настройка Из НастройкаОтборовНаУзле Цикл @@ -7779,10 +7968,10 @@ СтруктураСвойств = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СтруктураНастроекОбмена.УзелИнформационнойБазы, "Код, Наименование"); - СтруктураНастроекОбмена.УзелИнформационнойБазыКод = СтруктураСвойств.Код; + СтруктураНастроекОбмена.УзелИнформационнойБазыКод = ИдентификаторУзлаКорреспондентаДляОбмена(СтруктураНастроекОбмена.УзелИнформационнойБазы); СтруктураНастроекОбмена.УзелИнформационнойБазыНаименование = СтруктураСвойств.Наименование; - СтруктураНастроекОбмена.НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспорта(СтруктураНастроекОбмена.УзелИнформационнойБазы); + СтруктураНастроекОбмена.НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспорта(СтруктураНастроекОбмена.УзелИнформационнойБазы); Если КоличествоЭлементовВТранзакции = Неопределено Тогда КоличествоЭлементовВТранзакции = КоличествоЭлементовВТранзакцииВыполняемогоДействия(ДействиеПриОбмене); @@ -7797,7 +7986,7 @@ СтруктураНастроекОбмена.ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(СтруктураНастроекОбмена.УзелИнформационнойБазы); СтруктураНастроекОбмена.ТекущийУзелПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(СтруктураНастроекОбмена.ИмяПланаОбмена); - СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СтруктураНастроекОбмена.ТекущийУзелПланаОбмена, "Код"); + СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод = ИдентификаторЭтогоУзлаДляОбмена(СтруктураНастроекОбмена.УзелИнформационнойБазы); // Получаем ключ сообщения для ЖР. СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = КлючСообщенияЖурналаРегистрации(СтруктураНастроекОбмена.УзелИнформационнойБазы, СтруктураНастроекОбмена.ДействиеПриОбмене); @@ -7957,8 +8146,12 @@ // Получаем ключ сообщения для ЖР. СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = КлючСообщенияЖурналаРегистрации(СтруктураНастроекОбмена.УзелИнформационнойБазы, СтруктураНастроекОбмена.ДействиеПриОбмене); - // - СтруктураНастроекОбмена.НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспорта(СтруктураНастроекОбмена.УзелИнформационнойБазы, СтруктураНастроекОбмена.ВидТранспортаОбмена); + Если ОбменДаннымиПовтИсп.ЭтоУзелОбменаСообщениями(СтруктураНастроекОбмена.УзелИнформационнойБазы) Тогда + МодульНастройкиТранспортаОбменаСообщениями = РегистрыСведений["НастройкиТранспортаОбменаСообщениями"]; + СтруктураНастроекОбмена.НастройкиТранспорта = МодульНастройкиТранспортаОбменаСообщениями.НастройкиТранспортаWS(СтруктураНастроекОбмена.УзелИнформационнойБазы); + Иначе + СтруктураНастроекОбмена.НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспорта(СтруктураНастроекОбмена.УзелИнформационнойБазы, СтруктураНастроекОбмена.ВидТранспортаОбмена); + КонецЕсли; СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции = КоличествоЭлементовВТранзакцииВыполняемогоДействия(СтруктураНастроекОбмена.ДействиеПриОбмене); @@ -7970,11 +8163,17 @@ СтруктураСвойств = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СтруктураНастроекОбмена.УзелИнформационнойБазы, "Код, Наименование"); - СтруктураНастроекОбмена.УзелИнформационнойБазыКод = СтруктураСвойств.Код; + СтруктураНастроекОбмена.УзелИнформационнойБазыКод = ИдентификаторУзлаКорреспондентаДляОбмена(СтруктураНастроекОбмена.УзелИнформационнойБазы); СтруктураНастроекОбмена.УзелИнформационнойБазыНаименование = СтруктураСвойств.Наименование; // Получаем настройки транспорта обмена. - СтруктураНастроекОбмена.НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспорта(СтруктураНастроекОбмена.УзелИнформационнойБазы); + Если ОбменДаннымиПовтИсп.ЭтоУзелОбменаСообщениями(СтруктураНастроекОбмена.УзелИнформационнойБазы) Тогда + МодульНастройкиТранспортаОбменаСообщениями = РегистрыСведений["НастройкиТранспортаОбменаСообщениями"]; + СтруктураНастроекОбмена.НастройкиТранспорта = МодульНастройкиТранспортаОбменаСообщениями.НастройкиТранспортаWS( + СтруктураНастроекОбмена.УзелИнформационнойБазы); + Иначе + СтруктураНастроекОбмена.НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспорта(СтруктураНастроекОбмена.УзелИнформационнойБазы); + КонецЕсли; Если СтруктураНастроекОбмена.НастройкиТранспорта <> Неопределено Тогда @@ -8012,11 +8211,11 @@ СтруктураНастроекОбмена.ПроизводитьЗагрузкуДанных = (СтруктураНастроекОбмена.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ЗагрузкаДанных); СтруктураНастроекОбмена.ПроизводитьВыгрузкуДанных = (СтруктураНастроекОбмена.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ВыгрузкаДанных); - СтруктураНастроекОбмена.ИмяПланаОбмена = СтруктураНастроекОбмена.УзелИнформационнойБазы.Метаданные().Имя; + СтруктураНастроекОбмена.ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(СтруктураНастроекОбмена.УзелИнформационнойБазы); СтруктураНастроекОбмена.ОбменПоПравиламКонвертацииОбъектов = ОбменДаннымиПовтИсп.ЭтоУзелУниверсальногоОбменаДанными(СтруктураНастроекОбмена.УзелИнформационнойБазы); СтруктураНастроекОбмена.ТекущийУзелПланаОбмена = ПланыОбмена[СтруктураНастроекОбмена.ИмяПланаОбмена].ЭтотУзел(); - СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод = СтруктураНастроекОбмена.ТекущийУзелПланаОбмена.Код; + СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод = ИдентификаторЭтогоУзлаДляОбмена(СтруктураНастроекОбмена.УзелИнформационнойБазы); // Получаем ключ сообщения для ЖР. СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = КлючСообщенияЖурналаРегистрации(СтруктураНастроекОбмена.УзелИнформационнойБазы, СтруктураНастроекОбмена.ДействиеПриОбмене); @@ -8075,6 +8274,9 @@ СтруктураНастроекОбмена.Вставить("ИмяФайлаПротоколаОбмена", ""); СтруктураНастроекОбмена.Вставить("ПродолжитьПриОшибке", Ложь); + // Структура для передачи произвольных дополнительных параметров. + СтруктураНастроекОбмена.Вставить("ДополнительныеПараметры", Новый Структура); + // Структура для регистрации событий в ЖР. СтруктураНастроекОбмена.Вставить("РезультатВыполненияОбмена"); СтруктураНастроекОбмена.Вставить("ДействиеПриОбмене"); @@ -8558,13 +8760,16 @@ КонецПроцедуры -Функция ШаблонИмениФайлаСообщения(ТекущийУзелПланаОбмена, УзелИнформационнойБазы, ЭтоИсходящееСообщение, Транслитерация = Ложь, ИспользоватьВиртуальныйКодУзлаПриПолучении = Ложь) +Функция ШаблонИмениФайлаСообщения(ТекущийУзелПланаОбмена, УзелИнформационнойБазы, ЭтоИсходящееСообщение, Транслитерация = Ложь, ИспользоватьВиртуальныйКодУзлаПриПолучении = Ложь) Экспорт - УзелОтправитель = ?(ЭтоИсходящееСообщение, ТекущийУзелПланаОбмена, УзелИнформационнойБазы); - УзелПолучатель = ?(ЭтоИсходящееСообщение, УзелИнформационнойБазы, ТекущийУзелПланаОбмена); + Если ЭтоИсходящееСообщение Тогда + КодОтправителя = ИдентификаторЭтогоУзлаДляОбмена(УзелИнформационнойБазы); + КодПолучателя = ИдентификаторУзлаКорреспондентаДляОбмена(УзелИнформационнойБазы); + Иначе + КодОтправителя = ИдентификаторУзлаКорреспондентаДляОбмена(УзелИнформационнойБазы); + КодПолучателя = ИдентификаторЭтогоУзлаДляОбмена(УзелИнформационнойБазы); + КонецЕсли; - КодОтправителя = СокрЛП(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелОтправитель, "Код")); - КодПолучателя = СокрЛП(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелПолучатель, "Код")); Если ЭтоИсходящееСообщение Или ИспользоватьВиртуальныйКодУзлаПриПолучении Тогда // Обмен с корреспондентом, который не знаком с новым кодом предопределенного узла - // при формировании имени файла сообщения обмена вместо кода предопределенного узла используется код из регистра. @@ -8589,22 +8794,29 @@ КонецФункции Функция ПсевдонимПредопределенногоУзла(УзелКорреспондента) Экспорт + Если Не ЭтоПланОбменаXDTO(УзелКорреспондента) Тогда Возврат ""; КонецЕсли; - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | КодУзла - |ИЗ РегистрСведений.ПсевдонимыПредопределенныхУзлов - |ГДЕ Корреспондент = &УзелИнформационнойБазы"; + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ПсевдонимыПредопределенныхУзлов.КодУзла КАК КодУзла + |ИЗ + | РегистрСведений.ПсевдонимыПредопределенныхУзлов КАК ПсевдонимыПредопределенныхУзлов + |ГДЕ + | ПсевдонимыПредопределенныхУзлов.Корреспондент = &УзелИнформационнойБазы"); Запрос.УстановитьПараметр("УзелИнформационнойБазы", УзелКорреспондента); + ПсевдонимПредопределенногоУзла = ""; + Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда ПсевдонимПредопределенногоУзла = СокрЛП(Выборка.КодУзла); КонецЕсли; + Возврат ПсевдонимПредопределенногоУзла; + КонецФункции Процедура ПроверитьКодыУзлов(РезультатАнализаДанныхКЗагрузке, УзелИнформационнойБазы) Экспорт @@ -8922,57 +9134,6 @@ #Область ОбщегоНазначения -Функция КоличествоНастроенныхОбменов(Знач ПланыОбмена) Экспорт - - ТекстЗапроса = "ВЫБРАТЬ - | 1 КАК Поле1 - |ИЗ - | ПланыОбменаКонфигурации КАК ПланыОбмена"; - - УстановитьПривилегированныйРежим(Истина); - - МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; - - ПолучитьПланыОбменаДляМонитора(МенеджерВременныхТаблиц, ПланыОбмена, ""); - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; - - Возврат Запрос.Выполнить().Выгрузить().Количество(); - -КонецФункции - -Функция ОбменДаннымиВыполненСПредупреждениями(Знач УзелИнформационнойБазы) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - ТекстЗапроса = "ВЫБРАТЬ ПЕРВЫЕ 1 - | 1 КАК Поле1 - |ИЗ - | РегистрСведений.СостоянияОбменовДанными КАК СостоянияОбменовДанными - |ГДЕ - | СостоянияОбменовДанными.УзелИнформационнойБазы = &УзелИнформационнойБазы - | И СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято) - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ ПЕРВЫЕ 1 - | 1 - |ИЗ - | РегистрСведений.СостоянияОбменовДанными КАК СостоянияОбменовДанными - |ГДЕ - | СостоянияОбменовДанными.УзелИнформационнойБазы = &УзелИнформационнойБазы - | И СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.ВыполненоСПредупреждениями)"; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - Запрос.УстановитьПараметр("УзелИнформационнойБазы", УзелИнформационнойБазы); - - Возврат Не Запрос.Выполнить().Пустой(); - -КонецФункции - Функция ДополнительныеСвойстваПланаОбменаСтрокой(Знач СвойстваСтрокой) Результат = ""; @@ -9077,28 +9238,21 @@ // Процедура УдалитьНеактуальныеЗаписиВРегистреПравилДляОбменаДанными() - СписокПлановОбмена = ОбменДаннымиПовтИсп.СписокПлановОбменаБСП(); - - ТекстЗапроса = " - |ВЫБРАТЬ РАЗЛИЧНЫЕ + Запрос = Новый Запрос( + "ВЫБРАТЬ РАЗЛИЧНЫЕ | ПравилаДляОбменаДанными.ИмяПланаОбмена КАК ИмяПланаОбмена |ИЗ | РегистрСведений.ПравилаДляОбменаДанными КАК ПравилаДляОбменаДанными - |"; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; + |ГДЕ + | НЕ ПравилаДляОбменаДанными.ИмяПланаОбмена В (&ПланыОбменаБСП)"); + Запрос.УстановитьПараметр("ПланыОбменаБСП", ОбменДаннымиПовтИсп.ПланыОбменаБСП()); Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - - Если СписокПлановОбмена.НайтиПоЗначению(Выборка.ИмяПланаОбмена) = Неопределено Тогда - НаборЗаписей = СоздатьНаборЗаписейРегистраСведений(Новый Структура("ИмяПланаОбмена", Выборка.ИмяПланаОбмена), "ПравилаДляОбменаДанными"); - НаборЗаписей.Записать(); - - КонецЕсли; + НаборЗаписей = СоздатьНаборЗаписейРегистраСведений(Новый Структура("ИмяПланаОбмена", Выборка.ИмяПланаОбмена), + "ПравилаДляОбменаДанными"); + НаборЗаписей.Записать(); КонецЦикла; @@ -9130,9 +9284,9 @@ Функция ПараметрыЗапросаПланыОбменаДляМонитора() ПараметрыЗапроса = Новый Структура; - ПараметрыЗапроса.Вставить("ПланыОбменаМассив"); + ПараметрыЗапроса.Вставить("ПланыОбменаМассив", Новый Массив); ПараметрыЗапроса.Вставить("ДополнительныеСвойстваПланаОбмена", ""); - ПараметрыЗапроса.Вставить("РезультатВоВременнуюТаблицу", Ложь); + ПараметрыЗапроса.Вставить("РезультатВоВременнуюТаблицу", Ложь); Возврат ПараметрыЗапроса; @@ -9148,11 +9302,13 @@ // * РезультатВоВременнуюТаблицу - Булево - Если Истина, в запросе будет описано помещение результата // во временную таблицу ПланыОбменаКонфигурации. // По умолчанию Ложь. +// ИсключитьПланыОбменаАвтономнойРаботы - Булево - Если Истина, то из текста запроса исключаются планы обмена +// автономной работы. // // Возвращаемое значение: // Строка - Результирующий текст запроса. // -Функция ТекстЗапросаПланыОбменаДляМонитора(ПараметрыЗапроса = Неопределено) +Функция ТекстЗапросаПланыОбменаДляМонитора(ПараметрыЗапроса = Неопределено, ИсключитьПланыОбменаАвтономнойРаботы = Истина) Экспорт Если ПараметрыЗапроса = Неопределено Тогда ПараметрыЗапроса = ПараметрыЗапросаПланыОбменаДляМонитора(); @@ -9168,7 +9324,8 @@ ПланыОбменаМетода = ФильтрПлановОбменаПоПризнакуРазделенияДанных(ПланыОбменаМассив); - Если ОбменДаннымиПовтИсп.АвтономнаяРаботаПоддерживается() Тогда + Если ОбменДаннымиПовтИсп.АвтономнаяРаботаПоддерживается() + И ИсключитьПланыОбменаАвтономнойРаботы Тогда // Для плана обмена автономной работы используется отдельный монитор. ПланыОбменаМетода = ФильтрПлановОбменаПоПризнакуАвтономнойРаботы(ПланыОбменаМетода); @@ -9278,7 +9435,154 @@ КонецФункции -Процедура ПолучитьРезультатыОбменаДляМонитора(МенеджерВременныхТаблиц, ПланыОбменаМассив) +Процедура ПолучитьСостоянияОбменовДанными(МенеджерВременныхТаблиц) + + Запрос = Новый Запрос; + + Если ОбщегоНазначения.РазделениеВключено() + И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + ТекстЗапросаРезультат = + "ВЫБРАТЬ + | СостоянияОбменовДанными.УзелИнформационнойБазы КАК УзелИнформационнойБазы, + | СостоянияОбменовДанными.ДатаОкончания КАК ДатаНачала, + | СостоянияОбменовДанными.ДатаОкончания КАК ДатаОкончания, + | ВЫБОР + | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято) + | ИЛИ СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.ВыполненоСПредупреждениями) + | ТОГДА 2 + | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.Выполнено) + | ТОГДА ВЫБОР + | КОГДА ЕСТЬNULL(КоличествоПроблем.Количество, 0) > 0 + | ТОГДА 2 + | ИНАЧЕ 0 + | КОНЕЦ + | ИНАЧЕ 1 + | КОНЕЦ КАК РезультатВыполненияОбмена + |ПОМЕСТИТЬ СостоянияОбменовДаннымиЗагрузка + |ИЗ + | РегистрСведений.СостоянияОбменовДаннымиОбластейДанных КАК СостоянияОбменовДанными + | ЛЕВОЕ СОЕДИНЕНИЕ КоличествоПроблем КАК КоличествоПроблем + | ПО СостоянияОбменовДанными.УзелИнформационнойБазы = КоличествоПроблем.УзелИнформационнойБазы + |ГДЕ + | СостоянияОбменовДанными.ДействиеПриОбмене = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ЗагрузкаДанных) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | СостоянияОбменовДанными.УзелИнформационнойБазы КАК УзелИнформационнойБазы, + | СостоянияОбменовДанными.ДатаОкончания КАК ДатаНачала, + | СостоянияОбменовДанными.ДатаОкончания КАК ДатаОкончания, + | ВЫБОР + | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.Выполнено) + | ТОГДА 0 + | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.ВыполненоСПредупреждениями) + | ТОГДА 2 + | ИНАЧЕ 1 + | КОНЕЦ КАК РезультатВыполненияОбмена + |ПОМЕСТИТЬ СостоянияОбменовДаннымиВыгрузка + |ИЗ + | РегистрСведений.СостоянияОбменовДаннымиОбластейДанных КАК СостоянияОбменовДанными + |ГДЕ + | СостоянияОбменовДанными.ДействиеПриОбмене = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ВыгрузкаДанных) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | СостоянияУспешныхОбменовДанными.УзелИнформационнойБазы КАК УзелИнформационнойБазы, + | СостоянияУспешныхОбменовДанными.ДатаОкончания КАК ДатаОкончания + |ПОМЕСТИТЬ СостоянияУспешныхОбменовДаннымиЗагрузка + |ИЗ + | РегистрСведений.СостоянияУспешныхОбменовДаннымиОбластейДанных КАК СостоянияУспешныхОбменовДанными + |ГДЕ + | СостоянияУспешныхОбменовДанными.ДействиеПриОбмене = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ЗагрузкаДанных) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | СостоянияУспешныхОбменовДанными.УзелИнформационнойБазы КАК УзелИнформационнойБазы, + | СостоянияУспешныхОбменовДанными.ДатаОкончания КАК ДатаОкончания + |ПОМЕСТИТЬ СостоянияУспешныхОбменовДаннымиВыгрузка + |ИЗ + | РегистрСведений.СостоянияУспешныхОбменовДаннымиОбластейДанных КАК СостоянияУспешныхОбменовДанными + |ГДЕ + | СостоянияУспешныхОбменовДанными.ДействиеПриОбмене = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ВыгрузкаДанных) + |;"; + Иначе + ТекстЗапросаРезультат = + "ВЫБРАТЬ + | СостоянияОбменовДанными.УзелИнформационнойБазы КАК УзелИнформационнойБазы, + | СостоянияОбменовДанными.ДатаОкончания КАК ДатаНачала, + | СостоянияОбменовДанными.ДатаОкончания КАК ДатаОкончания, + | ВЫБОР + | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято) + | ИЛИ СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.ВыполненоСПредупреждениями) + | ТОГДА 2 + | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.Выполнено) + | ТОГДА ВЫБОР + | КОГДА ЕСТЬNULL(КоличествоПроблем.Количество, 0) > 0 + | ТОГДА 2 + | ИНАЧЕ 0 + | КОНЕЦ + | ИНАЧЕ 1 + | КОНЕЦ КАК РезультатВыполненияОбмена + |ПОМЕСТИТЬ СостоянияОбменовДаннымиЗагрузка + |ИЗ + | РегистрСведений.СостоянияОбменовДанными КАК СостоянияОбменовДанными + | ЛЕВОЕ СОЕДИНЕНИЕ КоличествоПроблем КАК КоличествоПроблем + | ПО СостоянияОбменовДанными.УзелИнформационнойБазы = КоличествоПроблем.УзелИнформационнойБазы + |ГДЕ + | СостоянияОбменовДанными.ДействиеПриОбмене = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ЗагрузкаДанных) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | СостоянияОбменовДанными.УзелИнформационнойБазы КАК УзелИнформационнойБазы, + | СостоянияОбменовДанными.ДатаОкончания КАК ДатаНачала, + | СостоянияОбменовДанными.ДатаОкончания КАК ДатаОкончания, + | ВЫБОР + | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.Выполнено) + | ТОГДА 0 + | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.ВыполненоСПредупреждениями) + | ТОГДА 2 + | ИНАЧЕ 1 + | КОНЕЦ КАК РезультатВыполненияОбмена + |ПОМЕСТИТЬ СостоянияОбменовДаннымиВыгрузка + |ИЗ + | РегистрСведений.СостоянияОбменовДанными КАК СостоянияОбменовДанными + |ГДЕ + | СостоянияОбменовДанными.ДействиеПриОбмене = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ВыгрузкаДанных) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | СостоянияУспешныхОбменовДанными.УзелИнформационнойБазы КАК УзелИнформационнойБазы, + | СостоянияУспешныхОбменовДанными.ДатаОкончания КАК ДатаОкончания + |ПОМЕСТИТЬ СостоянияУспешныхОбменовДаннымиЗагрузка + |ИЗ + | РегистрСведений.СостоянияУспешныхОбменовДанными КАК СостоянияУспешныхОбменовДанными + |ГДЕ + | СостоянияУспешныхОбменовДанными.ДействиеПриОбмене = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ЗагрузкаДанных) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | СостоянияУспешныхОбменовДанными.УзелИнформационнойБазы КАК УзелИнформационнойБазы, + | СостоянияУспешныхОбменовДанными.ДатаОкончания КАК ДатаОкончания + |ПОМЕСТИТЬ СостоянияУспешныхОбменовДаннымиВыгрузка + |ИЗ + | РегистрСведений.СостоянияУспешныхОбменовДанными КАК СостоянияУспешныхОбменовДанными + |ГДЕ + | СостоянияУспешныхОбменовДанными.ДействиеПриОбмене = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ВыгрузкаДанных) + |;"; + КонецЕсли; + + Запрос.Текст = ТекстЗапросаРезультат; + Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; + Запрос.Выполнить(); + +КонецПроцедуры + +Процедура ПолучитьРезультатыОбменаДляМонитора(МенеджерВременныхТаблиц) Запрос = Новый Запрос; @@ -9313,6 +9617,101 @@ КонецПроцедуры +Процедура ПолучитьСообщенияДляСопоставленияДанных(МенеджерВременныхТаблиц) + + Запрос = Новый Запрос; + + Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + + Если ОбщегоНазначения.РазделениеВключено() Тогда + ТекстЗапросаРезультат = + "ВЫБРАТЬ + | ОбщиеНастройкиУзловИнформационныхБаз.УзелИнформационнойБазы КАК УзелИнформационнойБазы, + | ВЫБОР + | КОГДА КОЛИЧЕСТВО(ОбщиеНастройкиУзловИнформационныхБаз.СообщениеДляСопоставленияДанных) > 0 + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ПолученоСообщениеДляСопоставленияДанных, + | МАКСИМУМ(СообщенияОбменаДанными.ДатаЗакладкиСообщения) КАК ДатаЗакладкиПоследнегоСообщения + |ПОМЕСТИТЬ СообщенияДляСопоставленияДанных + |ИЗ + | РегистрСведений.ОбщиеНастройкиУзловИнформационныхБаз КАК ОбщиеНастройкиУзловИнформационныхБаз + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СообщенияОбменаДаннымиОбластейДанных КАК СообщенияОбменаДанными + | ПО (СообщенияОбменаДанными.ИдентификаторСообщения = ОбщиеНастройкиУзловИнформационныхБаз.СообщениеДляСопоставленияДанных) + | + |СГРУППИРОВАТЬ ПО + | ОбщиеНастройкиУзловИнформационныхБаз.УзелИнформационнойБазы"; + Иначе + ТекстЗапросаРезультат = + "ВЫБРАТЬ + | ОбщиеНастройкиУзловИнформационныхБаз.УзелИнформационнойБазы КАК УзелИнформационнойБазы, + | ВЫБОР + | КОГДА КОЛИЧЕСТВО(ОбщиеНастройкиУзловИнформационныхБаз.СообщениеДляСопоставленияДанных) > 0 + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ПолученоСообщениеДляСопоставленияДанных, + | МАКСИМУМ(СообщенияОбменаДанными.ДатаЗакладкиСообщения) КАК ДатаЗакладкиПоследнегоСообщения + |ПОМЕСТИТЬ СообщенияДляСопоставленияДанных + |ИЗ + | РегистрСведений.ОбщиеНастройкиУзловИнформационныхБаз КАК ОбщиеНастройкиУзловИнформационныхБаз + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СообщенияОбменаДанными КАК СообщенияОбменаДанными + | ПО (СообщенияОбменаДанными.ИдентификаторСообщения = ОбщиеНастройкиУзловИнформационныхБаз.СообщениеДляСопоставленияДанных) + | + |СГРУППИРОВАТЬ ПО + | ОбщиеНастройкиУзловИнформационныхБаз.УзелИнформационнойБазы"; + КонецЕсли; + + Иначе + + ТекстЗапросаРезультат = + "ВЫБРАТЬ + | NULL КАК УзелИнформационнойБазы, + | NULL КАК ПолученоСообщениеДляСопоставленияДанных, + | NULL КАК ДатаЗакладкиПоследнегоСообщения + |ПОМЕСТИТЬ СообщенияДляСопоставленияДанных"; + + КонецЕсли; + + Запрос.Текст = ТекстЗапросаРезультат; + Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; + Запрос.Выполнить(); + +КонецПроцедуры + +Процедура ПолучитьОбщиеНастройкиУзловИнформационныхБаз(МенеджерВременныхТаблиц) + + Запрос = Новый Запрос; + + Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + + ТекстЗапросаРезультат = + "ВЫБРАТЬ + | ОбщиеНастройкиУзловИнформационныхБаз.УзелИнформационнойБазы КАК УзелИнформационнойБазы, + | ЕСТЬNULL(ОбщиеНастройкиУзловИнформационныхБаз.ВерсияКорреспондента, """") КАК ВерсияКорреспондента, + | ЕСТЬNULL(ОбщиеНастройкиУзловИнформационныхБаз.ПрефиксКорреспондента, """") КАК ПрефиксКорреспондента, + | ЕСТЬNULL(ОбщиеНастройкиУзловИнформационныхБаз.НастройкаЗавершена, ЛОЖЬ) КАК НастройкаЗавершена + |ПОМЕСТИТЬ ОбщиеНастройкиУзловИнформационныхБаз + |ИЗ + | РегистрСведений.ОбщиеНастройкиУзловИнформационныхБаз КАК ОбщиеНастройкиУзловИнформационныхБаз"; + + Иначе + + ТекстЗапросаРезультат = + "ВЫБРАТЬ + | NULL КАК УзелИнформационнойБазы, + | """" КАК ВерсияКорреспондента, + | """" КАК ПрефиксКорреспондента, + | ЛОЖЬ КАК НастройкаЗавершена + |ПОМЕСТИТЬ ОбщиеНастройкиУзловИнформационныхБаз"; + + КонецЕсли; + + Запрос.Текст = ТекстЗапросаРезультат; + Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; + Запрос.Выполнить(); + +КонецПроцедуры + Функция ПланыОбменаСПравиламиИзФайла() Запрос = Новый Запрос; @@ -9967,267 +10366,6 @@ КонецПроцедуры -Процедура ВыполнитьСравнениеИОбъединениеТаблицФормы(Форма, Отказ) - - ИмяПланаОбмена = СтрРазделить(Форма.ИмяФормы, ".")[1]; - - ДанныеКорреспондента = ОбщиеДанныеУзловКорреспондента(ИмяПланаОбмена, Форма.Параметры.ПараметрыПодключения, Отказ); - - Если ДанныеКорреспондента = Неопределено Тогда - Возврат; - КонецЕсли; - - ПараметрыИзФормы = Новый Структура("ВерсияКорреспондента, ИдентификаторНастройки"); - ЗаполнитьЗначенияСвойств(ПараметрыИзФормы, Форма); - ДанныеЭтойИнформационнойБазы = ДанныеДляТабличныхЧастейУзловЭтойИнформационнойБазы(ИмяПланаОбмена, - ПараметрыИзФормы.ВерсияКорреспондента, ПараметрыИзФормы.ИдентификаторНастройки); - - ТабличныеЧастиПланаОбмена = ОбменДаннымиПовтИсп.ТабличныеЧастиПланаОбмена(ИмяПланаОбмена, - Форма.ВерсияКорреспондента, ПараметрыИзФормы.ИдентификаторНастройки); - - ИменаРеквизитовФормы = ИменаРеквизитовФормы(Форма); - - // Объединение таблиц Общих данных. - Для Каждого ИмяТабличнойЧасти Из ТабличныеЧастиПланаОбмена["ТаблицыОбщие"] Цикл - - Если ИменаРеквизитовФормы.Найти(ИмяТабличнойЧасти) = Неопределено Тогда - Продолжить; - КонецЕсли; - - ОбщаяТаблица = Новый ТаблицаЗначений; - ОбщаяТаблица.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); - ОбщаяТаблица.Колонки.Добавить("УникальныйИдентификаторСсылки", Новый ОписаниеТипов("Строка")); - - Для Каждого СтрокаТаблицы Из ДанныеЭтойИнформационнойБазы[ИмяТабличнойЧасти] Цикл - - ЗаполнитьЗначенияСвойств(ОбщаяТаблица.Добавить(), СтрокаТаблицы); - - КонецЦикла; - - Для Каждого СтрокаТаблицы Из ДанныеКорреспондента[ИмяТабличнойЧасти] Цикл - - ЗаполнитьЗначенияСвойств(ОбщаяТаблица.Добавить(), СтрокаТаблицы); - - КонецЦикла; - - ТаблицаРезультат = ОбщаяТаблица.Скопировать(, "УникальныйИдентификаторСсылки"); - ТаблицаРезультат.Свернуть("УникальныйИдентификаторСсылки"); - ТаблицаРезультат.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); - ТаблицаРезультат.Колонки.Добавить("Использовать", Новый ОписаниеТипов("Булево")); - - Для Каждого СтрокаТаблицыРезультата Из ТаблицаРезультат Цикл - - СтрокаТаблицы = ОбщаяТаблица.Найти(СтрокаТаблицыРезультата.УникальныйИдентификаторСсылки, "УникальныйИдентификаторСсылки"); - - СтрокаТаблицыРезультата.Представление = СтрокаТаблицы.Представление; - - КонецЦикла; - - СинхронизироватьПризнакИспользованияВТаблицах(Форма[ИмяТабличнойЧасти], ТаблицаРезультат); - - ТаблицаРезультат.Сортировать("Представление"); - - Форма[ИмяТабличнойЧасти].Загрузить(ТаблицаРезультат); - - КонецЦикла; - - СоответствиеРеквизитовЭтойПрограммы = Форма.ИменаРеквизитов; - - // Объединение таблиц данных Этой базы. - Для Каждого ИмяТабличнойЧасти Из ТабличныеЧастиПланаОбмена["ТаблицыЭтойБазы"] Цикл - - Если СоответствиеРеквизитовЭтойПрограммы.Свойство(ИмяТабличнойЧасти) Тогда - ИмяРеквизита = СоответствиеРеквизитовЭтойПрограммы[ИмяТабличнойЧасти]; - ИначеЕсли ИменаРеквизитовФормы.Найти(ИмяТабличнойЧасти) = Неопределено Тогда - Продолжить; - Иначе - ИмяРеквизита = ИмяТабличнойЧасти; - КонецЕсли; - - ТаблицаРезультат = ДанныеЭтойИнформационнойБазы[ИмяТабличнойЧасти].Скопировать(); - ТаблицаРезультат.Колонки.Добавить("Использовать", Новый ОписаниеТипов("Булево")); - - СинхронизироватьПризнакИспользованияВТаблицах(Форма[ИмяРеквизита], ТаблицаРезультат); - - Форма[ИмяРеквизита].Загрузить(ТаблицаРезультат); - - КонецЦикла; - - СоответствиеРеквизитовКорреспондента = Форма.ИменаРеквизитовБазыКорреспондента; - - // Объединение таблиц данных Корреспондента. - Для Каждого ИмяТабличнойЧасти Из ТабличныеЧастиПланаОбмена["ТаблицыКорреспондента"] Цикл - - Если СоответствиеРеквизитовКорреспондента.Свойство(ИмяТабличнойЧасти) Тогда - ИмяРеквизита = СоответствиеРеквизитовКорреспондента[ИмяТабличнойЧасти]; - ИначеЕсли ИменаРеквизитовФормы.Найти(ИмяТабличнойЧасти) = Неопределено Тогда - Продолжить; - Иначе - ИмяРеквизита = ИмяТабличнойЧасти; - КонецЕсли; - - ТаблицаРезультат = ДанныеКорреспондента[ИмяТабличнойЧасти].Скопировать(); - ТаблицаРезультат.Колонки.Добавить("Использовать", Новый ОписаниеТипов("Булево")); - - СинхронизироватьПризнакИспользованияВТаблицах(Форма[ИмяРеквизита], ТаблицаРезультат); - - Форма[ИмяРеквизита].Загрузить(ТаблицаРезультат); - - КонецЦикла; - -КонецПроцедуры - -Процедура СинхронизироватьПризнакИспользованияВТаблицах(ТаблицаФормы, ТаблицаРезультат) - - Если ТаблицаФормы.Количество() = 0 Тогда - - // При первом обращении к таблице устанавливаем все флажки. - ТаблицаРезультат.ЗаполнитьЗначения(Истина, "Использовать"); - - Иначе - - // Если имеется предыдущий контекст таблицы, то используем этот контекст для задания флажков. - ТаблицаПредыдущегоКонтекста = ТаблицаФормы.Выгрузить(Новый Структура("Использовать", Истина), "УникальныйИдентификаторСсылки"); - - ТаблицаРезультат.ЗаполнитьЗначения(Ложь, "Использовать"); - - Для Каждого СтрокаТаблицыКонтекста Из ТаблицаПредыдущегоКонтекста Цикл - - СтрокаТаблицы = ТаблицаРезультат.Найти(СтрокаТаблицыКонтекста.УникальныйИдентификаторСсылки, "УникальныйИдентификаторСсылки"); - - Если СтрокаТаблицы <> Неопределено Тогда - - СтрокаТаблицы.Использовать = Истина; - - КонецЕсли; - - КонецЦикла; - - КонецЕсли; - -КонецПроцедуры - -Процедура ЗаполнитьДанныеФормы(Форма) - - // Заполняем данные этой программы. - СоответствующиеРеквизиты = Форма.ИменаРеквизитов; - НастройкаОтборовНаУзле = Форма.Контекст.НастройкаОтборовНаУзле; - - Для Каждого ЭлементНастройки Из НастройкаОтборовНаУзле Цикл - - ЗначениеОтбора = ЭлементНастройки.Значение; - - Если СоответствующиеРеквизиты.Свойство(ЭлементНастройки.Ключ) Тогда - ИмяРеквизита = СоответствующиеРеквизиты[ЭлементНастройки.Ключ]; - Иначе - ИмяРеквизита = ЭлементНастройки.Ключ; - КонецЕсли; - - РеквизитФормы = Форма[ИмяРеквизита]; - - Если ТипЗнч(РеквизитФормы) = Тип("ДанныеФормыКоллекция") Тогда - - // В случае начального заполнения отбора-коллекции значениями по умолчанию - // необходимо выполнять преобразование значения отбора, представленного в виде структуры. - // Значения для заполнения получаются из первого элемента структуры. - Если ТипЗнч(ЗначениеОтбора) = Тип("Структура") Тогда - - НовоеЗначениеОтбора = Новый Массив; - Для Каждого ЭлементСтруктурыОтбора Из ЗначениеОтбора Цикл - - ЗначенияИзСтруктуры = ЭлементСтруктурыОтбора.Значение; - Для Каждого ЗначениеИзСтруктуры Из ЗначенияИзСтруктуры Цикл - - ОписаниеЗначения = Новый Структура(); - ОписаниеЗначения.Вставить("Использовать", Истина); - ОписаниеЗначения.Вставить("Представление", ЗначениеИзСтруктуры); - - УникальныйИдентификаторСсылки = ?(ОбщегоНазначения.ЭтоСсылка(ТипЗнч(ЗначениеИзСтруктуры)), - ЗначениеИзСтруктуры.УникальныйИдентификатор(), - Неопределено); - ОписаниеЗначения.Вставить("УникальныйИдентификаторСсылки", Строка(УникальныйИдентификаторСсылки)); - - НовоеЗначениеОтбора.Добавить(ОписаниеЗначения); - - КонецЦикла; - - Прервать; - - КонецЦикла; - - ЗначениеОтбора = НовоеЗначениеОтбора; - НастройкаОтборовНаУзле[ЭлементНастройки.Ключ] = ЗначениеОтбора; - - КонецЕсли; - - Если ТипЗнч(ЗначениеОтбора) = Тип("Массив") - И ЗначениеОтбора.Количество() > 0 Тогда - - Таблица = Форма[ИмяРеквизита].Выгрузить(); - - Таблица.Очистить(); - - Для Каждого СтрокаТаблицы Из ЗначениеОтбора Цикл - - ЗаполнитьЗначенияСвойств(Таблица.Добавить(), СтрокаТаблицы); - - КонецЦикла; - - Форма[ИмяРеквизита].Загрузить(Таблица); - - КонецЕсли; - - Иначе - - Форма[ИмяРеквизита] = ЗначениеОтбора; - - КонецЕсли; - - КонецЦикла; - - // Заполняем данные корреспондента. - СоответствующиеРеквизиты = Форма.ИменаРеквизитовБазыКорреспондента; - НастройкаОтборовНаУзлеБазыКорреспондента = Форма.Контекст.НастройкаОтборовНаУзлеБазыКорреспондента; - - Для Каждого ЭлементНастройки Из НастройкаОтборовНаУзлеБазыКорреспондента Цикл - - Если СоответствующиеРеквизиты.Свойство(ЭлементНастройки.Ключ) Тогда - ИмяРеквизита = СоответствующиеРеквизиты[ЭлементНастройки.Ключ]; - Иначе - ИмяРеквизита = ЭлементНастройки.Ключ; - КонецЕсли; - - РеквизитФормы = Форма[ИмяРеквизита]; - - Если ТипЗнч(РеквизитФормы) = Тип("ДанныеФормыКоллекция") Тогда - - Если ТипЗнч(ЭлементНастройки.Значение) = Тип("Массив") - И ЭлементНастройки.Значение.Количество() > 0 Тогда - - Таблица = Форма[ИмяРеквизита].Выгрузить(); - - Таблица.Очистить(); - - Для Каждого СтрокаТаблицы Из ЭлементНастройки.Значение Цикл - - ЗаполнитьЗначенияСвойств(Таблица.Добавить(), СтрокаТаблицы); - - КонецЦикла; - - Форма[ИмяРеквизита].Загрузить(Таблица); - - КонецЕсли; - - Иначе - - Форма[ИмяРеквизита] = ЭлементНастройки.Значение; - - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - // Проверяет наличие указанных реквизитов в форме. // Если хотя бы один реквизит отсутствует, то вызывает исключение. // @@ -10257,105 +10395,6 @@ КонецПроцедуры -Процедура УстановитьОбязательныеРеквизитыФормы(Форма, ОбязательныеРеквизитыФормы) - - ОтсутствующиеРеквизиты = Новый Массив; - - РеквизитыФормы = ИменаРеквизитовФормы(Форма); - - Для Каждого Реквизит Из ОбязательныеРеквизитыФормы Цикл - - Если РеквизитыФормы.Найти(Реквизит.Имя) = Неопределено Тогда - - ОтсутствующиеРеквизиты.Добавить(Новый РеквизитФормы(Реквизит.Имя, Реквизит.ТипРеквизита)); - Реквизит.РеквизитДобавлен = Истина; - - КонецЕсли; - - КонецЦикла; - - Если ОтсутствующиеРеквизиты.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - Форма.ИзменитьРеквизиты(ОтсутствующиеРеквизиты); - - // Инициализация значений - ПараметрыОтбора = Новый Структура(); - ПараметрыОтбора.Вставить("ТребуетсяЗаполнение", Истина); - ПараметрыОтбора.Вставить("РеквизитДобавлен", Истина); - РеквизитыДляЗаполнения = ОбязательныеРеквизитыФормы.НайтиСтроки(ПараметрыОтбора); - - Для Каждого Реквизит Из РеквизитыДляЗаполнения Цикл - - Форма[Реквизит.Имя] = Реквизит.ЗначениеЗаполнения; - - КонецЦикла; - -КонецПроцедуры - -Функция ОбязательныеРеквизитыФормыНастройкиУзлов() - - ОбязательныеРеквизитыФормы = Новый ТаблицаЗначений; - - ОбязательныеРеквизитыФормы.Колонки.Добавить("Имя"); - ОбязательныеРеквизитыФормы.Колонки.Добавить("ТипРеквизита"); - ОбязательныеРеквизитыФормы.Колонки.Добавить("ТребуетсяЗаполнение"); - ОбязательныеРеквизитыФормы.Колонки.Добавить("ЗначениеЗаполнения"); - ОбязательныеРеквизитыФормы.Колонки.Добавить("РеквизитДобавлен"); - - НоваяСтрока = ОбязательныеРеквизитыФормы.Добавить(); - НоваяСтрока.Имя = "Контекст"; - НоваяСтрока.ТипРеквизита = Новый ОписаниеТипов(); - НоваяСтрока.ТребуетсяЗаполнение = Ложь; - - НоваяСтрока = ОбязательныеРеквизитыФормы.Добавить(); - НоваяСтрока.Имя = "ОписаниеКонтекста"; - НоваяСтрока.ТипРеквизита = Новый ОписаниеТипов("Строка"); - НоваяСтрока.ТребуетсяЗаполнение = Ложь; - - НоваяСтрока = ОбязательныеРеквизитыФормы.Добавить(); - НоваяСтрока.Имя = "Реквизиты"; - НоваяСтрока.ТипРеквизита = Новый ОписаниеТипов("Строка"); - НоваяСтрока.ТребуетсяЗаполнение = Ложь; - - НоваяСтрока = ОбязательныеРеквизитыФормы.Добавить(); - НоваяСтрока.Имя = "ВерсияКорреспондента"; - НоваяСтрока.ТипРеквизита = Новый ОписаниеТипов("Строка"); - НоваяСтрока.ТребуетсяЗаполнение = Ложь; - - НоваяСтрока = ОбязательныеРеквизитыФормы.Добавить(); - НоваяСтрока.Имя = "ИменаРеквизитов"; - НоваяСтрока.ТипРеквизита = Новый ОписаниеТипов(); - НоваяСтрока.ТребуетсяЗаполнение = Истина; - НоваяСтрока.ЗначениеЗаполнения = Новый Структура; - - НоваяСтрока = ОбязательныеРеквизитыФормы.Добавить(); - НоваяСтрока.Имя = "ИменаРеквизитовБазыКорреспондента"; - НоваяСтрока.ТипРеквизита = Новый ОписаниеТипов(); - НоваяСтрока.ТребуетсяЗаполнение = Истина; - НоваяСтрока.ЗначениеЗаполнения = Новый Структура; - - ОбязательныеРеквизитыФормы.ЗаполнитьЗначения(Ложь, "РеквизитДобавлен"); - - Возврат ОбязательныеРеквизитыФормы; - -КонецФункции - -Процедура ИзменитьСтруктуруХраненияТабличныхЧастей(НастройкиПоУмолчанию) - - Для Каждого Настройка Из НастройкиПоУмолчанию Цикл - - Если ТипЗнч(Настройка.Значение) = Тип("Структура") Тогда - - НастройкиПоУмолчанию.Вставить(Настройка.Ключ, Новый Массив); - - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - Процедура ВнешнееСоединениеОбновитьНастройкиОбменаДанными(Знач ИмяПланаОбмена, Знач КодУзла, Знач ЗначенияПоУмолчаниюНаУзле) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -10553,71 +10592,7 @@ КонецЦикла; Возврат Результат; -КонецФункции - -Функция ОбщиеДанныеУзловКорреспондента(Знач ИмяПланаОбмена, Знач ПараметрыПодключения, Отказ) - Если ПараметрыПодключения.ТипСоединения = "ВнешнееСоединение" Тогда - - Подключение = ВнешнееСоединениеСБазой(ПараметрыПодключения); - СтрокаСообщенияОбОшибке = Подключение.ПодробноеОписаниеОшибки; - ВнешнееСоединение = Подключение.Соединение; - - Если ВнешнееСоединение = Неопределено Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаСообщенияОбОшибке,,,, Отказ); - Возврат Неопределено; - КонецЕсли; - - Если ПараметрыПодключения.ВерсияКорреспондента_2_1_1_7 - ИЛИ ПараметрыПодключения.ВерсияКорреспондента_2_0_1_6 Тогда - - Возврат ОбщегоНазначения.ЗначениеИзСтрокиXML(ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПолучитьОбщиеДанныеУзлов_2_0_1_6(ИмяПланаОбмена)); - - Иначе - - Возврат ЗначениеИзСтрокиВнутр(ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПолучитьОбщиеДанныеУзлов(ИмяПланаОбмена)); - - КонецЕсли; - - ИначеЕсли ПараметрыПодключения.ТипСоединения = "ВебСервис" Тогда - - СтрокаСообщенияОбОшибке = ""; - - Если ПараметрыПодключения.ВерсияКорреспондента_2_1_1_7 Тогда - - WSПрокси = ПолучитьWSПрокси_2_1_1_7(ПараметрыПодключения, СтрокаСообщенияОбОшибке); - - ИначеЕсли ПараметрыПодключения.ВерсияКорреспондента_2_0_1_6 Тогда - - WSПрокси = ПолучитьWSПрокси_2_0_1_6(ПараметрыПодключения, СтрокаСообщенияОбОшибке); - - Иначе - - WSПрокси = ПолучитьWSПрокси(ПараметрыПодключения, СтрокаСообщенияОбОшибке); - - КонецЕсли; - - Если WSПрокси = Неопределено Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаСообщенияОбОшибке,,,, Отказ); - Возврат Неопределено; - КонецЕсли; - - Если ПараметрыПодключения.ВерсияКорреспондента_2_1_1_7 - ИЛИ ПараметрыПодключения.ВерсияКорреспондента_2_0_1_6 Тогда - - Возврат СериализаторXDTO.ПрочитатьXDTO(WSПрокси.GetCommonNodsData(ИмяПланаОбмена)); - Иначе - - Возврат ЗначениеИзСтрокиВнутр(WSПрокси.GetCommonNodsData(ИмяПланаОбмена)); - КонецЕсли; - - ИначеЕсли ПараметрыПодключения.ТипСоединения = "ВременноеХранилище" Тогда - - Возврат ПолучитьИзВременногоХранилища(ПараметрыПодключения.АдресВременногоХранилища).Получить(); - - КонецЕсли; - - Возврат Неопределено; КонецФункции Функция ИмяТаблицыИзПервогоРеквизитаТабличнойЧастиПланаОбмена(Знач ИмяПланаОбмена, Знач ИмяТабличнойЧасти) @@ -10864,59 +10839,86 @@ Функция ПараметрыИнформационнойБазы(Знач ИмяПланаОбмена, Знач КодУзла, СообщениеОбОшибке) Экспорт - УстановитьПривилегированныйРежим(Истина); - Результат = Новый Структура; - Результат.Вставить("ПланОбменаСуществует"); - Результат.Вставить("ПрефиксИнформационнойБазы"); - Результат.Вставить("ПрефиксИнформационнойБазыПоУмолчанию"); - Результат.Вставить("НаименованиеИнформационнойБазы"); - Результат.Вставить("НаименованиеИнформационнойБазыПоУмолчанию"); - Результат.Вставить("НастройкиПараметровУчетаЗаданы"); - Результат.Вставить("КодЭтогоУзла"); - Результат.Вставить("ВерсияКонфигурации"); // Начиная с версии БСП 2.1.5.1. - Результат.Вставить("УзелСуществует"); // Начиная с версии БСП 2.4.2(?). - + Результат.Вставить("ПланОбменаСуществует", Ложь); + Результат.Вставить("ПрефиксИнформационнойБазы", ""); + Результат.Вставить("ПрефиксИнформационнойБазыПоУмолчанию", ""); + Результат.Вставить("НаименованиеИнформационнойБазы", ""); + Результат.Вставить("НаименованиеИнформационнойБазыПоУмолчанию", ""); + Результат.Вставить("НастройкиПараметровУчетаЗаданы", Ложь); + Результат.Вставить("КодЭтогоУзла", ""); + // Начиная с версии БСП 2.1.5.1. + Результат.Вставить("ВерсияКонфигурации", Метаданные.Версия); + // Начиная с версии БСП 2.4.2(?). + Результат.Вставить("УзелСуществует", Ложь); + // Начиная с версии БСП 3.0.1.1. + Результат.Вставить("ВерсияФорматаНастроекОбменаДанными", + Обработки.ПомощникСозданияОбменаДанными.ВерсияФорматаНастроекОбменаДанными()); + Результат.Вставить("ИспользоватьПрефиксыДляНастройкиОбмена", Истина); + Результат.Вставить("ФорматОбмена", ""); + Результат.Вставить("ИмяПланаОбмена", ИмяПланаОбмена); + Результат.Вставить("ВерсииФорматаОбмена", Новый Массив); + Результат.Вставить("ПоддерживаемыеОбъектыФормата", Неопределено); + + УстановитьПривилегированныйРежим(Истина); Результат.ПланОбменаСуществует = (Метаданные.ПланыОбмена.Найти(ИмяПланаОбмена) <> Неопределено); - Если Результат.ПланОбменаСуществует Тогда - - СвойстваЭтогоУзла = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ПланыОбмена[ИмяПланаОбмена].ЭтотУзел(), "Код, Наименование"); - - ПрефиксИнформационнойБазы = Неопределено; - ОбменДаннымиПереопределяемый.ПриОпределенииПрефиксаИнформационнойБазыПоУмолчанию(ПрефиксИнформационнойБазы); - - Результат.ПрефиксИнформационнойБазы = ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"); - Результат.ПрефиксИнформационнойБазыПоУмолчанию = ПрефиксИнформационнойБазы; - Результат.НаименованиеИнформационнойБазы = СвойстваЭтогоУзла.Наименование; - Результат.УзелСуществует = ?(ЗначениеЗаполнено(КодУзла), - ЗначениеЗаполнено(ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду(КодУзла)) - , Ложь); - Если Результат.УзелСуществует Тогда - Результат.НастройкиПараметровУчетаЗаданы = НастройкиПараметровУчетаВСистемеУстановлены(ИмяПланаОбмена, КодУзла, СообщениеОбОшибке); - Иначе - Результат.НастройкиПараметровУчетаЗаданы = Ложь; - КонецЕсли; - Результат.КодЭтогоУзла = СвойстваЭтогоУзла.Код; - Результат.ВерсияКонфигурации = Метаданные.Версия; - - Результат.НаименованиеИнформационнойБазыПоУмолчанию = ?(ОбщегоНазначения.РазделениеВключено(), - Метаданные.Синоним, ОбменДаннымиПовтИсп.ИмяЭтойИнформационнойБазы()); - - Иначе - - Результат.ПрефиксИнформационнойБазы = ""; - Результат.ПрефиксИнформационнойБазыПоУмолчанию = ""; - Результат.НаименованиеИнформационнойБазы = ""; - Результат.НаименованиеИнформационнойБазыПоУмолчанию = ""; - Результат.НастройкиПараметровУчетаЗаданы = Ложь; - Результат.КодЭтогоУзла = ""; - Результат.ВерсияКонфигурации = Метаданные.Версия; + Если Не Результат.ПланОбменаСуществует Тогда + // В качестве имени плана обмена м.б. передан формат обмена. + Для Каждого ПланОбмена Из ОбменДаннымиПовтИсп.ПланыОбменаБСП() Цикл + Если Не ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ПланОбмена) Тогда + Продолжить; + КонецЕсли; + + ФорматОбмена = ЗначениеНастройкиПланаОбмена(ПланОбмена, "ФорматОбмена"); + Если ИмяПланаОбмена = ФорматОбмена Тогда + Результат.ПланОбменаСуществует = Истина; + Результат.ИмяПланаОбмена = ПланОбмена; + КонецЕсли; + КонецЦикла; КонецЕсли; + Если Не Результат.ПланОбменаСуществует Тогда + Возврат Результат; + КонецЕсли; + + ЭтотУзел = ПланыОбмена[Результат.ИмяПланаОбмена].ЭтотУзел(); + + СвойстваЭтогоУзла = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ЭтотУзел, "Код, Наименование"); + + ПрефиксИнформационнойБазы = Неопределено; + ОбменДаннымиПереопределяемый.ПриОпределенииПрефиксаИнформационнойБазыПоУмолчанию(ПрефиксИнформационнойБазы); + + Результат.ПрефиксИнформационнойБазы = ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"); + Результат.ПрефиксИнформационнойБазыПоУмолчанию = ПрефиксИнформационнойБазы; + Результат.НаименованиеИнформационнойБазы = СвойстваЭтогоУзла.Наименование; + Результат.УзелСуществует = ЗначениеЗаполнено(КодУзла) + И ЗначениеЗаполнено(УзелПланаОбменаПоКоду(Результат.ИмяПланаОбмена, КодУзла)); + Результат.НастройкиПараметровУчетаЗаданы = Результат.УзелСуществует + И НастройкиПараметровУчетаВСистемеУстановлены(Результат.ИмяПланаОбмена, КодУзла, СообщениеОбОшибке); + Результат.КодЭтогоУзла = СвойстваЭтогоУзла.Код; + Результат.ВерсияКонфигурации = Метаданные.Версия; + + Результат.НаименованиеИнформационнойБазыПоУмолчанию = ?(ОбщегоНазначения.РазделениеВключено(), + Метаданные.Синоним, ОбменДаннымиПовтИсп.ИмяЭтойИнформационнойБазы()); + + Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(Результат.ИмяПланаОбмена) Тогда + Результат.ИспользоватьПрефиксыДляНастройкиОбмена = + Не ОбменДаннымиXDTOСервер.ПоддерживаетсяВерсияСИдентификаторомОбменаДанными(ЭтотУзел); + + СвойстваПланаОбмена = ЗначениеНастройкиПланаОбмена(Результат.ИмяПланаОбмена, "ВерсииФорматаОбмена, ФорматОбмена"); + + Результат.ФорматОбмена = СвойстваПланаОбмена.ФорматОбмена; + Результат.ВерсииФорматаОбмена = ОбщегоНазначения.ВыгрузитьКолонку(СвойстваПланаОбмена.ВерсииФорматаОбмена, "Ключ", Истина); + + Результат.Вставить("ПоддерживаемыеОбъектыФормата", + ОбменДаннымиXDTOСервер.ПоддерживаемыеОбъектыФормата(Результат.ИмяПланаОбмена, "ОтправкаПолучение")); + КонецЕсли; + Возврат Результат; + КонецФункции Функция ИнформацияСтатистики(ИнформацияСтатистики, Знач ВключатьУдалениеОбъектов = Ложь) Экспорт @@ -11144,7 +11146,8 @@ // Выполняет проверку подключения обработки транспорта по заданным настройкам. // -Процедура ПроверитьПодключениеОбработкиТранспортаСообщенийОбмена(Отказ, СтруктураНастроек, ВидТранспорта, СообщениеОбОшибке = "", НовыйПароль = Неопределено) Экспорт +Процедура ПроверитьПодключениеОбработкиТранспортаСообщенийОбмена(Отказ, + СтруктураНастроек, ВидТранспорта, СообщениеОбОшибке = "", НовыйПароль = Неопределено) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -11155,9 +11158,10 @@ ЗаполнитьЗначенияСвойств(ОбработкаОбъект, СтруктураНастроек); // Привилегированный режим установлен выше. - Если СтруктураНастроек.Свойство("Узел") Тогда + Если СтруктураНастроек.Свойство("Корреспондент") Тогда Если НовыйПароль = Неопределено Тогда - Пароли = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(СтруктураНастроек.Узел, "COMПарольПользователя, FTPСоединениеПароль, WSПароль, ПарольАрхиваСообщенияОбмена", Истина); + Пароли = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(СтруктураНастроек.Корреспондент, + "COMПарольПользователя, FTPСоединениеПароль, WSПароль, ПарольАрхиваСообщенияОбмена", Истина); Иначе Пароли = Новый Структура; Пароли.Вставить("COMПарольПользователя", НовыйПароль); @@ -11168,25 +11172,19 @@ ЗаполнитьЗначенияСвойств(ОбработкаОбъект, Пароли); КонецЕсли; - // Инициализация транспорта обмена. ОбработкаОбъект.Инициализация(); // Выполняем проверку подключения. Если Не ОбработкаОбъект.ПодключениеУстановлено() Тогда - ШаблонСообщения = "%1 - |%2"; - // + Отказ = Истина; - ДополнительноеСообщение = НСтр("ru = 'Техническую информацию об ошибке см. в журнале регистрации.'"); - - СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ОбработкаОбъект.СтрокаСообщенияОбОшибке, ДополнительноеСообщение); - - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке,,,, Отказ); + СообщениеОбОшибке = ОбработкаОбъект.СтрокаСообщенияОбОшибке + + Символы.ПС + НСтр("ru = 'Техническую информацию об ошибке см. в журнале регистрации.'"); ЗаписьЖурналаРегистрации(НСтр("ru = 'Транспорт сообщений обмена'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, ОбработкаОбъект.СтрокаСообщенияОбОшибкеЖР); + УровеньЖурналаРегистрации.Ошибка, , , ОбработкаОбъект.СтрокаСообщенияОбОшибкеЖР); КонецЕсли; @@ -11246,7 +11244,7 @@ Возврат Результат; КонецФункции -Функция НастройкиТранспортаПоПараметрамВнешнегоСоединения(Параметры) Экспорт +Функция НастройкиТранспортаПоПараметрамВнешнегоСоединения(Параметры) // Преобразуем настройки - параметры внешнего соединения в параметры транспорта. НастройкиТранспорта = Новый Структура; @@ -11270,9 +11268,15 @@ КонецФункции -Функция WSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке = "", ПараметрыАутентификации = Неопределено) +Функция WSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, + СтрокаСообщенияОбОшибке = "", ПараметрыАутентификации = Неопределено, МинимальнаяВерсия = "") - СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспортаWS(УзелИнформационнойБазы, ПараметрыАутентификации); + Если ОбменДаннымиПовтИсп.ЭтоУзелОбменаСообщениями(УзелИнформационнойБазы) Тогда + МодульНастройкиТранспортаОбменаСообщениями = РегистрыСведений["НастройкиТранспортаОбменаСообщениями"]; + СтруктураНастроек = МодульНастройкиТранспортаОбменаСообщениями.НастройкиТранспортаWS(УзелИнформационнойБазы, ПараметрыАутентификации); + Иначе + СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспортаWS(УзелИнформационнойБазы, ПараметрыАутентификации); + КонецЕсли; Попытка ВерсииКорреспондента = ОбменДаннымиПовтИсп.ВерсииКорреспондента(СтруктураНастроек); @@ -11285,8 +11289,23 @@ ВерсияКорреспондента_2_0_1_6 = (ВерсииКорреспондента.Найти("2.0.1.6") <> Неопределено); ВерсияКорреспондента_2_1_1_7 = (ВерсииКорреспондента.Найти("2.1.1.7") <> Неопределено); + ВерсияКорреспондента_3_0_1_1 = (ВерсииКорреспондента.Найти("3.0.1.1") <> Неопределено); - Если ВерсияКорреспондента_2_1_1_7 Тогда + Если Не ПустаяСтрока(МинимальнаяВерсия) Тогда + Если МинимальнаяВерсия = "3.0.1.1" + И Не ВерсияКорреспондента_3_0_1_1 Тогда + СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Корреспондент не поддерживает требуемую версию %1 интерфейса ""ОбменДанными"".'"), + МинимальнаяВерсия); + Возврат Неопределено; + КонецЕсли; + КонецЕсли; + + Если ВерсияКорреспондента_3_0_1_1 Тогда + + WSПрокси = ПолучитьWSПрокси_3_0_1_1(СтруктураНастроек, СтрокаСообщенияОбОшибке); + + ИначеЕсли ВерсияКорреспондента_2_1_1_7 Тогда WSПрокси = ПолучитьWSПрокси_2_1_1_7(СтруктураНастроек, СтрокаСообщенияОбОшибке); @@ -11790,7 +11809,7 @@ // Обновление правил регистрации объектов выполняем до загрузки данных. ВыполнитьОбновлениеПравилДляОбменаДанными(); - ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); + ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); Отказ = Ложь; @@ -11917,7 +11936,7 @@ КонецФункции -Функция УникальноеИмяФайлаСообщенияОбмена(Расширение = "xml") +Функция УникальноеИмяФайлаСообщенияОбмена(Расширение = "xml") Экспорт Результат = "Message{GUID}." + Расширение; @@ -11967,7 +11986,7 @@ // Возвращаемое значение: // Массив номеров версий, поддерживаемых интерфейсом корреспондента. // -Функция ВерсииКорреспондентаЧерезВнешнееСоединение(ВнешнееСоединение) Экспорт +Функция ВерсииИнтерфейсаЧерезВнешнееСоединение(ВнешнееСоединение) Экспорт Возврат ОбщегоНазначения.ПолучитьВерсииИнтерфейсаЧерезВнешнееСоединение(ВнешнееСоединение, "ОбменДанными"); @@ -12008,27 +12027,28 @@ Результат = "Синхронизация"; - Если Не ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(Корреспондент) Тогда - - ИменаРеквизитов = ОбщегоНазначения.ИменаРеквизитовПоТипу(Корреспондент, Тип("ПеречислениеСсылка.РежимыВыгрузкиОбъектовОбмена")); - - ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Корреспондент, ИменаРеквизитов); - - Для Каждого Реквизит Из ЗначенияРеквизитов Цикл - - Если Реквизит.Значение = Перечисления.РежимыВыгрузкиОбъектовОбмена.ВыгружатьВручную - ИЛИ Реквизит.Значение = Перечисления.РежимыВыгрузкиОбъектовОбмена.НеВыгружать Тогда - - Результат = "ПолучениеИОтправка"; - Прервать; - - КонецЕсли; - - КонецЦикла; - + Если ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(Корреспондент) Тогда + Возврат Результат; КонецЕсли; + ИменаРеквизитов = ОбщегоНазначения.ИменаРеквизитовПоТипу(Корреспондент, Тип("ПеречислениеСсылка.РежимыВыгрузкиОбъектовОбмена")); + + ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Корреспондент, ИменаРеквизитов); + + Для Каждого Реквизит Из ЗначенияРеквизитов Цикл + + Если Реквизит.Значение = Перечисления.РежимыВыгрузкиОбъектовОбмена.ВыгружатьВручную + Или Реквизит.Значение = Перечисления.РежимыВыгрузкиОбъектовОбмена.НеВыгружать Тогда + + Результат = "ПолучениеИОтправка"; + Прервать; + + КонецЕсли; + + КонецЦикла; + Возврат Результат; + КонецФункции Процедура ЗагрузитьКонтекстОбъекта(Знач Контекст, Знач Объект) Экспорт @@ -12074,21 +12094,6 @@ Возврат Результат; КонецФункции -Функция ТаблицаЗначенийИзДереваЗначений(Дерево) - - Результат = Новый ТаблицаЗначений; - - Для Каждого Колонка Из Дерево.Колонки Цикл - - Результат.Колонки.Добавить(Колонка.Имя, Колонка.ТипЗначения); - - КонецЦикла; - - РазвернутьДеревоЗначений(Результат, Дерево.Строки); - - Возврат Результат; -КонецФункции - Процедура РазвернутьДеревоЗначений(Таблица, Дерево) Для Каждого СтрокаДерева Из Дерево Цикл @@ -12432,7 +12437,7 @@ // Функция ЗащищенноеСоединение(Путь) Экспорт - Возврат ?(НРег(Лев(Путь, 4)) = "ftps", ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение(), Неопределено); + Возврат ?(НРег(Лев(Путь, 4)) = "ftps", Новый ЗащищенноеСоединениеOpenSSL, Неопределено); КонецФункции @@ -12445,15 +12450,7 @@ Возврат; КонецЕсли; - ПланыОбменаБСП = ОбменДаннымиПовтИсп.ПланыОбменаБСП(); - Если ПланыОбменаБСП.Количество() > 0 Тогда - ТаблицаМонитора = ТаблицаМонитораОбменаДанными(ПланыОбменаБСП); - - КоличествоНерассмотренныхПроблем = КоличествоНерассмотренныхПроблем( - ТаблицаМонитора.ВыгрузитьКолонку("УзелИнформационнойБазы")); - Иначе - КоличествоНерассмотренныхПроблем = 0; - КонецЕсли; + КоличествоНерассмотренныхПроблем = КоличествоНерассмотренныхПроблем(); // Процедура вызывается только при наличии подсистемы "Текущие дела", поэтому здесь // не делается проверка существования подсистемы. @@ -12710,47 +12707,55 @@ // Функция НастройкиПланаОбменаПоУмолчанию(ИмяПланаОбмена) - // Получаем значения по умолчанию для плана обмена. - МетаданныеПланаОбмена = Метаданные.ПланыОбмена[ИмяПланаОбмена]; + НазначениеПланаОбмена = "СинхронизацияСДругойПрограммой"; + Если ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(ИмяПланаОбмена) Тогда + НазначениеПланаОбмена = "РИБ"; + КонецЕсли; ВариантыНастроекОбмена = Новый ТаблицаЗначений; - ВариантыНастроекОбмена.Колонки.Добавить("ИдентификаторНастройки", Новый ОписаниеТипов("Строка")); - ВариантыНастроекОбмена.Колонки.Добавить("КорреспондентВМоделиСервиса", Новый ОписаниеТипов("Булево")); + ВариантыНастроекОбмена.Колонки.Добавить("ИдентификаторНастройки", Новый ОписаниеТипов("Строка")); + ВариантыНастроекОбмена.Колонки.Добавить("КорреспондентВМоделиСервиса", Новый ОписаниеТипов("Булево")); ВариантыНастроекОбмена.Колонки.Добавить("КорреспондентВЛокальномРежиме", Новый ОписаниеТипов("Булево")); + Алгоритмы = Новый Структура; + Алгоритмы.Вставить("ПриПолученииВариантовНастроекОбмена", Ложь); + Алгоритмы.Вставить("ПриПолученииОписанияВариантаНастройки", Ложь); + + Алгоритмы.Вставить("ОписаниеОграниченийПередачиДанных", Ложь); + Алгоритмы.Вставить("ОписаниеЗначенийПоУмолчанию", Ложь); + + Алгоритмы.Вставить("ПредставлениеОтбораИнтерактивнойВыгрузки", Ложь); + Алгоритмы.Вставить("НастроитьИнтерактивнуюВыгрузку", Ложь); + Алгоритмы.Вставить("НастроитьИнтерактивнуюВыгрузкуВМоделиСервиса", Ложь); + + Алгоритмы.Вставить("ОбработчикПроверкиОграниченийПередачиДанных", Ложь); + Алгоритмы.Вставить("ОбработчикПроверкиЗначенийПоУмолчанию", Ложь); + Алгоритмы.Вставить("ОбработчикПроверкиПараметровУчета", Ложь); + + Алгоритмы.Вставить("ПриПодключенииККорреспонденту", Ложь); + Алгоритмы.Вставить("ПриПолученииДанныхОтправителя", Ложь); + Алгоритмы.Вставить("ПриОтправкеДанныхОтправителя", Ложь); + + Алгоритмы.Вставить("ПриСохраненииНастроекСинхронизацииДанных", Ложь); + + Алгоритмы.Вставить("ПриОпределенииПоддерживаемыхОбъектовФормата", Ложь); + Алгоритмы.Вставить("ПриОпределенииПоддерживаемыхКорреспондентомОбъектовФормата", Ложь); + Параметры = Новый Структура; - Параметры.Вставить("ВариантыНастроекОбмена", ВариантыНастроекОбмена); - Параметры.Вставить("ВидГруппыДляВариантовНастроек", ВидГруппыФормы.Подменю); - Параметры.Вставить("ИмяКонфигурацииИсточника", ""); - Параметры.Вставить("ИмяКонфигурацииПриемника", Новый Структура); - Параметры.Вставить("ВерсииФорматаОбмена", Новый Соответствие); - Параметры.Вставить("ФорматОбмена", ""); - Параметры.Вставить("ПланОбменаИспользуетсяВМоделиСервиса", Ложь); - Параметры.Вставить("ЭтоПланОбменаXDTO", Ложь); - Параметры.Вставить("ИмяПланаОбменаДляПереходаНаНовыйОбмен", ""); - Параметры.Вставить("ПредупреждатьОНесоответствииВерсийПравилОбмена", Истина); - Параметры.Вставить("НазначениеПланаОбмена", - ?(МетаданныеПланаОбмена.РаспределеннаяИнформационнаяБаза, "РИБ", "СинхронизацияСДругойПрограммой")); - Алгоритмы = Новый Структура(); - Алгоритмы.Вставить("ПриПолученииВариантовНастроекОбмена", Ложь); - Алгоритмы.Вставить("ПриПолученииОписанияВариантаНастройки", Ложь); + Параметры.Вставить("ВариантыНастроекОбмена", ВариантыНастроекОбмена); + Параметры.Вставить("ИмяКонфигурацииИсточника", ""); + Параметры.Вставить("ИмяКонфигурацииПриемника", Новый Структура); + Параметры.Вставить("ВерсииФорматаОбмена", Новый Соответствие); + Параметры.Вставить("ФорматОбмена", ""); + Параметры.Вставить("ПланОбменаИспользуетсяВМоделиСервиса", Ложь); + Параметры.Вставить("ЭтоПланОбменаXDTO", Ложь); + Параметры.Вставить("ИмяПланаОбменаДляПереходаНаНовыйОбмен", ""); + Параметры.Вставить("ПредупреждатьОНесоответствииВерсийПравилОбмена", Истина); + Параметры.Вставить("НазначениеПланаОбмена", НазначениеПланаОбмена); + Параметры.Вставить("Алгоритмы", Алгоритмы); - Алгоритмы.Вставить("ОписаниеОграниченийПередачиДанных", Ложь); - Алгоритмы.Вставить("ОписаниеОграниченийПередачиДанныхБазыКорреспондента", Ложь); - Алгоритмы.Вставить("ОписаниеЗначенийПоУмолчанию", Ложь); - Алгоритмы.Вставить("ОписаниеЗначенийПоУмолчаниюБазыКорреспондента", Ложь); - - Алгоритмы.Вставить("ПредставлениеОтбораИнтерактивнойВыгрузки", Ложь); - Алгоритмы.Вставить("НастроитьИнтерактивнуюВыгрузку", Ложь); - Алгоритмы.Вставить("НастроитьИнтерактивнуюВыгрузкуВМоделиСервиса", Ложь); - - Алгоритмы.Вставить("ОбработчикПроверкиПараметровУчета", Ложь); - Алгоритмы.Вставить("ПриПодключенииККорреспонденту", Ложь); - Алгоритмы.Вставить("ПриПолученииДанныхОтправителя", Ложь); - Алгоритмы.Вставить("ПриОтправкеДанныхОтправителя", Ложь); - - Параметры.Вставить("Алгоритмы", Алгоритмы); Возврат Параметры; + КонецФункции // Получает дерево метаданных конфигурации с заданным отбором по объектам метаданных. @@ -12944,43 +12949,39 @@ // отображения в помощнике создания обмена. // Функция ОписаниеВариантаНастройкиОбменаПоУмолчанию(ИмяПланаОбмена) + ОписаниеВарианта = Новый Структура; + МетаданныеПланаОбмена = Метаданные.ПланыОбмена[ИмяПланаОбмена]; - ЗаголовокФормыПомощника = НСтр("ru='Синхронизация данных с %Программа% (настройка)'"); + ЗаголовокФормыПомощника = НСтр("ru = 'Синхронизация данных с %Программа% (настройка)'"); ЗаголовокФормыПомощника = СтрЗаменить(ЗаголовокФормыПомощника, "%Программа%", МетаданныеПланаОбмена.Синоним); - - ОписаниеВарианта.Вставить("Отборы", Новый Структура); - ОписаниеВарианта.Вставить("ЗначенияПоУмолчанию", Новый Структура); - ОписаниеВарианта.Вставить("ОтборыКорреспондента", Новый Структура); - ОписаниеВарианта.Вставить("ЗначенияПоУмолчаниюКорреспондента", Новый Структура); - ОписаниеВарианта.Вставить("ИмяФормыОтборов", "ФормаНастройкиУзла"); - ОписаниеВарианта.Вставить("ИмяФормыЗначенийПоУмолчанию", "ФормаНастройкиЗначенийПоУмолчанию"); - ОписаниеВарианта.Вставить("ИмяФормыОтборовКорреспондента", "ФормаНастройкиУзлаБазыКорреспондента"); - ОписаниеВарианта.Вставить("ИмяФормыЗначенийПоУмолчаниюКорреспондента", "ФормаНастройкиЗначенийПоУмолчаниюБазыКорреспондента"); - ОписаниеВарианта.Вставить("ИмяФормыОбщиеДанныеУзлов", "ФормаНастройкиУзлов"); ОписаниеВарианта.Вставить("ИмяФайлаНастроекДляПриемника", ""); ОписаниеВарианта.Вставить("ИспользоватьПомощникСозданияОбменаДанными", Истина); + + ОписаниеВарианта.Вставить("ИмяФормыПомощникаНастройкиСинхронизацииДанных", ""); ОписаниеВарианта.Вставить("ИмяФормыСозданияНачальногоОбраза", ""); - ОписаниеВарианта.Вставить("ДополнительныеДанныеДляКорреспондента", Новый Структура); - ОписаниеВарианта.Вставить("ПояснениеДляНастройкиПараметровУчета", ""); - ОписаниеВарианта.Вставить("ПояснениеДляНастройкиПараметровУчетаБазыКорреспондента",""); + ОписаниеВарианта.Вставить("ПутьКФайлуКомплектаПравилНаПользовательскомСайте", ""); ОписаниеВарианта.Вставить("ПутьКФайлуКомплектаПравилВКаталогеШаблонов", ""); ОписаниеВарианта.Вставить("ЗаголовокКомандыДляСозданияНовогоОбменаДанными", МетаданныеПланаОбмена.Синоним); - ОписаниеВарианта.Вставить("ЗаголовокПомощникаСозданияОбмена", ЗаголовокФормыПомощника); - ОписаниеВарианта.Вставить("ЗаголовокУзлаПланаОбмена", МетаданныеПланаОбмена.Синоним); - ОписаниеВарианта.Вставить("ОтображатьНастройкуОтборовНаУзле", Истина); - ОписаниеВарианта.Вставить("ОтображатьЗначенияПоУмолчаниюНаУзле", Истина); - ОписаниеВарианта.Вставить("ОтображатьНастройкуОтборовНаУзлеБазыКорреспондента", Истина); - ОписаниеВарианта.Вставить("ОтображатьЗначенияПоУмолчаниюНаУзлеБазыКорреспондента", Истина); - ОписаниеВарианта.Вставить("НаименованиеКонфигурацииКорреспондента", МетаданныеПланаОбмена.Синоним); + ОписаниеВарианта.Вставить("ИмяКонфигурацииКорреспондента", ""); + ОписаниеВарианта.Вставить("НаименованиеКонфигурацииКорреспондента", ""); ОписаниеВарианта.Вставить("ИспользуемыеТранспортыСообщенийОбмена", Новый Массив); ОписаниеВарианта.Вставить("КраткаяИнформацияПоОбмену", ""); ОписаниеВарианта.Вставить("ПодробнаяИнформацияПоОбмену", ""); ОписаниеВарианта.Вставить("ОбщиеДанныеУзлов", ""); + + ОписаниеВарианта.Вставить("ЗаголовокПомощникаСозданияОбмена", ЗаголовокФормыПомощника); + ОписаниеВарианта.Вставить("ЗаголовокУзлаПланаОбмена", МетаданныеПланаОбмена.Синоним); + + ОписаниеВарианта.Вставить("ПояснениеДляНастройкиПараметровУчета", ""); + + ОписаниеВарианта.Вставить("Отборы", Новый Структура); + ОписаниеВарианта.Вставить("ЗначенияПоУмолчанию", Новый Структура); Возврат ОписаниеВарианта; + КонецФункции Функция КодПредопределенногоУзлаПланаОбмена(ИмяПланаОбмена) Экспорт @@ -12989,6 +12990,30 @@ Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(ИмяПланаОбмена), "Код"); КонецФункции +// Возвращает массив всех узлов для заданного плана обмена кроме предопределенного узла. +// +// Параметры: +// ИмяПланаОбмена - Строка - имя плана обмена как оно задано в конфигураторе. +// +// Возвращаемое значение: +// МассивУзлов - Массив - массив всех узлов для заданного плана обмена кроме предопределенного узла. +// +Функция УзлыПланаОбмена(ИмяПланаОбмена) Экспорт + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ПланОбмена.Ссылка КАК Ссылка + |ИЗ + | #ИмяТаблицыПланаОбмена КАК ПланОбмена + |ГДЕ + | НЕ ПланОбмена.ЭтотУзел"); + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "#ИмяТаблицыПланаОбмена", "ПланОбмена." + ИмяПланаОбмена); + + Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + +КонецФункции + #КонецОбласти #Область РаботаСКонстантойСообщениеОбменаИзГлавногоУзла @@ -13052,13 +13077,15 @@ Процедура СформироватьЗапросыНаИспользованиеВнешнихРесурсов(ЗапросыРазрешений) - Если ОбщегоНазначения.РазделениеВключено() И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + Если ОбщегоНазначения.РазделениеВключено() + И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда Возврат; КонецЕсли; Константы.КаталогСообщенийОбменаДаннымиДляLinux.СоздатьМенеджерЗначения().ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений); Константы.КаталогСообщенийОбменаДаннымиДляWindows.СоздатьМенеджерЗначения().ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений); - РегистрыСведений.НастройкиТранспортаОбмена.ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений); + + РегистрыСведений.НастройкиТранспортаОбменаДанными.ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений); РегистрыСведений.ПравилаДляОбменаДанными.ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений); КонецПроцедуры @@ -13566,7 +13593,7 @@ // Имя для сохранения и восстановления настроек при интерактивном дополнении выгрузки. // Функция ДополнениеВыгрузкиИмяАвтоСохраненияНастроек() Экспорт - Возврат НСтр("ru='Последняя отправка (сохраняется автоматически)'"); + Возврат НСтр("ru = 'Последняя отправка (сохраняется автоматически)'"); КонецФункции // Производит дополнительную регистрацию объектов по настройкам. @@ -13671,4 +13698,4 @@ #КонецОбласти -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl index e9300b50c..30c0d2a80 100644 --- a/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl @@ -212,7 +212,7 @@ #Иначе УстановитьПривилегированныйРежим(Истина); - Возврат ОбменДаннымиПовтИсп.УзлыПланаОбмена(ИмяПланаОбмена); + Возврат ОбменДаннымиСервер.УзлыПланаОбмена(ИмяПланаОбмена); #КонецЕсли @@ -943,6 +943,10 @@ ВызватьИсключение НСтр("ru = 'Регистрация изменений для неразделенных планов обмена не поддерживается.'"); КонецЕсли; + Если Не ОбменДаннымиПовтИсп.ПланОбменаИспользуетсяВМоделиСервиса(ИмяПланаОбмена) Тогда + Возврат; + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); ЭтоРазделенныеДанные = МодульРаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных( diff --git a/SSL/src/CommonModules/ОбменСообщениямиВнутренний/Module.bsl b/SSL/src/CommonModules/ОбменСообщениямиВнутренний/Module.bsl index 3fbc25a41..b4a77f4dc 100644 --- a/SSL/src/CommonModules/ОбменСообщениямиВнутренний/Module.bsl +++ b/SSL/src/CommonModules/ОбменСообщениямиВнутренний/Module.bsl @@ -342,6 +342,12 @@ Обработчик.МонопольныйРежим = Ложь; Обработчик.Процедура = "ОбменСообщениямиВнутренний.УстановитьКодЭтойКонечнойТочки"; + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "3.0.1.78"; + Обработчик.ОбщиеДанные = Истина; + Обработчик.РежимВыполнения = "Оперативно"; + Обработчик.Процедура = "ОбменСообщениямиВнутренний.ПеренестиНастройкиТранспортаОбменаСообщениями"; + КонецПроцедуры // См. ГрупповоеИзменениеОбъектовПереопределяемый.ПриОпределенииОбъектовСРедактируемымиРеквизитами. @@ -391,6 +397,59 @@ КонецПроцедуры +// Переносит настройки транспорта обмена сообщениями в новый регистр. +// +Процедура ПеренестиНастройкиТранспортаОбменаСообщениями() Экспорт + + Если ОбщегоНазначения.РазделениеВключено() + И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; + КонецЕсли; + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | НастройкиТранспорта.УзелИнформационнойБазы КАК КонечнаяТочка, + | НастройкиТранспорта.WSURLВебСервиса КАК АдресВебСервиса, + | НастройкиТранспорта.WSИмяПользователя КАК ИмяПользователя, + | НастройкиТранспорта.WSЗапомнитьПароль КАК ЗапомнитьПароль + |ИЗ + | РегистрСведений.УдалитьНастройкиТранспортаОбмена КАК НастройкиТранспорта + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланОбмена.ОбменСообщениями КАК ОбменСообщениями + | ПО (ОбменСообщениями.Ссылка = НастройкиТранспорта.УзелИнформационнойБазы) + |ГДЕ + | (ВЫРАЗИТЬ(НастройкиТранспорта.WSURLВебСервиса КАК СТРОКА(100))) <> """""); + + ТаблицаНастройки = Запрос.Выполнить().Выгрузить(); + + НачатьТранзакцию(); + Попытка + Для Каждого СтрокаНастройки Из ТаблицаНастройки Цикл + НаборЗаписейНовый = РегистрыСведений.НастройкиТранспортаОбменаСообщениями.СоздатьНаборЗаписей(); + НаборЗаписейНовый.Отбор.КонечнаяТочка.Установить(СтрокаНастройки.КонечнаяТочка); + + ЗаписьНастройки = НаборЗаписейНовый.Добавить(); + ЗаполнитьЗначенияСвойств(ЗаписьНастройки, СтрокаНастройки); + + НаборЗаписейНовый.Записать(Истина); + + МенеджерЗаписиСтарый = РегистрыСведений.УдалитьНастройкиТранспортаОбмена.СоздатьМенеджерЗаписи(); + МенеджерЗаписиСтарый.УзелИнформационнойБазы = СтрокаНастройки.КонечнаяТочка; + МенеджерЗаписиСтарый.Прочитать(); + + МенеджерЗаписиСтарый.WSURLВебСервиса = ""; + МенеджерЗаписиСтарый.WSЗапомнитьПароль = Ложь; + МенеджерЗаписиСтарый.WSИмяПользователя = ""; + + МенеджерЗаписиСтарый.Записать(Истина); + КонецЦикла; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Экспортные служебные процедуры и функции. @@ -415,8 +474,6 @@ ВыполнитьОтправкуИПолучениеСообщенийЧерезWebСервис(Отказ); - ВыполнитьОтправкуИПолучениеСообщенийЧерезОбычныеКаналыСвязи(Отказ); - ОбработатьОчередьСообщенийСистемы(); КонецПроцедуры @@ -699,16 +756,15 @@ // Обновляем настройки подключения. СтруктураЗаписи = Новый Структура; - СтруктураЗаписи.Вставить("Узел", КонечнаяТочка); - СтруктураЗаписи.Вставить("ВидТранспортаСообщенийОбменаПоУмолчанию", Перечисления.ВидыТранспортаСообщенийОбмена.WS); + СтруктураЗаписи.Вставить("КонечнаяТочка", КонечнаяТочка); - СтруктураЗаписи.Вставить("WSURLВебСервиса", НастройкиПодключенияОтправителя.WSURLВебСервиса); - СтруктураЗаписи.Вставить("WSИмяПользователя", НастройкиПодключенияОтправителя.WSИмяПользователя); - СтруктураЗаписи.Вставить("WSПароль", НастройкиПодключенияОтправителя.WSПароль); - СтруктураЗаписи.Вставить("WSЗапомнитьПароль", Истина); + СтруктураЗаписи.Вставить("АдресВебСервиса", НастройкиПодключенияОтправителя.WSURLВебСервиса); + СтруктураЗаписи.Вставить("ИмяПользователя", НастройкиПодключенияОтправителя.WSИмяПользователя); + СтруктураЗаписи.Вставить("Пароль", НастройкиПодключенияОтправителя.WSПароль); + СтруктураЗаписи.Вставить("ЗапомнитьПароль", Истина); // добавляем запись в РС - РегистрыСведений.НастройкиТранспортаОбмена.ДобавитьЗапись(СтруктураЗаписи); + РегистрыСведений.НастройкиТранспортаОбменаСообщениями.ДобавитьЗапись(СтруктураЗаписи); // Устанавливаем ведущую конечную точку на стороне получателя. WSПрокси.SetLeadingEndPoint(КонечнаяТочкаОбъект.Код, КодЭтогоУзла()); @@ -787,16 +843,15 @@ // Обновляем настройки подключения. СтруктураЗаписи = Новый Структура; - СтруктураЗаписи.Вставить("Узел", УзелКонечнойТочкиОбъект.Ссылка); - СтруктураЗаписи.Вставить("ВидТранспортаСообщенийОбменаПоУмолчанию", Перечисления.ВидыТранспортаСообщенийОбмена.WS); + СтруктураЗаписи.Вставить("КонечнаяТочка", УзелКонечнойТочкиОбъект.Ссылка); - СтруктураЗаписи.Вставить("WSURLВебСервиса", НастройкиПодключенияПолучателя.WSURLВебСервиса); - СтруктураЗаписи.Вставить("WSИмяПользователя", НастройкиПодключенияПолучателя.WSИмяПользователя); - СтруктураЗаписи.Вставить("WSПароль", НастройкиПодключенияПолучателя.WSПароль); - СтруктураЗаписи.Вставить("WSЗапомнитьПароль", Истина); + СтруктураЗаписи.Вставить("АдресВебСервиса", НастройкиПодключенияПолучателя.WSURLВебСервиса); + СтруктураЗаписи.Вставить("ИмяПользователя", НастройкиПодключенияПолучателя.WSИмяПользователя); + СтруктураЗаписи.Вставить("Пароль", НастройкиПодключенияПолучателя.WSПароль); + СтруктураЗаписи.Вставить("ЗапомнитьПароль", Истина); // добавляем запись в РС - РегистрыСведений.НастройкиТранспортаОбмена.ДобавитьЗапись(СтруктураЗаписи); + РегистрыСведений.НастройкиТранспортаОбменаСообщениями.ДобавитьЗапись(СтруктураЗаписи); // Устанавливаем признак использования регламентного задания. РегламентныеЗаданияСервер.УстановитьИспользованиеРегламентногоЗадания( @@ -852,16 +907,15 @@ // Обновляем настройки подключения. СтруктураЗаписи = Новый Структура; - СтруктураЗаписи.Вставить("Узел", КонечнаяТочка); - СтруктураЗаписи.Вставить("ВидТранспортаСообщенийОбменаПоУмолчанию", Перечисления.ВидыТранспортаСообщенийОбмена.WS); + СтруктураЗаписи.Вставить("КонечнаяТочка", КонечнаяТочка); - СтруктураЗаписи.Вставить("WSURLВебСервиса", НастройкиПодключенияОтправителя.WSURLВебСервиса); - СтруктураЗаписи.Вставить("WSИмяПользователя", НастройкиПодключенияОтправителя.WSИмяПользователя); - СтруктураЗаписи.Вставить("WSПароль", НастройкиПодключенияОтправителя.WSПароль); - СтруктураЗаписи.Вставить("WSЗапомнитьПароль", Истина); + СтруктураЗаписи.Вставить("АдресВебСервиса", НастройкиПодключенияОтправителя.WSURLВебСервиса); + СтруктураЗаписи.Вставить("ИмяПользователя", НастройкиПодключенияОтправителя.WSИмяПользователя); + СтруктураЗаписи.Вставить("Пароль", НастройкиПодключенияОтправителя.WSПароль); + СтруктураЗаписи.Вставить("ЗапомнитьПароль", Истина); // добавляем запись в РС - РегистрыСведений.НастройкиТранспортаОбмена.ОбновитьЗапись(СтруктураЗаписи); + РегистрыСведений.НастройкиТранспортаОбменаСообщениями.ОбновитьЗапись(СтруктураЗаписи); Если Не КонечнаяТочка = ПланыОбмена.ОбменСообщениями.ЭтотУзел() Тогда Если ВерсияКорреспондента_2_0_1_6 Тогда @@ -1105,7 +1159,7 @@ Если ТипЗнч(Корреспондент) = Тип("Структура") Тогда СтруктураНастроек = Корреспондент; Иначе - СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспортаWS(Корреспондент); + СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбменаСообщениями.НастройкиТранспортаWS(Корреспондент); КонецЕсли; ПараметрыПодключения = Новый Структура; @@ -1114,6 +1168,7 @@ ПараметрыПодключения.Вставить("Password", СтруктураНастроек.WSПароль); Возврат ОбщегоНазначения.ПолучитьВерсииИнтерфейса(ПараметрыПодключения, "ОбменСообщениями"); + КонецФункции // Только для внутреннего использования. @@ -1155,14 +1210,13 @@ | ОбменСообщениями.Ссылка КАК Ссылка |ИЗ | ПланОбмена.ОбменСообщениями КАК ОбменСообщениями - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиТранспортаОбмена КАК НастройкиТранспортаОбмена - | ПО ОбменСообщениями.Ссылка = НастройкиТранспортаОбмена.Узел + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиТранспортаОбменаСообщениями КАК НастройкиТранспорта + | ПО ОбменСообщениями.Ссылка = НастройкиТранспорта.КонечнаяТочка |ГДЕ | ОбменСообщениями.Ссылка <> &ЭтотУзел - | И (НЕ ОбменСообщениями.Ведущая) - | И (НЕ ОбменСообщениями.ПометкаУдаления) - | И (НЕ ОбменСообщениями.Заблокирована) - | И НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию = ЗНАЧЕНИЕ(Перечисление.ВидыТранспортаСообщенийОбмена.WS)"; + | И НЕ ОбменСообщениями.Ведущая + | И НЕ ОбменСообщениями.ПометкаУдаления + | И НЕ ОбменСообщениями.Заблокирована"; Запрос = Новый Запрос; Запрос.УстановитьПараметр("ЭтотУзел", ЭтотУзел()); @@ -1210,66 +1264,6 @@ КонецПроцедуры -// Только для внутреннего использования. -Процедура ВыполнитьОтправкуИПолучениеСообщенийЧерезОбычныеКаналыСвязи(Отказ) - - ТекстЗапроса = - "ВЫБРАТЬ РАЗЛИЧНЫЕ - | ОбменСообщениями.Ссылка КАК Ссылка - |ИЗ - | ПланОбмена.ОбменСообщениями КАК ОбменСообщениями - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиТранспортаОбмена КАК НастройкиТранспортаОбмена - | ПО ОбменСообщениями.Ссылка = НастройкиТранспортаОбмена.Узел - |ГДЕ - | ОбменСообщениями.Ссылка <> &ЭтотУзел - | И (НЕ ОбменСообщениями.ПометкаУдаления) - | И (НЕ ОбменСообщениями.Заблокирована) - | И НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию <> ЗНАЧЕНИЕ(Перечисление.ВидыТранспортаСообщенийОбмена.WS)"; - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ЭтотУзел", ЭтотУзел()); - Запрос.Текст = ТекстЗапроса; - - РезультатЗапроса = Запрос.Выполнить(); - - Если РезультатЗапроса.Пустой() Тогда - Возврат; - КонецЕсли; - - МассивУзлов = РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Ссылка"); - - // Загрузка данных от всех конечных точек. - Для Каждого Получатель Из МассивУзлов Цикл - - Отказ1 = Ложь; - - ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); - ПараметрыОбмена.ВыполнятьЗагрузку = Истина; - ПараметрыОбмена.ВыполнятьВыгрузку = Ложь; - - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Получатель, ПараметрыОбмена, Отказ1); - - Отказ = Отказ ИЛИ Отказ1; - - КонецЦикла; - - // Выгрузка данных для всех конечных точек. - Для Каждого Получатель Из МассивУзлов Цикл - - Отказ1 = Ложь; - - ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); - ПараметрыОбмена.ВыполнятьЗагрузку = Ложь; - ПараметрыОбмена.ВыполнятьВыгрузку = Истина; - - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Получатель, ПараметрыОбмена, Отказ1); - - Отказ = Отказ ИЛИ Отказ1; - - КонецЦикла; - -КонецПроцедуры - // Только для внутреннего использования. Процедура ВыполнитьПодключениеКонечнойТочкиНаСторонеОтправителя(Отказ, НастройкиПодключенияОтправителя, @@ -1349,16 +1343,15 @@ // Обновляем настройки подключения. СтруктураЗаписи = Новый Структура; - СтруктураЗаписи.Вставить("Узел", УзелКонечнойТочкиОбъект.Ссылка); - СтруктураЗаписи.Вставить("ВидТранспортаСообщенийОбменаПоУмолчанию", Перечисления.ВидыТранспортаСообщенийОбмена.WS); + СтруктураЗаписи.Вставить("КонечнаяТочка", УзелКонечнойТочкиОбъект.Ссылка); - СтруктураЗаписи.Вставить("WSURLВебСервиса", НастройкиПодключенияОтправителя.WSURLВебСервиса); - СтруктураЗаписи.Вставить("WSИмяПользователя", НастройкиПодключенияОтправителя.WSИмяПользователя); - СтруктураЗаписи.Вставить("WSПароль", НастройкиПодключенияОтправителя.WSПароль); - СтруктураЗаписи.Вставить("WSЗапомнитьПароль", Истина); + СтруктураЗаписи.Вставить("АдресВебСервиса", НастройкиПодключенияОтправителя.WSURLВебСервиса); + СтруктураЗаписи.Вставить("ИмяПользователя", НастройкиПодключенияОтправителя.WSИмяПользователя); + СтруктураЗаписи.Вставить("Пароль", НастройкиПодключенияОтправителя.WSПароль); + СтруктураЗаписи.Вставить("ЗапомнитьПароль", Истина); // добавляем запись в РС - РегистрыСведений.НастройкиТранспортаОбмена.ДобавитьЗапись(СтруктураЗаписи); + РегистрыСведений.НастройкиТранспортаОбменаСообщениями.ДобавитьЗапись(СтруктураЗаписи); ПараметрыЭтойТочки = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ЭтотУзел(), "Код, Наименование"); diff --git a/SSL/src/CommonModules/ОбменСообщениямиПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбменСообщениямиПовтИсп/Module.bsl index be078351d..25e2cda71 100644 --- a/SSL/src/CommonModules/ОбменСообщениямиПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбменСообщениямиПовтИсп/Module.bsl @@ -7,7 +7,7 @@ // Функция WSПроксиКонечнойТочки(КонечнаяТочка, Таймаут) Экспорт - СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспортаWS(КонечнаяТочка); + СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбменаСообщениями.НастройкиТранспортаWS(КонечнаяТочка); СтрокаСообщенияОбОшибке = ""; diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl index 3bcc6c3dc..4effa2444 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl @@ -302,7 +302,8 @@ Если НезавершенныеОбработчики.Количество() > 0 Тогда ТекстИсключения = НСтр("ru = 'Действия с объектом временно запрещены, так как не завершен переход на новую версию программы. - |Не завершены следующие процедуры обработки данных:'"); + |Это плановый процесс, который скоро завершится. + |Остались следующие процедуры обработки данных:'"); НевыполненныеОбработчикиСтрокой = ""; Для Каждого НезавершенныйОбработчик Из НезавершенныеОбработчики Цикл @@ -619,6 +620,7 @@ // ОсновныеПараметры - Структура - см. ОбновлениеИнформационнойБазы.ОсновныеПараметрыОтметкиКОбработке. // Данные - Ссылка, Массив, НаборЗаписей - данные, по которым нужно зарегистрировать изменения. // - ТаблицаЗначений - значения измерений независимого регистра сведений. Требования: +// - нет измерений с именем "Узел". // - все измерения регистра должны входить в основной отбор // - в таблице должны быть только колонки, соответствующие по именам измерениям регистра, // по которым нужно регистрировать необходимость обработки @@ -790,21 +792,25 @@ // // Возвращаемое значение: // Структура - поля структуры: -// *ВыбиратьПорциями - Булево - выбирать данные для обработки порциями. -// Если выбираются документы, то в порция определяется с учетом упорядочивания по убыванию по дате документа. -// Если выбираются регистраторы регистра, то в порция определяется с учетом упорядочивания по убыванию -// по дате регистратора , если передано полное имя документа. Если полное имя документа не передано -// - упорядочивание происходит по периоду регистра: -// - берется максимальная дата по каждому регистратору -// - если по регистратору нет записей - он в топе. -// *ИмяВременнойТаблицы - Строка - параметр актуален для методов, создающих временные таблицы. Если имя не задано (поведение по умолчанию), -// то временная таблица будет создана с именем, указанным в описании каждого метода. -// *ДополнительныеИсточникиДанных - Соответствие - параметр актуален для методов, выбирающих регистраторы и ссылки для обработки. -// В ключах соответствия лежат пути к реквизитам шапки документа -// или реквизитам табличных частей, -// которые участвуют в соединениях с другими таблицами (в т.ч. неявных соединениях при обращении -// "через точку"). Процедуры проверяют блокировку данных этих таблиц обработчиками меньших очередей. -// Формат имен <ИмяРеквизита> или <ИмяТабличной>.<ИмяРеквизитаТабличнойЧасти>. +// * ВыбиратьПорциями - Булево - выбирать данные для обработки порциями. +// Если выбираются документы, то в порция определяется с учетом упорядочивания по убыванию +// по дате документа. Если выбираются регистраторы регистра, то в порция определяется с +// учетом упорядочивания по убыванию по дате регистратора , если передано полное имя +// документа. Если полное имя документа не передано - упорядочивание происходит по периоду регистра: +// - берется максимальная дата по каждому регистратору +// - если по регистратору нет записей - он в топе. +// * ИмяВременнойТаблицы - Строка - параметр актуален для методов, создающих временные таблицы. Если имя не задано +// (поведение по умолчанию), то временная таблица будет создана с именем, указанным +// в описании каждого метода. +// * ДополнительныеИсточникиДанных - Соответствие - параметр актуален для методов, выбирающих регистраторы и ссылки +// для обработки. В ключах соответствия лежат пути к реквизитам +// шапки документа или реквизитам табличных частей, +// которые участвуют в соединениях с другими таблицами (в т.ч. +// неявных соединениях при обращении "через точку"). Процедуры +// проверяют блокировку данных этих таблиц обработчиками меньших +// очередей. Формат имен <ИмяРеквизита> или <ИмяТабличной>.<ИмяРеквизитаТабличнойЧасти>. +// * ПоляУпорядочивания - Массив - имена полей независимого регистра сведений, используется для упорядочивания +// результата запроса. // Функция ДополнительныеПараметрыВыборкиДанныхДляОбработки() Экспорт @@ -1402,19 +1408,18 @@ КонецФункции // Возвращает значения измерений независимого регистра сведений для обработки. -// Данные берутся из зарегистрированных в очереди, учитываются заблокированные более приоритетными очередями данные. +// Данные берутся из зарегистрированных в очереди, учитываются заблокированные более приоритетными очередями данные. // // Параметры: -// Очередь - Число - очередь, к которой отнесен обработчик и в которой зарегистрированы данные, которые он будет -// обрабатывать. -// ПолноеИмяОбъекта - Строка - имя объекта, который нужно обработать. Например, РегистрСведений.ШтрихкодыНоменклатуры. -// ДополнительныеПараметры - Структура - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляОбработки. +// Очередь - Число - очередь, к которой отнесен обработчик и в которой зарегистрированы данные, которые он будет +// обрабатывать. +// ПолноеИмяОбъекта - Строка - имя объекта, который нужно обработать. Например, РегистрСведений.ШтрихкодыНоменклатуры. +// ДополнительныеПараметры - Структура - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляОбработки. // // Возвращаемое значение: // ВыборкаИзРезультатаЗапроса - выборка значений измерений, которые нужно обработать, имена полей соответствует именам -// измерений регистра. -// Если по измерению не регистрировалась необходимость обработки, то в выборке по этому измерению будет -// пустое значение. +// измерений регистра. Если по измерению не регистрировалась необходимость обработки, +// то в выборке по этому измерению будет пустое значение. // Функция ВыбратьИзмеренияНезависимогоРегистраСведенийДляОбработки(Очередь, ПолноеИмяОбъекта, ДополнительныеПараметры = Неопределено) Экспорт Если ДополнительныеПараметры = Неопределено Тогда @@ -1462,9 +1467,9 @@ | ТаблицаИзменений." + Измерение.Имя + " КАК " + Измерение.Имя + ","; ТекстУсловияСоединенияИзмерений = ТекстУсловияСоединенияИзмерений + " - | И ТаблицаИзменений." + Измерение.Имя + " = ВТЗаблокированоИзмерения." + Измерение.Имя + " + | И (ТаблицаИзменений." + Измерение.Имя + " = ВТЗаблокированоИзмерения." + Измерение.Имя + " | ИЛИ ТаблицаИзменений." + Измерение.Имя + " = &ПустоеЗначениеИзмерения"+ Измерение.Имя + " - | ИЛИ ВТЗаблокированоИзмерения." + Измерение.Имя + " = &ПустоеЗначениеИзмерения"+ Измерение.Имя; + | ИЛИ ВТЗаблокированоИзмерения." + Измерение.Имя + " = &ПустоеЗначениеИзмерения"+ Измерение.Имя + ")"; Запрос.УстановитьПараметр("ПустоеЗначениеИзмерения"+ Измерение.Имя, Измерение.Тип.ПривестиЗначение()); Если ПервоеИзмерение Тогда @@ -1489,7 +1494,7 @@ ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстВыборкиИзмерений", ТекстВыборкиИзмерений); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстУсловияСоединенияИзмерений", ТекстУсловияСоединенияИзмерений); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстУсловияПоОтборуНезаблокированных", ТекстУсловияПоОтборуНезаблокированных); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"#ТаблицаОбъектаИзменения", ПолноеИмяОбъекта + ".Изменения"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ТаблицаОбъектаИзменения", ПолноеИмяОбъекта + ".Изменения"); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ВТЗаблокированоИзмерения","ВТЗаблокировано" + ИмяОбъекта); Если Не ДополнительныеПараметры.ВыбиратьПорциями Тогда ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВЫБРАТЬ ПЕРВЫЕ 10000","ВЫБРАТЬ"); @@ -1811,7 +1816,8 @@ | #ТаблицаИзменений КАК ТаблицаИзменений |ГДЕ | &УсловиеОтбораУзла - | И &УсловиеОтбораДанных"; + | И &УсловиеОтбораДанных + | И НЕ Регистратор.Ссылка ЕСТЬ NULL"; Если Отбор <> Неопределено Тогда УсловиеОтбораДанных = "ТаблицаИзменений.Регистратор В (&Отбор)"; @@ -1882,7 +1888,7 @@ // Ключ структуры - имя измерения, значение - значение отбора (можно передать массив значений). // // Возвращаемое значение: -// Булево - Истина, если еще не все данные обработаны. +// Булево - Истина, если все данные обработаны. // Функция ОбработкаДанныхЗавершена(Очередь, ПолноеИмяМетаданныеОбъекта, Отбор = Неопределено) Экспорт diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl index 563f53a8e..0f6d915a8 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl @@ -32,7 +32,7 @@ Процедура ПриДобавленииПодсистемы(Описание) Экспорт Описание.Имя = "СтандартныеПодсистемы"; - Описание.Версия = "2.4.6.177"; + Описание.Версия = "3.0.1.204"; Описание.РежимВыполненияОтложенныхОбработчиков = "Параллельно"; Описание.ПараллельноеОтложенноеОбновлениеСВерсии = "2.3.3.0"; diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/Module.bsl index 29e593817..a73f022da 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/Module.bsl @@ -20,7 +20,7 @@ // несколько обработчиков обновления. По умолчанию - Ложь. // Это влияет, как на количество потоков выполнения обработчиков обновления, // так и количество потоков регистрации данных для обновления. -// ВАЖНО: Перед установкой значения Истина ознакомьтесь с документацией. +// ВАЖНО: Перед включением ознакомьтесь с документацией. // * КоличествоПотоковОбновленияИнформационнойБазыПоУмолчанию - Строка - количество потоков отложенного обновления // используемое, когда не задано значение для константы // КоличествоПотоковОбновленияИнформационнойБазы. По умолчанию равно 1. diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Module.bsl index 72b0bccce..50d64a700 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Module.bsl @@ -295,9 +295,7 @@ УстановитьПривилегированныйРежим(Ложь); УстановитьЗапускОбновленияИнформационнойБазы(Ложь); - Если Не ПараметрыОбновления.ПриЗапускеКлиентскогоПриложения Тогда - ПараметрыСеанса.ВыполняетсяОбновлениеИБ = Ложь; - КонецЕсли; + ПараметрыСеанса.ВыполняетсяОбновлениеИБ = Ложь; Возврат "Успешно"; @@ -885,7 +883,12 @@ И ПриЗапуске = Истина Тогда Результат = ОтметкаНачалаОбновления(); - Если Не Результат.МожноВыполнятьОбновление Тогда + Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда + + Возврат НСтр("ru = 'Вход в программу временно невозможен в связи с обновлением на новую версию. + |Для завершения обновления версии программы требуются запуск в режиме толстого, тонкого или ВЕБ-клиента'"); + + ИначеЕсли Не Результат.МожноВыполнятьОбновление Тогда Сообщение = НСтр("ru = 'Вход в программу временно невозможен в связи с обновлением на новую версию. |Обновление уже выполняется: | компьютер - %1 @@ -1467,15 +1470,6 @@ КонецПроцедуры -// См. ВыгрузкаЗагрузкаДанныхПереопределяемый.ПослеЗагрузкиДанных. -Процедура ПослеЗагрузкиДанных(Контейнер) Экспорт - СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); - - Если СведенияОбОбновлении.ОтложенноеОбновлениеЗавершеноУспешно <> Истина Тогда - ЗапланироватьОтложенноеОбновление(); - КонецЕсли; -КонецПроцедуры - #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -2705,10 +2699,8 @@ СведенияОбОбновлении.ОбрабатываемыеДанные.Вставить(ОписаниеПроцедуры.ИмяОбработчика, Результат.ДанныеОбработчика); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда - Если Результат.ДанныеОбновления <> Неопределено Тогда - МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); - МодульОбменДаннымиСервер.СохранитьДанныеОбновления(Результат.ДанныеОбновления, Результат.ИмяФайлаСИзменениями); - КонецЕсли; + МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); + МодульОбменДаннымиСервер.СохранитьДанныеОбновления(Результат.ДанныеОбновления, Результат.ИмяФайлаСИзменениями); КонецЕсли; КонецПроцедуры @@ -2827,12 +2819,7 @@ ЗагрузитьРезультатВыполненияОбработчика(КонтекстОбработчика, АдресРезультата); ДеревоОбработчиков = СведенияОбОбновлении.ДеревоОбработчиков; ПараметрыСеанса.ПараметрыОбработчикаОбновления = КонтекстОбработчика.ПараметрыОбработчикаОбновления; - - Если КонтекстОбработчика.ЗапускВыполненБезОшибок Тогда - ПослеЗапускаПроцедурыОбработкиДанных(КонтекстОбработчика, ОбработчикОбновления, ДеревоОбработчиков); - КонецЕсли; - - ЗавершитьПроцедуруОбработкиДанных(КонтекстОбработчика, ОбработчикОбновления); + ПослеЗапускаПроцедурыОбработкиДанных(КонтекстОбработчика, ОбработчикОбновления, ДеревоОбработчиков); ПараметрыСеанса.ПараметрыОбработчикаОбновления = Новый ФиксированнаяСтруктура(НовыеПараметрыОбработчикаОбновления()); ЗавершитьВыполнениеОтложенногоОбработчикаОбновления(КонтекстОбработчика, СведенияОбОбновлении); @@ -2916,7 +2903,6 @@ // * ВыполнитьОбработчик - Булево - если Истина, то обработчик готов к выполнению. // * ДетальноеОписаниеОбработчика - Структура - см. ПодготовитьДетальнуюИнформациюОХодеОбновления(). // * ЗаписыватьВЖурнал - Булево - см. Константы.ДетализироватьОбновлениеИБВЖурналеРегистрации. -// * ЗапускВыполненБезОшибок - Булево - если Истина, то при запуске обработчика не возникло исключений. // * ИдентификаторОбработчика - УникальныйИдентификатор - идентификатор обработчика обновления. // * ИмяОбработчика - Строка - имя обработчика обновления. // * ИндексОписанияЦиклаОбновления - Число - индекс элемента плана обновления. @@ -2938,7 +2924,6 @@ КонтекстОбработчика.Вставить("ДетальноеОписаниеОбработчика"); КонтекстОбработчика.Вставить("ЕстьНеЗакрытыеТранзакции", Ложь); КонтекстОбработчика.Вставить("ЗаписыватьВЖурнал"); - КонтекстОбработчика.Вставить("ЗапускВыполненБезОшибок", Ложь); КонтекстОбработчика.Вставить("ИдентификаторОбработчика"); КонтекстОбработчика.Вставить("ИмяОбработчика"); КонтекстОбработчика.Вставить("ИндексОписанияЦиклаОбновления"); @@ -5070,7 +5055,6 @@ ИмяОбработчика = ОбработчикОбновления.ИмяОбработчика; Попытка - КонтекстОбработчика.ЗапускВыполненБезОшибок = Истина; СообщениеОЗапущенномОбработчике = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Выполняется процедура обновления ""%1"".'"), ИмяОбработчика); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация,,, СообщениеОЗапущенномОбработчике); @@ -5161,10 +5145,9 @@ КонецЕсли; Исключение ОбработатьИсключениеОбработчика(КонтекстОбработчика, ОбработчикОбновления, ИнформацияОбОшибке()); - КонтекстОбработчика.ЗапускВыполненБезОшибок = Ложь; КонецПопытки; - ЗавершитьПроцедуруОбработкиДанных(КонтекстОбработчика, ОбработчикОбновления); + ПослеЗапускаПроцедурыОбработкиДанных(КонтекстОбработчика, ОбработчикОбновления, ДеревоОбработчиков); КонецПроцедуры @@ -5250,18 +5233,6 @@ ОбработатьИсключениеОбработчика(КонтекстОбработчика, ОбработчикОбновления, ИнформацияОбОшибке()); КонецПопытки; -КонецПроцедуры - -// Завершение процедуры обработки данных. -// -// Параметры: -// КонтекстОбработчика - Структура - см. НовыйКонтекстОбработчика(). -// ОбработчикОбновления - СтрокаДереваЗначений - обработчик обновления в виде строки дерева обработчиков. -// -Процедура ЗавершитьПроцедуруОбработкиДанных(КонтекстОбработчика, ОбработчикОбновления) - - Параметры = КонтекстОбработчика.Параметры; - // Если обработчик обновления передал параметры, их нужно сохранить. ПереданныеПараметры = ПереданныеПараметрыОбработчикаОбновления(Параметры); ОбработчикОбновления.СтатистикаВыполнения.Вставить("ПараметрыОбработчика", ПереданныеПараметры); @@ -5281,7 +5252,7 @@ КонецПроцедуры -Процедура СоставитьПланОтложенногоОбновления(СведенияОбОбновленииИБ, ПовторноеФормирование = Ложь) Экспорт +Процедура СоставитьПланОтложенногоОбновления(СведенияОбОбновленииИБ) ЭтоПодчиненныйУзелРИБ = ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ(); ЭтоПодчиненныйУзелРИБСФильтром = ОбщегоНазначения.ЭтоПодчиненныйУзелРИБСФильтром(); @@ -5315,9 +5286,7 @@ СоздаватьНовуюИтерацию = Истина; ПропуститьПроверку = Ложь; Для Каждого ДеревоОбработчиковВерсия Из ДеревоОбработчиковБиблиотека.Строки Цикл - Если Не ПовторноеФормирование Тогда - ЗаполнитьБлокируемыеОбъекты(ДеревоОбработчиковВерсия, СведенияОбОбновленииИБ, СведенияОБлокируемыхОбъектах); - КонецЕсли; + ЗаполнитьБлокируемыеОбъекты(ДеревоОбработчиковВерсия, СведенияОбОбновленииИБ, СведенияОБлокируемыхОбъектах); Если СоздаватьНовуюИтерацию Тогда ИтерацияОбновления = Новый Структура; @@ -5356,9 +5325,6 @@ КонецЕсли; Для Каждого Обработчик Из ДеревоОбработчиковВерсия.Строки Цикл - Если ПовторноеФормирование И Обработчик.Статус = "Выполнено" Тогда - Продолжить; - КонецЕсли; Если ИтерацияОбновления.Режим = "Параллельно" И Не ЭтоПодчиненныйУзелРИБ И Обработчик.ЗапускатьТолькоВГлавномУзле = Истина Тогда @@ -5411,10 +5377,9 @@ КонецЕсли; КонецЦикла; - Если Не ПовторноеФормирование Тогда - ЗаписатьСведенияОБлокируемыхОбъектах(СведенияОБлокируемыхОбъектах); - Константы.ОтложенноеОбновлениеВГлавномУзлеЗавершеноУспешно.Установить(Не ЕстьОбработчикиТолькоГлавногоУзла); - КонецЕсли; + ЗаписатьСведенияОБлокируемыхОбъектах(СведенияОБлокируемыхОбъектах); + + Константы.ОтложенноеОбновлениеВГлавномУзлеЗавершеноУспешно.Установить(Не ЕстьОбработчикиТолькоГлавногоУзла); ОписаниеОбработчика = Новый Структура; ОписаниеОбработчика.Вставить("ИмяОбработчика", ""); diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl index 25c62bb92..ae7dcc60d 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl @@ -49,6 +49,153 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Работа с исправлениями (патчами). + +// Возвращает информацию об установленных патчах в конфигурации. +// +// Возвращаемое значение: +// Массив - структуры с ключами: +// * Идентификатор - Строка - уникальный идентификатор исправления (патча). +// - Неопределено - если установка исправления выполнялась +// в текущем сеансе и еще не был выполнен перезапуск. +// * Наименование - Строка - наименование исправления. +// +Функция УстановленныеИсправления() Экспорт + + Результат = Новый Массив; + УстановленныеРасширения = РасширенияКонфигурации.Получить(); + Для Каждого Расширение Из УстановленныеРасширения Цикл + Если Не ЭтоИсправление(Расширение) Тогда + Продолжить; + КонецЕсли; + ИнформацияОбИсправлении = Новый Структура("Идентификатор, Наименование"); + СвойстваИсправления = СвойстваИсправления(Расширение.Имя); + + Если СвойстваИсправления <> Неопределено Тогда + ИнформацияОбИсправлении.Идентификатор = СвойстваИсправления.UUID; + КонецЕсли; + ИнформацияОбИсправлении.Наименование = Расширение.Имя; + + Результат.Добавить(ИнформацияОбИсправлении); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Производит установку/удаление патчей. +// +// Параметры: +// Исправления - структура - с ключами: +// * Установить - Массив - пути к файлам исправлений во временном хранилище, +// которые требуется установить. +// * Удалить - Массив - уникальные идентификаторы (Строка) исправлений, которые требуется удалить. +// +// Возвращаемое значение: +// Структура - с ключами: +// * Установленные - Массив - имена (Строка) установленных исправлений. +// * НеУстановлено - Число - количество неустановленных исправлений. +// * НеУдалено - Число - количество неудаленных исправлений. +// +Функция УстановкаИУдалениеИсправлений(Исправления) Экспорт + + Устанавливаемые = Неопределено; + НеУстановлено = 0; + Установленные = Новый Массив; + Если Исправления.Свойство("Установить", Устанавливаемые) + И Устанавливаемые <> Неопределено + И Устанавливаемые.Количество() > 0 Тогда + + Для Каждого Патч Из Устанавливаемые Цикл + Попытка + Расширение = РасширенияКонфигурации.Создать(); + Расширение.БезопасныйРежим = Ложь; + Если ОбщегоНазначения.ЕстьЗащитаОтОпасныхДействий() Тогда + Расширение.ЗащитаОтОпасныхДействий = ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений(); + КонецЕсли; + Расширение.ИспользуетсяВРаспределеннойИнформационнойБазе = Истина; + Расширение.Записать(ПолучитьИзВременногоХранилища(Патч)); + + УстановленноеИсправление = РасширениеПоИдентификатору(Расширение.УникальныйИдентификатор); + Установленные.Добавить(УстановленноеИсправление.Имя); + Исключение + НеУстановлено = НеУстановлено + 1; + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При установке исправления ""%1"" произошла ошибка: + | + |%2'"), Расширение.Имя, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Исправления.Установка'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); + КонецПопытки; + КонецЦикла; + + КонецЕсли; + + Удаляемые = Неопределено; + НеУдалено = 0; + Если Исправления.Свойство("Удалить", Удаляемые) + И Удаляемые <> Неопределено + И Удаляемые.Количество() > 0 Тогда + ВсеРасширения = РасширенияКонфигурации.Получить(); + Для Каждого Расширение Из ВсеРасширения Цикл + Если Не ЭтоИсправление(Расширение) Тогда + Продолжить; + КонецЕсли; + Попытка + СвойстваИсправления = СвойстваИсправления(Расширение.Имя); + Идентификатор = СвойстваИсправления.UUID; + Если Удаляемые.Найти(Строка(Идентификатор)) <> Неопределено Тогда + Расширение.Удалить(); + КонецЕсли; + Исключение + НеУдалено = НеУдалено + 1; + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось удалить исправление ""%1"" по причине: + | + |%2'"), Расширение.Имя, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Исправления.Удаление'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()) + , УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); + КонецПопытки; + КонецЦикла; + КонецЕсли; + +#Если Не ВнешнееСоединение Тогда + РегистрыСведений.ПараметрыРаботыВерсийРасширений.ОбновитьПараметрыРаботыРасширений(); +#КонецЕсли + + Результат = Новый Структура; + Результат.Вставить("НеУстановлено", НеУстановлено); + Результат.Вставить("НеУдалено", НеУдалено); + Результат.Вставить("Установленные", Установленные); + + Возврат Результат; + +КонецФункции + +// Проверка, показывающая есть ли расширения, требующие отображение +// предупреждения об имеющихся расширениях. +// Проверяет наличие расширений не являющихся исправлениями (патчами). +// +// Возвращаемое значение: +// Булево - результат проверки. +// +Функция ПредупреждатьОНаличииРасширений() Экспорт + + ВсеРасширения = РасширенияКонфигурации.Получить(); + + Для Каждого Расширение Из ВсеРасширения Цикл + Если Не ЭтоИсправление(Расширение) Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + Возврат Ложь; + +КонецФункции + // Конец ИнтернетПоддержкаПользователей.ПолучениеОбновленийПрограммы #КонецОбласти @@ -62,7 +209,7 @@ // Параметры: // РезультатОбновления - Булево - Результат обновления. // -Процедура ЗавершитьОбновление(Знач РезультатОбновления, Знач ЭлектроннаяПочта, Знач ИмяАдминистратораОбновления) Экспорт +Процедура ЗавершитьОбновление(Знач РезультатОбновления, Знач ЭлектроннаяПочта, Знач ИмяАдминистратораОбновления, Знач КаталогСкрипта = Неопределено) Экспорт ТекстСообщения = НСтр("ru = 'Завершение обновления из внешнего скрипта.'"); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация,,,ТекстСообщения); @@ -73,7 +220,11 @@ ВызватьИсключение ТекстСообщения; КонецЕсли; - ЗаписатьСтатусОбновления(ИмяАдминистратораОбновления, Ложь, Истина, РезультатОбновления); + Если КаталогСкрипта = Неопределено Тогда + КаталогСкрипта = КаталогСкрипта(); + КонецЕсли; + + ЗаписатьСтатусОбновления(ИмяАдминистратораОбновления, Ложь, Истина, РезультатОбновления, КаталогСкрипта); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") И Не ПустаяСтрока(ЭлектроннаяПочта) Тогда @@ -98,15 +249,16 @@ Функция КаталогСкрипта() Экспорт КаталогСкрипта = ""; - Если СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() Тогда - ПараметрЗапускаКлиента = ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить("ПараметрЗапуска"); - Если СтрНайти(ПараметрЗапускаКлиента, "ВыполнитьОбновлениеИЗавершитьРаботу") > 0 Тогда - СтатусОбновления = Константы.СтатусОбновленияКонфигурации.Получить().Получить(); - Если СтатусОбновления <> Неопределено - И СтатусОбновления.Свойство("КаталогСкрипта") Тогда - КаталогСкрипта = СтатусОбновления.КаталогСкрипта; - КонецЕсли; + + Если Не ОбщегоНазначения.РазделениеВключено() Тогда + + СтатусОбновления = Константы.СтатусОбновленияКонфигурации.Получить().Получить(); + Если СтатусОбновления <> Неопределено + И СтатусОбновления.Свойство("КаталогСкрипта") Тогда + + КаталогСкрипта = СтатусОбновления.КаталогСкрипта; КонецЕсли; + КонецЕсли; Возврат КаталогСкрипта; @@ -121,6 +273,180 @@ КонецФункции +// Удаляет устаревшие исправления, обновляет свойства новых исправлений. +// +Функция ИсправленияИзменены() Экспорт + + ИсправленияИзменены = Ложь; + + // Для расширений, которые подключились нужно проверять версию. + Исправления = Новый Массив; + Расширения = РасширенияКонфигурации.Получить(, ИсточникРасширенийКонфигурации.СеансАктивные); + Для Каждого Расширение Из Расширения Цикл + Если ЭтоИсправление(Расширение) Тогда + Исправления.Добавить(Расширение); + КонецЕсли; + КонецЦикла; + + Если Исправления.Количество() > 0 Тогда + + ОписанияПодсистем = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем(); + + БиблиотекиКонфигурации = Новый Соответствие; + Для Каждого Подсистема Из ОписанияПодсистем.ПоИменам Цикл + БиблиотекиКонфигурации.Вставить(Подсистема.Ключ, Подсистема.Значение.Версия); + КонецЦикла; + + Для Каждого Исправление Из Исправления Цикл + УдалитьИсправление = Истина; + СвойстваИсправления = СвойстваИсправления(Исправление.Имя); + Если СвойстваИсправления = Неопределено Тогда + // Исправление еще не применено. + УдалитьИсправление = Ложь; + Иначе + Для Каждого ИнформацияОПрименимости Из СвойстваИсправления.AppliedFor Цикл + ВерсияБиблиотекиКонфигурации = БиблиотекиКонфигурации.Получить(ИнформацияОПрименимости.ConfigurationName); + + Если ВерсияБиблиотекиКонфигурации <> Неопределено + И СтрНайти(ИнформацияОПрименимости.Versions, ВерсияБиблиотекиКонфигурации) > 0 Тогда + УдалитьИсправление = Ложь; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если УдалитьИсправление Тогда + Попытка + Исправление.Удалить(); + ИсправленияИзменены = Истина; + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось удалить исправление ""%1"" по причине: + | + |%2'"), Исправление.Имя, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Исправления.Удаление'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); + ВызватьИсключение ТекстОшибки; + КонецПопытки; + Иначе + ТребуетсяЗапись = Ложь; + Если ОбщегоНазначения.ЕстьЗащитаОтОпасныхДействий() Тогда + ЗащитаОтОпасныхДействий = ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений(); + Если Исправление.ЗащитаОтОпасныхДействий.ПредупреждатьОбОпасныхДействиях + <> ЗащитаОтОпасныхДействий.ПредупреждатьОбОпасныхДействиях Тогда + Исправление.ЗащитаОтОпасныхДействий = ЗащитаОтОпасныхДействий; + ТребуетсяЗапись = Истина; + КонецЕсли; + КонецЕсли; + Если Исправление.БезопасныйРежим <> Ложь Тогда + Исправление.БезопасныйРежим = Ложь ; + ИсправленияИзменены = Истина; + КонецЕсли; + + Если ТребуетсяЗапись Тогда + Попытка + Исправление.Записать(); + ИсправленияИзменены = Истина; + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При записи исправления ""%1"" произошла ошибка: + | + |%2'"), Исправление.Имя, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Исправления.Изменение'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); + ВызватьИсключение ТекстОшибки; + КонецПопытки; + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + // Неподключенные исправления удаляем без проверки версии. + Расширения = РасширенияКонфигурации.Получить(, ИсточникРасширенийКонфигурации.СеансОтключенные); + Для Каждого Расширение Из Расширения Цикл + Если ЭтоИсправление(Расширение) Тогда + Попытка + Расширение.Удалить(); + ИсправленияИзменены = Истина; + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось удалить отключенное исправление ""%1"" по причине: + | + |%2'"), Расширение.Имя, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Исправления.Удаление'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); + ВызватьИсключение ТекстОшибки; + КонецПопытки; + КонецЕсли; + КонецЦикла; + + Возврат ИсправленияИзменены; + +КонецФункции + +// Зачитывает свойства исправления из макета. Имя макет должно совпадать с именем исправления. +// Формат макеты XML. Соответствует XDTO пакету ErrorFix. +// +Функция СвойстваИсправления(ИмяИсправления) Экспорт + + Если Метаданные.ОбщиеМакеты.Найти(ИмяИсправления) = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + СтрокаXML = ПолучитьОбщийМакет(ИмяИсправления).ПолучитьТекст(); + + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.УстановитьСтроку(СтрокаXML); + + Возврат ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ФабрикаXDTO.Тип("http://www.v8.1c.ru/ssl/patch", "Patch")); + +КонецФункции + +Функция ЭтоИсправление(Расширение) Экспорт + + Возврат Расширение.Назначение = Метаданные.СвойстваОбъектов.НазначениеРасширенияКонфигурации.Исправление + И СтрНачинаетсяС(Расширение.Имя, "EF"); + +КонецФункции + +Процедура ОбновитьИсправленияИзСкрипта(НовыеИсправления, УдаляемыеИсправления) Экспорт + + УстанавливаемыеИсправления = Новый Массив; + Если ЗначениеЗаполнено(НовыеИсправления) Тогда + НовыеИсправленияМассив = СтрРазделить(НовыеИсправления, Символы.ПС); + Для Каждого Исправление Из НовыеИсправленияМассив Цикл + ДанныеИсправления = Новый ДвоичныеДанные(Исправление); + УстанавливаемыеИсправления.Добавить(ПоместитьВоВременноеХранилище(ДанныеИсправления)); + КонецЦикла; + КонецЕсли; + + УдаляемыеИсправленияМассив = Новый Массив; + Если ЗначениеЗаполнено(УдаляемыеИсправления) Тогда + УдаляемыеИсправленияМассив = СтрРазделить(УдаляемыеИсправления, Символы.ПС); + КонецЕсли; + + Исправления = Новый Структура("Установить, Удалить", УстанавливаемыеИсправления, УдаляемыеИсправленияМассив); + Результат = УстановкаИУдалениеИсправлений(Исправления); + Результат.Вставить("ВсегоПатчей", УстанавливаемыеИсправления.Количество()); + + ЗначениеХранилища = Константы.СтатусОбновленияКонфигурации.Получить(); + Если ЗначениеХранилища = Неопределено Тогда + Возврат; + КонецЕсли; + Статус = ЗначениеХранилища.Получить(); + Если Статус = Неопределено Тогда + Возврат; + КонецЕсли; + Если Не Статус.Свойство("РезультатУстановкиПатчей") Тогда + Статус.Вставить("РезультатУстановкиПатчей"); + КонецЕсли; + Статус.РезультатУстановкиПатчей = Результат; + Константы.СтатусОбновленияКонфигурации.Установить(Новый ХранилищеЗначения(Статус)); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем конфигурации. @@ -167,10 +493,10 @@ КонецПроцедуры -Процедура ПроверитьСтатусОбновления(РезультатОбновления, КаталогСкрипта) Экспорт +Процедура ПроверитьСтатусОбновления(РезультатОбновления, КаталогСкрипта, УстановленныеИсправления) Экспорт // Если это первый запуск после обновления конфигурации, то запоминаем и сбрасываем статус. - РезультатОбновления = ОбновлениеКонфигурацииУспешно(КаталогСкрипта); + РезультатОбновления = ОбновлениеКонфигурацииУспешно(КаталогСкрипта, УстановленныеИсправления); Если РезультатОбновления <> Неопределено Тогда СброситьСтатусОбновленияКонфигурации(); КонецЕсли; @@ -195,7 +521,7 @@ КонецФункции // Возвращает признак успешного обновления конфигурации на основе данных константы настроек. -Функция ОбновлениеКонфигурацииУспешно(КаталогСкрипта = "") Экспорт +Функция ОбновлениеКонфигурацииУспешно(КаталогСкрипта = "", УстановленныеИсправления = "") Экспорт Если Не ПравоДоступа("Чтение", Метаданные.Константы.СтатусОбновленияКонфигурации) Тогда Возврат Неопределено; @@ -222,6 +548,7 @@ Если Статус.РезультатОбновленияКонфигурации <> Неопределено Тогда Статус.Свойство("КаталогСкрипта", КаталогСкрипта); + Статус.Свойство("РезультатУстановкиПатчей", УстановленныеИсправления); КонецЕсли; Возврат Статус.РезультатОбновленияКонфигурации; @@ -241,6 +568,18 @@ Статус.Вставить("ОбновлениеВыполнено", ОбновлениеВыполнено); Статус.Вставить("РезультатОбновленияКонфигурации", РезультатОбновления); Статус.Вставить("КаталогСкрипта", КаталогСкрипта); + Статус.Вставить("РезультатУстановкиПатчей", Неопределено); + + ЗначениеХранилища = Константы.СтатусОбновленияКонфигурации.Получить(); + СтарыйСтатус = Неопределено; + Если ЗначениеХранилища <> Неопределено Тогда + СтарыйСтатус = ЗначениеХранилища.Получить(); + КонецЕсли; + Если СтарыйСтатус <> Неопределено + И СтарыйСтатус.Свойство("РезультатУстановкиПатчей") + И СтарыйСтатус.РезультатУстановкиПатчей <> Неопределено Тогда + Статус.РезультатУстановкиПатчей = СтарыйСтатус.РезультатУстановкиПатчей; + КонецЕсли; Константы.СтатусОбновленияКонфигурации.Установить(Новый ХранилищеЗначения(Статус)); @@ -306,6 +645,8 @@ Результат.Вставить("СоздаватьРезервнуюКопию", 1); Результат.Вставить("ИмяКаталогаРезервнойКопииИБ", ""); Результат.Вставить("ВосстанавливатьИнформационнуюБазу", Истина); + Результат.Вставить("ФайлыИсправлений", Новый Массив); + Результат.Вставить("Исправления", Неопределено); Возврат Результат; КонецФункции @@ -316,5 +657,13 @@ И ОбновлениеИнформационнойБазыСлужебный.СтатусНевыполненныхОбработчиков() = "СтатусНеВыполнено"; КонецФункции - + +// Получает расширение по переданному идентификатору. +// +Функция РасширениеПоИдентификатору(Идентификатор) Экспорт + Отбор = Новый Структура; + Отбор.Вставить("УникальныйИдентификатор", Идентификатор); + Возврат РасширенияКонфигурации.Получить(Отбор)[0]; +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурацииВызовСервера/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурацииВызовСервера/Module.bsl index 47fb9c7dd..67e801661 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурацииВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурацииВызовСервера/Module.bsl @@ -20,7 +20,8 @@ ВыполнитьПроверкуПравДоступа("Администрирование", Метаданные); КаталогСкрипта = ""; - Если СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() Тогда + + Если Не ПустаяСтрока(ИмяФайлаСкрипта) Тогда КаталогСкрипта = Лев(ИмяФайлаСкрипта, СтрДлина(ИмяФайлаСкрипта) - 10); КонецЕсли; diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl index 4e9087c16..ae22a2da4 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl @@ -13,7 +13,9 @@ // Процедура ПоказатьПоискИУстановкуОбновлений(ПараметрыУстановкиОбновлений = Неопределено) Экспорт - ОткрытьФорму("Обработка.УстановкаОбновлений.Форма.Форма", ПараметрыУстановкиОбновлений); + Если ВозможенЗапускОбновления() Тогда + ОткрытьФорму("Обработка.УстановкаОбновлений.Форма.Форма", ПараметрыУстановкиОбновлений); + КонецЕсли; КонецПроцедуры @@ -84,6 +86,10 @@ // * ВосстанавливатьИнформационнуюБазу - Булево - Признак необходимости восстановления базы. // * ЗавершениеРаботыСистемы - Булево - Признак того, что установка обновления происходит при завершении работы. // * ФайлыОбновления - Массив - Содержит значения типа Структура. +// * Исправления - структура - с ключами: +// ** Установить - Массив - пути к файлам исправлений во временном хранилище, +// которые требуется установить. +// ** Удалить - Массив - уникальные идентификаторы (Строка) исправлений, которые требуется удалить. // ПараметрыАдминистрирования - Структура - См. СтандартныеПодсистемыСервер.ПараметрыАдминистрирования. // Процедура УстановитьОбновление(Форма, Параметры, ПараметрыАдминистрирования) Экспорт @@ -120,6 +126,32 @@ #Область СлужебныйПрограммныйИнтерфейс +Процедура ОбработатьРезультатОбновления(РезультатОбновления, КаталогСкрипта) Экспорт + + Если ПустаяСтрока(КаталогСкрипта) Тогда + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), + "Предупреждение", + НСтр("ru = 'Обновление выполнено с очень старой версии программы. + |Данные журнала обновления не были загружены, но сам журнал + |можно найти в папке временных файлов %temp% - + |в папке вида 1Cv8Update.(цифры).'"), + , + Истина); + + РезультатОбновления = Истина; // считаем обновление успешным. + Иначе + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), + "Информация", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Папка с журналом обновления расположена %1'"), КаталогСкрипта), + , + Истина); + + ПрочитатьДанныеВЖурналРегистрации(РезультатОбновления, КаталогСкрипта); + КонецЕсли; + +КонецПроцедуры + // Обновляет конфигурацию базы данных. // // Параметры: @@ -144,6 +176,67 @@ КонецПроцедуры +// Открывает форму со списком установленных исправлений. +// +// Параметры: +// Исправления - СписокЗначений - список имен установленных исправлений, которые необходимо отобразить. +// Если не указан, отображаются все исправления. +// +Процедура ПоказатьУстановленныеИсправления(Исправления = Неопределено) Экспорт + + ПараметрыФормы = Новый Структура("Исправления", Исправления); + ОткрытьФорму("ОбщаяФорма.УстановленныеИсправления", ПараметрыФормы); + +КонецПроцедуры + +// Определяет, является ли расширение с переданным именем исправлением (патчем). +// Параметры: +// ИмяИсправления - Строка - имя проверяемого расширения. +// +Функция ЭтоИсправление(ИмяИсправления) Экспорт + Возврат СтрНачинаетсяС(ИмяИсправления, "EF_"); +КонецФункции + +// Определяет возможно ли выполнить обновление конфигурации. +// +// Возвращаемое значение: +// Булево - возможность обновления. +// +Функция ВозможенЗапускОбновления() Экспорт + + ВозможенЗапускОбновления = Истина; + +#Если ВебКлиент Тогда + ВозможенЗапускОбновления = Ложь; + ТекстСообщения = НСтр("ru = 'Обновление программы недоступно в веб-клиенте.'"); + +#ИначеЕсли МобильныйКлиент Тогда + + ВозможенЗапускОбновления = Ложь; + ТекстСообщения = НСтр("ru = 'Обновление программы недоступно в мобильном клиенте.'"); + +#Иначе + + Если Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда + ВозможенЗапускОбновления = Ложь; + ТекстСообщения = НСтр("ru = 'Обновление программы доступно только в клиенте под управлением ОС Windows.'"); + КонецЕсли; + + Если ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер() Тогда + ВозможенЗапускОбновления = Ложь; + ТекстСообщения = НСтр("ru = 'Обновление программы недоступно при подключении через веб-сервер.'"); + КонецЕсли; + +#КонецЕсли + + Если Не ВозможенЗапускОбновления Тогда + ПоказатьПредупреждение(, ТекстСообщения); + КонецЕсли; + + Возврат ВозможенЗапускОбновления; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем конфигурации. @@ -175,36 +268,6 @@ КонецПроцедуры -Процедура ОбработатьРезультатОбновления(РезультатОбновления, КаталогСкрипта) Экспорт - - Если СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().ЭтоБазоваяВерсияКонфигурации Тогда - - Если ПустаяСтрока(КаталогСкрипта) Тогда - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), - "Предупреждение", - НСтр("ru = 'Обновление выполнено с очень старой версии программы. - |Данные журнала обновления не были загружены, но сам журнал - |можно найти в папке временных файлов %temp% - - |в папке вида 1Cv8Update.(цифры).'"), - , - Истина); - - РезультатОбновления = Истина; // считаем обновление успешным. - Иначе - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), - "Информация", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Папка с журналом обновления расположена %1'"), КаталогСкрипта), - , - Истина); - - ПрочитатьДанныеВЖурналРегистрации(РезультатОбновления, КаталогСкрипта); - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -269,26 +332,6 @@ КонецПроцедуры -Функция ПоддерживаетсяПланировщикЗаданий() - - // Планировщик заданий поддерживается начиная с версии 6.0 - Windows Vista. - - СистемнаяИнформация = Новый СистемнаяИнформация(); - - ПозицияТочки = СтрНайти(СистемнаяИнформация.ВерсияОС, "."); - Если ПозицияТочки < 2 Тогда - Возврат Ложь; - КонецЕсли; - - НомерВерсии = Сред(СистемнаяИнформация.ВерсияОС, ПозицияТочки - 2, 2); - - ОписаниеТипаЧисло = Новый ОписаниеТипов("Число"); - ВерсияВышеVista = ОписаниеТипаЧисло.ПривестиЗначение(НомерВерсии) >= 6; - - Возврат ВерсияВышеVista; - -КонецФункции - Функция ДатаОбновленияУказанаВерно(Параметры) ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса(); @@ -307,31 +350,12 @@ КонецФункции -Процедура ЗапланироватьОбновлениеКонфигурации(Параметры, ПараметрыАдминистрирования) - - СформироватьФайлыСкриптаОбновления(Ложь, Параметры, ПараметрыАдминистрирования); - - ШаблонКоманды = "wscript.exe //nologo %1"; - - СтрокаКоманды = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ШаблонКоманды, - Параметры.ИмяСкриптаСозданияЗадачиПланировщикаЗадач); - - ПараметрыЗапускаПрограммы = ОбщегоНазначенияКлиентСервер.ПараметрыЗапускаПрограммы(); - ПараметрыЗапускаПрограммы.ВыполнитьСНаивысшимиПравами = Истина; - - ОбщегоНазначенияКлиентСервер.ЗапуститьПрограмму(СтрокаКоманды, ПараметрыЗапускаПрограммы); - - ОбновлениеКонфигурацииВызовСервера.ЗаписатьСтатусОбновления(ИмяПользователя(), Истина, Ложь, Ложь); - -КонецПроцедуры - Функция СформироватьФайлыСкриптаОбновления(Знач ИнтерактивныйРежим, Параметры, ПараметрыАдминистрирования) ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента(); ЭтоФайловаяБаза = ПараметрыРаботыКлиента.ИнформационнаяБазаФайловая; - #Если Не ВебКлиент Тогда + #Если Не ВебКлиент И НЕ МобильныйКлиент Тогда КаталогПлатформы = Неопределено; Параметры.Свойство("КаталогПлатформы", КаталогПлатформы); КаталогПрограммы = ?(ЗначениеЗаполнено(КаталогПлатформы), КаталогПлатформы, КаталогПрограммы()); @@ -403,15 +427,17 @@ ВставитьПараметрСкрипта("ВыполнятьСжатиеТаблицИБ" , ЭтоФайловаяБаза , Ложь , ОбластьПараметров); ВставитьПараметрСкрипта("ВыполнитьОтложенныеОбработчики" , ВыполнитьОтложенныеОбработчики , Ложь , ОбластьПараметров); ВставитьПараметрСкрипта("ИмяЗадачиПланировщикаЗадач" , ИмяЗадачи , Истина, ОбластьПараметров); + + СоздатьКаталог(КаталогВременныхФайловОбновления); + ИнформацияОбИсправлениях = ИнформацияОбИсправлениях(Параметры, КаталогВременныхФайловОбновления); ОбластьПараметров = СтрЗаменить(ОбластьПараметров, "[ИменаФайловОбновления]", ИменаФайловОбновления(Параметры)); + ОбластьПараметров = СтрЗаменить(ОбластьПараметров, "[ИменаФайловИсправлений]", ИнформацияОбИсправлениях.Установить); + ОбластьПараметров = СтрЗаменить(ОбластьПараметров, "[ИменаУдаляемыхИсправлений]", ИнформацияОбИсправлениях.Удалить); ТекстыМакетов.МакетФайлаОбновленияКонфигурации = ОбластьПараметров + ТекстыМакетов.МакетФайлаОбновленияКонфигурации; ТекстыМакетов.Удалить("ОбластьПараметров"); // - - СоздатьКаталог(КаталогВременныхФайловОбновления); - ФайлСкрипта = Новый ТекстовыйДокумент; ФайлСкрипта.Вывод = ИспользованиеВывода.Разрешить; ФайлСкрипта.УстановитьТекст(ТекстыМакетов.МакетФайлаОбновленияКонфигурации); @@ -526,6 +552,63 @@ КонецФункции +Функция ИнформацияОбИсправлениях(Параметры, КаталогВременныхФайлов) + + ИмяПараметра = "СтандартныеПодсистемы.ИнформацияОбИсправлениях"; + Если ПараметрыПриложения.Получить(ИмяПараметра) <> Неопределено Тогда + Возврат ПараметрыПриложения[ИмяПараметра]; + КонецЕсли; + + УстанавливаемыеИсправления = "['']"; + УдаляемыеИсправления = "['']"; + Если Параметры.Свойство("ФайлыИсправлений") Тогда + УстанавливаемыеИсправления = ИменаФайловИсправлений(Параметры); + ИначеЕсли Параметры.Свойство("Исправления") Тогда + Если Параметры.Исправления.Свойство("Установить") + И Параметры.Исправления.Установить.Количество() > 0 Тогда + ИменаФайлов = Новый Массив; + Для Каждого НовоеИсправление Из Параметры.Исправления.Установить Цикл + ИмяФайла = СтрЗаменить(Строка(Новый УникальныйИдентификатор),"-", "") + ".cfe"; + ПолноеИмяФайла = КаталогВременныхФайлов + ИмяФайла; + ПолучитьФайл(НовоеИсправление, ПолноеИмяФайла, Ложь); + ИменаФайлов.Добавить(Форматировать(ПолноеИмяФайла)); + КонецЦикла; + УстанавливаемыеИсправления = СтрСоединить(ИменаФайлов, ","); + УстанавливаемыеИсправления = "[" + УстанавливаемыеИсправления + "]"; + КонецЕсли; + + Если Параметры.Исправления.Свойство("Удалить") + И Параметры.Исправления.Удалить.Количество() > 0 Тогда + УдаляемыеИсправления = СтрСоединить(Параметры.Исправления.Удалить, ","); + УдаляемыеИсправления = "[" + УдаляемыеИсправления + "]"; + КонецЕсли; + КонецЕсли; + + ИнформацияОбИсправлениях = Новый Структура; + ИнформацияОбИсправлениях.Вставить("Установить", УстанавливаемыеИсправления); + ИнформацияОбИсправлениях.Вставить("Удалить", УдаляемыеИсправления); + + Возврат ИнформацияОбИсправлениях; + +КонецФункции + +Функция ИменаФайловИсправлений(Параметры) + + ИмяПараметра = "СтандартныеПодсистемы.ИменаФайловИсправлений"; + Если ПараметрыПриложения.Получить(ИмяПараметра) <> Неопределено Тогда + Возврат ПараметрыПриложения[ИмяПараметра]; + КонецЕсли; + + ИменаФайлов = Новый Массив; + Для Каждого ИмяФайлаИсправления Из Параметры.ФайлыИсправлений Цикл + ИменаФайлов.Добавить(Форматировать(ИмяФайлаИсправления)); + КонецЦикла; + ИменаФайловИсправлений = СтрСоединить(ИменаФайлов, ","); + + Возврат "[" + ИменаФайловИсправлений + "]"; + +КонецФункции + Функция Форматировать(Знач Текст) Текст = СтрЗаменить(Текст, "\", "\\"); Текст = СтрЗаменить(Текст, """", "\"""); @@ -583,7 +666,7 @@ Возврат; КонецЕсли; -#Если НЕ ВебКлиент Тогда +#Если НЕ ВебКлиент И НЕ МобильныйКлиент Тогда ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗапуске(); Если ПараметрыРаботыКлиента.РазделениеВключено Или Не ПараметрыРаботыКлиента.ДоступноИспользованиеРазделенныхДанных Тогда Возврат; @@ -635,8 +718,6 @@ Продолжить; КонецЕсли; - НачатьЗапись = Ложь; - ПредставлениеУровня = "Информация"; Если Сред(ТекущаяСтрока, 3, 1) = "." И Сред(ТекущаяСтрока, 6, 1) = "." Тогда // Строка с датой МассивСтроки = СтрРазделить(ТекущаяСтрока, " ", Ложь); @@ -656,13 +737,22 @@ РезультатОбновления = Ложь; Продолжить; КонецЕсли; - НачатьЗапись = Истина; - Иначе - Комментарий = ТекущаяСтрока; - КонецЕсли; - - Если НачатьЗапись Тогда + + + Для НомерСледСтроки = НомерСтроки + 1 По ТекстовыйДокумент.КоличествоСтрок() Цикл + ТекущаяСтрока = ТекстовыйДокумент.ПолучитьСтроку(НомерСледСтроки); + Если Сред(ТекущаяСтрока, 3, 1) = "." И Сред(ТекущаяСтрока, 6, 1) = "." Тогда + // Следующая строка - строка нового события. + НомерСтроки = НомерСледСтроки - 1; + Прервать; + КонецЕсли; + + Комментарий = Комментарий + Символы.ПС + ТекущаяСтрока; + + КонецЦикла; + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), ПредставлениеУровня, Комментарий, ДатаСобытия); + КонецЕсли; КонецЦикла; @@ -695,7 +785,45 @@ КонецПроцедуры -#Если Не ВебКлиент Тогда +Функция ПоддерживаетсяПланировщикЗаданий() + + // Планировщик заданий поддерживается начиная с версии 6.0 - Windows Vista. + + СистемнаяИнформация = Новый СистемнаяИнформация(); + + ПозицияТочки = СтрНайти(СистемнаяИнформация.ВерсияОС, "."); + Если ПозицияТочки < 2 Тогда + Возврат Ложь; + КонецЕсли; + + НомерВерсии = Сред(СистемнаяИнформация.ВерсияОС, ПозицияТочки - 2, 2); + + ОписаниеТипаЧисло = Новый ОписаниеТипов("Число"); + ВерсияВышеVista = ОписаниеТипаЧисло.ПривестиЗначение(НомерВерсии) >= 6; + + Возврат ВерсияВышеVista; + +КонецФункции + +Процедура ЗапланироватьОбновлениеКонфигурации(Параметры, ПараметрыАдминистрирования) + + СформироватьФайлыСкриптаОбновления(Ложь, Параметры, ПараметрыАдминистрирования); + + ШаблонКоманды = "wscript.exe //nologo %1"; + СтрокаКоманды = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонКоманды, + Параметры.ИмяСкриптаСозданияЗадачиПланировщикаЗадач); + + ПараметрыЗапускаПрограммы = ОбщегоНазначенияКлиентСервер.ПараметрыЗапускаПрограммы(); + ПараметрыЗапускаПрограммы.ВыполнитьСНаивысшимиПравами = Истина; + + ОбщегоНазначенияКлиентСервер.ЗапуститьПрограмму(СтрокаКоманды, ПараметрыЗапускаПрограммы); + + ОбновлениеКонфигурацииВызовСервера.ЗаписатьСтатусОбновления(ИмяПользователя(), Истина, Ложь, Ложь); + +КонецПроцедуры + +#Если Не ВебКлиент И НЕ МобильныйКлиент Тогда Функция КодировкаФайловПрограммыОбновления() diff --git a/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl index 7a1efab4a..58dd8d012 100644 --- a/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl @@ -754,7 +754,6 @@ // Получает все места использования ссылок. // Если какая-либо ссылка нигде не используется, то строк для нее в результирующей таблице не будет. -// При вызове в неразделенном сеансе не выявляет ссылок в разделенных областях. // // Параметры: // НаборСсылок - Массив - Ссылки, для которых ищем места использования. @@ -763,14 +762,13 @@ // // Возвращаемое значение: // ТаблицаЗначений - Состоит из колонок: -// * Ссылка - ЛюбаяСсылка - Ссылка, которая анализируется. -// * Данные - Произвольный - Данные, содержащие анализируемую ссылку. -// * Метаданные - ОбъектМетаданных - Метаданные найденных данных. -// * ПредставлениеДанных - Строка - Представление данных, содержащих анализируемую ссылку. -// * ТипСсылки - Тип - Тип анализируемой ссылки. -// * ВспомогательныеДанные - Булево - Истина, если данные используются анализируемой ссылкой как -// вспомогательными данными (ведущее измерение или попали в исключение ПриДобавленииИсключенийПоискаСсылок). -// * ЭтоСлужебныеДанные - Булево - данные попали в исключение ПриДобавленииИсключенийПоискаСсылок +// * Ссылка - ЛюбаяСсылка - Ссылка, которая анализируется. +// * Данные - Произвольный - Данные, содержащие анализируемую ссылку. +// * Метаданные - ОбъектМетаданных - Метаданные найденных данных. +// * ПредставлениеДанных - Строка - Представление данных, содержащих анализируемую ссылку. +// * ТипСсылки - Тип - Тип анализируемой ссылки. +// * ВспомогательныеДанные - Булево - Истина, если данные используются анализируемой ссылкой как +// вспомогательными данными (ведущее измерение и т.п.). // Функция МестаИспользования(Знач НаборСсылок, Знач АдресРезультата = "") Экспорт @@ -780,16 +778,10 @@ МестаИспользования = НайтиПоСсылкам(НаборСсылок); УстановитьПривилегированныйРежим(Ложь); - // МестаИспользования - ТаблицаЗначений - где: - // * Ссылка - ЛюбаяСсылка - Ссылка, которая анализируется. - // * Данные - Произвольный - Данные, содержащие анализируемую ссылку. - // * Метаданные - ОбъектМетаданных - Метаданные найденных данных. - МестаИспользования.Колонки.Добавить("ПредставлениеДанных", Новый ОписаниеТипов("Строка")); МестаИспользования.Колонки.Добавить("ТипСсылки"); МестаИспользования.Колонки.Добавить("ИнформацияОМестеИспользования"); МестаИспользования.Колонки.Добавить("ВспомогательныеДанные", Новый ОписаниеТипов("Булево")); - МестаИспользования.Колонки.Добавить("ЭтоСлужебныеДанные", Новый ОписаниеТипов("Булево")); МестаИспользования.Индексы.Добавить("Ссылка"); МестаИспользования.Индексы.Добавить("Данные"); @@ -797,7 +789,7 @@ МестаИспользования.Индексы.Добавить("Ссылка, ВспомогательныеДанные"); ТипКлючиЗаписей = ОписаниеТипаКлючиЗаписей(); - ТипВсеСсылки = ОписаниеТипаВсеСсылки(); + ТипВсеСсылки = ОписаниеТипаВсеСсылки(); МетаданныеПоследовательностей = Метаданные.Последовательности; МетаданныеКонстант = Метаданные.Константы; @@ -808,47 +800,65 @@ КэшИзмеренийРегистров = Новый Соответствие; Для Каждого МестоИспользования Из МестаИспользования Цикл - ТипДанных = ТипЗнч(МестоИспользования.Данные); + МестоСсылка = МестоИспользования.Ссылка; + МестоДанные = МестоИспользования.Данные; + МестоМетаданные = МестоИспользования.Метаданные; + ТипДанных = ТипЗнч(МестоДанные); - ЭтоСлужебныеДанные = ЭтоСлужебныеДанные(МестоИспользования, ИсключенияПоискаСсылок); - ЭтоВспомогательныеДанные = ЭтоСлужебныеДанные; + ИсключениеПоиска = ИсключенияПоискаСсылок[МестоМетаданные]; - Если МетаданныеДокументов.Содержит(МестоИспользования.Метаданные) Тогда - Представление = Строка(МестоИспользования.Данные); + Если ИсключениеПоиска = Неопределено Тогда + ЭтоВспомогательныеДанные = (МестоСсылка = МестоДанные); - ИначеЕсли МетаданныеКонстант.Содержит(МестоИспользования.Метаданные) Тогда - Представление = МестоИспользования.Метаданные.Представление() + " (" + НСтр("ru = 'константа'") + ")"; + ИначеЕсли ИсключениеПоиска = "*" Тогда + ЭтоВспомогательныеДанные = Истина; - ИначеЕсли МетаданныеПоследовательностей.Содержит(МестоИспользования.Метаданные) Тогда - Представление = МестоИспользования.Метаданные.Представление() + " (" + НСтр("ru = 'последовательность'") + ")"; + Иначе + ЭтоВспомогательныеДанные = Ложь; + Для Каждого ПутьКРеквизиту Из ИсключениеПоиска Цикл + Если ЗначениеРеквизитаПоПути(МестоДанные, ПутьКРеквизиту) = МестоСсылка Тогда + ЭтоВспомогательныеДанные = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если МетаданныеДокументов.Содержит(МестоМетаданные) Тогда + Представление = Строка(МестоДанные); + + ИначеЕсли МетаданныеКонстант.Содержит(МестоМетаданные) Тогда + Представление = МестоМетаданные.Представление() + " (" + НСтр("ru = 'константа'") + ")"; + + ИначеЕсли МетаданныеПоследовательностей.Содержит(МестоМетаданные) Тогда + Представление = МестоМетаданные.Представление() + " (" + НСтр("ru = 'последовательность'") + ")"; ИначеЕсли ТипДанных = Неопределено Тогда - Представление = Строка(МестоИспользования.Данные); + Представление = Строка(МестоДанные); ИначеЕсли ТипВсеСсылки.СодержитТип(ТипДанных) Тогда МетаПредставлениеОбъекта = Новый Структура("ПредставлениеОбъекта"); - ЗаполнитьЗначенияСвойств(МетаПредставлениеОбъекта, МестоИспользования.Метаданные); + ЗаполнитьЗначенияСвойств(МетаПредставлениеОбъекта, МестоМетаданные); Если ПустаяСтрока(МетаПредставлениеОбъекта.ПредставлениеОбъекта) Тогда - МетаПредставление = МестоИспользования.Метаданные.Представление(); + МетаПредставление = МестоМетаданные.Представление(); Иначе МетаПредставление = МетаПредставлениеОбъекта.ПредставлениеОбъекта; КонецЕсли; - Представление = Строка(МестоИспользования.Данные); + Представление = Строка(МестоДанные); Если Не ПустаяСтрока(МетаПредставление) Тогда Представление = Представление + " (" + МетаПредставление + ")"; КонецЕсли; ИначеЕсли ТипКлючиЗаписей.СодержитТип(ТипДанных) Тогда - Представление = МестоИспользования.Метаданные.ПредставлениеЗаписи; + Представление = МестоМетаданные.ПредставлениеЗаписи; Если ПустаяСтрока(Представление) Тогда - Представление = МестоИспользования.Метаданные.Представление(); + Представление = МестоМетаданные.Представление(); КонецЕсли; ОписаниеИзмерений = ""; - Для Каждого КлючЗначение Из ОписаниеИзмеренийНабора(МестоИспользования.Метаданные, КэшИзмеренийРегистров) Цикл - Значение = МестоИспользования.Данные[КлючЗначение.Ключ]; + Для Каждого КлючЗначение Из ОписаниеИзмеренийНабора(МестоМетаданные, КэшИзмеренийРегистров) Цикл + Значение = МестоДанные[КлючЗначение.Ключ]; Описание = КлючЗначение.Значение; - Если МестоИспользования.Ссылка = Значение Тогда + Если Значение = МестоСсылка Тогда Если Описание.Ведущее Тогда ЭтоВспомогательныеДанные = Истина; КонецЕсли; @@ -864,14 +874,13 @@ КонецЕсли; Иначе - Представление = Строка(МестоИспользования.Данные); + Представление = Строка(МестоДанные); КонецЕсли; - МестоИспользования.ПредставлениеДанных = Представление; + МестоИспользования.ПредставлениеДанных = Представление; МестоИспользования.ВспомогательныеДанные = ЭтоВспомогательныеДанные; - МестоИспользования.ЭтоСлужебныеДанные = ЭтоСлужебныеДанные; - МестоИспользования.ТипСсылки = ТипЗнч(МестоИспользования.Ссылка); + МестоИспользования.ТипСсылки = ТипЗнч(МестоИспользования.Ссылка); КонецЦикла; Если Не ПустаяСтрока(АдресРезультата) Тогда @@ -1218,7 +1227,7 @@ // Сравниваемые коллекции должны отвечать следующим требованиям: // - доступен обход посредством оператора Для каждого … Из … Цикл, // - наличие в обеих коллекциях всех колонок, перечисленных в параметре ИменаКолонок -// (если ИменаКолонок не заполнен - всех колонок). +// (если ИменаКолонок не заполнен - все колонки первой коллекции должны существовать во второй коллекции). // Также позволяет сравнивать массивы. // // Параметры: @@ -1238,14 +1247,14 @@ // Структура - коллекция, отвечающая вышеописанным требованиям. // А так же другие объекты, для которых доступен обход // посредством оператора Для каждого … Из … Цикл. -// ИменаКолонок - Строка - имена колонок через запятую, +// ИменаКолонок - Строка - (необязательный) имена колонок через запятую, // по которым производится сравнение. // Не является обязательным для коллекций, // состав колонок которых можно выявить: // ТаблицаЗначений, СписокЗначений, Соответствие, Структура, -// если не указан - сравнение производится по всем колонкам. +// если не указан - сравнение производится по колонкам первой коллекции. // Для коллекций других типов является обязательным. -// ИсключаяКолонки - Строка - имена колонок, которые игнорируются при сравнении, необязательный. +// ИсключаяКолонки - Строка - (необязательный) имена колонок, которые игнорируются при сравнении. // УчитыватьПоследовательностьСтрок - Булево - если Истина, то коллекции признаются // идентичными только если одинаковые строки размещены // в коллекциях на одинаковых местах. @@ -1253,7 +1262,7 @@ // Возвращаемое значение: // Булево - Истина, если идентичны. // -Функция КоллекцииИдентичны(КоллекцияСтрок1, КоллекцияСтрок2, ИменаКолонок = "", ИсключаяКолонки = "", УчитыватьПоследовательностьСтрок = Ложь) Экспорт +Функция КоллекцииИдентичны(КоллекцияСтрок1, КоллекцияСтрок2, Знач ИменаКолонок = "", Знач ИсключаяКолонки = "", УчитыватьПоследовательностьСтрок = Ложь) Экспорт СравниваютсяМассивы = (ТипЗнч(КоллекцияСтрок1) = Тип("Массив") Или ТипЗнч(КоллекцияСтрок1) = Тип("ФиксированныйМассив")); @@ -1294,10 +1303,12 @@ ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения, ТипЗнч(КоллекцияСтрок1)); КонецЕсли; Иначе + ИменаКолонок = СтрЗаменить(ИменаКолонок, " ", ""); СравниваемыеКолонки = СтрРазделить(ИменаКолонок, ","); КонецЕсли; // Вычитаем исключаемые поля + ИсключаяКолонки = СтрЗаменить(ИсключаяКолонки, " ", ""); СравниваемыеКолонки = ОбщегоНазначенияКлиентСервер.РазностьМассивов(СравниваемыеКолонки, СтрРазделить(ИсключаяКолонки, ",")); КонецЕсли; @@ -1784,7 +1795,7 @@ КонецФункции // Создает временный каталог. После окончания работы с временным каталогом его необходимо удалить -// с помощью ОбщегоЗначения.УдалитьВременныйКаталог. +// с помощью ОбщегоНазначения.УдалитьВременныйКаталог. // // Параметры: // Расширение - Строка - Расширение каталога, которое идентифицирует назначение временного каталога @@ -1806,7 +1817,7 @@ // Если временный каталог не может быть удален (например, он занят каким-то процессом), // то в журнал регистрации записывается соответствующее предупреждение, а процедура завершается. // -// Для совместного использования с ОбщегоЗначения.СоздатьВременныйКаталог, +// Для совместного использования с ОбщегоНазначения.СоздатьВременныйКаталог, // после окончания работы с временным каталогом. // // Параметры: @@ -1814,13 +1825,12 @@ // Процедура УдалитьВременныйКаталог(Знач ПутьККаталогу) Экспорт - ФайлИнфо = Новый Файл(ПолучитьИмяВременногоФайла()); - - // Перед проверкой разворачиваем слэши в одну сторону. - Если Не СтрНачинаетсяС(СтрЗаменить(ПутьККаталогу, "/", "\"), СтрЗаменить(ФайлИнфо.Путь, "/", "\")) Тогда + // Ожидается, что ПутьККаталогу получен методом ПолучитьИмяВременногоФайла(). + Если Не СтрНачинаетсяС(ПутьККаталогу, КаталогВременныхФайлов()) Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Неверное значение параметра ПутьККаталогу в ОбщегоНазначения.УдалитьВременныйКаталог: - |Каталог не является временным ""%1""'"), ПутьККаталогу); + |Каталог не является временным ""%1""'"), + ПутьККаталогу); КонецЕсли; Попытка @@ -2205,8 +2215,8 @@ ОбщиеПараметры.Вставить("ЗапрашиватьПодтверждениеПриЗавершенииПрограммы", Истина); ОбщиеПараметры.Вставить("ОтключитьИдентификаторыОбъектовМетаданных", Ложь); ОбщиеПараметры.Вставить("РекомендуемыйОбъемОперативнойПамяти", 2); - ОбщиеПараметры.Вставить("МинимальнаяВерсияПлатформы", "8.3.10.2168"); - ОбщиеПараметры.Вставить("РекомендуемаяВерсияПлатформы", "8.3.10.2168"); + ОбщиеПараметры.Вставить("МинимальнаяВерсияПлатформы", "8.3.12.1412"); + ОбщиеПараметры.Вставить("РекомендуемаяВерсияПлатформы", "8.3.12.1412"); // Устарело, следует использовать свойства МинимальнаяВерсияПлатформы и РекомендуемаяВерсияПлатформы: ОбщиеПараметры.Вставить("МинимальноНеобходимаяВерсияПлатформы", ""); ОбщиеПараметры.Вставить("РаботаВПрограммеЗапрещена", Ложь); // Блокировать запуск, если версия ниже минимальной. @@ -2372,14 +2382,18 @@ Доступно = МодульРегламентныеЗаданияСлужебный.РегламентноеЗаданиеДоступноПоФункциональнымОпциям( РегламентноеЗадание, ЗависимостиЗаданий); + Если Не Доступно Тогда + Задания = РегламентныеЗаданияСервер.НайтиЗадания(Новый Структура("Метаданные", РегламентноеЗадание)); + Для Каждого Задание Из Задания Цикл + РегламентныеЗаданияСервер.ИзменитьЗадание(Задание.УникальныйИдентификатор, + Новый Структура("Использование", Ложь)); + КонецЦикла; ВызватьИсключение - НСтр("ru = 'Регламентное задание недоступно по функциональным опциям - |или не поддерживает работу в текущем режиме работы программы. - |Выполнение прервано.'"); + НСтр("ru = 'Регламентное задание недоступно по функциональным опциям или + |не поддерживает работу в текущем режиме работы программы. + |Выполнение прервано. Задание отключено.'"); КонецЕсли; - - КонецЕсли; КонецПроцедуры @@ -4324,7 +4338,8 @@ // если нужно более 1 хранилища на подсистему БСП: // Владелец = "СтандартныеПодсистемы.УправлениеДоступом.<Уточнение>"; // -// Данные - Произвольный - Данные помещаемые в безопасное хранилище. Неопределенно - удаляет данные. +// Данные - Произвольный - Данные помещаемые в безопасное хранилище. Неопределенно - удаляет все данные. +// Для удаления данных по ключу следует использовать процедуру УдалитьДанныеИзБезопасногоХранилища. // Ключ - Строка - Ключ сохраняемых настроек, по умолчанию "Пароль". // // Пример: @@ -4531,15 +4546,24 @@ КонецФункции -// Возвращает ссылку на общий модуль по имени. +// Возвращает ссылку на общий модуль или модуль менеджера по имени. // // Параметры: -// Имя - Строка - имя общего модуля, например: -// "ОбщегоНазначения", -// "ОбщегоНазначенияКлиент". +// Имя - Строка - имя общего модуля. // // Возвращаемое значение: -// ОбщийМодуль - общий модуль. +// ОбщийМодуль, МодульМенеджераОбъекта - общий модуль. +// +// Пример: +// Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеКонфигурации") Тогда +// МодульОбновлениеКонфигурации = ОбщегоНазначения.ОбщийМодель("ОбновлениеКонфигурации"); +// МодульОбновлениеКонфигурации.<Имя метода>(); +// КонецЕсли; +// +// Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолнотекстовыйПоиск") Тогда +// МодульПолнотекстовыйПоискСервер = ОбщегоНазначения.ОбщийМодель("ПолнотекстовыйПоискСервер"); +// МодульПолнотекстовыйПоискСервер.<Имя метода>(); +// КонецЕсли; // Функция ОбщийМодуль(Имя) Экспорт @@ -5769,7 +5793,7 @@ Результат.Вставить("Успех", Истина); Для Каждого МестоИспользования Из Результат.МестаИспользования Цикл - Если МестоИспользования.ЭтоСлужебныеДанные Тогда + Если МестоИспользования.ВспомогательныеДанные Тогда Продолжить; // Зависимые данные не обрабатываются. КонецЕсли; @@ -6560,10 +6584,10 @@ КонецПроцедуры -Функция ОписаниеИзмеренийНабора(Знач Мета, Кэш) +Функция ОписаниеИзмеренийНабора(Знач МетаданныеРегистра, КэшИзмеренийРегистров) - ОписаниеИзмерений = Кэш[Мета]; - Если ОписаниеИзмерений<>Неопределено Тогда + ОписаниеИзмерений = КэшИзмеренийРегистров[МетаданныеРегистра]; + Если ОписаниеИзмерений <> Неопределено Тогда Возврат ОписаниеИзмерений; КонецЕсли; @@ -6572,9 +6596,9 @@ ДанныеИзмерения = Новый Структура("Ведущее, Представление, Формат, Тип", Ложь); - Если Метаданные.РегистрыСведений.Содержит(Мета) Тогда + Если Метаданные.РегистрыСведений.Содержит(МетаданныеРегистра) Тогда // Возможно есть период - МетаПериод = Мета.ПериодичностьРегистраСведений; + МетаПериод = МетаданныеРегистра.ПериодичностьРегистраСведений; Периодичность = Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений; Если МетаПериод = Периодичность.ПозицияРегистратора Тогда @@ -6624,7 +6648,7 @@ КонецЕсли; // Все измерения - Для Каждого МетаИзмерение Из Мета.Измерения Цикл + Для Каждого МетаИзмерение Из МетаданныеРегистра.Измерения Цикл ДанныеИзмерения = Новый Структура("Ведущее, Представление, Формат, Тип"); ДанныеИзмерения.Тип = МетаИзмерение.Тип; ДанныеИзмерения.Представление = МетаИзмерение.Представление(); @@ -6632,8 +6656,9 @@ ОписаниеИзмерений.Вставить(МетаИзмерение.Имя, ДанныеИзмерения); КонецЦикла; - Кэш[Мета] = ОписаниеИзмерений; + КэшИзмеренийРегистров[МетаданныеРегистра] = ОписаниеИзмерений; Возврат ОписаниеИзмерений; + КонецФункции Функция ОписаниеДвижений(Знач Мета) @@ -6979,11 +7004,11 @@ КонецЕсли; // Проверка на возможные циклические ссылки. - ТестРеквизитов= Новый Структура("Иерархический, ВидыСубконто, Владельцы", Ложь, Неопределено, Новый Массив); - ЗаполнитьЗначенияСвойств(ТестРеквизитов, МетаданныеОбъекта); + СвойстваОбъекта = Новый Структура("Иерархический, ВидыСубконто, Владельцы", Ложь, Неопределено, Новый Массив); + ЗаполнитьЗначенияСвойств(СвойстваОбъекта, МетаданныеОбъекта); // По родителю - Если ТестРеквизитов.Иерархический Или ТестРеквизитов.ВидыСубконто <> Неопределено Тогда + Если СвойстваОбъекта.Иерархический Или СвойстваОбъекта.ВидыСубконто <> Неопределено Тогда Если Объект.Родитель = Объект.Ссылка Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -6994,16 +7019,11 @@ КонецЕсли; // По владельцу - Для Каждого МетаВладелец Из ТестРеквизитов.Владельцы Цикл - - Если Объект.Владелец = Объект.Ссылка Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'При записи ""%1"" возникает циклическая ссылка в подчинении.'"), - Строка(Объект)); - КонецЕсли; - Прервать; - - КонецЦикла; + Если СвойстваОбъекта.Владельцы.Количество() > 1 И Объект.Владелец = Объект.Ссылка Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При записи ""%1"" возникает циклическая ссылка в подчинении.'"), + Строка(Объект)); + КонецЕсли; // Для последовательностей право "Изменение" может отсутствовать даже у роли "АдминистраторСистемы". Если ЭтоПоследовательность(МетаданныеОбъекта) @@ -7475,6 +7495,31 @@ Возврат Информация; КонецФункции +Функция ЗначениеРеквизитаПоПути(Знач Данные, Знач ПутьДанных) + Результат = Данные; + + Имена = СтрРазделить(ПутьДанных, ".", Ложь); + Для Каждого ИмяРеквизита Из Имена Цикл + Тест = Новый Структура(ИмяРеквизита, Неопределено); + ЗаполнитьЗначенияСвойств(Тест, Результат); + Если Тест[ИмяРеквизита] = Неопределено Тогда + Тест[ИмяРеквизита] = -1; + ЗаполнитьЗначенияСвойств(Тест, Результат); + Если Тест[ИмяРеквизита] = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Ошибка вычисления %1 для объекта %2. Реквизит %3 не найден'"), + ПутьДанных, Данные, ИмяРеквизита); + КонецЕсли; + КонецЕсли; + + Результат = Тест[ИмяРеквизита]; + Если Результат = Неопределено Тогда // Не можем дальше читать. + Возврат Неопределено; + КонецЕсли; + КонецЦикла; + + Возврат Результат; +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. @@ -7943,67 +7988,4 @@ КонецФункции -Функция ЭтоСлужебныеДанные(МестоИспользования, ИсключенияПоискаСсылок) - - ИсключениеПоиска = ИсключенияПоискаСсылок[МестоИспользования.Метаданные]; - - // Данные может быть как ссылкой так и ключом записи регистра. - - Если ИсключениеПоиска = Неопределено Тогда - Возврат (МестоИспользования.Ссылка = МестоИспользования.Данные); // Ссылку саму на себя исключаем. - ИначеЕсли ИсключениеПоиска = "*" Тогда - Возврат Истина; // Если указано исключить все - считаем все исключением. - Иначе - Для Каждого ПутьКРеквизиту Из ИсключениеПоиска Цикл - // Если указаны исключения. - - // Относительный путь к реквизиту: - // "<ИмяРеквизитаИлиТЧ>[.<ИмяРеквизитаТЧ>]". - - Если ЭтоСсылка(ТипЗнч(МестоИспользования.Данные)) Тогда - - // Проверка есть ли по исключаемому пути в указанных данных проверяемая ссылка - - ПолноеИмяОбъектаМетаданных = МестоИспользования.Метаданные.ПолноеИмя(); - - ТекстЗапроса = - "ВЫБРАТЬ - | ИСТИНА - |ИЗ - | &ПолноеИмяОбъектаМетаданных КАК Таблица - |ГДЕ - | &ПутьКРеквизиту = &ПроверяемаяСсылка - | И Таблица.Ссылка = &Ссылка"; - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПолноеИмяОбъектаМетаданных", ПолноеИмяОбъектаМетаданных); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПутьКРеквизиту", ПутьКРеквизиту); - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - Запрос.УстановитьПараметр("ПроверяемаяСсылка", МестоИспользования.Ссылка); - Запрос.УстановитьПараметр("Ссылка", МестоИспользования.Данные); - - Результат = Запрос.Выполнить(); - - Если Не Результат.Пустой() Тогда - Возврат Истина; - КонецЕсли; - - Иначе - - БуферДанных = Новый Структура(ПутьКРеквизиту); - ЗаполнитьЗначенияСвойств(БуферДанных, МестоИспользования.Данные); - Если БуферДанных[ПутьКРеквизиту] = МестоИспользования.Ссылка Тогда - Возврат Истина; - КонецЕсли; - - КонецЕсли; - - КонецЦикла; - КонецЕсли; - - Возврат Ложь; - -КонецФункции - #КонецОбласти diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl index 89f53cbd0..70a5b5197 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl @@ -136,7 +136,7 @@ ОбщегоНазначенияСлужебныйКлиент, ОписаниеОповещенияОЗакрытии); #Если Не ВебКлиент Тогда - // В тонком и толстом клиентах расширение подключено всегда. + // В мобильном, тонком и толстом клиентах расширение подключено всегда. ВыполнитьОбработкуОповещения(ОписаниеОповещенияЗавершение, "ПодключениеНеТребуется"); Возврат; #КонецЕсли @@ -248,7 +248,7 @@ // Процедура ЗарегистрироватьCOMСоединитель(Знач ВыполнитьПерезагрузкуСеанса = Истина) Экспорт -#Если Не ВебКлиент Тогда +#Если Не ВебКлиент И НЕ МобильныйКлиент Тогда Если КлиентПодключенЧерезВебСервер() Тогда Возврат; @@ -366,8 +366,16 @@ Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда ПараметрыПриложения.Вставить(ИмяПараметра, Неопределено); КонецЕсли; + + ТекущиеПараметры = ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыПодтвержденияЗакрытияФормы"]; + Если ТекущиеПараметры <> Неопределено + И ТекущиеПараметры.ОповещениеСохранитьИЗакрыть.Модуль = Параметры.ОповещениеСохранитьИЗакрыть.Модуль Тогда + Возврат; + КонецЕсли; + ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыПодтвержденияЗакрытияФормы"] = Параметры; + Форма.Активизировать(); ПодключитьОбработчикОжидания("ПодтвердитьЗакрытиеФормыСейчас", 0.1, Истина); КонецПроцедуры @@ -576,25 +584,32 @@ КонецФункции -// Возвращает ссылку на общий модуль по имени. +// Возвращает ссылку на общий модуль или модуль менеджера по имени. // // Параметры: -// Имя - Строка - имя общего модуля, например: -// "ОбщегоНазначения", -// "ОбщегоНазначенияКлиент". +// Имя - Строка - имя общего модуля. // // Возвращаемое значение: -// ОбщийМодуль - общий модуль. +// ОбщийМодуль, МодульМенеджераОбъекта - общий модуль. +// +// Пример: +// Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеКонфигурации") Тогда +// МодульОбновлениеКонфигурацииКлиент = ОбщегоНазначенияКлиент.ОбщийМодель("ОбновлениеКонфигурацииКлиент"); +// МодульОбновлениеКонфигурацииКлиент.<Имя метода>(); +// КонецЕсли; +// +// Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПолнотекстовыйПоиск") Тогда +// МодульПолнотекстовыйПоискКлиент = ОбщегоНазначенияКлиент.ОбщийМодель("ПолнотекстовыйПоискКлиент"); +// МодульПолнотекстовыйПоискКлиент.<Имя метода>(); +// КонецЕсли; // Функция ОбщийМодуль(Имя) Экспорт Модуль = Вычислить(Имя); -#Если НЕ ВебКлиент Тогда Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Общий модуль ""%1"" не найден.'"), Имя); КонецЕсли; -#КонецЕсли Возврат Модуль; @@ -891,8 +906,8 @@ Контекст = Новый Структура; Контекст.Вставить("ФайлИнфо", ФайлИнфо); - Оповещение = Новый ОписаниеОповещения("ОткрытьПроводникПослеПроверкиРасширенияРаботыСФайлами", - ОбщегоНазначенияСлужебныйКлиент, Контекст); + Оповещение = Новый ОписаниеОповещения( + "ОткрытьПроводникПослеПроверкиРасширенияРаботыСФайлами", ОбщегоНазначенияСлужебныйКлиент, Контекст); ТекстПредложения = НСтр("ru = 'Для открытия папки необходимо установить расширение работы с файлами.'"); ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение, ТекстПредложения, Ложь); @@ -921,8 +936,8 @@ Контекст.Вставить("ФайлИнфо", ФайлИнфо); Контекст.Вставить("Оповещение", Оповещение); - Оповещение = Новый ОписаниеОповещения("ОткрытьФайлВПрограммеПросмотраПослеПроверкиРасширенияРаботыСФайлами", - ОбщегоНазначенияСлужебныйКлиент, Контекст); + Оповещение = Новый ОписаниеОповещения( + "ОткрытьФайлВПрограммеПросмотраПослеПроверкиРасширенияРаботыСФайлами", ОбщегоНазначенияСлужебныйКлиент, Контекст); ТекстПредложения = НСтр("ru = 'Для открытия файла необходимо установить расширение работы с файлами.'"); ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение, ТекстПредложения, Ложь); @@ -974,7 +989,9 @@ #Если ТолстыйКлиентОбычноеПриложение Тогда // Особенность платформы: ПерейтиПоНавигационнойСсылке не доступен в толстом клиенте обычного приложения. - ЗапуститьПриложение(НавигационнаяСсылка); + Оповещение = Новый ОписаниеОповещения(,, Контекст, + "ОткрытьНавигационнуюСсылкуПриОбработкеОшибки", ОбщегоНазначенияСлужебныйКлиент); + НачатьЗапускПриложения(Оповещение, НавигационнаяСсылка); #Иначе ПерейтиПоНавигационнойСсылке(НавигационнаяСсылка); #КонецЕсли @@ -997,8 +1014,8 @@ Возврат; КонецЕсли; - Оповещение = Новый ОписаниеОповещения("ОткрытьНавигационнуюСсылкуПослеПроверкиРасширенияРаботыСФайлами", - ОбщегоНазначенияСлужебныйКлиент, Контекст); + Оповещение = Новый ОписаниеОповещения( + "ОткрытьНавигационнуюСсылкуПослеПроверкиРасширенияРаботыСФайлами", ОбщегоНазначенияСлужебныйКлиент, Контекст); ТекстПредложения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Для открытия ссылки ""%1"" необходимо установить расширение работы с файлами.'"), @@ -1030,18 +1047,18 @@ КонецФункции -// Запускает внешнюю программу в соответствии с параметрами запуска. -// -// для переводчиков: RunApplication +// (RunApplication) Запускает внешнюю программу в соответствии с параметрами запуска. // // Параметры: -// СтрокаКоманды - Строка - Командная строка для запуска программы. +// КомандаЗапуска - Строка, Массив - Командная строка для запуска программы. +// Если Массив, то: первый элемент массива - путь к исполняемому приложению, остальные - передаваемые параметры, +// массив соответствует тому, который получит вызываемая программа в argv. // ПараметрыЗапускаПрограммы - Структура, Неопределено - см. функцию ПараметрыЗапускаПрограммы. // // Пример: // // -Процедура ЗапуститьПрограмму(Знач СтрокаКоманды, ПараметрыЗапускаПрограммы = Неопределено) Экспорт +Процедура ЗапуститьПрограмму(Знач КомандаЗапуска, ПараметрыЗапускаПрограммы = Неопределено) Экспорт Если ПараметрыЗапускаПрограммы = Неопределено Тогда ПараметрыЗапускаПрограммы = ПараметрыЗапускаПрограммы(); @@ -1050,21 +1067,15 @@ ТекущийКаталог = ПараметрыЗапускаПрограммы.ТекущийКаталог; Оповещение = ПараметрыЗапускаПрограммы.Оповещение; + СтрокаКоманды = ОбщегоНазначенияКлиентСервер.БезопаснаяСтрокаКоманды(КомандаЗапуска); + Контекст = Новый Структура; Контекст.Вставить("СтрокаКоманды", СтрокаКоманды); Контекст.Вставить("ТекущийКаталог", ТекущийКаталог); Контекст.Вставить("Оповещение", Оповещение); - Если ОбщегоНазначенияСлужебныйКлиент.СодержитНебезопасныеДействия(СтрокаКоманды) Тогда - ОписаниеОшибки = - НСтр("ru = 'Недопустимое значение параметра СтрокаКоманды. - |Строка команды не должна содержать символы: ""$"", ""`"", ""|"", "";"", ""&"".'"); - - ОбщегоНазначенияСлужебныйКлиент.ЗапуститьПрограммуОповеститьОбОшибке(ОписаниеОшибки, Контекст); - КонецЕсли; - - Оповещение = Новый ОписаниеОповещения("ЗапуститьПрограммуПослеПроверкиРасширенияРаботыСФайлами", - ОбщегоНазначенияСлужебныйКлиент, Контекст); + Оповещение = Новый ОписаниеОповещения( + "ЗапуститьПрограммуПослеПроверкиРасширенияРаботыСФайлами", ОбщегоНазначенияСлужебныйКлиент, Контекст); ТекстПредложения = НСтр("ru = 'Для создания временного каталога необходимо установить расширение работы с файлами.'"); ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение, ТекстПредложения, Ложь); @@ -1119,7 +1130,8 @@ #Если ТолстыйКлиентОбычноеПриложение Тогда // Особенность платформы: ПерейтиПоНавигационнойСсылке не доступен в толстом клиенте обычного приложения. - ЗапуститьПриложение(Ссылка); + Оповещение = Новый ОписаниеОповещения; + НачатьЗапускПриложения(Оповещение, Ссылка); #Иначе ПерейтиПоНавигационнойСсылке(Ссылка); #КонецЕсли diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl index b211ae371..d3433da22 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl @@ -73,11 +73,11 @@ Процедура ПриНачалеРаботыСистемы(Параметры) Экспорт - - - - + + + + КонецПроцедуры // Вызывается для обработки собственных параметров запуска программы, @@ -148,7 +148,7 @@ Процедура ПриУстановкеЗаголовкаКлиентскогоПриложения(ЗаголовокПриложения, ПриЗапуске) Экспорт - + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl index bd9347119..b6babb7d3 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl @@ -65,7 +65,7 @@ ЭтоОбъект = Ложь; -#Если НЕ ТонкийКлиент И НЕ ВебКлиент Тогда +#Если НЕ ТонкийКлиент И НЕ ВебКлиент И НЕ МобильныйКлиент Тогда Если КлючДанных <> Неопределено И XMLТипЗнч(КлючДанных) <> Неопределено Тогда ТипЗначенияСтрокой = XMLТипЗнч(КлючДанных).ИмяТипа; @@ -2399,6 +2399,8 @@ // - Планы видов характеристик; // - Планы счетов; // - Планы видов расчета. +// После изменения состава предопределенных следует выполнить метод +// ОбновитьПовторноИспользуемыеЗначения(), который сбросит кэш ПовтИсп в текущем сеансе. // // Параметры: // ПолноеИмяПредопределенного - Строка - Полный путь к предопределенному элементу, включая его имя. @@ -2656,7 +2658,7 @@ // Строка - код языка. // Функция КодОсновногоЯзыка() Экспорт - #Если НЕ ТонкийКлиент И НЕ ВебКлиент Тогда + #Если НЕ ТонкийКлиент И НЕ ВебКлиент И НЕ МобильныйКлиент Тогда Возврат Метаданные.ОсновнойЯзык.КодЯзыка; #Иначе Возврат СтандартныеПодсистемыКлиент.ПараметрКлиента("КодОсновногоЯзыка"); @@ -2815,6 +2817,31 @@ КонецФункции +// Возвращает Истина, если клиентское приложение является мобильным клиентом. +// +// Возвращаемое значение: +// Булево - если нет клиентского приложения, возвращается Ложь. +// +Функция ЭтоМобильныйКлиент() Экспорт + +#Если МобильныйКлиент Тогда + Возврат Истина; +#ИначеЕсли Сервер Или ТолстыйКлиентОбычноеПриложение Тогда + УстановитьПривилегированныйРежим(Истина); + + ЭтоМобильныйКлиент = СтандартныеПодсистемыСервер.ПараметрыКлиентаНаСервере().Получить("ЭтоМобильныйКлиент"); + + Если ЭтоМобильныйКлиент = Неопределено Тогда + Возврат Ложь; // Нет клиентского приложения. + КонецЕсли; + + Возврат ЭтоМобильныйКлиент; +#Иначе + Возврат Ложь; +#КонецЕсли + +КонецФункции + // Возвращает объем оперативной памяти, доступной клиентскому приложению. // // Возвращаемое значение: @@ -2877,7 +2904,7 @@ // Вызывает исключение, если тип значения параметра ИмяПараметра процедуры или функции ИмяПроцедурыИлиФункции // отличается от ожидаемого. -// Для диагностики типов параметров, передаваемых в процедуры и функции программного интерфейса. +// Для быстрой диагностики типов параметров, передаваемых в процедуры и функции программного интерфейса. // // Параметры: // ИмяПроцедурыИлиФункции - Строка - имя процедуры или функции, параметр которой проверяется. @@ -2892,13 +2919,13 @@ Контекст = "ОбщегоНазначенияКлиентСервер.ПроверитьПараметр"; Проверить(ТипЗнч(ИмяПроцедурыИлиФункции) = Тип("Строка"), - НСтр("ru = 'Недопустимо значение параметра ИмяПроцедурыИлиФункции'"), Контекст); + НСтр("ru = 'Недопустимое значение параметра ИмяПроцедурыИлиФункции'"), Контекст); Проверить(ТипЗнч(ИмяПараметра) = Тип("Строка"), - НСтр("ru = 'Недопустимо значение параметра ИмяПараметра'"), Контекст); + НСтр("ru = 'Недопустимое значение параметра ИмяПараметра'"), Контекст); ЭтоКорректныйТип = ЗначениеОжидаемогоТипа(ЗначениеПараметра, ОжидаемыеТипы); Проверить(ЭтоКорректныйТип <> Неопределено, - НСтр("ru = 'Недопустимо значение параметра ОжидаемыеТипы'"), Контекст); + НСтр("ru = 'Недопустимое значение параметра ОжидаемыеТипы'"), Контекст); НедопустимыйПараметр = НСтр("ru = 'Недопустимое значение параметра %1 в %2. |Ожидалось: %3; передано значение: %4 (тип %5).'"); @@ -2912,7 +2939,7 @@ Если ТипЗнч(ЗначениеПараметра) = Тип("Структура") И ОжидаемыеТипыСвойств <> Неопределено Тогда Проверить(ТипЗнч(ОжидаемыеТипыСвойств) = Тип("Структура"), - НСтр("ru = 'Недопустимо значение параметра ИмяПроцедурыИлиФункции'"), Контекст); + НСтр("ru = 'Недопустимое значение параметра ИмяПроцедурыИлиФункции'"), Контекст); НетСвойства = НСтр("ru = 'Недопустимое значение параметра %1 (Структура) в %2. |В структуре ожидалось свойство %3 (тип %4).'"); @@ -2925,7 +2952,8 @@ ЗначениеСвойства = Неопределено; Проверить(ЗначениеПараметра.Свойство(ОжидаемоеИмяСвойства, ЗначениеСвойства), - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НетСвойства, ИмяПараметра, ИмяПроцедурыИлиФункции, ОжидаемоеИмяСвойства, ОжидаемыйТипСвойства)); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НетСвойства, ИмяПараметра, ИмяПроцедурыИлиФункции, + ОжидаемоеИмяСвойства, ОжидаемыйТипСвойства)); ЭтоКорректныйТип = ЗначениеОжидаемогоТипа(ЗначениеСвойства, ОжидаемыйТипСвойства); Проверить(ЭтоКорректныйТип, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НедопустимоеСвойство, @@ -3071,20 +3099,21 @@ // Возвращает структуру параметров для см. процедуру ЗапуститьПрограмму. // // Возвращаемое значение: -// ТекущийКаталог - Строка - Задает текущий каталог запускаемого приложения. -// ДождатьсяЗавершения - Булево - Истина - дожидаться завершения запущенного приложения -// перед продолжением работы. -// ПолучитьПотокВывода - Булево - Истина - результат, направленный в поток stdout, -// если не указан ДождатьсяЗавершения - игнорируется. -// ПолучитьПотокОшибок - Булево - Истина - ошибки, направленные в поток stderr, -// если не указан ДождатьсяЗавершения - игнорируется. +// ТекущийКаталог - Строка - Задает текущий каталог запускаемого приложения. +// ДождатьсяЗавершения - Булево - Истина - дожидаться завершения запущенного приложения +// перед продолжением работы. +// ПолучитьПотокВывода - Булево - Истина - результат, направленный в поток stdout, +// если не указан ДождатьсяЗавершения - игнорируется. +// ПолучитьПотокОшибок - Булево - Истина - ошибки, направленные в поток stderr, +// если не указан ДождатьсяЗавершения - игнорируется. // ВыполнитьСНаивысшимиПравами - Булево - Истина - требуется запустить программу на исполнение -// с повышением привилегий системы: -// - подтверждение UAC для Windows; -// - интерактивным запросом c GUI sudo и перенаправлением -// $DISPLAY и $XAUTHORITY текущего пользователя для Linux; -// Не совместим с параметром ДождатьсяЗавершения. -// В MacOS игнорируется. +// с повышением привилегий системы: +// - подтверждение UAC для Windows; +// - интерактивным запросом c GUI sudo и перенаправлением +// $DISPLAY и $XAUTHORITY текущего пользователя для Linux; +// Не совместим с параметром ДождатьсяЗавершения. В MacOS игнорируется. +// Кодировка - Строка - Код кодировки, устанавливаемый до выполнения пакетной операции. +// В Linux и macOS игнорируется. // Функция ПараметрыЗапускаПрограммы() Экспорт @@ -3093,18 +3122,21 @@ Параметры.Вставить("ДождатьсяЗавершения", Ложь); Параметры.Вставить("ПолучитьПотокВывода", Ложь); Параметры.Вставить("ПолучитьПотокОшибок", Ложь); - Параметры.Вставить("ВыполнитьСНаивысшимиПравами", Ложь); // для переводчиков: RunWithElevatedPermissions. + Параметры.Вставить("ВыполнитьСНаивысшимиПравами", Ложь); // RunWithElevatedPermissions. + Параметры.Вставить("Кодировка", ""); Возврат Параметры; КонецФункции -// Запускает внешнюю программу в соответствии с параметрами запуска. +// (RunApplication) Запускает внешнюю программу в соответствии с параметрами запуска. // Не доступно в веб-клиенте. // // Параметры: -// СтрокаКоманды - Строка - Командная строка для запуска программы. -// ПараметрыЗапускаПрограммы - Структура, Неопределено - см. функцию ПараметрыЗапускаПрограммы. +// КомандаЗапуска - Строка, Массив - Командная строка для запуска программы. +// Если Массив, то: первый элемент массива - путь к исполняемому приложению, остальные - передаваемые параметры, +// массив соответствует тому, который получит вызываемая программа в argv. +// ПараметрыЗапускаПрограммы - Структура - см. функцию ПараметрыЗапускаПрограммы. // // Возвращаемое значение: // Структура - Результат работы программы. @@ -3124,20 +3156,13 @@ // ПараметрыЗапускаПрограммы.ДождатьсяЗавершения = Истина; // Результат = ОбщегоНазначенияКлиентСервер.ЗапуститьПрограмму("ping 127.0.0.1 -n 5", ПараметрыЗапускаПрограммы); // -Функция ЗапуститьПрограмму(Знач СтрокаКоманды, ПараметрыЗапускаПрограммы = Неопределено) Экспорт +Функция ЗапуститьПрограмму(Знач КомандаЗапуска, ПараметрыЗапускаПрограммы = Неопределено) Экспорт -#Если ВебКлиент Тогда +#Если ВебКлиент ИЛИ МобильныйКлиент Тогда ВызватьИсключение НСтр("ru = 'Запуск программ недоступен в веб-клиенте.'"); #Иначе - Если СодержитНебезопасныеДействия(СтрокаКоманды) Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Недопустимая строка команды - |%1 - |по причине: - |Строка команды не должна содержать символы: ""$"", ""`"", ""|"", "";"", ""&"".'"), - СтрокаКоманды); - КонецЕсли; + СтрокаКоманды = БезопаснаяСтрокаКоманды(КомандаЗапуска); Если ПараметрыЗапускаПрограммы = Неопределено Тогда ПараметрыЗапускаПрограммы = ПараметрыЗапускаПрограммы(); @@ -3148,6 +3173,7 @@ ПолучитьПотокВывода = ПараметрыЗапускаПрограммы.ПолучитьПотокВывода; ПолучитьПотокОшибок = ПараметрыЗапускаПрограммы.ПолучитьПотокОшибок; ВыполнитьСНаивысшимиПравами = ПараметрыЗапускаПрограммы.ВыполнитьСНаивысшимиПравами; + Кодировка = ПараметрыЗапускаПрограммы.Кодировка; Если ВыполнитьСНаивысшимиПравами Тогда #Если ВнешнееСоединение Тогда @@ -3164,6 +3190,16 @@ КонецЕсли; + СистемнаяИнформация = Новый СистемнаяИнформация(); + Если (СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86) + Или (СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64) Тогда + + Если Не ПустаяСтрока(Кодировка) Тогда + СтрокаКоманды = "chcp " + Кодировка + " | " + СтрокаКоманды; + КонецЕсли; + + КонецЕсли; + Если ДождатьсяЗавершения Тогда Если ПолучитьПотокВывода Тогда @@ -3180,29 +3216,35 @@ КодВозврата = Неопределено; - СистемнаяИнформация = Новый СистемнаяИнформация(); - Если (СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86) + Если (СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86) Или (СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64) Тогда + +#Если Сервер Тогда + + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + ЗапуститьПриложение(СтрокаКоманды, ТекущийКаталог, ДождатьсяЗавершения, КодВозврата); + Иначе // Из-за запуска через shell перенаправление каталога требуется сделать командой. Если Не ПустаяСтрока(ТекущийКаталог) Тогда - СтрокаКоманды = "cd """ + ТекущийКаталог + """ && " + СтрокаКоманды; + СтрокаКоманды = "cd /D """ + ТекущийКаталог + """ && " + СтрокаКоманды; КонецЕсли; // Выполняется запуск через cmd.exe (для перенаправления stdout и stderr). СтрокаКоманды = "cmd /S /C "" " + СтрокаКоманды + " """; -#Если Сервер Тогда - Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - // В файловой информационной базе показывать окно консоли не следует и в серверном контексте. - Оболочка = Новый COMОбъект("Wscript.Shell"); - // Run запускает новый процесс, не являющийся дочерним текущего процесса (в отличии от Exec). - КодВозврата = Оболочка.Run(СтрокаКоманды, 0, ДождатьсяЗавершения); - Оболочка = Неопределено; - Иначе - ЗапуститьПриложение(СтрокаКоманды,, ДождатьсяЗавершения, КодВозврата); - КонецЕсли; + ЗапуститьПриложение(СтрокаКоманды,, ДождатьсяЗавершения, КодВозврата); + КонецЕсли; + #Иначе + // Из-за запуска через shell перенаправление каталога требуется сделать командой. + Если Не ПустаяСтрока(ТекущийКаталог) Тогда + СтрокаКоманды = "cd /D """ + ТекущийКаталог + """ && " + СтрокаКоманды; + КонецЕсли; + + // Выполняется запуск через cmd.exe (для перенаправления stdout и stderr). + СтрокаКоманды = "cmd /S /C "" " + СтрокаКоманды + " """; + Если ВыполнитьСНаивысшимиПравами Тогда Если ДождатьсяЗавершения Тогда @@ -3250,7 +3292,7 @@ ПараметрыЗапускаПодпрограммы = ПараметрыЗапускаПрограммы(); ПараметрыЗапускаПодпрограммы.ДождатьсяЗавершения = Истина; - ПараметрыЗапускаПодпрограммы.ПолучитьПотокВывода = Истина;; + ПараметрыЗапускаПодпрограммы.ПолучитьПотокВывода = Истина; Результат = ЗапуститьПрограмму("echo $DISPLAY", ПараметрыЗапускаПодпрограммы); ПараметрыШаблона.Вставить("DISPLAY", Результат.ПотокВывода); @@ -3285,11 +3327,13 @@ Если ПолучитьПотокВывода Тогда - ЧтениеПотокаВывода = Новый ЧтениеТекста(ФайлПотокаВывода, КодировкаСтандартныхПотоков()); - ПотокВывода = ЧтениеПотокаВывода.Прочитать(); - ЧтениеПотокаВывода.Закрыть(); - - УдалитьВременныйФайл(ФайлПотокаВывода); + ФайлИнфо = Новый Файл(ФайлПотокаВывода); + Если ФайлИнфо.Существует() Тогда + ЧтениеПотокаВывода = Новый ЧтениеТекста(ФайлПотокаВывода, КодировкаСтандартныхПотоков()); + ПотокВывода = ЧтениеПотокаВывода.Прочитать(); + ЧтениеПотокаВывода.Закрыть(); + УдалитьВременныйФайл(ФайлПотокаВывода); + КонецЕсли; Если ПотокВывода = Неопределено Тогда ПотокВывода = ""; @@ -3299,11 +3343,13 @@ Если ПолучитьПотокОшибок Тогда - ЧтениеПотокаОшибок = Новый ЧтениеТекста(ФайлПотокаОшибок, КодировкаСтандартныхПотоков()); - ПотокОшибок = ЧтениеПотокаОшибок.Прочитать(); - ЧтениеПотокаОшибок.Закрыть(); - - УдалитьВременныйФайл(ФайлПотокаОшибок); + ФайлИнфо = Новый Файл(ФайлПотокаОшибок); + Если ФайлИнфо.Существует() Тогда + ЧтениеПотокаОшибок = Новый ЧтениеТекста(ФайлПотокаОшибок, КодировкаСтандартныхПотоков()); + ПотокОшибок = ЧтениеПотокаОшибок.Прочитать(); + ЧтениеПотокаОшибок.Закрыть(); + УдалитьВременныйФайл(ФайлПотокаОшибок); + КонецЕсли; Если ПотокОшибок = Неопределено Тогда ПотокОшибок = ""; @@ -3750,6 +3796,45 @@ КонецФункции +Функция БезопаснаяСтрокаКоманды(КомандаЗапуска) Экспорт + + Результат = ""; + + Если ТипЗнч(КомандаЗапуска) = Тип("Строка") Тогда + Если СодержитНебезопасныеДействия(КомандаЗапуска) Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Недопустимая строка команды + |%1 + |по причине: + |Строка команды не должна содержать символы: ""$"", ""`"", ""|"", "";"", ""&"".'"), + КомандаЗапуска); + КонецЕсли; + + Результат = КомандаЗапуска; + ИначеЕсли ТипЗнч(КомандаЗапуска) = Тип("Массив") Тогда + Если КомандаЗапуска.Количество() > 0 Тогда + Если СодержитНебезопасныеДействия(КомандаЗапуска[0]) Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Недопустимая команда или путь к исполняемому файлу + |%1 + |по причине: + |Команды не должна содержать символы: ""$"", ""`"", ""|"", "";"", ""&"".'"), + КомандаЗапуска[0]); + КонецЕсли; + Результат = МассивВСтрокуКоманды(КомандаЗапуска); + Иначе + ВызватьИсключение + НСтр("ru = 'Ожидался что в первый элемент КомандаЗапуска будет командой или путем к исполняемому файлу.'"); + КонецЕсли; + Иначе + ВызватьИсключение + НСтр("ru = 'Ожидался что значение КомандаЗапуска будет <Строка> или <Массив>'"); + КонецЕсли; + + Возврат Результат + +КонецФункции + Функция СодержитНебезопасныеДействия(Знач СтрокаКоманды) СтрокаКоманды = СтрЗаменить(СтрокаКоманды, "$DISPLAY", ""); @@ -3763,6 +3848,55 @@ КонецФункции +Функция МассивВСтрокуКоманды(КомандаЗапуска) + + Результат = Новый Массив; + НужныКавычки = Ложь; + Для Каждого Аргумент Из КомандаЗапуска Цикл + + Если Результат.Количество() > 0 Тогда + Результат.Добавить(" ") + КонецЕсли; + + НужныКавычки = Аргумент = Неопределено + Или ПустаяСтрока(Аргумент) + Или СтрНайти(Аргумент, " ") + Или СтрНайти(Аргумент, Символы.Таб) + Или СтрНайти(Аргумент, "&") + Или СтрНайти(Аргумент, "(") + Или СтрНайти(Аргумент, ")") + Или СтрНайти(Аргумент, "[") + Или СтрНайти(Аргумент, "]") + Или СтрНайти(Аргумент, "{") + Или СтрНайти(Аргумент, "}") + Или СтрНайти(Аргумент, "^") + Или СтрНайти(Аргумент, "=") + Или СтрНайти(Аргумент, ";") + Или СтрНайти(Аргумент, "!") + Или СтрНайти(Аргумент, "'") + Или СтрНайти(Аргумент, "+") + Или СтрНайти(Аргумент, ",") + Или СтрНайти(Аргумент, "`") + Или СтрНайти(Аргумент, "~") + Или СтрНайти(Аргумент, "$") + Или СтрНайти(Аргумент, "|"); + + Если НужныКавычки Тогда + Результат.Добавить(""""); + КонецЕсли; + + Результат.Добавить(СтрЗаменить(Аргумент, """", """""")); + + Если НужныКавычки Тогда + Результат.Добавить(""""); + КонецЕсли; + + КонецЦикла; + + Возврат СтрСоединить(Результат); + +КонецФункции + Функция ТекстОшибкиПредопределенноеЗначениеНеНайдено(ПолноеИмяПредопределенного) Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( diff --git a/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/Module.bsl index 82b853435..48040ed34 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/Module.bsl @@ -36,6 +36,8 @@ КонецПроцедуры // Определяет соответствие имен параметров сеанса и обработчиков для их установки. +// Вызывается для инициализации параметров сеанса из обработчика события модуля сеанса УстановкаПараметровСеанса +// (подробнее о нем см. синтакс-помощник). // // В указанных модулях должна быть размещена процедура обработчика, в которую передаются параметры // ИмяПараметра - Строка - имя параметра сеанса, который требуется установить. @@ -134,6 +136,10 @@ // и выбрать как именно очищать ссылку: очищать значение реквизита, удалять строку таблицы или удалять весь объект. // Подробнее см. в документации к подсистеме "Удаление помеченных объектов". // +// При исключении регистров допустимо исключать только Измерения, +// При необходимости исключить из поиска значения в ресурсах +// или в реквизитах регистров требуется исключить регистр целиком. +// // Параметры: // ИсключенияПоискаСсылок - Массив - объекты метаданных или их реквизиты (ОбъектМетаданных, Строка), // которые не должно учитываться в бизнес-логике. @@ -141,7 +147,7 @@ // // Пример: // ИсключенияПоискаСсылок.Добавить(Метаданные.РегистрыСведений.ВерсииОбъектов); -// ИсключенияПоискаСсылок.Добавить(Метаданные.РегистрыСведений.ВерсииОбъектов.Реквизиты.АвторВерсии); +// ИсключенияПоискаСсылок.Добавить(Метаданные.РегистрыСведений.ВерсииОбъектов.Измерения.Объект); // ИсключенияПоискаСсылок.Добавить("ПланВидовРасчета._ДемоОсновныеНачисления.СтандартнаяТабличнаяЧасть.БазовыеВидыРасчета.СтандартныйРеквизит.ВидРасчета"); // Процедура ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок) Экспорт diff --git a/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиент/Module.bsl index 7046cbda1..7d4c864ef 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиент/Module.bsl @@ -455,6 +455,13 @@ КонецЕсли; КонецЕсли; + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ВнешниеКомпонентыВМоделиСервиса") Тогда + МодульВнешниеКомпонентыВМоделиСервисаСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ВнешниеКомпонентыВМоделиСервисаСлужебныйКлиент"); + Если МодульВнешниеКомпонентыВМоделиСервисаСлужебныйКлиент.ЭтоКомпонентаИзХранилища(Местоположение) Тогда + Возврат Истина; + КонецЕсли; + КонецЕсли; + Возврат ЭтоМакет(Местоположение); КонецФункции @@ -562,7 +569,9 @@ ФайлИнфо = Контекст.ФайлИнфо; Если РасширениеПодключено Тогда - Оповещение = Новый ОписаниеОповещения("ОткрытьПроводникПослеПроверкиСуществования", ЭтотОбъект, Контекст); + Оповещение = Новый ОписаниеОповещения( + "ОткрытьПроводникПослеПроверкиСуществования", ЭтотОбъект, Контекст, + "ОткрытьПроводникПриОбработкеОшибки", ЭтотОбъект); ФайлИнфо.НачатьПроверкуСуществования(Оповещение); Иначе ОписаниеОшибки = НСтр("ru = 'Расширение для работы с файлами не установлено, открытие папки не возможно.'"); @@ -577,7 +586,9 @@ ФайлИнфо = Контекст.ФайлИнфо; Если Существует Тогда - Оповещение = Новый ОписаниеОповещения("ОткрытьПроводникПослеПроверкиЭтоФайл", ЭтотОбъект, Контекст); + Оповещение = Новый ОписаниеОповещения( + "ОткрытьПроводникПослеПроверкиЭтоФайл", ЭтотОбъект, Контекст, + "ОткрытьПроводникПриОбработкеОшибки", ЭтотОбъект); ФайлИнфо.НачатьПроверкуЭтоФайл(Оповещение); Иначе ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -594,7 +605,7 @@ ФайлИнфо = Контекст.ФайлИнфо; - Оповещение = Новый ОписаниеОповещения("ОткрытьПроводникПослеОткрытияКаталога", ЭтотОбъект); + Оповещение = Новый ОписаниеОповещения(,,, "ОткрытьПроводникПриОбработкеОшибки", ЭтотОбъект); Если ЭтоФайл Тогда Если ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда НачатьЗапускПриложения(Оповещение, "explorer.exe /select, """ + ФайлИнфо.ПолноеИмя + """"); @@ -608,13 +619,14 @@ КонецПроцедуры // Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьПроводник. -Процедура ОткрытьПроводникПослеОткрытияКаталога(КодВозврата, Контекст) Экспорт +Процедура ОткрытьПроводникПриОбработкеОшибки(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт - Возврат; + СтандартнаяОбработка = Ложь; + ОткрытьПроводникОповеститьОбОшибке("", Контекст); КонецПроцедуры -// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку. +// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьПроводник. Процедура ОткрытьПроводникОповеститьОбОшибке(ОписаниеОшибки, Контекст) Если Не ПустаяСтрока(ОписаниеОшибки) Тогда @@ -633,8 +645,9 @@ ФайлИнфо = Контекст.ФайлИнфо; Если РасширениеПодключено Тогда - Оповещение = Новый ОписаниеОповещения("ОткрытьФайлВПрограммеПросмотраПослеПроверкиСуществования", - ЭтотОбъект, Контекст); + Оповещение = Новый ОписаниеОповещения( + "ОткрытьФайлВПрограммеПросмотраПослеПроверкиСуществования", ЭтотОбъект, Контекст, + "ОткрытьФайлВПрограммеПросмотраПриОбработкеОшибки", ЭтотОбъект); ФайлИнфо.НачатьПроверкуСуществования(Оповещение); Иначе ОписаниеОшибки = НСтр("ru = 'Расширение для работы с файлами не установлено, открытие файла невозможно.'"); @@ -649,8 +662,9 @@ ФайлИнфо = Контекст.ФайлИнфо; Если Существует Тогда - Оповещение = Новый ОписаниеОповещения("ОткрытьФайлВПрограммеПросмотраПослеПроверкиЭтоФайл", - ЭтотОбъект, Контекст); + Оповещение = Новый ОписаниеОповещения( + "ОткрытьФайлВПрограммеПросмотраПослеПроверкиЭтоФайл", ЭтотОбъект, Контекст, + "ОткрытьФайлВПрограммеПросмотраПриОбработкеОшибки", ЭтотОбъект); ФайлИнфо.НачатьПроверкуЭтоФайл(Оповещение); Иначе ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -690,7 +704,8 @@ Оповещение = Контекст.Оповещение; ДождатьсяЗавершения = (Оповещение <> Неопределено); - Оповещение = Новый ОписаниеОповещения("ОткрытьФайлВПрограммеПросмотраПослеЗапускаПриложения", ЭтотОбъект, Контекст, + Оповещение = Новый ОписаниеОповещения( + "ОткрытьФайлВПрограммеПросмотраПослеЗапускаПриложения", ЭтотОбъект, Контекст, "ОткрытьФайлВПрограммеПросмотраПриОбработкеОшибки", ЭтотОбъект); НачатьЗапускПриложения(Оповещение, ФайлИнфо.ПолноеИмя,, ДождатьсяЗавершения); @@ -925,7 +940,8 @@ ДождатьсяЗавершения = (Оповещение <> Неопределено); - Оповещение = Новый ОписаниеОповещения("ЗапуститьПрограммуПослеЗапускаПриложения", ЭтотОбъект, Контекст, + Оповещение = Новый ОписаниеОповещения( + "ЗапуститьПрограммуПослеЗапускаПриложения", ЭтотОбъект, Контекст, "ЗапуститьПрограммуПриОбработкеОшибки", ЭтотОбъект); НачатьЗапускПриложения(Оповещение, СтрокаКоманды, ТекущийКаталог, ДождатьсяЗавершения); @@ -971,7 +987,7 @@ КонецПроцедуры // Продолжение процедуры ОбщегоНазначенияКлиент.ЗапуститьПрограмму. -Процедура ЗапуститьПрограммуОповеститьОбОшибке(ОписаниеОшибки, Контекст) Экспорт +Процедура ЗапуститьПрограммуОповеститьОбОшибке(ОписаниеОшибки, Контекст) Оповещение = Контекст.Оповещение; @@ -999,17 +1015,6 @@ КонецФункции -// Проверяет содержит ли строка команды опасные действия -Функция СодержитНебезопасныеДействия(СтрокаКоманды) Экспорт - - Возврат СтрНайти(СтрокаКоманды, "$") <> 0 - Или СтрНайти(СтрокаКоманды, "`") <> 0 - Или СтрНайти(СтрокаКоманды, "|") <> 0 - Или СтрНайти(СтрокаКоманды, ";") <> 0 - Или СтрНайти(СтрокаКоманды, "&") <> 0; - -КонецФункции - #КонецОбласти #Область СоздатьВременныйКаталог @@ -1019,8 +1024,9 @@ Если РасширениеПодключено Тогда - Оповещение = Новый ОписаниеОповещения("СоздатьВременныйКаталогПослеПолученияВременногоКаталога", - ЭтотОбъект, Контекст); + Оповещение = Новый ОписаниеОповещения( + "СоздатьВременныйКаталогПослеПолученияВременногоКаталога", ЭтотОбъект, Контекст, + "СоздатьВременныйКаталогПриОбработкеОшибки", ЭтотОбъект); НачатьПолучениеКаталогаВременныхФайлов(Оповещение); @@ -1048,6 +1054,15 @@ КонецПроцедуры +// Продолжение процедуры ОбщегоНазначенияКлиент.СоздатьВременныйКаталог. +Процедура СоздатьВременныйКаталогПриОбработкеОшибки(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт + + СтандартнаяОбработка = Ложь; + ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); + СоздатьВременныйКаталогОповеститьОбОшибке(ОписаниеОшибки, Контекст); + +КонецПроцедуры + // Продолжение процедуры ОбщегоНазначенияКлиент.СоздатьВременныйКаталог. Процедура СоздатьВременныйКаталогОповеститьОбОшибке(ОписаниеОшибки, Контекст) @@ -1171,7 +1186,6 @@ Если Параметры = Неопределено Тогда Возврат; КонецЕсли; - ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыПодтвержденияЗакрытияФормы"] = Неопределено; Оповещение = Новый ОписаниеОповещения("ПодтвердитьЗакрытиеФормыЗавершение", ЭтотОбъект, Параметры); Если ПустаяСтрока(Параметры.ТекстПредупреждения) Тогда @@ -1187,8 +1201,11 @@ Процедура ПодтвердитьЗакрытиеФормыЗавершение(Ответ, Параметры) Экспорт + ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыПодтвержденияЗакрытияФормы"] = Неопределено; + Если Ответ = КодВозвратаДиалога.Да Тогда ВыполнитьОбработкуОповещения(Параметры.ОповещениеСохранитьИЗакрыть); + ИначеЕсли Ответ = КодВозвратаДиалога.Нет Тогда Форма = Параметры.ОповещениеСохранитьИЗакрыть.Модуль; Форма.Модифицированность = Ложь; diff --git a/SSL/src/CommonModules/ОрганизацииПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОрганизацииПереопределяемый/Module.bsl new file mode 100644 index 000000000..bce311f3b --- /dev/null +++ b/SSL/src/CommonModules/ОрганизацииПереопределяемый/Module.bsl @@ -0,0 +1,331 @@ + +#Область ПрограммныйИнтерфейс + +#Область ОрганизацииСервер + +// Переопределяет структуру, содержащую сведения о регистрационной информации организации. +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - организация, сведения по которой необходимо получить. +// Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. +// Список допустимых имен полей см. в описании возвращаемого значения. +// Если указана пустая строка, то возвращаются значения всех полей. +// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// то возвращается значение на текущую дату. +// РегистрационныеДанные - Структура - +// см. ОрганизацииСервер.РегистрационныеДанныеОрганизации +// Пример: +// СведенияОбОрганизации = ОрганизацииСервер.СведенияОбОрганизации(Организация); +// +// СвойстваОрганизации = СтрРазделить(Поля, ",", Ложь); +// +// Запрос = Новый Запрос; +// Запрос.УстановитьПараметр("Ссылка", Организация); +// Запрос.Текст = +// "ВЫБРАТЬ +// | _ДемоОрганизации.Ссылка КАК Ссылка, +// | _ДемоОрганизации.ВерсияДанных КАК ВерсияДанных, +// | _ДемоОрганизации.ПометкаУдаления КАК ПометкаУдаления, +// | _ДемоОрганизации.Код КАК Код, +// | _ДемоОрганизации.Наименование КАК Наименование, +// | _ДемоОрганизации.БИК КАК БИК, +// | _ДемоОрганизации.ГлавныйБухгалтер КАК ГлавныйБухгалтер, +// | _ДемоОрганизации.Директор КАК Директор, +// | _ДемоОрганизации.ИндивидуальныйПредприниматель КАК ИндивидуальныйПредприниматель, +// | _ДемоОрганизации.ИНН КАК ИНН, +// | _ДемоОрганизации.ИнформационноеОбслуживание КАК ИнформационноеОбслуживание, +// | _ДемоОрганизации.КорреспондентскийСчет КАК КорреспондентскийСчет, +// | _ДемоОрганизации.КПП КАК КПП, +// | _ДемоОрганизации.НаименованиеПолное КАК НаименованиеПолное, +// | _ДемоОрганизации.НаименованиеСокращенное КАК НаименованиеСокращенное, +// | _ДемоОрганизации.ОГРН КАК ОГРН, +// | _ДемоОрганизации.Префикс КАК Префикс, +// | _ДемоОрганизации.РасчетныйСчет КАК РасчетныйСчет, +// | _ДемоОрганизации.ГоловнаяОрганизация КАК ГоловнаяОрганизация, +// | _ДемоОрганизации.ПроизводственныйКалендарь КАК ПроизводственныйКалендарь, +// | _ДемоОрганизации.Предопределенный КАК Предопределенный, +// | _ДемоОрганизации.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных +// |ИЗ +// | Справочник._ДемоОрганизации КАК _ДемоОрганизации +// |ГДЕ +// | _ДемоОрганизации.Ссылка = &Ссылка"; +// +// РезультатЗапроса = Запрос.Выполнить(); +// +// ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); +// +// Если ВыборкаДетальныеЗаписи.Следующий() Тогда +// +// Для каждого Элемент Из СвойстваОрганизации Цикл +// +// Если РезультатЗапроса.Колонки.Найти(Элемент) <> Неопределено Тогда +// +// РегистрационныеДанные.Вставить(Элемент, ВыборкаДетальныеЗаписи[Элемент]); +// +// КонецЕсли; +// +// КонецЦикла; +// +// КонецЕсли; +Процедура ПриОпределенииРегистрационныхДанныхОрганизации(Организация, Поля, Дата, РегистрационныеДанные) Экспорт + + + +КонецПроцедуры + +// Возвращает структуру, содержащую сведения о дополнительной информации организации. +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - организация, сведения по которой необходимо получить. +// Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. +// Список допустимых имен полей см. в описании возвращаемого значения. +// Если указана пустая строка, то возвращаются значения всех полей. +// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// то возвращается значение на текущую дату. +// ДополнительныеСведения - Структура - +// см. ОрганизацииСервер.ДополнительныеСведенияОрганизации. +Процедура ПриОпределенииДополнительныхСведенийОрганизации(Организация, Поля, Дата, ДополнительныеСведения) Экспорт + + + +КонецПроцедуры + +// Переопределяет структуру, содержащую сведения о контактной информации организации. +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - организация, сведения по которой необходимо получить. +// Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. +// Список допустимых имен полей см. в описании возвращаемого значения. +// Если указана пустая строка, то возвращаются значения всех полей. +// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// то возвращается значение на текущую дату. +// КонтактнаяИнформация - Структура - +// см. ОрганизацииСервер.КонтактнаяИнформацияОрганизации. +Процедура ПриОпределенииКонтактнойИнформацииОрганизации(Организация, Поля, Дата, КонтактнаяИнформация) Экспорт + + +КонецПроцедуры + +// Переопределяет структуру, содержащую сведения о банковской информации организации. +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - организация, сведения по которой необходимо получить. +// Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. +// Список допустимых имен полей см. в описании возвращаемого значения. +// Если указана пустая строка, то возвращаются значения всех полей. +// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// то возвращается значение на текущую дату. +// БанковскийСчет - Структура - +// см. ОрганизацииСервер.БанковскийСчетОрганизации. +Процедура ПриОпределенииБанковскогоСчетаОрганизации(Организация, Поля, Дата, БанковскийСчет) Экспорт + +КонецПроцедуры + +#КонецОбласти + +#Область СведенияОбОбособленномПодразделении + +// Переопределяет структуру, содержащую сведения о регистрационных данных обособленного подразделения. +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - организация, сведения по которой необходимо получить. +// Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. +// Список допустимых имен полей см. в описании возвращаемого значения. +// Если указана пустая строка, то возвращаются значения всех полей. +// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// то возвращается значение на текущую дату. +// РегистрационныеДанные - Структура - +// см. ОрганизацииСервер.РегистрационныеДанныеОбособленногоПодразделения. +Процедура ПриОпределенииРегистрационныхДанныхОбособленногоПодразделения(Организация, Поля, Дата, РегистрационныеДанные) Экспорт + +КонецПроцедуры + +// Переопределяет структуру, содержащую сведения о контактной информации обособленного подразделения. +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - организация, сведения по которой необходимо получить. +// Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. +// Список допустимых имен полей см. в описании возвращаемого значения. +// Если указана пустая строка, то возвращаются значения всех полей. +// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// то возвращается значение на текущую дату. +// КонтактнаяИнформация - Структура - +// см. ОрганизацииСервер.КонтактнаяИнформацияОбособленногоПодразделения. +Процедура ПриОпределенииКонтактнойИнформацииОбособленногоПодразделения(Организация, Поля, Дата, КонтактнаяИнформация) Экспорт + +КонецПроцедуры + +#КонецОбласти + +#Область СведенияОбИностраннойОрганизации + +// Переопределяет структуру, содержащую сведения о регистрационной информации иностранной организации. +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - организация, сведения по которой необходимо получить. +// Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. +// Список допустимых имен полей см. в описании возвращаемого значения. +// Если указана пустая строка, то возвращаются значения всех полей. +// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// то возвращается значение на текущую дату. +// РегистрационныеДанные - Структура - +// см. ОрганизацииСервер.РегистрационныеДанныеИностраннойОрганизации. +Процедура ПриОпределенииРегистрационныхДанныхИностраннойОрганизации(Организация, Поля, Дата, РегистрационныеДанные) Экспорт + +КонецПроцедуры + +// Переопределяет структуру, содержащую сведения о контактной информации иностранной организации. +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - организация, сведения по которой необходимо получить. +// Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. +// Список допустимых имен полей см. в описании возвращаемого значения. +// Если указана пустая строка, то возвращаются значения всех полей. +// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// то возвращается значение на текущую дату. +// КонтактнаяИнформация - Структура - +// см. ОрганизацииСервер.КонтактнаяИнформацияИностраннойОрганизации. +Процедура ПриОпределенииКонтактнойИнформацииИностраннойОрганизации(Организация, Поля, Дата, КонтактнаяИнформация) Экспорт + +КонецПроцедуры + +#КонецОбласти + +#Область СведенияОбИндивидуальномПредпринимателе + +// Переопределяет структуру, содержащую сведения о регистрационной информации индивидуального предпринимателя. +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - организация, сведения по которой необходимо получить. +// Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. +// Список допустимых имен полей см. в описании возвращаемого значения. +// Если указана пустая строка, то возвращаются значения всех полей. +// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// то возвращается значение на текущую дату. +// РегистрационныеДанные - Структура - +// см. ОрганизацииСервер.РегистрационныеДанныеИндивидуальногоПредпринимателя. +Процедура ПриОпределенииРегистрационныхДанныхИндивидуальногоПредпринимателя(Организация, Поля, Дата, РегистрационныеДанные) Экспорт + +КонецПроцедуры + +// Переопределяет структуру, содержащую сведения о контактной информации индивидуального предпринимателя. +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - организация, сведения по которой необходимо получить. +// Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. +// Список допустимых имен полей см. в описании возвращаемого значения. +// Если указана пустая строка, то возвращаются значения всех полей. +// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// то возвращается значение на текущую дату. +// КонтактнаяИнформация - Структура - +// см. ОрганизацииСервер.КонтактнаяИнформацияИндивидуальногоПредпринимателя. +Процедура ПриОпределенииКонтактнойИнформацииИндивидуальногоПредпринимателя(Организация, Поля, Дата, КонтактнаяИнформация) Экспорт + +КонецПроцедуры + +#КонецОбласти + +#Область СведенияОРуководителеОрганизации + +// Переопределяет структуру, содержащую сведения о регистрационной информации руководителя организации. +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - организация, сведения по которой необходимо получить. +// Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. +// Список допустимых имен полей см. в описании возвращаемого значения. +// Если указана пустая строка, то возвращаются значения всех полей. +// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// то возвращается значение на текущую дату. +// РегистрационныеДанные - Структура - +// см. ОрганизацииСервер.РегистрационныеДанныеРуководителяОрганизации. +Процедура ПриОпределенииРегистрационныхДанныхРуководителяОрганизации(Организация, Поля, Дата, РегистрационныеДанные) Экспорт + + +КонецПроцедуры + +// Переопределяет структуру, содержащую сведения о контактной информации руководителя организации. +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - организация, сведения по которой необходимо получить. +// Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. +// Список допустимых имен полей см. в описании возвращаемого значения. +// Если указана пустая строка, то возвращаются значения всех полей. +// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// то возвращается значение на текущую дату. +// КонтактнаяИнформация - Структура - +// см. ОрганизацииСервер.КонтактнаяИнформацияРуководителяОрганизации. +Процедура ПриОпределенииКонтактнойИнформацииРуководителяОрганизации(Организация, Поля, Дата, КонтактнаяИнформация) Экспорт + +КонецПроцедуры + +#КонецОбласти + +#Область СведенияОГлавномБухгалтере + +// Переопределяет структуру, содержащую сведения о регистрационной информации главного бухгалтера. +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - организация, сведения по которой необходимо получить. +// Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. +// Список допустимых имен полей см. в описании возвращаемого значения. +// Если указана пустая строка, то возвращаются значения всех полей. +// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// то возвращается значение на текущую дату. +// РегистрационныеДанные - Структура - +// см. ОрганизацииСервер.РегистрационныеДанныеГлавногоБухгалтера. +Процедура ПриОпределенииРегистрационныхДанныхГлавногоБухгалтера(Организация, Поля, Дата, РегистрационныеДанные) Экспорт + +КонецПроцедуры + +// Переопределяет структуру, содержащую сведения о контактной информации главного бухгалтера. +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - организация, сведения по которой необходимо получить. +// Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. +// Список допустимых имен полей см. в описании возвращаемого значения. +// Если указана пустая строка, то возвращаются значения всех полей. +// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// то возвращается значение на текущую дату. +// КонтактнаяИнформация - Структура - +// см. ОрганизацииСервер.КонтактнаяИнформацияГлавногоБухгалтера. +Процедура ПриОпределенииКонтактнойИнформацииГлавногоБухгалтера(Организация, Поля, Дата, КонтактнаяИнформация) Экспорт + +КонецПроцедуры + +#КонецОбласти + +#Область СведенияОбУполномоченномПредставителе + +// Переопределяет структуру, содержащую сведения о регистрационных данных уполномоченного представителя. +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - организация, сведения по которой необходимо получить. +// Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. +// Список допустимых имен полей см. в описании возвращаемого значения. +// Если указана пустая строка, то возвращаются значения всех полей. +// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// то возвращается значение на текущую дату. +// РегистрационныеДанные - Структура - +// см. ОрганизацииСервер.РегистрационныеДанныеУполномоченногоПредставителя. +Процедура ПриОпределенииРегистрационныхДанныхУполномоченногоПредставителя(Организация, Поля, Дата, РегистрационныеДанные) Экспорт + +КонецПроцедуры + +// Переопределяет структуру, содержащую сведения о контактной информации уполномоченного представителя. +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - организация, сведения по которой необходимо получить. +// Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. +// Список допустимых имен полей см. в описании возвращаемого значения. +// Если указана пустая строка, то возвращаются значения всех полей. +// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// то возвращается значение на текущую дату. +// КонтактнаяИнформация - Структура - +// см. ОрганизацииСервер.КонтактнаяИнформацияУполномоченногоПредставителя. +Процедура ПриОпределенииКонтактнойИнформацииУполномоченногоПредставителя(Организация, Поля, Дата, КонтактнаяИнформация) Экспорт + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОрганизацииПереопределяемый/ОрганизацииПереопределяемый.mdo b/SSL/src/CommonModules/ОрганизацииПереопределяемый/ОрганизацииПереопределяемый.mdo new file mode 100644 index 000000000..3d536cc9d --- /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..5d9f89889 --- /dev/null +++ b/SSL/src/CommonModules/ОрганизацииСервер/Module.bsl @@ -0,0 +1,684 @@ + +#Область ПрограммныйИнтерфейс + +#Область ОрганизацииСервер + +// Возвращает структуру, содержащую сведения об организации. +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - организация, сведения по которой необходимо получить. +// Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. +// Список допустимых имен полей см. в описании возвращаемого значения (это максимально возможный список +// полей, конечный состав определяется в ОрганизацииПереопределяемый.*). +// Если указана пустая строка, то возвращаются значения всех полей. +// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// то возвращается значение на текущую дату. +// Возвращаемое значение: +// Структура - +// см. ОрганизацииСервер.РегистрационныеДанныеОрганизации +// см. ОрганизацииСервер.ДополнительныеСведенияОрганизации +// см. ОрганизацииСервер.КонтактнаяИнформацияОрганизации +// см. ОрганизацииСервер.БанковскийСчетОрганизации +// см. ОрганизацииСервер.РегистрационныеДанныеОбособленногоПодразделения +// см. ОрганизацииСервер.КонтактнаяИнформацияОбособленногоПодразделения +// см. ОрганизацииСервер.РегистрационныеДанныеИностраннойОрганизации +// см. ОрганизацииСервер.КонтактнаяИнформацияИностраннойОрганизации +// см. ОрганизацииСервер.РегистрационныеДанныеИндивидуальногоПредпринимателя +// см. ОрганизацииСервер.РегистрационныеДанныеРуководителяОрганизации +// см. ОрганизацииСервер.КонтактнаяИнформацияРуководителяОрганизации +// см. ОрганизацииСервер.РегистрационныеДанныеГлавногоБухгалтера +// см. ОрганизацииСервер.КонтактнаяИнформацияГлавногоБухгалтера +// см. ОрганизацииСервер.РегистрационныеДанныеУполномоченногоПредставителя. +// +// Пример: +// СведенияОбОрганизации = ОрганизацииСервер.СведенияОбОрганизации(Организация); +// +Функция СведенияОбОрганизации(Знач Организация, Знач Поля = "", Знач Дата = Неопределено) Экспорт + + ОбщиеСведения = Новый Массив; + ОбщиеСведения.Добавить(РегистрационныеДанныеОрганизации(Организация, Поля, Дата)); + ОбщиеСведения.Добавить(ДополнительныеСведенияОрганизации(Организация, Поля, Дата)); + ОбщиеСведения.Добавить(КонтактнаяИнформацияОрганизации(Организация, Поля, Дата)); + ОбщиеСведения.Добавить(БанковскийСчетОрганизации(Организация, Поля, Дата)); + ОбщиеСведения.Добавить(РегистрационныеДанныеОбособленногоПодразделения(Организация, Поля, Дата)); + ОбщиеСведения.Добавить(КонтактнаяИнформацияОбособленногоПодразделения(Организация, Поля, Дата)); + ОбщиеСведения.Добавить(РегистрационныеДанныеОтделенияИностраннойОрганизации(Организация, Поля, Дата)); + ОбщиеСведения.Добавить(КонтактнаяИнформацияОтделенияИностраннойОрганизации(Организация, Поля, Дата)); + ОбщиеСведения.Добавить(РегистрационныеДанныеИндивидуальногоПредпринимателя(Организация, Поля, Дата)); + ОбщиеСведения.Добавить(КонтактнаяИнформацияИндивидуальногоПредпринимателя(Организация, Поля, Дата)); + ОбщиеСведения.Добавить(РегистрационныеДанныеРуководителяОрганизации(Организация, Поля, Дата)); + ОбщиеСведения.Добавить(КонтактнаяИнформацияРуководителяОрганизации(Организация, Поля, Дата)); + ОбщиеСведения.Добавить(РегистрационныеДанныеГлавногоБухгалтера(Организация, Поля, Дата)); + ОбщиеСведения.Добавить(КонтактнаяИнформацияГлавногоБухгалтера(Организация, Поля, Дата)); + ОбщиеСведения.Добавить(РегистрационныеДанныеУполномоченногоПредставителя(Организация, Поля, Дата)); + ОбщиеСведения.Добавить(КонтактнаяИнформацияУполномоченногоПредставителя(Организация, Поля, Дата)); + + СведенияОбОрганизации = Новый Структура(); + + Для каждого Сведения Из ОбщиеСведения Цикл + + Для каждого Элемент Из Сведения Цикл + + Если НЕ СведенияОбОрганизации.Свойство(Элемент.Ключ) Тогда + СведенияОбОрганизации.Вставить(Элемент.Ключ, Элемент.Значение); + Иначе + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Элемент с таким ключем ""%1"" уже определен.'"), Элемент.Ключ); + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + + Возврат СведенияОбОрганизации; + +КонецФункции + +// Возвращает структуру, содержащую сведения о регистрационной информации организации. +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - организация, сведения по которой необходимо получить. +// Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. +// Список допустимых имен полей см. в описании возвращаемого значения (это максимально возможный список +// полей, конечный состав определяется в ОрганизацииПереопределяемый.ПриОпределенииРегистрационныхДанныхОрганизации). +// Если указана пустая строка, то возвращаются значения всех полей. +// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// то возвращается значение на текущую дату. +// Возвращаемое значение: +// Структура - содержит имена (ключи) и значения затребованных полей. +// * ДатаРегистрации - Дата - дата регистрации юридического лица. +// * ИНН - Строка - ИНН организации. +// * ИПРегистрационныйНомерПФР - Строка - регистрационный номер ПФР. +// * ИПРегистрационныйНомерТФОМС - Строка - регистрационный номер ТФОМС. +// * КодНалоговогоОргана - Строка - код налогового органа. +// * КодОКВЭД - Строка - код ОКВЭД. +// * КодОКВЭД2 - Строка - код ОКВЭД2. +// * КодОКФС - Строка - код ОКФС. +// * КодПоОКАТО - Строка - код по ОКАТО. +// * КодПоОКТМО - Строка - код по ОКТМО. +// * КПП - Строка - КПП организации. +// * НаименованиеНалоговогоОргана - Строка - наименование налогового органа. +// * НаименованиеОКВЭД - Строка - наименование ОКВЭД. +// * НаименованиеОКВЭД2 - Строка - наименование ОКВЭД2. +// * НаименованиеПолное - Строка - полное наименование. +// * НаименованиеСокращенное - Строка - сокращенное наименование. +// * ОГРН - Строка - ОГРН. +// * ПочтовыйАдресОрганизации - Строка - почтовый адрес организации. +// * ПочтовыйАдресОрганизацииXML - Строка - почтовый адрес организации в формате xml. +// * ПризнакНалогоплательщикаКатегория - Строка - признак налогоплательщика категория. +// * ПризнакНалогоплательщикаКод - Число - признак налогоплательщика код. +// * РегистрационныйНомерПФР - Строка - регистрационный номер ПФР. +// * РегистрационныйНомерТФОМС - Строка - регистрационный номер ТФОМС. +// * СвидетельствоДатаВыдачи - Дата - дата выдачи свидетельства. +// * СвидетельствоКодОргана - Строка - код органа выдавшего свидетельство. +// * СвидетельствоНаименованиеОргана - Строка - наименование органа выдавшего свидетельство. +// * СвидетельствоСерияНомер - Строка - серия и номер свидетельства. +// * СтавкаНалогаНаПрибыльМестный - Число - местная ставка налога на прибыль. +// * СтавкаНалогаНаПрибыльСубъектРФ - Число - ставка налога на прибыль субъекта РФ. +// * СтавкаНалогаНаПрибыльФБ - Число - ставка налога на прибыль фед бюдж. +// * СтавкаНалогаУСН - Число - ставка налога УСН. +// * ЭтоФизическоеЛицо - Булево - признак что это физическое лицо. +// * ЭтоЮридическоеЛицо - Булево - признак что это юридическое лицо. +// +Функция РегистрационныеДанныеОрганизации(Знач Организация, Знач Поля = "", Знач Дата = Неопределено) Экспорт + + РегистрационныеДанные = Новый Структура(); + ОрганизацииПереопределяемый.ПриОпределенииРегистрационныхДанныхОрганизации(Организация, Поля, Дата, РегистрационныеДанные); + + Возврат РегистрационныеДанные; + +КонецФункции + +// Возвращает структуру, содержащую сведения о дополнительной информации организации. +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - организация, сведения по которой необходимо получить. +// Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. +// Список допустимых имен полей см. в описании возвращаемого значения (это максимально возможный список +// полей, конечный состав определяется в ОрганизацииПереопределяемый.ПриОпределенииДополнительныхСведенийОрганизации). +// Если указана пустая строка, то возвращаются значения всех полей. +// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// то возвращается значение на текущую дату. +// Возвращаемое значение: +// Структура - содержит имена (ключи) и значения затребованных полей. +// * АдресЭлектроннойПочтыОрганизации - Строка - email организации. +// * ВидПлательщикаСтраховыхВзносов - Строка - вид плательщика страховых взносов. +// * ГоловнаяОрганизацияКПП - Строка - КПП головная организация. +// * ГоловнаяОрганизацияНаименование - Строка - наименование головной организации. +// * ДатаПереходаНаУСН - Дата - дата перехода на УСН. +// * ДолжностьОтправителя - Строка - должность отправителя. +// * КодОКОНХ - Строка - код ОКОНХ. +// * КодОрганаПФР - Строка - код органа ПФР. +// * КодОрганаФСГС - Строка - код органа ФСГС. +// * КодПодчиненностиФСС - Строка - код подчиненности ФСС. +// * КодПодчиненностиФССДобрСтрах - Строка - код подчиненности ФСС добр. страх. +// * КодПоОКТМО - Строка - код по ОКТМО. +// * НаименованиеТерриториальногоОрганаФСС - Строка - наименование территориального органа ФСС. +// * ОбъектНалогообложенияУСН - Число - объект налогообложения УСН. +// * РегистрационныйНомерТФОМС - Строка - регистрационный номер ТФОМС. +// * РегистрационныйНомерФСС - Строка - регистрационный номер ФСС. +// * СведенияОбИсполнителеДолжность - Строка - должность исполнителя. +// * СведенияОбИсполнителеТелефон - Строка - телефон исполнителя. +// * СведенияОбИсполнителеФИО - Строка - ФИО. +// * БухгалтерИмя - Строка - имя бухгалтера. +// * БухгалтерОтчество - Строка - отчество бухгалтера. +// * БухгалтерФамилия - Строка - фамилия бухгалтера. +// * РуководительДолжность - Строка - должность руководителя. +// * РуководительИмя - Строка - имя руководителя. +// * РуководительОтчество - Строка - отчество руководителя. +// * РуководительФамилия - Строка - фамилия руководителя. +// * СистемыНалогообложения - Строка - система налогообложения. +// * СтраховойТариф - Число - страховой тариф. +// * ТелефонОрганизации - Строка - телефон организации. +// * ФаксОрганизации - Строка - факс организации. +// * ШифрСтрахователяФСС - Строка - шифр страхователя ФСС. +// +Функция ДополнительныеСведенияОрганизации(Знач Организация, Знач Поля = "", Знач Дата = Неопределено) Экспорт + + ДополнительныеСведения = Новый Структура(); + ОрганизацииПереопределяемый.ПриОпределенииДополнительныхСведенийОрганизации(Организация, Поля, Дата, ДополнительныеСведения); + + Возврат ДополнительныеСведения; + +КонецФункции + +// Возвращает структуру, содержащую сведения о контактной информации организации. +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - организация, сведения по которой необходимо получить. +// Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. +// Список допустимых имен полей см. в описании возвращаемого значения (это максимально возможный список +// полей, конечный состав определяется в ОрганизацииПереопределяемый.ПриОпределенииКонтактнойИнформацииОрганизации). +// Если указана пустая строка, то возвращаются значения всех полей. +// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// то возвращается значение на текущую дату. +// Возвращаемое значение: +// Структура - содержит имена (ключи) и значения затребованных полей. +// * АдресОрганизации - Строка - адрес организации. +// * АдресОрганизацииXML - Строка - адрес организации xml. +// * АдресОрганизацииГород - Строка - город. +// * АдресОрганизацииДом - Строка - дом. +// * АдресОрганизацииИндекс - Строка - индекс. +// * АдресОрганизацииКвартира - Строка - квартира. +// * АдресОрганизацииКодРегиона - Строка - код региона. +// * АдресОрганизацииКорпус - Строка - корпус. +// * АдресОрганизацииНаселенныйПункт - Строка - населенный пункт. +// * АдресОрганизацииРайон - Строка - район. +// * АдресОрганизацииРегион - Строка - регион. +// * АдресОрганизацииУлица - Строка - улица. +// +Функция КонтактнаяИнформацияОрганизации(Знач Организация, Знач Поля = "", Знач Дата = Неопределено) Экспорт + + КонтактнаяИнформация = Новый Структура(); + ОрганизацииПереопределяемый.ПриОпределенииКонтактнойИнформацииОрганизации(Организация, Поля, Дата, КонтактнаяИнформация); + + Возврат КонтактнаяИнформация; + +КонецФункции + +// Возвращает структуру, содержащую сведения о банковском счете организации. +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - организация, сведения по которой необходимо получить. +// Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. +// Список допустимых имен полей см. в описании возвращаемого значения (это максимально возможный список +// полей, конечный состав определяется в ОрганизацииПереопределяемый.ПриОпределенииБанковскогоСчетаОрганизации). +// Если указана пустая строка, то возвращаются значения всех полей. +// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// то возвращается значение на текущую дату. +// Возвращаемое значение: +// Структура - содержит имена (ключи) и значения затребованных полей. +// * БанковскийСчетБанк - Строка - банк. +// * БанковскийСчетБИК - Строка - БИК. +// * БанковскийСчетКоррСчет - Строка - корр. счет. +// * БанковскийСчетНомерСчета - Строка - номер счета. +// +Функция БанковскийСчетОрганизации(Знач Организация, Знач Поля = "", Знач Дата = Неопределено) Экспорт + + БанковскийСчет = Новый Структура(); + ОрганизацииПереопределяемый.ПриОпределенииБанковскогоСчетаОрганизации(Организация, Поля, Дата, БанковскийСчет); + + Возврат БанковскийСчет; + +КонецФункции + +#КонецОбласти + +#Область СведенияОбОбособленномПодразделении + +// Возвращает структуру, содержащую сведения о регистрационной информации обособленного подразделения. +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - организация, сведения по которой необходимо получить. +// Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. +// Список допустимых имен полей см. в описании возвращаемого значения (это максимально возможный список +// полей, конечный состав определяется в ОрганизацииПереопределяемый.ПриОпределенииРегистрационныхДанныхОбособленногоПодразделения). +// Если указана пустая строка, то возвращаются значения всех полей. +// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// то возвращается значение на текущую дату. +// Возвращаемое значение: +// Структура - содержит имена (ключи) и значения затребованных полей. +// * КППОбособленногоПодразделения - Строка - КПП обособленного подразделения. +// * НаименованиеОбособленногоПодразделенияПолное - Строка - наименование обособленного подразделения. +// +Функция РегистрационныеДанныеОбособленногоПодразделения(Знач Организация, Знач Поля = "", Знач Дата = Неопределено) Экспорт + + РегистрационныеДанные = Новый Структура(); + ОрганизацииПереопределяемый.ПриОпределенииРегистрационныхДанныхОбособленногоПодразделения(Организация, Поля, Дата, РегистрационныеДанные); + + Возврат РегистрационныеДанные; + +КонецФункции + + +// Возвращает структуру, содержащую сведения о контактной информации обособленного подразделения. +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - организация, сведения по которой необходимо получить. +// Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. +// Список допустимых имен полей см. в описании возвращаемого значения (это максимально возможный список +// полей, конечный состав определяется в ОрганизацииПереопределяемый.ПриОпределенииКонтактнойИнформацииОбособленногоПодразделения). +// Если указана пустая строка, то возвращаются значения всех полей. +// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// то возвращается значение на текущую дату. +// Возвращаемое значение: +// Структура - содержит имена (ключи) и значения затребованных полей. +// * АдресОбособленногоПодразделения - Строка - адрес обособленного подразделения. +// * АдресОбособленногоПодразделенияXML - Строка - адрес обособленного подразделения в xml. +// * АдресОбособленногоПодразделенияГород - Строка - город. +// * АдресОбособленногоПодразделенияДом - Строка - дом. +// * АдресОбособленногоПодразделенияИндекс - Строка - индекс. +// * АдресОбособленногоПодразделенияКвартира - Строка - квартира. +// * АдресОбособленногоПодразделенияКодРегиона - Строка - регион. +// * АдресОбособленногоПодразделенияКорпус - Строка - корпус. +// * АдресОбособленногоПодразделенияНаселенныйПункт - Строка - населенный пункт. +// * АдресОбособленногоПодразделенияРайон - Строка - район. +// * АдресОбособленногоПодразделенияРегион - Строка - регион. +// * АдресОбособленногоПодразделенияУлица - Строка - улица. +// +Функция КонтактнаяИнформацияОбособленногоПодразделения(Знач Организация, Знач Поля = "", Знач Дата = Неопределено) Экспорт + + КонтактнаяИнформация = Новый Структура(); + ОрганизацииПереопределяемый.ПриОпределенииКонтактнойИнформацииОбособленногоПодразделения(Организация, Поля, Дата, КонтактнаяИнформация); + + Возврат КонтактнаяИнформация; + +КонецФункции + +#КонецОбласти + +#Область СведенияОбИностраннойОрганизации + +// Возвращает структуру, содержащую сведения о регистрационной информации иностранной организации. +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - организация, сведения по которой необходимо получить. +// Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. +// Список допустимых имен полей см. в описании возвращаемого значения (это максимально возможный список +// полей, конечный состав определяется в ОрганизацииПереопределяемый.ПриОпределенииРегистрационныхДанныхОбособленногоПодразделения). +// Если указана пустая строка, то возвращаются значения всех полей. +// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// то возвращается значение на текущую дату. +// Возвращаемое значение: +// Структура - содержит имена (ключи) и значения затребованных полей. +// * ОтделениеИностраннойОрганизацииИНН - Строка - ИНН отделения иностранной организации. +// * ОтделениеИностраннойОрганизацииКПП - Строка - КПП отделения иностранной организации. +// * ОтделениеИностраннойОрганизацииНаименование - Строка - наименование. +// +Функция РегистрационныеДанныеОтделенияИностраннойОрганизации(Знач Организация, Знач Поля = "", Знач Дата = Неопределено) Экспорт + + РегистрационныеДанные = Новый Структура(); + ОрганизацииПереопределяемый.ПриОпределенииРегистрационныхДанныхОбособленногоПодразделения(Организация, Поля, Дата, РегистрационныеДанные); + + Возврат РегистрационныеДанные; + +КонецФункции + + +// Возвращает структуру, содержащую сведения о контактной информации иностранной организации. +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - организация, сведения по которой необходимо получить. +// Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. +// Список допустимых имен полей см. в описании возвращаемого значения (это максимально возможный список +// полей, конечный состав определяется в ОрганизацииПереопределяемый.ПриОпределенииКонтактнойИнформацииИностраннойОрганизации). +// Если указана пустая строка, то возвращаются значения всех полей. +// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// то возвращается значение на текущую дату. +// Возвращаемое значение: +// Структура - содержит имена (ключи) и значения затребованных полей. +// * ОтделениеИностраннойОрганизацииАдресРФ - Строка - адрес иностранной организации. +// * ОтделениеИностраннойОрганизацииАдресРФXML - Строка - адрес иностранной организации. +// * ОтделениеИностраннойОрганизацииАдресРФГород - Строка - город. +// * ОтделениеИностраннойОрганизацииАдресРФДом - Строка - дом. +// * ОтделениеИностраннойОрганизацииАдресРФИндекс - Строка - индекс. +// * ОтделениеИностраннойОрганизацииАдресРФКвартира - Строка - квартира. +// * ОтделениеИностраннойОрганизацииАдресРФКодРегиона - Строка - код региона. +// * ОтделениеИностраннойОрганизацииАдресРФКорпус - Строка - корпус. +// * ОтделениеИностраннойОрганизацииАдресРФНаселенныйПункт - Строка - населенный пункт. +// * ОтделениеИностраннойОрганизацииАдресРФРайон - Строка - район. +// * ОтделениеИностраннойОрганизацииАдресРФРегион - Строка - регион. +// * ОтделениеИностраннойОрганизацииАдресРФУлица - Строка - улица. +// +Функция КонтактнаяИнформацияОтделенияИностраннойОрганизации(Знач Организация, Знач Поля = "", Знач Дата = Неопределено) Экспорт + + КонтактнаяИнформация = Новый Структура(); + ОрганизацииПереопределяемый.ПриОпределенииКонтактнойИнформацииИностраннойОрганизации(Организация, Поля, Дата, КонтактнаяИнформация); + + Возврат КонтактнаяИнформация; + +КонецФункции + +#КонецОбласти + +#Область СведенияОбИндивидуальномПредпринимателе + +// Возвращает структуру, содержащую сведения о регистрационной информации ИП. +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - организация, сведения по которой необходимо получить. +// Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. +// Список допустимых имен полей см. в описании возвращаемого значения (это максимально возможный список +// полей, конечный состав определяется в ОрганизацииПереопределяемый.ПриОпределенииРегистрационныхДанныхИндивидуальногоПредпринимателя). +// Если указана пустая строка, то возвращаются значения всех полей. +// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// то возвращается значение на текущую дату. +// Возвращаемое значение: +// Структура - содержит имена (ключи) и значения затребованных полей. +// * ИПВидДокументаУдостоверенияЛичности - Строка - вид документа ИП. +// * ИПГражданствоКод - Строка - гражданство ИП. +// * ИПГражданствоНаименование - Строка - гражданство наименование. +// * ИПДатаВыдачиУдостоверенияЛичности - Дата - дата выдачи удостоверения личности. +// * ИПДатаРождения - Дата - дата рождения. +// * ИндивидуальныйПредпринимательИНН - Строка - ИНН индивидуального предпринимателя. +// * ИПНаименование - Строка - наименование. +// * ИПКемВыданУдостоверенияЛичности - Строка - кем выдано удостоверение личности. +// * ИПКодПодразделенияУдостоверенияЛичности - Строка - код подразделения удостоверение личности. +// * ИПКодУдостоверенияЛичности - Строка - код удостоверения личности. +// * ИПМестоРождения - Строка - место рождения. +// * ИПНомерУдостоверенияЛичности - Строка - номер удостоверения личности. +// * ФизическоеЛицоПол - Число - пол. +// * ИПСерияУдостоверенияЛичности - Строка - серия удостоверения личности. +// * ИндивидуальныйПредпринимательСНИЛС - Строка - СНИЛС. +// * ФизическоеЛицоНаименование - Строка - наименование физлица. +// * ЭтоИП - Булево - признак, что это индивидуальный предприниматель. +// +Функция РегистрационныеДанныеИндивидуальногоПредпринимателя(Знач Организация, Знач Поля = "", Знач Дата = Неопределено) Экспорт + + РегистрационныеДанные = Новый Структура(); + ОрганизацииПереопределяемый.ПриОпределенииРегистрационныхДанныхИндивидуальногоПредпринимателя(Организация, Поля, Дата, РегистрационныеДанные); + + Возврат РегистрационныеДанные; + +КонецФункции + + +// Возвращает структуру, содержащую сведения о контактной информации ИП. +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - организация, сведения по которой необходимо получить. +// Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. +// Список допустимых имен полей см. в описании возвращаемого значения (это максимально возможный список +// полей, конечный состав определяется в ОрганизацииПереопределяемый.ПриОпределенииКонтактнойИнформацииИндивидуальногоПредпринимателя). +// Если указана пустая строка, то возвращаются значения всех полей. +// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// то возвращается значение на текущую дату. +// Возвращаемое значение: +// Структура - содержит имена (ключи) и значения затребованных полей. +// * АдресМестаЖительства - Строка - адрес места жительства. +// * АдресМестаЖительстваXML - Строка - адрес места жительства в формате xml. +// * АдресРегистрации - Строка - адрес регистрации. +// * АдресРегистрацииXML - Строка - адрес регистрации xml. +// * ГородМестаЖительства - Строка - город. +// * ДомашнийТелефонФизЛица - Строка - телефон. +// * ДомМестаЖительства - Строка - дом. +// * ИндексМестаЖительства - Строка - индекс. +// * КвартираМестаЖительства - Строка - квартира. +// * КодРегионаМестаЖительства - Строка - код региона. +// * КорпусМестаЖительства - Строка - корпус. +// * НаселенныйПунктМестаЖительства - Строка - населенный пункт. +// * РайонМестаЖительства - Строка - район места жительства. +// * РегионМестаЖительства - Строка - регион. +// * ТелефонОрганизации - Строка - телефон организации. +// * УлицаМестаЖительства - Строка - улица. +// +Функция КонтактнаяИнформацияИндивидуальногоПредпринимателя(Знач Организация, Знач Поля = "", Знач Дата = Неопределено) Экспорт + + КонтактнаяИнформация = Новый Структура(); + ОрганизацииПереопределяемый.ПриОпределенииКонтактнойИнформацииИндивидуальногоПредпринимателя(Организация, Поля, Дата, КонтактнаяИнформация); + + Возврат КонтактнаяИнформация; + +КонецФункции + +#КонецОбласти + +#Область РуководительОрганизации + +// Возвращает структуру, содержащую сведения о регистрационной информации руководителя организации. +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - организация, сведения по которой необходимо получить. +// Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. +// Список допустимых имен полей см. в описании возвращаемого значения (это максимально возможный список +// полей, конечный состав определяется в ОрганизацииПереопределяемый.ПриОпределенииРегистрационныхДанныхРуководителяОрганизации). +// Если указана пустая строка, то возвращаются значения всех полей. +// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// то возвращается значение на текущую дату. +// Возвращаемое значение: +// Структура - содержит имена (ключи) и значения затребованных полей. +// * РуководительГражданствоКод - Строка - код гражданства. +// * РуководительГражданствоНаименование - Строка - наименование гражданства. +// * РуководительДатаРождения - Дата - дата рождения. +// * РуководительИНН - Строка - ИНН. +// * РуководительМестоРождения - Строка - место рождения. +// * РуководительПол - Строка - пол. +// * РуководительТелефон - Строка - телефон. +// * РуководительУдостоверениеЛичностиВидДокумента - Строка - вид документа. +// * РуководительУдостоверениеЛичностиДатаВыдачи - Дата - дата выдачи. +// * РуководительУдостоверениеЛичностиКемВыдан - Строка - кем выдан. +// * РуководительУдостоверениеЛичностиКод - Строка - код. +// * РуководительУдостоверениеЛичностиКодПодразделения - Строка - код подразделения. +// * РуководительУдостоверениеЛичностиНомер - Строка - номер. +// * РуководительУдостоверениеЛичностиСерия - Строка - серия. +// * РуководительФИО - Строка - ФИО. +// +Функция РегистрационныеДанныеРуководителяОрганизации(Знач Организация, Знач Поля = "", Знач Дата = Неопределено) Экспорт + + РегистрационныеДанныеРуководителя = Новый Структура(); + ОрганизацииПереопределяемый.ПриОпределенииРегистрационныхДанныхРуководителяОрганизации(Организация, Поля, Дата, РегистрационныеДанныеРуководителя); + + Возврат РегистрационныеДанныеРуководителя; + +КонецФункции + + +// Возвращает структуру, содержащую сведения о контактной информации руководителя организации. +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - организация, сведения по которой необходимо получить. +// Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. +// Список допустимых имен полей см. в описании возвращаемого значения (это максимально возможный список +// полей, конечный состав определяется в ОрганизацииПереопределяемый.ПриОпределенииКонтактнойИнформацииРуководителяОрганизации). +// Если указана пустая строка, то возвращаются значения всех полей. +// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// то возвращается значение на текущую дату. +// Возвращаемое значение: +// Структура - содержит имена (ключи) и значения затребованных полей. +// * РуководительАдресМестаЖительства - Строка - адрес. +// * РуководительАдресМестаЖительстваXML - Строка - адрес xml. +// * РуководительАдресМестаЖительстваГород - Строка - город. +// * РуководительАдресМестаЖительстваДом - Строка - дом. +// * РуководительАдресМестаЖительстваИндекс - Строка - индекс. +// * РуководительАдресМестаЖительстваКвартира - Строка - квартира. +// * РуководительАдресМестаЖительстваКодРегиона - Строка - код региона. +// * РуководительАдресМестаЖительстваКорпус - Строка - корпус. +// * РуководительАдресМестаЖительстваНаселенныйПункт - Строка - населенный пункт. +// * РуководительАдресМестаЖительстваРайон - Строка - район. +// * РуководительАдресМестаЖительстваРегион - Строка - регион. +// * РуководительАдресМестаЖительстваУлица - Строка - улица. +// +Функция КонтактнаяИнформацияРуководителяОрганизации(Знач Организация, Знач Поля = "", Знач Дата = Неопределено) Экспорт + + КонтактнаяИнформацияРуководителя = Новый Структура(); + ОрганизацииПереопределяемый.ПриОпределенииКонтактнойИнформацииРуководителяОрганизации(Организация, Поля, Дата, КонтактнаяИнформацияРуководителя); + + Возврат КонтактнаяИнформацияРуководителя; + +КонецФункции + +#КонецОбласти + +#Область СведенияОГлавномБухгалтере + +// Возвращает структуру, содержащую сведения о регистрационной информации главного бухгалтера организации. +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - организация, сведения по которой необходимо получить. +// Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. +// Список допустимых имен полей см. в описании возвращаемого значения (это максимально возможный список +// полей, конечный состав определяется в ОрганизацииПереопределяемый.ПриОпределенииРегистрационныхДанныхГлавногоБухгалтера). +// Если указана пустая строка, то возвращаются значения всех полей. +// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// то возвращается значение на текущую дату. +// Возвращаемое значение: +// Структура - содержит имена (ключи) и значения затребованных полей. +// * БухгалтерГражданствоКод - Строка - код гражданства бухгалтера. +// * БухгалтерГражданствоНаименование - Строка - наименование гражданства бухгалтера. +// * БухгалтерГражданствоУполномоченногоПредставителя - Строка - гражданство уполномоченного представителя. +// * БухгалтерДатаРождения - Строка - дата рождения. +// * БухгалтерИНН - Строка - ИНН. +// * БухгалтерМестоРождения - Строка - место рождения. +// * БухгалтерПол - Строка - пол. +// * БухгалтерПолУполномоченногоПредставителя - Строка - пол уполномоченного представителя. +// * БухгалтерТелефон - Строка - телефон. +// * БухгалтерУдостоверениеЛичностиВидДокумента - Строка - вид документа. +// * БухгалтерУдостоверениеЛичностиДатаВыдачи - Строка - дата выдачи. +// * БухгалтерУдостоверениеЛичностиКемВыдан - Строка - кем выдан. +// * БухгалтерУдостоверениеЛичностиКод - Строка - код. +// * БухгалтерУдостоверениеЛичностиКодПодразделения - Строка - код подразделения. +// * БухгалтерУдостоверениеЛичностиНомер - Строка - номер. +// * БухгалтерУдостоверениеЛичностиСерия - Строка - серия. +// * БухгалтерУполномоченномПредставителеГражданствоНаименование - Строка - наименование гражданства +// уполномоченного представителя. +// * БухгалтерФИО - Строка - ФИО. +// +Функция РегистрационныеДанныеГлавногоБухгалтера(Знач Организация, Знач Поля = "", Знач Дата = Неопределено) Экспорт + + РегистрационныеДанные = Новый Структура(); + ОрганизацииПереопределяемый.ПриОпределенииРегистрационныхДанныхГлавногоБухгалтера(Организация, Поля, Дата, РегистрационныеДанные); + + Возврат РегистрационныеДанные; + +КонецФункции + + +// Возвращает структуру, содержащую сведения о контактной информации главного бухгалтера организации. +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - организация, сведения по которой необходимо получить. +// Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. +// Список допустимых имен полей см. в описании возвращаемого значения (это максимально возможный список +// полей, конечный состав определяется в ОрганизацииПереопределяемый.ПриОпределенииКонтактнойИнформацииГлавногоБухгалтера). +// Если указана пустая строка, то возвращаются значения всех полей. +// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// то возвращается значение на текущую дату. +// Возвращаемое значение: +// Структура - содержит имена (ключи) и значения затребованных полей. +// * БухгалтерАдресМестаЖительства - Строка - адрес. +// * БухгалтерАдресМестаЖительстваXML - Строка - адрес xml. +// * БухгалтерАдресМестаЖительстваГород - Строка - город. +// * БухгалтерАдресМестаЖительстваДом - Строка - дом. +// * БухгалтерАдресМестаЖительстваИндекс - Строка - индекс. +// * БухгалтерАдресМестаЖительстваКвартира - Строка - квартира. +// * БухгалтерАдресМестаЖительстваКодРегиона - Строка - код региона. +// * БухгалтерАдресМестаЖительстваКорпус - Строка - корпус. +// * БухгалтерАдресМестаЖительстваНаселенныйПункт - Строка - населенный пункт. +// * БухгалтерАдресМестаЖительстваРайон - Строка - район. +// * БухгалтерАдресМестаЖительстваРегион - Строка - регион. +// * БухгалтерАдресМестаЖительстваУлица - Строка - улица. +// +Функция КонтактнаяИнформацияГлавногоБухгалтера(Знач Организация, Знач Поля = "", Знач Дата = Неопределено) Экспорт + + КонтактнаяИнформация = Новый Структура(); + ОрганизацииПереопределяемый.ПриОпределенииКонтактнойИнформацииГлавногоБухгалтера(Организация, Поля, Дата, КонтактнаяИнформация); + + Возврат КонтактнаяИнформация; + +КонецФункции + +#КонецОбласти + +#Область СведенияОбУполномоченномПредставителе + +// Возвращает структуру, содержащую сведения о регистрационной информации уполномоченного представителя организации. +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - организация, сведения по которой необходимо получить. +// Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. +// Список допустимых имен полей см. в описании возвращаемого значения (это максимально возможный список +// полей, конечный состав определяется в ОрганизацииПереопределяемый.ПриОпределенииРегистрационныхДанныхУполномоченногоПредставителя). +// Если указана пустая строка, то возвращаются значения всех полей. +// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// то возвращается значение на текущую дату. +// Возвращаемое значение: +// Структура - содержит имена (ключи) и значения затребованных полей. +// * УполномоченныйПредставительДатаРождения - Строка - дата рождения. +// * УполномоченныйПредставительИНН - Строка - ИНН. +// * УполномоченныйПредставительТелефон - Строка - телефон. +// * УполномоченныйПредставительУдостоверениеЛичностиВидДокумента - Строка - вид документа. +// * УполномоченныйПредставительУдостоверениеЛичностиДата - Дата - дата. +// * УполномоченныйПредставительУдостоверениеЛичностиКемВыдан - Строка - кем выдан. +// * УполномоченныйПредставительУдостоверениеЛичностиКод - Строка - код. +// * УполномоченныйПредставительУдостоверениеЛичностиНомер - Строка - номер. +// * УполномоченныйПредставительУдостоверениеЛичностиСерия - Строка - серия. +// * УполномоченныйПредставительФИО - Строка - ФИО. +// +Функция РегистрационныеДанныеУполномоченногоПредставителя(Знач Организация, Знач Поля = "", Знач Дата = Неопределено) Экспорт + + РегистрационныеДанные = Новый Структура(); + ОрганизацииПереопределяемый.ПриОпределенииРегистрационныхДанныхУполномоченногоПредставителя(Организация, Поля, Дата, РегистрационныеДанные); + + Возврат РегистрационныеДанные; + +КонецФункции + + +// Возвращает структуру, содержащую сведения о контактной информации уполномоченного представителя организации. +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - организация, сведения по которой необходимо получить. +// Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. +// Список допустимых имен полей см. в описании возвращаемого значения (это максимально возможный список +// полей, конечный состав определяется в ОрганизацииПереопределяемый.ПриОпределенииКонтактнойИнформацииУполномоченногоПредставителя). +// Если указана пустая строка, то возвращаются значения всех полей. +// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// то возвращается значение на текущую дату. +// Возвращаемое значение: +// Структура - содержит имена (ключи) и значения затребованных полей. +// * УполномоченныйПредставительАдресМестаЖительстваНаселенныйПункт - Строка - населенный пункт. +// * УполномоченныйПредставительАдресМестаЖительства - Строка - адрес. +// * УполномоченныйПредставительАдресМестаЖительстваXML - Строка - адрес xml. +// * УполномоченныйПредставительАдресМестаЖительстваГород - Строка - город. +// * УполномоченныйПредставительАдресМестаЖительстваДом - Строка - дом. +// * УполномоченныйПредставительАдресМестаЖительстваИндекс - Строка - индекс. +// * УполномоченныйПредставительАдресМестаЖительстваКвартира - Строка - квартира. +// * УполномоченныйПредставительАдресМестаЖительстваКод - Строка - код. +// * УполномоченныйПредставительАдресМестаЖительстваКорпус - Строка - корпус. +// * УполномоченныйПредставительАдресМестаЖительстваРайон - Строка - район. +// * УполномоченныйПредставительАдресМестаЖительстваРегион - Строка - регион. +// * УполномоченныйПредставительАдресМестаЖительстваУлица - Строка - улица. +// * УполномоченныйПредставительМестоРождения - Строка - место рождения. +// +Функция КонтактнаяИнформацияУполномоченногоПредставителя(Знач Организация, Знач Поля = "", Знач Дата = Неопределено) Экспорт + + КонтактнаяИнформация = Новый Структура(); + ОрганизацииПереопределяемый.ПриОпределенииКонтактнойИнформацииУполномоченногоПредставителя(Организация, Поля, Дата, КонтактнаяИнформация); + + Возврат КонтактнаяИнформация; + +КонецФункции + +#КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОрганизацииСервер/ОрганизацииСервер.mdo b/SSL/src/CommonModules/ОрганизацииСервер/ОрганизацииСервер.mdo new file mode 100644 index 000000000..e8c80ef67 --- /dev/null +++ b/SSL/src/CommonModules/ОрганизацииСервер/ОрганизацииСервер.mdo @@ -0,0 +1,11 @@ + + + ОрганизацииСервер + + ru + Организации сервер + + true + true + true + diff --git a/SSL/src/CommonModules/ОтправкаSMSКлиент/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSКлиент/Module.bsl index 4874eb9d3..6ed23b121 100644 --- a/SSL/src/CommonModules/ОтправкаSMSКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSКлиент/Module.bsl @@ -71,42 +71,24 @@ // Продолжение процедуры ОтправитьSMS. Процедура СоздатьНовоеSMSПроверкаНастроекВыполнена(ОтправкаSMSНастроена, ПараметрыОтправки) Экспорт - Если ОтправкаSMSНастроена Тогда - ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента(); Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") И ПараметрыРаботыКлиента.ИспользоватьПрочиеВзаимодействия Тогда - - Адресаты = Новый Массив; - ИсточникКонтактнойИнформации = ?(ПараметрыОтправки.ДополнительныеПараметры.Свойство("ИсточникКонтактнойИнформации"), ПараметрыОтправки.ДополнительныеПараметры.ИсточникКонтактнойИнформации, ""); - - Для каждого ЭлементМассива Из ПараметрыОтправки.НомераПолучателей Цикл - - Если ТипЗнч(ЭлементМассива) = Тип("Строка") Тогда - НомерТелефона = ЭлементМассива; - Представление = ЭлементМассива; - ИсточникКонтактнойИнформации = ИсточникКонтактнойИнформации; - Иначе - НомерТелефона = ЭлементМассива.НомерТелефона; - Представление = ЭлементМассива.Представление; - ИсточникКонтактнойИнформации = ЭлементМассива.ИсточникКонтактнойИнформации; - КонецЕсли; - - Адресаты.Добавить(Новый Структура("Телефон, Представление, ИсточникКонтактнойИнформации", - НомерТелефона, Представление, ИсточникКонтактнойИнформации)); - - КонецЦикла; - - МодульВзаимодействияКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ВзаимодействияКлиент"); - Предмет = ?(ПараметрыОтправки.ДополнительныеПараметры.Свойство("Предмет"), ПараметрыОтправки.ДополнительныеПараметры.Предмет, Неопределено); - МодульВзаимодействияКлиент.ОткрытьФормуОтправкиSMS(Адресаты, ПараметрыОтправки.Текст, Предмет, ПараметрыОтправки.ДополнительныеПараметры.ПеревестиВТранслит); + Адресаты = Новый Массив; + Для каждого ЭлементМассива Из ПараметрыОтправки.НомераПолучателей Цикл + Телефон = Новый Структура("Телефон, Представление, ИсточникКонтактнойИнформации", ЭлементМассива, ЭлементМассива, ПараметрыОтправки.ДополнительныеПараметры.ИсточникКонтактнойИнформации); + Адресаты.Добавить(Телефон); + КонецЦикла; + МодульВзаимодействияКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ВзаимодействияКлиент"); + Предмет = ?(ПараметрыОтправки.ДополнительныеПараметры.Свойство("Предмет"), ПараметрыОтправки.ДополнительныеПараметры.Предмет, Неопределено); + МодульВзаимодействияКлиент.ОткрытьФормуОтправкиSMS(Адресаты, ПараметрыОтправки.Текст, Предмет, ПараметрыОтправки.ДополнительныеПараметры.ПеревестиВТранслит); Иначе ОткрытьФорму("ОбщаяФорма.ОтправкаSMS", ПараметрыОтправки); КонецЕсли; - КонецЕсли; + КонецПроцедуры #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезGSMINFORM/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезGSMINFORM/Module.bsl index 2ac3f8117..25e2d69c1 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезGSMINFORM/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезGSMINFORM/Module.bsl @@ -195,7 +195,9 @@ HTTPОтвет = Неопределено; Попытка - Соединение = Новый HTTPСоединение("gsm-inform.ru", , , , ПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси("http"), 60); + Соединение = Новый HTTPСоединение("gsm-inform.ru",,,, + ПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси("http"), + 60); HTTPОтвет = Соединение.ОтправитьДляОбработки(HTTPЗапрос); Исключение ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезSMS4B/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезSMS4B/Module.bsl index 6aac84476..4fb4d70fb 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезSMS4B/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезSMS4B/Module.bsl @@ -167,8 +167,10 @@ HTTPОтвет = Неопределено; Попытка - Соединение = Новый HTTPСоединение("sms4b.ru", , , , ПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси("https"), - 60, ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение()); + Соединение = Новый HTTPСоединение("sms4b.ru",,,, + ПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси("https"), + 60, + ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение()); HTTPОтвет = Соединение.ОтправитьДляОбработки(HTTPЗапрос); Исключение diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезБилайн/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезБилайн/Module.bsl index a3df7134b..492e47447 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезБилайн/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезБилайн/Module.bsl @@ -148,7 +148,9 @@ HTTPОтвет = Неопределено; Попытка - Соединение = Новый HTTPСоединение("beeline.amega-inform.ru", , , , ПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси("http"), 60); + Соединение = Новый HTTPСоединение("beeline.amega-inform.ru",,,, + ПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси("http"), + 60); HTTPОтвет = Соединение.ОтправитьДляОбработки(HTTPЗапрос); Исключение ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезСМСУслуги/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезСМСУслуги/Module.bsl index 50f444248..a1752e1da 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезСМСУслуги/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезСМСУслуги/Module.bsl @@ -159,7 +159,9 @@ HTTPОтвет = Неопределено; Попытка - Соединение = Новый HTTPСоединение("lcab.sms-uslugi.ru", , , , ПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси("http"), 60); + Соединение = Новый HTTPСоединение("lcab.sms-uslugi.ru",,,, + ПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси("http"), + 60); HTTPОтвет = Соединение.ОтправитьДляОбработки(HTTPЗапрос); Исключение ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), diff --git a/SSL/src/CommonModules/ОтчетОДвиженияхДокументаПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОтчетОДвиженияхДокументаПереопределяемый/Module.bsl new file mode 100644 index 000000000..d370ae48e --- /dev/null +++ b/SSL/src/CommonModules/ОтчетОДвиженияхДокументаПереопределяемый/Module.bsl @@ -0,0 +1,52 @@ + +#Область ПрограммныйИнтерфейс + +// Позволяет дополнить базовую коллекцию дополнительными регистрами. +// +// Параметры: +// Документ - ДокументСсылка - документ коллекцию движений которого необходимо дополнить. +// СоответствиеРегистров - Соответствие - соответствие с данными: +// * Ключ - ОбъектМетаданных - регистр как объект метаданных. +// * Значение - Строка - имя поля регистратора. +// +Процедура ПриОпределенииРегистровСДвижениями(Документ, СоответствиеРегистров) Экспорт + + + +КонецПроцедуры + +// Позволяет рассчитать количество записей для дополнительных наборов, добавленных процедурой +// ПриОпределенииРегистровСДвижениями. +// +// Параметры: +// Документ - ДокументСсылка - документ коллекцию движений которого необходимо дополнить. +// РассчитанноеКоличество - Соответствие - соответствие с данными: +// * Ключ - Строка - полное имя регистра (вместо точек используется символ подчеркивания). +// * Значение - Число - рассчитанное количество записей. +// +Процедура ПриРасчетеКоличестваЗаписей(Документ, РассчитанноеКоличество) Экспорт + + + +КонецПроцедуры + +// Позволяет подготовить наборы данных СКД в соответствии с требованиями отличающимися от стандартных. +// +// Параметры: +// Документ - ДокументСсылка - документ коллекцию движений которого необходимо дополнить. +// ОсновнаяИнформация - Структура - структура с ключами: +// * ИмяРегистра - Строка - имя регистра. +// * ВидРегистра - Строка - вид регистра (Накопления, Расчета, Бухгалтерии, Сведений). +// * ЛокализацияВидРегистра - Строка - локализация вида регистра (Накопления, Расчета, Бухгалтерии, Сведений). +// * ПредставлениеРегистра - Строка - пользовательское представление регистра. +// * ПолеРегистратора - Строка - имя поля регистратора (по умолчанию "Регистратор") +// * ДополнительнаяНумерация - Булево - признак дополнительной нумерации. +// * ДвижениеДокумента - ОбъектМетаданных - регистр как объект метаданных. +// +Процедура ПриПодготовкеНабораДанных(Документ, ОсновнаяИнформация) Экспорт + + + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОтчетОДвиженияхДокументаПереопределяемый/ОтчетОДвиженияхДокументаПереопределяемый.mdo b/SSL/src/CommonModules/ОтчетОДвиженияхДокументаПереопределяемый/ОтчетОДвиженияхДокументаПереопределяемый.mdo new file mode 100644 index 000000000..f35980b77 --- /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 2fd56bb57..48b6a431f 100644 --- a/SSL/src/CommonModules/ОтчетОДвиженияхДокументаСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОтчетОДвиженияхДокументаСлужебныйКлиент/Module.bsl @@ -65,6 +65,7 @@ ДополнительныеПараметры.Вставить("ЗаменятьСуществующий", Истина); ДобавитьОтбор(ФормаРегистра.Список.КомпоновщикНастроек, ПараметрыОтбора, ДополнительныеПараметры); + ФормаРегистра.Открыть(); КонецПроцедуры diff --git a/SSL/src/CommonModules/ОтчетыПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОтчетыПереопределяемый/Module.bsl index 013087da8..7a697f0e9 100644 --- a/SSL/src/CommonModules/ОтчетыПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОтчетыПереопределяемый/Module.bsl @@ -15,32 +15,48 @@ КонецПроцедуры -// Вызывается в форме отчета перед выводом настройки. +// Вызывается в форме отчета и в форме настройки отчета перед выводом настройки +// для указания дополнительных параметров выбора. // // Параметры: // Форма - УправляемаяФорма, Неопределено - Форма отчета. // СвойстваНастройки - Структура - Описание настройки отчета, которая будет выведена в форме отчета. -// * ОписаниеТипов - ОписаниеТипов - -// Тип настройки. -// * ЗначенияДляВыбора - СписокЗначений - -// Объекты, которые будут предложены пользователю в списке выбора. +// * ПолеКД - ПолеКомпоновкиДанных - Выводимая настройка. +// * ОписаниеТипов - ОписаниеТипов - Тип выводимой настройки. +// * ЗначенияДляВыбора - СписокЗначений - Указать объекты, которые будут предложены пользователю в списке выбора. // Дополняет список объектов, уже выбранных пользователем ранее. -// * ЗапросЗначенийВыбора - Запрос - -// Возвращает объекты, которыми необходимо дополнить ЗначенияДляВыбора. -// Первой колонкой (с 0м индексом) должен выбираться объект, +// При этом не следует присваивать в этот параметр новый список значений. +// * ЗапросЗначенийВыбора - Запрос - Указать запрос для выборки объектов, которыми необходимо дополнить +// ЗначенияДляВыбора. Первой колонкой (с индексом 0) должен выбираться объект, // который следует добавить в ЗначенияДляВыбора.Значение. -// Для отключения автозаполнения -// в свойство ЗапросЗначенийВыбора.Текст следует записать пустую строку. -// * ОграничиватьВыборУказаннымиЗначениями - Булево - -// Когда Истина, то выбор пользователя будет ограничен значениями, -// указанными в ЗначенияДляВыбора (его конечным состоянием). +// Для отключения автозаполнения в свойство ЗапросЗначенийВыбора.Текст следует записать пустую строку. +// * ОграничиватьВыборУказаннымиЗначениями - Булево - Указать Истина, чтобы ограничить выбор пользователя +// значениями, указанными в ЗначенияДляВыбора (его конечным состоянием). +// +// Пример: +// 1. Для всех настроек типа СправочникСсылка.Пользователи скрыть и не разрешать выбирать помеченных на удаление, +// недействительных и служебных пользователей. +// +// Если СвойстваНастройки.ОписаниеТипов.СодержитТип(Тип("СправочникСсылка.Пользователи")) Тогда +// СвойстваНастройки.ОграничиватьВыборУказаннымиЗначениями = Истина; +// СвойстваНастройки.ЗначенияДляВыбора.Очистить(); +// СвойстваНастройки.ЗапросЗначенийВыбора.Текст = +// "ВЫБРАТЬ Ссылка ИЗ Справочник.Пользователи +// |ГДЕ НЕ ПометкаУдаления И НЕ Недействителен И НЕ Служебный"; +// КонецЕсли; +// +// 2. Для настройки "Размер" предусмотреть дополнительное значение для выбора. +// +// Если СвойстваНастройки.ПолеКД = Новый ПолеКомпоновкиДанных("ПараметрыДанных.Размер") Тогда +// СвойстваНастройки.ЗначенияДляВыбора.Добавить(10000000, НСтр("ru = 'Больше 10 Мб'")); +// КонецЕсли; // Процедура ПриОпределенииПараметровВыбора(Форма, СвойстваНастройки) Экспорт КонецПроцедуры // Вызывается в обработчике одноименного события формы отчета после выполнения кода формы. -// См. "УправляемаяФорма.ПриСозданииНаСервере" в синтакс-помощнике. и ОтчетыКлиентПереопределяемый.ОбработчикКоманды(). +// См. "УправляемаяФорма.ПриСозданииНаСервере" в синтакс-помощнике и ОтчетыКлиентПереопределяемый.ОбработчикКоманды. // // Параметры: // Форма - УправляемаяФорма - Форма отчета. @@ -62,11 +78,11 @@ КонецПроцедуры -// Вызывается в обработчике одноименного события формы отчета или формы настроек отчета. +// Вызывается в обработчике одноименного события формы отчета и формы настройки отчета. // См. "Расширение управляемой формы для отчета.ПередЗагрузкойВариантаНаСервере" в синтакс-помощнике. // // Параметры: -// Форма - УправляемаяФорма - Форма отчета или форма настроек отчета. +// Форма - УправляемаяФорма - Форма отчета или настроек отчета. // НовыеНастройкиКД - НастройкиКомпоновкиДанных - Настройки для загрузки в компоновщик настроек. // Процедура ПередЗагрузкойВариантаНаСервере(Форма, НовыеНастройкиКД) Экспорт diff --git a/SSL/src/CommonModules/ОтчетыСервер/Module.bsl b/SSL/src/CommonModules/ОтчетыСервер/Module.bsl index 400174b09..0ffdbecd1 100644 --- a/SSL/src/CommonModules/ОтчетыСервер/Module.bsl +++ b/SSL/src/CommonModules/ОтчетыСервер/Module.bsl @@ -270,6 +270,10 @@ //////////////////////////////////////////////////////////////////////////////// // Анализ +// Возвращает информацию о настройках компоновщика. +// После завершения работы с настройками следует вызвать ОчиститьРасширеннуюИнформациюОНастройках +// для очистки от цикличных ссылок для корректного освобождение памяти. +// Функция РасширеннаяИнформацияОНастройках(КомпоновщикНастроекКД, НастройкиОтчета, ОтчетОбъектИлиПолноеИмя, УсловияВывода = Неопределено) Экспорт НастройкиКД = КомпоновщикНастроекКД.Настройки; ПользовательскиеНастройкиКД = КомпоновщикНастроекКД.ПользовательскиеНастройки; @@ -1721,6 +1725,7 @@ Если Не ЗначениеЗаполнено(СвойстваНастройки.Представление) Тогда СвойстваНастройки.Представление = СвойстваНастройки.ПредставлениеПоУмолчанию; КонецЕсли; + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -1982,7 +1987,7 @@ ИначеЕсли СвойстваНастройки.ТипЭлементов = "СтандартныйПериод" Тогда - Группа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + Группа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; ЭлементВывода.Размер = 1; ЭлементВывода.ИмяЭлемента2 = ГруппаИмя; @@ -2065,7 +2070,7 @@ // Группа-строка для заголовка и командной панели таблицы. ГруппаЗаголовокТаблицы = Элементы.Добавить(ГруппаЗаголовокИмя, Тип("ГруппаФормы"), Группа); ГруппаЗаголовокТаблицы.Вид = ВидГруппыФормы.ОбычнаяГруппа; - ГруппаЗаголовокТаблицы.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + ГруппаЗаголовокТаблицы.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; ГруппаЗаголовокТаблицы.Отображение = ОтображениеОбычнойГруппы.Нет; ГруппаЗаголовокТаблицы.ОтображатьЗаголовок = Ложь; @@ -2121,7 +2126,7 @@ // Группа с отступом и таблицей. ГруппаСОтступом = Элементы.Добавить(ГруппаИмя + "Отступ", Тип("ГруппаФормы"), Группа); ГруппаСОтступом.Вид = ВидГруппыФормы.ОбычнаяГруппа; - ГруппаСОтступом.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + ГруппаСОтступом.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; ГруппаСОтступом.Отображение = ОтображениеОбычнойГруппы.Нет; ГруппаСОтступом.Заголовок = СвойстваНастройки.Представление; ГруппаСОтступом.ОтображатьЗаголовок = Ложь; @@ -2340,7 +2345,7 @@ Колонки = Элементы.Добавить(РодительИмя + НомерКолонки + "_" + НомерПодгруппы, Тип("ГруппаФормы"), КолонкаВерхнегоУровня); Колонки.Вид = ВидГруппыФормы.ОбычнаяГруппа; - Колонки.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + Колонки.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; Колонки.Отображение = ОтображениеОбычнойГруппы.Нет; Колонки.ОтображатьЗаголовок = Ложь; diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl index 89c0a9032..8cac103a2 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl @@ -517,7 +517,7 @@ ЭтоОбъект = Ложь; -#Если НЕ ТонкийКлиент И НЕ ВебКлиент Тогда +#Если НЕ ТонкийКлиент И НЕ ВебКлиент И НЕ МобильныйКлиент Тогда Если КлючДанных <> Неопределено И XMLТипЗнч(КлючДанных) <> Неопределено Тогда ТипЗначенияСтрокой = XMLТипЗнч(КлючДанных).ИмяТипа; diff --git a/SSL/src/CommonModules/ОчередьЗаданийПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОчередьЗаданийПереопределяемый/Module.bsl index 2c91fac3e..15bb7c109 100644 --- a/SSL/src/CommonModules/ОчередьЗаданийПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОчередьЗаданийПереопределяемый/Module.bsl @@ -9,8 +9,6 @@ // Процедура ПриПолученииСпискаШаблонов(ШаблоныЗаданий) Экспорт - - КонецПроцедуры // Заполняет соответствие имен методов их псевдонимам для вызова из очереди заданий. @@ -24,8 +22,6 @@ // Процедура ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам) Экспорт - - КонецПроцедуры // Заполняет соответствие методов обработчиков ошибок псевдонимам методов, при возникновении diff --git a/SSL/src/CommonModules/ПодключаемыеКоманды/Module.bsl b/SSL/src/CommonModules/ПодключаемыеКоманды/Module.bsl index 2648d76bd..5aed5d7fe 100644 --- a/SSL/src/CommonModules/ПодключаемыеКоманды/Module.bsl +++ b/SSL/src/CommonModules/ПодключаемыеКоманды/Module.bsl @@ -154,7 +154,8 @@ // Параметры: // Команда - СтрокаТаблицыЗначений - Команда, для которой добавляется условие видимости. // Реквизит - Строка - Имя реквизита объекта. -// Значение - Произвольный - Значение реквизита объекта. +// Значение - Произвольный - Значение реквизита объекта. Параметр обязательный для всех видов +// сравнения кроме Заполнено и НеЗаполнено. // ВидСравнения - ВидСравненияКомпоновкиДанных - Вид сравнения значений. // Допустимо использовать следующие виды сравнения: // ВидСравненияКомпоновкиДанных.Равно, @@ -169,7 +170,7 @@ // ВидСравненияКомпоновкиДанных.МеньшеИлиРавно. // Значение по умолчанию: ВидСравненияКомпоновкиДанных.Равно. // -Процедура ДобавитьУсловиеВидимостиКоманды(Команда, Реквизит, Значение, Знач ВидСравнения = Неопределено) Экспорт +Процедура ДобавитьУсловиеВидимостиКоманды(Команда, Реквизит, Значение = Неопределено, Знач ВидСравнения = Неопределено) Экспорт Если ВидСравнения = Неопределено Тогда ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; КонецЕсли; @@ -1022,7 +1023,11 @@ Состав = Метаданные.Подсистемы.ПодключаемыеОтчетыИОбработки.Состав; Для Каждого ОбъектМетаданныхПоставщика Из Состав Цикл - СсылкаПодключенногоОМ = СтандартныеПодсистемыСервер.ИдентификаторОбъектаМетаданных(ОбъектМетаданныхПоставщика); + Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() И ОбъектМетаданныхПоставщика.РасширениеКонфигурации() <> Неопределено Тогда + Продолжить; + КонецЕсли; + + СсылкаПодключенногоОМ = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданныхПоставщика); Если ТипЗнч(СсылкаПодключенногоОМ) <> ФильтрПоТипуИдентификаторов Тогда Продолжить; КонецЕсли; diff --git a/SSL/src/CommonModules/ПоискИУдалениеДублейКлиент/Module.bsl b/SSL/src/CommonModules/ПоискИУдалениеДублейКлиент/Module.bsl index a8182246c..0c700d791 100644 --- a/SSL/src/CommonModules/ПоискИУдалениеДублейКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПоискИУдалениеДублейКлиент/Module.bsl @@ -33,7 +33,7 @@ // В отчет не включаются вспомогательные данные, такие как наборы записей с ведущим измерением и т.п. // // Параметры: -// Элементы - ТаблицаФормы, Массив, СписокЗначений - Список элементов для анализа. +// Элементы - ТаблицаФормы, ДанныеФормыКоллекция, Массив, СписокЗначений - Список элементов для анализа. // Также можно передать произвольную коллекцию элементов с реквизитом "Ссылка". // ПараметрыОткрытия - Структура - Необязательный. Параметры открытия формы. Состоит из необязательных полей. // Владелец, Уникальность, Окно, НавигационнаяСсылка, ОписаниеОповещенияОЗакрытии, РежимОткрытияОкна, @@ -79,6 +79,7 @@ ТипПараметра = ТипЗнч(Элементы); Если ТипЗнч(Элементы) = Тип("ТаблицаФормы") Тогда + Ссылки = Новый Массив; Для Каждого Элемент Из Элементы.ВыделенныеСтроки Цикл ДанныеСтроки = Элементы.ДанныеСтроки(Элемент); @@ -87,7 +88,15 @@ КонецЕсли; КонецЦикла; + ИначеЕсли ТипЗнч(Элементы) = Тип("ДанныеФормыКоллекция") Тогда + + Ссылки = Новый Массив; + Для Каждого ДанныеСтроки Из Элементы Цикл + Ссылки.Добавить(ДанныеСтроки.Ссылка); + КонецЦикла; + ИначеЕсли ТипПараметра = Тип("СписокЗначений") Тогда + Ссылки = Новый Массив; Для Каждого Элемент Из Элементы Цикл Ссылки.Добавить(Элемент.Значение); diff --git a/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl b/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl index 87b8a2a96..dd857ed42 100644 --- a/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl +++ b/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl @@ -195,8 +195,14 @@ Возврат "ОшибкаНастройкиПоиска"; КонецЕсли; - Иначе - Возврат "ПоискЗапрещен"; + Иначе + Если ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Разрешить Тогда + // Рассинхронизация значения константы ИспользоватьПолнотекстовыйПоиск + // и установленного режима полнотекстового поиска в информационной базе. + Возврат "ОшибкаНастройкиПоиска"; + Иначе + Возврат "ПоискЗапрещен"; + КонецЕсли; КонецЕсли; КонецФункции diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl index 995cecf24..7a04a24ff 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl @@ -1,6 +1,7 @@ #Область ПрограммныйИнтерфейс // Возвращает объект ИнтернетПрокси для доступа в Интернет. +// Допустимые протоколы для создания ИнтернетПрокси http, https, ftp и ftps. // // Параметры: // URLИлиПротокол - Строка - url в формате [Протокол://]<Сервер>/<Путь к файлу на сервере>, @@ -8,6 +9,8 @@ // // Возвращаемое значение: // ИнтернетПрокси - Описывает параметры прокси-серверов для различных протоколов. +// Если не удалось распознать схему сетевой протокол, +// то будет создать прокси на основании протокола HTTP. // Функция ПолучитьПрокси(Знач URLИлиПротокол) Экспорт @@ -15,6 +18,12 @@ ВызватьИсключение НСтр("ru='Прокси не доступен в веб-клиенте.'"); #Иначе + ДопустимыеПротоколы = Новый Соответствие(); + ДопустимыеПротоколы.Вставить("HTTP", Истина); + ДопустимыеПротоколы.Вставить("HTTPS", Истина); + ДопустимыеПротоколы.Вставить("FTP", Истина); + ДопустимыеПротоколы.Вставить("FTPS", Истина); + НастройкаПроксиСервера = НастройкаПроксиСервера(); Если СтрНайти(URLИлиПротокол, "://") > 0 Тогда @@ -23,6 +32,10 @@ Протокол = НРег(URLИлиПротокол); КонецЕсли; + Если ДопустимыеПротоколы[ВРег(Протокол)] = Неопределено Тогда + Протокол = "HTTP"; + КонецЕсли; + Возврат НовыйИнтернетПрокси(НастройкаПроксиСервера, Протокол); #КонецЕсли @@ -426,7 +439,7 @@ Попытка Если Таймаут = АвтоматическоеОпределениеТаймаута() Тогда - + Соединение = Новый HTTPСоединение( Сервер, Порт, @@ -883,6 +896,18 @@ КонецФункции +Функция НастройкаПроксиСервера() + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + НастройкаПроксиСервера = ПолучениеФайловИзИнтернета.НастройкиПроксиНаСервере(); +#Иначе + НастройкаПроксиСервера = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().НастройкиПроксиСервера; +#КонецЕсли + + Возврат НастройкаПроксиСервера; + +КонецФункции + Функция ПредставлениеИнтернетПрокси(Прокси) Журнал = Новый Массив; @@ -926,18 +951,6 @@ КонецФункции -Функция НастройкаПроксиСервера() - -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - НастройкаПроксиСервера = ПолучениеФайловИзИнтернета.НастройкиПроксиНаСервере(); -#Иначе - НастройкаПроксиСервера = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().НастройкиПроксиСервера; -#КонецЕсли - - Возврат НастройкаПроксиСервера; - -КонецФункции - // Возвращает прокси по настройкам НастройкаПроксиСервера для заданного протокола Протокол. // // Параметры: diff --git a/SSL/src/CommonModules/Пользователи/Module.bsl b/SSL/src/CommonModules/Пользователи/Module.bsl index b46207207..5143dc062 100644 --- a/SSL/src/CommonModules/Пользователи/Module.bsl +++ b/SSL/src/CommonModules/Пользователи/Module.bsl @@ -1608,6 +1608,33 @@ КонецФункции +// Проверяет соответствие прав ролей назначению ролей, указанном +// в процедуре ПриОпределенииНазначенияРолей общего модуля ПользователиПереопределяемый. +// +// Применяется в случаях: +// - проверка безопасности конфигураций перед автоматическим обновлением на новую версию; +// - проверка конфигурации перед сборкой; +// - проверка конфигурации при разработке. +// +// Параметры: +// ПроверитьВсе - Булево - если Ложь, тогда пропускается проверка назначения ролей +// по требованиям технологий сервиса (что быстрее), в противном случае, +// проверка выполняется, если разделение включено. +// +// СписокОшибок - Неопределено - если ошибки найдены, формируется текст ошибок и вызывается исключение. +// - СписокЗначений - (возвращаемое значение) найденные ошибки добавляются в список без вызова исключения. +// * Значение - Строка - имя роли. +// - Неопределено - роль, указанная в процедуре не найдена в метаданных. +// * Представление - Строка - текст ошибки. +// +Процедура ПроверитьНазначениеРолей(ПроверитьВсе = Ложь, СписокОшибок = Неопределено) Экспорт + + НазначениеРолей = ПользователиСлужебныйПовтИсп.НазначениеРолей(); + + ПользователиСлужебный.ПроверитьНазначениеРолей(НазначениеРолей, ПроверитьВсе, СписокОшибок); + +КонецПроцедуры + #Область УстаревшиеПроцедурыИФункции // Устарела. По стандарту 488 "Стандартные роли" роль ПолныеПрава более не может diff --git a/SSL/src/CommonModules/ПользователиПереопределяемый/Module.bsl b/SSL/src/CommonModules/ПользователиПереопределяемый/Module.bsl index f6f84e1a3..e08151fcb 100644 --- a/SSL/src/CommonModules/ПользователиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ПользователиПереопределяемый/Module.bsl @@ -51,7 +51,7 @@ // // * ТолькоДляВнешнихПользователей - Массив - имена ролей, которые предназначены // только для внешних пользователей (роли со специально разработанным набором прав), например: -// ДобавлениеИзменениеОтветовНаВопросыАнкет, БазовыеПраваВнешнегоПользователя. +// ДобавлениеИзменениеОтветовНаВопросыАнкет, БазовыеПраваВнешнихПользователейБСП. // Такие роли существуют и в БСП, и в прикладных решениях (если используются внешние пользователи). // // * СовместноДляПользователейИВнешнихПользователей - Массив - имена ролей, которые предназначены diff --git a/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl index 4f58755b8..3afecf877 100644 --- a/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl @@ -213,9 +213,9 @@ КонецЕсли; Если ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда - ИмяРолиБазовыеПрава = Метаданные.Роли.БазовыеПраваВнешнегоПользователя.Имя; + ИмяРолиБазовыеПрава = Метаданные.Роли.БазовыеПраваВнешнихПользователейБСП.Имя; Иначе - ИмяРолиБазовыеПрава = Метаданные.Роли.БазовыеПрава.Имя; + ИмяРолиБазовыеПрава = Метаданные.Роли.БазовыеПраваБСП.Имя; КонецЕсли; Если РольДоступна(ИмяРолиБазовыеПрава) Тогда // Не заменять на РолиДоступны. @@ -698,6 +698,7 @@ // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиентаПриЗапуске. Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры, Отказ, ЭтоВызовПередНачаломРаботыСистемы) Экспорт + Если Не ЭтоВызовПередНачаломРаботыСистемы Тогда КлючПредупрежденияБезопасности = КлючПредупрежденияБезопасностиПриЗапуске(); Если ЗначениеЗаполнено(КлючПредупрежденияБезопасности) Тогда @@ -711,20 +712,24 @@ ОшибкаАвторизации = АвторизоватьТекущегоПользователя(Истина, РегистрироватьВЖурнале); - Если ОшибкаАвторизации <> "" Тогда - Параметры.Вставить("ОшибкаАвторизации", ОшибкаАвторизации); - Отказ = Истина; - Возврат; + Если Не ЗначениеЗаполнено(ОшибкаАвторизации) Тогда + ОтключитьНеактивныхИПросроченныхПользователей(Истина, ОшибкаАвторизации, РегистрироватьВЖурнале); КонецЕсли; - Если ТребуетсяСменитьПароль(ОшибкаАвторизации, Истина, РегистрироватьВЖурнале) Тогда - Параметры.Вставить("ТребуетсяСменитьПароль"); - СтандартныеПодсистемыВызовСервера.СкрытьРабочийСтолПриНачалеРаботыСистемы(); - - ИначеЕсли ОшибкаАвторизации <> "" Тогда + Если Не ЗначениеЗаполнено(ОшибкаАвторизации) Тогда + ПроверитьВходВПрограммуРазрешен(ОшибкаАвторизации); + КонецЕсли; + + Если Не ЗначениеЗаполнено(ОшибкаАвторизации) Тогда + Если ТребуетсяСменитьПароль(ОшибкаАвторизации, Истина, РегистрироватьВЖурнале) Тогда + Параметры.Вставить("ТребуетсяСменитьПароль"); + СтандартныеПодсистемыВызовСервера.СкрытьРабочийСтолПриНачалеРаботыСистемы(); + КонецЕсли; + КонецЕсли; + + Если ЗначениеЗаполнено(ОшибкаАвторизации) Тогда Параметры.Вставить("ОшибкаАвторизации", ОшибкаАвторизации); Отказ = Истина; - Возврат; КонецЕсли; КонецПроцедуры @@ -764,6 +769,15 @@ КонецПроцедуры +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииСписковСОграничениемДоступа(Списки) Экспорт + + Списки.Вставить(Метаданные.Справочники.ВнешниеПользователи, Истина); + Списки.Вставить(Метаданные.Справочники.ГруппыВнешнихПользователей, Истина); + Списки.Вставить(Метаданные.Справочники.Пользователи, Истина); + +КонецПроцедуры + // См. СтандартныеПодсистемыВызовСервера.ПриВыполненииСтандартныхПериодическихПроверокНаСервере. Процедура ПриВыполненииСтандартныхПериодическихПроверокНаСервере(Параметры) Экспорт @@ -771,6 +785,8 @@ УстановитьПривилегированныйРежим(Истина); + ОтключитьНеактивныхИПросроченныхПользователей(Истина); + ТребуетсяСменитьПароль(); // Обновление даты последней активности. ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( @@ -4322,12 +4338,6 @@ // Процедура ЗаполнитьСпискиНастроек(Параметры, АдресХранилища) Экспорт - Если Параметры.ПользовательИнформационнойБазы <> ИмяПользователя() - И Не ПравоДоступа("АдминистрированиеДанных", Метаданные) Тогда - - ВызватьИсключение НСтр("ru = 'Недостаточно прав для получения настроек пользователя.'"); - КонецЕсли; - Обработки.НастройкиПользователей.ЗаполнитьСпискиНастроек(Параметры); Результат = Новый Структура; @@ -4456,6 +4466,16 @@ КонецПроцедуры +Функция ШаблонТекстаОшибкиЗаписиСведенийОТекущемПользователе() + + Возврат + НСтр("ru = 'Не удалось записать сведения о текущем пользователе по причине: + |%1 + | + |Обратитесь к администратору.'"); + +КонецФункции + Функция ЗаголовокСообщенияАвторизацияНеВыполненаСПереводомСтроки() Возврат НСтр("ru = 'Авторизация не выполнена. Работа системы будет завершена.'") @@ -5863,11 +5883,7 @@ Исключение ОтменитьТранзакцию(); ИнформацияОбОшибке = ИнформацияОбОшибке(); - ШаблонТекстаОшибки = - НСтр("ru = 'Не удалось записать сведения о текущем пользователе по причине: - |%1 - | - |Обратитесь к администратору.'"); + ШаблонТекстаОшибки = ШаблонТекстаОшибкиЗаписиСведенийОТекущемПользователе(); Если ПриЗапуске Тогда ОписаниеОшибки = ЗаголовокСообщенияАвторизацияНеВыполненаСПереводомСтроки() + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекстаОшибки, @@ -6434,13 +6450,16 @@ //////////////////////////////////////////////////////////////////////////////// // Для процедуры КонтрольАктивностиПользователей. -Процедура ОтключитьНеактивныхИПросроченныхПользователей() +Процедура ОтключитьНеактивныхИПросроченныхПользователей(ТолькоДляАвторизованногоПользователя = Ложь, + ОписаниеОшибки = "", РегистрироватьВЖурнале = Истина) УстановитьПривилегированныйРежим(Истина); Настройки = ПользователиСлужебныйПовтИсп.Настройки(); Если Не Настройки.ОбщиеНастройкиВхода Тогда - ИзменитьЗаданиеКонтрольАктивностиПользователей(Ложь); + Если Не ТолькоДляАвторизованногоПользователя Тогда + ИзменитьЗаданиеКонтрольАктивностиПользователей(Ложь); + КонецЕсли; Возврат; КонецЕсли; @@ -6465,7 +6484,8 @@ | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОПользователях КАК СведенияОПользователях | ПО (СведенияОПользователях.Пользователь = Пользователи.Ссылка) |ГДЕ - | ЕСТЬNULL(СведенияОПользователях.СрокДействияНеОграничен, ЛОЖЬ) = ЛОЖЬ + | &ОтборПользователей + | И ЕСТЬNULL(СведенияОПользователях.СрокДействияНеОграничен, ЛОЖЬ) = ЛОЖЬ | И ЕСТЬNULL(СведенияОПользователях.ДатаАвтоматическогоЗапрещенияВхода, &ПустаяДата) = &ПустаяДата | И ВЫБОР | КОГДА ЕСТЬNULL(СведенияОПользователях.СрокДействия, &ПустаяДата) <> &ПустаяДата @@ -6511,7 +6531,8 @@ | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОПользователях КАК СведенияОПользователях | ПО (СведенияОПользователях.Пользователь = ВнешниеПользователи.Ссылка) |ГДЕ - | ЕСТЬNULL(СведенияОПользователях.СрокДействияНеОграничен, ЛОЖЬ) = ЛОЖЬ + | &ОтборВнешнихПользователей + | И ЕСТЬNULL(СведенияОПользователях.СрокДействияНеОграничен, ЛОЖЬ) = ЛОЖЬ | И ЕСТЬNULL(СведенияОПользователях.ДатаАвтоматическогоЗапрещенияВхода, &ПустаяДата) = &ПустаяДата | И ВЫБОР | КОГДА ЕСТЬNULL(СведенияОПользователях.СрокДействия, &ПустаяДата) <> &ПустаяДата @@ -6542,6 +6563,17 @@ | ИНАЧЕ ЛОЖЬ | КОНЕЦ | КОНЕЦ"; + Если ТолькоДляАвторизованногоПользователя Тогда + Запрос.УстановитьПараметр("Пользователь", Пользователи.АвторизованныйПользователь()); + ОтборПользователей = "Пользователи.Ссылка = &Пользователь"; + ОтборВнешнихПользователей = "ВнешниеПользователи.Ссылка = &Пользователь"; + Иначе + ОтборПользователей = "ИСТИНА"; + ОтборВнешнихПользователей = "ИСТИНА"; + КонецЕсли; + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтборПользователей", ОтборПользователей); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтборВнешнихПользователей", ОтборВнешнихПользователей); + Выборка = Запрос.Выполнить().Выбрать(); ИнформацияОбОшибке = Неопределено; @@ -6592,29 +6624,41 @@ Исключение ОтменитьТранзакцию(); ИнформацияОбОшибке = ИнформацияОбОшибке(); - Если Выборка.СрокДействияИстек Тогда - ШаблонКомментария = - НСтр("ru = 'Не удалось снять пользователю ""%1"" признак - |""Вход в программу разрешен"" в связи с окончанием срока действия по причине: - |%2'"); - Иначе - ШаблонКомментария = - НСтр("ru = 'Не удалось снять пользователю ""%1"" признак - |""Вход в программу разрешен"" в связи с отсутствием работы - |в программе более установленного срока по причине: - |%2'"); + + ШаблонТекстаОшибки = ШаблонТекстаОшибкиЗаписиСведенийОТекущемПользователе(); + ОписаниеОшибки = ЗаголовокСообщенияАвторизацияНеВыполненаСПереводомСтроки() + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекстаОшибки, + КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + + Если РегистрироватьВЖурнале Тогда + Если Выборка.СрокДействияИстек Тогда + ШаблонКомментария = + НСтр("ru = 'Не удалось снять пользователю ""%1"" признак + |""Вход в программу разрешен"" в связи с окончанием срока действия по причине: + |%2'"); + Иначе + ШаблонКомментария = + НСтр("ru = 'Не удалось снять пользователю ""%1"" признак + |""Вход в программу разрешен"" в связи с отсутствием работы + |в программе более установленного срока по причине: + |%2'"); + КонецЕсли; + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Пользователи.Ошибка автоматического запрещения входа в программу'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + Метаданные.НайтиПоТипу(ТипЗнч(Пользователь)), + Пользователь, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонКомментария, + Пользователь, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке))); КонецЕсли; - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Пользователи.Ошибка автоматического запрещения входа в программу'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - Метаданные.НайтиПоТипу(ТипЗнч(Пользователь)), - Пользователь, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонКомментария, - Пользователь, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке))); КонецПопытки; КонецЦикла; + Если ТолькоДляАвторизованногоПользователя Тогда + Возврат; + КонецЕсли; + Если ИнформацияОбОшибке <> Неопределено Или ЗначениеЗаполнено(Настройки.Пользователи.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода) Или ЗначениеЗаполнено(Настройки.ВнешниеПользователи.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода) Тогда @@ -6639,6 +6683,23 @@ КонецПроцедуры +Процедура ПроверитьВходВПрограммуРазрешен(ОшибкаАвторизации) + + УстановитьПривилегированныйРежим(Истина); + + Идентификатор = ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор; + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Идентификатор); + + Если ПользовательИБ = Неопределено + Или Пользователи.ВходВПрограммуРазрешен(ПользовательИБ) Тогда + Возврат; + КонецЕсли; + + ОшибкаАвторизации = ЗаголовокСообщенияАвторизацияНеВыполненаСПереводомСтроки() + + НСтр("ru = 'Ваша учетная запись отключена. Обратитесь к администратору.'"); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Для процедуры ОбработатьИнтерфейсРолей. diff --git a/SSL/src/CommonModules/ПоставляемыеДанные/Module.bsl b/SSL/src/CommonModules/ПоставляемыеДанные/Module.bsl index 10e78bbaf..14cbc6875 100644 --- a/SSL/src/CommonModules/ПоставляемыеДанные/Module.bsl +++ b/SSL/src/CommonModules/ПоставляемыеДанные/Module.bsl @@ -467,6 +467,12 @@ + ", " + Характеристика.Code + ": " + Характеристика.Value; КонецЦикла; + Если Дескриптор.RecommendedUpdateDate = Неопределено Тогда + + Дескриптор.RecommendedUpdateDate = ТекущаяУниверсальнаяДата(); + + КонецЕсли; + Описание = Описание + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = ', добавлен: %1 (%2), рекомендовано загрузить: %3 (%2)'"), МестноеВремя(Дескриптор.CreationDate, ЧасовойПоясСеанса()), diff --git a/SSL/src/CommonModules/РаботаВБезопасномРежимеКлиент/Module.bsl b/SSL/src/CommonModules/РаботаВБезопасномРежимеКлиент/Module.bsl index 2a5b6c15e..83624ad67 100644 --- a/SSL/src/CommonModules/РаботаВБезопасномРежимеКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаВБезопасномРежимеКлиент/Module.bsl @@ -39,10 +39,11 @@ КонецПроцедуры -#КонецОбласти - -#Область СлужебныйПрограммныйИнтерфейс - +// Позволяет администратору открыть внешнюю обработку или отчет с выбором безопасного режима. +// +// Параметры: +// Владелец - УправляемаяФорма - форма-владелец формы внешней обработки или отчета. +// Процедура ОткрытьВнешнююОбработкуИлиОтчет(Владелец) Экспорт ОткрытьФорму("Обработка.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.Форма.ОткрытиеВнешнейОбработкиИлиОтчетаСВыборомБезопасногоРежима",, diff --git a/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/Module.bsl b/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/Module.bsl index 5eb33c8d4..9761a6b3d 100644 --- a/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/Module.bsl @@ -321,7 +321,8 @@ |поставляемой в макете %1: макет %1 не обнаружен в составе конфигурации.'"), ИмяМакета); КонецЕсли; - Если Метаданные.НайтиПоПолномуИмени(ИмяМакета).ТипМакета <> Метаданные.СвойстваОбъектов.ТипМакета.ДвоичныеДанные Тогда + ТипМакета = Метаданные.НайтиПоПолномуИмени(ИмяМакета).ТипМакета; + Если ТипМакета <> Метаданные.СвойстваОбъектов.ТипМакета.ДвоичныеДанные И ТипМакета <> Метаданные.СвойстваОбъектов.ТипМакета.ВнешняяКомпонента Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось сформировать разрешение на использование внешней компоненты: |макет %1 не содержит двоичных данных.'"), ИмяМакета); diff --git a/SSL/src/CommonModules/РаботаВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/РаботаВМоделиСервиса/Module.bsl index d2e61cf57..bc9f29457 100644 --- a/SSL/src/CommonModules/РаботаВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/РаботаВМоделиСервиса/Module.bsl @@ -2462,6 +2462,37 @@ ОтборЗадания.Вставить("Шаблон", Шаблон); Задания = ОчередьЗаданий.ПолучитьЗадания(ОтборЗадания); + Если Задания.Количество() = 0 Тогда + МонопольныйРежим = МонопольныйРежим(); + Если Не МонопольныйРежим Тогда + Попытка + УстановитьМонопольныйРежим(Истина); + МонопольныйРежимУстановлен = Истина; + Исключение + МонопольныйРежимУстановлен = Ложь; + КонецПопытки; + КонецЕсли; + Если МонопольныйРежим() Тогда + Попытка + ОчередьЗаданийСлужебныйРазделениеДанных.СоздатьЗаданияОчередиПоШаблонамВТекущейОбласти(); + ОбновлениеВыполнено = Истина; + Исключение + ОбновлениеВыполнено = Ложь; + КонецПопытки; + Если ОбновлениеВыполнено Тогда + Задания = ОчередьЗаданий.ПолучитьЗадания(ОтборЗадания); + КонецЕсли; + КонецЕсли; + Если МонопольныйРежимУстановлен Тогда + УстановитьМонопольныйРежим(Ложь); + КонецЕсли; + КонецЕсли; + Если Задания.Количество() = 0 Тогда + ШаблонСообщения = НСтр("ru = 'Не найдено задание в очереди для предопределенного задания с именем %1'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ЗаданиеМетаданные.Имя); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + ПараметрыЗадания = Новый Структура("Использование", Использование); ОчередьЗаданий.ИзменитьЗадание(Задания[0].Идентификатор, ПараметрыЗадания); @@ -2805,14 +2836,6 @@ Обработчик.ОбщиеДанные = Истина; Обработчик.МонопольныйРежим = Истина; - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "*"; - Обработчик.Процедура = "РаботаВМоделиСервиса.КонтрольНеразделенныхДанныхПриОбновлении"; - Обработчик.ОбщиеДанные = Истина; - Обработчик.ВыполнятьВГруппеОбязательных = Истина; - Обработчик.Приоритет = 99; - Обработчик.МонопольныйРежим = Ложь; - Обработчик = Обработчики.Добавить(); Обработчик.Версия = "*"; Обработчик.Процедура = "РаботаВМоделиСервиса.КонтрольРазделителейПриОбновлении"; @@ -4337,7 +4360,7 @@ // Выполняет контроль структуры метаданных по критерию недоступности неразделенных данных // для записи из сеансов с включенным разделением. // -Процедура КонтрольНеразделенныхДанныхПриОбновлении() Экспорт +Функция КонтрольНеразделенныхДанныхПриОбновлении(ВызыватьИсключение = Истина) Экспорт ПравилаКонтроляМетаданных = Новый Соответствие; @@ -4362,7 +4385,7 @@ // СтандартныеПодсистемы.ОбменДанными Исключения.Добавить(Метаданные.РегистрыСведений.БезопасноеХранилищеДанных); - Исключения.Добавить(Метаданные.РегистрыСведений.НастройкиТранспортаОбмена); + Исключения.Добавить(Метаданные.РегистрыСведений.УдалитьНастройкиТранспортаОбмена); Исключения.Добавить(Метаданные.РегистрыСведений.СостоянияОбменовДанными); Исключения.Добавить(Метаданные.РегистрыСведений.СостоянияУспешныхОбменовДанными); // Конец СтандартныеПодсистемы.ОбменДанными @@ -4408,6 +4431,7 @@ НарушенияКонтроляВключенияНеразделенныхДанныхВКонтролирующиеПодписки = Новый Массив(); НарушенияКонтроляРазделенияОбъектовНесколькимиРазделителями = Новый Массив(); + ОбъектыМетаданныхСНарушениями = Новый Массив; Для Каждого ПравилоКонтроляМетаданных Из ПравилаКонтроляМетаданных Цикл @@ -4427,6 +4451,7 @@ Если ЧислоРазделителей > 1 Тогда НарушенияКонтроляРазделенияОбъектовНесколькимиРазделителями.Добавить(КонтролируемыйОбъектМетаданных); + ОбъектыМетаданныхСНарушениями.Добавить(КонтролируемыйОбъектМетаданных); КонецЕсли; // 2. Проверка неразделенных объектов метаданных на включение в состав контролирующих @@ -4466,6 +4491,7 @@ Если ТребуетсяКонтроль И Не ОбеспеченКонтроль Тогда НарушенияКонтроляВключенияНеразделенныхДанныхВКонтролирующиеПодписки.Добавить(КонтролируемыйОбъектМетаданных); + ОбъектыМетаданныхСНарушениями.Добавить(КонтролируемыйОбъектМетаданных); КонецЕсли; КонецЕсли; @@ -4558,11 +4584,22 @@ Если Не ПустаяСтрока(РезультирующееИсключение) Тогда РезультирующееИсключение = НСтр("ru = 'Обнаружены ошибки в структуре метаданных конфигурации:'") + Символы.ПС + Символы.ВК + РезультирующееИсключение; - ВызватьИсключение РезультирующееИсключение; + + Если ВызыватьИсключение Тогда + + ВызватьИсключение РезультирующееИсключение; + + Иначе + + Возврат Новый Структура("ОбъектыМетаданных, ТекстИсключения", ОбъектыМетаданныхСНарушениями, РезультирующееИсключение); + + КонецЕсли; КонецЕсли; -КонецПроцедуры + Возврат Неопределено; + +КонецФункции // Выполняет контроль структуры метаданных по критерию упорядоченности общих реквизитов // в дереве метаданных конфигурации. diff --git a/SSL/src/CommonModules/РаботаСАдресами/Module.bsl b/SSL/src/CommonModules/РаботаСАдресами/Module.bsl index a44a2e57c..6a98cd822 100644 --- a/SSL/src/CommonModules/РаботаСАдресами/Module.bsl +++ b/SSL/src/CommonModules/РаботаСАдресами/Module.bsl @@ -4,28 +4,34 @@ // Если переданная строка не содержит информации об адресе, то будет вызвано исключение. // // Параметры: -// XMLСтрока - Строка - Строка XML соответствующая XDTO пакету Адрес. +// Адрес - Строка, Структура - Строка в формате JSON или XML соответствующая XDTO пакету Адрес. // // Возвращаемое значение: // Строка - Наименование региона. // -Функция РегионАдресаКонтактнойИнформации(Знач XMLСтрока) Экспорт +Функция РегионАдресаКонтактнойИнформации(Знач Адрес) Экспорт - Если ПустаяСтрока(XMLСтрока) Тогда - Возврат ""; - КонецЕсли; + Если ТипЗнч(Адрес) = Тип("Строка") Тогда + + Если ПустаяСтрока(Адрес) Тогда + Возврат ""; + КонецЕсли; - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); - Чтение = Новый ЧтениеXML; - Чтение.УстановитьСтроку(XMLСтрока); - XDTOАдрес = ФабрикаXDTO.ПрочитатьXML(Чтение, ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); - Адрес = XDTOАдрес.Состав; - Если Адрес = Неопределено Или Адрес.Тип() <> ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") Тогда + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(Адрес) Тогда + Адрес = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВJSON(Адрес, Перечисления.ТипыКонтактнойИнформации.Адрес); + КонецЕсли; + + Адрес = УправлениеКонтактнойИнформациейСлужебный.СтрокаJSONВСтруктуру(Адрес); + + ИначеЕсли ТипЗнч(Адрес) <> Тип("Структура") Тогда + ВызватьИсключение НСтр("ru = 'Невозможно определить субъекта РФ, ожидается адрес.'"); + КонецЕсли; - АдресРФ = Обработки.РасширенныйВводКонтактнойИнформации.НациональныйАдрес(Адрес); - Возврат ?(АдресРФ = Неопределено ИЛИ АдресРФ.Свойства().Получить("СубъектРФ") = Неопределено, "", СокрЛП(АдресРФ.СубъектРФ)); + СубъектРФ = СокрЛП(Адрес.Area + " " + Адрес.AreaType); + + Возврат СубъектРФ; КонецФункции @@ -33,28 +39,34 @@ // Если переданная строка не содержит информации об адресе, то будет вызвано исключение. // // Параметры: -// XMLСтрока - Строка - Строка XML соответствующая XDTO пакету Адрес. +// Адрес - Строка, Структура - Строка в формате JSON или строка XML соответствующая XDTO пакету Адрес. // // Возвращаемое значение: // Строка - Наименование города. // -Функция ГородАдресаКонтактнойИнформации(Знач XMLСтрока) Экспорт +Функция ГородАдресаКонтактнойИнформации(Знач Адрес) Экспорт - Если ПустаяСтрока(XMLСтрока) Тогда - Возврат ""; - КонецЕсли; + Если ТипЗнч(Адрес) = Тип("Строка") Тогда + + Если ПустаяСтрока(Адрес) Тогда + Возврат ""; + КонецЕсли; - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); - Чтение = Новый ЧтениеXML; - Чтение.УстановитьСтроку(XMLСтрока); - XDTOАдрес = ФабрикаXDTO.ПрочитатьXML(Чтение, ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); - Адрес = XDTOАдрес.Состав; - Если Адрес = Неопределено Или Адрес.Тип() <> ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") Тогда + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(Адрес) Тогда + Адрес = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВJSON(Адрес, Перечисления.ТипыКонтактнойИнформации.Адрес); + КонецЕсли; + + Адрес = УправлениеКонтактнойИнформациейСлужебный.СтрокаJSONВСтруктуру(Адрес); + + ИначеЕсли ТипЗнч(Адрес) <> Тип("Структура") Тогда + ВызватьИсключение НСтр("ru = 'Невозможно определить город, ожидается адрес.'"); + КонецЕсли; - АдресРФ = Обработки.РасширенныйВводКонтактнойИнформации.НациональныйАдрес(Адрес); - Возврат ?(АдресРФ = Неопределено ИЛИ АдресРФ.Свойства().Получить("Город") = Неопределено, "", СокрЛП(АдресРФ.Город)); + Город = СокрЛП(Адрес.City + " " + Адрес.CityType); + + Возврат Город; КонецФункции @@ -71,142 +83,296 @@ // Массив - Содержит массив структур, содержимое структуры см. описание функции СведенияОбАдресе. // Функция СведенияОбАдресах(Адреса, ДополнительныеПараметры = Неопределено) Экспорт - Возврат Обработки.РасширенныйВводКонтактнойИнформации.СведенияОбАдресахВВидеСтруктуры(Адреса, ДополнительныеПараметры); + Возврат СведенияОбАдресахВВидеСтруктуры(Адреса, ДополнительныеПараметры); КонецФункции -// Возвращает сведения об адресах в виде структуру частей адреса и кодов КЛАДР. +// Возвращает сведения об адресе в виде отдельных частей адреса и различных кодов (код региона, ОКТМО и др.). // // Параметры: -// Адрес - Строка, ОбъектXDTO - XDTO объект или строка XML соответствующие XDTO пакету Адрес. -// ДополнительныеПараметры - Структура - параметры контактной информации. -// * БезПредставлений - Булево - Если Истина, то поле представления адреса будет отсутствовать. -// * КодыКЛАДР - Булево - Если Истина, то возвращает структуру с кодами КЛАДР по всем частям адреса. -// * ПолныеНаименованияСокращений - Булево - Если Истина, то возвращает полное наименование адресных объектов. +// Адрес - Строка - адрес во внутреннем формате JSON или в XML, соответствующем XDTO пакету Адрес. +// - ОбъектXDTO - XDTO объект, соответствующий XDTO пакету Адрес. +// ДополнительныеПараметры - Структура - для уточнения возвращаемого значения: +// * БезПредставлений - Булево - Если Истина, то поле Представление будет отсутствовать. По умолчанию, Ложь. +// * КодыКЛАДР - Булево - Если Истина, то возвращается структура КодыКЛАДР. По умолчанию, Ложь. +// * ПолныеНаименованияСокращений - Булево - Если Истина, то возвращается полное наименование адресных объектов. // * НаименованиеВключаетСокращение - Булево - Если Истина, то поля содержат сокращениям в наименованиях адресных объектов. +// * ПроверитьАдрес - Булево - Если Истина, то адрес будет проверен на соответствие ФИАС. +// // Возвращаемое значение: -// Структура - набор пар ключ-значение. Состав свойств для адреса: +// Структура - сведения об адресе: +// * Представление - Строка - текстовое представление адреса по административно-территориальному делению. +// * МуниципальноеПредставление - Строка - текстовое представление адреса по муниципальному делению. +// * ТипАдреса - Строка - основной тип адреса (только для адресов РФ). +// Варианты: "Муниципальный", "Административно-территориальный". // * Страна - Строка - текстовое представление страны. // * КодСтраны - Строка - код страны по ОКСМ. // * Индекс - Строка - почтовый индекс. // * КодРегиона - Строка - код региона РФ. // * Регион - Строка - текстовое представление региона РФ. // * РегионСокращение - Строка - сокращение региона. -// * Округ - Строка - текстовое представление округа. -// * ОкругСокращение - Строка - сокращение округа. -// * Район - Строка - текстовое представление района. -// * РайонСокращение - Строка - сокращение района. -// * Город - Строка - текстовое представление города. -// * ГородСокращение - Строка - сокращение города. +// * Округ - Строка - текстовое представление округа (устарело). +// * ОкругСокращение - Строка - сокращение округа (устарело). +// * Район - Строка - текстовое представление района у адресов по административно-территориальному делению. +// * РайонСокращение - Строка - сокращение района у адресов по административно-территориальному делению. +// * МуниципальныйРайон - Строка - текстовое представление муниципального района у адресов по муниципальному делению. +// * МуниципальныйРайонСокращение - Строка - сокращение муниципального района у адресов по муниципальному делению. +// * Город - Строка - текстовое представление города у адресов по административно-территориальному делению. +// * ГородСокращение - Строка - сокращение города у адресов по административно-территориальному делению. +// * Поселение - Строка - текстовое представление поселения у адресов по муниципальному делению. +// * ПоселениеСокращение - Строка - сокращение поселения у адресов по муниципальному делению. // * ВнутригородскойРайон - Строка - текстовое представление внутригородского района. // * ВнутригородскойРайонСокращение - Строка - сокращение внутригородского района. // * НаселенныйПункт - Строка - текстовое представление населенного пункта. // * НаселенныйПунктСокращение - Строка - сокращение населенного пункта. +// * Территория - Строка - текстовое представление территории. +// * ТерриторияСокращение - Строка - сокращение территории. // * Улица - Строка - текстовое представление улицы. // * УлицаСокращение - Строка - сокращение улицы. -// * ДополнительнаяТерритория - Строка - текстовое представление дополнительной территории. -// * ДополнительнаяТерриторияСокращение - Строка - сокращение дополнительной территории. -// * ЭлементДополнительнойТерритории - Строка - текстовое представление элемента дополнительной территории. -// * ЭлементДополнительнойТерриторииСокращение - Строка - сокращение элемента дополнительной территории. +// * ДополнительнаяТерритория - Строка - текстовое представление дополнительной территории (устарело). +// * ДополнительнаяТерриторияСокращение - Строка - сокращение дополнительной территории (устарело). +// * ЭлементДополнительнойТерритории - Строка - текстовое представление элемента дополнительной территории (устарело). +// * ЭлементДополнительнойТерриторииСокращение - Строка - сокращение элемента дополнительной территории (устарело). // * Здание - Структура - структура с информацией о здании адреса. -// ** ТипЗдания - Строка - тип объекта адресации адреса РФ согласно приказу ФНС ММВ-7-1/525 от 31.08.2011. +// ** ТипЗдания - Строка - тип объекта адресации адреса РФ согласно приказу Минфина России от 5.11.2015 г. N +// 171н. // ** Номер - Строка - текстовое представление номера дома (только для адресов РФ). -// * Корпуса - Массив - содержит структуры(поля структуры: ТипКорпуса, Номер) с перечнем корпусов адреса. +// * Корпуса - Массив - содержит структуры(поля структуры: ТипКорпуса, Номер) с перечнем корпусов адреса. // * Помещения - Массив - содержит структуры(поля структуры: ТипПомещения, Номер) с перечнем помещений адреса. +// * Комментарий - Строка - комментарий об адресе. +// * ИдентификаторАдресногоОбъекта - УникальныйИдентификатор - Идентификационный код последнего адресного объекта +// в иерархи адреса. Например, для адреса: Москва г., Дмитровское ш., д.9 это +// будет идентификатор улицы. +// * ИдентификаторДома - УникальныйИдентификатор - Идентификационный код дома(строения) адресного объекта. +// * Идентификаторы - Структура - Идентификаторы адресных объектов адреса. +// ** РегионИдентификатор - УникальныйИдентификатор - идентификатор региона. +// ** РайонИдентификатор - УникальныйИдентификатор - идентификатор района. +// ** МуниципальныйРайонИдентификатор - УникальныйИдентификатор - идентификатор муниципального района. +// ** ГородИдентификатор - УникальныйИдентификатор - идентификатор города. +// ** ПоселениеИдентификатор - УникальныйИдентификатор - идентификатор поселения. +// ** ВнутригородскойРайонИдентификатор - УникальныйИдентификатор - идентификатор внутригородского района. +// ** ТерриторияИдентификатор - УникальныйИдентификатор - идентификатор территории. +// ** ТерриторияИдентификатор - УникальныйИдентификатор - идентификатор территории. +// ** УлицаИдентификатор - УникальныйИдентификатор - идентификатор улица. // * КодыКЛАДР - Структура - Коды КЛАДР, если установлен параметр КодыКЛАДР. // ** Регион - Строка - Код КЛАДР региона. // ** Район - Строка - Код КЛАДР район. // ** Город - Строка - Код КЛАДР города. // ** НаселенныйПункт - Строка - Код КЛАДР населенного пункта. // ** Улица - Строка - Код КЛАДР улица. -// * Идентификаторы - Структура - Идентификаторы адресных объекта, если установлен параметр КодыКЛАДР. -// ** Регион - Строка - Идентификатор региона. -// ** Район - Строка - Идентификатор район. -// ** Город - Строка - Идентификатор города. -// ** НаселенныйПункт - Строка - Идентификатор населенного пункта. -// ** Улица - Строка - Идентификатор улица. -// * ИдентификаторАдресногоОбъекта - Строка - Идентификатор адресного объекта наименьшего уровня в иерархи адреса(без учета домов), если установлен параметр КодыКЛАДР. -// (Например, улицы для Адреса: Московская обл, Коломенский р-н, Печная д, Озерная ул, дом № 7). // * ДополнительныеКоды - Структура - Коды ОКТМО, ОКТМО, ОКАТО, КодИФНСФЛ, КодИФНСЮЛ, КодУчасткаИФНСФЛ, КодУчасткаИФНСЮЛ. +// * РезультатПроверкиАдреса - Строка - "Успех", если адрес корректный, "Ошибка" - при наличии ошибок проверки, +// "Отказ", если не удалось проверить адрес, т.к. не доступен классификатор. +// Пустая строка, если в параметре ДополнительныеПараметры.ПроверитьАдрес не +// установлен флаг ПроверитьАдрес. +// * ОшибкиПроверкиАдреса - Строка - описание ошибок в адресе, выявленных в ходе проверки. +// Функция СведенияОбАдресе(Адрес, ДополнительныеПараметры = Неопределено) Экспорт - Возврат Обработки.РасширенныйВводКонтактнойИнформации.СведенияОбАдресеВВидеСтруктуры(Адрес, ДополнительныеПараметры); -КонецФункции - -// Преобразует адреса нового формата XML ФИАС в адрес формата КЛАДР. -// -// Параметры: -// Данные - Строка - строка XML соответствующая XDTO пакету Адрес. -// -// Возвращаемое значение: -// Структура - набор пар ключ-значение. Состав свойств для адреса: -// ** Страна - Строка - Представление страны. -// ** КодСтраны - Строка - Код страны по ОКСМ. -// ** Индекс - Строка - Почтовый индекс (только для адресов РФ). -// ** Регион - Строка - Представление региона РФ (только для адресов РФ). -// ** КодРегиона - Строка - Код региона РФ (только для адресов РФ). -// ** РегионСокращение - Строка - Сокращение региона. -// ** Район - Строка - Представление района (только для адресов РФ). -// ** РайонСокращение - Строка - Сокращение района. -// ** Город - Строка - Представление города (только для адресов РФ). -// ** ГородСокращение - Строка - Сокращение города (только для адресов РФ). -// ** НаселенныйПункт - Строка - Представление населенного пункта (только для адресов РФ). -// ** НаселенныйПунктСокращение - Строка - Сокращение населенного пункта. -// ** Улица - Строка - Представление улицы (только для адресов РФ). -// ** УлицаСокращение - Строка - Сокращение улицы. -// ** ТипДома - Строка - Тип дома см. РаботаСАдресамиКлиентСервер.ТипыОбъектовАдресацииАдресаРФ. -// ** Дом - Строка - Представление дома (только для адресов РФ). -// ** ТипКорпуса - Строка - Тип корпуса см. РаботаСАдресамиКлиентСервер.ТипыОбъектовАдресацииАдресаРФ. -// ** Корпус - Строка - Представление корпуса (только для адресов РФ). -// ** ТипКвартиры - Строка - Тип квартиры см. РаботаСАдресамиКлиентСервер.ТипыОбъектовАдресацииАдресаРФ. -// ** Квартира - Строка - Представление квартиры (только для адресов РФ). -// ** АдресРФ - Булево - Если Истина, то адрес российский. -// ** Представление - Строка - Представление адреса. -// -Функция АдресВФорматеКЛАДР(Знач Данные) Экспорт - - Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(Данные) Тогда - // Новый формат КИ - Результат = УправлениеКонтактнойИнформациейКлиентСервер.СтруктураЗначенийПолей( - ПредыдущийФорматКонтактнойИнформацииXML(Данные)); - Представление = УправлениеКонтактнойИнформацией.ПредставлениеКонтактнойИнформации(Данные); - - ИначеЕсли ПустаяСтрока(Данные) Тогда - // Генерируем пустую структуру по виду - Результат = РаботаСАдресамиКлиентСервер.СтруктураКонтактнойИнформацииПоТипу( - Перечисления.ТипыКонтактнойИнформации.Адрес); - Представление = ""; - КонецЕсли; - - Если Результат.Свойство("Страна") И СтрСравнить(Результат.Страна, ОсновнаяСтрана().Наименование) = 0 Тогда - Результат.Вставить("АдресРФ", Истина); - Иначе - Результат.Вставить("АдресРФ", Ложь); - КонецЕсли; - Результат.Вставить("Представление", Представление); - - Возврат Результат; + Возврат СведенияОбАдресеВВидеСтруктуры(Адрес, ДополнительныеПараметры); КонецФункции // Проверяет адрес на соответствие требованиям к адресной информации. // // Параметры: -// АдресВXML - Строка - Строка XML соответствующая XDTO пакету Адрес. +// Адрес - Строка - Строка JSON или XML контактной информации соответствующая XDTO пакету КонтактнаяИнформация. // ПараметрыПроверки - Структура, СправочникСсылка.ВидыКонтактнойИнформации - Флаги проверки адреса: // ТолькоНациональныйАдрес - Булево - Адрес должен быть только Российским. По умолчанию ИСТИНА. -// ФорматАдреса - Строка - По какому классификатору проверять "КЛАДР" или "ФИАС". По умолчанию "КЛАДР". +// ФорматАдреса - Строка - Устарело. По какому классификатору проверять "КЛАДР" или "ФИАС". По умолчанию "КЛАДР". // Возвращаемое значение: // Структура - содержит структуру с полями: // * Результат - Строка - Результат проверки: "Корректный", "НеПроверен", "СодержитОшибки". // * СписокОшибок - СписокЗначений - Информация о ошибках. -Функция ПроверитьАдрес(Знач АдресВXML, ПараметрыПроверки = Неопределено) Экспорт - Возврат УправлениеКонтактнойИнформациейСлужебный.ПроверитьАдресВXML(АдресВXML, ПараметрыПроверки); +Функция ПроверитьАдрес(Знач Адрес, ПараметрыПроверки = Неопределено) Экспорт + Возврат УправлениеКонтактнойИнформациейСлужебный.ПроверитьАдрес(Адрес, ПараметрыПроверки); КонецФункции +// Преобразует структуру описывающую адрес во внутренний формат хранения контактной информации JSON. +// +// Параметры: +// ПоляАдреса - Структура - Адрес с разбивкой по полям. Список полей см. РаботаСАдресамиКлиентСервер.ПоляАдреса. +// +// Возвращаемое значение: +// Строка - Адрес во внутренний формат JSON. +// +Функция ПоляАдресаВJSON(ПоляАдреса) Экспорт + + Результат = РаботаСАдресамиКлиентСервер.ОписаниеНовойКонтактнойИнформации( + Перечисления.ТипыКонтактнойИнформации.Адрес); + + ТипУникальныйИдентификатор = Тип("УникальныйИдентификатор"); + + Результат.AddressType = ПоляАдреса.ТипАдреса; + Если ПоляАдреса.ТипАдреса <> РаботаСАдресамиКлиентСервер.МуниципальныйАдрес() + И ПоляАдреса.ТипАдреса <> РаботаСАдресамиКлиентСервер.АдминистративноТерриториальныйАдрес() Тогда + ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Некорректный тип адреса (%1)'"), + ПоляАдреса.ТипАдреса); + ВызватьИсключение ТекстИсключения; + КонецЕсли; + + Если ПоляАдреса.ТипАдреса <> РаботаСАдресамиКлиентСервер.АдминистративноТерриториальныйАдрес() Тогда + Результат.Value = ПоляАдреса.Представление; + Иначе + Результат.Value = ПоляАдреса.МуниципальноеПредставление; + КонецЕсли; + + Результат.Comment = ПоляАдреса.Комментарий; + + Результат.Country = ПоляАдреса.Страна; + Результат.CountryCode = ПоляАдреса.КодСтраны; + + Результат.ZIPcode = ПоляАдреса.Индекс; + + Результат.AreaCode = ПоляАдреса.КодРегиона; + + Результат.Area = ПоляАдреса.Регион; + Результат.AreaType = ПоляАдреса.РегионСокращение; + + Результат.City = ПоляАдреса.Город; + Результат.CityType = ПоляАдреса.ГородСокращение; + + Результат.Street = ПоляАдреса.Улица; + Результат.StreetType = ПоляАдреса.УлицаСокращение; + + Результат.District = ПоляАдреса.Район; + Результат.DistrictType = ПоляАдреса.РайонСокращение; + + Результат.MunDistrict = ПоляАдреса.МуниципальныйРайон; + Результат.MunDistrictType = ПоляАдреса.МуниципальныйРайонСокращение; + + Результат.Settlement = ПоляАдреса.Поселение; + Результат.SettlementType = ПоляАдреса.ПоселениеСокращение; + + Результат.CityDistrict = ПоляАдреса.ВнутригородскойРайон; + Результат.CityDistrictType = ПоляАдреса.ВнутригородскойРайонСокращение; + + Результат.Locality = ПоляАдреса.НаселенныйПункт; + Результат.LocalityType = ПоляАдреса.НаселенныйПунктСокращение; + + Результат.Territory = ПоляАдреса.Территория; + Результат.TerritoryType = ПоляАдреса.ТерриторияСокращение; + + Результат.HouseType = ПоляАдреса.Здание.ТипЗдания; + Результат.HouseNumber = ПоляАдреса.Здание.Номер; + + Если ТипЗнч(ПоляАдреса.Идентификаторы.РегионИдентификатор) = ТипУникальныйИдентификатор + И ЗначениеЗаполнено(ПоляАдреса.Идентификаторы.РегионИдентификатор) Тогда + Результат.AreaID = Строка(ПоляАдреса.Идентификаторы.РегионИдентификатор); + Результат.ID = Результат.AreaID; + КонецЕсли; + + Если ТипЗнч(ПоляАдреса.Идентификаторы.РайонИдентификатор) = ТипУникальныйИдентификатор + И ЗначениеЗаполнено(ПоляАдреса.Идентификаторы.РайонИдентификатор) Тогда + Результат.DistrictID = Строка(ПоляАдреса.Идентификаторы.РайонИдентификатор); + Результат.ID = Результат.DistrictID; + КонецЕсли; + + Если ТипЗнч(ПоляАдреса.Идентификаторы.ГородИдентификатор) = ТипУникальныйИдентификатор + И ЗначениеЗаполнено(ПоляАдреса.Идентификаторы.ГородИдентификатор) Тогда + Результат.CityID = Строка(ПоляАдреса.Идентификаторы.ГородИдентификатор); + Результат.ID = Результат.CityID; + КонецЕсли; + + Если ТипЗнч(ПоляАдреса.Идентификаторы.МуниципальныйРайонИдентификатор) = ТипУникальныйИдентификатор + И ЗначениеЗаполнено(ПоляАдреса.Идентификаторы.МуниципальныйРайонИдентификатор) Тогда + Результат.MunDistrictID = Строка(ПоляАдреса.Идентификаторы.МуниципальныйРайонИдентификатор); + Результат.ID = Результат.MunDistrictID; + КонецЕсли; + + Если ТипЗнч(ПоляАдреса.Идентификаторы.ПоселениеИдентификатор) = ТипУникальныйИдентификатор + И ЗначениеЗаполнено(ПоляАдреса.Идентификаторы.ПоселениеИдентификатор) Тогда + Результат.SettlementID = Строка(ПоляАдреса.Идентификаторы.ПоселениеИдентификатор); + Результат.ID = Результат.SettlementID; + КонецЕсли; + + Если ТипЗнч(ПоляАдреса.Идентификаторы.ВнутригородскойРайонИдентификатор) = ТипУникальныйИдентификатор + И ЗначениеЗаполнено(ПоляАдреса.Идентификаторы.ВнутригородскойРайонИдентификатор) Тогда + Результат.CityDistrictID = Строка(ПоляАдреса.Идентификаторы.ВнутригородскойРайонИдентификатор); + Результат.ID = Результат.CityDistrictID; + КонецЕсли; + + Если ТипЗнч(ПоляАдреса.Идентификаторы.НаселенныйПунктИдентификатор) = ТипУникальныйИдентификатор + И ЗначениеЗаполнено(ПоляАдреса.Идентификаторы.НаселенныйПунктИдентификатор) Тогда + Результат.LocalityID = Строка(ПоляАдреса.Идентификаторы.НаселенныйПунктИдентификатор); + Результат.ID = Результат.LocalityID; + КонецЕсли; + + Если ТипЗнч(ПоляАдреса.Идентификаторы.ТерриторияИдентификатор) = ТипУникальныйИдентификатор + И ЗначениеЗаполнено(ПоляАдреса.Идентификаторы.ТерриторияИдентификатор) Тогда + Результат.TerritoryID = Строка(ПоляАдреса.Идентификаторы.ТерриторияИдентификатор); + Результат.ID = Результат.TerritoryID; + КонецЕсли; + + Если ТипЗнч(ПоляАдреса.Идентификаторы.УлицаИдентификатор) = ТипУникальныйИдентификатор + И ЗначениеЗаполнено(ПоляАдреса.Идентификаторы.УлицаИдентификатор) Тогда + Результат.StreetID = Строка(ПоляАдреса.Идентификаторы.УлицаИдентификатор); + Результат.ID = Результат.StreetID; + КонецЕсли; + + Если ТипЗнч(ПоляАдреса.ИдентификаторДома) = ТипУникальныйИдентификатор + И ЗначениеЗаполнено(ПоляАдреса.ИдентификаторДома) Тогда + Результат.HouseID = Строка(ПоляАдреса.ИдентификаторДома); + Результат.ID = Результат.HouseID; + КонецЕсли; + + Если ТипЗнч(ПоляАдреса.ИдентификаторАдресногоОбъекта) = ТипУникальныйИдентификатор + И ЗначениеЗаполнено(ПоляАдреса.ИдентификаторАдресногоОбъекта) Тогда + Результат.ID = Строка(ПоляАдреса.ИдентификаторАдресногоОбъекта); + КонецЕсли; + + Для Каждого ТекущийКорпус Из ПоляАдреса.Корпуса Цикл + Результат.Buildings.Добавить( + Новый Структура("Type, Number", ТекущийКорпус.ТипКорпуса, ТекущийКорпус.Номер)); + КонецЦикла; + + Для Каждого ТекущееПомещение Из ПоляАдреса.Помещения Цикл + Результат.Apartments.Добавить( + Новый Структура("Type, Number", ТекущееПомещение.ТипПомещения, ТекущееПомещение.Номер)); + КонецЦикла; + + // Заполнение кода КЛАДР последнего в иерархии адресного объекта. + Если Не ПустаяСтрока(ПоляАдреса.КодыКЛАДР.Улица) Тогда + Результат.CodeKLADR = ПоляАдреса.КодыКЛАДР.Улица; + ИначеЕсли Не ПустаяСтрока(ПоляАдреса.КодыКЛАДР.НаселенныйПункт) Тогда + Результат.CodeKLADR = ПоляАдреса.КодыКЛАДР.НаселенныйПункт; + ИначеЕсли Не ПустаяСтрока(ПоляАдреса.КодыКЛАДР.Город) Тогда + Результат.CodeKLADR = ПоляАдреса.КодыКЛАДР.Город; + ИначеЕсли Не ПустаяСтрока(ПоляАдреса.КодыКЛАДР.Район) Тогда + Результат.CodeKLADR = ПоляАдреса.КодыКЛАДР.Район; + ИначеЕсли Не ПустаяСтрока(ПоляАдреса.КодыКЛАДР.Регион) Тогда + Результат.CodeKLADR = ПоляАдреса.КодыКЛАДР.Регион; + КонецЕсли; + + Результат.OKTMO = ПоляАдреса.ДополнительныеКоды.ОКТМО; + Результат.OKATO = ПоляАдреса.ДополнительныеКоды.ОКАТО; + Результат.IFNSFLCode = ПоляАдреса.ДополнительныеКоды.КодИФНСФЛ; + Результат.IFNSULCode = ПоляАдреса.ДополнительныеКоды.КодИФНСЮЛ; + Результат.IFNSFLAreaCode = ПоляАдреса.ДополнительныеКоды.КодУчасткаИФНСФЛ; + Результат.IFNSULAreaCode = ПоляАдреса.ДополнительныеКоды.КодУчасткаИФНСЮЛ; + + Если ПустаяСтрока(Результат.ID) Тогда + + // Если в адресе не заполнены идентификаторы, тогда заполнить их. + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда + МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); + МодульАдресныйКлассификаторСлужебный.УстановитьИдентификаторыАдреса(Результат); + КонецЕсли; + + КонецЕсли; + + Если Не ЗначениеЗаполнено(Результат.Value) Тогда + РаботаСАдресамиКлиентСервер.ОбновитьПредставлениеАдреса(Результат, Ложь); + КонецЕсли; + + Возврат УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(Результат); + +КонецФункции // Возвращает адрес в виде строки XML в соответствии со структурой XDTO Контактная информация и Адрес. // // Параметры: // ИдентификаторАдреса - Строка - Глобальный уникальный идентификационный код адресного объекта. // ДополнительнаяИнформацияАдреса - Структура - Поля адреса, которые будет добавлены в адрес: +// * АдресВJSON - Булево - Возвращает адрес в формате JSON. // * ДополнительнаяИнформация - Строка - Комментарий адреса. // * Страна - Строка - Наименование страны адреса. // * НомерДома - Строка - Номер дома. @@ -214,9 +380,13 @@ // * НомерСтроения - Строка - Номер строения. // * ПочтовыйИндекс - Строка - Почтовый индекс адреса. // * АбонентскийЯщик - Строка - Абонентский ящик адреса. +// * Муниципальный - Булево - Если Истина, адрес будет сформирован в муниципальном формате. +// По умолчанию, Ложь. // // Возвращаемое значение: -// Строка - XML в соответствии со структурой XDTO Контактная информация и Адрес. +// Строка, Неопределено - XML в соответствии со структурой XDTO пакетов Контактная информация и Адрес. +// JSON, если в ДополнительнаяИнформацияАдреса параметр АдресВJSON установлен в Истина. +// Неопределено, если не удалось сформировать адрес по идентификатору. // Функция АдресПоИдентификатору(ИдентификаторАдреса, ДополнительнаяИнформацияАдреса = Неопределено) Экспорт @@ -224,118 +394,85 @@ ДополнительнаяИнформацияАдреса = Новый Структура(); КонецЕсли; - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); + Муниципальный = ?(ДополнительнаяИнформацияАдреса.Свойство("Муниципальный"), Булево(ДополнительнаяИнформацияАдреса.Муниципальный), Ложь); - Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); - - Если ДополнительнаяИнформацияАдреса.Свойство("ДополнительнаяИнформация") Тогда - Результат.Комментарий = ДополнительнаяИнформацияАдреса.ДополнительнаяИнформация; - КонецЕсли; - - Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Адрес")); - Адрес = Результат.Состав; - - Если ДополнительнаяИнформацияАдреса.Свойство("Страна") Тогда - Адрес.Страна = Строка(ДополнительнаяИнформацияАдреса.Страна); - Иначе - Адрес.Страна = Строка(ОсновнаяСтрана()); - КонецЕсли; - - Адрес.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен(), "АдресРФ")); - АдресРФ = Адрес.Состав; - - Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - Возврат Результат; - КонецЕсли; + Сведения = Новый Структура(); + Сведения.Вставить("Идентификатор", ИдентификаторАдреса); + Сведения.Вставить("Муниципальный", Муниципальный); МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); + ПолученныеАдрес = МодульАдресныйКлассификаторСлужебный.АктуальныеАдресныеСведения(Сведения); - АдресРФИзСервиса = МодульАдресныйКлассификаторСлужебный.АктуальныеАдресныеСведения(ИдентификаторАдреса).Данные; + Если ПолученныеАдрес.Отказ Тогда + Возврат Неопределено; + КонецЕсли; - // Переносим сведения - Для каждого ЗначениеСвойства Из АдресРФИзСервиса.Свойства() Цикл - Если ЗначениеСвойства.Имя = "СвРайМО" И АдресРФИзСервиса[ЗначениеСвойства.Имя] <> Неопределено Тогда - АдресРФ.СвРайМО = ФабрикаXDTO.Создать(АдресРФ.Свойства().Получить("СвРайМО").Тип); - АдресРФ.СвРайМО.Район = АдресРФИзСервиса[ЗначениеСвойства.Имя].Район; - АдресРФ.СвРайМО.СвМО = АдресРФИзСервиса[ЗначениеСвойства.Имя].СвМО; - ИначеЕсли ЗначениеСвойства.Имя <> "ДопАдрЭл" И АдресРФИзСервиса[ЗначениеСвойства.Имя] <> Неопределено Тогда - АдресРФ[ЗначениеСвойства.Имя] = АдресРФИзСервиса[ЗначениеСвойства.Имя]; - ИначеЕсли ЗначениеСвойства.Имя = "ДопАдрЭл" Тогда - Для каждого ЗначениеДополнительногоАдресногоЭлемента Из АдресРФИзСервиса.ДопАдрЭл Цикл - Если ЗначениеДополнительногоАдресногоЭлемента.ТипАдрЭл <> Неопределено Тогда - Запись = АдресРФ.ДопАдрЭл.Добавить(ФабрикаXDTO.Создать(АдресРФ.ДопАдрЭл.ВладеющееСвойство.Тип)); - Запись.Значение = ЗначениеДополнительногоАдресногоЭлемента.Значение; - Запись.ТипАдрЭл = ЗначениеДополнительногоАдресногоЭлемента.ТипАдрЭл; - КонецЕсли; - КонецЦикла; - КонецЕсли; - КонецЦикла; - - // Здания и помещения - ОписаниеСтроки = Новый ОписаниеТипов("Строка"); - - ТаблицаЗданий = Новый ТаблицаЗначений(); - ТаблицаЗданий.Колонки.Добавить("Тип", ОписаниеСтроки); - ТаблицаЗданий.Колонки.Добавить("Значение", ОписаниеСтроки); - ТаблицаЗданий.Колонки.Добавить("ПутьXPath", ОписаниеСтроки); - - ТаблицаПомещений = Новый ТаблицаЗначений(); - ТаблицаПомещений.Колонки.Добавить("Тип", ОписаниеСтроки); - ТаблицаПомещений.Колонки.Добавить("Значение", ОписаниеСтроки); - ТаблицаПомещений.Колонки.Добавить("ПутьXPath", ОписаниеСтроки); + Адрес = ПолученныеАдрес.Данные; Если ДополнительнаяИнформацияАдреса.Свойство("НомерДома") И ЗначениеЗаполнено(ДополнительнаяИнформацияАдреса.НомерДома) Тогда - СтрокаЗдания = ТаблицаЗданий.Вставить(0); ОписаниеДома = РазделитьДомаСтроения(ДополнительнаяИнформацияАдреса.НомерДома, НСтр("ru='Дом'")); - СтрокаЗдания.Тип = ОписаниеДома.Тип; - СтрокаЗдания.Значение = ОписаниеДома.Номер; + Адрес.Вставить("houseType", ОписаниеДома.Тип); + Адрес.Вставить("houseNumber", ОписаниеДома.Номер); + Адрес.Вставить("houseId", ""); КонецЕсли; Если ДополнительнаяИнформацияАдреса.Свойство("НомерСтроения") И ЗначениеЗаполнено(ДополнительнаяИнформацияАдреса.НомерСтроения) Тогда - СтрокаЗдания = ТаблицаЗданий.Вставить(0); + ОписаниеСтроения = РазделитьДомаСтроения(ДополнительнаяИнформацияАдреса.НомерСтроения, НСтр("ru='Корпус'")); - СтрокаЗдания.Тип = ОписаниеСтроения.Тип; - СтрокаЗдания.Значение = ОписаниеСтроения.Номер; + Строение = УправлениеКонтактнойИнформациейКлиентСервер.ЗначениеСтроенияИлиПомещения(ОписаниеСтроения.Тип, ОписаниеСтроения.Номер); + Адрес.buildings.Добавить(Строение); + КонецЕсли; Если ДополнительнаяИнформацияАдреса.Свойство("НомерОфиса") И ЗначениеЗаполнено(ДополнительнаяИнформацияАдреса.НомерОфиса) Тогда - СтрокаПомещений = ТаблицаПомещений.Вставить(0); + ОписаниеПомещения = РазделитьДомаСтроения(ДополнительнаяИнформацияАдреса.НомерОфиса, НСтр("ru='Офис'")); - СтрокаПомещений.Тип = ОписаниеПомещения.Тип; - СтрокаПомещений.Значение = ОписаниеПомещения.Номер; + Помещение = УправлениеКонтактнойИнформациейКлиентСервер.ЗначениеСтроенияИлиПомещения(ОписаниеПомещения.Тип, ОписаниеПомещения.Номер); + Адрес.apartments.Добавить(Помещение); + КонецЕсли; Если ДополнительнаяИнформацияАдреса.Свойство("АбонентскийЯщик") И ЗначениеЗаполнено(ДополнительнаяИнформацияАдреса.АбонентскийЯщик) Тогда - СтрокаПомещений = ТаблицаПомещений.Вставить(0); - ОписаниеПомещения = РазделитьДомаСтроения(ДополнительнаяИнформацияАдреса.АбонентскийЯщик, НСтр("ru='А/Я'")); - СтрокаПомещений.Тип = ОписаниеПомещения.Тип; - СтрокаПомещений.Значение = ОписаниеПомещения.Номер; + + ОписаниеАбонентскийЯщик = РазделитьДомаСтроения(ДополнительнаяИнформацияАдреса.АбонентскийЯщик, НСтр("ru='А/Я'")); + АбонентскийЯщик = УправлениеКонтактнойИнформациейКлиентСервер.ЗначениеСтроенияИлиПомещения(ОписаниеАбонентскийЯщик.Тип, ОписаниеАбонентскийЯщик.Номер); + Адрес.apartments.Добавить(АбонентскийЯщик); + КонецЕсли; + + Если ДополнительнаяИнформацияАдреса.Свойство("ПочтовыйИндекс") И ЗначениеЗаполнено(ДополнительнаяИнформацияАдреса.ПочтовыйИндекс) Тогда + Адрес.ZIPcode = ДополнительнаяИнформацияАдреса.ПочтовыйИндекс; КонецЕсли; - Обработки.РасширенныйВводКонтактнойИнформации.ЗданияИПомещенияАдреса(АдресРФ, - Новый Структура("Здания, Помещения", ТаблицаЗданий, ТаблицаПомещений)); - - // Индекс - Если ДополнительнаяИнформацияАдреса.Свойство("ПочтовыйИндекс") И ДополнительнаяИнформацияАдреса.Свойство("ПочтовыйИндекс") Тогда - Обработки.РасширенныйВводКонтактнойИнформации.ПочтовыйИндексАдреса(АдресРФ, ДополнительнаяИнформацияАдреса.ПочтовыйИндекс); + Если ДополнительнаяИнформацияАдреса.Свойство("ДополнительнаяИнформация") И ЗначениеЗаполнено(ДополнительнаяИнформацияАдреса.ДополнительнаяИнформация) Тогда + Адрес.comment = ДополнительнаяИнформацияАдреса.ДополнительнаяИнформация; КонецЕсли; - // Представление и свободный ввод адреса. - ВидИнформации = Новый Структура(); - ВидИнформации.Вставить("ФорматАдреса", "ФИАС"); - ВидИнформации.Вставить("ВключатьСтрануВПредставление", Ложь); - РасчетноеПредставление = УправлениеКонтактнойИнформациейСлужебный.ПредставлениеАдреса(Адрес, ВидИнформации); - Результат.Представление = РасчетноеПредставление; + Если ДополнительнаяИнформацияАдреса.Свойство("Страна") И ЗначениеЗаполнено(ДополнительнаяИнформацияАдреса.Страна) Тогда + Адрес.country = ВРег(ДополнительнаяИнформацияАдреса.Страна); + КонецЕсли; - Возврат УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOВXML(Результат); + ВидИнформации = Новый Структура("Тип", Перечисления.ТипыКонтактнойИнформации.Адрес); + РасчетноеПредставление = УправлениеКонтактнойИнформациейСлужебный.ПредставлениеКонтактнойИнформации(Адрес, ВидИнформации); + Адрес.value = РасчетноеПредставление; + + Если ДополнительнаяИнформацияАдреса.Свойство("АдресВJSON") И ДополнительнаяИнформацияАдреса.АдресВJSON = Истина Тогда + + Возврат УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(Адрес); + + КонецЕсли; + + Возврат УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзJSONВXML(Адрес, Перечисления.ТипыКонтактнойИнформации.Адрес); КонецФункции //////////////////////////////////////////////////////////////////////////////// // Обратная совместимость. +#Область УстаревшиеПроцедурыИФункции + +// Устарела. Следует использовать РаботаСАдресами.СведенияОбАдресе. // Преобразует данные формата XML в предыдущий формат контактной информации. // // Параметры: @@ -356,6 +493,7 @@ Возврат Данные; КонецФункции +// Устарела. Следует использовать РаботаСАдресами.СведенияОбАдресе. // Преобразует данные нового формата XML контактной информации в структуру старого формата. // // Параметры: @@ -424,19 +562,68 @@ КонецФункции +// Устарела. Следует использовать РаботаСАдресами.СведенияОбАдресе. +// Преобразует адреса нового формата XML ФИАС в адрес формата КЛАДР. +// +// Параметры: +// Данные - Строка - строка XML соответствующая XDTO пакету Адрес. +// +// Возвращаемое значение: +// Структура - набор пар ключ-значение. Состав свойств для адреса: +// ** Страна - Строка - Представление страны. +// ** КодСтраны - Строка - Код страны по ОКСМ. +// ** Индекс - Строка - Почтовый индекс (только для адресов РФ). +// ** Регион - Строка - Представление региона РФ (только для адресов РФ). +// ** КодРегиона - Строка - Код региона РФ (только для адресов РФ). +// ** РегионСокращение - Строка - Сокращение региона. +// ** Район - Строка - Представление района (только для адресов РФ). +// ** РайонСокращение - Строка - Сокращение района. +// ** Город - Строка - Представление города (только для адресов РФ). +// ** ГородСокращение - Строка - Сокращение города (только для адресов РФ). +// ** НаселенныйПункт - Строка - Представление населенного пункта (только для адресов РФ). +// ** НаселенныйПунктСокращение - Строка - Сокращение населенного пункта. +// ** Улица - Строка - Представление улицы (только для адресов РФ). +// ** УлицаСокращение - Строка - Сокращение улицы. +// ** ТипДома - Строка - Тип дома см. РаботаСАдресамиКлиентСервер.ТипыОбъектовАдресацииАдресаРФ. +// ** Дом - Строка - Представление дома (только для адресов РФ). +// ** ТипКорпуса - Строка - Тип корпуса см. РаботаСАдресамиКлиентСервер.ТипыОбъектовАдресацииАдресаРФ. +// ** Корпус - Строка - Представление корпуса (только для адресов РФ). +// ** ТипКвартиры - Строка - Тип квартиры см. РаботаСАдресамиКлиентСервер.ТипыОбъектовАдресацииАдресаРФ. +// ** Квартира - Строка - Представление квартиры (только для адресов РФ). +// ** АдресРФ - Булево - Если Истина, то адрес российский. +// ** Представление - Строка - Представление адреса. +// +Функция АдресВФорматеКЛАДР(Знач Данные) Экспорт + + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(Данные) Тогда + // Новый формат КИ + Результат = УправлениеКонтактнойИнформациейКлиентСервер.СтруктураЗначенийПолей( + ПредыдущийФорматКонтактнойИнформацииXML(Данные)); + Представление = УправлениеКонтактнойИнформацией.ПредставлениеКонтактнойИнформации(Данные); + + ИначеЕсли ПустаяСтрока(Данные) Тогда + // Генерируем пустую структуру по виду + Результат = РаботаСАдресамиКлиентСервер.СтруктураКонтактнойИнформацииПоТипу( + Перечисления.ТипыКонтактнойИнформации.Адрес); + Представление = ""; + КонецЕсли; + + Если Результат.Свойство("Страна") И СтрСравнить(Результат.Страна, РаботаСАдресамиКлиентСервер.ОсновнаяСтрана().Наименование) = 0 Тогда + Результат.Вставить("АдресРФ", Истина); + Иначе + Результат.Вставить("АдресРФ", Ложь); + КонецЕсли; + Результат.Вставить("Представление", Представление); + + Возврат Результат; +КонецФункции + +#КонецОбласти + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс -// Определяет страну по умолчанию. -// -// Возвращаемое значение: -// СправочникСсылка.СтраныМира - Ссылка на элемент справочника страны мира страны по умолчанию. -// -Функция ОсновнаяСтрана() Экспорт - Возврат Справочники.СтраныМира.Россия; -КонецФункции - // Возвращает пространство имен для оперирования с XDTO контактной информации. // // Возвращаемое значение: @@ -667,6 +854,424 @@ #Область СлужебныеПроцедурыИФункции +// Внутреннее для сериализации. +Функция КонвертироватьАдресИзJSONВXML(Знач ЗначенияПолей, Знач Представление, Знач ОжидаемыйТип = Неопределено) Экспорт + + // Старый формат через разделитель строк и равенство. + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); + + Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); + Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Адрес")); + + НазваниеОсновнойСтраны = ВРег(РаботаСАдресамиКлиентСервер.ОсновнаяСтрана().Наименование); + + // Национальный + НациональныйАдрес = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен(), "АдресРФ")); + + // Общий состав + Адрес = Результат.Состав; + Адрес.Страна = НазваниеОсновнойСтраны; // Страна по умолчанию + АдресНациональный = Истина; + + ПолеПредставления = ""; + + Для Каждого ЭлементСписка Из ЗначенияПолей Цикл + + Если ПустаяСтрока(ЭлементСписка.Значение) Тогда + Продолжить; + КонецЕсли; + + ИмяПоля = ВРег(ЭлементСписка.Ключ); + + Если ИмяПоля="ZIPCODE" Тогда + ЭлементИндекс = СоздатьДопАдрЭлемента(НациональныйАдрес); + ЭлементИндекс.ТипАдрЭл = РаботаСАдресамиКлиентСервер.КодСериализацииПочтовогоИндекса(); + ЭлементИндекс.Значение = ЭлементСписка.Значение; + + ИначеЕсли ИмяПоля = "COMMENT" Тогда + Результат.Комментарий = ЭлементСписка.Значение; + + ИначеЕсли ИмяПоля = "COUNTRY" Тогда + Адрес.Страна = Строка(ЭлементСписка.Значение); + Если ВРег(ЭлементСписка.Значение) <> НазваниеОсновнойСтраны Тогда + АдресНациональный = Ложь; + КонецЕсли; + + ИначеЕсли ИмяПоля = "COUNTRYCODE" Тогда + // действия не требуется + + ИначеЕсли ИмяПоля = "AREACODE" Тогда + Если ПустаяСтрока(НациональныйАдрес.СубъектРФ) Тогда + НациональныйАдрес.СубъектРФ = РегионКода(ЭлементСписка.Значение); + КонецЕсли; + + ИначеЕсли ИмяПоля = "AREA" Тогда + НациональныйАдрес.СубъектРФ = ЭлементСписка.Значение + " " + ЗначенияПолей.AreaType; + + ИначеЕсли ИмяПоля = "DISTRICT" Тогда + Если НациональныйАдрес.СвРайМО = Неопределено Тогда + НациональныйАдрес.СвРайМО = ФабрикаXDTO.Создать(НациональныйАдрес.Тип().Свойства.Получить("СвРайМО").Тип) + КонецЕсли; + НациональныйАдрес.СвРайМО.Район = СокрЛП(ЭлементСписка.Значение + " " + ЗначенияПолей.DistrictType); + + ИначеЕсли ИмяПоля = "CITY" Тогда + Если ЗначениеЗаполнено(ЭлементСписка.Значение) Тогда + НациональныйАдрес.Город = СокрЛП(ЭлементСписка.Значение + " " + ЗначенияПолей.CityType); + КонецЕсли; + + ИначеЕсли ИмяПоля = "TERRITORY" Тогда + + ПутьXPath = РаботаСАдресамиКлиентСервер.XPathДополнительногоОбъектаАдресации(90, ЗначенияПолей.TerritoryType); + Обработки.РасширенныйВводКонтактнойИнформации.УстановитьXDTOРеквизитОбъекта(НациональныйАдрес, ПутьXPath, + ЭлементСписка.Значение + " " + ЗначенияПолей.TerritoryType); + + ИначеЕсли ИмяПоля = "LOCALITY" Тогда + НациональныйАдрес.НаселПункт = СокрЛП(ЭлементСписка.Значение + " " + ЗначенияПолей.LocalityType); + + ИначеЕсли ИмяПоля = "CITYDISTRICT" Тогда + НациональныйАдрес.ВнутригРайон = СокрЛП(ЭлементСписка.Значение + " " + ЗначенияПолей.CityDistrictType); + + ИначеЕсли ИмяПоля = "STREET" Тогда + НациональныйАдрес.Улица = СокрЛП(ЭлементСписка.Значение + " " + ЗначенияПолей.StreetType); + + ИначеЕсли ИмяПоля = "HOUSETYPE" Тогда + + ЭлементДом = СоздатьНомерДопАдрЭлемента(НациональныйАдрес); + ЭлементДом.Тип = РаботаСАдресамиКлиентСервер.КодСериализацииОбъектаАдресации(ЭлементСписка.Значение); + Если ЭлементДом.Тип = Неопределено Тогда + ЭлементДом.Тип = РаботаСАдресамиКлиентСервер.КодСериализацииОбъектаАдресации("Дом"); + КонецЕсли; + ЭлементДом.Значение = ЗначенияПолей.HouseNumber; + + ИначеЕсли ИмяПоля = "BUILDINGS" Тогда + + Для каждого СписокСтроение Из ЭлементСписка.Значение Цикл + + // тип корпуса + ЭлементКорпус = СоздатьНомерДопАдрЭлемента(НациональныйАдрес); + ЭлементКорпус.Тип = РаботаСАдресамиКлиентСервер.КодСериализацииОбъектаАдресации(СписокСтроение.Type); + Если ЭлементКорпус.Тип = Неопределено Тогда + ЭлементКорпус.Тип = РаботаСАдресамиКлиентСервер.КодСериализацииОбъектаАдресации("Корпус"); + КонецЕсли; + ЭлементКорпус.Значение = СписокСтроение.Number; + + КонецЦикла; + + ИначеЕсли ИмяПоля = "APARTMENTS" Тогда + + Для каждого СписокСтроение Из ЭлементСписка.Значение Цикл + + // тип квартиры + ЭлементКвартира = СоздатьНомерДопАдрЭлемента(НациональныйАдрес); + ЭлементКвартира.Тип = РаботаСАдресамиКлиентСервер.КодСериализацииОбъектаАдресации(СписокСтроение.Type); + Если ЭлементКвартира.Тип = Неопределено Тогда + ЭлементКвартира.Тип = РаботаСАдресамиКлиентСервер.КодСериализацииОбъектаАдресации("Квартира"); + КонецЕсли; + ЭлементКвартира.Значение = СписокСтроение.Number; + + КонецЦикла; + + ИначеЕсли ИмяПоля = "OKTMO" Тогда + НациональныйАдрес.ОКТМО = ЭлементСписка.Значение; + + ИначеЕсли ИмяПоля = "ОКАТО" Тогда + НациональныйАдрес.ОКАТО = ЭлементСписка.Значение; + + ИначеЕсли ИмяПоля = "VALUE" Тогда + ПолеПредставления = СокрЛП(ЭлементСписка.Значение); + + КонецЕсли; + + КонецЦикла; + + // Представление с приоритетами. + Если Не ПустаяСтрока(Представление) Тогда + Результат.Представление = Представление; + Иначе + Результат.Представление = ПолеПредставления; + КонецЕсли; + + Адрес.Состав = ?(АдресНациональный, НациональныйАдрес, Результат.Представление); + + Возврат Результат; +КонецФункции + +// Преобразует формат из XML в JSON +// +Функция КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация, Знач Тип = Неопределено, Представление = "") Экспорт + + Если Тип <> Неопределено И ТипЗнч(Тип) <> Тип("ПеречислениеСсылка.ТипыКонтактнойИнформации") Тогда + Тип = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ТипВидаКонтактнойИнформации(Тип); + КонецЕсли; + + Если Тип = Неопределено Тогда + + Если ТипЗнч(КонтактнаяИнформация) = Тип("Строка") Тогда + Тип = УправлениеКонтактнойИнформацией.ТипКонтактнойИнформации(КонтактнаяИнформация); + ИначеЕсли ТипЗнч(КонтактнаяИнформация) = Тип("ОбъектXDTO") Тогда + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); + + НайденТип = ?(КонтактнаяИнформация.Состав = Неопределено, Неопределено, КонтактнаяИнформация.Состав.Тип()); + Тип = УправлениеКонтактнойИнформациейСлужебный.СоответствиеXDTOТиповКонтактнойИнформации(НайденТип); + + КонецЕсли; + + КонецЕсли; + + Если Метаданные.ОбщиеМодули.Найти("РаботаСАдресамиКлиентСервер") <> Неопределено Тогда + МодульРаботаСАдресамиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресамиКлиентСервер"); + Результат = МодульРаботаСАдресамиКлиентСервер.ОписаниеНовойКонтактнойИнформации(Тип); + ОсновнаяСтрана = МодульРаботаСАдресамиКлиентСервер.ОсновнаяСтрана(); + Иначе + Результат = УправлениеКонтактнойИнформациейКлиентСервер.ОписаниеНовойКонтактнойИнформации(Тип); + ОсновнаяСтрана = ""; + КонецЕсли; + + НаименованиеСтраны = ""; + Формат9Запятых = Ложь; + ЭлементыАдреса = Новый Соответствие; + + Если ТипЗнч(КонтактнаяИнформация) = Тип("Строка") Тогда + + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнформация) Тогда + + РезультатПреобразования = Новый Структура; + XDTOКонтактнаяИнформация = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзXML(КонтактнаяИнформация, Тип, РезультатПреобразования, Представление); + Результат.Value = XDTOКонтактнаяИнформация.Представление; + Результат.Comment = XDTOКонтактнаяИнформация.Комментарий; + Иначе + Если СтрЧислоВхождений(КонтактнаяИнформация, ",") = 9 Тогда + Формат9Запятых = Истина; + АдресРФ = КонтактнаяИнформация; + Иначе + XDTOКонтактнаяИнформация = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзXML(КонтактнаяИнформация, Тип,, Представление); + Результат.Value = XDTOКонтактнаяИнформация.Представление; + Результат.Comment = XDTOКонтактнаяИнформация.Комментарий; + КонецЕсли; + КонецЕсли; + + ИначеЕсли ТипЗнч(КонтактнаяИнформация) = Тип("ОбъектXDTO") Тогда + + XDTOКонтактнаяИнформация = КонтактнаяИнформация; + Результат.Value = XDTOКонтактнаяИнформация.Представление; + Результат.Comment = XDTOКонтактнаяИнформация.Комментарий; + + КонецЕсли; + + Если Тип <> Перечисления.ТипыКонтактнойИнформации.Адрес И Тип <> Перечисления.ТипыКонтактнойИнформации.Телефон Тогда + Возврат Результат; + КонецЕсли; + + Если НЕ Формат9Запятых Тогда + + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); + Состав = XDTOКонтактнаяИнформация.Состав; + + Если Состав = Неопределено Тогда + Возврат Результат; + КонецЕсли; + + XDTOТип = Состав.Тип(); + + Если XDTOТип = ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") Тогда + + Результат.Вставить("Country", Состав.Страна); + Страна = ?(ПустаяСтрока(Состав.Страна), + ОсновнаяСтрана, + Справочники.СтраныМира.НайтиПоНаименованию(Состав.Страна, Истина)); + НаименованиеСтраны = Страна.Наименование; + Результат.Вставить("CountryCode", СокрЛП(Страна.Код)); + + АдресРФ = Состав.Состав; + + ИначеЕсли + XDTOТип = ФабрикаXDTO.Тип(УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(), "НомерТелефона") + Или XDTOТип = ФабрикаXDTO.Тип(УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(), "НомерФакса") Тогда + + Результат.CountryCode = Состав.КодСтраны; + Результат.AreaCode = Состав.КодГорода; + Результат.Number = Состав.Номер; + Результат.ExtNumber = Состав.Добавочный; + + Возврат Результат; + + ИначеЕсли XDTOТип = ФабрикаXDTO.Тип(ПространствоИмен(), "АдресРФ") Тогда + АдресРФ = Состав; + Иначе + Возврат Результат; + КонецЕсли; + + Если АдресРФ = Неопределено Тогда + Возврат Результат; + ИначеЕсли ТипЗнч(АдресРФ) = Тип("Строка") Тогда + + Если СтрЧислоВхождений(АдресРФ, ",") = 9 Тогда + + Если УправлениеКонтактнойИнформацией.ЭтоСтранаУчастникЕАЭС(Результат.Country) Тогда + Результат.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.АдресЕАЭС(); + Иначе + Результат.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.ИностранныйАдрес(); + КонецЕсли; + + ЧастиАдреса = СтрРазделить(АдресРФ, ","); + Результат.ZIPCode = ЧастиАдреса[1]; + + НаименованиеСокращение = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(ЧастиАдреса[2]); + Результат.Area = НаименованиеСокращение.Наименование; + Результат.AreaType = НаименованиеСокращение.Сокращение; + + НаименованиеСокращение = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(ЧастиАдреса[3]); + Результат.District = НаименованиеСокращение.Наименование; + Результат.DistrictType = НаименованиеСокращение.Сокращение; + + НаименованиеСокращение = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(ЧастиАдреса[4]); + Результат.City = НаименованиеСокращение.Наименование; + Результат.CityType = НаименованиеСокращение.Сокращение; + + НаименованиеСокращение = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(ЧастиАдреса[5]); + Результат.Locality = НаименованиеСокращение.Наименование; + Результат.LocalityType = НаименованиеСокращение.Сокращение; + + НаименованиеСокращение = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(ЧастиАдреса[6]); + Результат.Street = НаименованиеСокращение.Наименование; + Результат.StreetType = НаименованиеСокращение.Сокращение; + + НаименованиеСокращение = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(ЧастиАдреса[7]); + Результат.HouseNumber = НаименованиеСокращение.Сокращение; + Результат.HouseType = НаименованиеСокращение.Наименование; + + Если ЗначениеЗаполнено(ЧастиАдреса[8]) Тогда + НаименованиеСокращение = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(ЧастиАдреса[8]); + Результат.Buildings.Добавить(УправлениеКонтактнойИнформациейКлиентСервер.ЗначениеСтроенияИлиПомещения( + НаименованиеСокращение.Наименование, НаименованиеСокращение.Сокращение)); + КонецЕсли; + + Если ЗначениеЗаполнено(ЧастиАдреса[9]) Тогда + НаименованиеСокращение = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(ЧастиАдреса[9]); + Результат.Apartments.Добавить(УправлениеКонтактнойИнформациейКлиентСервер.ЗначениеСтроенияИлиПомещения( + НаименованиеСокращение.Наименование, НаименованиеСокращение.Сокращение)); + КонецЕсли; + КонецЕсли; + Иначе + + Если ЗначениеЗаполнено(АдресРФ.Адрес_по_документу) Тогда + Результат.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.АдресВСвободнойФорме(); + Иначе + Результат.AddressType = РаботаСАдресамиКлиентСервер.АдминистративноТерриториальныйАдрес(); + КонецЕсли; + + Результат.Country = НаименованиеСтраны; + Результат.ZIPCode = Обработки.РасширенныйВводКонтактнойИнформации.ПочтовыйИндексАдреса(АдресРФ); + Результат.OKTMO = Формат(АдресРФ.ОКТМО, "ЧГ=0"); + Результат.OKATO = Формат(АдресРФ.ОКАТО, "ЧГ=0"); + + СубъектРФ = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(АдресРФ.СубъектРФ); + Результат.Area = Строка(СубъектРФ.Наименование); + Результат.AreaType = Строка(СубъектРФ.Сокращение); + + РайонАдреса = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(РайонАдреса(АдресРФ)); + Результат.District = Строка(РайонАдреса.Наименование); + Результат.DistrictType = Строка(РайонАдреса.Сокращение); + + Город = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(АдресРФ.Город); + Результат.City = Строка(Город.Наименование); + Результат.CityType = Строка(Город.Сокращение); + + НаселПункт = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(АдресРФ.НаселПункт); + Результат.Locality = Строка(НаселПункт.Наименование); + Результат.LocalityType = Строка(НаселПункт.Сокращение); + + Улица = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(АдресРФ.Улица); + Результат.Street = Строка(Улица.Наименование); + Результат.StreetType = Строка(Улица.Сокращение); + + ВнутригРайон = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(АдресРФ.ВнутригРайон); + Результат.CityDistrict = Строка(ВнутригРайон.Наименование); + Результат.CityDistrictType = Строка(ВнутригРайон.Сокращение); + + ЗначениеДополнительныхЭлементов = Обработки.РасширенныйВводКонтактнойИнформации.ЗначениеДополнительныхЭлементов(АдресРФ); + Если ЗначениеЗаполнено(ЗначениеДополнительныхЭлементов.ДополнительныйЭлемент) Тогда + ДополнительныйЭлемент = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(ЗначениеДополнительныхЭлементов.ДополнительныйЭлемент); + Результат.Territory = Строка(ДополнительныйЭлемент.Наименование); + Результат.TerritoryType = Строка(ДополнительныйЭлемент.Сокращение); + КонецЕсли; + Если ЗначениеЗаполнено(ЗначениеДополнительныхЭлементов.ПодчиненныйЭлемент) Тогда + ПодчиненныйЭлемент = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(ЗначениеДополнительныхЭлементов.ПодчиненныйЭлемент); + Результат.Street = Строка(ПодчиненныйЭлемент.Наименование); + Результат.StreetType = Строка(ПодчиненныйЭлемент.Сокращение); + КонецЕсли; + + ЗданияИПомещения = Обработки.РасширенныйВводКонтактнойИнформации.ЗданияИПомещенияАдреса(АдресРФ); + Для каждого Здание Из ЗданияИПомещения.Здания Цикл + Если Здание.Вид = 1 Тогда + Результат.HouseType = Здание.Тип; + Результат.HouseNumber = Здание.Значение; + Иначе + Результат.Buildings.Добавить(УправлениеКонтактнойИнформациейКлиентСервер.ЗначениеСтроенияИлиПомещения(Здание.Тип, Здание.Значение)); + КонецЕсли; + КонецЦикла; + + Для каждого Помещение Из ЗданияИПомещения.Помещения Цикл + Результат.Apartments.Добавить(УправлениеКонтактнойИнформациейКлиентСервер.ЗначениеСтроенияИлиПомещения(Помещение.Тип, Помещение.Значение)); + КонецЦикла; + + КонецЕсли; + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда + МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); + МодульАдресныйКлассификаторСлужебный.УстановитьИдентификаторыАдреса(Результат); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Читает и устанавливает район адреса. +// +// Параметры: +// XDTOАдрес - ОбъектXDTO - Контактная информация или XDTO адреса. +// НовоеЗначение - Строка - устанавливаемое значение. +// +// Возвращаемое значение: +// Строка - новое значение. +// +Функция РайонАдреса(XDTOАдрес, НовоеЗначение = Неопределено) + + Если НовоеЗначение = Неопределено Тогда + // Чтение + + Результат = Неопределено; + + XDTOТип = XDTOАдрес.Тип(); + Если XDTOТип = ФабрикаXDTO.Тип(ПространствоИмен(), "АдресРФ") Тогда + АдресРФ = XDTOАдрес; + Иначе + АдресРФ = XDTOАдрес.Состав; + КонецЕсли; + + Если ТипЗнч(АдресРФ) = Тип("ОбъектXDTO") Тогда + Возврат УправлениеКонтактнойИнформацией.ПолучитьXDTOРеквизитОбъекта(АдресРФ, РаботаСАдресамиКлиентСервер.XPathРайона()); + КонецЕсли; + + Возврат Неопределено; + КонецЕсли; + + // Запись + Запись = СвРайМО(XDTOАдрес); + Запись.Район = НовоеЗначение; + Возврат НовоеЗначение; +КонецФункции + +Функция СвРайМО(АдресРФ) + Если АдресРФ.СвРайМО <> Неопределено Тогда + Возврат АдресРФ.СвРайМО; + КонецЕсли; + + АдресРФ.СвРайМО = ФабрикаXDTO.Создать( АдресРФ.Свойства().Получить("СвРайМО").Тип ); + Возврат АдресРФ.СвРайМО; +КонецФункции + // Возвращает список всех регионов адресного классификатора. // // Возвращаемое значение: @@ -688,6 +1293,423 @@ КонецФункции +Функция СоздатьНомерДопАдрЭлемента(АдресРФ) + ДопАдрЭл = СоздатьДопАдрЭлемента(АдресРФ); + ДопАдрЭл.Номер = ФабрикаXDTO.Создать(ДопАдрЭл.Тип().Свойства.Получить("Номер").Тип); + Возврат ДопАдрЭл.Номер; +КонецФункции + +Функция СоздатьДопАдрЭлемента(АдресРФ) + СвойствоДопАдрЭлемента = АдресРФ.ДопАдрЭл.ВладеющееСвойство; + ДопАдрЭлемента = ФабрикаXDTO.Создать(СвойствоДопАдрЭлемента.Тип); + АдресРФ.ДопАдрЭл.Добавить(ДопАдрЭлемента); + Возврат ДопАдрЭлемента; +КонецФункции + +// Возвращает наименование региона по его коду. +// +// Параметры: +// Код - Строка, Число - код региона. +// +// Возвращаемое значение: +// Строка - полное наименование региона с сокращением. +// Неопределено - если нет ни одной подсистемы адресного классификатора. +// +Функция РегионКода(Знач Код) + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда + МодульАдресныйКлассификатор = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификатор"); + Возврат МодульАдресныйКлассификатор.НаименованиеРегионаПоКоду(Код); + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + +// Возвращает сведения об адресах в виде структуру частей адреса и кодов КЛАДР. +// +Функция СведенияОбАдресахВВидеСтруктуры(Адреса, ДополнительныеПараметры) + Результат = Новый Массив; + Для каждого Адрес Из Адреса Цикл + Результат.Добавить(СведенияОбАдресеВВидеСтруктуры(Адрес, ДополнительныеПараметры)); + КонецЦикла; + Возврат Результат; +КонецФункции + +// Возвращает сведения об адресе в виде отдельных частей адреса и различных кодов (код региона, ОКТМО и др.). +// +// Параметры: +// Адрес - Строка - адрес во внутреннем формате JSON или в XML, соответствующем XDTO пакету Адрес. +// - ОбъектXDTO - XDTO объект, соответствующий XDTO пакету Адрес. +// ДополнительныеПараметры - Структура - для уточнения возвращаемого значения: +// * БезПредставлений - Булево - Если Истина, то поле Представление будет отсутствовать. По умолчанию, Ложь. +// * КодыКЛАДР - Булево - Если Истина, то возвращается структура КодыКЛАДР. По умолчанию, Ложь. +// * ПолныеНаименованияСокращений - Булево - Если Истина, то возвращается полное наименование адресных объектов. +// * НаименованиеВключаетСокращение - Булево - Если Истина, то поля содержат сокращениям в наименованиях адресных объектов. +// , * ВключатьСтрануВПредставление - Булево - Если Истина, то представление включает наименование страны. +// * ПроверитьАдрес - Булево - Если Истина, то адрес будет проверен на соответствие ФИАС. +// +// Возвращаемое значение: +// Структура - сведения об адресе: +// * Представление - Строка - текстовое представление адреса по административно-территориальному делению. +// * МуниципальноеПредставление - Строка - текстовое представление адреса по муниципальному делению. +// * ТипАдреса - Строка - основной тип адреса (только для адресов РФ). +// Варианты: "Муниципальный", "Административно-территориальный". +// * Страна - Строка - текстовое представление страны. +// * КодСтраны - Строка - код страны по ОКСМ. +// * Индекс - Строка - почтовый индекс. +// * КодРегиона - Строка - код региона РФ. +// * Регион - Строка - текстовое представление региона РФ. +// * РегионСокращение - Строка - сокращение региона. +// * Округ - Строка - текстовое представление округа (устарело). +// * ОкругСокращение - Строка - сокращение округа (устарело). +// * Район - Строка - текстовое представление района у адресов по административно-территориальному делению. +// * РайонСокращение - Строка - сокращение района у адресов по административно-территориальному делению. +// * МуниципальныйРайон - Строка - текстовое представление муниципального района у адресов по муниципальному делению. +// * МуниципальныйРайонСокращение - Строка - сокращение муниципального района у адресов по муниципальному делению. +// * Город - Строка - текстовое представление города у адресов по административно-территориальному делению. +// * ГородСокращение - Строка - сокращение города у адресов по административно-территориальному делению. +// * Поселение - Строка - текстовое представление поселения у адресов по муниципальному делению. +// * ПоселениеСокращение - Строка - сокращение поселения у адресов по муниципальному делению. +// * ВнутригородскойРайон - Строка - текстовое представление внутригородского района. +// * ВнутригородскойРайонСокращение - Строка - сокращение внутригородского района. +// * НаселенныйПункт - Строка - текстовое представление населенного пункта. +// * НаселенныйПунктСокращение - Строка - сокращение населенного пункта. +// * Территория - Строка - текстовое представление территории. +// * ТерриторияСокращение - Строка - сокращение территории. +// * Улица - Строка - текстовое представление улицы. +// * УлицаСокращение - Строка - сокращение улицы. +// * ДополнительнаяТерритория - Строка - текстовое представление дополнительной территории (устарело). +// * ДополнительнаяТерриторияСокращение - Строка - сокращение дополнительной территории (устарело). +// * ЭлементДополнительнойТерритории - Строка - текстовое представление элемента дополнительной территории (устарело). +// * ЭлементДополнительнойТерриторииСокращение - Строка - сокращение элемента дополнительной территории (устарело). +// * Здание - Структура - структура с информацией о здании адреса. +// ** ТипЗдания - Строка - тип объекта адресации адреса РФ согласно приказу Минфина России от 5.11.2015 г. N +// 171н. +// ** Номер - Строка - текстовое представление номера дома (только для адресов РФ). +// * Корпуса - Массив - содержит структуры(поля структуры: ТипКорпуса, Номер) с перечнем корпусов адреса. +// * Помещения - Массив - содержит структуры(поля структуры: ТипПомещения, Номер) с перечнем помещений адреса. +// * ИдентификаторАдресногоОбъекта - УникальныйИдентификатор - Идентификационный код последнего адресного объекта +// в иерархи адреса. Например, для адреса: Москва г., Дмитровское ш., д.9 это +// будет идентификатор улицы. +// * ИдентификаторДома - УникальныйИдентификатор - Идентификационный код дома(строения) адресного объекта. +// * Идентификаторы - Структура - Идентификаторы адресных объектов адреса. +// ** РегионИдентификатор - УникальныйИдентификатор - идентификатор региона. +// ** РайонИдентификатор - УникальныйИдентификатор - идентификатор района. +// ** МуниципальныйРайонИдентификатор - УникальныйИдентификатор - идентификатор муниципального района. +// ** ГородИдентификатор - УникальныйИдентификатор - идентификатор города. +// ** ПоселениеИдентификатор - УникальныйИдентификатор - идентификатор поселения. +// ** ВнутригородскойРайонИдентификатор - УникальныйИдентификатор - идентификатор внутригородского района. +// ** ТерриторияИдентификатор - УникальныйИдентификатор - идентификатор территории. +// ** ТерриторияИдентификатор - УникальныйИдентификатор - идентификатор территории. +// ** УлицаИдентификатор - УникальныйИдентификатор - идентификатор улица. +// * КодыКЛАДР - Структура - Коды КЛАДР, если установлен параметр КодыКЛАДР. +// ** Регион - Строка - Код КЛАДР региона. +// ** Район - Строка - Код КЛАДР район. +// ** Город - Строка - Код КЛАДР города. +// ** НаселенныйПункт - Строка - Код КЛАДР населенного пункта. +// ** Улица - Строка - Код КЛАДР улица. +// * ДополнительныеКоды - Структура - Коды ОКТМО, ОКТМО, ОКАТО, КодИФНСФЛ, КодИФНСЮЛ, КодУчасткаИФНСФЛ, КодУчасткаИФНСЮЛ. +// * РезультатПроверкиАдреса - Строка - "Успех", если адрес корректный, "Ошибка" - при наличии ошибок проверки, +// "Отказ", если не удалось проверить адрес, т.к. не доступен классификатор. +// Пустая строка, если в параметре ДополнительныеПараметры.ПроверитьАдрес не +// установлен флаг ПроверитьАдрес. +// * ОшибкиПроверкиАдреса - Строка - описание ошибок в адресе, выявленных в ходе проверки. +// +Функция СведенияОбАдресеВВидеСтруктуры(Знач АдресСтрокой, ДополнительныеПараметры) + + Результат = Новый Структура(); + + Параметры = Новый Структура(); + Параметры.Вставить("БезПредставлений", Ложь); + Параметры.Вставить("НаименованиеВключаетСокращение", Ложь); + Параметры.Вставить("КодыКЛАДР", Ложь); + Параметры.Вставить("ПолноеНаименованиеСокращений", Ложь); + Параметры.Вставить("ПроверитьАдрес", Ложь); + Параметры.Вставить("ВключатьСтрануВПредставление", Ложь); + + Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда + ЗаполнитьЗначенияСвойств(Параметры, ДополнительныеПараметры); + КонецЕсли; + + СоответствиеСокращений = Новый Соответствие; + + Если НЕ (ТипЗнч(АдресСтрокой) = Тип("Структура") И АдресСтрокой.Свойство("Value")) Тогда + + Если НЕ УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(АдресСтрокой) Тогда + АдресСтрокой = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВJSON(АдресСтрокой, Перечисления.ТипыКонтактнойИнформации.Адрес); + КонецЕсли; + + КонецЕсли; + + Адрес = УправлениеКонтактнойИнформациейСлужебный.СтрокаJSONВСтруктуру(АдресСтрокой); + + Если ПустаяСтрока(Адрес.ID) Тогда + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда + МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); + МодульАдресныйКлассификаторСлужебный.УстановитьИдентификаторыАдреса(Адрес); + КонецЕсли; + + КонецЕсли; + + // Основные сведения + Результат.Вставить("Индекс", Адрес.ZipCode); + Результат.Вставить("ТипАдреса", Адрес.AddressType); + Результат.Вставить("Страна", Адрес.Country); + Результат.Вставить("КодСтраны", Адрес.CountryCode); + Результат.Вставить("Комментарий", Адрес.Comment); + + ЭтоНациональныйАдрес = ?(СтрСравнить(Адрес.Country, РаботаСАдресамиКлиентСервер.ОсновнаяСтрана().Наименование) = 0, Истина, Ложь); + КодРегиона = ?(ЭтоНациональныйАдрес, КодРегиона(Адрес["Area"] + " " +Адрес["AreaType"]), ""); + Результат.Вставить("КодРегиона", КодРегиона); + + // Обратная совместимость, уровни устарели. + Результат.Вставить("Округ", ""); + Результат.Вставить("ОкругСокращение", ""); + Результат.Вставить("ДополнительнаяТерритория", ""); + Результат.Вставить("ДополнительнаяТерриторияСокращение", ""); + Результат.Вставить("ЭлементДополнительнойТерритории", ""); + Результат.Вставить("ЭлементДополнительнойТерриторииСокращение", ""); + + СоответствиеУровней = Новый Соответствие; + СоответствиеУровней.Вставить("area", Новый Структура("Имя, Уровень", "Регион", 1)); + СоответствиеУровней.Вставить("district", Новый Структура("Имя, Уровень", "Район", 3)); + СоответствиеУровней.Вставить("munDistrict", Новый Структура("Имя, Уровень", "МуниципальныйРайон", 31)); + СоответствиеУровней.Вставить("city", Новый Структура("Имя, Уровень", "Город", 4)); + СоответствиеУровней.Вставить("settlement", Новый Структура("Имя, Уровень", "Поселение", 41)); + СоответствиеУровней.Вставить("cityDistrict", Новый Структура("Имя, Уровень", "ВнутригородскойРайон", 5)); + СоответствиеУровней.Вставить("locality", Новый Структура("Имя, Уровень", "НаселенныйПункт", 6)); + СоответствиеУровней.Вставить("territory", Новый Структура("Имя, Уровень", "Территория", 65)); + СоответствиеУровней.Вставить("street", Новый Структура("Имя, Уровень", "Улица", 7)); + + Идентификаторы = Новый Структура(); + Результат.Вставить("Идентификаторы", Идентификаторы); + + ИдентификаторАдресногоОбъекта = ""; + МаксимальныйУровеньИдентификатора = 0; + Для каждого ЧастьАдреса Из СоответствиеУровней Цикл + + ИдентификаторТекущегоУровня = Адрес[ЧастьАдреса.Ключ + "Id"]; + + Сокращение = Адрес[ЧастьАдреса.Ключ + "Type"]; + НаименованиеУровня = ?(Параметры.НаименованиеВключаетСокращение, СокрЛП(Адрес[ЧастьАдреса.Ключ] + " " + Сокращение), + Адрес[ЧастьАдреса.Ключ]); + + Результат.Вставить(ЧастьАдреса.Значение.Имя, НаименованиеУровня); + Результат.Вставить(ЧастьАдреса.Значение.Имя + "Сокращение", Сокращение); + СоответствиеСокращений.Вставить(ЧастьАдреса.Значение.Уровень, Сокращение); + + Идентификаторы.Вставить(ЧастьАдреса.Значение.Имя + "Идентификатор", ИдентификаторТекущегоУровня); + + УровеньИдентификатора = ?(ЧастьАдреса.Значение.Уровень < 10, ЧастьАдреса.Значение.Уровень * 10, ЧастьАдреса.Значение.Уровень); + Если ЗначениеЗаполнено(ИдентификаторТекущегоУровня) И МаксимальныйУровеньИдентификатора < УровеньИдентификатора Тогда + ИдентификаторАдресногоОбъекта = ИдентификаторТекущегоУровня; + КонецЕсли; + + КонецЦикла; + + Результат.Вставить("ИдентификаторАдресногоОбъекта", ИдентификаторАдресногоОбъекта); + + // Установка полных сокращений, если определен параметр. + Если Параметры.ПолноеНаименованиеСокращений = Истина Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда + МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); + МодульАдресныйКлассификаторСлужебный.ПолныеНаименованияСокращений(СоответствиеСокращений); + + Для каждого ЧастьАдреса Из СоответствиеУровней Цикл + + Результат.Вставить(ЧастьАдреса.Значение.Имя + "Сокращение", СоответствиеСокращений[ЧастьАдреса.Значение.Уровень]); + + КонецЦикла; + + КонецЕсли; + КонецЕсли; + + // Дома, здания, строения + Результат.Вставить("Здание", Новый Структура("ТипЗдания, Номер")); + Результат.Вставить("Корпуса", Новый Массив); + Результат.Вставить("Помещения", Новый Массив); + + Результат.Здание.Вставить("ТипЗдания", Адрес.HouseType); + Результат.Здание.Вставить("Номер", Адрес.HouseNumber); + + Для каждого Корпус Из Адрес.Buildings Цикл + Результат.Корпуса.Добавить(Новый Структура("ТипКорпуса, Номер", Корпус.Type, Корпус.Number)); + КонецЦикла; + + Для каждого Корпус Из Адрес.Apartments Цикл + Результат.Помещения.Добавить(Новый Структура("ТипПомещения, Номер", Корпус.Type, Корпус.Number)); + КонецЦикла; + + Результат.Вставить("ИдентификаторДома", ""); + + РезультатПроверкиАдреса = ""; + СписокОшибок = ""; + + Если ЭтоНациональныйАдрес Тогда + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда + МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); + ДополнительныеКоды = МодульАдресныйКлассификаторСлужебный.КодыАдресаИКодыКЛАДР(Адрес, ИдентификаторАдресногоОбъекта); + Результат.Вставить("ДополнительныеКоды", ДополнительныеКоды.КодыАдреса); + Если Параметры.КодыКЛАДР Тогда + Результат.Вставить("КодыКЛАДР", ДополнительныеКоды.КодыКЛАДР); + КонецЕсли; + Иначе + ЗаполнитьКодыАдреса(Результат, Адрес); + КонецЕсли; + + Если Параметры.ПроверитьАдрес Тогда + + РезультатПроверки = ПроверитьАдрес(АдресСтрокой); + + Если РезультатПроверки.Результат = "Корректный" Тогда + РезультатПроверкиАдреса = "Успех"; + ИначеЕсли РезультатПроверки.Результат = "СодержитОшибки" Тогда + РезультатПроверкиАдреса = "Ошибка"; + СписокОшибок = РезультатПроверки.СписокОшибок; + Иначе + РезультатПроверкиАдреса = "Отказ"; + СписокОшибок = РезультатПроверки.СписокОшибок; + КонецЕсли; + + КонецЕсли; + + Результат.Вставить("РезультатПроверкиАдреса", РезультатПроверкиАдреса); + Результат.Вставить("ОшибкиПроверкиАдреса", СписокОшибок); + + + КонецЕсли; + + Если Не Параметры.БезПредставлений Тогда + + Результат.Вставить("Представление", РаботаСАдресамиКлиентСервер.ПредставлениеАдреса(Адрес, + Параметры.ВключатьСтрануВПредставление, РаботаСАдресамиКлиентСервер.АдминистративноТерриториальныйАдрес())); + Если ПустаяСтрока(Результат.Представление) Тогда + Результат.Вставить("Представление", Адрес.value); + КонецЕсли; + + Результат.Вставить("МуниципальноеПредставление", РаботаСАдресамиКлиентСервер.ПредставлениеАдреса(Адрес, + Параметры.ВключатьСтрануВПредставление, РаботаСАдресамиКлиентСервер.МуниципальныйАдрес())); + Если ПустаяСтрока(Результат.МуниципальноеПредставление) Тогда + Результат.Вставить("МуниципальноеПредставление", Адрес.value); + КонецЕсли; + + КонецЕсли; + + УправлениеКонтактнойИнформациейСлужебный.ЗаменитьВСтруктуреНеопределеноНаПустуюСтроку(Результат); + + Возврат Результат; + +КонецФункции + +// Возвращает код региона по его полному наименованию. +// +// Параметры: +// НаименованиеРегиона - Строка - полное наименование региона с сокращением. +// +// Возвращаемое значение: +// Строка - код региона из двух цифр. Пустая строка, если наименование определить не удалось. +// Неопределено - если нет ни одной подсистемы адресного классификатора. +// +Функция КодРегиона(Знач ПолноеНаименование) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда + МодульАдресныйКлассификатор = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификатор"); + Код = МодульАдресныйКлассификатор.КодРегионаПоНаименованию(ПолноеНаименование); + Возврат Формат(Код, "ЧЦ=2; ЧН=; ЧВН="); + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + +// Заполняет коды по структуре адреса. +// +Процедура ЗаполнитьКодыАдреса(Результат, Адрес) + + ДополнительныеКоды = Новый Структура(); + ДополнительныеКоды.Вставить("ОКТМО", ""); + ДополнительныеКоды.Вставить("ОКАТО", ""); + ДополнительныеКоды.Вставить("КодИФНСФЛ", ""); + ДополнительныеКоды.Вставить("КодИФНСЮЛ", ""); + ДополнительныеКоды.Вставить("КодУчасткаИФНСФЛ", ""); + ДополнительныеКоды.Вставить("КодУчасткаИФНСЮЛ", ""); + ДополнительныеКоды.Вставить("ИдентификаторДома", ""); + ДополнительныеКоды.Вставить("КодУчасткаИФНСЮЛ", ""); + + Результат.Вставить("ДополнительныеКоды", ДополнительныеКоды); + + УстановитьЗначенияПоля(Результат, Адрес, "ОКТМО", "OKTMO"); + УстановитьЗначенияПоля(Результат, Адрес, "ОКАТО", "OKATO"); + УстановитьЗначенияПоля(Результат, Адрес, "КодИФНСФЛ", "IFNSFLCode"); + УстановитьЗначенияПоля(Результат, Адрес, "КодИФНСЮЛ", "IFNSULCode"); + УстановитьЗначенияПоля(Результат, Адрес, "КодУчасткаИФНСФЛ", "IFNSFLAreaCode"); + УстановитьЗначенияПоля(Результат, Адрес, "КодУчасткаИФНСЮЛ", "IFNSULAreaCode"); + УстановитьЗначенияПоля(Результат, Адрес, "ИдентификаторДома", "HouseId"); + + КодКЛАДР = ""; + Если Адрес.Свойство("CodeKLADR") И ЗначениеЗаполнено(Адрес.CodeKLADR) Тогда + КодКЛАДР = Адрес.CodeKLADR; + КонецЕсли; + Результат.Вставить("КодыКЛАДР", ОпределитьКодыКодыКЛАДР(Адрес, КодКЛАДР)); + +КонецПроцедуры + +Процедура УстановитьЗначенияПоля(Приемник, Источник, ИмяПоляПриемник, ИмяПоляИсточник) + Если Источник.Свойство(ИмяПоляИсточник) Тогда + Значение = ?(ЗначениеЗаполнено(Источник), Источник[ИмяПоляИсточник], ""); // Неопределено, Null и др. в пустую строку + КонецЕсли; + Приемник[ИмяПоляПриемник] = Значение; +КонецПроцедуры + +// Заполняет коды по структуре адреса. +// +Функция ОпределитьКодыКодыКЛАДР(Адрес, Знач КодКЛАДР) + + КодыКЛАДР = Новый Структура(); + КодыКЛАДР.Вставить("Регион", ""); + КодыКЛАДР.Вставить("Округ", ""); + КодыКЛАДР.Вставить("Город", ""); + КодыКЛАДР.Вставить("ВнутригородскойРайон", ""); + КодыКЛАДР.Вставить("НаселенныйПункт", ""); + КодыКЛАДР.Вставить("Улица", ""); + + // Заполнить коды КЛАДР. + Если ЗначениеЗаполнено(КодКЛАДР) Тогда + КодКЛАДР = Формат(КодКЛАДР, "ЧРГ=''; ЧГ=0"); + + Если СтрДлина(КодКЛАДР) = 17 Тогда + КодыКЛАДР.Улица = КодКЛАДР; + КонецЕсли; + КодКЛАДР = Лев(КодКЛАДР, 13); + + Если СтрДлина(КодКЛАДР) = 12 Тогда + КодКЛАДР = "0" + КодКЛАДР; + КонецЕсли; + + Если СтрДлина(КодКЛАДР) = 13 Тогда + Если ЗначениеЗаполнено(Адрес.Area) Тогда + КодыКЛАДР.Регион = Лев(КодКЛАДР, 2) + "00000000000"; + КонецЕсли; + Если ЗначениеЗаполнено(Адрес.District) Тогда + КодыКЛАДР.Район = Лев(КодКЛАДР, 5) + "00000000"; + КонецЕсли; + Если ЗначениеЗаполнено(Адрес.City) Тогда + КодыКЛАДР.Город = Лев(КодКЛАДР, 8) + "00000"; + КонецЕсли; + Если ЗначениеЗаполнено(Адрес.Settlement) Тогда + КодыКЛАДР.НаселенныйПункт = Лев(КодКЛАДР, 11) + "00"; + КонецЕсли; + + КонецЕсли; + КонецЕсли; + + Возврат КодыКЛАДР; + +КонецФункции + Функция РазделитьДомаСтроения(Значение, ТипПоУмолчанию) Результат = Новый Структура("Номер, Тип"); @@ -706,5 +1728,4 @@ КонецФункции -#КонецОбласти - +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/РаботаСАдресамиКлиентСервер/Module.bsl b/SSL/src/CommonModules/РаботаСАдресамиКлиентСервер/Module.bsl index adcfb6c5a..372f4df59 100644 --- a/SSL/src/CommonModules/РаботаСАдресамиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РаботаСАдресамиКлиентСервер/Module.bsl @@ -1,6 +1,157 @@ #Область ПрограммныйИнтерфейс +// Возвращает структуру полей адреса для программного формирования адреса. +// +// Результат: +// Структура - поля адреса: +// * Представление - Строка - текстовое представление адреса по административно-территориальному делению. +// * МуниципальноеПредставление - Строка - текстовое представление адреса по муниципальному делению. +// * ТипАдреса - Строка - основной тип адреса (только для адресов РФ). +// Варианты: "Муниципальный", "Административно-территориальный". +// * Страна - Строка - текстовое представление страны. +// * КодСтраны - Строка - код страны по ОКСМ. +// * Индекс - Строка - почтовый индекс. +// * КодРегиона - Строка - код региона РФ. +// * Регион - Строка - текстовое представление региона РФ. +// * РегионСокращение - Строка - сокращение региона. +// * Округ - Строка - текстовое представление округа (устарело). +// * ОкругСокращение - Строка - сокращение округа (устарело). +// * Район - Строка - текстовое представление района у адресов по административно-территориальному делению. +// * РайонСокращение - Строка - сокращение района у адресов по административно-территориальному делению. +// * МуниципальныйРайон - Строка - текстовое представление муниципального района у адресов по муниципальному делению. +// * МуниципальныйРайонСокращение - Строка - сокращение муниципального района у адресов по муниципальному делению. +// * Город - Строка - текстовое представление города у адресов по административно-территориальному делению. +// * ГородСокращение - Строка - сокращение города у адресов по административно-территориальному делению. +// * Поселение - Строка - текстовое представление поселения у адресов по муниципальному делению. +// * ПоселениеСокращение - Строка - сокращение поселения у адресов по муниципальному делению. +// * ВнутригородскойРайон - Строка - текстовое представление внутригородского района. +// * ВнутригородскойРайонСокращение - Строка - сокращение внутригородского района. +// * НаселенныйПункт - Строка - текстовое представление населенного пункта. +// * НаселенныйПунктСокращение - Строка - сокращение населенного пункта. +// * Территория - Строка - текстовое представление территории. +// * ТерриторияСокращение - Строка - сокращение территории. +// * Улица - Строка - текстовое представление улицы. +// * УлицаСокращение - Строка - сокращение улицы. +// * ДополнительнаяТерритория - Строка - текстовое представление дополнительной территории (устарело). +// * ДополнительнаяТерриторияСокращение - Строка - сокращение дополнительной территории (устарело). +// * ЭлементДополнительнойТерритории - Строка - текстовое представление элемента дополнительной территории (устарело). +// * ЭлементДополнительнойТерриторииСокращение - Строка - сокращение элемента дополнительной территории (устарело). +// * Здание - Структура - структура с информацией о здании адреса. +// ** ТипЗдания - Строка - тип объекта адресации адреса РФ согласно приказу Минфина России от 5.11.2015 г. N +// 171н. +// ** Номер - Строка - текстовое представление номера дома (только для адресов РФ). +// * Корпуса - Массив - содержит структуры(поля структуры: ТипКорпуса, Номер) с перечнем корпусов адреса. +// * Помещения - Массив - содержит структуры(поля структуры: ТипПомещения, Номер) с перечнем помещений адреса. +// * ИдентификаторАдресногоОбъекта - УникальныйИдентификатор - Идентификационный код последнего адресного объекта +// в иерархи адреса. Например, для адреса: Москва г., Дмитровское ш., д.9 это +// будет идентификатор улицы. +// * ИдентификаторДома - УникальныйИдентификатор - Идентификационный код дома(строения) адресного объекта. +// * Идентификаторы - Структура - Идентификаторы адресных объектов адреса. +// ** РегионИдентификатор - УникальныйИдентификатор, Неопределено - идентификатор региона. +// ** РайонИдентификатор - УникальныйИдентификатор, Неопределено - идентификатор района. +// ** МуниципальныйРайонИдентификатор - УникальныйИдентификатор, Неопределено - идентификатор муниципального района. +// ** ГородИдентификатор - УникальныйИдентификатор, Неопределено - идентификатор города. +// ** ПоселениеИдентификатор - УникальныйИдентификатор, Неопределено - идентификатор поселения. +// ** ВнутригородскойРайонИдентификатор - УникальныйИдентификатор, Неопределено - идентификатор +// внутригородского района. +// ** НаселенныйПунктИдентификатор - УникальныйИдентификатор, Неопределено - идентификатор населенного пункта. +// ** ТерриторияИдентификатор - УникальныйИдентификатор, Неопределено - идентификатор территории. +// ** УлицаИдентификатор - УникальныйИдентификатор, Неопределено - идентификатор улица. +// * КодыКЛАДР - Структура - Коды КЛАДР, если установлен параметр КодыКЛАДР. +// ** Регион - Строка - Код КЛАДР региона. +// ** Район - Строка - Код КЛАДР район. +// ** Город - Строка - Код КЛАДР города. +// ** НаселенныйПункт - Строка - Код КЛАДР населенного пункта. +// ** Улица - Строка - Код КЛАДР улица. +// * ДополнительныеКоды - Структура - Коды ОКТМО, ОКТМО, ОКАТО, КодИФНСФЛ, КодИФНСЮЛ, КодУчасткаИФНСФЛ, КодУчасткаИФНСЮЛ. +// * Комментарий - Строка - комментарий к адресу. +// +Функция ПоляАдреса() Экспорт + + Результат = Новый Структура; + + Результат.Вставить("ТипАдреса" , ""); + Результат.Вставить("Комментарий" , ""); + + Результат.Вставить("Представление" , ""); + Результат.Вставить("МуниципальноеПредставление", ""); + + Результат.Вставить("Страна" , ""); + Результат.Вставить("КодСтраны", ""); + Результат.Вставить("Индекс" , ""); + + Результат.Вставить("КодРегиона" , ""); + Результат.Вставить("Регион" , ""); + Результат.Вставить("РегионСокращение" , ""); + Результат.Вставить("Округ" , ""); + Результат.Вставить("ОкругСокращение" , ""); + Результат.Вставить("Район" , ""); + Результат.Вставить("РайонСокращение" , ""); + Результат.Вставить("МуниципальныйРайон" , ""); + Результат.Вставить("МуниципальныйРайонСокращение" , ""); + Результат.Вставить("Город" , ""); + Результат.Вставить("ГородСокращение" , ""); + Результат.Вставить("Поселение" , ""); + Результат.Вставить("ПоселениеСокращение" , ""); + Результат.Вставить("ВнутригородскойРайон" , ""); + Результат.Вставить("ВнутригородскойРайонСокращение" , ""); + Результат.Вставить("НаселенныйПункт" , ""); + Результат.Вставить("НаселенныйПунктСокращение" , ""); + Результат.Вставить("Территория" , ""); + Результат.Вставить("ТерриторияСокращение" , ""); + Результат.Вставить("Улица" , ""); + Результат.Вставить("УлицаСокращение" , ""); + Результат.Вставить("ДополнительнаяТерритория" , ""); + Результат.Вставить("ДополнительнаяТерриторияСокращение" , ""); + Результат.Вставить("ЭлементДополнительнойТерритории" , ""); + Результат.Вставить("ЭлементДополнительнойТерриторииСокращение", ""); + + Здание = Новый Структура; + Здание.Вставить("ТипЗдания", ""); + Здание.Вставить("Номер" , ""); + Результат.Вставить("Здание", Здание); + + Результат.Вставить("Корпуса" , Новый Массив); + Результат.Вставить("Помещения", Новый Массив); + + Результат.Вставить("ИдентификаторАдресногоОбъекта", Неопределено); + Результат.Вставить("ИдентификаторДома" , Неопределено); + + Идентификаторы = Новый Структура; + Идентификаторы.Вставить("РегионИдентификатор" , Неопределено); + Идентификаторы.Вставить("РайонИдентификатор" , Неопределено); + Идентификаторы.Вставить("МуниципальныйРайонИдентификатор" , Неопределено); + Идентификаторы.Вставить("ГородИдентификатор" , Неопределено); + Идентификаторы.Вставить("ПоселениеИдентификатор" , Неопределено); + Идентификаторы.Вставить("ВнутригородскойРайонИдентификатор", Неопределено); + Идентификаторы.Вставить("НаселенныйПунктИдентификатор" , Неопределено); + Идентификаторы.Вставить("ТерриторияИдентификатор" , Неопределено); + Идентификаторы.Вставить("УлицаИдентификатор" , Неопределено); + Результат.Вставить("Идентификаторы", Идентификаторы); + + ДополнительныеКоды = Новый Структура; + ДополнительныеКоды.Вставить("ОКТМО" , ""); + ДополнительныеКоды.Вставить("OKATO" , ""); + ДополнительныеКоды.Вставить("КодИФНСФЛ" , ""); + ДополнительныеКоды.Вставить("КодИФНСЮЛ" , ""); + ДополнительныеКоды.Вставить("КодУчасткаИФНСФЛ", ""); + ДополнительныеКоды.Вставить("КодУчасткаИФНСЮЛ", ""); + Результат.Вставить("ДополнительныеКоды", ДополнительныеКоды); + + КодыКЛАДР = Новый Структура; + КодыКЛАДР.Вставить("Регион" , ""); + КодыКЛАДР.Вставить("Район" , ""); + КодыКЛАДР.Вставить("Город" , ""); + КодыКЛАДР.Вставить("НаселенныйПункт", ""); + КодыКЛАДР.Вставить("Улица" , ""); + Результат.Вставить("КодыКЛАДР", КодыКЛАДР); + + Возврат Результат; + +КонецФункции + // Возвращает структуру контактной информации по типу. +// Для получения полей адреса следует использовать РаботаСАдресамиКлиентСервер.ПоляАдреса. // // Параметры: // ТипКИ - ПеречислениеСсылка.ТипыКонтактнойИнформации - тип контактной информации. @@ -25,6 +176,41 @@ #Область СлужебныйПрограммныйИнтерфейс +Функция ОсновнаяСтрана() Экспорт + Возврат ПредопределенноеЗначение("Справочник.СтраныМира.Россия"); +КонецФункции + +Функция АккомодацияСтруктурыАдреса(Данные) Экспорт + + НаселенныйПунктДетально = ОписаниеНовойКонтактнойИнформации(ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес")); + ЗаполнитьЗначенияСвойств(НаселенныйПунктДетально, Данные); + + Если ТипЗнч(НаселенныйПунктДетально.Buildings) <> Тип("Массив") Тогда + НаселенныйПунктДетально.Buildings = Новый Массив; + КонецЕсли; + + Если ТипЗнч(НаселенныйПунктДетально.Apartments) <> Тип("Массив") Тогда + НаселенныйПунктДетально.Buildings = Новый Массив; + КонецЕсли; + + Для каждого ЭлементАдреса Из НаселенныйПунктДетально Цикл + + Если СтрЗаканчиваетсяНа(ЭлементАдреса.Ключ, "Id") + И ТипЗнч(ЭлементАдреса.Значение) = Тип("Строка") + И СтрДлина(ЭлементАдреса.Значение) = 36 Тогда + НаселенныйПунктДетально[ЭлементАдреса.Ключ] = Новый УникальныйИдентификатор(ЭлементАдреса.Значение); + КонецЕсли; + + КонецЦикла; + + Если Данные.Свойство("house") Тогда + НаселенныйПунктДетально.HouseNumber = Данные.house; + КонецЕсли; + + Возврат НаселенныйПунктДетально; + +КонецФункции + // Возвращает XPath для района. // // Возвращаемое значение: @@ -55,6 +241,7 @@ Результат.Добавить(СтрокаОбъектаАдресации("1050", НСтр("ru = 'Корпус'"), 2, 1)); Результат.Добавить(СтрокаОбъектаАдресации("1060", НСтр("ru = 'Строение'"), 2, 2, 1)); Результат.Добавить(СтрокаОбъектаАдресации("1080", НСтр("ru = 'Литера'"), 2, 3, 3)); + Результат.Добавить(СтрокаОбъектаАдресации("1090", НСтр("ru = 'Литер'"), 2, 6, 3)); Результат.Добавить(СтрокаОбъектаАдресации("1070", НСтр("ru = 'Сооружение'"), 2, 4, 2)); Результат.Добавить(СтрокаОбъектаАдресации("1040", НСтр("ru = 'Участок'"), 2, 5)); @@ -85,10 +272,130 @@ Возврат Результат; КонецФункции +Функция ЭтоМуниципальныйАдрес(ТипАдреса) Экспорт + Возврат СтрСравнить(ТипАдреса, МуниципальныйАдрес()) = 0; +КонецФункции + +Функция ЭтоАдминистративноТерриториальныйАдрес(ТипАдреса) Экспорт + Возврат СтрСравнить(ТипАдреса, АдминистративноТерриториальныйАдрес()) = 0; +КонецФункции + +Функция ЭтоОсновнаяСтрана(Страна) Экспорт + Возврат СтрСравнить(ОсновнаяСтрана(), Страна) = 0; +КонецФункции + +Функция АдминистративноТерриториальныйАдрес() Экспорт + Возврат "Административно-территориальный"; +КонецФункции + +Функция МуниципальныйАдрес() Экспорт + Возврат "Муниципальный"; +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции +// Описание национальных полей структуры контактной информации для хранения ее в формате JSON. +// Основной список полей определяется в одноименной функции общего модуля УправлениеКонтактнойИнформациейКлиентСервер. +// +// ТипКонтактнойИнформации - ПеречислениеСсылка.ТипыКонтактнойИнформации - +// Тип контактной информации, определяющий состав полей контактной информации. +// +// Возвращаемое значение: +// Структура - Поля контактной информации добавленные к основным полям: +// Для типа контактной информации адрес: +// * ID - Строка - Идентификационный код последнего адресного объекта в иерархи адреса. +// * AddressType - Строка - установленный пользователем тип адреса(только для адресов РФ). +// Варианты: "Муниципальный", "Административно-территориальный". +// * AreaCode - Строка - код региона РФ. +// * AreaID - Строка - идентификатор региона. +// * District - Строка - представление района у адресов по административно-территориальному делению. +// * DistrictType - Строка - сокращение района у адресов по административно-территориальному делению. +// * DistrictID - Строка - идентификатор региона у адресов по административно-территориальному делению. +// * MunDistrict - Строка - представление муниципального района у адресов по муниципальному делению. +// * MunDistrictType - Строка - сокращение муниципального района у адресов по муниципальному делению. +// * MunDistrictID - Строка - идентификатор муниципального района у адресов по муниципальному делению. +// * CityID - Строка - идентификатор муниципального города у адресов по административно-территориальному делению. +// * Settlement - Строка - представление поселения у адресов по муниципальному делению. +// * SettlementType - Строка - сокращение поселения у адресов по муниципальному делению. +// * SettlementID - Строка - идентификатор поселения. +// * CityDistrict - Строка - представление внутригородского района. +// * CityDistrictType - Строка - сокращение внутригородского района. +// * CityDistrictID - Строка - идентификатор внутригородского района. +// * Territory - Строка - представление территории. +// * TerritoryType - Строка - сокращение территории. +// * TerritoryID - Строка - идентификатор территории. +// * Locality - Строка - представление населенного пункта. +// * LocalityType - Строка - сокращение населенного пункта. +// * LocalityID - Строка - идентификатор населенного пункта. +// * StreetID - Строка - идентификатор улицы. +// * HouseType - Строка - тип дома, владения. +// * HouseNumber - Строка - номер дома, владения. +// * HouseID - Строка - идентификатор дома. +// * Buildings - Массив - содержит структуры(поля структуры: Type, Number) с перечнем корпусов (строений) адреса. +// * Apartments - Массив - содержит структуры(поля структуры: Type, Number) с перечнем помещений адреса. +// * CodeKLADR - Строка - Код КЛАДР. +// * OKTMO - Строка - Код ОКТМО. +// * OKATO - Строка - Код ОКАТО. +// * IFNSFLCode - Строка - Код ИФНСФЛ. +// * IFNSULCode - Строка - Код ИФНСЮЛ. +// * IFNSFLAreaCode - Строка - Код участка ИФНСФЛ. +// * IFNSULAreaCode - Строка - Код участка ИФНСЮЛ. +// +Функция ОписаниеНовойКонтактнойИнформации(Знач ТипКонтактнойИнформации) Экспорт + + Если ТипЗнч(ТипКонтактнойИнформации) <> Тип("ПеречислениеСсылка.ТипыКонтактнойИнформации") Тогда + ТипКонтактнойИнформации = ""; + КонецЕсли; + + Результат = УправлениеКонтактнойИнформациейКлиентСервер.ОписаниеНовойКонтактнойИнформации(ТипКонтактнойИнформации); + + Если ТипКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес") Тогда + + Результат.Вставить("id", ""); + Результат.Вставить("areaCode", ""); + Результат.Вставить("areaId", ""); + Результат.Вставить("district", ""); + Результат.Вставить("districtType", ""); + Результат.Вставить("districtId", ""); + Результат.Вставить("munDistrict", ""); + Результат.Вставить("munDistrictType", ""); + Результат.Вставить("munDistrictId", ""); + Результат.Вставить("cityId", ""); + Результат.Вставить("settlement", ""); + Результат.Вставить("settlementType", ""); + Результат.Вставить("settlementId", ""); + Результат.Вставить("cityDistrict", ""); + Результат.Вставить("cityDistrictType", ""); + Результат.Вставить("cityDistrictId", ""); + Результат.Вставить("territory", ""); + Результат.Вставить("territoryType", ""); + Результат.Вставить("territoryId", ""); + Результат.Вставить("locality", ""); + Результат.Вставить("localityType", ""); + Результат.Вставить("localityId", ""); + Результат.Вставить("streetId", ""); + Результат.Вставить("houseType", ""); + Результат.Вставить("houseNumber", ""); + Результат.Вставить("houseId", ""); + Результат.Вставить("buildings", Новый Массив); + Результат.Вставить("apartments", Новый Массив); + Результат.Вставить("codeKLADR", ""); + Результат.Вставить("oktmo", ""); + Результат.Вставить("okato", ""); + Результат.Вставить("asInDocument", ""); + Результат.Вставить("ifnsFLCode", ""); + Результат.Вставить("ifnsULCode", ""); + Результат.Вставить("ifnsFLAreaCode", ""); + Результат.Вставить("ifnsULAreaCode", ""); + + КонецЕсли; + + Возврат Результат; + +КонецФункции + // Возвращает код дополнительной части адреса для сериализации. // // Параметры: @@ -131,7 +438,7 @@ КонецФункции -Функция КодСериализацииДополнительногоОбъектаАдресации(Уровень, ТипаАдресногоЭлемента = "") Экспорт +Функция КодСериализацииДополнительногоОбъектаАдресации(Уровень, ТипаАдресногоЭлемента = "") Если Уровень = 90 Тогда Если ВРег(ТипаАдресногоЭлемента) = "ГСК" Тогда @@ -277,107 +584,287 @@ КонецФункции -// Возвращает структуру, описывающую населенный пункт в иерархии младший-старший. -// -// Параметры: -// ВариантКлассификатора Строка - Требуемый вид классификатора ФИАС, КЛАДР. -// -// Возвращаемое значение: -// Структура - описание населенного пункта. -// -Функция СтруктураЧастейАдресаНаселенногоПункта(ВариантКлассификатора = "ФИАС") Экспорт +Функция СопоставлениеУровняАдресаИНаименования(ТипАдреса, ВключатьУлицу) + Уровни = Новый Соответствие; - Результат = Новый Структура; + Уровни.Вставить(1, "Area"); + Если ЭтоМуниципальныйАдрес(ТипАдреса) Тогда + Уровни.Вставить(31, "MunDistrict"); + Уровни.Вставить(41, "Settlement"); + Иначе + Уровни.Вставить(3, "District"); + Уровни.Вставить(4, "City"); + КонецЕсли; - Результат.Вставить("Регион", ЭлементАдреснойСтруктуры(НСтр("ru = 'Регион'"), НСтр("ru = 'Регион адреса'"), "СубъектРФ", 1)); - Если ВариантКлассификатора = "ФИАС" Тогда - Результат.Вставить("Округ", ЭлементАдреснойСтруктуры(НСтр("ru = 'Округ'"), НСтр("ru = 'Округ адреса'"), "Округ", 2)); + Уровни.Вставить(5, "CityDistrict"); + Уровни.Вставить(6, "Locality"); + Уровни.Вставить(65, "Territory"); + + Если ВключатьУлицу Тогда + Уровни.Вставить(7, "Street"); КонецЕсли; - Результат.Вставить("Район", ЭлементАдреснойСтруктуры(НСтр("ru = 'Район'"), НСтр("ru = 'Район адреса'"), "СвРайМО/Район", 3)); - Результат.Вставить("Город", ЭлементАдреснойСтруктуры(НСтр("ru = 'Город'"), НСтр("ru = 'Город адреса'"), "Город", 4)); - Если ВариантКлассификатора = "ФИАС" Тогда - Результат.Вставить("ВнутригРайон", ЭлементАдреснойСтруктуры(НСтр("ru = 'Внутр. р-н.'"), НСтр("ru = 'Внутригородской район'"), "ВнутригРайон", 5)); - КонецЕсли; - Результат.Вставить("НаселенныйПункт", ЭлементАдреснойСтруктуры(НСтр("ru = 'Нас.пункт'"), - НСтр("ru = 'Населенный пункт адреса'"), "НаселПункт", 6, Истина)); + + Возврат Уровни; +КонецФункции + +Функция СопоставлениеНаименованиеУровнюАдреса(ИмяУровня) Экспорт + Уровни = Новый Соответствие; + + Уровни.Вставить("Area", 1); + Уровни.Вставить("MunDistrict", 31); + Уровни.Вставить("Settlement", 41); + Уровни.Вставить("District", 3); + Уровни.Вставить("City", 4); + Уровни.Вставить("CityDistrict", 5); + Уровни.Вставить("Locality", 6); + Уровни.Вставить("Territory", 65); + Уровни.Вставить("Street", 7); + + Возврат Уровни[ИмяУровня]; +КонецФункции + +Функция ИменаУровнейАдреса(ТипАдреса, ВключатьУлицу) Экспорт + Уровни = Новый Массив; + + Если ТипАдреса = УправлениеКонтактнойИнформациейКлиентСервер.ИностранныйАдрес() Тогда - Если ВариантКлассификатора <> "БезКлассификатора" Тогда - Результат.Вставить("Улица", ЭлементАдреснойСтруктуры(НСтр("ru = 'Улица'"), - НСтр("ru = 'Улица адреса'"), "Улица", 7)); - Результат.Вставить("ДополнительныйЭлемент", ЭлементАдреснойСтруктуры(НСтр("ru = 'ДополнительныйЭлемент'"), - НСтр("ru = 'Дополнительный элемент адреса'"), "ДопАдрЭл[ТипАдрЭл='10200000']", 90)); - Результат.Вставить("ПодчиненныйЭлемент", ЭлементАдреснойСтруктуры(НСтр("ru = 'Подчиненный элемент'"), - НСтр("ru = 'Подчиненный элемент адреса'"), "ДопАдрЭл[ТипАдрЭл='10400000']", 91)); - КонецЕсли; + Уровни.Добавить("City"); - Возврат Результат; + Иначе + + Уровни.Добавить("Area"); + Если ТипАдреса = УправлениеКонтактнойИнформациейКлиентСервер.АдресЕАЭС() Тогда + + Уровни.Добавить("District"); + Уровни.Добавить("City"); + Уровни.Добавить("Locality"); + + Иначе + + Если ТипАдреса = "Все" Тогда + Уровни.Добавить("District"); + Уровни.Добавить("City"); + Уровни.Добавить("MunDistrict"); + Уровни.Добавить("Settlement"); + Иначе + Если ЭтоМуниципальныйАдрес(ТипАдреса) Тогда + Уровни.Добавить("MunDistrict"); + Уровни.Добавить("Settlement"); + Иначе + Уровни.Добавить("District"); + Уровни.Добавить("City"); + КонецЕсли; + КонецЕсли; + + Уровни.Добавить("CityDistrict"); + Уровни.Добавить("Locality"); + Уровни.Добавить("Territory"); + + КонецЕсли; + + КонецЕсли; + + Если ВключатьУлицу Тогда + Уровни.Добавить("Street"); + КонецЕсли; + Возврат Уровни; КонецФункции -// Возвращает полное наименование для населенного пункта. Под населенным пунктом понимается синтетическое -// поле, характеризующее все, что больше улицы. -// -// Параметры: -// ЧастиАдреса - Структура - Описание текущего состояния адреса. -// ВариантКлассификатора - Строка - Вариант классификатора. -// -Функция ПредставлениеНаселенногоПунктаПоЧастямАдреса(ЧастиАдреса, ВариантКлассификатора = "ФИАС") Экспорт +Функция ПредставлениеУровняБезСокращения(ИмяУровня) Экспорт - Уровни = Новый Массив; - Уровни.Добавить(1); - Уровни.Добавить(3); - Уровни.Добавить(4); - Уровни.Добавить(6); - Если ВариантКлассификатора = "ФИАС" Тогда - Уровни.Добавить(2); - Уровни.Добавить(5); + Если ИмяУровня = "MunDistrict" ИЛИ ИмяУровня = "Settlement" Тогда + Возврат Истина; КонецЕсли; - Возврат ПредставлениеПоЧастямАдреса(ЧастиАдреса,Уровни); + + Возврат Ложь; + +КонецФункции + +Функция ИдентификаторАдреса(Адрес, ВключатьУлицу) Экспорт + + ИдентификаторАдреса = Неопределено; + МаксимальныйУровень = 0; + Уровни = СопоставлениеУровняАдресаИНаименования(Адрес.AddressType, ВключатьУлицу); + + Для каждого Уровень Из Уровни Цикл + УровеньКлюч = ?(Уровень.Ключ < 10, Уровень.Ключ * 10, Уровень.Ключ); + Если УровеньКлюч > МаксимальныйУровень + И Адрес.Свойство(Уровень.Значение + "Id") + И ЗначениеЗаполнено(Адрес[Уровень.Значение + "Id"]) Тогда + ИдентификаторАдреса = Адрес[Уровень.Значение + "Id"]; + МаксимальныйУровень = УровеньКлюч; + КонецЕсли; + + КонецЦикла; + + Возврат ИдентификаторАдреса; + +КонецФункции + +// Преобразует введенные английские буквы к русской раскладке при подборе адреса +// +Процедура ПреобразоватьВводАдреса(Текст) Экспорт + РусскиеКлавиши = "ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮЁ"; + АнглийскиеКлавиши = "QWERTYUIOP[]ASDFGHJKL;'ZXCVBNM,.`"; + Текст = ВРег(Текст); + Для Позиция = 0 По СтрДлина(Текст) Цикл + Символ = Сред(Текст, Позиция, 1); + ПозицияСимвола = СтрНайти(АнглийскиеКлавиши, Символ); + Если ПозицияСимвола > 0 Тогда + Текст = СтрЗаменить(Текст, Символ, Сред(РусскиеКлавиши, ПозицияСимвола, 1)); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Функция ПредставлениеНаселенногоПунктаАдреса(Адрес) Экспорт + + СписокЗаполненныхУровней = Новый Массив; + + Для каждого ИмяУровня Из ИменаУровнейАдреса(Адрес.AddressType, Ложь) Цикл + + Если ЗначениеЗаполнено(Адрес[ИмяУровня]) Тогда + Если НЕ ПредставлениеУровняБезСокращения(ИмяУровня) Тогда + СписокЗаполненныхУровней.Добавить(Адрес[ИмяУровня] + " " + Адрес[ИмяУровня + "Type"]); + Иначе + СписокЗаполненныхУровней.Добавить(Адрес[ИмяУровня]); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат СтрСоединить(СписокЗаполненныхУровней, ", "); + +КонецФункции + +Процедура ОбновитьПредставлениеАдреса(Адрес, ВключатьСтрануВПредставление) Экспорт + + Представление = ПредставлениеАдреса(Адрес, ВключатьСтрануВПредставление); + Адрес.Value = Представление; + +КонецПроцедуры + +Функция ПредставлениеАдреса(Адрес, ВключатьСтрануВПредставление, ТипАдреса = Неопределено) Экспорт + + Если ТипЗнч(Адрес) <> Тип("Структура") Тогда + ВызватьИсключение НСтр("ru='Для формирования представления адреса передан некорректный тип адреса'"); + КонецЕсли; + + Если ТипАдреса = Неопределено Тогда + ТипАдреса = Адрес.AddressType; + КонецЕсли; + + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(ТипАдреса) Тогда + + Если Не Адрес.Свойство("Country") Или ПустаяСтрока(Адрес.Country) Тогда + Возврат Адрес.Value; + КонецЕсли; + + ВПредставлениеЕстьСтрана = СтрНачинаетсяС(ВРег(Адрес.Value), ВРег(Адрес.Country)); + Если ВключатьСтрануВПредставление Тогда + Если Не ВПредставлениеЕстьСтрана Тогда + Возврат Адрес.Country + ", " + Адрес.Value; + КонецЕсли; + Иначе + Если ВПредставлениеЕстьСтрана И СтрНайти(Адрес.Value, ",") > 0 Тогда + СписокПолей = СтрРазделить(Адрес.Value, ","); + СписокПолей.Удалить(0); + Возврат СтрСоединить(СписокПолей, ","); + КонецЕсли; + КонецЕсли; + + Возврат Адрес.Value; + + КонецЕсли; + + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(ТипАдреса) Тогда + Возврат ПредставлениеАдресаВСвободнойФорме(Адрес, ВключатьСтрануВПредставление); + КонецЕсли; + + СписокЗаполненныхУровней = Новый Массив; + + НаименованиеСтраны = ""; + Если ВключатьСтрануВПредставление И Адрес.Свойство("Country") И НЕ ПустаяСтрока(Адрес.Country) Тогда + СписокЗаполненныхУровней.Добавить(Адрес.Country); + НаименованиеСтраны = Адрес.Country; + КонецЕсли; + + Если Адрес.Свойство("ZipCode") И НЕ ПустаяСтрока(Адрес.ZipCode) Тогда + СписокЗаполненныхУровней.Добавить(Адрес.ZipCode); + КонецЕсли; + + Для каждого ИмяУровня Из ИменаУровнейАдреса(ТипАдреса, Истина) Цикл + + Если Адрес.Свойство(ИмяУровня) И НЕ ПустаяСтрока(Адрес[ИмяУровня]) Тогда + Если НЕ ПредставлениеУровняБезСокращения(ИмяУровня) Тогда + СписокЗаполненныхУровней.Добавить(СокрЛП(Адрес[ИмяУровня] + " " + Адрес[ИмяУровня + "Type"])); + Иначе + СписокЗаполненныхУровней.Добавить(Адрес[ИмяУровня]); + КонецЕсли; + КонецЕсли; + + КонецЦикла; + + Если Адрес.Свойство("HouseNumber") И НЕ ПустаяСтрока(Адрес.HouseNumber) Тогда + СписокЗаполненныхУровней.Добавить(НРег(Адрес.HouseType) + " № " + Адрес.HouseNumber); + КонецЕсли; + + Если Адрес.Свойство("Buildings") И Адрес.Buildings.Количество() > 0 Тогда + + Для каждого Строение Из Адрес.Buildings Цикл + СписокЗаполненныхУровней.Добавить(НРег(Строение.Type) + " " + Строение.Number); + КонецЦикла; + + КонецЕсли; + + Если Адрес.Свойство("Apartments") + И Адрес.Apartments <> Неопределено + И Адрес.Apartments.Количество() > 0 Тогда + + Для каждого Строение Из Адрес.Apartments Цикл + Если СтрСравнить(Строение.Type, "Другое") <> 0 Тогда + СписокЗаполненныхУровней.Добавить(НРег(Строение.Type) + " " + Строение.Number); + Иначе + СписокЗаполненныхУровней.Добавить(Строение.Number); + КонецЕсли; + КонецЦикла; + + КонецЕсли; + + Представление = СтрСоединить(СписокЗаполненныхУровней, ", "); + + Возврат ?(СтрСравнить(Представление, НаименованиеСтраны) <> 0, Представление, ""); КонецФункции #Область ПрочиеСлужебныеПроцедурыИФункции -// Строка представления по частям адреса в нужном порядке. -// -Функция ПредставлениеПоЧастямАдреса(ЧастиАдреса, Уровни) +Функция ПредставлениеАдресаВСвободнойФорме(Знач Адрес, Знач ВключатьСтрануВПредставление) - Эталон = СтруктураЧастейАдресаНаселенногоПункта(); - - Порядок = Новый СписокЗначений; - Для Каждого КлючЗначение Из Эталон Цикл - Если Уровни.Найти(КлючЗначение.Значение.Уровень) <> Неопределено Тогда - Порядок.Добавить(КлючЗначение.Значение.Уровень, КлючЗначение.Ключ); + Если ВключатьСтрануВПредставление И Адрес.Свойство("Country") И НЕ ПустаяСтрока(Адрес.Country) Тогда + ЧастиАдреса = СтрРазделить(Адрес.Value, ","); + Если ЗначениеЗаполнено(Адрес.Value) И СтрСравнить(ЧастиАдреса[0], Адрес.Country) = 0 Тогда + ЧастиАдреса.Удалить(0); + Адрес.Value = СтрСоединить(ЧастиАдреса, ","); КонецЕсли; - КонецЦикла; - Порядок.СортироватьПоЗначению(НаправлениеСортировки.Убыв); + + КонецЕсли; - Результат = ""; - Для Каждого ЭлементСписка Из Порядок Цикл - ИмяРеквизита = ЭлементСписка.Представление; - Если ЧастиАдреса.Свойство(ИмяРеквизита) Тогда - ЧастьПредставления = ЧастиАдреса[ИмяРеквизита].Представление; - Если Не ПустаяСтрока(ЧастьПредставления) Тогда - Результат = Результат + ", " + ЧастьПредставления; - КонецЕсли; - КонецЕсли - КонецЦикла; + Возврат Адрес.Value; - Возврат СокрЛП(Сред(Результат, 2)); КонецФункции -// Конструктор внутренней структуры элемента адреса. -// -Функция ЭлементАдреснойСтруктуры(Заголовок, Подсказка, ПутьXPath, Уровень, Предопределенный = Ложь) - - Результат = Новый Структура("Наименование, Сокращение, Идентификатор, Представление"); - Результат.Вставить("Заголовок", Заголовок); - Результат.Вставить("Подсказка", Подсказка); - Результат.Вставить("ПутьXPath", ПутьXPath); - Результат.Вставить("Предопределенный", Предопределенный); - Результат.Вставить("Уровень", Уровень); +Функция КонструкторРезультатаВыбора() Экспорт + Результат = Новый Структура(); + Результат.Вставить("РегионЗагружен", Неопределено); + Результат.Вставить("Идентификатор", ""); + Результат.Вставить("Представление", ""); + Результат.Вставить("КраткоеПредставлениеОшибки", ""); + Результат.Вставить("Отказ", Ложь); + Результат.Вставить("Уровень", 0); Возврат Результат; + КонецФункции // Возвращает пустую структура адреса. @@ -489,7 +976,6 @@ Возврат Результат; КонецФункции - #КонецОбласти #КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl b/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl index e335a1bf0..0d92ccece 100644 --- a/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl +++ b/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl @@ -98,7 +98,8 @@ // См. ТекущиеДелаПереопределяемый.ПриОпределенииОбработчиковТекущихДел. Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт - Если Метаданные.Обработки.Найти("ЗагрузкаКурсовВалют") = Неопределено Тогда + ОбъектМетаданных = Метаданные.Обработки.Найти("ЗагрузкаКурсовВалют"); + Если ОбъектМетаданных = Неопределено Тогда Возврат; КонецЕсли; @@ -114,7 +115,7 @@ // Процедура вызывается только при наличии подсистемы "Текущие дела", поэтому здесь // не делается проверка существования подсистемы. - Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта(Метаданные.Справочники.Валюты.ПолноеИмя()); + Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта(ОбъектМетаданных.ПолноеИмя()); Для Каждого Раздел Из Разделы Цикл diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениями/Module.bsl b/SSL/src/CommonModules/РаботаСПочтовымиСообщениями/Module.bsl index a4acf5277..b11df1eb9 100644 --- a/SSL/src/CommonModules/РаботаСПочтовымиСообщениями/Module.bsl +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениями/Module.bsl @@ -53,20 +53,21 @@ // * ОшибочныеПолучатели - Соответствие - (возвращаемый параметр) список адресов, по которым отправка не выполнена. // См. возвращаемое значение метода ИнтернетПочта.Послать() в синтакс-помощнике. // -// Соединение - ИнтернетПочта - (параметр устарел) см. параметр ПараметрыОтправки.Соединение. -// ПротоколПочты - Строка - (параметр устарел) см. параметр ПараметрыОтправки.Соединение. +// УдалитьСоединение - ИнтернетПочта - параметр устарел, см. параметр ПараметрыОтправки.Соединение. +// УдалитьПротоколПочты - Строка - параметр устарел, см. параметр ПараметрыОтправки.ПротоколПочты. // // Возвращаемое значение: -// Строка - Идентификатор сообщения. +// Строка - Идентификатор отправленного сообщения. +// Функция ОтправитьПочтовоеСообщение(Знач УчетнаяЗапись, Знач ПараметрыОтправки, - Знач Соединение = Неопределено, ПротоколПочты = "") Экспорт + Знач УдалитьСоединение = Неопределено, УдалитьПротоколПочты = "") Экспорт - Если Соединение <> Неопределено Тогда - ПараметрыОтправки.Вставить("Соединение", Соединение); + Если УдалитьСоединение <> Неопределено Тогда + ПараметрыОтправки.Вставить("Соединение", УдалитьСоединение); КонецЕсли; - Если Не ПустаяСтрока(ПротоколПочты) Тогда - ПараметрыОтправки.Вставить("ПротоколПочты", ПротоколПочты); + Если Не ПустаяСтрока(УдалитьПротоколПочты) Тогда + ПараметрыОтправки.Вставить("ПротоколПочты", УдалитьПротоколПочты); КонецЕсли; Если ТипЗнч(УчетнаяЗапись) <> Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты") @@ -129,6 +130,7 @@ // Загружает сообщения с сервера электронной почты для указанной учетной записи. // Предварительно, проверяется корректность заполнения учетной записи. +// Функция может вызвать исключение, которое требуется обработать. // // Параметры: // УчетнаяЗапись - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - учетная запись электронной почты. @@ -161,8 +163,7 @@ // они сами не возвращаются но возвращаются их вложения - двоичные // данные и их тексты в виде двоичных данных, рекурсивно. // -Функция ЗагрузитьПочтовыеСообщения(Знач УчетнаяЗапись, - Знач ПараметрыЗагрузки = Неопределено) Экспорт +Функция ЗагрузитьПочтовыеСообщения(Знач УчетнаяЗапись, Знач ПараметрыЗагрузки = Неопределено) Экспорт ИспользоватьДляПолучения = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УчетнаяЗапись, "ИспользоватьДляПолучения"); Если НЕ ИспользоватьДляПолучения Тогда @@ -330,6 +331,7 @@ // Булево - Истина, если настроена. // Функция УчетнаяЗаписьНастроена(УчетнаяЗапись, Знач ДляОтправки = Неопределено, Знач ДляПолучения = Неопределено) Экспорт + Параметры = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(УчетнаяЗапись, "АдресЭлектроннойПочты,СерверВходящейПочты,СерверИсходящейПочты,ИспользоватьДляПолучения,ИспользоватьДляОтправки"); Если ДляОтправки = Неопределено Тогда ДляОтправки = Параметры.ИспользоватьДляОтправки; @@ -340,6 +342,7 @@ Возврат Не (ПустаяСтрока(Параметры.АдресЭлектроннойПочты) Или ДляПолучения И ПустаяСтрока(Параметры.СерверВходящейПочты) Или ДляОтправки И ПустаяСтрока(Параметры.СерверИсходящейПочты)); + КонецФункции // Выполняет проверку настроек учетной записи электронной почты. @@ -350,7 +353,10 @@ // ДополнительноеСообщение - Строка - сообщения о том, какие проверки были выполнены для учетной записи. // Процедура ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(УчетнаяЗапись, СообщениеОбОшибке, ДополнительноеСообщение) Экспорт - РаботаСПочтовымиСообщениямиСлужебный.ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(УчетнаяЗапись, СообщениеОбОшибке, ДополнительноеСообщение); + + РаботаСПочтовымиСообщениямиСлужебный.ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(УчетнаяЗапись, + СообщениеОбОшибке, ДополнительноеСообщение); + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебный/Module.bsl b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебный/Module.bsl index e69885bc0..e71f5a69a 100644 --- a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебный/Module.bsl @@ -257,6 +257,13 @@ КонецПроцедуры +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииСписковСОграничениемДоступа(Списки) Экспорт + + Списки.Вставить(Метаданные.Справочники.УчетныеЗаписиЭлектроннойПочты, Истина); + +КонецПроцедуры + // См. УправлениеДоступомПереопределяемый.ПриЗаполненииВидовОграниченийПравОбъектовМетаданных. Процедура ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(Описание) Экспорт @@ -503,9 +510,9 @@ КонецЕсли; Если ПараметрыОтправки.Свойство("ОбрабатыватьТексты") И НЕ ПараметрыОтправки.ОбрабатыватьТексты Тогда - ОбрабатыватьТекстСообщения = ОбработкаТекстаИнтернетПочтовогоСообщения.НеОбрабатывать; + ОбрабатыватьТекстСообщения = ОбработкаТекстаИнтернетПочтовогоСообщения.НеОбрабатывать; Иначе - ОбрабатыватьТекстСообщения = ОбработкаТекстаИнтернетПочтовогоСообщения.Обрабатывать; + ОбрабатыватьТекстСообщения = ОбработкаТекстаИнтернетПочтовогоСообщения.Обрабатывать; КонецЕсли; Если ПараметрыОтправки.Свойство("УведомитьОДоставке") Тогда @@ -526,14 +533,26 @@ Соединение.Подключиться(Профиль); КонецЕсли; - ОшибочныеПолучатели = Соединение.Послать(Письмо, ОбрабатыватьТекстСообщения, - ?(ПротоколПочты = "IMAP", ПротоколИнтернетПочты.IMAP, ПротоколИнтернетПочты.SMTP)); + Попытка + ОшибочныеПолучатели = Соединение.Послать(Письмо, ОбрабатыватьТекстСообщения, + ?(ПротоколПочты = "IMAP", ПротоколИнтернетПочты.IMAP, ПротоколИнтернетПочты.SMTP)); + Исключение + Если СоздаватьСоединение Тогда + Попытка + Соединение.Отключиться(); + Исключение + // Обработка и журналирование исключения не требуется, т.к. + // в вызывающий код передается исходное исключение, которое будет там обработано. + КонецПопытки; + КонецЕсли; + ВызватьИсключение; + КонецПопытки; Если СоздаватьСоединение Тогда Соединение.Отключиться(); УстановитьОтключениеБезопасногоРежима(Ложь); КонецЕсли; - + ПараметрыОтправки.Вставить("ИдентификаторСообщения", Письмо.ИдентификаторСообщения); ПараметрыОтправки.Вставить("ОшибочныеПолучатели", ОшибочныеПолучатели); @@ -585,41 +604,50 @@ УстановитьОтключениеБезопасногоРежима(Истина); Соединение = Новый ИнтернетПочта; Соединение.Подключиться(Профиль, Протокол); - - Если ПолучениеЗаголовков Тогда - НаборПисем = Соединение.ПолучитьЗаголовки(); - ИначеЕсли Не РежимТестирования Тогда - НастройкиТранспорта = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(УчетнаяЗапись, "ПротоколВходящейПочты,ОставлятьКопииСообщенийНаСервере,ПериодХраненияСообщенийНаСервере"); - Если НастройкиТранспорта.ПротоколВходящейПочты = "IMAP" Тогда - НастройкиТранспорта.ОставлятьКопииСообщенийНаСервере = Истина; - НастройкиТранспорта.ПериодХраненияСообщенийНаСервере = 0; - КонецЕсли; - - Если НастройкиТранспорта.ОставлятьКопииСообщенийНаСервере Тогда - Если ЗаголовкиИдентификаторы.Количество() = 0 И НастройкиТранспорта.ПериодХраненияСообщенийНаСервере > 0 Тогда - Заголовки = Соединение.ПолучитьЗаголовки(); - НаборСообщенийДляУдаления = Новый Массив; - Для Каждого ЭлементЗаголовок Из Заголовки Цикл - ТекущаяДата = ТекущаяДатаСеанса(); - РазницаДат = (ТекущаяДата - ЭлементЗаголовок.ДатаОтправления) / (3600*24); - Если РазницаДат >= НастройкиТранспорта.ПериодХраненияСообщенийНаСервере Тогда - НаборСообщенийДляУдаления.Добавить(ЭлементЗаголовок); - КонецЕсли; - КонецЦикла; + Попытка + Если ПолучениеЗаголовков Тогда + НаборПисем = Соединение.ПолучитьЗаголовки(); + ИначеЕсли Не РежимТестирования Тогда + НастройкиТранспорта = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(УчетнаяЗапись, "ПротоколВходящейПочты,ОставлятьКопииСообщенийНаСервере,ПериодХраненияСообщенийНаСервере"); + Если НастройкиТранспорта.ПротоколВходящейПочты = "IMAP" Тогда + НастройкиТранспорта.ОставлятьКопииСообщенийНаСервере = Истина; + НастройкиТранспорта.ПериодХраненияСообщенийНаСервере = 0; + КонецЕсли; + + Если НастройкиТранспорта.ОставлятьКопииСообщенийНаСервере Тогда + Если ЗаголовкиИдентификаторы.Количество() = 0 И НастройкиТранспорта.ПериодХраненияСообщенийНаСервере > 0 Тогда + Заголовки = Соединение.ПолучитьЗаголовки(); + НаборСообщенийДляУдаления = Новый Массив; + Для Каждого ЭлементЗаголовок Из Заголовки Цикл + ТекущаяДата = ТекущаяДатаСеанса(); + РазницаДат = (ТекущаяДата - ЭлементЗаголовок.ДатаОтправления) / (3600*24); + Если РазницаДат >= НастройкиТранспорта.ПериодХраненияСообщенийНаСервере Тогда + НаборСообщенийДляУдаления.Добавить(ЭлементЗаголовок); + КонецЕсли; + КонецЦикла; + КонецЕсли; + АвтоматическиУдалятьСообщенияПриВыбореССервера = Ложь; + Иначе + АвтоматическиУдалятьСообщенияПриВыбореССервера = Истина; + КонецЕсли; + + НаборПисем = Соединение.Выбрать(АвтоматическиУдалятьСообщенияПриВыбореССервера, ЗаголовкиИдентификаторы); + + Если НаборСообщенийДляУдаления.Количество() > 0 Тогда + Соединение.УдалитьСообщения(НаборСообщенийДляУдаления); КонецЕсли; - АвтоматическиУдалятьСообщенияПриВыбореССервера = Ложь; - Иначе - АвтоматическиУдалятьСообщенияПриВыбореССервера = Истина; КонецЕсли; - - НаборПисем = Соединение.Выбрать(АвтоматическиУдалятьСообщенияПриВыбореССервера, ЗаголовкиИдентификаторы); - - Если НаборСообщенийДляУдаления.Количество() > 0 Тогда - Соединение.УдалитьСообщения(НаборСообщенийДляУдаления); - КонецЕсли; - КонецЕсли; - Соединение.Отключиться(); + Соединение.Отключиться(); + Исключение + Попытка + Соединение.Отключиться(); + Исключение + // Обработка и журналирование исключения не требуется, т.к. + // в вызывающий код передается исходное исключение, которое будет там обработано. + КонецПопытки; + ВызватьИсключение; + КонецПопытки; УстановитьОтключениеБезопасногоРежима(Ложь); Если РежимТестирования Тогда @@ -635,9 +663,9 @@ НаборСообщений = НаборПисем; Если ПриводитьСообщенияКТипу Тогда Если ПараметрыЗагрузки.Свойство("Колонки") Тогда - НаборСообщений = ПолучитьАдаптированныйНаборПисем(НаборПисем, ПараметрыЗагрузки.Колонки); + НаборСообщений = АдаптированныйНаборПисем(НаборПисем, ПараметрыЗагрузки.Колонки); Иначе - НаборСообщений = ПолучитьАдаптированныйНаборПисем(НаборПисем); + НаборСообщений = АдаптированныйНаборПисем(НаборПисем); КонецЕсли; КонецЕсли; @@ -645,11 +673,10 @@ КонецФункции -// Функция записывает адаптированный набор писем по переданным колонкам. -// Значения колонок, типы которых не поддерживаются для оперирования на клиенте -// преобразуются к строковому виду. +// Преобразует набор почтовых сообщений в таблицу значений с колонками простых типов. +// Значения колонок, типы которых не поддерживаются на клиенте, преобразуются к строковому виду. // -Функция ПолучитьАдаптированныйНаборПисем(Знач НаборПисем, Знач Колонки = Неопределено) +Функция АдаптированныйНаборПисем(Знач НаборПисем, Знач Колонки = Неопределено) Результат = СоздатьАдаптированноеОписаниеПисьма(Колонки); @@ -1009,6 +1036,10 @@ КонецЕсли; ИмяФайла = ИмяФайла + "." + НастройкиФормата.Расширение; + Если НастройкиСохранения.ПереводитьИменаФайловВТранслит Тогда + ИмяФайла = СтроковыеФункцииКлиентСервер.СтрокаЛатиницей(ИмяФайла); + КонецЕсли; + ПолноеИмяФайла = УникальноеИмяФайла(ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяВременнойПапки) + ИмяФайла); ТабличныйДокумент.Записать(ПолноеИмяФайла, ТипФайла); diff --git a/SSL/src/CommonModules/РаботаСФайлами/Module.bsl b/SSL/src/CommonModules/РаботаСФайлами/Module.bsl index 550f3f196..f17800694 100644 --- a/SSL/src/CommonModules/РаботаСФайлами/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайлами/Module.bsl @@ -100,7 +100,7 @@ // * СсылкаНаДвоичныеДанныеФайла - Строка - Адрес во временном хранилище, по которому помещены данные. // * ОтносительныйПуть - Строка - Относительный путь файла. // * ДатаМодификацииУниверсальная - Дата - Дата изменения фала. -// * ИмяФайла - Строка - Имя файла без точки. +// * ИмяФайла - Строка - Имя файла. // * Наименование - Строка - Наименование файла в справочнике хранения файлов. // * Расширение - Строка - Расширение файла без точки. // * Размер - Число - Размер файла. @@ -139,8 +139,8 @@ ПоддерживаетсяХранениеВерсий = (ТипЗнч(ПрисоединенныйФайл) = Тип("СправочникСсылка.Файлы")); ИспользуетсяВерсионированиеФайлов = ПоддерживаетсяХранениеВерсий - И ПрисоединенныйФайл.ХранитьВерсии - И ЗначениеЗаполнено(ПрисоединенныйФайл.ТекущаяВерсия); + И ПрисоединенныйФайл.ХранитьВерсии + И ЗначениеЗаполнено(ПрисоединенныйФайл.ТекущаяВерсия); Если ПолучатьСсылкуНаДвоичныеДанные Тогда Если ИспользуетсяВерсионированиеФайлов Тогда @@ -567,25 +567,14 @@ ПрисоединенныйФайл.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); ПрисоединенныйФайл.ПутьКФайлу = ""; - СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; - ИзвлеченныйТекст = ""; + РезультатИзвлеченияТекста = РаботаСФайламиСлужебный.ИзвлечьТекст(АдресВременногоХранилищаТекста, + ДвоичныеДанные, ПрисоединенныйФайл.Расширение); + ПрисоединенныйФайл.СтатусИзвлеченияТекста = РезультатИзвлеченияТекста.СтатусИзвлеченияТекста; + ПрисоединенныйФайл.ТекстХранилище = РезультатИзвлеченияТекста.ТекстХранилище; - Если ЭтоАдресВременногоХранилища(АдресВременногоХранилищаТекста) Тогда - ИзвлеченныйТекст = РаботаСФайламиСлужебный.ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекста); - СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; - - ИначеЕсли НЕ РаботаСФайламиСлужебный.ИзвлекатьТекстыФайловНаСервере() Тогда - // Тексты извлекаются сразу, а не в фоновом задании. - СтатусИзвлеченияТекста = РаботаСФайламиСлужебный.ИзвлечьТекст( - ДвоичныеДанные, ПрисоединенныйФайл.Расширение, ИзвлеченныйТекст); - КонецЕсли; - - ПрисоединенныйФайл.СтатусИзвлеченияТекста = СтатусИзвлеченияТекста; - ПрисоединенныйФайл.ТекстХранилище = Новый ХранилищеЗначения(ИзвлеченныйТекст); ПрисоединенныйФайл.Автор = Автор; ПрисоединенныйФайл.Заполнить(Неопределено); - - ПрисоединенныйФайл.Записать(); + ПрисоединенныйФайл.Записать(); ЗафиксироватьТранзакцию(); @@ -621,38 +610,15 @@ ПрисоединенныйФайл.Том = СведенияОФайле.Том; ПрисоединенныйФайл.ПутьКФайлу = СведенияОФайле.ПутьКФайлу; - СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; - ИзвлеченныйТекст = ""; + РезультатИзвлеченияТекста = РаботаСФайламиСлужебный.ИзвлечьТекст(АдресВременногоХранилищаТекста, + ДвоичныеДанные, ПрисоединенныйФайл.Расширение); + ПрисоединенныйФайл.СтатусИзвлеченияТекста = РезультатИзвлеченияТекста.СтатусИзвлеченияТекста; + ПрисоединенныйФайл.ТекстХранилище = РезультатИзвлеченияТекста.ТекстХранилище; - Если ЭтоАдресВременногоХранилища(АдресВременногоХранилищаТекста) Тогда - ИзвлеченныйТекст = РаботаСФайламиСлужебный.ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекста); - СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; - - ИначеЕсли НЕ РаботаСФайламиСлужебный.ИзвлекатьТекстыФайловНаСервере() Тогда - // Тексты извлекаются сразу, а не в фоновом задании. - СтатусИзвлеченияТекста = РаботаСФайламиСлужебный.ИзвлечьТекст( - ДвоичныеДанные, ПрисоединенныйФайл.Расширение, ИзвлеченныйТекст); - КонецЕсли; - - ПрисоединенныйФайл.СтатусИзвлеченияТекста = СтатусИзвлеченияТекста; - ПрисоединенныйФайл.ТекстХранилище = Новый ХранилищеЗначения(ИзвлеченныйТекст); ПрисоединенныйФайл.Автор = Автор; ПрисоединенныйФайл.Заполнить(Неопределено); ПрисоединенныйФайл.Записать(); - Если РаботаСФайламиСлужебныйВызовСервера.ЭтоСправочникФайлы(ВладелецФайлов) Тогда - - СведенияОФайле = РаботаСФайламиКлиентСервер.СведенияОФайле("ФайлСВерсией"); - СведенияОФайле.АдресВременногоХранилищаФайла = АдресФайлаВоВременномХранилище; - СведенияОФайле.АдресВременногоХранилищаТекста = АдресВременногоХранилищаТекста; - СведенияОФайле.ЗаписатьВИсторию = Истина; - СведенияОФайле.ИмяБезРасширения = ИмяБезРасширения; - СведенияОФайле.РасширениеБезТочки = ПрисоединенныйФайл.Расширение; - - Версия = РаботаСФайламиСлужебный.СоздатьВерсию(ПрисоединенныйФайл.Ссылка, СведенияОФайле); - РаботаСФайламиСлужебный.ОбновитьВерсиюВФайле(ПрисоединенныйФайл.Ссылка, Версия, АдресВременногоХранилищаТекста); - - КонецЕсли; Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); @@ -1321,7 +1287,6 @@ КонецФункции - // Возвращает кодировку текста, полученную из сигнатуры BOM в начале. // // Параметры: diff --git a/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl index 406d6c59e..50444848e 100644 --- a/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl @@ -112,13 +112,13 @@ КонецПроцедуры -// Открывает форму для настройки параметров основного рабочего каталога из персональных настроек пользователя программы. -// Основной рабочий каталог - папка на персональном компьютере пользователя, в которой временно хранятся файлы, +// Открывает форму для настройки параметров рабочего каталога из персональных настроек пользователя программы. +// Рабочий каталог - папка на персональном компьютере пользователя, в которой временно хранятся файлы, // полученные из программы для просмотра или редактирования. // Процедура ОткрытьФормуНастройкиРабочегоКаталога() Экспорт - ОткрытьФорму("ОбщаяФорма.НастройкаОсновногоРабочегоКаталога"); + ОткрытьФорму("ОбщаяФорма.НастройкаРабочегоКаталога"); КонецПроцедуры diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl index 42d36b379..f7243593a 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl @@ -1,8 +1,3 @@ -//////////////////////////////////////////////////////////////////////////////// -// Подсистема "Работа с файлами". -// -//////////////////////////////////////////////////////////////////////////////// - #Область СлужебныйПрограммныйИнтерфейс // См. ЗапретРедактированияРеквизитовОбъектовПереопределяемый.ПриОпределенииОбъектовСЗаблокированнымиРеквизитами. @@ -431,8 +426,9 @@ КопияФайла.ВладелецФайла = Получатель.Ссылка; КопияФайла.Редактирует = Справочники.Пользователи.ПустаяСсылка(); - КопияФайла.ТекстХранилище = Новый ХранилищеЗначения(КопируемыйФайл.ТекстХранилище.Получить()); - КопияФайла.ФайлХранилище = Новый ХранилищеЗначения(КопируемыйФайл.ФайлХранилище.Получить()); + КопияФайла.ТекстХранилище = КопируемыйФайл.ТекстХранилище; + КопияФайла.СтатусИзвлеченияТекста = КопируемыйФайл.СтатусИзвлеченияТекста; + КопияФайла.ФайлХранилище = КопируемыйФайл.ФайлХранилище; ДвоичныеДанные = РаботаСФайлами.ДвоичныеДанныеФайла(КопируемыйФайл); КопияФайла.ТипХраненияФайла = ТипХраненияФайлов(); @@ -1127,6 +1123,32 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Управление доступом. + +Функция ЭтоСправочникФайловИлиВерсийФайлов(ПолноеИмя) Экспорт + + ЧастиИмени = СтрРазделить(ПолноеИмя, ".", Ложь); + Если ЧастиИмени.Количество() <> 2 Тогда + Возврат Ложь; + КонецЕсли; + + Если ВРег(ЧастиИмени[0]) <> ВРег("Справочник") + И ВРег(ЧастиИмени[0]) <> ВРег("Catalog") Тогда + Возврат Ложь; + КонецЕсли; + + Если СтрЗаканчиваетсяНа(ВРег(ЧастиИмени[1]), ВРег("ПрисоединенныеФайлы")) + Или ВРег(ЧастиИмени[1]) = ВРег("Файлы") + Или ВРег(ЧастиИмени[1]) = ВРег("ВерсииФайлов") Тогда + + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Электронная подпись и шифрование для файлов. @@ -1333,17 +1355,13 @@ ВРабочемКаталогеВладельца = Истина; ПолноеИмяФайлаВРабочемКаталоге = РаботаСФайламиСлужебныйВызовСервера.ПолучитьПолноеИмяФайлаИзРегистра(ВерсияСсылка, ИмяРабочегоКаталога, ВРабочемКаталогеНаЧтение, ВРабочемКаталогеВладельца); - Если НЕ ПустаяСтрока(ПолноеИмяФайлаВРабочемКаталоге) Тогда + + Если Не ПустаяСтрока(ПолноеИмяФайлаВРабочемКаталоге) Тогда МассивФайловВРабочемКаталогеДляУдаления.Добавить(ПолноеИмяФайлаВРабочемКаталоге); КонецЕсли; РаботаСФайламиСлужебныйВызовСервера.УдалитьИзРегистра(ВерсияСсылка); - СтатусИзвлеченияТекста = Неопределено; - Если Зашифровать = Ложь Тогда - СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; - КонецЕсли; - СведенияОФайле = РаботаСФайламиКлиентСервер.СведенияОФайле("ФайлСВерсией"); СведенияОФайле.ИмяБезРасширения = ВерсияСсылка.ПолноеНаименование; СведенияОФайле.Комментарий = ВерсияСсылка.Комментарий; @@ -1353,16 +1371,16 @@ СведенияОФайле.ВремяИзмененияУниверсальное = ВерсияСсылка.ДатаМодификацииУниверсальная; СведенияОФайле.Размер = ВерсияСсылка.Размер; СведенияОФайле.ВремяИзмененияУниверсальное = ВерсияСсылка.ДатаМодификацииУниверсальная; - СведенияОФайле.НовыйСтатусИзвлеченияТекста = СтатусИзвлеченияТекста; + СведенияОФайле.НовыйСтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; СведенияОФайле.Зашифрован = Зашифровать; СведенияОФайле.ХранитьВерсии = Ложь; ОбновитьВерсиюФайла(ФайлСсылка, СведенияОФайле, ВерсияСсылка, УникальныйИдентификатор); // Для варианта с хранением файлов на диске (на сервере) удаляем Файл из временного хранилища после получения. - Если НЕ ПустаяСтрока(ДанныеДляЗаписиНаСервере.АдресФайла) И ЭтоАдресВременногоХранилища(ДанныеДляЗаписиНаСервере.АдресФайла) Тогда + Если Не ПустаяСтрока(ДанныеДляЗаписиНаСервере.АдресФайла) И ЭтоАдресВременногоХранилища(ДанныеДляЗаписиНаСервере.АдресФайла) Тогда УдалитьИзВременногоХранилища(ДанныеДляЗаписиНаСервере.АдресФайла); КонецЕсли; - + КонецЦикла; БлокировкаДанных = Новый БлокировкаДанных; @@ -1374,7 +1392,9 @@ ЗаблокироватьДанныеДляРедактирования(ФайлСсылка, , УникальныйИдентификатор); ФайлОбъект.Зашифрован = Зашифровать; - ФайлОбъект.ТекстХранилище = Новый ХранилищеЗначения(""); // очистим извлеченный текст + ФайлОбъект.ТекстХранилище = Новый ХранилищеЗначения(""); + ФайлОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; + // Чтобы прошла запись ранее подписанного объекта. ФайлОбъект.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", Истина); @@ -1390,9 +1410,10 @@ КонецЕсли; КонецЕсли; - Если АдресВременногоХранилищаТекстаТекущейВерсии <> "" Тогда - Текст = ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекстаТекущейВерсии); - ФайлОбъект.ТекстХранилище = Новый ХранилищеЗначения(Текст); + Если Не Зашифровать И АдресВременногоХранилищаТекстаТекущейВерсии <> "" Тогда + РезультатИзвлеченияТекста = ИзвлечьТекст(АдресВременногоХранилищаТекстаТекущейВерсии); + ФайлОбъект.СтатусИзвлеченияТекста = РезультатИзвлеченияТекста.СтатусИзвлеченияТекста; + ФайлОбъект.ТекстХранилище = РезультатИзвлеченияТекста.ТекстХранилище; КонецЕсли; МетаданныеФайла = Метаданные.НайтиПоТипу(ТипЗнч(ФайлСсылка)); @@ -1416,42 +1437,36 @@ //////////////////////////////////////////////////////////////////////////////// // Контроль ведения учета. -#Область ПроверкаНаличияСсылокНаНесуществующиеФайлыВТоме +// См. КонтрольВеденияУчетаПереопределяемый.ПриОпределенииПроверок +Процедура ПриОпределенииПроверок(ГруппыПроверок, Проверки) Экспорт + + Проверка = Проверки.Добавить(); + Проверка.ИдентификаторГруппы = "СистемныеПроверки"; + Проверка.Наименование = НСтр("ru='Поиск ссылок на несуществующие файлы в томах хранения'"); + Проверка.Причины = НСтр("ru='Файл был физически удален или перемещен на диске вследствие работы антивирусных программ, + |непреднамеренных действий администратора и.т.д.'"); + Проверка.Рекомендация = НСтр("ru='• Пометить файл в программе на удаление; + |• Или восстановить файл на диске в томе из резервной копии.'"); + Проверка.Идентификатор = "СтандартныеПодсистемы.ПроверкаСсылокНаНесуществующиеФайлыВТоме"; + Проверка.ОбработчикПроверки = "РаботаСФайламиСлужебный.ПроверкаСсылокНаНесуществующиеФайлыВТоме"; + Проверка.КонтекстПроверокВеденияУчета = "СистемныеПроверки"; + Проверка.Отключена = Истина; + +КонецПроцедуры // Исполняет проверку несуществующих файлов на диске, в случае когда присоединенные файлы хранятся в томах. // -// Параметры: -// Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на исполняемую проверку. -// ПараметрыПроверки - Структура - Параметры проверки которую необходимо выполнить: -// * Идентификатор - Строка - Строковый идентификатор проверки. -// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых -// объектов (только для объектов с датой). Объекты, дата которых меньше -// указанной, не следует проверять. По умолчанию не заполнено (т.е. проверять все). -// * ЛимитПроблем - Число - Количество проверяемых объектов. -// По умолчанию 1000. Если указано 0, то следует проверить все объекты. -// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к -// которому относится выполненная проверка. -// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность, с которой следует -// регистрировать выявленные проблемы учета: -// Информация, Предупреждение, Ошибка, ПолезныйСовет и ВажнаяИнформация. -// Процедура ПроверкаСсылокНаНесуществующиеФайлыВТоме(Проверка, ПараметрыПроверки) Экспорт Если ОбщегоНазначения.РазделениеВключено() Тогда Возврат; КонецЕсли; - Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтрольВеденияУчета") Тогда - Возврат; - КонецЕсли; - ДоступныеТома = ДоступныеТома(ПараметрыПроверки); Если ДоступныеТома.Количество() = 0 Тогда Возврат; КонецЕсли; - МодульКонтрольВеденияУчета = ОбщегоНазначения.ОбщийМодуль("КонтрольВеденияУчета"); - МодульРаботаВМоделиСервиса = Неопределено; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); @@ -1479,10 +1494,128 @@ КонецПроцедуры -#КонецОбласти - //////////////////////////////////////////////////////////////////////////////// -// Прочие функции +// Извлечение текста для полнотекстового поиска. + +Процедура ИзвлечьТекстИзФайлов() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если НЕ ЭтоПлатформаWindows() Тогда + Возврат; // Извлечение текста работает только под Windows. + КонецЕсли; + + ИмяСРасширениемФайла = ""; + + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Файлы.Извлечение текста'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Информация, + , + , + НСтр("ru = 'Начато регламентное извлечения текста'")); + + Запрос = Новый Запрос(ТекстЗапросаДляИзвлеченияТекста()); + ФайлыДляИзвлеченияТекста = Запрос.Выполнить().Выгрузить(); + + ЭтоПлатформаWindows = ЭтоПлатформаWindows(); + + Для Каждого ФайлБезТекста Из ФайлыДляИзвлеченияТекста Цикл + + УдалятьВременныйФайл = Ложь; + + НачатьТранзакцию(); + Попытка + + БлокировкаДанных = Новый БлокировкаДанных; + ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(ФайлБезТекста.Ссылка)).ПолноеИмя()); + ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ФайлБезТекста.Ссылка); + Попытка + БлокировкаДанных.Заблокировать(); + Исключение + // Заблокированные файлы будут обработаны в следующий раз. + ОтменитьТранзакцию(); + Продолжить; + КонецПопытки; + + ФайлОбъект = ФайлБезТекста.Ссылка.ПолучитьОбъект(); + Если ФайлОбъект = Неопределено Тогда // файл уже удален в другом сеансе + ОтменитьТранзакцию(); + Продолжить; + КонецЕсли; + + Попытка + ФайлОбъект.Заблокировать(); + Исключение + // Заблокированные файлы будут обработаны в следующий раз. + ОтменитьТранзакцию(); + Продолжить; + КонецПопытки; + + Если Не ЭтоПлатформаWindows Тогда // Невозможно извлечь текст. + ФайлОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; + ФайлОбъект.ТекстХранилище = Новый ХранилищеЗначения(""); + Продолжить; + КонецЕсли; + + ИмяСРасширениемФайла = ФайлОбъект.Наименование + "." + ФайлОбъект.Расширение; + + Если ЭтоЭлементРаботаСФайлами(ФайлОбъект.Ссылка) Тогда + МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(ФайлОбъект.Ссылка)); + ВозможностьХранитьВерсии = ОбщегоНазначения.ЕстьРеквизитОбъекта("ТекущаяВерсия", МетаданныеОбъекта); + Если ВозможностьХранитьВерсии И ЗначениеЗаполнено(ФайлОбъект.ТекущаяВерсия.Ссылка) Тогда + ИмяФайлаСДвоичнымиДанными = ИмяФайлаСДвоичнымиДанными(ФайлОбъект.ТекущаяВерсия.Ссылка); + Иначе + ИмяФайлаСДвоичнымиДанными = ИмяФайлаСДвоичнымиДанными(ФайлОбъект.Ссылка); + КонецЕсли; + КонецЕсли; + + УдалятьВременныйФайл = ФайлОбъект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе + И Не ПустаяСтрока(ИмяФайлаСДвоичнымиДанными); + РезультатИзвлеченияТекста = ИзвлечьТекстИзФайлаНаДиске(ИмяФайлаСДвоичнымиДанными, ФайлБезТекста.Кодировка); + ФайлОбъект.СтатусИзвлеченияТекста = РезультатИзвлеченияТекста.СтатусИзвлеченияТекста; + ФайлОбъект.ТекстХранилище = РезультатИзвлеченияТекста.ТекстХранилище; + + ПриЗаписиИзвлеченногоТекста(ФайлОбъект); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Файлы.Извлечение текста'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + , + , + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось выполнить регламентное извлечение текста из файла + |""%1"" + |по причине: + |""%2"".'"), + ИмяСРасширениемФайла, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) )); + КонецПопытки; + + Если УдалятьВременныйФайл Тогда + Попытка + УдалитьФайлы(ИмяФайлаСДвоичнымиДанными); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Извлечение текста'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + КонецЕсли; + + КонецЦикла; + + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Файлы.Извлечение текста'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Информация, + , + , + НСтр("ru = 'Закончено регламентное извлечение текста'")); + +КонецПроцедуры // Возвращает Истина, если текст из файлов извлекается на сервере, а не на клиенте. // @@ -1509,40 +1642,17 @@ КонецФункции -// Получает строку из временного хранилища (передача с клиента на сервер, -// делается через временное хранилище). -// -Функция ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекста) Экспорт - - Если ПустаяСтрока(АдресВременногоХранилищаТекста) Тогда - Возврат ""; - КонецЕсли; - - ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); - ПолучитьИзВременногоХранилища(АдресВременногоХранилищаТекста).Записать(ИмяВременногоФайла); - - ТекстовыйФайл = Новый ЧтениеТекста(ИмяВременногоФайла, КодировкаТекста.UTF8); - Текст = ТекстовыйФайл.Прочитать(); - ТекстовыйФайл.Закрыть(); - УдалитьФайлы(ИмяВременногоФайла); - - Возврат Текст; - -КонецФункции - // Записывает на сервер результат извлечения текста - извлеченный текст и СтатусИзвлеченияТекста. -Процедура ЗаписатьРезультатИзвлеченияТекста(ФайлИлиВерсияСсылка, - РезультатИзвлечения, - АдресВременногоХранилищаТекста) Экспорт +Процедура ЗаписатьРезультатИзвлеченияТекста(ФайлИлиВерсияСсылка, РезультатИзвлечения, + АдресВременногоХранилищаТекста) Экспорт ФайлИлиВерсияОбъект = ФайлИлиВерсияСсылка.ПолучитьОбъект(); ФайлИлиВерсияОбъект.Заблокировать(); - Если ПустаяСтрока(АдресВременногоХранилищаТекста) Тогда - Текст = ""; - Иначе - Текст = ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекста); - ФайлИлиВерсияОбъект.ТекстХранилище = Новый ХранилищеЗначения(Текст); + Если Не ПустаяСтрока(АдресВременногоХранилищаТекста) Тогда + РезультатИзвлеченияТекста = ИзвлечьТекст(АдресВременногоХранилищаТекста); + ФайлИлиВерсияОбъект.СтатусИзвлеченияТекста = РезультатИзвлеченияТекста.СтатусИзвлеченияТекста; + ФайлИлиВерсияОбъект.ТекстХранилище = РезультатИзвлеченияТекста.ТекстХранилище; УдалитьИзВременногоХранилища(АдресВременногоХранилищаТекста); КонецЕсли; @@ -1558,6 +1668,9 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Прочие функции. + Функция СписокРасширенийДляПредпросмотра() Экспорт // См. также перечисление ФорматКартинки. @@ -1642,7 +1755,7 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// Обмен файлами +// Обмен файлами. // Подготовка параметров и предварительные проверки перед созданием файлового начального образа. // @@ -2003,122 +2116,56 @@ КонецПроцедуры -Процедура ИзвлечьТекстИзФайлов() Экспорт +//////////////////////////////////////////////////////////////////////////////// +// Извлечение текста. + +// Возвращает текст запроса для получения файлов у которых не извлечен текст. +// +// Параметры: +// ПолучитьВсеФайлы - Булево - начальное значение Ложь. Позволяет отключить выборку +// файлов по частям, если передать Истина. +// +// Возвращаемое значение: +// Строка - текст запроса. +// +Функция ТекстЗапросаДляИзвлеченияТекста(ПолучитьВсеФайлы = Ложь, ДополнительныеПоля = Ложь) Экспорт - УстановитьПривилегированныйРежим(Истина); + // Текст запроса формируется по всем справочникам присоединенных файлов. + ТекстЗапроса = ""; - Если НЕ ЭтоПлатформаWindows() Тогда - Возврат; // Извлечение текста работает только под Windows. - КонецЕсли; + ТипыФайлов = Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип.Типы(); - ИмяСРасширениемФайла = ""; + ВсеИменаСправочников = Новый Массив; - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Извлечение текста'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Информация, - , - , - НСтр("ru = 'Начато регламентное извлечения текста'")); - - Запрос = Новый Запрос; - Запрос.Текст = РаботаСФайламиСлужебныйВызовСервера.ТекстЗапросаДляИзвлеченияТекста(); - Результат = Запрос.Выполнить(); - - ТаблицаВыгрузки = Результат.Выгрузить(); - - Для Каждого Строка Из ТаблицаВыгрузки Цикл - - НачатьТранзакцию(); - Попытка - - // упр. блокировка - БлокировкаДанных = Новый БлокировкаДанных; - ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(Строка.Ссылка)).ПолноеИмя()); - ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", Строка.Ссылка); - БлокировкаДанных.Заблокировать(); - - ФайлОбъект = Строка.Ссылка.ПолучитьОбъект(); - - Если ФайлОбъект = Неопределено Тогда - ОтменитьТранзакцию(); - Продолжить; - КонецЕсли; - - Попытка - ФайлОбъект.Заблокировать(); - Исключение - // Заблокированные файлы будут обработаны в следующий раз. - ОтменитьТранзакцию(); - Продолжить; - КонецПопытки; - - ИмяСРасширениемФайла = ФайлОбъект.Наименование + "." + ФайлОбъект.Расширение; - - Если ЭтоЭлементРаботаСФайлами(ФайлОбъект.Ссылка) Тогда - МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(ФайлОбъект.Ссылка)); - ВозможностьХранитьВерсии = ОбщегоНазначения.ЕстьРеквизитОбъекта("ТекущаяВерсия", МетаданныеОбъекта); - Если ВозможностьХранитьВерсии И ЗначениеЗаполнено(ФайлОбъект.ТекущаяВерсия.Ссылка) Тогда - ИмяФайлаСПутем = РаботаСФайламиСлужебныйВызовСервера.ПолучитьИмяФайлаСПутемКДвоичнымДанным(ФайлОбъект.ТекущаяВерсия.Ссылка, Истина); - Иначе - ИмяФайлаСПутем = РаботаСФайламиСлужебныйВызовСервера.ПолучитьИмяФайлаСПутемКДвоичнымДанным(ФайлОбъект.Ссылка, Истина); - КонецЕсли; - КонецЕсли; - - Отказ = Ложь; - Если ПустаяСтрока(ИмяФайлаСПутем) Тогда - Отказ = Истина; - Текст = ""; - Иначе - Текст = РаботаСФайламиСлужебныйКлиентСервер.ИзвлечьТекст(ИмяФайлаСПутем, Отказ, Строка.Кодировка); - КонецЕсли; - - Если Отказ = Ложь Тогда - ФайлОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; - Иначе - // Если текст некому извлечь это не ошибка, а нормальный случай. - ФайлОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.ИзвлечьНеУдалось; - КонецЕсли; - - Если ФайлОбъект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе - И Не ПустаяСтрока(ИмяФайлаСПутем) Тогда - - УдалитьФайлы(ИмяФайлаСПутем); - КонецЕсли; - - ФайлОбъект.ТекстХранилище = Новый ХранилищеЗначения(Текст, Новый СжатиеДанных); - - ПриЗаписиИзвлеченногоТекста(ФайлОбъект); - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Извлечение текста'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - , - , - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось выполнить регламентное извлечение текста из файла - |""%1"" - |по причине: - |""%2"".'"), - ИмяСРасширениемФайла, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) )); - КонецПопытки; - + Для Каждого Тип Из ТипыФайлов Цикл + МетаданныеСправочникаФайлов = Метаданные.НайтиПоТипу(Тип); + НеИспользоватьПолнотекстовыйПоиск = Метаданные.СвойстваОбъектов.ИспользованиеПолнотекстовогоПоиска.НеИспользовать; + Если МетаданныеСправочникаФайлов.ПолнотекстовыйПоиск = НеИспользоватьПолнотекстовыйПоиск Тогда + Продолжить; + КонецЕсли; + ВсеИменаСправочников.Добавить(МетаданныеСправочникаФайлов.Имя); КонецЦикла; - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Извлечение текста'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Информация, - , - , - НСтр("ru = 'Закончено регламентное извлечение текста'")); + ЧислоФайловВВыборке = Цел(100 / ВсеИменаСправочников.Количество()); + ЧислоФайловВВыборке = ?(ЧислоФайловВВыборке < 10, 10, ЧислоФайловВВыборке); -КонецПроцедуры + Для каждого ИмяСправочника Из ВсеИменаСправочников Цикл + + Если НЕ ПустаяСтрока(ТекстЗапроса) Тогда + ТекстЗапроса = ТекстЗапроса + " + | + |ОБЪЕДИНИТЬ ВСЕ + | + |"; + КонецЕсли; + + ТекстЗапроса = ТекстЗапроса + ТекстЗапросаДляФайловСНеизвлеченнымТекстом(ИмяСправочника, + ЧислоФайловВВыборке, ПолучитьВсеФайлы, ДополнительныеПоля); + КонецЦикла; + + Возврат ТекстЗапроса; + +КонецФункции //////////////////////////////////////////////////////////////////////////////// // Обновление информационной базы. @@ -2360,6 +2407,15 @@ Зависимость.РаботаетСВнешнимиРесурсами = Истина; КонецПроцедуры +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииСписковСОграничениемДоступа(Списки) Экспорт + + Списки.Вставить(Метаданные.Справочники.ВерсииФайлов, Истина); + Списки.Вставить(Метаданные.Справочники.ПапкиФайлов, Истина); + Списки.Вставить(Метаданные.Справочники.Файлы, Истина); + +КонецПроцедуры + // См. УправлениеДоступомПереопределяемый.ПриЗаполненииВозможныхПравДляНастройкиПравОбъектов. Процедура ПриЗаполненииВозможныхПравДляНастройкиПравОбъектов(ВозможныеПрава) Экспорт @@ -3165,13 +3221,11 @@ КонецЕсли; - ДвоичныеДанные = ЭлементДанных.ФайлХранилище.Получить(); Если ТипХраненияФайлов() = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда // По обмену пришел элемент с хранением в базе - но в базе приемнике принято хранить в томах. // Из служебного реквизита файл размещаем на томе и меняем ТипХраненияФайла на ВТомахНаДиске. - ТипМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(ЭлементДанных)); - Если ОбщегоНазначения.ЕстьРеквизитОбъекта("ВладелецФайла", ТипМетаданных) Тогда + Если ОбщегоНазначения.ЕстьРеквизитОбъекта("ВладелецФайла", Метаданные.НайтиПоТипу(ТипЗнч(ЭлементДанных))) Тогда // Это справочник файлов. НомерВерсии = ""; Иначе @@ -3179,35 +3233,18 @@ НомерВерсии = ЭлементДанных.НомерВерсии; КонецЕсли; - Если ДвоичныеДанные = Неопределено Тогда - - ЭлементДанных.Том = Неопределено; - ЭлементДанных.ПутьКФайлу = Неопределено; - - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось добавить файл ""%1"" ни в один из томов, т.к. он отсутствует. - |Возможно, файл удален антивирусной программой. - |Обратитесь к администратору.'"), - ЭлементДанных.Наименование + "." + ЭлементДанных.Расширение); - - ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Добавление файла в том'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, ТипМетаданных, ЭлементДанных.Ссылка, ТекстОшибки); - - Иначе - - СведенияОФайле = ДобавитьФайлВТом(ДвоичныеДанные, - ЭлементДанных.ДатаМодификацииУниверсальная, ЭлементДанных.Наименование, ЭлементДанных.Расширение, - НомерВерсии, ПутьКФайлуПриПолученииСодержитПризнакЗашифрован(ЭлементДанных)); - ЭлементДанных.Том = СведенияОФайле.Том; - ЭлементДанных.ПутьКФайлу = СведенияОФайле.ПутьКФайлу; - - КонецЕсли; - + СведенияОФайле = ДобавитьФайлВТом(ЭлементДанных.ФайлХранилище.Получить(), + ЭлементДанных.ДатаМодификацииУниверсальная, ЭлементДанных.Наименование, ЭлементДанных.Расширение, + НомерВерсии, ПутьКФайлуПриПолученииСодержитПризнакЗашифрован(ЭлементДанных)); + ЭлементДанных.Том = СведенияОФайле.Том; + ЭлементДанных.ПутьКФайлу = СведенияОФайле.ПутьКФайлу; ЭлементДанных.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске; ЭлементДанных.ФайлХранилище = Новый ХранилищеЗначения(Неопределено); Иначе + ДвоичныеДанные = ЭлементДанных.ФайлХранилище.Получить(); + Если ТипЗнч(ДвоичныеДанные) = Тип("ДвоичныеДанные") Тогда ЭлементДанных.ДополнительныеСвойства.Вставить("ДвоичныеДанныеФайла", ДвоичныеДанные); КонецЕсли; @@ -3746,21 +3783,11 @@ РеквизитыЗначения.Вставить("Зашифрован", Ложь); ДвоичныеДанные = ПолучитьИзВременногоХранилища(РасшифрованныеДанные.АдресВременногоХранилища); - СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; - ИзвлеченныйТекст = ""; - Если ЭтоАдресВременногоХранилища(РасшифрованныеДанные.АдресВременногоХранилищаТекста) Тогда - ИзвлеченныйТекст = ПолучитьСтрокуИзВременногоХранилища(РасшифрованныеДанные.АдресВременногоХранилищаТекста); - СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; - - ИначеЕсли НЕ ИзвлекатьТекстыФайловНаСервере() Тогда - // Тексты извлекаются сразу, а не в фоновом задании. - СтатусИзвлеченияТекста = ИзвлечьТекст(ДвоичныеДанные, ПрисоединенныйФайл.Расширение, ИзвлеченныйТекст); - КонецЕсли; - - ПрисоединенныйФайлОбъект.СтатусИзвлеченияТекста = СтатусИзвлеченияТекста; - - РеквизитыЗначения.Вставить("ТекстХранилище", Новый ХранилищеЗначения(ИзвлеченныйТекст, Новый СжатиеДанных(9))); + РезультатИзвлеченияТекста = ИзвлечьТекст(РасшифрованныеДанные.АдресВременногоХранилищаТекста, ДвоичныеДанные, + ПрисоединенныйФайл.Расширение); + ПрисоединенныйФайлОбъект.СтатусИзвлеченияТекста = РезультатИзвлеченияТекста.СтатусИзвлеченияТекста; + РеквизитыЗначения.Вставить("ТекстХранилище", РезультатИзвлеченияТекста.ИзвлеченныйТекст); ОбновитьДвоичныеДанныеФайлаНаСервере(ПрисоединенныйФайлОбъект, ДвоичныеДанные, РеквизитыЗначения); @@ -4226,42 +4253,6 @@ КонецФункции -// Извлекает текст из двоичных данных, возвращает статус извлечения. -Функция ИзвлечьТекст(Знач ДвоичныеДанные, Знач Расширение, ИзвлеченныйТекст) Экспорт - - Если ЭтоПлатформаWindows() - И ИзвлекатьТекстыФайловНаСервере() Тогда - - ИмяВременногоФайла = ПолучитьИмяВременногоФайла(Расширение); - ДвоичныеДанные.Записать(ИмяВременногоФайла); - - Отказ = Ложь; - ИзвлеченныйТекст = РаботаСФайламиСлужебныйКлиентСервер.ИзвлечьТекст(ИмяВременногоФайла, Отказ); - - Попытка - УдалитьФайлы(ИмяВременногоФайла); - Исключение - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Извлечение текста'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - , - , - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; - - Если Отказ Тогда - Возврат Перечисления.СтатусыИзвлеченияТекстаФайлов.ИзвлечьНеУдалось; - Иначе - Возврат Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; - КонецЕсли; - Иначе - ИзвлеченныйТекст = ""; - Возврат Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; - КонецЕсли; - -КонецФункции - // Заменяет двоичные данные файла в ИБ на данные во временном хранилище. Процедура ОбновитьДвоичныеДанныеФайлаНаСервере(Знач ПрисоединенныйФайл, Знач АдресФайлаВоВременномХранилищеДвоичныеДанные, @@ -4513,9 +4504,9 @@ Версия.ТекстХранилище = СведенияОФайле.АдресВременногоХранилищаТекста; Версия.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; ИначеЕсли Не ПустаяСтрока(СведенияОФайле.АдресВременногоХранилищаТекста) Тогда - Текст = ПолучитьСтрокуИзВременногоХранилища(СведенияОФайле.АдресВременногоХранилищаТекста); - Версия.ТекстХранилище = Новый ХранилищеЗначения(Текст); - Версия.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; + РезультатИзвлеченияТекста = ИзвлечьТекст(СведенияОФайле.АдресВременногоХранилищаТекста); + Версия.ТекстХранилище = РезультатИзвлеченияТекста.ТекстХранилище; + Версия.СтатусИзвлеченияТекста = РезультатИзвлеченияТекста.СтатусИзвлеченияТекста; КонецЕсли; Версия.Заполнить(Неопределено); @@ -4614,21 +4605,10 @@ ДвоичныеДанные = ПолучитьИзВременногоХранилища(ИнформацияОФайле.АдресФайлаВоВременномХранилище); - РеквизитыЗначения.Вставить("СтатусИзвлеченияТекста", Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен); - ИзвлеченныйТекст = ""; - - Если ЭтоАдресВременногоХранилища(ИнформацияОФайле.АдресВременногоХранилищаТекста) Тогда - - ИзвлеченныйТекст = ПолучитьСтрокуИзВременногоХранилища(ИнформацияОФайле.АдресВременногоХранилищаТекста); - - РеквизитыЗначения.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; - - ИначеЕсли НЕ ИзвлекатьТекстыФайловНаСервере() Тогда - // Тексты извлекаются сразу, а не в фоновом задании. - РеквизитыЗначения.СтатусИзвлеченияТекста = ИзвлечьТекст(ДвоичныеДанные, ПрисоединенныйФайл.Расширение, ИзвлеченныйТекст); - КонецЕсли; - - РеквизитыЗначения.Вставить("ТекстХранилище", Новый ХранилищеЗначения(ИзвлеченныйТекст)); + РезультатИзвлеченияТекста = ИзвлечьТекст(ИнформацияОФайле.АдресВременногоХранилищаТекста, ДвоичныеДанные, + ПрисоединенныйФайл.Расширение); + РеквизитыЗначения.Вставить("СтатусИзвлеченияТекста", РезультатИзвлеченияТекста.СтатусИзвлеченияТекста); + РеквизитыЗначения.Вставить("ТекстХранилище", РезультатИзвлеченияТекста.ТекстХранилище); ОбновитьДвоичныеДанныеФайлаНаСервере(ПрисоединенныйФайл, ДвоичныеДанные, РеквизитыЗначения); @@ -4814,18 +4794,9 @@ КонецЕсли; - Если СведенияОФайле.АдресВременногоХранилищаТекста <> Неопределено Тогда - Если ИзвлекатьТекстыФайловНаСервере() Тогда - Версия.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; - Иначе - Текст = ПолучитьСтрокуИзВременногоХранилища(СведенияОФайле.АдресВременногоХранилищаТекста); - Версия.ТекстХранилище = Новый ХранилищеЗначения(Текст); - Версия.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; - КонецЕсли; - Иначе - Версия.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; - КонецЕсли; - + РезультатИзвлеченияТекста = ИзвлечьТекст(СведенияОФайле.АдресВременногоХранилищаТекста); + Версия.ТекстХранилище = РезультатИзвлеченияТекста.ТекстХранилище; + Версия.СтатусИзвлеченияТекста = РезультатИзвлеченияТекста.СтатусИзвлеченияТекста; Если СведенияОФайле.НовыйСтатусИзвлеченияТекста <> Неопределено Тогда Версия.СтатусИзвлеченияТекста = СведенияОФайле.НовыйСтатусИзвлеченияТекста; КонецЕсли; @@ -4884,8 +4855,9 @@ // При создании Файла из шаблона хранилище значения копируется напрямую. ФайлОбъект.ТекстХранилище = АдресВременногоХранилищаТекста; Иначе - Текст = ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекста); - ФайлОбъект.ТекстХранилище = Новый ХранилищеЗначения(Текст); + РезультатИзвлеченияТекста = ИзвлечьТекст(АдресВременногоХранилищаТекста); + ФайлОбъект.ТекстХранилище = РезультатИзвлеченияТекста.ТекстХранилище; + ФайлОбъект.СтатусИзвлеченияТекста = РезультатИзвлеченияТекста.СтатусИзвлеченияТекста; КонецЕсли; ФайлОбъект.Записать(); @@ -5552,7 +5524,7 @@ РегламентныеЗаданияСервер.ИзменитьЗадание(Задание, ПараметрыЗадания); КонецЦикла; КонецЕсли; - + КонецПроцедуры Функция ЭтоПапкаФайлов(ОбъектВладелец) Экспорт @@ -5791,10 +5763,12 @@ Если (Ответ.КодСостояния >= 400) И (Ответ.КодСостояния <= 599) Тогда - ШаблонОшибки = НСтр("ru = 'Не удалось синхронизировать файл по адресу %2, т.к. сервер вернул HTTP код: %1.'"); + ШаблонОшибки = НСтр("ru = 'Не удалось синхронизировать файл по адресу %2, т.к. сервер вернул HTTP код: %1. %3'"); + ИнформацияОбОшибке = Ответ.ПолучитьТелоКакСтроку(); Результат.Успешно = Ложь; - Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, Ответ.КодСостояния, РаскодироватьСтроку(АдресСервера, СпособКодированияСтроки.URLВКодировкеURL)); + Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, + Ответ.КодСостояния, РаскодироватьСтроку(АдресСервера, СпособКодированияСтроки.URLВКодировкеURL), ИнформацияОбОшибке); Возврат Результат; @@ -5949,40 +5923,37 @@ КонецФункции // Инициализирует объект HTTPСоединение. -// -// Параметры: -// СтруктураHref - Структура - Описание параметров подключения. -// ПараметрыСинхронизации - Структура - Параметры подключения: логин и пароль. -// Таймаут - Число - Определяет время ожидания осуществляемого соединения и операций, в секундах. -// -// Возвращаемое значение: -// HTTPСоединение - Установленное соединение. -// Функция СоздатьHTTPСоединениеWebdav(СтруктураHref, ПараметрыСинхронизации, Таймаут) + ИнтернетПрокси = Неопределено; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда + МодульПолучениеФайловИзИнтернетаКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернетаКлиентСервер"); + ИнтернетПрокси = МодульПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси("https"); + КонецЕсли; + ЗащищенноеСоединение = Неопределено; - Если СтруктураHref.Схема = "https" Тогда + Если СтруктураHref.Схема = "https" Тогда ЗащищенноеСоединение = ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение(); КонецЕсли; - Если НЕ ЗначениеЗаполнено(СтруктураHref.Порт) Тогда + Если Не ЗначениеЗаполнено(СтруктураHref.Порт) Тогда HTTP = Новый HTTPСоединение( - СтруктураHref.Хост, - , - ПараметрыСинхронизации.Логин, - ПараметрыСинхронизации.Пароль, - , - Таймаут, - ЗащищенноеСоединение); + СтруктураHref.Хост, + , + ПараметрыСинхронизации.Логин, + ПараметрыСинхронизации.Пароль, + ИнтернетПрокси, + Таймаут, + ЗащищенноеСоединение); Иначе HTTP = Новый HTTPСоединение( - СтруктураHref.Хост, - СтруктураHref.Порт, - ПараметрыСинхронизации.Логин, - ПараметрыСинхронизации.Пароль, - , - Таймаут, - ЗащищенноеСоединение); + СтруктураHref.Хост, + СтруктураHref.Порт, + ПараметрыСинхронизации.Логин, + ПараметрыСинхронизации.Пароль, + ИнтернетПрокси, + Таймаут, + ЗащищенноеСоединение); КонецЕсли; Возврат HTTP; @@ -5995,8 +5966,8 @@ Результат = Новый Структура("Успешно, АдресВременныхДанных, ТекстОшибки"); СтруктураHref = СтруктураURIРаскодированная(Href); - Таймаут = ?(ДлинаФайла <> Неопределено, РассчитатьТаймаут(ДлинаФайла), 43200); // размер в мегабайтах * 128 или 12 часов. - HTTP = СоздатьHTTPСоединениеWebdav(СтруктураHref, ПараметрыСинхронизации, Таймаут); + Таймаут = ?(ДлинаФайла <> Неопределено, РассчитатьТаймаут(ДлинаФайла), 43200); + HTTP = СоздатьHTTPСоединениеWebdav(СтруктураHref, ПараметрыСинхронизации, Таймаут); ЗаголовкиHTTP = Новый Соответствие; ЗаголовкиHTTP["User-Agent"] = "1C Enterprise 8.3"; @@ -7239,10 +7210,8 @@ КонецФункции -// Определяет, является ли ссылка файлом. Внимание! Работает только для файлов справочника Файлы. -// Функция ЭтоФайл(Файл) - + Возврат Не ЭтоПапкаФайлов(Файл); КонецФункции @@ -7789,14 +7758,6 @@ КонецПроцедуры -Процедура ПриЗаписиИзвлеченногоТекста(ФайлОбъект) - - Если ЭтоЭлементРаботаСФайлами(ФайлОбъект) Тогда - РаботаСФайламиСлужебныйВызовСервера.ПриЗаписиИзвлеченногоТекста(ФайлОбъект); - КонецЕсли; - -КонецПроцедуры - Функция ДанныеОтбораЖурналаРегистрации(УчетнаяЗапись) Экспорт Отбор = Новый Структура; @@ -7965,11 +7926,7 @@ Результат = Запрос.Выполнить().Выгрузить(); - Пока Истина Цикл - - Если Результат.Количество() = 0 Тогда - Прервать; - КонецЕсли; + Пока Результат.Количество() > 0 Цикл Для Каждого СтрокаРезультата Из Результат Цикл @@ -8037,16 +7994,16 @@ ДоступныеТома = Новый Массив; Запрос = Новый Запрос( - "ВЫБРАТЬ - | ТомаХраненияФайлов.Ссылка КАК СсылкаНаТом, - | ТомаХраненияФайлов.Наименование КАК ПредставлениеТома, - | ВЫБОР - | КОГДА &ЭтоLinuxСервер - | ТОГДА ТомаХраненияФайлов.ПолныйПутьLinux - | ИНАЧЕ ТомаХраненияФайлов.ПолныйПутьWindows - | КОНЕЦ КАК ПолныйПуть - |ИЗ - | Справочник.ТомаХраненияФайлов КАК ТомаХраненияФайлов"); + "ВЫБРАТЬ + | ТомаХраненияФайлов.Ссылка КАК СсылкаНаТом, + | ТомаХраненияФайлов.Наименование КАК ПредставлениеТома, + | ВЫБОР + | КОГДА &ЭтоLinuxСервер + | ТОГДА ТомаХраненияФайлов.ПолныйПутьLinux + | ИНАЧЕ ТомаХраненияФайлов.ПолныйПутьWindows + | КОНЕЦ КАК ПолныйПуть + |ИЗ + | Справочник.ТомаХраненияФайлов КАК ТомаХраненияФайлов"); Запрос.УстановитьПараметр("ЭтоLinuxСервер", ОбщегоНазначения.ЭтоLinuxСервер()); @@ -8073,11 +8030,10 @@ НСтр("ru = 'У тома хранения файлов ""%1"" не задан путь к сетевому каталогу. Сохранение файлов в него невозможно.'"), ПредставлениеТома); ЗафиксироватьПроблемуСТомом(Том, УточнениеПроблемы, ПараметрыПроверки); - Возврат Ложь; КонецЕсли; - + ИмяКаталогаТестовое = Путь + "ПроверкаДоступа" + ПолучитьРазделительПути(); Попытка @@ -8092,7 +8048,7 @@ |Указанный сетевой каталог мог быть отключен или к нему отсутствуют права доступа. |Невозможна работа со всеми файлами, хранящимися в этом томе.'"), Путь, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - УточнениеПроблемы = УточнениеПроблемы + Символы.ПС; + УточнениеПроблемы = УточнениеПроблемы + Символы.ПС; ЗафиксироватьПроблемуСТомом(Том, УточнениеПроблемы, ПараметрыПроверки); Возврат Ложь; @@ -8112,4 +8068,182 @@ КонецПроцедуры +// Извлечение текста для полнотекстового поиска. + +Функция ТекстЗапросаДляФайловСНеизвлеченнымТекстом(ИмяСправочника, ЧислоФайловВВыборке, + ПолучитьВсеФайлы, ДополнительныеПоля) + + Если ДополнительныеПоля Тогда + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | Файлы.Ссылка КАК Ссылка, + | ЕСТЬNULL(РегистрСведенийКодировкиФайлов.Кодировка, """") КАК Кодировка, + | Файлы.Расширение КАК Расширение, + | Файлы.Наименование КАК Наименование + |ИЗ + | &ИмяСправочника КАК Файлы + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КодировкиФайлов КАК РегистрСведенийКодировкиФайлов + | ПО (РегистрСведенийКодировкиФайлов.Файл = Файлы.Ссылка) + |ГДЕ + | Файлы.СтатусИзвлеченияТекста В ( + | ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен), + | ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка))"; + Иначе + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | Файлы.Ссылка КАК Ссылка, + | ЕСТЬNULL(РегистрСведенийКодировкиФайлов.Кодировка, """") КАК Кодировка + |ИЗ + | &ИмяСправочника КАК Файлы + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КодировкиФайлов КАК РегистрСведенийКодировкиФайлов + | ПО (РегистрСведенийКодировкиФайлов.Файл = Файлы.Ссылка) + |ГДЕ + | Файлы.СтатусИзвлеченияТекста В ( + | ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен), + | ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка))"; + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда + Если ИмяСправочника = "ВерсииФайлов" Тогда + ТекстЗапроса = ТекстЗапроса + " + | И НЕ Файлы.Владелец.Зашифрован"; + Иначе + ТекстЗапроса = ТекстЗапроса + " + | И НЕ Файлы.Зашифрован"; + КонецЕсли; + КонецЕсли; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ПЕРВЫЕ 1", ?( + ПолучитьВсеФайлы, + "", + "ПЕРВЫЕ " + Формат(ЧислоФайловВВыборке, "ЧГ=; ЧН="))); + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяСправочника", "Справочник." + ИмяСправочника); + + Возврат ТекстЗапроса; + +КонецФункции + +// Получает полный путь к файлу на диске. +// Параметры: +// ОбъектСсылка - СправочникСсылка.ВерсииФайлов, +// СправочникСсылка.*ПрисоединенныеФайлы. +// +// Возвращаемое значение: +// Строка - полный путь к файлу на диске. +Функция ИмяФайлаСДвоичнымиДанными(ОбъектСсылка) + + ПолноеИмяФайла = ""; + + Если ОбъектСсылка.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + + ХранилищеФайла = РаботаСФайлами.ХранилищеФайлаИзИнформационнойБазы(ОбъектСсылка); + ДвоичныеДанныеФайла = ХранилищеФайла.Получить(); + + Если ТипЗнч(ДвоичныеДанныеФайла) <> Тип("ДвоичныеДанные") Тогда + Возврат ""; + КонецЕсли; + + ПолноеИмяФайла = ПолучитьИмяВременногоФайла(ОбъектСсылка.Расширение); + ДвоичныеДанныеФайла.Записать(ПолноеИмяФайла); + Иначе + Если НЕ ОбъектСсылка.Том.Пустая() Тогда + ПолноеИмяФайла = ПолныйПутьТома(ОбъектСсылка.Том) + ОбъектСсылка.ПутьКФайлу; + КонецЕсли; + КонецЕсли; + + Возврат ПолноеИмяФайла; + +КонецФункции + +Процедура ПриЗаписиИзвлеченногоТекста(ФайлОбъект) + + Если ЭтоЭлементРаботаСФайлами(ФайлОбъект) Тогда + РаботаСФайламиСлужебныйВызовСервера.ПриЗаписиИзвлеченногоТекста(ФайлОбъект); + КонецЕсли; + +КонецПроцедуры + +// Извлекает текст из временного хранилища или из двоичных данных, возвращает статус извлечения. +Функция ИзвлечьТекст(Знач АдресВременногоХранилищаТекста, Знач ДвоичныеДанные = Неопределено, Знач Расширение = Неопределено) Экспорт + + Результат = Новый Структура("СтатусИзвлеченияТекста, ТекстХранилище"); + + Если ЭтоАдресВременногоХранилища(АдресВременногоХранилищаТекста) Тогда + ИзвлеченныйТекст = СтрокаИзВременногоХранилища(АдресВременногоХранилищаТекста); + Результат.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; + Результат.ТекстХранилище = Новый ХранилищеЗначения(ИзвлеченныйТекст, Новый СжатиеДанных(9)); + Возврат Результат; + КонецЕсли; + + Если ИзвлекатьТекстыФайловНаСервере() Тогда + Результат.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; + Результат.ТекстХранилище = Новый ХранилищеЗначения(""); + Возврат Результат; // Текст будет извлечен позднее в регламентном задании. + КонецЕсли; + + Если Не ЭтоПлатформаWindows() Или ДвоичныеДанные = Неопределено Тогда + Результат.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; + Результат.ТекстХранилище = Новый ХранилищеЗначения(""); + Возврат Результат; + КонецЕсли; + + // Текст извлекается сразу, а не в регламентном задании. + ИмяВременногоФайла = ПолучитьИмяВременногоФайла(Расширение); + ДвоичныеДанные.Записать(ИмяВременногоФайла); + Результат = ИзвлечьТекстИзФайлаНаДиске(ИмяВременногоФайла); + Попытка + УдалитьФайлы(ИмяВременногоФайла); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Извлечение текста'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + Возврат Результат; + +КонецФункции + +Функция ИзвлечьТекстИзФайлаНаДиске(Знач ИмяФайла, Знач Кодировка = Неопределено) + + Отказ = Ложь; + ИзвлеченныйТекст = РаботаСФайламиСлужебныйКлиентСервер.ИзвлечьТекст(ИмяФайла, Отказ, Кодировка); + + Результат = Новый Структура("СтатусИзвлеченияТекста, ТекстХранилище"); + Если Отказ Тогда + // Если текст некому извлечь, это не ошибка, а нормальный случай. + Результат.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.ИзвлечьНеУдалось; + Иначе + Результат.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; + Результат.ТекстХранилище = Новый ХранилищеЗначения(ИзвлеченныйТекст, Новый СжатиеДанных(9)); + КонецЕсли; + Возврат Результат; + +КонецФункции + +// Получает строку из временного хранилища (передача с клиента на сервер, +// делается через временное хранилище). +// +Функция СтрокаИзВременногоХранилища(АдресВременногоХранилищаТекста) + + Если ПустаяСтрока(АдресВременногоХранилищаТекста) Тогда + Возврат ""; + КонецЕсли; + + ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); + ПолучитьИзВременногоХранилища(АдресВременногоХранилищаТекста).Записать(ИмяВременногоФайла); + + ТекстовыйФайл = Новый ЧтениеТекста(ИмяВременногоФайла, КодировкаТекста.UTF8); + Текст = ТекстовыйФайл.Прочитать(); + ТекстовыйФайл.Закрыть(); + + Попытка + УдалитьФайлы(ИмяВременногоФайла); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Извлечение текста'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат Текст; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl index 8992a63cc..0b8110195 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl @@ -567,10 +567,7 @@ ВРабочемКаталогеНаЧтение = Истина; ВРабочемКаталогеВладельца = Ложь; - ИмяКаталога = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ЛокальныйКэшФайлов", "ПутьКЛокальномуКэшуФайлов"); - Если ИмяКаталога = Неопределено Тогда - ИмяКаталога = ""; - КонецЕсли; + ИмяКаталога = РабочийКаталогПользователя(); Если ЗначениеЗаполнено(ТекущаяВерсияФайла) Тогда ПолноеИмяФайлаВРабочемКаталоге = ПолучитьПолноеИмяФайлаИзРегистра(ТекущаяВерсияФайла, ИмяКаталога, ВРабочемКаталогеНаЧтение, ВРабочемКаталогеВладельца); @@ -729,58 +726,40 @@ КонецФункции -// Возвращает текст запроса для получения файлов у которых не извлечен текст. -// -// Параметры: -// ПолучитьВсеФайлы - Булево - начальное значение Ложь. Позволяет отключить выборку -// файлов по частям, если передать Истина. -// -// Возвращаемое значение: -// Строка - текст запроса. -// -Функция ТекстЗапросаДляИзвлеченияТекста(ПолучитьВсеФайлы = Ложь, ДополнительныеПоля = Ложь) Экспорт - - // Текст запроса формируется по всем справочникам присоединенных файлов. - ТекстЗапроса = ""; - - ТипыФайлов = Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип.Типы(); - - ВсеИменаСправочников = Новый Массив; - - Для Каждого Тип Из ТипыФайлов Цикл - МетаданныеСправочникаФайлов = Метаданные.НайтиПоТипу(Тип); - НеИспользоватьПолнотекстовыйПоиск = Метаданные.СвойстваОбъектов.ИспользованиеПолнотекстовогоПоиска.НеИспользовать; - Если МетаданныеСправочникаФайлов.ПолнотекстовыйПоиск = НеИспользоватьПолнотекстовыйПоиск Тогда - Продолжить; - КонецЕсли; - ВсеИменаСправочников.Добавить(МетаданныеСправочникаФайлов.Имя); - КонецЦикла; - - ЧислоФайловВВыборке = Цел(100 / ВсеИменаСправочников.Количество()); - ЧислоФайловВВыборке = ?(ЧислоФайловВВыборке < 10, 10, ЧислоФайловВВыборке); - - Для каждого ИмяСправочника Из ВсеИменаСправочников Цикл - - Если НЕ ПустаяСтрока(ТекстЗапроса) Тогда - ТекстЗапроса = ТекстЗапроса + " - | - |ОБЪЕДИНИТЬ ВСЕ - | - |"; - КонецЕсли; - - ТекстЗапроса = ТекстЗапроса + ТекстЗапросаДляФайловСНеизвлеченнымТекстом(ИмяСправочника, - ЧислоФайловВВыборке, ПолучитьВсеФайлы, ДополнительныеПоля); - КонецЦикла; - - Возврат ТекстЗапроса; - -КонецФункции - #КонецОбласти #Область СлужебныеПроцедурыИФункции +// Сохраняет путь к рабочему каталогу пользователя в настройках. +// +// Параметры: +// ИмяКаталога - Строка - имя каталога. +// +Процедура УстановитьРабочийКаталогПользователя(ИмяКаталога) Экспорт + + УстановитьПривилегированныйРежим(Истина); + ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить( + "ЛокальныйКэшФайлов", "ПутьКЛокальномуКэшуФайлов", ИмяКаталога,,, Истина); + +КонецПроцедуры + +// Возвращает путь к рабочему каталогу пользователя в настройках. +// +// Возвращаемое значение: +// Строка - имя каталога. +// +Функция РабочийКаталогПользователя() + + УстановитьПривилегированныйРежим(Истина); + ИмяКаталога = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ЛокальныйКэшФайлов", "ПутьКЛокальномуКэшуФайлов"); + Если ИмяКаталога = Неопределено Тогда + ИмяКаталога = ""; + КонецЕсли; + + Возврат ИмяКаталога; + +КонецФункции + Функция ЭтоСправочникФайлы(ВладелецФайлов) Экспорт Возврат РаботаСФайламиСлужебный.ИмяСправочникаХраненияФайлов(ВладелецФайлов) = "Файлы"; @@ -818,8 +797,9 @@ // При создании Файла из шаблона хранилище значения копируется напрямую. Файл.ТекстХранилище = СведенияОФайле.АдресВременногоХранилищаТекста; ИначеЕсли Не ПустаяСтрока(СведенияОФайле.АдресВременногоХранилищаТекста) Тогда - Текст = РаботаСФайламиСлужебный.ПолучитьСтрокуИзВременногоХранилища(СведенияОФайле.АдресВременногоХранилищаТекста); - Файл.ТекстХранилище = Новый ХранилищеЗначения(Текст); + РезультатИзвлеченияТекста = РаботаСФайламиСлужебный.ИзвлечьТекст(СведенияОФайле.АдресВременногоХранилищаТекста); + Файл.ТекстХранилище = РезультатИзвлеченияТекста.ТекстХранилище; + Файл.СтатусИзвлеченияТекста = РезультатИзвлеченияТекста.СтатусИзвлеченияТекста; КонецЕсли; Файл.Заполнить(Неопределено); @@ -948,7 +928,7 @@ КонецЕсли; Если Пользователь = Неопределено Тогда - Версия.Изменил = Пользователи.ТекущийПользователь(); + Версия.Изменил = Пользователи.АвторизованныйПользователь(); Иначе Версия.Изменил = Пользователь; КонецЕсли; @@ -1004,9 +984,9 @@ Если РаботаСФайламиСлужебный.ИзвлекатьТекстыФайловНаСервере() Тогда Версия.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; Иначе - Текст = РаботаСФайламиСлужебный.ПолучитьСтрокуИзВременногоХранилища(СведенияОФайле.АдресВременногоХранилищаТекста); - Версия.ТекстХранилище = Новый ХранилищеЗначения(Текст); - Версия.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; + РезультатИзвлеченияТекста = РаботаСФайламиСлужебный.ИзвлечьТекст(СведенияОФайле.АдресВременногоХранилищаТекста); + Версия.ТекстХранилище = РезультатИзвлеченияТекста.ТекстХранилище; + Версия.СтатусИзвлеченияТекста = РезультатИзвлеченияТекста.СтатусИзвлеченияТекста; КонецЕсли; Иначе Версия.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; @@ -1234,8 +1214,9 @@ ФайлОбъект = ФайлСсылка.ПолучитьОбъект(); ЗаблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, , УникальныйИдентификатор); - Текст = РаботаСФайламиСлужебный.ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекста); - ФайлОбъект.ТекстХранилище = Новый ХранилищеЗначения(Текст); + РезультатИзвлеченияТекста = РаботаСФайламиСлужебный.ИзвлечьТекст(АдресВременногоХранилищаТекста); + ФайлОбъект.СтатусИзвлеченияТекста = РезультатИзвлеченияТекста.СтатусИзвлеченияТекста; + ФайлОбъект.ТекстХранилище = РезультатИзвлеченияТекста.ТекстХранилище; ФайлОбъект.Записать(); РазблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, УникальныйИдентификатор); @@ -1317,7 +1298,7 @@ ФайлОбъект = НовыйФайл.ПолучитьОбъект(); ФайлОбъект.ПодписанЭП = Истина; ФайлОбъект.Записать(); - + ЭлектронныеПодписиИсходногоФайла = МодульЭлектроннаяПодпись.УстановленныеПодписи(ИсходныйФайл); Для Каждого ЭП Из ЭлектронныеПодписиИсходногоФайла Цикл МенеджерЗаписи = РегистрыСведений["ЭлектронныеПодписи"].СоздатьМенеджерЗаписи(); @@ -2856,94 +2837,8 @@ КонецПроцедуры -// Получает полный путь к файлу на диске. -// Параметры: -// ОбъектСсылка - СправочникСсылка.ВерсииФайлов, -// СправочникСсылка.*ПрисоединенныеФайлы. -// -// Возвращаемое значение: -// Строка - полный путь к файлу на диске. -Функция ПолучитьИмяФайлаСПутемКДвоичнымДанным(ОбъектСсылка, ПустойПутьДляПустыхДанных = Ложь) Экспорт - - ПолноеИмяФайла = ""; - - Если ОбъектСсылка.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - - ХранилищеФайла = РаботаСФайлами.ХранилищеФайлаИзИнформационнойБазы(ОбъектСсылка); - ДвоичныеДанныеФайла = ХранилищеФайла.Получить(); - - Если ПустойПутьДляПустыхДанных И ТипЗнч(ДвоичныеДанныеФайла) <> Тип("ДвоичныеДанные") Тогда - Возврат ""; - КонецЕсли; - - ПолноеИмяФайла = ПолучитьИмяВременногоФайла(ОбъектСсылка.Расширение); - ДвоичныеДанныеФайла.Записать(ПолноеИмяФайла); - Иначе - Если НЕ ОбъектСсылка.Том.Пустая() Тогда - ПолноеИмяФайла = РаботаСФайламиСлужебный.ПолныйПутьТома(ОбъектСсылка.Том) + ОбъектСсылка.ПутьКФайлу; - КонецЕсли; - КонецЕсли; - - Возврат ПолноеИмяФайла; - -КонецФункции - // Извлечение текста -Функция ТекстЗапросаДляФайловСНеизвлеченнымТекстом(ИмяСправочника, ЧислоФайловВВыборке, - ПолучитьВсеФайлы, ДополнительныеПоля) - - Если ДополнительныеПоля Тогда - ТекстЗапроса = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | Файлы.Ссылка КАК Ссылка, - | ЕСТЬNULL(РегистрСведенийКодировкиФайлов.Кодировка, """") КАК Кодировка, - | Файлы.Расширение КАК Расширение, - | Файлы.Наименование КАК Наименование - |ИЗ - | &ИмяСправочника КАК Файлы - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КодировкиФайлов КАК РегистрСведенийКодировкиФайлов - | ПО (РегистрСведенийКодировкиФайлов.Файл = Файлы.Ссылка) - |ГДЕ - | Файлы.СтатусИзвлеченияТекста В ( - | ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен), - | ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка))"; - Иначе - ТекстЗапроса = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | Файлы.Ссылка КАК Ссылка, - | ЕСТЬNULL(РегистрСведенийКодировкиФайлов.Кодировка, """") КАК Кодировка - |ИЗ - | &ИмяСправочника КАК Файлы - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КодировкиФайлов КАК РегистрСведенийКодировкиФайлов - | ПО (РегистрСведенийКодировкиФайлов.Файл = Файлы.Ссылка) - |ГДЕ - | Файлы.СтатусИзвлеченияТекста В ( - | ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен), - | ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка))"; - КонецЕсли; - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда - Если ИмяСправочника = "ВерсииФайлов" Тогда - ТекстЗапроса = ТекстЗапроса + " - | И НЕ Файлы.Владелец.Зашифрован"; - Иначе - ТекстЗапроса = ТекстЗапроса + " - | И НЕ Файлы.Зашифрован"; - КонецЕсли; - КонецЕсли; - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ПЕРВЫЕ 1", ?( - ПолучитьВсеФайлы, - "", - "ПЕРВЫЕ " + Формат(ЧислоФайловВВыборке, "ЧГ=; ЧН="))); - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяСправочника", "Справочник." + ИмяСправочника); - - Возврат ТекстЗапроса; - -КонецФункции - // Записывает извлеченный текст. // // Параметры: @@ -2955,7 +2850,6 @@ // Если это не версия, то записываем. Если ОбщегоНазначения.ЕстьРеквизитОбъекта("ВладелецФайла", Метаданные.НайтиПоТипу(ТипЗнч(ТекущаяВерсия))) Тогда - ТекущаяВерсия.ОбменДанными.Загрузка = Истина; ОбновлениеИнформационнойБазы.ЗаписатьДанные(ТекущаяВерсия); Возврат; КонецЕсли; @@ -2981,6 +2875,7 @@ ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(Файл)).ПолноеИмя()); ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", Файл); БлокировкаДанных.Заблокировать(); + ФайлОбъект = Файл.ПолучитьОбъект(); ФайлОбъект.ТекстХранилище = ТекущаяВерсия.ТекстХранилище; ФайлОбъект.ОбменДанными.Загрузка = Истина; @@ -3027,6 +2922,17 @@ КонецФункции +Функция ПоказыватьПодсказкиПриРедактированииФайлов(Значение = Неопределено) Экспорт + + УстановитьПривилегированныйРежим(Истина); + Если Значение <> Неопределено Тогда + ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить( + "НастройкиПрограммы", "ПоказыватьПодсказкиПриРедактированииФайлов", Значение,,, Истина); + ОбновитьПовторноИспользуемыеЗначения(); + КонецЕсли; + +КонецФункции + // Информационные // Функция возвращает количество Файлов, занятых текущим пользователем @@ -3066,24 +2972,18 @@ Запрос = Новый Запрос; - Запрос.Текст = + Запрос.Текст = "ВЫБРАТЬ - | ЕСТЬNULL(КОЛИЧЕСТВО(ФайлыВТомах.Файл), 0) КАК КоличествоФайлов + | ЕСТЬNULL(КОЛИЧЕСТВО(Версии.Ссылка), 0) КАК КоличествоФайлов |ИЗ - | (ВЫБРАТЬ - | СведенияОФайлах.Файл КАК Файл - | ИЗ - | РегистрСведений.СведенияОФайлах КАК СведенияОФайлах - | ГДЕ - | СведенияОФайлах.Файл.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВТомахНаДиске)) КАК ФайлыВТомах - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВерсииФайлов КАК ВерсииФайлов - | ПО ФайлыВТомах.Файл = ВерсииФайлов.Владелец - | И (ВерсииФайлов.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВТомахНаДиске))"; + | Справочник.ВерсииФайлов КАК Версии + |ГДЕ + | Версии.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВТомахНаДиске)"; Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда - Возврат Выборка.КоличествоФайлов; + Возврат Число(Выборка.КоличествоФайлов); КонецЕсли; Возврат 0; @@ -3321,7 +3221,7 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ ОБНОВЛЕНИЯ ИНФОРМАЦИОННОЙ БАЗЫ +// Обновление информационной базы. // В справочнике ВерсииФайлов из данных в Код(Строка) заполняет НомерВерсии(Число). Процедура ЗаполнитьНомерВерсииИзКодаСправочника() Экспорт @@ -3810,15 +3710,15 @@ Если Не ПустаяСтрока(АдресВременногоХранилищаТекста) Тогда - Если ЭтоАдресВременногоХранилища(АдресВременногоХранилищаТекста) Тогда - Текст = РаботаСФайламиСлужебный.ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекста); - Иначе - Текст = АдресВременногоХранилищаТекста; + Если Не ЭтоАдресВременногоХранилища(АдресВременногоХранилищаТекста) Тогда + ВерсияОбъект.ТекстХранилище = Новый ХранилищеЗначения(АдресВременногоХранилищаТекста, Новый СжатиеДанных(9)); + ВерсияОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; + Иначе + РезультатИзвлеченияТекста = РаботаСФайламиСлужебный.ИзвлечьТекст(АдресВременногоХранилищаТекста); + ВерсияОбъект.ТекстХранилище = РезультатИзвлеченияТекста.ТекстХранилище; + ВерсияОбъект.СтатусИзвлеченияТекста = РезультатИзвлеченияТекста.СтатусИзвлеченияТекста; КонецЕсли; - ВерсияОбъект.ТекстХранилище = Новый ХранилищеЗначения(Текст); - ВерсияОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; - КонецЕсли; Если РезультатИзвлечения = "НеИзвлечен" Тогда @@ -4395,6 +4295,9 @@ Номер = СтруктураРесурсов.Номер; Номер = Номер + 1; // увеличим на 1 + УстановитьОтключениеБезопасногоРежима(Истина); + УстановитьПривилегированныйРежим(Истина); + // Запишем новый номер в регистр. НаборЗаписей = РегистрыСведений.НомераОтсканированныхФайлов.СоздатьНаборЗаписей(); @@ -4406,6 +4309,9 @@ НаборЗаписей.Записать(); + УстановитьПривилегированныйРежим(Ложь); + УстановитьОтключениеБезопасногоРежима(Ложь); + ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl index 92a08d129..30a9a7123 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl @@ -300,8 +300,7 @@ // Процедура УстановитьРабочийКаталогПользователя(ИмяКаталога) Экспорт - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить( - "ЛокальныйКэшФайлов", "ПутьКЛокальномуКэшуФайлов", ИмяКаталога,,, Истина); + РаботаСФайламиСлужебныйВызовСервера.УстановитьРабочийКаталогПользователя(ИмяКаталога); КонецПроцедуры @@ -312,7 +311,7 @@ Путь = ""; -#Если Не ВебКлиент Тогда +#Если Не ВебКлиент И НЕ МобильныйКлиент Тогда ПараметрыКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента(); @@ -976,7 +975,7 @@ |имеет более позднюю дату изменения (новее), чем его копия в рабочем каталоге на компьютере. | |Взять файл из программы и заменить им существующий на компьютере или - |открыть существующий без обновления?'")); + |открыть существующий?'")); Иначе // Файл в рабочем каталоге для чтения. @@ -990,7 +989,7 @@ // В рабочем каталоге более новый файл. Если ДанныеФайла.ВРабочемКаталогеНаЧтение = Ложь - И ДанныеФайла.Редактирует = ПользователиКлиентСервер.ТекущийПользователь() Тогда + И ДанныеФайла.Редактирует = ПользователиКлиентСервер.АвторизованныйПользователь() Тогда // Файл в рабочем каталоге для редактирования и занят текущим пользователем. ВернутьРезультат(ОбработчикРезультата, "ОткрытьСуществующий"); @@ -998,12 +997,11 @@ Иначе // Файл в рабочем каталоге для чтения. - Параметры.Вставить("Заголовок", НСтр("ru = 'На компьютере более новая версия файла'")); + Параметры.Вставить("Заголовок", НСтр("ru = 'На компьютере более новая копия файла'")); Параметры.Вставить( "Сообщение", - НСтр("ru = 'Файл в рабочем каталоге на компьютере имеет более позднюю дату изменения (новее), - |чем в программе. Возможно, он был отредактирован. + НСтр("ru = 'Копия файла в рабочем каталоге на компьютере имеет более позднюю дату изменения (новее), чем в программе. Возможно, эта копия была отредактирована. | |Открыть существующий файл на компьютере или заменить его на файл |из программы c потерей изменений и открыть?'")); @@ -1854,20 +1852,28 @@ Если ПараметрыВыполнения.ПереданныйПолныйПутьКФайлу = "" Тогда - УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования = - РаботаСФайламиСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования; - - Если УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования = Неопределено Тогда - УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования = Ложь; - КонецЕсли; - - Если ПараметрыВыполнения.ДанныеФайла.РабочийКаталогВладельца <> "" Тогда - УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования = Ложь; + Если ПараметрыВыполнения.Свойство("УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования2") Тогда + + УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования = ПараметрыВыполнения.УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования2; + ЗадаватьВопрос = Ложь; + Иначе + + ПерсональныеНастройкиРаботыСФайлами = РаботаСФайламиСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами(); + УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования = ПерсональныеНастройкиРаботыСФайлами.УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования; + ЗадаватьВопрос = ПерсональныеНастройкиРаботыСФайлами.ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов; + + Если УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования = Неопределено Тогда + УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования = Ложь; + КонецЕсли; + + Если ПараметрыВыполнения.ДанныеФайла.РабочийКаталогВладельца <> "" Тогда + УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования = Ложь; + КонецЕсли; КонецЕсли; Если УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования Тогда Обработчик = Новый ОписаниеОповещения("ЗакончитьРедактированиеСРасширениемПослеУдаленияФайлаИзРабочегоКаталога", ЭтотОбъект, ПараметрыВыполнения); - УдалитьФайлИзРабочегоКаталога(Обработчик, НоваяВерсия); + УдалитьФайлИзРабочегоКаталога(Обработчик, НоваяВерсия, УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования, ЗадаватьВопрос); Возврат; Иначе Файл = Новый Файл(ПараметрыВыполнения.ПолныйПутьКФайлу); @@ -2493,7 +2499,7 @@ Возврат; КонецЕсли; - #Если Не ВебКлиент Тогда + #Если Не ВебКлиент И НЕ МобильныйКлиент Тогда // Проверка, что файл не занят приложением. Попытка ТекстовыйДокумент = Новый ТекстовыйДокумент; @@ -4556,7 +4562,7 @@ // Структура - Результат удаления файла с диска и регистра сведений. // * Успех - Булево - успешно ли выполнена операция. // -Процедура УдалитьФайлИзРабочегоКаталога(ОбработчикРезультата, Ссылка, УдалитьВРабочемКаталоге = Ложь) Экспорт +Процедура УдалитьФайлИзРабочегоКаталога(ОбработчикРезультата, Ссылка, УдалитьВРабочемКаталоге = Ложь, ЗадаватьВопрос = Истина) Экспорт ПараметрыВыполнения = Новый Структура; ПараметрыВыполнения.Вставить("ОбработчикРезультата", ОбработчикРезультата); @@ -4583,7 +4589,7 @@ ЗарегистрироватьОписаниеОбработчика( ПараметрыВыполнения, ЭтотОбъект, "УдалитьФайлИзРабочегоКаталогаПослеУдаленияФайла"); - УдалитьФайл(ПараметрыВыполнения, ПараметрыВыполнения.ПолноеИмяФайлаИзРегистра); + УдалитьФайл(ПараметрыВыполнения, ПараметрыВыполнения.ПолноеИмяФайлаИзРегистра, ЗадаватьВопрос); Если ПараметрыВыполнения.АсинхронныйДиалог.Открыт = Истина Тогда Возврат; КонецЕсли; @@ -6788,13 +6794,14 @@ ПараметрыВыполнения.Вставить("ДанныеФайлов", Новый Массив); РаботаСФайламиСлужебныйВызовСервера.ПолучитьДанныеДляМассиваФайлов(ПараметрыВыполнения.МассивФайлов, ПараметрыВыполнения.ДанныеФайлов); + // Завершение редактирования файлов. Для Каждого ДанныеФайла Из ПараметрыВыполнения.ДанныеФайлов Цикл ПараметрыОбработчика = ПараметрыОбновленияФайла( - Неопределено, - ДанныеФайла.Ссылка, - ПараметрыВыполнения.ИдентификаторФормы); + Неопределено, + ДанныеФайла.Ссылка, + ПараметрыВыполнения.ИдентификаторФормы); ЗаполнитьЗначенияСвойств(ПараметрыОбработчика, ПараметрыВыполнения); ПараметрыОбработчика.Вставить("ДанныеФайла", Неопределено); ПараметрыОбработчика.ХранитьВерсии = ДанныеФайла.ХранитьВерсии; @@ -6802,6 +6809,7 @@ ПараметрыОбработчика.Редактирует = ДанныеФайла.Редактирует; ПараметрыОбработчика.АвторТекущейВерсии = ДанныеФайла.Редактирует; ПараметрыОбработчика.Кодировка = ДанныеФайла.КодировкаТекущейВерсии; + ПараметрыОбработчика.Вставить("УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования2", ПараметрыВыполнения.УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования2); Если ПараметрыВыполнения.ВозможностьСоздаватьВерсииФайлов Тогда ПараметрыОбработчика.СоздатьНовуюВерсию = ПараметрыВыполнения.ХранитьВерсии; Иначе @@ -6826,7 +6834,7 @@ ОбработчикРезультата = Новый ОписаниеОповещения("ЗакончитьРедактированиеМассиваФайловСОповещениемЗавершение", ЭтотОбъект, ПараметрыВыполнения); ВернутьРезультат(ОбработчикРезультата, Истина); - + КонецПроцедуры Процедура ЗакончитьРедактированиеМассиваФайловСОповещениемЗавершение(Результат, ПараметрыВыполнения) Экспорт @@ -7206,8 +7214,7 @@ КонецЕсли; Если ТипЗнч(Результат) = Тип("Структура") И Результат.Свойство("БольшеНеЗадаватьЭтотВопрос") И Результат.БольшеНеЗадаватьЭтотВопрос Тогда - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить( - "НастройкиПрограммы", "ПоказыватьПодсказкиПриРедактированииФайлов", Ложь,,, Истина); + РаботаСФайламиСлужебныйВызовСервера.ПоказыватьПодсказкиПриРедактированииФайлов(Ложь); КонецЕсли; Если Не Контекст.СохранятьСРасшифровкой @@ -9067,7 +9074,7 @@ // Строка - на что ссылается lnk файл. Функция РазыменоватьLnkФайл(ВыбранныйФайл) -#Если Не ВебКлиент Тогда +#Если Не ВебКлиент И НЕ МобильныйКлиент Тогда ShellApp = Новый COMОбъект("shell.application"); FolderObj = ShellApp.NameSpace(ВыбранныйФайл.Путь);// Полный (только) путь на lnk-файл. FolderObjItem = FolderObj.items().item(ВыбранныйФайл.Имя); // только имя lnk-файла @@ -9250,7 +9257,7 @@ Процедура ВыполнитьСравнениеФайлов(ПутьКФайлу1, ПутьКФайлу2, СпособСравненияВерсийФайлов, ЗаголовокЛевый = "", ЗаголовокПравый = "") Экспорт -#Если Не ВебКлиент Тогда +#Если Не ВебКлиент И НЕ МобильныйКлиент Тогда Попытка Если СпособСравненияВерсийФайлов = "MicrosoftOfficeWord" Тогда diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентСервер/Module.bsl index bcdafdb8d..573880d03 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентСервер/Module.bsl @@ -44,7 +44,7 @@ ОбщиеНастройки = ОбщиеНастройкиРаботыСФайлами(); -#Если Не ВебКлиент Тогда +#Если Не ВебКлиент И НЕ МобильныйКлиент Тогда РасширениеИмениФайла = ОбщегоНазначенияКлиентСервер.ПолучитьРасширениеИмениФайла(ПолноеИмяФайла); @@ -64,6 +64,7 @@ ИзвлеченныйТекст = ""; Прекратить = Истина; КонецПопытки; + #КонецЕсли Если ПустаяСтрока(ИзвлеченныйТекст) Тогда @@ -107,6 +108,7 @@ #КонецЕсли КоличествоСлучайныхВариантов = 26; + Пока НЕ Успешно И ЦиклНомер < 100 Цикл НомерКаталога = 0; @@ -138,7 +140,7 @@ ПодКаталог = ""; // Частичный путь. // По умолчанию вначале используется корень, если возможности нет, - // то добавляется A, B, ... Z, .. ZZZZZ, .. AAAAA1, .. AAAAA2 и т.д. + // то добавляется A, B, ... Z, .. ZZZZZ, .. AAAAA, .. AAAAAZ и т.д. Если Счетчик = 0 Тогда ПодКаталог = ""; Иначе @@ -676,7 +678,7 @@ ИзвлеченныйТекст = ""; -#Если Не ВебКлиент Тогда +#Если Не ВебКлиент И НЕ МобильныйКлиент Тогда ВременнаяПапкаДляРазархивирования = ПолучитьИмяВременногоФайла(""); ВременныйZIPФайл = ПолучитьИмяВременногоФайла("zip"); diff --git a/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl index 019471ea1..30407dde1 100644 --- a/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl @@ -972,6 +972,13 @@ Зависимость.Параметризуется = Истина; КонецПроцедуры +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииСписковСОграничениемДоступа(Списки) Экспорт + + Списки.Вставить(Метаданные.Справочники.РассылкиОтчетов, Истина); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -1364,7 +1371,7 @@ ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ПараметрыОтчета, Подключение, Истина); Исключение ПараметрыОтчета.Ошибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'При подключении и загрузке настроек отчета ""%1"" возникла ошибка.'"), + НСтр("ru = 'Не удалось подключить и загрузить настройки отчета ""%1"".'"), Строка(ПараметрыОтчета.Отчет)); ЗаписьЖурнала( ПараметрыЖурнала, @@ -1377,7 +1384,7 @@ // В существующих рассылках формируем только отчеты, готовые к рассылке. Если РассылкаОтчетовПовтИсп.ИсключаемыеОтчеты().Найти(Подключение.СсылкаОтчета) <> Неопределено Тогда ПараметрыОтчета.Ошибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Отчет ""%1"" не поддерживает рассылку. + НСтр("ru = 'Отчет ""%1"" не предназначен для рассылки. |Подробнее см. в процедуре ОпределитьИсключаемыеОтчеты модуля РассылкаОтчетовПереопределяемый.'"), Строка(Подключение.СсылкаОтчета)); ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, ПараметрыОтчета.Ошибки); diff --git a/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl b/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl index 8395020ec..03b866148 100644 --- a/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl +++ b/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl @@ -75,30 +75,31 @@ КопияОтбора.Вставить("ОбластьДанных", ОбластьДанных); КонецЕсли; - МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); + МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); + ШаблоныЗаданийОчереди = МодульОчередьЗаданий.ШаблоныЗаданийОчереди(); Если КопияОтбора.Свойство("Метаданные") Тогда Если ТипЗнч(КопияОтбора.Метаданные) = Тип("ОбъектМетаданных") Тогда - Попытка + Если ШаблоныЗаданийОчереди.Найти(КопияОтбора.Метаданные.Имя) <> Неопределено Тогда УстановитьПривилегированныйРежим(Истина); Шаблон = МодульОчередьЗаданий.ШаблонПоИмени(КопияОтбора.Метаданные.Имя); УстановитьПривилегированныйРежим(Ложь); КопияОтбора.Вставить("Шаблон", Шаблон); - Исключение + Иначе КопияОтбора.Вставить("ИмяМетода", КопияОтбора.Метаданные.ИмяМетода); - КонецПопытки; + КонецЕсли; Иначе МетаданныеРегламентноеЗадание = Метаданные.РегламентныеЗадания.Найти(КопияОтбора.Метаданные); Если МетаданныеРегламентноеЗадание <> Неопределено Тогда - Попытка + Если ШаблоныЗаданийОчереди.Найти(МетаданныеРегламентноеЗадание.Имя) <> Неопределено Тогда УстановитьПривилегированныйРежим(Истина); Шаблон = МодульОчередьЗаданий.ШаблонПоИмени(МетаданныеРегламентноеЗадание.Имя); УстановитьПривилегированныйРежим(Ложь); КопияОтбора.Вставить("Шаблон", Шаблон); - Исключение + Иначе КопияОтбора.Вставить("ИмяМетода", МетаданныеРегламентноеЗадание.ИмяМетода); - КонецПопытки; - КонецЕсли; + КонецЕсли; + КонецЕсли; КонецЕсли; ИначеЕсли КопияОтбора.Свойство("Идентификатор") И (ТипЗнч(КопияОтбора.Идентификатор) = Тип("УникальныйИдентификатор") diff --git a/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl b/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl index 7e2a0d5c2..a8b9049e6 100644 --- a/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl @@ -687,12 +687,12 @@ КонецЕсли; Если НЕ ОбщегоНазначения.РазделениеВключено() И ПодсистемаРаботаВМоделиСервиса <> Неопределено Тогда Если ПодсистемаРаботаВМоделиСервиса.Состав.Содержит(ОбъектМетаданных) Тогда - ЗаданияВМоделиСервиса.Вставить(ОбъектМетаданных.Имя, Истина); + ОтключенныеЗадания.Добавить(ОбъектМетаданных.Имя); Продолжить; КонецЕсли; Для каждого Подсистема Из ПодсистемаРаботаВМоделиСервиса.Подсистемы Цикл Если Подсистема.Состав.Содержит(ОбъектМетаданных) Тогда - ЗаданияВМоделиСервиса.Вставить(ОбъектМетаданных.Имя, Истина); + ОтключенныеЗадания.Добавить(ОбъектМетаданных.Имя); Продолжить; КонецЕсли; КонецЦикла; @@ -702,12 +702,7 @@ Если ИдентификаторРегламентногоЗадания = Неопределено Тогда Индекс = 0; - Для каждого Задание Из ТекущиеЗадания Цикл - Если НЕ ОбщегоНазначения.РазделениеВключено() - И ЗаданияВМоделиСервиса[Задание.Метаданные.Имя] <> Неопределено Тогда - - Продолжить; - КонецЕсли; + Для Каждого Задание Из ТекущиеЗадания Цикл Идентификатор = Строка(Задание.УникальныйИдентификатор); diff --git a/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl index 22d3f7051..d5c1a73c2 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl @@ -73,7 +73,7 @@ // См. ОбщегоНазначенияКлиентПереопределяемый.ПередЗавершениемРаботыСистемы. Процедура ПередЗавершениемРаботыСистемы(Отказ, Предупреждения) Экспорт - #Если ВебКлиент Тогда + #Если ВебКлиент ИЛИ МобильныйКлиент Тогда Возврат; #КонецЕсли @@ -257,7 +257,7 @@ Возврат; КонецЕсли; - МассивФайлов = НайтиФайлы(КаталогХранения, "backup????_??_??_??_??_??*", Ложь); + МассивФайлов = НайтиФайлы(КаталогХранения, "backup*.zip", Ложь); СписокУдаляемыхФайлов = Новый Массив; // Удаление резервных копий. @@ -382,7 +382,7 @@ // Возвращаемое значение - Структура - структура скрипта резервного копирования. // Функция КлиентскиеПараметрыРезервногоКопирования() Экспорт - #Если НЕ ВебКлиент Тогда + #Если НЕ ВебКлиент И НЕ МобильныйКлиент Тогда СтруктураПараметров = Новый Структура(); СтруктураПараметров.Вставить("ИмяФайлаПрограммы", СтандартныеПодсистемыКлиент.ИмяИсполняемогоФайлаПриложения()); @@ -508,7 +508,7 @@ КонецФункции -#Если Не ВебКлиент Тогда +#Если Не ВебКлиент И НЕ МобильныйКлиент Тогда Функция КодировкаФайловПрограммыРезервногоКопированияИБ() Экспорт diff --git a/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl index 4d3daea71..1e4b75e0d 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl @@ -84,6 +84,17 @@ КонецФункции +// Ссылка для подстановки в форматированную строку для открытия обработки резервного копирования ИБ. +// +// Возвращаемое значение: +// Строка - Навигационная ссылка. +// +Функция НавигационнаяСсылкаОбработкиРезервногоКопирования() Экспорт + + Возврат "e1cib/app/Обработка.РезервноеКопированиеИБ"; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем конфигурации. diff --git a/SSL/src/CommonModules/СклонениеПредставленийОбъектов/Module.bsl b/SSL/src/CommonModules/СклонениеПредставленийОбъектов/Module.bsl index 65aea5dc1..ecca4153e 100644 --- a/SSL/src/CommonModules/СклонениеПредставленийОбъектов/Module.bsl +++ b/SSL/src/CommonModules/СклонениеПредставленийОбъектов/Module.bsl @@ -109,7 +109,6 @@ Процедура УстановитьДоступностьСервисаСклонения(Доступность) Экспорт УстановитьПривилегированныйРежим(Истина); - ТекущиеПараметры = Новый Соответствие(ПараметрыСеанса.ПараметрыКлиентаНаСервере); ТекущиеПараметры.Вставить("ДоступенСервисСклонения", Доступность); ПараметрыСеанса.ПараметрыКлиентаНаСервере = Новый ФиксированноеСоответствие(ТекущиеПараметры); @@ -159,7 +158,7 @@ Если ПустаяСтрока(СклоняемаяЧасть) Тогда Возврат Ложь; КонецЕсли; - + УстановитьОтключениеБезопасногоРежима(Истина); Компонента = ОбщегоНазначения.ПодключитьКомпонентуИзМакета("CNameDecl", "ОбщийМакет.КомпонентаСклоненияФИО"); Если Компонента = Неопределено Тогда @@ -269,15 +268,14 @@ Возврат СклонениеПредставленийОбъектовКлиентСервер.СтруктураСклонения(); КонецЕсли; - ИспользоватьСервисСклонения = Константы.ИспользоватьСервисСклоненияMorpher.Получить(); - - Если Не ЭтоФИО И ИспользоватьСервисСклонения Тогда - - СтруктураСклонения = СтруктураСклоненияЧерезЗапросКСервису(Представление, ПоказыватьСообщения); - Если СтруктураСклонения <> Неопределено Тогда - Возврат СтруктураСклонения; + Если Не ЭтоФИО Тогда + ИспользоватьСервисСклонения = Константы.ИспользоватьСервисСклоненияMorpher.Получить(); + Если ИспользоватьСервисСклонения Тогда + СтруктураСклонения = СтруктураСклоненияЧерезЗапросКСервису(Представление, ПоказыватьСообщения); + Если СтруктураСклонения <> Неопределено Тогда + Возврат СтруктураСклонения; + КонецЕсли; КонецЕсли; - КонецЕсли; Если СтруктураСклонения = Неопределено Тогда @@ -292,7 +290,6 @@ МассивСтрок = СтрРазделить(Представление, " ", Ложь); Если МассивСтрок.Количество() = 1 И СтроковыеФункцииКлиентСервер.ТолькоКириллицаВСтроке(Представление) Тогда - ПросклонятьСПомощьюКомпоненты = Истина; КонецЕсли; КонецЕсли; @@ -395,7 +392,6 @@ // Если склоняем не ФИО, тогда обращаемся к веб-сервису, если разрешено и сервис доступен. ИспользоватьСервисСклонения = Константы.ИспользоватьСервисСклоненияMorpher.Получить(); - Если Не ИспользоватьСервисСклонения Тогда Возврат Представление; КонецЕсли; @@ -404,7 +400,7 @@ Если СтруктураСклонения = Неопределено Тогда Возврат Представление; КонецЕсли; - + // Запись в регистр СклоненияПредставленийОбъектов успешного склонения. Если ЗначениеЗаполнено(Объект) Тогда ЗаписатьВРегистрСклонения(Представление, Объект, СтруктураСклонения); @@ -428,13 +424,10 @@ УстановитьПривилегированныйРежим(Истина); ХешПредставления = ОбщегоНазначения.КонтрольнаяСуммаСтрокой(Представление); - НаборЗаписейСклонения = РегистрыСведений.СклоненияПредставленийОбъектов.СоздатьНаборЗаписей(); - НаборЗаписейСклонения.Отбор.Объект.Установить(Объект.Ссылка); НоваяСтрока = НаборЗаписейСклонения.Добавить(); - НоваяСтрока.Объект = Объект.Ссылка; НоваяСтрока.ХешПредставления = ХешПредставления; ЗаполнитьЗначенияСвойств(НоваяСтрока, Склонения); @@ -447,11 +440,14 @@ Функция СтруктураСклоненияЧерезЗапросКСервису(СклоняемыйТекст, ПоказыватьСообщения) + Если Не ДоступенСервисСклонения() Тогда + Возврат Неопределено; + КонецЕсли; + УстановитьОтключениеБезопасногоРежима(Истина); Соединение = HTTPСоединениеСервисаСклонений(); Запрос = HTTPЗапросКСервисуСклонения(СклоняемыйТекст); - Попытка Ответ = ВыполнитьЗапросСервисуСклонений(Соединение, Запрос); Исключение @@ -459,7 +455,6 @@ УстановитьДоступностьСервисаСклонения(Ложь); Возврат Неопределено; КонецПопытки; - УстановитьДоступностьСервисаСклонения(Истина); УстановитьОтключениеБезопасногоРежима(Ложь); СтруктураОтвета = СтруктураОтветаСервисаСклонений(Ответ); @@ -638,12 +633,11 @@ Запрос.УстановитьПараметр("ИспользуетсяОтборПоОбъекту", ЗначениеЗаполнено(Объект)); Выборка = Запрос.Выполнить().Выбрать(); - Если Выборка.Следующий() Тогда СтруктураСклонения = СклонениеПредставленийОбъектовКлиентСервер.СтруктураСклонения(); ЗаполнитьЗначенияСвойств(СтруктураСклонения, Выборка); КонецЕсли; - + Возврат СтруктураСклонения; КонецФункции diff --git a/SSL/src/CommonModules/СоединенияИБ/Module.bsl b/SSL/src/CommonModules/СоединенияИБ/Module.bsl index 54d795fec..7052be5d7 100644 --- a/SSL/src/CommonModules/СоединенияИБ/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБ/Module.bsl @@ -62,7 +62,7 @@ // Функция УстановленаБлокировкаСоединений() Экспорт - ПараметрыБлокировки = СтруктураПараметровБлокировкиСеансов(); + ПараметрыБлокировки = ТекущиеПараметрыБлокировкиСоединений(); Возврат ПараметрыБлокировки.УстановленаБлокировкаСоединений; КонецФункции @@ -85,7 +85,7 @@ // Функция ПараметрыБлокировкиСеансов(Знач ПолучитьКоличествоСеансов = Ложь) Экспорт - ПараметрыБлокировки = СтруктураПараметровБлокировкиСеансов(); + ПараметрыБлокировки = ТекущиеПараметрыБлокировкиСоединений(); Возврат ПараметрыБлокировкиСеансовРасширенные(ПолучитьКоличествоСеансов, ПараметрыБлокировки); КонецФункции @@ -126,7 +126,7 @@ Возврат Истина; КонецЕсли; -КонецФункции +КонецФункции // Возвращает информацию о текущих соединениях с информационной базой. // При необходимости записывает сообщение в журнал регистрации. @@ -452,7 +452,7 @@ // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиентаПриЗапуске. Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт - ПараметрыБлокировки = СтруктураПараметровБлокировкиСеансов(); + ПараметрыБлокировки = ТекущиеПараметрыБлокировкиСоединений(); Параметры.Вставить("ПараметрыБлокировкиСеансов", Новый ФиксированнаяСтруктура(ПараметрыБлокировкиСеансовРасширенные(Ложь, ПараметрыБлокировки))); Если Не ПараметрыБлокировки.УстановленаБлокировкаСоединений @@ -467,7 +467,7 @@ // Администратор приложения может входить, несмотря на незавершенное обновление области (и блокировку области данных). // При этом он инициирует обновление области. Возврат; - КонецЕсли; + КонецЕсли; ТекущийРежим = ПараметрыБлокировки.ТекущийРежимОбластиДанных; @@ -502,7 +502,7 @@ Иначе Параметры.Вставить("ВозможноСнятьБлокировку", Ложь); КонецЕсли; - + КонецПроцедуры // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиента. @@ -619,16 +619,16 @@ Блокировка.Заблокировать(); ТекстЗапроса = - "ВЫБРАТЬ - | ЕСТЬNULL(БлокировкиСеансовОбластейДанных.ОбластьДанныхВспомогательныеДанные, УдалитьБлокировкиСеансовОбластиДанных.ОбластьДанных) КАК ОбластьДанныхВспомогательныеДанные, - | ЕСТЬNULL(БлокировкиСеансовОбластейДанных.НачалоБлокировки, УдалитьБлокировкиСеансовОбластиДанных.НачалоБлокировки) КАК НачалоБлокировки, - | ЕСТЬNULL(БлокировкиСеансовОбластейДанных.КонецБлокировки, УдалитьБлокировкиСеансовОбластиДанных.КонецБлокировки) КАК КонецБлокировки, - | ЕСТЬNULL(БлокировкиСеансовОбластейДанных.СообщениеБлокировки, УдалитьБлокировкиСеансовОбластиДанных.СообщениеБлокировки) КАК СообщениеБлокировки, - | ЕСТЬNULL(БлокировкиСеансовОбластейДанных.Эксклюзивная, УдалитьБлокировкиСеансовОбластиДанных.Эксклюзивная) КАК Эксклюзивная - |ИЗ - | РегистрСведений.УдалитьБлокировкиСеансовОбластиДанных КАК УдалитьБлокировкиСеансовОбластиДанных - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.БлокировкиСеансовОбластейДанных КАК БлокировкиСеансовОбластейДанных - | ПО УдалитьБлокировкиСеансовОбластиДанных.ОбластьДанных = БлокировкиСеансовОбластейДанных.ОбластьДанныхВспомогательныеДанные"; + "ВЫБРАТЬ + | ЕСТЬNULL(БлокировкиСеансовОбластейДанных.ОбластьДанныхВспомогательныеДанные, УдалитьБлокировкиСеансовОбластиДанных.ОбластьДанных) КАК ОбластьДанныхВспомогательныеДанные, + | ЕСТЬNULL(БлокировкиСеансовОбластейДанных.НачалоБлокировки, УдалитьБлокировкиСеансовОбластиДанных.НачалоБлокировки) КАК НачалоБлокировки, + | ЕСТЬNULL(БлокировкиСеансовОбластейДанных.КонецБлокировки, УдалитьБлокировкиСеансовОбластиДанных.КонецБлокировки) КАК КонецБлокировки, + | ЕСТЬNULL(БлокировкиСеансовОбластейДанных.СообщениеБлокировки, УдалитьБлокировкиСеансовОбластиДанных.СообщениеБлокировки) КАК СообщениеБлокировки, + | ЕСТЬNULL(БлокировкиСеансовОбластейДанных.Эксклюзивная, УдалитьБлокировкиСеансовОбластиДанных.Эксклюзивная) КАК Эксклюзивная + |ИЗ + | РегистрСведений.УдалитьБлокировкиСеансовОбластиДанных КАК УдалитьБлокировкиСеансовОбластиДанных + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.БлокировкиСеансовОбластейДанных КАК БлокировкиСеансовОбластейДанных + | ПО УдалитьБлокировкиСеансовОбластиДанных.ОбластьДанных = БлокировкиСеансовОбластейДанных.ОбластьДанныхВспомогательныеДанные"; Запрос = Новый Запрос(ТекстЗапроса); Набор = РегистрыСведений.БлокировкиСеансовОбластейДанных.СоздатьНаборЗаписей(); @@ -689,17 +689,17 @@ // Возвращает установлена ли блокировка соединений на конкретную дату. // // Параметры: -// ТекущийРежим - БлокировкаСеансов - блокировка сеансов. -// ТекущаяДата - Дата - дата, на которую необходимо проверить. +// ТекущийРежим - БлокировкаСеансов - блокировка сеансов. +// ТекущаяДата - Дата - дата, на которую необходимо проверить. // // Возвращаемое значение: -// Булево - Истина, если установлена. +// Булево - Истина, если установлена. // Функция УстановленаБлокировкаСоединенийНаДату(ТекущийРежим, ТекущаяДата) Возврат (ТекущийРежим.Установлена И ТекущийРежим.Начало <= ТекущаяДата И (Не ЗначениеЗаполнено(ТекущийРежим.Конец) Или ТекущаяДата <= ТекущийРежим.Конец)); - + КонецФункции // См. описание в функции ПараметрыБлокировкиСеансов. @@ -734,7 +734,7 @@ КонецФункции -Функция СтруктураПараметровБлокировкиСеансов() +Функция ТекущиеПараметрыБлокировкиСоединений() // ТекущаяДатаСеанса не используется, т.к. блокировка устанавливается в часовом поясе сервера. ТекущаяДата = ТекущаяДата(); diff --git a/SSL/src/CommonModules/СоединенияИБВызовСервера/Module.bsl b/SSL/src/CommonModules/СоединенияИБВызовСервера/Module.bsl index 73291256b..48e3496af 100644 --- a/SSL/src/CommonModules/СоединенияИБВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБВызовСервера/Module.bsl @@ -98,4 +98,12 @@ Возврат СтандартныеПодсистемыСервер.ПараметрыАдминистрирования(); КонецФункции +// Удаляет все сеансы информационной базы кроме текущего. +// +Процедура УдалитьВсеСеансыКромеТекущего(ПараметрыАдминистрирования) Экспорт + + СоединенияИБКлиентСервер.УдалитьВсеСеансыКромеТекущего(ПараметрыАдминистрирования); + +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/СоединенияИБГлобальный/Module.bsl b/SSL/src/CommonModules/СоединенияИБГлобальный/Module.bsl index 348be0962..826072a50 100644 --- a/SSL/src/CommonModules/СоединенияИБГлобальный/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБГлобальный/Module.bsl @@ -56,7 +56,7 @@ ИначеЕсли ВремяНачалаБлокировки - ТекущийМомент <= ИнтервалПредупреждения Тогда - ПоказатьПредупреждение(, ТекстСообщения, 30); + СоединенияИБКлиент.ПоказатьПредупреждениеПриЗавершенииРаботы(ТекстСообщения); КонецЕсли; @@ -109,7 +109,11 @@ Попытка ПараметрыАдминистрирования = СоединенияИБКлиент.СохраненныеПараметрыАдминистрирования(); - СоединенияИБКлиентСервер.УдалитьВсеСеансыКромеТекущего(ПараметрыАдминистрирования); + Если ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер() Тогда + СоединенияИБВызовСервера.УдалитьВсеСеансыКромеТекущего(ПараметрыАдминистрирования); + Иначе + СоединенияИБКлиентСервер.УдалитьВсеСеансыКромеТекущего(ПараметрыАдминистрирования); + КонецЕсли; СоединенияИБКлиент.СохранитьПараметрыАдминистрирования(Неопределено); Исключение СоединенияИБКлиент.УстановитьПризнакРаботаПользователейЗавершается(Ложь); diff --git a/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl b/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl index 545db5aa4..a39e21100 100644 --- a/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl @@ -343,10 +343,28 @@ КонецПроцедуры +Процедура ПоказатьПредупреждениеПриЗавершенииРаботы(ТекстСообщения) Экспорт + + ИмяПараметра = "СтандартныеПодсистемы.ПоказаноПредупреждениеПередЗавершениемРаботы"; + Если ПараметрыПриложения[ИмяПараметра] <> Истина Тогда + ПоказатьОповещениеПользователя(НСтр("ru = 'Работа программы будет завершена'"),, ТекстСообщения,, + СтатусОповещенияПользователя.Важное); + ПараметрыПриложения.Вставить(ИмяПараметра, Истина); + КонецЕсли; + ПоказатьПредупреждение(, ТекстСообщения, 30); + +КонецПроцедуры + Процедура ЗадатьВопросПриЗавершенииРаботы(ТекстСообщения) Экспорт + ИмяПараметра = "СтандартныеПодсистемы.ПоказаноПредупреждениеПередЗавершениемРаботы"; + Если ПараметрыПриложения[ИмяПараметра] <> Истина Тогда + ПоказатьОповещениеПользователя(НСтр("ru = 'Работа программы будет завершена'"),, ТекстСообщения,, СтатусОповещенияПользователя.Важное); + ПараметрыПриложения.Вставить("СтандартныеПодсистемы.ПоказаноПредупреждениеПередЗавершениемРаботы", Истина); + КонецЕсли; + ТекстВопроса = НСтр("ru = '%1 - |Завершить работу?'"); + |Завершить работу?'"); ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, ТекстСообщения); ОписаниеОповещения = Новый ОписаниеОповещения("ЗадатьВопросПриЗавершенииРаботыЗавершение", ЭтотОбъект); ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет, 30, КодВозвратаДиалога.Да); diff --git a/SSL/src/CommonModules/СообщенияВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/СообщенияВМоделиСервиса/Module.bsl index d45c00c84..0d86e19f1 100644 --- a/SSL/src/CommonModules/СообщенияВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/СообщенияВМоделиСервиса/Module.bsl @@ -36,7 +36,7 @@ Сообщение.Header.Recipient = ОписаниеУзлаОбменаСообщениями(Получатель); КонецЕсли; - СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспортаWS(Получатель); + СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбменаСообщениями.НастройкиТранспортаWS(Получатель); ПараметрыПодключения = Новый Структура; ПараметрыПодключения.Вставить("URL", СтруктураНастроек.WSURLВебСервиса); ПараметрыПодключения.Вставить("UserName", СтруктураНастроек.WSИмяПользователя); diff --git a/SSL/src/CommonModules/СообщенияВМоделиСервисаРазделениеДанных/Module.bsl b/SSL/src/CommonModules/СообщенияВМоделиСервисаРазделениеДанных/Module.bsl index 027b94bff..a1f152342 100644 --- a/SSL/src/CommonModules/СообщенияВМоделиСервисаРазделениеДанных/Module.bsl +++ b/SSL/src/CommonModules/СообщенияВМоделиСервисаРазделениеДанных/Module.bsl @@ -287,7 +287,7 @@ Функция ПроверкаКлючаОбластиВСообщенияхВозможна() - СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспортаWS( + СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбменаСообщениями.НастройкиТранспортаWS( РаботаВМоделиСервиса.КонечнаяТочкаМенеджераСервиса()); ПараметрыПодключенияКМС = Новый Структура; ПараметрыПодключенияКМС.Вставить("URL", СтруктураНастроек.WSURLВебСервиса); diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl index cd3428864..f2a1408bb 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl @@ -306,6 +306,7 @@ ПараметрыКлиента.Вставить("ПривилегированныйРежимУстановленПриЗапуске", ПривилегированныйРежимУстановленПриЗапуске); ПараметрыКлиента.Вставить("ЭтоВебКлиент", Параметры.ЭтоВебКлиент); ПараметрыКлиента.Вставить("ЭтоВебКлиентПодMacOS", Параметры.ЭтоВебКлиентПодMacOS); + ПараметрыКлиента.Вставить("ЭтоМобильныйКлиент", Параметры.ЭтоМобильныйКлиент); ПараметрыКлиента.Вставить("ЭтоLinuxКлиент", Параметры.ЭтоLinuxКлиент); ПараметрыКлиента.Вставить("ЭтоOSXКлиент", Параметры.ЭтоOSXКлиент); ПараметрыКлиента.Вставить("ЭтоWindowsКлиент", Параметры.ЭтоWindowsКлиент); @@ -313,6 +314,7 @@ ПараметрыКлиента.Вставить("ОперативнаяПамять", Параметры.ОперативнаяПамять); ПараметрыКлиента.Вставить("КаталогПрограммы", Параметры.КаталогПрограммы); ПараметрыКлиента.Вставить("ИдентификаторКлиента", Параметры.ИдентификаторКлиента); + ПараметрыКлиента.Вставить("РазрешениеОсновногоЭкрана", Параметры.РазрешениеОсновногоЭкрана); ПараметрыСеанса.ПараметрыКлиентаНаСервере = Новый ФиксированноеСоответствие(ПараметрыКлиента); Если СтрНайти(НРег(Параметры.ПараметрЗапуска), НРег("ЗапуститьОбновлениеИнформационнойБазы")) > 0 Тогда diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl index 9b0eb95a4..a8cfc1dd9 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl @@ -50,8 +50,7 @@ // // Параметры: // ОписаниеОповещенияОЗавершении - ОписаниеОповещения - описание процедуры, которая будет вызвана после закрытия окна -// вопроса -// со следующими параметрами: +// вопроса со следующими параметрами: // РезультатВопроса - Структура - структура со свойствами: // Значение - результат выбора пользователя: значение // системного перечисления или значение, @@ -71,8 +70,7 @@ // поддерживающее XDTO-сериализацию. // Представление - задает текст кнопки. // -// ДополнительныеПараметры - Структура - дополнительные параметры, см. описание к -// ПараметрыВопросаПользователю. +// ДополнительныеПараметры - Структура - см. СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю. // // Возвращаемое значение: // Результат выбора пользователя будет передан в метод, описанный параметром ОписаниеОповещенияОЗавершении. @@ -778,50 +776,6 @@ //////////////////////////////////////////////////////////////////////////////// // Вывод результата выполнения. -// Устарела. Следует использовать ПоказатьПредупреждение или ВызватьИсключение. -// Выводит предупреждение или текст ошибки. -// -// Параметры: -// Форма - УправляемаяФорма - Форма, для которой требуется вывод. -// ПараметрыПредупреждения - Структура - Параметры предупреждения. -// * Текст - Строка - Текст предупреждения. -// * Подробно - Строка - Необязательный. Тексты ошибок, которые при желании может просмотреть пользователь. -// * Заголовок - Строка - Необязательный. Заголовок окна. -// * ПутьКРеквизитуФормы - Строка - Необязательный. Путь к реквизиту формы, значение которого вызывало ошибку. -// ОбработчикЗавершения - ОписаниеОповещения - Описание процедуры, -// которая будет вызвана после завершения показа (со значением Неопределено). -// -Процедура ВывестиПредупреждение(Форма, ПараметрыПредупреждения, ОбработчикЗавершения = Неопределено) Экспорт - Контекст = Новый Структура("Текст, Подробно, Заголовок, ПутьКРеквизитуФормы, Форма, ОбработчикЗавершения"); - ЗаполнитьЗначенияСвойств(Контекст, ПараметрыПредупреждения); - Контекст.Форма = Форма; - Контекст.ОбработчикЗавершения = ОбработчикЗавершения; - - Если Не ЗначениеЗаполнено(Контекст.Текст) Тогда - ВывестиПредупреждениеЗавершение(Неопределено, Контекст); - Возврат; - КонецЕсли; - Если Контекст.Заголовок = Неопределено Тогда - Контекст.Заголовок = ""; - КонецЕсли; - - КнопкаПоУмолчанию = КодВозвратаДиалога.ОК; - - Кнопки = Новый СписокЗначений; - Если ЗначениеЗаполнено(Контекст.Подробно) И Контекст.Подробно <> Контекст.Текст Тогда - Кнопки.Добавить(1, НСтр("ru = 'Подробнее...'")); - КонецЕсли; - Если ТипЗнч(Форма) = Тип("УправляемаяФорма") И ЗначениеЗаполнено(Контекст.ПутьКРеквизитуФормы) Тогда - Кнопки.Добавить(2, НСтр("ru = 'Перейти к реквизиту'")); - КонецЕсли; - // Кнопка "Закрыть" должна быть крайней справа, - // т.к. это ее стандартное место в диалогах, в которых команды размещаются внизу формы. - Кнопки.Добавить(КодВозвратаДиалога.ОК, НСтр("ru = 'Закрыть'")); - - Обработчик = Новый ОписаниеОповещения("ВывестиПредупреждениеПродолжение", ЭтотОбъект, Контекст); - ПоказатьВопрос(Обработчик, Контекст.Текст, Кнопки, , КнопкаПоУмолчанию, Контекст.Заголовок); -КонецПроцедуры - // Разворачивает узлы указанного дерева на форме. // // Параметры: @@ -2064,7 +2018,6 @@ КонецФункции - Функция ВыполняетсяИнтерактивнаяОбработкаПередНачаломРаботыСистемы() ПараметрыПриЗапускеПрограммы = ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыПриЗапускеПрограммы"]; @@ -2291,7 +2244,7 @@ ИнтерактивнаяОбработка = Новый ОписаниеОповещения( "ПоказатьПредупреждениеИПродолжить", - СтандартныеПодсистемыКлиент.ЭтотОбъект, + ЭтотОбъект, ТекстПредупреждения); Параметры.ИнтерактивнаяОбработка = ИнтерактивнаяОбработка; @@ -2402,36 +2355,6 @@ Текст, БиблиотекаКартинок.Предупреждение32); КонецПроцедуры -// Продолжение процедуры ВывестиПредупреждение. -Процедура ВывестиПредупреждениеПродолжение(Ответ, Контекст) Экспорт - Если Ответ = 1 Тогда - - Обработчик = Новый ОписаниеОповещения("ВывестиПредупреждениеЗавершение", ЭтотОбъект, Контекст); - ПолныйТекст = Строка(Контекст.Текст) + Символы.ПС + Символы.ПС + Контекст.Подробно; - ПоказатьПодробнуюИнформацию(Обработчик, ПолныйТекст, Контекст.Заголовок); - - Возврат; - - ИначеЕсли Ответ = 2 Тогда - - Сообщение = Новый СообщениеПользователю; - Сообщение.ИдентификаторНазначения = Контекст.Форма.УникальныйИдентификатор; - Сообщение.Текст = Контекст.Текст; - Сообщение.Поле = Контекст.ПутьКРеквизитуФормы; - Сообщение.Сообщить(); - - КонецЕсли; - - ВывестиПредупреждениеЗавершение(Неопределено, Контекст); -КонецПроцедуры - -// Продолжение процедуры ВывестиПредупреждение. -Процедура ВывестиПредупреждениеЗавершение(Ответ, Контекст) Экспорт - Если ТипЗнч(Контекст.ОбработчикЗавершения) = Тип("ОписаниеОповещения") Тогда - ВыполнитьОбработкуОповещения(Контекст.ОбработчикЗавершения, Неопределено); - КонецЕсли; -КонецПроцедуры - // Формирует описание выделенных областей табличного документа, которое можно передавать на сервер. // Служит заменой типа ВыделенныеОбластиТабличногоДокумента // когда нужно вычислить сумму ячеек на сервере без контекста. diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl index 54bbf2937..3ca244ff4 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl @@ -23,9 +23,15 @@ #Если ВебКлиент Тогда ЭтоВебКлиент = Истина; + ЭтоМобильныйКлиент = Ложь; + КаталогПрограммы = ""; + #ИначеЕсли МобильныйКлиент Тогда + ЭтоВебКлиент = Ложь; + ЭтоМобильныйКлиент = Истина; КаталогПрограммы = ""; #Иначе ЭтоВебКлиент = Ложь; + ЭтоМобильныйКлиент = Ложь; КаталогПрограммы = КаталогПрограммы(); #КонецЕсли @@ -60,6 +66,7 @@ Параметры.Вставить("ЭтоLinuxКлиент", ЭтоLinuxКлиент); Параметры.Вставить("ЭтоOSXКлиент", ЭтоOSXКлиент); Параметры.Вставить("ЭтоWindowsКлиент", ЭтоWindowsКлиент); + Параметры.Вставить("ЭтоМобильныйКлиент", ЭтоМобильныйКлиент); Параметры.Вставить("ИспользуемыйКлиент", ИспользуемыйКлиент); Параметры.Вставить("КаталогПрограммы", КаталогПрограммы); Параметры.Вставить("ИдентификаторКлиента", СистемнаяИнформация.ИдентификаторКлиента); @@ -69,6 +76,14 @@ ОперативнаяПамять = Окр(СистемнаяИнформация.ОперативнаяПамять / 1024, 1); Параметры.Вставить("ОперативнаяПамять", ОперативнаяПамять); + ИнформациюЭкрановКлиента = ПолучитьИнформациюЭкрановКлиента(); + Если ИнформациюЭкрановКлиента.Количество() > 0 Тогда + DPI = ИнформациюЭкрановКлиента[0].DPI; + Параметры.Вставить("РазрешениеОсновногоЭкрана", ?(DPI = 0, 72, DPI)); + Иначе + Параметры.Вставить("РазрешениеОсновногоЭкрана", 72); + КонецЕсли; + // Установка даты клиента непосредственно перед вызовом, чтобы уменьшить погрешность. Параметры.Вставить("ТекущаяДатаНаКлиенте", ТекущаяДата()); // Для расчета ПоправкаКВремениСеанса. Параметры.Вставить("ТекущаяУниверсальнаяДатаВМиллисекундахНаКлиенте", diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСервер/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСервер/Module.bsl index 808d11b86..e78aef85b 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСервер/Module.bsl @@ -1,8 +1,5 @@ #Область СлужебныйПрограммныйИнтерфейс -//////////////////////////////////////////////////////////////////////////////// -// Табличный документ - // Рассчитывает показатели числовых ячеек в табличном документе. // См. также ОтчетыКлиент.ВыделенныеОбласти. // @@ -103,21 +100,7 @@ Число = Ячейка.Значение; ИначеЕсли ЗначениеЗаполнено(Ячейка.Текст) Тогда ОписаниеТипаЧисло = Новый ОписаниеТипов("Число"); - - ТекстЯчейки = Ячейка.Текст; - Если СтрНачинаетсяС(ТекстЯчейки, "(") - И СтрЗаканчиваетсяНа(ТекстЯчейки, ")") Тогда - - ТекстЯчейки = СтрЗаменить(ТекстЯчейки, "(", ""); - ТекстЯчейки = СтрЗаменить(ТекстЯчейки, ")", ""); - - Число = ОписаниеТипаЧисло.ПривестиЗначение(ТекстЯчейки); - Если Число > 0 Тогда - Число = -Число; - КонецЕсли; - Иначе - Число = ОписаниеТипаЧисло.ПривестиЗначение(ТекстЯчейки); - КонецЕсли; + Число = ОписаниеТипаЧисло.ПривестиЗначение(Ячейка.Текст); Иначе Продолжить; КонецЕсли; @@ -146,9 +129,6 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Работа с расписанием регламентного задания. - // Формирует представление расписания регламентного задания. // // Параметры: diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl index 2cd4e0288..5289448df 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl @@ -406,10 +406,10 @@ // Для справочника ИдентификаторыОбъектовМетаданных. // Только для внутреннего использования. -Функция ИдентификаторОбъектаМетаданныхПоПолномуИмени(ПолноеИмяОбъектаМетаданных) Экспорт +Функция КэшИдентификаторовОбъектовМетаданных(КлючДанныхПовторногоИспользования) Экспорт - Возврат Справочники.ИдентификаторыОбъектовМетаданных.ИдентификаторОбъектаМетаданныхПоПолномуИмени( - ПолноеИмяОбъектаМетаданных); + Возврат Справочники.ИдентификаторыОбъектовМетаданных.КэшИдентификаторовОбъектовМетаданных( + КлючДанныхПовторногоИспользования); КонецФункции diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl index 2d503105f..47e6c4046 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl @@ -37,6 +37,11 @@ УстановленныеПараметры.Добавить("ПараметрыКлиентаНаСервере"); КонецЕсли; + Если ИменаПараметровСеанса.Найти("КлючДанныхПовторногоИспользования") <> Неопределено Тогда + ПараметрыСеанса.КлючДанныхПовторногоИспользования = Новый УникальныйИдентификатор; + УстановленныеПараметры.Добавить("КлючДанныхПовторногоИспользования"); + КонецЕсли; + Справочники.ВерсииРасширений.УстановкаПараметровСеанса(ИменаПараметровСеанса, УстановленныеПараметры); Если ИменаПараметровСеанса.Найти("БуферОбмена") <> Неопределено Тогда @@ -336,7 +341,6 @@ Если Результат = Неопределено Тогда Результат = ОбщегоНазначения.ОбщиеПараметрыБазовойФункциональности().ЗапрашиватьПодтверждениеПриЗавершенииПрограммы; Настройки = Новый Структура("ЗапрашиватьПодтверждениеПриЗавершенииПрограммы", Результат); - ОбщегоНазначения.СохранитьПерсональныеНастройки(Настройки); КонецЕсли; Возврат Результат; @@ -583,7 +587,6 @@ КонецПроцедуры - // Возвращает значение параметра работы программы. // // В старом сеансе (когда версия программы обновлена динамически), @@ -679,7 +682,6 @@ КонецПроцедуры - // Только для внутреннего использования. Процедура ЗарегистрироватьИзменениеПриоритетныхДанныхДляПодчиненныхУзловРИБ() Экспорт @@ -717,6 +719,31 @@ КонецПроцедуры +// Создает во всех списках недостающие предопределенные элементы с новыми ссылками (уникальными идентификаторами). +// Для вызова после отключения подчиненного узла РИБ от главного, или для автоматического восстановления +// отсутствующих предопределенных элементов. +// +Процедура ВосстановитьПредопределенныеЭлементы() Экспорт + + Если ПланыОбмена.ГлавныйУзел() <> Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Восстановление предопределенных элементов следует выполнять только в главном узле РИБ. + |Затем выполнить синхронизацию с подчиненными узлами.'"); + КонецЕсли; + + НачатьТранзакцию(); + Попытка + УстановитьИнициализациюВсехПредопределенныхДанных(); + УстановитьОбновлениеПредопределенныхДанныхИнформационнойБазы(ОбновлениеПредопределенныхДанных.Авто); + СоздатьНедостающиеПредопределенныеДанные(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Процедуры для установки/получения параметров работы расширений (кэшей). @@ -753,24 +780,6 @@ КонецПроцедуры -// Проверяет, что объект метаданных относится к неразделенному расширению, -// поэтому его не следует учитывать при работе с разделенными данными, -// так как при входе в область с указанием разделителей будет другой состав -// расширений конфигурации и произойдет рассинхронизация разделенных данных. -// -// Параметры: -// ОбъектМетаданных - ОбъектМетаданных - проверяемый объект метаданных. -// -// Возвращаемое значение: -// Булево - если Истина, значит объект метаданных неразделенного расширения. -// -Функция ЭтоОбъектРасширенияНеразделенногоПользователя(ОбъектМетаданных, УстановленныеРасширенияДоступны = Неопределено) Экспорт - Если УстановленныеРасширенияДоступны = Неопределено Тогда - УстановленныеРасширенияДоступны = Справочники.ВерсииРасширений.УстановленныеРасширенияДоступны(); - КонецЕсли; - Возврат Не УстановленныеРасширенияДоступны И ОбъектМетаданных.РасширениеКонфигурации() <> Неопределено; -КонецФункции - // Обработчик регламентного задания УдалениеУстаревшихПараметровРаботыВерсийРасширений. Процедура УдалениеУстаревшихПараметровРаботыВерсийРасширенийОбработчикЗадания() Экспорт @@ -788,39 +797,6 @@ КонецПроцедуры -// Возвращает ссылку, соответствующую объекту метаданных, для использования в базе данных. -// -// Параметры: -// ОбъектМетаданных -// - ОбъектМетаданных - Объект метаданных конфигурации или расширения. -// - Тип - Тип, который можно успешно использовать в функции Метаданные.НайтиПоТипу(). -// - Строка - Полное имя объекта метаданных, -// которое можно успешно использовать в функции Метаданные.НайтиПоПолномуИмени(). -// -// Возвращаемое значение: -// СправочникСсылка.ИдентификаторыОбъектовМетаданных - Ссылка объекта метаданных конфигурации. -// СправочникСсылка.ИдентификаторыОбъектовРасширений - Ссылка объекта метаданных расширения. -// Строка - Если у данного объекта метаданных нет ссылки, то возвращается полное имя объекта метаданных. -// -Функция ИдентификаторОбъектаМетаданных(ОписаниеОбъектаМетаданных) Экспорт - - Тип = ТипЗнч(ОписаниеОбъектаМетаданных); - Если Тип = Тип("Тип") Тогда - ОбъектМетаданных = Метаданные.НайтиПоТипу(ОписаниеОбъектаМетаданных); - ИначеЕсли Тип = Тип("Строка") Тогда - ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ОписаниеОбъектаМетаданных); - Иначе - ОбъектМетаданных = ОписаниеОбъектаМетаданных; - КонецЕсли; - Если ТипЗнч(ОбъектМетаданных) = Тип("ОбъектМетаданных") - И ЭтоОбъектРасширенияНеразделенногоПользователя(ОбъектМетаданных) Тогда - Возврат ОбъектМетаданных.ПолноеИмя(); - КонецЕсли; - - Возврат ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОписаниеОбъектаМетаданных); - -КонецФункции - //////////////////////////////////////////////////////////////////////////////// // Дополнительная базовая функциональность для обмена данными. @@ -1381,9 +1357,6 @@ // операционной системы; // Картинка - Картинка - значок формата. // -// Примечание: таблица форматов может быть переопределена в процедуре -// УправлениеПечатьюПереопределяемый.ПриЗаполненииНастроекФорматовСохранения(). -// Функция НастройкиФорматовСохраненияТабличногоДокумента() Экспорт ТаблицаФорматов = Новый ТаблицаЗначений; @@ -1401,62 +1374,66 @@ НовыйФормат.Расширение = "pdf"; НовыйФормат.Картинка = БиблиотекаКартинок.ФорматPDF; - // Лист Microsoft Excel 2007 (.xlsx) - НовыйФормат = ТаблицаФорматов.Добавить(); - НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.XLSX; - НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.XLSX; - НовыйФормат.Расширение = "xlsx"; - НовыйФормат.Картинка = БиблиотекаКартинок.ФорматExcel2007; - - // Лист Microsoft Excel 97-2003 (.xls) - НовыйФормат = ТаблицаФорматов.Добавить(); - НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.XLS; - НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.XLS; - НовыйФормат.Расширение = "xls"; - НовыйФормат.Картинка = БиблиотекаКартинок.ФорматExcel; - - // Электронная таблица OpenDocument (.ods). - НовыйФормат = ТаблицаФорматов.Добавить(); - НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.ODS; - НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.ODS; - НовыйФормат.Расширение = "ods"; - НовыйФормат.Картинка = БиблиотекаКартинок.ФорматOpenOfficeCalc; - // Табличный документ (.mxl) НовыйФормат = ТаблицаФорматов.Добавить(); НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.MXL; НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.MXL; НовыйФормат.Расширение = "mxl"; НовыйФормат.Картинка = БиблиотекаКартинок.ФорматMXL; + + Если НЕ ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда + + // Лист Microsoft Excel 2007 (.xlsx) + НовыйФормат = ТаблицаФорматов.Добавить(); + НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.XLSX; + НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.XLSX; + НовыйФормат.Расширение = "xlsx"; + НовыйФормат.Картинка = БиблиотекаКартинок.ФорматExcel2007; - // Документ Word 2007 (.docx) - НовыйФормат = ТаблицаФорматов.Добавить(); - НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.DOCX; - НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.DOCX; - НовыйФормат.Расширение = "docx"; - НовыйФормат.Картинка = БиблиотекаКартинок.ФорматWord2007; - - // Веб-страница (.html) - НовыйФормат = ТаблицаФорматов.Добавить(); - НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.HTML5; - НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.HTML; - НовыйФормат.Расширение = "html"; - НовыйФормат.Картинка = БиблиотекаКартинок.ФорматHTML; - - // Текстовый документ UTF-8 (.txt). - НовыйФормат = ТаблицаФорматов.Добавить(); - НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.TXT; - НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.TXT; - НовыйФормат.Расширение = "txt"; - НовыйФормат.Картинка = БиблиотекаКартинок.ФорматTXT; - - // Текстовый документ ANSI (.txt). - НовыйФормат = ТаблицаФорматов.Добавить(); - НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.ANSITXT; - НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.ANSITXT; - НовыйФормат.Расширение = "txt"; - НовыйФормат.Картинка = БиблиотекаКартинок.ФорматTXT; + // Лист Microsoft Excel 97-2003 (.xls) + НовыйФормат = ТаблицаФорматов.Добавить(); + НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.XLS; + НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.XLS; + НовыйФормат.Расширение = "xls"; + НовыйФормат.Картинка = БиблиотекаКартинок.ФорматExcel; + // Электронная таблица OpenDocument (.ods). + НовыйФормат = ТаблицаФорматов.Добавить(); + НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.ODS; + НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.ODS; + НовыйФормат.Расширение = "ods"; + НовыйФормат.Картинка = БиблиотекаКартинок.ФорматOpenOfficeCalc; + + // Документ Word 2007 (.docx) + НовыйФормат = ТаблицаФорматов.Добавить(); + НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.DOCX; + НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.DOCX; + НовыйФормат.Расширение = "docx"; + НовыйФормат.Картинка = БиблиотекаКартинок.ФорматWord2007; + + // Веб-страница (.html) + НовыйФормат = ТаблицаФорматов.Добавить(); + НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.HTML5; + НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.HTML; + НовыйФормат.Расширение = "html"; + НовыйФормат.Картинка = БиблиотекаКартинок.ФорматHTML; + + // Текстовый документ UTF-8 (.txt). + НовыйФормат = ТаблицаФорматов.Добавить(); + НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.TXT; + НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.TXT; + НовыйФормат.Расширение = "txt"; + НовыйФормат.Картинка = БиблиотекаКартинок.ФорматTXT; + + // Текстовый документ ANSI (.txt). + НовыйФормат = ТаблицаФорматов.Добавить(); + НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.ANSITXT; + НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.ANSITXT; + НовыйФормат.Расширение = "txt"; + НовыйФормат.Картинка = БиблиотекаКартинок.ФорматTXT; + + КонецЕсли; + Для Каждого ФорматСохранения Из ТаблицаФорматов Цикл ФорматСохранения.Представление = Строка(ФорматСохранения.Ссылка); КонецЦикла; @@ -1621,7 +1598,7 @@ // ТолькоДляВнешнихПользователей. НазначениеРолей.ТолькоДляВнешнихПользователей.Добавить( - Метаданные.Роли.БазовыеПраваВнешнегоПользователя.Имя); + Метаданные.Роли.БазовыеПраваВнешнихПользователейБСП.Имя); // СовместноДляПользователейИВнешнихПользователей. НазначениеРолей.СовместноДляПользователейИВнешнихПользователей.Добавить( @@ -1684,35 +1661,6 @@ КонецПроцедуры -#Область УстаревшиеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции работы с файловой системой. - -// Устарела. Следует использовать ОбщегоНазначения.СоздатьВременныйКаталог. -// Создает каталог временных файлов. -// -// Параметры: -// Расширение - Строка - Расширение каталога. -// -// Возвращаемое значение: -// Строка - Полный путь к каталогу с последним слешем. -// -Функция СоздатьКаталогВременныхФайлов(Расширение) Экспорт - Возврат ОбщегоНазначения.СоздатьВременныйКаталог(Расширение); -КонецФункции - -// Устарела. Следует использовать ОбщегоНазначения.УдалитьВременныйКаталог. -// Очищает каталог временных файлов вместе с его содержимым. -// -// Параметры: -// ПутьККаталогу - Строка - Полный путь к каталогу. -// -Процедура ОчиститьКаталогВременныхФайлов(ПутьККаталогу) Экспорт - ОбщегоНазначения.УдалитьВременныйКаталог(ПутьККаталогу); -КонецПроцедуры - -#КонецОбласти - #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -2245,6 +2193,21 @@ КонецПроцедуры +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПереименованийОбъектовМетаданных. +Процедура ПриДобавленииПереименованийОбъектовМетаданных(Итог) Экспорт + + Библиотека = "СтандартныеПодсистемы"; + + СтароеИмя = "Роль.БазовыеПрава"; + НовоеИмя = "Роль.БазовыеПраваБСП"; + ОбщегоНазначения.ДобавитьПереименование(Итог, "3.0.1.19", СтароеИмя, НовоеИмя, Библиотека); + + СтароеИмя = "Роль.БазовыеПраваВнешнегоПользователя"; + НовоеИмя = "Роль.БазовыеПраваВнешнихПользователейБСП"; + ОбщегоНазначения.ДобавитьПереименование(Итог, "3.0.1.19", СтароеИмя, НовоеИмя, Библиотека); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обработчики подписок на события. @@ -2394,26 +2357,197 @@ КонецПроцедуры -// Процедура-обработчик подписки на событие ПередЗаписью для ПланОбменаОбъект. -// Используется для вызова обработчика события ПослеОтправкиДанных при обмене в распределенной ИБ. -// -Процедура ПослеОтправкиДанных(Источник, Отказ) Экспорт +//////////////////////////////////////////////////////////////////////////////// +// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Процедура УстановитьИнициализациюВсехПредопределенныхДанных() - Если Источник.ОбменДанными.Загрузка Тогда + КоллекцииМетаданных = Новый Массив; + КоллекцииМетаданных.Добавить(Метаданные.Справочники); + КоллекцииМетаданных.Добавить(Метаданные.ПланыВидовХарактеристик); + КоллекцииМетаданных.Добавить(Метаданные.ПланыСчетов); + КоллекцииМетаданных.Добавить(Метаданные.ПланыВидовРасчета); + + Для каждого Коллекция Из КоллекцииМетаданных Цикл + Для Каждого ОбъектМетаданных Из Коллекция Цикл + Менеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ОбъектМетаданных.ПолноеИмя()); + Менеджер.УстановитьИнициализациюПредопределенныхДанных(Истина); + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + +Процедура СоздатьНедостающиеПредопределенныеДанные() + + КоллекцииМетаданных = Новый Массив; + КоллекцииМетаданных.Добавить(Метаданные.Справочники); + КоллекцииМетаданных.Добавить(Метаданные.ПланыВидовХарактеристик); + КоллекцииМетаданных.Добавить(Метаданные.ПланыСчетов); + КоллекцииМетаданных.Добавить(Метаданные.ПланыВидовРасчета); + + Запрос = Новый Запрос; + ТекстЗапроса = + "ВЫБРАТЬ + | ПсевдонимЗаданнойТаблицы.Ссылка КАК Ссылка, + | ЕСТЬNULL(ПсевдонимЗаданнойТаблицы.Родитель.ИмяПредопределенныхДанных, """") КАК ИмяРодителя, + | ПсевдонимЗаданнойТаблицы.ИмяПредопределенныхДанных КАК Имя + |ИЗ + | &ТекущаяТаблица КАК ПсевдонимЗаданнойТаблицы + |ГДЕ + | ПсевдонимЗаданнойТаблицы.Предопределенный"; + + ОписанияСохраненных = Новый Массив; + Для Каждого Коллекция Из КоллекцииМетаданных Цикл + ЭтоПланСчетов = (Коллекция = Метаданные.ПланыСчетов); + Для Каждого ОбъектМетаданных Из Коллекция Цикл + Если ОбъектМетаданных.ОбновлениеПредопределенныхДанных + = Метаданные.СвойстваОбъектов.ОбновлениеПредопределенныхДанных.НеОбновлятьАвтоматически Тогда + Продолжить; + КонецЕсли; + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + Запрос.Текст = СтрЗаменить(ТекстЗапроса, "&ТекущаяТаблица", ПолноеИмя); + + Если Коллекция = Метаданные.ПланыСчетов + Или Коллекция = Метаданные.ПланыВидовРасчета + Или Не ОбъектМетаданных.Иерархический Тогда + + Запрос.Текст = СтрЗаменить(Запрос.Текст, + "ЕСТЬNULL(ПсевдонимЗаданнойТаблицы.Родитель.ИмяПредопределенныхДанных, """")", """"""); + КонецЕсли; + + ТаблицаИмен = Запрос.Выполнить().Выгрузить(); + ТаблицаИмен.Индексы.Добавить("Имя"); + Имена = ОбъектМетаданных.ПолучитьИменаПредопределенных(); + СохранитьСуществующиеПредопределенныеОбъектыПередСозданиемНедостающих( + ОбъектМетаданных, ПолноеИмя, ТаблицаИмен, Имена, Запрос, ОписанияСохраненных, ЭтоПланСчетов); + КонецЦикла; + КонецЦикла; + + ИнициализироватьПредопределенныеДанные(); + + // Восстановление предопределенных элементов, существовавших до инициализации. + Для Каждого ОписаниеСохраненных Из ОписанияСохраненных Цикл + Запрос.Текст = ОписаниеСохраненных.ТекстЗапроса; + ТаблицаИмен = Запрос.Выполнить().Выгрузить(); + ТаблицаИмен.Индексы.Добавить("Имя"); + Для Каждого ОписаниеСохраненного Из ОписаниеСохраненных.ТаблицаИмен Цикл + Если Не ОписаниеСохраненного.ОбъектСуществует Тогда + Продолжить; + КонецЕсли; + Строка = ТаблицаИмен.Найти(ОписаниеСохраненного.Имя, "Имя"); + Если Строка <> Неопределено Тогда + НовыйОбъект = Строка.Ссылка.ПолучитьОбъект(); + Если ОписаниеСохраненных.ЭтоПланСчетов Тогда + ДополнитьНовыеВидыСубконтоСчета(ОписаниеСохраненного.Объект, НовыйОбъект); + КонецЕсли; + ОбновлениеИнформационнойБазы.УдалитьДанные(НовыйОбъект); + Строка.Имя = ""; + КонецЕсли; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ОписаниеСохраненного.Объект); + КонецЦикла; + Для Каждого Строка Из ТаблицаИмен Цикл + Если Не ЗначениеЗаполнено(Строка.Имя) + Или Не ЗначениеЗаполнено(Строка.ИмяРодителя) Тогда + Продолжить; + КонецЕсли; + СтрокаРодителя = ОписаниеСохраненных.ТаблицаИмен.Найти(Строка.ИмяРодителя, "Имя"); + Если СтрокаРодителя <> Неопределено Тогда + НовыйОбъект = Строка.Ссылка.ПолучитьОбъект(); + НовыйОбъект.Родитель = СтрокаРодителя.Ссылка; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(НовыйОбъект); + КонецЕсли; + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + +Процедура ДополнитьНовыеВидыСубконтоСчета(Счет, ОбразецСчета) + + Для Каждого Строка Из ОбразецСчета.ВидыСубконто Цикл + Индекс = ОбразецСчета.ВидыСубконто.Индекс(Строка); + Если Счет.ВидыСубконто.Количество() > Индекс Тогда + Если Счет.ВидыСубконто[Индекс].ВидСубконто <> Строка.ВидСубконто Тогда + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Обмен данными.Отключение связи с главным узлом'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + Счет.Метаданные(), + Счет, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'У счета ""%1"" субконто №%2 ""%3"" не совпадает с предопределенным субконто ""%4"".'"), + Строка(Счет), + Индекс + 1, + Строка(Счет.ВидыСубконто[Индекс].ВидСубконто), + Строка(Строка.ВидСубконто)), + РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная); + ИначеЕсли Не Счет.ВидыСубконто[Индекс].Предопределенное Тогда + Счет.ВидыСубконто[Индекс].Предопределенное = Истина; + КонецЕсли; + Иначе + ЗаполнитьЗначенияСвойств(Счет.ВидыСубконто.Добавить(), Строка); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Процедура СохранитьСуществующиеПредопределенныеОбъектыПередСозданиемНедостающих( + ОбъектМетаданных, ПолноеИмя, ТаблицаИмен, Имена, Запрос, ОписанияСохраненных, ЭтоПланСчетов) + + ТребуетсяИнициализация = Ложь; + ПредопределенныеСуществуют = Ложь; + ТаблицаИмен.Колонки.Добавить("ОбъектСуществует", Новый ОписаниеТипов("Булево")); + + Для каждого Имя Из Имена Цикл + Строки = ТаблицаИмен.НайтиСтроки(Новый Структура("Имя", Имя)); + Если Строки.Количество() = 0 Тогда + ТребуетсяИнициализация = Истина; + Иначе + Для Каждого Строка Из Строки Цикл + Строка.ОбъектСуществует = Истина; + КонецЦикла; + ПредопределенныеСуществуют = Истина; + КонецЕсли; + КонецЦикла; + + Если Не ТребуетсяИнициализация Тогда Возврат; КонецЕсли; - Если Не Источник.Метаданные().РаспределеннаяИнформационнаяБаза Тогда - Возврат; - КонецЕсли; + Если ПредопределенныеСуществуют Тогда + ОписаниеСохраненных = Новый Структура; + ОписаниеСохраненных.Вставить("ТекстЗапроса", Запрос.Текст); + ОписаниеСохраненных.Вставить("ТаблицаИмен", ТаблицаИмен); + ОписаниеСохраненных.Вставить("ЭтоПланСчетов", ЭтоПланСчетов); + ОписанияСохраненных.Добавить(ОписаниеСохраненных); - Если Источник.НомерОтправленного = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Источник.Ссылка, "НомерОтправленного") Тогда - Возврат; + ТаблицаИмен.Колонки.Добавить("Объект"); + Для каждого Строка Из ТаблицаИмен Цикл + Если Строка.ОбъектСуществует Тогда + Объект = Строка.Ссылка.ПолучитьОбъект(); + Объект.ИмяПредопределенныхДанных = ""; + Если ЭтоПланСчетов Тогда + СтрокиПредопределенныхВидовСубконто = Новый Массив; + Для Каждого СтрокаВидаСубконто Из Объект.ВидыСубконто Цикл + Если СтрокаВидаСубконто.Предопределенное Тогда + СтрокаВидаСубконто.Предопределенное = Ложь; + СтрокиПредопределенныхВидовСубконто.Добавить(СтрокаВидаСубконто); + КонецЕсли; + КонецЦикла; + КонецЕсли; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); + Если ЭтоПланСчетов Тогда + Для Каждого СтрокаВидаСубконто Из СтрокиПредопределенныхВидовСубконто Цикл + СтрокаВидаСубконто.Предопределенное = Истина; + КонецЦикла; + КонецЕсли; + Объект.ИмяПредопределенныхДанных = Строка.Имя; + Строка.Объект = Объект; + КонецЕсли; + КонецЦикла; КонецЕсли; - ОтправкаВГлавныйУзел = (ПланыОбмена.ГлавныйУзел() = Источник.Ссылка); - - // Тут нужно вставить вызов обработчика ПослеОтправкиДанных(Получатель, Отказ, ОтправкаВГлавныйУзел). + Менеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя); + Менеджер.УстановитьИнициализациюПредопределенныхДанных(Ложь); КонецПроцедуры @@ -2435,7 +2569,7 @@ // Проверка настройки совместимости конфигурации с версией платформы. СистемнаяИнформация = Новый СистемнаяИнформация; - МинимальнаяВерсияПлатформы = "8.3.10.2168"; + МинимальнаяВерсияПлатформы = "8.3.12.1412"; Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(СистемнаяИнформация.ВерсияПриложения, МинимальнаяВерсияПлатформы) < 0 Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Для запуска необходима версия платформы 1С:Предприятие %1 или выше.'"), МинимальнаяВерсияПлатформы); @@ -2444,14 +2578,14 @@ Режимы = Метаданные.СвойстваОбъектов.РежимСовместимости; ТекущийРежим = Метаданные.РежимСовместимости; - ПоддерживаемаяВерсияПлатформы = "8.3.10"; + ПоддерживаемаяВерсияПлатформы = "8.3.12"; ВерсияПлатформы = ОбщегоНазначенияКлиентСервер.ВерсияКонфигурацииБезНомераСборки(СистемнаяИнформация.ВерсияПриложения); Если ТекущийРежим = Режимы.НеИспользовать Тогда Если ОбщегоНазначенияКлиентСервер.СравнитьВерсииБезНомераСборки(ВерсияПлатформы, ПоддерживаемаяВерсияПлатформы) = 0 Тогда НеПоддерживаемаяВерсияПлатформы = ""; Иначе НеПоддерживаемаяВерсияПлатформы = ВерсияПлатформы; - КонецЕсли; + КонецЕсли; ИначеЕсли ТекущийРежим = Режимы.Версия8_1 Тогда НеПоддерживаемаяВерсияПлатформы = "8.1" ИначеЕсли ТекущийРежим = Режимы.Версия8_2_13 Тогда @@ -2476,8 +2610,12 @@ НеПоддерживаемаяВерсияПлатформы = "8.3.8"; ИначеЕсли ТекущийРежим = Режимы.Версия8_3_9 Тогда НеПоддерживаемаяВерсияПлатформы = "8.3.9"; + ИначеЕсли ТекущийРежим = Режимы.Версия8_3_10 Тогда + НеПоддерживаемаяВерсияПлатформы = "8.3.10"; + ИначеЕсли ТекущийРежим = Режимы.Версия8_3_11 Тогда + НеПоддерживаемаяВерсияПлатформы = "8.3.11"; Иначе - НеПоддерживаемаяВерсияПлатформы = ?(СтрЗаканчиваетсяНа(Строка(ТекущийРежим), "8_3_10"), "", Строка(ТекущийРежим)); + НеПоддерживаемаяВерсияПлатформы = ?(СтрЗаканчиваетсяНа(Строка(ТекущийРежим), "8_3_12"), "", Строка(ТекущийРежим)); КонецЕсли; Если ЗначениеЗаполнено(НеПоддерживаемаяВерсияПлатформы) Тогда diff --git a/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl b/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl index 6e7fead4d..7581151af 100644 --- a/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl @@ -216,7 +216,7 @@ // ЗначенияПараметров = Новый Массив; // ЗначенияПараметров.Добавить("Вася"); // ЗначенияПараметров.Добавить("Зоопарк"); -// Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='%1 пошел в %2'"), ЗначенияПараметров); +// Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтрокуИзМассива(НСтр("ru='%1 пошел в %2'"), ЗначенияПараметров); // - вернет строку "Вася пошел в Зоопарк". // Функция ПодставитьПараметрыВСтрокуИзМассива(Знач ШаблонСтроки, Знач Параметры) Экспорт @@ -939,7 +939,7 @@ // // Параметры: // Значение - Строка - Строка, которую необходимо привести к дате. -// Формат даты должен быть в виде "ДД.ММ.ГГГГ" или "ДД/ММ/ГГ", +// Формат даты должен быть в виде "ДД.ММ.ГГГГ" или "ДД/ММ/ГГ" или "ДД-ММ-ГГ", // Например, "23.02.1980" или "23/02/80". // // Возвращаемое значение: @@ -947,10 +947,6 @@ // Функция СтрокаВДату(Знач Значение) Экспорт - ПозицияПробела = СтрНайти(Значение, " ", НаправлениеПоиска.СНачала); - Если ПозицияПробела > 0 Тогда - Значение = Лев(Значение, ПозицияПробела - 1); - КонецЕсли; Значение = СтрЗаменить(Значение, " ", ""); Значение = СокрЛП(СтрЗаменить(Значение, ".", "")); Значение = СокрЛП(СтрЗаменить(Значение, "/", "")); @@ -958,6 +954,9 @@ Значение = Сред(Значение, 5) + Сред(Значение, 3, 2) + Лев(Значение, 2); Если СтрДлина(Значение) = 6 Тогда Год = СтрокаВЧисло(Лев(Значение, 2)); + Если Год = Неопределено Тогда + Возврат Дата('0001.01.01'); + КонецЕсли; Значение = ?(Год > 29, "19", "20") + Значение; КонецЕсли; diff --git a/SSL/src/CommonModules/ТекущиеДелаПереопределяемый/Module.bsl b/SSL/src/CommonModules/ТекущиеДелаПереопределяемый/Module.bsl index 63c006cdf..ef54e21a6 100644 --- a/SSL/src/CommonModules/ТекущиеДелаПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ТекущиеДелаПереопределяемый/Module.bsl @@ -4,8 +4,8 @@ // списка всех текущих дел, предусмотренных в конфигурации. // // В указанных модулях должна быть размещена процедура обработчика, в которую передаются параметры -// ТекущиеДела - ТаблицаЗначений - таблица значений с колонками: -// * Идентификатор - Строка - внутренний идентификатор дела, используемый механизмом "Текущие дела". +// ТекущиеДела - ТаблицаЗначений - определяет параметры дела: +// * Идентификатор - Строка - внутренний идентификатор дела, используемый подсистемой. // * ЕстьДела - Булево - если Истина, дело выводится в списке текущих дел пользователя. // * Важное - Булево - если Истина, дело будет выделено красным цветом. // * СкрыватьВНастройках - Булево - если Истина, то дело будет скрыто в форме настроек текущих дел. diff --git a/SSL/src/CommonModules/УправлениеДоступом/Module.bsl b/SSL/src/CommonModules/УправлениеДоступом/Module.bsl index 0061d5185..5e5e5f264 100644 --- a/SSL/src/CommonModules/УправлениеДоступом/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступом/Module.bsl @@ -428,6 +428,40 @@ КонецФункции +// Проверяет, что чтение существующего объекта из в базы данных разрешено на уровне прав и +// на уровне записей для текущего пользователя. +// +// Важно: если подсистема работает в режиме стандартного ограничения, +// а не в режиме универсального ограничения, тогда проверяется только право на таблицу +// без проверки права на уровне записей. +// +// Параметры: +// ОписаниеДанных - СправочникСсылка, +// ДокументСсылка, +// ПланВидовХарактеристикСсылка, +// ПланСчетовСсылка, +// ПланВидовРасчетаСсылка, +// БизнесПроцессСсылка, +// ЗадачаСсылка, +// ПланОбменаСсылка - ссылка на объект, который требуется проверить. +// - РегистрСведенийКлючЗаписи, +// РегистрНакопленияКлючЗаписи, +// РегистрБухгалтерииКлючЗаписи, +// РегистрРасчетаКлючЗаписи - ключ записи, которую требуется проверить. +// +Функция ЧтениеРазрешено(ОписаниеДанных) Экспорт + + Возврат УправлениеДоступомСлужебный.ДоступРазрешен(ОписаниеДанных, Ложь); + +КонецФункции + +// См. УправлениеДоступом.ЧтениеРазрешено. +Функция ИзменениеРазрешено(ОписаниеДанных) Экспорт + + Возврат УправлениеДоступомСлужебный.ДоступРазрешен(ОписаниеДанных, Истина); + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Процедуры для включения и исключения пользователя в профиле групп доступа. @@ -483,6 +517,35 @@ //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции, используемые для настройки интерфейса управляемых форм. +// Обработчик события формы ПриЧтенииНаСервере, который встраивается в формы элементов справочников, +// документов, записей регистров и др., чтобы заблокировать форму, если изменение запрещено. +// +// Параметры: +// Форма - УправляемаяФорма - форма элемента объекта или записи регистра. +// +// ТекущийОбъект - СправочникОбъект, +// ДокументОбъект, +// ПланВидовХарактеристикОбъект, +// ПланСчетовОбъект, +// ПланВидовРасчетаОбъект, +// БизнесПроцессОбъект, +// ЗадачаОбъект, +// ПланОбменаОбъект - проверяемый объект. +// - РегистрСведенийМенеджерЗаписи, +// РегистрНакопленияМенеджерЗаписи, +// РегистрБухгалтерииМенеджерЗаписи, +// РегистрРасчетаМенеджерЗаписи - менеджер проверяемой записи. +// +Процедура ПриЧтенииНаСервере(Форма, ТекущийОбъект) Экспорт + + Если ИзменениеРазрешено(ТекущийОбъект) Тогда + Возврат; + КонецЕсли; + + Форма.ТолькоПросмотр = Истина; + +КонецПроцедуры + // Настраивает форму значения доступа, которое использует группы значений доступа // для выбора разрешенных значений в группах доступа пользователей. // @@ -828,6 +891,7 @@ Процедура НастроитьОтборыДинамическогоСписка(Список, ОписаниеОтборов) Экспорт Если Не ОграничиватьДоступНаУровнеЗаписей() + Или УправлениеДоступомСлужебный.ОграничиватьДоступНаУровнеЗаписейУниверсально() Или Пользователи.ЭтоПолноправныйПользователь(,, Ложь) Тогда Возврат; КонецЕсли; @@ -1302,9 +1366,12 @@ // Процедура ЗаполнитьНаборыЗначенийДоступаТабличныхЧастей(Источник, Отказ = Неопределено, РежимЗаписи = Неопределено, РежимПроведения = Неопределено) Экспорт + // Проверка ОбменДанными.Загрузка пропускается только в тех случаях, + // когда дополнительно установлено свойство ЗаписатьНаборыЗначенийДоступа. + // В этом случае при записи ведущего объекта для корректной работы его RLS выполняется программная + // запись подчиненного объекта для обновления служебной табличной части НаборыЗначенийДоступа. Если Источник.ОбменДанными.Загрузка И НЕ Источник.ДополнительныеСвойства.Свойство("ЗаписатьНаборыЗначенийДоступа") Тогда - Возврат; КонецЕсли; @@ -1374,7 +1441,7 @@ // ОписаниеПрофиля.Роли.Добавить("СохранениеДанныхПользователя"); // // ... // // Использование программы. -// ОписаниеПрофиля.Роли.Добавить("БазовыеПрава"); +// ОписаниеПрофиля.Роли.Добавить("БазовыеПраваБСП"); // ОписаниеПрофиля.Роли.Добавить("ПросмотрОписанияИзмененийПрограммы"); // ОписаниеПрофиля.Роли.Добавить("ИзменениеТекущегоПользователя"); // // ... @@ -1702,7 +1769,7 @@ + Строка.НовоеИмя; КонецЦикла; ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка в параметрах процедуры ПереименоватьПравоВНастройкахПравОбъектов + НСтр("ru = 'Ошибка в параметрах процедуры ЗаменитьПраваВНастройкахПравОбъектов |общего модуля УправлениеДоступом. | |После обновления будут повторяться настройки следующих новых имен прав: @@ -1714,6 +1781,9 @@ НаборЗаписей = РегистрыСведений.НастройкиПравОбъектов.СоздатьНаборЗаписей(); + ОбновлениеИБ = ОбновлениеИнформационнойБазы.ВыполняетсяОбновлениеИнформационнойБазы() + Или ОбновлениеИнформационнойБазы.ЭтоВызовИзОбработчикаОбновления(); + Для каждого Строка Из ТаблицаЗамены Цикл НаборЗаписей.Отбор.Объект.Установить(Строка.Объект); НаборЗаписей.Отбор.Пользователь.Установить(Строка.Пользователь); @@ -1721,7 +1791,11 @@ НаборЗаписей.Прочитать(); Если НаборЗаписей.Количество() > 0 Тогда НаборЗаписей.Очистить(); - НаборЗаписей.Записать(); + Если ОбновлениеИБ Тогда + ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборЗаписей); + Иначе + НаборЗаписей.Записать(); + КонецЕсли; КонецЕсли; КонецЦикла; @@ -1735,7 +1809,11 @@ НаборЗаписей.Отбор.Право.Установить(Строка.НовоеИмя); ЗаполнитьЗначенияСвойств(НоваяЗапись, Строка); НоваяЗапись.Право = Строка.НовоеИмя; - НаборЗаписей.Записать(); + Если ОбновлениеИБ Тогда + ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборЗаписей); + Иначе + НаборЗаписей.Записать(); + КонецЕсли; КонецЦикла; РегистрыСведений.НастройкиПравОбъектов.ОбновитьВспомогательныеДанныеРегистра(); @@ -1837,6 +1915,186 @@ // Конец СлужебныеПодсистемы.ОбъектыУТКАУП +// Разработка.РазработкаПравИОграниченийДоступа + +// Назначение: для вызова из конструктора ограничений СППР. +// +// Параметры: +// ОсновнаяТаблица - Строка - полное имя основной таблицы объекта метаданных, например, "Документ.ЗаказПокупателя". +// ТекстОграничения - Строка - текст ограничения, который указывается в модуле менеджера +// объекта метаданных для ограничения пользователей или ограничения внешних пользователей. +// +// Возвращаемое значение: +// Структура - со свойствами: +// * ВнутренниеДанные - Структура - данные для передачи в функцию СтруктураОграничения. +// * ПоляТаблиц - Соответствие - со свойствами: +// ** Ключ - Строка - имя коллекции объектов метаданных, например, Справочники. +// ** Значение - Соответствие - со свойствами: +// *** Ключ - Строка - имя таблицы (объекта метаданных) в верхнем регистре. +// *** Значение - Структура - со свойствами: +// **** ТаблицаСуществует - Булево - Ложь (для заполнения Истина, если существует). +// **** Поля - Соответствие - со свойствами: +// ***** Ключ - Строка - имя реквизита в верхнем регистре, в том числе через точки, +// например, "ВЛАДЕЛЕЦ.ОРГАНИЗАЦИЯ", "ТОВАРЫ.НОМЕНКЛАТУРА". +// ***** Значение - Структура - со свойствами: +// ****** ПолеСОшибкой - Число - 0 (для заполнения, если поле содержит ошибку, +// если 1, то ошибка в имени первой части поля, +// если 2, то ошибка в имени второй части поля, т.е. после первой точки). +// ****** ВидОшибки - Строка - "НеНайдено", "ТабличнаяЧастьБезПоля", +// "ТабличнаяЧастьПослеТочки". +// ****** Коллекция - Строка - пустая строка (для заполнения, если первая часть +// поля существует, т.е. часть поля до первой точки). Варианты: "Реквизиты", +// "ТабличныеЧасти", "СтандартныеРеквизиты", "СтандартныеТабличныеЧасти", +// "Измерения", "Ресурсы", "Графы", "ПризнакиУчета", "ПризнакиУчетаСубконто", +// "РеквизитыАдресации", "СпециальныеПоля". Специальные поля - это +// "Значение" - у таблиц "Константа.*", +// "Регистратор" и "Период" - у таблиц "Последовательность.*", +// "ОбъектПерерасчета", "ВидРасчета" у таблиц "РегистрРасчета.<Имя>.<ИмяПерерасчета>". +// Поля после первой точки могут относится только к коллекциям: "Реквизиты", +// "СтандартныеРеквизиты", "ПризнакиУчета", "РеквизитыАдресации". Для этих +// частей имени поля не требуется уточнять коллекцию. +// ****** СодержитТипы - Соответствие - со свойствами: +// ******* Ключ - Строка - полное имя ссылочной таблицы в верхнем регистре. +// ******* Значение - Структура - со свойствами: +// ******** ИмяТипа - Строка - имя типа, наличие которого нужно проверить. +// ******** СодержитТип - Булево - Ложь (для заполнения Истина, +// если у поля последнего поля есть тип). +// **** Предопределенные - Соответствие - со свойствами: +// ***** Ключ - Строка - имя предопределенного элемента. +// ***** Значение - Структура - со свойствами: +// ****** ИмяСуществует - Булево - Ложь (для заполнения Истина, если предопределенный есть). +// +// **** Расширения - Соответствие - со свойствами: +// ***** Ключ - Строка - имя третьего имени таблицы, например, имя табличной части. +// ***** Значение - Структура - со свойствами: +// ****** ТаблицаСуществует - Булево - Ложь (для заполнения Истина, если существует). +// ****** Поля - Соответствие - со свойствами, как для основной таблицы (см. выше). +// +Функция РазобранноеОграничение(ОсновнаяТаблица, ТекстОграничения) Экспорт + + Возврат УправлениеДоступомСлужебный.РазобранноеОграничение(ОсновнаяТаблица, ТекстОграничения); + +КонецФункции + +// Назначение: для вызова из конструктора ограничений СППР. +// +// Параметры: +// РазобранноеОграничение - Структура - возвращается функцией РазобранноеОграничение, +// но перед передачей этого параметра в свойстве ПоляТаблиц должны быть заполнены +// вложенные свойства ТаблицаСуществует, ПолеСОшибкой, СодержитТип, ИмяСуществует. +// +// Возвращаемое значение: +// Структура - со свойствами: +// * ОписаниеОшибок - Структура - со свойствами: +// * ЕстьОшибки - Булево - если Истина, значит найдена одна или более ошибок. +// * ТекстОшибок - Строка - текст всех ошибок. +// * Ограничение - Строка - пронумерованный текст ограничения со вставками "<>". +// * Ошибки - Массив - с элементами описания отдельных ошибок: +// ** Значение - Структура - со свойствами: +// *** НомерСтроки - Число - строка в многострочном тексте, в которой найдена ошибка. +// *** ПозицияВСтроке - Число - номер символа, начиная с которого обнаружена ошибка, +// может быть за пределами строки (длина строки + 1). +// *** ТекстОшибки - Строка - текст ошибки без описания позиции. +// *** СтрокаОшибки - Строка - строка, в которой найдена ошибка со вставкой "<>". +// * Дополнение - Строка - описание вариантов первых ключевых слов частей ограничения. +// +// * ДополнительныеТаблицы - Массив - с элементами: +// ** Значение - Структура - со свойствами: +// *** Таблица - Строка - полное имя объекта метаданных. +// *** Псевдоним - Строка - имя псевдонима таблицы. +// *** УсловиеСоединения - Структура - как у свойства ОграничениеИзменения, но только +// узлы: "Поле", "Значение", "Константа", "И", "=". +// * ПсевдонимОсновнойТаблицы - Строка - заполнено, если указаны дополнительные таблицы. +// * ОграничениеЧтения - Структура - как у свойства ОграничениеИзменения. +// * ОграничениеИзменения - Структура - со свойствами: +// +// ** Узел - Строка - одна из строк "Поле", "Значение", "Константа", +// "И", "Или", "Не", "=", "<>", "В", "ЕстьNull", "Тип", "ТипЗначения", "Выбор", +// "ЗначениеРазрешено", "ЭтоАвторизованныйПользователь", +// "ЧтениеОбъектаРазрешено", "ИзменениеОбъектаРазрешено", +// "ЧтениеСпискаРазрешено", "ИзменениеСпискаРазрешено", +// "ДляВсехСтрок", "ДляОднойИзСтрок". +// +// Свойства узла Поле: +// ** Имя - Строка - имя поля, например, "Организация" или "ОсновнаяОрганизация". +// ** Таблица - Строка - имя таблицы этого поля (или пустая строка для основной таблицы). +// ** Псевдоним - Строка - имя псевдонима присоединяемой таблицы этого поля (или пустая строка для основной таблицы), +// например, "РегистрСведенийНастройки" для поля "ОсновнаяОрганизация". +// ** Выразить - Строка - имя таблицы (если используется), например, для описания поля в виде: +// "ВЫРАЗИТЬ(ВЫРАЗИТЬ(Владелец КАК Справочник.Файлы).ВладелецФайла КАК Справочник.Организации).Ссылка". +// ** Вложение - Структура - узел Поле, содержащий вложенное действие ВЫРАЗИТЬ (с или без ЕстьNull). +// - Неопределено - нет вложенного поля. +// ** ЕстьNull - Структура - узел Значение Или Константа, например, для описания выражения вида +// "ЕстьNULL(Владелец, Значение(Справочник.Файлы.ПустаяСсылка))". +// - Неопределено - если ЕстьNull не используется (в том числе, когда свойство Вложение заполнено). +// +// Свойства узла Значение: +// ** Имя - Строка - имя значения, например, "Справочник.Организации.Основная", +// "Справочник.Организации.ПустаяСсылка". +// +// Свойства узла Константа: +// ** Значение - Булево, Число, Строка, Неопределено - Ложь, Истина, произвольное +// целое число до 16 разрядов или произвольная строка до 150 символов. +// +// Свойства узлов И, Или: +// ** Аргументы - Массив - с элементами: +// *** Значение - Структура - любой узел, кроме Значение и Константа. +// +// Свойства узла Не: +// ** Аргумент - Структура - любой узел, кроме Значение и Константа. +// +// Свойства узлов =, <>: +// ** ПервыйАргумент - Структура - узел Поле. +// ** ВторойАргумент - Структура - узел Значение, Константа. А узел Поле только для условия соединения. +// +// Свойства узла В: +// ** Искомое - Структура - узел Поле. +// ** Значения - Массив - с элементами: +// *** Значение - Структура - узлы Значение и/или Константа. +// +// Свойства узла ЕстьNull: +// ** Аргумент - Структура - узел Поле (выражение вида "<Поле> ЕСТЬ NULL"). +// +// Свойства узла Тип: +// ** Имя - Строка - имя таблицы, например, "Справочник.Организации". +// +// Свойства узла ТипЗначения: +// ** Аргумент - Структура - узел Поле. +// +// Свойства узла Выбор: +// ** Выбор - Структура - узел Поле. +// - Неопределено - условия содержат выражение, а не узел Значение. +// ** Когда - Массив - с элементами: +// *** Значение - Структура - со свойствами: +// **** Условие - Структура - узел Значение, если свойство Выбор указано, в противном случае +// узлы И, Или, Не, =, <>, В (распространяется на вложенное содержимое). +// **** Значение - Структура - узел, кроме Выбор. +// ** Иначе - Структура - узел, кроме ВЫБОР и Значение (Поле и Константа может быть только типа Булево). +// +// Свойства узлов ЗначениеРазрешено, ЭтоАвторизованныйПользователь, +// ЧтениеОбъектаРазрешено, ИзменениеОбъектаРазрешено, +// ЧтениеСпискаРазрешено, ИзменениеСпискаРазрешено: +// ** Поле - Структура - узел Поле. +// ** Типы - Массив - с элементами: +// *** Значение - Строка - полное имя таблицы +// ** ПроверятьТипыКромеУказанных - Булево - если Истина, то все типы свойства Поле, +// кроме указанных в свойстве Типы. +// ** УточненияСравнения - Соответствие - со свойствами: +// *** Ключ - Строка - уточняемое значение "Неопределено", "Null", "ПустаяСсылка", +// <полное имя таблицы>, "Число", "Строка", "Дата", "Булево". +// *** Значение - Строка - результат "Ложь", "Истина". +// +// Свойства узлов ДляВсехСтрок, ДляОднойИзСтрок: +// ** Аргумент - Структура - любой узел. +// +Функция СтруктураОграничения(РазобранноеОграничение) Экспорт + + Возврат УправлениеДоступомСлужебный.СтруктураОграничения(РазобранноеОграничение); + +КонецФункции + +// Конец Разработка.РазработкаПравИОграниченийДоступа + #КонецОбласти #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеДоступомПереопределяемый/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомПереопределяемый/Module.bsl index 5174dc648..e3559995a 100644 --- a/SSL/src/CommonModules/УправлениеДоступомПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомПереопределяемый/Module.bsl @@ -34,6 +34,51 @@ +КонецПроцедуры + +// Позволяет указать списки, у которых объекты метаданных содержат описание логики ограничения +// доступа в модулях менеджеров или переопределяемом модуле. +// +// В модулях менеджеров указанных списков должна быть размещена процедура обработчика, +// в которую передаются следующие параметры. +// +// Ограничение - Структура - со свойствами: +// * Текст - Строка - ограничение доступа для пользователей. +// Если пустая строка, значит доступ разрешен. +// * ТекстДляВнешнихПользователей - Строка - ограничение доступа для внешних пользователей. +// Если пустая строка, значит доступ запрещен. +// * ПоВладельцуБезЗаписиКлючейДоступа - Неопределено - определить автоматически. +// - Булево - если Ложь, то всегда записывать ключи доступа, +// если Истина, тогда не записывать ключи доступа, +// а использовать ключи доступа владельца (требуется, +// чтобы ограничение было строго по объекту-владельцу). +/// * ПоВладельцуБезЗаписиКлючейДоступаДляВнешнихПользователей - Неопределено, Булево - см. +// описание предыдущего параметра. +// +// Далее пример процедуры для модуля менеджера. +// +//// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +//Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт +// +// Ограничение.Текст = +// "РазрешитьЧтениеИзменение +// |ГДЕ +// | ЗначениеРазрешено(Организация) +// | И ЗначениеРазрешено(Контрагент)"; +// +//КонецПроцедуры +// +// Параметры: +// Списки - Соответствие - списки с ограничением доступа: +// * Ключ - ОбъектМетаданных - список с ограничением доступа. +// * Значение - Булево - Истина - текст ограничения в модуле менеджера. +// - Ложь - текст ограничения в этом переопределяемом +// модуле в процедуре ПриЗаполненииОграниченияДоступа. +// +Процедура ПриЗаполненииСписковСОграничениемДоступа(Списки) Экспорт + + + КонецПроцедуры // Заполняет описания поставляемых профилей групп доступа и @@ -62,7 +107,7 @@ // ОписаниеПрофиля.Наименование = НСтр("ru = 'Менеджер по продажам'", Метаданные.ОсновнойЯзык.КодЯзыка); // ОписаниеПрофиля.Роли.Добавить("ЗапускВебКлиента"); // ОписаниеПрофиля.Роли.Добавить("ЗапускТонкогоКлиента"); -// ОписаниеПрофиля.Роли.Добавить("БазовыеПрава"); +// ОписаниеПрофиля.Роли.Добавить("БазовыеПраваБСП"); // ОписаниеПрофиля.Роли.Добавить("Подсистема_Продажи"); // ОписаниеПрофиля.Роли.Добавить("ДобавлениеИзменениеДокументовПокупателей"); // ОписаниеПрофиля.Роли.Добавить("ПросмотрОтчетаКнигаПокупок"); @@ -157,6 +202,22 @@ +КонецПроцедуры + +// Позволяет переопределить ограничение, указанное в модуле менеджера объекта метаданных. +// +// Параметры: +// Список - ОбъектМетаданных - список, для которого нужно вернуть текст ограничения. +// В процедуре ПриЗаполненииСписковСОграничениемДоступа нужно +// указать для списка значение Ложь, иначе вызова не будет. +// +// Ограничение - Структура - со свойствами, как для процедур в модулях менеджеров. См. свойства +// в комментарии к процедуре ПриЗаполненииСписковСОграничениемДоступа. +// +Процедура ПриЗаполненииОграниченияДоступа(Список, Ограничение) Экспорт + + + КонецПроцедуры // Заполняет состав видов доступа, используемых при ограничении прав объектов метаданных. diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl index bce624ae2..aafd198ee 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl @@ -237,8 +237,9 @@ Для Каждого ТекущийТип Из ТипыЗначений Цикл Свойства = СвойстваВидовДоступа.ПоТипамЗначений.Получить(ТекущийТип); Если Свойства = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Тип ""%1"" не является типом значений доступа'"), Строка(ТекущийТип)); + ВызватьИсключение ТекстОшибки; КонецЕсли; Если Не ВидДоступаИспользуется(Свойства.Имя) Тогда ТекущийТекстЗапроса = ТекстЗапросаВсеЗначения; @@ -386,6 +387,565 @@ КонецПроцедуры +#Область УниверсальноеОграничение + +Функция ОграничиватьДоступНаУровнеЗаписейУниверсально(СУчетомКонстантыОграничениеДоступаНаУровнеЗаписей = Ложь) Экспорт + + УстановитьОтключениеБезопасногоРежима(Истина); + УстановитьПривилегированныйРежим(Истина); + + Если СУчетомКонстантыОграничениеДоступаНаУровнеЗаписей Тогда + Возврат Константы.ОграничиватьДоступНаУровнеЗаписейУниверсально.Получить(); + КонецЕсли; + + Возврат ПараметрыСеанса.ОграничениеДоступаНаУровнеЗаписейУниверсально; + +КонецФункции + +// Устанавливает использование регламентного задания ОбновлениеДоступа. +// +// Параметры: +// Использование - Булево - Истина, если задание нужно включить, иначе Ложь. +// +Процедура УстановитьОбновлениеДоступа(Использование, БезПроверкиВыполненияОбновленияИБ = Ложь) Экспорт + + Если Не БезПроверкиВыполненияОбновленияИБ + И ОбновлениеИнформационнойБазы.ВыполняетсяОбновлениеИнформационнойБазы() Тогда + + Возврат; // После обновления ИБ задание включается безусловно. + КонецЕсли; + + ВключитьЗадание = ?(ОграничиватьДоступНаУровнеЗаписейУниверсально(), Использование, Ложь); + + Отбор = Новый Структура("Метаданные", Метаданные.РегламентныеЗадания.ОбновлениеДоступаНаУровнеЗаписей); + Задания = РегламентныеЗаданияСервер.НайтиЗадания(Отбор); + + ЗаданиеВключено = Ложь; + Для Каждого Задание Из Задания Цикл + Если Не ВключитьЗадание И Задание.Использование + Или ВключитьЗадание И Не Задание.Использование Тогда + + ЗаданиеВключено = ВключитьЗадание; + РегламентныеЗаданияСервер.ИзменитьЗадание(Задание.УникальныйИдентификатор, + Новый Структура("Использование", ВключитьЗадание)); + КонецЕсли; + КонецЦикла; + + Если Не ВключитьЗадание + Или Не ЗаданиеВключено + Или ОбщегоНазначения.РазделениеВключено()Тогда + Возврат; + КонецЕсли; + + // Немедленный запуск регламентного задания. + ТекущееРасписание = РегламентныеЗаданияСервер.РасписаниеРегламентногоЗадания( + Метаданные.РегламентныеЗадания.ОбновлениеДоступаНаУровнеЗаписей); + + РегламентныеЗаданияСервер.УстановитьРасписаниеРегламентногоЗадания( + Метаданные.РегламентныеЗадания.ОбновлениеДоступаНаУровнеЗаписей, ТекущееРасписание); + +КонецПроцедуры + +// Возвращает ошибки текстов ограничений доступа объектов без учета зависимостей между объектами. +// Тексты проверяются в режиме максимальных ограничений (как будто включены все виды ограничений). +// Функция должна вызываться перед функцией НастройкиВнедрения, чтобы собрать весь пакет ошибок. +// +// Возвращаемое значение: +// Массив - со значениями: +// * Структура - со свойствами: +// * ПолноеИмя - Строка - полное имя объекта метаданных. +// * ТекстОшибки - Строка - текст ошибки в ограничении доступа. +// +Функция ОшибкиОграниченийДоступа() Экспорт + + Ошибки = Новый Массив; + ОбъектОшибки = "ОбщийМодуль.УправлениеДоступомПереопределяемый"; + + ОбщийКонтекст = ОбщийКонтекстРасчетаПараметровОграничения(Истина, Ложь); + + Попытка + СпискиСОграничением = УправлениеДоступомСлужебныйПовтИсп.СпискиСОграничением(); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Списки с ограничением доступа некорректно указаны + |в процедуре ПриЗаполненииСписковСОграничениемДоступа + |общего модуля УправлениеДоступомПереопределяемый по причине: + | + |%1'"), ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + Ошибки.Добавить(Новый Структура("ПолноеИмя, ТекстОшибки", ОбъектОшибки, ТекстОшибки)); + Возврат Ошибки; + КонецПопытки; + + ТекстыОшибок = Новый Соответствие; + ОбщийКонтекст.Вставить("СпискиСОграничением", СпискиСОграничением); + ОбщийКонтекст.Вставить("ОписанияОграничений", Новый Соответствие); + + Для Каждого ОписаниеСписка Из ОбщийКонтекст.СпискиСОграничением Цикл + ПолноеИмя = ОписаниеСписка.Ключ; + Попытка + ТекстОшибки = ОшибкаОграниченияДоступа(ОбщийКонтекст, ПолноеИмя); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + КонецПопытки; + Если ЗначениеЗаполнено(ТекстОшибки) И ТекстыОшибок.Получить(ТекстОшибки) = Неопределено Тогда + ТекстыОшибок.Вставить(ТекстОшибки, Истина); + Ошибки.Добавить(Новый Структура("ПолноеИмя, ТекстОшибки", ПолноеИмя, ТекстОшибки)); + КонецЕсли; + КонецЦикла; + + Возврат Ошибки; + +КонецФункции + +// Возвращает настройки внедрения для инструментов разработчика. +// +// Параметры: +// ДействующиеПараметры - Неопределено - значение по умолчанию. +// - Структура - только для вызова из функции РезультатПроверкиОграниченияДоступа. +// +// Возвращаемое значение: +// Структура - со свойствами: +// * ОграниченияВРолях - Структура - со свойствами: +// * ДляПользователей - Соответствие - со свойствами, как для внешних пользователей (ниже). +// * ДляВнешнихПользователей - Соответствие - со свойствами: +// * Ключ - Строка - полное имя объекта метаданных (списка). Имя коллекции на английском. +// В форме объекта должна вставка ПриЧтенииНаСервере. +// * Значение - Структура - со свойствами: +// * ШаблонДляОбъекта - Булево - если Истина, тогда используется шаблон #ДляОбъекта, +// если Ложь, тогда используется шаблон #ДляРегистра. +// * Параметры - Массив - параметры шаблона (для объекта 1, для регистра 6). +// * Значение - Строка - например, имя поля "Владелец" или +// опорного поля регистра "Организация". +// +// * ПредопределенныеИдентификаторы - Соответствие - со свойствами: +// * Ключ - Строка - имя требуемого предопределенного элемента справочника +// ИдентификаторыОбъектовМетаданных или ИдентификаторыОбъектовРасширений +// в формате "<ИмяСправочника>.<ИмяПредопределенного>". +// * Значение - Строка - полное имя соответствующего объекта метаданных. +// +// * ВладельцыЗначенийКлючейДоступа - Структура - для группы определяемых типов: +// * Ссылки - Массив - полные имена типов ссылки (имя коллекции на английском). +// * Документы - Массив - полные имена типов объекта (имя коллекции на английском). +// * Объекты - Массив - то же, что в предыдущем пункте. +// * НаборыЗаписей - Массив - то же, что в предыдущем пункте. +// * НаборыЗаписейРегистраРасчета - Массив - то же, что в предыдущем пункте. +// +// * ЗначенияДоступа - Массив - полные имена типов ссылки (имя коллекции на английском). +// Для дополнения определяемого типа ЗначениеДоступа. +// +// * ТипыИзмеренийРегистровКлючей - Соответствие - для изменений с именем Поле* +// регистра КлючиДоступаКРегистрам и регистров КлючиДоступаКРегистру*. +// * Ключ - Строка - полное имя регистра (имя коллекции на английском). +// * Значение - Массив - со значениями: +// * Значение - Строка - для регистра сведений КлючиДоступаКРегистрам +// полное имя типа ссылки (имя коллекции на английском). +// * Значение - Структура - для регистров сведений КлючиДоступаКРегистру* со свойствам: +// * Тип - ОписаниеТипов - типы исходного поля регистра с добавленным обязательным +// типом ПеречислениеСсылка.ДополнительныеЗначенияДоступа. +// * Регистр - Строка - полное имя регистра, который ограничивается. +// * Поле - Строка - имя поля регистра, который ограничивается, +// поля соответствуют служебным полям по порядку (Поле1, Поле2, ...). +// +Функция НастройкиВнедрения(ДействующиеПараметры = Неопределено) Экспорт + + ОграниченияВРолях = Новый Структура; + ОграниченияВРолях.Вставить("ДляПользователей", Новый Соответствие); + ОграниченияВРолях.Вставить("ДляВнешнихПользователей", Новый Соответствие); + + ВладельцыЗначенийКлючейДоступа = Новый Структура; + ВладельцыЗначенийКлючейДоступа.Вставить("Ссылки", Новый Массив); + ВладельцыЗначенийКлючейДоступа.Вставить("Документы", Новый Массив); + ВладельцыЗначенийКлючейДоступа.Вставить("Объекты", Новый Массив); + ВладельцыЗначенийКлючейДоступа.Вставить("НаборыЗаписей", Новый Массив); + ВладельцыЗначенийКлючейДоступа.Вставить("НаборыЗаписейРегистраРасчета", Новый Массив); + + ПредопределенныеИдентификаторы = Новый Соответствие; + ЗначенияДоступа = Новый Массив; + ТипыИзмеренийРегистровКлючей = Новый Соответствие; + + ТипыТаблицПоИменам = УправлениеДоступомСлужебныйПовтИсп.СинтаксисЯзыка().ТипыТаблиц.ПоИменам; + ЗначенияДоступа.Добавить(ИмяТипаСсылкиXML(Метаданные.Справочники.КлючиДоступа.ПолноеИмя(), ТипыТаблицПоИменам)); + + ВозможныеПрава = УправлениеДоступомСлужебныйПовтИсп.ВозможныеПраваДляНастройкиПравОбъектов(); + Для Каждого ОписаниеВозможныхПрав Из ВозможныеПрава.ПоПолнымИменам Цикл + ЗначенияДоступа.Добавить(ИмяТипаСсылкиXML(ОписаниеВозможныхПрав.Ключ, ТипыТаблицПоИменам)); + КонецЦикла; + + ИдентификаторТранзакции = Новый УникальныйИдентификатор; + + Если ДействующиеПараметры = Неопределено Тогда + ДействующиеПараметры = ДействующиеПараметрыОграниченияДоступа(ИдентификаторТранзакции,, Истина); + КонецЕсли; + + Для Каждого ОписаниеВерсии Из ДействующиеПараметры.ВерсииОграниченийСписков Цикл + ПолноеИмя = ОписаниеВерсии.Ключ; + ПолноеИмяXML = ПолноеИмяXML(ПолноеИмя, ТипыТаблицПоИменам); + ИмяТипаСсылкиXML = ИмяТипаСсылкиXML(ПолноеИмя, ТипыТаблицПоИменам); + ИмяТипаОбъектаXML = ИмяТипаОбъектаИлиНабораЗаписейXML(ПолноеИмя, ТипыТаблицПоИменам); + + Если ЗначениеЗаполнено(ИмяТипаСсылкиXML) Тогда + ВладельцыЗначенийКлючейДоступа.Ссылки.Добавить(ИмяТипаСсылкиXML); + КонецЕсли; + + Если СтрНачинаетсяС(ИмяТипаОбъектаXML, "DocumentObject.") Тогда + ВладельцыЗначенийКлючейДоступа.Документы.Добавить(ИмяТипаОбъектаXML); + + ИначеЕсли СтрНачинаетсяС(ИмяТипаОбъектаXML, "CalculationRegisterRecordSet.") Тогда + ВладельцыЗначенийКлючейДоступа.НаборыЗаписейРегистраРасчета.Добавить(ИмяТипаОбъектаXML); + + ИначеЕсли СтрНайти(ИмяТипаОбъектаXML, "RecordSet.") > 0 Тогда + ВладельцыЗначенийКлючейДоступа.НаборыЗаписей.Добавить(ИмяТипаОбъектаXML); + + ИначеЕсли СтрНайти(ИмяТипаОбъектаXML, "Object.") > 0 Тогда + ВладельцыЗначенийКлючейДоступа.Объекты.Добавить(ИмяТипаОбъектаXML); + КонецЕсли; + + Если ОписаниеВерсии.Значение = Неопределено Тогда + Продолжить; + КонецЕсли; + + ДобавитьОграниченияВРолях(ПолноеИмяXML, + ПолноеИмя, + ОграниченияВРолях.ДляПользователей, + ДействующиеПараметры.ДополнительныйКонтекст.ДляПользователей.СвойстваОграниченияСписков, + ТипыИзмеренийРегистровКлючей, + ТипыТаблицПоИменам, + ПредопределенныеИдентификаторы); + + ДобавитьОграниченияВРолях(ПолноеИмяXML, + ПолноеИмя, + ОграниченияВРолях.ДляВнешнихПользователей, + ДействующиеПараметры.ДополнительныйКонтекст.ДляВнешнихПользователей.СвойстваОграниченияСписков, + ТипыИзмеренийРегистровКлючей, + ТипыТаблицПоИменам, + ПредопределенныеИдентификаторы); + КонецЦикла; + + Настройки = Новый Структура; + Настройки.Вставить("ОграниченияВРолях", ОграниченияВРолях); + Настройки.Вставить("ПредопределенныеИдентификаторы", ПредопределенныеИдентификаторы); + Настройки.Вставить("ВладельцыЗначенийКлючейДоступа", ВладельцыЗначенийКлючейДоступа); + Настройки.Вставить("ЗначенияДоступа", ЗначенияДоступа); + Настройки.Вставить("ТипыИзмеренийРегистровКлючей", ТипыИзмеренийРегистровКлючей); + + Возврат Настройки; + +КонецФункции + +// Возвращает результат проверки ограничения доступа для инструмента разработчика. +// +// Параметры: +// ПолноеИмя - Строка - полное имя объекта метаданных. +// ДополнительныеПараметры +// - Неопределено - проверить и вернуть текущее ограничение. +// - Структура - со свойствами: +// * Текст - Строка - новый текст ограничения для пользователей. +// * ТекстДляВнешнихПользователей - Строка - новый текст ограничения для внешних пользователей. +// * УчитыватьЗависимости - Булево - учитывать зависимости между ограничениями объектов. +// +// Возвращаемое значение: +// Структура - со свойствами: +// * ОшибкаОписанияОграничения - Строка - если не пустая, то описание ограничения не удалось получить. +// Если при этом УчитыватьЗависимости = Истина, то это текст первой ошибки при получении всех описаний. +// +// * ТекстВМодулеМенеджера - Неопределено - когда заполнена ОшибкаОписанияОграничения. +// - Булево - возвращает место размещения текста ограничения, +// когда Истина - в модуле менеджера, иначе в переопределяемом модуле. +// +// * ДляПользователей - Структура - со свойствами: +// * ПроверяемоеОграничение - Неопределено, Строка - проверенный текст ограничения. +// * ОписаниеОшибок - Неопределено, Структура - см. УправлениеДоступом.СтруктураОграничения. +// * ОшибкаФормированияПараметровОграничения - Неопределено, Строка - текст ошибки. +// * ОшибкаФормированияТекстовЗапросов - Неопределено, Строка - текст ошибки. +// * ОграничениеПоВладельцуВозможно - Неопределено, Булево - свойство проверенного ограничения. +// * ОграниченияВРолях - Неопределено, Структура - со свойствами: +// * ШаблонДляОбъекта - Булево - если Истина, тогда используется шаблон #ДляОбъекта, +// если Ложь, тогда используется шаблон #ДляРегистра. +// * Параметры - Массив - параметры шаблона (для объекта 1, для регистра 6). +// * Значение - Строка - например, имя поля "Владелец" или +// опорного поля регистра "Организация". +// * ОграничениеВМодуле - Неопределено, Строка - текст ограничения, который установлен в конфигурации. +// * ПоВладельцуБезЗаписиКлючейДоступа - Неопределено, Булево - настройка ограничения, +// установленная в конфигурации. +// +// * ДляВнешнихПользователей - Структура - со свойствами, как ДляПользователей. +// +// * ВладелецЗначенийКлючейДоступа - Строка - типы для одноименного определяемого типа. +// * ВладелецЗначенийКлючейДоступаОбъект - Строка - типы для одноименного определяемого типа. +// * ВладелецЗначенийКлючейДоступаНаборЗаписей - Строка - типы для одноименного определяемого типа. +// * ВладелецЗначенийКлючейДоступаНаборЗаписейРегистраРасчета - Строка - типы для одноименного определяемого типа. +// * ПолеРегистраКлючейДоступаКРегистрам - Строка - типы для одноименного определяемого типа. +// * ЗначениеДоступа - Строка - типы для одноименного определяемого типа. +// +// * ТипыИзмеренийОтдельногоРегистраКлючей - Неопределено, Структура - со свойствами: +// * ИмяРегистраСведений - Строка - имя регистра ключей доступа. +// * ТипыИзмерений - Строка - типы для соответствующих измерений регистра. +// +// * ПредопределенныйИдентификатор - Неопределено, Структура - со свойствами +// * ИмяСправочника - Строка - имя справочника идентификаторы объектов метаданных (или расширений). +// * ИмяПредопределенного - Строка - имя предопределенного в справочнике. +// +Функция РезультатПроверкиОграниченияДоступа(ПолноеИмя, ДополнительныеПараметры = Неопределено) Экспорт + + Возврат РезультатПроверкиОграниченияДоступаОбъекта(ПолноеИмя, ДополнительныеПараметры); + +КонецФункции + +// Возвращает структуру указанного текста ограничения для объекта метаданных. +// +// Параметры: +// ПолноеИмя - Строка - полное имя объекта метаданных. +// ТекстОграничения - Строка - текст ограничения, который будет разобран. +// +// Возвращаемое значение: +// Структура - возвращаемое значение см. УправлениеДоступом.СтруктураОграничения. +// +Функция СтруктураОграниченияИзОписания(ПолноеИмя, ТекстОграничения) Экспорт + + Возврат РассчитаннаяСтруктураОграничения(ПолноеИмя, + ТекстОграничения, Неопределено, Неопределено, Истина); + +КонецФункции + +// Добавляет обновление доступа для указанных списков или всех списков. +// +// Параметры: +// Списки - Неопределено - запланировать полное обновление доступа. +// - Строка - полное имя объекта метаданных. +// - СправочникСсылка.ИдентификаторыОбъектовМетаданных - идентификатор. +// - Массив - значения типов указанные выше, кроме Неопределено. +// +// ПараметрыПланирования - Неопределено - использовать значения по умолчанию. +// - Структура - см. ПараметрыПланированияОбновленияДоступа(). +// +Процедура ЗапланироватьОбновлениеДоступа(Списки = Неопределено, ПараметрыПланирования = Неопределено) Экспорт + + Если ПараметрыПланирования = Неопределено Тогда + ПараметрыПланирования = ПараметрыПланированияОбновленияДоступа(); + КонецЕсли; + + УстановитьОтключениеБезопасногоРежима(Истина); + УстановитьПривилегированныйРежим(Истина); + + Если Не ПараметрыПланирования.КлючиДоступаКДанным + И Не ПараметрыПланирования.РазрешенныеКлючиДоступа Тогда + + Возврат; + КонецЕсли; + + ИдентификаторыРегистров = Новый Массив; + ИдентификаторыРазрешенных = Новый Массив; + + Если Списки = Неопределено Тогда + Если ПараметрыПланирования.ВерсииОграниченийСписков = Неопределено Тогда + ДействующиеПараметры = ДействующиеПараметрыОграниченияДоступа(Неопределено); + ВерсииОграниченийСписков = Новый Соответствие(ДействующиеПараметры.ВерсииОграниченийСписков); + Иначе + ВерсииОграниченийСписков = ПараметрыПланирования.ВерсииОграниченийСписков; + КонецЕсли; + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ТИПЗНАЧЕНИЯ(КлючиДоступаКДанным.Объект) КАК ТипСсылки + |ИЗ + | РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКДанным + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | КлючиДоступаКДанным.Регистр КАК Регистр + |ИЗ + | РегистрСведений.КлючиДоступаКРегистрам КАК КлючиДоступаКДанным + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | КлючиДоступа.Список КАК Список + |ИЗ + | Справочник.КлючиДоступа КАК КлючиДоступа + |ГДЕ + | (ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа + | ГДЕ + | РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступа.Ссылка) + | ИЛИ ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа + | ГДЕ + | РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступа.Ссылка) + | ИЛИ ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + | ГДЕ + | РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступа.Ссылка))"; + РезультатыЗапроса = Запрос.ВыполнитьПакет(); + + Выборка = РезультатыЗапроса[0].Выбрать(); + Пока Выборка.Следующий() Цикл + Если ТипЗнч(Выборка.ТипСсылки) <> Тип("Тип") Тогда + Продолжить; + КонецЕсли; + ОбъектМетаданных = Метаданные.НайтиПоТипу(Выборка.ТипСсылки); + Если ОбъектМетаданных = Неопределено Тогда + Продолжить; + КонецЕсли; + ВерсииОграниченийСписков.Вставить(ОбъектМетаданных.ПолноеИмя(), Истина); + КонецЦикла; + + Списки = Новый Массив; + Для Каждого КлючИЗначение Из ВерсииОграниченийСписков Цикл + Списки.Добавить(КлючИЗначение.Ключ); + КонецЦикла; + + ИдентификаторыРегистров = РезультатыЗапроса[1].Выгрузить().ВыгрузитьКолонку("Регистр"); + ИдентификаторыРазрешенных = РезультатыЗапроса[2].Выгрузить().ВыгрузитьКолонку("Список"); + // При планировании полного обновления добавляются: + // а) списки с ограничением, + // б) списки, которые пишут ключи доступа для ограничений по полю-владельцу, + // в) списки без ограничения, для которых есть записи в регистрах ключей доступа к данным, + // в) списки, для которых рассчитываются разрешенные ключи доступа, + // г) списки без расчета разрешенных ключей доступа, для которых есть записи в регистрах + // разрешенных ключей доступа. + + ИначеЕсли ТипЗнч(Списки) <> Тип("Массив") Тогда + Списки = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Списки); + КонецЕсли; + + Если Списки.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Если ТипЗнч(Списки[0]) = Тип("Строка") Тогда + Идентификаторы = ОбщегоНазначения.ИдентификаторыОбъектовМетаданных(Списки); + + Если Не ЗначениеЗаполнено(ИдентификаторыРегистров) + И Не ЗначениеЗаполнено(ИдентификаторыРазрешенных) Тогда + + ИдентификаторыСписков = Идентификаторы; + Иначе + ИдентификаторыСписков = Новый Соответствие; + Для Каждого ОписаниеИдентификатора Из Идентификаторы Цикл + ИдентификаторыСписков.Вставить(ОписаниеИдентификатора.Значение, ОписаниеИдентификатора.Значение); + КонецЦикла; + КонецЕсли; + Иначе + ИдентификаторыСписков = Новый Соответствие; + Для Каждого Идентификатор Из Списки Цикл + ИдентификаторыСписков.Вставить(Идентификатор, Идентификатор); + КонецЦикла; + КонецЕсли; + + Если ЗначениеЗаполнено(ИдентификаторыРегистров) + Или ЗначениеЗаполнено(ИдентификаторыРазрешенных) Тогда + + Для Каждого ИдентификаторРегистра Из ИдентификаторыРегистров Цикл + ИдентификаторыСписков.Вставить(ИдентификаторРегистра, ИдентификаторРегистра); + КонецЦикла; + Для Каждого ИдентификаторРазрешенных Из ИдентификаторыРазрешенных Цикл + ИдентификаторыСписков.Вставить(ИдентификаторРазрешенных, ИдентификаторРазрешенных); + КонецЦикла; + КонецЕсли; + + ТекущаяДатаСеанса = ТекущаяДатаСеанса(); + КлючУникальностиЗаписей = Новый УникальныйИдентификатор; + МаксимальнаяДата = МаксимальнаяДата(); + + ОбновлениеКлючейДоступаКДанным = СлужебныйНаборЗаписей(РегистрыСведений.ОбновлениеКлючейДоступаКДанным); + ОбновлениеКлючейДоступаПользователей = СлужебныйНаборЗаписей(РегистрыСведений.ОбновлениеКлючейДоступаПользователей); + + Для Каждого ОписаниеИдентификатора Из ИдентификаторыСписков Цикл + ИдентификаторСписка = ОписаниеИдентификатора.Значение; + + Если ПараметрыПланирования.КлючиДоступаКДанным Тогда + Если ПараметрыПланирования.ДляПользователей Тогда + НоваяЗапись = ОбновлениеКлючейДоступаКДанным.Добавить(); + НоваяЗапись.КлючУникальности = КлючУникальностиЗаписей; + НоваяЗапись.Список = ИдентификаторСписка; + НоваяЗапись.ДатаПоследнегоОбновленногоЭлемента = МаксимальнаяДата; + НоваяЗапись.ДатаИзмененияЗаписиРегистра = ТекущаяДатаСеанса; + КонецЕсли; + Если ПараметрыПланирования.ДляВнешнихПользователей Тогда + НоваяЗапись = ОбновлениеКлючейДоступаКДанным.Добавить(); + НоваяЗапись.КлючУникальности = КлючУникальностиЗаписей; + НоваяЗапись.Список = ИдентификаторСписка; + НоваяЗапись.ДляВнешнихПользователей = Истина; + НоваяЗапись.ДатаПоследнегоОбновленногоЭлемента = МаксимальнаяДата; + НоваяЗапись.ДатаИзмененияЗаписиРегистра = ТекущаяДатаСеанса; + КонецЕсли; + КонецЕсли; + + Если ПараметрыПланирования.РазрешенныеКлючиДоступа Тогда + Если ПараметрыПланирования.ДляПользователей Тогда + НоваяЗапись = ОбновлениеКлючейДоступаПользователей.Добавить(); + НоваяЗапись.КлючУникальности = КлючУникальностиЗаписей; + НоваяЗапись.Список = ИдентификаторСписка; + НоваяЗапись.ДатаИзмененияЗаписиРегистра = ТекущаяДатаСеанса; + КонецЕсли; + Если ПараметрыПланирования.ДляВнешнихПользователей Тогда + НоваяЗапись = ОбновлениеКлючейДоступаПользователей.Добавить(); + НоваяЗапись.КлючУникальности = КлючУникальностиЗаписей; + НоваяЗапись.Список = ИдентификаторСписка; + НоваяЗапись.ДляВнешнихПользователей = Истина; + НоваяЗапись.ДатаИзмененияЗаписиРегистра = ТекущаяДатаСеанса; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Если ОбновлениеКлючейДоступаКДанным.Количество() > 0 Тогда + ОбновлениеКлючейДоступаКДанным.Записать(Ложь); + КонецЕсли; + + Если ОбновлениеКлючейДоступаПользователей.Количество() > 0 Тогда + ОбновлениеКлючейДоступаПользователей.Записать(Ложь); + КонецЕсли; + + Если ОбновлениеКлючейДоступаКДанным.Количество() > 0 + Или ОбновлениеКлючейДоступаПользователей.Количество() > 0 Тогда + + УстановитьОбновлениеДоступа(Истина); + КонецЕсли; + + УстановитьПривилегированныйРежим(Ложь); + УстановитьОтключениеБезопасногоРежима(Ложь); + +КонецПроцедуры + +// Конструктор структуры дополнительных параметров для процедуры ЗапланироватьОбновлениеДоступа. +// +// Возвращаемое значение: +// Структура - со свойствами: +// * КлючиДоступаКДанным - Булево - по умолчанию Истина - запланировать обновление ключей доступа +// к данным. +// * РазрешенныеКлючиДоступа - Булево - по умолчанию Истина - запланировать обновление ключей доступа +// пользователей и групп доступа. +// * ДляПользователей - Булево - по умолчанию Истина - запланировать обновление для пользователей. +// * ДляВнешнихПользователей - Булево - по умолчанию значение константы ИспользоватьВнешнихПользователей +// запланировать обновление для внешних пользователей. +// +Функция ПараметрыПланированияОбновленияДоступа() Экспорт + + Результат = Новый Структура; + Результат.Вставить("КлючиДоступаКДанным", Истина); + Результат.Вставить("РазрешенныеКлючиДоступа", Истина); + Результат.Вставить("ДляПользователей", Истина); + Результат.Вставить("ДляВнешнихПользователей", Константы.ИспользоватьВнешнихПользователей.Получить()); + Результат.Вставить("ВерсииОграниченийСписков", Неопределено); + + Возврат Результат; + +КонецФункции + +#КонецОбласти + //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем конфигурации. @@ -419,13 +979,50 @@ Обработчики.Вставить("ИдентификаторыТаблицСОтдельнымиНастройкамиПрав", "УправлениеДоступомСлужебный.УстановкаПараметровСеанса"); + #Область УниверсальноеОграничение + + Обработчики.Вставить("ОграничениеДоступаНаУровнеЗаписейУниверсально", + "УправлениеДоступомСлужебный.УстановкаПараметровСеанса"); + + Обработчики.Вставить("ВерсииШаблоновОграниченияДоступа", + "УправлениеДоступомСлужебный.УстановкаПараметровСеанса"); + + Обработчики.Вставить("ГруппыДоступаАвторизованногоПользователя", + "УправлениеДоступомСлужебный.УстановкаПараметровСеанса"); + + Обработчики.Вставить("СпискиСОграничениемЧерезКлючиДоступа*", + "УправлениеДоступомСлужебный.УстановкаПараметровСеанса"); + + Обработчики.Вставить("СпискиСОтключеннымОграничением*", + "УправлениеДоступомСлужебный.УстановкаПараметровСеанса"); + + Обработчики.Вставить("СпискиССокращеннымНаборомПолейВРегистрахКлючей", + "УправлениеДоступомСлужебный.УстановкаПараметровСеанса"); + + Обработчики.Вставить("ПараметрыОграниченияДоступа", + "УправлениеДоступомСлужебный.УстановкаПараметровСеанса"); + + #КонецОбласти + КонецПроцедуры // См. РегламентныеЗаданияПереопределяемый.ПриОпределенииНастроекРегламентныхЗаданий. Процедура ПриОпределенииНастроекРегламентныхЗаданий(Зависимости) Экспорт + Зависимость = Зависимости.Добавить(); Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ЗаполнениеДанныхДляОграниченияДоступа; Зависимость.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ОграничиватьДоступНаУровнеЗаписей; + + Зависимость = Зависимости.Добавить(); + Зависимость.ЗависимостьПоИ = Истина; + Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ОбновлениеДоступаНаУровнеЗаписей; + Зависимость.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ОграничиватьДоступНаУровнеЗаписейУниверсально; + + Зависимость = Зависимости.Добавить(); + Зависимость.ЗависимостьПоИ = Истина; + Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ОбновлениеДоступаНаУровнеЗаписей; + Зависимость.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ОграничиватьДоступНаУровнеЗаписей; + КонецПроцедуры // Обновляет вспомогательные данные, которые зависят только от конфигурации. @@ -629,7 +1226,7 @@ Обработчик.Приоритет = 1; Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.4.4.15"; + Обработчик.Версия = "3.0.1.196"; Обработчик.Процедура = "Справочники.ГруппыДоступа.ОбработатьДанныеДляПереходаНаНовуюВерсию"; Обработчик.РежимВыполнения = "Отложенно"; Обработчик.ЗапускатьИВПодчиненномУзлеРИБСФильтрами = Истина; @@ -649,6 +1246,10 @@ ОбновитьВспомогательныеДанныеЭлементовИзмененныхПриЗагрузке(); + Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + УстановитьОбновлениеДоступа(Истина, Истина); + КонецЕсли; + КонецПроцедуры // Заполняет структуру параметров, необходимых для работы клиентского кода @@ -667,15 +1268,38 @@ // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок. Процедура ПриДобавленииИсключенийПоискаСсылок(Массив) Экспорт - Массив.Добавить(Метаданные.РегистрыСведений.ГруппыЗначенийДоступа.ПолноеИмя()); - Массив.Добавить(Метаданные.РегистрыСведений.ЗависимостиПравДоступа.ПолноеИмя()); - Массив.Добавить(Метаданные.РегистрыСведений.ЗначенияГруппДоступа.ПолноеИмя()); - Массив.Добавить(Метаданные.РегистрыСведений.ЗначенияГруппДоступаПоУмолчанию.ПолноеИмя()); - Массив.Добавить(Метаданные.РегистрыСведений.НаборыЗначенийДоступа.ПолноеИмя()); - Массив.Добавить(Метаданные.РегистрыСведений.ПраваРолей.ПолноеИмя()); - Массив.Добавить(Метаданные.РегистрыСведений.НаследованиеНастроекПравОбъектов.ПолноеИмя()); - Массив.Добавить(Метаданные.РегистрыСведений.НастройкиПравОбъектов.ПолноеИмя()); - Массив.Добавить(Метаданные.РегистрыСведений.ТаблицыГруппДоступа.ПолноеИмя()); + Массив.Добавить(Метаданные.РегистрыСведений.ГруппыЗначенийДоступа); + Массив.Добавить(Метаданные.РегистрыСведений.ЗависимостиПравДоступа); + Массив.Добавить(Метаданные.РегистрыСведений.ЗначенияГруппДоступа); + Массив.Добавить(Метаданные.РегистрыСведений.ЗначенияГруппДоступаПоУмолчанию); + Массив.Добавить(Метаданные.РегистрыСведений.НаборыЗначенийДоступа); + Массив.Добавить(Метаданные.РегистрыСведений.ПраваРолей); + Массив.Добавить(Метаданные.РегистрыСведений.НаследованиеНастроекПравОбъектов); + Массив.Добавить(Метаданные.РегистрыСведений.НастройкиПравОбъектов); + Массив.Добавить(Метаданные.РегистрыСведений.ТаблицыГруппДоступа); + + ПриДобавленииИсключенийПоискаСсылокДопускающихУдаление(Массив); + +КонецПроцедуры + +// Объекты с отложенным удалением. +Процедура ПриДобавленииИсключенийПоискаСсылокДопускающихУдаление(Массив) Экспорт + + Массив.Добавить(Метаданные.Справочники.КлючиДоступа); + Массив.Добавить(Метаданные.РегистрыСведений.КлючиДоступаВнешнихПользователей); + Массив.Добавить(Метаданные.РегистрыСведений.КлючиДоступаГруппДоступа); + Массив.Добавить(Метаданные.РегистрыСведений.КлючиДоступаКОбъектам); + Массив.Добавить(Метаданные.РегистрыСведений.КлючиДоступаКРегистрам); + Массив.Добавить(Метаданные.РегистрыСведений.КлючиДоступаПользователей); + Массив.Добавить(Метаданные.РегистрыСведений.ОбновлениеКлючейДоступаКДанным); + Массив.Добавить(Метаданные.РегистрыСведений.ОбновлениеКлючейДоступаПользователей); + Массив.Добавить(Метаданные.РегистрыСведений.ПараметрыОграниченияДоступа); + + Для Каждого РегистрСведений Из Метаданные.РегистрыСведений Цикл + Если СтрНачинаетсяС(ВРег(РегистрСведений.Имя), ВРег("КлючиДоступаКРегистру")) Тогда + Массив.Добавить(РегистрСведений); + КонецЕсли; + КонецЦикла; КонецПроцедуры @@ -1027,6 +1651,11 @@ КонецЕсли; КонецЕсли; + Если ОграничиватьДоступНаУровнеЗаписейУниверсально() Тогда + ЗапланироватьОбновлениеДоступаПриКосвенномИзмененииУчастниковГруппыДоступа( + ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Ссылка)); + КонецЕсли; + КонецПроцедуры // См. ИнтеграцияПодсистемБСП.ПослеОбновленияСоставовГруппПользователей. @@ -1040,6 +1669,10 @@ УправлениеДоступом.ОбновитьРолиПользователей(УчастникиИзменений); + Если ОграничиватьДоступНаУровнеЗаписейУниверсально() Тогда + ЗапланироватьОбновлениеДоступаПриКосвенномИзмененииУчастниковГруппыДоступа(ИзмененныеГруппы); + КонецЕсли; + КонецПроцедуры // См. ИнтеграцияПодсистемБСП.ПослеИзмененияОбъектаАвторизацииВнешнегоПользователя. @@ -1145,6 +1778,16 @@ МодульВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.ПраваДоступа); КонецПроцедуры +// Обработчики событий подсистемы УправлениеДоступом. + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииСписковСОграничениемДоступа(Списки) Экспорт + + Списки.Вставить(Метаданные.Справочники.ПрофилиГруппДоступа, Истина); + Списки.Вставить(Метаданные.Справочники.ГруппыДоступа, Истина); + +КонецПроцедуры + // Обработчики событий библиотеки ТехнологияСервиса. // См. ВыгрузкаЗагрузкаДанныхПереопределяемый.ПриЗаполненииТиповОбщихДанныхНеТребующихСопоставлениеСсылокПриЗагрузке. @@ -1216,18 +1859,65 @@ // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииОбработчиковУстановкиПараметровСеанса. Процедура УстановкаПараметровСеанса(ИмяПараметра, УстановленныеПараметры) Экспорт - УстановитьПривилегированныйРежим(Истина); + #Область УниверсальноеОграничение + Если ИмяПараметра = "ПараметрыОграниченияДоступа" Тогда + ПараметрыСеанса.ПараметрыОграниченияДоступа = Новый ФиксированнаяСтруктура(Новый Структура); + УстановленныеПараметры.Добавить("ПараметрыОграниченияДоступа"); + Возврат; + КонецЕсли; + ОграничиватьДоступНаУровнеЗаписей = Константы.ОграничиватьДоступНаУровнеЗаписей.Получить(); + УниверсальноеОграничение = Константы.ОграничиватьДоступНаУровнеЗаписейУниверсально.Получить(); + + ПараметрыСеанса.ОграничениеДоступаНаУровнеЗаписейУниверсально = + ОграничиватьДоступНаУровнеЗаписей И УниверсальноеОграничение; + + УстановленныеПараметры.Добавить("ОграничениеДоступаНаУровнеЗаписейУниверсально"); + Если ИмяПараметра = "ОграничениеДоступаНаУровнеЗаписейУниверсально" Тогда + Возврат; + КонецЕсли; + #КонецОбласти + + // Для корректной работы препроцессора в ограничениях доступа, требуется инициализации всех + // параметров сеанса, которые могут быть востребованы в работе препроцессора. ИнформационнаяБазаЗаблокированаДляОбновления = ЗначениеЗаполнено( ОбновлениеИнформационнойБазыСлужебный.ИнформационнаяБазаЗаблокированаДляОбновления(Ложь)); - Если Не Константы.ОграничиватьДоступНаУровнеЗаписей.Получить() + #Область УниверсальноеОграничение + Если Не ОграничиватьДоступНаУровнеЗаписей + Или Не УниверсальноеОграничение + Или ИнформационнаяБазаЗаблокированаДляОбновления Тогда + + ПараметрыСеанса.СпискиСОтключеннымОграничениемЧтения = + ?(ИнформационнаяБазаЗаблокированаДляОбновления + Или Не УниверсальноеОграничение, "Неопределено", "Все"); + + ПараметрыСеанса.ВерсииШаблоновОграниченияДоступа = ВерсииШаблоновОграниченияДоступа(); + ПараметрыСеанса.ГруппыДоступаАвторизованногоПользователя = Новый ФиксированныйМассив(Новый Массив); + ПараметрыСеанса.СпискиСОграничениемЧерезКлючиДоступаГруппДоступа = ""; + ПараметрыСеанса.СпискиСОграничениемЧерезКлючиДоступаПользователей = ""; + ПараметрыСеанса.СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа = ""; + ПараметрыСеанса.СпискиСОтключеннымОграничениемПоПолям = ""; + ПараметрыСеанса.СпискиССокращеннымНаборомПолейВРегистрахКлючей = ""; + + УстановленныеПараметры.Добавить("СпискиСОтключеннымОграничениемЧтения"); + УстановленныеПараметры.Добавить("ВерсииШаблоновОграниченияДоступа"); + УстановленныеПараметры.Добавить("ГруппыДоступаАвторизованногоПользователя"); + УстановленныеПараметры.Добавить("СпискиСОграничениемЧерезКлючиДоступаГруппДоступа"); + УстановленныеПараметры.Добавить("СпискиСОграничениемЧерезКлючиДоступаПользователей"); + УстановленныеПараметры.Добавить("СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа"); + УстановленныеПараметры.Добавить("СпискиСОтключеннымОграничениемПоПолям"); + УстановленныеПараметры.Добавить("СпискиССокращеннымНаборомПолейВРегистрахКлючей"); + КонецЕсли; + #КонецОбласти + + Если Не ОграничиватьДоступНаУровнеЗаписей + Или УниверсальноеОграничение Или ИнформационнаяБазаЗаблокированаДляОбновления Тогда - // Для корректной работы препроцессора в ограничениях доступа, требуется инициализации всех - // параметров сеанса, которые могут быть востребованы в работе препроцессора. ПараметрыСеанса.ОграничениеДоступаНаУровнеЗаписейВключено = - ?(ИнформационнаяБазаЗаблокированаДляОбновления, "", Ложь); + ?(ИнформационнаяБазаЗаблокированаДляОбновления + Или УниверсальноеОграничение, "", Ложь); ПараметрыСеанса.ВсеВидыДоступаКромеСпециальных = ""; ПараметрыСеанса.ВидыДоступаСОтключеннымИспользованием = ""; @@ -1254,9 +1944,20 @@ УстановленныеПараметры.Добавить("ТаблицыСОтдельнымиНастройкамиПрав"); УстановленныеПараметры.Добавить("ИдентификаторыТаблицСОтдельнымиНастройкамиПрав"); УстановленныеПараметры.Добавить("ТипыВладельцевНастроекПрав"); + КонецЕсли; + + Если Не ОграничиватьДоступНаУровнеЗаписей + Или ИнформационнаяБазаЗаблокированаДляОбновления Тогда Возврат; КонецЕсли; + #Область УниверсальноеОграничение + Если УниверсальноеОграничение Тогда + ДействующиеПараметрыОграниченияДоступа(Неопределено, Истина); + Возврат; + КонецЕсли; + #КонецОбласти + ПараметрыСеанса.ОграничениеДоступаНаУровнеЗаписейВключено = Истина; Запрос = Новый Запрос; @@ -1624,8 +2325,9 @@ СвойстваВидаДоступа = СвойстваВидовДоступа.ПоИменам.Получить(ВидДоступа); Если СвойстваВидаДоступа = Неопределено Тогда - ВызватьИсключение ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстОшибки = ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не найден вид доступа ""%1"", указанный в параметре ВидДоступа.'"), ВидДоступа); + ВызватьИсключение ТекстОшибки; КонецЕсли; ВидДоступаСсылка = СвойстваВидаДоступа.Ссылка; @@ -1637,9 +2339,10 @@ ТекущийВидДоступа = СокрЛП(ТекущийВидДоступа); СвойстваВидаДоступа = СвойстваВидовДоступа.ПоИменам.Получить(ТекущийВидДоступа); Если СвойстваВидаДоступа = Неопределено Тогда - ВызватьИсключение ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстОшибки = ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не найден вид доступа ""%1"", указанный в параметре |ВсеВидыДоступа: ""%2"".'"), ТекущийВидДоступа, ВсеВидыДоступа); + ВызватьИсключение ТекстОшибки; КонецЕсли; Если СвойстваВидаДоступа.Имя = ВидДоступа Тогда ВидДоступаУказанВоВсехВидахДоступа = Истина; @@ -1652,9 +2355,10 @@ КонецЦикла; Если Не ВидДоступаУказанВоВсехВидахДоступа Тогда - ВызватьИсключение ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстОшибки = ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Вид доступа ""%1"", указанный в параметре ВидДоступа не найден в параметре |ВсеВидыДоступа: ""%2"".'"), ВидДоступа, ВсеВидыДоступа); + ВызватьИсключение ТекстОшибки; КонецЕсли; Если ВсеВидыДоступаТаблицыСОтключеннымИспользованием Тогда @@ -2147,11 +2851,12 @@ ТипЗначенияОбъект = ТипЗнч(Объект); Если Объект.Метаданные().ТабличныеЧасти.Найти("НаборыЗначенийДоступа") = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Неверные параметры. |У объекта типа ""%1"" |не найдена табличная часть ""Наборы значений доступа"".'"), ТипЗначенияОбъект); + ВызватьИсключение ТекстОшибки; КонецЕсли; Таблица = УправлениеДоступом.ТаблицаНаборыЗначенийДоступа(); @@ -2193,20 +2898,22 @@ "ЗаписатьНаборыЗначенийДоступа").Получить(ТипЗначенияОбъект) <> Неопределено; Если НЕ НаборыЗаписываются Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Неверные параметры. |Тип объекта ""%1"" |не найден в подписке на события |""Записать наборы значений доступа"".'"), ТипЗначенияОбъект); + ВызватьИсключение ТекстОшибки; КонецЕсли; Если Метаданные.РегистрыСведений.НаборыЗначенийДоступа.Измерения.Объект.Тип.Типы().Найти(ТипЗнч(СсылкаНаОбъект)) = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка при записи наборов значений доступа: |в регистре сведений НаборыЗначенийДоступа в измерении Объект |не задан тип %1'"), СсылкаНаОбъект.Метаданные().ПолноеИмя()); + ВызватьИсключение ТекстОшибки; КонецЕсли; Если СсылкаНаОбъект.Метаданные().ТабличныеЧасти.Найти("НаборыЗначенийДоступа") <> Неопределено Тогда @@ -2536,13 +3243,14 @@ КонецЕсли; ИндексРазделителя = СтрНайти(ТекущаяСтрока, ":"); Если ИндексРазделителя = 0 Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка при выполнении процедуры УправлениеДоступом.УстановитьУсловиеОтбораВЗапросе(). | |В параметре ИмяПараметраУсловияОтбораИмяПоля не найден разделитель (двоеточие) |в следующей строке формата ""<Имя параметра условия>:<Имя поля>"" |""%1"".'"), ТекущаяСтрока); + ВызватьИсключение ТекстОшибки; КонецЕсли; ИмяПараметраУсловияОтбора = Лев(ТекущаяСтрока, ИндексРазделителя-1); ИмяПоля = Сред(ТекущаяСтрока, ИндексРазделителя+1); @@ -2870,8 +3578,8 @@ Если Данные.НовыеЗаписиСодержатТолькоРазличия Тогда Если Данные.ИмяПервогоИзмерения = Неопределено Тогда - ВызватьИсключение - НСтр("ru = 'Некорректные параметры в процедуре ОбновитьНаборыЗаписей.'"); + ТекстОшибки = НСтр("ru = 'Некорректные параметры в процедуре ОбновитьНаборыЗаписей.'"); + ВызватьИсключение ТекстОшибки; Иначе Если Данные.ИмяВторогоИзмерения = Неопределено Тогда ЗаписьНесколькимиНаборами = Ложь; @@ -3149,11 +3857,12 @@ КонецЕсли; Если ОбъектМетаданных = Неопределено Тогда - ВызватьИсключение + ТекстОшибки = НСтр("ru = 'Ошибка в функции ПустаяСсылкаОбъектаМетаданных |общего модуля УправлениеДоступомСлужебный. | |Неверный параметр ОписаниеОбъектаМетаданных.'"); + ВызватьИсключение ТекстОшибки; КонецЕсли; ПустаяСсылка = Неопределено; @@ -3161,13 +3870,14 @@ МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ОбъектМетаданных.ПолноеИмя()); ПустаяСсылка = МенеджерОбъекта.ПустаяСсылка(); Исключение - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка в функции ПустаяСсылкаОбъектаМетаданных |общего модуля УправлениеДоступомСлужебный. | |Не удалось получить пустую ссылка для объекта метаданных |""%1"".'"), ОбъектМетаданных.ПолноеИмя()); + ВызватьИсключение ТекстОшибки; КонецПопытки; Возврат ПустаяСсылка; @@ -3243,22 +3953,26 @@ СтрЗаменить(ТекстЗапросаВыбораСтарых, "ПолноеИмяРегистра", ПолноеИмяРегистра); Если СтрНайти(ТекстЗапросаВыбораНовых, "&ПодстановкаПоляВидИзмененияСтроки") = 0 Тогда - ВызватьИсключение + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка в значении параметра ТекстЗапросаВыбораСтарых |процедуры ТекстЗапросаВыбораИзменений модуля УправлениеДоступомСлужебный. | - |В тексте запроса не найдена строка ""&ПодстановкаПоляВидИзмененияСтроки"".'"); + |В тексте запроса не найдена строка ""%1"".'"), + "&ПодстановкаПоляВидИзмененияСтроки"); + ВызватьИсключение ТекстОшибки; КонецЕсли; ТекстЗапросаВыбораСтарых = СтрЗаменить( ТекстЗапросаВыбораСтарых, "&ПодстановкаПоляВидИзмененияСтроки", "-1 КАК ВидИзмененияСтроки"); Если СтрНайти(ТекстЗапросаВыбораНовых, "&ПодстановкаПоляВидИзмененияСтроки") = 0 Тогда - ВызватьИсключение + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка в значении параметра ТекстЗапросаВыбораНовых |процедуры ТекстЗапросаВыбораИзменений модуля УправлениеДоступомСлужебный. | - |В тексте запроса не найдена строка ""&ПодстановкаПоляВидИзмененияСтроки"".'"); + |В тексте запроса не найдена строка ""%1"".'"), + "&ПодстановкаПоляВидИзмененияСтроки"); + ВызватьИсключение ТекстОшибки; КонецЕсли; ТекстЗапросаВыбораНовых = СтрЗаменить( @@ -3367,6 +4081,7 @@ Справочники.ПрофилиГруппДоступа.ОбновитьПоставляемыеПрофилиПоИзменениямКонфигурации(); Справочники.ГруппыДоступа.ПометитьНаУдалениеГруппыДоступаПомеченныхПрофилей(); РегистрыСведений.НаборыЗначенийДоступа.ОбновитьВспомогательныеДанныеРегистраПоИзменениямКонфигурации(); + РегистрыСведений.ПараметрыОграниченияДоступа.ОбновитьДанныеРегистра(); ЗафиксироватьТранзакцию(); Исключение @@ -3646,7 +4361,7 @@ УстановитьНовыеПраваРолейРасширений = Ложь; Если ЗначениеЗаполнено(ТекущаяВерсияРасширений) Тогда ПраваРолейРасширений = СтандартныеПодсистемыСервер.ПараметрРаботыРасширения( - "УправлениеДоступом.ПраваРолей"); + "СтандартныеПодсистемы.УправлениеДоступом.ПраваРолей"); Если ПраваРолейРасширений = Неопределено Тогда Запрос = РегистрыСведений.ПраваРолей.ЗапросИзменений(Истина); @@ -3661,7 +4376,7 @@ // Проверка необходимости обновления регистра ТаблицыГруппДоступа. ПараметрыОбновления = СтандартныеПодсистемыСервер.ПараметрРаботыРасширения( - "УправлениеДоступом.ПараметрыОбновленияТаблицГруппДоступа", Истина); + "СтандартныеПодсистемы.УправлениеДоступом.ПараметрыОбновленияТаблицГруппДоступа", Истина); Если ТипЗнч(ПараметрыОбновления) <> Тип("Структура") Или Не ПараметрыОбновления.Свойство("ПоследняяВерсияРасширений") @@ -3678,7 +4393,7 @@ Если Не ТребуетсяОбновление Тогда Если УстановитьНовыеПраваРолейРасширений Тогда; СтандартныеПодсистемыСервер.УстановитьПараметрРаботыРасширения( - "УправлениеДоступом.ПраваРолей", Новый ХранилищеЗначения(ПраваРолейРасширений)); + "СтандартныеПодсистемы.УправлениеДоступом.ПраваРолей", Новый ХранилищеЗначения(ПраваРолейРасширений)); КонецЕсли; Возврат; КонецЕсли; @@ -3707,10 +4422,10 @@ Блокировка.Заблокировать(); Если УстановитьНовыеПраваРолейРасширений Тогда; СтандартныеПодсистемыСервер.УстановитьПараметрРаботыРасширения( - "УправлениеДоступом.ПраваРолей", Новый ХранилищеЗначения(ПраваРолейРасширений)); + "СтандартныеПодсистемы.УправлениеДоступом.ПраваРолей", Новый ХранилищеЗначения(ПраваРолейРасширений)); КонецЕсли; СтандартныеПодсистемыСервер.УстановитьПараметрРаботыРасширения( - "УправлениеДоступом.ПараметрыОбновленияТаблицГруппДоступа", ПараметрыОбновления, Истина); + "СтандартныеПодсистемы.УправлениеДоступом.ПараметрыОбновленияТаблицГруппДоступа", ПараметрыОбновления, Истина); РегистрыСведений.ТаблицыГруппДоступа.ОбновитьДанныеРегистра(, ОбъектыСИзменениемПравДляОбновления); ЗафиксироватьТранзакцию(); Исключение @@ -3756,13 +4471,14 @@ РазблокироватьДанныеДляРедактирования(СсылкаНаЗависимыйОбъект); Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'При обновлении зависимого набора значений доступа объекта |""%1"" возникла ошибка: | |%2'"), Строка(СсылкаНаЗависимыйОбъект), КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + ВызватьИсключение ТекстОшибки; КонецПопытки; КонецЕсли; КонецЦикла; @@ -3906,17 +4622,19 @@ ИначеЕсли ВходныеПараметры = Неопределено Тогда Параметры = Новый Структура; Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Некорректный тип набора свойств ""%1"". |Допустимые типы: Структура, Неопределено.'"), ТипЗнч(ВходныеПараметры)); + ВызватьИсключение ТекстОшибки; КонецЕсли; Для каждого КлючИЗначение Из Параметры Цикл Если Не ВсеПараметры.Свойство(КлючИЗначение.Ключ) Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Указан несуществующий параметр %1'"), КлючИЗначение.Ключ); + ВызватьИсключение ТекстОшибки; КонецЕсли; ВсеПараметры[КлючИЗначение.Ключ] = Параметры[КлючИЗначение.Ключ]; КонецЦикла; @@ -3926,9 +4644,10 @@ Для каждого КлючИЗначение Из ОбязательныеПараметры Цикл Если Не Параметры.Свойство(КлючИЗначение.Ключ) Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не указан обязательный параметр %1'"), КлючИЗначение.Ключ); + ВызватьИсключение ТекстОшибки; КонецЕсли; КонецЦикла; КонецЕсли; @@ -3958,7 +4677,16 @@ Или ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.ЗависимостиПравДоступа") Или ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.ТаблицыГруппДоступа") Или ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.ЗначенияГруппДоступа") - Или ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.ЗначенияГруппДоступаПоУмолчанию"); + Или ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.ЗначенияГруппДоступаПоУмолчанию") + Или ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.КлючиДоступа") + Или ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.КлючиДоступаВнешнихПользователей") + Или ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.КлючиДоступаГруппДоступа") + Или ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.КлючиДоступаКОбъектам") + Или ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.КлючиДоступаКРегистрам") + Или ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.КлючиДоступаПользователей") + Или ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.ОбновлениеКлючейДоступаКДанным") + Или ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.ОбновлениеКлючейДоступаПользователей") + Или ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.ПараметрыОграниченияДоступа"); КонецФункции @@ -4235,26 +4963,29 @@ "ЗаписатьНаборыЗначенийДоступа").Получить(ТипЗначенияОбъект) <> Неопределено; Если НЕ НаборыЗаписываются Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Неверные параметры. |Тип объекта ""%1"" |не найден в подписках на события |""Записать наборы значений доступа"".'"), ТипЗначенияОбъект); + ВызватьИсключение ТекстОшибки; КонецЕсли; ВозможныеТипыОбъектов = УправлениеДоступомСлужебныйПовтИсп.ТипыПоляТаблицы( "РегистрСведений.НаборыЗначенийДоступа.Измерение.Объект"); Если ВозможныеТипыОбъектов.Получить(ТипЗнч(СсылкаНаОбъект)) = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка при записи наборов значений доступа: |в регистре сведений НаборыЗначенийДоступа в измерении Объект |не задан тип ""%1"".'"), СсылкаНаОбъект.Метаданные().ПолноеИмя()); + ВызватьИсключение ТекстОшибки; КонецЕсли; - Если УправлениеДоступом.ОграничиватьДоступНаУровнеЗаписей() Тогда + Если УправлениеДоступом.ОграничиватьДоступНаУровнеЗаписей() + И Не ОграничиватьДоступНаУровнеЗаписейУниверсально() Тогда Если Метаданные.НайтиПоТипу(ТипЗначенияОбъект).ТабличныеЧасти.Найти("НаборыЗначенийДоступа") = Неопределено Тогда @@ -4268,12 +4999,13 @@ "ЗаполнитьНаборыЗначенийДоступаТабличныхЧастей").Получить(ТипЗначенияОбъект) <> Неопределено; Если НЕ ТабличнаяЧастьЗаполняется Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Неверные параметры. |Тип объекта ""%1"" |не найден в подписках на события |""Заполнить наборы значений доступа табличных частей"".'"), ТипЗначенияОбъект); + ВызватьИсключение ТекстОшибки; КонецЕсли; // Записан объект с уже заполненной табличной частью НаборыЗначенийДоступа. Таблица = Объект.НаборыЗначенийДоступа.Выгрузить(); @@ -4365,12 +5097,13 @@ "ЗаписатьЗависимыеНаборыЗначенийДоступа").Получить(ТипЗначенияОбъект) <> Неопределено; Если НЕ ЭтоВедущийОбъект Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Неверные параметры. |Тип объекта ""%1"" |не найден в подписке на события |""Записать зависимые наборы значений доступа"".'"), ТипЗначенияОбъект); + ВызватьИсключение ТекстОшибки; КонецЕсли; ПриИзмененииНаборовЗначенийДоступа(СсылкаНаОбъект, ОбновлениеИБ); @@ -4735,11 +5468,12 @@ Возврат; КонецЕсли; - ВызватьИсключение + ТекстОшибки = НСтр("ru = 'Для изменения административного доступа |требуется пароль пользователя сервиса. | |Операция может быть выполнена только интерактивно.'"); + ВызватьИсключение ТекстОшибки; КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса") Тогда @@ -5035,7 +5769,7 @@ Если СтрокаИзменений.ВидИзмененияСтроки <> 1 И СтрокаИзменений.ВидИзмененияСтроки <> -1 Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка в процедуре ОбновитьНаборыЗаписей |общего модуля УправлениеДоступомСлужебный. | @@ -5044,16 +5778,19 @@ | |Допустимо только 2 значения: ""1"" и ""-1"".'"), Строка(СтрокаИзменений.ВидИзмененияСтроки)); + ВызватьИсключение ТекстОшибки; КонецЕсли; КонецЦикла; - ВызватьИсключение + ТекстОшибки = НСтр("ru = 'Ошибка в процедуре ОбновитьНаборыЗаписей |общего модуля УправлениеДоступомСлужебный. | |Не удалось найти требуемую в строку |в значении параметра НовыеЗаписи.'"); + ВызватьИсключение ТекстОшибки; + КонецПроцедуры Процедура ЗаблокироватьОбластьНабораЗаписей(НаборЗаписей, ПолноеИмяРегистра = Неопределено) @@ -5708,9 +6445,10 @@ Для каждого ВидДоступа Из ВидыДоступа Цикл Если ВсеИменаВидовДоступа[ВРег(ВидДоступа.Имя)] <> Неопределено Тогда - ВызватьИсключение ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстОшибки = ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Имя вида доступа ""%1"" уже определено.'"), ВидДоступа.Имя); + ВызватьИсключение ТекстОшибки; КонецЕсли; // Проверка повторения типов значений и групп. @@ -5831,7 +6569,8 @@ |необходимый для перехода на новые версии программы |не указан в определяемом типе ""Значение доступа"".'"); - ВызватьИсключение Параметры.ЗаголовокОшибки + ОписаниеОшибки; + ТекстОшибки = Параметры.ЗаголовокОшибки + ОписаниеОшибки; + ВызватьИсключение ТекстОшибки; КонецЕсли; Возврат ОбщегоНазначения.ФиксированныеДанные(СвойстваВидовДоступа); @@ -5888,10 +6627,11 @@ Если Параметры.ТипыПодпискиОбновитьГруппыЗначенийДоступа.Получить(ТипОбъекта) = Неопределено И НЕ ОбщегоНазначения.ЭтоПеречисление(МетаданныеТипаЗначений) Тогда - ВызватьИсключение Параметры.ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстОшибки = Параметры.ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Тип значения доступа ""%1"", использующий группы значений, не указан |в определяемом типе ""Значение доступа с группами значений доступа объект"".'"), Строка(ТипОбъекта)); + ВызватьИсключение ТекстОшибки; КонецЕсли; КонецПроцедуры @@ -5903,9 +6643,10 @@ Если ПроверкаТиповГрупп Тогда Возврат; КонецЕсли; - ВызватьИсключение Параметры.ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстОшибки = Параметры.ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Для вида доступа ""%1"" не указан тип значений доступа.'"), ВидДоступа.Имя); + ВызватьИсключение ТекстОшибки; КонецЕсли; // Проверка, что указан тип ссылки. @@ -5919,8 +6660,9 @@ НСтр("ru = 'Тип ""%1"" указан, как тип значений, для вида доступа ""%2"". |Однако это не тип ссылки.'"); КонецЕсли; - ВызватьИсключение Параметры.ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстОшибки = Параметры.ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ОписаниеОшибки, Тип, ВидДоступа.Имя); + ВызватьИсключение ТекстОшибки; КонецЕсли; // Проверка повторения и пересечения типов значений и групп значений. @@ -5951,8 +6693,9 @@ Если ВсеТипы.Получить(Тип) <> Неопределено Тогда Если НЕ (ДляТогоЖеВидаДоступаОшибкиНет И ВидДоступа.Имя = ВсеТипы.Получить(Тип)) Тогда - ВызватьИсключение Параметры.ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстОшибки = Параметры.ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ОписаниеОшибки, Тип, ВсеТипы.Получить(Тип), ВидДоступа.Имя); + ВызватьИсключение ТекстОшибки; КонецЕсли; ИначеЕсли НЕ ПроверкаПересечения Тогда ВсеТипы.Вставить(Тип, ВидДоступа.Имя); @@ -5973,8 +6716,9 @@ КонецЕсли; Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда - ВызватьИсключение Параметры.ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстОшибки = Параметры.ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ОписаниеОшибки, Тип, ВидДоступа.Имя); + ВызватьИсключение ТекстОшибки; КонецЕсли; КонецПроцедуры @@ -6034,4 +6778,18689 @@ КонецФункции +#Область УниверсальноеОграничение + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики подписок на события. + +// Обработчик подписок ПроверитьДоступПередЗаписью* проверяет доступ к старой версии объекта, проверяет +// изменение полей объектов дополнительных таблиц, присоединенных в ограничениях доступа списков. +// Если изменения найдены, тогда регистрируется необходимость обновления ключей доступа +// для списков, у которых в ограничениях доступа присоединены дополнительные таблицы. +// +// Параметры: +// Источник - КонстантаМенеджер, +// СправочникОбъект, +// ДокументОбъект, +// ПланВидовХарактеристикОбъект, +// ПланСчетовОбъект, +// ПланВидовРасчетаОбъект, +// БизнесПроцессОбъект, +// ЗадачаОбъект, +// ПланОбменаОбъект - объект данных, передаваемый в подписку на событие ПередЗаписью. +// +// Отказ - Булево - параметр, передаваемый в подписку на событие ПередЗаписью. +// +// РежимЗаписи - РежимЗаписиДокумента - параметр, передаваемый в подписку на событие ПередЗаписью, +// когда Источник это ДокументОбъект. +// +// РежимПроведения - РежимПроведенияДокумента - параметр, передаваемый в подписку на событие ПередЗаписью, +// когда Источник это ДокументОбъект. +// +Процедура ПроверитьДоступПередЗаписью(Источник, Отказ, РежимЗаписи = Неопределено, РежимПроведения = Неопределено) Экспорт + + // ОбменДанными.Загрузка обрабатывается внутри процедуры нестандартно (с учетом проверки прав). + ПроверитьДоступПередЗаписьюИсточника(Источник, Отказ, Ложь, Ложь); + +КонецПроцедуры + +// Обработчик подписок ПроверитьДоступПередЗаписьюНабораЗаписей* проверяет доступ к старой версии набора записей, +// проверяет изменение полей наборов записей дополнительных таблиц, присоединенных в ограничениях доступа списков. +// Если изменения найдены, тогда регистрируется необходимость обновления ключей доступа +// для списков, у которых в ограничениях доступа присоединены дополнительные таблицы. +// +// Параметры: +// Источник - РегистрСведенийНаборЗаписей, +// РегистрНакопленияНаборЗаписей, +// РегистрБухгалтерииНаборЗаписей, +// РегистрРасчетаНаборЗаписей, +// ПерерасчетНаборЗаписей - набор записей, передаваемый в подписку +// на событие ПередЗаписью. +// +// Отказ - Булево - параметр, передаваемый в подписку на событие ПередЗаписью. +// Замещение - Булево - параметр, передаваемый в подписку на событие ПередЗаписью. +// +// ТолькоЗапись - Булево - параметр, передаваемый в подписку на событие ПередЗаписью, +// когда Источник это РегистрРасчетаНаборЗаписей. +// +// ЗаписьФактическогоПериодаДействия - Булево - параметр, передаваемый в подписку на событие ПередЗаписью, +// когда Источник это РегистрРасчетаНаборЗаписей. +// +// ЗаписьПерерасчетов - Булево - параметр, передаваемый в подписку на событие ПередЗаписью, +// когда Источник это РегистрРасчетаНаборЗаписей. +// +Процедура ПроверитьДоступПередЗаписьюНабораЗаписей(Источник, Отказ, + Замещение = Неопределено, + ТолькоЗапись = Неопределено, + ЗаписьФактическогоПериодаДействия = Неопределено, + ЗаписьПерерасчетов = Неопределено) Экспорт + + // ОбменДанными.Загрузка обрабатывается внутри процедуры нестандартно (с учетом проверки прав). + ПроверитьДоступПередЗаписьюИсточника(Источник, Отказ, Истина, Замещение); + +КонецПроцедуры + +// Обработчик подписок ПроверитьДоступПриЗаписи* проверяет устаревание ключа доступа +// новой версии объекта. Обновляет устаревший ключ доступа и, в этом случае, +// выполняет проверку прав Чтение и Изменение новой версии объекта. +// +// Параметры: +// Источник - КонстантаМенеджер, +// СправочникОбъект, +// ДокументОбъект, +// ПланВидовХарактеристикОбъект, +// ПланСчетовОбъект, +// ПланВидовРасчетаОбъект, +// БизнесПроцессОбъект, +// ЗадачаОбъект, +// ПланОбменаОбъект - объект данных, передаваемый в подписку на событие ПриЗаписи. +// +// Отказ - Булево - параметр, передаваемый в подписку на событие ПриЗаписи. +// +Процедура ПроверитьДоступПриЗаписи(Источник, Отказ) Экспорт + + // ОбменДанными.Загрузка обрабатывается внутри процедуры нестандартно (с учетом проверки прав). + ПроверитьДоступПриЗаписиИсточника(Источник, Отказ, Ложь, Ложь); + +КонецПроцедуры + +// Обработчик подписок ПроверитьДоступПриЗаписиНабораЗаписей* проверяет устаревание ключей доступа +// новой версии набора записей. Обновляет устаревшие ключи доступа и, в этом случае, +// выполняет проверку прав Чтение и Изменение новой версии набора записей. +// +// Параметры: +// Источник - РегистрСведенийНаборЗаписей, +// РегистрНакопленияНаборЗаписей, +// РегистрБухгалтерииНаборЗаписей, +// РегистрРасчетаНаборЗаписей, +// ПерерасчетНаборЗаписей - набор записей, передаваемый в подписку +// на событие ПриЗаписи. +// +// Отказ - Булево - параметр, передаваемый в подписку на событие ПриЗаписи. +// Замещение - Булево - параметр, передаваемый в подписку на событие ПриЗаписи. +// +// ТолькоЗапись - Булево - параметр, передаваемый в подписку на событие ПриЗаписи, +// когда Источник это РегистрРасчетаНаборЗаписей. +// +// ЗаписьФактическогоПериодаДействия - Булево - параметр, передаваемый в подписку на событие ПриЗаписи, +// когда Источник это РегистрРасчетаНаборЗаписей. +// +// ЗаписьПерерасчетов - Булево - параметр, передаваемый в подписку на событие ПриЗаписи, +// когда Источник это РегистрРасчетаНаборЗаписей. +// +Процедура ПроверитьДоступПриЗаписиНабораЗаписей(Источник, Отказ, + Замещение = Неопределено, + ТолькоЗапись = Неопределено, + ЗаписьФактическогоПериодаДействия = Неопределено, + ЗаписьПерерасчетов = Неопределено) Экспорт + + // ОбменДанными.Загрузка обрабатывается внутри процедуры нестандартно (с учетом проверки прав). + ПроверитьДоступПриЗаписиИсточника(Источник, Отказ, Истина, Замещение); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Универсальное ограничение доступа. + +Функция ДоступРазрешен(ОписаниеДанных, Изменение) Экспорт + + Если Пользователи.ЭтоПолноправныйПользователь() Тогда + Возврат Истина; + КонецЕсли; + + ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(ОписаниеДанных)); + Если ОбъектМетаданных = Неопределено Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Недопустимое значение параметра %1 в %2. + |Ожидалась ссылка или ключ записи. + |Передано значение: %3 (тип %4).'"), + "ОписаниеДанных", + ?(Изменение, "УправлениеДоступом.ИзменениеРазрешено", + "УправлениеДоступом.ЧтениеРазрешено"), + Строка(ОписаниеДанных), + Строка(ТипЗнч(ОписаниеДанных))); + ВызватьИсключение ТекстОшибки; + КонецЕсли; + + Если Не ПравоДоступа(?(Изменение, "Изменение", "Чтение"), ОбъектМетаданных) Тогда + Возврат Ложь; + КонецЕсли; + + Если Не ОграничиватьДоступНаУровнеЗаписейУниверсально() Тогда + Возврат Истина; + КонецЕсли; + + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + ИдентификаторТранзакции = Новый УникальныйИдентификатор; + ПараметрыОграничения = ПараметрыОграничения(ПолноеИмя, ИдентификаторТранзакции); + + Если ПараметрыОграничения.ОграничениеОтключено Тогда + Возврат Истина; + КонецЕсли; + + Если ПараметрыОграничения.ДоступЗапрещен Тогда + Возврат Ложь; + КонецЕсли; + + УстановитьОтключениеБезопасногоРежима(Истина); + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("АвторизованныйПользователь", Пользователи.АвторизованныйПользователь()); + Запрос.УстановитьПараметр("ГруппыДоступаАвторизованногоПользователя", + ПараметрыСеанса.ГруппыДоступаАвторизованногоПользователя); + + Запрос.Текст = ?(Изменение, ПараметрыОграничения.ТекстЗапросаПроверкиПравЧтениеИзменение, + ПараметрыОграничения.ТекстЗапросаПроверкиПраваЧтение); + + Если ПараметрыОграничения.ЭтоСсылочныйТип Тогда + СсылкаНаОбъект = ?(ОбщегоНазначения.ЭтоСсылка(ТипЗнч(ОписаниеДанных)), + ОписаниеДанных, ОписаниеДанных.Ссылка); + + Запрос.УстановитьПараметр("Объект", СсылкаНаОбъект); + + Если ПараметрыОграничения.ПолеВладельца <> Неопределено Тогда + Запрос.УстановитьПараметр("ИдентификаторТаблицыНастроекПрав", + ПараметрыОграничения.ИдентификаторТаблицыНастроекПрав); + КонецЕсли; + + ДоступРазрешен = Не Запрос.Выполнить().Пустой(); + Иначе + НаборЗаписей = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя).СоздатьНаборЗаписей(); + Для Каждого ЭлементОтбора Из НаборЗаписей.Отбор Цикл + ЭлементОтбора.Значение = ОписаниеДанных[ЭлементОтбора.Имя]; + ЭлементОтбора.Использование = Истина; + КонецЦикла; + ОтборПоИзмерениям = ОтборПоИзмерениямНабораЗаписей(НаборЗаписей, Запрос); + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | &ТекущаяТаблица КАК ТекущаяТаблица + |ГДЕ + | &ОтборПоИзмерениям"; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекущаяТаблица", ПолноеИмя); + Запрос.Текст = Запрос.Текст + ОбщегоНазначения.РазделительПакетаЗапросов() + ТекстЗапроса; + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтборПоИзмерениям", ОтборПоИзмерениям); + + РезультатыЗапроса = Запрос.ВыполнитьПакет(); + ДоступРазрешен = РезультатыЗапроса[0].Пустой() И Не РезультатыЗапроса[1].Пустой(); + КонецЕсли; + + УстановитьПривилегированныйРежим(Ложь); + УстановитьОтключениеБезопасногоРежима(Ложь); + + Возврат ДоступРазрешен; + +КонецФункции + +// Требуется, как начальная максимальная дата при планировании обновления доступа. +Функция МаксимальнаяДата() Экспорт + + Возврат '39991231235959'; + +КонецФункции + +// Для функции НастройкиВнедрения. +Функция ПолноеИмяXML(ПолноеИмя, ТипыТаблицПоИменам) + + СоставИмени = СтрРазделить(ПолноеИмя, ".", Ложь); + Свойства = ТипыТаблицПоИменам.Получить(ВРег(СоставИмени[0])); + + Возврат Свойства.ЯзыкАнглийский + "." + СоставИмени[1]; + +КонецФункции + +// Для процедуры ДобавитьТипыТребуемыеВОпределяемомТипе. +Функция ИмяТипаСсылки(ПолноеИмя, ТипыТаблицПоИменам) + + СоставИмени = СтрРазделить(ПолноеИмя, ".", Ложь); + Свойства = ТипыТаблицПоИменам.Получить(ВРег(СоставИмени[0])); + + Если Не Свойства.ЭтоСсылочныйТип Тогда + Возврат ""; + КонецЕсли; + + Если ВРег(Свойства.ЯзыкРусский) = ВРег(СоставИмени[0]) Тогда + ИмяТипа = Свойства.ЯзыкРусский + "Ссылка." + СоставИмени[1]; + Иначе + ИмяТипа = Свойства.ЯзыкАнглийский + "Ref." + СоставИмени[1]; + КонецЕсли; + + Возврат ИмяТипа; + +КонецФункции + +// Для функции НастройкиВнедрения. +Функция ИмяТипаСсылкиXML(ПолноеИмя, ТипыТаблицПоИменам) + + СоставИмени = СтрРазделить(ПолноеИмя, ".", Ложь); + Свойства = ТипыТаблицПоИменам.Получить(ВРег(СоставИмени[0])); + + Если Свойства.ЭтоСсылочныйТип Тогда + Возврат Свойства.ЯзыкАнглийский + "Ref." + СоставИмени[1]; + КонецЕсли; + + Возврат ""; + +КонецФункции + +// Для функции ДобавитьТипыТребуемыеВОпределяемомТипе. +Функция ИмяТипаОбъектаИлиНабораЗаписей(ПолноеИмя, ТипыТаблицПоИменам) + + СоставИмени = СтрРазделить(ПолноеИмя, ".", Ложь); + Свойства = ТипыТаблицПоИменам.Получить(ВРег(СоставИмени[0])); + ИмяТипа = ""; + + Если Свойства.ЭтоСсылочныйТип Тогда + Если ВРег(Свойства.ЯзыкРусский) = ВРег(СоставИмени[0]) Тогда + ИмяТипа = Свойства.ЯзыкРусский + "Объект." + СоставИмени[1]; + Иначе + ИмяТипа = Свойства.ЯзыкАнглийский + "Object." + СоставИмени[1]; + КонецЕсли; + КонецЕсли; + + Если СтрНачинаетсяС(Свойства.ИмяКоллекции, "Регистры") Тогда + Если ВРег(Свойства.ЯзыкРусский) = ВРег(СоставИмени[0]) Тогда + ИмяТипа = Свойства.ЯзыкРусский + "НаборЗаписей." + СоставИмени[1]; + Иначе + ИмяТипа = Свойства.ЯзыкАнглийский + "RecordSet." + СоставИмени[1]; + КонецЕсли; + КонецЕсли; + + Возврат ИмяТипа; + +КонецФункции + +// Для функции НастройкиВнедрения. +Функция ИмяТипаОбъектаИлиНабораЗаписейXML(ПолноеИмя, ТипыТаблицПоИменам) + + СоставИмени = СтрРазделить(ПолноеИмя, ".", Ложь); + Свойства = ТипыТаблицПоИменам.Получить(ВРег(СоставИмени[0])); + + Если Свойства.ЭтоСсылочныйТип Тогда + Возврат Свойства.ЯзыкАнглийский + "Object." + СоставИмени[1]; + КонецЕсли; + + Если СтрНачинаетсяС(Свойства.ИмяКоллекции, "Регистры") Тогда + Возврат Свойства.ЯзыкАнглийский + "RecordSet." + СоставИмени[1]; + КонецЕсли; + + Возврат ""; + +КонецФункции + +// Для функции НастройкиВнедрения. +Процедура ДобавитьОграниченияВРолях(ПолноеИмяXML, ПолноеИмя, ОграниченияВРолях, + СвойстваОграничений, ТипыИзмеренийРегистровКлючей, ТипыТаблицПоИменам, ПредопределенныеИдентификаторы) + + Свойства = СвойстваОграничений.Получить(ПолноеИмя); + Если Свойства <> Неопределено И Свойства.ДоступЗапрещен Тогда + Возврат; + КонецЕсли; + + ОграничениеВРоли = Новый Структура("ШаблонДляОбъекта, Параметры", Истина, Новый Массив); + ОграниченияВРолях.Вставить(ПолноеИмяXML, ОграничениеВРоли); + + Если Свойства = Неопределено Тогда + Возврат; + КонецЕсли; + + Если Свойства.ПолеВладельца <> Неопределено Тогда + ОграничениеВРоли.Параметры.Добавить(Свойства.ПолеВладельца.Имя); + Возврат; + КонецЕсли; + + Если Свойства.ОпорныеПоля = Неопределено + Или Не ЗначениеЗаполнено(Свойства.ОпорныеПоля) Тогда + Возврат; + КонецЕсли; + + ОграничениеВРоли.ШаблонДляОбъекта = Ложь; + + Если ЗначениеЗаполнено(Свойства.ИмяОтдельногоРегистраКлючей) Тогда + ПервыйПараметр = Свойства.ИмяОтдельногоРегистраКлючей; + + ДобавитьТипыИзмерения(Свойства.ИмяОтдельногоРегистраКлючей, + Свойства.ОпорныеПоля, ТипыИзмеренийРегистровКлючей, ТипыТаблицПоИменам, ПолноеИмя); + Иначе + ПервыйПараметр = + УправлениеДоступомСлужебныйПовтИсп.ОписаниеПредопределенногоИдентификатораОбъектаМетаданных(ПолноеИмя); + + ДобавитьТипыИзмерения("КлючиДоступаКРегистрам", + Свойства.ОпорныеПоля, ТипыИзмеренийРегистровКлючей, ТипыТаблицПоИменам, ПолноеИмя); + + ПредопределенныеИдентификаторы.Вставить(ПервыйПараметр, ПолноеИмя); + КонецЕсли; + + ОграничениеВРоли.Параметры.Добавить(ПервыйПараметр); + + Для Каждого ОпорноеПоле Из Свойства.ОпорныеПоля.Все Цикл + ОграничениеВРоли.Параметры.Добавить(ОпорноеПоле); + КонецЦикла; + +КонецПроцедуры + +// Для процедуры ДобавитьОграниченияВРолях. +Процедура ДобавитьТипыИзмерения(ИмяРегистраКлючей, ОпорныеПоля, ТипыИзмеренийРегистровКлючей, + ТипыТаблицПоИменам, ИмяИсходногоРегистра) + + ИмяРегистраXML = "InformationRegister." + ИмяРегистраКлючей; + + Если ОпорныеПоля.Все.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Если ИмяРегистраКлючей = "КлючиДоступаКРегистрам" Тогда + ТипыИзмерения = ТипыИзмеренийРегистровКлючей.Получить(ИмяРегистраXML); + Если ТипыИзмерения = Неопределено Тогда + ТипыИзмерения = Новый Массив; + ТипыИзмерения.Добавить("EnumRef.ДополнительныеЗначенияДоступа"); + ТипыИзмеренийРегистровКлючей.Вставить(ИмяРегистраXML, ТипыИзмерения); + КонецЕсли; + Для Каждого ХранилищеТиповПоля Из ОпорныеПоля.ТипыВсех Цикл + ТипыПоля = ХранилищеТиповПоля.Получить(); + Для Каждого Тип Из ТипыПоля.Типы() Цикл + ИмяТипаСсылки = ИмяТипаСсылкиXML(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), ТипыТаблицПоИменам); + Если ТипыИзмерения.Найти(ИмяТипаСсылки) = Неопределено Тогда + ТипыИзмерения.Добавить(ИмяТипаСсылки); + КонецЕсли; + КонецЦикла; + КонецЦикла; + Иначе + ТипыИзмерений = Новый Массив; + ТипыИзмеренийРегистровКлючей.Вставить(ИмяРегистраXML, ТипыИзмерений); + Индекс = 0; + Для Каждого ХранилищеТиповПоля Из ОпорныеПоля.ТипыВсех Цикл + ТипПоля = ХранилищеТиповПоля.Получить(); + ТипПоля = Новый ОписаниеТипов(ТипПоля, "EnumRef.ДополнительныеЗначенияДоступа"); + ИмяПоля = ОпорныеПоля.Все[Индекс]; + ТипыИзмерений.Добавить(Новый Структура("Регистр, Поле, Тип", ИмяИсходногоРегистра, ИмяПоля, ТипПоля)); + Индекс = Индекс + 1; + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +#Область ПроверкаДоступаПриИзменении + +// Для обработчиков подписок на событие ПередЗаписью. +Процедура ПроверитьДоступПередЗаписьюИсточника(Источник, Отказ, ЭтоНаборЗаписей, Замещение) + + Если ПропуститьПроверкуДоступа(Отказ, Источник) Тогда + Возврат; + КонецЕсли; + + ЭтоПолноправныйПользователь = Пользователи.ЭтоПолноправныйПользователь(); + + Источник.ДополнительныеСвойства.Вставить("УправлениеДоступомИдентификаторТранзакции", + Новый УникальныйИдентификатор); + + Если ЭтоПолноправныйПользователь Тогда + Если Источник.ДополнительныеСвойства.Свойство("ЗагрузкаДанныхИзРезервнойКопии") Тогда + // При загрузке из резервной копии не требуется выполнять никаких действий. + Возврат; + КонецЕсли; + Если Источник.ДополнительныеСвойства.Свойство("ПропуститьОбновлениеКлючейДоступа") Тогда + // Ключи доступа будут обновляться разработчиком самостоятельно. + Возврат; + КонецЕсли; + КонецЕсли; + + ЕстьСтараяВерсия = ЭтоНаборЗаписей И Замещение + Или Не ЭтоНаборЗаписей И Не Источник.ЭтоНовый(); + + Если ЕстьСтараяВерсия Тогда + ЗапомнитьДанныеВлияющиеНаЗависимыеКлючиДоступа(Источник, ЭтоНаборЗаписей, Замещение); + ПроверитьДоступКИсточнику(Источник, Истина, ЭтоНаборЗаписей, Замещение, ЭтоПолноправныйПользователь); + + ИначеЕсли Не ЭтоНаборЗаписей Тогда + УстановитьРазрешенныйКлючДоступаДляНовогоОбъекта(Источник, ЭтоПолноправныйПользователь); + КонецЕсли; + + Если ЭтоНаборЗаписей Тогда + ЗаписатьКлючиДоступаНовыхКомбинацийЗначенийОпорныхПолейПередЗаписью(Источник, ЭтоПолноправныйПользователь); + КонецЕсли; + +КонецПроцедуры + +// Для обработчиков подписок на событие ПриЗаписи. +Процедура ПроверитьДоступПриЗаписиИсточника(Источник, Отказ, ЭтоНаборЗаписей, Замещение) + + Если ПропуститьПроверкуДоступа(Отказ, Источник) Тогда + Возврат; + КонецЕсли; + + ЭтоПолноправныйПользователь = Пользователи.ЭтоПолноправныйПользователь(); + + Если ЭтоПолноправныйПользователь Тогда + Если Источник.ДополнительныеСвойства.Свойство("ЗагрузкаДанныхИзРезервнойКопии") Тогда + // При загрузке из резервной копии не требуется выполнять никаких действий. + Возврат; + КонецЕсли; + Если Источник.ДополнительныеСвойства.Свойство("ПропуститьОбновлениеКлючейДоступа") Тогда + // Ключи доступа будут обновляться разработчиком самостоятельно. + Возврат; + КонецЕсли; + КонецЕсли; + + // Проверка доступа к новой версии. + ПроверитьДоступКИсточнику(Источник, Ложь, ЭтоНаборЗаписей, Замещение, ЭтоПолноправныйПользователь); + + ЗапланироватьОбновлениеЗависимыхУстаревшихКлючейДоступа(Источник, ЭтоНаборЗаписей); + +КонецПроцедуры + +// Для процедур ПроверитьДоступПередЗаписьюИсточника, ПроверитьДоступПриЗаписиИсточника. +Функция ПропуститьПроверкуДоступа(Отказ, Источник) + + Если Отказ Тогда + Возврат Истина; + КонецЕсли; + + Если СтандартныеПодсистемыСервер.ЭтоИдентификаторОбъектаМетаданных(Источник) Тогда + Возврат Истина; + КонецЕсли; + + Если УправлениеДоступомСлужебныйПовтИсп.РазделенныеДанныеНедоступны() Тогда + Возврат Истина; + КонецЕсли; + + Если Не ОграничиватьДоступНаУровнеЗаписейУниверсально() Тогда + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +// Для процедуры ПроверитьДоступПередЗаписьюИсточника. +Процедура ЗапомнитьДанныеВлияющиеНаЗависимыеКлючиДоступа(Источник, ЭтоНаборЗаписей, Замещение) + + ПолноеИмя = Источник.Метаданные().ПолноеИмя(); + СвойстваСпискаКакВедущего = СвойстваСпискаКакВедущего(ПолноеИмя, + Источник.ДополнительныеСвойства.УправлениеДоступомИдентификаторТранзакции); + + Если СвойстваСпискаКакВедущего = Неопределено + Или СвойстваСпискаКакВедущего.ПоЗначениямПолей = Неопределено Тогда + + Источник.ДополнительныеСвойства.Вставить( + "УправлениеДоступомЗначенияПолейДляПроверкиИзмененияПриЗаписи"); + Возврат; + КонецЕсли; + + Запрос = Новый Запрос; + + Если ЭтоНаборЗаписей Тогда + ОтборПоИзмерениям = ОтборПоИзмерениямНабораЗаписей(Источник, Запрос); + Запрос.Текст = СтрЗаменить(СвойстваСпискаКакВедущего.ПоЗначениямПолей.ТекстЗапроса, + "&ОтборПоИзмерениям", ОтборПоИзмерениям); + Иначе + Запрос.Текст = СвойстваСпискаКакВедущего.ПоЗначениямПолей.ТекстЗапроса; + Запрос.УстановитьПараметр("СсылкаНаОбъект", Источник.Ссылка); + КонецЕсли; + + Источник.ДополнительныеСвойства.Вставить( + "УправлениеДоступомЗначенияПолейДляПроверкиИзмененияПриЗаписи", + Запрос.ВыполнитьПакет()); + +КонецПроцедуры + +// Для процедур ЗапомнитьДанныеВлияющиеНаЗависимыеКлючиДоступа, ПроверитьДоступКНаборуЗаписей. +Функция ОтборПоИзмерениямНабораЗаписей(НаборЗаписей, Запрос, ЗапросНовыхКомбинаций = Неопределено) + + ОтборПоИзмерениям = ""; + + Для Каждого ЭлементОтбора Из НаборЗаписей.Отбор Цикл + Если Не ЭлементОтбора.Использование Тогда + Продолжить; + КонецЕсли; + ОтборПоИзмерениям = ОтборПоИзмерениям + ?(ОтборПоИзмерениям = "", "", " + | И ") + "ТекущаяТаблица." + ЭлементОтбора.Имя + " = &ЗначениеПоля" + ЭлементОтбора.Имя; + + Запрос.УстановитьПараметр("ЗначениеПоля" + ЭлементОтбора.Имя, ЭлементОтбора.Значение); + Если ЗапросНовыхКомбинаций <> Неопределено Тогда + ЗапросНовыхКомбинаций.УстановитьПараметр("ЗначениеПоля" + ЭлементОтбора.Имя, ЭлементОтбора.Значение); + КонецЕсли; + КонецЦикла; + + Если ОтборПоИзмерениям = "" Тогда + ОтборПоИзмерениям = "ИСТИНА"; + КонецЕсли; + + Возврат ОтборПоИзмерениям; + +КонецФункции + +// Для процедуры ПроверитьДоступПередЗаписьюИсточника. +Процедура УстановитьРазрешенныйКлючДоступаДляНовогоОбъекта(Источник, ЭтоПолноправныйПользователь) + + Если ЭтоПолноправныйПользователь Тогда + Возврат; + КонецЕсли; + + УстановитьОтключениеБезопасногоРежима(Истина); + УстановитьПривилегированныйРежим(Истина); + + СсылкаНового = ПользователиСлужебный.СсылкаОбъекта(Источник); + РазрешенныйКлючДоступа = УправлениеДоступомСлужебныйПовтИсп.РазрешенныйКлючДоступа(); + + НаборЗаписей = РегистрыСведений.КлючиДоступаКОбъектам.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Объект.Установить(СсылкаНового); + + Запись = НаборЗаписей.Добавить(); + Запись.Объект = СсылкаНового; + Запись.КлючДоступаПользователей = РазрешенныйКлючДоступа; + Запись.КлючДоступаВнешнихПользователей = РазрешенныйКлючДоступа; + + НаборЗаписей.Записать(); + + УстановитьПривилегированныйРежим(Ложь); + УстановитьОтключениеБезопасногоРежима(Ложь); + +КонецПроцедуры + +// Для процедур ПроверитьДоступПередЗаписьюИсточника, ПроверитьДоступПриЗаписиИсточника. +Процедура ПроверитьДоступКИсточнику(Источник, ПередЗаписью, ЭтоНаборЗаписей, Замещение, ЭтоПолноправныйПользователь) + + Если ПередЗаписью И ЭтоПолноправныйПользователь Тогда + Возврат; + КонецЕсли; + + ПолноеИмя = Источник.Метаданные().ПолноеИмя(); + ИдентификаторТранзакции = Источник.ДополнительныеСвойства.УправлениеДоступомИдентификаторТранзакции; + ПараметрыОграничения = ПараметрыОграничения(ПолноеИмя, ИдентификаторТранзакции); + + Если ПараметрыОграничения.ОграничениеОтключено Тогда + Если Не ПередЗаписью + И ПараметрыОграничения.Свойство("ТекстЗапросаЭлементовДанныхСУстаревшимРазрешеннымКлючом") Тогда + + ОбновитьКлючиДоступаЭлементовДанныхПриЗаписи(Источник.Ссылка, + ПараметрыОграничения, ИдентификаторТранзакции); + КонецЕсли; + Возврат; + КонецЕсли; + + Если ПараметрыОграничения.ДоступЗапрещен Тогда + Если ЭтоПолноправныйПользователь Тогда + Возврат; + ИначеЕсли ПараметрыОграничения.ДляВнешнихПользователей Тогда + ШаблонОшибки = + НСтр("ru = 'Внешним пользователям запрещен доступ к данным списка + |""%1"".'"); + Иначе + ШаблонОшибки = + НСтр("ru = 'Пользователям запрещен доступ к данным списка + |""%1"".'"); + КонецЕсли; + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, + Источник.Метаданные().Представление()); + ВызватьИсключение ТекстОшибки; + КонецЕсли; + + Если ЭтоНаборЗаписей Тогда + ПроверитьДоступКНаборуЗаписей(Источник, + ПередЗаписью, Замещение, ПараметрыОграничения, ЭтоПолноправныйПользователь); + Иначе + ПроверитьДоступКОбъекту(Источник, + ПередЗаписью, ПараметрыОграничения, ЭтоПолноправныйПользователь); + КонецЕсли; + +КонецПроцедуры + +// Для процедуры ПроверитьДоступКИсточнику. +Процедура ПроверитьДоступКОбъекту(Источник, ПередЗаписью, ПараметрыОграничения, ЭтоПолноправныйПользователь) + + ЭтоНовый = Не Источник.ДополнительныеСвойства.Свойство( + "УправлениеДоступомЗначенияПолейДляПроверкиИзмененияПриЗаписи"); + + УстановитьОтключениеБезопасногоРежима(Истина); + УстановитьПривилегированныйРежим(Истина); + + Если Не ПередЗаписью Тогда + Если Не ЭтоНовый И Не КлючДоступаИсточникаУстарел(Источник.Ссылка, ПараметрыОграничения) Тогда + Возврат; + КонецЕсли; + ОбновитьКлючиДоступаЭлементовДанныхПриЗаписи(Источник.Ссылка, ПараметрыОграничения, + Источник.ДополнительныеСвойства.УправлениеДоступомИдентификаторТранзакции); + КонецЕсли; + + Если ЭтоПолноправныйПользователь Тогда + Возврат; + КонецЕсли; + + Запрос = Новый Запрос; + ПроверкаДобавления = Не ПередЗаписью И ПараметрыОграничения.ПолеВладельца = Неопределено; + + Если ПроверкаДобавления Тогда + Запрос.Текст = СтрЗаменить(ПараметрыОграничения.ТекстЗапросаПроверкиПравЧтениеИзменение, + "РазрешенныеКлючиДоступа.Изменение", "РазрешенныеКлючиДоступа.Добавление"); + Иначе + Запрос.Текст = ПараметрыОграничения.ТекстЗапросаПроверкиПравЧтениеИзменение; + КонецЕсли; + + Запрос.УстановитьПараметр("Объект", Источник.Ссылка); + Запрос.УстановитьПараметр("АвторизованныйПользователь", Пользователи.АвторизованныйПользователь()); + Запрос.УстановитьПараметр("ГруппыДоступаАвторизованногоПользователя", + ПараметрыСеанса.ГруппыДоступаАвторизованногоПользователя); + + Если ПараметрыОграничения.ПолеВладельца <> Неопределено Тогда + Запрос.УстановитьПараметр("ИдентификаторТаблицыНастроекПрав", + ПараметрыОграничения.ИдентификаторТаблицыНастроекПрав); + КонецЕсли; + + Если Не Запрос.Выполнить().Пустой() Тогда + Возврат; // Доступ разрешен. + КонецЕсли; + + Если ПроверкаДобавления Тогда + Запрос.Текст = ПараметрыОграничения.ТекстЗапросаПроверкиПравЧтениеИзменение; + ПравоИзменения = Не Запрос.Выполнить().Пустой(); + Иначе + ПравоИзменения = Ложь; + КонецЕсли; + + Если ПараметрыОграничения.ОграничениеЧтенияОтключено Тогда + ПравоЧтения = Истина; + Иначе + Запрос.Текст = ПараметрыОграничения.ТекстЗапросаПроверкиПраваЧтение; + ПравоЧтения = Не Запрос.Выполнить().Пустой(); + КонецЕсли; + + УстановитьПривилегированныйРежим(Ложь); + УстановитьОтключениеБезопасногоРежима(Ложь); + + Данные = ?(ПередЗаписью, Источник.Ссылка, Источник); + СообщитьОбОшибкеДоступа(Данные, ПередЗаписью, ПравоЧтения, ПравоИзменения, ЭтоНовый); + +КонецПроцедуры + +// Для процедуры ПроверитьДоступКИсточнику. +Процедура ПроверитьДоступКНаборуЗаписей(Источник, ПередЗаписью, Замещение, ПараметрыОграничения, ЭтоПолноправныйПользователь) + + Если ПередЗаписью И (Не Замещение Или ЭтоПолноправныйПользователь) + Или Не ПередЗаписью И Источник.Количество() = 0 + Или ЭтоПолноправныйПользователь + И ПараметрыОграничения.ИспользуетсяОграничениеПоВладельцу Тогда + + Возврат; + КонецЕсли; + + Запрос = Новый Запрос; + Если Не ПередЗаписью Тогда + ЗапросНовыхКомбинаций = Новый Запрос; + КонецЕсли; + + Если Замещение Тогда + ОтборПоИзмерениям = ОтборПоИзмерениямНабораЗаписей(Источник, Запрос, ЗапросНовыхКомбинаций); + Иначе + ОтборПоИзмерениям = ""; + КомбинацииЗначенийОпорныхПолей = КомбинацииЗначенийОпорныхПолей(Источник, + ОтборПоИзмерениям, ПараметрыОграничения); + + Запрос.УстановитьПараметр("КомбинацииЗначенийОпорныхПолей", КомбинацииЗначенийОпорныхПолей); + ЗапросНовыхКомбинаций.УстановитьПараметр("КомбинацииЗначенийОпорныхПолей", КомбинацииЗначенийОпорныхПолей); + КонецЕсли; + + УстановитьОтключениеБезопасногоРежима(Истина); + УстановитьПривилегированныйРежим(Истина); + + Если Не ПередЗаписью + И Не ПараметрыОграничения.ИспользуетсяОграничениеПоВладельцу Тогда + + ОбновитьКлючиДоступаНовыхКомбинацийЗначенийОпорныхПолей(ЗапросНовыхКомбинаций, + ОтборПоИзмерениям, Источник, ПараметрыОграничения); + КонецЕсли; + + Если ЭтоПолноправныйПользователь Тогда + Возврат; + КонецЕсли; + + Запрос.Текст = СтрЗаменить(ПараметрыОграничения.ТекстЗапросаПроверкиПравЧтениеИзменение, + "&ОтборПоИзмерениям", ОтборПоИзмерениям); + + Запрос.УстановитьПараметр("АвторизованныйПользователь", Пользователи.АвторизованныйПользователь()); + Запрос.УстановитьПараметр("ГруппыДоступаАвторизованногоПользователя", + ПараметрыСеанса.ГруппыДоступаАвторизованногоПользователя); + + Если Запрос.Выполнить().Пустой() Тогда + Возврат; // Доступ разрешен. + КонецЕсли; + + Если ПараметрыОграничения.ОграничениеЧтенияОтключено Тогда + ПравоЧтения = Истина; + Иначе + Запрос.Текст = СтрЗаменить(ПараметрыОграничения.ТекстЗапросаПроверкиПраваЧтение, + "&ОтборПоИзмерениям", ОтборПоИзмерениям); + ПравоЧтения = Запрос.Выполнить().Пустой(); + КонецЕсли; + + УстановитьПривилегированныйРежим(Ложь); + УстановитьОтключениеБезопасногоРежима(Ложь); + + СообщитьОбОшибкеДоступа(Источник, ПередЗаписью, ПравоЧтения, Ложь, Ложь); + +КонецПроцедуры + +// Для процедуры ПроверитьДоступПередЗаписьюИсточника. +Процедура ЗаписатьКлючиДоступаНовыхКомбинацийЗначенийОпорныхПолейПередЗаписью(Источник, ЭтоПолноправныйПользователь) + + Если ЭтоПолноправныйПользователь Или Источник.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ПолноеИмя = Источник.Метаданные().ПолноеИмя(); + ИдентификаторТранзакции = Источник.ДополнительныеСвойства.УправлениеДоступомИдентификаторТранзакции; + ПараметрыОграничения = ПараметрыОграничения(ПолноеИмя, ИдентификаторТранзакции); + + Если ПараметрыОграничения.ИспользуетсяОграничениеПоВладельцу Тогда + Возврат; + КонецЕсли; + + ЗапросНовыхКомбинаций = Новый Запрос; + ОтборПоИзмерениям = ""; + + ЗапросНовыхКомбинаций.УстановитьПараметр("КомбинацииЗначенийОпорныхПолей", + КомбинацииЗначенийОпорныхПолей(Источник, ОтборПоИзмерениям, ПараметрыОграничения)); + + УстановитьОтключениеБезопасногоРежима(Истина); + УстановитьПривилегированныйРежим(Истина); + + ОбновитьКлючиДоступаНовыхКомбинацийЗначенийОпорныхПолей(ЗапросНовыхКомбинаций, + ОтборПоИзмерениям, Источник, ПараметрыОграничения); + + УстановитьПривилегированныйРежим(Ложь); + УстановитьОтключениеБезопасногоРежима(Ложь); + +КонецПроцедуры + +// Для процедур ПроверитьДоступКНаборуЗаписей, +// ЗаписатьКлючиДоступаНовыхКомбинацийЗначенийОпорныхПолейПередЗаписью. +// +Функция КомбинацииЗначенийОпорныхПолей(Источник, ОтборПоИзмерениям, ПараметрыОграничения) + + Поля = СтрСоединить(ПараметрыОграничения.ОпорныеПоля.Используемые, ","); + КомбинацииЗначенийОпорныхПолей = Источник.Выгрузить(, Поля); + КомбинацииЗначенийОпорныхПолей.Свернуть(Поля); + + ПоляОтбора = ""; + Для Каждого Поле Из ПараметрыОграничения.ОпорныеПоля.Используемые Цикл + ПоляОтбора = ПоляОтбора + ?(ПоляОтбора = "", "", ", ") + "ТекущаяТаблица." + Поле; + КонецЦикла; + ОтборПоИзмерениям = "(" + ПоляОтбора + ") В (&КомбинацииЗначенийОпорныхПолей)"; + + Возврат КомбинацииЗначенийОпорныхПолей; + +КонецФункции + +// Для процедур ПроверитьДоступКНаборуЗаписей, +// ЗаписатьКлючиДоступаНовыхКомбинацийЗначенийОпорныхПолейПередЗаписью. +// +Процедура ОбновитьКлючиДоступаНовыхКомбинацийЗначенийОпорныхПолей(ЗапросНовыхКомбинаций, + ОтборПоИзмерениям, Источник, ПараметрыОграничения) + + ЗапросНовыхКомбинаций.Текст = + СтрЗаменить(ПараметрыОграничения.ТекстЗапросаНовыхКомбинацийЗначенийОпорныхПолей, + "&ОтборПоИзмерениям", ОтборПоИзмерениям); + + РезультатЗапросаНовыхКомбинаций = ЗапросНовыхКомбинаций.Выполнить(); + Если РезультатЗапросаНовыхКомбинаций.Пустой() Тогда + Возврат; + КонецЕсли; + + ЭлементыДанных = РезультатЗапросаНовыхКомбинаций.Выгрузить(); + ЭлементыДанных.Колонки.Добавить("ТекущаяСсылка", Новый ОписаниеТипов("Число")); + Индекс = 0; + Для Каждого ЭлементДанных Из ЭлементыДанных Цикл + ЭлементДанных.ТекущаяСсылка = Индекс; + Индекс = Индекс + 1; + КонецЦикла; + + ОбновитьКлючиДоступаЭлементовДанныхПриЗаписи(ЭлементыДанных, ПараметрыОграничения, + Источник.ДополнительныеСвойства.УправлениеДоступомИдентификаторТранзакции); + +КонецПроцедуры + +// Для процедур ПроверитьДоступКОбъекту, ПроверитьДоступКНаборуЗаписей. +Процедура СообщитьОбОшибкеДоступа(Данные, ПередЗаписью, ПравоЧтения, ПравоИзменения, ЭтоНовый) + + Если ПередЗаписью Тогда + Если ПравоЧтения Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Недостаточно прав для изменения существующей версии: + |%1'"), ПредставлениеДанных(Данные)); + Иначе + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Недостаточно прав для чтения существующей версии: + |%1'"), ПредставлениеДанных(Данные)); + КонецЕсли; + Иначе + Если ПравоЧтения И ПравоИзменения Тогда + Если ЭтоНовый Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Недостаточно прав для записи новой версии (нет права добавления): + |%1'"), ПредставлениеДанных(Данные)); + Иначе + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Недостаточно прав для записи новой версии (нет права добавления для сделанных изменений): + |%1'"), ПредставлениеДанных(Данные)); + КонецЕсли; + ИначеЕсли ПравоЧтения Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Недостаточно прав для записи новой версии (ее невозможно будет изменить): + |%1'"), ПредставлениеДанных(Данные)); + Иначе + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Недостаточно прав для записи новой версии (ее невозможно будет прочитать): + |%1.'"), ПредставлениеДанных(Данные)); + КонецЕсли; + КонецЕсли; + + ВызватьИсключение ТекстОшибки; + +КонецПроцедуры + +// Для процедуры СообщитьОбОшибкеДоступа. +Функция ПредставлениеДанных(Данные) + + Если ТипЗнч(Данные) = Тип("Строка") Тогда + Возврат СокрЛП(Данные); + КонецЕсли; + + Если ТипЗнч(Данные) = Тип("Структура") Тогда + ЭтоРегистр = Истина; + Если ТипЗнч(Данные.Регистр) = Тип("Строка") Тогда + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(Данные.Регистр); + Иначе + ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(Данные.Регистр)); + КонецЕсли; + Иначе + ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(Данные)); + ЭтоРегистр = ОбщегоНазначения.ЭтоРегистр(ОбъектМетаданных); + КонецЕсли; + + Если ОбъектМетаданных = Неопределено Тогда + Возврат ""; + КонецЕсли; + + Если ЭтоРегистр Тогда + ПредставлениеДанных = ОбъектМетаданных.Представление(); + + КоличествоПолей = 0; + Для каждого ЭлементОтбора Из Данные.Отбор Цикл + Если ЭлементОтбора.Использование Тогда + КоличествоПолей = КоличествоПолей + 1; + КонецЕсли; + КонецЦикла; + + Если КоличествоПолей = 1 Тогда + ПредставлениеДанных = ПредставлениеДанных + + " " + НСтр("ru = 'с полем'") + " " + Строка(Данные.Отбор); + + ИначеЕсли КоличествоПолей > 1 Тогда + ПредставлениеДанных = ПредставлениеДанных + + " " + НСтр("ru = 'с полями'") + " " + Строка(Данные.Отбор); + КонецЕсли; + Иначе + ПредставлениеДанных = Строка(Данные); + + Свойства = Новый Структура("РасширенноеПредставлениеОбъекта, ПредставлениеОбъекта"); + ЗаполнитьЗначенияСвойств(Свойства, ОбъектМетаданных); + + ПредставлениеМетаданных = Свойства.РасширенноеПредставлениеОбъекта; + Если Не ЗначениеЗаполнено(ПредставлениеМетаданных) Тогда + ПредставлениеМетаданных = Свойства.ПредставлениеОбъекта; + КонецЕсли; + Если Не ЗначениеЗаполнено(ПредставлениеМетаданных) Тогда + ПредставлениеМетаданных = ОбъектМетаданных.Представление(); + КонецЕсли; + + Если Не СтрЗаканчиваетсяНа(ПредставлениеДанных, "(" + ПредставлениеМетаданных + ")") + И Не СтрНачинаетсяС(ПредставлениеДанных, ПредставлениеМетаданных) Тогда + + ПредставлениеДанных = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1 (%2)", + ПредставлениеДанных, ПредставлениеМетаданных); + КонецЕсли; + КонецЕсли; + + Возврат ПредставлениеДанных; + +КонецФункции + +// Для процедуры ПроверитьДоступКОбъекту и формы ОбновлениеДоступаРучноеУправление. +Функция КлючДоступаИсточникаУстарел(СсылкаНаОбъект, ПараметрыОграничения) Экспорт + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект); + + УстановитьТекстЗапросаЭлементовДанныхДляОбработки(Запрос, ПараметрыОграничения); + + Если ПараметрыОграничения.СписокСДатой Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, + "ТекущийСписок.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания", "ТекущийСписок.Ссылка = &Ссылка"); + Иначе + Запрос.Текст = СтрЗаменить(Запрос.Текст, + "ТекущийСписок.Ссылка >= &ПоследняяОбработаннаяСсылка", "ТекущийСписок.Ссылка = &Ссылка"); + КонецЕсли; + + УстановитьОтключениеБезопасногоРежима(Истина); + УстановитьПривилегированныйРежим(Истина); + + Если Запрос.Выполнить().Пустой() Тогда + Возврат Ложь; + КонецЕсли; + + УстановитьПривилегированныйРежим(Ложь); + УстановитьОтключениеБезопасногоРежима(Ложь); + + Возврат Истина; + +КонецФункции + +// Для процедур ПроверитьДоступКОбъекту, ПроверитьДоступКНаборуЗаписей и формы ОбновлениеДоступаРучноеУправление. +Процедура ОбновитьКлючиДоступаЭлементовДанныхПриЗаписи(ОписаниеЭлементовДанных, ПараметрыОграничения, + ИдентификаторТранзакции, ОбновитьПраваНаКлючи = Ложь, ЕстьИзмененияПрав = Ложь) Экспорт + + Если ТипЗнч(ОписаниеЭлементовДанных) = Тип("ТаблицаЗначений") Тогда + ЭлементыДанных = ОписаниеЭлементовДанных; + Иначе + ЭлементыДанных = Новый ТаблицаЗначений; + ЭлементыДанных.Колонки.Добавить("ТекущаяСсылка"); + ЭлементыДанных.Добавить().ТекущаяСсылка = ОписаниеЭлементовДанных; + КонецЕсли; + + СвойстваСпискаКакВедущего = СвойстваСпискаКакВедущего(ПараметрыОграничения.Список, + ИдентификаторТранзакции); + ИмяСвойстваВидаПользователей = ?(ПараметрыОграничения.ДляВнешнихПользователей, + "ДляВнешнихПользователей", "ДляПользователей"); + + ПараметрыОбновления = Новый Структура(ПараметрыОграничения); + ПараметрыОбновления.Вставить("ЕстьИзмененияПрав", ЕстьИзмененияПрав); + ПараметрыОбновления.Вставить("ОбновитьПраваНаКлючи", ОбновитьПраваНаКлючи); + ПараметрыОбновления.Вставить("ИдентификаторТранзакции", ИдентификаторТранзакции); + ПараметрыОбновления.Вставить("ИдентификаторСписка", + ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ПараметрыОграничения.Список)); + + Если СвойстваСпискаКакВедущего = Неопределено + Или СвойстваСпискаКакВедущего.ПоКлючамДоступа = Неопределено + Или СвойстваСпискаКакВедущего.ПоКлючамДоступа[ИмяСвойстваВидаПользователей] = Неопределено Тогда + + ПараметрыОбновления.Вставить("ЗависимыеСпискиПоКлючамДоступа", Новый Массив); + Иначе + ПараметрыОбновления.Вставить("ЗависимыеСпискиПоКлючамДоступа", + СвойстваСпискаКакВедущего.ПоКлючамДоступа[ИмяСвойстваВидаПользователей]); + КонецЕсли; + + Если ПараметрыОграничения.ОграничениеОтключено + Или ПараметрыОграничения.ДоступЗапрещен + Или ПараметрыОграничения.ИспользуетсяОграничениеПоВладельцу Тогда + + Если Не ПараметрыОграничения.Свойство("ТекстЗапросаЭлементовДанныхДляОчисткиКлючей") Тогда + ОбновитьЭлементыДанныхСпискаСУстаревшимРазрешеннымКлючом(ЭлементыДанных, ПараметрыОбновления); + + ИначеЕсли ЗначениеЗаполнено(ПараметрыОграничения.ТекстЗапросаЭлементовДанныхДляОчисткиКлючей) Тогда + ОчиститьКлючиДоступаЭлементовДанныхСписка(ЭлементыДанных, ПараметрыОбновления); + Иначе + Возврат; + КонецЕсли; + Иначе + КонтекстОбновления = Новый Структура; + КонтекстОбновления.Вставить("ПорцияЭлементовДанных", ЭлементыДанных); + КонтекстОбновления.Вставить("ЗапросЗначенийЭлементовДанных", + Новый Запрос(ПараметрыОграничения.ТекстЗапросаЗначенийЭлементовДанныхДляКлючейДоступа)); + КонтекстОбновления.Вставить("ЗапросЗначенийКлючей", + Новый Запрос(ПараметрыОграничения.ТекстЗапросаЗначенийИзКлючейДоступаДляСравнения)); + + ОбновитьКлючиДоступаПорцииЭлементовДанныхСписка(ПараметрыОбновления, КонтекстОбновления); + КонецЕсли; + + ЕстьИзмененияПрав = ПараметрыОбновления.ЕстьИзмененияПрав; + +КонецПроцедуры + +// Для процедур ЗапланироватьОбновлениеЗависимыхУстаревшихКлючейДоступа. +Процедура ЗапланироватьОбновлениеУстаревшихКлючейДоступаИсточника(Источник, СпискиДляОбновления = Неопределено) + + ИдентификаторТранзакции = Источник.ДополнительныеСвойства.УправлениеДоступомИдентификаторТранзакции; + Если СпискиДляОбновления = Неопределено Тогда + СпискиДляОбновления = Новый Соответствие; + Свойства = Новый Структура("ДляПользователей, ДляВнешнихПользователей", Истина, Ложь); + СпискиДляОбновления.Вставить(Источник.Метаданные().ПолноеИмя(), Свойства); + КонецЕсли; + + ЗапланироватьОбновлениеУстаревшихКлючейДоступа(СпискиДляОбновления, ИдентификаторТранзакции); + +КонецПроцедуры + +// Для регистра сведений ГруппыЗначенийДоступа. +Процедура ЗапланироватьОбновлениеЗависимыхСписковПоЗначениямСГруппами(ТипыЗначенийСИзменениями) Экспорт + + Если Не ОграничиватьДоступНаУровнеЗаписейУниверсально() Тогда + Возврат; + КонецЕсли; + + ИдентификаторТранзакции = Новый УникальныйИдентификатор; + + СпискиДляОбновления = Новый Соответствие; + Для Каждого ОписаниеТипаЗначенияДоступа Из ТипыЗначенийСИзменениями Цикл + ПолноеИмяВедущего = Метаданные.НайтиПоТипу(ОписаниеТипаЗначенияДоступа.Ключ).ПолноеИмя(); + СвойстваСпискаКакВедущего = СвойстваСпискаКакВедущего(ПолноеИмяВедущего, ИдентификаторТранзакции); + Если СвойстваСпискаКакВедущего = Неопределено + Или СвойстваСпискаКакВедущего.ПоЗначениямСГруппами = Неопределено Тогда + Продолжить; + КонецЕсли; + ДобавитьСпискиДляОбновленияДляВидаПользователей(СпискиДляОбновления, + СвойстваСпискаКакВедущего.ПоЗначениямСГруппами, "ДляПользователей"); + + ДобавитьСпискиДляОбновленияДляВидаПользователей(СпискиДляОбновления, + СвойстваСпискаКакВедущего.ПоЗначениямСГруппами, "ДляВнешнихПользователей"); + КонецЦикла; + + ЗапланироватьОбновлениеУстаревшихКлючейДоступа(СпискиДляОбновления, ИдентификаторТранзакции); + +КонецПроцедуры + +// Для процедуры ЗапланироватьОбновлениеЗависимыхСписковПоЗначениямСГруппами. +Процедура ДобавитьСпискиДляОбновленияДляВидаПользователей(СпискиДляОбновления, ПоЗначениямСГруппами, ИмяВидаПользователей) + + ПолныеИмена = ПоЗначениямСГруппами[ИмяВидаПользователей]; + Если ПолныеИмена = Неопределено Тогда + Возврат; + КонецЕсли; + + Для Каждого ПолноеИмя Из ПолныеИмена Цикл + СписокДляОбновления = СпискиДляОбновления.Получить(ПолноеИмя); + Если СписокДляОбновления = Неопределено Тогда + СписокДляОбновления = Новый Структура("ДляПользователей, ДляВнешнихПользователей", Ложь, Ложь); + СпискиДляОбновления.Вставить(ПолноеИмя, СписокДляОбновления); + КонецЕсли; + СписокДляОбновления[ИмяВидаПользователей] = Истина; + КонецЦикла; + +КонецПроцедуры + +// Для процедур ЗапланироватьОбновлениеУстаревшихКлючейДоступаИсточника, ЗаписатьКлючиДоступаОбъектов, +// ЗапланироватьОбновлениеЗависимыхСписковПоЗначениямСГруппами. +// +Процедура ЗапланироватьОбновлениеУстаревшихКлючейДоступа(СпискиДляОбновления, ИдентификаторТранзакции) + + Если СпискиДляОбновления.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + НаборЗаписей = СлужебныйНаборЗаписей(РегистрыСведений.ОбновлениеКлючейДоступаКДанным); + + Контекст = Новый Структура; + Контекст.Вставить("ИдентификаторТранзакции", ИдентификаторТранзакции); + Контекст.Вставить("НаборЗаписей", НаборЗаписей); + Контекст.Вставить("КлючУникальности", Новый УникальныйИдентификатор); + Контекст.Вставить("ТекущаяДата", ТекущаяДатаСеанса()); + Контекст.Вставить("МаксимальнаяДата", МаксимальнаяДата()); + Контекст.Вставить("Список", Неопределено); + Контекст.Вставить("ПолноеИмя", Неопределено); + + Для Каждого ОписаниеСписка Из СпискиДляОбновления Цикл + Контекст.ПолноеИмя = ОписаниеСписка.Ключ; + Контекст.Список = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Контекст.ПолноеИмя); + + Если ОписаниеСписка.Значение.ДляПользователей Тогда + ЗапланироватьОбновлениеУстаревшихКлючейДоступаДляВидаПользователей(Контекст, Ложь) + КонецЕсли; + + Если ОписаниеСписка.Значение.ДляВнешнихПользователей Тогда + ЗапланироватьОбновлениеУстаревшихКлючейДоступаДляВидаПользователей(Контекст, Истина) + КонецЕсли; + КонецЦикла; + + Если НаборЗаписей.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + НаборЗаписей.Записать(Ложь); + + УстановитьОбновлениеДоступа(Истина); + +КонецПроцедуры + +// Для процедуры ЗапланироватьОбновлениеУстаревшихКлючейДоступа. +Процедура ЗапланироватьОбновлениеУстаревшихКлючейДоступаДляВидаПользователей(Контекст, ДляВнешнихПользователей) + + ПараметрыОграничения = ПараметрыОграничения(Контекст.ПолноеИмя, + Контекст.ИдентификаторТранзакции, ДляВнешнихПользователей); + + Если ПараметрыОграничения.ОграничениеОтключено + Или ПараметрыОграничения.ДоступЗапрещен + Или ПараметрыОграничения.ИспользуетсяОграничениеПоВладельцу Тогда + Возврат; + КонецЕсли; + + НоваяЗапись = Контекст.НаборЗаписей.Добавить(); + НоваяЗапись.КлючУникальности = Контекст.КлючУникальности; + НоваяЗапись.Список = Контекст.Список; + НоваяЗапись.ДляВнешнихПользователей = ДляВнешнихПользователей; + НоваяЗапись.ДатаПоследнегоОбновленногоЭлемента = Контекст.МаксимальнаяДата; + НоваяЗапись.ДатаИзмененияЗаписиРегистра = Контекст.ТекущаяДата; + +КонецПроцедуры + +// Для процедуры ПроверитьДоступПриЗаписиИсточника. +Процедура ЗапланироватьОбновлениеЗависимыхУстаревшихКлючейДоступа(Источник, ЭтоНаборЗаписей) + + УстановитьОтключениеБезопасногоРежима(Истина); + УстановитьПривилегированныйРежим(Истина); + + ПолноеИмя = Источник.Метаданные().ПолноеИмя(); + СвойстваСпискаКакВедущего = СвойстваСпискаКакВедущего(ПолноеИмя, + Источник.ДополнительныеСвойства.УправлениеДоступомИдентификаторТранзакции); + + Если СвойстваСпискаКакВедущего = Неопределено + Или СвойстваСпискаКакВедущего.ПоЗначениямПолей = Неопределено + Или Не Источник.ДополнительныеСвойства.Свойство("УправлениеДоступомЗначенияПолейДляПроверкиИзмененияПриЗаписи") Тогда + Возврат; + КонецЕсли; + + РезультатыЗапроса = Источник.ДополнительныеСвойства.УправлениеДоступомЗначенияПолейДляПроверкиИзмененияПриЗаписи; + Если РезультатыЗапроса = Неопределено Тогда + Возврат; + КонецЕсли; + + СпискиДляОбновления = Новый Соответствие; + ПоЗначениямПолей = СвойстваСпискаКакВедущего.ПоЗначениямПолей; + + Если ЭтоНаборЗаписей Тогда + Если ЗначениеЗаполнено(ПоЗначениямПолей.ПоляРегистра.Поля) + И ТаблицаИзменена(РезультатыЗапроса[0], Источник, ПоЗначениямПолей.ПоляРегистра) Тогда + + ДобавитьСпискиДляОбновления(СпискиДляОбновления, ПоЗначениямПолей.ПоляРегистра.ЗависимыеСписки); + КонецЕсли; + Иначе + Если ЗначениеЗаполнено(ПоЗначениямПолей.ПоляШапки) Тогда + СтарыеЗначения = РезультатыЗапроса[0].Выгрузить()[0]; + Для Каждого ОписаниеПоля Из ПоЗначениямПолей.ПоляШапки Цикл + Если Источник[ОписаниеПоля.Ключ] <> СтарыеЗначения[ОписаниеПоля.Ключ] Тогда + ДобавитьСпискиДляОбновления(СпискиДляОбновления, ОписаниеПоля.Значение); + КонецЕсли; + КонецЦикла; + Индекс = 1; + Иначе + Индекс = 0; + КонецЕсли; + Для Каждого ОписаниеТабличнойЧасти Из ПоЗначениямПолей.ТабличныеЧасти Цикл + Если ТаблицаИзменена(РезультатыЗапроса[Индекс], Источник[ОписаниеТабличнойЧасти.Имя], + ОписаниеТабличнойЧасти) Тогда + + ДобавитьСпискиДляОбновления(СпискиДляОбновления, + ОписаниеТабличнойЧасти.ЗависимыеСписки); + КонецЕсли; + Индекс = Индекс + 1; + КонецЦикла; + КонецЕсли; + + ЗапланироватьОбновлениеУстаревшихКлючейДоступаИсточника(Источник, СпискиДляОбновления); + + УстановитьПривилегированныйРежим(Ложь); + УстановитьОтключениеБезопасногоРежима(Ложь); + +КонецПроцедуры + +// Для процедуры ЗапланироватьОбновлениеЗависимыхУстаревшихКлючейДоступа. +Функция ТаблицаИзменена(РезультатЗапроса, Источник, ОписаниеПолей) + + МаксимумКомбинаций = МаксимальноеКоличествоКомбинацийЗначенийВедущихПолейПриВычисленииСоставаИзмененных(); + Выборка = РезультатЗапроса.Выбрать(); + + Если Выборка.Количество() >= МаксимумКомбинаций Тогда + Возврат Истина; + КонецЕсли; + + Поля = СтрСоединить(ОписаниеПолей.Поля, ", "); + + НовыеКомбинации = Источник.Выгрузить(, Поля); + НовыеКомбинации.Свернуть(Поля); + + Если НовыеКомбинации.Количество() >= МаксимумКомбинаций Тогда + Возврат Истина; + КонецЕсли; + + НовыеКомбинации.Колонки.Добавить("ВидИзменения", Новый ОписаниеТипов("Число")); + НовыеКомбинации.ЗаполнитьЗначения(1, "ВидИзменения"); + Пока Выборка.Следующий() Цикл + НоваяСтрока = НовыеКомбинации.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка); + НоваяСтрока.ВидИзменения = -1; + КонецЦикла; + НовыеКомбинации.Свернуть(Поля, "ВидИзменения"); + + Отбор = Новый Структура("ВидИзменения", 0); + Возврат НовыеКомбинации.Количество() <> НовыеКомбинации.НайтиСтроки(Отбор).Количество(); + +КонецФункции + +// Для процедуры ДобавитьСоставОбновленияКлючейДоступаКСписку. +Процедура ДобавитьСпискиДляОбновления(СпискиДляОбновления, ЗависимыеСписки) + + Для Каждого ОписаниеЗависимогоСписка Из ЗависимыеСписки Цикл + Свойства = СпискиДляОбновления.Получить(ОписаниеЗависимогоСписка.Ключ); + Если Свойства = Неопределено Тогда + Свойства = Новый Структура("ДляПользователей, ДляВнешнихПользователей", Ложь, Ложь); + СпискиДляОбновления.Вставить(ОписаниеЗависимогоСписка.Ключ, Свойства); + КонецЕсли; + Если ОписаниеЗависимогоСписка.Значение.ДляПользователей Тогда + Свойства.ДляПользователей = Истина; + КонецЕсли; + Если ОписаниеЗависимогоСписка.Значение.ДляВнешнихПользователей Тогда + Свойства.ДляВнешнихПользователей = Истина; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Для вызова и модуля менеджера справочника ГруппыДоступа. +Процедура ЗапланироватьОбновлениеДоступаПриИзмененииУчастниковГруппыДоступа(ГруппаДоступа, НовыеУчастники, СтарыеУчастники) Экспорт + + ДляПользователей = Ложь; + ДляВнешнихПользователей = Ложь; + + ВсеУчастники = НовыеУчастники.Выгрузить(, "Пользователь"); + ВсеУчастники.Колонки.Добавить("ВидИзмененияСтроки", Новый ОписаниеТипов("Число")); + ВсеУчастники.ЗаполнитьЗначения(1, "ВидИзмененияСтроки"); + Если ТипЗнч(СтарыеУчастники) = Тип("ТаблицаЗначений") Тогда + Для Каждого Строка Из СтарыеУчастники Цикл + НоваяСтрока = ВсеУчастники.Добавить(); + НоваяСтрока.Пользователь = Строка.Пользователь; + НоваяСтрока.ВидИзмененияСтроки = -1; + КонецЦикла; + КонецЕсли; + ВсеУчастники.Свернуть("Пользователь", "ВидИзмененияСтроки"); + Для Каждого Строка Из ВсеУчастники Цикл + Если Строка.ВидИзмененияСтроки = 0 Тогда + Продолжить; + КонецЕсли; + Если ТипЗнч(Строка.Пользователь) = Тип("СправочникСсылка.Пользователи") + Или ТипЗнч(Строка.Пользователь) = Тип("СправочникСсылка.ГруппыПользователей") Тогда + ДляПользователей = Истина; + КонецЕсли; + Если ТипЗнч(Строка.Пользователь) = Тип("СправочникСсылка.ВнешниеПользователи") + Или ТипЗнч(Строка.Пользователь) = Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда + ДляВнешнихПользователей = Истина; + КонецЕсли; + КонецЦикла; + + Если Не ДляПользователей И Не ДляВнешнихПользователей Тогда + Возврат; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ГруппаДоступа", ГруппаДоступа); + Запрос.Текст = + "ВЫБРАТЬ + | ТаблицыГруппДоступа.Таблица КАК Таблица + |ИЗ + | РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа + |ГДЕ + | ТаблицыГруппДоступа.ГруппаДоступа = &ГруппаДоступа"; + + УстановитьОтключениеБезопасногоРежима(Истина); + УстановитьПривилегированныйРежим(Истина); + + Таблицы = Запрос.Выполнить().Выгрузить(); + + ЗапланироватьОбновлениеПользователейКлючейДоступа(Таблицы, + ДляПользователей, ДляВнешнихПользователей, Истина); + + УстановитьПривилегированныйРежим(Ложь); + УстановитьОтключениеБезопасногоРежима(Ложь); + +КонецПроцедуры + +// Для процедур ПослеДобавленияИзмененияПользователяИлиГруппы, ПослеОбновленияСоставовГруппПользователей. +Процедура ЗапланироватьОбновлениеДоступаПриКосвенномИзмененииУчастниковГруппыДоступа(ИзмененныеУчастники) + + ДляПользователей = Ложь; + ДляВнешнихПользователей = Ложь; + + ИзмененныеПользователи = Новый Массив; + ИзмененныеВнешниеПользователи = Новый Массив; + + Для Каждого Участник Из ИзмененныеУчастники Цикл + Если ТипЗнч(Участник) = Тип("СправочникСсылка.Пользователи") + Или ТипЗнч(Участник) = Тип("СправочникСсылка.ГруппыПользователей") Тогда + ДляПользователей = Истина; + КонецЕсли; + Если ТипЗнч(Участник) = Тип("СправочникСсылка.ВнешниеПользователи") + Или ТипЗнч(Участник) = Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда + ДляВнешнихПользователей = Истина; + КонецЕсли; + Если ТипЗнч(Участник) = Тип("СправочникСсылка.Пользователи") Тогда + ИзмененныеПользователи.Добавить(Участник); + КонецЕсли; + Если ТипЗнч(Участник) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда + ИзмененныеВнешниеПользователи.Добавить(Участник); + КонецЕсли; + КонецЦикла; + + Если ИзмененныеПользователи.Количество() > 0 Тогда + ОбновитьПользователейРазрешенногоКлючаДоступа(ИзмененныеПользователи); + КонецЕсли; + + Если ИзмененныеВнешниеПользователи.Количество() > 0 Тогда + ОбновитьВнешнихПользователейРазрешенногоКлючаДоступа(ИзмененныеВнешниеПользователи); + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ИзмененныеУчастники", ИзмененныеУчастники); + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ТаблицыГруппДоступа.Таблица КАК Таблица + |ИЗ + | РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК УчастникиГруппДоступа + | ПО ТаблицыГруппДоступа.ГруппаДоступа = УчастникиГруппДоступа.Ссылка + | И (УчастникиГруппДоступа.Пользователь В (&ИзмененныеУчастники))"; + + УстановитьОтключениеБезопасногоРежима(Истина); + УстановитьПривилегированныйРежим(Истина); + + Таблицы = Запрос.Выполнить().Выгрузить(); + + ЗапланироватьОбновлениеПользователейКлючейДоступа(Таблицы, + ДляПользователей, ДляВнешнихПользователей, Истина); + + УстановитьПривилегированныйРежим(Ложь); + УстановитьОтключениеБезопасногоРежима(Ложь); + +КонецПроцедуры + +// Для вызова из модуля менеджера регистра ТаблицыГруппДоступа. +Процедура ЗапланироватьОбновлениеДоступаПриИзмененииТаблицГруппДоступа(Таблицы) Экспорт + + ЗапланироватьОбновлениеПользователейКлючейДоступа(Таблицы); + +КонецПроцедуры + +// Для вызова из модуля менеджера регистра ЗначенияГруппДоступа. +Процедура ЗапланироватьОбновлениеДоступаПриИзмененииРазрешенныхЗначений(ГруппыДоступаИТипыЗначений) Экспорт + + ИмяПараметраВерсии = "СтандартныеПодсистемы.УправлениеДоступом.ЗначенияГруппДоступаВерсия"; + СтандартныеПодсистемыСервер.УстановитьПараметрРаботыРасширения(ИмяПараметраВерсии, Новый УникальныйИдентификатор, Истина); + + ИмяПараметра = "СтандартныеПодсистемы.УправлениеДоступом.ЗначенияГруппДоступа"; + СтандартныеПодсистемыСервер.УстановитьПараметрРаботыРасширения(ИмяПараметра, Неопределено, Истина); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ГруппыДоступаИТипыЗначений", ГруппыДоступаИТипыЗначений); + Запрос.Текст = + "ВЫБРАТЬ + | ГруппыДоступаИТипыЗначений.ГруппаДоступа КАК ГруппаДоступа, + | ГруппыДоступаИТипыЗначений.ТипЗначенийДоступа КАК ТипЗначенийДоступа + |ПОМЕСТИТЬ ГруппыДоступаИТипыЗначений + |ИЗ + | &ГруппыДоступаИТипыЗначений КАК ГруппыДоступаИТипыЗначений + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | ТаблицыГруппДоступа.Таблица КАК Таблица, + | ТИПЗНАЧЕНИЯ(ГруппыДоступаИТипыЗначений.ТипЗначенийДоступа) КАК ТипЗначенийДоступа + |ИЗ + | РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ГруппыДоступаИТипыЗначений КАК ГруппыДоступаИТипыЗначений + | ПО ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступаИТипыЗначений.ГруппаДоступа + |ИТОГИ ПО + | Таблица"; + + ТаблицыИТипыЗначенийДоступа = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); + + ЗапланироватьОбновлениеПользователейКлючейДоступа(ТаблицыИТипыЗначенийДоступа.Строки); + +КонецПроцедуры + +// Для процедур ЗапланироватьОбновлениеДоступаПриИзмененииУчастниковГруппыДоступа, +// ЗапланироватьОбновлениеДоступаПослеОбновленияСоставовГруппПользователей, +// ЗапланироватьОбновлениеДоступаПриИзмененииТаблицГруппДоступа, +// ЗапланироватьОбновлениеДоступаПриИзмененииРазрешенныхЗначений. +// +Процедура ЗапланироватьОбновлениеПользователейКлючейДоступа(ОписаниеСписков, ДляПользователей = Истина, + ДляВнешнихПользователей = Истина, ПриИзмененииУчастниковГруппыДоступа = Ложь) + + Если ОписаниеСписков.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + НаборЗаписей = СлужебныйНаборЗаписей(РегистрыСведений.ОбновлениеКлючейДоступаПользователей); + + Контекст = Новый Структура; + Контекст.Вставить("ПриИзмененииУчастниковГруппыДоступа", ПриИзмененииУчастниковГруппыДоступа); + Контекст.Вставить("ИдентификаторТранзакции", Новый УникальныйИдентификатор); + Контекст.Вставить("НаборЗаписей", НаборЗаписей); + Контекст.Вставить("КлючУникальности", Новый УникальныйИдентификатор); + Контекст.Вставить("ТекущаяДата", ТекущаяДатаСеанса()); + Контекст.Вставить("Список", Неопределено); + Контекст.Вставить("ПолноеИмя", Неопределено); + Контекст.Вставить("ТипыЗначенийДоступа", Неопределено); + + Если ТипЗнч(ОписаниеСписков) = Тип("ФиксированныйМассив") Тогда + ИдентификаторыСписковПоПолнымИменам = ОбщегоНазначения.ИдентификаторыОбъектовМетаданных(ОписаниеСписков); + Иначе + ПолныеИмена = ОписаниеСписков.ВыгрузитьКолонку("Таблица"); + ОбъектыМетаданныхСписков = Справочники.ИдентификаторыОбъектовМетаданных.ОбъектыМетаданныхПоИдентификаторам( + ПолныеИмена, Истина); + КонецЕсли; + + Для Каждого ОписаниеСписка Из ОписаниеСписков Цикл + Если ИдентификаторыСписковПоПолнымИменам <> Неопределено Тогда + Контекст.ПолноеИмя = ОписаниеСписка; + Контекст.Список = ИдентификаторыСписковПоПолнымИменам.Получить(Контекст.ПолноеИмя); + Иначе + ОбъектМетаданных = ОбъектыМетаданныхСписков.Получить(ОписаниеСписка.Таблица); + Контекст.ПолноеИмя = ?(ТипЗнч(ОбъектМетаданных) = Тип("ОбъектМетаданных"), ОбъектМетаданных.ПолноеИмя(), ""); + Контекст.Список = ОписаниеСписка.Таблица; + Если ТипЗнч(ОписаниеСписка) = Тип("СтрокаДереваЗначений") Тогда + Контекст.ТипыЗначенийДоступа = ОписаниеСписка.Строки; + КонецЕсли; + КонецЕсли; + Если ДляПользователей Тогда + ЗапланироватьОбновлениеПользователейКлючейДоступаДляВидаПользователей(Контекст, Ложь) + КонецЕсли; + Если ДляВнешнихПользователей Тогда + ЗапланироватьОбновлениеПользователейКлючейДоступаДляВидаПользователей(Контекст, Истина) + КонецЕсли; + КонецЦикла; + + Если НаборЗаписей.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + НаборЗаписей.Записать(Ложь); + + УстановитьОбновлениеДоступа(Истина); + +КонецПроцедуры + +// Для процедуры ЗапланироватьОбновлениеПользователейКлючейДоступа. +Процедура ЗапланироватьОбновлениеПользователейКлючейДоступаДляВидаПользователей(Контекст, ДляВнешнихПользователей) + + Если ЗначениеЗаполнено(Контекст.ПолноеИмя) Тогда + ДействующиеПараметры = ДействующиеПараметрыОграниченияДоступа(Контекст.ИдентификаторТранзакции); + Если ДляВнешнихПользователей Тогда + ДополнительныйКонтекст = ДействующиеПараметры.ДополнительныйКонтекст.ДляВнешнихПользователей; + Иначе + ДополнительныйКонтекст = ДействующиеПараметры.ДополнительныйКонтекст.ДляПользователей; + КонецЕсли; + СвойстваОграничения = ДополнительныйКонтекст.СвойстваОграниченияСписков.Получить(Контекст.ПолноеИмя); + + Если ДополнительныйКонтекст.СпискиСОтключеннымОграничением.Получить(Контекст.ПолноеИмя) <> Неопределено + Или СвойстваОграничения = Неопределено + Или СвойстваОграничения.ДоступЗапрещен + Или СвойстваОграничения.ПолеВладельца <> Неопределено + Или Контекст.ПриИзмененииУчастниковГруппыДоступа + И Не СвойстваОграничения.РассчитыватьПраваПользователей Тогда + + Возврат; + КонецЕсли; + + Если СвойстваОграничения <> Неопределено + И Контекст.ТипыЗначенийДоступа <> Неопределено + И Не Контекст.ПриИзмененииУчастниковГруппыДоступа Тогда + + СредиИзмененныхТиповЗначенийДоступаНетИспользуемых = Истина; + ИспользуемыеТипыЗначенийДоступа = СвойстваОграничения.ИспользуемыеТипыЗначенийДоступа.Получить(); + Для Каждого Строка Из Контекст.ТипыЗначенийДоступа Цикл + Если ИспользуемыеТипыЗначенийДоступа.Найти(Строка.ТипЗначенийДоступа) <> Неопределено Тогда + СредиИзмененныхТиповЗначенийДоступаНетИспользуемых = Ложь; + Прервать; + КонецЕсли; + КонецЦикла; + Если СредиИзмененныхТиповЗначенийДоступаНетИспользуемых Тогда + Возврат; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + НоваяЗапись = Контекст.НаборЗаписей.Добавить(); + НоваяЗапись.КлючУникальности = Контекст.КлючУникальности; + НоваяЗапись.Список = Контекст.Список; + НоваяЗапись.ДляВнешнихПользователей = ДляВнешнихПользователей; + НоваяЗапись.ДатаИзмененияЗаписиРегистра = Контекст.ТекущаяДата; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбновлениеДоступа + +// Обработчик регламентного задания ОбновлениеДоступаНаУровнеЗаписей. +Процедура ОбновлениеДоступаНаУровнеЗаписей() Экспорт + + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания( + Метаданные.РегламентныеЗадания.ОбновлениеДоступаНаУровнеЗаписей); + + ТекущийСеанс = ПолучитьТекущийСеансИнформационнойБазы(); + + Если ТекущийСеанс.ИмяПриложения <> "BackgroundJob" Тогда + ТекстОшибки = НСтр("ru = 'Обновление доступа может выполняться только в фоновом задании.'"); + ВызватьИсключение ТекстОшибки; + КонецЕсли; + + ТекущееФоновоеЗадание = ТекущийСеанс.ПолучитьФоновоеЗадание(); + + БлокировкаДанных = Новый БлокировкаДанных; + БлокировкаДанных.Добавить("Константа.ПоследнееОбновлениеДоступа"); + + НачатьТранзакцию(); + Попытка + БлокировкаДанных.Заблокировать(); + ЗначениеКонстанты = Константы.ПоследнееОбновлениеДоступа.Получить(); + ПоследнееОбновлениеДоступа = ПоследнееОбновлениеДоступа(ЗначениеКонстанты); + + Если ЗначениеЗаполнено(ПоследнееОбновлениеДоступа.ИдентификаторФоновогоЗадания) Тогда + ПоследнееФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору( + ПоследнееОбновлениеДоступа.ИдентификаторФоновогоЗадания); + Иначе + ПоследнееФоновоеЗадание = Неопределено; + КонецЕсли; + + Если ПоследнееФоновоеЗадание = Неопределено + Или ПоследнееФоновоеЗадание.Состояние <> СостояниеФоновогоЗадания.Активно Тогда + + ПоследнееОбновлениеДоступа.ДатаЗапускаНаСервере = ТекущаяДатаНаСервере(); + ПоследнееОбновлениеДоступа.НомерСеанса = ТекущийСеанс.НомерСеанса; + ПоследнееОбновлениеДоступа.НачалоСеанса = ТекущийСеанс.НачалоСеанса; + ПоследнееОбновлениеДоступа.ИмяКомпьютера = ТекущийСеанс.ИмяКомпьютера; + ПоследнееОбновлениеДоступа.ИдентификаторФоновогоЗадания = + ТекущееФоновоеЗадание.УникальныйИдентификатор; + + Константы.ПоследнееОбновлениеДоступа.Установить( + Новый ХранилищеЗначения(ПоследнееОбновлениеДоступа)); + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Если ПоследнееОбновлениеДоступа.ИдентификаторФоновогоЗадания + <> ТекущееФоновоеЗадание.УникальныйИдентификатор Тогда + Возврат; + КонецЕсли; + + ПоследнееОбновлениеДоступа.ТекстОшибкиЗавершения = ""; + ПоследнееОбновлениеДоступа.ИдентификаторФоновогоЗадания = + Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + + Попытка + Если КонфигурацияБазыДанныхИзмененаДинамически() Тогда + СтандартныеПодсистемыСервер.ПотребоватьПерезапускСеансаПоПричинеДинамическогоОбновленияВерсииПрограммы(); + КонецЕсли; + Если ОграничиватьДоступНаУровнеЗаписейУниверсально() Тогда + ПроверитьОбновитьДействующиеПараметрыОграниченияДоступа(ПоследнееОбновлениеДоступа); + ВыполнитьОбновлениеДоступа(ПоследнееОбновлениеДоступа.ТекстОшибкиЗавершения); + Иначе + УстановитьОбновлениеДоступа(Ложь); + КонецЕсли; + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ЗарегистрироватьОшибкуОбновленияДоступа(ИнформацияОбОшибке, ПоследнееОбновлениеДоступа.ТекстОшибкиЗавершения); + КонецПопытки; + + ПоследнееОбновлениеДоступа.ДатаЗавершенияНаСервере = ТекущаяДатаНаСервере(); + Константы.ПоследнееОбновлениеДоступа.Установить(Новый ХранилищеЗначения(ПоследнееОбновлениеДоступа)); + +КонецПроцедуры + +// Для процедуры ОбновлениеДоступаНаУровнеЗаписей. +Процедура ПроверитьОбновитьДействующиеПараметрыОграниченияДоступа(ПоследнееОбновлениеДоступа) + + УстановитьОтключениеБезопасногоРежима(Истина); + УстановитьПривилегированныйРежим(Истина); + + ДатаОбновленияВерсииРасширений = Справочники.ВерсииРасширений.ПоследняяВерсияРасширений().ДатаОбновления; + + ДатаОбновленияВсехПараметровРаботыПрограммы = + РегистрыСведений.ПараметрыРаботыПрограммы.ДатаОбновленияВсехПараметровРаботыПрограммы(); + + ДатаПоследнегоЗаполненияВсехПараметровРаботыРасширений = + РегистрыСведений.ПараметрыРаботыВерсийРасширений.ДатаПоследнегоЗаполненияВсехПараметровРаботыРасширений(); + + ДействующиеПараметрыОграниченияДоступа(Неопределено); + ДатаСозданияПараметровОграниченияДоступа = ПараметрыСеанса.ПараметрыОграниченияДоступа.ДатаСоздания; + + ИмяПараметра = "СтандартныеПодсистемы.УправлениеДоступом.ДатаПроверкиПараметровОграниченияДоступа"; + ДатаПроверкиПараметровОграниченияДоступа = СтандартныеПодсистемыСервер.ПараметрРаботыРасширения(ИмяПараметра, Истина); + Если ТипЗнч(ДатаПроверкиПараметровОграниченияДоступа) <> Тип("Дата") Тогда + ДатаПроверкиПараметровОграниченияДоступа = '00010101'; + КонецЕсли; + + УстановитьПривилегированныйРежим(Ложь); + УстановитьОтключениеБезопасногоРежима(Ложь); + + Если ДатаПроверкиПараметровОграниченияДоступа > ДатаСозданияПараметровОграниченияДоступа Тогда + ДатаАктуальностиПараметровОграниченияДоступа = ДатаПроверкиПараметровОграниченияДоступа; + Иначе + ДатаАктуальностиПараметровОграниченияДоступа = ДатаСозданияПараметровОграниченияДоступа; + КонецЕсли; + + Если ДатаОбновленияВерсииРасширений > ДатаАктуальностиПараметровОграниченияДоступа + Или ДатаОбновленияВсехПараметровРаботыПрограммы > ДатаАктуальностиПараметровОграниченияДоступа + Или ДатаПоследнегоЗаполненияВсехПараметровРаботыРасширений > ДатаАктуальностиПараметровОграниченияДоступа Тогда + + ДействующиеПараметрыОграниченияДоступа(Неопределено, Ложь, Истина); + КонецЕсли; + +КонецПроцедуры + +// Обновляет ключи доступа к данным на основе записей в регистре сведений +// ОбновлениеКлючейДоступаКДанным и ключи доступа пользователей на основе записей +// регистра сведений ОбновлениеКлючейДоступаПользователей. +// +// Обновляется порция данных для каждой таблицы, начиная с самых свежих данных. +// Процедура должна вызываться повторно, пока обработка не будет завершена, +// при этом регламентное задание выключается. +// +// Процедура предназначена для работы в единственном экземпляре, то есть без параллельной +// работы (вызов из процедуры регламентного задания ОбновлениеДоступаНаУровнеЗаписей). +// Параллельность обеспечивает сама процедура путем запуска до двух фоновых заданий +// на каждый список, но не более значения константы КоличествоПотоковОбновленияДоступа. +// +Процедура ВыполнитьОбновлениеДоступа(ТекстОшибкиЗавершения) + + ИсполняющиеФоновыеЗадания = Неопределено; + Если Не ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + КоличествоПотоков = Константы.КоличествоПотоковОбновленияДоступа.Получить(); + Если КоличествоПотоков < 1 Тогда + КоличествоПотоков = 1; + КонецЕсли; + Если КоличествоПотоков > 1 Тогда + ИсполняющиеФоновыеЗадания = Новый Структура; + ИсполняющиеФоновыеЗадания.Вставить("Состав", Новый Массив); + Для Счетчик = 1 По КоличествоПотоков Цикл + ОписаниеЗадания = Новый Структура("ЭтоОбновлениеКлючейДоступаКДанным, Задание, + |ИдентификаторСписка, ДляВнешнихПользователей, АдресРезультата, ЗапускОбновленияПорции"); + ИсполняющиеФоновыеЗадания.Состав.Добавить(ОписаниеЗадания); + КонецЦикла; + ИсполняющиеФоновыеЗадания.Вставить("ЕстьЗапущенныеЗаПроход", Ложь); + ИсполняющиеФоновыеЗадания.Вставить("ТекстОшибкиЗавершения", ""); + ИсполняющиеФоновыеЗадания.Вставить("КоличествоДополнительныхСвободных", 0); + ИсполняющиеФоновыеЗадания.Вставить("КоличествоДополнительныхНаОсновное", 0); + ИсполняющиеФоновыеЗадания.Вставить("ПоПорциям", Новый Массив); + ИсполняющиеФоновыеЗадания.Вставить("ИндексПорции", 0); + ИсполняющиеФоновыеЗадания.Вставить("КоличествоСвободных", + ИсполняющиеФоновыеЗадания.Состав.Количество()); + КонецЕсли; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Списки.Список КАК Список, + | Списки.ДляВнешнихПользователей КАК ДляВнешнихПользователей, + | МАКСИМУМ(Списки.ДатаПоследнегоОбновленногоЭлемента) КАК ПоследняяДата, + | МАКСИМУМ(Списки.ДатаИзмененияЗаписиРегистра) КАК ДатаИзменения + |ИЗ + | РегистрСведений.ОбновлениеКлючейДоступаКДанным КАК Списки + | + |СГРУППИРОВАТЬ ПО + | Списки.Список, + | Списки.ДляВнешнихПользователей + | + |УПОРЯДОЧИТЬ ПО + | МАКСИМУМ(Списки.ДатаПоследнегоОбновленногоЭлемента) УБЫВ + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Списки.Список КАК Список, + | Списки.ДляВнешнихПользователей КАК ДляВнешнихПользователей, + | МИНИМУМ(Списки.ДатаИзмененияЗаписиРегистра) КАК ДатаИзменения + |ИЗ + | РегистрСведений.ОбновлениеКлючейДоступаПользователей КАК Списки + | + |СГРУППИРОВАТЬ ПО + | Списки.Список, + | Списки.ДляВнешнихПользователей + | + |УПОРЯДОЧИТЬ ПО + | МАКСИМУМ(Списки.ДатаИзмененияЗаписиРегистра) УБЫВ"; + + ОкончаниеВыполнения = ТекущаяУниверсальнаяДата() + + МаксимальноеКоличествоМинутВыполненияФоновогоЗаданияОбновленияДоступа() * 60; + + Пока Истина Цикл + Если ТекущаяУниверсальнаяДата() > ОкончаниеВыполнения Тогда + Прервать; + КонецЕсли; + ОбработкаЗавершена = Истина; + + РезультатыЗапроса = Запрос.ВыполнитьПакет(); + Если РезультатыЗапроса[0].Пустой() + И РезультатыЗапроса[1].Пустой() Тогда + + ОшибкаОжиданияБлокировкиДанных = Ложь; + Попытка + ОтключитьРегламентноеЗаданиеЕслиНетНовыхЗаданий(Истина, ОшибкаОжиданияБлокировкиДанных); + Исключение + Если Не ОшибкаОжиданияБлокировкиДанных Тогда + ВызватьИсключение; + КонецЕсли; + КонецПопытки; + Прервать; + КонецЕсли; + + МаксимальнаяДата = МаксимальнаяДата(); + ОбщиеПараметрыОбновления = Новый Структура("ЭтоОбновлениеКлючейДоступаКДанным, + |ИдентификаторСписка, ДляВнешнихПользователей, ДатаНачала, ДатаОкончания, + |НачальноеОбновление, ЗапускОбновленияПорции"); + + ПервыйИндекс = 0; + ОбновлениеКлючейДоступаКДанным = ТаблицаОбновленияКлючейДоступаКДанным(РезультатыЗапроса[0], + МаксимальнаяДата, ОбщиеПараметрыОбновления, ИсполняющиеФоновыеЗадания = Неопределено); + + Отбор = Новый Структура("ПоследняяДата", МаксимальнаяДата); + НачальноеОбновление = ОбновлениеКлючейДоступаКДанным.НайтиСтроки(Отбор).Количество() <> 0; + + ВторойИндекс = 0; + ОбновлениеКлючейДоступаПользователей = РезультатыЗапроса[1].Выгрузить(); + + Если ИсполняющиеФоновыеЗадания <> Неопределено Тогда + ИсполняющиеФоновыеЗадания.ЕстьЗапущенныеЗаПроход = Ложь; + ЗаполнитьКоличествоДополнительныхЗаданий(ИсполняющиеФоновыеЗадания, + ОбновлениеКлючейДоступаКДанным, ОбновлениеКлючейДоступаПользователей); + КонецЕсли; + + Пока Истина Цикл + Если ТекущаяУниверсальнаяДата() > ОкончаниеВыполнения + Или ПервыйИндекс >= ОбновлениеКлючейДоступаКДанным.Количество() + И ВторойИндекс >= ОбновлениеКлючейДоступаПользователей.Количество() Тогда + Прервать; + КонецЕсли; + Если ПервыйИндекс < ОбновлениеКлючейДоступаКДанным.Количество() Тогда + Строка = ОбновлениеКлючейДоступаКДанным[ПервыйИндекс]; + ПервыйИндекс = ПервыйИндекс + 1; + Если НачальноеОбновление И Строка.ПоследняяДата <> МаксимальнаяДата Тогда + Продолжить; + КонецЕсли; + ОбщиеПараметрыОбновления.ЭтоОбновлениеКлючейДоступаКДанным = Истина; + ОбщиеПараметрыОбновления.ИдентификаторСписка = Строка.Список; + ОбщиеПараметрыОбновления.ДляВнешнихПользователей = Строка.ДляВнешнихПользователей; + ОбщиеПараметрыОбновления.НачальноеОбновление = НачальноеОбновление; + ЗапуститьОбновлениеДоступаСписка(ИсполняющиеФоновыеЗадания, ОбщиеПараметрыОбновления, ОбработкаЗавершена); + КонецЕсли; + Если ВторойИндекс < ОбновлениеКлючейДоступаПользователей.Количество() Тогда + Строка = ОбновлениеКлючейДоступаПользователей[ВторойИндекс]; + ВторойИндекс = ВторойИндекс + 1; + ОбщиеПараметрыОбновления.ЭтоОбновлениеКлючейДоступаКДанным = Ложь; + ОбщиеПараметрыОбновления.ИдентификаторСписка = Строка.Список; + ОбщиеПараметрыОбновления.ДляВнешнихПользователей = Строка.ДляВнешнихПользователей; + ОбщиеПараметрыОбновления.НачальноеОбновление = НачальноеОбновление; + ЗапуститьОбновлениеДоступаСписка(ИсполняющиеФоновыеЗадания, ОбщиеПараметрыОбновления, ОбработкаЗавершена); + КонецЕсли; + КонецЦикла; + + Если ИсполняющиеФоновыеЗадания <> Неопределено Тогда + ЗапуститьОбновлениеПорцийЭлементовДоступаСписка(ИсполняющиеФоновыеЗадания, ОбработкаЗавершена); + Если ИсполняющиеФоновыеЗадания.ЕстьЗапущенныеЗаПроход Тогда + Продолжить; + КонецЕсли; + КонецЕсли; + + Если Не ОбработкаЗавершена + Или ОбновлениеКлючейДоступаКДанным.Количество() > 0 + Или ОбновлениеКлючейДоступаПользователей.Количество() > 0 + Или ИсполняющиеФоновыеЗадания <> Неопределено + И ИсполняющиеФоновыеЗадания.ПоПорциям.Количество() > 0 Тогда + + Если ИсполняющиеФоновыеЗадания <> Неопределено Тогда + ПодождатьЗавершенияФоновогоЗадания(ИсполняющиеФоновыеЗадания, ОбработкаЗавершена); + Если ЗначениеЗаполнено(ИсполняющиеФоновыеЗадания.ТекстОшибкиЗавершения) Тогда + Прервать; + КонецЕсли; + КонецЕсли; + Продолжить; + КонецЕсли; + + ЗавершитьОбновлениеДоступа(ИсполняющиеФоновыеЗадания, ОбработкаЗавершена); + Если ИсполняющиеФоновыеЗадания <> Неопределено + И ЗначениеЗаполнено(ИсполняющиеФоновыеЗадания.ТекстОшибкиЗавершения) Тогда + Прервать; + КонецЕсли; + Если ОбработкаЗавершена Тогда + Прервать; + КонецЕсли; + КонецЦикла; + + ЗавершитьОбновлениеДоступа(ИсполняющиеФоновыеЗадания, ОбработкаЗавершена); + + Если ИсполняющиеФоновыеЗадания <> Неопределено Тогда + ТекстОшибкиЗавершения = ИсполняющиеФоновыеЗадания.ТекстОшибкиЗавершения; + КонецЕсли; + +КонецПроцедуры + +// Для процедуры ВыполнитьОбновлениеДоступа. +Процедура ЗаполнитьКоличествоДополнительныхЗаданий(ИсполняющиеФоновыеЗадания, + ОбновлениеКлючейДоступаКДанным, ОбновлениеКлючейДоступаПользователей) + + КоличествоОсновныхЗаданий = ОбновлениеКлючейДоступаКДанным.Количество() + + ОбновлениеКлючейДоступаПользователей.Количество(); + + КоличествоДополнительных = ИсполняющиеФоновыеЗадания.Состав.Количество() - КоличествоОсновныхЗаданий; + КоличествоДополнительных = ?(КоличествоДополнительных < 0, 0, КоличествоДополнительных); + ИсполняющиеФоновыеЗадания.КоличествоДополнительныхСвободных = КоличествоДополнительных; + + Если КоличествоОсновныхЗаданий = 0 Тогда + ИсполняющиеФоновыеЗадания.КоличествоДополнительныхНаОсновное = 0; + Иначе + КоличествоНаОсновное = Цел(КоличествоДополнительных / КоличествоОсновныхЗаданий); + ИсполняющиеФоновыеЗадания.КоличествоДополнительныхНаОсновное = ?(КоличествоНаОсновное > 0, + КоличествоНаОсновное, ?(КоличествоДополнительных > 0, 1, 0)); + КонецЕсли; + +КонецПроцедуры + +// Для процедуры ВыполнитьОбновлениеДоступа. +Процедура ЗапуститьОбновлениеПорцийЭлементовДоступаСписка(ИсполняющиеФоновыеЗадания, ОбработкаЗавершена) + + ЕстьПорцииДляЗапуска = Истина; + + КоличествоРезервныхСвободных = 0; + Для Каждого ОписаниеЗаданий Из ИсполняющиеФоновыеЗадания.ПоПорциям Цикл + Если ОписаниеЗаданий.НаборПорций.Количество() < 3 Тогда + КоличествоРезервныхСвободных = КоличествоРезервныхСвободных + 1; + КонецЕсли; + КонецЦикла; + + Пока ЕстьПорцииДляЗапуска + И ИсполняющиеФоновыеЗадания.КоличествоСвободных > КоличествоРезервныхСвободных Цикл + + ЕстьПорцииДляЗапуска = Ложь; + Если ИсполняющиеФоновыеЗадания.ИндексПорции > ИсполняющиеФоновыеЗадания.ПоПорциям.Количество() - 1 Тогда + ИсполняющиеФоновыеЗадания.ИндексПорции = 0; + КонецЕсли; + Если ИсполняющиеФоновыеЗадания.ПоПорциям.Количество() = 0 Тогда + Прервать; + КонецЕсли; + ОписаниеЗаданий = ИсполняющиеФоновыеЗадания.ПоПорциям[ИсполняющиеФоновыеЗадания.ИндексПорции]; + ИсполняющиеФоновыеЗадания.ИндексПорции = ИсполняющиеФоновыеЗадания.ИндексПорции + 1; + + Если ОписаниеЗаданий.НаборПорций.Количество() = 0 Тогда + Продолжить; + КонецЕсли; + Запуск = Новый Структура("ПорцияНабора, Результат", ОписаниеЗаданий.НаборПорций[0]); + ОбщиеПараметрыОбновления = Новый Структура(ОписаниеЗаданий.ОбщиеПараметрыОбновления); + ОбщиеПараметрыОбновления.Вставить("НачальноеОбновление", Ложь); + ОбщиеПараметрыОбновления.Вставить("ЗапускОбновленияПорции", Запуск); + Если ОбщиеПараметрыОбновления.ЭтоОбновлениеКлючейДоступаКДанным Тогда + Если Запуск.ПорцияНабора.ЭлементыДанных = Неопределено Тогда + Запуск.Результат = Новый Структура("НовыйПоследнийОбновленныйЭлемент"); + Если Запуск.ПорцияНабора.Свойство("ПоследнийЭлементПорции") Тогда + Запуск.Результат.НовыйПоследнийОбновленныйЭлемент = Запуск.ПорцияНабора.ПоследнийЭлементПорции; + КонецЕсли; + КонецЕсли; + Иначе + Если Запуск.ПорцияНабора.КлючиДоступа = Неопределено Тогда + Запуск.Результат = Новый Структура("НовыйПоследнийОбновленныйКлючДоступа"); + Если Запуск.ПорцияНабора.Свойство("ПоследнийКлючДоступаПорции") Тогда + Запуск.Результат.НовыйПоследнийОбновленныйКлючДоступа = Запуск.ПорцияНабора.ПоследнийКлючДоступаПорции; + КонецЕсли; + КонецЕсли; + КонецЕсли; + Если Запуск.Результат = Неопределено Тогда + Если Не ЗапущеноОбновлениеДоступаСпискаВФоне(ИсполняющиеФоновыеЗадания, ОбщиеПараметрыОбновления, Ложь) Тогда + Прервать; + КонецЕсли; + КонецЕсли; + ОписаниеЗаданий.Запуски.Добавить(Запуск); + ОписаниеЗаданий.НаборПорций.Удалить(0); + Если ОписаниеЗаданий.НаборПорций.Количество() > 0 Тогда + ЕстьПорцииДляЗапуска = Истина; + КонецЕсли; + КонецЦикла; + + Для Каждого ОписаниеЗадания Из ИсполняющиеФоновыеЗадания.Состав Цикл + ОбработатьЗавершенноеФоновоеЗадание(ОписаниеЗадания, ОбработкаЗавершена, ИсполняющиеФоновыеЗадания); + КонецЦикла; + ПроверитьЗавершитьОбновлениеПоПорциям(ИсполняющиеФоновыеЗадания); + +КонецПроцедуры + +// Для процедуры ВыполнитьОбновлениеДоступа. +Процедура ЗавершитьОбновлениеДоступа(ИсполняющиеФоновыеЗадания, ОбработкаЗавершена) + + Если ИсполняющиеФоновыеЗадания <> Неопределено Тогда + ЗавершитьФоновыеЗадания(ИсполняющиеФоновыеЗадания, ОбработкаЗавершена); + ПроверитьЗавершитьОбновлениеПоПорциям(ИсполняющиеФоновыеЗадания); + КонецЕсли; + + Если ОбработкаЗавершена Тогда + ОбновитьПраваНаРазрешенныйКлючДоступа(); + + ОшибкаОжиданияБлокировкиДанных = Ложь; + Попытка + ОтключитьРегламентноеЗаданиеЕслиНетНовыхЗаданий(ОбработкаЗавершена, ОшибкаОжиданияБлокировкиДанных); + Исключение + Если Не ОшибкаОжиданияБлокировкиДанных Тогда + ВызватьИсключение; + КонецЕсли; + КонецПопытки; + КонецЕсли; + +КонецПроцедуры + +// Для процедуры ВыполнитьОбновлениеДоступа. +Функция ТаблицаОбновленияКлючейДоступаКДанным(РезультатЗапроса, МаксимальнаяДата, ОбщиеПараметрыОбновления, ОбновлениеВЭтомСеансе) + + Выгрузка = РезультатЗапроса.Выгрузить(); + Если Выгрузка.Количество() = 0 Тогда + Возврат Выгрузка; + КонецЕсли; + + Выгрузка.Колонки.Добавить("УровеньЗависимости", Новый ОписаниеТипов("Число")); + + ПоследняяДата = Выгрузка[0].ПоследняяДата; + МаксимальнаяДата = МаксимальнаяДата(); + + Если ОбновлениеВЭтомСеансе Тогда + ИдентификаторыСписков = Новый Массив; + Если Не ОбщиеПараметрыОбновления.Свойство("ОбъектыМетаданныхПоИдентификаторам") Тогда + ОбщиеПараметрыОбновления.Вставить("ОбъектыМетаданныхПоИдентификаторам", Новый Соответствие); + КонецЕсли; + КонецЕсли; + + ДействующиеПараметры = ДействующиеПараметрыОграниченияДоступа(Неопределено); + Для Каждого Строка Из Выгрузка Цикл + Если Не ЗначениеЗаполнено(Строка.ПоследняяДата) Тогда + Строка.ПоследняяДата = МаксимальнаяДата - 1; + КонецЕсли; + Если ОбновлениеВЭтомСеансе + И ОбщиеПараметрыОбновления.ОбъектыМетаданныхПоИдентификаторам.Получить(Строка.Список) = Неопределено Тогда + + ИдентификаторыСписков.Добавить(Строка.Список); + КонецЕсли; + УровниЗависимости = ДействующиеПараметры.УровниЗависимости.Получить(Строка.Список); + Если УровниЗависимости = Неопределено Тогда + Продолжить; + КонецЕсли; + Строка.УровеньЗависимости = ?(Строка.ДляВнешнихПользователей, + УровниЗависимости.ДляВнешнихПользователей, УровниЗависимости.ДляПользователей); + КонецЦикла; + Выгрузка.Сортировать("УровеньЗависимости Возр, ПоследняяДата Убыв, ДатаИзменения Убыв"); + + Если ОбновлениеВЭтомСеансе И ИдентификаторыСписков.Количество() > 0 Тогда + ОбъектыМетаданныхПоИдентификаторам = + Справочники.ИдентификаторыОбъектовМетаданных.ОбъектыМетаданныхПоИдентификаторам(ИдентификаторыСписков, Истина); + Для Каждого КлючИЗначение Из ОбъектыМетаданныхПоИдентификаторам Цикл + ОбщиеПараметрыОбновления.ОбъектыМетаданныхПоИдентификаторам.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + КонецЦикла; + КонецЕсли; + + Если ПоследняяДата = МаксимальнаяДата Тогда + // Начало обновления. + ОбщиеПараметрыОбновления.ДатаНачала = НачалоДня(ТекущаяДатаСеанса()) - 7 * (60 * 60 * 24); // 7 Дней. + Иначе + // Продолжение обновления. + ЭтотГод = Год(ТекущаяДатаСеанса()) - Год(ПоследняяДата) = 0; + СмещениеМесяца = Месяц(ТекущаяДатаСеанса()) - Месяц(ПоследняяДата); + + Если ЭтотГод И СмещениеМесяца = 0 Тогда + ДатаНачала = НачалоМесяца(ПоследняяДата); + + ИначеЕсли ЭтотГод И СмещениеМесяца < 3 Тогда + ДатаНачала = НачалоКвартала(ПоследняяДата); + Иначе + ДатаНачала = НачалоГода(ПоследняяДата); + КонецЕсли; + + ОбщиеПараметрыОбновления.ДатаНачала = ДатаНачала; + КонецЕсли; + ОбщиеПараметрыОбновления.ДатаОкончания = ПоследняяДата; + + Индекс = Выгрузка.Количество() - 1; + Пока Индекс >= 0 Цикл + Если ОбщиеПараметрыОбновления.ДатаНачала > Выгрузка[Индекс].ПоследняяДата Тогда + Выгрузка.Удалить(Индекс); + КонецЕсли; + Индекс = Индекс - 1; + КонецЦикла; + + Возврат Выгрузка; + +КонецФункции + +// Для процедуры ВыполнитьОбновлениеДоступа. +Процедура ОтключитьРегламентноеЗаданиеЕслиНетНовыхЗаданий(ОбработкаЗавершена, ОшибкаОжиданияБлокировкиДанных) + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("НедоступныеСпискиДляОбновленияКлючейДоступаКДанным", Новый Массив); + Запрос.УстановитьПараметр("НедоступныеСпискиДляОбновленияКлючейДоступаПользователей", Новый Массив); + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ОбновлениеКлючейДоступаКДанным.Список КАК Список + |ИЗ + | РегистрСведений.ОбновлениеКлючейДоступаКДанным КАК ОбновлениеКлючейДоступаКДанным + |ГДЕ + | НЕ ОбновлениеКлючейДоступаКДанным.Список В (&НедоступныеСпискиДляОбновленияКлючейДоступаКДанным) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | ОбновлениеКлючейДоступаПользователей.Список КАК Список + |ИЗ + | РегистрСведений.ОбновлениеКлючейДоступаПользователей КАК ОбновлениеКлючейДоступаПользователей + |ГДЕ + | НЕ ОбновлениеКлючейДоступаПользователей.Список В (&НедоступныеСпискиДляОбновленияКлючейДоступаПользователей)"; + РезультатыЗапроса = Запрос.ВыполнитьПакет(); + + Если Не РезультатыЗапроса[0].Пустой() Тогда + УстановитьНедоступныеСписки(РезультатыЗапроса[0], + Запрос.Параметры.НедоступныеСпискиДляОбновленияКлючейДоступаКДанным); + КонецЕсли; + + Если Не РезультатыЗапроса[1].Пустой() Тогда + УстановитьНедоступныеСписки(РезультатыЗапроса[1], + Запрос.Параметры.НедоступныеСпискиДляОбновленияКлючейДоступаКДанным); + КонецЕсли; + + Если Запрос.Параметры.НедоступныеСпискиДляОбновленияКлючейДоступаКДанным.Количество() > 0 + Или Запрос.Параметры.НедоступныеСпискиДляОбновленияКлючейДоступаПользователей.Количество() > 0 Тогда + + РезультатыЗапроса = Запрос.ВыполнитьПакет(); + КонецЕсли; + + Если РезультатыЗапроса[0].Пустой() + И РезультатыЗапроса[1].Пустой() Тогда + + Блокировка = Новый БлокировкаДанных; + Блокировка.Добавить("РегистрСведений.ОбновлениеКлючейДоступаКДанным"); + Блокировка.Добавить("РегистрСведений.ОбновлениеКлючейДоступаПользователей"); + НачатьТранзакцию(); + Попытка + ОшибкаОжиданияБлокировкиДанных = Истина; + Блокировка.Заблокировать(); + ОшибкаОжиданияБлокировкиДанных = Ложь; + + РезультатыЗапроса = Запрос.ВыполнитьПакет(); + + Если РезультатыЗапроса[0].Пустой() + И РезультатыЗапроса[1].Пустой() Тогда + + УстановитьОбновлениеДоступа(Ложь); + Иначе + ОбработкаЗавершена = Ложь; + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ОбработкаЗавершена = Ложь; + ВызватьИсключение; + КонецПопытки; + Иначе + ОбработкаЗавершена = Ложь; + КонецЕсли; + +КонецПроцедуры + +// Для процедуры ОтключитьРегламентноеЗаданиеЕслиНетНовыхЗаданий. +Процедура УстановитьНедоступныеСписки(РезультатЗапроса, НедоступныеСписки) + + ОбъектыМетаданныхПоИдентификаторам = + Справочники.ИдентификаторыОбъектовМетаданных.ОбъектыМетаданныхПоИдентификаторам( + РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Список"), Истина); + + Для Каждого КлючИЗначение Из ОбъектыМетаданныхПоИдентификаторам Цикл + Если КлючИЗначение.Значение = Неопределено Тогда + НедоступныеСписки.Добавить(КлючИЗначение.Ключ); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Для процедуры ВыполнитьОбновлениеДоступа. +Процедура ЗапуститьОбновлениеДоступаСписка(ИсполняющиеФоновыеЗадания, ОбщиеПараметрыОбновления, ОбработкаЗавершена) + + Если ИсполняющиеФоновыеЗадания = Неопределено Тогда + ВыполнитьОбновлениеДоступаСписка(ОбщиеПараметрыОбновления, ОбработкаЗавершена); + Иначе + Пока Не ЗапущеноОбновлениеДоступаСпискаВФоне(ИсполняющиеФоновыеЗадания, + ОбщиеПараметрыОбновления, ОбработкаЗавершена) Цикл + + ПодождатьЗавершенияФоновогоЗадания(ИсполняющиеФоновыеЗадания, ОбработкаЗавершена); + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +// Для процедуры ВыполнитьОбновлениеДоступа. +Функция ЗапущеноОбновлениеДоступаСпискаВФоне(ИсполняющиеФоновыеЗадания, ОбщиеПараметрыОбновления, ОбработкаЗавершена) + + УжеЗапущено = Ложь; + Для Каждого ОписаниеЗадания Из ИсполняющиеФоновыеЗадания.Состав Цикл + ОбработатьЗавершенноеФоновоеЗадание(ОписаниеЗадания, ОбработкаЗавершена, ИсполняющиеФоновыеЗадания); + Если ОписаниеЗадания.Задание = Неопределено + Или ОписаниеЗадания.ЗапускОбновленияПорции <> Неопределено + Или ОбщиеПараметрыОбновления.ЗапускОбновленияПорции <> Неопределено Тогда + Продолжить; + КонецЕсли; + Если ОписаниеЗадания.ЭтоОбновлениеКлючейДоступаКДанным = ОбщиеПараметрыОбновления.ЭтоОбновлениеКлючейДоступаКДанным + И ОписаниеЗадания.ДляВнешнихПользователей = ОбщиеПараметрыОбновления.ДляВнешнихПользователей + И ОписаниеЗадания.ИдентификаторСписка = ОбщиеПараметрыОбновления.ИдентификаторСписка Тогда + // Не завершилось с предыдущего прохода. + УжеЗапущено = Истина; + КонецЕсли; + КонецЦикла; + + Если УжеЗапущено Тогда + Возврат Истина; + КонецЕсли; + + Если ЗначениеЗаполнено(ИсполняющиеФоновыеЗадания.ТекстОшибкиЗавершения) Тогда + Возврат Истина; + КонецЕсли; + + Для Каждого ОписаниеЗадания Из ИсполняющиеФоновыеЗадания.Состав Цикл + Если ОписаниеЗадания.Задание <> Неопределено Тогда + Продолжить; + КонецЕсли; + + ЗаполнитьЗначенияСвойств(ОписаниеЗадания, ОбщиеПараметрыОбновления); + + Если Не ПроверитьПодготовитьЗапускОбновленияПорции(ОписаниеЗадания, + ОбщиеПараметрыОбновления, ИсполняющиеФоновыеЗадания) Тогда + Возврат Истина; + КонецЕсли; + + Если ЗначениеЗаполнено(ОписаниеЗадания.АдресРезультата) Тогда + ПоместитьВоВременноеХранилище(Неопределено, ОписаниеЗадания.АдресРезультата); + Иначе + ОписаниеЗадания.АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено); + КонецЕсли; + ПараметрыЗадания = Новый Массив; + ПараметрыЗадания.Добавить(ОбщиеПараметрыОбновления); + ПараметрыЗадания.Добавить(ОписаниеЗадания.АдресРезультата); + ОписаниеЗадания.Задание = ФоновыеЗадания.Выполнить(ИмяМетодаОбновленияДоступаВФоне(), ПараметрыЗадания); + + ИсполняющиеФоновыеЗадания.КоличествоСвободных = ИсполняющиеФоновыеЗадания.КоличествоСвободных - 1; + ИсполняющиеФоновыеЗадания.ЕстьЗапущенныеЗаПроход = Истина; + Возврат Истина; + КонецЦикла; + + Возврат Ложь; + +КонецФункции + +// Для функции ЗапущеноОбновлениеДоступаСпискаВФоне. +Функция ПроверитьПодготовитьЗапускОбновленияПорции(ОписаниеЗадания, ОбщиеПараметрыОбновления, ИсполняющиеФоновыеЗадания) + + Если ОбщиеПараметрыОбновления.ЗапускОбновленияПорции <> Неопределено Тогда + ОбщиеПараметрыОбновления.Удалить("ЗапускОбновленияПорции"); + ОбщиеПараметрыОбновления.Вставить("ПорцияНабора", + ОписаниеЗадания.ЗапускОбновленияПорции.ПорцияНабора); + Возврат Истина; + КонецЕсли; + ОписаниеЗадания.ЗапускОбновленияПорции = Неопределено; + + ОписаниеЗаданий = ОписаниеЗаданийОбновленияПорций(ИсполняющиеФоновыеЗадания, ОбщиеПараметрыОбновления); + + Если Не ОбщиеПараметрыОбновления.НачальноеОбновление + И ИсполняющиеФоновыеЗадания.КоличествоДополнительныхСвободных > 0 + И (ОписаниеЗаданий = Неопределено Или ОписаниеЗаданий.НаборПорций.Количество() < 4) Тогда + + КоличествоДополнительных = ИсполняющиеФоновыеЗадания.КоличествоДополнительныхНаОсновное; + Если ИсполняющиеФоновыеЗадания.КоличествоДополнительныхСвободных < КоличествоДополнительных Тогда + КоличествоДополнительных = ИсполняющиеФоновыеЗадания.КоличествоДополнительныхСвободных; + КонецЕсли; + + ОбщиеПараметрыОбновления.Вставить("ПолучитьПорции", (КоличествоДополнительных + 2) * 2); + ИсполняющиеФоновыеЗадания.КоличествоДополнительныхСвободных = + ИсполняющиеФоновыеЗадания.КоличествоДополнительныхСвободных - КоличествоДополнительных; + + Если ОписаниеЗаданий <> Неопределено Тогда + НаборПорций = ОписаниеЗаданий.НаборПорций; + + ПоследняяПорция = Неопределено; + Если НаборПорций.Количество() > 0 Тогда + ПоследняяПорция = НаборПорций[НаборПорций.Количество() - 1]; + ИначеЕсли ОписаниеЗаданий.Запуски.Количество() > 0 Тогда + ПоследняяПорция = ОписаниеЗаданий.Запуски[ОписаниеЗаданий.Запуски.Количество() - 1].ПорцияНабора; + КонецЕсли; + Если ПоследняяПорция <> Неопределено Тогда + Если ОбщиеПараметрыОбновления.ЭтоОбновлениеКлючейДоступаКДанным Тогда + Если ПоследняяПорция.ЭлементыДанных = Неопределено + Или ОбщиеПараметрыОбновления.ДатаНачала > ПоследняяПорция.ДатаПоследнегоЭлементаПорции Тогда + Возврат Ложь; + КонецЕсли; + ОбщиеПараметрыОбновления.Вставить("ПоследнийЭлементПорции", ПоследняяПорция.ПоследнийЭлементПорции); + Иначе + Если ПоследняяПорция.КлючиДоступа = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + ОбщиеПараметрыОбновления.Вставить("ПоследнийКлючДоступаПорции", ПоследняяПорция.ПоследнийКлючДоступаПорции); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Возврат Истина; + КонецЕсли; + + Возврат ОписаниеЗаданий = Неопределено; + +КонецФункции + +// Для функции ЗапущеноОбновлениеДоступаСпискаВФоне и формы ОбновлениеДоступаНаУровнеЗаписей. +Функция ИмяМетодаОбновленияДоступаВФоне() Экспорт + + Возврат "УправлениеДоступомСлужебный.ВыполнитьОбновлениеДоступаСпискаВФоне"; + +КонецФункции + +// Для процедуры ВыполнитьОбновлениеДоступа, ЗапуститьОбновлениеДоступаСписка. +Процедура ПодождатьЗавершенияФоновогоЗадания(ИсполняющиеФоновыеЗадания, ОбработкаЗавершена) + + Для Каждого ОписаниеЗадания Из ИсполняющиеФоновыеЗадания.Состав Цикл + Если ТипЗнч(ОписаниеЗадания.Задание) <> Тип("ФоновоеЗадание") Тогда + Продолжить; + КонецЕсли; + ОбновитьСвойстваФоновогоЗадания(ОписаниеЗадания, ИсполняющиеФоновыеЗадания.ТекстОшибкиЗавершения); + Если ОписаниеЗадания.Задание.Состояние <> СостояниеФоновогоЗадания.Активно Тогда + Продолжить; + КонецЕсли; + Попытка + ОписаниеЗадания.Задание.ОжидатьЗавершения(0.2); + Исключение + // Ожидание завершено до завершения задания. + КонецПопытки; + Прервать; + КонецЦикла; + + Для Каждого ОписаниеЗадания Из ИсполняющиеФоновыеЗадания.Состав Цикл + ОбработатьЗавершенноеФоновоеЗадание(ОписаниеЗадания, ОбработкаЗавершена, ИсполняющиеФоновыеЗадания); + КонецЦикла; + ПроверитьЗавершитьОбновлениеПоПорциям(ИсполняющиеФоновыеЗадания); + +КонецПроцедуры + +// Для процедуры ВыполнитьОбновлениеДоступа. +Процедура ЗавершитьФоновыеЗадания(ИсполняющиеФоновыеЗадания, ОбработкаЗавершена) + + Для Каждого ОписаниеЗадания Из ИсполняющиеФоновыеЗадания.Состав Цикл + Если ТипЗнч(ОписаниеЗадания.Задание) <> Тип("ФоновоеЗадание") Тогда + Продолжить; + КонецЕсли; + ОбновитьСвойстваФоновогоЗадания(ОписаниеЗадания, ИсполняющиеФоновыеЗадания.ТекстОшибкиЗавершения); + Если ОписаниеЗадания.Задание.Состояние = СостояниеФоновогоЗадания.Активно Тогда + Попытка + ОписаниеЗадания.Задание.ОжидатьЗавершения(); + Исключение + ЗарегистрироватьОшибкуОбновленияДоступа(ИнформацияОбОшибке(), + ИсполняющиеФоновыеЗадания.ТекстОшибкиЗавершения, ОписаниеЗадания); + Продолжить; + КонецПопытки; + КонецЕсли; + ОбработатьЗавершенноеФоновоеЗадание(ОписаниеЗадания, ОбработкаЗавершена, ИсполняющиеФоновыеЗадания); + КонецЦикла; + +КонецПроцедуры + +// Для функции ЗапущеноОбновлениеДоступаСпискаВФоне и процедуры ЗавершитьФоновыеЗадания. +Процедура ОбработатьЗавершенноеФоновоеЗадание(ОписаниеЗадания, ОбработкаЗавершена, ИсполняющиеФоновыеЗадания, Отменить = Ложь) + + Если ТипЗнч(ОписаниеЗадания.Задание) <> Тип("ФоновоеЗадание") Тогда + Возврат; + КонецЕсли; + + ОбновитьСвойстваФоновогоЗадания(ОписаниеЗадания, ИсполняющиеФоновыеЗадания.ТекстОшибкиЗавершения); + Задание = ОписаниеЗадания.Задание; + + Если Задание.Состояние = СостояниеФоновогоЗадания.Активно Тогда + Если Отменить Тогда + ОбработкаЗавершена = Ложь; + Попытка + Задание.Отменить(); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ЗарегистрироватьОшибкуОбновленияДоступа(ИнформацияОбОшибке, + ИсполняющиеФоновыеЗадания.ТекстОшибкиЗавершения, ОписаниеЗадания); + КонецПопытки; + Иначе + Возврат; + КонецЕсли; + КонецЕсли; + + ИсполняющиеФоновыеЗадания.КоличествоСвободных = ИсполняющиеФоновыеЗадания.КоличествоСвободных + 1; + ОписаниеЗадания.Задание = Неопределено; + + Если Задание.Состояние = СостояниеФоновогоЗадания.Завершено И Не Отменить Тогда + Результат = ПолучитьИзВременногоХранилища(ОписаниеЗадания.АдресРезультата); + + Если ТипЗнч(Результат) <> Тип("Структура") Тогда + ОбработкаЗавершена = Ложь; + + ИначеЕсли ЗначениеЗаполнено(Результат.ТекстОшибкиЗавершения) Тогда + ДобавитьТекстОшибкиЗавершения(ИсполняющиеФоновыеЗадания.ТекстОшибкиЗавершения, + Результат.ТекстОшибкиЗавершения); + + ИначеЕсли Результат.Свойство("НаборПорций") Тогда + ДобавитьОбновлениеПоПорциям(ОписаниеЗадания, + Результат.НаборПорций, ИсполняющиеФоновыеЗадания, ОбработкаЗавершена); + + ИначеЕсли ОписаниеЗадания.ЗапускОбновленияПорции <> Неопределено Тогда + ОписаниеЗадания.ЗапускОбновленияПорции.Результат = Результат; + КонецЕсли; + КонецЕсли; + + ОписаниеЗадания.ЗапускОбновленияПорции = Неопределено; + ПроверитьЗавершитьОбновлениеПоПорциям(ИсполняющиеФоновыеЗадания); + + Если Задание.Состояние = СостояниеФоновогоЗадания.Завершено Тогда + Возврат; + КонецЕсли; + + ОбработкаЗавершена = Ложь; + + Если Задание.Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно Тогда + ЗарегистрироватьОшибкуОбновленияДоступа(Задание.ИнформацияОбОшибке, + ИсполняющиеФоновыеЗадания.ТекстОшибкиЗавершения, ОписаниеЗадания); + КонецЕсли; + +КонецПроцедуры + +// Для процедуры ОбработатьЗавершенноеФоновоеЗадание. +Процедура ДобавитьОбновлениеПоПорциям(ОписаниеЗадания, НаборПорций, ИсполняющиеФоновыеЗадания, ОбработкаЗавершена) + + ОбщиеПараметрыОбновления = + Новый Структура("ИдентификаторСписка, ДляВнешнихПользователей, ЭтоОбновлениеКлючейДоступаКДанным"); + ЗаполнитьЗначенияСвойств(ОбщиеПараметрыОбновления, ОписаниеЗадания); + + ОписаниеЗаданий = ОписаниеЗаданийОбновленияПорций(ИсполняющиеФоновыеЗадания, ОбщиеПараметрыОбновления); + + Если НаборПорций = Неопределено Тогда + Если ОписаниеЗаданий = Неопределено Тогда + Возврат; + КонецЕсли; + Индекс = ИсполняющиеФоновыеЗадания.ПоПорциям.Найти(ОписаниеЗаданий); + ИсполняющиеФоновыеЗадания.ПоПорциям.Удалить(Индекс); + Для Каждого Запуск Из ОписаниеЗаданий.Запуски Цикл + Для Каждого ОписаниеЗадания Из ИсполняющиеФоновыеЗадания.Состав Цикл + Если ОписаниеЗадания.ЗапускОбновленияПорции = Запуск Тогда + ОбработатьЗавершенноеФоновоеЗадание(ОписаниеЗадания, + ОбработкаЗавершена, ИсполняющиеФоновыеЗадания, Истина); + КонецЕсли; + КонецЦикла; + КонецЦикла; + Возврат; + КонецЕсли; + + Если ОписаниеЗаданий = Неопределено Тогда + ОписаниеЗаданий = Новый Структура; + ОписаниеЗаданий.Вставить("ОбщиеПараметрыОбновления", Новый ФиксированнаяСтруктура(ОбщиеПараметрыОбновления)); + ОписаниеЗаданий.Вставить("Запуски", Новый Массив); + ОписаниеЗаданий.Вставить("НаборПорций", НаборПорций); + ИсполняющиеФоновыеЗадания.ПоПорциям.Добавить(ОписаниеЗаданий); + Иначе + Для Каждого ПорцияНабора Из НаборПорций Цикл + ОписаниеЗаданий.НаборПорций.Добавить(ПорцияНабора); + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +Функция ОписаниеЗаданийОбновленияПорций(ИсполняющиеФоновыеЗадания, ОбщиеПараметрыОбновления) + + Для Каждого ОписаниеЗаданий Из ИсполняющиеФоновыеЗадания.ПоПорциям Цикл + ОбщиеПараметры = ОписаниеЗаданий.ОбщиеПараметрыОбновления; + + Если ОбщиеПараметрыОбновления.ЭтоОбновлениеКлючейДоступаКДанным = ОбщиеПараметры.ЭтоОбновлениеКлючейДоступаКДанным + И ОбщиеПараметрыОбновления.ДляВнешнихПользователей = ОбщиеПараметры.ДляВнешнихПользователей + И ОбщиеПараметрыОбновления.ИдентификаторСписка = ОбщиеПараметры.ИдентификаторСписка Тогда + + Возврат ОписаниеЗаданий; + КонецЕсли; + КонецЦикла; + + Возврат Неопределено; + +КонецФункции + +// Для процедуры ОбработатьЗавершенноеФоновоеЗадание. +Процедура ПроверитьЗавершитьОбновлениеПоПорциям(ИсполняющиеФоновыеЗадания) + + Индекс = ИсполняющиеФоновыеЗадания.ПоПорциям.Количество(); + Пока Индекс > 0 Цикл + Индекс = Индекс - 1; + ОписаниеЗаданий = ИсполняющиеФоновыеЗадания.ПоПорциям[Индекс]; + + ЗавершенныеЗапуски = Новый Массив; + Для Каждого Запуск Из ОписаниеЗаданий.Запуски Цикл + Если Запуск.Результат = Неопределено Тогда + Прервать; + КонецЕсли; + ЗавершенныеЗапуски.Добавить(Запуск); + ПоследнийЗавершенныйЗапуск = Запуск; + КонецЦикла; + Если ЗавершенныеЗапуски.Количество() > 0 Тогда + Если ОписаниеЗаданий.ОбщиеПараметрыОбновления.ЭтоОбновлениеКлючейДоступаКДанным Тогда + ОбновитьКлючиДоступаКДаннымСпискаЗавершение(ОписаниеЗаданий.ОбщиеПараметрыОбновления, + ПоследнийЗавершенныйЗапуск.Результат.НовыйПоследнийОбновленныйЭлемент); + Иначе + ОбновитьКлючиДоступаПользователейСпискаЗавершение(ОписаниеЗаданий.ОбщиеПараметрыОбновления, + ПоследнийЗавершенныйЗапуск.Результат.НовыйПоследнийОбновленныйКлючДоступа); + КонецЕсли; + Для Счетчик = 1 По ЗавершенныеЗапуски.Количество() Цикл + ОписаниеЗаданий.Запуски.Удалить(0); + КонецЦикла; + КонецЕсли; + + ЕстьОшибка = Ложь; + Для Каждого Запуск Из ОписаниеЗаданий.Запуски Цикл + Если Запуск.Результат <> Неопределено Тогда + Продолжить; + КонецЕсли; + ПорцияОбновляется = Ложь; + Для Каждого ОписаниеЗадания Из ИсполняющиеФоновыеЗадания.Состав Цикл + Если ОписаниеЗадания.ЗапускОбновленияПорции = Запуск Тогда + ПорцияОбновляется = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + Если Не ПорцияОбновляется Тогда + ЕстьОшибка = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Если ЕстьОшибка + Или ОписаниеЗаданий.Запуски.Количество() = 0 + И ОписаниеЗаданий.НаборПорций.Количество() = 0 Тогда + + ИсполняющиеФоновыеЗадания.ПоПорциям.Удалить(Индекс); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Для процедуры ЗавершитьФоновыеЗадания, ОбработатьЗавершенноеФоновоеЗадание. +Процедура ОбновитьСвойстваФоновогоЗадания(ОписаниеЗадания, ТекстОшибкиЗавершения) + + Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору( + ОписаниеЗадания.Задание.УникальныйИдентификатор); + + Если Задание = Неопределено Тогда + ЗарегистрироватьОшибкуОбновленияДоступа( + НСтр("ru = 'Не удалось найти запущенное фоновое задание.'"), + ТекстОшибкиЗавершения, + ОписаниеЗадания); + + ОбработкаЗавершена = Ложь; + Возврат; + КонецЕсли; + ОписаниеЗадания.Задание = Задание; + +КонецПроцедуры + +// Для функции ЗапущеноОбновлениеДоступаСпискаВФоне. +Процедура ВыполнитьОбновлениеДоступаСпискаВФоне(ОбщиеПараметрыОбновления, АдресРезультата) Экспорт + + Результат = Новый Структура; + Результат.Вставить("ОбработкаЗавершена", Истина); + Результат.Вставить("ТекстОшибкиЗавершения", ""); + + Попытка + ВыполнитьОбновлениеДоступаСписка(ОбщиеПараметрыОбновления, Результат.ОбработкаЗавершена); + Исключение + ЗарегистрироватьОшибкуОбновленияДоступа(ИнформацияОбОшибке(), + Результат.ТекстОшибкиЗавершения, ОбщиеПараметрыОбновления); + + Результат.ОбработкаЗавершена = Ложь; + КонецПопытки; + + Если ОбщиеПараметрыОбновления.Свойство("НаборПорций") Тогда + Результат.Вставить("НаборПорций", ОбщиеПараметрыОбновления.НаборПорций); + КонецЕсли; + Если ОбщиеПараметрыОбновления.Свойство("НовыйПоследнийОбновленныйЭлемент") Тогда + Результат.Вставить("НовыйПоследнийОбновленныйЭлемент", + ОбщиеПараметрыОбновления.НовыйПоследнийОбновленныйЭлемент); + КонецЕсли; + Если ОбщиеПараметрыОбновления.Свойство("НовыйПоследнийОбновленныйКлючДоступа") Тогда + Результат.Вставить("НовыйПоследнийОбновленныйКлючДоступа", + ОбщиеПараметрыОбновления.НовыйПоследнийОбновленныйКлючДоступа); + КонецЕсли; + + ПоместитьВоВременноеХранилище(Результат, АдресРезультата); + +КонецПроцедуры + +// Для процедур ОбновлениеДоступаНаУровнеЗаписей, ЗавершитьФоновыеЗадания, +// ОбработатьЗавершенноеФоновоеЗадание, ВыполнитьОбновлениеДоступаСпискаВФоне. +// +Процедура ЗарегистрироватьОшибкуОбновленияДоступа(ИнформацияОбОшибке, ТекстОшибкиЗавершения, ОписаниеЗадания = Неопределено) + + ДобавитьТекстОшибкиЗавершения(ТекстОшибкиЗавершения, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + + Если ОписаниеЗадания = Неопределено Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось выполнить обновление доступа по причине: + |%1'"), + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + + ИначеЕсли ОписаниеЗадания.ЭтоОбновлениеКлючейДоступаКДанным Тогда + + Если ОписаниеЗадания.ДляВнешнихПользователей Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось обновить порцию ключей доступа к данным списка + |""%1"" (для внешних пользователей) + |по причине: + |%2'"), + Строка(ОписаниеЗадания.ИдентификаторСписка), + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + Иначе + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось обновить порцию ключей доступа к данным списка + |""%1"" (для пользователей) + |по причине: + |%2'"), + Строка(ОписаниеЗадания.ИдентификаторСписка), + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + КонецЕсли; + + Иначе // ОбновлениеКлючейДоступаПользователей. + + Если ОписаниеЗадания.ДляВнешнихПользователей Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось обновить порцию ключей доступа внешних пользователей + |для списка ""%1"" + |по причине: + |%2'"), + Строка(ОписаниеЗадания.ИдентификаторСписка), + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + Иначе + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось обновить порцию ключей доступа пользователей + |для списка ""%1"" + |по причине: + |%2'"), + Строка(ОписаниеЗадания.ИдентификаторСписка), + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + КонецЕсли; + КонецЕсли; + + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Управление доступом.Обновление доступа на уровне записей'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , , ТекстОшибки); + +КонецПроцедуры + +// Для процедуры ЗарегистрироватьОшибкуОбновленияДоступа, ОбработатьЗавершенноеФоновоеЗадание. +Процедура ДобавитьТекстОшибкиЗавершения(ТекстОшибкиЗавершения, ТекстОшибки) + + Если ЗначениеЗаполнено(ТекстОшибкиЗавершения) Тогда + Если СтрНайти(ТекстОшибкиЗавершения, ТекстОшибки) > 0 Тогда + Возврат; + КонецЕсли; + ТекстОшибкиЗавершения = ТекстОшибкиЗавершения + Символы.ПС + Символы.ПС; + КонецЕсли; + + ТекстОшибкиЗавершения = ТекстОшибкиЗавершения + ТекстОшибки; + +КонецПроцедуры + +// Для функции ЗапущеноОбновлениеДоступаСпискаВФоне. +Процедура ВыполнитьОбновлениеДоступаСписка(ОбщиеПараметрыОбновления, ОбработкаЗавершена) + + Если ОбщиеПараметрыОбновления.Свойство("ОбъектыМетаданныхПоИдентификаторам") Тогда + ОбъектМетаданных = ОбщиеПараметрыОбновления.ОбъектыМетаданныхПоИдентификаторам.Получить( + ОбщиеПараметрыОбновления.ИдентификаторСписка); + Иначе + ОбъектМетаданных = Справочники.ИдентификаторыОбъектовМетаданных.ОбъектМетаданныхПоИдентификатору( + ОбщиеПараметрыОбновления.ИдентификаторСписка, Истина); + КонецЕсли; + + Если ОбъектМетаданных = Неопределено Тогда + // Если расширение конфигурации отключено, тогда обновление невозможно, + // но нельзя очищать регистрацию к обновлению. + Возврат; + КонецЕсли; + + Если Не ОбщиеПараметрыОбновления.Свойство("ПолучитьПорции") Тогда + ОбщиеПараметрыОбновления.Вставить("ПолучитьПорции", 0); + КонецЕсли; + + Если ОбщиеПараметрыОбновления.ЭтоОбновлениеКлючейДоступаКДанным Тогда + ОбновитьКлючиДоступаКДаннымСписка(ОбъектМетаданных, ОбщиеПараметрыОбновления, ОбработкаЗавершена); + Иначе + ОбновитьКлючиДоступаПользователейСписка(ОбъектМетаданных, ОбщиеПараметрыОбновления, ОбработкаЗавершена); + КонецЕсли; + +КонецПроцедуры + +// Для процедур ВыполнитьОбновлениеДоступаСписка. +Процедура ОбновитьКлючиДоступаКДаннымСписка(ОбъектМетаданных, ОбщиеПараметрыОбновления, ОбработкаЗавершена) + + Если ТипЗнч(ОбъектМетаданных) <> Тип("ОбъектМетаданных") Тогда + // Очистка записей не существующих объектов метаданных. + ПустойНабор = СлужебныйНаборЗаписей(РегистрыСведений.ОбновлениеКлючейДоступаКДанным); + ПустойНабор.Отбор.Список.Установить(ОбщиеПараметрыОбновления.ИдентификаторСписка); + ПустойНабор.Записать(); + Возврат; + КонецЕсли; + + ПараметрыОбновления = Новый Структура; + ПараметрыОбновления.Вставить("Список", ОбъектМетаданных.ПолноеИмя()); + ПараметрыОбновления.Вставить("ИдентификаторСписка", ОбщиеПараметрыОбновления.ИдентификаторСписка); + ПараметрыОбновления.Вставить("ДляВнешнихПользователей", ОбщиеПараметрыОбновления.ДляВнешнихПользователей); + + Если ОбщиеПараметрыОбновления.Свойство("ПорцияНабора") Тогда + ОбновитьКлючиДоступаЭлементовДанныхСписка(ПараметрыОбновления, + ОбщиеПараметрыОбновления.ПорцияНабора.ЭлементыДанных.Получить()); + + ОбщиеПараметрыОбновления.Вставить("НовыйПоследнийОбновленныйЭлемент", + ПараметрыОбновления.НовыйПоследнийОбновленныйЭлемент); + Возврат; + КонецЕсли; + + ПараметрыОбновления.Вставить("ДатаНачала", ОбщиеПараметрыОбновления.ДатаНачала); + ПараметрыОбновления.Вставить("ДатаОкончания", ОбщиеПараметрыОбновления.ДатаОкончания); + ПараметрыОбновления.Вставить("НачальноеОбновление", ОбщиеПараметрыОбновления.НачальноеОбновление); + ПараметрыОбновления.Вставить("ПолучитьПорции", ОбщиеПараметрыОбновления.ПолучитьПорции); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Список", ПараметрыОбновления.ИдентификаторСписка); + Запрос.УстановитьПараметр("ДляВнешнихПользователей", ПараметрыОбновления.ДляВнешнихПользователей); + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1000 + | КлючиУникальности.КлючУникальности КАК КлючУникальности, + | КлючиУникальности.ДатаПоследнегоОбновленногоЭлемента КАК ДатаПоследнегоОбновленногоЭлемента, + | КлючиУникальности.ПоследнийОбновленныйЭлемент КАК ПоследнийОбновленныйЭлемент + |ИЗ + | РегистрСведений.ОбновлениеКлючейДоступаКДанным КАК КлючиУникальности + |ГДЕ + | КлючиУникальности.Список = &Список + | И КлючиУникальности.ДляВнешнихПользователей = &ДляВнешнихПользователей"; + Выгрузка = Запрос.Выполнить().Выгрузить(); + + Если Выгрузка.Количество() = 0 Тогда + Если ПараметрыОбновления.ПолучитьПорции > 0 + И ОбщиеПараметрыОбновления.Свойство("ПоследнийЭлементПорции") Тогда + + ОбщиеПараметрыОбновления.Вставить("НаборПорций", Неопределено); + КонецЕсли; + Возврат; + КонецЕсли; + + ПоследнийОбновленныйЭлемент = Новый Структура("Дата, КлючДанных", МаксимальнаяДата()); + + Если Выгрузка.Количество() = 1 + И Не ЗначениеЗаполнено(Выгрузка[0].КлючУникальности) Тогда + + СохраненнаяДата = Выгрузка[0].ДатаПоследнегоОбновленногоЭлемента; + Если ТипЗнч(СохраненнаяДата) = Тип("Дата") Тогда + ПоследнийОбновленныйЭлемент.Дата = СохраненнаяДата; + КонецЕсли; + ПоследнийОбновленныйЭлемент.КлючДанных = Выгрузка[0].ПоследнийОбновленныйЭлемент.Получить(); + Иначе + Если ПараметрыОбновления.ПолучитьПорции > 0 + И ОбщиеПараметрыОбновления.Свойство("ПоследнийЭлементПорции") Тогда + + ОбщиеПараметрыОбновления.Вставить("НаборПорций", Неопределено); + ОбработкаЗавершена = Ложь; + Возврат; + КонецЕсли; + + ПланОбновленияКлючей = СлужебныйНаборЗаписей(РегистрыСведений.ОбновлениеКлючейДоступаКДанным); + ПланОбновленияКлючей.Отбор.Список.Установить(ПараметрыОбновления.ИдентификаторСписка); + ПланОбновленияКлючей.Отбор.ДляВнешнихПользователей.Установить(ПараметрыОбновления.ДляВнешнихПользователей); + ПланОбновленияКлючей.Отбор.КлючУникальности.Установить( + Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ОбновлениеКлючейДоступаКДанным"); + ЭлементБлокировки.УстановитьЗначение("Список", ПараметрыОбновления.ИдентификаторСписка); + ЭлементБлокировки.УстановитьЗначение("ДляВнешнихПользователей", ПараметрыОбновления.ДляВнешнихПользователей); + ЭлементБлокировки.УстановитьЗначение("КлючУникальности", + Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + + Для Каждого Строка Из Выгрузка Цикл + Если Не ЗначениеЗаполнено(Строка.КлючУникальности) Тогда + Продолжить; + КонецЕсли; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ОбновлениеКлючейДоступаКДанным"); + ЭлементБлокировки.УстановитьЗначение("Список", ПараметрыОбновления.ИдентификаторСписка); + ЭлементБлокировки.УстановитьЗначение("ДляВнешнихПользователей", ПараметрыОбновления.ДляВнешнихПользователей); + ЭлементБлокировки.УстановитьЗначение("КлючУникальности", Строка.КлючУникальности); + Прервать; + КонецЦикла; + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "ВЫБРАТЬ ПЕРВЫЕ 1000", "ВЫБРАТЬ ПЕРВЫЕ 1"); + ЗаданияУдалены = Ложь; + + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + Если Запрос.Выполнить().Пустой() Тогда + ЗаданияУдалены = Истина; + Иначе + Запись = ПланОбновленияКлючей.Добавить(); + Запись.Список = ПараметрыОбновления.ИдентификаторСписка; + Запись.ДляВнешнихПользователей = ПараметрыОбновления.ДляВнешнихПользователей; + Запись.ДатаПоследнегоОбновленногоЭлемента = ПоследнийОбновленныйЭлемент.Дата; + Запись.ДатаИзмененияЗаписиРегистра = ТекущаяДатаСеанса(); + ПланОбновленияКлючей.Записать(); + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Если ЗаданияУдалены Тогда + Если ПараметрыОбновления.ПолучитьПорции > 0 + И ОбщиеПараметрыОбновления.Свойство("ПоследнийЭлементПорции") Тогда + + ОбщиеПараметрыОбновления.Вставить("НаборПорций", Неопределено); + КонецЕсли; + Возврат; + КонецЕсли; + + ПланОбновленияКлючей.Очистить(); + Для Каждого Строка Из Выгрузка Цикл + Если Не ЗначениеЗаполнено(Строка.КлючУникальности) Тогда + Продолжить; + КонецЕсли; + ПланОбновленияКлючей.Отбор.КлючУникальности.Установить(Строка.КлючУникальности); + ПланОбновленияКлючей.Записать(); + КонецЦикла; + Если Выгрузка.Количество() = 1000 Тогда + ОбработкаЗавершена = Ложь; + КонецЕсли; + КонецЕсли; + + Если ПараметрыОбновления.ПолучитьПорции > 0 + И ОбщиеПараметрыОбновления.Свойство("ПоследнийЭлементПорции") Тогда + + ПараметрыОбновления.Вставить("ПоследнийЭлементПорции"); + ПоследнийОбновленныйЭлемент = Новый Структура("Дата, КлючДанных", МаксимальнаяДата()); + ЗаполнитьЗначенияСвойств(ПоследнийОбновленныйЭлемент, ОбщиеПараметрыОбновления.ПоследнийЭлементПорции); + КонецЕсли; + + Если ЗначениеЗаполнено(ПоследнийОбновленныйЭлемент.Дата) + И ОбщиеПараметрыОбновления.ДатаНачала > ПоследнийОбновленныйЭлемент.Дата Тогда + + ОбработкаЗавершена = Ложь; + Возврат; + КонецЕсли; + + ПараметрыОбновления.Вставить("ПоследнийОбновленныйЭлемент", ПоследнийОбновленныйЭлемент); + ПараметрыОбновления.Вставить("НовыйПоследнийОбновленныйЭлемент", Неопределено); + + ОбновитьКлючиДоступаЭлементовДанныхСписка(ПараметрыОбновления); + + Если ПараметрыОбновления.Свойство("НаборПорций") Тогда + ОбщиеПараметрыОбновления.Вставить("НаборПорций", ПараметрыОбновления.НаборПорций); + ОбработкаЗавершена = Ложь; + Возврат; + КонецЕсли; + + ОбновитьКлючиДоступаКДаннымСпискаЗавершение(ОбщиеПараметрыОбновления, + ПараметрыОбновления.НовыйПоследнийОбновленныйЭлемент, ОбработкаЗавершена); + +КонецПроцедуры + +// Для процедур ОбновитьКлючиДоступаКДаннымСписка, ПроверитьЗавершитьОбновлениеПоПорциям. +Процедура ОбновитьКлючиДоступаКДаннымСпискаЗавершение(ОбщиеПараметрыОбновления, ПоследнийОбновленныйЭлемент, ОбработкаЗавершена = Истина) + + ПланОбновленияКлючей = СлужебныйНаборЗаписей(РегистрыСведений.ОбновлениеКлючейДоступаКДанным); + ПланОбновленияКлючей.Отбор.Список.Установить(ОбщиеПараметрыОбновления.ИдентификаторСписка); + ПланОбновленияКлючей.Отбор.ДляВнешнихПользователей.Установить(ОбщиеПараметрыОбновления.ДляВнешнихПользователей); + ПланОбновленияКлючей.Отбор.КлючУникальности.Установить( + Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ОбновлениеКлючейДоступаКДанным"); + ЭлементБлокировки.УстановитьЗначение("Список", ОбщиеПараметрыОбновления.ИдентификаторСписка); + ЭлементБлокировки.УстановитьЗначение("ДляВнешнихПользователей", ОбщиеПараметрыОбновления.ДляВнешнихПользователей); + ЭлементБлокировки.УстановитьЗначение("КлючУникальности", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + ПланОбновленияКлючей.Прочитать(); + Если ПланОбновленияКлючей.Количество() > 0 Тогда + Если ПоследнийОбновленныйЭлемент = Неопределено Тогда + ПланОбновленияКлючей.Очистить(); + Иначе + Запись = ПланОбновленияКлючей[0]; + Запись.ДатаИзмененияЗаписиРегистра = ТекущаяДатаСеанса(); + Если ПоследнийОбновленныйЭлемент.Свойство("Дата") Тогда + Запись.ДатаПоследнегоОбновленногоЭлемента = ПоследнийОбновленныйЭлемент.Дата; + Запись.ПоследнийОбновленныйЭлемент = Новый ХранилищеЗначения(Неопределено); + Иначе + Запись.ДатаПоследнегоОбновленногоЭлемента = '00010101'; + Запись.ПоследнийОбновленныйЭлемент = Новый ХранилищеЗначения(ПоследнийОбновленныйЭлемент.КлючДанных); + КонецЕсли; + ОбработкаЗавершена = Ложь; + КонецЕсли; + ПланОбновленияКлючей.Записать(); + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Для процедуры ОбновитьКлючиДоступаКДаннымСписка. +Процедура ОбновитьКлючиДоступаЭлементовДанныхСписка(ПараметрыОбновления, ЭлементыДанных = Неопределено) + + ИдентификаторТранзакции = Новый УникальныйИдентификатор; + СвойстваСпискаКакВедущего = СвойстваСпискаКакВедущего(ПараметрыОбновления.Список, ИдентификаторТранзакции); + ПараметрыОграничения = ПараметрыОграничения(ПараметрыОбновления.Список, + ИдентификаторТранзакции, ПараметрыОбновления.ДляВнешнихПользователей); + + ПараметрыОграничения = Новый Структура(ПараметрыОграничения); + Для Каждого КлючИЗначение Из ПараметрыОбновления Цикл + ПараметрыОграничения.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + КонецЦикла; + ПараметрыОбновления = ПараметрыОграничения; + ПараметрыОбновления.Вставить("ИдентификаторТранзакции", ИдентификаторТранзакции); + + ИмяСвойстваВидаПользователей = ?(ПараметрыОбновления.ДляВнешнихПользователей, + "ДляВнешнихПользователей", "ДляПользователей"); + + Если СвойстваСпискаКакВедущего = Неопределено + Или СвойстваСпискаКакВедущего.ПоКлючамДоступа = Неопределено + Или СвойстваСпискаКакВедущего.ПоКлючамДоступа[ИмяСвойстваВидаПользователей] = Неопределено Тогда + + ПараметрыОбновления.Вставить("ЗависимыеСпискиПоКлючамДоступа", Новый Массив); + Иначе + ПараметрыОбновления.Вставить("ЗависимыеСпискиПоКлючамДоступа", + СвойстваСпискаКакВедущего.ПоКлючамДоступа[ИмяСвойстваВидаПользователей]); + КонецЕсли; + + ПорцияЭлементовНабора = 1000; + Если ЭлементыДанных = Неопределено Тогда + Запрос = Новый Запрос; + УстановленныйКлючДанных = Неопределено; + УстановитьПараметрыПоследнегоОбновленногоЭлемента(Запрос, ПараметрыОбновления, УстановленныйКлючДанных); + УстановитьТекстЗапросаЭлементовДанныхДляОбработки(Запрос, ПараметрыОбновления); + + РазмерПорции = РазмерПорцииЭлементовДанных(); + Если ПараметрыОбновления.НачальноеОбновление Тогда + РазмерПорции = Цел(РазмерПорции / 100); + + ИначеЕсли ПараметрыОбновления.ПолучитьПорции > 0 + И ( РазмерПорции < ПараметрыОбновления.ПолучитьПорции * ПорцияЭлементовНабора + Или ПараметрыОбновления.Свойство("ПоследнийЭлементПорции")) Тогда + + РазмерПорции = ПараметрыОбновления.ПолучитьПорции * ПорцияЭлементовНабора; + КонецЕсли; + РазмерПорции = ?(РазмерПорции < 25, 25, ?(РазмерПорции > 10000, 10000, РазмерПорции)); + Запрос.Текст = СтрЗаменить(Запрос.Текст, МаркерРазмераПорции(), Формат(РазмерПорции, "ЧГ=")); + + ЭлементыДанных = Запрос.Выполнить().Выгрузить(); + + РезультатПустой = Ложь; + Если ЭлементыДанных.Количество() = 0 Тогда + РезультатПустой = Истина; + КонецЕсли; + + Если РезультатПустой Тогда + Если ПараметрыОбновления.СписокСДатой Тогда + Запрос.Текст = ПараметрыОбновления.ТекстЗапросаДатыСледующегоЭлементаДанных; + РезультатЗапроса = Запрос.Выполнить(); + Если Не РезультатЗапроса.Пустой() Тогда + ПараметрыОбновления.Вставить("НовыйПоследнийОбновленныйЭлемент", + ПоследнийЭлементДанных(РезультатЗапроса.Выгрузить(), ПараметрыОбновления)); + КонецЕсли; + КонецЕсли; + Если Не ПараметрыОбновления.Свойство("ПоследнийЭлементПорции") Тогда + Возврат; + КонецЕсли; + ПараметрыОбновления.Вставить("НаборПорций", Новый Массив); + ПорцияНабора = Новый Структура("ЭлементыДанных", Неопределено); + ПараметрыОбновления.НаборПорций.Добавить(ПорцияНабора); + Если ЗначениеЗаполнено(ПараметрыОбновления.НовыйПоследнийОбновленныйЭлемент) Тогда + ПорцияНабора.Вставить("ПоследнийЭлементПорции", + ПараметрыОбновления.НовыйПоследнийОбновленныйЭлемент); + ПорцияНабора.Вставить("ДатаПоследнегоЭлементаПорции", + ПорцияНабора.ПоследнийЭлементПорции.Дата); + Иначе + ПорцияНабора.Вставить("ДатаПоследнегоЭлементаПорции", '00010101'); + КонецЕсли; + Возврат; + КонецЕсли; + + Если ПараметрыОбновления.ПолучитьПорции > 0 + И ( ПараметрыОбновления.Свойство("ПоследнийЭлементПорции") + Или ЭлементыДанных.Количество() > ПорцияЭлементовНабора * 2) Тогда + + НаборПорций = Новый Массив; + ПараметрыОбновления.Вставить("НаборПорций", НаборПорций); + Индекс = 0; + Для Каждого ЭлементДанных Из ЭлементыДанных Цикл + Если Индекс / ПорцияЭлементовНабора = Цел(Индекс / ПорцияЭлементовНабора) Тогда + ПорцияНабора = Новый Массив; + НаборПорций.Добавить(ПорцияНабора); + КонецЕсли; + ПорцияНабора.Добавить(ЭлементДанных); + Индекс = Индекс + 1; + КонецЦикла; + + МаксимальнаяДата = МаксимальнаяДата(); + Для Индекс = 0 По НаборПорций.Количество() - 1 Цикл + ЭлементыДанныхПорции = ЭлементыДанных.Скопировать(НаборПорций[Индекс]); + ПорцияНабора = Новый Структура; + НаборПорций[Индекс] = ПорцияНабора; + ПорцияНабора.Вставить("ЭлементыДанных", Новый ХранилищеЗначения(ЭлементыДанныхПорции)); + Если ПараметрыОбновления.СписокСДатой Тогда + ПорцияНабора.Вставить("ДатаПоследнегоЭлементаПорции", + ЭлементыДанныхПорции[ЭлементыДанныхПорции.Количество()-1].Дата); + Иначе + ПорцияНабора.Вставить("ДатаПоследнегоЭлементаПорции", МаксимальнаяДата); + КонецЕсли; + ПорцияНабора.Вставить("ПоследнийЭлементПорции", + ПоследнийЭлементДанных(ЭлементыДанныхПорции, ПараметрыОбновления)); + КонецЦикла; + Возврат; + КонецЕсли; + КонецЕсли; + + Если ПараметрыОбновления.ОграничениеОтключено + Или ПараметрыОбновления.ДоступЗапрещен + Или ПараметрыОбновления.ИспользуетсяОграничениеПоВладельцу Тогда + + Если Не ПараметрыОбновления.Свойство("ТекстЗапросаЭлементовДанныхДляОчисткиКлючей") Тогда + ОбновитьЭлементыДанныхСпискаСУстаревшимРазрешеннымКлючом(ЭлементыДанных, ПараметрыОбновления); + + ИначеЕсли ЗначениеЗаполнено(ПараметрыОбновления.ТекстЗапросаЭлементовДанныхДляОчисткиКлючей) Тогда + ОчиститьКлючиДоступаЭлементовДанныхСписка(ЭлементыДанных, ПараметрыОбновления); + Иначе + Возврат; + КонецЕсли; + Иначе + ОбновитьЭлементыДанныхСпискаСУстаревшимиКлючами(ЭлементыДанных, ПараметрыОбновления); + КонецЕсли; + + ПараметрыОбновления.Вставить("НовыйПоследнийОбновленныйЭлемент", + ПоследнийЭлементДанных(ЭлементыДанных, ПараметрыОбновления)); + +КонецПроцедуры + +// Для процедуры ОбновитьКлючиДоступаЭлементовДанныхСписка. +Функция ПоследнийЭлементДанных(ЭлементыДанных, ПараметрыОбновления, КлючДанных = Неопределено) + + ЭлементДанных = Новый Структура; + Если ПараметрыОбновления.СписокСДатой Тогда + ЭлементДанных.Вставить("Дата"); + + ИначеЕсли ПараметрыОбновления.ЭтоСсылочныйТип Тогда + ЭлементДанных.Вставить("КлючДанных"); + Иначе + ЭлементДанных.Вставить("КлючДанных", КлючДанных(ПараметрыОбновления)); + КонецЕсли; + + ПоследнийЭлементДанных = ЭлементыДанных[ЭлементыДанных.Количество() - 1]; + + Если ПараметрыОбновления.СписокСДатой Тогда + ЭлементДанных.Дата = ПоследнийЭлементДанных.Дата; + КлючДанных = ЭлементДанных.Дата; + + ИначеЕсли ПараметрыОбновления.ЭтоСсылочныйТип Тогда + ЭлементДанных.КлючДанных = ПоследнийЭлементДанных.ТекущаяСсылка; + КлючДанных = ЭлементДанных.КлючДанных; + Иначе + ЗаполнитьЗначенияСвойств(ЭлементДанных.КлючДанных, ПоследнийЭлементДанных); + КлючДанных = ЭлементДанных.КлючДанных; + КонецЕсли; + + Возврат ЭлементДанных; + +КонецФункции + +// Для процедуры ОбновитьКлючиДоступаЭлементовДанныхСписка. +Процедура УстановитьПараметрыПоследнегоОбновленногоЭлемента(Запрос, ПараметрыОбновления, УстановленныйКлючДанных) + + Если ПараметрыОбновления.СписокСДатой Тогда + Запрос.УстановитьПараметр("ДатаНачала", ПараметрыОбновления.ДатаНачала); + Запрос.УстановитьПараметр("ДатаОкончания", ПараметрыОбновления.ПоследнийОбновленныйЭлемент.Дата); + УстановленныйКлючДанных = ПараметрыОбновления.ПоследнийОбновленныйЭлемент.Дата; + Возврат; + КонецЕсли; + + КлючДанных = ПараметрыОбновления.ПоследнийОбновленныйЭлемент.КлючДанных; + + Если ПараметрыОбновления.ЭтоСсылочныйТип Тогда + УстановленныйКлючДанных = ?(ОбщегоНазначения.ЭтоСсылка(ТипЗнч(КлючДанных)), КлючДанных, Неопределено); + Запрос.УстановитьПараметр("ПоследняяОбработаннаяСсылка", УстановленныйКлючДанных); + Возврат; + КонецЕсли; + + Запрос.УстановитьПараметр("ИдентификаторРегистра", ПараметрыОбновления.ИдентификаторСписка); + + УстановленныйКлючДанных = КлючДанных(ПараметрыОбновления, КлючДанных); + Для Каждого КлючИЗначение Из УстановленныйКлючДанных Цикл + Запрос.УстановитьПараметр(КлючИЗначение.Ключ, КлючИЗначение.Значение); + КонецЦикла; + +КонецПроцедуры + +// Для процедур ОбновитьКлючиДоступаЭлементовДанныхСписка, УстановитьПараметрыПоследнегоОбновленногоЭлемента и +// функции ТекстЗапросаКоличестваОставшихсяЭлементовРегистра. +// +Функция КлючДанных(ПараметрыОбновления, ИсходныйКлючДанных = Неопределено) + + КоличествоПолей = ПараметрыОбновления.ОпорныеПоля.Используемые.Количество(); + Если КоличествоПолей = 0 Или ПараметрыОбновления.ИспользуетсяОграничениеПоВладельцу Тогда + КоличествоПолей = ПараметрыОбновления.ОпорныеПоля.МаксимальноеКоличество; + КонецЕсли; + + Если ТипЗнч(ИсходныйКлючДанных) = Тип("Структура") + И ИсходныйКлючДанных.Количество() = КоличествоПолей Тогда + + ЗначенияПолей = ИсходныйКлючДанных; + Иначе + ЗначенияПолей = Новый Структура; + КонецЕсли; + + НовыйКлючДанных = Новый Структура; + Для Номер = 1 По КоличествоПолей Цикл + ИмяПоля = "Поле" + Номер; + Если ЗначенияПолей.Свойство(ИмяПоля) Тогда + НовыйКлючДанных.Вставить(ИмяПоля, ЗначенияПолей[ИмяПоля]); + Иначе + НовыйКлючДанных.Вставить(ИмяПоля, Неопределено); + КонецЕсли; + КонецЦикла; + + Возврат НовыйКлючДанных; + +КонецФункции + +// Для процедуры ОбновитьКлючиДоступаЭлементовДанныхСписка и функции КлючДоступаИсточникаУстарел. +Процедура УстановитьТекстЗапросаЭлементовДанныхДляОбработки(Запрос, ПараметрыОграничения); + + Если ПараметрыОграничения.ОграничениеОтключено + Или ПараметрыОграничения.ДоступЗапрещен + Или ПараметрыОграничения.ИспользуетсяОграничениеПоВладельцу Тогда + + Если Не ПараметрыОграничения.Свойство("ТекстЗапросаЭлементовДанныхДляОчисткиКлючей") Тогда + Запрос.УстановитьПараметр("РазрешенныйКлючДоступа", УправлениеДоступомСлужебныйПовтИсп.РазрешенныйКлючДоступа()); + Запрос.Текст = ПараметрыОграничения.ТекстЗапросаЭлементовДанныхСУстаревшимРазрешеннымКлючом; + + ИначеЕсли ЗначениеЗаполнено(ПараметрыОграничения.ТекстЗапросаЭлементовДанныхДляОчисткиКлючей) Тогда + Запрос.Текст = ПараметрыОграничения.ТекстЗапросаЭлементовДанныхДляОчисткиКлючей; + Иначе + Возврат; + КонецЕсли; + Иначе + Запрос.Текст = ПараметрыОграничения.ТекстЗапросаЭлементовДанныхСУстаревшимиКлючами; + КонецЕсли; + +КонецПроцедуры + +// Для процедур ОбновитьКлючиДоступаЭлементовДанныхСписка, ОбновитьКлючиДоступаЭлементовДанныхПриЗаписи. +Процедура ОбновитьЭлементыДанныхСпискаСУстаревшимРазрешеннымКлючом(ЭлементыДанных, ПараметрыОбновления) + + Если Не ПараметрыОбновления.ЭтоСсылочныйТип Тогда + Возврат; + КонецЕсли; + + Контекст = Новый Структура; + Контекст.Вставить("СсылкиНаОбъекты", ЭлементыДанных.ВыгрузитьКолонку("ТекущаяСсылка")); + Контекст.Вставить("ОписаниеКлючейДоступаОбъектов", ЭлементыДанных); + + РазрешенныйКлючДоступа = УправлениеДоступомСлужебныйПовтИсп.РазрешенныйКлючДоступа(); + + ЭлементыДанных.Колонки.Добавить("СвойстваКлюча", Новый ОписаниеТипов("Структура")); + ЭлементыДанных.ЗаполнитьЗначения(Новый Структура("КлючДоступа", РазрешенныйКлючДоступа), "СвойстваКлюча"); + + ЗаписатьКлючиДоступаОбъектов(ПараметрыОбновления, Контекст); + + Если ПараметрыОбновления.Свойство("ОбновитьПраваНаКлючи") + И ПараметрыОбновления.ОбновитьПраваНаКлючи Тогда + + ОбновитьПраваНаРазрешенныйКлючДоступа(ПараметрыОбновления.ЕстьИзмененияПрав); + КонецЕсли; + +КонецПроцедуры + +// Для процедуры ОбновитьЭлементыДанныхСпискаСУстаревшимРазрешеннымКлючом. +Процедура ОбновитьПраваНаРазрешенныйКлючДоступа(ЕстьИзменения = Ложь) + + ОбновитьГруппыДоступаРазрешенногоКлючаДоступа(, ЕстьИзменения); + ОбновитьПользователейРазрешенногоКлючаДоступа(, ЕстьИзменения); + ОбновитьВнешнихПользователейРазрешенногоКлючаДоступа(, ЕстьИзменения); + +КонецПроцедуры + +// Для процедуры ОбновитьПраваНаРазрешенныйКлючДоступа. +Процедура ОбновитьГруппыДоступаРазрешенногоКлючаДоступа(ГруппыДоступа = Неопределено, ЕстьИзменения = Ложь) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ТекстЗапросовВременныхТаблиц = + "ВЫБРАТЬ + | ГруппыДоступа.Ссылка КАК ГруппаДоступа, + | &РазрешенныйКлючДоступа КАК КлючДоступа, + | ИСТИНА КАК Изменение, + | ИСТИНА КАК Добавление + |ПОМЕСТИТЬ НовыеДанные + |ИЗ + | Справочник.ГруппыДоступа КАК ГруппыДоступа + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа КАК ПрофилиГруппДоступа + | ПО ГруппыДоступа.Профиль = ПрофилиГруппДоступа.Ссылка + | И (ГруппыДоступа.Профиль <> ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор)) + | И (НЕ ГруппыДоступа.ПометкаУдаления) + | И (НЕ ПрофилиГруппДоступа.ПометкаУдаления) + | И (&УсловиеОтбораГруппДоступа1) + | И (ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + | ИЗ + | Справочник.ГруппыДоступа.Пользователи КАК УчастникиГруппДоступа + | ГДЕ + | УчастникиГруппДоступа.Ссылка = ГруппыДоступа.Ссылка)) + | + |ИНДЕКСИРОВАТЬ ПО + | ГруппаДоступа, + | КлючДоступа"; + + ТекстЗапроса = + "ВЫБРАТЬ + | НовыеДанные.ГруппаДоступа, + | НовыеДанные.КлючДоступа, + | НовыеДанные.Изменение, + | НовыеДанные.Добавление, + | &ПодстановкаПоляВидИзмененияСтроки + |ИЗ + | НовыеДанные КАК НовыеДанные"; + + // Подготовка выбираемых полей с необязательным отбором. + Поля = Новый Массив; + Поля.Добавить(Новый Структура("ГруппаДоступа", "&УсловиеОтбораГруппДоступа2")); + Поля.Добавить(Новый Структура("КлючДоступа", "&УсловиеОтбораРазрешенногоКлючаДоступа")); + Поля.Добавить(Новый Структура("Изменение")); + Поля.Добавить(Новый Структура("Добавление")); + + РазрешенныйКлючДоступа = УправлениеДоступомСлужебныйПовтИсп.РазрешенныйКлючДоступа(); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("РазрешенныйКлючДоступа", РазрешенныйКлючДоступа); + Запрос.Текст = ТекстЗапросаВыбораИзменений(ТекстЗапроса, + Поля, "РегистрСведений.КлючиДоступаГруппДоступа", ТекстЗапросовВременныхТаблиц); + + УстановитьУсловиеОтбораВЗапросе(Запрос, ГруппыДоступа, "ГруппыДоступа", + "&УсловиеОтбораГруппДоступа1:ГруппыДоступа.Ссылка + |&УсловиеОтбораГруппДоступа2:СтарыеДанные.ГруппаДоступа"); + + УстановитьУсловиеОтбораВЗапросе(Запрос, РазрешенныйКлючДоступа, "КлючДоступа", + "&УсловиеОтбораРазрешенногоКлючаДоступа:СтарыеДанные.КлючДоступа"); + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.КлючиДоступаГруппДоступа"); + + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + Если ГруппыДоступа <> Неопределено Тогда + ИзмеренияОтбора = "ГруппаДоступа"; + Иначе + ИзмеренияОтбора = Неопределено; + КонецЕсли; + + Данные = Новый Структура; + Данные.Вставить("МенеджерРегистра", РегистрыСведений.КлючиДоступаГруппДоступа); + Данные.Вставить("ИзмененияСоставаСтрок", Запрос.Выполнить().Выгрузить()); + Данные.Вставить("ИзмеренияОтбора", ИзмеренияОтбора); + Данные.Вставить("ФиксированныйОтбор", Новый Структура("КлючДоступа", РазрешенныйКлючДоступа)); + + ОбновитьРегистрСведений(Данные, ЕстьИзменения); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Для процедуры ОбновитьПраваНаРазрешенныйКлючДоступа. +Процедура ОбновитьПользователейРазрешенногоКлючаДоступа(Пользователь = Неопределено, ЕстьИзменения = Ложь) + + УстановитьПривилегированныйРежим(Истина); + + ТекстЗапросовВременныхТаблиц = + "ВЫБРАТЬ + | СоставыГруппПользователей.Пользователь КАК Пользователь, + | &РазрешенныйКлючДоступа КАК КлючДоступа, + | ИСТИНА КАК Изменение, + | ИСТИНА КАК Добавление + |ПОМЕСТИТЬ НовыеДанные + |ИЗ + | РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + |ГДЕ + | ТИПЗНАЧЕНИЯ(СоставыГруппПользователей.Пользователь) = ТИП(Справочник.Пользователи) + | И СоставыГруппПользователей.Пользователь = СоставыГруппПользователей.ГруппаПользователей + | И СоставыГруппПользователей.Используется + | + |ИНДЕКСИРОВАТЬ ПО + | Пользователь, + | КлючДоступа"; + + ТекстЗапроса = + "ВЫБРАТЬ + | НовыеДанные.Пользователь, + | НовыеДанные.КлючДоступа, + | НовыеДанные.Изменение, + | НовыеДанные.Добавление, + | &ПодстановкаПоляВидИзмененияСтроки + |ИЗ + | НовыеДанные КАК НовыеДанные"; + + // Подготовка выбираемых полей с необязательным отбором. + Поля = Новый Массив; + Поля.Добавить(Новый Структура("Пользователь", "&УсловиеОтбораПользователей2")); + Поля.Добавить(Новый Структура("КлючДоступа", "&УсловиеОтбораРазрешенногоКлючаДоступа")); + Поля.Добавить(Новый Структура("Изменение")); + Поля.Добавить(Новый Структура("Добавление")); + + РазрешенныйКлючДоступа = УправлениеДоступомСлужебныйПовтИсп.РазрешенныйКлючДоступа(); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("РазрешенныйКлючДоступа", РазрешенныйКлючДоступа); + Запрос.Текст = ТекстЗапросаВыбораИзменений(ТекстЗапроса, + Поля, "РегистрСведений.КлючиДоступаПользователей", ТекстЗапросовВременныхТаблиц); + + УстановитьУсловиеОтбораВЗапросе(Запрос, Пользователь, "Пользователь", + "&УсловиеОтбораПользователей1:СоставыГруппПользователей.Пользователь + |&УсловиеОтбораПользователей2:СтарыеДанные.Пользователь"); + + УстановитьУсловиеОтбораВЗапросе(Запрос, РазрешенныйКлючДоступа, "КлючДоступа", + "&УсловиеОтбораРазрешенногоКлючаДоступа:СтарыеДанные.КлючДоступа"); + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.КлючиДоступаПользователей"); + + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + Если Пользователь <> Неопределено Тогда + ИзмеренияОтбора = "Пользователь"; + Иначе + ИзмеренияОтбора = Неопределено; + КонецЕсли; + + Данные = Новый Структура; + Данные.Вставить("МенеджерРегистра", РегистрыСведений.КлючиДоступаПользователей); + Данные.Вставить("ИзмененияСоставаСтрок", Запрос.Выполнить().Выгрузить()); + Данные.Вставить("ИзмеренияОтбора", ИзмеренияОтбора); + Данные.Вставить("ФиксированныйОтбор", Новый Структура("КлючДоступа", РазрешенныйКлючДоступа)); + + ОбновитьРегистрСведений(Данные, ЕстьИзменения); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Для процедуры ОбновитьПраваНаРазрешенныйКлючДоступа. +Процедура ОбновитьВнешнихПользователейРазрешенногоКлючаДоступа(ВнешнийПользователь = Неопределено, ЕстьИзменения = Ложь) + + УстановитьПривилегированныйРежим(Истина); + + ТекстЗапросовВременныхТаблиц = + "ВЫБРАТЬ + | СоставыГруппПользователей.Пользователь КАК ВнешнийПользователь, + | &РазрешенныйКлючДоступа КАК КлючДоступа, + | ИСТИНА КАК Изменение, + | ИСТИНА КАК Добавление + |ПОМЕСТИТЬ НовыеДанные + |ИЗ + | РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + |ГДЕ + | ТИПЗНАЧЕНИЯ(СоставыГруппПользователей.Пользователь) = ТИП(Справочник.ВнешниеПользователи) + | И СоставыГруппПользователей.Пользователь = СоставыГруппПользователей.ГруппаПользователей + | И СоставыГруппПользователей.Используется + | + |ИНДЕКСИРОВАТЬ ПО + | ВнешнийПользователь, + | КлючДоступа"; + + ТекстЗапроса = + "ВЫБРАТЬ + | НовыеДанные.ВнешнийПользователь, + | НовыеДанные.КлючДоступа, + | НовыеДанные.Изменение, + | НовыеДанные.Добавление, + | &ПодстановкаПоляВидИзмененияСтроки + |ИЗ + | НовыеДанные КАК НовыеДанные"; + + // Подготовка выбираемых полей с необязательным отбором. + Поля = Новый Массив; + Поля.Добавить(Новый Структура("ВнешнийПользователь", "&УсловиеОтбораВнешнихПользователей2")); + Поля.Добавить(Новый Структура("КлючДоступа", "&УсловиеОтбораРазрешенногоКлючаДоступа")); + Поля.Добавить(Новый Структура("Изменение")); + Поля.Добавить(Новый Структура("Добавление")); + + РазрешенныйКлючДоступа = УправлениеДоступомСлужебныйПовтИсп.РазрешенныйКлючДоступа(); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("РазрешенныйКлючДоступа", РазрешенныйКлючДоступа); + Запрос.Текст = ТекстЗапросаВыбораИзменений(ТекстЗапроса, + Поля, "РегистрСведений.КлючиДоступаВнешнихПользователей", ТекстЗапросовВременныхТаблиц); + + УстановитьУсловиеОтбораВЗапросе(Запрос, ВнешнийПользователь, "ВнешнийПользователь", + "&УсловиеОтбораВнешнихПользователей1:СоставыГруппПользователей.Пользователь + |&УсловиеОтбораВнешнихПользователей2:СтарыеДанные.ВнешнийПользователь"); + + УстановитьУсловиеОтбораВЗапросе(Запрос, РазрешенныйКлючДоступа, "КлючДоступа", + "&УсловиеОтбораРазрешенногоКлючаДоступа:СтарыеДанные.КлючДоступа"); + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.КлючиДоступаВнешнихПользователей"); + + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + Если ВнешнийПользователь <> Неопределено Тогда + ИзмеренияОтбора = "ВнешнийПользователь"; + Иначе + ИзмеренияОтбора = Неопределено; + КонецЕсли; + + Данные = Новый Структура; + Данные.Вставить("МенеджерРегистра", РегистрыСведений.КлючиДоступаВнешнихПользователей); + Данные.Вставить("ИзмененияСоставаСтрок", Запрос.Выполнить().Выгрузить()); + Данные.Вставить("ИзмеренияОтбора", ИзмеренияОтбора); + Данные.Вставить("ФиксированныйОтбор", Новый Структура("КлючДоступа", РазрешенныйКлючДоступа)); + + ОбновитьРегистрСведений(Данные, ЕстьИзменения); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Для процедуры ОбновитьКлючиДоступаЭлементовДанныхСписка, ОбновитьКлючиДоступаЭлементовДанныхПриЗаписи. +Процедура ОчиститьКлючиДоступаЭлементовДанныхСписка(ЭлементыДанных, ПараметрыОбновления) + + Если ПараметрыОбновления.ЭтоСсылочныйТип Тогда + НаборИзОднойЗаписи = СлужебныйНаборЗаписей(РегистрыСведений.КлючиДоступаКОбъектам); + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.КлючиДоступаКОбъектам"); + Для Каждого Строка Из ЭлементыДанных Цикл + ЭлементБлокировки.УстановитьЗначение("Объект", Строка.ТекущаяСсылка); + НаборИзОднойЗаписи.Отбор.Объект.Установить(Строка.ТекущаяСсылка); + БлокировкаУстановлена = Ложь; + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + БлокировкаУстановлена = Истина; + Если ПараметрыОбновления.БезЗаписиКлючейДоступаДляПользователейИВнешнихПользователей Тогда + НаборИзОднойЗаписи.Очистить(); + НаборИзОднойЗаписи.Записать(); + Иначе + НаборИзОднойЗаписи.Прочитать(); + Если НаборИзОднойЗаписи.Количество() > 0 Тогда + Если ПараметрыОбновления.ДляВнешнихПользователей Тогда + НаборИзОднойЗаписи[0].КлючДоступаВнешнихПользователей = Неопределено; + Иначе + НаборИзОднойЗаписи[0].КлючДоступаПользователей = Неопределено; + КонецЕсли; + Если Не ЗначениеЗаполнено(НаборИзОднойЗаписи[0].КлючДоступаВнешнихПользователей) + И Не ЗначениеЗаполнено(НаборИзОднойЗаписи[0].КлючДоступаПользователей) Тогда + НаборИзОднойЗаписи.Очистить(); + КонецЕсли; + НаборИзОднойЗаписи.Записать(); + КонецЕсли; + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + Если БлокировкаУстановлена Тогда + ВызватьИсключение; + КонецЕсли; + КонецПопытки; + КонецЦикла; + + Возврат; + КонецЕсли; + + Блокировка = Новый БлокировкаДанных; + Если ЗначениеЗаполнено(ПараметрыОбновления.ИмяОтдельногоРегистраКлючей) Тогда + ИмяРегистра = ПараметрыОбновления.ИмяОтдельногоРегистраКлючей; + Иначе + ИмяРегистра = "КлючиДоступаКРегистрам"; + КонецЕсли; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений." + ИмяРегистра); + Если Не ЗначениеЗаполнено(ПараметрыОбновления.ИмяОтдельногоРегистраКлючей) Тогда + ЭлементБлокировки.УстановитьЗначение("Регистр", ПараметрыОбновления.ИдентификаторСписка); + КонецЕсли; + НаборИзОднойЗаписи = СлужебныйНаборЗаписей(РегистрыСведений[ИмяРегистра]); + + Для Каждого Строка Из ЭлементыДанных Цикл + ЭлементБлокировки.УстановитьЗначение("ДляВнешнихПользователей", Строка.ДляВнешнихПользователей); + Для Каждого Колонка Из ЭлементыДанных.Колонки Цикл + ИмяИзмерения = Колонка.Имя; + ЭлементБлокировки.УстановитьЗначение(ИмяИзмерения, Строка[ИмяИзмерения]); + НаборИзОднойЗаписи.Отбор[ИмяИзмерения].Установить(Строка[ИмяИзмерения]); + КонецЦикла; + БлокировкаУстановлена = Ложь; + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + БлокировкаУстановлена = Истина; + НаборИзОднойЗаписи.Записать(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + Если БлокировкаУстановлена Тогда + ВызватьИсключение; + КонецЕсли; + КонецПопытки; + КонецЦикла; + +КонецПроцедуры + +// Для процедуры ОбновитьКлючиДоступаЭлементовДанныхСписка. +Процедура ОбновитьЭлементыДанныхСпискаСУстаревшимиКлючами(ЭлементыДанных, ПараметрыОбновления) + + ЗапросЗначенийЭлементовДанных = Новый Запрос; + ЗапросЗначенийЭлементовДанных.Текст = ПараметрыОбновления.ТекстЗапросаЗначенийЭлементовДанныхДляКлючейДоступа; + + ЗапросЗначенийКлючей = Новый Запрос; + ЗапросЗначенийКлючей.Текст = ПараметрыОбновления.ТекстЗапросаЗначенийИзКлючейДоступаДляСравнения; + + Контекст = Новый Структура; + Контекст.Вставить("ЗапросЗначенийЭлементовДанных", ЗапросЗначенийЭлементовДанных); + Контекст.Вставить("ЗапросЗначенийКлючей", ЗапросЗначенийКлючей); + + РазмерПорции = 100; // Загрузка N элементов данных по 100 за раз. + + Индекс = 0; + Пока Индекс < ЭлементыДанных.Количество() Цикл + + ПорцияЭлементовДанных = ЭлементыДанных.Скопировать(Новый Массив); + Если Не ПараметрыОбновления.ЭтоСсылочныйТип Тогда + ПорцияЭлементовДанных.Колонки.Добавить("ТекущаяСсылка", Новый ОписаниеТипов("Число")); + ПорцияУдаляемыхЭлементовДанных = Новый Массив; + КонецЕсли; + + Пока Индекс < ЭлементыДанных.Количество() + И ПорцияЭлементовДанных.Количество() < РазмерПорции Цикл + + ЭлементДанных = ЭлементыДанных[Индекс]; + Индекс = Индекс + 1; + + Если Не ПараметрыОбновления.ЭтоСсылочныйТип + И НекорректнаяКомбинацияЗначенийОпорныхПолей(ЭлементДанных, ПараметрыОбновления) Тогда + + ПорцияУдаляемыхЭлементовДанных.Добавить(ЭлементДанных); + Продолжить; + КонецЕсли; + + НоваяСтрока = ПорцияЭлементовДанных.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, ЭлементДанных); + Если Не ПараметрыОбновления.ЭтоСсылочныйТип Тогда + НоваяСтрока.ТекущаяСсылка = ПорцияЭлементовДанных.Индекс(НоваяСтрока) + 1; + КонецЕсли; + КонецЦикла; + + Если Не ПараметрыОбновления.ЭтоСсылочныйТип + И ПорцияУдаляемыхЭлементовДанных.Количество() > 0 Тогда + + УдалитьНекорректныеКомбинацииЗначенийОпорныхПолей(ПорцияУдаляемыхЭлементовДанных, ПараметрыОбновления); + КонецЕсли; + + Контекст.Вставить("ПорцияЭлементовДанных", ПорцияЭлементовДанных); + ОбновитьКлючиДоступаПорцииЭлементовДанныхСписка(ПараметрыОбновления, Контекст); + КонецЦикла; + +КонецПроцедуры + +// Для функции ОбновитьЭлементыДанныхСпискаСУстаревшимиКлючами. +Функция НекорректнаяКомбинацияЗначенийОпорныхПолей(ЭлементДанных, ПараметрыОбновления) + + Номер = 1; + Для Каждого ХранилищеТиповПоля Из ПараметрыОбновления.ОпорныеПоля.ТипыИспользуемых Цикл + ТипыПоля = ХранилищеТиповПоля.Получить(); + + Если Не ТипыПоля.СодержитТип(ТипЗнч(ЭлементДанных["Поле" + Номер])) + И ЭлементДанных["Поле" + Номер] <> Неопределено Тогда + + Возврат Истина; + КонецЕсли; + + Номер = Номер + 1; + КонецЦикла; + + Возврат Ложь; + +КонецФункции + +// Для функции ОбновитьЭлементыДанныхСпискаСУстаревшимиКлючами, ОбновитьКлючиДоступаЭлементовДанныхПриЗаписи. +Процедура ОбновитьКлючиДоступаПорцииЭлементовДанныхСписка(ПараметрыОбновления, Контекст) + + ЭтоСсылочныйТип = ПараметрыОбновления.ЭтоСсылочныйТип; + ИдентификаторСписка = ПараметрыОбновления.ИдентификаторСписка; + ПорцияЭлементовДанных = Контекст.ПорцияЭлементовДанных; + + Если ЭтоСсылочныйТип Тогда + Контекст.Вставить("СсылкиНаОбъекты", ПорцияЭлементовДанных.ВыгрузитьКолонку("ТекущаяСсылка")); + Контекст.ЗапросЗначенийЭлементовДанных.УстановитьПараметр("СсылкиНаОбъекты", Контекст.СсылкиНаОбъекты); + Иначе + Контекст.ЗапросЗначенийЭлементовДанных.УстановитьПараметр("ИдентификаторРегистра", ИдентификаторСписка); + Контекст.ЗапросЗначенийЭлементовДанных.УстановитьПараметр("ЗначенияОпорныхПолей", ПорцияЭлементовДанных); + КонецЕсли; + РезультатыЗапроса = Контекст.ЗапросЗначенийЭлементовДанных.ВыполнитьПакет(); + + ДанныеСтроковыхКлючейДоступа = Новый Соответствие; + ТаблицыКлюча = ПараметрыОбновления.ТаблицыКлюча; + + ЗначенияСтрокТаблиц = Новый Соответствие; + КлючиЗначенийСтрокОбъектов = КлючиЗначенийСтрокОбъектов(РезультатыЗапроса, + ?(ЭтоСсылочныйТип, 0, 1), ТаблицыКлюча, ЗначенияСтрокТаблиц); + + ТребуемыеКлючиДоступа = Новый Массив; + ХешиТребуемыхКлючейДоступа = Новый Массив; + ОписаниеКлючейДоступаОбъектов = Новый Массив; + Для Каждого ЭлементДанных Из ПорцияЭлементовДанных Цикл + ОписаниеКлючейЗначений = КлючиЗначенийСтрокОбъектов.Получить(ЭлементДанных.ТекущаяСсылка); + СтрокаДляХеша = СтрокаДляХешаКлючаДоступа(ОписаниеКлючейЗначений, ТаблицыКлюча); + Свойства = ДанныеСтроковыхКлючейДоступа.Получить(СтрокаДляХеша); + Если Свойства = Неопределено Тогда + Свойства = Новый Структура("ЗначенияТаблиц, СтрокаДляХеша, Хеш, КлючДоступа, ЗначенияКолонокТаблиц"); + ДанныеСтроковыхКлючейДоступа.Вставить(СтрокаДляХеша, Свойства); + ЗначенияТаблиц = Новый Массив; + Для Каждого ИмяТаблицы Из ТаблицыКлюча Цикл + КлючЗначений = ОписаниеКлючейЗначений.КлючиЗначений[ТаблицыКлюча.Найти(ИмяТаблицы)]; + ЗначенияСтрок = ЗначенияСтрокТаблиц.Получить(ИмяТаблицы).Получить(КлючЗначений); + Если ЗначенияСтрок = Неопределено Тогда + ЗначенияСтрок = Новый Массив; + КонецЕсли; + ЗначенияТаблиц.Добавить(Новый Структура("ИмяТаблицы, Таблица", ИмяТаблицы, ЗначенияСтрок)); + КонецЦикла; + Свойства.ЗначенияТаблиц = ЗначенияТаблиц; + Свойства.СтрокаДляХеша = СтрокаДляХеша; + Свойства.ЗначенияКолонокТаблиц = ОписаниеКлючейЗначений.ЗначенияКолонокТаблиц; + Хеширование = Новый ХешированиеДанных(ХешФункция.CRC32); + Хеширование.Добавить(СтрокаДляХеша); + Свойства.Хеш = Хеширование.ХешСумма; + ТребуемыеКлючиДоступа.Добавить(Свойства); + ХешиТребуемыхКлючейДоступа.Добавить(Свойства.Хеш); + КонецЕсли; + ОписаниеКлючейДоступаОбъектов.Добавить( + Новый Структура("ТекущаяСсылка, СвойстваКлюча", ЭлементДанных.ТекущаяСсылка, Свойства)); + КонецЦикла; + Контекст.Вставить("ОписаниеКлючейДоступаОбъектов", ОписаниеКлючейДоступаОбъектов); + + // Получение данных существующих ключей доступа по хешам требуемых ключей доступа. + Контекст.ЗапросЗначенийКлючей.УстановитьПараметр("Хеши", ХешиТребуемыхКлючейДоступа); + Контекст.ЗапросЗначенийКлючей.УстановитьПараметр("Список", ПараметрыОбновления.ИдентификаторСписка); + РезультатыЗапроса = Контекст.ЗапросЗначенийКлючей.ВыполнитьПакет(); + + КлючиЗначенийСтрокОбъектов = КлючиЗначенийСтрокОбъектов(РезультатыЗапроса, + 0, ТаблицыКлюча, ЗначенияСтрокТаблиц); + + ЕстьШапка = СтрНачинаетсяС(ТаблицыКлюча[0], "Шапка"); + ОписаниеКлючейДоступа = ?(ЕстьШапка, + КлючиЗначенийСтрокОбъектов, РезультатыЗапроса[ТаблицыКлюча.Количество() - 1].Выгрузить()); + + Для Каждого ОписаниеКлючаДоступа Из ОписаниеКлючейДоступа Цикл + Если ЕстьШапка Тогда + КлючДоступа = ОписаниеКлючаДоступа.Ключ; + ОписаниеКлючейЗначений = ОписаниеКлючаДоступа.Значение; + Иначе + КлючДоступа = ОписаниеКлючаДоступа.ТекущаяСсылка; + ОписаниеКлючейЗначений = КлючиЗначенийСтрокОбъектов.Получить(КлючДоступа); + КонецЕсли; + СтрокаДляХеша = СтрокаДляХешаКлючаДоступа(ОписаниеКлючейЗначений, ТаблицыКлюча); + Свойства = ДанныеСтроковыхКлючейДоступа.Получить(СтрокаДляХеша); + Если Свойства = Неопределено Тогда + Свойства = Новый Структура("КлючДоступа"); + ДанныеСтроковыхКлючейДоступа.Вставить(СтрокаДляХеша, Свойства); + КонецЕсли; + Свойства.КлючДоступа = КлючДоступа; + КонецЦикла; + + ПараметрыОбновления.Вставить("ДопустимыеТипыЗначенийКлючейДоступа", + УправлениеДоступомСлужебныйПовтИсп.ДопустимыеТипыЗначенийКлючейДоступа()); + + НовыеКлючиДоступа = Новый Массив; + Попытка + // Создание недостающих ключей доступа. + Для Каждого ОписаниеКлюча Из ТребуемыеКлючиДоступа Цикл + Если ОписаниеКлюча.КлючДоступа <> Неопределено Тогда + Продолжить; + КонецЕсли; + ПроверитьТипЗначенийКлючаДоступа(ОписаниеКлюча, ПараметрыОбновления); + НовыйКлючДоступа = НовыйКлючДоступа(ОписаниеКлюча, ПараметрыОбновления); + НовыеКлючиДоступа.Добавить(НовыйКлючДоступа); + ОписаниеКлюча.КлючДоступа = НовыйКлючДоступа; + КонецЦикла; + Исключение + Если Не ТранзакцияАктивна() Тогда + ПараметрыПланирования = ПараметрыПланированияОбновленияДоступа(); + ПараметрыПланирования.КлючиДоступаКДанным = Ложь; + ЗапланироватьОбновлениеДоступа(ПараметрыОбновления.Список, ПараметрыПланирования); + КонецЕсли; + ВызватьИсключение; + КонецПопытки; + + Если ПараметрыОбновления.Свойство("ОбновитьПраваНаКлючи") + И ПараметрыОбновления.ОбновитьПраваНаКлючи Тогда + + ВсеКлючиДоступаПорции = Новый Массив; + Для Каждого ОписаниеКлюча Из ТребуемыеКлючиДоступа Цикл + ВсеКлючиДоступаПорции.Добавить(ОписаниеКлюча.КлючДоступа); + КонецЦикла; + ОбновитьПраваНаКлючиДоступа(ВсеКлючиДоступаПорции, ПараметрыОбновления, + НовыеКлючиДоступа.Количество() > 0); + + ИначеЕсли НовыеКлючиДоступа.Количество() > 0 Тогда + ОбновитьПраваНаКлючиДоступа(НовыеКлючиДоступа, ПараметрыОбновления, Истина); + КонецЕсли; + + // Обновление ключей доступа элементов данных. + Если ЭтоСсылочныйТип Тогда + ЗаписатьКлючиДоступаОбъектов(ПараметрыОбновления, Контекст); + Иначе + ЗаписатьКлючиДоступаРегистров(ПараметрыОбновления, Контекст); + КонецЕсли; + +КонецПроцедуры + +// Для процедуры ОбновитьКлючиДоступаПорцииЭлементовДанныхСписка. +Процедура ОбновитьПраваНаКлючиДоступа(КлючиДоступа, ПараметрыОбновления, НовыеКлючи = Ложь) + + Если Не ПараметрыОбновления.Свойство("Кэш") Тогда + ПараметрыОбновления.Вставить("Кэш", Новый Структура); + КонецЕсли; + + Попытка + ОбновитьПользователейПорцииКлючейДоступаСписка(ПараметрыОбновления, КлючиДоступа); + Исключение + Если НовыеКлючи И Не ТранзакцияАктивна() Тогда + ПараметрыПланирования = ПараметрыПланированияОбновленияДоступа(); + ПараметрыПланирования.КлючиДоступаКДанным = Ложь; + ЗапланироватьОбновлениеДоступа(ПараметрыОбновления.Список, ПараметрыПланирования); + КонецЕсли; + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Для процедуры ОбновитьКлючиДоступаПорцииЭлементовДанныхСписка. +Функция СтрокаДляХешаКлючаДоступа(ОписаниеКлючейЗначений, ТаблицыКлюча) + + Если ОписаниеКлючейЗначений = Неопределено Тогда + ОписаниеКлючейЗначений = Новый Структура( + "КлючиЗначений, ИменаТаблиц, ЗначенияКолонокТаблиц", + Новый Массив, Новый Массив, Новый Массив); + КонецЕсли; + + КлючиЗначений = ОписаниеКлючейЗначений.КлючиЗначений; + ИменаТаблиц = ОписаниеКлючейЗначений.ИменаТаблиц; + + Если ИменаТаблиц.Количество() <> ТаблицыКлюча.Количество() Тогда + // В ключе доступа используются табличные части и некоторые пустые. + Для Индекс = 0 По ТаблицыКлюча.Количество() - 1 Цикл + + Если Индекс >= ИменаТаблиц.Количество() + Или ИменаТаблиц[Индекс] <> ТаблицыКлюча[Индекс] Тогда + + ИменаТаблиц.Вставить(Индекс, ТаблицыКлюча[Индекс]); + КлючиЗначений.Вставить(Индекс, "6ab8db6a-4878-483a-b9d5-ef905ff1537e"); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Возврат СтрСоединить(КлючиЗначений); + +КонецФункции + +// Для процедуры ОбновитьКлючиДоступаПорцииЭлементовДанных. +Процедура ЗаписатьКлючиДоступаОбъектов(ПараметрыОбновления, Контекст) + + Если ПараметрыОбновления.СЗаписьюКлючейДоступаДляПользователейИВнешнихПользователей Тогда + ЗапросТекущихКлючей = Новый Запрос; + ЗапросТекущихКлючей.Текст = + "ВЫБРАТЬ + | КлючиДоступаКОбъектам.Объект КАК Объект, + | КлючиДоступаКОбъектам.КлючДоступаПользователей КАК КлючДоступаПользователей, + | КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей КАК КлючДоступаВнешнихПользователей + |ИЗ + | РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + |ГДЕ + | КлючиДоступаКОбъектам.Объект В (&СсылкиНаОбъекты)"; + ЗапросТекущихКлючей.УстановитьПараметр("СсылкиНаОбъекты", Контекст.СсылкиНаОбъекты); + КонецЕсли; + + Если ПараметрыОбновления.ДляВнешнихПользователей Тогда + ИмяРеквизитаСохраняемогоКлюча = "КлючДоступаПользователей"; + ИмяРеквизитаОбновляемогоКлюча = "КлючДоступаВнешнихПользователей"; + Иначе + ИмяРеквизитаСохраняемогоКлюча = "КлючДоступаВнешнихПользователей"; + ИмяРеквизитаОбновляемогоКлюча = "КлючДоступаПользователей"; + КонецЕсли; + + НаборИзОднойЗаписи = СлужебныйНаборЗаписей(РегистрыСведений.КлючиДоступаКОбъектам); + Запись = НаборИзОднойЗаписи.Добавить(); + Блокировка = Новый БлокировкаДанных; + Для Каждого ОписаниеКлючаДоступаОбъекта Из Контекст.ОписаниеКлючейДоступаОбъектов Цикл + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.КлючиДоступаКОбъектам"); + ЭлементБлокировки.УстановитьЗначение("Объект", ОписаниеКлючаДоступаОбъекта.ТекущаяСсылка); + КонецЦикла; + + СпискиДляОбновления = Новый Соответствие; + Для Каждого ЗависимыйСписок Из ПараметрыОбновления.ЗависимыеСпискиПоКлючамДоступа Цикл + Свойства = Новый Структура("ДляПользователей, ДляВнешнихПользователей", Ложь, Ложь); + Если ПараметрыОбновления.ДляВнешнихПользователей Тогда + Свойства.ДляВнешнихПользователей = Истина; + Иначе + Свойства.ДляПользователей = Истина; + КонецЕсли; + СпискиДляОбновления.Вставить(ЗависимыйСписок, Свойства); + КонецЦикла; + + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + Если ПараметрыОбновления.СЗаписьюКлючейДоступаДляПользователейИВнешнихПользователей Тогда + ТекущиеКлючи = ЗапросТекущихКлючей.Выполнить().Выгрузить(); + КонецЕсли; + Для Каждого ОписаниеКлючаДоступаОбъекта Из Контекст.ОписаниеКлючейДоступаОбъектов Цикл + НаборИзОднойЗаписи.Отбор.Объект.Установить(ОписаниеКлючаДоступаОбъекта.ТекущаяСсылка); + Запись.Объект = ОписаниеКлючаДоступаОбъекта.ТекущаяСсылка; + Запись[ИмяРеквизитаОбновляемогоКлюча] = ОписаниеКлючаДоступаОбъекта.СвойстваКлюча.КлючДоступа; + + Если ПараметрыОбновления.СЗаписьюКлючейДоступаДляПользователейИВнешнихПользователей Тогда + Строка = ТекущиеКлючи.Найти(ОписаниеКлючаДоступаОбъекта.ТекущаяСсылка, "Объект"); + Если Строка <> Неопределено Тогда + Запись[ИмяРеквизитаСохраняемогоКлюча] = Строка[ИмяРеквизитаСохраняемогоКлюча]; + КонецЕсли; + КонецЕсли; + НаборИзОднойЗаписи.Записать(); + КонецЦикла; + ЗапланироватьОбновлениеУстаревшихКлючейДоступа(СпискиДляОбновления, + ПараметрыОбновления.ИдентификаторТранзакции); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Для процедуры ОбновитьКлючиДоступаПорцииЭлементовДанных. +Процедура ЗаписатьКлючиДоступаРегистров(ПараметрыОбновления, Контекст) + + Если Не ЗначениеЗаполнено(ПараметрыОбновления.ИмяОтдельногоРегистраКлючей) Тогда + ИмяРегистраКлючей = "КлючиДоступаКРегистрам"; + Иначе + ИмяРегистраКлючей = ПараметрыОбновления.ИмяОтдельногоРегистраКлючей; + КонецЕсли; + НаборИзОднойЗаписи = СлужебныйНаборЗаписей(РегистрыСведений[ИмяРегистраКлючей]); + Запись = НаборИзОднойЗаписи.Добавить(); + + ПустыеЗначенияОпорныхПолей = УправлениеДоступомСлужебныйПовтИсп.ПустыеЗначенияОпорныхПолей( + ПараметрыОбновления.ОпорныеПоля.МаксимальноеКоличество); + + Блокировка = Новый БлокировкаДанных; + Для Каждого ОписаниеКлючаДоступаОбъекта Из Контекст.ОписаниеКлючейДоступаОбъектов Цикл + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений." + ИмяРегистраКлючей); + Если Не ЗначениеЗаполнено(ПараметрыОбновления.ИмяОтдельногоРегистраКлючей) Тогда + ЭлементБлокировки.УстановитьЗначение("Регистр", ПараметрыОбновления.ИдентификаторСписка); + КонецЕсли; + ЭлементБлокировки.УстановитьЗначение("ДляВнешнихПользователей", ПараметрыОбновления.ДляВнешнихПользователей); + ЭлементДанных = Контекст.ПорцияЭлементовДанных.Найти(ОписаниеКлючаДоступаОбъекта.ТекущаяСсылка, "ТекущаяСсылка"); + Для НомерПоля = 1 По ПараметрыОбновления.ОпорныеПоля.Используемые.Количество() Цикл + ИмяПоля = "Поле" + НомерПоля; + ЭлементБлокировки.УстановитьЗначение(ИмяПоля, ЭлементДанных[ИмяПоля]); + КонецЦикла; + КонецЦикла; + + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + Для Каждого ОписаниеКлючаДоступаОбъекта Из Контекст.ОписаниеКлючейДоступаОбъектов Цикл + Если Не ЗначениеЗаполнено(ПараметрыОбновления.ИмяОтдельногоРегистраКлючей) Тогда + НаборИзОднойЗаписи.Отбор.Регистр.Установить(ПараметрыОбновления.ИдентификаторСписка); + Запись.Регистр = ПараметрыОбновления.ИдентификаторСписка; + КонецЕсли; + НаборИзОднойЗаписи.Отбор.ДляВнешнихПользователей.Установить(ПараметрыОбновления.ДляВнешнихПользователей); + Запись.ДляВнешнихПользователей = ПараметрыОбновления.ДляВнешнихПользователей; + + ЭлементДанных = Контекст.ПорцияЭлементовДанных.Найти(ОписаниеКлючаДоступаОбъекта.ТекущаяСсылка, "ТекущаяСсылка"); + ЗаполнитьЗначенияСвойств(Запись, ПустыеЗначенияОпорныхПолей); + Для НомерПоля = 1 По ПараметрыОбновления.ОпорныеПоля.Используемые.Количество() Цикл + ИмяПоля = "Поле" + НомерПоля; + Если ЭлементДанных[ИмяПоля] = Неопределено Тогда + НаборИзОднойЗаписи.Отбор[ИмяПоля].Значение = Неопределено; + НаборИзОднойЗаписи.Отбор[ИмяПоля].Использование = Истина; + Иначе + НаборИзОднойЗаписи.Отбор[ИмяПоля].Установить(ЭлементДанных[ИмяПоля]); + КонецЕсли; + Запись[ИмяПоля] = ЭлементДанных[ИмяПоля]; + КонецЦикла; + + Запись.КлючДоступа = ОписаниеКлючаДоступаОбъекта.СвойстваКлюча.КлючДоступа; + НаборИзОднойЗаписи.Записать(); + КонецЦикла; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Для функции ОбновитьЭлементыДанныхСпискаСУстаревшимиКлючами. +Процедура УдалитьНекорректныеКомбинацииЗначенийОпорныхПолей(ПорцияЭлементовДанных, ПараметрыОбновления) + + Если Не ЗначениеЗаполнено(ПараметрыОбновления.ИмяОтдельногоРегистраКлючей) Тогда + ИмяРегистраКлючей = "КлючиДоступаКРегистрам"; + Иначе + ИмяРегистраКлючей = ПараметрыОбновления.ИмяОтдельногоРегистраКлючей; + КонецЕсли; + НаборИзОднойЗаписи = СлужебныйНаборЗаписей(РегистрыСведений[ИмяРегистраКлючей]); + + Блокировка = Новый БлокировкаДанных; + Для Каждого ЭлементДанных Из ПорцияЭлементовДанных Цикл + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений." + ИмяРегистраКлючей); + Если Не ЗначениеЗаполнено(ПараметрыОбновления.ИмяОтдельногоРегистраКлючей) Тогда + ЭлементБлокировки.УстановитьЗначение("Регистр", ПараметрыОбновления.ИдентификаторСписка); + КонецЕсли; + ЭлементБлокировки.УстановитьЗначение("ДляВнешнихПользователей", ПараметрыОбновления.ДляВнешнихПользователей); + Для НомерПоля = 1 По ПараметрыОбновления.ОпорныеПоля.Используемые.Количество() Цикл + ИмяПоля = "Поле" + НомерПоля; + ЭлементБлокировки.УстановитьЗначение(ИмяПоля, ЭлементДанных[ИмяПоля]); + КонецЦикла; + КонецЦикла; + + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + Для Каждого ЭлементДанных Из ПорцияЭлементовДанных Цикл + Если Не ЗначениеЗаполнено(ПараметрыОбновления.ИмяОтдельногоРегистраКлючей) Тогда + НаборИзОднойЗаписи.Отбор.Регистр.Установить(ПараметрыОбновления.ИдентификаторСписка); + КонецЕсли; + Для НомерПоля = 1 По ПараметрыОбновления.ОпорныеПоля.Используемые.Количество() Цикл + ИмяПоля = "Поле" + НомерПоля; + НаборИзОднойЗаписи.Отбор[ИмяПоля].Установить(ЭлементДанных[ИмяПоля]); + КонецЦикла; + НаборИзОднойЗаписи.Записать(); + КонецЦикла; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Для процедуры ОбновитьКлючиДоступаПорцииЭлементовДанных. +Функция КлючиЗначенийСтрокОбъектов(РезультатыЗапроса, Индекс, ТаблицыКлюча, ЗначенияСтрокТаблиц) + + КлючиЗначенийСтрокОбъектов = Новый Соответствие; + + Для Каждого ИмяТаблицыКлючаДоступа Из ТаблицыКлюча Цикл + ЗначенияСтрокТаблицы = ЗначенияСтрокТаблиц.Получить(ИмяТаблицыКлючаДоступа); + Если ЗначенияСтрокТаблицы = Неопределено Тогда + ЗначенияСтрокТаблицы = Новый Соответствие; + ЗначенияСтрокТаблиц.Вставить(ИмяТаблицыКлючаДоступа, ЗначенияСтрокТаблицы); + КонецЕсли; + Дерево = РезультатыЗапроса[Индекс].Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); + Индекс = Индекс + 1; + Для Каждого Строка Из Дерево.Строки Цикл + ЗначенияКолонокТаблицы = Новый Массив; + Для Каждого Колонка Из Дерево.Колонки Цикл + Если СтрНачинаетсяС(Колонка.Имя, "Значение") Тогда + ЗначенияКолонокТаблицы.Добавить(Строка.Строки.ВыгрузитьКолонку(Колонка.Имя)); + КонецЕсли; + КонецЦикла; + КлючЗначенийСтрок = СтрокаДанныхДляХеширования(ЗначенияКолонокТаблицы); + Если ЗначенияСтрокТаблицы.Получить(КлючЗначенийСтрок) = Неопределено Тогда + ЗначенияСтрокТаблицы.Вставить(КлючЗначенийСтрок, Строка.Строки); + КонецЕсли; + ОписаниеКлючейЗначений = КлючиЗначенийСтрокОбъектов.Получить(Строка.ТекущаяСсылка); + Если ОписаниеКлючейЗначений = Неопределено Тогда + ОписаниеКлючейЗначений = Новый Структура( + "КлючиЗначений, ИменаТаблиц, ЗначенияКолонокТаблиц", + Новый Массив, Новый Массив, Новый Массив); + КлючиЗначенийСтрокОбъектов.Вставить(Строка.ТекущаяСсылка, ОписаниеКлючейЗначений); + КонецЕсли; + ОписаниеКлючейЗначений.ИменаТаблиц.Добавить(ИмяТаблицыКлючаДоступа); + ОписаниеКлючейЗначений.КлючиЗначений.Добавить(КлючЗначенийСтрок); + ОписаниеКлючейЗначений.ЗначенияКолонокТаблиц.Добавить(ЗначенияКолонокТаблицы); + КонецЦикла; + КонецЦикла; + + Возврат КлючиЗначенийСтрокОбъектов; + +КонецФункции + +// Для функции КлючиЗначенийСтрокОбъектов. +Функция СтрокаДанныхДляХеширования(Данные) + + // Возвращает строку данных для последующего хеширования, например, + // строковое описание ссылок, сохраняемых в базе данных, с учетом типов + // по внутренним идентификаторам, что обеспечивает неизменность хеш-суммы + // при изменении имен таблиц и имен реквизитов, то есть обеспечивает + // соответствие хеш-суммы данных самим данным, сохраняемым в базе данных. + // + // Это позволяет избежать избыточного массового пересоздания ключей доступа с последующим + // перерасчетом пользователей и групп доступа для пересозданных ключей доступа. + + Возврат ЗначениеВСтрокуВнутр(Данные); + +КонецФункции + +// Для процедуры ОбновитьКлючиДоступаПорцииЭлементовДанных. +Процедура ПроверитьТипЗначенийКлючаДоступа(ОписаниеКлюча, ПараметрыОбновления) + + ДопустимыеТипыЗначенийКлючейДоступа = ПараметрыОбновления.ДопустимыеТипыЗначенийКлючейДоступа; + ЗначенияКолонокТаблиц = ОписаниеКлюча.ЗначенияКолонокТаблиц; + + Для Каждого ЗначенияКолонокТаблицы Из ЗначенияКолонокТаблиц Цикл + Для Каждого ЗначенияКолонкиТаблицы Из ЗначенияКолонокТаблицы Цикл + Для Каждого Значение Из ЗначенияКолонкиТаблицы Цикл + Если Не ДопустимыеТипыЗначенийКлючейДоступа.СодержитТип(ТипЗнч(Значение)) Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Невозможно сохранить значение ""%1"" типа ""%2"" + |при обновлении ключей доступа списка ""%3"", + |так как этот тип не указан в определяемом типе ЗначениеДоступа.'"), + Строка(Значение), + Строка(ТипЗнч(Значение)), + ПараметрыОбновления.Список); + ВызватьИсключение ТекстОшибки; + КонецЕсли; + КонецЦикла; + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + +// Для процедуры ОбновитьКлючиДоступаПорцииЭлементовДанных. +Функция НовыйКлючДоступа(ОписаниеКлюча, ПараметрыОбновления) + + НоваяСсылка = Справочники.КлючиДоступа.ПолучитьСсылку(); + НовыйКлюч = СлужебныйЭлемент(Справочники.КлючиДоступа); + + НовыйКлюч.УстановитьСсылкуНового(НоваяСсылка); + НовыйКлюч.Наименование = Строка(НоваяСсылка.УникальныйИдентификатор()); + НовыйКлюч.Список = ПараметрыОбновления.ИдентификаторСписка; + НовыйКлюч.СоставПолей = ПараметрыОбновления.СоставПолей; + НовыйКлюч.ДляВнешнихПользователей = ПараметрыОбновления.ДляВнешнихПользователей; + НовыйКлюч.Хеш = ОписаниеКлюча.Хеш; + + Для Каждого ЗначенияТаблицы Из ОписаниеКлюча.ЗначенияТаблиц Цикл + Если СтрНачинаетсяС(ЗначенияТаблицы.ИмяТаблицы, "Шапка") Тогда + Если СтрЗаканчиваетсяНа(ЗначенияТаблицы.ИмяТаблицы, "0") Тогда + ЗаполнитьЗначенияСвойств(НовыйКлюч, ЗначенияТаблицы.Таблица[0],, "Родитель"); + Иначе + НомерСтроки = Число(Прав(ЗначенияТаблицы.ИмяТаблицы, 1)); + НовыйКлюч.Шапка.Добавить(); + ЗаполнитьЗначенияСвойств(НовыйКлюч.Шапка[НомерСтроки - 1], ЗначенияТаблицы.Таблица[0]); + КонецЕсли; + Иначе + Для Каждого Строка Из ЗначенияТаблицы.Таблица Цикл + ЗаполнитьЗначенияСвойств(НовыйКлюч[ЗначенияТаблицы.ИмяТаблицы].Добавить(), Строка); + КонецЦикла; + КонецЕсли; + КонецЦикла; + + НовыйКлюч.Записать(); + + Возврат НовыйКлюч.Ссылка; + +КонецФункции + +// Для процедур ВыполнитьОбновлениеДоступаСписка. +Процедура ОбновитьКлючиДоступаПользователейСписка(ОбъектМетаданных, ОбщиеПараметрыОбновления, ОбработкаЗавершена) + + Если ТипЗнч(ОбъектМетаданных) <> Тип("ОбъектМетаданных") Тогда + // Очистка записей не существующих объектов метаданных. + ПустойНабор = СлужебныйНаборЗаписей(РегистрыСведений.ОбновлениеКлючейДоступаПользователей); + ПустойНабор.Отбор.Список.Установить(ОбщиеПараметрыОбновления.ИдентификаторСписка); + ПустойНабор.Записать(); + Возврат; + КонецЕсли; + + Если Не ОбщиеПараметрыОбновления.Свойство("Кэш") Тогда + ОбщиеПараметрыОбновления.Вставить("Кэш", Новый Структура); + КонецЕсли; + + ПараметрыОбновления = Новый Структура; + ПараметрыОбновления.Вставить("Список", ОбъектМетаданных.ПолноеИмя()); + ПараметрыОбновления.Вставить("ИдентификаторСписка", ОбщиеПараметрыОбновления.ИдентификаторСписка); + ПараметрыОбновления.Вставить("ДляВнешнихПользователей", ОбщиеПараметрыОбновления.ДляВнешнихПользователей); + ПараметрыОбновления.Вставить("Кэш", ОбщиеПараметрыОбновления.Кэш); + + Если ОбщиеПараметрыОбновления.Свойство("ПорцияНабора") Тогда + ОбновитьПользователейКлючейДоступаСписка(ПараметрыОбновления, + ОбщиеПараметрыОбновления.ПорцияНабора.КлючиДоступа.Получить()); + + ОбщиеПараметрыОбновления.Вставить("НовыйПоследнийОбновленныйКлючДоступа", + ПараметрыОбновления.НовыйПоследнийОбновленныйКлючДоступа); + Возврат; + КонецЕсли; + + ПараметрыОбновления.Вставить("НачальноеОбновление", ОбщиеПараметрыОбновления.НачальноеОбновление); + ПараметрыОбновления.Вставить("ПолучитьПорции", ОбщиеПараметрыОбновления.ПолучитьПорции); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Список", ПараметрыОбновления.ИдентификаторСписка); + Запрос.УстановитьПараметр("ДляВнешнихПользователей", ПараметрыОбновления.ДляВнешнихПользователей); + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1000 + | КлючиУникальности.КлючУникальности КАК КлючУникальности, + | КлючиУникальности.ПоследнийОбновленныйКлючДоступа КАК ПоследнийОбновленныйКлючДоступа + |ИЗ + | РегистрСведений.ОбновлениеКлючейДоступаПользователей КАК КлючиУникальности + |ГДЕ + | КлючиУникальности.Список = &Список + | И КлючиУникальности.ДляВнешнихПользователей = &ДляВнешнихПользователей"; + Выгрузка = Запрос.Выполнить().Выгрузить(); + + Если Выгрузка.Количество() = 0 Тогда + Если ПараметрыОбновления.ПолучитьПорции > 0 + И ОбщиеПараметрыОбновления.Свойство("ПоследнийКлючДоступаПорции") Тогда + + ОбщиеПараметрыОбновления.Вставить("НаборПорций", Неопределено); + КонецЕсли; + Возврат; + КонецЕсли; + + МаксимальнаяДата = МаксимальнаяДата(); + + Если Выгрузка.Количество() = 1 + И Не ЗначениеЗаполнено(Выгрузка[0].КлючУникальности) Тогда + + ПоследнийОбновленныйКлючДоступа = Выгрузка[0].ПоследнийОбновленныйКлючДоступа.Получить(); + Иначе + ПоследнийОбновленныйКлючДоступа = Неопределено; + + Если ПараметрыОбновления.ПолучитьПорции > 0 + И ОбщиеПараметрыОбновления.Свойство("ПоследнийКлючДоступаПорции") Тогда + + ОбщиеПараметрыОбновления.Вставить("НаборПорций", Неопределено); + ОбработкаЗавершена = Ложь; + Возврат; + КонецЕсли; + + ПланОбновленияКлючей = СлужебныйНаборЗаписей(РегистрыСведений.ОбновлениеКлючейДоступаПользователей); + ПланОбновленияКлючей.Отбор.Список.Установить(ПараметрыОбновления.ИдентификаторСписка); + ПланОбновленияКлючей.Отбор.ДляВнешнихПользователей.Установить(ПараметрыОбновления.ДляВнешнихПользователей); + ПланОбновленияКлючей.Отбор.КлючУникальности.Установить( + Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ОбновлениеКлючейДоступаПользователей"); + ЭлементБлокировки.УстановитьЗначение("Список", ПараметрыОбновления.ИдентификаторСписка); + ЭлементБлокировки.УстановитьЗначение("ДляВнешнихПользователей", ПараметрыОбновления.ДляВнешнихПользователей); + ЭлементБлокировки.УстановитьЗначение("КлючУникальности", + Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + + Для Каждого Строка Из Выгрузка Цикл + Если Не ЗначениеЗаполнено(Строка.КлючУникальности) Тогда + Продолжить; + КонецЕсли; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ОбновлениеКлючейДоступаПользователей"); + ЭлементБлокировки.УстановитьЗначение("Список", ПараметрыОбновления.ИдентификаторСписка); + ЭлементБлокировки.УстановитьЗначение("ДляВнешнихПользователей", ПараметрыОбновления.ДляВнешнихПользователей); + ЭлементБлокировки.УстановитьЗначение("КлючУникальности", Строка.КлючУникальности); + Прервать; + КонецЦикла; + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "ВЫБРАТЬ ПЕРВЫЕ 1000", "ВЫБРАТЬ ПЕРВЫЕ 1"); + ЗаданияУдалены = Ложь; + + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + Если Запрос.Выполнить().Пустой() Тогда + ЗаданияУдалены = Истина; + Иначе + Запись = ПланОбновленияКлючей.Добавить(); + Запись.Список = ПараметрыОбновления.ИдентификаторСписка; + Запись.ДляВнешнихПользователей = ПараметрыОбновления.ДляВнешнихПользователей; + Запись.ДатаИзмененияЗаписиРегистра = ТекущаяДатаСеанса(); + ПланОбновленияКлючей.Записать(); + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Если ЗаданияУдалены Тогда + Если ПараметрыОбновления.ПолучитьПорции > 0 + И ОбщиеПараметрыОбновления.Свойство("ПоследнийКлючДоступаПорции") Тогда + + ОбщиеПараметрыОбновления.Вставить("НаборПорций", Неопределено); + КонецЕсли; + Возврат; + КонецЕсли; + + ПланОбновленияКлючей.Очистить(); + Для Каждого Строка Из Выгрузка Цикл + Если Не ЗначениеЗаполнено(Строка.КлючУникальности) Тогда + Продолжить; + КонецЕсли; + ПланОбновленияКлючей.Отбор.КлючУникальности.Установить(Строка.КлючУникальности); + ПланОбновленияКлючей.Записать(); + КонецЦикла; + Если Выгрузка.Количество() = 1000 Тогда + ОбработкаЗавершена = Ложь; + КонецЕсли; + КонецЕсли; + + Если ПараметрыОбновления.ПолучитьПорции > 0 + И ОбщиеПараметрыОбновления.Свойство("ПоследнийКлючДоступаПорции") Тогда + + ПараметрыОбновления.Вставить("ПоследнийКлючДоступаПорции"); + ПоследнийОбновленныйКлючДоступа = ОбщиеПараметрыОбновления.ПоследнийКлючДоступаПорции; + КонецЕсли; + + ПараметрыОбновления.Вставить("ПоследнийОбновленныйКлючДоступа", ПоследнийОбновленныйКлючДоступа); + ПараметрыОбновления.Вставить("НовыйПоследнийОбновленныйКлючДоступа", Неопределено); + + ОбновитьПользователейКлючейДоступаСписка(ПараметрыОбновления); + + Если ПараметрыОбновления.Свойство("НаборПорций") Тогда + ОбщиеПараметрыОбновления.Вставить("НаборПорций", ПараметрыОбновления.НаборПорций); + ОбработкаЗавершена = Ложь; + Возврат; + КонецЕсли; + + ОбновитьКлючиДоступаПользователейСпискаЗавершение(ОбщиеПараметрыОбновления, + ПараметрыОбновления.НовыйПоследнийОбновленныйКлючДоступа, ОбработкаЗавершена); + +КонецПроцедуры + +// Для процедур ОбновитьКлючиДоступаПользователейСписка, ПроверитьЗавершитьОбновлениеПоПорциям. +Процедура ОбновитьКлючиДоступаПользователейСпискаЗавершение(ОбщиеПараметрыОбновления, ПоследнийОбновленныйКлючДоступа, ОбработкаЗавершена = Истина) + + ПланОбновленияКлючей = СлужебныйНаборЗаписей(РегистрыСведений.ОбновлениеКлючейДоступаПользователей); + ПланОбновленияКлючей.Отбор.Список.Установить(ОбщиеПараметрыОбновления.ИдентификаторСписка); + ПланОбновленияКлючей.Отбор.ДляВнешнихПользователей.Установить(ОбщиеПараметрыОбновления.ДляВнешнихПользователей); + ПланОбновленияКлючей.Отбор.КлючУникальности.Установить( + Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ОбновлениеКлючейДоступаПользователей"); + ЭлементБлокировки.УстановитьЗначение("Список", ОбщиеПараметрыОбновления.ИдентификаторСписка); + ЭлементБлокировки.УстановитьЗначение("ДляВнешнихПользователей", ОбщиеПараметрыОбновления.ДляВнешнихПользователей); + ЭлементБлокировки.УстановитьЗначение("КлючУникальности", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + ПланОбновленияКлючей.Прочитать(); + Если ПланОбновленияКлючей.Количество() > 0 Тогда + Если ПоследнийОбновленныйКлючДоступа = Неопределено Тогда + ПланОбновленияКлючей.Очистить(); + Иначе + Запись = ПланОбновленияКлючей[0]; + Запись.ДатаИзмененияЗаписиРегистра = ТекущаяДатаСеанса(); + Запись.ПоследнийОбновленныйКлючДоступа = Новый ХранилищеЗначения(ПоследнийОбновленныйКлючДоступа); + ОбработкаЗавершена = Ложь; + КонецЕсли; + ПланОбновленияКлючей.Записать(); + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Для процедуры ОбновитьКлючиДоступаКДаннымСписка. +Процедура ОбновитьПользователейКлючейДоступаСписка(ПараметрыОбновления, КлючиДоступа = Неопределено) + + ИдентификаторТранзакции = Новый УникальныйИдентификатор; + СвойстваСпискаКакВедущего = СвойстваСпискаКакВедущего(ПараметрыОбновления.Список, ИдентификаторТранзакции); + ПараметрыОграничения = ПараметрыОграничения(ПараметрыОбновления.Список, + ИдентификаторТранзакции, ПараметрыОбновления.ДляВнешнихПользователей); + + ПараметрыОграничения = Новый Структура(ПараметрыОграничения); + Для Каждого КлючИЗначение Из ПараметрыОбновления Цикл + ПараметрыОграничения.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + КонецЦикла; + ПараметрыОбновления = ПараметрыОграничения; + ПараметрыОбновления.Вставить("ИдентификаторТранзакции", ИдентификаторТранзакции); + + ИмяСвойстваВидаПользователей = ?(ПараметрыОбновления.ДляВнешнихПользователей, + "ДляВнешнихПользователей", "ДляПользователей"); + + Если СвойстваСпискаКакВедущего = Неопределено + Или СвойстваСпискаКакВедущего.ПоКлючамДоступа = Неопределено + Или СвойстваСпискаКакВедущего.ПоКлючамДоступа[ИмяСвойстваВидаПользователей] = Неопределено Тогда + + ПараметрыОбновления.Вставить("ЗависимыеСпискиПоКлючамДоступа", Новый Массив); + Иначе + ПараметрыОбновления.Вставить("ЗависимыеСпискиПоКлючамДоступа", + СвойстваСпискаКакВедущего.ПоКлючамДоступа[ИмяСвойстваВидаПользователей]); + КонецЕсли; + + Если ПараметрыОбновления.ОграничениеОтключено + Или ПараметрыОбновления.ДоступЗапрещен + Или ПараметрыОбновления.ИспользуетсяОграничениеПоВладельцу Тогда + + УдалитьПорциюКлючейДоступаСписка(ПараметрыОбновления); + Возврат; + КонецЕсли; + + ОбновитьПользователейПорцииКлючейДоступаСписка(ПараметрыОбновления, КлючиДоступа); + +КонецПроцедуры + +// Для процедуры ОбновитьКлючиДоступаКДаннымСписка. +Процедура ОбновитьПользователейПорцииКлючейДоступаСписка(ПараметрыОбновления, КлючиДоступа) + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Список", ПараметрыОбновления.ИдентификаторСписка); + + Если КлючиДоступа = Неопределено Тогда + Если ОбщегоНазначения.ЭтоСсылка(ТипЗнч(ПараметрыОбновления.ПоследнийОбновленныйКлючДоступа)) Тогда + Запрос.УстановитьПараметр("ПоследнийКлючДоступа", ПараметрыОбновления.ПоследнийОбновленныйКлючДоступа); + Иначе + Запрос.УстановитьПараметр("ПоследнийКлючДоступа", Неопределено); + КонецЕсли; + + ПорцияКлючейНабора = 200; + РазмерПорции = РазмерПорцииКлючейДоступа(); + Если ПараметрыОбновления.НачальноеОбновление Тогда + РазмерПорции = Цел(РазмерПорции / 100); + + ИначеЕсли ПараметрыОбновления.ПолучитьПорции > 0 + И ( РазмерПорции < ПараметрыОбновления.ПолучитьПорции * ПорцияКлючейНабора + Или ПараметрыОбновления.Свойство("ПоследнийКлючДоступаПорции")) Тогда + + РазмерПорции = ПараметрыОбновления.ПолучитьПорции * ПорцияКлючейНабора; + КонецЕсли; + РазмерПорции = ?(РазмерПорции < 25, 25, ?(РазмерПорции > 10000, 10000, РазмерПорции)); + + Если ПараметрыОбновления.ПолучитьПорции > 0 Тогда + Запрос.Текст = СтрРазделить(ПараметрыОбновления.ТекстЗапросаЗначенийИзКлючейДоступаДляРасчетаПрав, ";", Ложь)[0]; + Запрос.Текст = СокрЛП(СтрЗаменить(Запрос.Текст, "ПОМЕСТИТЬ ПорцияКлючей" + Символы.ПС, "")); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "ИНДЕКСИРОВАТЬ", "УПОРЯДОЧИТЬ"); + Иначе + Запрос.Текст = ПараметрыОбновления.ТекстЗапросаЗначенийИзКлючейДоступаДляРасчетаПрав; + КонецЕсли; + + Запрос.Текст = СтрЗаменить(Запрос.Текст, МаркерРазмераПорции(), Формат(РазмерПорции, "ЧГ=")); + + Если ПараметрыОбновления.ПолучитьПорции > 0 Тогда + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Если Не ПараметрыОбновления.Свойство("ПоследнийКлючДоступаПорции") Тогда + Возврат; + КонецЕсли; + ПараметрыОбновления.Вставить("НаборПорций", Новый Массив); + ПорцияНабора = Новый Структура("КлючиДоступа", Неопределено); + ПараметрыОбновления.НаборПорций.Добавить(ПорцияНабора); + Возврат; + КонецЕсли; + КлючиДоступа = РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Ссылка"); + + Если ПараметрыОбновления.Свойство("ПоследнийКлючДоступаПорции") + Или КлючиДоступа.Количество() > ПорцияКлючейНабора * 2 Тогда + + НаборПорций = Новый Массив; + ПараметрыОбновления.Вставить("НаборПорций", НаборПорций); + Индекс = 0; + Для Каждого КлючДоступа Из КлючиДоступа Цикл + Если Индекс / ПорцияКлючейНабора = Цел(Индекс / ПорцияКлючейНабора) Тогда + ПорцияНабора = Новый Массив; + НаборПорций.Добавить(ПорцияНабора); + КонецЕсли; + ПорцияНабора.Добавить(КлючДоступа); + Индекс = Индекс + 1; + КонецЦикла; + Для Индекс = 0 По НаборПорций.Количество() - 1 Цикл + КлючиДоступаПорции = НаборПорций[Индекс]; + ПорцияНабора = Новый Структура; + НаборПорций[Индекс] = ПорцияНабора; + ПорцияНабора.Вставить("КлючиДоступа", Новый ХранилищеЗначения(КлючиДоступаПорции)); + ПорцияНабора.Вставить("ПоследнийКлючДоступаПорции", + КлючиДоступаПорции[КлючиДоступаПорции.Количество()-1]); + КонецЦикла; + Возврат; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если КлючиДоступа <> Неопределено Тогда + Запрос.Текст = ПараметрыОбновления.ТекстЗапросаЗначенийИзКлючейДоступаДляРасчетаПрав; + Запрос.УстановитьПараметр("КлючиДоступа", КлючиДоступа); + Запрос.Текст = СтрЗаменить(ПараметрыОбновления.ТекстЗапросаЗначенийИзКлючейДоступаДляРасчетаПрав, + "И КлючиДоступа.Ссылка > &ПоследнийКлючДоступа", + "И КлючиДоступа.Ссылка В (&КлючиДоступа)"); + КонецЕсли; + + Запрос.УстановитьПараметр("ИдентификаторТаблицыНастроекПрав", ПараметрыОбновления.ИдентификаторТаблицыНастроекПрав); + Запрос.УстановитьПараметр("ПустойУникальныйИдентификатор", + Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + + Если ПараметрыОбновления.ВладельцыСПравамиДля <> Неопределено Тогда + УстановитьПараметрВладельцевСПравами(Запрос, "ВладельцыСПравамиПользователей", + ПараметрыОбновления.ВладельцыСПравамиДля.Пользователей, ПараметрыОбновления.Кэш); + + УстановитьПараметрВладельцевСПравами(Запрос, "ВладельцыСПравамиГруппДоступа", + ПараметрыОбновления.ВладельцыСПравамиДля.ГруппДоступа, ПараметрыОбновления.Кэш); + КонецЕсли; + + РезультатыЗапроса = Запрос.ВыполнитьПакет(); + Если РезультатыЗапроса[1].Пустой() Тогда + Возврат; + КонецЕсли; + + ЗначенияТаблицКлючей = Новый Соответствие; + НомерТаблицы = 0; + Для Каждого ТаблицаКлюча Из ПараметрыОбновления.ТаблицыКлюча Цикл + НомерТаблицы = НомерТаблицы + 1; + ЗначенияТаблицКлючей.Вставить(ТаблицаКлюча, + РезультатыЗапроса[НомерТаблицы].Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам)); + КонецЦикла; + ЗаполнитьПраваНаВедущиеКлючиДоступаИВедущиеСписки(РезультатыЗапроса, НомерТаблицы, ПараметрыОбновления); + ЗаполнитьПраваПоВладельцамНастроекПрав(РезультатыЗапроса, НомерТаблицы, ПараметрыОбновления); + + ЗаполнитьПраваИУчастниковГруппДоступаСписка(ПараметрыОбновления); + ЗаполнитьЗначенияГруппДоступаДляРасчетаПрав(ПараметрыОбновления); + + ПараметрыОбновления.Вставить("ТипПользователя", ?(ПараметрыОбновления.ДляВнешнихПользователей, + Тип("СправочникСсылка.ВнешниеПользователи"), Тип("СправочникСсылка.Пользователи"))); + + ПараметрыОбновления.Вставить("ТипГруппыПользователей", ?(ПараметрыОбновления.ДляВнешнихПользователей, + Тип("СправочникСсылка.ГруппыВнешнихПользователей"), Тип("СправочникСсылка.ГруппыПользователей"))); + + ЗначенияПервойТаблицы = ЗначенияТаблицКлючей.Получить(ПараметрыОбновления.ТаблицыКлюча[0]); + ИндексПоследнегоКлюча = ЗначенияПервойТаблицы.Строки.Количество() - 1; + + Для ИндексКлюча = 0 По ИндексПоследнегоКлюча Цикл + ЗначенияТаблицКлюча = Новый Структура; + Для Каждого ТаблицаКлюча Из ПараметрыОбновления.ТаблицыКлюча Цикл + ЗначенияТаблицы = ЗначенияТаблицКлючей.Получить(ТаблицаКлюча).Строки[ИндексКлюча].Строки; + Если СтрНачинаетсяС(ТаблицаКлюча, "Шапка") Тогда + ЗначенияТаблицы = ЗначенияТаблицы[0]; + КонецЕсли; + ЗначенияТаблицКлюча.Вставить(ТаблицаКлюча, ЗначенияТаблицы); + КонецЦикла; + КлючДоступа = ЗначенияПервойТаблицы.Строки[ИндексКлюча].Ссылка; + ОбновитьПраваКлючаДоступаСписка(ПараметрыОбновления, ЗначенияТаблицКлюча, КлючДоступа); + КонецЦикла; + + ПоследнийКлючДоступа = ЗначенияПервойТаблицы.Строки[ИндексПоследнегоКлюча].Ссылка; + + ПараметрыОбновления.Вставить("НовыйПоследнийОбновленныйКлючДоступа", ПоследнийКлючДоступа); + +КонецПроцедуры + +// Для процедуры ОбновитьПользователейПорцииКлючейДоступаСписка. +Процедура УстановитьПараметрВладельцевСПравами(Запрос, ИмяПараметра, ПолныеИмена, Кэш) + + Если Не Кэш.Свойство(ИмяПараметра) Тогда + ИдентификаторыПоПолнымИменам = + Справочники.ИдентификаторыОбъектовМетаданных.ИдентификаторыОбъектовМетаданных(ПолныеИмена, Истина); + + Идентификаторы = Новый Массив; + Для Каждого ПолноеИмя Из ПолныеИмена Цикл + Идентификатор = ИдентификаторыПоПолнымИменам.Получить(ПолноеИмя); + Если Не ЗначениеЗаполнено(Идентификатор) Тогда + Продолжить; + КонецЕсли; + Идентификаторы.Добавить(Идентификатор); + КонецЦикла; + + Кэш.Вставить(ИмяПараметра, Идентификаторы); + КонецЕсли; + + Запрос.УстановитьПараметр(ИмяПараметра, Кэш[ИмяПараметра]); + +КонецПроцедуры + +// Для процедуры ОбновитьПользователейКлючейДоступаСписка. +Процедура УдалитьПорциюКлючейДоступаСписка(ПараметрыОбновления) + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Список", ПараметрыОбновления.ИдентификаторСписка); + Запрос.УстановитьПараметр("ДляВнешнихПользователей", ПараметрыОбновления.ДляВнешнихПользователей); + + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1000 + | КлючиДоступа.Ссылка КАК Ссылка, + | ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | РегистрСведений.КлючиДоступаГруппДоступа КАК КлючиДоступаГруппДоступа + | ГДЕ + | КлючиДоступаГруппДоступа.КлючДоступа = КлючиДоступа.Ссылка) КАК ОчиститьКлючиДоступаГруппДоступа, + | ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | РегистрСведений.КлючиДоступаПользователей КАК КлючиДоступаПользователей + | ГДЕ + | КлючиДоступаПользователей.КлючДоступа = КлючиДоступа.Ссылка) КАК ОчиститьКлючиДоступаПользователей, + | ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | РегистрСведений.КлючиДоступаВнешнихПользователей КАК КлючиДоступаВнешнихПользователей + | ГДЕ + | КлючиДоступаВнешнихПользователей.КлючДоступа = КлючиДоступа.Ссылка) КАК ОчиститьКлючиДоступаВнешнихПользователей + |ИЗ + | Справочник.КлючиДоступа КАК КлючиДоступа + |ГДЕ + | КлючиДоступа.Список = &Список + | И КлючиДоступа.ДляВнешнихПользователей = &ДляВнешнихПользователей + | + |УПОРЯДОЧИТЬ ПО + | КлючиДоступа.ПометкаУдаления УБЫВ, + | КлючиДоступа.Ссылка"; + + РезультатЗапроса = Запрос.Выполнить(); + + Если РезультатЗапроса.Пустой() Тогда + Возврат; + КонецЕсли; + + Выгрузка = РезультатЗапроса.Выгрузить(); + + Контекст = Новый Структура; + Контекст.Вставить("КлючиДоступаГруппДоступа", + СлужебныйНаборЗаписей(РегистрыСведений.КлючиДоступаГруппДоступа)); + Контекст.Вставить("КлючиДоступаПользователей", + СлужебныйНаборЗаписей(РегистрыСведений.КлючиДоступаПользователей)); + Контекст.Вставить("КлючиДоступаВнешнихПользователей", + СлужебныйНаборЗаписей(РегистрыСведений.КлючиДоступаВнешнихПользователей)); + + ВсеУдалено = Истина; + ПорцияКлючей = Новый Массив; + Для Каждого Строка Из Выгрузка Цикл + Если ПорцияКлючей.Количество() < 50 Тогда + ПорцияКлючей.Добавить(Строка); + Продолжить; + КонецЕсли; + УдалитьТекущуюПорциюКлючейДоступаСписка(Контекст, ПорцияКлючей, ВсеУдалено); + ПорцияКлючей = Новый Массив; + КонецЦикла; + + Если ПорцияКлючей.Количество() > 0 Тогда + УдалитьТекущуюПорциюКлючейДоступаСписка(Контекст, ПорцияКлючей, ВсеУдалено); + КонецЕсли; + + Если Не ВсеУдалено Или Выгрузка.Количество() = 1000 Тогда + ПараметрыОбновления.Вставить("НовыйПоследнийОбновленныйКлючДоступа", Неопределено); + КонецЕсли; + +КонецПроцедуры + +// Для процедуры УдалитьПорциюКлючейДоступаСписка. +Процедура УдалитьТекущуюПорциюКлючейДоступаСписка(Контекст, ПорцияКлючей, ВсеУдалено) + + Блокировка = Новый БлокировкаДанных; + Для Каждого ОписаниеКлюча Из ПорцияКлючей Цикл + ЭлементБлокировки = Блокировка.Добавить("Справочник.КлючиДоступа"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ОписаниеКлюча.Ссылка); + Если ОписаниеКлюча.ОчиститьКлючиДоступаГруппДоступа Тогда + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.КлючиДоступаГруппДоступа"); + ЭлементБлокировки.УстановитьЗначение("КлючДоступа", ОписаниеКлюча.Ссылка); + КонецЕсли; + Если ОписаниеКлюча.ОчиститьКлючиДоступаПользователей Тогда + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.КлючиДоступаПользователей"); + ЭлементБлокировки.УстановитьЗначение("КлючДоступа", ОписаниеКлюча.Ссылка); + КонецЕсли; + Если ОписаниеКлюча.ОчиститьКлючиДоступаВнешнихПользователей Тогда + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.КлючиДоступаВнешнихПользователей"); + ЭлементБлокировки.УстановитьЗначение("КлючДоступа", ОписаниеКлюча.Ссылка); + КонецЕсли; + КонецЦикла; + + БлокировкаУстановлена = Ложь; + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + БлокировкаУстановлена = Истина; + Для Каждого ОписаниеКлюча Из ПорцияКлючей Цикл + КлючДоступаОбъект = ОписаниеКлюча.Ссылка.ПолучитьОбъект(); + Если КлючДоступаОбъект <> Неопределено Тогда + ОбновлениеИнформационнойБазы.УдалитьДанные(КлючДоступаОбъект, Ложь, Ложь); + КонецЕсли; + Если ОписаниеКлюча.ОчиститьКлючиДоступаГруппДоступа Тогда + Контекст.КлючиДоступаГруппДоступа.Отбор.КлючДоступа.Установить(ОписаниеКлюча.Ссылка); + Контекст.КлючиДоступаГруппДоступа.Записать(); + КонецЕсли; + Если ОписаниеКлюча.ОчиститьКлючиДоступаПользователей Тогда + Контекст.КлючиДоступаПользователей.Отбор.КлючДоступа.Установить(ОписаниеКлюча.Ссылка); + Контекст.КлючиДоступаПользователей.Записать(); + КонецЕсли; + Если ОписаниеКлюча.ОчиститьКлючиДоступаВнешнихПользователей Тогда + Контекст.КлючиДоступаВнешнихПользователей.Отбор.КлючДоступа.Установить(ОписаниеКлюча.Ссылка); + Контекст.КлючиДоступаВнешнихПользователей.Записать(); + КонецЕсли; + КонецЦикла; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + Если БлокировкаУстановлена Тогда + ВызватьИсключение; + Иначе + ВсеУдалено = Ложь; + КонецЕсли; + КонецПопытки; + +КонецПроцедуры + +// Для процедуры ОбновитьПользователейКлючейДоступаСписка. +Процедура ЗаполнитьПраваИУчастниковГруппДоступаСписка(ПараметрыОбновления) + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Таблица", ПараметрыОбновления.ИдентификаторСписка); + Запрос.Текст = + "ВЫБРАТЬ + | ТаблицыГруппДоступа.ГруппаДоступа КАК ГруппаДоступа, + | ТаблицыГруппДоступа.Изменение КАК Изменение, + | ТаблицыГруппДоступа.Добавление КАК Добавление, + | ТаблицыГруппДоступа.ЧтениеБезОграничения КАК ЧтениеБезОграничения, + | ТаблицыГруппДоступа.ИзменениеБезОграничения КАК ИзменениеБезОграничения, + | ТаблицыГруппДоступа.ДобавлениеБезОграничения КАК ДобавлениеБезОграничения + |ИЗ + | РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа + |ГДЕ + | ТаблицыГруппДоступа.Таблица = &Таблица"; + + ТекстЗапросаУчастников = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ТаблицыГруппДоступа.ГруппаДоступа КАК ГруппаДоступа, + | ПользователиГруппыДоступа.Пользователь КАК Участник + |ИЗ + | РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК ПользователиГруппыДоступа + | ПО (ПользователиГруппыДоступа.Ссылка = ТаблицыГруппДоступа.ГруппаДоступа) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК ПользователиГруппПользователей + | ПО (ПользователиГруппПользователей.ГруппаПользователей = ПользователиГруппыДоступа.Пользователь) + | И (ПользователиГруппПользователей.Используется) + | И (ПользователиГруппПользователей.Пользователь.ИдентификаторПользователяИБ <> &ПустойУникальныйИдентификатор) + |ГДЕ + | ТаблицыГруппДоступа.Таблица = &Таблица + | И НЕ ПользователиГруппыДоступа.Ссылка ЕСТЬ NULL + | И НЕ ПользователиГруппПользователей.Пользователь ЕСТЬ NULL + |ИТОГИ ПО + | ГруппаДоступа + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | ПользователиГруппПользователей.ГруппаПользователей КАК ГруппаПользователей, + | ПользователиГруппПользователей.Пользователь КАК Пользователь + |ИЗ + | РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК ПользователиГруппыДоступа + | ПО (ПользователиГруппыДоступа.Ссылка = ТаблицыГруппДоступа.ГруппаДоступа) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК ПользователиГруппПользователей + | ПО (ПользователиГруппПользователей.ГруппаПользователей = ПользователиГруппыДоступа.Пользователь) + | И (ПользователиГруппПользователей.Пользователь <> ПользователиГруппыДоступа.Пользователь) + | И (ПользователиГруппПользователей.Используется) + | И (ПользователиГруппПользователей.Пользователь.ИдентификаторПользователяИБ <> &ПустойУникальныйИдентификатор) + |ГДЕ + | ТаблицыГруппДоступа.Таблица = &Таблица + | И НЕ ПользователиГруппыДоступа.Ссылка ЕСТЬ NULL + | И НЕ ПользователиГруппПользователей.Пользователь ЕСТЬ NULL + |ИТОГИ ПО + | ГруппаПользователей"; + + Если ПараметрыОбновления.РассчитыватьПраваПользователей Тогда + Запрос.Текст = Запрос.Текст + ОбщегоНазначения.РазделительПакетаЗапросов() + ТекстЗапросаУчастников; + Запрос.УстановитьПараметр("ПустойУникальныйИдентификатор", + Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + КонецЕсли; + РезультатыЗапроса = Запрос.ВыполнитьПакет(); + + Выборка = РезультатыЗапроса[0].Выбрать(); + ПраваГруппДоступаСписка = Новый Соответствие; + + Пока Выборка.Следующий() Цикл + ПраваГруппыДоступа = Новый Структура; + ПраваГруппыДоступа.Вставить("Изменение", Выборка.Изменение); + ПраваГруппыДоступа.Вставить("Добавление", Выборка.Добавление); + ПраваГруппыДоступа.Вставить("ЧтениеБезОграничения", Выборка.ЧтениеБезОграничения); + ПраваГруппыДоступа.Вставить("ИзменениеБезОграничения", Выборка.ИзменениеБезОграничения); + ПраваГруппыДоступа.Вставить("ДобавлениеБезОграничения", Выборка.ДобавлениеБезОграничения); + ПраваГруппДоступаСписка.Вставить(Выборка.ГруппаДоступа, ПраваГруппыДоступа); + КонецЦикла; + ПараметрыОбновления.Вставить("ПраваГруппДоступаСписка", ПраваГруппДоступаСписка); + + УчастникиГруппДоступа = Новый Соответствие; + + Если ПараметрыОбновления.РассчитыватьПраваПользователей Тогда + Дерево = РезультатыЗапроса[1].Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); + Для Каждого Строка Из Дерево.Строки Цикл + УчастникиГруппыДоступа = Новый Соответствие; + Для Каждого Подстрока Из Строка.Строки Цикл + УчастникиГруппыДоступа.Вставить(Подстрока.Участник, Истина); + КонецЦикла; + УчастникиГруппДоступа.Вставить(Строка.ГруппаДоступа, УчастникиГруппыДоступа); + КонецЦикла; + КонецЕсли; + ПараметрыОбновления.Вставить("УчастникиГруппДоступа", УчастникиГруппДоступа); + + ПользователиГруппПользователей = Новый Соответствие; + + Если ПараметрыОбновления.РассчитыватьПраваПользователей Тогда + Дерево = РезультатыЗапроса[2].Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); + Для Каждого Строка Из Дерево.Строки Цикл + ПользователиГруппыПользователей = Новый Соответствие; + Для Каждого Подстрока Из Строка.Строки Цикл + ПользователиГруппыПользователей.Вставить(Подстрока.Пользователь, Истина); + КонецЦикла; + ПользователиГруппПользователей.Вставить(Строка.ГруппаПользователей, ПользователиГруппыПользователей); + КонецЦикла; + КонецЕсли; + ПараметрыОбновления.Вставить("ПользователиГруппПользователей", ПользователиГруппПользователей); + +КонецПроцедуры + +// Для процедуры ОбновитьПользователейКлючейДоступаСписка. +Процедура ЗаполнитьЗначенияГруппДоступаДляРасчетаПрав(ПараметрыОбновления) + + Если Не ПараметрыОбновления.Кэш.Свойство("ЗначенияГруппДоступаВерсия") Тогда + ПараметрыОбновления.Кэш.Вставить("ЗначенияГруппДоступаВерсия", Новый УникальныйИдентификатор); + КонецЕсли; + + ИмяПараметраВерсии = "СтандартныеПодсистемы.УправлениеДоступом.ЗначенияГруппДоступаВерсия"; + ЗначенияГруппДоступаВерсия = СтандартныеПодсистемыСервер.ПараметрРаботыРасширения(ИмяПараметраВерсии, Истина); + + Если ПараметрыОбновления.Кэш.ЗначенияГруппДоступаВерсия = ЗначенияГруппДоступаВерсия Тогда + ПараметрыОбновления.Вставить("ЗначенияГруппДоступа", ПараметрыОбновления.Кэш.ЗначенияГруппДоступа); + Возврат; + КонецЕсли; + + ИмяПараметра = "СтандартныеПодсистемы.УправлениеДоступом.ЗначенияГруппДоступа"; + ЗначенияГруппДоступа = СтандартныеПодсистемыСервер.ПараметрРаботыРасширения(ИмяПараметра, Истина); + + Если ЗначенияГруппДоступаВерсия <> Неопределено И ЗначенияГруппДоступа <> Неопределено Тогда + ПараметрыОбновления.Кэш.Вставить("ЗначенияГруппДоступаВерсия", ЗначенияГруппДоступаВерсия); + ПараметрыОбновления.Кэш.Вставить("ЗначенияГруппДоступа", ЗначенияГруппДоступа); + ПараметрыОбновления.Вставить("ЗначенияГруппДоступа", ЗначенияГруппДоступа); + Возврат; + КонецЕсли; + + ЗначенияГруппДоступаВерсия = Новый УникальныйИдентификатор; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ЗначенияГруппДоступаПоУмолчанию.ГруппаДоступа КАК ГруппаДоступа, + | ТИПЗНАЧЕНИЯ(ЗначенияГруппДоступаПоУмолчанию.ТипЗначенийДоступа) КАК ТипЗначенийДоступа, + | ЗначенияГруппДоступаПоУмолчанию.ВсеРазрешены КАК ВсеРазрешены + |ИЗ + | РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияГруппДоступаПоУмолчанию + |ГДЕ + | НЕ ЗначенияГруппДоступаПоУмолчанию.БезНастройки + |ИТОГИ ПО + | ГруппаДоступа + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ЗначенияГруппДоступа.ГруппаДоступа КАК ГруппаДоступа, + | ТИПЗНАЧЕНИЯ(ЗначенияГруппДоступа.ЗначениеДоступа) КАК ТипЗначенийДоступа, + | ЗначенияГруппДоступа.ЗначениеДоступа КАК ЗначениеДоступа + |ИЗ + | РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + |ИТОГИ ПО + | ГруппаДоступа, + | ТипЗначенийДоступа"; + РезультатыЗапроса = Запрос.ВыполнитьПакет(); + + ЗначенияГруппДоступа = Новый Соответствие; + + Дерево = РезультатыЗапроса[0].Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); + Для Каждого Строка Из Дерево.Строки Цикл + ЗначенияГруппыДоступа = Новый Соответствие; + Для Каждого Подстрока Из Строка.Строки Цикл + ЗначенияОдногоТипа = Новый Структура; + ЗначенияОдногоТипа.Вставить("ВсеРазрешены", Подстрока.ВсеРазрешены); + ЗначенияОдногоТипа.Вставить("Значения", Новый Соответствие); + ЗначенияГруппыДоступа.Вставить(Подстрока.ТипЗначенийДоступа, ЗначенияОдногоТипа); + КонецЦикла; + ЗначенияГруппДоступа.Вставить(Строка.ГруппаДоступа, ЗначенияГруппыДоступа); + КонецЦикла; + + Дерево = РезультатыЗапроса[1].Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); + Для Каждого Строка Из Дерево.Строки Цикл + ЗначенияГруппыДоступа = ЗначенияГруппДоступа.Получить(Строка.ГруппаДоступа); + Если ЗначенияГруппыДоступа = Неопределено Тогда + Продолжить; + КонецЕсли; + Для Каждого Подстрока Из Строка.Строки Цикл + ЗначенияОдногоТипа = ЗначенияГруппыДоступа.Получить(Подстрока.ТипЗначенийДоступа); + Если ЗначенияОдногоТипа = Неопределено Тогда + Продолжить; + КонецЕсли; + Значения = ЗначенияОдногоТипа.Значения; + Для Каждого ОписаниеЗначения Из Подстрока.Строки Цикл + Значения.Вставить(ОписаниеЗначения.ЗначениеДоступа, Истина); + КонецЦикла; + КонецЦикла; + КонецЦикла; + + СтандартныеПодсистемыСервер.УстановитьПараметрРаботыРасширения(ИмяПараметра, ЗначенияГруппДоступа, Истина); + СтандартныеПодсистемыСервер.УстановитьПараметрРаботыРасширения(ИмяПараметраВерсии, ЗначенияГруппДоступаВерсия, Истина); + + ПараметрыОбновления.Кэш.Вставить("ЗначенияГруппДоступаВерсия", ЗначенияГруппДоступаВерсия); + ПараметрыОбновления.Кэш.Вставить("ЗначенияГруппДоступа", ЗначенияГруппДоступа); + ПараметрыОбновления.Вставить("ЗначенияГруппДоступа", ЗначенияГруппДоступа); + +КонецПроцедуры + +// Для процедуры ОбновитьПользователейКлючейДоступаСписка. +Процедура ЗаполнитьПраваНаВедущиеКлючиДоступаИВедущиеСписки(РезультатыЗапроса, НомерТаблицы, ПараметрыОбновления) + + ПраваНаВедущиеКлючиДоступа = Новый Соответствие; + Если ПараметрыОбновления.ЕстьВедущиеКлючиДоступа Тогда + НомерТаблицы = НомерТаблицы + 1; + Дерево = РезультатыЗапроса[НомерТаблицы].Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); + Для Каждого Строка Из Дерево.Строки Цикл + ПраваНаВедущийКлюч = Новый Соответствие; + Для Каждого Подстрока Из Строка.Строки Цикл + ПраваНаВедущийКлюч.Вставить(Подстрока.ВладелецПрав, Подстрока.Изменение); + КонецЦикла; + ПраваНаВедущиеКлючиДоступа.Вставить(Строка.КлючДоступа, + Новый ФиксированноеСоответствие(ПраваНаВедущийКлюч)); + КонецЦикла; + КонецЕсли; + ПараметрыОбновления.Вставить("ПраваНаВедущиеКлючиДоступа", + Новый ФиксированноеСоответствие(ПраваНаВедущиеКлючиДоступа)); + + ПраваНаВедущиеСписки = Новый Соответствие; + Если ПараметрыОбновления.ЕстьВедущиеСпискиПоПравам Тогда + НомерТаблицы = НомерТаблицы + 1; + Дерево = РезультатыЗапроса[НомерТаблицы].Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); + Для Каждого Строка Из Дерево.Строки Цикл + ПраваНаВедущийСписок = Новый Соответствие; + Для Каждого Подстрока Из Строка.Строки Цикл + ПраваНаВедущийСписок.Вставить(Подстрока.ВладелецПрав, Подстрока.Изменение); + КонецЦикла; + ПраваНаВедущиеСписки.Вставить(Строка.Список, + Новый ФиксированноеСоответствие(ПраваНаВедущийСписок)); + КонецЦикла; + КонецЕсли; + ПараметрыОбновления.Вставить("ПраваНаВедущиеСписки", + Новый ФиксированноеСоответствие(ПраваНаВедущиеСписки)); + +КонецПроцедуры + +// Для процедуры ОбновитьПользователейКлючейДоступаСписка. +Процедура ЗаполнитьПраваПоВладельцамНастроекПрав(РезультатыЗапроса, НомерТаблицы, ПараметрыОбновления) + + ПраваПоВладельцамНастроекПрав = Новый Соответствие; + Если ПараметрыОбновления.ЕстьВладельцыНастроекПрав Тогда + НомерТаблицы = НомерТаблицы + 1; + Дерево = РезультатыЗапроса[НомерТаблицы].Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); + Для Каждого Строка Из Дерево.Строки Цикл + ПраваПоВладельцуНастроекПрав = Новый Соответствие; + Для Каждого Подстрока Из Строка.Строки Цикл + ПраваПоВладельцуНастроекПрав.Вставить(Подстрока.ВладелецПрав, Подстрока.Изменение); + КонецЦикла; + ПраваПоВладельцамНастроекПрав.Вставить(Строка.ВладелецНастроекПрав, + Новый ФиксированноеСоответствие(ПраваПоВладельцуНастроекПрав)); + КонецЦикла; + КонецЕсли; + ПараметрыОбновления.Вставить("ПраваПоВладельцамНастроекПрав", + Новый ФиксированноеСоответствие(ПраваПоВладельцамНастроекПрав)); + +КонецПроцедуры + +// Для процедуры ОбновитьПользователейКлючейДоступаСписка. +Процедура ОбновитьПраваКлючаДоступаСписка(ПараметрыОбновления, ЗначенияТаблицКлюча, КлючДоступа) + + ПраваКлючаДоступа = Новый Соответствие; + + Контекст = Новый Структура; + Контекст.Вставить("ЗначенияТаблицКлюча", ЗначенияТаблицКлюча); + Контекст.Вставить("РеквизитыТаблицКлюча", ПараметрыОбновления.РеквизитыТаблицКлюча); + Контекст.Вставить("УчастникиГруппДоступа", ПараметрыОбновления.УчастникиГруппДоступа); + Контекст.Вставить("ПользователиГруппПользователей", ПараметрыОбновления.ПользователиГруппПользователей); + Контекст.Вставить("ПраваНаВедущиеКлючиДоступа", ПараметрыОбновления.ПраваНаВедущиеКлючиДоступа); + Контекст.Вставить("ПраваНаВедущиеСписки", ПараметрыОбновления.ПраваНаВедущиеСписки); + Контекст.Вставить("ПраваПоВладельцамНастроекПрав", ПараметрыОбновления.ПраваПоВладельцамНастроекПрав); + Контекст.Вставить("РассчитыватьПраваПользователей", ПараметрыОбновления.РассчитыватьПраваПользователей); + Контекст.Вставить("ТипПользователя", ПараметрыОбновления.ТипПользователя); + Контекст.Вставить("ТипГруппыПользователей", ПараметрыОбновления.ТипГруппыПользователей); + Контекст.Вставить("ТипыВладельцевНастроекПрав", ПараметрыОбновления.ТипыВладельцевНастроекПрав); + + Для Каждого ОписаниеПрав Из ПараметрыОбновления.ПраваГруппДоступаСписка Цикл + ГруппаДоступа = ОписаниеПрав.Ключ; + ПраваГруппыДоступа = ОписаниеПрав.Значение; + + Контекст.Вставить("ГруппаДоступа", ГруппаДоступа); + Контекст.Вставить("ЗначенияГруппыДоступа", + ПараметрыОбновления.ЗначенияГруппДоступа.Получить(ГруппаДоступа)); + + Если ПраваГруппыДоступа.ЧтениеБезОграничения Тогда + ПравоЧтение = "Истина"; + Иначе + ПравоЧтение = РассчитанноеУсловиеДляСтрок(Контекст, + ПараметрыОбновления.СтруктураРасчетаПраваЧтение); + КонецЕсли; + + Если ПравоЧтение = "Ложь" + Или ТипЗнч(ПравоЧтение) = Тип("Соответствие") + И ПравоЧтение.Количество() = 0 Тогда + + Продолжить; + КонецЕсли; + + Если ПраваГруппыДоступа.ИзменениеБезОграничения + И ПраваГруппыДоступа.ДобавлениеБезОграничения Тогда + + ПравоИзменение = "Истина"; + + ИначеЕсли ПраваГруппыДоступа.Изменение Тогда + Если ПараметрыОбновления.ЕстьОграничениеИзменения Тогда + ПравоИзменение = РассчитанноеУсловиеДляСтрок(Контекст, + ПараметрыОбновления.СтруктураРасчетаПраваИзменение); + + ИначеЕсли ПраваГруппыДоступа.ЧтениеБезОграничения Тогда + ПравоИзменение = РассчитанноеУсловиеДляСтрок(Контекст, + ПараметрыОбновления.СтруктураРасчетаПраваЧтение); + Иначе + ПравоИзменение = "Истина"; + КонецЕсли; + Иначе + ПравоИзменение = "Ложь"; + КонецЕсли; + + ПравоДобавление = ?(ПраваГруппыДоступа.Добавление, ПравоИзменение, "Ложь"); + ПравоИзменение = ?(ПраваГруппыДоступа.ИзменениеБезОграничения, "Истина", ПравоИзменение); + + Если Контекст.РассчитыватьПраваПользователей Тогда + ДобавитьПраваПользователейКлючаДоступа(ПраваКлючаДоступа, + ПравоЧтение, ПравоИзменение, ПравоДобавление, Контекст); + Иначе + ПраваКлючаДоступа.Вставить(ГруппаДоступа, + Новый Структура("Изменение, Добавление", + ПравоИзменение = "Истина", ПравоДобавление = "Истина")); + КонецЕсли; + КонецЦикла; + + ЗаписатьПраваКлючаДоступаСписка(ПараметрыОбновления, КлючДоступа, ПраваКлючаДоступа); + +КонецПроцедуры + +// Для процедуры ОбновитьПраваКлючаДоступаСписка. +Процедура ЗаписатьПраваКлючаДоступаСписка(ПараметрыОбновления, КлючДоступа, ПраваКлючаДоступа) + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("КлючДоступа", КлючДоступа); + Блокировка = Новый БлокировкаДанных; + + Если Не ПараметрыОбновления.РассчитыватьПраваПользователей Тогда + Запрос.Текст = + "ВЫБРАТЬ + | КлючиДоступаГруппДоступа.ГруппаДоступа КАК ГруппаДоступа, + | КлючиДоступаГруппДоступа.Изменение КАК Изменение, + | КлючиДоступаГруппДоступа.Добавление КАК Добавление + |ИЗ + | РегистрСведений.КлючиДоступаГруппДоступа КАК КлючиДоступаГруппДоступа + |ГДЕ + | КлючиДоступаГруппДоступа.КлючДоступа = &КлючДоступа"; + ИмяПоляВладельцаПрав = "ГруппаДоступа"; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.КлючиДоступаГруппДоступа"); + НаборЗаписей = СлужебныйНаборЗаписей(РегистрыСведений.КлючиДоступаГруппДоступа); + + ИначеЕсли ПараметрыОбновления.ДляВнешнихПользователей Тогда + Запрос.Текст = + "ВЫБРАТЬ + | КлючиДоступаВнешнихПользователей.ВнешнийПользователь КАК ВнешнийПользователь, + | КлючиДоступаВнешнихПользователей.Изменение КАК Изменение, + | КлючиДоступаВнешнихПользователей.Добавление КАК Добавление + |ИЗ + | РегистрСведений.КлючиДоступаВнешнихПользователей КАК КлючиДоступаВнешнихПользователей + |ГДЕ + | КлючиДоступаВнешнихПользователей.КлючДоступа = &КлючДоступа"; + ИмяПоляВладельцаПрав = "ВнешнийПользователь"; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.КлючиДоступаВнешнихПользователей"); + НаборЗаписей = СлужебныйНаборЗаписей(РегистрыСведений.КлючиДоступаВнешнихПользователей); + Иначе + Запрос.Текст = + "ВЫБРАТЬ + | КлючиДоступаПользователей.Пользователь КАК Пользователь, + | КлючиДоступаПользователей.Изменение КАК Изменение, + | КлючиДоступаПользователей.Добавление КАК Добавление + |ИЗ + | РегистрСведений.КлючиДоступаПользователей КАК КлючиДоступаПользователей + |ГДЕ + | КлючиДоступаПользователей.КлючДоступа = &КлючДоступа"; + ИмяПоляВладельцаПрав = "Пользователь"; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.КлючиДоступаПользователей"); + НаборЗаписей = СлужебныйНаборЗаписей(РегистрыСведений.КлючиДоступаПользователей); + КонецЕсли; + + ЭлементБлокировки.УстановитьЗначение("КлючДоступа", КлючДоступа); + НаборЗаписей.Отбор.КлючДоступа.Установить(КлючДоступа); + + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + Выборка = Запрос.Выполнить().Выбрать(); + ЕстьИзменения = Ложь; + НаборЗаписей.Отбор[ИмяПоляВладельцаПрав].Использование = Истина; + Пока Выборка.Следующий() Цикл + Права = ПраваКлючаДоступа.Получить(Выборка[ИмяПоляВладельцаПрав]); + Если Права = Неопределено Тогда + НаборЗаписей.Отбор[ИмяПоляВладельцаПрав].Значение = Выборка[ИмяПоляВладельцаПрав]; + НаборЗаписей.Записать(); + ЕстьИзменения = Истина; + ИначеЕсли Выборка.Изменение = Права.Изменение + И Выборка.Добавление = Права.Добавление Тогда + ПраваКлючаДоступа.Вставить(Выборка[ИмяПоляВладельцаПрав], Null); + КонецЕсли; + КонецЦикла; + ОднаЗапись = НаборЗаписей.Добавить(); + ОднаЗапись.КлючДоступа = КлючДоступа; + Для Каждого ОписаниеПрав Из ПраваКлючаДоступа Цикл + Если ОписаниеПрав.Значение = Null Тогда + Продолжить; + КонецЕсли; + НаборЗаписей.Отбор[ИмяПоляВладельцаПрав].Значение = ОписаниеПрав.Ключ; + ОднаЗапись[ИмяПоляВладельцаПрав] = ОписаниеПрав.Ключ; + ОднаЗапись.Изменение = ОписаниеПрав.Значение.Изменение; + ОднаЗапись.Добавление = ОписаниеПрав.Значение.Добавление; + НаборЗаписей.Записать(); + ЕстьИзменения = Истина; + КонецЦикла; + Если ЕстьИзменения И ПараметрыОбновления.ЗависимыеСпискиПоКлючамДоступа.Количество() > 0 Тогда + ЗапланироватьОбновлениеПользователейКлючейДоступа(ПараметрыОбновления.ЗависимыеСпискиПоКлючамДоступа, + Не ПараметрыОбновления.ДляВнешнихПользователей, ПараметрыОбновления.ДляВнешнихПользователей); + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Если ЕстьИзменения И ПараметрыОбновления.Свойство("ЕстьИзмененияПрав") Тогда + ПараметрыОбновления.ЕстьИзмененияПрав = Истина; + КонецЕсли; + +КонецПроцедуры + +// Для процедуры ОбновитьПраваКлючаДоступаСписка. +Процедура ДобавитьПраваПользователейКлючаДоступа(ПраваКлючаДоступа, ПравоЧтение, ПравоИзменение, ПравоДобавление, Контекст) + + Права = Новый Структура("Изменение, Добавление", ПравоИзменение = "Истина", ПравоДобавление = "Истина"); + + Если ТипЗнч(ПравоЧтение) <> Тип("Соответствие") Тогда + ДобавитьУчастникамГруппыДоступаПраваНаКлючДоступа(ПраваКлючаДоступа, Права.Изменение, Права.Добавление, Контекст); + Если Права.Изменение И Права.Добавление Тогда + Возврат; + КонецЕсли; + ИначеЕсли Права.Изменение И Права.Добавление Тогда + ДобавитьПользователямПраваНаКлючДоступа(ПраваКлючаДоступа, ПравоЧтение, Истина, Истина); + Возврат; + Иначе + ДобавитьПользователямПраваНаКлючДоступа(ПраваКлючаДоступа, ПравоЧтение, Права.Изменение, Ложь); + Если Права.Изменение И ПравоДобавление = "Ложь" Тогда + Возврат; + КонецЕсли; + КонецЕсли; + + Если ТипЗнч(ПравоИзменение) = Тип("Соответствие") И ПравоИзменение.Количество() > 0 Тогда + Если ПравоИзменение = ПравоДобавление Тогда + ДобавитьПользователямПраваНаКлючДоступа(ПраваКлючаДоступа, ПравоИзменение, Истина, Истина); + Возврат; + Иначе + ДобавитьПользователямПраваНаКлючДоступа(ПраваКлючаДоступа, ПравоИзменение, Истина, Ложь); + КонецЕсли; + КонецЕсли; + + Если ТипЗнч(ПравоДобавление) = Тип("Соответствие") И ПравоДобавление.Количество() > 0 Тогда + ДобавитьПользователямПраваНаКлючДоступа(ПраваКлючаДоступа, ПравоДобавление, Истина, Истина); + КонецЕсли; + +КонецПроцедуры + +// Для процедуры ДобавитьПраваПользователейКлючаДоступа. +Процедура ДобавитьУчастникамГруппыДоступаПраваНаКлючДоступа(ПраваКлючаДоступа, Изменение, Добавление, Контекст) + + УчастникиТекущейГруппыДоступа = Контекст.УчастникиГруппДоступа.Получить(Контекст.ГруппаДоступа); + Если УчастникиТекущейГруппыДоступа = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ТипЗнч(Изменение) = Тип("Соответствие") Тогда + СписокИсключений = Изменение; + Для Каждого КлючИЗначение Из УчастникиТекущейГруппыДоступа Цикл + Если ТипЗнч(КлючИЗначение.Ключ) = Контекст.ТипПользователя Тогда + Если СписокИсключений.Получить(КлючИЗначение.Ключ) = Неопределено Тогда + ПраваКлючаДоступа.Вставить(КлючИЗначение.Ключ, Истина); + КонецЕсли; + + ИначеЕсли ТипЗнч(КлючИЗначение.Ключ) = Контекст.ТипГруппыПользователей Тогда + ПользователиГруппы = Контекст.ПользователиГруппПользователей.Получить(КлючИЗначение.Ключ); + Если ПользователиГруппы <> Неопределено Тогда + Для Каждого КлючИЗначение Из ПользователиГруппы Цикл + Если СписокИсключений.Получить(КлючИЗначение.Ключ) = Неопределено Тогда + ПраваКлючаДоступа.Вставить(КлючИЗначение.Ключ, Истина); + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + ИначеЕсли Изменение И Добавление Тогда + Для Каждого КлючИЗначение Из УчастникиТекущейГруппыДоступа Цикл + Если ТипЗнч(КлючИЗначение.Ключ) = Контекст.ТипПользователя Тогда + ПраваКлючаДоступа.Вставить(КлючИЗначение.Ключ, + Новый Структура("Изменение, Добавление", Истина, Истина)); + + ИначеЕсли ТипЗнч(КлючИЗначение.Ключ) = Контекст.ТипГруппыПользователей Тогда + ПользователиГруппы = Контекст.ПользователиГруппПользователей.Получить(КлючИЗначение.Ключ); + Если ПользователиГруппы <> Неопределено Тогда + Для Каждого КлючИЗначение Из ПользователиГруппы Цикл + ПраваКлючаДоступа.Вставить(КлючИЗначение.Ключ, + Новый Структура("Изменение, Добавление", Истина, Истина)); + КонецЦикла; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + ИначеЕсли Не Изменение И Не Добавление Тогда + Для Каждого КлючИЗначение Из УчастникиТекущейГруппыДоступа Цикл + Если ТипЗнч(КлючИЗначение.Ключ) = Контекст.ТипПользователя Тогда + Права = ПраваКлючаДоступа.Получить(КлючИЗначение.Ключ); + Если Права = Неопределено Тогда + Права = Новый Структура("Изменение, Добавление", Ложь, Ложь); + ПраваКлючаДоступа.Вставить(КлючИЗначение.Ключ, Права); + КонецЕсли; + + ИначеЕсли ТипЗнч(КлючИЗначение.Ключ) = Контекст.ТипГруппыПользователей Тогда + ПользователиГруппы = Контекст.ПользователиГруппПользователей.Получить(КлючИЗначение.Ключ); + Если ПользователиГруппы <> Неопределено Тогда + Для Каждого КлючИЗначение Из ПользователиГруппы Цикл + Права = ПраваКлючаДоступа.Получить(КлючИЗначение.Ключ); + Если Права = Неопределено Тогда + Права = Новый Структура("Изменение, Добавление", Ложь, Ложь); + ПраваКлючаДоступа.Вставить(КлючИЗначение.Ключ, Права); + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЕсли; + КонецЦикла; + Иначе + Для Каждого КлючИЗначение Из УчастникиТекущейГруппыДоступа Цикл + Если ТипЗнч(КлючИЗначение.Ключ) = Контекст.ТипПользователя Тогда + Права = ПраваКлючаДоступа.Получить(КлючИЗначение.Ключ); + Если Права = Неопределено Тогда + Права = Новый Структура("Изменение, Добавление", Изменение, Добавление); + Иначе + Права.Изменение = Права.Изменение Или Изменение; + Права.Добавление = Права.Добавление Или Добавление; + КонецЕсли; + ПраваКлючаДоступа.Вставить(КлючИЗначение.Ключ, Права); + + ИначеЕсли ТипЗнч(КлючИЗначение.Ключ) = Контекст.ТипГруппыПользователей Тогда + ПользователиГруппы = Контекст.ПользователиГруппПользователей.Получить(КлючИЗначение.Ключ); + Если ПользователиГруппы <> Неопределено Тогда + Для Каждого КлючИЗначение Из ПользователиГруппы Цикл + Права = ПраваКлючаДоступа.Получить(КлючИЗначение.Ключ); + Если Права = Неопределено Тогда + Права = Новый Структура("Изменение, Добавление", Изменение, Добавление); + Иначе + Права.Изменение = Права.Изменение Или Изменение; + Права.Добавление = Права.Добавление Или Добавление; + КонецЕсли; + ПраваКлючаДоступа.Вставить(КлючИЗначение.Ключ, Права); + КонецЦикла; + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +// Для процедуры ДобавитьПраваПользователейКлючаДоступа. +Процедура ДобавитьПользователямПраваНаКлючДоступа(ПраваКлючаДоступа, СоставПользователей, Изменение, Добавление) + + Если Изменение И Добавление Тогда + Для Каждого КлючИЗначение Из СоставПользователей Цикл + ПраваКлючаДоступа.Вставить(КлючИЗначение.Ключ, + Новый Структура("Изменение, Добавление", Истина, Истина)); + КонецЦикла; + + ИначеЕсли Не Изменение И Не Добавление Тогда + Для Каждого КлючИЗначение Из СоставПользователей Цикл + Права = ПраваКлючаДоступа.Получить(КлючИЗначение.Ключ); + Если Права = Неопределено Тогда + Права = Новый Структура("Изменение, Добавление", Ложь, Ложь); + ПраваКлючаДоступа.Вставить(КлючИЗначение.Ключ, Права); + КонецЕсли; + КонецЦикла; + Иначе + Для Каждого КлючИЗначение Из СоставПользователей Цикл + Права = ПраваКлючаДоступа.Получить(КлючИЗначение.Ключ); + Если Права = Неопределено Тогда + Права = Новый Структура("Изменение, Добавление", Изменение, Добавление); + Иначе + Права.Изменение = Права.Изменение Или Изменение; + Права.Добавление = Права.Добавление Или Добавление; + КонецЕсли; + ПраваКлючаДоступа.Вставить(КлючИЗначение.Ключ, Права); + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +// Для процедуры ОбновитьГруппыДоступаКлючаДоступаСписка и функции РассчитанноеУсловие. +Функция РассчитанноеУсловиеДляСтрок(Контекст, Условие, УзелРеквизитов = Неопределено, ДляЛюбойИзСтрок = Истина) + + Если УзелРеквизитов = Неопределено Тогда + Контекст.Вставить("ОписанияТребуемыхТаблицКлюча", Новый Массив); + Если Условие.Узел = "ДляВсехСтрок" Или Условие.Узел = "ДляОднойИзСтрок" Тогда + Возврат РассчитанноеУсловие(Контекст, Условие); + КонецЕсли; + УзелРеквизитов = Условие; + КонецЕсли; + + Если Не ЗначениеЗаполнено(УзелРеквизитов.ТребуемыеРеквизитыТабличныхЧастейКлюча) Тогда + Контекст.Вставить("ТекущиеСтрокиТаблицКлюча", Контекст.ЗначенияТаблицКлюча); + Возврат РассчитанноеУсловие(Контекст, Условие); + КонецЕсли; + РеквизитыТаблиц = УзелРеквизитов.ТребуемыеРеквизитыТабличныхЧастейКлюча; + ЗначенияТаблиц = ТекущиеЗначенияТаблицКлюча(Контекст, РеквизитыТаблиц); + ИндексыСтрокТаблиц = Новый Соответствие; + + Контекст.ОписанияТребуемыхТаблицКлюча.Добавить( + Новый Структура("РеквизитыТаблиц, ЗначенияТаблиц, ИндексыСтрокТаблиц", + РеквизитыТаблиц, ЗначенияТаблиц, ИндексыСтрокТаблиц)); + + Контекст.Вставить("ТекущиеСтрокиТаблицКлюча", Новый Структура); + Для Каждого ОписаниеЗначений Из Контекст.ЗначенияТаблицКлюча Цикл + Если СтрНачинаетсяС(ОписаниеЗначений.Ключ, "Шапка") Тогда + Контекст.ТекущиеСтрокиТаблицКлюча.Вставить(ОписаниеЗначений.Ключ, ОписаниеЗначений.Значение); + КонецЕсли; + КонецЦикла; + + Результат = "Неопределено"; + + Пока Истина Цикл + ИндексИзменен = Ложь; + Для Каждого ОписаниеТаблицы Из РеквизитыТаблиц Цикл + ИмяТаблицыКлюча = ОписаниеТаблицы.Ключ; + ИндексСтроки = ИндексыСтрокТаблиц.Получить(ИмяТаблицыКлюча); + ЗначенияТаблицы = ЗначенияТаблиц[ИмяТаблицыКлюча]; + Если ИндексСтроки = Неопределено Тогда + ИндексСтроки = 0; + Иначе + Если ИндексСтроки >= ЗначенияТаблицы.Количество() - 1 Тогда + Продолжить; + КонецЕсли; + ИндексСтроки = ИндексСтроки + 1; + КонецЕсли; + ИндексИзменен = Истина; + ИндексыСтрокТаблиц.Вставить(ИмяТаблицыКлюча, ИндексСтроки); + Контекст.ТекущиеСтрокиТаблицКлюча.Вставить(ИмяТаблицыКлюча, ЗначенияТаблицы[ИндексСтроки]); + КонецЦикла; + Если Не ИндексИзменен Тогда + Прервать; + КонецЕсли; + ТекущийРезультат = РассчитанноеУсловие(Контекст, Условие); + Если ТипЗнч(ТекущийРезультат) <> Тип("Соответствие") Тогда + Если ДляЛюбойИзСтрок Тогда + Если ТекущийРезультат = "Истина" Тогда + Результат = "Истина"; + Прервать; + ИначеЕсли ТекущийРезультат = "Ложь" Тогда + Если Результат = "Неопределено" Тогда + Результат = "Ложь"; + КонецЕсли; + КонецЕсли; + Иначе + Если ТекущийРезультат = "Ложь" Тогда + Результат = "Ложь"; + Прервать; + ИначеЕсли ТекущийРезультат = "Истина" Тогда + Если Результат = "Неопределено" Тогда + Результат = "Истина"; + КонецЕсли; + КонецЕсли; + КонецЕсли; + Иначе + Если Не ДляЛюбойИзСтрок И ТекущийРезультат.Количество() = 0 Тогда + Результат = "Ложь"; + Прервать; + КонецЕсли; + Если ТипЗнч(Результат) = Тип("Строка") Тогда + Результат = ТекущийРезультат; + Иначе + ДобавитьТекущийРезультат(Результат, ТекущийРезультат, ДляЛюбойИзСтрок); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Если Результат = "Неопределено" Тогда + Результат = "Ложь"; + КонецЕсли; + + Контекст.ОписанияТребуемыхТаблицКлюча.Удалить( + Контекст.ОписанияТребуемыхТаблицКлюча.Количество() - 1); + + Возврат Результат; + +КонецФункции + +// Для функции РассчитанноеУсловиеДляСтрок. +Процедура ДобавитьТекущийРезультат(Результат, ТекущийРезультат, ДляЛюбойИзСтрок) + + Если ДляЛюбойИзСтрок Тогда + Для Каждого КлючИЗначение Из ТекущийРезультат Цикл + Результат.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + КонецЦикла; + Иначе + Если Результат.Количество() > ТекущийРезультат.Количество() Тогда + МеньшийРезультат = ТекущийРезультат; + БольшийРезультат = Результат; + Иначе + МеньшийРезультат = Результат; + БольшийРезультат = ТекущийРезультат; + КонецЕсли; + Результат = Новый Соответствие; + Для Каждого КлючИЗначение Из МеньшийРезультат Цикл + Если БольшийРезультат.Получить(КлючИЗначение.Ключ) <> Неопределено Тогда + Результат.Вставить(КлючИЗначение.Ключ, Истина); + КонецЕсли; + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +// Для функции РассчитанноеУсловие. +Процедура УстановитьОбратныйРезультат(Результат, Контекст) + + ОбратныйРезультат = Новый Соответствие; + ДобавитьУчастникамГруппыДоступаПраваНаКлючДоступа(ОбратныйРезультат, Результат, Неопределено, Контекст); + Результат = ОбратныйРезультат; + +КонецПроцедуры + +// Для функции РассчитанноеУсловиеДляСтрок. +Функция ТекущиеЗначенияТаблицКлюча(Контекст, ТребуемыеРеквизитыТабличныхЧастейКлюча) + + ТекущиеЗначенияТаблицКлюча = Новый Структура; + Для Каждого ОписаниеТаблиц Из ТребуемыеРеквизитыТабличныхЧастейКлюча Цикл + ИмяТаблицыКлюча = ОписаниеТаблиц.Ключ; + Реквизиты = ОписаниеТаблиц.Значение; + ЗначенияТаблицыКлюча = Контекст.ЗначенияТаблицКлюча[ИмяТаблицыКлюча]; + Отбор = Новый Структура; + Для Каждого ТекущееОписание Из Контекст.ОписанияТребуемыхТаблицКлюча Цикл + РеквизитыТаблицы = ТекущееОписание.РеквизитыТаблиц.Получить(ИмяТаблицыКлюча); + ЗначенияТаблицы = ТекущееОписание.ЗначенияТаблиц[ИмяТаблицыКлюча]; + ИндексСтрокиТаблицы = ТекущееОписание.ИндексыСтрокТаблиц.Получить(ИмяТаблицыКлюча); + СтрокаТаблицы = ЗначенияТаблицы[ИндексСтрокиТаблицы]; + Для Каждого ИмяРеквизита Из РеквизитыТаблицы Цикл + Отбор.Вставить(ИмяРеквизита, СтрокаТаблицы[ИмяРеквизита]); + КонецЦикла; + КонецЦикла; + ВсегоРеквизитовТаблицы = Контекст.РеквизитыТаблицКлюча.Получить(ИмяТаблицыКлюча).Количество(); + Если ВсегоРеквизитовТаблицы = Реквизиты.Количество() И Не ЗначениеЗаполнено(Отбор) Тогда + ТекущиеЗначенияТаблицКлюча.Вставить(ИмяТаблицыКлюча, ЗначенияТаблицыКлюча); + Продолжить; + КонецЕсли; + Строки = ЗначенияТаблицыКлюча; + Если ЗначениеЗаполнено(Отбор) Тогда + Строки = Строки.НайтиСтроки(Отбор); + КонецЕсли; + ЗначенияТаблицы = Новый ТаблицаЗначений; + Для Каждого ИмяРеквизита Из Реквизиты Цикл + ЗначенияТаблицы.Колонки.Добавить(ИмяРеквизита); + КонецЦикла; + Для Каждого Строка Из Строки Цикл + ЗаполнитьЗначенияСвойств(ЗначенияТаблицы.Добавить(), Строка); + КонецЦикла; + Если Реквизиты.Количество() < ВсегоРеквизитовТаблицы Тогда + РеквизитыСтрокой = СтрСоединить(Реквизиты, ", "); + ЗначенияТаблицы.Свернуть(РеквизитыСтрокой); + КонецЕсли; + ТекущиеЗначенияТаблицКлюча.Вставить(ИмяТаблицыКлюча, ЗначенияТаблицы); + КонецЦикла; + + Возврат ТекущиеЗначенияТаблицКлюча; + +КонецФункции + +// Для функции РассчитанноеУсловиеДляСтрок. +Функция РассчитанноеУсловие(Контекст, Условие) + + // Проверяемые типы уже учтены. + + Если Условие.Узел = "Поле" Тогда + Значение = Контекст.ТекущиеСтрокиТаблицКлюча[Условие.Таблица][Условие.Реквизит]; + Результат = ?(Значение = Перечисления.ДополнительныеЗначенияДоступа.Истина + Или Значение = Null И Условие.Свойство("ПроверкаЕстьNull"), "Истина", "Ложь"); + + ИначеЕсли Условие.Узел = "Константа" Тогда + Результат = ?(Условие.Значение = Истина, "Истина", "Ложь"); + + ИначеЕсли Условие.Узел = "И" Тогда + + Результат = "Неопределено"; + Для Каждого Аргумент Из Условие.Аргументы Цикл + ТекущийРезультат = РассчитанноеУсловие(Контекст, Аргумент); + Если ТекущийРезультат = "Ложь" Тогда + Результат = "Ложь"; + Прервать; + КонецЕсли; + Если ТекущийРезультат = "Истина" Тогда + Если Результат = "Неопределено" Тогда + Результат = "Истина"; + КонецЕсли; + ИначеЕсли ТипЗнч(ТекущийРезультат) = Тип("Соответствие") Тогда + Если ТекущийРезультат.Количество() = 0 Тогда + Результат = "Ложь"; + Прервать; + КонецЕсли; + Если ТипЗнч(Результат) = Тип("Строка") Тогда + Результат = ТекущийРезультат; + Иначе + ДобавитьТекущийРезультат(Результат, ТекущийРезультат, Ложь); + КонецЕсли; + КонецЕсли; + КонецЦикла; + Если Результат = "Неопределено" Тогда + Результат = "Ложь"; + КонецЕсли; + + ИначеЕсли Условие.Узел = "Или" Тогда + + Результат = "Неопределено"; + Для Каждого Аргумент Из Условие.Аргументы Цикл + ТекущийРезультат = РассчитанноеУсловие(Контекст, Аргумент); + Если ТекущийРезультат = "Истина" Тогда + Результат = "Истина"; + Прервать; + КонецЕсли; + Если ТекущийРезультат = "Ложь" Тогда + Если Результат = "Неопределено" Тогда + Результат = "Ложь"; + КонецЕсли; + ИначеЕсли ТипЗнч(ТекущийРезультат) = Тип("Соответствие") Тогда + Если ТекущийРезультат.Количество() = 0 Тогда + Если Результат = "Неопределено" Тогда + Результат = "Ложь"; + КонецЕсли; + ИначеЕсли ТипЗнч(Результат) = Тип("Строка") Тогда + Результат = ТекущийРезультат; + Иначе + ДобавитьТекущийРезультат(Результат, ТекущийРезультат, Истина); + КонецЕсли; + КонецЕсли; + КонецЦикла; + Если Результат = "Неопределено" Тогда + Результат = "Ложь"; + КонецЕсли; + + ИначеЕсли Условие.Узел = "Не" Тогда + Результат = РассчитанноеУсловие(Контекст, Условие.Аргумент); + Если Результат = "Истина" Тогда + Результат = "Ложь"; + ИначеЕсли Результат = "Ложь" Тогда + Результат = "Истина"; + ИначеЕсли ТипЗнч(Результат) = Тип("Соответствие") Тогда + Если Результат.Количество() = 0 Тогда + Результат = "Истина"; + Иначе + УстановитьОбратныйРезультат(Результат, Контекст); + КонецЕсли; + КонецЕсли; + + ИначеЕсли Условие.Узел = "ДляВсехСтрок" + Или Условие.Узел = "ДляОднойИзСтрок" Тогда + + Результат = РассчитанноеУсловиеДляСтрок(Контекст, + Условие.Аргумент, Условие, Условие.Узел = "ДляОднойИзСтрок"); + + ИначеЕсли Условие.Узел = "Выбор" Тогда + Результат = Неопределено; + Для Каждого Когда Из Условие.Когда Цикл + Если РассчитанноеУсловие(Контекст, Когда.Условие) = "Истина" Тогда + Результат = РассчитанноеУсловие(Контекст, Когда.Значение); + Прервать; + КонецЕсли; + КонецЦикла; + Если Результат = Неопределено Тогда + Результат = РассчитанноеУсловие(Контекст, Условие.Иначе); + КонецЕсли; + + ИначеЕсли Условие.Узел = "ЗначениеРазрешено" + Или Условие.Узел = "ЭтоАвторизованныйПользователь" + Или Условие.Узел = "ЧтениеОбъектаРазрешено" + Или Условие.Узел = "ИзменениеОбъектаРазрешено" + Или Условие.Узел = "ЧтениеСпискаРазрешено" + Или Условие.Узел = "ИзменениеСпискаРазрешено" Тогда + + Значение = Контекст.ТекущиеСтрокиТаблицКлюча[Условие.Поле.Таблица][Условие.Поле.Реквизит]; + Если Значение = Null Тогда + Значение = Перечисления.ДополнительныеЗначенияДоступа.Null; + КонецЕсли; + + Если Значение = Перечисления.ДополнительныеЗначенияДоступа.ТипРазрешенный Тогда + ТекущийРезультат = "Истина"; + + ИначеЕсли Значение = Перечисления.ДополнительныеЗначенияДоступа.ТипЗапрещенный Тогда + ТекущийРезультат = "Ложь"; + Иначе + ТекущийРезультат = Неопределено; + Для Каждого УточнениеСравнения Из Условие.УточненияСравнения Цикл + Если УточнениеСравнения.Ключ = "Null" + Или УточнениеСравнения.Ключ = "Неопределено" Тогда + Если Значение = Перечисления.ДополнительныеЗначенияДоступа[УточнениеСравнения.Ключ] Тогда + ТекущийРезультат = УточнениеСравнения.Значение; + Прервать; + КонецЕсли; + ИначеЕсли УточнениеСравнения.Ключ = "ПустаяСсылка" Тогда + Если Значение = Перечисления.ДополнительныеЗначенияДоступа.ПустаяСсылкаЛюбогоТипа + Или Значение.Пустая() Тогда + ТекущийРезультат = УточнениеСравнения.Значение; + Прервать; + КонецЕсли; + ИначеЕсли УточнениеСравнения.Ключ = ТипЗнч(Значение) Тогда + ТекущийРезультат = УточнениеСравнения.Значение; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если ТекущийРезультат <> Неопределено Тогда + Результат = ТекущийРезультат; + + ИначеЕсли Условие.Узел = "ЗначениеРазрешено" Тогда + Если Значение = Перечисления.ДополнительныеЗначенияДоступа.Null + Или Значение = Перечисления.ДополнительныеЗначенияДоступа.Неопределено + Или Контекст.ЗначенияГруппыДоступа = Неопределено Тогда + Результат = "Ложь"; + Иначе + ТипЗначения = ТипЗнч(Значение); + ЗначенияОдногоТипа = Контекст.ЗначенияГруппыДоступа.Получить(ТипЗначения); + Если ЗначенияОдногоТипа = Неопределено Тогда + Если Условие.УточненияСравнения.Получить("Отключено") = "Ложь" Тогда + Результат = "Ложь"; + Иначе + Результат = "Истина"; + КонецЕсли; + Иначе + ЗначениеУказано = ЗначенияОдногоТипа.Значения.Получить(Значение) <> Неопределено; + Результат = "Ложь"; + Если ЗначениеУказано И Не ЗначенияОдногоТипа.ВсеРазрешены + Или Не ЗначениеУказано И ЗначенияОдногоТипа.ВсеРазрешены Тогда + Результат = "Истина"; + + ИначеЕсли ТипЗначения = Контекст.ТипПользователя Тогда + Результат = Новый Соответствие; + ЗаполнитьРезультатДляПользователя(Результат, Значение, Контекст); + + ИначеЕсли ТипЗначения = Контекст.ТипГруппыПользователей Тогда + ПользователиГруппы = Контекст.ПользователиГруппПользователей.Получить(Значение); + + Если ПользователиГруппы <> Неопределено Тогда + Результат = Новый Соответствие; + Для Каждого ОписаниеПользователя Из ПользователиГруппы Цикл + ЗаполнитьРезультатДляПользователя(Результат, ОписаниеПользователя.Ключ, Контекст); + КонецЦикла; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + ИначеЕсли Условие.Узел = "ЭтоАвторизованныйПользователь" Тогда + Результат = Новый Соответствие; + ЗаполнитьРезультатДляПользователя(Результат, Значение, Контекст); + + ИначеЕсли ТипЗнч(Значение) = Тип("СправочникСсылка.КлючиДоступа") Тогда + ПраваНаВедущийКлючДоступа = Контекст.ПраваНаВедущиеКлючиДоступа.Получить(Значение); + Если ПраваНаВедущийКлючДоступа = Неопределено Тогда + Результат = "Ложь"; + + ИначеЕсли Контекст.РассчитыватьПраваПользователей Тогда + Если Условие.Узел = "ЧтениеОбъектаРазрешено" Тогда + Результат = Новый Соответствие(ПраваНаВедущийКлючДоступа); + + ИначеЕсли Условие.Узел = "ИзменениеОбъектаРазрешено" Тогда + Результат = Новый Соответствие; + Для Каждого КлючИЗначение Из ПраваНаВедущийКлючДоступа Цикл + Если КлючИЗначение.Значение Тогда + Результат.Вставить(КлючИЗначение.Ключ, Истина); + КонецЕсли; + КонецЦикла; + Иначе + Результат = "Ложь"; + КонецЕсли; + Иначе + ПравоИзменение = ПраваНаВедущийКлючДоступа.Получить(Контекст.ГруппаДоступа); + Если Условие.Узел = "ЧтениеОбъектаРазрешено" И ПравоИзменение <> Неопределено + Или Условие.Узел = "ИзменениеОбъектаРазрешено" И ПравоИзменение = Истина Тогда + Результат = "Истина"; + Иначе + Результат = "Ложь"; + КонецЕсли; + КонецЕсли; + + ИначеЕсли Контекст.ТипыВладельцевНастроекПрав.Получить(ТипЗнч(Значение)) <> Неопределено Тогда + ПраваПоВладельцуНастроекПрав = Контекст.ПраваПоВладельцамНастроекПрав.Получить(Значение); + Если ПраваПоВладельцуНастроекПрав = Неопределено Тогда + Результат = "Ложь"; + + ИначеЕсли Условие.Узел = "ЧтениеОбъектаРазрешено" Тогда + Результат = Новый Соответствие(ПраваПоВладельцуНастроекПрав); + + ИначеЕсли Условие.Узел = "ИзменениеОбъектаРазрешено" Тогда + Результат = Новый Соответствие; + Для Каждого КлючИЗначение Из ПраваПоВладельцуНастроекПрав Цикл + Если КлючИЗначение.Значение Тогда + Результат.Вставить(КлючИЗначение.Ключ, Истина); + КонецЕсли; + КонецЦикла; + Иначе + Результат = "Ложь"; + КонецЕсли; + + Иначе // Проверка прав на список. + ПраваНаВедущийСписок = Контекст.ПраваНаВедущиеСписки.Получить(Значение); + Если ПраваНаВедущийСписок = Неопределено Тогда + Результат = "Ложь"; + ИначеЕсли Контекст.РассчитыватьПраваПользователей Тогда + Если СтрНачинаетсяС(Условие.Узел, "Чтение") Тогда + Результат = ПраваНаВедущийСписок; + + ИначеЕсли СтрНачинаетсяС(Условие.Узел, "Изменение") Тогда + Результат = Новый Соответствие; + Для Каждого КлючИЗначение Из ПраваНаВедущийСписок Цикл + Если КлючИЗначение.Значение Тогда + Результат.Вставить(КлючИЗначение.Ключ, Истина); + КонецЕсли; + КонецЦикла; + Иначе + Результат = "Ложь"; + КонецЕсли; + Иначе + ПравоИзменение = ПраваНаВедущийСписок.Получить(Контекст.ГруппаДоступа); + Если СтрНачинаетсяС(Условие.Узел, "Чтение") И ПравоИзменение <> Неопределено + Или СтрНачинаетсяС(Условие.Узел, "Изменение") И ПравоИзменение = Истина Тогда + Результат = "Истина"; + Иначе + Результат = "Ложь"; + КонецЕсли; + КонецЕсли; + КонецЕсли; + Иначе + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При вычислении прав на ключ доступа узел не поддерживается ""%1"".'"), + Условие.Узел); + ВызватьИсключение ТекстОшибки; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Для функции РассчитанноеУсловие. +Процедура ЗаполнитьРезультатДляПользователя(Результат, Пользователь, Контекст) + + Если ТипЗнч(Пользователь) <> Контекст.ТипПользователя Тогда + Возврат; + КонецЕсли; + + УчастникиГруппыДоступа = Контекст.УчастникиГруппДоступа.Получить(Контекст.ГруппаДоступа); + Если УчастникиГруппыДоступа = Неопределено Тогда + Возврат; + КонецЕсли; + + Для Каждого ОписаниеУчастника Из УчастникиГруппыДоступа Цикл + Участник = ОписаниеУчастника.Ключ; + Если Участник = Пользователь Тогда + Результат.Вставить(Пользователь, Истина); + Прервать; + ИначеЕсли ТипЗнч(Участник) = Контекст.ТипГруппыПользователей Тогда + ПользователиГруппы = Контекст.ПользователиГруппПользователей.Получить(Участник); + + Если ПользователиГруппы <> Неопределено + И ПользователиГруппы.Получить(Пользователь) <> Неопределено Тогда + + Результат.Вставить(Пользователь, Истина); + Прервать; + КонецЕсли; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Создает служебный элемент справочника, который не участвует в подписках на события. +Функция СлужебныйЭлемент(МенеджерСправочника) + + ЭлементСправочника = МенеджерСправочника.СоздатьЭлемент(); + ЭлементСправочника.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); + ЭлементСправочника.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; + ЭлементСправочника.ОбменДанными.Загрузка = Истина; + + Возврат ЭлементСправочника; + +КонецФункции + +// Создает набор записей служебного регистра, который не участвует в подписках на события. +Функция СлужебныйНаборЗаписей(МенеджерРегистра) + + НаборЗаписей = МенеджерРегистра.СоздатьНаборЗаписей(); + НаборЗаписей.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); + НаборЗаписей.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; + НаборЗаписей.ОбменДанными.Загрузка = Истина; + + Возврат НаборЗаписей; + +КонецФункции + +// Для процедуры ВыполнитьОбновлениеДоступа. +Функция МаксимальноеКоличествоМинутВыполненияФоновогоЗаданияОбновленияДоступа() + + Возврат 2; + +КонецФункции + +// Для процедуры ЗаполнитьШаблоныЧастейЗапросаПроверкиОбъекта. +Функция МаркерРазмераПорции() + + Возврат "995"; + +КонецФункции + +Функция РазмерПорцииЭлементовДанных() + + Возврат 1000; + +КонецФункции + +Функция РазмерПорцииКлючейДоступа() + + Возврат 1000; + +КонецФункции + +// Для процедуры ЗаполнитьСвойстваПроверкиПолейВедущегоСписка. +Функция МаксимальноеКоличествоКомбинацийЗначенийВедущихПолейПриВычисленииСоставаИзмененных() + + Возврат 100; + +КонецФункции + +#КонецОбласти + +#Область ПараметрыОграниченияДоступа + +#Область ПараметрыОграниченияДоступаОбщаяЧасть + +// Основная функция, возвращающая параметры, необходимые для регистрации +// необходимости обновления ключей доступа к элементам данных. +Функция СвойстваСпискаКакВедущего(ПолноеИмя, ИдентификаторТранзакции = Неопределено) + + УстановитьОтключениеБезопасногоРежима(Истина); + УстановитьПривилегированныйРежим(Истина); + + ДействующиеПараметры = ДействующиеПараметрыОграниченияДоступа(ИдентификаторТранзакции); + ХранимыеСвойстваСпискаКакВедущего = ДействующиеПараметры.ВедущиеСписки.Получить(ПолноеИмя); + + Если ХранимыеСвойстваСпискаКакВедущего = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Кэш = КэшПараметровОграничения(); + + СвойстваСпискаКакВедущего = Кэш.ВедущиеСпискиПроверенные.Получить(ПолноеИмя); + Если СвойстваСпискаКакВедущего <> Неопределено Тогда + Возврат СвойстваСпискаКакВедущего; + КонецЕсли; + + СвойстваСпискаКакВедущего = Новый Структура(ХранимыеСвойстваСпискаКакВедущего); + ЗаполнитьТекстЗапросаСтарыхЗначенийДляПроверкиИзмененияПолейВедущегоСписка(ПолноеИмя, + СвойстваСпискаКакВедущего); + + Кэш.ВедущиеСпискиПроверенные.Вставить(ПолноеИмя, + Новый ФиксированнаяСтруктура(СвойстваСпискаКакВедущего)); + + СпискиДляПроверки = Новый Массив; + Для Каждого ОписаниеСписка Из ХранимыеСвойстваСпискаКакВедущего.ЗависимыеСписки Цикл + Если Кэш.ОграниченияСписков.Получить(ОписаниеСписка.Ключ) = Неопределено Тогда + СпискиДляПроверки.Добавить(ОписаниеСписка.Ключ); + КонецЕсли; + КонецЦикла; + СпискиДляПроверки.Добавить(ПолноеИмя); + + ДействующиеПараметрыОбновлены = Ложь; + ДобавляемыеОграниченияСписков = Новый Соответствие; + + ЗаполнитьПараметрыОграничения(СпискиДляПроверки, ИдентификаторТранзакции, + ДействующиеПараметрыОбновлены, ДобавляемыеОграниченияСписков); + + Если ДействующиеПараметрыОбновлены Тогда + Возврат СвойстваСпискаКакВедущего(ПолноеИмя); + КонецЕсли; + + Если ДобавляемыеОграниченияСписков.Количество() > 0 Тогда + Для Каждого КлючИЗначение Из ДобавляемыеОграниченияСписков Цикл + Кэш.ОграниченияСписков.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + КонецЦикла; + КонецЕсли; + + Возврат СвойстваСпискаКакВедущего; + +КонецФункции + +// Для функции СвойстваСпискаКакВедущего и процедур ЗаполнитьПараметрыОграничения, +// ОбновитьИдентификаторыТранзакции, УстановитьВерсиюПараметров. +// +Функция КэшПараметровОграничения() + + КлючДанныхПовторногоИспользования = Строка(ПараметрыСеанса.КлючДанныхПовторногоИспользования); + + Возврат УправлениеДоступомСлужебныйПовтИсп.КэшПараметровОграничения(КлючДанныхПовторногоИспользования); + +КонецФункции + +// Для функции СвойстваСпискаКакВедущего. +Процедура ЗаполнитьТекстЗапросаСтарыхЗначенийДляПроверкиИзмененияПолейВедущегоСписка(ПолноеИмя, Свойства) + + Свойства.Удалить("ЗависимыеСписки"); + Если Свойства.ПоЗначениямПолей = Неопределено Тогда + Возврат; + КонецЕсли; + + ПоЗначениямПолей = Новый Структура(Свойства.ПоЗначениямПолей); + + Если ПоЗначениямПолей.ЭтоСсылочныйТип Тогда + Если ЗначениеЗаполнено(ПоЗначениямПолей.ПоляШапки) Тогда + ТекстЗапроса = + "ВЫБРАТЬ + | ТекущаяТаблица.Поле1 КАК Поле1 + |ИЗ + | (ВЫБРАТЬ + | ИСТИНА КАК ЗначениеИстина) КАК ЗначениеИстина + | ЛЕВОЕ СОЕДИНЕНИЕ ТекущаяТаблицаЭлементовДанных КАК ТекущаяТаблица + | ПО (ТекущаяТаблица.Ссылка = &СсылкаНаОбъект)"; + ЗаполнитьПоляВыбораТекущейТаблицы(ТекстЗапроса, ПолноеИмя, ПоЗначениямПолей.ПоляШапки) + Иначе + ТекстЗапроса = ""; + КонецЕсли; + + Для Каждого ТабличнаяЧасть Из ПоЗначениямПолей.ТабличныеЧасти Цикл + ТекстЗапросаТабличнойЧасти = + "ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 100 + | ТекущаяТаблица.Поле1 КАК Поле1 + |ИЗ + | ТекущаяТаблицаЭлементовДанных КАК ТекущаяТаблица + |ГДЕ + | ТекущаяТаблица.Ссылка = &СсылкаНаОбъект"; + ЗаполнитьПоляВыбораТекущейТаблицы(ТекстЗапросаТабличнойЧасти, + ПолноеИмя + "." + ТабличнаяЧасть.Имя, ТабличнаяЧасть.Поля); + + ТекстЗапроса = ТекстЗапроса + ?(ТекстЗапроса = "", "", + ОбщегоНазначения.РазделительПакетаЗапросов()) + ТекстЗапросаТабличнойЧасти; + КонецЦикла; + + ИначеЕсли ЗначениеЗаполнено(ПоЗначениямПолей.ПоляРегистра.Поля) Тогда + ТекстЗапроса = + "ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 100 + | ТекущаяТаблица.Поле1 КАК Поле1 + |ИЗ + | ТекущаяТаблицаЭлементовДанных КАК ТекущаяТаблица + |ГДЕ + | &ОтборПоИзмерениям"; + ЗаполнитьПоляВыбораТекущейТаблицы(ТекстЗапроса, ПолноеИмя, ПоЗначениямПолей.ПоляРегистра.Поля); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ПЕРВЫЕ 100", "ПЕРВЫЕ " + + Формат(МаксимальноеКоличествоКомбинацийЗначенийВедущихПолейПриВычисленииСоставаИзмененных(), "ЧГ=")); + Иначе + ТекстЗапроса = ""; + КонецЕсли; + + ПоЗначениямПолей.Вставить("ТекстЗапроса", ТекстЗапроса); + Свойства.ПоЗначениямПолей = Новый ФиксированнаяСтруктура(ПоЗначениямПолей); + +КонецПроцедуры + +// Для процедуры ЗаполнитьТекстЗапросаСтарыхЗначенийДляПроверкиИзмененияПолейВедущегоСписка. +Процедура ЗаполнитьПоляВыбораТекущейТаблицы(ТекстЗапроса, ПолноеИмя, ОписаниеПолей) + + ПоляВыбора = ""; + Для Каждого ОписаниеПоля Из ОписаниеПолей Цикл + ИмяПоля = ?(ТипЗнч(ОписаниеПолей) = Тип("ФиксированныйМассив"), ОписаниеПоля, ОписаниеПоля.Ключ); + ПоляВыбора = ПоляВыбора + ?(ПоляВыбора = "", "", "," + Символы.ПС) + + "ТекущаяТаблица." + ИмяПоля + " КАК " + ИмяПоля; + КонецЦикла; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, + "ТекущаяТаблица.Поле1 КАК Поле1", ТекстСОтступом(СокрЛ(ПоляВыбора), " ")); + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ТекущаяТаблицаЭлементовДанных", ПолноеИмя); + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ПЕРВЫЕ 100", "ПЕРВЫЕ " + Формат( + МаксимальноеКоличествоКомбинацийЗначенийВедущихПолейПриВычисленииСоставаИзмененных(), "ЧГ=")); + +КонецПроцедуры + +// Основная функция, возвращающая параметры, необходимые для проверки прав в момент записи элементов данных. +Функция ПараметрыОграничения(ПолноеИмя, ИдентификаторТранзакции = Неопределено, ДляВнешнихПользователей = Неопределено) Экспорт + + УстановитьОтключениеБезопасногоРежима(Истина); + УстановитьПривилегированныйРежим(Истина); + + ДействующиеПараметрыОграниченияДоступа(ИдентификаторТранзакции); + Параметры = КэшПараметровОграничения().ОграниченияСписков.Получить(ПолноеИмя); + + Если Параметры = Неопределено Тогда + ЗаполнитьПараметрыОграничения(ПолноеИмя, ИдентификаторТранзакции); + + ДействующиеПараметрыОграниченияДоступа(ИдентификаторТранзакции); + Параметры = КэшПараметровОграничения().ОграниченияСписков.Получить(ПолноеИмя); + КонецЕсли; + + Если ДляВнешнихПользователей = Неопределено Тогда + ДляВнешнихПользователей = ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя(); + КонецЕсли; + + Если ДляВнешнихПользователей Тогда + Возврат Параметры.ДляВнешнихПользователей; + КонецЕсли; + + Возврат Параметры.ДляПользователей; + +КонецФункции + +// Для функций СвойстваСпискаКакВедущего, ПараметрыОграничения. +Процедура ЗаполнитьПараметрыОграничения(ПолноеИмя, ИдентификаторТранзакции, ДействующиеПараметрыОбновлены = Ложь, + ДобавляемыеОграниченияСписков = Неопределено, ОбщийКонтекст = Неопределено) + + Если ОбщийКонтекст = Неопределено Тогда + ОбщийКонтекст = ОбщийКонтекстРасчетаПараметровОграничения(); + ОбщийКонтекст.Вставить("ОписанияОграничений", Новый Соответствие); + КонецЕсли; + + ПараметрыОграниченияСписков = Новый Соответствие; + ДействующиеПараметры = ДействующиеПараметрыОграниченияДоступа(ИдентификаторТранзакции); + + Если ТипЗнч(ПолноеИмя) = Тип("Массив") Тогда + Для Каждого ТекущееПолноеИмя Из ПолноеИмя Цикл + ДобавитьПараметрыОграниченияСписка(ТекущееПолноеИмя, ПараметрыОграниченияСписков, + ДействующиеПараметры, ДействующиеПараметрыОбновлены, ИдентификаторТранзакции, ОбщийКонтекст); + + Если ДействующиеПараметрыОбновлены Тогда + ЗаполнитьПараметрыОграничения(ПолноеИмя, + ИдентификаторТранзакции, Ложь, ДобавляемыеОграниченияСписков, ОбщийКонтекст); + Возврат; + КонецЕсли; + КонецЦикла; + Иначе + ДобавитьПараметрыОграниченияСписка(ПолноеИмя, ПараметрыОграниченияСписков, + ДействующиеПараметры, ДействующиеПараметрыОбновлены, ИдентификаторТранзакции, ОбщийКонтекст); + + Если ДействующиеПараметрыОбновлены Тогда + ЗаполнитьПараметрыОграничения(ПолноеИмя, + ИдентификаторТранзакции, Ложь, ДобавляемыеОграниченияСписков, ОбщийКонтекст); + Возврат; + КонецЕсли; + КонецЕсли; + + Если ПараметрыОграниченияСписков.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Если ДобавляемыеОграниченияСписков <> Неопределено Тогда + ДобавляемыеОграниченияСписков = ПараметрыОграниченияСписков; + Возврат; + КонецЕсли; + + Кэш = КэшПараметровОграничения(); + + Для Каждого КлючИЗначение Из ПараметрыОграниченияСписков Цикл + Кэш.ОграниченияСписков.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + КонецЦикла; + +КонецПроцедуры + +// Для процедуры ЗаполнитьПараметрыОграничения и функций +// ХранимыеПараметрыОграниченияДоступа, ОшибкиОграниченийДоступа. +// +Функция ОбщийКонтекстРасчетаПараметровОграничения(ВсеВидыДоступаИспользуются = Ложь, ЗаполнитьСпискиСОграничением = Истина) + + ТипыПользователя = Новый Массив; + ТипыПользователя.Добавить(Тип("СправочникСсылка.Пользователи")); + ТипыПользователя.Добавить(Тип("СправочникСсылка.ГруппыПользователей")); + ТипыПользователя.Добавить(Тип("СправочникСсылка.ВнешниеПользователи")); + ТипыПользователя.Добавить(Тип("СправочникСсылка.ГруппыВнешнихПользователей")); + + ИспользуемыеТипыЗначений = Новый Соответствие; + + СвойстваВидовДоступа = УправлениеДоступомСлужебныйПовтИсп.СвойстваВидовДоступа(); + + Для Каждого СвойстваВидаДоступа Из СвойстваВидовДоступа.Массив Цикл + Если Не ВсеВидыДоступаИспользуются + И Не ВидДоступаИспользуется(СвойстваВидаДоступа.Ссылка) Тогда + Продолжить; + КонецЕсли; + ИспользуемыеТипыЗначений.Вставить(СвойстваВидаДоступа.ТипЗначений, Истина); + Для Каждого ОписаниеДополнительногоТипа Из СвойстваВидаДоступа.ДополнительныеТипы Цикл + ИспользуемыеТипыЗначений.Вставить(ОписаниеДополнительногоТипа.ТипЗначений, Истина); + КонецЦикла; + КонецЦикла; + + ВозможныеПрава = УправлениеДоступомСлужебныйПовтИсп.ВозможныеПраваДляНастройкиПравОбъектов(); + ВнешниеПользователиВключены = ВсеВидыДоступаИспользуются + Или Константы.ИспользоватьВнешнихПользователей.Получить(); + + ОбщийКонтекст = Новый Структура; + ОбщийКонтекст.Вставить("СвойстваВидовДоступа", СвойстваВидовДоступа); + ОбщийКонтекст.Вставить("ТипыПользователя", ТипыПользователя); + ОбщийКонтекст.Вставить("ИспользуемыеТипыЗначений", ИспользуемыеТипыЗначений); + ОбщийКонтекст.Вставить("ТипыВладельцевНастроекПрав", ВозможныеПрава.ПоТипамСсылок); + ОбщийКонтекст.Вставить("ОтдельныеТаблицыНастроекПрав", ВозможныеПрава.ОтдельныеТаблицы); + ОбщийКонтекст.Вставить("ВнешниеПользователиВключены", ВнешниеПользователиВключены); + + Если ЗаполнитьСпискиСОграничением Тогда + ОбщийКонтекст.Вставить("СпискиСОграничением", УправлениеДоступомСлужебныйПовтИсп.СпискиСОграничением()); + КонецЕсли; + + Возврат ОбщийКонтекст; + +КонецФункции + +// Для процедуры ЗаполнитьПараметрыОграничения. +Процедура ДобавитьПараметрыОграниченияСписка(ПолноеИмя, ПараметрыОграниченияСписков, ДействующиеПараметры, + ДействующиеПараметрыОбновлены, ИдентификаторТранзакции, ОбщийКонтекст) + + Если КэшПараметровОграничения().ОграниченияСписков.Получить(ПолноеИмя) <> Неопределено Тогда + Возврат; + КонецЕсли; + + ВерсияОграничений = ДействующиеПараметры.ВерсииОграниченийСписков.Получить(ПолноеИмя); + РассчитанныеПараметры = РассчитанныеПараметрыОграничения(ПолноеИмя, ОбщийКонтекст, ДействующиеПараметры); + + Если ВерсияОграничений <> РассчитанныеПараметры.Версия Тогда + ДействующиеПараметры = ДействующиеПараметрыОграниченияДоступа(ИдентификаторТранзакции, , Истина); + ДействующиеПараметрыОбновлены = Истина; + Возврат; + КонецЕсли; + + ПараметрыОграниченияСписков.Вставить(ПолноеИмя, + ОбщегоНазначения.ФиксированныеДанные(РассчитанныеПараметры)); + +КонецПроцедуры + +// Для процедуры ДобавитьПараметрыОграниченияСписка. +Функция РассчитанныеПараметрыОграничения(ПолноеИмя, ОбщийКонтекст, ДействующиеПараметры) + + ОписаниеОграничения = ОписаниеОграниченияДанных(ОбщийКонтекст, ПолноеИмя); + + // Для пользователей. + СтруктураОграниченияДляПользователей = РассчитаннаяСтруктураОграничения(ПолноеИмя, + ОписаниеОграничения.Текст, ОписаниеОграничения.ТекстВМодулеМенеджера, Ложь); + + ДополнительныйКонтекст = НовыйДополнительныйКонтекст(); + ЗаполнитьЗначенияСвойств(ДополнительныйКонтекст, ДействующиеПараметры.ДополнительныйКонтекст.ДляПользователей); + ДобавитьДополнительныйКонтекст(ПолноеИмя, ДополнительныйКонтекст, ОписаниеОграничения, Ложь); + + РезультатДляПользователей = ПараметрыОграниченияПоСтруктуреОграничения(ПолноеИмя, + СтруктураОграниченияДляПользователей, Ложь, ОбщийКонтекст, ДополнительныйКонтекст); + + // Для внешних пользователей. + СтруктураОграниченияДляВнешнихПользователей = РассчитаннаяСтруктураОграничения(ПолноеИмя, + ОписаниеОграничения.ТекстДляВнешнихПользователей, ОписаниеОграничения.ТекстВМодулеМенеджера, Истина); + + ДополнительныйКонтекст = НовыйДополнительныйКонтекст(); + ЗаполнитьЗначенияСвойств(ДополнительныйКонтекст, ДействующиеПараметры.ДополнительныйКонтекст.ДляВнешнихПользователей); + ДобавитьДополнительныйКонтекст(ПолноеИмя, ДополнительныйКонтекст, ОписаниеОграничения, Истина); + + РезультатДляВнешнихПользователей = ПараметрыОграниченияПоСтруктуреОграничения(ПолноеИмя, + СтруктураОграниченияДляВнешнихПользователей, Истина, ОбщийКонтекст, ДополнительныйКонтекст); + + // Заполнение параметров на основе параметров обоих видов пользователей. + Версия = ОбщаяВерсия(ОбщийКонтекст, ПолноеИмя, РезультатДляПользователей.Версия, РезультатДляВнешнихПользователей.Версия); + СЗаписьюДвухКлючей = Не БезЗаписиКлюча(РезультатДляПользователей) И Не БезЗаписиКлюча(РезультатДляВнешнихПользователей); + БезЗаписиКлючей = БезЗаписиКлюча(РезультатДляПользователей) И БезЗаписиКлюча(РезультатДляВнешнихПользователей); + РезультатДляПользователей.Вставить( "СЗаписьюКлючейДоступаДляПользователейИВнешнихПользователей", СЗаписьюДвухКлючей); + РезультатДляВнешнихПользователей.Вставить("СЗаписьюКлючейДоступаДляПользователейИВнешнихПользователей", СЗаписьюДвухКлючей); + РезультатДляПользователей.Вставить( "БезЗаписиКлючейДоступаДляПользователейИВнешнихПользователей", БезЗаписиКлючей); + РезультатДляВнешнихПользователей.Вставить("БезЗаписиКлючейДоступаДляПользователейИВнешнихПользователей", БезЗаписиКлючей); + + // Формирование текстов запросов. + ДобавитьТекстыЗапросовВПараметрыОграничения(РезультатДляПользователей); + ДобавитьТекстыЗапросовВПараметрыОграничения(РезультатДляВнешнихПользователей); + + ВедущиеСписки = Новый Структура; + ВедущиеСписки.Вставить("ДляПользователей", РезультатДляПользователей.ВедущиеСписки); + ВедущиеСписки.Вставить("ДляВнешнихПользователей", РезультатДляВнешнихПользователей.ВедущиеСписки); + + Параметры = Новый Структура; + Параметры.Вставить("Версия", Версия); + Параметры.Вставить("ВедущиеСписки", ВедущиеСписки); + Параметры.Вставить("ДляПользователей", РезультатДляПользователей); + Параметры.Вставить("ДляВнешнихПользователей", РезультатДляВнешнихПользователей); + + Возврат Параметры; + +КонецФункции + +// Для функции ОшибкиОграниченийДоступа. +Функция ОшибкаОграниченияДоступа(ОбщийКонтекст, ПолноеИмя) + + ТекстОшибкиДляПользователей = ""; + ТекстОшибкиДляВнешнихПользователей = ""; + + Попытка + ОписаниеОграничения = ОписаниеОграниченияДанных(ОбщийКонтекст, ПолноеИмя, Истина); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Возврат ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + КонецПопытки; + Если ТипЗнч(ОписаниеОграничения) = Тип("Строка") Тогда + Возврат ОписаниеОграничения; + КонецЕсли; + + // Для пользователей. + СтруктураОграниченияДляПользователей = РассчитаннаяСтруктураОграничения(ПолноеИмя, + ОписаниеОграничения.Текст, ОписаниеОграничения.ТекстВМодулеМенеджера, Ложь, Истина); + + Если СтруктураОграниченияДляПользователей <> Неопределено + И СтруктураОграниченияДляПользователей.ОписаниеОшибок.ЕстьОшибки Тогда + + ТекстОшибкиДляПользователей = ТекстОшибокДляВызоваИсключения(ПолноеИмя, + СтруктураОграниченияДляПользователей.ОписаниеОшибок, Ложь, ОписаниеОграничения.ТекстВМодулеМенеджера); + Иначе + ДополнительныйКонтекст = НовыйДополнительныйКонтекст(); + ДобавитьДополнительныйКонтекст(ПолноеИмя, ДополнительныйКонтекст, ОписаниеОграничения, Ложь); + + ОшибкаПриВызовеИсключения = Новый Структура("Текст", Неопределено); + ДополнительныйКонтекст.Вставить("ОшибкаПриВызовеИсключения", ОшибкаПриВызовеИсключения); + Попытка + РезультатДляПользователей = ПараметрыОграниченияПоСтруктуреОграничения(ПолноеИмя, + СтруктураОграниченияДляПользователей, Ложь, ОбщийКонтекст, ДополнительныйКонтекст); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Если ЗначениеЗаполнено(ОшибкаПриВызовеИсключения.Текст) Тогда + ТекстОшибкиДляПользователей = ОшибкаПриВызовеИсключения.Текст; + Иначе + ТекстОшибкиДляПользователей = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось сформировать параметры ограничения доступа для пользователей по причине: + |%1'"), ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + КонецЕсли; + КонецПопытки; + + Если Не ЗначениеЗаполнено(ТекстОшибкиДляПользователей) Тогда + РезультатДляПользователей.Вставить("БезЗаписиКлючейДоступаДляПользователейИВнешнихПользователей", Ложь); + РезультатДляПользователей.Контекст.СпискиСЗаписьюКлючейДоступа = Новый Соответствие; + Попытка + ДобавитьТекстыЗапросовВПараметрыОграничения(РезультатДляПользователей); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Если ЗначениеЗаполнено(ОшибкаПриВызовеИсключения.Текст) Тогда + ТекстОшибкиДляПользователей = ОшибкаПриВызовеИсключения.Текст; + Иначе + ТекстОшибкиДляПользователей = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось сформировать тексты запросов на основе параметров ограничения доступа + |для пользователей по причине: + |%1'"), ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + КонецЕсли; + КонецПопытки; + КонецЕсли; + КонецЕсли; + + // Для внешних пользователей. + СтруктураОграниченияДляВнешнихПользователей = РассчитаннаяСтруктураОграничения(ПолноеИмя, + ОписаниеОграничения.ТекстДляВнешнихПользователей, ОписаниеОграничения.ТекстВМодулеМенеджера, Истина, Истина); + + Если СтруктураОграниченияДляВнешнихПользователей <> Неопределено + И СтруктураОграниченияДляВнешнихПользователей.ОписаниеОшибок.ЕстьОшибки Тогда + + ТекстОшибкиДляВнешнихПользователей = ТекстОшибокДляВызоваИсключения(ПолноеИмя, + СтруктураОграниченияДляВнешнихПользователей.ОписаниеОшибок, Истина, ОписаниеОграничения.ТекстВМодулеМенеджера); + Иначе + ДополнительныйКонтекст = НовыйДополнительныйКонтекст(); + ДобавитьДополнительныйКонтекст(ПолноеИмя, ДополнительныйКонтекст, ОписаниеОграничения, Истина); + + ОшибкаПриВызовеИсключения = Новый Структура("Текст", Неопределено); + ДополнительныйКонтекст.Вставить("ОшибкаПриВызовеИсключения", ОшибкаПриВызовеИсключения); + Попытка + РезультатДляВнешнихПользователей = ПараметрыОграниченияПоСтруктуреОграничения(ПолноеИмя, + СтруктураОграниченияДляВнешнихПользователей, Истина, ОбщийКонтекст, ДополнительныйКонтекст); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Если ЗначениеЗаполнено(ОшибкаПриВызовеИсключения.Текст) Тогда + ТекстОшибкиДляВнешнихПользователей = ОшибкаПриВызовеИсключения.Текст; + Иначе + ТекстОшибкиДляВнешнихПользователей = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось сформировать параметры ограничения доступа для внешних пользователей по причине: + |%1'"), ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + КонецЕсли; + КонецПопытки; + + Если Не ЗначениеЗаполнено(ТекстОшибкиДляВнешнихПользователей) Тогда + РезультатДляВнешнихПользователей.Вставить("БезЗаписиКлючейДоступаДляПользователейИВнешнихПользователей", Ложь); + РезультатДляВнешнихПользователей.Контекст.СпискиСЗаписьюКлючейДоступа = Новый Соответствие; + Попытка + ДобавитьТекстыЗапросовВПараметрыОграничения(РезультатДляВнешнихПользователей); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Если ЗначениеЗаполнено(ОшибкаПриВызовеИсключения.Текст) Тогда + ТекстОшибкиДляВнешнихПользователей = ОшибкаПриВызовеИсключения.Текст; + Иначе + ТекстОшибкиДляВнешнихПользователей = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось сформировать тексты запросов на основе параметров ограничения доступа + |для внешних пользователей по причине: + |%1'"), ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + КонецЕсли; + КонецПопытки; + КонецЕсли; + КонецЕсли; + + Возврат СокрЛП(ТекстОшибкиДляПользователей + + Символы.ПС + Символы.ПС + ТекстОшибкиДляВнешнихПользователей); + +КонецФункции + +// Для функции РезультатПроверкиОграниченияДоступа. +Функция РезультатПроверкиОграниченияДоступаОбъекта(ПолноеИмя, Знач ДополнительныеПараметры) + + Если Не ЗначениеЗаполнено(ДополнительныеПараметры) Тогда + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("Текст", Неопределено); + ДополнительныеПараметры.Вставить("ТекстДляВнешнихПользователей", Неопределено); + ДополнительныеПараметры.Вставить("УчитыватьЗависимости", Ложь); + КонецЕсли; + + ДляПользователей = СтруктураРезультатаПроверкиОграниченияДляВидаПользователей(); + ДляВнешнихПользователей = СтруктураРезультатаПроверкиОграниченияДляВидаПользователей(); + + Результат = Новый Структура; + Результат.Вставить("ОшибкаОписанияОграничения", ""); + Результат.Вставить("ТекстВМодулеМенеджера", Неопределено); + Результат.Вставить("ДляПользователей", ДляПользователей); + Результат.Вставить("ДляВнешнихПользователей", ДляВнешнихПользователей); + Результат.Вставить("НастройкиВнедрения", Новый Структура); + + ОбщийКонтекст = Неопределено; + Попытка + ОбщийКонтекст = ОбщийКонтекстРасчетаПараметровОграничения(Истина, Ложь); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Результат.ОшибкаОписанияОграничения = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + КонецПопытки; + + Если ОбщийКонтекст = Неопределено Тогда + Возврат Результат; + КонецЕсли; + + УчетЗависимостейДоступен = Истина; + СпискиСОграничением = Неопределено; + Попытка + СпискиСОграничением = УправлениеДоступомСлужебныйПовтИсп.СпискиСОграничением(); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Результат.ОшибкаОписанияОграничения = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + УчетЗависимостейДоступен = Ложь; + КонецПопытки; + + Если СпискиСОграничением <> Неопределено Тогда + СпискиСОграничением = Новый Соответствие(СпискиСОграничением); + Иначе + СпискиСОграничением = Новый Соответствие; + УчетЗависимостейДоступен = Ложь; + КонецЕсли; + ОбщийКонтекст.Вставить("СпискиСОграничением", СпискиСОграничением); + + ОписаниеОграничения = Неопределено; + Попытка + ОписаниеОграничения = ОписаниеОграниченияДанных(ОбщийКонтекст, ПолноеИмя, Истина); + Исключение + Результат.ОшибкаОписанияОграничения = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + УчетЗависимостейДоступен = Ложь; + КонецПопытки; + Если ТипЗнч(ОписаниеОграничения) = Тип("Строка") Тогда + Результат.ОшибкаОписанияОграничения = ОписаниеОграничения; + ОписаниеОграничения = Неопределено; + КонецЕсли; + + Если ОписаниеОграничения <> Неопределено Тогда + Результат.ТекстВМодулеМенеджера = ОписаниеОграничения.ТекстВМодулеМенеджера; + ДляПользователей.ОграничениеВМодуле = ОписаниеОграничения.Текст; + ДляПользователей.ПоВладельцуБезЗаписиКлючейДоступа = ОписаниеОграничения.ПоВладельцуБезЗаписиКлючейДоступа; + ДляВнешнихПользователей.ОграничениеВМодуле = ОписаниеОграничения.ТекстДляВнешнихПользователей; + ДляВнешнихПользователей.ПоВладельцуБезЗаписиКлючейДоступа = + ОписаниеОграничения.ПоВладельцуБезЗаписиКлючейДоступаДляВнешнихПользователей; + + Если ДополнительныеПараметры.Текст = Неопределено Тогда + ДляПользователей.ПроверяемоеОграничение = ДляПользователей.ОграничениеВМодуле; + Иначе + ДляПользователей.ПроверяемоеОграничение = ДополнительныеПараметры.Текст; + ОписаниеОграничения.Текст = ДополнительныеПараметры.Текст; + КонецЕсли; + + Если ДополнительныеПараметры.ТекстДляВнешнихПользователей = Неопределено Тогда + ДляВнешнихПользователей.ПроверяемоеОграничение = ДляВнешнихПользователей.ОграничениеВМодуле; + Иначе + ДляВнешнихПользователей.ПроверяемоеОграничение = ДополнительныеПараметры.ТекстДляВнешнихПользователей; + ОписаниеОграничения.ТекстДляВнешнихПользователей = ДополнительныеПараметры.ТекстДляВнешнихПользователей; + КонецЕсли; + КонецЕсли; + + Если СпискиСОграничением.Получить(ПолноеИмя) = Неопределено Тогда + СпискиСОграничением.Вставить(ПолноеИмя, Истина); + Результат.ТекстВМодулеМенеджера = Неопределено; + КонецЕсли; + + Контекст = Новый Структура; + Контекст.Вставить("ПолноеИмя", ПолноеИмя); + Контекст.Вставить("ОбщийРезультат", Результат); + Контекст.Вставить("ОбщийКонтекст", ОбщийКонтекст); + Контекст.Вставить("ОписаниеОграничения", ОписаниеОграничения); + Контекст.Вставить("УчитыватьЗависимости", ДополнительныеПараметры.УчитыватьЗависимости); + Контекст.Вставить("УчетЗависимостейДоступен", УчетЗависимостейДоступен); + Контекст.Вставить("ВерсииОграниченийСписков", Новый Соответствие); + Контекст.Вставить("ДополнительныйКонтекст", Новый Структура("ДляПользователей, ДляВнешнихПользователей")); + + ПроверитьОграничениеДляВидаПользователей(Контекст, ДляПользователей, Ложь, + Контекст.ДополнительныйКонтекст.ДляПользователей); + + ПроверитьОграничениеДляВидаПользователей(Контекст, ДляВнешнихПользователей, Истина, + Контекст.ДополнительныйКонтекст.ДляВнешнихПользователей); + + Если Не Контекст.УчетЗависимостейДоступен Тогда + Возврат Результат; + КонецЕсли; + + Если ДополнительныеПараметры.УчитыватьЗависимости Тогда + ОбщийКонтекст.Вставить("СпециальноеПолноеИмя", ПолноеИмя); + ОбщийКонтекст.Вставить("СпециальноеОписаниеОграничения", ОписаниеОграничения); + ОбщийКонтекст.Вставить("СпискиСОграничением", Новый ФиксированноеСоответствие(СпискиСОграничением)); + НовыеХранимыеПараметры = ХранимыеПараметрыОграниченияДоступа(, ОбщийКонтекст); + ДействующиеПараметры = Новый Структура(НовыеХранимыеПараметры.ДляЗаписиОбъектовИПроверкиПрав.Получить()); + Если ДействующиеПараметры.ВерсииОграниченийСписков.Получить(ПолноеИмя) = Неопределено Тогда + Контекст.ВерсииОграниченийСписков.Вставить(ПолноеИмя, Истина); + Иначе + Контекст.ВерсииОграниченийСписков.Вставить(ПолноеИмя, + ДействующиеПараметры.ВерсииОграниченийСписков.Получить(ПолноеИмя)); + КонецЕсли; + Иначе + Контекст.ВерсииОграниченийСписков.Вставить(ПолноеИмя, Истина); + ДействующиеПараметры = Новый Структура; + ДействующиеПараметры.Вставить("ДополнительныйКонтекст", Контекст.ДополнительныйКонтекст); + КонецЕсли; + ДействующиеПараметры.Вставить("ВерсииОграниченийСписков", Контекст.ВерсииОграниченийСписков); + + Настройки = НастройкиВнедрения(ДействующиеПараметры); + + ТипыТаблицПоИменам = УправлениеДоступомСлужебныйПовтИсп.СинтаксисЯзыка().ТипыТаблиц.ПоИменам; + УстановитьНастройкиВнедрения(Результат.НастройкиВнедрения, Настройки, ТипыТаблицПоИменам); + + Результат.ДляПользователей.ОграничениеВРолях = Настройки.ОграниченияВРолях.ДляПользователей.Получить( + ПолноеИмяXML(ПолноеИмя, ТипыТаблицПоИменам)); + + Результат.ДляВнешнихПользователей.ОграничениеВРолях = Настройки.ОграниченияВРолях.ДляВнешнихПользователей.Получить( + ПолноеИмяXML(ПолноеИмя, ТипыТаблицПоИменам)); + + Возврат Результат; + +КонецФункции + +// Для функции РезультатПроверкиОграниченияДоступаОбъекта. +Процедура УстановитьНастройкиВнедрения(НастройкиВнедрения, Данные, ТипыТаблицПоИменам) + + ДобавитьТипыТребуемыеВОпределяемомТипе(НастройкиВнедрения, ТипыТаблицПоИменам, Истина, + Данные.ЗначенияДоступа, "ЗначениеДоступа"); + + ДобавитьТипыТребуемыеВОпределяемомТипе(НастройкиВнедрения, ТипыТаблицПоИменам, Истина, + Данные.ВладельцыЗначенийКлючейДоступа.Ссылки, "ВладелецЗначенийКлючейДоступа"); + + ДобавитьТипыТребуемыеВОпределяемомТипе(НастройкиВнедрения, ТипыТаблицПоИменам, Ложь, + Данные.ВладельцыЗначенийКлючейДоступа.Объекты, "ВладелецЗначенийКлючейДоступаОбъект"); + + ДобавитьТипыТребуемыеВОпределяемомТипе(НастройкиВнедрения, ТипыТаблицПоИменам, Ложь, + Данные.ВладельцыЗначенийКлючейДоступа.Документы, "ВладелецЗначенийКлючейДоступаДокумент"); + + ДобавитьТипыТребуемыеВОпределяемомТипе(НастройкиВнедрения, ТипыТаблицПоИменам, Ложь, + Данные.ВладельцыЗначенийКлючейДоступа.НаборыЗаписей, "ВладелецЗначенийКлючейДоступаНаборЗаписей"); + + ДобавитьТипыТребуемыеВОпределяемомТипе(НастройкиВнедрения, ТипыТаблицПоИменам, Ложь, + Данные.ВладельцыЗначенийКлючейДоступа.НаборыЗаписейРегистраРасчета, + "ВладелецЗначенийКлючейДоступаНаборЗаписейРегистраРасчета"); + + ДобавитьТипыТребуемыеВОпределяемомТипе(НастройкиВнедрения, ТипыТаблицПоИменам, Ложь, + Данные.ВладельцыЗначенийКлючейДоступа.НаборыЗаписейРегистраРасчета, + "ВладелецЗначенийКлючейДоступаНаборЗаписейРегистраРасчета"); + + НастройкиВнедрения.Вставить("ПолеРегистраКлючейДоступаКРегистрам", ""); + НастройкиВнедрения.Вставить("ТипыИзмеренийОтдельногоРегистраКлючей", Неопределено); + Для Каждого КлючИЗначение Из Данные.ТипыИзмеренийРегистровКлючей Цикл + ИмяРегистраКлючей = СтрРазделить(КлючИЗначение.Ключ, ".", Ложь)[1]; + + Если ИмяРегистраКлючей = "КлючиДоступаКРегистрам" Тогда + ДобавитьТипыТребуемыеВОпределяемомТипе(НастройкиВнедрения, ТипыТаблицПоИменам, Истина, + КлючИЗначение.Значение, "ПолеРегистраКлючейДоступаКРегистрам"); + Иначе + ИзмеренияРегистра = Метаданные.РегистрыСведений[ИмяРегистраКлючей].Измерения; + СписокТипов = ""; + НомерПоля = 1; + Для Каждого ОписаниеПоля Из КлючИЗначение.Значение Цикл + ПолеРегистра = ИзмеренияРегистра.Найти("Поле" + НомерПоля); + ОписаниеТипов = ?(ПолеРегистра = Неопределено, Новый ОписаниеТипов, ПолеРегистра.Тип); + СписокТипов = СписокТипов + ?(СписокТипов = "", "", Символы.ПС) + + НСтр("ru = '- для измерения'") + " " + "Поле" + НомерПоля + ":" + Символы.ПС + + " " + ТекстСОтступом(СписокТиповИзМассива(ОписаниеПоля.Тип.Типы(), + Истина, ТипыТаблицПоИменам, ОписаниеТипов), " "); + НомерПоля = НомерПоля + 1; + КонецЦикла; + НастройкиВнедрения.Вставить("ТипыИзмеренийОтдельногоРегистраКлючей", + Новый Структура("ИмяРегистраСведений, ТипыИзмерений", ИмяРегистраКлючей, СписокТипов)); + КонецЕсли; + КонецЦикла; + + НастройкиВнедрения.Вставить("ПредопределенныйИдентификатор", Неопределено); + Для Каждого КлючИЗначение Из Данные.ПредопределенныеИдентификаторы Цикл + ЧастиИмени = СтрРазделить(КлючИЗначение.Ключ, ".", Ложь); + УжеДобавлен = Метаданные.Справочники[ЧастиИмени[0]].ПолучитьИменаПредопределенных().Найти(ЧастиИмени[1]) <> Неопределено; + НастройкиВнедрения.Вставить("ПредопределенныйИдентификатор", + Новый Структура("ИмяСправочника, ИмяПредопределенного", ЧастиИмени[0], + "- " + ЧастиИмени[1] + ?(УжеДобавлен, " (" + НСтр("ru = 'уже добавлен'") + ")", ""))); + Прервать; + КонецЦикла; + +КонецПроцедуры + +// Для процедуры УстановитьНастройкиВнедрения. +Процедура ДобавитьТипыТребуемыеВОпределяемомТипе(НастройкиВнедрения, ТипыТаблицПоИменам, ТипыСсылок, ИменаТипов, ИмяОпределяемогоТипа) + + НастройкиВнедрения.Вставить(ИмяОпределяемогоТипа, ""); + Если ИменаТипов.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + НастройкиВнедрения[ИмяОпределяемогоТипа] = СписокТиповИзМассива(ИменаТипов, + ТипыСсылок, ТипыТаблицПоИменам, Метаданные.ОпределяемыеТипы[ИмяОпределяемогоТипа].Тип); + +КонецПроцедуры + +// Для процедур УстановитьНастройкиВнедрения, ДобавитьТипыТребуемыеВОпределяемомТипе. +Функция СписокТиповИзМассива(ИменаТипов, ТипыСсылок, ТипыТаблицПоИменам, ОписаниеТипов) + + СписокТипов = ""; + Для Каждого ИмяТипа Из ИменаТипов Цикл + Если ТипЗнч(ИмяТипа) = Тип("Тип") Тогда + Тип = ИмяТипа; + Иначе + Тип = Тип(ИмяТипа); + КонецЕсли; + ОбъектМетаданных = Метаданные.НайтиПоТипу(Тип); + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + + СписокТипов = СписокТипов + ?(СписокТипов = "", "", Символы.ПС) + + "- " + ?(ТипыСсылок, ИмяТипаСсылки(ПолноеИмя, ТипыТаблицПоИменам), + ИмяТипаОбъектаИлиНабораЗаписей(ПолноеИмя, ТипыТаблицПоИменам)); + + Если ОписаниеТипов.СодержитТип(Тип) Тогда + СписокТипов = СписокТипов + " (" + НСтр("ru = 'уже добавлен'") + ")"; + КонецЕсли; + КонецЦикла; + + Возврат СписокТипов; + +КонецФункции + +// Для функции РезультатПроверкиОграниченияДоступаОбъекта. +Функция СтруктураРезультатаПроверкиОграниченияДляВидаПользователей() + + Свойства = Новый Структура; + Свойства.Вставить("ПроверяемоеОграничение"); + Свойства.Вставить("ОписаниеОшибок"); + Свойства.Вставить("ОшибкаФормированияПараметровОграничения"); + Свойства.Вставить("ОшибкаФормированияТекстовЗапросов"); + Свойства.Вставить("ОграничениеПоВладельцуВозможно"); + Свойства.Вставить("ОграничениеВРолях"); + Свойства.Вставить("ОграничениеВМодуле"); + Свойства.Вставить("ПоВладельцуБезЗаписиКлючейДоступа"); + + Возврат Свойства; + +КонецФункции + +// Для функции РезультатПроверкиОграниченияДоступаОбъекта. +Процедура ПроверитьОграничениеДляВидаПользователей(Контекст, Результат, ДляВнешнихПользователей, ДополнительныйКонтекст) + + ТекстОграничения = ?(ДляВнешнихПользователей, Контекст.ОбщийРезультат.ДляВнешнихПользователей, + Контекст.ОбщийРезультат.ДляПользователей).ПроверяемоеОграничение; + + СтруктураОграничения = РассчитаннаяСтруктураОграничения(Контекст.ПолноеИмя, + ТекстОграничения, Контекст.ОбщийРезультат.ТекстВМодулеМенеджера, ДляВнешнихПользователей, Истина); + + Если СтруктураОграничения <> Неопределено + И СтруктураОграничения.ОписаниеОшибок.ЕстьОшибки Тогда + + Результат.ОписаниеОшибок = СтруктураОграничения.ОписаниеОшибок; + Контекст.УчетЗависимостейДоступен = Ложь; + Возврат; + КонецЕсли; + + ДополнительныйКонтекст = НовыйДополнительныйКонтекст(); + ДобавитьДополнительныйКонтекст(Контекст.ПолноеИмя, + ДополнительныйКонтекст, Контекст.ОписаниеОграничения, ДляВнешнихПользователей); + + ОшибкаПриВызовеИсключения = Новый Структура("Текст", Неопределено); + ДополнительныйКонтекст.Вставить("ОшибкаПриВызовеИсключения", ОшибкаПриВызовеИсключения); + + Попытка + ПараметрыОграничения = ПараметрыОграниченияПоСтруктуреОграничения(Контекст.ПолноеИмя, + СтруктураОграничения, ДляВнешнихПользователей, Контекст.ОбщийКонтекст, ДополнительныйКонтекст); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ПараметрыОграничения = Неопределено; + Если ЗначениеЗаполнено(ОшибкаПриВызовеИсключения.Текст) Тогда + Результат.ОшибкаФормированияПараметровОграничения = ОшибкаПриВызовеИсключения.Текст; + Иначе + Результат.ОшибкаФормированияПараметровОграничения = + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось сформировать параметры ограничения доступа по причине: + |%1'"), ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + КонецЕсли; + Контекст.УчетЗависимостейДоступен = Ложь; + КонецПопытки; + + Если ПараметрыОграничения <> Неопределено Тогда + Результат.ОграничениеПоВладельцуВозможно = ПараметрыОграничения.ПолеВладельца <> Неопределено; + ПараметрыОграничения.Вставить("БезЗаписиКлючейДоступаДляПользователейИВнешнихПользователей", Ложь); + ПараметрыОграничения.Контекст.СпискиСЗаписьюКлючейДоступа = Новый Соответствие; + Для Каждого КлючИЗначение Из ПараметрыОграничения.ВедущиеСписки.ПоЗначениямПолей Цикл + Контекст.ВерсииОграниченийСписков.Вставить(КлючИЗначение.Ключ, Неопределено); + КонецЦикла; + Для Каждого КлючИЗначение Из ПараметрыОграничения.ВедущиеСписки.ПоКлючамДоступа Цикл + Контекст.ВерсииОграниченийСписков.Вставить(КлючИЗначение.Ключ, Неопределено); + КонецЦикла; + Попытка + ДобавитьТекстыЗапросовВПараметрыОграничения(ПараметрыОграничения); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Если ЗначениеЗаполнено(ОшибкаПриВызовеИсключения.Текст) Тогда + Результат.ОшибкаФормированияТекстовЗапросов = ОшибкаПриВызовеИсключения.Текст; + Иначе + Результат.ОшибкаФормированияТекстовЗапросов = + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось сформировать тексты запросов на основе параметров ограничения доступа по причине: + |%1'"), ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + КонецЕсли; + Контекст.УчетЗависимостейДоступен = Ложь; + КонецПопытки; + КонецЕсли; + + Если Контекст.УчитыватьЗависимости Тогда + Возврат; + КонецЕсли; + + СокращенныеСвойства = Новый Структура; + СокращенныеСвойства.Вставить("ДоступЗапрещен", Ложь); + СокращенныеСвойства.Вставить("ПолеВладельца", Неопределено); + СокращенныеСвойства.Вставить("ОпорныеПоля", Неопределено); + СокращенныеСвойства.Вставить("ИмяОтдельногоРегистраКлючей", Неопределено); + ДополнительныйКонтекст.СвойстваОграниченияСписков.Вставить(Контекст.ПолноеИмя, СокращенныеСвойства); + + Если Не Контекст.УчетЗависимостейДоступен Тогда + Возврат; + КонецЕсли; + + ЗаполнитьЗначенияСвойств(СокращенныеСвойства, ПараметрыОграничения); + +КонецПроцедуры + +// Для функций ХранимыеПараметрыОграниченияДоступа, РассчитанныеПараметрыОграничения. +Функция ОбщаяВерсия(ОбщийКонтекст, ПолноеИмя, ВерсияДляПользователей, ВерсияДляВнешнихПользователей) + + Если ОбщийКонтекст.СпискиСОграничением.Получить(ПолноеИмя) = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Возврат Строка(ВерсияДляПользователей) + Символы.ПС + Строка(ВерсияДляВнешнихПользователей); + +КонецФункции + +// Для функции РассчитанныеПараметрыОграничения. +Функция БезЗаписиКлюча(Результат) + + Возврат + (Результат.ОграничениеОтключено Или Результат.ДоступЗапрещен) + И Результат.Контекст.СпискиСЗаписьюКлючейДоступа.Получить(Результат.Список) = Неопределено; + +КонецФункции + +// Для функций РассчитанныеПараметрыОграничения, ХранимыеПараметрыОграниченияДоступа. +Функция ОписаниеОграниченияДанных(ОбщийКонтекст, ПолноеИмя, БезВызоваИсключения = Ложь) + + Ограничение = Новый Структура; + Ограничение.Вставить("Текст", ""); + Ограничение.Вставить("ТекстДляВнешнихПользователей", ""); + Ограничение.Вставить("ПоВладельцуБезЗаписиКлючейДоступа", Неопределено); + Ограничение.Вставить("ПоВладельцуБезЗаписиКлючейДоступаДляВнешнихПользователей", Неопределено); + Ограничение.Вставить("ТекстВМодулеМенеджера", Ложь); + + ТекстВМодулеМенеджера = ОбщийКонтекст.СпискиСОграничением.Получить(ПолноеИмя); + Если ТекстВМодулеМенеджера = Неопределено Тогда + Возврат Ограничение; + КонецЕсли; + + Ограничение.ТекстВМодулеМенеджера = ТекстВМодулеМенеджера; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебный"); + ЭтоСправочникФайлов = МодульРаботаСФайламиСлужебный.ЭтоСправочникФайловИлиВерсийФайлов(ПолноеИмя); + Иначе + ЭтоСправочникФайлов = Ложь; + КонецЕсли; + + Если ЭтоЖурналДокументов(ПолноеИмя) Или ЭтоСправочникФайлов Тогда + // Для журналов документов ограничение должно быть + // по документу-владельцу без записи ключей доступа, если не требуется другое. + // Аналогично (по умолчанию) для справочников файлов и версий файлов. + Ограничение.ПоВладельцуБезЗаписиКлючейДоступа = Истина; + Ограничение.ПоВладельцуБезЗаписиКлючейДоступаДляВнешнихПользователей = Истина; + КонецЕсли; + + Если ТекстВМодулеМенеджера Тогда + Менеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя); + + Попытка + Менеджер.ПриЗаполненииОграниченияДоступа(Ограничение); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '""%1"" указан, как список с ограничением доступа в процедуре + |ПриЗаполненииСписковСОграничениемДоступа общего модуля УправлениеДоступомПереопределяемый. + | + |Некорректно указано ограничение доступа этого списка в модуле менеджера + |в процедуре ПриЗаполненииОграниченияДоступа по причине: + | + |%2'"), + ПолноеИмя, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + + Если БезВызоваИсключения Тогда + Возврат ТекстОшибки; + КонецЕсли; + ВызватьИсключение ТекстОшибки; + КонецПопытки; + Иначе + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмя); + Попытка + УправлениеДоступомПереопределяемый.ПриЗаполненииОграниченияДоступа(ОбъектМетаданных, Ограничение); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '""%1"" указан, как список с ограничением доступа в процедуре + |ПриЗаполненииСписковСОграничениемДоступа общего модуля УправлениеДоступомПереопределяемый. + | + |Некорректно указано ограничение доступа этого списка в общем модуле УправлениеДоступомПереопределяемый + |в процедуре ПриЗаполненииОграниченияДоступа по причине: + | + |%2'"), + ПолноеИмя, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + + Если БезВызоваИсключения Тогда + Возврат ТекстОшибки; + КонецЕсли; + ВызватьИсключение ТекстОшибки; + КонецПопытки; + КонецЕсли; + + Если ЭтоЖурналДокументов(ПолноеИмя) + И ( Ограничение.ПоВладельцуБезЗаписиКлючейДоступа <> Истина + Или Ограничение.ПоВладельцуБезЗаписиКлючейДоступаДляВнешнихПользователей <> Истина) Тогда + + Если ТекстВМодулеМенеджера Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '""%1"" указан, как список с ограничением доступа в процедуре + |ПриЗаполненииСписковСОграничениемДоступа общего модуля УправлениеДоступомПереопределяемый. + | + |Некорректно указано ограничение доступа этого списка в модуле менеджера + |в процедуре ПриЗаполненииОграниченияДоступа по причине: + | + |Для журналов документов не поддерживается ограничение, как для регистров, + |то есть, кроме варианта ограничения по владельцу без записи ключей доступа: + | + |РазрешитьЧтениеИзменение + |ГДЕ + | ЧтениеОбъектаРазрешено(Ссылка)'"), + ПолноеИмя); + Иначе + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '""%1"" указан, как список с ограничением доступа в процедуре + |ПриЗаполненииСписковСОграничениемДоступа общего модуля УправлениеДоступомПереопределяемый. + | + |Некорректно указано ограничение доступа этого списка в общем модуле УправлениеДоступомПереопределяемый + |в процедуре ПриЗаполненииОграниченияДоступа по причине: + | + |Для журналов документов не поддерживается ограничение, как для регистров, + |то есть, кроме варианта ограничения по владельцу без записи ключей доступа: + | + |РазрешитьЧтениеИзменение + |ГДЕ + | ЧтениеОбъектаРазрешено(Ссылка)'"), + ПолноеИмя); + КонецЕсли; + Если БезВызоваИсключения Тогда + Возврат ТекстОшибки; + КонецЕсли; + ВызватьИсключение ТекстОшибки; + КонецЕсли; + + Если Не ОбщийКонтекст.ВнешниеПользователиВключены Тогда + Ограничение.ТекстДляВнешнихПользователей = ""; + Ограничение.ПоВладельцуБезЗаписиКлючейДоступаДляВнешнихПользователей = Ложь; + КонецЕсли; + + Возврат Ограничение; + +КонецФункции + +// Для функции ОписаниеОграниченияДанных. +Функция ЭтоЖурналДокументов(ПолноеИмя) + + Возврат СтрНачинаетсяС(ВРег(ПолноеИмя), ВРег("ЖурналДокументов.")) + Или СтрНачинаетсяС(ВРег(ПолноеИмя), ВРег("DocumentJournal.")); + +КонецФункции + +// Для функций РассчитанныеПараметрыОграничения и ПараметрыОграниченияДляВидаПользователей. +Функция РассчитаннаяСтруктураОграничения(ПолноеИмя, ТекстОграничения, ТекстВМодулеМенеджера, ДляВнешнихПользователей, БезИсключения = Ложь) + + Если Не ЗначениеЗаполнено(ТекстОграничения) Тогда + Возврат Неопределено; + КонецЕсли; + + РазобранноеОграничение = РазобранноеОграничение(ПолноеИмя, ТекстОграничения); + + ПроверитьТаблицыПоляИТипыПолей(РазобранноеОграничение); + + СтруктураОграничения = СтруктураОграничения(РазобранноеОграничение); + + Если БезИсключения Или Не СтруктураОграничения.ОписаниеОшибок.ЕстьОшибки Тогда + Возврат СтруктураОграничения; + КонецЕсли; + + ТекстОшибок = ТекстОшибокДляВызоваИсключения(ПолноеИмя, + СтруктураОграничения.ОписаниеОшибок, ДляВнешнихПользователей, ТекстВМодулеМенеджера); + + ВызватьИсключение ТекстОшибок; + +КонецФункции + +// Для функций СвойстваСпискаКакВедущего, ПараметрыОграничения и процедур УстановкаПараметровСеанса, +// ЗаполнитьПараметрыОграничения, ДобавитьПараметрыОграниченияСписка. +// +Функция ДействующиеПараметрыОграниченияДоступа(ИдентификаторТранзакции, + УстановкаПараметровСеансаДляШаблонов = Ложь, Обновить = Ложь, ЕстьИзменения = Ложь) Экспорт + + Если Обновить Тогда + ВерсияПараметров = НоваяВерсияПараметровОграниченияДоступа(ЕстьИзменения); + УстановитьВерсиюПараметров(ВерсияПараметров, ИдентификаторТранзакции); + Возврат ПараметрыСеанса.ПараметрыОграниченияДоступа.Параметры; + КонецЕсли; + + ТекущиеПараметры = ПараметрыСеанса.ПараметрыОграниченияДоступа; + + Если Не ЗначениеЗаполнено(ТекущиеПараметры) Или ТекущиеПараметры.Параметры = Неопределено Тогда + ТекущиеПараметры = Новый Структура("Версия, ХешСумма", "", ""); + ИдентификаторыТранзакции = Новый Соответствие; + Иначе + ИдентификаторыТранзакции = КэшПараметровОграничения().ИдентификаторыТранзакции; + КонецЕсли; + + Если ТранзакцияАктивна() Тогда + Если ИдентификаторыТранзакции.Получить(ИдентификаторТранзакции) <> Неопределено Тогда + Возврат ТекущиеПараметры.Параметры; + КонецЕсли; + + ОписаниеВерсии = Новый Структура("Версия, ХешСумма", "", ""); + Если ЗначениеЗаполнено(ТекущиеПараметры.Версия) Тогда + ОписаниеВерсии.Версия = ТекущиеПараметры.Версия; + ОписаниеВерсии.ХешСумма = ТекущиеПараметры.ХешСумма; + КонецЕсли; + + Пока Истина Цикл + Если Не ЗначениеЗаполнено(ОписаниеВерсии.Версия) Тогда + ОписаниеВерсии = ОписаниеПоследнейВерсии(); + КонецЕсли; + Если Не ЗначениеЗаполнено(ОписаниеВерсии.Версия) Тогда + Прервать; + КонецЕсли; + БлокировкаДанных = Новый БлокировкаДанных; + ЭлементБлокировки = БлокировкаДанных.Добавить("РегистрСведений.ПараметрыОграниченияДоступа"); + ЭлементБлокировки.УстановитьЗначение("Версия", ОписаниеВерсии.Версия); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; + БлокировкаДанных.Заблокировать(); + НовоеОписаниеВерсии = ОписаниеПоследнейВерсии(); + Если Не ЗначениеЗаполнено(НовоеОписаниеВерсии.Версия) Тогда + ОписаниеВерсии = НовоеОписаниеВерсии; + Прервать; + КонецЕсли; + Если ОписаниеВерсии.Версия = НовоеОписаниеВерсии.Версия + И ОписаниеВерсии.ХешСумма = НовоеОписаниеВерсии.ХешСумма Тогда + Прервать; + КонецЕсли; + ОписаниеВерсии = НовоеОписаниеВерсии; + КонецЦикла; + Иначе + ОписаниеВерсии = ОписаниеПоследнейВерсии(); + КонецЕсли; + + Если Не УстановкаПараметровСеансаДляШаблонов + И ТекущиеПараметры.Версия = ОписаниеВерсии.Версия + И ТекущиеПараметры.ХешСумма = ОписаниеВерсии.ХешСумма Тогда + + ОбновитьИдентификаторыТранзакции(ИдентификаторТранзакции); + Возврат ТекущиеПараметры.Параметры; + КонецЕсли; + + // Параметры в базе данных отличаются от параметров в памяти. + Если ЗначениеЗаполнено(ОписаниеВерсии.Версия) Тогда + ВерсияПараметров = ВерсияПараметров(ОписаниеВерсии.Версия, УстановкаПараметровСеансаДляШаблонов); + Иначе + ВерсияПараметров = НоваяВерсияПараметровОграниченияДоступа(); + КонецЕсли; + + УстановитьВерсиюПараметров(ВерсияПараметров, ИдентификаторТранзакции); + + Возврат ПараметрыСеанса.ПараметрыОграниченияДоступа.Параметры; + +КонецФункции + +// Для функций ДействующиеПараметрыОграниченияДоступа, НоваяВерсияПараметровОграниченияДоступа. +Функция ОписаниеПоследнейВерсии() + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ПараметрыОграниченияДоступа.Версия КАК Версия, + | ПараметрыОграниченияДоступа.ХешСумма КАК ХешСумма, + | ПараметрыОграниченияДоступа.ДатаСоздания КАК ДатаСоздания + |ИЗ + | РегистрСведений.ПараметрыОграниченияДоступа КАК ПараметрыОграниченияДоступа + | + |УПОРЯДОЧИТЬ ПО + | ПараметрыОграниченияДоступа.Версия УБЫВ"; + + Выборка = Запрос.Выполнить().Выбрать(); + Выборка.Следующий(); + + Возврат Выборка; + +КонецФункции + +// Для функции ДействующиеПараметрыОграниченияДоступа. +Функция ВерсияПараметров(Версия, УстановкаПараметровСеансаДляШаблонов) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ПараметрыОграниченияДоступа.Версия КАК Версия, + | ПараметрыОграниченияДоступа.ХешСумма КАК ХешСумма, + | ПараметрыОграниченияДоступа.ДатаСоздания КАК ДатаСоздания, + | ПараметрыОграниченияДоступа.ДляШаблоновВСеансахПользователей КАК ДляШаблоновВСеансахПользователей, + | ПараметрыОграниченияДоступа.ДляШаблоновВСеансахВнешнихПользователей КАК ДляШаблоновВСеансахВнешнихПользователей, + | ПараметрыОграниченияДоступа.ДляЗаписиОбъектовИПроверкиПрав КАК ДляЗаписиОбъектовИПроверкиПрав + |ИЗ + | РегистрСведений.ПараметрыОграниченияДоступа КАК ПараметрыОграниченияДоступа + |ГДЕ + | ПараметрыОграниченияДоступа.Версия = &Версия"; + + Если УстановкаПараметровСеансаДляШаблонов Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, + "ПараметрыОграниченияДоступа.ДляЗаписиОбъектовИПроверкиПрав", "Неопределено"); + + Запрос.Текст = СтрЗаменить(Запрос.Текст, ?(ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя(), + "ПараметрыОграниченияДоступа.ДляШаблоновВСеансахПользователей", + "ПараметрыОграниченияДоступа.ДляШаблоновВСеансахВнешнихПользователей"), "Неопределено"); + КонецЕсли; + + Запрос.УстановитьПараметр("Версия", Версия); + + Выборка = Запрос.Выполнить().Выбрать(); + Выборка.Следующий(); + + Возврат Выборка; + +КонецФункции + +// Для функции ДействующиеПараметрыОграниченияДоступа. +Функция НоваяВерсияПараметровОграниченияДоступа(ЕстьИзменения = Ложь) + + ВерсииОграниченийСписков = Новый Соответствие; + ХранимыеПараметры = ХранимыеПараметрыОграниченияДоступа(ВерсииОграниченийСписков); + + НаборЗаписей = СлужебныйНаборЗаписей(РегистрыСведений.ПараметрыОграниченияДоступа); + Запись = НаборЗаписей.Добавить(); + ЗаполнитьЗначенияСвойств(Запись, ХранимыеПараметры); + + БлокировкаДанных = Новый БлокировкаДанных; + ЭлементБлокировки = БлокировкаДанных.Добавить("РегистрСведений.ПараметрыОграниченияДоступа"); + ЗаблокированнаяВерсия = 0; + + НачатьТранзакцию(); + Попытка + ОписаниеВерсии = ОписаниеПоследнейВерсии(); + Пока Истина Цикл + Если ОписаниеВерсии.ХешСумма = ХранимыеПараметры.ХешСумма Тогда + Если ОписаниеВерсии.Версия = ЗаблокированнаяВерсия Тогда + Прервать; + КонецЕсли; + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; + ЭлементБлокировки.УстановитьЗначение("Версия", ОписаниеВерсии.Версия); + БлокировкаДанных.Заблокировать(); + ЗаблокированнаяВерсия = ОписаниеВерсии.Версия; + ОписаниеВерсии = ОписаниеПоследнейВерсии(); + Продолжить; + КонецЕсли; + Если ЗначениеЗаполнено(ОписаниеВерсии.Версия) Тогда + НоваяВерсия = ОписаниеВерсии.Версия + 1; + Иначе + НоваяВерсия = 1; + КонецЕсли; + ЭлементБлокировки.УстановитьЗначение("Версия", НоваяВерсия); + БлокировкаДанных.Заблокировать(); + НовоеОписаниеВерсии = ОписаниеПоследнейВерсии(); + + Если ОписаниеВерсии.Версия <> НовоеОписаниеВерсии.Версия + Или НовоеОписаниеВерсии.Версия = НоваяВерсия Тогда + + ОписаниеВерсии = НовоеОписаниеВерсии; + Продолжить; + КонецЕсли; + + ХранимыеПараметры.Вставить("Версия", НоваяВерсия); + + Запись.Версия = НоваяВерсия; + НаборЗаписей.Отбор.Версия.Установить(НоваяВерсия); + + Если КонфигурацияБазыДанныхИзмененаДинамически() + Или Справочники.ВерсииРасширений.РасширенияИзмененыДинамически() Тогда + + СтандартныеПодсистемыСервер.ПотребоватьПерезапускСеансаПоПричинеДинамическогоОбновленияВерсииПрограммы(); + КонецЕсли; + Списки = СпискиСИзменениемВерсий(ВерсииОграниченийСписков); + ПараметрыПланирования = ПараметрыПланированияОбновленияДоступа(); + ПараметрыПланирования.ВерсииОграниченийСписков = ВерсииОграниченийСписков; + ЗапланироватьОбновлениеДоступа(Списки, ПараметрыПланирования); + + НаборЗаписей.Записать(); + ЕстьИзменения = Истина; + Прервать; + КонецЦикла; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Если Не ХранимыеПараметры.Свойство("Версия") Тогда + ХранимыеПараметры.Вставить("Версия", ОписаниеВерсии.Версия); + ХранимыеПараметры.Вставить("ДатаСоздания", ОписаниеВерсии.ДатаСоздания); + КонецЕсли; + + Если ЕстьИзменения <> Истина И Не ТранзакцияАктивна() Тогда + ИмяПараметра = "СтандартныеПодсистемы.УправлениеДоступом.ДатаПроверкиПараметровОграниченияДоступа"; + СтандартныеПодсистемыСервер.УстановитьПараметрРаботыРасширения(ИмяПараметра, ТекущаяДатаСеанса(), Истина); + УстановитьОбновлениеДоступа(Истина); + КонецЕсли; + + Возврат ХранимыеПараметры; + +КонецФункции + +// Для функции НоваяВерсияПараметровОграниченияДоступа. +Функция СпискиСИзменениемВерсий(НовыеВерсииОграниченийСписков) + + ОписаниеВерсии = ОписаниеПоследнейВерсии(); + Если Не ЗначениеЗаполнено(ОписаниеВерсии.Версия) Тогда + Возврат Неопределено; + КонецЕсли; + + ВерсияПараметров = ВерсияПараметров(ОписаниеВерсии.Версия, Ложь); + ПараметрыЗаписиХранилище = ВерсияПараметров.ДляЗаписиОбъектовИПроверкиПрав; + + Если ТипЗнч(ПараметрыЗаписиХранилище) <> Тип("ХранилищеЗначения") Тогда + Возврат Неопределено; + КонецЕсли; + ПараметрыЗаписи = ПараметрыЗаписиХранилище.Получить(); + + Если ТипЗнч(ПараметрыЗаписи) <> Тип("ФиксированнаяСтруктура") + Или Не ПараметрыЗаписи.Свойство("ВерсииОграниченийСписков") + Или ТипЗнч(ПараметрыЗаписи.ВерсииОграниченийСписков) <> Тип("ФиксированноеСоответствие") Тогда + Возврат Неопределено; + КонецЕсли; + + Таблица = Новый ТаблицаЗначений; + Таблица.Колонки.Добавить("Список", Новый ОписаниеТипов("Строка")); + Таблица.Колонки.Добавить("Версия", Новый ОписаниеТипов("Строка")); + Таблица.Колонки.Добавить("ВидИзменения", Новый ОписаниеТипов("Число")); + + Для Каждого КлючИЗначение Из ПараметрыЗаписи.ВерсииОграниченийСписков Цикл + Строка = Таблица.Добавить(); + Строка.Список = КлючИЗначение.Ключ; + Строка.Версия = КлючИЗначение.Значение; + Строка.ВидИзменения = -1; + КонецЦикла; + + Для Каждого КлючИЗначение Из НовыеВерсииОграниченийСписков Цикл + Строка = Таблица.Добавить(); + Строка.Список = КлючИЗначение.Ключ; + Строка.Версия = КлючИЗначение.Значение; + Строка.ВидИзменения = 1; + КонецЦикла; + + Таблица.Свернуть("Список, Версия", "ВидИзменения"); + Списки = Новый Массив; + + Для Каждого Строка Из Таблица Цикл + Если Строка.ВидИзменения = 0 Тогда + Продолжить; + КонецЕсли; + Если Списки.Найти(Строка.Список) <> Неопределено Тогда + Продолжить; + КонецЕсли; + Если Метаданные.НайтиПоПолномуИмени(Строка.Список) = Неопределено Тогда + Продолжить; + КонецЕсли; + Списки.Добавить(Строка.Список); + КонецЦикла; + + Возврат Списки; + +КонецФункции + +// Для процедуры ХранимыеПараметрыОграниченияДоступа. +Функция ВерсияСтруктурыКэша() + + Возврат "5"; // Число нужно увеличивать при внесении изменений в состав параметров кэша. + +КонецФункции + +// Для процедур УстановкаПараметровСеанса, УточнитьВерсииШаблоновОграниченияДоступа и +// для функции СтруктураХранимыхПараметровШаблонов. +Функция ВерсииШаблоновОграниченияДоступа() + + Возврат ",ДляОбъекта1,ДляРегистра1,"; + +КонецФункции + +// Для функции ДействующиеПараметрыОграниченияДоступа. +Процедура ОбновитьИдентификаторыТранзакции(ИдентификаторТранзакции) + + Кэш = КэшПараметровОграничения(); + + Если Не ТранзакцияАктивна() И Кэш.ИдентификаторыТранзакции.Количество() = 0 + Или ТранзакцияАктивна() И ИдентификаторТранзакции = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ИдентификаторТранзакции <> Неопределено И ТранзакцияАктивна() Тогда + Кэш.ИдентификаторыТранзакции.Вставить(ИдентификаторТранзакции, Истина); + Иначе + Кэш.ИдентификаторыТранзакции.Очистить(); + КонецЕсли; + +КонецПроцедуры + +// Для функции ДействующиеПараметрыОграниченияДоступа. +Процедура УстановитьВерсиюПараметров(ВерсияПараметров, ИдентификаторТранзакции, ПовторныйВызов = Ложь) + + Если Не ПовторныйВызов Тогда + ОбновитьПовторноИспользуемыеЗначения(); + КонецЕсли; + + Если ИдентификаторТранзакции <> Неопределено И ТранзакцияАктивна() Тогда + Кэш = КэшПараметровОграничения(); + Кэш.ИдентификаторыТранзакции.Вставить(ИдентификаторТранзакции, Истина); + КонецЕсли; + + Если ТипЗнч(ВерсияПараметров.ДляЗаписиОбъектовИПроверкиПрав) = Тип("ХранилищеЗначения") Тогда + ДляЗаписиОбъектовИПроверкиПрав = ВерсияПараметров.ДляЗаписиОбъектовИПроверкиПрав.Получить(); + + Если ТипЗнч(ДляЗаписиОбъектовИПроверкиПрав) = Тип("Структура") + Или Не ДляЗаписиОбъектовИПроверкиПрав.Свойство("ВерсияСтруктурыКэша") + Или ДляЗаписиОбъектовИПроверкиПрав.ВерсияСтруктурыКэша <> ВерсияСтруктурыКэша() Тогда + + ВерсияПараметров = НоваяВерсияПараметровОграниченияДоступа(); + УстановитьВерсиюПараметров(ВерсияПараметров, ИдентификаторТранзакции, Истина); + Возврат; + КонецЕсли; + Иначе + ДляЗаписиОбъектовИПроверкиПрав = Неопределено; + КонецЕсли; + + ХранилищеДляШаблоновОграниченияДоступа = ?(ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя(), + ВерсияПараметров.ДляШаблоновВСеансахВнешнихПользователей, + ВерсияПараметров.ДляШаблоновВСеансахПользователей); + + Если ТипЗнч(ХранилищеДляШаблоновОграниченияДоступа) = Тип("ХранилищеЗначения") Тогда + ДляШаблоновОграниченияДоступа = СтруктураХранимыхПараметровШаблонов( + ХранилищеДляШаблоновОграниченияДоступа.Получить()); + + Если ДляШаблоновОграниченияДоступа.ВерсияСтруктурыКэша <> ВерсияСтруктурыКэша() Тогда + ВерсияПараметров = НоваяВерсияПараметровОграниченияДоступа(); + УстановитьВерсиюПараметров(ВерсияПараметров, ИдентификаторТранзакции, Истина); + Возврат; + КонецЕсли; + Иначе + ДляШаблоновОграниченияДоступа = СтруктураХранимыхПараметровШаблонов(); + КонецЕсли; + + ПараметрыСеанса.ВерсииШаблоновОграниченияДоступа = ДляШаблоновОграниченияДоступа.ВерсииШаблонов; + ПараметрыШаблонов = СтруктураПараметровШаблонов(ДляШаблоновОграниченияДоступа.ПараметрыШаблонов); + ЗаполнитьЗначенияСвойств(ПараметрыСеанса, ПараметрыШаблонов); + + УточнитьВерсииШаблоновОграниченияДоступа(); + + ПараметрыСеанса.ГруппыДоступаАвторизованногоПользователя = + Новый ФиксированныйМассив(ГруппыДоступаАвторизованногоПользователя()); + + ПараметрыОграничения = Новый Структура; + ПараметрыОграничения.Вставить("Версия", ВерсияПараметров.Версия); + ПараметрыОграничения.Вставить("ХешСумма", ВерсияПараметров.ХешСумма); + ПараметрыОграничения.Вставить("ДатаСоздания", ВерсияПараметров.ДатаСоздания); + ПараметрыОграничения.Вставить("Параметры", ДляЗаписиОбъектовИПроверкиПрав); + + ФиксированныеПараметрыОграничения = Новый ФиксированнаяСтруктура(ПараметрыОграничения); + ПараметрыСеанса.ПараметрыОграниченияДоступа = ФиксированныеПараметрыОграничения; + +КонецПроцедуры + +// Для процедуры УстановитьВерсиюПараметров. +Процедура УточнитьВерсииШаблоновОграниченияДоступа() + + Если ПараметрыСеанса.ВерсииШаблоновОграниченияДоступа = ВерсииШаблоновОграниченияДоступа() Тогда + Возврат; + КонецЕсли; + + ВерсииШаблонов = СтрРазделить(ВерсииШаблоновОграниченияДоступа(), ",", Ложь); + УточненныеВерсииШаблонов = ""; + Для Каждого ВерсияШаблона Из ВерсииШаблонов Цикл + УточненныеВерсииШаблонов = "," + ВерсияШаблона; + Если СтрНайти(ПараметрыСеанса.ВерсииШаблоновОграниченияДоступа, "," + ВерсияШаблона + ",") = 0 Тогда + УточненныеВерсииШаблонов = УточненныеВерсииШаблонов + "ТребуетсяПерезапуститьСеанс"; + КонецЕсли; + КонецЦикла; + УточненныеВерсииШаблонов = УточненныеВерсииШаблонов + ","; + + ПараметрыСеанса.ВерсииШаблоновОграниченияДоступа = УточненныеВерсииШаблонов; + +КонецПроцедуры + +// Для процедуры УстановитьВерсиюПараметров. +Функция ГруппыДоступаАвторизованногоПользователя() + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Пользователь", Пользователи.АвторизованныйПользователь()); + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ГруппыДоступа.Ссылка КАК Ссылка + |ИЗ + | Справочник.ГруппыДоступа КАК ГруппыДоступа + |ГДЕ + | НЕ ГруппыДоступа.ПометкаУдаления + | И НЕ ГруппыДоступа.Профиль.ПометкаУдаления + | И (ГруппыДоступа.Профиль <> ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор)) + | И ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | Справочник.ГруппыДоступа.Пользователи КАК ПользователиГруппДоступа + | ГДЕ + | ПользователиГруппДоступа.Ссылка = ГруппыДоступа.Ссылка + | И НЕ(ПользователиГруппДоступа.Пользователь <> &Пользователь + | И НЕ ПользователиГруппДоступа.Пользователь В + | (ВЫБРАТЬ + | СоставыГруппПользователей.ГруппаПользователей + | ИЗ + | РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + | ГДЕ + | СоставыГруппПользователей.Пользователь = &Пользователь)))"; + + Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + +КонецФункции + +// Для функции НоваяВерсияПараметровОграниченияДоступа. +Функция ХранимыеПараметрыОграниченияДоступа(ВерсииОграниченийСписков = Неопределено, ОбщийКонтекст = Неопределено) + + Если ОбщийКонтекст = Неопределено Тогда + ОбщийКонтекст = ОбщийКонтекстРасчетаПараметровОграничения(); + Иначе + СпециальноеПолноеИмя = ОбщийКонтекст.СпециальноеПолноеИмя; + СпециальноеОписаниеОграничения = ОбщийКонтекст.СпециальноеОписаниеОграничения; + КонецЕсли; + + ДополнительныйКонтекстДляПользователей = НовыйДополнительныйКонтекст(); + ДополнительныйКонтекстДляВнешнихПользователей = НовыйДополнительныйКонтекст(); + + ПолныеИменаСписков = Новый Массив; + Для Каждого ОписаниеСписка Из ОбщийКонтекст.СпискиСОграничением Цикл + ПолноеИмя = ОписаниеСписка.Ключ; + ПолныеИменаСписков.Добавить(ПолноеИмя); + Если ПолноеИмя = СпециальноеПолноеИмя Тогда + ОписаниеОграничения = СпециальноеОписаниеОграничения; + Иначе + ОписаниеОграничения = ОписаниеОграниченияДанных(ОбщийКонтекст, ПолноеИмя); + КонецЕсли; + + ДобавитьДополнительныйКонтекст(ПолноеИмя, + ДополнительныйКонтекстДляПользователей, ОписаниеОграничения, Ложь); + + ДобавитьДополнительныйКонтекст(ПолноеИмя, + ДополнительныйКонтекстДляВнешнихПользователей, ОписаниеОграничения, Истина); + КонецЦикла; + + СпискиСДатой = Новый Соответствие; + ИдентификаторыСписков = ОбщегоНазначения.ИдентификаторыОбъектовМетаданных(ПолныеИменаСписков); + + // Заполнение для пользователей. + КонтекстДляПользователей = Новый Структура; + КонтекстДляПользователей.Вставить("ДляВнешнихПользователей", Ложь); + КонтекстДляПользователей.Вставить("ОбщийКонтекст", ОбщийКонтекст); + КонтекстДляПользователей.Вставить("ДополнительныйКонтекст", ДополнительныйКонтекстДляПользователей); + КонтекстДляПользователей.Вставить("ВедущиеСписки", Новый Соответствие); + КонтекстДляПользователей.Вставить("УровниЗависимости", Новый Соответствие); + КонтекстДляПользователей.Вставить("ВерсииОграниченийСписков", Новый Соответствие); + КонтекстДляПользователей.Вставить("ПараметрыШаблонов", СтруктураПараметровШаблонов()); + КонтекстДляПользователей.Вставить("СпискиСДатой", СпискиСДатой); + КонтекстДляПользователей.Вставить("ИдентификаторыСписков", ИдентификаторыСписков); + + ДобавитьХранимыеПараметрыОграниченияДляВидаПользователей(КонтекстДляПользователей); + + // Заполнение для внешних пользователей. + КонтекстДляВнешнихПользователей = Новый Структура; + КонтекстДляВнешнихПользователей.Вставить("ДляВнешнихПользователей", Истина); + КонтекстДляВнешнихПользователей.Вставить("ОбщийКонтекст", ОбщийКонтекст); + КонтекстДляВнешнихПользователей.Вставить("ДополнительныйКонтекст", ДополнительныйКонтекстДляВнешнихПользователей); + КонтекстДляВнешнихПользователей.Вставить("ВедущиеСписки", Новый Соответствие); + КонтекстДляВнешнихПользователей.Вставить("УровниЗависимости", Новый Соответствие); + КонтекстДляВнешнихПользователей.Вставить("ВерсииОграниченийСписков", Новый Соответствие); + КонтекстДляВнешнихПользователей.Вставить("ПараметрыШаблонов", СтруктураПараметровШаблонов()); + КонтекстДляВнешнихПользователей.Вставить("СпискиСДатой", СпискиСДатой); + КонтекстДляВнешнихПользователей.Вставить("ИдентификаторыСписков", ИдентификаторыСписков); + + ДобавитьХранимыеПараметрыОграниченияДляВидаПользователей(КонтекстДляВнешнихПользователей); + + // Заполнение общей и отдельной частей ведущих списков для пользователей и внешних пользователей. + ВедущиеСписки = Новый Соответствие; + Для Каждого ОписаниеВедущихСписков Из КонтекстДляПользователей.ВедущиеСписки Цикл + ДобавитьВедущиеСписки(ВедущиеСписки, + "ДляПользователей", ОписаниеВедущихСписков.Ключ, ОписаниеВедущихСписков.Значение); + КонецЦикла; + Для Каждого ОписаниеВедущихСписков Из КонтекстДляВнешнихПользователей.ВедущиеСписки Цикл + ДобавитьВедущиеСписки(ВедущиеСписки, + "ДляВнешнихПользователей", ОписаниеВедущихСписков.Ключ, ОписаниеВедущихСписков.Значение); + КонецЦикла; + Для Каждого ВедущийСписок Из ВедущиеСписки Цикл + Свойства = ВедущийСписок.Значение; + Если Свойства.ПоЗначениямПолей <> Неопределено Тогда + ПоЗначениямПолей = Свойства.ПоЗначениямПолей; + Если ПоЗначениямПолей.ЭтоСсылочныйТип Тогда + ТабличныеЧасти = Новый Массив; + Для Каждого ОписаниеТабличнойЧасти Из ПоЗначениямПолей.ТабличныеЧасти Цикл + ТабличныеЧасти.Добавить(ОписаниеТабличнойЧасти.Значение); + КонецЦикла; + ПоЗначениямПолей.ТабличныеЧасти = ТабличныеЧасти; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + // Заполнение уровней зависимости от ведущих списков. + УровниЗависимости = Новый Соответствие; + Для Каждого ОписаниеУровняЗависимости Из КонтекстДляПользователей.УровниЗависимости Цикл + ДобавитьУровеньЗависимости(УровниЗависимости, + "ДляПользователей", ОписаниеУровняЗависимости.Ключ, ОписаниеУровняЗависимости.Значение); + КонецЦикла; + Для Каждого ОписаниеУровняЗависимости Из КонтекстДляВнешнихПользователей.УровниЗависимости Цикл + ДобавитьУровеньЗависимости(УровниЗависимости, + "ДляВнешнихПользователей", ОписаниеУровняЗависимости.Ключ, ОписаниеУровняЗависимости.Значение); + КонецЦикла; + + // Расчет версий ограничения доступа. + ВерсииОграниченийСписков = Новый Соответствие; + Версии = Новый СписокЗначений; + Версии.Добавить(ВерсияСтруктурыКэша()); + Для Каждого ОписаниеВерсии Из КонтекстДляПользователей.ВерсииОграниченийСписков Цикл + ОбщаяВерсия = ОбщаяВерсия(ОбщийКонтекст, ОписаниеВерсии.Ключ, ОписаниеВерсии.Значение, + КонтекстДляВнешнихПользователей.ВерсииОграниченийСписков.Получить(ОписаниеВерсии.Ключ)); + ВерсииОграниченийСписков.Вставить(ОписаниеВерсии.Ключ, ОбщаяВерсия); + Версии.Добавить(ОбщаяВерсия); + КонецЦикла; + Версии.СортироватьПоЗначению(); + ВерсииСтрокой = СтрСоединить(Версии.ВыгрузитьЗначения(), Символы.ПС); + ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.SHA256); + ХешированиеДанных.Добавить(ВерсииСтрокой); + + // Подготовка дополнительного контекста для расчета параметров ограничения отдельного списка. + ХранимыеСвойства = "СпискиСОтключеннымОграничением, СвойстваОграниченияСписков, СпискиСЗаписьюКлючейДоступа"; + ДляПользователей = Новый Структура(ХранимыеСвойства); + ЗаполнитьЗначенияСвойств(ДляПользователей, КонтекстДляПользователей.ДополнительныйКонтекст); + ДляВнешнихПользователей = Новый Структура(ХранимыеСвойства); + ЗаполнитьЗначенияСвойств(ДляВнешнихПользователей, КонтекстДляВнешнихПользователей.ДополнительныйКонтекст); + ДополнительныйКонтекст = Новый Структура; + ДополнительныйКонтекст.Вставить("ДляПользователей", ДляПользователей); + ДополнительныйКонтекст.Вставить("ДляВнешнихПользователей", ДляВнешнихПользователей); + + ПараметрыЗаписи = Новый Структура; + ПараметрыЗаписи.Вставить("ВерсияСтруктурыКэша", ВерсияСтруктурыКэша()); + ПараметрыЗаписи.Вставить("ВерсииОграниченийСписков", ВерсииОграниченийСписков); + ПараметрыЗаписи.Вставить("ВедущиеСписки", ВедущиеСписки); + ПараметрыЗаписи.Вставить("ДополнительныйКонтекст", ДополнительныйКонтекст); + ПараметрыЗаписи.Вставить("УровниЗависимости", УровниЗависимости); + ПараметрыЗаписи.Вставить("СпискиСДатой", СпискиСДатой); + + ХранимыеПараметры = Новый Структура; + + ХранимыеПараметрыШаблоновДляПользователей = СтруктураХранимыхПараметровШаблонов(); + ХранимыеПараметрыШаблоновДляПользователей.ПараметрыШаблонов = КонтекстДляПользователей.ПараметрыШаблонов; + ХранимыеПараметры.Вставить("ДляШаблоновВСеансахПользователей", + Новый ХранилищеЗначения(ОбщегоНазначения.ФиксированныеДанные(ХранимыеПараметрыШаблоновДляПользователей))); + + ХранимыеПараметрыШаблоновДляВнешнихПользователей = СтруктураХранимыхПараметровШаблонов(); + ХранимыеПараметрыШаблоновДляВнешнихПользователей.ПараметрыШаблонов = КонтекстДляВнешнихПользователей.ПараметрыШаблонов; + ХранимыеПараметры.Вставить("ДляШаблоновВСеансахВнешнихПользователей", + Новый ХранилищеЗначения(ОбщегоНазначения.ФиксированныеДанные(ХранимыеПараметрыШаблоновДляВнешнихПользователей))); + + ХранимыеПараметры.Вставить("ДляЗаписиОбъектовИПроверкиПрав", + Новый ХранилищеЗначения(ОбщегоНазначения.ФиксированныеДанные(ПараметрыЗаписи))); + + ХранимыеПараметры.Вставить("ХешСумма", Base64Строка(ХешированиеДанных.ХешСумма)); + ХранимыеПараметры.Вставить("ДатаСоздания", ТекущаяДатаСеанса()); + + Возврат ХранимыеПараметры; + +КонецФункции + +// Для функций РассчитанныеПараметрыОграничения и ХранимыеПараметрыОграниченияДоступа. +Функция НовыйДополнительныйКонтекст() + + ДополнительныйКонтекст = Новый Структура; + ДополнительныйКонтекст.Вставить("ОписанияОграничений", Новый Соответствие); + ДополнительныйКонтекст.Вставить("СпискиСОграничениемПоВладельцу", Новый Соответствие); + ДополнительныйКонтекст.Вставить("СпискиСОтключеннымОграничением", Новый Соответствие); + ДополнительныйКонтекст.Вставить("СпискиСЗаписьюКлючейДоступа", Неопределено); + ДополнительныйКонтекст.Вставить("СвойстваОграниченияСписков", Новый Соответствие); + + Возврат ДополнительныйКонтекст; + +КонецФункции + +// Для функций РассчитанныеПараметрыОграничения и ХранимыеПараметрыОграниченияДоступа. +Процедура ДобавитьДополнительныйКонтекст(ПолноеИмя, ДополнительныйКонтекст, + ОписаниеОграничения, ДляВнешнихПользователей) + + Если ДляВнешнихПользователей Тогда + Текст = ОписаниеОграничения.ТекстДляВнешнихПользователей; + ПоВладельцу = ОписаниеОграничения.ПоВладельцуБезЗаписиКлючейДоступаДляВнешнихПользователей; + Иначе + Текст = ОписаниеОграничения.Текст; + ПоВладельцу = ОписаниеОграничения.ПоВладельцуБезЗаписиКлючейДоступа; + КонецЕсли; + ВМодулеМенеджера = ОписаниеОграничения.ТекстВМодулеМенеджера; + + СокращенноеОписаниеОграничения = Новый Структура; + СокращенноеОписаниеОграничения.Вставить("Текст", Текст); + СокращенноеОписаниеОграничения.Вставить("ВМодулеМенеджера", ВМодулеМенеджера); + + ДополнительныйКонтекст.ОписанияОграничений.Вставить(ПолноеИмя, СокращенноеОписаниеОграничения); + + Если ПоВладельцу <> Неопределено Тогда + ДополнительныйКонтекст.СпискиСОграничениемПоВладельцу.Вставить(ПолноеИмя, ПоВладельцу); + КонецЕсли; + +КонецПроцедуры + +// Для процедуры ХранимыеПараметрыОграниченияДоступа. +Процедура ДобавитьХранимыеПараметрыОграниченияДляВидаПользователей(Контекст) + + // Подготовка параметров с учетом зависимостей только по ключам доступа. + ТаблицаСвойств = Новый ТаблицаЗначений; + ТаблицаСвойств.Колонки.Добавить("ПолноеИмя", Новый ОписаниеТипов("Строка")); + ТаблицаСвойств.Колонки.Добавить("Зависимый", Новый ОписаниеТипов("Булево")); + ТаблицаСвойств.Колонки.Добавить("Ведущие", Новый ОписаниеТипов("Массив")); + ТаблицаСвойств.Колонки.Добавить("Уровень", Новый ОписаниеТипов("Число")); + ТаблицаСвойств.Колонки.Добавить("Ведущий", Новый ОписаниеТипов("Булево")); + ТаблицаСвойств.Колонки.Добавить("Зависимые", Новый ОписаниеТипов("Массив")); + ТаблицаСвойств.Колонки.Добавить("Параметры", Новый ОписаниеТипов("Структура")); + ТаблицаСвойств.Колонки.Добавить("Обработан", Новый ОписаниеТипов("Булево")); + ТаблицаСвойств.Колонки.Добавить("ЗаписыватьКлючиДоступа", Новый ОписаниеТипов("Булево")); + ТаблицаСвойств.Колонки.Добавить("ОграничениеПоВладельцуВозможно", Новый ОписаниеТипов("Булево")); + ТаблицаСвойств.Колонки.Добавить("ОграничениеПоВладельцуВключено", Новый ОписаниеТипов("Булево")); + ТаблицаСвойств.Колонки.Добавить("ОграничениеПоВладельцуОтключено", Новый ОписаниеТипов("Булево")); + ТаблицаСвойств.Колонки.Добавить("ВладельцыСПравамиПользователей", Новый ОписаниеТипов("СписокЗначений")); + ТаблицаСвойств.Колонки.Добавить("ВладельцыСПравамиГруппДоступа", Новый ОписаниеТипов("СписокЗначений")); + ТаблицаСвойств.Колонки.Добавить("КлючиДоступаПользователей", Новый ОписаниеТипов("Булево")); + ТаблицаСвойств.Колонки.Добавить("КлючиДоступаПользователейИГруппДоступа", Новый ОписаниеТипов("Булево")); + + СпискиСОграничением = Новый Соответствие(Контекст.ОбщийКонтекст.СпискиСОграничением); + СпискиСОтключеннымОграничением = Новый Соответствие; + + Для Каждого ОписаниеСписка Из СпискиСОграничением Цикл + ПолноеИмя = ОписаниеСписка.Ключ; + + Если ТипЗнч(ОписаниеСписка.Значение) = Тип("Булево") Тогда + Свойства = ТаблицаСвойств.Добавить(); + Свойства.ПолноеИмя = ПолноеИмя; + СпискиСОграничением.Вставить(ПолноеИмя, Свойства); + Параметры = ПараметрыОграниченияДляВидаПользователей(ПолноеИмя, Контекст); + Свойства.Параметры = Параметры; + Иначе + Свойства = ОписаниеСписка.Значение; + Параметры = Свойства.Параметры; + КонецЕсли; + + Если Параметры.ОграничениеОтключено Тогда + СпискиСОтключеннымОграничением.Вставить(ПолноеИмя, Истина); + КонецЕсли; + Если Параметры.ЕстьОграничениеПоПользователям Тогда + Свойства.КлючиДоступаПользователей = Истина; + КонецЕсли; + + ВедущиеСписки = Параметры.ВедущиеСписки; + Если ВедущиеСписки.ПоКлючамДоступа.Количество() > 0 Тогда + Свойства.Зависимый = Истина; + Для Каждого КлючИЗначение Из ВедущиеСписки.ПоКлючамДоступа Цикл + ВедущийСписок = КлючИЗначение.Ключ; + Свойства.Ведущие.Добавить(ВедущийСписок); + СвойстваВедущего = СпискиСОграничением.Получить(ВедущийСписок); + Если СвойстваВедущего = Неопределено Или ТипЗнч(СвойстваВедущего) = Тип("Булево") Тогда + СвойстваВедущего = ТаблицаСвойств.Добавить(); + СвойстваВедущего.ПолноеИмя = ВедущийСписок; + СвойстваВедущего.Параметры = ПараметрыОграниченияДляВидаПользователей(ВедущийСписок, Контекст); + СпискиСОграничением.Вставить(ВедущийСписок, СвойстваВедущего); + Если СвойстваВедущего.Параметры.ОграничениеОтключено Тогда + СпискиСОтключеннымОграничением.Вставить(ВедущийСписок, Истина); + КонецЕсли; + КонецЕсли; + СвойстваВедущего.Ведущий = Истина; + СвойстваВедущего.Зависимые.Добавить(ПолноеИмя); + КонецЦикла; + КонецЕсли; + КонецЦикла; + + МаксимальныйУровень = 0; + Строки = ТаблицаСвойств.НайтиСтроки(Новый Структура("Зависимый, Ведущий", Ложь, Истина)); + Для Каждого Строка Из Строки Цикл + УстановитьУровеньЗависимыхСписков(Строка, СпискиСОграничением, Новый Массив, МаксимальныйУровень); + КонецЦикла; + // Обработка зависимых списков, ведущих для самих себя (зацикленных на себя). + Строки = ТаблицаСвойств.НайтиСтроки(Новый Структура("Обработан", Ложь)); + Для Каждого Строка Из Строки Цикл + УстановитьУровеньЗависимыхСписков(Строка, СпискиСОграничением, Новый Массив, МаксимальныйУровень); + КонецЦикла; + + Строки = ТаблицаСвойств.НайтиСтроки(Новый Структура("Зависимый, Ведущий", Истина, Ложь)); + Для Каждого Строка Из Строки Цикл + НастроитьОптимизациюПоПолюВладельцу(Строка, СпискиСОграничением, Контекст); + КонецЦикла; + + // Сокращение зависимостей по ключам доступа зависимых объектов. + СпискиСЗаписьюКлючейДоступа = Новый Соответствие; + Строки = ТаблицаСвойств.НайтиСтроки(Новый Структура("ЗаписыватьКлючиДоступа", Истина)); + Для Каждого Строка Из Строки Цикл + СпискиСЗаписьюКлючейДоступа.Вставить(Строка.ПолноеИмя, Истина); + КонецЦикла; + Контекст.ДополнительныйКонтекст.СпискиСОтключеннымОграничением = СпискиСОтключеннымОграничением; + Контекст.ДополнительныйКонтекст.СпискиСЗаписьюКлючейДоступа = СпискиСЗаписьюКлючейДоступа; + + СвойстваСписковПоУровням = Новый Массив; + Для Уровень = 1 По МаксимальныйУровень Цикл + СвойстваСписков = ТаблицаСвойств.НайтиСтроки(Новый Структура("Уровень", Уровень)); + СвойстваСписковПоУровням.Добавить(СвойстваСписков); + КонецЦикла; + + Для Каждого СвойстваСписков Из СвойстваСписковПоУровням Цикл + Для Каждого СвойстваСписка Из СвойстваСписков Цикл + + КлючиДоступаПользователей = Ложь; + КлючиДоступаГруппДоступа = Ложь; + Для Каждого Ведущий Из СвойстваСписка.Ведущие Цикл + СвойстваВедущего = СпискиСОграничением.Получить(Ведущий); + Если СвойстваВедущего.КлючиДоступаПользователей Тогда + КлючиДоступаПользователей = Истина; + Свойства.ВладельцыСПравамиПользователей.Добавить(Ведущий); + Иначе + КлючиДоступаГруппДоступа = Истина; + Свойства.ВладельцыСПравамиГруппДоступа.Добавить(Ведущий); + КонецЕсли; + КонецЦикла; + Если КлючиДоступаПользователей Тогда + СвойстваСписка.КлючиДоступаПользователей = Истина; + Если КлючиДоступаГруппДоступа Тогда + СвойстваСписка.КлючиДоступаПользователейИГруппДоступа = Истина; + КонецЕсли; + КонецЕсли; + Если СвойстваСписка.ОграничениеПоВладельцуВключено Тогда + Продолжить; + КонецЕсли; + + ВсеВедущиеСпискиСОграничением = Истина; + Для Каждого Ведущий Из СвойстваСписка.Ведущие Цикл + Если СпискиСОграничением.Получить(Ведущий) = Неопределено + Или СпискиСОтключеннымОграничением.Получить(Ведущий) <> Неопределено Тогда + ВсеВедущиеСпискиСОграничением = Ложь; + Прервать; + КонецЕсли; + КонецЦикла; + Если ВсеВедущиеСпискиСОграничением Тогда + Продолжить; + КонецЕсли; + + СвойстваСписка.Параметры = + ПараметрыОграниченияДляВидаПользователей(СвойстваСписка.ПолноеИмя, Контекст); + + ВедущиеСписки = СвойстваСписка.Параметры.ВедущиеСписки.ПоКлючамДоступа; + Если ВедущиеСписки.Количество() = СвойстваСписка.Ведущие.Количество() Тогда + Продолжить; + КонецЕсли; + + Для Каждого Ведущий Из СвойстваСписка.Ведущие Цикл + Если ВедущиеСписки.Получить(Ведущий) = Неопределено Тогда + СвойстваВедущего = СпискиСОграничением.Получить(Ведущий); + ИндексЭлемента = СвойстваВедущего.Зависимые.Найти(СвойстваСписка.ПолноеИмя); + СвойстваВедущего.Зависимые.Удалить(ИндексЭлемента); + СвойстваВедущего.Ведущий = СвойстваВедущего.Зависимые.Количество() > 0; + КонецЕсли; + КонецЦикла; + + Если СвойстваСписка.Параметры.ОграничениеОтключено Тогда + СпискиСОтключеннымОграничением.Вставить(СвойстваСписка.ПолноеИмя, Истина); + КонецЕсли; + + НовыйУровеньЗависимости = 0; + Для Каждого Ведущий Из СвойстваСписка.Ведущие Цикл + СвойстваВедущего = СпискиСОграничением.Получить(Ведущий); + Если НовыйУровеньЗависимости < СвойстваВедущего.Уровень + 1 Тогда + НовыйУровеньЗависимости = СвойстваВедущего.Уровень + 1; + КонецЕсли; + Если СвойстваВедущего.КлючиДоступаПользователей Тогда + СвойстваСписка.КлючиДоступаПользователей = Истина; + КонецЕсли; + КонецЦикла; + СвойстваСписка.Уровень = НовыйУровеньЗависимости; + СвойстваСписка.Зависимый = СвойстваСписка.Ведущие.Количество() > 0; + КонецЦикла; + КонецЦикла; + + // Заполнение хранимых свойств списков. + Для Каждого СвойстваСписка Из ТаблицаСвойств Цикл + ПолноеИмя = СвойстваСписка.ПолноеИмя; + ОбновитьВерсиюПараметров = Ложь; + + Если СвойстваСписка.Параметры.ДоступЗапрещен Тогда + УстановитьСвойствоОграничения(ПолноеИмя, "ДоступЗапрещен", Истина, Контекст); + КонецЕсли; + Если ЗначениеЗаполнено(СвойстваСписка.Параметры.ИмяОтдельногоРегистраКлючей) Тогда + УстановитьСвойствоОграничения(ПолноеИмя, + "ИмяОтдельногоРегистраКлючей", СвойстваСписка.Параметры.ИмяОтдельногоРегистраКлючей, Контекст); + КонецЕсли; + Если ЗначениеЗаполнено(СвойстваСписка.Параметры.ОпорныеПоля) Тогда + ОпорныеПоля = Новый Структура("Все, ТипыВсех, Используемые"); + ЗаполнитьЗначенияСвойств(ОпорныеПоля, СвойстваСписка.Параметры.ОпорныеПоля); + УстановитьСвойствоОграничения(ПолноеИмя, "ОпорныеПоля", ОпорныеПоля, Контекст); + КонецЕсли; + Если Не СвойстваСписка.ОграничениеПоВладельцуВключено + И СвойстваСписка.КлючиДоступаПользователей Тогда + + Если Не СвойстваСписка.Параметры.РассчитыватьПраваПользователей Тогда + ОбновитьВерсиюПараметров = Истина; + КонецЕсли; + УстановитьСвойствоОграничения(ПолноеИмя, "РассчитыватьПраваПользователей", Истина, Контекст); + Если СвойстваСписка.ВладельцыСПравамиПользователей.Количество() > 0 + И СвойстваСписка.ВладельцыСПравамиГруппДоступа.Количество() > 0 Тогда + + ВладельцыСПравамиПользователей = СвойстваСписка.ВладельцыСПравамиПользователей; + ВладельцыСПравамиПользователей.СортироватьПоЗначению(); + ВладельцыСПравамиГруппДоступа = СвойстваСписка.ВладельцыСПравамиГруппДоступа; + ВладельцыСПравамиГруппДоступа.СортироватьПоЗначению(); + + ВладельцыСПравамиДля = Новый Структура; + ВладельцыСПравамиДля.Вставить("Пользователей", ВладельцыСПравамиПользователей.ВыгрузитьЗначения()); + ВладельцыСПравамиДля.Вставить("ГруппДоступа", ВладельцыСПравамиГруппДоступа.ВыгрузитьЗначения()); + УстановитьСвойствоОграничения(ПолноеИмя, "ВладельцыСПравамиДля", ВладельцыСПравамиДля, Контекст); + ОбновитьВерсиюПараметров = Истина; + КонецЕсли; + КонецЕсли; + Если СвойстваСписка.КлючиДоступаПользователейИГруппДоступа Тогда + УстановитьСвойствоОграничения(ПолноеИмя, + "ОграничениеВШаблонахЧерезКлючиДоступаПользователейИГруппДоступа", Истина, Контекст); + ИначеЕсли СвойстваСписка.КлючиДоступаПользователей Тогда + УстановитьСвойствоОграничения(ПолноеИмя, + "ОграничениеВШаблонахЧерезКлючиДоступаПользователей", Истина, Контекст); + КонецЕсли; + Если СвойстваСписка.ОграничениеПоВладельцуВключено Тогда + Если Не СвойстваСписка.Параметры.ИспользуетсяОграничениеПоВладельцу Тогда + ОбновитьВерсиюПараметров = Истина; + КонецЕсли; + УстановитьСвойствоОграничения(ПолноеИмя, + "ПолеВладельца", СвойстваСписка.Параметры.ПолеВладельца, Контекст); + КонецЕсли; + Если СвойстваСписка.Параметры.ОграничениеОтключено Тогда + СпискиСОтключеннымОграничением.Вставить(ПолноеИмя, Истина); + КонецЕсли; + УстановитьСвойствоОграничения(ПолноеИмя, "ИспользуемыеТипыЗначенийДоступа", + Новый ХранилищеЗначения(СвойстваСписка.Параметры.ИспользуемыеТипыЗначенийДоступа), Контекст); + + Если ОбновитьВерсиюПараметров Тогда + СвойстваСписка.Параметры = ПараметрыОграниченияДляВидаПользователей(СвойстваСписка.ПолноеИмя, Контекст); + КонецЕсли; + Контекст.ВерсииОграниченийСписков.Вставить(ПолноеИмя, СвойстваСписка.Параметры.Версия); + + ВедущиеСписки = СвойстваСписка.Параметры.ВедущиеСписки; + + Если ВедущиеСписки.ПоЗначениямПолей.Количество() > 0 + Или ВедущиеСписки.ПоКлючамДоступа.Количество() > 0 + Или ВедущиеСписки.ПоЗначениямСГруппами.Количество() > 0 Тогда + + Контекст.ВедущиеСписки.Вставить(ПолноеИмя, ВедущиеСписки); + КонецЕсли; + + НастроитьПараметрыШаблонов(СвойстваСписка, Контекст.ПараметрыШаблонов); + + Если СвойстваСписка.Уровень > 0 Тогда + ИдентификаторСписка = Контекст.ИдентификаторыСписков.Получить(СвойстваСписка.ПолноеИмя); + Контекст.УровниЗависимости.Вставить(ИдентификаторСписка, Уровень); + КонецЕсли; + + Если СвойстваСписка.Параметры.СписокСДатой Тогда + Контекст.СпискиСДатой.Вставить(СвойстваСписка.ПолноеИмя, Истина); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Для процедуры ХранимыеПараметрыОграниченияДляВидаПользователей. +Функция ПараметрыОграниченияДляВидаПользователей(ПолноеИмя, Контекст) + + ОписаниеОграничения = Контекст.ДополнительныйКонтекст.ОписанияОграничений.Получить(ПолноеИмя); + + Если ОписаниеОграничения = Неопределено Тогда + СтруктураОграничения = Неопределено; + Иначе + СтруктураОграничения = РассчитаннаяСтруктураОграничения(ПолноеИмя, + ОписаниеОграничения.Текст, ОписаниеОграничения.ВМодулеМенеджера, Контекст.ДляВнешнихПользователей); + КонецЕсли; + + Возврат ПараметрыОграниченияПоСтруктуреОграничения(ПолноеИмя, + СтруктураОграничения, + Контекст.ДляВнешнихПользователей, + Контекст.ОбщийКонтекст, + Контекст.ДополнительныйКонтекст); + +КонецФункции + +// Для процедуры ДобавитьХранимыеПараметрыОграниченияДляВидаПользователей. +Процедура УстановитьУровеньЗависимыхСписков(СвойстваВедущегоСписка, СвойстваСписков, ПредыдущиеВедущие, + МаксимальныйУровень) + + ПредыдущиеВедущие.Добавить(СвойстваВедущегоСписка.ПолноеИмя); + + Для Каждого ЗависимыйСписок Из СвойстваВедущегоСписка.Зависимые Цикл + Если ПредыдущиеВедущие.Найти(ЗависимыйСписок) <> Неопределено Тогда + УчастникиЦикла = ""; + Индекс = ПредыдущиеВедущие.Количество() - 1; + Пока Истина Цикл + УчастникиЦикла = "- " + ПредыдущиеВедущие[Индекс] + Символы.ПС + УчастникиЦикла; + Если ПредыдущиеВедущие[Индекс] = ЗависимыйСписок Тогда + Прервать; + КонецЕсли; + Индекс = Индекс - 1; + КонецЦикла; + УчастникиЦикла = УчастникиЦикла + "(!) " + ЗависимыйСписок; + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ограничения доступа, заполненные в процедурах ПриЗаполненииОграниченияДоступа + |модулей менеджеров или общем модуле УправлениеДоступомПереопределяемый, + |содержат недопустимую циклическую зависимость при использовании функции + |ЧтениеОбъектаРазрешено или ИзменениеОбъектаРазрешено в одном или нескольких + |списках-участниках цикла: + |%1'"), УчастникиЦикла); + ВызватьИсключение ТекстОшибки; + КонецЕсли; + СвойстваЗависимогоСписка = СвойстваСписков.Получить(ЗависимыйСписок); + Если СвойстваЗависимогоСписка.Уровень < СвойстваВедущегоСписка.Уровень + 1 Тогда + СвойстваЗависимогоСписка.Уровень = СвойстваВедущегоСписка.Уровень + 1; + Если МаксимальныйУровень < СвойстваЗависимогоСписка.Уровень Тогда + МаксимальныйУровень = СвойстваЗависимогоСписка.Уровень; + КонецЕсли; + КонецЕсли; + Если Не СвойстваЗависимогоСписка.Ведущий Тогда + СвойстваЗависимогоСписка.Обработан = Истина; + Продолжить; + КонецЕсли; + УстановитьУровеньЗависимыхСписков(СвойстваЗависимогоСписка, СвойстваСписков, ПредыдущиеВедущие, МаксимальныйУровень); + КонецЦикла; + + ПредыдущиеВедущие.Удалить(ПредыдущиеВедущие.Количество() - 1); + СвойстваВедущегоСписка.Обработан = Истина; + +КонецПроцедуры + +// Для процедуры ДобавитьХранимыеПараметрыОграниченияДляВидаПользователей. +Процедура НастроитьОптимизациюПоПолюВладельцу(СвойстваЗависимогоСписка, СвойстваСписков, Контекст) + + СвойстваЗависимогоСписка.ОграничениеПоВладельцуВозможно = + СвойстваЗависимогоСписка.Параметры.ПолеВладельца <> Неопределено; + + СвойстваЗависимогоСписка.ОграничениеПоВладельцуВключено = + СвойстваЗависимогоСписка.ОграничениеПоВладельцуВозможно + И Не СвойстваЗависимогоСписка.ОграничениеПоВладельцуОтключено; + + ЗависимыйСписокСОптимизацией = СвойстваЗависимогоСписка.ОграничениеПоВладельцуВключено; + + Для Каждого ВедущийСписок Из СвойстваЗависимогоСписка.Ведущие Цикл + СвойстваВедущегоСписка = СвойстваСписков.Получить(ВедущийСписок); + Если Не СвойстваВедущегоСписка.Зависимый Тогда + Если ЗависимыйСписокСОптимизацией И СвойстваВедущегоСписка.Параметры.ОграничениеОтключено Тогда + СвойстваВедущегоСписка.ЗаписыватьКлючиДоступа = Истина; + КонецЕсли; + Продолжить; + КонецЕсли; + Если ЗависимыйСписокСОптимизацией Тогда + Если СвойстваВедущегоСписка.Параметры.ПолеВладельца <> Неопределено Тогда + Если СвойстваВедущегоСписка.Параметры.ТребуетсяОграничениеПоВладельцу Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Установлен признак оптимизации ограничения %1, но такая + |оптимизация невозможна, так как она требуется для зависимого списка ""%2"".'"), + "ПоВладельцуБезЗаписиКлючейДоступа" + ?(Контекст.ДляВнешнихПользователей, "ДляВнешнихПользователей", ""), + СвойстваЗависимогоСписка.ПолноеИмя); + КонтекстОшибки = Новый Структура("СпискиСОграничением, ОписанияОграничений"); + КонтекстОшибки.Вставить("Список", СвойстваВедущегоСписка.ПолноеИмя); + КонтекстОшибки.Вставить("ОписанияОграничений", Контекст.ОбщийКонтекст.ОписанияОграничений); + КонтекстОшибки.Вставить("ДляВнешнихПользователей", Контекст.ДляВнешнихПользователей); + ТекстОшибки = ТекстОшибкиСЗаголовком(ТекстОшибки, КонтекстОшибки); + ВызватьИсключение ТекстОшибки; + Иначе + СвойстваВедущегоСписка.ОграничениеПоВладельцуОтключено = Истина; + КонецЕсли; + КонецЕсли; + Если СвойстваВедущегоСписка.Параметры.ОграничениеОтключено Тогда + СвойстваВедущегоСписка.ЗаписыватьКлючиДоступа = Истина; + КонецЕсли; + КонецЕсли; + НастроитьОптимизациюПоПолюВладельцу(СвойстваВедущегоСписка, СвойстваСписков, Контекст); + КонецЦикла; + +КонецПроцедуры + +// Для процедуры ДобавитьХранимыеПараметрыОграниченияДляВидаПользователей. +Процедура УстановитьСвойствоОграничения(ПолноеИмя, ИмяСвойства, ЗначениеСвойства, Контекст) + + Свойства = СвойстваОграниченияСписка(ПолноеИмя, Контекст.ДополнительныйКонтекст, Истина); + + Свойства[ИмяСвойства] = ЗначениеСвойства; + +КонецПроцедуры + +// Для процедур УстановитьСвойствоОграничения, ЗаполнитьЗапросыПроверкиПравЧтениеИзменение. +Функция СвойстваОграниченияСписка(ПолноеИмя, Контекст, ДобавлятьВКоллекцию = Ложь) + + Свойства = Контекст.СвойстваОграниченияСписков.Получить(ПолноеИмя); + + Если Свойства = Неопределено Тогда + Свойства = Новый Структура; + Свойства.Вставить("ДоступЗапрещен", Ложь); + Свойства.Вставить("ПолеВладельца", Неопределено); + Свойства.Вставить("ОпорныеПоля", Неопределено); + Свойства.Вставить("ИмяОтдельногоРегистраКлючей", ""); + Свойства.Вставить("РассчитыватьПраваПользователей", Ложь); + Свойства.Вставить("ВладельцыСПравамиДля", Неопределено); + Свойства.Вставить("ОграничениеВШаблонахЧерезКлючиДоступаПользователей", Ложь); + Свойства.Вставить("ОграничениеВШаблонахЧерезКлючиДоступаПользователейИГруппДоступа", Ложь); + Свойства.Вставить("ИспользуемыеТипыЗначенийДоступа", Неопределено); + Если ДобавлятьВКоллекцию Тогда + Контекст.СвойстваОграниченияСписков.Вставить(ПолноеИмя, Свойства); + КонецЕсли; + КонецЕсли; + + Возврат Свойства; + +КонецФункции + +// Для функции ХранимыеПараметрыОграниченияДоступа. +Процедура ДобавитьВедущиеСписки(ВедущиеСписки, ИмяСвойстваВидаПользователей, ЗависимыйСписок, + ВедущиеСпискиЗависимогоСписка) + + Для Каждого ОписаниеВедущегоСписка Из ВедущиеСпискиЗависимогоСписка.ПоЗначениямПолей Цикл + ВедущийСписок = ТекущиеСвойстваВедущегоСписка(ВедущиеСписки, ОписаниеВедущегоСписка.Ключ); + ВедущийСписок.ЗависимыеСписки.Вставить(ЗависимыйСписок, Истина); + + Если ВедущийСписок.ПоЗначениямПолей = Неопределено Тогда + ПоЗначениямПолей = Новый Структура; + ПоЗначениямПолей.Вставить("ЭтоСсылочныйТип", ОписаниеВедущегоСписка.Значение.ЭтоСсылочныйТип); + Если ПоЗначениямПолей.ЭтоСсылочныйТип Тогда + ПоЗначениямПолей.Вставить("ПоляШапки", Новый Соответствие); + ПоЗначениямПолей.Вставить("ТабличныеЧасти", Новый Соответствие); + Иначе + ПоЗначениямПолей.Вставить("ПоляРегистра", Новый Структура); + ПоЗначениямПолей.ПоляРегистра.Вставить("Поля", Новый Массив); + ПоЗначениямПолей.ПоляРегистра.Вставить("ЗависимыеСписки", Новый Соответствие); + КонецЕсли; + ВедущийСписок.ПоЗначениямПолей = ПоЗначениямПолей; + КонецЕсли; + + ДобавитьПоляВедущегоСписка(ВедущийСписок.ПоЗначениямПолей, + ОписаниеВедущегоСписка.Значение, ЗависимыйСписок, ИмяСвойстваВидаПользователей); + КонецЦикла; + + ДобавитьВедущиеСпискиПоВидуЗависимости(ВедущиеСписки, + ИмяСвойстваВидаПользователей, ЗависимыйСписок, ВедущиеСпискиЗависимогоСписка, "ПоКлючамДоступа"); + + ДобавитьВедущиеСпискиПоВидуЗависимости(ВедущиеСписки, + ИмяСвойстваВидаПользователей, ЗависимыйСписок, ВедущиеСпискиЗависимогоСписка, "ПоЗначениямСГруппами"); + +КонецПроцедуры + +// Для процедуры ДобавитьВедущиеСписки. +Процедура ДобавитьВедущиеСпискиПоВидуЗависимости(ВедущиеСписки, ИмяСвойстваВидаПользователей, + ЗависимыйСписок, ВедущиеСпискиЗависимогоСписка, ВидЗависимости) + + Для Каждого ОписаниеВедущегоСписка Из ВедущиеСпискиЗависимогоСписка[ВидЗависимости] Цикл + ВедущийСписок = ТекущиеСвойстваВедущегоСписка(ВедущиеСписки, ОписаниеВедущегоСписка.Ключ); + ВедущийСписок.ЗависимыеСписки.Вставить(ЗависимыйСписок, Истина); + + Если ВедущийСписок[ВидЗависимости] = Неопределено Тогда + Свойства = Новый Структура; + Свойства.Вставить("ДляПользователей", Неопределено); + Свойства.Вставить("ДляВнешнихПользователей", Неопределено); + ВедущийСписок[ВидЗависимости] = Свойства; + Иначе + Свойства = ВедущийСписок[ВидЗависимости]; + КонецЕсли; + + Если Свойства[ИмяСвойстваВидаПользователей] = Неопределено Тогда + Свойства[ИмяСвойстваВидаПользователей] = Новый Массив; + КонецЕсли; + + Свойства[ИмяСвойстваВидаПользователей].Добавить(ЗависимыйСписок); + КонецЦикла; + +КонецПроцедуры + +// Для процедуры ДобавитьВедущиеСписки. +Функция ТекущиеСвойстваВедущегоСписка(ВедущиеСписки, ПолноеИмя) + + ВедущийСписок = ВедущиеСписки.Получить(ПолноеИмя); + Если ВедущийСписок = Неопределено Тогда + ВедущийСписок = Новый Структура; + ВедущийСписок.Вставить("ЗависимыеСписки", Новый Соответствие); + ВедущийСписок.Вставить("ПоЗначениямПолей", Неопределено); + ВедущийСписок.Вставить("ПоКлючамДоступа", Неопределено); + ВедущийСписок.Вставить("ПоЗначениямСГруппами", Неопределено); + ВедущиеСписки.Вставить(ПолноеИмя, ВедущийСписок) + КонецЕсли; + + Возврат ВедущийСписок; + +КонецФункции + +// Для процедуры ДобавитьВедущиеСписки. +Процедура ДобавитьПоляВедущегоСписка(ТекущиеПоля, ДобавляемыеПоля, ЗависимыйСписок, + ИмяСвойстваВидаПользователей) + + Если Не ТекущиеПоля.ЭтоСсылочныйТип Тогда + Для Каждого Поле Из ДобавляемыеПоля.ПоляШапки Цикл + Если ТекущиеПоля.ПоляРегистра.Поля.Найти(Поле) = Неопределено Тогда + ТекущиеПоля.ПоляРегистра.Поля.Добавить(Поле); + КонецЕсли; + Уточнение = ТекущиеПоля.ПоляРегистра.ЗависимыеСписки.Получить(ЗависимыйСписок); + Если Уточнение = Неопределено Тогда + Уточнение = Новый Структура("ДляПользователей, ДляВнешнихПользователей", Ложь, Ложь); + ТекущиеПоля.ПоляРегистра.ЗависимыеСписки.Вставить(ЗависимыйСписок, Уточнение); + КонецЕсли; + Уточнение[ИмяСвойстваВидаПользователей] = Истина; + КонецЦикла; + + Возврат; + КонецЕсли; + + Для Каждого Поле Из ДобавляемыеПоля.ПоляШапки Цикл + ЗависимыеСписки = ТекущиеПоля.ПоляШапки.Получить(Поле); + Если ЗависимыеСписки = Неопределено Тогда + ЗависимыеСписки = Новый Соответствие; + ТекущиеПоля.ПоляШапки.Вставить(Поле, ЗависимыеСписки); + КонецЕсли; + Уточнение = ЗависимыеСписки.Получить(ЗависимыйСписок); + Если Уточнение = Неопределено Тогда + Уточнение = Новый Структура("ДляПользователей, ДляВнешнихПользователей", Ложь, Ложь); + ЗависимыеСписки.Вставить(ЗависимыйСписок, Уточнение); + КонецЕсли; + Уточнение[ИмяСвойстваВидаПользователей] = Истина; + КонецЦикла; + + Для Каждого ТабличнаяЧасть Из ДобавляемыеПоля.ТабличныеЧасти Цикл + ОписаниеТабличнойЧасти = ТекущиеПоля.ТабличныеЧасти.Получить(ТабличнаяЧасть.Ключ); + Если ОписаниеТабличнойЧасти = Неопределено Тогда + ОписаниеТабличнойЧасти = Новый Структура; + ОписаниеТабличнойЧасти.Вставить("Имя", ТабличнаяЧасть.Ключ); + ОписаниеТабличнойЧасти.Вставить("Поля", Новый Массив); + ОписаниеТабличнойЧасти.Вставить("ЗависимыеСписки", Новый Соответствие); + ТекущиеПоля.ТабличныеЧасти.Вставить(ТабличнаяЧасть.Ключ, ОписаниеТабличнойЧасти); + КонецЕсли; + Для Каждого Поле Из ТабличнаяЧасть.Значение Цикл + Если ОписаниеТабличнойЧасти.Поля.Найти(Поле) = Неопределено Тогда + ОписаниеТабличнойЧасти.Поля.Добавить(Поле); + КонецЕсли; + КонецЦикла; + Уточнение = ОписаниеТабличнойЧасти.ЗависимыеСписки.Получить(ЗависимыйСписок); + Если Уточнение = Неопределено Тогда + Уточнение = Новый Структура("ДляПользователей, ДляВнешнихПользователей", Ложь, Ложь); + ОписаниеТабличнойЧасти.ЗависимыеСписки.Вставить(ЗависимыйСписок, Уточнение); + КонецЕсли; + Уточнение[ИмяСвойстваВидаПользователей] = Истина; + КонецЦикла; + +КонецПроцедуры + +// Для функции ХранимыеПараметрыОграниченияДоступа. +Процедура ДобавитьУровеньЗависимости(УровниЗависимости, ИмяСвойстваВидаПользователей, ЗависимыйСписок, Уровень) + + ОписаниеУровняЗависимости = УровниЗависимости.Получить(ЗависимыйСписок); + Если ОписаниеУровняЗависимости = Неопределено Тогда + ОписаниеУровняЗависимости = Новый Структура("ДляПользователей, ДляВнешнихПользователей", 0, 0); + УровниЗависимости.Вставить(ЗависимыйСписок, ОписаниеУровняЗависимости); + КонецЕсли; + ОписаниеУровняЗависимости[ИмяСвойстваВидаПользователей] = Уровень; + +КонецПроцедуры + +// Для процедуры ДобавитьХранимыеПараметрыОграниченияДляВидаПользователей. +Процедура НастроитьПараметрыШаблонов(СвойстваСписка, ПараметрыШаблонов) + + Параметры = СвойстваСписка.Параметры; + Если Параметры.ДоступЗапрещен Тогда + Возврат; + КонецЕсли; + + Если Параметры.ОграничениеЧтенияОтключено Тогда + ПараметрыШаблонов.СпискиСОтключеннымОграничениемЧтения = + ПараметрыШаблонов.СпискиСОтключеннымОграничениемЧтения + + СвойстваСписка.ПолноеИмя + Символы.ПС; + Возврат; + КонецЕсли; + + Если Параметры.ПолеВладельца <> Неопределено Тогда + Поля = ":" + Параметры.ПолеВладельца.Имя; + + ИначеЕсли Параметры.ЭтоСсылочныйТип Тогда + Поля = ":"; + Иначе + ОпорныеПоля = Параметры.ОпорныеПоля; + Если ЗначениеЗаполнено(Параметры.ИмяОтдельногоРегистраКлючей) Тогда + Поля = "КлючиДоступаКРегистру" + СтрРазделить(СвойстваСписка.ПолноеИмя, ".")[1]; + Иначе + Поля = УправлениеДоступомСлужебныйПовтИсп.ОписаниеПредопределенногоИдентификатораОбъектаМетаданных( + СвойстваСписка.ПолноеИмя); + КонецЕсли; + Поля = ":[" + Поля + "]"; + Для Каждого ИмяПоля Из ОпорныеПоля.Все Цикл + Поля = Поля + ":" + ИмяПоля; + Если ОпорныеПоля.Используемые.Найти(ИмяПоля) = Неопределено Тогда + ПараметрыШаблонов.СпискиСОтключеннымОграничениемПоПолям = + ПараметрыШаблонов.СпискиСОтключеннымОграничениемПоПолям + + СвойстваСписка.ПолноеИмя + ":" + ИмяПоля + ";" + Символы.ПС; + КонецЕсли; + КонецЦикла; + НомерПустогоПоля = ОпорныеПоля.Все.Количество() + 1; + Для Номер = НомерПустогоПоля По ОпорныеПоля.МаксимальноДопустимоеКоличество Цикл + Поля = Поля + ":"; + КонецЦикла; + Для Номер = ОпорныеПоля.МаксимальноеКоличество + 1 По ОпорныеПоля.МаксимальноДопустимоеКоличество Цикл + ПараметрыШаблонов.СпискиССокращеннымНаборомПолейВРегистрахКлючей = + ПараметрыШаблонов.СпискиССокращеннымНаборомПолейВРегистрахКлючей + + СвойстваСписка.ПолноеИмя + ":Поле" + Номер + ";" + Символы.ПС; + КонецЦикла; + КонецЕсли; + + Если СвойстваСписка.КлючиДоступаПользователейИГруппДоступа Тогда + ИмяПараметра = "СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа"; + + ИначеЕсли СвойстваСписка.КлючиДоступаПользователей Тогда + ИмяПараметра = "СпискиСОграничениемЧерезКлючиДоступаПользователей"; + Иначе + ИмяПараметра = "СпискиСОграничениемЧерезКлючиДоступаГруппДоступа"; + КонецЕсли; + + ПараметрыШаблонов[ИмяПараметра] = ПараметрыШаблонов[ИмяПараметра] + + СвойстваСписка.ПолноеИмя + Поля + ";" + Символы.ПС; + +КонецПроцедуры + +// Для процедуры УстановитьВерсиюПараметров, и для функции ХранимыеПараметрыОграниченияДоступа. +Функция СтруктураХранимыхПараметровШаблонов(Значения = Неопределено) + + ХранимыеПараметрыШаблонов = Новый Структура; + ХранимыеПараметрыШаблонов.Вставить("ВерсияСтруктурыКэша", ВерсияСтруктурыКэша()); + ХранимыеПараметрыШаблонов.Вставить("ВерсииШаблонов", ВерсииШаблоновОграниченияДоступа()); + ХранимыеПараметрыШаблонов.Вставить("ПараметрыШаблонов", СтруктураПараметровШаблонов()); + + Если ТипЗнч(Значения) = Тип("ФиксированнаяСтруктура") + И ТипЗнч(Значения.ВерсияСтруктурыКэша) = Тип("Строка") + И ТипЗнч(Значения.ВерсииШаблонов) = Тип("Строка") + И ТипЗнч(Значения.ПараметрыШаблонов) = Тип("ФиксированнаяСтруктура") Тогда + + ЗаполнитьЗначенияСвойств(ХранимыеПараметрыШаблонов, Значения); + КонецЕсли; + + Возврат ХранимыеПараметрыШаблонов; + +КонецФункции + +// Для процедуры УстановитьВерсиюПараметров и для функций ХранимыеПараметрыОграниченияДоступа, +// СтруктураХранимыхПараметровШаблонов. +Функция СтруктураПараметровШаблонов(Значения = Неопределено) + + ПараметрыШаблонов = Новый Структура; + ПараметрыШаблонов.Вставить("СпискиСОграничениемЧерезКлючиДоступаГруппДоступа", ""); + ПараметрыШаблонов.Вставить("СпискиСОграничениемЧерезКлючиДоступаПользователей", ""); + ПараметрыШаблонов.Вставить("СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа", ""); + ПараметрыШаблонов.Вставить("СпискиСОтключеннымОграничениемПоПолям", ""); + ПараметрыШаблонов.Вставить("СпискиСОтключеннымОграничениемЧтения", ""); + ПараметрыШаблонов.Вставить("СпискиССокращеннымНаборомПолейВРегистрахКлючей", ""); + + Если ТипЗнч(Значения) <> Тип("ФиксированнаяСтруктура") + Или Значения.Количество() <> ПараметрыШаблонов.Количество() Тогда + + Возврат ПараметрыШаблонов; + КонецЕсли; + + Для Каждого КлючИЗначение Из ПараметрыШаблонов Цикл + Если Не Значения.Свойство(КлючИЗначение.Ключ) + Или Не ТипЗнч(Значения[КлючИЗначение.Ключ]) = ТипЗнч(КлючИЗначение.Значение) Тогда + Возврат ПараметрыШаблонов; + КонецЕсли; + КонецЦикла; + ЗаполнитьЗначенияСвойств(ПараметрыШаблонов, Значения); + + Возврат ПараметрыШаблонов; + +КонецФункции + +#КонецОбласти + +#Область ПараметрыОграниченияДоступаДляСпискаОтдельно + +// Основная функция области, возвращающая параметры ограничения доступа +// для вида пользователей списка без учета зависимости от других списков, +// как по ключам доступа, так и по наличию видов доступа Пользователи и ВнешниеПользователи. +// +Функция ПараметрыОграниченияПоСтруктуреОграничения(Список, СтруктураОграничения, + ДляВнешнихПользователей, ОбщийКонтекст, ДополнительныйКонтекст) + + ВедущиеСписки = Новый Структура; + // Списки с полями, от которых зависит ограничение доступа (для регистрации заданий обновления). + ВедущиеСписки.Вставить("ПоЗначениямПолей", Новый Соответствие); + // Списки от ключей доступа которых зависит ограничение доступа (для установки параметров сеанса и + // регистрации заданий обновления). + ВедущиеСписки.Вставить("ПоКлючамДоступа", Новый Соответствие); + // Списки значений доступа с группами, от которых зависит ограничение доступа (для регистрации заданий обновления). + ВедущиеСписки.Вставить("ПоЗначениямСГруппами", Новый Соответствие); + + Результат = Новый Структура; + // Полное имя таблицы объекта метаданных. + Результат.Вставить("Список", Список); + // Вид пользователей, для которых предназначены параметры. + Результат.Вставить("ДляВнешнихПользователей", ДляВнешнихПользователей); + // Хеш-сумма параметров ограничения доступа для отслеживания их изменения. + Результат.Вставить("Версия", ""); + // Списки с полями от которых зависит ограничение доступа. + Результат.Вставить("ВедущиеСписки", ВедущиеСписки); + // Истина, если текст ограничения "ГДЕ ЛОЖЬ", а также не указан для внешних пользователей. + Результат.Вставить("ДоступЗапрещен", ДляВнешнихПользователей); + // Истина, если текст ограничения не указан или указан, но ограничение отключено + // из-за отключения использования видов доступа, задействованных в нем. + Результат.Вставить("ОграничениеОтключено", Не ДляВнешнихПользователей); + // Истина, если текст ограничения чтения не указан или указан, но ограничение отключено + // из-за отключения использования видов доступа, задействованных в нем. + Результат.Вставить("ОграничениеЧтенияОтключено", Не ДляВнешнихПользователей); + + // Поле владельца, когда возможно ограничение только по объекту-владельцу. + Результат.Вставить("ПолеВладельца"); + // Признак оптимизации, указанный разработчиком рядом с текстом ограничения. + Результат.Вставить("ТребуетсяОграничениеПоВладельцу", Ложь); + + // Признак использования оптимизации, вычисленный на втором проходе графа. + Результат.Вставить("ИспользуетсяОграничениеПоВладельцу", Ложь); + // Признак расчета прав на ключи доступа для пользователей, а не для групп доступа, вычисленный на втором + // проходе графа. Имеет смысл только, когда признак ИспользуетсяОграничениеПоВладельцу = Ложь. + Результат.Вставить("РассчитыватьПраваПользователей", Ложь); + // Состав владельцев с разным расчетом прав (для пользователей и для групп пользователей) или Неопределено. + Результат.Вставить("ВладельцыСПравамиДля", Неопределено); + + // Признак наличия ведущих ключей доступа в ограничении. + Результат.Вставить("ЕстьВедущиеКлючиДоступа", Ложь); + // Признак наличия ведущих списков по правам в ограничении. + Результат.Вставить("ЕстьВедущиеСпискиПоПравам", Ложь); + + // Типы владельцев настроек прав, используемые при расчете прав на ключи доступа. + Результат.Вставить("ТипыВладельцевНастроекПрав", ОбщийКонтекст.ТипыВладельцевНастроекПрав); + // Идентификатор списка, если для него используются отдельные настройки прав или пустой идентификатор. + Результат.Вставить("ИдентификаторТаблицыНастроекПрав", Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка()); + // Признак наличия ограничения по владельцу настроек прав. + Результат.Вставить("ЕстьВладельцыНастроекПрав", Ложь); + // Описание типов значений доступа, которые используются в ограничении доступа. + Результат.Вставить("ИспользуемыеТипыЗначенийДоступа", Новый Массив); + + Результат.Вставить("ИмяОтдельногоРегистраКлючей", ""); // Для регистров. + Результат.Вставить("ОпорныеПоля"); // Для регистров. + + // Число, описывающее реквизиты, используемые в ключе. + Результат.Вставить("СоставПолей"); + + // Установлено, если ограничение чтения отличается от "ГДЕ ИСТИНА". + Результат.Вставить("ЕстьОграничениеЧтения", Ложь); + // Установлено, если ограничение изменения отличается от "ГДЕ ИСТИНА". + Результат.Вставить("ЕстьОграничениеИзменения", Ложь); + + // Установлено, если проверяются значения Пользователь или ГруппаПользователей + // или ВнешнийПользователь или ГруппаВнешнихПользователей + // для функций ЗначениеРазрешено или ЭтоАвторизованныйПользователь. + Результат.Вставить("ЕстьОграничениеПоПользователям", Ложь); + + + // Содержит структуру ограничения, приведенную к формату размещения значений в ключах доступа. + Результат.Вставить("СтруктураРасчетаПраваЧтение", Новый Структура); + Результат.Вставить("СтруктураРасчетаПраваИзменение", Новый Структура); + + ИмяКоллекцииТипа = ""; + Результат.Вставить("ЭтоСсылочныйТип", ЭтоСсылочныйТипТаблицы(Список, ИмяКоллекцииТипа)); + Результат.Вставить("СписокСДатой", + ИмяКоллекцииТипа = "Документы" + Или ИмяКоллекцииТипа = "БизнесПроцессы" + Или ИмяКоллекцииТипа = "Задачи"); + + Контекст = Новый Структура; + Результат.Вставить("Контекст", Контекст); + + Для Каждого КлючИЗначение Из ОбщийКонтекст Цикл + Контекст.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + КонецЦикла; + Для Каждого КлючИЗначение Из ДополнительныйКонтекст Цикл + Контекст.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + КонецЦикла; + + Контекст.Вставить("Список", Список); + Контекст.Вставить("ДляВнешнихПользователей", ДляВнешнихПользователей); + Контекст.Вставить("ЭтоСсылочныйТип", Результат.ЭтоСсылочныйТип); + Контекст.Вставить("СписокСДатой", Результат.СписокСДатой); + Контекст.Вставить("ИмяКоллекцииТипа", ИмяКоллекцииТипа); + Контекст.Вставить("СвойстваВерсии", Новый Массив); + + ДобавитьСвойствоВерсии(Контекст, Контекст, "Список"); + ДобавитьСвойствоВерсии(Контекст, Контекст, "ДляВнешнихПользователей"); + + ОписаниеОграничения = Контекст.ОписанияОграничений.Получить(Контекст.Список); + Если ОписаниеОграничения = Неопределено Тогда + ОписаниеОграничения = Новый Структура("Текст", ""); + КонецЕсли; + ДобавитьСвойствоВерсии(Контекст, ОписаниеОграничения, "Текст"); + + ДобавитьСвойствоВерсии(Контекст, Контекст, "ЭтоСсылочныйТип"); + ДобавитьСвойствоВерсии(Контекст, Контекст, "СписокСДатой"); + + // Опорные поля не требуется для ссылочных типов данных (всегда Ссылка). + ЗаполнитьНовоеОписаниеОпорныхПолей(Результат, Контекст); + + Свойства = СвойстваОграниченияСписка(Контекст.Список, Контекст, Ложь); + Если Свойства <> Неопределено Тогда + Результат.ИспользуетсяОграничениеПоВладельцу = Свойства.ПолеВладельца <> Неопределено; + Результат.РассчитыватьПраваПользователей = Свойства.РассчитыватьПраваПользователей; + Результат.ВладельцыСПравамиДля = Свойства.ВладельцыСПравамиДля; + КонецЕсли; + Контекст.Вставить("ИспользуетсяОграничениеПоВладельцу", Результат.ИспользуетсяОграничениеПоВладельцу); + Контекст.Вставить("РассчитыватьПраваПользователей", Результат.РассчитыватьПраваПользователей); + Контекст.Вставить("ВладельцыСПравамиДля", Результат.ВладельцыСПравамиДля); + + Если СтруктураОграничения = Неопределено Тогда + Возврат Результат; + КонецЕсли; + + Результат.ДоступЗапрещен = Ложь; + Результат.ОграничениеОтключено = Истина; + Результат.ОграничениеЧтенияОтключено = Истина; + + ЗаполнитьНаличиеОграниченияПоПравам(Контекст, Результат, СтруктураОграничения); + + Контекст.Вставить("СтруктураОграничения", СтруктураОграничения); + Контекст.Вставить("ВедущиеСпискиПоЗначениямПолей", Новый Соответствие); + Контекст.Вставить("ВедущиеСпискиПоКлючамДоступа", Новый Соответствие); + Контекст.Вставить("ВедущиеСпискиПоЗначениямСГруппами", Новый Соответствие); + Контекст.Вставить("ЕстьПроверкаАвторизованногоПользователя", Ложь); + Контекст.Вставить("НеиспользуемыеТипыЗначенийДоступа", Новый Массив); + + ЗаполнитьСвойстваПолей(Контекст); + ЗаполнитьОграничениеПоОбъектуВладельцу(Результат, Контекст); + ЗаполнитьНаличиеВедущихКлючейИСписковИВладельцевНастроекПрав(Результат, Контекст); + УдалитьПоляНеиспользуемыхВидовДоступа(Результат, Контекст); + ЗаполнитьНаличиеОграниченияПоВидуДоступаПользователи(Результат, Контекст); + ЗаполнитьНаличиеОграниченияЧтения(Результат, Контекст); + + Контекст.Вставить("ЕстьОграничениеПоПользователям", Результат.ЕстьОграничениеПоПользователям); + + Если Контекст.СпискиСЗаписьюКлючейДоступа = Неопределено Тогда + Результат.ИспользуетсяОграничениеПоВладельцу = Результат.ПолеВладельца <> Неопределено; + Результат.РассчитыватьПраваПользователей = Результат.ЕстьОграничениеПоПользователям; + + Контекст.Вставить("ИспользуетсяОграничениеПоВладельцу", Результат.ИспользуетсяОграничениеПоВладельцу); + Контекст.Вставить("РассчитыватьПраваПользователей", Результат.РассчитыватьПраваПользователей); + КонецЕсли; + ДобавитьСвойствоВерсии(Контекст, Контекст, "ИспользуетсяОграничениеПоВладельцу"); + ДобавитьСвойствоВерсии(Контекст, Контекст, "РассчитыватьПраваПользователей"); + + Если Результат.ВладельцыСПравамиДля = Неопределено Тогда + ДобавитьСвойствоВерсии(Контекст, Контекст, "ВладельцыСПравамиДля"); + Иначе + ДобавитьЭлементВерсии(Контекст, "ВладельцыСПравамиДля.Пользователей", + Контекст.ВладельцыСПравамиДля.Пользователей); + ДобавитьЭлементВерсии(Контекст, "ВладельцыСПравамиДля.ГруппДоступа", + Контекст.ВладельцыСПравамиДля.ГруппДоступа); + КонецЕсли; + + Контекст.Вставить("ГруппыПолей"); + Контекст.Вставить("ПсевдонимыТабличныхЧастейОбъекта"); + Контекст.Вставить("ГруппыДополнительныхТаблиц"); + Контекст.Вставить("КоличествоТабличныхЧастейКлюча"); + + ЗаполнитьГруппыПолейИДополнительныхТаблиц(Контекст); + + Если Контекст.СвойстваПолей.Количество() = 0 Тогда // Ограничение отключено. + Возврат Результат; + КонецЕсли; + + Результат.ОграничениеОтключено = Ложь; + + Результат.СоставПолей = Контекст.СоставПолей; + + Контекст.Вставить("ИмяПрава", "Чтение"); + ЗаполнитьСтруктуруРасчетаПрава(Результат.СтруктураРасчетаПраваЧтение, + СтруктураОграничения.ОграничениеЧтения, Контекст); + + Контекст.Вставить("ИмяПрава", "Изменение"); + ЗаполнитьСтруктуруРасчетаПрава(Результат.СтруктураРасчетаПраваИзменение, + СтруктураОграничения.ОграничениеИзменения, Контекст); + + Контекст.Удалить("ИмяПрава"); + + Если Не Контекст.ЭтоСсылочныйТип Тогда + Результат.ИмяОтдельногоРегистраКлючей = Контекст.ИмяОтдельногоРегистраКлючей; + КонецЕсли; + + ВедущиеСписки.ПоЗначениямПолей = Контекст.ВедущиеСпискиПоЗначениямПолей; + ВедущиеСписки.ПоКлючамДоступа = Контекст.ВедущиеСпискиПоКлючамДоступа; + ВедущиеСписки.ПоЗначениямСГруппами = Контекст.ВедущиеСпискиПоЗначениямСГруппами; + + ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.SHA256); + СтрокаСвойствВерсии = СтрСоединить(Контекст.СвойстваВерсии, Символы.ПС); + ХешированиеДанных.Добавить(СтрокаСвойствВерсии); + Результат.Версия = Base64Строка(ХешированиеДанных.ХешСумма); + + Возврат Результат; + +КонецФункции + +// Для процедуры УдалитьПоляНеиспользуемыхВидовДоступа и функции ГруппыДополнительныхТаблиц. +Процедура ДобавитьСвойстваВерсии(Контекст, Структура, ИменаПолей = "") + + Если ЗначениеЗаполнено(ИменаПолей) Тогда + СохраняемаяСтруктура = Новый Структура(ИменаПолей); + ЗаполнитьЗначенияСвойств(СохраняемаяСтруктура, Структура); + Иначе + СохраняемаяСтруктура = Структура; + КонецЕсли; + + СписокЗначений = Новый СписокЗначений; + Для Каждого КлючИЗначение Из СохраняемаяСтруктура Цикл + СписокЗначений.Добавить(КлючИЗначение.Значение, КлючИЗначение.Ключ) + КонецЦикла; + СписокЗначений.СортироватьПоПредставлению(); + + Для Каждого ЭлементСписка Из СписокЗначений Цикл + ДобавитьЭлементВерсии(Контекст, ЭлементСписка.Представление, ЭлементСписка.Значение); + КонецЦикла; + +КонецПроцедуры + +// Для процедуры ПараметрыОграниченияПоСтруктуреОграничения. +Процедура ДобавитьСвойствоВерсии(Контекст, Структура, ИмяПоля) + + ДобавитьЭлементВерсии(Контекст, ИмяПоля, Структура[ИмяПоля]); + +КонецПроцедуры + +// Для процедур ДобавитьСвойстваВерсии, ДобавитьСвойствоВерсии. +Процедура ДобавитьЭлементВерсии(Контекст, ИмяПоля, Значение) + + Если ТипЗнч(Значение) = Тип("Строка") Тогда + Контекст.СвойстваВерсии.Добавить(ИмяПоля + " = " + Значение); + + ИначеЕсли ТипЗнч(Значение) = Тип("Число") Тогда + + Контекст.СвойстваВерсии.Добавить(ИмяПоля + " = " + Формат(Значение, "ЧГ=")); + + ИначеЕсли ТипЗнч(Значение) = Тип("Булево") + Или ТипЗнч(Значение) = Тип("Неопределено") Тогда + + Контекст.СвойстваВерсии.Добавить(ИмяПоля + " = " + Строка(Значение)); + + ИначеЕсли ТипЗнч(Значение) = Тип("ФиксированныйМассив") Тогда + Контекст.СвойстваВерсии.Добавить(ИмяПоля + " = " + СтрокаДанныхДляХеширования(Новый Массив(Значение))); + + ИначеЕсли ТипЗнч(Значение) = Тип("ОписаниеТипов") + Или ТипЗнч(Значение) = Тип("Массив") Тогда + + Контекст.СвойстваВерсии.Добавить(ИмяПоля + " = " + СтрокаДанныхДляХеширования(Значение)); + Иначе + ТекстОшибки = НСтр("ru = 'Некорректный тип данных для версии ограничения доступа.'"); + ВызватьИсключение ТекстОшибки; + КонецЕсли; + +КонецПроцедуры + +// Для функции ПараметрыОграниченияПоСтруктуреОграничения и формы ОбновлениеДоступаРучноеУправление. +Функция ЭтоСсылочныйТипТаблицы(ПолноеИмя, ИмяКоллекцииТипа = "") Экспорт + + СинтаксисЯзыка = УправлениеДоступомСлужебныйПовтИсп.СинтаксисЯзыка(); + СоставИмени = СтрРазделить(ПолноеИмя, ".", Ложь); + + ТипТаблицы = СинтаксисЯзыка.ТипыТаблиц.ПоИменам.Получить(ВРег(СоставИмени[0])); + Если ТипТаблицы = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + ИмяКоллекцииТипа = ТипТаблицы.ИмяКоллекции; + + Возврат ТипТаблицы.ЭтоСсылочныйТип; + +КонецФункции + +// Для функции ПараметрыОграниченияПоСтруктуреОграничения. +Процедура ЗаполнитьНовоеОписаниеОпорныхПолей(Результат, Контекст) + + ОпорныеПоля = Новый Структура; + ОпорныеПоля.Вставить("Список", Новый СписокЗначений); + ОпорныеПоля.Вставить("Все", Новый Массив); + ОпорныеПоля.Вставить("ТипыВсех", Новый Массив); + ОпорныеПоля.Вставить("Используемые", Новый Массив); + ОпорныеПоля.Вставить("ТипыИспользуемых", Новый Массив); + ОпорныеПоля.Вставить("МаксимальноеКоличество", 0); + ОпорныеПоля.Вставить("МаксимальноДопустимоеКоличество", 0); + + Контекст.Вставить("ОпорныеПоля", ОпорныеПоля); + + Если Контекст.ЭтоСсылочныйТип Тогда + Возврат; + КонецЕсли; + + ИмяОтдельногоРегистраКлючей = "КлючиДоступаКРегистру" + СтрРазделить(Контекст.Список, ".")[1]; + Если Метаданные.РегистрыСведений.Найти(ИмяОтдельногоРегистраКлючей) = Неопределено Тогда + ИмяОтдельногоРегистраКлючей = ""; + КонецЕсли; + Контекст.Вставить("ИмяОтдельногоРегистраКлючей", ИмяОтдельногоРегистраКлючей); + + ОпорныеПоля.МаксимальноеКоличество = + УправлениеДоступомСлужебныйПовтИсп.КоличествоОпорныхПолейРегистра(ИмяОтдельногоРегистраКлючей); + + ОпорныеПоля.МаксимальноДопустимоеКоличество = + УправлениеДоступомСлужебныйПовтИсп.МаксимальноеКоличествоОпорныхПолейРегистра(); + + Если ОпорныеПоля.МаксимальноеКоличество > ОпорныеПоля.МаксимальноДопустимоеКоличество Тогда + // Превышение количества опорных полей в отдельном регистре. + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Количество опорных полей в регистре сведений %1 + |превышает максимально допустимое количество: %2'"), + ?(ИмяОтдельногоРегистраКлючей = "", "КлючиДоступаКРегистрам", ИмяОтдельногоРегистраКлючей), + ОпорныеПоля.МаксимальноДопустимоеКоличество); + + Если Контекст.Свойство("ОшибкаПриВызовеИсключения") Тогда + Контекст.ОшибкаПриВызовеИсключения.Текст = ТекстОшибки; + КонецЕсли; + ВызватьИсключение ТекстОшибки; + КонецЕсли; + + ДобавитьСвойствоВерсии(Контекст, ОпорныеПоля, "МаксимальноеКоличество"); + + Результат.ОпорныеПоля = Новый Структура("Все, ТипыВсех, Используемые, ТипыИспользуемых, + |МаксимальноеКоличество, МаксимальноДопустимоеКоличество"); + ЗаполнитьЗначенияСвойств(Результат.ОпорныеПоля, Контекст.ОпорныеПоля); + +КонецПроцедуры + +// Для функции ПараметрыОграниченияДоступа. +Процедура ЗаполнитьНаличиеОграниченияПоПравам(Контекст, Результат, СтруктураОграничения) + + Результат.ЕстьОграничениеЧтения = + ЗначениеЗаполнено(СтруктураОграничения.ОграничениеЧтения) + И ( СтруктураОграничения.ОграничениеЧтения.Узел <> "Константа" + Или СтруктураОграничения.ОграничениеЧтения.Значение <> Истина); + + Результат.ЕстьОграничениеИзменения = + ЗначениеЗаполнено(СтруктураОграничения.ОграничениеИзменения) + И ( СтруктураОграничения.ОграничениеИзменения.Узел <> "Константа" + Или СтруктураОграничения.ОграничениеИзменения.Значение <> Истина); + + ДобавитьСвойствоВерсии(Контекст, Результат, "ЕстьОграничениеЧтения"); + ДобавитьСвойствоВерсии(Контекст, Результат, "ЕстьОграничениеИзменения"); + +КонецПроцедуры + +// Для функции ПараметрыОграниченияДоступа. +Процедура ЗаполнитьОграничениеПоОбъектуВладельцу(Результат, Контекст) + + ОграничениеПоВладельцу = Контекст.СпискиСОграничениемПоВладельцу.Получить(Контекст.Список); + Если ТипЗнч(ОграничениеПоВладельцу) = Тип("Булево") И Не ОграничениеПоВладельцу Тогда + Возврат; + КонецЕсли; + + ТребуетсяОграничениеПоВладельцу = ?(ТипЗнч(ОграничениеПоВладельцу) = Тип("Булево"), + ОграничениеПоВладельцу, Ложь); + + Результат.ТребуетсяОграничениеПоВладельцу = ТребуетсяОграничениеПоВладельцу; + ПолеВладельца = Новый Структура("Имя, ИзменениеКакЧтение", "", Ложь); + + ОграничениеЧтения = Контекст.СтруктураОграничения.ОграничениеЧтения; + ОграничениеИзменения = Контекст.СтруктураОграничения.ОграничениеИзменения; + + Если Результат.ЕстьОграничениеЧтения Тогда + + Если ОграничениеЧтения.Узел <> "ЧтениеОбъектаРазрешено" Тогда + Если ТребуетсяОграничениеПоВладельцу Тогда + Если ЗначениеЗаполнено(ОграничениеИзменения) Тогда + ШаблонОшибки = + НСтр("ru = 'Установлен признак оптимизации ограничения %1, + |но указанное ограничение чтения изменения не представлено одной функцией ЧтениеОбъектаРазрешено.'"); + Иначе + ШаблонОшибки = + НСтр("ru = 'Установлен признак оптимизации ограничения %1, + |но указанное ограничение чтения не представлено одной функцией ЧтениеОбъектаРазрешено.'"); + КонецЕсли; + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, + "ПоВладельцуБезЗаписиКлючейДоступа" + ?(Контекст.ДляВнешнихПользователей, "ДляВнешнихПользователей", "")); + ТекстОшибки = ТекстОшибкиСЗаголовком(ТекстОшибки, Контекст); + Если Контекст.Свойство("ОшибкаПриВызовеИсключения") Тогда + Контекст.ОшибкаПриВызовеИсключения.Текст = ТекстОшибки; + КонецЕсли; + ВызватьИсключение ТекстОшибки; + Иначе + Возврат; + КонецЕсли; + КонецЕсли; + Если Не ФункцияБезУточненийТиповСПолемБезВложений(ОграничениеЧтения) Тогда + Если ТребуетсяОграничениеПоВладельцу Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Установлен признак оптимизации ограничения %1, + |но параметры функции ЧтениеОбъектаРазрешено не представлены + |только одним параметром - полем владельцем без других параметров.'"), + "ПоВладельцуБезЗаписиКлючейДоступа" + ?(Контекст.ДляВнешнихПользователей, "ДляВнешнихПользователей", "")); + ТекстОшибки = ТекстОшибкиСЗаголовком(ТекстОшибки, Контекст); + Если Контекст.Свойство("ОшибкаПриВызовеИсключения") Тогда + Контекст.ОшибкаПриВызовеИсключения.Текст = ТекстОшибки; + КонецЕсли; + ВызватьИсключение ТекстОшибки; + Иначе + Возврат; + КонецЕсли; + КонецЕсли; + ПолеВладельца.Имя = ОграничениеЧтения.Поле.Имя; + КонецЕсли; + + Если Результат.ЕстьОграничениеИзменения Тогда + + Если ОграничениеИзменения.Узел <> "ЧтениеОбъектаРазрешено" + И ОграничениеИзменения.Узел <> "ИзменениеОбъектаРазрешено" Тогда + + Если ТребуетсяОграничениеПоВладельцу Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Установлен признак оптимизации ограничения %1, + |но указанное ограничение изменения не представлено одной функцией + |ЧтениеОбъектаРазрешено или ИзменениеОбъектаРазрешено.'"), + "ПоВладельцуБезЗаписиКлючейДоступа" + ?(Контекст.ДляВнешнихПользователей, "ДляВнешнихПользователей", "")); + ТекстОшибки = ТекстОшибкиСЗаголовком(ТекстОшибки, Контекст); + Если Контекст.Свойство("ОшибкаПриВызовеИсключения") Тогда + Контекст.ОшибкаПриВызовеИсключения.Текст = ТекстОшибки; + КонецЕсли; + ВызватьИсключение ТекстОшибки; + Иначе + Возврат; + КонецЕсли; + КонецЕсли; + Если Не ФункцияБезУточненийТиповСПолемБезВложений(ОграничениеИзменения) Тогда + Если ТребуетсяОграничениеПоВладельцу Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Установлен признак оптимизации ограничения %1, + |но параметры функции %2 не представлены + |только одним параметром - полем владельцем без других параметров.'"), + "ПоВладельцуБезЗаписиКлючейДоступа" + ?(Контекст.ДляВнешнихПользователей, "ДляВнешнихПользователей", ""), + ОграничениеИзменения.Узел); + ТекстОшибки = ТекстОшибкиСЗаголовком(ТекстОшибки, Контекст); + Если Контекст.Свойство("ОшибкаПриВызовеИсключения") Тогда + Контекст.ОшибкаПриВызовеИсключения.Текст = ТекстОшибки; + КонецЕсли; + ВызватьИсключение ТекстОшибки; + Иначе + Возврат; + КонецЕсли; + КонецЕсли; + + Если ПолеВладельца.Имя = "" Тогда + ПолеВладельца.Имя = ОграничениеИзменения.Поле.Имя; + + ИначеЕсли ПолеВладельца.Имя <> ОграничениеИзменения.Поле.Имя Тогда + Если ТребуетсяОграничениеПоВладельцу Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Установлен признак оптимизации ограничения %1, + |но поле владельца не совпадает в ограничениях чтения и изменения.'"), + "ПоВладельцуБезЗаписиКлючейДоступа" + ?(Контекст.ДляВнешнихПользователей, "ДляВнешнихПользователей", ""), + ОграничениеИзменения.Узел); + ТекстОшибки = ТекстОшибкиСЗаголовком(ТекстОшибки, Контекст); + Если Контекст.Свойство("ОшибкаПриВызовеИсключения") Тогда + Контекст.ОшибкаПриВызовеИсключения.Текст = ТекстОшибки; + КонецЕсли; + ВызватьИсключение ТекстОшибки; + Иначе + Возврат; + КонецЕсли; + КонецЕсли; + ПолеВладельца.ИзменениеКакЧтение = + ОграничениеИзменения.Узел <> "ИзменениеОбъектаРазрешено"; + Иначе + ПолеВладельца.ИзменениеКакЧтение = Истина; + КонецЕсли; + + СвойстваПолей = Контекст.СвойстваПолей; + + Если СвойстваПолей.Количество() <> 1 Тогда + Если ТребуетсяОграничениеПоВладельцу И СвойстваПолей.Количество() <> 0 Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Установлен признак оптимизации ограничения %1, + |но количество полей, используемых в ограничении более одного.'"), + "ПоВладельцуБезЗаписиКлючейДоступа" + ?(Контекст.ДляВнешнихПользователей, "ДляВнешнихПользователей", "")); + ТекстОшибки = ТекстОшибкиСЗаголовком(ТекстОшибки, Контекст); + Если Контекст.Свойство("ОшибкаПриВызовеИсключения") Тогда + Контекст.ОшибкаПриВызовеИсключения.Текст = ТекстОшибки; + КонецЕсли; + ВызватьИсключение ТекстОшибки; + Иначе + Возврат; + КонецЕсли; + КонецЕсли; + + СвойстваПоля = СвойстваПолей[0]; + + Если СвойстваПоля.ТипКонечногоПоля.Типы().Количество() + <> СвойстваПоля.ТипыСохраненияКлючейДоступа.Количество() Тогда + + НекорректныеТипы = Новый Массив; + Для Каждого Тип Из СвойстваПоля.ТипКонечногоПоля.Типы() Цикл + Если СвойстваПоля.ТипыСохраненияКлючейДоступа.Найти(Тип) <> Неопределено Тогда + Продолжить; + КонецЕсли; + НекорректныеТипы.Добавить(ИмяТипаНаЯзыкеЗапросов(Тип)); + КонецЦикла; + Если ТребуетсяОграничениеПоВладельцу Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Установлен признак оптимизации ограничения %1, + |но для следующих типов невозможно записать ключи доступа: + |%2'"), + "ПоВладельцуБезЗаписиКлючейДоступа" + ?(Контекст.ДляВнешнихПользователей, "ДляВнешнихПользователей", ""), + СтрСоединить(НекорректныеТипы, Символы.ПС)); + ТекстОшибки = ТекстОшибкиСЗаголовком(ТекстОшибки, Контекст); + Если Контекст.Свойство("ОшибкаПриВызовеИсключения") Тогда + Контекст.ОшибкаПриВызовеИсключения.Текст = ТекстОшибки; + КонецЕсли; + ВызватьИсключение ТекстОшибки; + Иначе + Возврат; + КонецЕсли; + КонецЕсли; + + Результат.ПолеВладельца = ПолеВладельца; + + ДобавитьСвойствоВерсии(Контекст, ПолеВладельца, "ИзменениеКакЧтение"); + ДобавитьСвойствоВерсии(Контекст, ПолеВладельца, "Имя"); + +КонецПроцедуры + +// Для функции ЗаполнитьОграничениеПоОбъектуВладельцу и процедуры НастроитьОптимизациюПоПолюВладельцу. +Функция ТекстОшибкиСЗаголовком(ТекстОшибки, Контекст) + + ОписаниеОшибок = Новый Структура; + ОписаниеОшибок.Вставить("ЕстьОшибки", Истина); + ОписаниеОшибок.Вставить("Ошибки", Новый Массив(1)); + ОписаниеОшибок.Вставить("ТекстОшибок", ТекстОшибки); + ОписаниеОшибок.Вставить("Ограничение", ""); + ОписаниеОшибок.Вставить("Дополнение", ""); + + ОписаниеОграничения = Контекст.ОписанияОграничений.Получить(Контекст.Список); + + ОписаниеОшибок.Ограничение = + ПронумерованныйТекстОграниченияСОтметкамиОшибок(ОписаниеОграничения.Текст, + Новый Массив, СтрДлина(Формат(СтрЧислоСтрок(ОписаниеОграничения.Текст), "ЧГ="))); + + Возврат СокрЛП(ТекстОшибокДляВызоваИсключения(Контекст.Список, + ОписаниеОшибок, Контекст.ДляВнешнихПользователей, ОписаниеОграничения.ВМодулеМенеджера)); + +КонецФункции + +// Для процедуры ЗаполнитьОграничениеПоОбъектуВладельцу. +Функция ФункцияБезУточненийТиповСПолемБезВложений(Ограничение) + + Если Ограничение.Типы.Количество() <> 0 + Или Ограничение.УточненияСравнения.Количество() <> 0 Тогда + Возврат Ложь; + КонецЕсли; + + Поле = Ограничение.Поле; + + Возврат Не ЗначениеЗаполнено(Поле.Выразить) + И Не ЗначениеЗаполнено(Поле.Вложение) + И Не ЗначениеЗаполнено(Поле.ЕстьNull); + +КонецФункции + +// Для функции ПараметрыОграниченияДоступа. +Процедура ЗаполнитьНаличиеВедущихКлючейИСписковИВладельцевНастроекПрав(Результат, Контекст) + + Для Каждого СвойстваПоля Из Контекст.СвойстваПолей Цикл + Если СвойстваПоля.ТипыСохраненияКлючейДоступа.Количество() > 0 Тогда + Результат.ЕстьВедущиеКлючиДоступа = Истина; + КонецЕсли; + Если СвойстваПоля.ЕстьТипВедущегоСписка Тогда + Результат.ЕстьВедущиеСпискиПоПравам = Истина; + КонецЕсли; + Если СвойстваПоля.ЕстьТипВладельцаНастроекПрав Тогда + Результат.ЕстьВладельцыНастроекПрав = Истина; + КонецЕсли; + Если СвойстваПоля.ЕстьПроверкаАвторизованногоПользователя Тогда + Контекст.ЕстьПроверкаАвторизованногоПользователя = Истина; + КонецЕсли; + Для Каждого Тип Из СвойстваПоля.ИспользуемыеТипыЗначенийДоступа Цикл + Результат.ИспользуемыеТипыЗначенийДоступа.Добавить(Тип); + КонецЦикла; + Для Каждого Тип Из СвойстваПоля.НеиспользуемыеТипыЗначенийДоступа Цикл + Контекст.НеиспользуемыеТипыЗначенийДоступа.Добавить(Тип); + КонецЦикла; + КонецЦикла; + + Для Каждого КлючИЗначение Из Контекст.ОтдельныеТаблицыНастроекПрав Цикл + Если КлючИЗначение.Значение = Контекст.Список Тогда + Результат.ИдентификаторТаблицыНастроекПрав = КлючИЗначение.Ключ; + Прервать; + КонецЕсли; + КонецЦикла; + + ДобавитьСвойствоВерсии(Контекст, Результат, "ЕстьВедущиеКлючиДоступа"); + ДобавитьСвойствоВерсии(Контекст, Результат, "ЕстьВедущиеСпискиПоПравам"); + ДобавитьСвойствоВерсии(Контекст, Результат, "ЕстьВладельцыНастроекПрав"); + ДобавитьСвойствоВерсии(Контекст, Результат, "ИспользуемыеТипыЗначенийДоступа"); + ДобавитьСвойствоВерсии(Контекст, Контекст, "НеиспользуемыеТипыЗначенийДоступа"); + + СохраняемыеСвойства = Новый Структура("ОтдельнаяТаблицаНастроекПрав", + ЗначениеЗаполнено(Результат.ИдентификаторТаблицыНастроекПрав)); + + ДобавитьСвойствоВерсии(Контекст, СохраняемыеСвойства, "ОтдельнаяТаблицаНастроекПрав"); + +КонецПроцедуры + +// Для функции ПараметрыОграниченияДоступа. +Процедура УдалитьПоляНеиспользуемыхВидовДоступа(Результат, Контекст) + + СвойстваПолей = Контекст.СвойстваПолей; + + Если Не Результат.ЕстьВедущиеКлючиДоступа + И Не Результат.ЕстьВедущиеСпискиПоПравам + И Не Результат.ЕстьВладельцыНастроекПрав + И Не Контекст.ЕстьПроверкаАвторизованногоПользователя + И Результат.ИспользуемыеТипыЗначенийДоступа.Количество() = 0 + И Контекст.НеиспользуемыеТипыЗначенийДоступа.Количество() > 0 Тогда + + СвойстваПолей.Очистить(); + Возврат; + КонецЕсли; + + Индекс = СвойстваПолей.Количество(); + Пока Индекс > 0 Цикл + Индекс = Индекс - 1; + СвойстваПоля = СвойстваПолей.Получить(Индекс); + + Если СвойстваПоля.ТипКонечногоПоля.Типы().Количество() + = СвойстваПоля.НеиспользуемыеТипыЗначенийДоступа.Количество() Тогда + + СвойстваПолей.Удалить(Индекс); + Продолжить; + КонецЕсли; + УстановитьИспользованиеОпорногоПоля(Контекст.ОпорныеПоля, СвойстваПоля); + ДобавитьСвойстваВерсии(Контекст, СвойстваПоля, + "ЕстьУточнениеNull, + |ЕстьУточнениеНеопределено, + |ИмяПоляДляЗапроса, + |НесколькоГруппЗначений, + |ТипКонечногоПоля, + |ТипыСохраненияГруппЗначений, + |ТипыСохраненияЗначений, + |ТипыСохраненияКлючейДоступа, + |ТипыСохраненияПустойСсылки, + |ТипыСохраненияТипаРазрешенный, + |ТипыСохраненияТипаЗапрещенный, + |ТипыСохраненияТипов, + |ТипыСохраненияТиповКонфигурации, + |ТипыСохраненияТиповПростых, + |ТипыСохраненияТиповРасширений, + |ТипыСтрокой"); + КонецЦикла; + +КонецПроцедуры + +// Для функции ПараметрыОграниченияДоступа. +Процедура ЗаполнитьНаличиеОграниченияПоВидуДоступаПользователи(Результат, Контекст) + + Если Результат.ЕстьВладельцыНастроекПрав Тогда + Результат.ЕстьОграничениеПоПользователям = Истина; + Иначе + Для Каждого СвойстваПоля Из Контекст.СвойстваПолей Цикл + ОписаниеТипов = СвойстваПоля.ТипКонечногоПоля; + Если Не Результат.ДляВнешнихПользователей + И ( ОписаниеТипов.СодержитТип(Тип("СправочникСсылка.Пользователи")) + Или ОписаниеТипов.СодержитТип(Тип("СправочникСсылка.ГруппыПользователей")) ) Тогда + + Результат.ЕстьОграничениеПоПользователям = Истина; + Прервать; + КонецЕсли; + Если Результат.ДляВнешнихПользователей + И ( ОписаниеТипов.СодержитТип(Тип("СправочникСсылка.ВнешниеПользователи")) + Или ОписаниеТипов.СодержитТип(Тип("СправочникСсылка.ГруппыВнешнихПользователей")) ) Тогда + + Результат.ЕстьОграничениеПоПользователям = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + ДобавитьСвойствоВерсии(Контекст, Результат, "ЕстьОграничениеПоПользователям"); + +КонецПроцедуры + +// Для функции ПараметрыОграниченияДоступа. +Процедура ЗаполнитьНаличиеОграниченияЧтения(Результат, Контекст) + + Для Каждого СвойстваПоля Из Контекст.СвойстваПолей Цикл + Если СвойстваПоля.Чтение Тогда + Результат.ОграничениеЧтенияОтключено = Ложь; + Прервать; + КонецЕсли; + КонецЦикла; + + ДобавитьСвойствоВерсии(Контекст, Результат, "ОграничениеЧтенияОтключено"); + +КонецПроцедуры + +// Для функции ПараметрыОграниченияДоступа. +Процедура ЗаполнитьГруппыПолейИДополнительныхТаблиц(Контекст) + + // Поля шапки (начинаются от шапки - группировка по пустому псевдониму, если нет имени табличной части). + // Поля каждой ТЧ (начинаются от табличной части - группировка по имени табличной части). + // Поля группы связанных дополнительных таблиц (начинаются от экземпляра доп. таблицы - группировка + // по псевдониму, но если одна таблица ссылается на другую в соединении, тогда образуется группа таблиц). + + НомерПоследнегоРеквизитаШапкиСНесколькимиГруппамиЗначенийДоступа = 0; + НомерПоследнейТабличнойЧастиОбъекта = 0; + НомераТабличныхЧастейОбъекта = Новый Соответствие; + + Для Каждого СвойстваПоля Из Контекст.СвойстваПолей Цикл + Если СвойстваПоля.ПсевдонимТаблицы = "ТекущийСписок" + И СвойстваПоля.НесколькоГруппЗначений Тогда + + НомерПоследнегоРеквизитаШапкиСНесколькимиГруппамиЗначенийДоступа = + НомерПоследнегоРеквизитаШапкиСНесколькимиГруппамиЗначенийДоступа + 1; + + ИначеЕсли СвойстваПоля.ПсевдонимТаблицы <> "ТекущийСписок" + И СтрНачинаетсяС(СвойстваПоля.ПсевдонимТаблицы, "ТекущийСписок") + И НомераТабличныхЧастейОбъекта.Получить(СвойстваПоля.ПсевдонимТаблицы) = Неопределено Тогда + + НомерПоследнейТабличнойЧастиОбъекта = НомерПоследнейТабличнойЧастиОбъекта + 1; + НомераТабличныхЧастейОбъекта.Вставить(СвойстваПоля.ПсевдонимТаблицы, НомерПоследнейТабличнойЧастиОбъекта); + КонецЕсли; + КонецЦикла; + + РазмерностьКлючаДоступа = УправлениеДоступомСлужебныйПовтИсп.РазмерностьКлючаДоступа(); + + КоличествоТабличныхЧастейКлючаДляРеквизитовШапкиОбъекта = Цел( + (НомерПоследнегоРеквизитаШапкиСНесколькимиГруппамиЗначенийДоступа + + РазмерностьКлючаДоступа.КоличествоРеквизитовТабличнойЧасти - 1) + / РазмерностьКлючаДоступа.КоличествоРеквизитовТабличнойЧасти); + + ГруппыДополнительныхТаблиц = ГруппыДополнительныхТаблиц(Контекст); + КоличествоТабличныхЧастейКлюча = НомерПоследнейТабличнойЧастиОбъекта + + ГруппыДополнительныхТаблиц.ТаблицыПоГруппам.Количество() + + КоличествоТабличныхЧастейКлючаДляРеквизитовШапкиОбъекта; + + ЗавершитьПодготовкуОпорныхПолей(Контекст); + + Если КоличествоТабличныхЧастейКлюча > РазмерностьКлючаДоступа.КоличествоТабличныхЧастей Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В ограничении доступа списка %1 + |количество полей, требующих отдельных табличных частей в ключе доступа, + |более, чем количество доступных табличных частей в ключе доступа. + | + |К таким полям относятся: + |- поля табличных частей, + |- поля дополнительных таблиц, присоединенных к списку, + |- поля шапки, у которых значение доступа может иметь более одной группы значений доступа.'"), + Контекст.Список); + + Если Контекст.Свойство("ОшибкаПриВызовеИсключения") Тогда + Контекст.ОшибкаПриВызовеИсключения.Текст = ТекстОшибки; + КонецЕсли; + ВызватьИсключение ТекстОшибки; + КонецЕсли; + + Если Не Контекст.ЭтоСсылочныйТип + И Контекст.ОпорныеПоля.Все.Количество() > Контекст.ОпорныеПоля.МаксимальноеКоличество Тогда + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В ограничении доступа списка %1 + |количество полей списка, используемых в ограничении доступа, + |превышает максимально допустимое количество опорных полей: %2.'"), + Контекст.Список, + Контекст.ОпорныеПоля.МаксимальноеКоличество); + + Если Контекст.Свойство("ОшибкаПриВызовеИсключения") Тогда + Контекст.ОшибкаПриВызовеИсключения.Текст = ТекстОшибки; + КонецЕсли; + ВызватьИсключение ТекстОшибки; + КонецЕсли; + + ГруппыПолей = Новый Соответствие; + ПсевдонимыТабличныхЧастейОбъекта = Новый Соответствие; + НомерПоследнегоРеквизитаШапки = 0; + НомерПоследнегоРеквизитаШапкиСНесколькимиГруппамиЗначенийДоступа = 0; + + Для Каждого СвойстваПоля Из Контекст.СвойстваПолей Цикл + Если СвойстваПоля.ПсевдонимТаблицы = "ТекущийСписок" Тогда + + Если СвойстваПоля.НесколькоГруппЗначений Тогда + НомерПоследнегоРеквизитаШапкиСНесколькимиГруппамиЗначенийДоступа = + НомерПоследнегоРеквизитаШапкиСНесколькимиГруппамиЗначенийДоступа + 1; + + НомерТабличнойЧастиКлюча = Цел(НомерПоследнегоРеквизитаШапкиСНесколькимиГруппамиЗначенийДоступа + / РазмерностьКлючаДоступа.КоличествоРеквизитовТабличнойЧасти) + 1; + + ИмяГруппыПолей = "ТабличнаяЧасть" + НомерТабличнойЧастиКлюча; + Иначе + НомерПоследнегоРеквизитаШапки = НомерПоследнегоРеквизитаШапки + 1; + Если НомерПоследнегоРеквизитаШапки < 6 Тогда + ИмяГруппыПолей = "Шапка0"; + ИначеЕсли НомерПоследнегоРеквизитаШапки < 11 Тогда + ИмяГруппыПолей = "Шапка1"; + ИначеЕсли НомерПоследнегоРеквизитаШапки < 16 Тогда + ИмяГруппыПолей = "Шапка2"; + Иначе + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В ограничении доступа списка %1 + |количество полей списка, используемых в ограничении доступа, + |превышает максимально допустимое количество: 15.'"), + Контекст.Список); + Если Контекст.Свойство("ОшибкаПриВызовеИсключения") Тогда + Контекст.ОшибкаПриВызовеИсключения.Текст = ТекстОшибки; + КонецЕсли; + ВызватьИсключение ТекстОшибки; + КонецЕсли; + КонецЕсли; + Иначе + Если СвойстваПоля.ПсевдонимТаблицы <> "ТекущийСписок" + И СтрНачинаетсяС(СвойстваПоля.ПсевдонимТаблицы, "ТекущийСписок") Тогда + + НомерТабличнойЧастиКлюча = КоличествоТабличныхЧастейКлючаДляРеквизитовШапкиОбъекта + + НомераТабличныхЧастейОбъекта.Получить(СвойстваПоля.ПсевдонимТаблицы); + + Если ПсевдонимыТабличныхЧастейОбъекта.Получить(НомерТабличнойЧастиКлюча) = Неопределено Тогда + ПсевдонимыТабличныхЧастейОбъекта.Вставить(НомерТабличнойЧастиКлюча, СвойстваПоля.ПсевдонимТаблицы) + КонецЕсли; + Иначе + НомерТабличнойЧастиКлюча = КоличествоТабличныхЧастейКлючаДляРеквизитовШапкиОбъекта + + НомераТабличныхЧастейОбъекта.Количество() + + ГруппыДополнительныхТаблиц.НомераПоПсевдонимам.Получить(СвойстваПоля.ПсевдонимТаблицы); + КонецЕсли; + ИмяГруппыПолей = "ТабличнаяЧасть" + НомерТабличнойЧастиКлюча; + КонецЕсли; + ГруппаПолей = ГруппыПолей.Получить(ИмяГруппыПолей); + Если ГруппаПолей = Неопределено Тогда + ГруппаПолей = Новый Массив; + ГруппыПолей.Вставить(ИмяГруппыПолей, ГруппаПолей); + КонецЕсли; + ГруппаПолей.Добавить(СвойстваПоля); + СвойстваПоля.Вставить("ИмяГруппыПолейКлючаДоступа", ИмяГруппыПолей); + СвойстваПоля.Вставить("ИмяРеквизитаГруппыПолейКлючаДоступа", "Значение" + Строка( + ГруппаПолей.Количество() + ?(ИмяГруппыПолей = "Шапка1" Или ИмяГруппыПолей = "Шапка2", 5, 0))); + + Если Не СтрНачинаетсяС(ИмяГруппыПолей, "Шапка") + И ГруппаПолей.Количество() > РазмерностьКлючаДоступа.КоличествоРеквизитовТабличнойЧасти Тогда + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В ограничении доступа списка %1 + |количество полей одной табличной части, используемых в ограничении доступа, + |превышает максимально допустимое количество: %2.'"), + Контекст.Список, + РазмерностьКлючаДоступа.КоличествоРеквизитовТабличнойЧасти); + + Если Контекст.Свойство("ОшибкаПриВызовеИсключения") Тогда + Контекст.ОшибкаПриВызовеИсключения.Текст = ТекстОшибки; + КонецЕсли; + ВызватьИсключение ТекстОшибки; + КонецЕсли; + КонецЦикла; + + Контекст.Вставить("ГруппыПолей", ГруппыПолей); + Контекст.Вставить("ПсевдонимыТабличныхЧастейОбъекта", ПсевдонимыТабличныхЧастейОбъекта); + Контекст.Вставить("ГруппыДополнительныхТаблиц", ГруппыДополнительныхТаблиц); + Контекст.Вставить("КоличествоТабличныхЧастейКлюча", КоличествоТабличныхЧастейКлюча); + + // Расчет числа СоставПолей. + + // Шапка и табличные части: ТЧ4 ТЧ3 ТЧ2 ТЧ1 Ш. + // Двоичный формат: 0000 0000 0000 0000 0000. + // Шестнадцатеричный формат: x0 x0 x0 x0 x0. + // + // Например: Ш0=1, ТЧ1=1. + // Двоичный формат: 0000 0000 0000 0001 0001. + // Шестнадцатеричный формат: x0 x0 x0 x1 x1. + // Число = 1*16^0 + 1*16^1 = 1 + 16 = 17. + + СоставПолей = НомерПоследнегоРеквизитаШапки; + + Для НомерТабличнойЧастиКлюча = 1 По КоличествоТабличныхЧастейКлюча Цикл + ИмяТабличнойЧастиКлюча = "ТабличнаяЧасть" + НомерТабличнойЧастиКлюча; + ГруппаПолей = ГруппыПолей.Получить(ИмяТабличнойЧастиКлюча); + СоставПолей = СоставПолей + ГруппаПолей.Количество() * Степень16(НомерТабличнойЧастиКлюча); + КонецЦикла; + + Контекст.Вставить("СоставПолей", СоставПолей); + +КонецПроцедуры + +// Для функции ПараметрыОграниченияДоступа. +Процедура ЗаполнитьСтруктуруРасчетаПрава(УсловиеРасчета, Условие, Контекст, КореньУсловия = Истина) + + Если Не ЗначениеЗаполнено(Условие) Тогда + Возврат; + КонецЕсли; + + Если КореньУсловия Тогда + Контекст.Вставить("ТребуемыеРеквизитыТабличныхЧастейКлюча", Новый Соответствие); + Контекст.Вставить("СтруктураРасчетаПраваСвойстваВерсии", Новый Массив); + КонецЕсли; + + СвойстваПоля = Неопределено; + ДобавитьСвойствоВерсииСтруктурыРасчета(Контекст, "Узел", Условие.Узел); + + Если Условие.Узел = "Поле" Тогда + СвойстваПоля = Контекст.СвойстваПолейКлючаДоступа.Получить(Условие); + + ИначеЕсли Условие.Узел = "И" + Или Условие.Узел = "Или" Тогда + + УсловиеРасчета = Новый Структура("Узел, Аргументы", Условие.Узел, Новый Массив); + Индекс = 0; + Для Каждого Аргумент Из Условие.Аргументы Цикл + УсловиеРасчета.Аргументы.Добавить(Неопределено); + ЗаполнитьСтруктуруРасчетаПрава(УсловиеРасчета.Аргументы[Индекс], Аргумент, Контекст, Ложь); + Индекс = Индекс + 1; + КонецЦикла; + СвойстваПоля = Null; + + ИначеЕсли Условие.Узел = "Не" Тогда + УсловиеРасчета = Новый Структура("Узел, Аргумент", Условие.Узел, Неопределено); + ЗаполнитьСтруктуруРасчетаПрава(УсловиеРасчета.Аргумент, Условие.Аргумент, Контекст, Ложь); + СвойстваПоля = Null; + + ИначеЕсли Условие.Узел = "ДляВсехСтрок" + Или Условие.Узел = "ДляОднойИзСтрок" Тогда + + Если Не КореньУсловия Тогда + ТребуемыеРеквизитыТабличныхЧастейКлюча = Контекст.ТребуемыеРеквизитыТабличныхЧастейКлюча; + Контекст.Вставить("ТребуемыеРеквизитыТабличныхЧастейКлюча", Новый Соответствие); + КонецЕсли; + + УсловиеРасчета = Новый Структура("Узел, Аргумент", Условие.Узел, Неопределено); + ЗаполнитьСтруктуруРасчетаПрава(УсловиеРасчета.Аргумент, Условие.Аргумент, Контекст, Ложь); + + Если Не КореньУсловия Тогда + УсловиеРасчета.Вставить("ТребуемыеРеквизитыТабличныхЧастейКлюча", Контекст.ТребуемыеРеквизитыТабличныхЧастейКлюча); + Контекст.Вставить("ТребуемыеРеквизитыТабличныхЧастейКлюча", ТребуемыеРеквизитыТабличныхЧастейКлюча); + КонецЕсли; + СвойстваПоля = Null; + + ИначеЕсли Условие.Узел = "ЕстьNull" Тогда + СвойстваПоля = Контекст.СвойстваПолейКлючаДоступа.Получить(Условие.Аргумент); + + ИначеЕсли Условие.Узел = "=" + Или Условие.Узел = "<>" Тогда + + СвойстваПоля = Контекст.СвойстваПолейКлючаДоступа.Получить(Условие.ПервыйАргумент); + Если СвойстваПоля = Неопределено Тогда + СвойстваПоля = Контекст.СвойстваПолейКлючаДоступа.Получить(Условие.ВторойАргумент); + КонецЕсли; + + ИначеЕсли Условие.Узел = "В" Тогда + СвойстваПоля = Контекст.СвойстваПолейКлючаДоступа.Получить(Условие.Искомое); + + ИначеЕсли Условие.Узел = "Выбор" Тогда + УсловиеРасчета = Новый Структура("Узел, Когда, Иначе", Условие.Узел, Новый Массив, Неопределено); + Для Каждого Когда Из Условие.Когда Цикл + СтруктураКогда = Новый Структура("Условие, Значение"); + УсловиеРасчета.Когда.Добавить(СтруктураКогда); + Если Условие.Выбор = Неопределено Тогда + ЗаполнитьСтруктуруРасчетаПрава(СтруктураКогда.Условие, Когда.Условие, Контекст, Ложь); + Иначе + Свойства = Контекст.СвойстваПолейКлючаДоступа.Получить(Когда.Условие); + ДобавитьСвойствоВерсииСтруктурыРасчета(Контекст, "Узел", "Поле"); + УсловиеРасчетаПоле(СтруктураКогда.Условие, Свойства, Контекст); + КонецЕсли; + ЗаполнитьСтруктуруРасчетаПрава(СтруктураКогда.Значение, Когда.Значение, Контекст, Ложь); + КонецЦикла; + ЗаполнитьСтруктуруРасчетаПрава(УсловиеРасчета.Иначе, Условие.Иначе, Контекст, Ложь); + СвойстваПоля = Null; + + ИначеЕсли Условие.Узел = "ЗначениеРазрешено" + Или Условие.Узел = "ЭтоАвторизованныйПользователь" + Или Условие.Узел = "ЧтениеОбъектаРазрешено" + Или Условие.Узел = "ИзменениеОбъектаРазрешено" + Или Условие.Узел = "ЧтениеСпискаРазрешено" + Или Условие.Узел = "ИзменениеСпискаРазрешено" Тогда + + УсловиеРасчета = Новый Структура("Узел, Поле", Условие.Узел, Неопределено); + УсловиеРасчета.Вставить("УточненияСравнения", Новый Соответствие); + Для Каждого КлючИЗначение Из Условие.УточненияСравнения Цикл + Если КлючИЗначение.Ключ = "Null" + Или КлючИЗначение.Ключ = "Неопределено" + Или КлючИЗначение.Ключ = "ПустаяСсылка" + Или КлючИЗначение.Ключ = "Отключено" Тогда + УсловиеРасчета.УточненияСравнения.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + Иначе + ИмяТипа = СтрЗаменить(КлючИЗначение.Ключ, ".", "Ссылка."); + УсловиеРасчета.УточненияСравнения.Вставить(Тип(ИмяТипа), КлючИЗначение.Значение); + КонецЕсли; + КонецЦикла; + ДобавитьСвойствоВерсииСтруктурыРасчета(Контекст, "УточненияСравнения", Условие.УточненияСравнения); + ЗаполнитьСтруктуруРасчетаПрава(УсловиеРасчета.Поле, Условие.Поле, Контекст, Ложь); + + Если УсловиеРасчета.Поле = Null Тогда + УсловиеРасчета = Новый Структура("Узел, Значение", "Константа", Истина); + КонецЕсли; + СвойстваПоля = Null; + + ИначеЕсли Условие.Узел = "Константа" Тогда + УсловиеРасчета = Новый Структура("Узел, Значение", Условие.Узел, Условие.Значение); + ДобавитьСвойствоВерсииСтруктурыРасчета(Контекст, "Значение", Условие.Значение); + СвойстваПоля = Null; + Иначе + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При заполнении структуры расчета права %1 на ключи доступа + |списка ""%2"" + |узел не поддерживается ""%3"".'"), + Контекст.ИмяПрава, + Контекст.Список, + Условие.Узел); + ВызватьИсключение ТекстОшибки; + КонецЕсли; + + Если СвойстваПоля = Неопределено Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При заполнении структуры расчета права %1 на ключи доступа + |списка ""%2"" + |свойства поля не определены для узла ""%3"".'"), + Контекст.ИмяПрава, + Контекст.Список, + Условие.Узел); + ВызватьИсключение ТекстОшибки; + КонецЕсли; + + Если СвойстваПоля <> Null Тогда + УсловиеРасчетаПоле(УсловиеРасчета, СвойстваПоля, Контекст); + КонецЕсли; + + Если КореньУсловия Тогда + УсловиеРасчета.Вставить("ТребуемыеРеквизитыТабличныхЧастейКлюча", + Контекст.ТребуемыеРеквизитыТабличныхЧастейКлюча); + + ДобавитьЭлементВерсии(Контекст, "СтруктураРасчетаПрава" + Контекст.ИмяПрава, + Контекст.СтруктураРасчетаПраваСвойстваВерсии); + + Контекст.Удалить("СтруктураРасчетаПраваСвойстваВерсии"); + КонецЕсли; + +КонецПроцедуры + +// Для процедуры ЗаполнитьСтруктуруРасчетаПрава. +Процедура УсловиеРасчетаПоле(УсловиеРасчета, СвойстваПоля, Контекст) + + Если Контекст.СвойстваПолей.Найти(СвойстваПоля) = Неопределено Тогда + УсловиеРасчета = Null; // Поле удалено из-за неиспользуемых типов значений доступа. + Иначе + УсловиеРасчета = Новый Структура("Узел", "Поле"); + УсловиеРасчета.Вставить("Таблица", СвойстваПоля.ИмяГруппыПолейКлючаДоступа); + УсловиеРасчета.Вставить("Реквизит", СвойстваПоля.ИмяРеквизитаГруппыПолейКлючаДоступа); + Если СтрНачинаетсяС(УсловиеРасчета.Таблица, "ТабличнаяЧасть") Тогда + Реквизиты = Контекст.ТребуемыеРеквизитыТабличныхЧастейКлюча.Получить(УсловиеРасчета.Таблица); + Если Реквизиты = Неопределено Тогда + Реквизиты = Новый Массив; + Контекст.ТребуемыеРеквизитыТабличныхЧастейКлюча.Вставить(УсловиеРасчета.Таблица, Реквизиты); + КонецЕсли; + Если Реквизиты.Найти(УсловиеРасчета.Реквизит) = Неопределено Тогда + Реквизиты.Добавить(УсловиеРасчета.Реквизит); + КонецЕсли; + КонецЕсли; + ДобавитьСвойствоВерсииСтруктурыРасчета(Контекст, "Таблица", УсловиеРасчета.Таблица); + ДобавитьСвойствоВерсииСтруктурыРасчета(Контекст, "Реквизит", УсловиеРасчета.Реквизит); + Если СвойстваПоля.Свойство("ПроверкаЕстьNull") Тогда + УсловиеРасчета.Вставить("ПроверкаЕстьNull"); + ДобавитьСвойствоВерсииСтруктурыРасчета(Контекст, "ПроверкаЕстьNull", Истина); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Для процедур ЗаполнитьСтруктуруРасчетаПрава, УсловиеРасчетаПоле. +Процедура ДобавитьСвойствоВерсииСтруктурыРасчета(Контекст, Имя, Значение); + + Если ТипЗнч(Значение) = Тип("Соответствие") Тогда + СписокЗначений = Новый СписокЗначений; + Для Каждого КлючИЗначение Из Значение Цикл + СписокЗначений.Добавить(КлючИЗначение.Значение, КлючИЗначение.Ключ); + КонецЦикла; + СписокЗначений.СортироватьПоПредставлению(); + Для Каждого ЭлементСписка Из СписокЗначений Цикл + Контекст.СтруктураРасчетаПраваСвойстваВерсии.Добавить(ЭлементСписка.Представление); + Контекст.СтруктураРасчетаПраваСвойстваВерсии.Добавить(ЭлементСписка.Значение); + КонецЦикла; + Иначе + Контекст.СтруктураРасчетаПраваСвойстваВерсии.Добавить(Имя); + Контекст.СтруктураРасчетаПраваСвойстваВерсии.Добавить(Значение); + КонецЕсли; + +КонецПроцедуры + +// Для процедуры ЗаполнитьГруппыПолейИДополнительныхТаблиц. +Функция Степень16(Степень) + + Степень16 = 1; + + Для Счетчик = 1 По Степень Цикл + Степень16 = Степень16 * 16; + КонецЦикла; + + Возврат Степень16; + +КонецФункции + +// Для функции ЗаполнитьГруппыПолейИДополнительныхТаблиц. +Функция ГруппыДополнительныхТаблиц(Контекст) + + ДополнительныеТаблицы = Контекст.СтруктураОграничения.ДополнительныеТаблицы; + НомераГруппПоПсевдонимам = Новый Соответствие; + + ОпорныеПоля = Контекст.ОпорныеПоля; + ОпорныеПоля.Вставить("ПоДополнительнымТаблицам", Новый Соответствие); + + Контекст.Вставить("ПоляУсловияСоединенияДополнительныхТаблиц", Новый Массив); + + ПоследняяГруппа = 0; + Для Каждого ДополнительнаяТаблица Из ДополнительныеТаблицы Цикл + ДополнительнаяТаблица.Вставить("ПсевдонимыТребуемыхТаблиц", Новый Массив); + ДополнительнаяТаблица.Вставить("ПолеПроверкиСоединения", ""); + + ТекстУсловияСоединения = ТекстУсловияСоединения(ДополнительнаяТаблица, Контекст); + ДополнительнаяТаблица.Вставить("ТекстУсловияСоединения", ?(Лев(ТекстУсловияСоединения, 1) = "(", + ТекстУсловияСоединения, "(" + ТекстУсловияСоединения + ")")); + + Если Не ЗначениеЗаполнено(ДополнительнаяТаблица.ПолеПроверкиСоединения) Тогда + ПоляКлючаДоступа = Контекст.СтруктураОграничения.ВнутренниеДанные.ПоляКлючаДоступа; + Для Каждого ОписаниеПоля Из ПоляКлючаДоступа Цикл + Если ОписаниеПоля.Поле.Псевдоним = ДополнительнаяТаблица.Псевдоним Тогда + ДополнительнаяТаблица.ПолеПроверкиСоединения = + ДополнительнаяТаблица.Псевдоним + "." + ОписаниеПоля.Поле.Имя; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + ТекущаяГруппа = НомераГруппПоПсевдонимам.Получить(ДополнительнаяТаблица.Псевдоним); + Если ТекущаяГруппа = Неопределено Тогда + ПоследняяГруппа = ПоследняяГруппа + 1; + ТекущаяГруппа = ПоследняяГруппа; + НомераГруппПоПсевдонимам.Вставить(ДополнительнаяТаблица.Псевдоним, ТекущаяГруппа); + КонецЕсли; + + Для Каждого Псевдоним Из ДополнительнаяТаблица.ПсевдонимыТребуемыхТаблиц Цикл + ГруппаТребуемойТаблицы = НомераГруппПоПсевдонимам.Получить(Псевдоним); + Если ГруппаТребуемойТаблицы = Неопределено Тогда + НомераГруппПоПсевдонимам.Вставить(Псевдоним, ТекущаяГруппа); + Продолжить; + КонецЕсли; + Если ГруппаТребуемойТаблицы = ТекущаяГруппа Тогда + Продолжить; + КонецЕсли; + ПсевдонимыЗаменяемойГруппы = Новый Массив; + Для Каждого КлючИЗначение Из НомераГруппПоПсевдонимам Цикл + Если КлючИЗначение.Значение <> ГруппаТребуемойТаблицы Тогда + Продолжить; + КонецЕсли; + ПсевдонимыЗаменяемойГруппы.Добавить(КлючИЗначение.Ключ); + КонецЦикла; + Для Каждого Псевдоним Из ПсевдонимыЗаменяемойГруппы Цикл + НомераГруппПоПсевдонимам.Вставить(Псевдоним, ТекущаяГруппа); + КонецЦикла; + КонецЦикла; + КонецЦикла; + + ПсевдонимыТаблицСПолями = Новый Соответствие; + Для Каждого СвойстваПоля Из Контекст.СвойстваПолей Цикл + Если СвойстваПоля.ПсевдонимТаблицы = "ТекущийСписок" Тогда + Продолжить; + КонецЕсли; + ПсевдонимыТаблицСПолями.Вставить(СвойстваПоля.ПсевдонимТаблицы, Истина); + КонецЦикла; + + ИспользованиеГрупп = Новый Соответствие; + Для Группа = 1 По ПоследняяГруппа Цикл + Для Каждого КлючИЗначение Из НомераГруппПоПсевдонимам Цикл + Если КлючИЗначение.Значение <> Группа Тогда + Продолжить; + КонецЕсли; + Если ИспользованиеГрупп.Получить(Группа) = Неопределено Тогда + ИспользованиеГрупп.Вставить(Группа, Ложь); + КонецЕсли; + Если ПсевдонимыТаблицСПолями.Получить(КлючИЗначение.Ключ) <> Неопределено Тогда + ИспользованиеГрупп.Вставить(Группа, Истина); + КонецЕсли; + КонецЦикла; + КонецЦикла; + + НоваяГруппа = 1; + НовыеГруппы = Новый Соответствие; + Для Каждого ДополнительнаяТаблица Из ДополнительныеТаблицы Цикл + СтараяГруппа = НомераГруппПоПсевдонимам.Получить(ДополнительнаяТаблица.Псевдоним); + Если Не ИспользованиеГрупп.Получить(СтараяГруппа) Тогда + Продолжить; + КонецЕсли; + Если НовыеГруппы.Получить(СтараяГруппа) <> Неопределено Тогда + Продолжить; + КонецЕсли; + НовыеГруппы.Вставить(СтараяГруппа, НоваяГруппа); + НоваяГруппа = НоваяГруппа + 1; + КонецЦикла; + + Группы = Новый Структура; + Группы.Вставить("НомераПоПсевдонимам", Новый Соответствие); + Группы.Вставить("ТаблицыПоГруппам", Новый Соответствие); + Группы.Вставить("ПсевдонимыТаблицСПолями", ПсевдонимыТаблицСПолями); + + Для Каждого ДополнительнаяТаблица Из ДополнительныеТаблицы Цикл + СтараяГруппа = НомераГруппПоПсевдонимам.Получить(ДополнительнаяТаблица.Псевдоним); + Если Не ИспользованиеГрупп.Получить(СтараяГруппа) Тогда + Продолжить; + КонецЕсли; + УстановитьИспользованиеОпорногоПоля(ОпорныеПоля, , ДополнительнаяТаблица); + Группа = НовыеГруппы.Получить(СтараяГруппа); + Группы.НомераПоПсевдонимам.Вставить(ДополнительнаяТаблица.Псевдоним, Группа); + ГруппаТаблиц = Группы.ТаблицыПоГруппам.Получить(Группа); + Если ГруппаТаблиц = Неопределено Тогда + ГруппаТаблиц = Новый Массив; + Группы.ТаблицыПоГруппам.Вставить(Группа, ГруппаТаблиц); + КонецЕсли; + ГруппаТаблиц.Добавить(ДополнительнаяТаблица); + КонецЦикла; + + Для Каждого УзелПоле Из Контекст.ПоляУсловияСоединенияДополнительныхТаблиц Цикл + Если ПсевдонимыТаблицСПолями.Получить(УзелПоле.Псевдоним) <> Неопределено Тогда + ДобавитьВедущиеСпискиПоЗначениямПолей(Контекст, УзелПоле); + КонецЕсли; + Если Группы.НомераПоПсевдонимам.Получить(УзелПоле.Псевдоним) <> Неопределено Тогда + ДобавитьСвойстваВерсии(Контекст, УзелПоле, "Псевдоним, Имя, ТипыСтрокой"); + КонецЕсли; + КонецЦикла; + + Возврат Группы; + +КонецФункции + +// Для функции ГруппыДополнительныхТаблиц. +Функция ТекстУсловияСоединения(ДополнительнаяТаблица, Контекст, Условие = Null) + + Если Условие = Null Тогда + Условие = ДополнительнаяТаблица.УсловиеСоединения; + КонецЕсли; + + // Возможные узлы: "Поле", "Значение", "Константа", "И", "=". + + Если Условие.Узел = "Поле" Тогда + Если Условие.Псевдоним = Контекст.СтруктураОграничения.ПсевдонимОсновнойТаблицы Тогда + ДобавитьОпорноеПоле(Контекст, Условие, , ДополнительнаяТаблица); + Возврат ИмяПоляСРазверткойОпорногоПоляПоТипам("ТекущийСписок", Условие); + КонецЕсли; + Псевдоним = Условие.Псевдоним; + Если Псевдоним = ДополнительнаяТаблица.Псевдоним Тогда + Если ДополнительнаяТаблица.ПолеПроверкиСоединения = "" Тогда + ДополнительнаяТаблица.ПолеПроверкиСоединения = Псевдоним + "." + Условие.Имя; + КонецЕсли; + ИначеЕсли ДополнительнаяТаблица.ПсевдонимыТребуемыхТаблиц.Найти(Псевдоним) = Неопределено Тогда + ДополнительнаяТаблица.ПсевдонимыТребуемыхТаблиц.Добавить(Псевдоним); + КонецЕсли; + Контекст.ПоляУсловияСоединенияДополнительныхТаблиц.Добавить(Условие); + Возврат Псевдоним + "." + Условие.Имя; + КонецЕсли; + + Если Условие.Узел = "Значение" + Или Условие.Узел = "Константа" Тогда + + Возврат ВыражениеУзлаЗначениеИлиКонстанта(Условие); + КонецЕсли; + + Если Условие.Узел = "И" Тогда + Текст = ""; + Для Каждого Аргумент Из Условие.Аргументы Цикл + Текст = Текст + ?(Текст = "", "", Символы.ПС + "И "); + Текст = Текст + ТекстУсловияСоединения(ДополнительнаяТаблица, Контекст, Аргумент); + КонецЦикла; + Возврат Текст; + КонецЕсли; + + Если Условие.Узел = "=" Тогда + ПервыйАргумент = ТекстУсловияСоединения(ДополнительнаяТаблица, + Контекст, Условие.ПервыйАргумент); + + ВторойАргумент = ТекстУсловияСоединения(ДополнительнаяТаблица, + Контекст, Условие.ВторойАргумент); + + Если СтрНайти(ВторойАргумент, "ТекущийСписок.") > 0 Тогда + Возврат "(" + ПервыйАргумент + " = " + ВторойАргумент + ")"; + Иначе + Возврат "(" + ВторойАргумент + " = " + ПервыйАргумент + ")"; + КонецЕсли; + КонецЕсли; + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не определена обработка узла ""%1""'"), Условие.Узел); + + ВызватьИсключение ТекстОшибки; + +КонецФункции + +// Для функций СвойстваПоля, ТекстУсловияСоединения. +Процедура ДобавитьОпорноеПоле(Контекст, УзелПоле, СвойстваПоля = Неопределено, ДополнительнаяТаблица = Неопределено) + + Если Не УзелПоле.Свойство("ОсновнойПорядок") Тогда + Возврат; + КонецЕсли; + + Позиция = СтрНайти(УзелПоле.Имя, "."); + Если Позиция = 0 Тогда + ИмяОпорногоПоля = УзелПоле.Имя; + Иначе + ИмяОпорногоПоля = Лев(УзелПоле.Имя, Позиция - 1); + КонецЕсли; + + ОпорныеПоля = Контекст.ОпорныеПоля; + + Если СвойстваПоля <> Неопределено Тогда + ОпорныеПоля.ПоСвойствамПолей.Вставить(СвойстваПоля, ИмяОпорногоПоля); + КонецЕсли; + + Если ДополнительнаяТаблица <> Неопределено Тогда + ОпорныеПоля.ПоДополнительнымТаблицам.Вставить(ДополнительнаяТаблица, ИмяОпорногоПоля); + КонецЕсли; + + Если ОпорныеПоля.Список.НайтиПоЗначению(ИмяОпорногоПоля) = Неопределено Тогда + ОпорныеПоля.Список.Добавить(ИмяОпорногоПоля, УзелПоле.ОсновнойПорядок); + ТипыОпорногоПоля = УзелПоле.ТипыПоля[0]; + ОпорныеПоля.ТипыПоИменамПолей.Вставить(ИмяОпорногоПоля, ТипыОпорногоПоля); + Если Не ЗначениеЗаполнено(Контекст.ИмяОтдельногоРегистраКлючей) Тогда + ЗапрещенныеТипы = Новый Массив; + Если ЕстьПростойТип(ТипыОпорногоПоля) Тогда + Для Каждого Тип Из ТипыОпорногоПоля.Типы() Цикл + Если ЭтоПростойТип(Тип) Тогда + ЗапрещенныеТипы.Добавить(Строка(Тип)); + КонецЕсли; + КонецЦикла; + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В ограничении доступа списка %1 + |опорное поле %2 содержит простые типы: %3. + | + |Это недопустимо при использовании общего регистра сведений КлючиДоступаКРегистрам. + |Требуется либо исключить простые типы из состава типов опорного поля, + |либо создать отдельный регистр ключей доступа для этого списка.'"), + Контекст.Список, + ИмяОпорногоПоля, + СтрСоединить(ЗапрещенныеТипы, ", ")); + + Если Контекст.Свойство("ОшибкаПриВызовеИсключения") Тогда + Контекст.ОшибкаПриВызовеИсключения.Текст = ТекстОшибки; + КонецЕсли; + ВызватьИсключение ТекстОшибки; + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Для процедур УдалитьПоляНеиспользуемыхВидовДоступа, ГруппыДополнительныхТаблиц. +Процедура УстановитьИспользованиеОпорногоПоля(ОпорныеПоля, СвойстваПоля = Неопределено, ДополнительнаяТаблица = Неопределено) + + Если СвойстваПоля <> Неопределено Тогда + ИмяОпорногоПоля = ОпорныеПоля.ПоСвойствамПолей.Получить(СвойстваПоля); + Иначе + ИмяОпорногоПоля = ОпорныеПоля.ПоДополнительнымТаблицам.Получить(ДополнительнаяТаблица); + КонецЕсли; + + Если ИмяОпорногоПоля = Неопределено Тогда + Возврат; + КонецЕсли; + + ОпорныеПоля.Список.НайтиПоЗначению(ИмяОпорногоПоля).Пометка = Истина; + +КонецПроцедуры + +// Для процедуры ЗаполнитьГруппыПолейИДополнительныхТаблиц. +Процедура ЗавершитьПодготовкуОпорныхПолей(Контекст) + + ОпорныеПоля = Контекст.ОпорныеПоля; + ОпорныеПоля.Список.СортироватьПоПредставлению(); + + Для Каждого ЭлементСписка Из ОпорныеПоля.Список Цикл + ОпорныеПоля.Все.Добавить(ЭлементСписка.Значение); + ОпорныеПоля.ТипыВсех.Добавить(Новый ХранилищеЗначения( + ОпорныеПоля.ТипыПоИменамПолей.Получить(ЭлементСписка.Значение))); + + Если ЭлементСписка.Пометка Тогда + ОпорныеПоля.Используемые.Добавить(ЭлементСписка.Значение); + ОпорныеПоля.ТипыИспользуемых.Добавить(Новый ХранилищеЗначения( + ОпорныеПоля.ТипыПоИменамПолей.Получить(ЭлементСписка.Значение))); + КонецЕсли; + КонецЦикла; + + ОпорныеПоля.Удалить("Список"); + ОпорныеПоля.Удалить("ТипыПоИменамПолей"); + ОпорныеПоля.Удалить("ПоСвойствамПолей"); + ОпорныеПоля.Удалить("ПоДополнительнымТаблицам"); + +КонецПроцедуры + +// Для функций ТекстУсловияСоединения, СвойстваПоля. +Функция ИмяПоляСРазверткойОпорногоПоляПоТипам(Псевдоним, УзелПоле) + + Если Не УзелПоле.Свойство("ОсновнойПорядок") + Или Не УзелПоле.Свойство("ТаблицыСледующегоПоля") Тогда + + Возврат Псевдоним + "." + УзелПоле.Имя; + КонецЕсли; + + Позиция = СтрНайти(УзелПоле.Имя, "."); + ОпорноеПоле = Псевдоним + "." + Лев(УзелПоле.Имя, Позиция - 1); + ОстальныеПоля = Сред(УзелПоле.Имя, Позиция + 1); + + ИмяПоля = ""; + Для Каждого ИмяТипа Из УзелПоле.ТаблицыСледующегоПоля[0] Цикл + ТекущееИмяПоля = "ВЫРАЗИТЬ(" + ОпорноеПоле + " КАК " + ИмяТипа + ")." + ОстальныеПоля; + Если ЗначениеЗаполнено(ИмяПоля) Тогда + ИмяПоля = + "ЕСТЬNULL(" + ТекущееИмяПоля + ", + | " + ТекстСОтступом(ИмяПоля, " ") + ")"; + Иначе + ИмяПоля = ТекущееИмяПоля; + КонецЕсли; + КонецЦикла; + + Возврат ИмяПоля; + +КонецФункции + +// Для функции ПараметрыОграниченияДоступа. +Процедура ЗаполнитьСвойстваПолей(Контекст) + + // 1. Для полей-аргументов узлов сравнения =, <>, В, ЕстьNull + // вычисляется результат сравнения и сохраняется в ключе. + + // 2. Для значений типа Булево сохраняются значения: + // - Перечисления.ДополнительныеЗначенияДоступа.ЗначениеИстина, + // - Перечисления.ДополнительныеЗначенияДоступа.ЗначениеЛожь. + + // 3. Для значений типов Число, Дата, Строка сохраняется результат + // сравнения со значением Истина, как указано в пункте 2. + + Контекст.Вставить("СвойстваПолейКлючаДоступа", Новый Соответствие); + + Контекст.ОпорныеПоля.Вставить("ТипыПоИменамПолей", Новый Соответствие); + Контекст.ОпорныеПоля.Вставить("ПоСвойствамПолей", Новый Соответствие); + + ДобавленныеПоля = Новый Соответствие; + ИменаПолейДляЗапроса = Новый Массив; + ПоляКлючаДоступа = Контекст.СтруктураОграничения.ВнутренниеДанные.ПоляКлючаДоступа; + Для Каждого ОписаниеПоля Из ПоляКлючаДоступа Цикл + СвойстваПоля = СвойстваПоля(ОписаниеПоля.Поле, Контекст); + СвойстваПоля.Вставить("Чтение", ОписаниеПоля.Чтение); + УточнитьСвойстваПоляСравнения(СвойстваПоля, ОписаниеПоля, Контекст); + НаборПолей = НаборПолейУсловияКогда(СвойстваПоля, ОписаниеПоля, Контекст); + Для Каждого СвойстваПоля Из НаборПолей Цикл + ДобавитьСвойстваТиповПоля(СвойстваПоля, ОписаниеПоля, Контекст); + ОдинаковыеПоля = ДобавленныеПоля.Получить(ВРег(СвойстваПоля.ИмяПоляДляЗапроса)); + Если ОдинаковыеПоля = Неопределено Тогда + ОдинаковыеПоля = Новый Массив; + ДобавленныеПоля.Вставить(ВРег(СвойстваПоля.ИмяПоляДляЗапроса), ОдинаковыеПоля); + ИменаПолейДляЗапроса.Добавить(СвойстваПоля.ИмяПоляДляЗапроса); + КонецЕсли; + ОдинаковыеПоля.Добавить(СвойстваПоля); + КонецЦикла; + КонецЦикла; + + СвойстваПолей = Новый Массив; + СовмещенныеПоля = Новый Соответствие; + Для Каждого ИмяПоляДляЗапроса Из ИменаПолейДляЗапроса Цикл + ОдинаковыеПоля = ДобавленныеПоля.Получить(ВРег(ИмяПоляДляЗапроса)); + ОбработанныеОдинаковыеПоля = Новый Массив; + Для Каждого СвойстваПоля Из ОдинаковыеПоля Цикл + СовмещенноеПоле = ОбработанноеСовмещенноеПоле(ОбработанныеОдинаковыеПоля, СвойстваПоля); + Если СовмещенноеПоле <> Неопределено Тогда + СовмещенныеПоля.Вставить(СвойстваПоля, СовмещенноеПоле); + Продолжить; + КонецЕсли; + ОбработанныеОдинаковыеПоля.Добавить(СвойстваПоля); + КонецЦикла; + Для Каждого СвойстваПоля Из ОбработанныеОдинаковыеПоля Цикл + СвойстваПолей.Добавить(СвойстваПоля); + КонецЦикла; + КонецЦикла; + + Для Каждого Описание Из Контекст.СвойстваПолейКлючаДоступа Цикл + СовмещенноеПоле = СовмещенныеПоля.Получить(Описание.Значение); + Если СовмещенноеПоле <> Неопределено Тогда + Контекст.СвойстваПолейКлючаДоступа[Описание.Ключ] = СовмещенноеПоле; + КонецЕсли; + КонецЦикла; + + Для Каждого СвойстваПоля Из СвойстваПолей Цикл + СвойстваПоля.Вставить("ТипыСохраненияТиповКонфигурации", Новый Массив); + СвойстваПоля.Вставить("ТипыСохраненияТиповРасширений", Новый Массив); + СвойстваПоля.Вставить("ТипыСохраненияТиповПростых", Новый Массив); + + Для Каждого Тип Из СвойстваПоля.ТипыСохраненияТипов Цикл + ОбъектМетаданных = Неопределено; + ИмяТипа = ИмяТипаНаЯзыкеЗапросов(Тип, ОбъектМетаданных); + + Если СтрНайти(ИмяТипа, ".") = 0 Тогда + СвойстваПоля.ТипыСохраненияТиповПростых.Добавить(Тип); + + ИначеЕсли ОбъектМетаданных.РасширениеКонфигурации() = Неопределено Тогда + СвойстваПоля.ТипыСохраненияТиповКонфигурации.Добавить(Тип); + Иначе + СвойстваПоля.ТипыСохраненияТиповРасширений.Добавить(Тип); + КонецЕсли; + КонецЦикла; + КонецЦикла; + + Контекст.Вставить("СвойстваПолей", СвойстваПолей); + +КонецПроцедуры + +// Для процедуры ЗаполнитьСвойстваПолей. +Функция ОбработанноеСовмещенноеПоле(ОбработанныеОдинаковыеПоля, СвойстваПоля) + + Для Каждого Поле Из ОбработанныеОдинаковыеПоля Цикл + Совместимо = Истина; + Если Поле.ПсевдонимТаблицы = "ТекущийСписок" + И Поле.НесколькоГруппЗначений <> СвойстваПоля.НесколькоГруппЗначений Тогда + Продолжить; + КонецЕсли; + // По пустой ссылке на ключ доступа или значению Null невозможно определить тип значения, + // поэтому сохранение ключа доступа несовместимо с остальными вариантами. + Для Каждого Тип Из СвойстваПоля.ТипыСохраненияКлючейДоступа Цикл + Если Поле.ТипыСохраненияЗначений.Найти(Тип) <> Неопределено + Или Поле.ТипыСохраненияГруппЗначений.Найти(Тип) <> Неопределено + Или Поле.ТипыСохраненияТипов.Найти(Тип) <> Неопределено + Или Поле.ТипыСохраненияТипаЗапрещенный.Найти(Тип) <> Неопределено + Или Поле.ТипыСохраненияТипаРазрешенный.Найти(Тип) <> Неопределено Тогда + Совместимо = Ложь; + Прервать; + КонецЕсли; + КонецЦикла; + Если Не Совместимо Тогда + Продолжить; + КонецЕсли; + // По значению Null вместо группы значений невозможно определить тип значения, + // поэтому сохранение группы значений несовместимо с остальными вариантами. + Для Каждого Тип Из СвойстваПоля.ТипыСохраненияГруппЗначений Цикл + Если Поле.ТипыСохраненияЗначений.Найти(Тип) <> Неопределено + Или Поле.ТипыСохраненияТипов.Найти(Тип) <> Неопределено + Или Поле.ТипыСохраненияТипаЗапрещенный.Найти(Тип) <> Неопределено + Или Поле.ТипыСохраненияТипаРазрешенный.Найти(Тип) <> Неопределено Тогда + Совместимо = Ложь; + Прервать; + КонецЕсли; + КонецЦикла; + Если Не Совместимо Тогда + Продолжить; + КонецЕсли; + // Объединение уточнений специальных значений. + Поле.ЕстьУточнениеNull = + Поле.ЕстьУточнениеNull Или СвойстваПоля.ЕстьУточнениеNull; + Поле.ЕстьУточнениеНеопределено = + Поле.ЕстьУточнениеНеопределено Или СвойстваПоля.ЕстьУточнениеНеопределено; + Поле.ЕстьТипВедущегоСписка = + Поле.ЕстьТипВедущегоСписка Или СвойстваПоля.ЕстьТипВедущегоСписка; + Поле.ЕстьТипВладельцаНастроекПрав = + Поле.ЕстьТипВладельцаНастроекПрав Или СвойстваПоля.ЕстьТипВладельцаНастроекПрав; + Поле.ЕстьПроверкаАвторизованногоПользователя = + Поле.ЕстьПроверкаАвторизованногоПользователя Или СвойстваПоля.ЕстьПроверкаАвторизованногоПользователя; + // Объединение типов сохранения пустой ссылки. + Для Каждого Тип Из СвойстваПоля.ТипыСохраненияПустойСсылки Цикл + Если Поле.ТипыСохраненияПустойСсылки.Найти(Тип) <> Неопределено Тогда + Продолжить; + КонецЕсли; + Поле.ТипыСохраненияПустойСсылки.Добавить(Тип); + КонецЦикла; + // Объединение типов сохранения значения ТипРазрешенный. + Для Каждого Тип Из СвойстваПоля.ТипыСохраненияТипаРазрешенный Цикл + Если Поле.ТипыСохраненияЗначений.Найти(Тип) <> Неопределено + Или Поле.ТипыСохраненияТипов.Найти(Тип) <> Неопределено + Или Поле.ТипыСохраненияТипаРазрешенный.Найти(Тип) <> Неопределено Тогда + Продолжить; + КонецЕсли; + Индекс = Поле.ТипыСохраненияТипаЗапрещенный.Найти(Тип); + Если Индекс <> Неопределено Тогда + Поле.ТипыСохраненияТипаЗапрещенный.Удалить(Индекс); + Поле.ТипыСохраненияТипов.Добавить(Тип); + Продолжить; + КонецЕсли; + Поле.ТипыСохраненияТипаРазрешенный.Добавить(Тип); + КонецЦикла; + // Объединение типов сохранения значения ТипЗапрещенный. + Для Каждого Тип Из СвойстваПоля.ТипыСохраненияТипаЗапрещенный Цикл + Если Поле.ТипыСохраненияЗначений.Найти(Тип) <> Неопределено + Или Поле.ТипыСохраненияТипов.Найти(Тип) <> Неопределено + Или Поле.ТипыСохраненияТипаЗапрещенный.Найти(Тип) <> Неопределено Тогда + Продолжить; + КонецЕсли; + Индекс = Поле.ТипыСохраненияТипаРазрешенный.Найти(Тип); + Если Индекс <> Неопределено Тогда + Поле.ТипыСохраненияТипаРазрешенный.Удалить(Индекс); + Поле.ТипыСохраненияТипов.Добавить(Тип); + Продолжить; + КонецЕсли; + Поле.ТипыСохраненияТипаЗапрещенный.Добавить(Тип); + КонецЦикла; + // Объединение типов сохранения типа значения. + Для Каждого Тип Из СвойстваПоля.ТипыСохраненияТипов Цикл + Если Поле.ТипыСохраненияЗначений.Найти(Тип) <> Неопределено + Или Поле.ТипыСохраненияТипов.Найти(Тип) <> Неопределено Тогда + Продолжить; + КонецЕсли; + Индекс = Поле.ТипыСохраненияТипаЗапрещенный.Найти(Тип); + Если Индекс <> Неопределено Тогда + Поле.ТипыСохраненияТипаЗапрещенный.Удалить(Индекс); + КонецЕсли; + Индекс = Поле.ТипыСохраненияТипаРазрешенный.Найти(Тип); + Если Индекс <> Неопределено Тогда + Поле.ТипыСохраненияТипаРазрешенный.Удалить(Индекс); + КонецЕсли; + Поле.ТипыСохраненияТипов.Добавить(Тип); + КонецЦикла; + // Объединение типов сохранения значения. + Для Каждого Тип Из СвойстваПоля.ТипыСохраненияЗначений Цикл + Если Поле.ТипыСохраненияЗначений.Найти(Тип) <> Неопределено Тогда + Продолжить; + КонецЕсли; + Индекс = Поле.ТипыСохраненияТипов.Найти(Тип); + Если Индекс <> Неопределено Тогда + Поле.ТипыСохраненияТипов.Удалить(Индекс); + КонецЕсли; + Индекс = Поле.ТипыСохраненияТипаЗапрещенный.Найти(Тип); + Если Индекс <> Неопределено Тогда + Поле.ТипыСохраненияТипаЗапрещенный.Удалить(Индекс); + КонецЕсли; + Индекс = Поле.ТипыСохраненияТипаРазрешенный.Найти(Тип); + Если Индекс <> Неопределено Тогда + Поле.ТипыСохраненияТипаРазрешенный.Удалить(Индекс); + КонецЕсли; + Поле.ТипыСохраненияЗначений.Добавить(Тип); + КонецЦикла; + // Объединение неиспользуемых типов значений доступа. + Для Каждого Тип Из СвойстваПоля.НеиспользуемыеТипыЗначенийДоступа Цикл + Если Поле.НеиспользуемыеТипыЗначенийДоступа.Найти(Тип) <> Неопределено Тогда + Продолжить; + КонецЕсли; + Поле.НеиспользуемыеТипыЗначенийДоступа.Добавить(Тип); + КонецЦикла; + // Объединение используемых типов значений доступа. + Для Каждого Тип Из СвойстваПоля.ИспользуемыеТипыЗначенийДоступа Цикл + Если Поле.ИспользуемыеТипыЗначенийДоступа.Найти(Тип) <> Неопределено Тогда + Продолжить; + КонецЕсли; + Поле.ИспользуемыеТипыЗначенийДоступа.Добавить(Тип); + КонецЦикла; + Поле.Чтение = Поле.Чтение Или СвойстваПоля.Чтение; + Если Поле.ТипыСтрокой <> СвойстваПоля.ТипыСтрокой Тогда + Поле.ТипыСтрокой = Поле.ТипыСтрокой + Символы.ПС + СвойстваПоля.ТипыСтрокой; + КонецЕсли; + Возврат Поле; + КонецЦикла; + + Возврат Неопределено; + +КонецФункции + +// Для процедуры ЗаполнитьСвойстваПолей. +Процедура УточнитьСвойстваПоляСравнения(Свойства, ОписаниеПоля, Контекст) + + Контекст.СвойстваПолейКлючаДоступа.Вставить(ОписаниеПоля.Поле, Свойства); + + Родитель = ОписаниеПоля.Родители[0]; + + Узлы = ",ТипЗначения,=,<>,В,ЕстьNull,"; // В ключ сохраняется результат сравнения. + Если СтрНайти(Узлы, "," + Родитель.Узел + ",") = 0 Тогда + Возврат; + КонецЕсли; + + Если Родитель.Узел = "ТипЗначения" Тогда + РодительУзлаСравнения = ОписаниеПоля.Родители[1]; + + Если РодительУзлаСравнения.ВторойАргумент = Родитель Тогда + УзелТип = РодительУзлаСравнения.ПервыйАргумент; + УзелТипЗначения = РодительУзлаСравнения.ВторойАргумент; + Иначе + УзелТип = РодительУзлаСравнения.ВторойАргумент; + УзелТипЗначения = РодительУзлаСравнения.ПервыйАргумент; + КонецЕсли; + Контекст.СвойстваПолейКлючаДоступа.Вставить(УзелТипЗначения, Свойства); + + ВыражениеТипаЗначения = "ТИПЗНАЧЕНИЯ(" + Свойства.ИмяПоляДляЗапроса + ")"; + ВыражениеТипа = "ТИП(" + УзелТип.Имя + ")"; + ОднойСтрокой = СтрДлина(ВыражениеТипаЗначения) + СтрДлина(ВыражениеТипа) < 60; + + Свойства.ИмяПоляДляЗапроса = ВыражениеТипаЗначения + ?(ОднойСтрокой, " ", " + | ") + РодительУзлаСравнения.Узел + " " + ВыражениеТипа; + + ИначеЕсли Родитель.Узел = "=" + Или Родитель.Узел = "<>" Тогда + + УзелЗначениеИлиКонстанта = ?(Родитель.ВторойАргумент = ОписаниеПоля.Поле, + Родитель.ПервыйАргумент, Родитель.ВторойАргумент); + + ВыражениеУзла = ВыражениеУзлаЗначениеИлиКонстанта(УзелЗначениеИлиКонстанта); + ОднойСтрокой = СтрДлина(Свойства.ИмяПоляДляЗапроса) + СтрДлина(ВыражениеУзла) < 60; + + Свойства.ИмяПоляДляЗапроса = Свойства.ИмяПоляДляЗапроса + ?(ОднойСтрокой, " ", " + | ") + Родитель.Узел + " " + ВыражениеУзла; + + ИначеЕсли Родитель.Узел = "В" Тогда + + СписокЗначений = ""; + Для Каждого УзелЗначениеИлиКонстанта Из Родитель.Значения Цикл + СписокЗначений = СписокЗначений + ?(СписокЗначений = "", "", ","); + ПоследняяСтрока = СтрПолучитьСтроку(СписокЗначений, СтрЧислоСтрок(СписокЗначений)); + Если СтрДлина(ПоследняяСтрока) > 40 Тогда + СписокЗначений = СписокЗначений + " + | "; + Иначе + СписокЗначений = СписокЗначений + " "; + КонецЕсли; + СписокЗначений = СписокЗначений + + ВыражениеУзлаЗначениеИлиКонстанта(УзелЗначениеИлиКонстанта); + КонецЦикла; + Свойства.ИмяПоляДляЗапроса = Свойства.ИмяПоляДляЗапроса + " + | В (" + СписокЗначений + ")"; + + Иначе // Родитель.Узел = "ЕстьNull". + Свойства.ИмяПоляДляЗапроса = Свойства.ИмяПоляДляЗапроса + " ЕСТЬ NULL"; + Свойства.Вставить("ПроверкаЕстьNull"); + КонецЕсли; + + Свойства.ТипКонечногоПоля = Новый ОписаниеТипов("Булево"); + +КонецПроцедуры + +// Для процедуры ЗаполнитьСвойстваПолей. +Функция НаборПолейУсловияКогда(ИсходныеСвойстваПоля, ОписаниеПоля, Контекст) + + Родитель = ОписаниеПоля.Родители[0]; + НаборПолей = Новый Массив; + + Если Родитель.Узел <> "Выбор" + Или Родитель.Выбор = Неопределено Тогда + + НаборПолей.Добавить(ИсходныеСвойстваПоля); + Возврат НаборПолей; + КонецЕсли; + + // Для "ВЫБОР <Поле> КОГДА <Значение>" в ключ сохраняется + // результат сравнения "<Поле> = <Значение>". + + Для Каждого ОписаниеКогда Из Родитель.Когда Цикл + ФиксированныеСвойства = Новый ФиксированнаяСтруктура(ИсходныеСвойстваПоля); + Свойства = Новый Структура(ФиксированныеСвойства); + + ВыражениеУзла = ВыражениеУзлаЗначениеИлиКонстанта(ОписаниеКогда.Условие); + ОднойСтрокой = СтрДлина(Свойства.ИмяПоляДляЗапроса) + СтрДлина(ВыражениеУзла) < 60; + + Свойства.ИмяПоляДляЗапроса = Свойства.ИмяПоляДляЗапроса + ?(ОднойСтрокой, " = ", " + | = ") + ВыражениеУзла; + + Свойства.ТипКонечногоПоля = Новый ОписаниеТипов("Булево"); + НаборПолей.Добавить(Свойства); + + Контекст.СвойстваПолейКлючаДоступа.Вставить(ОписаниеКогда.Условие, Свойства); + КонецЦикла; + + Возврат НаборПолей; + +КонецФункции + +// Для функций СвойстваПоля, УточнитьСвойстваПоляСравнения, НаборПолейУсловияКогда. +Функция БезЗначенияNull(СвойстваПоля, ВГруппеОднаДополнительнаяТаблицаСПолями) + + Возврат СтрЧислоВхождений(СвойстваПоля.ИмяПоляДляЗапроса, ".") = 1 + И Не СвойстваПоля.Свойство("ПолеСодержитNull") + И ( СтрНачинаетсяС(СвойстваПоля.ИмяПоляДляЗапроса, "ТекущийСписок") + Или ВГруппеОднаДополнительнаяТаблицаСПолями); + +КонецФункции + +// Для процедуры ЗаполнитьСвойстваПолей. +Процедура ДобавитьСвойстваТиповПоля(Свойства, ОписаниеПоля, Контекст) + + Свойства.Вставить("ТипыСохраненияКлючейДоступа", Новый Массив); + Свойства.Вставить("ТипыСохраненияГруппЗначений", Новый Массив); + Свойства.Вставить("ТипыСохраненияЗначений", Новый Массив); + Свойства.Вставить("ТипыСохраненияПустойСсылки", Новый Массив); + Свойства.Вставить("ТипыСохраненияТипов", Новый Массив); + Свойства.Вставить("ТипыСохраненияТипаЗапрещенный", Новый Массив); + Свойства.Вставить("ТипыСохраненияТипаРазрешенный", Новый Массив); + Свойства.Вставить("НеиспользуемыеТипыЗначенийДоступа", Новый Массив); + Свойства.Вставить("ИспользуемыеТипыЗначенийДоступа", Новый Массив); + Свойства.Вставить("НесколькоГруппЗначений", Ложь); + Свойства.Вставить("ЭтоСписокЗначенийДоступаСГруппамиЗначений", Ложь); + Свойства.Вставить("ЕстьУточнениеNull", Ложь); + Свойства.Вставить("ЕстьУточнениеНеопределено", Ложь); + Свойства.Вставить("ЕстьТипВедущегоСписка", Ложь); + Свойства.Вставить("ЕстьТипВладельцаНастроекПрав", Ложь); + Свойства.Вставить("ЕстьПроверкаАвторизованногоПользователя", Ложь); + + Родитель = ОписаниеПоля.Родители[0]; + + Если Родитель.Узел = "ЧтениеОбъектаРазрешено" + Или Родитель.Узел = "ИзменениеОбъектаРазрешено" + Или Родитель.Узел = "ЧтениеСпискаРазрешено" + Или Родитель.Узел = "ИзменениеСпискаРазрешено" + Или Родитель.Узел = "ЗначениеРазрешено" + Или Родитель.Узел = "ЭтоАвторизованныйПользователь" Тогда + + ЕстьУточнениеПустойСсылки = ТипУточнен(Родитель, "ПустаяСсылка"); + Свойства.ЕстьУточнениеNull = ТипУточнен(Родитель, "Null") Или Свойства.Свойство("ЕстьВыразить"); + Свойства.ЕстьУточнениеНеопределено = ТипУточнен(Родитель, "Неопределено"); + КонецЕсли; + + Если Родитель.Узел = "ЧтениеОбъектаРазрешено" + Или Родитель.Узел = "ИзменениеОбъектаРазрешено" + Или Родитель.Узел = "ЧтениеСпискаРазрешено" + Или Родитель.Узел = "ИзменениеСпискаРазрешено" Тогда + + Для Каждого Тип Из Свойства.ТипКонечногоПоля.Типы() Цикл + ИмяТипа = ИмяТипаНаЯзыкеЗапросов(Тип); + + Уточнение = УточнениеТипа(Родитель, ИмяТипа); + Если Уточнение = "Истина" Тогда + Свойства.ТипыСохраненияТипаРазрешенный.Добавить(Тип); + Продолжить; + ИначеЕсли Уточнение = "Ложь" Тогда + Свойства.ТипыСохраненияТипаЗапрещенный.Добавить(Тип); + Продолжить; + КонецЕсли; + + Если Не ТипПроверяется(Родитель, ИмяТипа) Тогда + Свойства.ТипыСохраненияТипаЗапрещенный.Добавить(Тип); + Продолжить; + КонецЕсли; + + Если ЭтоПростойТип(Тип) Тогда + Свойства.ТипыСохраненияТипаРазрешенный.Добавить(Тип); + Продолжить; + КонецЕсли; + + Если Тип = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") + Или Тип = Тип("СправочникСсылка.ИдентификаторыОбъектовРасширений") Тогда + Свойства.ТипыСохраненияЗначений.Добавить(Тип); + Свойства.ЕстьТипВедущегоСписка = Истина; + Продолжить; + КонецЕсли; + + Если Контекст.СпискиСЗаписьюКлючейДоступа <> Неопределено + И Не Контекст.ИспользуетсяОграничениеПоВладельцу + И ( Контекст.СпискиСОграничением.Получить(ИмяТипа) = Неопределено + Или Контекст.СпискиСОтключеннымОграничением.Получить(ИмяТипа) <> Неопределено) Тогда + + Свойства.ТипыСохраненияТипов.Добавить(Тип); + Свойства.ЕстьТипВедущегоСписка = Истина; + Продолжить; + КонецЕсли; + + Если ЕстьУточнениеПустойСсылки Тогда + Свойства.ТипыСохраненияПустойСсылки.Добавить(Тип); + КонецЕсли; + + Значение = Контекст.ТипыВладельцевНастроекПрав.Получить(Тип); + Если Значение <> Неопределено + И ВРег(Контекст.Список) = ВРег(Значение[0].ВладелецПрав) Тогда + + Свойства.ТипыСохраненияЗначений.Добавить(Тип); + Свойства.ЕстьТипВладельцаНастроекПрав = Истина; + Продолжить; + КонецЕсли; + + Если Родитель.Узел = "ЧтениеСпискаРазрешено" + Или Родитель.Узел = "ИзменениеСпискаРазрешено" Тогда + + Свойства.ТипыСохраненияТипов.Добавить(Тип); + Свойства.ЕстьТипВедущегоСписка = Истина; + Иначе + Свойства.ТипыСохраненияКлючейДоступа.Добавить(Тип); + Контекст.ВедущиеСпискиПоКлючамДоступа.Вставить(ИмяТипа, Истина); + КонецЕсли; + КонецЦикла; + + Возврат; + КонецЕсли; + + Если Родитель.Узел = "ЗначениеРазрешено" Тогда + СвойстваВидовДоступа = Контекст.СвойстваВидовДоступа; + + Для Каждого Тип Из Свойства.ТипКонечногоПоля.Типы() Цикл + ИмяТипа = ИмяТипаНаЯзыкеЗапросов(Тип); + + Уточнение = УточнениеТипа(Родитель, ИмяТипа); + Если Уточнение = "Истина" Тогда + Свойства.ТипыСохраненияТипаРазрешенный.Добавить(Тип); + Продолжить; + ИначеЕсли Уточнение = "Ложь" Тогда + Свойства.ТипыСохраненияТипаЗапрещенный.Добавить(Тип); + Продолжить; + КонецЕсли; + + Если Не ТипПроверяется(Родитель, ИмяТипа) Тогда + Свойства.ТипыСохраненияТипаЗапрещенный.Добавить(Тип); + Продолжить; + КонецЕсли; + + СвойстваВидаДоступа = СвойстваВидовДоступа.ПоТипамГруппИЗначений.Получить(Тип); + Если СвойстваВидаДоступа = Неопределено Тогда + Свойства.ТипыСохраненияТипаРазрешенный.Добавить(Тип); + Продолжить; + КонецЕсли; + + Если Контекст.ИспользуемыеТипыЗначений.Получить(СвойстваВидаДоступа.ТипЗначений) = Неопределено Тогда + Свойства.НеиспользуемыеТипыЗначенийДоступа.Добавить(СвойстваВидаДоступа.ТипЗначений); + + Если УточнениеТипа(Родитель, "Отключено") = "Ложь" Тогда + Свойства.ТипыСохраненияТипаЗапрещенный.Добавить(Тип); + Иначе + Свойства.ТипыСохраненияТипаРазрешенный.Добавить(Тип); + КонецЕсли; + Продолжить; + КонецЕсли; + + Свойства.ИспользуемыеТипыЗначенийДоступа.Добавить(СвойстваВидаДоступа.ТипЗначений); + + Если СвойстваВидовДоступа.ПоТипамЗначений.Получить(Тип) = Неопределено Тогда + // Тип группы значений доступа. + Если Контекст.Список = Метаданные.НайтиПоТипу(Тип).ПолноеИмя() Тогда + Свойства.ТипыСохраненияЗначений.Добавить(Тип); + Иначе + Свойства.ТипыСохраненияТипаРазрешенный.Добавить(Тип); + КонецЕсли; + Продолжить; + КонецЕсли; + + Если ЕстьУточнениеПустойСсылки Тогда + Свойства.ТипыСохраненияПустойСсылки.Добавить(Тип); + КонецЕсли; + + Если СвойстваВидовДоступа.ТипыЗначенийДоступаСГруппами.Получить(Тип) = Неопределено + Или Контекст.ТипыПользователя.Найти(Тип) <> Неопределено Тогда + + Свойства.ТипыСохраненияЗначений.Добавить(Тип); + Продолжить; + КонецЕсли; + Свойства.ТипыСохраненияГруппЗначений.Добавить(Тип); + + Если Контекст.Список = ИмяТипа + И ВРег(Свойства.ИмяПоляДляЗапроса) = ВРег("ТекущийСписок.Ссылка") Тогда + + Свойства.ЭтоСписокЗначенийДоступаСГруппамиЗначений = Истина; + Иначе + Контекст.ВедущиеСпискиПоЗначениямСГруппами.Вставить(ИмяТипа, Истина); + КонецЕсли; + + Если СвойстваВидовДоступа.СОднойГруппойДляЗначенияДоступа.Найти(Тип) = Неопределено Тогда + Продолжить; + КонецЕсли; + Свойства.НесколькоГруппЗначений = Истина; + КонецЦикла; + + Возврат; + КонецЕсли; + + Если Родитель.Узел = "ЭтоАвторизованныйПользователь" Тогда + Свойства.ЕстьПроверкаАвторизованногоПользователя = Истина; + + Для Каждого Тип Из Свойства.ТипКонечногоПоля.Типы() Цикл + ИмяТипа = ИмяТипаНаЯзыкеЗапросов(Тип); + + Уточнение = УточнениеТипа(Родитель, ИмяТипа); + Если Уточнение = "Истина" Тогда + Свойства.ТипыСохраненияТипаРазрешенный.Добавить(Тип); + Продолжить; + ИначеЕсли Уточнение = "Ложь" Тогда + Свойства.ТипыСохраненияТипаЗапрещенный.Добавить(Тип); + Продолжить; + КонецЕсли; + + Если Не ТипПроверяется(Родитель, ИмяТипа) Тогда + Свойства.ТипыСохраненияТипаЗапрещенный.Добавить(Тип); + Продолжить; + КонецЕсли; + + Если Тип <> Тип("СправочникСсылка.Пользователи") + И Тип <> Тип("СправочникСсылка.ВнешниеПользователи") Тогда + + Свойства.ТипыСохраненияТипаЗапрещенный.Добавить(Тип); + Продолжить; + КонецЕсли; + + Если ЕстьУточнениеПустойСсылки Тогда + Свойства.ТипыСохраненияПустойСсылки.Добавить(Тип); + КонецЕсли; + + Свойства.ТипыСохраненияЗначений.Добавить(Тип); + КонецЦикла; + + Возврат; + КонецЕсли; + + // Остались только узлы Поле для получения значения Булево. + Свойства.ТипыСохраненияЗначений.Добавить(Тип("Булево")); + + Если Свойства.ТипКонечногоПоля.Типы().Количество() = 1 + И Свойства.ТипКонечногоПоля.СодержитТип(Тип("Булево")) Тогда + Возврат; + КонецЕсли; + Свойства.ТипКонечногоПоля = Новый ОписаниеТипов("Булево"); + Свойства.ИмяПоляДляЗапроса = Свойства.ИмяПоляДляЗапроса + " = ИСТИНА"; + +КонецПроцедуры + +// Для функций СвойстваПоля, ДобавитьСвойстваТиповПоля. +Функция ИмяТипаНаЯзыкеЗапросов(Тип, ОбъектМетаданных = Неопределено) + + ОбъектМетаданных = Метаданные.НайтиПоТипу(Тип); + Если ОбъектМетаданных <> Неопределено Тогда + Возврат ОбъектМетаданных.ПолноеИмя(); + КонецЕсли; + + Возврат Строка(Тип); + +КонецФункции + +// Для процедуры ЗаполнитьСвойстваПолей. +Функция СвойстваПоля(УзелПоле, Контекст, СвойстваПоля = Неопределено) + + Свойства = Новый Структура; + ЭтоКорневойУзел = СвойстваПоля = Неопределено; + + Если ЭтоКорневойУзел Тогда + СвойстваПоля = Свойства; + // Внутри функции ЕстьNull() может быть только поле, т.е. функции Выразить() не может быть. + Если ЗначениеЗаполнено(УзелПоле.Выразить) Тогда + Типы = Новый Массив; + Типы.Добавить(ТипСсылкиПоПолномуИмениМетаданных(УзелПоле.Выразить)); + ТипКонечногоПоля = Новый ОписаниеТипов(Типы); + Иначе + ТипКонечногоПоля = УзелПоле.ТипыПоля[УзелПоле.ТипыПоля.Количество() - 1]; + Если ЗначениеЗаполнено(УзелПоле.ЕстьNull) Тогда + Типы = Новый Массив; + Типы.Добавить(ТипЗначенияУзлаЗначениеИлиКонстанта(УзелПоле.ЕстьNull)); + ТипКонечногоПоля = Новый ОписаниеТипов(ТипКонечногоПоля, Типы); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если УзелПоле.Вложение <> Неопределено Тогда + СвойстваВложения = СвойстваПоля(УзелПоле.Вложение, Контекст, СвойстваПоля); + ПсевдонимТаблицы = СвойстваВложения.ПсевдонимТаблицы; + ИмяПоляДляЗапроса = СвойстваВложения.ИмяПоляДляЗапроса + "." + УзелПоле.Имя; + ТипыСтрокой = СвойстваВложения.ТипыСтрокой + Символы.ПС + УзелПоле.ТипыСтрокой; + Иначе + Если ТипЗнч(УзелПоле.ТипыПоля[0]) = Тип("ОписаниеТипов") Тогда + + Если ЗначениеЗаполнено(УзелПоле.Псевдоним) + И УзелПоле.Псевдоним <> Контекст.СтруктураОграничения.ПсевдонимОсновнойТаблицы Тогда + + ПсевдонимТаблицы = УзелПоле.Псевдоним; + ИмяПоляДляЗапроса = ПсевдонимТаблицы + "." + УзелПоле.Имя; + Иначе + ПсевдонимТаблицы = "ТекущийСписок"; + ДобавитьОпорноеПоле(Контекст, УзелПоле, СвойстваПоля); + Если Не ЗначениеЗаполнено(УзелПоле.Выразить) Тогда + ИмяПоляДляЗапроса = ТекстСОтступом( + ИмяПоляСРазверткойОпорногоПоляПоТипам(ПсевдонимТаблицы, УзелПоле), " "); + Иначе + ИмяПоляДляЗапроса = ПсевдонимТаблицы + "." + УзелПоле.Имя; + КонецЕсли; + КонецЕсли; + + Иначе // Первая часть имени поля - это имя табличной части. + ПсевдонимТаблицы = "ТекущийСписок" + УзелПоле.ТипыПоля[0]; + ЧастиИмени = СтрРазделить(УзелПоле.Имя, "."); + ЧастиИмени.Удалить(0); + ИмяПоляДляЗапроса = ПсевдонимТаблицы + "." + СтрСоединить(ЧастиИмени); + КонецЕсли; + ТипыСтрокой = УзелПоле.ТипыСтрокой; + КонецЕсли; + + // Внутри функции ЕстьNull() может быть только поле, т.е. функции Выразить() не может быть. + Если ЗначениеЗаполнено(УзелПоле.ЕстьNull) Тогда + ИмяПоляДляЗапроса = "ЕСТЬNULL(" + ИмяПоляДляЗапроса + ", " + + ВыражениеУзлаЗначениеИлиКонстанта(УзелПоле.ЕстьNull) + ")"; + + Если ЭтоКорневойУзел Тогда + Свойства.Вставить("БезЗначенияNull", Истина); + КонецЕсли; + КонецЕсли; + + Если ЗначениеЗаполнено(УзелПоле.Выразить) Тогда + ИмяПоляДляЗапроса = "ВЫРАЗИТЬ(" + ИмяПоляДляЗапроса + " КАК " + УзелПоле.Выразить + ")"; + СвойстваПоля.Вставить("ЕстьВыразить"); + КонецЕсли; + + Свойства.Вставить("ПсевдонимТаблицы", ПсевдонимТаблицы); + Свойства.Вставить("ИмяПоляДляЗапроса", ИмяПоляДляЗапроса); + Свойства.Вставить("ТипКонечногоПоля", ТипКонечногоПоля); + Свойства.Вставить("ТипыСтрокой", ТипыСтрокой); + + Если УзелПоле.Свойство("ПолеСодержитNull") Тогда + Свойства.Вставить("ПолеСодержитNull"); + КонецЕсли; + + ДобавитьВедущиеСпискиПоЗначениямПолей(Контекст, УзелПоле); + + Возврат Свойства; + +КонецФункции + +// Для функций ГруппыДополнительныхТаблиц, СвойстваПоля. +Процедура ДобавитьВедущиеСпискиПоЗначениямПолей(Контекст, УзелПоле) + + ИменаПолей = СтрРазделить(УзелПоле.Имя, "."); + + Если УзелПоле.Вложение <> Неопределено Тогда + ДобавитьПолеВедущегоСписка(Контекст, УзелПоле.Таблица, ИменаПолей[0], Истина, Истина); + + ИначеЕсли ЗначениеЗаполнено(УзелПоле.Псевдоним) + И УзелПоле.Псевдоним <> Контекст.СтруктураОграничения.ПсевдонимОсновнойТаблицы Тогда + + ДобавитьПолеВедущегоСписка(Контекст, УзелПоле.Таблица, ИменаПолей[0]); + КонецЕсли; + + ИменаПолей = СтрРазделить(УзелПоле.Имя, "."); + ИндексПервогоПоля = ?(ТипЗнч(УзелПоле.ТипыПоля[0]) = Тип("ОписаниеТипов"), 0, 1); + + Для Индекс = ИндексПервогоПоля + 1 По ИменаПолей.Количество()-1 Цикл + Поле = ИменаПолей[Индекс]; + Для Каждого Таблица Из УзелПоле.ТаблицыСледующегоПоля[Индекс-1] Цикл + ДобавитьПолеВедущегоСписка(Контекст, Таблица, Поле, Истина, Истина); + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + +// Для процедуры ДобавитьВедущиеСпискиПоЗначениямПолей. +Процедура ДобавитьПолеВедущегоСписка(Контекст, Таблица, Поле, ЭтоТаблицаСписка = Неопределено, ЭтоСсылочныйТипТаблицы = Неопределено) + + Если ЭтоТаблицаСписка = Неопределено + И СтрЧислоВхождений(Таблица, ".") = 2 Тогда + + СоставИмени = СтрРазделить(Таблица, "."); + ТабличнаяЧасть = СоставИмени[2]; + СоставИмени.Удалить(2); + ПолноеИмя = СтрСоединить(СоставИмени, "."); + Иначе + ИмяТабличнойЧасти = ""; + ПолноеИмя = Таблица; + КонецЕсли; + + Если ВРег(Контекст.Список) = ВРег(ПолноеИмя) Тогда + Возврат; + КонецЕсли; + + ОписаниеПолей = Контекст.ВедущиеСпискиПоЗначениямПолей.Получить(ПолноеИмя); + Если ОписаниеПолей = Неопределено Тогда + Если ЭтоСсылочныйТипТаблицы = Неопределено Тогда + СоставИмени = СтрРазделить(Таблица, "."); + ТипТаблицы = Контекст.СтруктураОграничения.ВнутренниеДанные.ТипыТаблицПоИменам.Получить(ВРег(СоставИмени[0])); + ЭтоСсылочныйТипТаблицы = ТипТаблицы.ЭтоСсылочныйТип; + КонецЕсли; + ОписаниеПолей = Новый Структура("ПоляШапки, ТабличныеЧасти, ЭтоСсылочныйТип", + Новый Массив, Новый Соответствие, ЭтоСсылочныйТипТаблицы); + Контекст.ВедущиеСпискиПоЗначениямПолей.Вставить(ПолноеИмя, ОписаниеПолей); + КонецЕсли; + + Если ЗначениеЗаполнено(ТабличнаяЧасть) Тогда + Поля = ОписаниеПолей.ТабличныеЧасти.Получить(ТабличнаяЧасть); + Если Поля = Неопределено Тогда + Поля = Новый Массив; + ОписаниеПолей.ТабличныеЧасти.Вставить(ТабличнаяЧасть, Поля); + КонецЕсли; + Иначе + Поля = ОписаниеПолей.ПоляШапки; + КонецЕсли; + + Если Поля.Найти(Поле) <> Неопределено Тогда + Возврат; + КонецЕсли; + + Если ВРег(Поле) = ВРег("Ссылка") Или ВРег(Поле) = ВРег("Ref") Тогда + Если ЭтоСсылочныйТипТаблицы = Неопределено Тогда + СоставИмени = СтрРазделить(Таблица, "."); + ТипТаблицы = Контекст.СтруктураОграничения.ВнутренниеДанные.ТипыТаблицПоИменам.Получить(ВРег(СоставИмени[0])); + ЭтоСсылочныйТипТаблицы = ТипТаблицы.ЭтоСсылочныйТип; + КонецЕсли; + Если ЭтоСсылочныйТипТаблицы Тогда + Возврат; + КонецЕсли; + КонецЕсли; + + Поля.Добавить(Поле); + +КонецПроцедуры + +// Для процедур ДобавитьОпорноеПоле, ДобавитьТипыИзмерения, ДобавитьСвойстваТиповПоля, +// ДобавитьПроверкуПоТипам и функции СвойстваПоля. +// +Функция ЭтоПростойТип(Тип) + + Возврат Тип = Тип("Булево") + Или Тип = Тип("Дата") + Или Тип = Тип("Строка") + Или Тип = Тип("Число") + Или Тип = Тип("УникальныйИдентификатор") + Или Тип = Тип("ХранилищеЗначения"); + +КонецФункции + +// Для функции ДобавитьСвойстваТиповПоля. +Функция ТипПроверяется(Узел, ПолноеИмя) + + Если Узел.Типы.Количество() = 0 Тогда + Возврат Истина; + КонецЕсли; + + ТипУказан = Ложь; + Для Каждого ИмяТаблицы Из Узел.Типы Цикл + Если ВРег(ИмяТаблицы) = ВРег(ПолноеИмя) Тогда + ТипУказан = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Возврат Узел.ПроверятьТипыКромеУказанных И Не ТипУказан + Или Не Узел.ПроверятьТипыКромеУказанных И ТипУказан; + +КонецФункции + +// Для функции ДобавитьСвойстваТиповПоля. +Функция ТипУточнен(Узел, ИмяТипаНаЯзыкеЗапросов) + + ТипУточнен = Ложь; + Для Каждого УточнениеСравнения Из Узел.УточненияСравнения Цикл + Если ВРег(УточнениеСравнения.Ключ) = ВРег(ИмяТипаНаЯзыкеЗапросов) Тогда + ТипУточнен = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Возврат ТипУточнен; + +КонецФункции + +// Для функции ДобавитьСвойстваТиповПоля. +Функция УточнениеТипа(Узел, ИмяТипаНаЯзыкеЗапросов) + + Уточнение = ""; + Для Каждого УточнениеСравнения Из Узел.УточненияСравнения Цикл + Если ВРег(УточнениеСравнения.Ключ) = ВРег(ИмяТипаНаЯзыкеЗапросов) Тогда + Уточнение = УточнениеСравнения.Значение; + Прервать; + КонецЕсли; + КонецЦикла; + + Возврат Уточнение; + +КонецФункции + +// Для функции СвойстваПоля. +Функция ТипЗначенияУзлаЗначениеИлиКонстанта(Узел) + + Если Узел.Узел = "Значение" Тогда + Возврат ТипСсылкиПоПолномуИмениПредопределенного(Узел.Имя); + КонецЕсли; + + Возврат ТипЗнч(Узел.Значение); + +КонецФункции + +// Для функций ТекстУсловияСоединения, СвойстваПоля, НаборПолейУсловияКогда и +// процедуры УточнитьСвойстваПоляСравнения. +// +Функция ВыражениеУзлаЗначениеИлиКонстанта(Узел) + + Если Узел.Узел = "Значение" Тогда + Выражение = "Значение(" + Узел.Имя + ")"; + + ИначеЕсли ТипЗнч(Узел.Значение) = Тип("Булево") Тогда + Выражение = ?(Узел.Значение, "Истина", "Ложь"); + + ИначеЕсли ТипЗнч(Узел.Значение) = Тип("Число") Тогда + Выражение = Формат(Узел.Значение, "ЧГ="); + + ИначеЕсли ТипЗнч(Узел.Значение) = Тип("Неопределено") Тогда + Выражение = "Неопределено"; + Иначе + Выражение = """" + Узел.Значение + """"; + КонецЕсли; + + Возврат Выражение; + +КонецФункции + +// Для функции ТипЗначенияУзлаЗначениеИлиКонстанта. +Функция ТипСсылкиПоПолномуИмениПредопределенного(ПолноеИмяПредопределенного) + + ЧастиИмени = СтрРазделить(ПолноеИмяПредопределенного, "."); + ЧастиИмени.Удалить(2); + + ПолноеИмя = СтрСоединить(ЧастиИмени, "."); + + Возврат ТипСсылкиПоПолномуИмениМетаданных(ПолноеИмя); + +КонецФункции + +// Для функций СвойстваПоля, ТипСсылкиПоПолномуИмениПредопределенного. +Функция ТипСсылкиПоПолномуИмениМетаданных(ПолноеИмя) + + Если ЭтоРусскийВариантВидаОбъектаМетаданных(ПолноеИмя) Тогда + ИмяТипаСсылки = СтрЗаменить(ПолноеИмя, ".", "Ссылка."); + Иначе + ИмяТипаСсылки = СтрЗаменить(ПолноеИмя, ".", "Ref."); + КонецЕсли; + + Возврат Тип(ИмяТипаСсылки); + +КонецФункции + +// Для функции ТипСсылкиПоПолномуИмениМетаданных. +Функция ЭтоРусскийВариантВидаОбъектаМетаданных(ПолноеИмя) + + ПервыйСимвол = Лев(ПолноеИмя, 1); + + Возврат ПервыйСимвол > "А" И ПервыйСимвол < "Я" + Или ПервыйСимвол > "а" И ПервыйСимвол < "я"; + +КонецФункции + +#КонецОбласти + +#Область ПараметрыОграниченияДоступаТекстыЗапросовДляСписка + +// Основная функция области, которая является второй частью +// функции ПараметрыОграниченияПоСтруктуреОграничения, но +// не используется при подготовке хранимых параметров ограничения доступа, +// а используется при вызове функции ПараметрыОграничения. +// +Процедура ДобавитьТекстыЗапросовВПараметрыОграничения(Результат) + + Контекст = Результат.Контекст; + Результат.Удалить("Контекст"); + + // Проверка прав Чтение и Изменение объекта или набора записей в базе данных. + Результат.Вставить("ТекстЗапросаПроверкиПравЧтениеИзменение"); + // Проверка права Чтение объекта или набора записей в базе данных. + Результат.Вставить("ТекстЗапросаПроверкиПраваЧтение"); + + ДобавитьТекстЗапросаДатыСледующегоЭлементаДанных(Результат, Контекст); + + Если Результат.ОграничениеОтключено + Или Результат.ДоступЗапрещен + Или Результат.ИспользуетсяОграничениеПоВладельцу Тогда + + Если Контекст.СпискиСЗаписьюКлючейДоступа.Получить(Результат.Список) = Неопределено + Или Результат.ИспользуетсяОграничениеПоВладельцу Тогда + // Запрос объектов или отборов записей. + Результат.Вставить("ТекстЗапросаЭлементовДанныхДляОчисткиКлючей"); + ДобавитьТекстЗапросаЭлементовДанныхДляОчисткиКлючей(Результат, Контекст); + Иначе + // Запрос объектов или отборов записей. + Результат.Вставить("ТекстЗапросаЭлементовДанныхСУстаревшимРазрешеннымКлючом"); + ДобавитьТекстЗапросаЭлементовДанныхСУстаревшимРазрешеннымКлючом(Результат, Контекст); + КонецЕсли; + Если Результат.ИспользуетсяОграничениеПоВладельцу Тогда + // Формирование запросов проверки прав. + ЗаполнитьЗапросыПроверкиПравЧтениеИзменение(Результат, Контекст); + КонецЕсли; + Возврат; + КонецЕсли; + + // Имена используемых таблиц ключа. + Результат.Вставить("ТаблицыКлюча"); + // Имена используемых реквизитов таблиц ключа. + Результат.Вставить("РеквизитыТаблицКлюча"); + // Запрос объектов или отборов записей. + Результат.Вставить("ТекстЗапросаЭлементовДанныхСУстаревшимиКлючами"); + // Запрос значений объектов или отборов записей. + Результат.Вставить("ТекстЗапросаЗначенийЭлементовДанныхДляКлючейДоступа"); + // Запрос значений из ключей доступа для сравнения со значениями из объектов или отборов записей. + Результат.Вставить("ТекстЗапросаЗначенийИзКлючейДоступаДляСравнения"); + // Запрос отборов записей, которых нет в регистре ключей доступа регистров. + Результат.Вставить("ТекстЗапросаНовыхКомбинацийЗначенийОпорныхПолей"); + // Запрос значений из ключей доступа для вычисления пользователей и групп доступа, которым они разрешены. + Результат.Вставить("ТекстЗапросаЗначенийИзКлючейДоступаДляРасчетаПрав"); + + Контекст.Вставить("ОтдельныйРегистр", Истина); // Уточнение регистра ключей для нессылочных типов. + + Контекст.Вставить("ТаблицыКлюча", Новый Массив); + Контекст.Вставить("РеквизитыТаблицКлюча", Новый Соответствие); + Контекст.Вставить("ЧастиУсловияПроверки", Новый Массив); + Контекст.Вставить("ЧастиЗапросаЗначенийИзОбъектов", Новый Массив); + Контекст.Вставить("ЧастиЗапросаЗначенийИзКлючейДляСравнения", Новый Массив); + Контекст.Вставить("ЧастиЗапросаЗначенийИзКлючейДляРасчетаПрав", Новый Массив); + Контекст.Вставить("ЧастиУсловияВыбораПравВедущихКлючейДоступа", Новый Массив); + Контекст.Вставить("ЧастиУсловияВыбораПравВедущихСписков", Новый Массив); + Контекст.Вставить("ЧастиУсловияВыбораПравПоВладельцамНастроекПрав", Новый Массив); + + // Формирование запроса элементов данных с устаревшими ключами. + ЗаполнитьШаблоныЧастейЗапросаПроверки(Контекст); + + Для НомерШапки = 0 По 2 Цикл + ДобавитьПроверкуШапкиКлюча(Контекст, НомерШапки); + КонецЦикла; + + Для НомерТабличнойЧастиКлюча = 1 По Контекст.КоличествоТабличныхЧастейКлюча Цикл + ДобавитьПроверкуТабличнойЧастиКлюча(Контекст, НомерТабличнойЧастиКлюча); + КонецЦикла; + СобратьЧастиЗапросаПроверки(Результат, Контекст); + + // Формирование запросов значений из элементов данных и из ключей. + Для НомерШапки = 0 По 2 Цикл + ДобавитьЗаполнениеШапкиКлюча(Контекст, НомерШапки); + КонецЦикла; + ДобавитьВыборКлючейБезПолейВШапке(Контекст); + + Для НомерТабличнойЧастиКлюча = 1 По Контекст.КоличествоТабличныхЧастейКлюча Цикл + ДобавитьЗаполнениеТабличнойЧастиКлюча(Контекст, НомерТабличнойЧастиКлюча); + КонецЦикла; + СобратьЧастиЗапросовЗаполнения(Результат, Контекст); + + Результат.ТаблицыКлюча = Контекст.ТаблицыКлюча; + Результат.РеквизитыТаблицКлюча = Контекст.РеквизитыТаблицКлюча; + + // Формирование запросов проверки прав. + ЗаполнитьЗапросыПроверкиПравЧтениеИзменение(Результат, Контекст); + +КонецПроцедуры + +// Для процедуры ДобавитьТекстыЗапросовВПараметрыОграничения. +Процедура ДобавитьТекстЗапросаДатыСледующегоЭлементаДанных(Результат, Контекст) + + Если Не Результат.ЭтоСсылочныйТип Или Не Результат.СписокСДатой Тогда + Возврат; + КонецЕсли; + + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ТекущийСписок.Дата КАК Дата + |ИЗ + | &ТекущийСписок КАК ТекущийСписок + |ГДЕ + | ТекущийСписок.Дата < &ДатаНачала + | + |УПОРЯДОЧИТЬ ПО + | ТекущийСписок.Дата УБЫВ"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекущийСписок", Результат.Список); + + Результат.Вставить("ТекстЗапросаДатыСледующегоЭлементаДанных", ТекстЗапроса); + +КонецПроцедуры + +// Для процедуры ДобавитьТекстыЗапросовВПараметрыОграничения. +Процедура ДобавитьТекстЗапросаЭлементовДанныхДляОчисткиКлючей(Результат, Контекст) + + Если Результат.ЭтоСсылочныйТип Тогда + ЗаполнитьШаблоныЧастейЗапросаПроверкиОбъекта(Контекст); + ТекстЗапроса = Контекст.ТекстЧастиЗапросаПроверки; + + Если Результат.БезЗаписиКлючейДоступаДляПользователейИВнешнихПользователей Тогда + Условие = "НЕ КлючиДоступаКОбъектам.Объект ЕСТЬ NULL"; + Иначе + Если Результат.ДляВнешнихПользователей Тогда + Условие = + " НЕ КлючиДоступаКОбъектам.Объект ЕСТЬ NULL + | И КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей <> ЗНАЧЕНИЕ(Справочник.КлючиДоступа.ПустаяСсылка)"; + Иначе + Условие = + " НЕ КлючиДоступаКОбъектам.Объект ЕСТЬ NULL + | И КлючиДоступаКОбъектам.КлючДоступаПользователей <> ЗНАЧЕНИЕ(Справочник.КлючиДоступа.ПустаяСсылка)"; + КонецЕсли; + КонецЕсли; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#Соединения", ""); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#Условие", Условие); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекущийСписок", Результат.Список); + + Результат.ТекстЗапросаЭлементовДанныхДляОчисткиКлючей = ТекстЗапроса; + Возврат; + КонецЕсли; + + Если ЗначениеЗаполнено(Результат.ИмяОтдельногоРегистраКлючей) Тогда + ИмяРегистра = Результат.ИмяОтдельногоРегистраКлючей; + ОпорныеПоляДляУпорядочения = ""; + ОпорныеПоляДляОтбора = ""; + Иначе + ИмяРегистра = "КлючиДоступаКРегистрам"; + ОпорныеПоляДляОтбора = "КлючиДоступаКРегистрам.Регистр = &ИдентификаторРегистра"; + ОпорныеПоляДляУпорядочения = "КлючиДоступаКРегистрам.Регистр"; + КонецЕсли; + + Если Результат.БезЗаписиКлючейДоступаДляПользователейИВнешнихПользователей Тогда + ОпорныеПоляДляОтбора = ОпорныеПоляДляОтбора + ?(ОпорныеПоляДляОтбора = "", "", " + | И ") + "КлючиДоступаКРегистрам.ДляВнешнихПользователей >= ЛОЖЬ"; + Иначе + Если Результат.ДляВнешнихПользователей Тогда + ОпорныеПоляДляОтбора = ОпорныеПоляДляОтбора + ?(ОпорныеПоляДляОтбора = "", "", " + | И ") + "КлючиДоступаКРегистрам.ДляВнешнихПользователей = ИСТИНА"; + Иначе + ОпорныеПоляДляОтбора = ОпорныеПоляДляОтбора + ?(ОпорныеПоляДляОтбора = "", "", " + | И ") + "КлючиДоступаКРегистрам.ДляВнешнихПользователей = ЛОЖЬ"; + КонецЕсли; + КонецЕсли; + + ПоляВыбора = "КлючиДоступаКРегистрам.ДляВнешнихПользователей"; + Для НомерПоля = 1 По Контекст.ОпорныеПоля.МаксимальноеКоличество Цикл + ПоляВыбора = ПоляВыбора + ?(ПоляВыбора = "", "", ", + | ") + "КлючиДоступаКРегистрам.Поле" + НомерПоля + " КАК Поле" + НомерПоля; + + ОпорныеПоляДляОтбора = ОпорныеПоляДляОтбора + ?(ОпорныеПоляДляОтбора = "", "", " + | И ") + "КлючиДоступаКРегистрам.Поле" + НомерПоля + " >= &Поле" + НомерПоля; + + ОпорныеПоляДляУпорядочения = ОпорныеПоляДляУпорядочения + ?(ОпорныеПоляДляУпорядочения = "", "", ", + | ") + "КлючиДоступаКРегистрам.Поле" + НомерПоля; + КонецЦикла; + + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ " + МаркерРазмераПорции() + " + | " + ТекстСОтступом(СокрЛ(ПоляВыбора), " ") +" + |ИЗ + | РегистрСведений." + ИмяРегистра + " КАК КлючиДоступаКРегистрам + |ГДЕ + | " + ОпорныеПоляДляОтбора + " + | + |УПОРЯДОЧИТЬ ПО + | " + ОпорныеПоляДляУпорядочения; + + Результат.ТекстЗапросаЭлементовДанныхДляОчисткиКлючей = ТекстЗапроса; + +КонецПроцедуры + +// Для процедуры ДобавитьТекстыЗапросовВПараметрыОграничения. +Процедура ДобавитьТекстЗапросаЭлементовДанныхСУстаревшимРазрешеннымКлючом(Результат, Контекст) + + Если Не Результат.ЭтоСсылочныйТип Тогда + Возврат; + КонецЕсли; + + ЗаполнитьШаблоныЧастейЗапросаПроверкиОбъекта(Контекст); + ТекстЗапроса = Контекст.ТекстЧастиЗапросаПроверки; + + Условие = "КлючиДоступаКОбъектам.Объект ЕСТЬ NULL"; + Если Результат.ДляВнешнихПользователей Тогда + УсловиеСоединения = " И КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей = &РазрешенныйКлючДоступа"; + Иначе + УсловиеСоединения = " И КлючиДоступаКОбъектам.КлючДоступаПользователей = &РазрешенныйКлючДоступа"; + КонецЕсли; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#Соединения", УсловиеСоединения); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#Условие", Условие); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекущийСписок", Результат.Список); + + Результат.ТекстЗапросаЭлементовДанныхСУстаревшимРазрешеннымКлючом = ТекстЗапроса; + +КонецПроцедуры + +// Для процедуры ДобавитьТекстыЗапросовВПараметрыОграничения. +Процедура ЗаполнитьШаблоныЧастейЗапросаПроверки(Контекст) + + Если Контекст.ЭтоСсылочныйТип Тогда + ЗаполнитьШаблоныЧастейЗапросаПроверкиОбъекта(Контекст); + Иначе + ЗаполнитьШаблоныЧастейЗапросаПроверкиРегистра(Контекст); + КонецЕсли; + +КонецПроцедуры + +// Для процедуры ЗаполнитьШаблоныЧастейЗапросаПроверки. +Процедура ЗаполнитьШаблоныЧастейЗапросаПроверкиОбъекта(Контекст) + + Контекст.Вставить("ТекстЗапросаПроверки"); + Контекст.Вставить("ТекстЧастиЗапросаПроверки"); + + Если Контекст.СписокСДатой Тогда + Контекст.ТекстЗапросаПроверки = + "ВЫБРАТЬ ПЕРВЫЕ " + МаркерРазмераПорции() + " + | ТекущийСписок.Ссылка КАК ТекущаяСсылка, + | ТекущийСписок.Дата КАК Дата + |ИЗ + | &ТекущийСписок КАК ТекущийСписок + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + | ПО (КлючиДоступаКОбъектам.Объект = ТекущийСписок.Ссылка) + |ГДЕ + | ТекущийСписок.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания + | И (КлючиДоступаКОбъектам.Объект ЕСТЬ NULL + | ИЛИ #Условие) + | + |УПОРЯДОЧИТЬ ПО + | ТекущийСписок.Дата УБЫВ"; + + Контекст.ТекстЧастиЗапросаПроверки = + "ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ " + МаркерРазмераПорции() + " + | ТекущийСписок.Ссылка КАК ТекущаяСсылка, + | ТекущийСписок.Дата КАК Дата + |ИЗ + | &ТекущийСписок КАК ТекущийСписок + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + | ПО (КлючиДоступаКОбъектам.Объект = ТекущийСписок.Ссылка) + | #Соединения + |ГДЕ + | ТекущийСписок.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания + | И #Условие + | + |УПОРЯДОЧИТЬ ПО + | ТекущийСписок.Дата УБЫВ"; + Иначе + Контекст.ТекстЗапросаПроверки = + "ВЫБРАТЬ ПЕРВЫЕ " + МаркерРазмераПорции() + " + | ТекущийСписок.Ссылка КАК ТекущаяСсылка + |ИЗ + | &ТекущийСписок КАК ТекущийСписок + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + | ПО (КлючиДоступаКОбъектам.Объект = ТекущийСписок.Ссылка) + |ГДЕ + | ТекущийСписок.Ссылка >= &ПоследняяОбработаннаяСсылка + | И (КлючиДоступаКОбъектам.Объект ЕСТЬ NULL + | ИЛИ #Условие) + | + |УПОРЯДОЧИТЬ ПО + | ТекущийСписок.Ссылка"; + + Контекст.ТекстЧастиЗапросаПроверки = + "ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ " + МаркерРазмераПорции() + " + | ТекущийСписок.Ссылка КАК ТекущаяСсылка + |ИЗ + | &ТекущийСписок КАК ТекущийСписок + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + | ПО (КлючиДоступаКОбъектам.Объект = ТекущийСписок.Ссылка) + | #Соединения + |ГДЕ + | ТекущийСписок.Ссылка >= &ПоследняяОбработаннаяСсылка + | И #Условие + | + |УПОРЯДОЧИТЬ ПО + | ТекущийСписок.Ссылка"; + КонецЕсли; + +КонецПроцедуры + +// Для процедуры ЗаполнитьШаблоныЧастейЗапросаПроверки. +Процедура ЗаполнитьШаблоныЧастейЗапросаПроверкиРегистра(Контекст) + + ОпорныеПоля = Контекст.ОпорныеПоля; + ОпорныеПоля.Вставить("ДляВыбора", ""); + ОпорныеПоля.Вставить("УсловиеСоединения", ""); + ОпорныеПоля.Вставить("ДляОтбора", ""); + ОпорныеПоля.Вставить("ДляУпорядочения", ""); + + // Для запроса новых комбинаций. + ОпорныеПоляДляВыбора = ""; + ОпорныеПоляУсловиеСоединения = ""; + ОпорныеПоляДляУпорядочения = ""; + + Если Не ЗначениеЗаполнено(Контекст.ИмяОтдельногоРегистраКлючей) Тогда + Контекст.ОтдельныйРегистр = Ложь; + // Для запроса новых комбинаций. + ОпорныеПоляУсловиеСоединения = "(КлючиДоступаКРегистрам.Регистр = &ИдентификаторРегистра)"; + // Для остальных запросов. + ОпорныеПоля.УсловиеСоединения = "(ТекущийСписокИсточник.Регистр = ТекущийСписок.Регистр)"; + ОпорныеПоля.ДляОтбора = "ТекущийСписок.Регистр = &ИдентификаторРегистра"; + КонецЕсли; + + ОтборПоТипуПользователей = ?(Контекст.ДляВнешнихПользователей, "ИСТИНА", "ЛОЖЬ"); + + // Для запроса новых комбинаций. + ОпорныеПоляУсловиеСоединения = ОпорныеПоляУсловиеСоединения + ?(ОпорныеПоляУсловиеСоединения = "", "", " + | И ") + "(КлючиДоступаКРегистрам.ДляВнешнихПользователей = " + ОтборПоТипуПользователей + ")"; + + // Для остальных запросов. + ОпорныеПоля.УсловиеСоединения = ОпорныеПоля.УсловиеСоединения + ?(ОпорныеПоля.УсловиеСоединения = "", "", " + | И ") + "(ТекущийСписокИсточник.ДляВнешнихПользователей = " + ОтборПоТипуПользователей + ")"; + + ОпорныеПоля.ДляОтбора = ОпорныеПоля.ДляОтбора + ?(ОпорныеПоля.ДляОтбора = "", "", " + | И ") + "ТекущийСписок.ДляВнешнихПользователей = " + ОтборПоТипуПользователей; + + Номер = 0; + Для Каждого ИмяОпорногоПоля Из ОпорныеПоля.Используемые Цикл + Номер = Номер + 1; + + // Для запроса новых комбинаций. + ОпорныеПоляДляВыбора = ОпорныеПоляДляВыбора + ?(ОпорныеПоляДляВыбора = "", "", ", + | ") + "ТекущийРегистр." + ИмяОпорногоПоля + " КАК Поле" + Номер; + + ОпорныеПоляУсловиеСоединения = ОпорныеПоляУсловиеСоединения + ?(ОпорныеПоляУсловиеСоединения = "", "", " + | И ") + "(КлючиДоступаКРегистрам.Поле" + Номер + " = ТекущийРегистр." + ИмяОпорногоПоля + ")"; + + ОпорныеПоляДляУпорядочения = ОпорныеПоляДляУпорядочения + ?(ОпорныеПоляДляУпорядочения = "", "", ", ") + ИмяОпорногоПоля; + + // Для остальных запросов. + ОпорныеПоля.ДляВыбора = ОпорныеПоля.ДляВыбора + ?(ОпорныеПоля.ДляВыбора = "", "", ", + | ") + "ТекущийСписок.Поле" + Номер + " КАК Поле" + Номер; + + ОпорныеПоля.УсловиеСоединения = ОпорныеПоля.УсловиеСоединения + ?(ОпорныеПоля.УсловиеСоединения = "", "", " + | И ") + "(ТекущийСписокИсточник.Поле" + Номер + " = ТекущийСписок.Поле" + Номер + ")"; + + Отбор = ""; + Для ДополнительныйНомер = 1 По Номер - 1 Цикл + Отбор = Отбор + ?(ДополнительныйНомер = 1, "", " + | И ") + "ТекущийСписок.Поле" + ДополнительныйНомер + " = &Поле" + ДополнительныйНомер; + КонецЦикла; + Отбор = Отбор + ?(Отбор = "", "", " + | И ") + "ТекущийСписок.Поле" + Номер + " > &Поле" + Номер; + + Отбор = ?(Номер = 1, ?(ОпорныеПоля.Используемые.Количество() > 1, "(", "") + Отбор, " + | ИЛИ " + ТекстСОтступом(Отбор, " ")); + + ОпорныеПоля.ДляОтбора = ОпорныеПоля.ДляОтбора + ?(ОпорныеПоля.ДляОтбора = "", "", ?(Номер = 1, " + | И ", "")) + Отбор; + + ОпорныеПоля.ДляУпорядочения = ОпорныеПоля.ДляУпорядочения + ?(ОпорныеПоля.ДляУпорядочения = "", "", ", ") + "Поле" + Номер; + КонецЦикла; + + Если ОпорныеПоля.Используемые.Количество() > 1 Тогда + ОпорныеПоля.ДляОтбора = ОпорныеПоля.ДляОтбора + ")"; + КонецЕсли; + + // Для запроса новых комбинаций. + НачальныйНомер = Номер + 1; + Для Номер = НачальныйНомер По ОпорныеПоля.МаксимальноеКоличество Цикл + ОпорныеПоляУсловиеСоединения = ОпорныеПоляУсловиеСоединения + ?(ОпорныеПоляУсловиеСоединения = "", "", " + | И ") + "(КлючиДоступаКРегистрам.Поле" + Номер + " = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.Null))"; + КонецЦикла; + + // Части запроса проверки. + ТекстЗапросаНовыхКомбинаций = + "ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ " + МаркерРазмераПорции() + " + | " + ОпорныеПоляДляВыбора + " + |ИЗ + | &ТекущийРегистр КАК ТекущийРегистр + | ЛЕВОЕ СОЕДИНЕНИЕ &ТекущийСписок КАК КлючиДоступаКРегистрам + | ПО " + ОпорныеПоляУсловиеСоединения + " + |ГДЕ + | КлючиДоступаКРегистрам.Поле1 ЕСТЬ NULL + | + |УПОРЯДОЧИТЬ ПО + | " + ОпорныеПоляДляУпорядочения; + + ТекстЗапросаПроверкиКомбинаций = + "ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ " + МаркерРазмераПорции() + " + | " + ОпорныеПоля.ДляВыбора + " + |ИЗ + | &ТекущийСписок КАК ТекущийСписок + |ГДЕ + | " + ОпорныеПоля.ДляОтбора + " + | И (#Условие) + | + |УПОРЯДОЧИТЬ ПО + | " + ОпорныеПоля.ДляУпорядочения; + + // Установка шаблона запроса. + Контекст.Вставить("ТекстЗапросаПроверки"); + + ТекстПолногоЗапросаПроверки = + "ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ " + МаркерРазмераПорции() + " + | " + ОпорныеПоля.ДляВыбора + " + |ИЗ ( + | #ЗапросыОбъектовПоЧастям + | + | ) КАК ЧастиТекущегоСписка + | + |УПОРЯДОЧИТЬ ПО + | " + ОпорныеПоля.ДляУпорядочения; + + ТекстПолногоЗапросаПроверки = СтрЗаменить(ТекстПолногоЗапросаПроверки, + "ТекущийСписок.", "ЧастиТекущегоСписка."); + + ТекстОберткиЧастиЗапросаПроверки = + "ВЫБРАТЬ + | " + ОпорныеПоля.ДляВыбора + " + |ИЗ + | (#ЗапросЧастиОбъектов) КАК ЧастьТекущегоСписка"; + + ТекстОберткиЧастиЗапросаПроверки = СтрЗаменить(ТекстОберткиЧастиЗапросаПроверки, + "ТекущийСписок.", "ЧастьТекущегоСписка."); + + ТекстЗапросаЧастиОбъектов = СтрЗаменить(ТекстОберткиЧастиЗапросаПроверки, + "#ЗапросЧастиОбъектов", ТекстСОтступом(ТекстЗапросаНовыхКомбинаций, " ")); + + ТекстЗапросаЧастиОбъектов = ТекстЗапросаЧастиОбъектов + " + | + |ОБЪЕДИНИТЬ ВСЕ + | + |"; + + ТекстЗапросаЧастиОбъектов = ТекстЗапросаЧастиОбъектов + СтрЗаменить(ТекстОберткиЧастиЗапросаПроверки, + "#ЗапросЧастиОбъектов", ТекстСОтступом(ТекстЗапросаПроверкиКомбинаций, " ")); + + Контекст.ТекстЗапросаПроверки = СтрЗаменить(ТекстПолногоЗапросаПроверки, + "#ЗапросыОбъектовПоЧастям", ТекстСОтступом(ТекстЗапросаЧастиОбъектов, " ")); + +КонецПроцедуры + +// Для процедуры ДобавитьТекстыЗапросовВПараметрыОграничения. +Процедура СобратьЧастиЗапросаПроверки(Результат, Контекст) + + Условие = ""; + Для Каждого ТекстЧастиУсловия Из Контекст.ЧастиУсловияПроверки Цикл + Если ЗначениеЗаполнено(Условие) Тогда + Условие = Условие + " + | ИЛИ "; + КонецЕсли; + Условие = Условие + ТекстСОтступом(ТекстЧастиУсловия, " "); + КонецЦикла; + + Контекст.ТекстЗапросаПроверки = СтрЗаменить(Контекст.ТекстЗапросаПроверки, + "#Условие", ТекстСОтступом(Условие, ?(Контекст.ЭтоСсылочныйТип, " ", " "))); + + ПодставитьОбщиеПараметрыВЗапрос(Контекст.ТекстЗапросаПроверки, Контекст); + Результат.ТекстЗапросаЭлементовДанныхСУстаревшимиКлючами = Контекст.ТекстЗапросаПроверки; + +КонецПроцедуры + +// Для процедуры ДобавитьТекстыЗапросовВПараметрыОграничения. +Процедура СобратьЧастиЗапросовЗаполнения(Результат, Контекст) + + ТекстЗапроса = СтрСоединить(Контекст.ЧастиЗапросаЗначенийИзОбъектов, + ОбщегоНазначения.РазделительПакетаЗапросов()); + ПодставитьОбщиеПараметрыВЗапрос(ТекстЗапроса, Контекст); + Результат.ТекстЗапросаЗначенийЭлементовДанныхДляКлючейДоступа = ТекстЗапроса; + + ТекстЗапроса = СтрСоединить(Контекст.ЧастиЗапросаЗначенийИзКлючейДляСравнения, + ОбщегоНазначения.РазделительПакетаЗапросов()); + ПодставитьОбщиеПараметрыВЗапрос(ТекстЗапроса, Контекст); + Результат.ТекстЗапросаЗначенийИзКлючейДоступаДляСравнения = ТекстЗапроса; + + ДобавитьЧастьЗапросаВыбораПравВедущихКлючейДоступа(Контекст); + ДобавитьЧастьЗапросаВыбораПравВедущихСписков(Контекст); + ДобавитьЧастьЗапросаВыбораПравПоВладельцамНастроекПрав(Контекст); + ТекстЗапроса = СтрСоединить(Контекст.ЧастиЗапросаЗначенийИзКлючейДляРасчетаПрав, + ОбщегоНазначения.РазделительПакетаЗапросов()); + ПодставитьОбщиеПараметрыВЗапрос(ТекстЗапроса, Контекст); + Результат.ТекстЗапросаЗначенийИзКлючейДоступаДляРасчетаПрав = ТекстЗапроса; + +КонецПроцедуры + +// Для процедуры СобратьЧастиЗапросовЗаполнения. +Процедура ДобавитьЧастьЗапросаВыбораПравВедущихКлючейДоступа(Контекст) + + Если Контекст.ЧастиУсловияВыбораПравВедущихКлючейДоступа.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Если Не Контекст.РассчитыватьПраваПользователей Тогда + ТекстЗапроса = + "ВЫБРАТЬ + | ПраваНаКлючиДоступа.КлючДоступа КАК КлючДоступа, + | ПраваНаКлючиДоступа.ГруппаДоступа КАК ВладелецПрав, + | ПраваНаКлючиДоступа.Изменение КАК Изменение + |ИЗ + | РегистрСведений.КлючиДоступаГруппДоступа КАК ПраваНаКлючиДоступа + |ГДЕ + | &УсловиеОтбора + |ИТОГИ ПО + | КлючДоступа"; + ИначеЕсли Контекст.ВладельцыСПравамиДля = Неопределено Тогда + ТекстЗапроса = + "ВЫБРАТЬ + | ПраваНаКлючиДоступа.КлючДоступа КАК КлючДоступа, + | ПраваНаКлючиДоступа.Пользователь КАК ВладелецПрав, + | ПраваНаКлючиДоступа.Изменение КАК Изменение + |ИЗ + | РегистрСведений.КлючиДоступаПользователей КАК ПраваНаКлючиДоступа + |ГДЕ + | &УсловиеОтбора + |ИТОГИ ПО + | КлючДоступа"; + Иначе + ТекстЗапроса = + "ВЫБРАТЬ + | ПраваНаКлючиДоступа.КлючДоступа КАК КлючДоступа, + | ПраваНаКлючиДоступа.ВладелецПрав КАК ВладелецПрав, + | ПраваНаКлючиДоступа.Изменение КАК Изменение + |ИЗ + | (ВЫБРАТЬ + | ПраваНаКлючиДоступа.КлючДоступа КАК КлючДоступа, + | ПраваНаКлючиДоступа.Пользователь КАК ВладелецПрав, + | ПраваНаКлючиДоступа.Изменение КАК Изменение + | ИЗ + | РегистрСведений.КлючиДоступаПользователей КАК ПраваНаКлючиДоступа + | ГДЕ + | ПраваНаКлючиДоступа.КлючДоступа.Список В(&ВладельцыСПравамиПользователей) + | И &УсловиеОтбора + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ + | ПраваНаКлючиДоступа.КлючДоступа, + | ПользователиГруппПользователей.Пользователь, + | МАКСИМУМ(ПраваНаКлючиДоступа.Изменение) + | ИЗ + | РегистрСведений.КлючиДоступаГруппДоступа КАК ПраваНаКлючиДоступа + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК ПользователиГруппыДоступа + | ПО (ПользователиГруппыДоступа.Ссылка = ПраваНаКлючиДоступа.ГруппаДоступа) + | И (ПраваНаКлючиДоступа.КлючДоступа.Список В (&ВладельцыСПравамиГруппДоступа)) + | И (&УсловиеОтбора) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК ПользователиГруппПользователей + | ПО (ПользователиГруппПользователей.ГруппаПользователей = ПользователиГруппыДоступа.Пользователь) + | И (ПользователиГруппПользователей.Используется) + | И (ПользователиГруппПользователей.Пользователь.ИдентификаторПользователяИБ <> &ПустойУникальныйИдентификатор) + | + | СГРУППИРОВАТЬ ПО + | ПраваНаКлючиДоступа.КлючДоступа, + | ПользователиГруппПользователей.Пользователь) КАК ПраваНаКлючиДоступа + |ИТОГИ ПО + | КлючДоступа"; + КонецЕсли; + + Если Контекст.ЧастиУсловияВыбораПравВедущихКлючейДоступа.Количество() = 1 Тогда + УсловиеОтбора = Контекст.ЧастиУсловияВыбораПравВедущихКлючейДоступа[0]; + Иначе + УсловиеОтбора = "(" + СтрСоединить(Контекст.ЧастиУсловияВыбораПравВедущихКлючейДоступа, + Символы.ПС + " ИЛИ ") + ")"; + КонецЕсли; + УсловиеОтбора = СтрЗаменить(УсловиеОтбора, "#ПроверяемоеПоле", "ПраваНаКлючиДоступа.КлючДоступа"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеОтбора", УсловиеОтбора); + + Контекст.ЧастиЗапросаЗначенийИзКлючейДляРасчетаПрав.Добавить(ТекстЗапроса); + +КонецПроцедуры + +// Для процедуры СобратьЧастиЗапросовЗаполнения. +Процедура ДобавитьЧастьЗапросаВыбораПравВедущихСписков(Контекст) + + Если Контекст.ЧастиУсловияВыбораПравВедущихСписков.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Если Контекст.РассчитыватьПраваПользователей Тогда + ТекстЗапроса = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ПраваНаСписки.Таблица КАК Список, + | ПользователиГруппПользователей.Пользователь КАК ВладелецПрав, + | МАКСИМУМ(ПраваНаСписки.Изменение) КАК Изменение + |ИЗ + | РегистрСведений.ТаблицыГруппДоступа КАК ПраваНаСписки + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК ПользователиГруппыДоступа + | ПО (ПользователиГруппыДоступа.Ссылка = ПраваНаСписки.ГруппаДоступа) + | И (&УсловиеОтбора) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК ПользователиГруппПользователей + | ПО (ПользователиГруппПользователей.ГруппаПользователей = ПользователиГруппыДоступа.Пользователь) + | И (ПользователиГруппПользователей.Используется) + | И (ПользователиГруппПользователей.Пользователь.ИдентификаторПользователяИБ <> &ПустойУникальныйИдентификатор) + | + |СГРУППИРОВАТЬ ПО + | ПраваНаСписки.Таблица, + | ПользователиГруппПользователей.Пользователь + |ИТОГИ ПО + | Список"; + Иначе + ТекстЗапроса = + "ВЫБРАТЬ + | ПраваНаСписки.Таблица КАК Список, + | ПраваНаСписки.ГруппаДоступа КАК ВладелецПрав, + | ПраваНаСписки.Изменение КАК Изменение + |ИЗ + | РегистрСведений.ТаблицыГруппДоступа КАК ПраваНаСписки + |ГДЕ + | &УсловиеОтбора + |ИТОГИ ПО + | Список"; + КонецЕсли; + + Если Контекст.ЧастиУсловияВыбораПравВедущихСписков.Количество() = 1 Тогда + УсловиеОтбора = Контекст.ЧастиУсловияВыбораПравВедущихСписков[0]; + Иначе + УсловиеОтбора = "(" + СтрСоединить(Контекст.ЧастиУсловияВыбораПравВедущихСписков, + Символы.ПС + " ИЛИ ") + ")"; + КонецЕсли; + УсловиеОтбора = СтрЗаменить(УсловиеОтбора, "#ПроверяемоеПоле", "ПраваНаСписки.Таблица"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеОтбора", УсловиеОтбора); + + Контекст.ЧастиЗапросаЗначенийИзКлючейДляРасчетаПрав.Добавить(ТекстЗапроса); + +КонецПроцедуры + +// Для процедуры СобратьЧастиЗапросовЗаполнения. +Процедура ДобавитьЧастьЗапросаВыбораПравПоВладельцамНастроекПрав(Контекст) + + Если Контекст.ЧастиУсловияВыбораПравПоВладельцамНастроекПрав.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ТекстЗапроса = + "ВЫБРАТЬ + | НастройкиПрав.Объект КАК ВладелецНастроекПрав, + | НастройкиПрав.Пользователь КАК ВладелецПрав, + | МАКСИМУМ(НастройкиПрав.ИзменениеРазрешено) = ИСТИНА + | И МАКСИМУМ(НастройкиПрав.ИзменениеЗапрещено) = ЛОЖЬ КАК Изменение + |ИЗ + | (ВЫБРАТЬ + | НаследованиеНастроек.Объект КАК Объект, + | СоставыГруппПользователей.Пользователь КАК Пользователь, + | ИСТИНА КАК ЧтениеРазрешено, + | ЛОЖЬ КАК ЧтениеЗапрещено, + | ЛОЖЬ КАК ИзменениеРазрешено, + | ЛОЖЬ КАК ИзменениеЗапрещено + | ИЗ + | РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + | ПО НастройкиПрав.Объект = НаследованиеНастроек.Родитель + | И (НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения) + | И (&УсловиеОтбора) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + | ПО (СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь) + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ + | НаследованиеНастроек.Объект, + | СоставыГруппПользователей.Пользователь, + | ЛОЖЬ, + | ИСТИНА, + | ЛОЖЬ, + | ЛОЖЬ + | ИЗ + | РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + | ПО НастройкиПрав.Объект = НаследованиеНастроек.Родитель + | И (НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения) + | И (&УсловиеОтбора) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + | ПО (СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь) + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ + | НаследованиеНастроек.Объект, + | СоставыГруппПользователей.Пользователь, + | ЛОЖЬ, + | ЛОЖЬ, + | ИСТИНА, + | ЛОЖЬ + | ИЗ + | РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + | ПО НастройкиПрав.Объект = НаследованиеНастроек.Родитель + | И (НастройкиПрав.Таблица = &ИдентификаторТаблицыНастроекПрав) + | И (НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения) + | И (&УсловиеОтбора) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + | ПО (СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь) + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ + | НаследованиеНастроек.Объект, + | СоставыГруппПользователей.Пользователь, + | ЛОЖЬ, + | ЛОЖЬ, + | ЛОЖЬ, + | ИСТИНА + | ИЗ + | РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + | ПО НастройкиПрав.Объект = НаследованиеНастроек.Родитель + | И (НастройкиПрав.Таблица = &ИдентификаторТаблицыНастроекПрав) + | И (НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения) + | И (&УсловиеОтбора) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + | ПО (СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь)) КАК НастройкиПрав + | + |СГРУППИРОВАТЬ ПО + | НастройкиПрав.Объект, + | НастройкиПрав.Пользователь + | + |ИМЕЮЩИЕ + | МАКСИМУМ(НастройкиПрав.ЧтениеРазрешено) = ИСТИНА И + | МАКСИМУМ(НастройкиПрав.ЧтениеЗапрещено) = ЛОЖЬ + |ИТОГИ ПО + | ВладелецНастроекПрав"; + Если Контекст.ЧастиУсловияВыбораПравПоВладельцамНастроекПрав.Количество() = 1 Тогда + УсловиеОтбора = Контекст.ЧастиУсловияВыбораПравПоВладельцамНастроекПрав[0]; + Иначе + УсловиеОтбора = СтрСоединить(Контекст.ЧастиУсловияВыбораПравПоВладельцамНастроекПрав, + Символы.ПС + " ИЛИ "); + КонецЕсли; + УсловиеОтбора = СтрЗаменить(УсловиеОтбора, "#ПроверяемоеПоле", "НаследованиеНастроек.Объект"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеОтбора", ТекстСОтступом(УсловиеОтбора, " ")); + + Контекст.ЧастиЗапросаЗначенийИзКлючейДляРасчетаПрав.Добавить(ТекстЗапроса); + +КонецПроцедуры + +// Для процедуры ДобавитьТекстыЗапросовВПараметрыОграничения. +Процедура ЗаполнитьЗапросыПроверкиПравЧтениеИзменение(Результат, Контекст) + + Если Контекст.ИмяКоллекцииТипа = "ЖурналыДокументов" Тогда + Возврат; + КонецЕсли; + + Свойства = СвойстваОграниченияСписка(Контекст.Список, Контекст); + + Если Контекст.ЭтоСсылочныйТип + Или Результат.ИспользуетсяОграничениеПоВладельцу Тогда + + Если Свойства.ОграничениеВШаблонахЧерезКлючиДоступаПользователейИГруппДоступа Тогда + Если Контекст.ДляВнешнихПользователей Тогда + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + |ГДЕ + | КлючиДоступаКОбъектам.Объект = &Объект + | И (ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа + | ГДЕ + | РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + | И РазрешенныеКлючиДоступа.ВнешнийПользователь = &АвторизованныйПользователь + | И РазрешенныеКлючиДоступа.Изменение) + | ИЛИ ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + | ГДЕ + | РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + | И РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя) + | И РазрешенныеКлючиДоступа.Изменение))"; + Иначе + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + |ГДЕ + | КлючиДоступаКОбъектам.Объект = &Объект + | И (ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа + | ГДЕ + | РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + | И РазрешенныеКлючиДоступа.Пользователь = &АвторизованныйПользователь + | И РазрешенныеКлючиДоступа.Изменение) + | ИЛИ ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + | ГДЕ + | РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + | И РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя) + | И РазрешенныеКлючиДоступа.Изменение))"; + КонецЕсли; + ИначеЕсли Свойства.ОграничениеВШаблонахЧерезКлючиДоступаПользователей Тогда + Если Контекст.ДляВнешнихПользователей Тогда + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа + | ПО (КлючиДоступаКОбъектам.Объект = &Объект) + | И (РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей) + | И (РазрешенныеКлючиДоступа.ВнешнийПользователь = &АвторизованныйПользователь) + | И (РазрешенныеКлючиДоступа.Изменение)"; + Иначе + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа + | ПО (КлючиДоступаКОбъектам.Объект = &Объект) + | И (РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей) + | И (РазрешенныеКлючиДоступа.Пользователь = &АвторизованныйПользователь) + | И (РазрешенныеКлючиДоступа.Изменение)"; + КонецЕсли; + Иначе + Если Контекст.ДляВнешнихПользователей Тогда + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + | ПО (КлючиДоступаКОбъектам.Объект = &Объект) + | И (РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей) + | И (РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя)) + | И (РазрешенныеКлючиДоступа.Изменение)"; + Иначе + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + | ПО (КлючиДоступаКОбъектам.Объект = &Объект) + | И (РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей) + | И (РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя)) + | И (РазрешенныеКлючиДоступа.Изменение)"; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если Не Результат.ИспользуетсяОграничениеПоВладельцу Тогда + ТекстЗапросаСПроверкойПоВладельцамНастроекПрав = ""; + Иначе + ТипКонечногоПоля = Контекст.СвойстваПолей[0].ТипКонечногоПоля; + ТипыВладельцевНастроекПравПоля = Новый Соответствие; + Для Каждого КлючИЗначение Из Контекст.ТипыВладельцевНастроекПрав Цикл + Если ТипКонечногоПоля.СодержитТип(КлючИЗначение.Ключ) Тогда + ТипыВладельцевНастроекПравПоля.Вставить(КлючИЗначение.Ключ, + ИмяТипаНаЯзыкеЗапросов(КлючИЗначение.Ключ)); + КонецЕсли; + КонецЦикла; + Если ТипыВладельцевНастроекПравПоля.Количество() = 0 Тогда + ТекстЗапросаСПроверкойПоВладельцамНастроекПрав = ""; + + ИначеЕсли ТипКонечногоПоля.Типы().Количество() = ТипыВладельцевНастроекПравПоля.Количество() Тогда + ТекстЗапросаСПроверкойПоВладельцамНастроекПрав = + ТекстЗапросаСПроверкойПоВладельцамНастроекПрав(); + Иначе + Если Контекст.ЭтоСсылочныйТип Тогда + ТекстЗапросаСПроверкойПоВладельцамНастроекПрав = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ГДЕ + | ВЫБОР + | КОГДА &УсловиеПроверкиТипаВладельцаНастроекПрав + | ТОГДА &УсловиеСПроверкойПоВладельцамНастроекПрав + | ИНАЧЕ ИСТИНА В + | (&ТекстЗапросаСтандартнойПроверки) + | КОНЕЦ"; + Иначе + ТекстЗапросаСПроверкойПоВладельцамНастроекПрав = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ЛОЖЬ КАК ЗначениеЛожь + |ИЗ + | " + Контекст.Список + " КАК ТекущаяТаблица + |ГДЕ + | &ОтборПоИзмерениям + | И ВЫБОР + | КОГДА &УсловиеПроверкиТипаВладельцаНастроекПрав + | ТОГДА &УсловиеСПроверкойПоВладельцамНастроекПрав + | ИНАЧЕ ИСТИНА В + | (&ТекстЗапросаСтандартнойПроверки) + | КОНЕЦ"; + КонецЕсли; + УсловиеПроверкиТипа = ""; + Для Каждого СвойстваТипа Из ТипыВладельцевНастроекПравПоля Цикл + УсловиеПроверкиТипа = УсловиеПроверкиТипа + ?(УсловиеПроверкиТипа = "", "", " + | ") + "ТИПЗНАЧЕНИЯ(&Объект) = ТИП(" + СвойстваТипа.Значение + ")"; + КонецЦикла; + ТекстЗапросаСПроверкойПоВладельцамНастроекПрав = СтрЗаменить( + ТекстЗапросаСПроверкойПоВладельцамНастроекПрав, + "&УсловиеПроверкиТипаВладельцаНастроекПрав", + УсловиеПроверкиТипа); + + ТекстЗапросаСПроверкойПоВладельцамНастроекПрав = СтрЗаменить( + ТекстЗапросаСПроверкойПоВладельцамНастроекПрав, + "&УсловиеСПроверкойПоВладельцамНастроекПрав", + ТекстСОтступом(УсловиеИзЗапросаСПроверкойПоВладельцамНастроекПрав(), + " ")); + + ТекстЗапросаСПроверкойПоВладельцамНастроекПрав = СтрЗаменить( + ТекстЗапросаСПроверкойПоВладельцамНастроекПрав, + "&ТекстЗапросаСтандартнойПроверки", + ТекстСОтступом(ТекстЗапроса, " ")); + КонецЕсли; + КонецЕсли; + + Если Результат.ИспользуетсяОграничениеПоВладельцу Тогда + Если Контекст.ЭтоСсылочныйТип Тогда + ПолеОбъекта = "ВЫРАЗИТЬ(&Объект КАК " + Контекст.Список + ")." + Результат.ПолеВладельца.Имя; + Иначе + ПолеОбъекта = "ТекущаяТаблица." + Результат.ПолеВладельца.Имя; + КонецЕсли; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Объект", ПолеОбъекта); + ТекстЗапросаСПроверкойПоВладельцамНастроекПрав = + СтрЗаменить(ТекстЗапросаСПроверкойПоВладельцамНастроекПрав, "&Объект", ПолеОбъекта); + + ИначеЕсли Не Контекст.ЭтоСсылочныйТип Тогда + + Если Свойства.ОграничениеВШаблонахЧерезКлючиДоступаПользователей Тогда + Если Контекст.ДляВнешнихПользователей Тогда + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | РегистрСведений.КлючиДоступаКРегистрам КАК КлючиДоступаКРегистрам + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа + | ПО (КлючиДоступаКРегистрам.Регистр = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)) + | И (КлючиДоступаКРегистрам.ДляВнешнихПользователей = ИСТИНА) + | И (КлючиДоступаКРегистрам.Поле1 = &ТекущаяТаблицаПоле1) + | И (РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКРегистрам.КлючДоступа) + | И (РазрешенныеКлючиДоступа.ВнешнийПользователь = &АвторизованныйПользователь) + | И (РазрешенныеКлючиДоступа.Изменение)"; + Иначе + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | РегистрСведений.КлючиДоступаКРегистрам КАК КлючиДоступаКРегистрам + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа + | ПО (КлючиДоступаКРегистрам.Регистр = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)) + | И (КлючиДоступаКРегистрам.ДляВнешнихПользователей = ЛОЖЬ) + | И (КлючиДоступаКРегистрам.Поле1 = &ТекущаяТаблицаПоле1) + | И (РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКРегистрам.КлючДоступа) + | И (РазрешенныеКлючиДоступа.Пользователь = &АвторизованныйПользователь) + | И (РазрешенныеКлючиДоступа.Изменение)"; + КонецЕсли; + Иначе + Если Контекст.ДляВнешнихПользователей Тогда + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | РегистрСведений.КлючиДоступаКРегистрам КАК КлючиДоступаКРегистрам + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + | ПО (КлючиДоступаКРегистрам.Регистр = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)) + | И (КлючиДоступаКРегистрам.ДляВнешнихПользователей = ИСТИНА) + | И (КлючиДоступаКРегистрам.Поле1 = &ТекущаяТаблицаПоле1) + | И (РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКРегистрам.КлючДоступа) + | И (РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя)) + | И (РазрешенныеКлючиДоступа.Изменение)"; + Иначе + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | РегистрСведений.КлючиДоступаКРегистрам КАК КлючиДоступаКРегистрам + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + | ПО (КлючиДоступаКРегистрам.Регистр = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)) + | И (КлючиДоступаКРегистрам.ДляВнешнихПользователей = ЛОЖЬ) + | И (КлючиДоступаКРегистрам.Поле1 = &ТекущаяТаблицаПоле1) + | И (РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКРегистрам.КлючДоступа) + | И (РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя)) + | И (РазрешенныеКлючиДоступа.Изменение)"; + КонецЕсли; + КонецЕсли; + + УточнитьРегистрКлючейИУсловиеСоединения(ТекстЗапроса, Результат, Контекст); + + Если Контекст.ДляВнешнихПользователей Тогда + ТекстЗапросаНовыхКомбинацийЗначенийОпорныхПолей = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | &ТекущаяТаблицаПоле1 КАК ТекущаяТаблицаПоле1 + |ИЗ + | &Список КАК ТекущаяТаблица + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаКРегистрам КАК КлючиДоступаКРегистрам + | ПО (КлючиДоступаКРегистрам.Регистр = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)) + | И (КлючиДоступаКРегистрам.ДляВнешнихПользователей = ИСТИНА) + | И (КлючиДоступаКРегистрам.Поле1 = &ТекущаяТаблицаПоле1) + |ГДЕ + | &ОтборПоИзмерениям + | И КлючиДоступаКРегистрам.ДляВнешнихПользователей ЕСТЬ NULL"; + Иначе + ТекстЗапросаНовыхКомбинацийЗначенийОпорныхПолей = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | &ТекущаяТаблицаПоле1 КАК ТекущаяТаблицаПоле1 + |ИЗ + | &Список КАК ТекущаяТаблица + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаКРегистрам КАК КлючиДоступаКРегистрам + | ПО (КлючиДоступаКРегистрам.Регистр = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)) + | И (КлючиДоступаКРегистрам.ДляВнешнихПользователей = ЛОЖЬ) + | И (КлючиДоступаКРегистрам.Поле1 = &ТекущаяТаблицаПоле1) + |ГДЕ + | &ОтборПоИзмерениям + | И КлючиДоступаКРегистрам.ДляВнешнихПользователей ЕСТЬ NULL"; + КонецЕсли; + УточнитьРегистрКлючейИУсловиеСоединения(ТекстЗапросаНовыхКомбинацийЗначенийОпорныхПолей, + Результат, Контекст, Истина); + + Результат.ТекстЗапросаНовыхКомбинацийЗначенийОпорныхПолей = + ТекстЗапросаНовыхКомбинацийЗначенийОпорныхПолей; + КонецЕсли; + + Если Не Контекст.ЭтоСсылочныйТип Тогда + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ЛОЖЬ КАК ЗначениеЛожь + |ИЗ + | " + Контекст.Список + " КАК ТекущаяТаблица + |ГДЕ + | &ОтборПоИзмерениям + | И НЕ ИСТИНА В + | (" + ТекстСОтступом(ТекстЗапроса, " ") + ")"; + КонецЕсли; + + Если ЗначениеЗаполнено(ТекстЗапросаСПроверкойПоВладельцамНастроекПрав) Тогда + Результат.ТекстЗапросаПроверкиПравЧтениеИзменение = ТекстЗапросаСПроверкойПоВладельцамНастроекПрав; + Иначе + Результат.ТекстЗапросаПроверкиПравЧтениеИзменение = ТекстЗапроса; + КонецЕсли; + + Если Не Результат.ОграничениеЧтенияОтключено Тогда + Результат.ТекстЗапросаПроверкиПраваЧтение = СтрЗаменить(ТекстЗапроса, + "РазрешенныеКлючиДоступа.Изменение", "Истина"); + КонецЕсли; + + Если Результат.ИспользуетсяОграничениеПоВладельцу + И Результат.ПолеВладельца.ИзменениеКакЧтение Тогда + + Результат.ТекстЗапросаПроверкиПравЧтениеИзменение = Результат.ТекстЗапросаПроверкиПраваЧтение; + КонецЕсли; + +КонецПроцедуры + +// Для процедуры ЗаполнитьЗапросыПроверкиПравЧтениеИзменение. +Функция УсловиеИзЗапросаСПроверкойПоВладельцамНастроекПрав() + + Строки = СтрРазделить(ТекстЗапросаСПроверкойПоВладельцамНастроекПрав(), Символы.ПС, ""); + Строки.Удалить(0); + Строки.Удалить(0); + Строки.Удалить(0); + + Возврат СокрЛП(СтрСоединить(Строки, Символы.ПС)); + +КонецФункции + +// Для процедуры ЗаполнитьЗапросыПроверкиПравЧтениеИзменение. +Функция ТекстЗапросаСПроверкойПоВладельцамНастроекПрав() + + Возврат + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ГДЕ + | ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + | ПО + | НаследованиеНастроек.Объект = &Объект + | И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + | И НастройкиПрав.Таблица = &ИдентификаторТаблицыНастроекПрав + | И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + | ПО + | СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + | И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь) + | И НЕ ЛОЖЬ В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ЛОЖЬ + | ИЗ + | РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + | ПО + | НаследованиеНастроек.Объект = &Объект + | И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + | И НастройкиПрав.Таблица = &ИдентификаторТаблицыНастроекПрав + | И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + | ПО + | СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + | И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь)"; + +КонецФункции + +// Для процедуры ЗаполнитьЗапросыПроверкиПравЧтениеИзменение. +Процедура УточнитьРегистрКлючейИУсловиеСоединения(ТекстЗапроса, Результат, Контекст, ДобавитьПоляВыбора = Ложь) + + Если ЗначениеЗаполнено(Результат.ИмяОтдельногоРегистраКлючей) Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, + "РегистрСведений.КлючиДоступаКРегистрам", + "РегистрСведений." + Результат.ИмяОтдельногоРегистраКлючей); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, + "КлючиДоступаКРегистрам.Регистр = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)", + "ИСТИНА"); + Иначе + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, + "ИдентификаторыОбъектовМетаданных.ПустаяСсылка", + УправлениеДоступомСлужебныйПовтИсп.ОписаниеПредопределенногоИдентификатораОбъектаМетаданных( + Контекст.Список)); + КонецЕсли; + + УсловиеСоединения = ""; + НомерПоля = 1; + Для Каждого Поле Из Результат.ОпорныеПоля.Используемые Цикл + УсловиеСоединения = УсловиеСоединения + Символы.ПС + + "И (КлючиДоступаКРегистрам.Поле" + НомерПоля + " = ТекущаяТаблица." + Поле + ")"; + НомерПоля = НомерПоля + 1; + КонецЦикла; + Для ТекущийНомер = НомерПоля По Результат.ОпорныеПоля.МаксимальноеКоличество Цикл + УсловиеСоединения = УсловиеСоединения + Символы.ПС + + "И (КлючиДоступаКРегистрам.Поле" + ТекущийНомер + + " = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null))"; + КонецЦикла; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, + "И (КлючиДоступаКРегистрам.Поле1 = &ТекущаяТаблицаПоле1)", + ТекстСОтступом(СокрЛ(УсловиеСоединения), " ")); + + Если Не ДобавитьПоляВыбора Тогда + Возврат; + КонецЕсли; + + ПоляВыбора = ""; + НомерПоля = 1; + Для Каждого Поле Из Результат.ОпорныеПоля.Используемые Цикл + ПоляВыбора = ПоляВыбора + ?(ПоляВыбора = "", "", "," + Символы.ПС) + + "ТекущаяТаблица." + Поле + " КАК Поле" + НомерПоля; + НомерПоля = НомерПоля + 1; + КонецЦикла; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, + "&ТекущаяТаблицаПоле1 КАК ТекущаяТаблицаПоле1", + ТекстСОтступом(СокрЛ(ПоляВыбора), " ")); + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Список", Контекст.Список); + +КонецПроцедуры + +// Для функции СобратьЧастиЗапросов. +Процедура ПодставитьОбщиеПараметрыВЗапрос(ТекстЗапроса, Контекст) + + Если Контекст.ДляВнешнихПользователей Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#КлючДоступаПользователейКОбъекту", "КлючДоступаВнешнихПользователей"); + Иначе + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#КлючДоступаПользователейКОбъекту", "КлючДоступаПользователей"); + КонецЕсли; + + Если Контекст.ЭтоСсылочныйТип Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекущийСписок", Контекст.Список); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#КлючиДоступаКДанным", "КлючиДоступаКОбъектам"); + + Если Контекст.ДляВнешнихПользователей Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#КлючДоступаПользователей", "КлючДоступаВнешнихПользователей"); + Иначе + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#КлючДоступаПользователей", "КлючДоступаПользователей"); + КонецЕсли; + Иначе + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекущийРегистр", Контекст.Список); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#КлючиДоступаКДанным", "ТекущийСписок"); + Номер = 0; + Для Каждого ИмяОпорногоПоля Из Контекст.ОпорныеПоля.Используемые Цикл + Номер = Номер + 1; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ТекущийСписок." + + ИмяОпорногоПоля, "ТекущийСписок.Поле" + Номер); + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ТекущийСписокИсточник." + + ИмяОпорногоПоля, "ТекущийСписокИсточник.Поле" + Номер); + КонецЦикла; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекущийСписок", ?(Контекст.ИмяОтдельногоРегистраКлючей = "", + "РегистрСведений.КлючиДоступаКРегистрам", "РегистрСведений." + Контекст.ИмяОтдельногоРегистраКлючей)); + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#КлючДоступаПользователей", "КлючДоступа"); + КонецЕсли; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&СоставПолей", Формат(Контекст.СоставПолей, "ЧГ=")); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ДляВнешнихПользователей", + ?(Контекст.ДляВнешнихПользователей, "ИСТИНА", "ЛОЖЬ")); + +КонецПроцедуры + +// Для процедуры ДобавитьТекстыЗапросовВПараметрыОграничения. +Процедура ДобавитьПроверкуШапкиКлюча(Контекст, НомерШапки) + + ГруппаПолей = Контекст.ГруппыПолей.Получить("Шапка" + НомерШапки); + Если ГруппаПолей = Неопределено Тогда + Если НомерШапки > 0 Тогда + Возврат; + КонецЕсли; + СоединенияИПоля = Новый Структура("Соединения, Поля", "", ""); + Иначе + СоединенияИПоля = СоединенияИПоляПоТаблицам(ГруппаПолей, + Ложь, НомерШапки).Получить("ТекущийСписок"); + КонецЕсли; + + Если НомерШапки = 0 Тогда + Соединения = СоединенияИПоля.Соединения + " + |ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиДоступа КАК Шапка0 + |ПО " + ?(Контекст.ОтдельныйРегистр, "", "(ТекущийСписок.Регистр = &ИдентификаторРегистра) + | И ") + "(Шапка0.Ссылка = #КлючиДоступаКДанным.#КлючДоступаПользователей) + | И (Шапка0.СоставПолей = &СоставПолей) + | И (Шапка0.ПометкаУдаления = ЛОЖЬ)"; + Иначе + Соединения = СоединенияИПоля.Соединения + " + |ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиДоступа.Шапка КАК Шапка? + |ПО " + ?(Контекст.ОтдельныйРегистр, "", "(ТекущийСписок.Регистр = &ИдентификаторРегистра) + | И ") + "(Шапка?.Ссылка = #КлючиДоступаКДанным.#КлючДоступаПользователей) + | И (Шапка?.НомерСтроки = " + НомерШапки + ")"; + КонецЕсли; + + Соединения = СокрЛ(Соединения) + ТекстСОтступом(СоединенияИПоля.Поля, " "); + Соединения = ТекстСОтступом(Соединения, " "); + + Условие = "НЕ Шапка?.Ссылка ЕСТЬ NULL"; + Условие = ТекстСОтступом(Условие, " "); + + ШаблонТекстаЧастиУсловия = + "НЕ ИСТИНА В + |(ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + |ИЗ + | (ВЫБРАТЬ + | ИСТИНА КАК ЗначениеИстина) КАК ЗначениеИстина + | #Соединения + |ГДЕ + | #Условие)"; + + ТекстЧастиУсловия = ШаблонТекстаЧастиУсловия; + ТекстЧастиУсловия = СтрЗаменить(ТекстЧастиУсловия, "#Соединения", Соединения); + ТекстЧастиУсловия = СтрЗаменить(ТекстЧастиУсловия, "#Условие", Условие); + + ТекстЧастиУсловия = СтрЗаменить(ТекстЧастиУсловия, "Шапка?", "Шапка" + НомерШапки); + Контекст.ЧастиУсловияПроверки.Добавить(ТекстЧастиУсловия); + +КонецПроцедуры + +// Для процедуры ДобавитьТекстыЗапросовВПараметрыОграничения. +Процедура ДобавитьПроверкуТабличнойЧастиКлюча(Контекст, НомерТабличнойЧастиКлюча) + + ТаблицыПоГруппам = Контекст.ГруппыДополнительныхТаблиц.ТаблицыПоГруппам; + ГруппаДополнительныхТаблиц = ТаблицыПоГруппам.Получить(НомерТабличнойЧастиКлюча); + + ИмяТабличнойЧастиКлюча = "ТабличнаяЧасть" + НомерТабличнойЧастиКлюча; + ГруппаПолей = Контекст.ГруппыПолей.Получить(ИмяТабличнойЧастиКлюча); + + СоединенияИПоляПоТаблицам = СоединенияИПоляПоТаблицам(ГруппаПолей, + Истина, , , ВГруппеОднаДополнительнаяТаблицаСПолями(Контекст, ГруппаДополнительныхТаблиц)); + + Соединения = ""; + Условие = ""; + Поля = ""; + + Если ГруппаДополнительныхТаблиц = Неопределено Тогда + ПсевдонимТабличнойЧастиОбъекта = Контекст.ПсевдонимыТабличныхЧастейОбъекта.Получить(НомерТабличнойЧастиКлюча); + ИмяТабличнойЧастиОбъекта = СтрЗаменить(ПсевдонимТабличнойЧастиОбъекта, "ТекущийСписок", ""); + СоединенияИПоля = СоединенияИПоляПоТаблицам.Получить(ПсевдонимТабличнойЧастиОбъекта); + Соединения = Соединения + " + |ЛЕВОЕ СОЕДИНЕНИЕ &ТекущийСписок." + ИмяТабличнойЧастиОбъекта + " КАК " + ПсевдонимТабличнойЧастиОбъекта + " + |ПО " + ПсевдонимТабличнойЧастиОбъекта + ".Ссылка = ТекущийСписок.Ссылка" + + СоединенияИПоля.Соединения; + Условие = ПсевдонимТабличнойЧастиОбъекта + ".Ссылка #ПроверкаNULL"; + Поля = СоединенияИПоля.Поля; + Иначе + Для Каждого ДополнительнаяТаблица Из ГруппаДополнительныхТаблиц Цикл + Соединения = Соединения + " + |ЛЕВОЕ СОЕДИНЕНИЕ " + ДополнительнаяТаблица.Таблица + " КАК " + ДополнительнаяТаблица.Псевдоним + " + |ПО " + ?(Контекст.ОтдельныйРегистр, "", "(ТекущийСписок.Регистр = &ИдентификаторРегистра) + | И ") + ТекстСОтступом(ДополнительнаяТаблица.ТекстУсловияСоединения, " "); + СоединенияИПоля = СоединенияИПоляПоТаблицам.Получить(ДополнительнаяТаблица.Псевдоним); + Если СоединенияИПоля = Неопределено Тогда + Продолжить; + КонецЕсли; + Соединения = Соединения + СоединенияИПоля.Соединения; + Условие = Условие + ?(Условие = "", "", " + |ИЛИ ") + ДополнительнаяТаблица.ПолеПроверкиСоединения + " #ПроверкаNULL"; + Поля = Поля + СоединенияИПоля.Поля; + КонецЦикла; + Если СтрЧислоСтрок(Условие) > 1 Тогда + Условие = "(" + Условие + ")"; + КонецЕсли; + КонецЕсли; + ИсходныеСоединения = Соединения; + ИсходноеУсловие = Условие; + + ШаблонТекстаЧастиУсловия = + "ЛОЖЬ В + |(ВЫБРАТЬ ПЕРВЫЕ 1 + | ЛОЖЬ + |ИЗ + | (ВЫБРАТЬ + | ИСТИНА КАК ЗначениеИстина) КАК ЗначениеИстина + | #Соединения + |ГДЕ + | #Условие)"; + + // Прямое соединение (проверка наличия требуемых записей в ключе). + Соединения = ИсходныеСоединения + " + |ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиДоступа.ТабличнаяЧасть? КАК ТабличнаяЧасть? + |ПО (ТабличнаяЧасть?.Ссылка = #КлючиДоступаКДанным.#КлючДоступаПользователей)"; + Соединения = СокрЛ(Соединения) + ТекстСОтступом(Поля, " "); + Соединения = ТекстСОтступом(Соединения, " "); + + Условие = + "ТабличнаяЧасть?.Ссылка ЕСТЬ NULL + |И " + ТекстСОтступом(СокрЛ(ИсходноеУсловие), " "); + Условие = ТекстСОтступом(Условие, " "); + Условие = СтрЗаменить(Условие, "#ПроверкаNULL", "ЕСТЬ НЕ NULL"); + + ТекстЧастиУсловия = ШаблонТекстаЧастиУсловия; + ТекстЧастиУсловия = СтрЗаменить(ТекстЧастиУсловия, "#Соединения", Соединения); + ТекстЧастиУсловия = СтрЗаменить(ТекстЧастиУсловия, "#Условие", Условие); + ТекстЧастиУсловия = СтрЗаменить(ТекстЧастиУсловия, "ТабличнаяЧасть?", ИмяТабличнойЧастиКлюча); + Контекст.ЧастиУсловияПроверки.Добавить(ТекстЧастиУсловия); + + // Обратное соединение (проверка отсутствия лишних записей в ключе). + Если ГруппаДополнительныхТаблиц = Неопределено + Или ГруппаДополнительныхТаблиц.Количество() = 1 Тогда + + Соединения = + "ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиДоступа.ТабличнаяЧасть? КАК ТабличнаяЧасть? + |ПО " + ?(Контекст.ОтдельныйРегистр, "", "(ТекущийСписок.Регистр = &ИдентификаторРегистра) + | И ") + "(ТабличнаяЧасть?.Ссылка = #КлючиДоступаКДанным.#КлючДоступаПользователей)"; + + Если ГруппаДополнительныхТаблиц = Неопределено Тогда + Соединения = Соединения + " + |ЛЕВОЕ СОЕДИНЕНИЕ &ТекущийСписок." + ИмяТабличнойЧастиОбъекта + " КАК " + ПсевдонимТабличнойЧастиОбъекта + + ТекстСОтступом(СоединенияИПоля.Соединения, " ") + " + |ПО " + ПсевдонимТабличнойЧастиОбъекта + ".Ссылка = ТекущийСписок.Ссылка" + + ТекстСОтступом(СоединенияИПоля.Поля, " "); + Иначе + ДополнительнаяТаблица = ГруппаДополнительныхТаблиц[0]; + СоединенияИПоля = СоединенияИПоляПоТаблицам.Получить(ДополнительнаяТаблица.Псевдоним); + Соединения = Соединения + " + |ЛЕВОЕ СОЕДИНЕНИЕ " + ДополнительнаяТаблица.Таблица + " КАК " + ДополнительнаяТаблица.Псевдоним + + ТекстСОтступом(СоединенияИПоля.Соединения, " ") + " + |ПО " + ТекстСОтступом(ДополнительнаяТаблица.ТекстУсловияСоединения, " ") + + ТекстСОтступом(СоединенияИПоля.Поля, " "); + КонецЕсли; + Соединения = ТекстСОтступом(Соединения, " "); + + Условие = + "ТабличнаяЧасть?.Ссылка ЕСТЬ НЕ NULL + |И " + СокрЛ(ИсходноеУсловие); + Условие = ТекстСОтступом(Условие, " "); + Условие = СтрЗаменить(Условие, "#ПроверкаNULL", "ЕСТЬ NULL"); + Иначе + Соединения = + "ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиДоступа.ТабличнаяЧасть? КАК ТабличнаяЧасть? + |ПО " + ?(Контекст.ОтдельныйРегистр, "", "(ТекущийСписок#.Регистр = &ИдентификаторРегистра) + | И ") + "(ТабличнаяЧасть?.Ссылка = #КлючиДоступаКДанным.#КлючДоступаПользователей) + |ЛЕВОЕ СОЕДИНЕНИЕ &ТекущийСписок КАК ТекущийСписокИсточник" + + ТекстСОтступом(ИсходныеСоединения, " ") + " + |ПО " + ?(Контекст.ЭтоСсылочныйТип, "(ТекущийСписокИсточник.Ссылка = ТекущийСписок#.Ссылка)", + Контекст.ОпорныеПоля.УсловиеСоединения); + + Соединения = Соединения + ТекстСОтступом(Поля, " "); + Соединения = ТекстСОтступом(Соединения, " "); + Соединения = СтрЗаменить(Соединения, "ТекущийСписок.", "ТекущийСписокИсточник."); + Соединения = СтрЗаменить(Соединения, "ТекущийСписок#.", "ТекущийСписок."); + + Если Контекст.ЭтоСсылочныйТип Тогда + Условие = + "ТабличнаяЧасть?.Ссылка ЕСТЬ НЕ NULL + |И ТекущийСписокИсточник.Ссылка ЕСТЬ NULL"; + Иначе + Условие = + "ТабличнаяЧасть?.Ссылка ЕСТЬ НЕ NULL + |И ТекущийСписокИсточник.Поле1 ЕСТЬ NULL"; + КонецЕсли; + Условие = ТекстСОтступом(Условие, " "); + КонецЕсли; + + ТекстЧастиУсловия = ШаблонТекстаЧастиУсловия; + ТекстЧастиУсловия = СтрЗаменить(ТекстЧастиУсловия, "#Соединения", Соединения); + ТекстЧастиУсловия = СтрЗаменить(ТекстЧастиУсловия, "#Условие", Условие); + ТекстЧастиУсловия = СтрЗаменить(ТекстЧастиУсловия, "ТабличнаяЧасть?", ИмяТабличнойЧастиКлюча); + Контекст.ЧастиУсловияПроверки.Добавить(ТекстЧастиУсловия); + +КонецПроцедуры + +// Для процедуры ДобавитьТекстыЗапросовВПараметрыОграничения. +Процедура ДобавитьЗаполнениеШапкиКлюча(Контекст, НомерШапки) + + Если Не Контекст.ЭтоСсылочныйТип И НомерШапки = 0 Тогда + ТекстЗапроса = + "ВЫБРАТЬ + | ТекущийСписок.ТекущаяСсылка КАК ТекущаяСсылка, + | " + Контекст.ОпорныеПоля.ДляВыбора + " + | ПОМЕСТИТЬ ТекущийСписок + |ИЗ + | &ЗначенияОпорныхПолей КАК ТекущийСписок"; + Контекст.ЧастиЗапросаЗначенийИзОбъектов.Добавить(ТекстЗапроса); + КонецЕсли; + + ГруппаПолей = Контекст.ГруппыПолей.Получить("Шапка" + НомерШапки); + Если ГруппаПолей = Неопределено Тогда + Возврат; + КонецЕсли; + ДобавитьОписаниеТаблицыКлюча("Шапка" + НомерШапки, ГруппаПолей, Контекст); + + СоединенияИПоля = СоединенияИПоляПоТаблицам(ГруппаПолей, Ложь, + НомерШапки, Истина).Получить("ТекущийСписок"); + + // Выбор значений из объектов для поиска и создания ключей доступа. + Если Контекст.ЭтоСсылочныйТип Тогда + ТекстЗапроса = + "ВЫБРАТЬ + | ТекущийСписок.Ссылка КАК ТекущаяСсылка" + ТекстСОтступом(СоединенияИПоля.Поля, " ") + " + |ИЗ + | &ТекущийСписок КАК ТекущийСписок" + ТекстСОтступом(СоединенияИПоля.Соединения, " ") + " + |ГДЕ + | ТекущийСписок.Ссылка В (&СсылкиНаОбъекты) + | + |УПОРЯДОЧИТЬ ПО + | ТекущаяСсылка + |ИТОГИ ПО + | ТекущаяСсылка"; + Иначе + ТекстЗапроса = + "ВЫБРАТЬ + | ТекущийСписок.ТекущаяСсылка КАК ТекущаяСсылка" + ТекстСОтступом(СоединенияИПоля.Поля, " ") + " + |ИЗ + | ТекущийСписок КАК ТекущийСписок" + ТекстСОтступом(СоединенияИПоля.Соединения, " ") + " + | + |УПОРЯДОЧИТЬ ПО + | ТекущаяСсылка, " + Контекст.ОпорныеПоля.ДляУпорядочения + " + |ИТОГИ ПО + | ТекущаяСсылка"; + КонецЕсли; + + Контекст.ЧастиЗапросаЗначенийИзОбъектов.Добавить(ТекстЗапроса); + + // Выбор значений из ключей доступа для сравнения со значениями требуемых ключей. + Если НомерШапки = 0 Тогда + ТекстЗапроса = + "ВЫБРАТЬ + | Шапка0.Ссылка КАК ТекущаяСсылка" + ТекстСОтступом(СоединенияИПоля.Реквизиты, " ") + " + |ИЗ + | Справочник.КлючиДоступа КАК Шапка0 + |ГДЕ + | Шапка0.Хеш В(&Хеши) + | И Шапка0.Список = &Список + | И Шапка0.СоставПолей = &СоставПолей + | И Шапка0.ДляВнешнихПользователей = &ДляВнешнихПользователей + | И Шапка0.ПометкаУдаления = ЛОЖЬ + | + |УПОРЯДОЧИТЬ ПО + | ТекущаяСсылка + |ИТОГИ ПО + | ТекущаяСсылка"; + Иначе + ТекстЗапроса = + "ВЫБРАТЬ + | Шапка?.Ссылка КАК ТекущаяСсылка" + ТекстСОтступом(СоединенияИПоля.Реквизиты, " ") + " + |ИЗ + | Справочник.КлючиДоступа.Шапка КАК Шапка? + |ГДЕ + | Шапка?.НомерСтроки = " + НомерШапки + " + | И Шапка?.Ссылка.Хеш В(&Хеши) + | И Шапка?.Ссылка.Список = &Список + | И Шапка?.Ссылка.СоставПолей = &СоставПолей + | И Шапка?.Ссылка.ДляВнешнихПользователей = &ДляВнешнихПользователей + | И Шапка?.Ссылка.ПометкаУдаления = ЛОЖЬ + | + |УПОРЯДОЧИТЬ ПО + | ТекущаяСсылка + |ИТОГИ ПО + | ТекущаяСсылка"; + КонецЕсли; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Шапка?", "Шапка" + НомерШапки); + Контекст.ЧастиЗапросаЗначенийИзКлючейДляСравнения.Добавить(ТекстЗапроса); + + // Выбор значений из ключей доступа для вычисления пользователей и групп доступа, которым они разрешены. + Если НомерШапки = 0 Тогда + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ " + МаркерРазмераПорции() + " + | КлючиДоступа.Ссылка КАК Ссылка + |ПОМЕСТИТЬ ПорцияКлючей + |ИЗ + | Справочник.КлючиДоступа КАК КлючиДоступа + |ГДЕ + | КлючиДоступа.Список = &Список + | И КлючиДоступа.СоставПолей = &СоставПолей + | И КлючиДоступа.ДляВнешнихПользователей = &ДляВнешнихПользователей + | И КлючиДоступа.ПометкаУдаления = ЛОЖЬ + | И КлючиДоступа.Ссылка > &ПоследнийКлючДоступа + | + |ИНДЕКСИРОВАТЬ ПО + | Ссылка"; + Контекст.ЧастиЗапросаЗначенийИзКлючейДляРасчетаПрав.Добавить(ТекстЗапроса); + КонецЕсли; + + Если НомерШапки = 0 Тогда + ТекстЗапроса = + "ВЫБРАТЬ + | ПорцияКлючей.Ссылка КАК Ссылка" + ТекстСОтступом(СоединенияИПоля.Реквизиты, " ") + " + |ИЗ + | ПорцияКлючей КАК ПорцияКлючей + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиДоступа КАК Шапка0 + | ПО + | Шапка0.Ссылка = ПорцияКлючей.Ссылка + | + |УПОРЯДОЧИТЬ ПО + | Ссылка + |ИТОГИ ПО + | Ссылка"; + Иначе + ТекстЗапроса = + "ВЫБРАТЬ + | ПорцияКлючей.Ссылка КАК Ссылка" + ТекстСОтступом(СоединенияИПоля.Реквизиты, " ") + " + |ИЗ + | ПорцияКлючей КАК ПорцияКлючей + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиДоступа.Шапка КАК Шапка? + | ПО + | Шапка?.Ссылка = ПорцияКлючей.Ссылка + | И Шапка?.НомерСтроки = " + НомерШапки + " + | + |УПОРЯДОЧИТЬ ПО + | Ссылка + |ИТОГИ ПО + | Ссылка"; + КонецЕсли; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Шапка?", "Шапка" + НомерШапки); + Контекст.ЧастиЗапросаЗначенийИзКлючейДляРасчетаПрав.Добавить(ТекстЗапроса); + + // Условие отбора прав ведущих ключей доступа. + ДобавитьУсловиеОтбораПравДляШапкиКлюча(Контекст, ГруппаПолей, НомерШапки, "ДляВедущихКлючей"); + + // Условие отбора прав ведущих списков. + ДобавитьУсловиеОтбораПравДляШапкиКлюча(Контекст, ГруппаПолей, НомерШапки, "ДляВедущихСписков"); + + // Условие отбора прав по владельцам настроек прав. + ДобавитьУсловиеОтбораПравДляШапкиКлюча(Контекст, ГруппаПолей, НомерШапки, "ДляВладельцевНастроекПрав"); + +КонецПроцедуры + +// Для процедуры ДобавитьЗаполнениеШапкиКлюча. +Процедура ДобавитьУсловиеОтбораПравДляШапкиКлюча(Контекст, ГруппаПолей, НомерШапки, НазначениеУсловия) + + // Условие выбора прав ведущих ключей доступа. + Для Каждого СвойстваПоля Из ГруппаПолей Цикл + Если НазначениеУсловия = "ДляВедущихКлючей" + И СвойстваПоля.ТипыСохраненияКлючейДоступа.Количество() = 0 + Или НазначениеУсловия = "ДляВедущихСписков" + И Не СвойстваПоля.ЕстьТипВедущегоСписка + Или НазначениеУсловия = "ДляВладельцевНастроекПрав" + И Не СвойстваПоля.ЕстьТипВладельцаНастроекПрав Тогда + Продолжить; + КонецЕсли; + Если НомерШапки = 0 Тогда + УсловиеОтбора = + "#ПроверяемоеПоле В + | (ВЫБРАТЬ + | Шапка0." + СвойстваПоля.ИмяРеквизитаГруппыПолейКлючаДоступа + " + | ИЗ + | ПорцияКлючей КАК ПорцияКлючей + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиДоступа КАК Шапка0 + | ПО + | Шапка0.Ссылка = ПорцияКлючей.Ссылка)"; + Иначе + УсловиеОтбора = + "#ПроверяемоеПоле В + | (ВЫБРАТЬ + | Шапка?." + СвойстваПоля.ИмяРеквизитаГруппыПолейКлючаДоступа + " + | ИЗ + | ПорцияКлючей КАК ПорцияКлючей + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиДоступа.Шапка КАК Шапка? + | ПО + | Шапка?.Ссылка = ПорцияКлючей.Ссылка + | И Шапка?.НомерСтроки = " + НомерШапки + ")"; + КонецЕсли; + УсловиеОтбора = СтрЗаменить(УсловиеОтбора, "Шапка?", "Шапка" + НомерШапки); + Если НазначениеУсловия = "ДляВедущихКлючей" Тогда + Контекст.ЧастиУсловияВыбораПравВедущихКлючейДоступа.Добавить(УсловиеОтбора); + ИначеЕсли НазначениеУсловия = "ДляВедущихСписков" Тогда + Контекст.ЧастиУсловияВыбораПравВедущихСписков.Добавить(УсловиеОтбора); + Иначе + Контекст.ЧастиУсловияВыбораПравПоВладельцамНастроекПрав.Добавить(УсловиеОтбора); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Для процедуры ДобавитьТекстыЗапросовВПараметрыОграничения. +Процедура ДобавитьВыборКлючейБезПолейВШапке(Контекст) + + Если Контекст.ГруппыПолей.Получить("Шапка0") <> Неопределено Тогда + Возврат; + КонецЕсли; + + // Выбор значений из ключей доступа для сравнения со значениями требуемых ключей. + ТекстЗапроса = + "ВЫБРАТЬ + | КлючиДоступа.Ссылка КАК ТекущаяСсылка + |ИЗ + | Справочник.КлючиДоступа КАК КлючиДоступа + |ГДЕ + | КлючиДоступа.Хеш В(&Хеши) + | И КлючиДоступа.Список = &Список + | И КлючиДоступа.СоставПолей = &СоставПолей + | И КлючиДоступа.ДляВнешнихПользователей = &ДляВнешнихПользователей + | И КлючиДоступа.ПометкаУдаления = ЛОЖЬ + | + |УПОРЯДОЧИТЬ ПО + | ТекущаяСсылка"; + + Контекст.ЧастиЗапросаЗначенийИзКлючейДляСравнения.Добавить(ТекстЗапроса); + + // Выбор значений из ключей доступа для вычисления пользователей и групп доступа, которым они разрешены. + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ " + МаркерРазмераПорции() + " + | КлючиДоступа.Ссылка КАК Ссылка + |ПОМЕСТИТЬ ПорцияКлючей + |ИЗ + | Справочник.КлючиДоступа КАК КлючиДоступа + |ГДЕ + | КлючиДоступа.Список = &Список + | И КлючиДоступа.СоставПолей = &СоставПолей + | И КлючиДоступа.ДляВнешнихПользователей = &ДляВнешнихПользователей + | И КлючиДоступа.ПометкаУдаления = ЛОЖЬ + | И КлючиДоступа.Ссылка > &ПоследнийКлючДоступа + | + |ИНДЕКСИРОВАТЬ ПО + | Ссылка"; + Контекст.ЧастиЗапросаЗначенийИзКлючейДляРасчетаПрав.Добавить(ТекстЗапроса); + +КонецПроцедуры + +// Для процедуры ДобавитьТекстыЗапросовВПараметрыОграничения. +Процедура ДобавитьЗаполнениеТабличнойЧастиКлюча(Контекст, НомерТабличнойЧастиКлюча) + + ТаблицыПоГруппам = Контекст.ГруппыДополнительныхТаблиц.ТаблицыПоГруппам; + ГруппаДополнительныхТаблиц = ТаблицыПоГруппам.Получить(НомерТабличнойЧастиКлюча); + + ИмяТабличнойЧастиКлюча = "ТабличнаяЧасть" + НомерТабличнойЧастиКлюча; + ГруппаПолей = Контекст.ГруппыПолей.Получить(ИмяТабличнойЧастиКлюча); + + ДобавитьОписаниеТаблицыКлюча(ИмяТабличнойЧастиКлюча, ГруппаПолей, Контекст); + + СоединенияИПоляПоТаблицам = СоединенияИПоляПоТаблицам(ГруппаПолей, + Истина, , Истина, ВГруппеОднаДополнительнаяТаблицаСПолями(Контекст, ГруппаДополнительныхТаблиц)); + + // Выбор значений из объектов для поиска и создания ключей доступа. + Если ГруппаДополнительныхТаблиц = Неопределено Тогда + ПсевдонимТабличнойЧастиОбъекта = Контекст.ПсевдонимыТабличныхЧастейОбъекта.Получить(НомерТабличнойЧастиКлюча); + ИмяТабличнойЧастиОбъекта = СтрЗаменить(ПсевдонимТабличнойЧастиОбъекта, "ТекущийСписок", ""); + СоединенияИПоля = СоединенияИПоляПоТаблицам.Получить(ПсевдонимТабличнойЧастиОбъекта); + ПоляВыбора = ТекстСОтступом(СоединенияИПоля.Поля, " "); + Соединения = ТекстСОтступом(СоединенияИПоля.Соединения, " "); + ПоляУпорядочения = СоединенияИПоля.ПоляУпорядочения; + Реквизиты = СоединенияИПоля.Реквизиты; + ТекстЗапроса = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | " + ПсевдонимТабличнойЧастиОбъекта + ".Ссылка КАК ТекущаяСсылка" + ПоляВыбора + " + |ИЗ + | &ТекущийСписок." + ИмяТабличнойЧастиОбъекта + " КАК " + ПсевдонимТабличнойЧастиОбъекта + Соединения + " + |ГДЕ + | " + ПсевдонимТабличнойЧастиОбъекта + ".Ссылка В (&СсылкиНаОбъекты) + | + |УПОРЯДОЧИТЬ ПО + | ТекущаяСсылка" + ПоляУпорядочения + " + |ИТОГИ ПО + | ТекущаяСсылка"; + Иначе + ПоляВыбора = ""; + Соединения = ""; + Условие = ""; + ПоляУпорядочения = ""; + Реквизиты = ""; + Для Каждого ДополнительнаяТаблица Из ГруппаДополнительныхТаблиц Цикл + СоединенияИПоля = СоединенияИПоляПоТаблицам.Получить(ДополнительнаяТаблица.Псевдоним); + Соединения = Соединения + " + |ЛЕВОЕ СОЕДИНЕНИЕ " + ДополнительнаяТаблица.Таблица + " КАК " + ДополнительнаяТаблица.Псевдоним + " + |ПО " + ТекстСОтступом(ДополнительнаяТаблица.ТекстУсловияСоединения, " "); + Если СоединенияИПоля = Неопределено Тогда + Продолжить; + КонецЕсли; + Соединения = Соединения + СоединенияИПоля.Соединения; + Условие = Условие + ?(Условие = "", "", " + |ИЛИ ") + ДополнительнаяТаблица.ПолеПроверкиСоединения + " ЕСТЬ НЕ NULL"; + ПоляВыбора = ПоляВыбора + СоединенияИПоля.Поля; + ПоляУпорядочения = ПоляУпорядочения + СоединенияИПоля.ПоляУпорядочения; + Реквизиты = Реквизиты + СоединенияИПоля.Реквизиты; + КонецЦикла; + Если СтрЧислоСтрок(Условие) > 1 Тогда + Условие = "(" + Условие + ")"; + КонецЕсли; + Если Контекст.ЭтоСсылочныйТип Тогда + ТекстЗапроса = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ТекущийСписок.Ссылка КАК ТекущаяСсылка" + ТекстСОтступом(ПоляВыбора, " ") + " + |ИЗ + | &ТекущийСписок КАК ТекущийСписок" + ТекстСОтступом(Соединения, " ") + " + |ГДЕ + | ТекущийСписок.Ссылка В (&СсылкиНаОбъекты) + | И " + ТекстСОтступом(Условие, " ") + " + | + |УПОРЯДОЧИТЬ ПО + | ТекущаяСсылка" + ПоляУпорядочения + " + |ИТОГИ ПО + | ТекущаяСсылка"; + Иначе + ТекстЗапроса = + "ВЫБРАТЬ + | ТекущийСписок.ТекущаяСсылка КАК ТекущаяСсылка" + ТекстСОтступом(ПоляВыбора, " ") + " + |ИЗ + | ТекущийСписок КАК ТекущийСписок" + ТекстСОтступом(Соединения, " ") + " + |ГДЕ + | " + ТекстСОтступом(Условие, " ") + " + | + |УПОРЯДОЧИТЬ ПО + | ТекущаяСсылка, " + Контекст.ОпорныеПоля.ДляУпорядочения + ПоляУпорядочения + " + |ИТОГИ ПО + | ТекущаяСсылка"; + КонецЕсли; + КонецЕсли; + + Контекст.ЧастиЗапросаЗначенийИзОбъектов.Добавить(ТекстЗапроса); + + // Выбор значений из ключей доступа для сравнения со значениями требуемых ключей. + ТекстЗапроса = + "ВЫБРАТЬ + | ТабличнаяЧасть?.Ссылка КАК ТекущаяСсылка" + ТекстСОтступом(Реквизиты, " ") + " + |ИЗ + | Справочник.КлючиДоступа.ТабличнаяЧасть? КАК ТабличнаяЧасть? + |ГДЕ + | ТабличнаяЧасть?.Ссылка.Хеш В(&Хеши) + | И ТабличнаяЧасть?.Ссылка.Список = &Список + | И ТабличнаяЧасть?.Ссылка.СоставПолей = &СоставПолей + | И ТабличнаяЧасть?.Ссылка.ДляВнешнихПользователей = &ДляВнешнихПользователей + | И ТабличнаяЧасть?.Ссылка.ПометкаУдаления = ЛОЖЬ + | + |УПОРЯДОЧИТЬ ПО + | ТекущаяСсылка" + ПоляУпорядочения + " + |ИТОГИ ПО + | ТекущаяСсылка"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ТабличнаяЧасть?", "ТабличнаяЧасть" + НомерТабличнойЧастиКлюча); + Контекст.ЧастиЗапросаЗначенийИзКлючейДляСравнения.Добавить(ТекстЗапроса); + + // Выбор значений из ключей доступа для вычисления пользователей и групп доступа, которым они разрешены. + ТекстЗапроса = + "ВЫБРАТЬ + | ПорцияКлючей.Ссылка КАК Ссылка" + ТекстСОтступом(Реквизиты, " ") + " + |ИЗ + | ПорцияКлючей КАК ПорцияКлючей + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиДоступа.ТабличнаяЧасть? КАК ТабличнаяЧасть? + | ПО + | ТабличнаяЧасть?.Ссылка = ПорцияКлючей.Ссылка + | + |УПОРЯДОЧИТЬ ПО + | Ссылка + |ИТОГИ ПО + | Ссылка"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ТабличнаяЧасть?", "ТабличнаяЧасть" + НомерТабличнойЧастиКлюча); + Контекст.ЧастиЗапросаЗначенийИзКлючейДляРасчетаПрав.Добавить(ТекстЗапроса); + + // Условие отбора прав ведущих ключей доступа. + ДобавитьУсловиеОтбораПравДляТабличнойЧастиКлюча(Контекст, + ГруппаПолей, НомерТабличнойЧастиКлюча, "ДляВедущихКлючей"); + + // Условие отбора прав ведущих списков. + ДобавитьУсловиеОтбораПравДляТабличнойЧастиКлюча(Контекст, + ГруппаПолей, НомерТабличнойЧастиКлюча, "ДляВедущихСписков"); + + // Условие отбора прав по владельцам настроек прав. + ДобавитьУсловиеОтбораПравДляТабличнойЧастиКлюча(Контекст, + ГруппаПолей, НомерТабличнойЧастиКлюча, "ДляВладельцевНастроекПрав"); + +КонецПроцедуры + +// Для процедуры ДобавитьЗаполнениеТабличнойЧастиКлюча. +Процедура ДобавитьУсловиеОтбораПравДляТабличнойЧастиКлюча(Контекст, ГруппаПолей, + НомерТабличнойЧастиКлюча, НазначениеУсловия) + + Для Каждого СвойстваПоля Из ГруппаПолей Цикл + Если НазначениеУсловия = "ДляВедущихКлючей" + И СвойстваПоля.ТипыСохраненияКлючейДоступа.Количество() = 0 + Или НазначениеУсловия = "ДляВедущихСписков" + И Не СвойстваПоля.ЕстьТипВедущегоСписка + Или НазначениеУсловия = "ДляВладельцевНастроекПрав" + И Не СвойстваПоля.ЕстьТипВладельцаНастроекПрав Тогда + Продолжить; + КонецЕсли; + УсловиеОтбора = + "#ПроверяемоеПоле В + | (ВЫБРАТЬ + | ТабличнаяЧасть?." + СвойстваПоля.ИмяРеквизитаГруппыПолейКлючаДоступа + " + | ИЗ + | ПорцияКлючей КАК ПорцияКлючей + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиДоступа.ТабличнаяЧасть? КАК ТабличнаяЧасть? + | ПО + | ТабличнаяЧасть?.Ссылка = ПорцияКлючей.Ссылка)"; + + УсловиеОтбора = СтрЗаменить(УсловиеОтбора, "ТабличнаяЧасть?", "ТабличнаяЧасть" + НомерТабличнойЧастиКлюча); + Если НазначениеУсловия = "ДляВедущихКлючей" Тогда + Контекст.ЧастиУсловияВыбораПравВедущихКлючейДоступа.Добавить(УсловиеОтбора); + ИначеЕсли НазначениеУсловия = "ДляВедущихСписков" Тогда + Контекст.ЧастиУсловияВыбораПравВедущихСписков.Добавить(УсловиеОтбора); + Иначе + Контекст.ЧастиУсловияВыбораПравПоВладельцамНастроекПрав.Добавить(УсловиеОтбора); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Для процедур ДобавитьЗаполнениеШапкиКлюча, ДобавитьЗаполнениеТабличнойЧастиКлюча. +Процедура ДобавитьОписаниеТаблицыКлюча(ИмяТаблицыКлюча, ГруппаПолей, Контекст) + + ПоляТаблицыКлюча = Новый Массив; + + Для Каждого СвойстваПоля Из ГруппаПолей Цикл + ПоляТаблицыКлюча.Добавить(СвойстваПоля.ИмяРеквизитаГруппыПолейКлючаДоступа); + КонецЦикла; + + Контекст.ТаблицыКлюча.Добавить(ИмяТаблицыКлюча); + Контекст.РеквизитыТаблицКлюча.Вставить(ИмяТаблицыКлюча, ПоляТаблицыКлюча); + +КонецПроцедуры + +// Для процедур ДобавитьПроверкуШапкиКлюча, ДобавитьПроверкуТабличнойЧастиКлюча. +Функция СоединенияИПоляПоТаблицам(ГруппаПолей, ТабличнаяЧастьКлюча, НомерШапки = 0, ДляВыбораЗначений = Ложь, + ВГруппеОднаДополнительнаяТаблицаСПолями = Ложь) + + СоединенияИПоляПоТаблицам = Новый Соответствие; + НомерРеквизита = 1 + ?(НомерШапки = 0, 0, 5); + + Для Каждого СвойстваПоля Из ГруппаПолей Цикл + + СоединенияИПоля = СоединенияИПоляПоТаблицам.Получить(СвойстваПоля.ПсевдонимТаблицы); + Если СоединенияИПоля = Неопределено Тогда + СоединенияИПоля = Новый Структура; + СоединенияИПоля.Вставить("Соединения", ""); + СоединенияИПоля.Вставить("Поля", ""); + СоединенияИПоля.Вставить("ПоляУпорядочения", ""); + СоединенияИПоля.Вставить("Реквизиты", ""); + СоединенияИПоляПоТаблицам.Вставить(СвойстваПоля.ПсевдонимТаблицы, СоединенияИПоля); + КонецЕсли; + + Соединения = ""; + Если СвойстваПоля.ТипыСохраненияКлючейДоступа.Количество() > 0 Тогда + Соединения = Соединения + " + |ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам? + |ПО (КлючиДоступаКОбъектам?.Объект = #ИмяПоляДляЗапроса)"; + КонецЕсли; + + Если СвойстваПоля.ТипыСохраненияГруппЗначений.Количество() > 0 Тогда + Если Не СвойстваПоля.ЭтоСписокЗначенийДоступаСГруппамиЗначений Тогда + Соединения = Соединения + " + |ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений? + |ПО (ГруппыЗначений?.ЗначениеДоступа = #ИмяПоляДляЗапроса) + | И (ГруппыЗначений?.ГруппаДанных = 0)"; + ИначеЕсли СвойстваПоля.НесколькоГруппЗначений Тогда + Соединения = Соединения + " + |ЛЕВОЕ СОЕДИНЕНИЕ &ТекущийСписок.ГруппыДоступа КАК ГруппыЗначений? + |ПО (ГруппыЗначений?.Ссылка = #ИмяПоляДляЗапроса)"; + КонецЕсли; + КонецЕсли; + + Если СвойстваПоля.ТипыСохраненияТиповКонфигурации.Количество() > 0 Тогда + Соединения = Соединения + " + |ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыКонфигурации? + |ПО (#ИмяПоляДляЗапроса <> НЕОПРЕДЕЛЕНО) + | И (ТИПЗНАЧЕНИЯ(ТипыКонфигурации?.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#ИмяПоляДляЗапроса))"; + КонецЕсли; + + Если СвойстваПоля.ТипыСохраненияТиповРасширений.Количество() > 0 Тогда + Соединения = Соединения + " + |ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ИдентификаторыОбъектовРасширений КАК ТипыРасширений? + |ПО (#ИмяПоляДляЗапроса <> НЕОПРЕДЕЛЕНО) + | И (ТИПЗНАЧЕНИЯ(ТипыРасширений?.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#ИмяПоляДляЗапроса))"; + КонецЕсли; + + Поле = СравнениеПоля(СвойстваПоля, ВГруппеОднаДополнительнаяТаблицаСПолями); + + Если ДляВыбораЗначений Тогда + Поле = СтрЗаменить(Поле, "Шапка?.Значение? = ", ""); + Поле = СтрЗаменить(Поле, " ", " "); + Поле = "," + Символы.ПС + Сред(Поле, 5, СтрДлина(Поле) - 5) + " КАК Значение?"; + + СоединенияИПоля.ПоляУпорядочения = СоединенияИПоля.ПоляУпорядочения + + ", " + "Значение" + НомерРеквизита; + + СоединенияИПоля.Реквизиты = СоединенияИПоля.Реквизиты + ", + |Шапка?.Значение" + НомерРеквизита + " КАК Значение" + НомерРеквизита; + КонецЕсли; + + ЗаполнитьПсевдонимПоНомеруРеквизита(Соединения, Поле, НомерРеквизита, "Значение?"); + ЗаполнитьПсевдонимПоНомеруРеквизита(Соединения, Поле, НомерРеквизита, "ГруппыЗначений?"); + ЗаполнитьПсевдонимПоНомеруРеквизита(Соединения, Поле, НомерРеквизита, "КлючиДоступаКОбъектам?"); + ЗаполнитьПсевдонимПоНомеруРеквизита(Соединения, Поле, НомерРеквизита, "ТипыКонфигурации?"); + ЗаполнитьПсевдонимПоНомеруРеквизита(Соединения, Поле, НомерРеквизита, "ТипыРасширений?"); + + Соединения = СтрЗаменить(Соединения, "#ИмяПоляДляЗапроса", СвойстваПоля.ИмяПоляДляЗапроса); + Поле = СтрЗаменить(Поле, "#ИмяПоляДляЗапроса", СвойстваПоля.ИмяПоляДляЗапроса); + + Если ТабличнаяЧастьКлюча Тогда + Поле = СтрЗаменить(Поле, "Шапка?", "ТабличнаяЧасть?"); + СоединенияИПоля.Реквизиты = СтрЗаменить(СоединенияИПоля.Реквизиты, "Шапка?", "ТабличнаяЧасть?"); + КонецЕсли; + + СоединенияИПоля.Соединения = СоединенияИПоля.Соединения + Соединения; + СоединенияИПоля.Поля = СоединенияИПоля.Поля + Поле; + НомерРеквизита = НомерРеквизита + 1; + КонецЦикла; + + Возврат СоединенияИПоляПоТаблицам; + +КонецФункции + +// Для функции СоединенияИПоляПоТаблицам. +Функция ВГруппеОднаДополнительнаяТаблицаСПолями(Контекст, ГруппаДополнительныхТаблиц) + + Если ГруппаДополнительныхТаблиц = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + Если ГруппаДополнительныхТаблиц.Количество() = 1 Тогда + Возврат Истина; + КонецЕсли; + + ПсевдонимыТаблицСПолями = Контекст.ГруппыДополнительныхТаблиц.ПсевдонимыТаблицСПолями; + + КоличествоДополнительныхТаблицСПолями = 0; + Для Каждого ДополнительнаяТаблица Из ГруппаДополнительныхТаблиц Цикл + Если ПсевдонимыТаблицСПолями.Получить(ДополнительнаяТаблица.Псевдоним) = Неопределено Тогда + Продолжить; + КонецЕсли; + КоличествоДополнительныхТаблицСПолями = КоличествоДополнительныхТаблицСПолями + 1; + КонецЦикла; + + Возврат КоличествоДополнительныхТаблицСПолями = 1; + +КонецФункции + +// Для функции СоединенияИПоляПоТаблицам. +Функция СравнениеПоля(СвойстваПоля, ВГруппеОднаДополнительнаяТаблицаСПолями) + + КоличествоТиповПоля = СвойстваПоля.ТипКонечногоПоля.Типы().Количество(); + + БезЗначенияНеопределено = КоличествоТиповПоля = 1; + Если СвойстваПоля.Свойство("БезЗначенияNull") Тогда + БезЗначенияNull = СвойстваПоля.БезЗначенияNull; + Иначе + БезЗначенияNull = БезЗначенияNull(СвойстваПоля, ВГруппеОднаДополнительнаяТаблицаСПолями); + КонецЕсли; + + БезУточненияНеопределено = Не СвойстваПоля.ЕстьУточнениеНеопределено Или БезЗначенияНеопределено; + БезУточненияNull = Не СвойстваПоля.ЕстьУточнениеNull Или БезЗначенияNull; + + // Сохранение только ключей доступа. + Если СвойстваПоля.ТипыСохраненияПустойСсылки.Количество() = 0 + И БезУточненияНеопределено + И БезУточненияNull + И СвойстваПоля.ТипыСохраненияКлючейДоступа.Количество() = КоличествоТиповПоля Тогда + Возврат " + |И (Шапка?.Значение? = ЕСТЬNULL(КлючиДоступаКОбъектам?.#КлючДоступаПользователейКОбъекту, + | ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.Null)))"; + КонецЕсли; + + // Сохранение только групп значений доступа. + Если СвойстваПоля.ТипыСохраненияПустойСсылки.Количество() = 0 + И БезУточненияНеопределено + И БезУточненияNull + И СвойстваПоля.ТипыСохраненияГруппЗначений.Количество() = КоличествоТиповПоля Тогда + + Если Не СвойстваПоля.ЭтоСписокЗначенийДоступаСГруппамиЗначений Тогда + Возврат " + |И (Шапка?.Значение? = ЕСТЬNULL(ГруппыЗначений?.ГруппаЗначенийДоступа, + | ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.Null)))"; + ИначеЕсли СвойстваПоля.НесколькоГруппЗначений Тогда + Возврат " + |И (Шапка?.Значение? = ЕСТЬNULL(ГруппыЗначений?.ГруппаДоступа, + | ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.Null)))"; + Иначе + Возврат " + |И (Шапка?.Значение? = ЕСТЬNULL(ТекущийСписок.ГруппаДоступа, + | ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.Null)))"; + КонецЕсли; + КонецЕсли; + + // Сохранение только значений. + Если Не ЕстьПростойТип(СвойстваПоля.ТипКонечногоПоля) + И СвойстваПоля.ТипыСохраненияЗначений.Количество() = КоличествоТиповПоля Тогда + + Если БезЗначенияNull Тогда + Возврат " + |И (Шапка?.Значение? = #ИмяПоляДляЗапроса)"; + Иначе + Возврат " + |И (Шапка?.Значение? = ЕСТЬNULL(#ИмяПоляДляЗапроса, + | ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.Null)))"; + КонецЕсли; + КонецЕсли; + + // Сохранение одного ссылочного типа. + Если БезУточненияNull + И КоличествоТиповПоля = 1 + И СвойстваПоля.ТипыСохраненияТипов.Количество() = КоличествоТиповПоля + И СвойстваПоля.ТипыСохраненияТиповПростых.Количество() = 0 Тогда + + Если СвойстваПоля.ТипыСохраненияТиповРасширений.Количество() = 0 Тогда + Возврат " + |И (Шапка?.Значение? = ЕСТЬNULL(ТипыКонфигурации?.Ссылка, + | ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)))"; + Иначе + Возврат " + |И (Шапка?.Значение? = ЕСТЬNULL(ТипыРасширений?.Ссылка, + | ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовРасширений.ПустаяСсылка)))"; + КонецЕсли; + КонецЕсли; + + // Сохранение одного простого типа. + Если БезУточненияNull + И КоличествоТиповПоля = 1 + И СвойстваПоля.ТипыСохраненияТиповПростых.Количество() = 1 Тогда + + Возврат СтрЗаменить(" + |И (Шапка?.Значение? = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.Тип#ИмяТипа))", + "#ИмяТипа", СвойстваПоля.ТипыСохраненияТиповПростых[0]); + КонецЕсли; + + Если СвойстваПоля.ТипыСохраненияТипаЗапрещенный.Количество() = КоличествоТиповПоля Тогда + Возврат " + |И (Шапка?.Значение? = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ТипЗапрещенный))"; + КонецЕсли; + + // Сохранение только значения ТипРазрешенный. + Если СвойстваПоля.ТипыСохраненияТипаРазрешенный.Количество() = КоличествоТиповПоля Тогда + Возврат " + |И (Шапка?.Значение? = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ТипРазрешенный))"; + КонецЕсли; + + СравнениеПоля = " + |И (ВЫБОР + | #СодержаниеВыбора + |КОНЕЦ)"; + СодержаниеВыбора = ""; + + СохранениеЗначенияБулево = СвойстваПоля.ТипыСохраненияЗначений.Найти(Тип("Булево")) <> Неопределено; + + Если Не БезЗначенияNull + И Не (СохранениеЗначенияБулево И КоличествоТиповПоля = 1) Тогда + СодержаниеВыбора = СодержаниеВыбора + " + |КОГДА #ИмяПоляДляЗапроса ЕСТЬ NULL + | ТОГДА Шапка?.Значение? = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.Null)"; + КонецЕсли; + Если КоличествоТиповПоля > 1 Тогда + СодержаниеВыбора = СодержаниеВыбора + " + |КОГДА #ИмяПоляДляЗапроса = НЕОПРЕДЕЛЕНО + | ТОГДА Шапка?.Значение? = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.Неопределено)"; + КонецЕсли; + Если СохранениеЗначенияБулево Тогда + Если КоличествоТиповПоля > 1 Тогда + СодержаниеВыбора = СодержаниеВыбора + " + |КОГДА #ИмяПоляДляЗапроса + | ТОГДА Шапка?.Значение? = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.Истина) + |КОГДА НЕ #ИмяПоляДляЗапроса + | ТОГДА Шапка?.Значение? = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.Ложь)"; + Иначе + СодержаниеВыбора = СодержаниеВыбора + " + |КОГДА #ИмяПоляДляЗапроса + | ТОГДА Шапка?.Значение? = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.Истина) + |ИНАЧЕ Шапка?.Значение? = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.Ложь)"; + КонецЕсли; + КонецЕсли; + + ДобавитьПроверкуПростогоТипаЕслиТребуется(СвойстваПоля, СодержаниеВыбора, "Булево"); + ДобавитьПроверкуПростогоТипаЕслиТребуется(СвойстваПоля, СодержаниеВыбора, "Число"); + ДобавитьПроверкуПростогоТипаЕслиТребуется(СвойстваПоля, СодержаниеВыбора, "Дата"); + ДобавитьПроверкуПростогоТипаЕслиТребуется(СвойстваПоля, СодержаниеВыбора, "Строка"); + + ПроверкиПоТипам = Новый СписокЗначений; + + ДобавитьПроверкуПоТипам(ПроверкиПоТипам, СвойстваПоля.ТипыСохраненияКлючейДоступа, + "Шапка?.Значение? = ЕСТЬNULL(КлючиДоступаКОбъектам?.#КлючДоступаПользователейКОбъекту, + | ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.Null))"); + + Если Не СвойстваПоля.ЭтоСписокЗначенийДоступаСГруппамиЗначений Тогда + ДобавитьПроверкуПоТипам(ПроверкиПоТипам, СвойстваПоля.ТипыСохраненияГруппЗначений, + "Шапка?.Значение? = ЕСТЬNULL(ГруппыЗначений?.ГруппаЗначенийДоступа, + | ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.Null))"); + ИначеЕсли СвойстваПоля.НесколькоГруппЗначений Тогда + ДобавитьПроверкуПоТипам(ПроверкиПоТипам, СвойстваПоля.ТипыСохраненияГруппЗначений, + "Шапка?.Значение? = ЕСТЬNULL(ГруппыЗначений?.ГруппаДоступа, + | ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.Null))"); + Иначе + ДобавитьПроверкуПоТипам(ПроверкиПоТипам, СвойстваПоля.ТипыСохраненияГруппЗначений, + "Шапка?.Значение? = ЕСТЬNULL(ТекущийСписок.ГруппаДоступа, + | ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.Null))"); + КонецЕсли; + + ДобавитьПроверкуПоТипам(ПроверкиПоТипам, СвойстваПоля.ТипыСохраненияЗначений, + "Шапка?.Значение? = #ИмяПоляДляЗапроса"); + + ДобавитьПроверкуПоТипам(ПроверкиПоТипам, СвойстваПоля.ТипыСохраненияПустойСсылки, + "Шапка?.Значение? = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ПустаяСсылкаЛюбогоТипа)", + "ЭтоПроверкаПустойСсылки"); + + ДобавитьПроверкуПоТипам(ПроверкиПоТипам, СвойстваПоля.ТипыСохраненияТиповКонфигурации, + "Шапка?.Значение? = ЕСТЬNULL(ТипыКонфигурации?.Ссылка, + | ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка))"); + + ДобавитьПроверкуПоТипам(ПроверкиПоТипам, СвойстваПоля.ТипыСохраненияТиповРасширений, + "Шапка?.Значение? = ЕСТЬNULL(ТипыРасширений?.Ссылка, + | ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовРасширений.ПустаяСсылка))"); + + ДобавитьПроверкуПоТипам(ПроверкиПоТипам, СвойстваПоля.ТипыСохраненияТипаЗапрещенный, + "Шапка?.Значение? = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ТипЗапрещенный)"); + + ДобавитьПроверкуПоТипам(ПроверкиПоТипам, СвойстваПоля.ТипыСохраненияТипаРазрешенный, + "Шапка?.Значение? = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ТипРазрешенный)"); + + ПроверкиПоТипам.СортироватьПоПредставлению(); + + Для Каждого ПроверкаПоТипам Из ПроверкиПоТипам Цикл + Если ПроверкаПоТипам.Значение.Типы.Количество() = 0 Тогда + Продолжить; + КонецЕсли; + Если ПроверкиПоТипам.Индекс(ПроверкаПоТипам) < ПроверкиПоТипам.Количество() - 1 Тогда + ПроверкаТипов = ""; + Для Каждого Тип Из ПроверкаПоТипам.Значение.Типы Цикл + Если ЭтоПростойТип(Тип) Тогда + ИмяТипа = Строка(Тип); + Иначе + ИмяТипа = Метаданные.НайтиПоТипу(Тип).ПолноеИмя(); + КонецЕсли; + Если ПроверкаТипов <> "" Тогда + ПроверкаТипов = ПроверкаТипов + " + | ИЛИ "; + КонецЕсли; + ШаблонПроверки = ?(ПроверкаПоТипам.Значение.Свойство("ЭтоПроверкаПустойСсылки"), + "#ИмяПоляДляЗапроса = ЗНАЧЕНИЕ(#ИмяТипа.ПустаяСсылка)", + "ТИПЗНАЧЕНИЯ(#ИмяПоляДляЗапроса) = ТИП(#ИмяТипа)"); + ПроверкаТипов = ПроверкаТипов + СтрЗаменить(ШаблонПроверки, "#ИмяТипа", ИмяТипа); + КонецЦикла; + Проверка = " + |КОГДА #ПроверкаТипов + | ТОГДА #Проверка"; + Проверка = СтрЗаменить(Проверка, "#ПроверкаТипов", ПроверкаТипов); + Иначе + Проверка = " + |ИНАЧЕ #Проверка"; + КонецЕсли; + Проверка = СтрЗаменить(Проверка, "#Проверка", ПроверкаПоТипам.Значение.Проверка); + СодержаниеВыбора = СодержаниеВыбора + Проверка; + КонецЦикла; + + Возврат СтрЗаменить(СравнениеПоля, "#СодержаниеВыбора", ТекстСОтступом(СокрЛ(СодержаниеВыбора), " ")); + +КонецФункции + +// Для функции СравнениеПоля. +Процедура ДобавитьПроверкуПоТипам(ПроверкиПоТипам, ИсходныеТипы, Проверка, ДополнительноеСвойство = "") + + Типы = Новый Массив; + Для Каждого Тип Из ИсходныеТипы Цикл + Если ЭтоПростойТип(Тип) Тогда + Продолжить; + КонецЕсли; + Типы.Добавить(Тип); + КонецЦикла; + + Если Типы.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Структура = Новый Структура("Типы, Проверка", Типы, Проверка); + ПроверкиПоТипам.Добавить(Структура, Формат(Структура.Типы.Количество(), "ЧЦ=10; ЧВН=; ЧГ=")); + + Если ДополнительноеСвойство = "" Тогда + Возврат; + КонецЕсли; + + Структура.Вставить(ДополнительноеСвойство); + +КонецПроцедуры + +// Для функции ДобавитьПроверкуШапкиКлюча. +Процедура ЗаполнитьПсевдонимПоНомеруРеквизита(Соединения, Поле, НомерРеквизита, Псевдоним) + + ПсевдонимСНомером = СтрЗаменить(Псевдоним, "?", НомерРеквизита); + + Соединения = СтрЗаменить(Соединения, Псевдоним, ПсевдонимСНомером); + Поле = СтрЗаменить(Поле, Псевдоним, ПсевдонимСНомером); + +КонецПроцедуры + +// Для функций ДобавитьПроверкуШапкиКлюча, СравнениеПоля. +Функция ТекстСОтступом(Текст, Отступ) + + Возврат СтрЗаменить(Текст, Символы.ПС, Символы.ПС + Отступ); + +КонецФункции + +// Для функции СравнениеПоля. +Процедура ДобавитьПроверкуПростогоТипаЕслиТребуется(СвойстваПоля, СодержаниеВыбора, ИмяТипа) + + Если Не СвойстваПоля.ТипКонечногоПоля.СодержитТип(Тип(ИмяТипа)) + Или СвойстваПоля.ТипыСохраненияТиповПростых.Найти(Тип(ИмяТипа)) = Неопределено Тогда + Возврат; + КонецЕсли; + + СодержаниеВыбора = СодержаниеВыбора + СтрЗаменить(" + |КОГДА ТИПЗНАЧЕНИЯ(#ИмяПоляДляЗапроса) = ТИП(#ИмяТипа) + | ТОГДА Шапка?.Значение? = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.Тип#ИмяТипа)", + "#ИмяТипа", ИмяТипа); + +КонецПроцедуры + +// Для функции СравнениеПоля, ДобавитьОпорноеПоле. +Функция ЕстьПростойТип(ОписаниеТипов) + + Возврат ОписаниеТипов.СодержитТип(Тип("Булево")) + Или ОписаниеТипов.СодержитТип(Тип("Дата")) + Или ОписаниеТипов.СодержитТип(Тип("Строка")) + Или ОписаниеТипов.СодержитТип(Тип("Число")) + Или ОписаниеТипов.СодержитТип(Тип("УникальныйИдентификатор")) + Или ОписаниеТипов.СодержитТип(Тип("ХранилищеЗначения")); + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область ПреобразованиеТекстовОграниченийВСтруктуры + +// См. УправлениеДоступом.РазобранноеОграничение. +Функция РазобранноеОграничение(ОсновнаяТаблица, ТекстОграничения) Экспорт + + ВнутренниеДанные = Новый Структура; + ВнутренниеДанные.Вставить("ОсновнаяТаблица", ОсновнаяТаблица); + ВнутренниеДанные.Вставить("ТекстОграничения", СокрЛП(ТекстОграничения)); + + ВнутренниеДанные.Вставить("СинтаксисЯзыка", УправлениеДоступомСлужебныйПовтИсп.СинтаксисЯзыка()); + ВнутренниеДанные.Вставить("ПоляТаблиц", Новый Соответствие); + ВнутренниеДанные.Вставить("Псевдонимы", Новый Соответствие); + + ВнутренниеДанные.Вставить("ПоляКлючаДоступа", Новый Массив); + + ВнутренниеДанные.Вставить("ТаблицаНаборовСимволов", ТаблицаНаборовСимволов(ВнутренниеДанные)); + ВнутренниеДанные.Вставить("ЧастиОграничения", ЧастиОграничения(ВнутренниеДанные)); + + Результат = Новый Структура; + Результат.Вставить("ВнутренниеДанные", ВнутренниеДанные); + Результат.Вставить("ПоляТаблиц", ВнутренниеДанные.ПоляТаблиц); + + Возврат Результат; + +КонецФункции + +// См. УправлениеДоступом.СтруктураОграничения. +Функция СтруктураОграничения(РазобранноеОграничение) Экспорт + + ВнутренниеДанные = РазобранноеОграничение.ВнутренниеДанные; + + ОтметитьНекорректныеИменаТаблицПолейИТиповПолей(РазобранноеОграничение.ПоляТаблиц, + ВнутренниеДанные); + + // Заполнение найденных ошибок. + ОписаниеОшибок = Новый Структура; + ОписаниеОшибок.Вставить("ЕстьОшибки", Ложь); + ОписаниеОшибок.Вставить("ТекстОшибок", ""); + ОписаниеОшибок.Вставить("Ограничение", ""); + ОписаниеОшибок.Вставить("Ошибки", Новый Массив); + ОписаниеОшибок.Вставить("Дополнение", ""); + + Таблица = ВнутренниеДанные.ТаблицаНаборовСимволов; + ОтборСтрокБезОшибок = Новый Структура("ТекстОшибки", ""); + Если Таблица.Количество() <> Таблица.НайтиСтроки(ОтборСтрокБезОшибок).Количество() Тогда + ОписаниеОшибок.ЕстьОшибки = Истина; + ТребуетсяДополнение = Ложь; + ДлинаНомераСтроки = СтрДлина(Формат(СтрЧислоСтрок(ВнутренниеДанные.ТекстОграничения), "ЧГ=")); + Для Каждого Строка Из Таблица Цикл + Если Строка.ТекстОшибки = "" Тогда + Продолжить; + КонецЕсли; + ДобавитьОшибку(Строка, ОписаниеОшибок, ВнутренниеДанные, ДлинаНомераСтроки); + Если Строка.ПозицияОшибки = -1 Тогда + ТребуетсяДополнение = Истина; + КонецЕсли; + КонецЦикла; + ОписаниеОшибок.Ограничение = ПронумерованныйТекстОграниченияСОтметкамиОшибок( + ВнутренниеДанные.ТекстОграничения, ОписаниеОшибок.Ошибки, ДлинаНомераСтроки); + Если ТребуетсяДополнение Тогда + ОписаниеОшибок.Дополнение = ОписаниеДопустимыхШаблонов(); + КонецЕсли; + КонецЕсли; + + ЧастиОграничения = ВнутренниеДанные.ЧастиОграничения; + + СтруктураОграничения = Новый Структура; + СтруктураОграничения.Вставить("ОписаниеОшибок", ОписаниеОшибок); + СтруктураОграничения.Вставить("ДополнительныеТаблицы", ЧастиОграничения.ДополнительныеТаблицы); + СтруктураОграничения.Вставить("ПсевдонимОсновнойТаблицы", ЧастиОграничения.ПсевдонимОсновнойТаблицы); + СтруктураОграничения.Вставить("ОграничениеЧтения", ЧастиОграничения.ОграничениеЧтения); + СтруктураОграничения.Вставить("ОграничениеИзменения", ЧастиОграничения.ОграничениеИзменения); + + // Дополнительные сведения для внутреннего использования. + ИмяТипаТаблицы = СтрРазделить(ВнутренниеДанные.ОсновнаяТаблица, ".")[0]; + СвойстваТипаТаблиц = ВнутренниеДанные.СинтаксисЯзыка.ТипыТаблиц.ПоИменам.Получить(ВРег(ИмяТипаТаблицы)); + + НовыеВнутренниеДанные = Новый Структура; + НовыеВнутренниеДанные.Вставить("ПоляКлючаДоступа", ВнутренниеДанные.ПоляКлючаДоступа); + НовыеВнутренниеДанные.Вставить("ЭтоСсылочныйТип", СвойстваТипаТаблиц.ЭтоСсылочныйТип); + НовыеВнутренниеДанные.Вставить("ИмяКоллекцииТипа", СвойстваТипаТаблиц.ИмяКоллекции); + НовыеВнутренниеДанные.Вставить("ТипыТаблицПоИменам", ВнутренниеДанные.СинтаксисЯзыка.ТипыТаблиц.ПоИменам); + + СтруктураОграничения.Вставить("ВнутренниеДанные", НовыеВнутренниеДанные); + + Возврат СтруктураОграничения; + +КонецФункции + +// Формирует полный текст ошибок описания ограничения доступа с дополнением, +// который можно указать, как текст для вызова исключения. +// +// Параметры: +// ПолноеИмя - Строка - полное имя таблицы списка. +// ОписаниеОшибок - Структура - значение возвращаемое функцией СтруктураОграничения. +// ДляВнешнихПользователей - Булево - если передать Истина, тогда текст ошибки будет содержать +// назначение ограничения для внешних пользователей. +// +// Возвращаемое значение: +// Строка - текст для вызова исключения. +// +Функция ТекстОшибокДляВызоваИсключения(ПолноеИмя, ОписаниеОшибок, ДляВнешнихПользователей, ВМодулеМенеджера) + + Если Не ОписаниеОшибок.ЕстьОшибки Тогда + Возврат ""; + КонецЕсли; + + Если ОписаниеОшибок.Ошибки.Количество() = 1 Тогда + Если ВМодулеМенеджера = Неопределено Тогда + Если ДляВнешнихПользователей Тогда + ЗаголовокОшибки = + НСтр("ru = 'Ошибка в ограничении доступа внешних пользователей к списку ""%1"":'"); + Иначе + ЗаголовокОшибки = + НСтр("ru = 'Ошибка в ограничении доступа пользователей к списку ""%1"":'"); + КонецЕсли; + ИначеЕсли ВМодулеМенеджера Тогда + Если ДляВнешнихПользователей Тогда + ЗаголовокОшибки = + НСтр("ru = 'Ошибка в ограничении доступа внешних пользователей к списку ""%1"", + |указанному в процедуре ПриЗаполненииОграниченияДоступа модуля менеджера объекта метаданных:'"); + Иначе + ЗаголовокОшибки = + НСтр("ru = 'Ошибка в ограничении доступа пользователей к списку ""%1"", + |указанному в процедуре ПриЗаполненииОграниченияДоступа модуля менеджера объекта метаданных:'"); + КонецЕсли; + Иначе + Если ДляВнешнихПользователей Тогда + ЗаголовокОшибки = + НСтр("ru = 'Ошибка в ограничении доступа внешних пользователей к списку ""%1"", + |указанному в процедуре УправлениеДоступомПереопределяемый.ПриЗаполненииОграниченияДоступа:'"); + Иначе + ЗаголовокОшибки = + НСтр("ru = 'Ошибка в ограничении доступа пользователей к списку ""%1"", + |указанному в процедуре УправлениеДоступомПереопределяемый.ПриЗаполненииОграниченияДоступа:'"); + КонецЕсли; + КонецЕсли; + Иначе + Если ВМодулеМенеджера = Неопределено Тогда + Если ДляВнешнихПользователей Тогда + ЗаголовокОшибки = + НСтр("ru = 'Ошибки в ограничении доступа внешних пользователей к списку ""%1"":'"); + Иначе + ЗаголовокОшибки = + НСтр("ru = 'Ошибки в ограничении доступа пользователей к списку ""%1"":'"); + КонецЕсли; + ИначеЕсли ВМодулеМенеджера Тогда + Если ДляВнешнихПользователей Тогда + ЗаголовокОшибки = + НСтр("ru = 'Ошибки в ограничении доступа внешних пользователей к списку ""%1"", + |указанному в процедуре ПриЗаполненииОграниченияДоступа модуля менеджера объекта метаданных:'"); + Иначе + ЗаголовокОшибки = + НСтр("ru = 'Ошибки в ограничении доступа пользователей к списку ""%1"", + |указанному в процедуре ПриЗаполненииОграниченияДоступа модуля менеджера объекта метаданных:'"); + КонецЕсли; + Иначе + Если ДляВнешнихПользователей Тогда + ЗаголовокОшибки = + НСтр("ru = 'Ошибки в ограничении доступа внешних пользователей к списку ""%1"", + |указанному в процедуре УправлениеДоступомПереопределяемый.ПриЗаполненииОграниченияДоступа:'"); + Иначе + ЗаголовокОшибки = + НСтр("ru = 'Ошибки в ограничении доступа пользователей к списку ""%1"", + |указанному в процедуре УправлениеДоступомПереопределяемый.ПриЗаполненииОграниченияДоступа:'"); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ЗаголовокОшибки, ПолноеИмя); + ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС + ОписаниеОшибок.ТекстОшибок; + ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС + ОписаниеОшибок.Ограничение; + + Если ЗначениеЗаполнено(ОписаниеОшибок.Дополнение) Тогда + ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС + ОписаниеОшибок.Дополнение; + КонецЕсли; + + Возврат Символы.ПС + ТекстОшибки + Символы.ПС; + +КонецФункции + +// Для функции СтруктураОграничения. +Процедура ДобавитьОшибку(Строка, ОписаниеОшибок, ВнутренниеДанные, ДлинаНомераСтроки) + + ПозицияВТексте = Строка.Позиция; + ПозицияОшибкиВКонцеСтроки = Ложь; + ТекстОграничения = ВнутренниеДанные.ТекстОграничения; + + Если Строка.ПозицияОшибки > 0 Тогда + ПозицияВТексте = ПозицияВТексте + Строка.ПозицияОшибки; + Если Строка.ПозицияОшибки = СтрДлина(Строка.Символы) Тогда + ПозицияВТексте = ПозицияВТексте - 1; + ПозицияОшибкиВКонцеСтроки = Истина; + КонецЕсли; + ИначеЕсли Строка.Позиция > СтрДлина(ТекстОграничения) Тогда + ПозицияВТексте = ПозицияВТексте - 1; + ПозицияОшибкиВКонцеСтроки = Истина; + КонецЕсли; + + Координаты = КоординатыПозицииВТексте(ТекстОграничения, ПозицияВТексте); + Координаты.ПозицияВСтроке = Координаты.ПозицияВСтроке + ?(ПозицияОшибкиВКонцеСтроки, 1, 0); + + СтрокаОшибки = СтрПолучитьСтроку(ТекстОграничения, Координаты.НомерСтроки); + СтрокаОшибки = Лев(СтрокаОшибки, Координаты.ПозицияВСтроке - 1) + + "<>" + Сред(СтрокаОшибки, Координаты.ПозицияВСтроке); + + Ошибка = Новый Структура; + Ошибка.Вставить("НомерСтроки", Координаты.НомерСтроки); + Ошибка.Вставить("ПозицияВСтроке", Координаты.ПозицияВСтроке); + Ошибка.Вставить("ТекстОшибки", Строка.ТекстОшибки); + Ошибка.Вставить("СтрокаОшибки", СтрокаОшибки); + + ОписаниеОшибок.Ошибки.Добавить(Ошибка); + + Если ЗначениеЗаполнено(ОписаниеОшибок.ТекстОшибок) Тогда + ОписаниеОшибок.ТекстОшибок = ОписаниеОшибок.ТекстОшибок + Символы.ПС + Символы.ПС; + КонецЕсли; + + ОписаниеОшибок.ТекстОшибок = ОписаниеОшибок.ТекстОшибок + + "{(" + Формат(Ошибка.НомерСтроки, "ЧЦ=" + ДлинаНомераСтроки + "; ЧВН=; ЧГ=") + + ", " + Формат(Ошибка.ПозицияВСтроке, "ЧГ=") + ")}:" + + " " + Ошибка.ТекстОшибки + Символы.ПС + Ошибка.СтрокаОшибки; + +КонецПроцедуры + +// Для функции СтруктураОграничения. +Функция ПронумерованныйТекстОграниченияСОтметкамиОшибок(ТекстОграничения, Ошибки, ДлинаНомераСтроки) + + КоличествоСтрок = СтрЧислоСтрок(ТекстОграничения); + СтрокиТекстаОграничений = Новый Массив; + + Для НомерСтроки = 1 По КоличествоСтрок Цикл + Строка = СтрПолучитьСтроку(ТекстОграничения, НомерСтроки); + СтрокиТекстаОграничений.Добавить(Строка); + КонецЦикла; + + Индекс = Ошибки.Количество() - 1; + Пока Индекс >= 0 Цикл + Ошибка = Ошибки[Индекс]; + Строка = СтрокиТекстаОграничений[Ошибка.НомерСтроки - 1]; + СтрокиТекстаОграничений[Ошибка.НомерСтроки - 1] = Лев(Строка, Ошибка.ПозицияВСтроке - 1) + + "<>" + Сред(Строка, Ошибка.ПозицияВСтроке); + Индекс = Индекс - 1; + КонецЦикла; + + Текст = ""; + НомерСтроки = 1; + + Для Каждого Строка Из СтрокиТекстаОграничений Цикл + Текст = Текст + ?(Текст = "", "", Символы.ПС) + + ?(СтрНайти(Строка, "<>") > 0, "*", " ") + + " " + Формат(НомерСтроки, "ЧЦ=" + ДлинаНомераСтроки + "; ЧВН=; ЧГ=") + " " + Строка; + НомерСтроки = НомерСтроки + 1; + КонецЦикла; + + Возврат Текст; + +КонецФункции + +// Для функции СтруктураОграничения. +Функция ОписаниеДопустимыхШаблонов() + + Если ВариантВстроенногоЯзыкаРусский() Тогда + Шаблон1 = + " РазрешитьЧтениеИзменение + | ГДЕ ..."; + + Шаблон2 = + " РазрешитьЧтение + | ГДЕ ... + | ; + | РазрешитьИзменениеЕслиРазрешеноЧтение + | ГДЕ ..."; + + Шаблон3 = + " ПрисоединитьДополнительныеТаблицы + | ЭтотСписок КАК <Псевдоним> + | ЛЕВОЕ СОЕДИНЕНИЕ ... + | ; + | РазрешитьЧтение + | ГДЕ ... + | ; + | РазрешитьИзменениеЕслиРазрешеноЧтение + | ГДЕ ..."; + Иначе + Шаблон1 = + " AllowReadWrite + | WHERE ..."; + + Шаблон2 = + " AllowRead + | WHERE ... + | ; + | AllowWriteIfAllowRead + | WHERE ..."; + + Шаблон3 = + " AttachAdditionalTables + | LIST AS + | LEFT/INNER JOIN ... + | ; + | AllowRead + | WHERE ... + | ; + | AllowWriteIfAllowRead + | WHERE ..."; + КонецЕсли; + + Описание = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ограничение может состоять из 1-3 частей в одном из 4 вариантов: + |1) одинаковое ограничение чтения и изменения: + |%1 + |2) разные ограничения чтения и изменения: + |%2 + |3) любой из вариантов выше с дополнительными таблицами, например: + |%3'"), + Шаблон1, Шаблон2, Шаблон3); + + Возврат Описание; + +КонецФункции + +// Для процедуры ДобавитьОшибку. +Функция КоординатыПозицииВТексте(Текст, ПозицияВТексте) + + Результат = Новый Структура; + Результат.Вставить("НомерСтроки", 0); + Результат.Вставить("ПозицияВСтроке", 0); + + КоличествоСтрок = СтрЧислоСтрок(Текст); + ПозицияНачалаСтроки = 1; + Для НомерСтроки = 1 По КоличествоСтрок Цикл + ДлинаТекущейСтроки = СтрДлина(СтрПолучитьСтроку(Текст, НомерСтроки)); + Если ПозицияВТексте < ПозицияНачалаСтроки + ДлинаТекущейСтроки Тогда + Прервать; + КонецЕсли; + ПозицияНачалаСтроки = ПозицияНачалаСтроки + ДлинаТекущейСтроки + 1; + КонецЦикла; + + Результат.НомерСтроки = НомерСтроки; + + Строка = СтрПолучитьСтроку(Текст, НомерСтроки); + Результат.ПозицияВСтроке = ПозицияВТексте - ПозицияНачалаСтроки + 1; + + Возврат Результат; + +КонецФункции + +#Область ЛексическийАнализ + +// Для функции РазобранноеОграничение. +// Раскладывает текст в таблицу наборов символов, в которых: +// - нет символов отступа (пробелов, табуляций, переводов строки); +// - выделены символы произвольных строк и чисел; +// - определены ключевые слова и операции; +// - проверен формат имен и чисел; +// - добавлены ошибки с описанием. +// +// Параметры: +// ТекстОграничения - Строка - текст ограничения доступа. +// +// Возвращаемое значение: +// ТаблицаЗначений - с колонками: +// * Символы - Строка - символ, пара символов или слово. +// * Позиция - Число - позиция символов в тексте ограничения. +// * Вид - Строка - "КлючевоеСлово", "Операция", "Имя", "Разделитель", +// "Число", "ПроизвольнаяСтрока", "НедопустимыйСимвол", "Конец". +// * Тип - Строка - тип для для видов "КлючевоеСлово" и "Операция". +// * Приоритет - Число - приоритет для видов "КлючевоеСлово" и "Операция". +// * Уточнение - Число - числовое значение для вида "Число". +// - Строка - имя для вида "КлючевоеСлово", строка символов для вида "ПроизвольнаяСтрока". +// * ЭтоРезерв - Булево - если Истина, значит это зарезервированная операция или ключевое слово. +// * ПозицияОшибки - Число - позиция ошибки в тексте ограничения, если текст ошибки не пустой. +// * ТекстОшибки - Строка - текст ошибки, если найдена ошибка. +// +Функция ТаблицаНаборовСимволов(ВнутренниеДанные) + + ТаблицаНаборовСимволов = Новый ТаблицаЗначений; + ТаблицаНаборовСимволов.Колонки.Добавить("Символы", Новый ОписаниеТипов("Строка")); + ТаблицаНаборовСимволов.Колонки.Добавить("Позиция", Новый ОписаниеТипов("Число")); + ТаблицаНаборовСимволов.Колонки.Добавить("Вид", Новый ОписаниеТипов("Строка")); + ТаблицаНаборовСимволов.Колонки.Добавить("Тип", Новый ОписаниеТипов("Строка")); + ТаблицаНаборовСимволов.Колонки.Добавить("Приоритет", Новый ОписаниеТипов("Число")); + ТаблицаНаборовСимволов.Колонки.Добавить("Уточнение", Новый ОписаниеТипов("Число, Строка")); + ТаблицаНаборовСимволов.Колонки.Добавить("ЭтоРезерв", Новый ОписаниеТипов("Булево")); + ТаблицаНаборовСимволов.Колонки.Добавить("ПозицияОшибки", Новый ОписаниеТипов("Число")); + ТаблицаНаборовСимволов.Колонки.Добавить("ТекстОшибки", Новый ОписаниеТипов("Строка")); + + ТекстОграничения = ВнутренниеДанные.ТекстОграничения; + + Если Не ЗначениеЗаполнено(ТекстОграничения) Тогда + Возврат ТаблицаНаборовСимволов; + КонецЕсли; + + ДлинаТекстаОграничения = СтрДлина(ТекстОграничения); + + СинтаксисЯзыка = ВнутренниеДанные.СинтаксисЯзыка; + СимволыЯзыка = СинтаксисЯзыка.СимволыЯзыка; + + ВидНабораСимволов = ""; // Слово, ПроизвольнаяСтрока, Операция. + ПозицияНабораСимволов = 0; + НаборСимволов = Новый Массив; + СтрокаТаблицы = Неопределено; + + Для НомерСимвола = 1 По ДлинаТекстаОграничения Цикл + Символ = Сред(ТекстОграничения, НомерСимвола, 1); + ТипСимвола = СимволыЯзыка.Получить(Символ); + // Сначала обработка символов слов, так как они встречаются наиболее часто. + Если ТипСимвола = "СимволСлова" И ВидНабораСимволов = "Слово" Тогда + НаборСимволов.Добавить(Символ); + Продолжить; + КонецЕсли; + // Обработка произвольной строки символов. + Если ВидНабораСимволов = "ПроизвольнаяСтрока" Тогда + Если ТипСимвола = "ОграничительСтроки" Тогда + Если Сред(ТекстОграничения, НомерСимвола + 1, 1) <> Символ Тогда + СтрокаТаблицы.Уточнение = СтрСоединить(НаборСимволов); + СтрокаТаблицы.Позиция = ПозицияНабораСимволов; + НаборСимволов = Новый Массив; + ВидНабораСимволов = ""; + Продолжить; + Иначе + НомерСимвола = НомерСимвола + 1; + КонецЕсли; + КонецЕсли; + НаборСимволов.Добавить(Символ); + Продолжить; + КонецЕсли; + Если ВидНабораСимволов = "Слово" Тогда + // Вначале цикла уже обработан случай, когда ТипСимвола = "СимволСлова", + // для остальных типов символов слово завершено и его нужно добавить в дерево. + ВидНабораСимволов = ""; + ДобавитьСловоВТаблицуНаборовСимволов(ТаблицаНаборовСимволов, + НаборСимволов, ПозицияНабораСимволов, СинтаксисЯзыка); + НаборСимволов = Новый Массив; + КонецЕсли; + // Обработка набора составных разделителей. + Если ВидНабораСимволов = "Операция" Тогда + Если ТипСимвола = "СимволОперации" Тогда + НаборСимволов.Добавить(Символ); + Продолжить; + КонецЕсли; + ВидНабораСимволов = ""; + ДобавитьОперациюВТаблицуНаборовСимволов(ТаблицаНаборовСимволов, + НаборСимволов, ПозицияНабораСимволов, СинтаксисЯзыка); + НаборСимволов = Новый Массив; + КонецЕсли; + // Обработка первого символа наборов символов. + Если ВидНабораСимволов = "" Тогда + Если ТипСимвола = "СимволСлова" Тогда + ВидНабораСимволов = "Слово"; + ПозицияНабораСимволов = НомерСимвола; + НаборСимволов.Добавить(Символ); + Продолжить; + КонецЕсли; + Если ТипСимвола = "СимволОперации" Тогда + ВидНабораСимволов = "Операция"; + ПозицияНабораСимволов = НомерСимвола; + НаборСимволов.Добавить(Символ); + Продолжить; + КонецЕсли; + Если ТипСимвола = "ОграничительСтроки" Тогда + ВидНабораСимволов = "ПроизвольнаяСтрока"; + ПозицияНабораСимволов = НомерСимвола; + СтрокаТаблицы = ТаблицаНаборовСимволов.Добавить(); + СтрокаТаблицы.Символы = Символ; + СтрокаТаблицы.Вид = ВидНабораСимволов; + Продолжить; + КонецЕсли; + КонецЕсли; + // Обработка отдельных символов. + Если ТипСимвола = "Отступ" Тогда + Продолжить; + КонецЕсли; + Если ТипСимвола = "Разделитель" Тогда + СтрокаТаблицы = ТаблицаНаборовСимволов.Добавить(); + СтрокаТаблицы.Символы = Символ; + СтрокаТаблицы.Позиция = НомерСимвола; + СтрокаТаблицы.Вид = "Разделитель"; + Продолжить; + КонецЕсли; + СтрокаТаблицы = ТаблицаНаборовСимволов.Добавить(); + СтрокаТаблицы.Символы = Символ; + СтрокаТаблицы.Позиция = НомерСимвола; + СтрокаТаблицы.Вид = "НедопустимыйСимвол"; + СтрокаТаблицы.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Недопустимый символ ""%1"" с кодом %2'"), Символ, КодСимвола(Символ)); + КонецЦикла; + + Если ВидНабораСимволов = "Слово" Тогда + ДобавитьСловоВТаблицуНаборовСимволов(ТаблицаНаборовСимволов, + НаборСимволов, ПозицияНабораСимволов, СинтаксисЯзыка); + + ИначеЕсли ВидНабораСимволов = "Операция" Тогда + ДобавитьОперациюВТаблицуНаборовСимволов(ТаблицаНаборовСимволов, + НаборСимволов, ПозицияНабораСимволов, СинтаксисЯзыка); + + ИначеЕсли ВидНабораСимволов = "ПроизвольнаяСтрока" Тогда + СтрокаТаблицы.Уточнение = СтрСоединить(НаборСимволов); + СтрокаТаблицы.Позиция = ПозицияНабораСимволов; + СтрокаТаблицы.ПозицияОшибки = НомерСимвола - ПозицияНабораСимволов; + СтрокаТаблицы.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не указан символ окончания произвольной строки %1'"), СтрокаТаблицы.Символы); + КонецЕсли; + + ПоследняяСтрока = ТаблицаНаборовСимволов.Добавить(); + ПоследняяСтрока.Позиция = СтрДлина(ТекстОграничения) + 1; + ПоследняяСтрока.Вид = "Конец"; // Для установки текста ошибки недостатка описания. + ТаблицаНаборовСимволов.Индексы.Добавить("Вид, Уточнение"); + + Возврат ТаблицаНаборовСимволов; + +КонецФункции + +// Для функции ТаблицаНаборовСимволов. +Процедура ДобавитьСловоВТаблицуНаборовСимволов(Таблица, + НаборСимволов, ПозицияНабораСимволов, СинтаксисЯзыка) + + СтрокаСимволов = СтрСоединить(НаборСимволов); + СвойстваСлова = СинтаксисЯзыка.СловаЯзыка.Получить(ВРег(СтрокаСимволов)); + + НоваяСтрока = Таблица.Добавить(); + НоваяСтрока.Символы = СтрокаСимволов; + НоваяСтрока.Позиция = ПозицияНабораСимволов; + + Если СвойстваСлова <> Неопределено Тогда + НоваяСтрока.Вид = "КлючевоеСлово"; + НоваяСтрока.Тип = СвойстваСлова.Тип; + НоваяСтрока.Приоритет = СвойстваСлова.Приоритет; + НоваяСтрока.Уточнение = СвойстваСлова.Идентификатор; + НоваяСтрока.ЭтоРезерв = СвойстваСлова.ЭтоРезерв; + + Если СвойстваСлова.ЭтоРезерв Тогда + НоваяСтрока.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ключевое слово ""%1"" не поддерживается'"), СтрокаСимволов); + КонецЕсли; + Возврат; + КонецЕсли; + + // Слово является именем или числом. + СимволыЦифр = СинтаксисЯзыка.СимволыЦифр; + + Если НаборСимволов[0] = "." Тогда + Если НаборСимволов.Количество() > 1 Тогда + ЭтоЧисло = Ложь; + Иначе + НоваяСтрока.Вид = "Имя"; + НоваяСтрока.ТекстОшибки = НСтр("ru = 'Имя не может начинаться с точки'"); + Возврат; + КонецЕсли; + Иначе + ЭтоЧисло = СимволыЦифр.Получить(НаборСимволов[0]) <> Неопределено; + КонецЕсли; + + Если ЭтоЧисло Тогда + НоваяСтрока.Вид = "Число"; + НомерСимвола = 1; + Для Каждого Символ Из НаборСимволов Цикл + Если СимволыЦифр.Получить(Символ) = Неопределено Тогда + НоваяСтрока.ПозицияОшибки = НомерСимвола - 1; + НоваяСтрока.ТекстОшибки = НСтр("ru = 'Число может состоять только из цифр'"); + Возврат; + КонецЕсли; + НомерСимвола = НомерСимвола + 1; + КонецЦикла; + СимволыЧисла = Лев(СтрокаСимволов, НомерСимвола - 1); + Если СтрДлина(СимволыЧисла) > 16 Тогда + НоваяСтрока.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Слишком большое число ""%1""'"), СимволыЧисла); + Возврат; + КонецЕсли; + НоваяСтрока.Уточнение = Число(СимволыЧисла); + Иначе + НоваяСтрока.Вид = "Имя"; + ЧастиИмени = СтрРазделить(СтрокаСимволов, "."); + ПозицияЧастиИмени = 1; + Для Каждого ЧастьИмени Из ЧастиИмени Цикл + Если ЧастьИмени = "" И ПозицияЧастиИмени > 1 Тогда + НоваяСтрока.ПозицияОшибки = ПозицияЧастиИмени - 1; + НоваяСтрока.ТекстОшибки = НСтр("ru = 'После точки не указано имя'"); + Возврат; + ИначеЕсли СимволыЦифр.Получить(Лев(ЧастьИмени, 1)) <> Неопределено Тогда + НоваяСтрока.ПозицияОшибки = ПозицияЧастиИмени - 1; + НоваяСтрока.ТекстОшибки = НСтр("ru = 'После точки в имени не может следовать число'"); + Возврат; + КонецЕсли; + ПозицияЧастиИмени = ПозицияЧастиИмени + СтрДлина(ЧастьИмени) + 1; + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +// Для функции ТаблицаНаборовСимволов. +Процедура ДобавитьОперациюВТаблицуНаборовСимволов(Таблица, + НаборСимволов, ПозицияНабораСимволов, СинтаксисЯзыка) + + СтрокаСимволов = СтрСоединить(НаборСимволов); + СвойстваОперации = СинтаксисЯзыка.ОперацииЯзыка.Получить(СтрокаСимволов); + + НоваяСтрока = Таблица.Добавить(); + НоваяСтрока.Символы = СтрокаСимволов; + НоваяСтрока.Позиция = ПозицияНабораСимволов; + НоваяСтрока.Вид = "Операция"; + НоваяСтрока.Тип = СвойстваОперации.Тип; + НоваяСтрока.Приоритет = СвойстваОперации.Приоритет; + НоваяСтрока.ЭтоРезерв = СвойстваОперации.ЭтоРезерв; + + Если СвойстваОперации = Неопределено Тогда + НоваяСтрока.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Недопустимая операция ""%1""'"), СтрокаСимволов); + + ИначеЕсли СвойстваОперации.ЭтоРезерв Тогда + НоваяСтрока.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Операция ""%1"" не поддерживается'"), СтрокаСимволов); + КонецЕсли; + +КонецПроцедуры + +// Для функции РазобранноеОграничение и косвенно для многих других. +Функция СинтаксисЯзыка() Экспорт + + СинтаксисЯзыка = Новый Структура; + СинтаксисЯзыка.Вставить("СимволыЯзыка", СимволыЯзыка()); + СинтаксисЯзыка.Вставить("СимволыЦифр", СимволыЦифр()); + СинтаксисЯзыка.Вставить("ОперацииЯзыка", ОперацииЯзыка()); + СинтаксисЯзыка.Вставить("СловаЯзыка", СловаЯзыка()); + СинтаксисЯзыка.Вставить("ТипыТаблиц", ТипыТаблиц()); + + Возврат Новый ФиксированнаяСтруктура(СинтаксисЯзыка); + +КонецФункции + +// Для функции СинтаксисЯзыка. +Функция СимволыЯзыка() + + СимволыЯзыка = Новый Соответствие; + + Для КодСимвола = КодСимвола("А") По КодСимвола("Я") Цикл + СимволыЯзыка.Вставить(Символ(КодСимвола), "СимволСлова"); + КонецЦикла; + Для КодСимвола = КодСимвола("а") По КодСимвола("я") Цикл + СимволыЯзыка.Вставить(Символ(КодСимвола), "СимволСлова"); + КонецЦикла; + Для КодСимвола = КодСимвола("A") По КодСимвола("Z") Цикл + СимволыЯзыка.Вставить(Символ(КодСимвола), "СимволСлова"); + КонецЦикла; + Для КодСимвола = КодСимвола("a") По КодСимвола("z") Цикл + СимволыЯзыка.Вставить(Символ(КодСимвола), "СимволСлова"); + КонецЦикла; + + СимволыЯзыка.Вставить("_", "СимволСлова"); + СимволыЯзыка.Вставить(".", "СимволСлова"); + + Для КодСимвола = КодСимвола("0") По КодСимвола("9") Цикл + СимволыЯзыка.Вставить(Символ(КодСимвола), "СимволСлова"); + КонецЦикла; + + СимволыЯзыка.Вставить(" ", "Отступ"); + СимволыЯзыка.Вставить(Символы.Таб, "Отступ"); + СимволыЯзыка.Вставить(Символы.ПС, "Отступ"); + + СимволыЯзыка.Вставить("""", "ОграничительСтроки"); + + СимволыЯзыка.Вставить("(", "Разделитель"); + СимволыЯзыка.Вставить(")", "Разделитель"); + СимволыЯзыка.Вставить(",", "Разделитель"); + СимволыЯзыка.Вставить(";", "Разделитель"); + СимволыЯзыка.Вставить("=", "СимволОперации"); + СимволыЯзыка.Вставить("<", "СимволОперации"); + СимволыЯзыка.Вставить(">", "СимволОперации"); + + // Не поддерживаются. + СимволыЯзыка.Вставить("+", "СимволОперации"); + СимволыЯзыка.Вставить("-", "СимволОперации"); + СимволыЯзыка.Вставить("*", "СимволОперации"); + СимволыЯзыка.Вставить("/", "СимволОперации"); + + Возврат Новый ФиксированноеСоответствие(СимволыЯзыка); + +КонецФункции + +// Для функции СинтаксисЯзыка. +Функция СимволыЦифр() + + СимволыЦифр = Новый Соответствие; + + Для КодСимвола = КодСимвола("0") По КодСимвола("9") Цикл + СимволыЦифр.Вставить(Символ(КодСимвола), Истина); + КонецЦикла; + + Возврат Новый ФиксированноеСоответствие(СимволыЦифр); + +КонецФункции + +// Для функции СинтаксисЯзыка. +Функция СловаЯзыка() + + Слова = Новый Соответствие; + + ДобавитьСловоЯзыка(Слова, "ПрисоединитьДополнительныеТаблицы", "AttachAdditionalTables", "Начало", Ложь); + ДобавитьСловоЯзыка(Слова, "ЭтотСписок", "ThisList", "НачалоСписок", Ложь); + ДобавитьСловоЯзыка(Слова, "РазрешитьЧтениеИзменение", "AllowReadUpdate", "Начало", Ложь); + ДобавитьСловоЯзыка(Слова, "РазрешитьЧтение", "AllowRead", "Начало", Ложь); + ДобавитьСловоЯзыка(Слова, "РазрешитьИзменениеЕслиРазрешеноЧтение", "AllowUpdateIfAllowRead", "Начало", Ложь); + ДобавитьСловоЯзыка(Слова, "Где", "Where", "НачалоГде"); + + ДобавитьСловоЯзыка(Слова, "Левое", "Left", "Присоединение"); + ДобавитьСловоЯзыка(Слова, "Соединение", "Join", "Присоединение"); + ДобавитьСловоЯзыка(Слова, "По", "On", "Присоединение"); + + ДобавитьСловоЯзыка(Слова, "И", "And", "Соединитель", , 2); + ДобавитьСловоЯзыка(Слова, "Или", "Or", "Соединитель", , 1); + ДобавитьСловоЯзыка(Слова, "В", "In", "Соединитель", , 5); + ДобавитьСловоЯзыка(Слова, "Как", "As", "Соединитель"); + ДобавитьСловоЯзыка(Слова, "Кроме", "Except", "Соединитель"); + ДобавитьСловоЯзыка(Слова, "Только", "Only", "Соединитель"); + ДобавитьСловоЯзыка(Слова, "Есть", "Is", "Соединитель", , 7); + ДобавитьСловоЯзыка(Слова, "Не", "Not", "Оператор", , 3); + + ДобавитьСловоЯзыка(Слова, "Выбор", "Case", "СловоВыбора"); + ДобавитьСловоЯзыка(Слова, "Когда", "When", "СловоВыбора"); + ДобавитьСловоЯзыка(Слова, "Тогда", "Then", "СловоВыбора"); + ДобавитьСловоЯзыка(Слова, "Иначе", "Else", "СловоВыбора"); + ДобавитьСловоЯзыка(Слова, "Конец", "End", "СловоВыбора"); + + ДобавитьСловоЯзыка(Слова, "ЕстьNull", "IsNull", "Функция", Ложь); + ДобавитьСловоЯзыка(Слова, "Выразить", "Cast", "Функция", Ложь); + ДобавитьСловоЯзыка(Слова, "Значение", "Value", "Функция", Ложь); + ДобавитьСловоЯзыка(Слова, "ТипЗначения", "ValueType", "Функция", Ложь); + ДобавитьСловоЯзыка(Слова, "Тип", "Type", "Функция", Ложь); + ДобавитьСловоЯзыка(Слова, "ЗначениеРазрешено", "ValueAllowed", "Функция", Ложь); + ДобавитьСловоЯзыка(Слова, "ЧтениеОбъектаРазрешено", "ObjectReadingAllowed", "Функция", Ложь); + ДобавитьСловоЯзыка(Слова, "ИзменениеОбъектаРазрешено", "ObjectUpdatingAllowed", "Функция", Ложь); + ДобавитьСловоЯзыка(Слова, "ЧтениеСпискаРазрешено", "ListReadingAllowed", "Функция", Ложь); + ДобавитьСловоЯзыка(Слова, "ИзменениеСпискаРазрешено", "ListUpdatingAllowed", "Функция", Ложь); + ДобавитьСловоЯзыка(Слова, "ДляВсехСтрок", "ForAllRows", "Функция", Ложь); + ДобавитьСловоЯзыка(Слова, "ДляОднойИзСтрок", "ForOneOfRows", "Функция", Ложь); + ДобавитьСловоЯзыка(Слова, "ЭтоАвторизованныйПользователь", "IsAuthorizedUser", "Функция", Ложь); + + ДобавитьСловоЯзыка(Слова, "ПустаяСсылка", "EmptyRef", "ЗначениеСравнения"); + ДобавитьСловоЯзыка(Слова, "Отключено", "Disabled", "ЗначениеСравнения"); + ДобавитьСловоЯзыка(Слова, "Неопределено", "Undefined", "ЗначениеСравнения"); + ДобавитьСловоЯзыка(Слова, "Null", "Null", "ЗначениеСравнения"); + ДобавитьСловоЯзыка(Слова, "Ложь", "False", "ЗначениеУточнения"); + ДобавитьСловоЯзыка(Слова, "Истина", "True", "ЗначениеУточнения"); + + ДобавитьСловоЯзыка(Слова, "Строка", "String", "ИмяТипа"); + ДобавитьСловоЯзыка(Слова, "Число", "Number", "ИмяТипа"); + ДобавитьСловоЯзыка(Слова, "Дата", "Date", "ИмяТипа"); + ДобавитьСловоЯзыка(Слова, "Булево", "Boolean", "ИмяТипа"); + + // Неподдерживаемые, зарезервированные слова. + ДобавитьСловоЯзыка(Слова, "Выбрать", "Select", "Неопределен", , , Истина); + ДобавитьСловоЯзыка(Слова, "Первые", "Top", "Неопределен", , , Истина); + ДобавитьСловоЯзыка(Слова, "Различные", "Distinct", "Неопределен", , , Истина); + ДобавитьСловоЯзыка(Слова, "Из", "From", "Неопределен", , , Истина); + ДобавитьСловоЯзыка(Слова, "Внутреннее", "Inner", "Присоединение", , , Истина); + ДобавитьСловоЯзыка(Слова, "Полное", "Full", "Присоединение", , , Истина); + ДобавитьСловоЯзыка(Слова, "Сгруппировать", "Group", "Неопределен", , , Истина); + ДобавитьСловоЯзыка(Слова, "Имеющие", "Having", "Неопределен", , , Истина); + ДобавитьСловоЯзыка(Слова, "Упорядочить", "Order", "Неопределен", , , Истина); + ДобавитьСловоЯзыка(Слова, "Итоги", "Totals", "Неопределен", , , Истина); + ДобавитьСловоЯзыка(Слова, "Год", "Year", "Функция", Ложь, , Истина); + ДобавитьСловоЯзыка(Слова, "Квартал", "Quarter", "Функция", Ложь, , Истина); + ДобавитьСловоЯзыка(Слова, "Месяц", "Month", "Функция", Ложь, , Истина); + ДобавитьСловоЯзыка(Слова, "ДеньГода", "DayOfYear", "Функция", Ложь, , Истина); + ДобавитьСловоЯзыка(Слова, "День", "Day", "Функция", Ложь, , Истина); + ДобавитьСловоЯзыка(Слова, "Неделя", "Week", "Функция", Ложь, , Истина); + ДобавитьСловоЯзыка(Слова, "ДеньНедели", "Weekday", "Функция", Ложь, , Истина); + ДобавитьСловоЯзыка(Слова, "Час", "Hour", "Функция", Ложь, , Истина); + ДобавитьСловоЯзыка(Слова, "Минута", "Minute", "Функция", Ложь, , Истина); + ДобавитьСловоЯзыка(Слова, "Секунда", "Second", "Функция", Ложь, , Истина); + ДобавитьСловоЯзыка(Слова, "НачалоПериода", "BeginOfPeriod", "Функция", Ложь, , Истина); + ДобавитьСловоЯзыка(Слова, "КонецПериода", "EndOfPeriod", "Функция", Ложь, , Истина); + ДобавитьСловоЯзыка(Слова, "ДобавитьКДате", "DateAdd", "Функция", Ложь, , Истина); + ДобавитьСловоЯзыка(Слова, "РазностьДат", "DateDiff", "Функция", Ложь, , Истина); + ДобавитьСловоЯзыка(Слова, "Сумма", "Sum", "Функция", Ложь, , Истина); + ДобавитьСловоЯзыка(Слова, "Минимум", "Min", "Функция", Ложь, , Истина); + ДобавитьСловоЯзыка(Слова, "Максимум", "Max", "Функция", Ложь, , Истина); + ДобавитьСловоЯзыка(Слова, "Среднее", "Avg", "Функция", Ложь, , Истина); + ДобавитьСловоЯзыка(Слова, "Количество", "Count", "Функция", Ложь, , Истина); + ДобавитьСловоЯзыка(Слова, "Представление", "Presentation", "Функция", Ложь, , Истина); + ДобавитьСловоЯзыка(Слова, "ПредставлениеСсылки", "RefPresentation", "Функция", Ложь, , Истина); + + Возврат Новый ФиксированноеСоответствие(Слова); + +КонецФункции + +// Для функции СинтаксисЯзыка. +Функция ОперацииЯзыка() + + ОперацииЯзыка = Новый Соответствие; + + ДобавитьСловоЯзыка(ОперацииЯзыка, "=", "=", "Соединитель", , 4); + ДобавитьСловоЯзыка(ОперацииЯзыка, "<>", "<>", "Соединитель", , 4); + + // Неподдерживаемые, зарезервированные операции. + ДобавитьСловоЯзыка(ОперацииЯзыка, "<", "<", "Соединитель", , 4, Истина); + ДобавитьСловоЯзыка(ОперацииЯзыка, "<=", "<=", "Соединитель", , 4, Истина); + ДобавитьСловоЯзыка(ОперацииЯзыка, ">", ">", "Соединитель", , 4, Истина); + ДобавитьСловоЯзыка(ОперацииЯзыка, ">=", ">=", "Соединитель", , 4, Истина); + ДобавитьСловоЯзыка(ОперацииЯзыка, "+", "+", "Соединитель", , 1, Истина); + ДобавитьСловоЯзыка(ОперацииЯзыка, "-", "-", "Соединитель", , 1, Истина); + ДобавитьСловоЯзыка(ОперацииЯзыка, "*", "*", "Соединитель", , 6, Истина); + ДобавитьСловоЯзыка(ОперацииЯзыка, "/", "/", "Соединитель", , 6, Истина); + + Возврат Новый ФиксированноеСоответствие(ОперацииЯзыка); + +КонецФункции + +// Для функций СловаЯзыка и ОперацииЯзыка. +Процедура ДобавитьСловоЯзыка(Слова, ЯзыкРусский, ЯзыкАнглийский, ТипСлова, + ВерхнийРегистр = Истина, Приоритет = 0, ЭтоРезерв = Ложь) + + СвойстваСлова = Новый Структура; + СвойстваСлова.Вставить("Идентификатор", ЯзыкРусский); + СвойстваСлова.Вставить("ЯзыкРусский", ЯзыкРусский); + СвойстваСлова.Вставить("ЯзыкАнглийский", ЯзыкАнглийский); + СвойстваСлова.Вставить("Тип", ТипСлова); + СвойстваСлова.Вставить("ВерхнийРегистр", ВерхнийРегистр); + СвойстваСлова.Вставить("Приоритет", Приоритет); + СвойстваСлова.Вставить("ЭтоРезерв", ЭтоРезерв); + + СвойстваСлова = Новый ФиксированнаяСтруктура(СвойстваСлова); + + Слова.Вставить(ВРег(ЯзыкРусский), СвойстваСлова); + Слова.Вставить(ВРег(ЯзыкАнглийский), СвойстваСлова); + +КонецПроцедуры + +// Для функции СинтаксисЯзыка. +Функция ТипыТаблиц() + + ТипыТаблиц = Новый Структура; + ТипыТаблиц.Вставить("ПоИменам", Новый Соответствие); + ТипыТаблиц.Вставить("ПоКоллекциям", Новый Соответствие); + + // Установка имен типов таблиц. + ДобавитьТипТаблиц(ТипыТаблиц, "ПланОбмена", "ExchangePlan", "ПланыОбмена"); + ДобавитьТипТаблиц(ТипыТаблиц, "КритерийОтбора", "FilterCriterion", "КритерииОтбора"); + ДобавитьТипТаблиц(ТипыТаблиц, "Константы", "Constants", ""); + ДобавитьТипТаблиц(ТипыТаблиц, "Константа", "Constant", "Константы"); + ДобавитьТипТаблиц(ТипыТаблиц, "Справочник", "Catalog", "Справочники"); + ДобавитьТипТаблиц(ТипыТаблиц, "Последовательность", "Sequence", "Последовательности"); + ДобавитьТипТаблиц(ТипыТаблиц, "Документ", "Document", "Документы"); + ДобавитьТипТаблиц(ТипыТаблиц, "ЖурналДокументов", "DocumentJournal", "ЖурналыДокументов"); + ДобавитьТипТаблиц(ТипыТаблиц, "Перечисление", "Enum", "Перечисления"); + ДобавитьТипТаблиц(ТипыТаблиц, "ПланВидовХарактеристик", "ChartOfCharacteristicTypes", "ПланыВидовХарактеристик"); + ДобавитьТипТаблиц(ТипыТаблиц, "ПланСчетов", "ChartOfAccounts", "ПланыСчетов"); + ДобавитьТипТаблиц(ТипыТаблиц, "ПланВидовРасчета", "ChartOfCalculationTypes", "ПланыВидовРасчета"); + ДобавитьТипТаблиц(ТипыТаблиц, "РегистрСведений", "InformationRegister", "РегистрыСведений"); + ДобавитьТипТаблиц(ТипыТаблиц, "РегистрНакопления", "AccumulationRegister", "РегистрыНакопления"); + ДобавитьТипТаблиц(ТипыТаблиц, "РегистрБухгалтерии", "AccountingRegister", "РегистрыБухгалтерии"); + ДобавитьТипТаблиц(ТипыТаблиц, "РегистрРасчета", "CalculationRegister", "РегистрыРасчета"); + ДобавитьТипТаблиц(ТипыТаблиц, "БизнесПроцесс", "BusinessProcess", "БизнесПроцессы"); + ДобавитьТипТаблиц(ТипыТаблиц, "Задача", "Task", "Задачи"); + + // Установка основных свойств основных типов таблиц. + ИменаТиповТаблиц = "ПланОбмена,Справочник,Документ,ПланВидовХарактеристик,ПланСчетов,ПланВидовРасчета,БизнесПроцесс,Задача"; + УстановитьСвойствоТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "ЭтоСсылочныйТип", Истина); + УстановитьСвойствоТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "ЕстьОграничение", Истина); + УстановитьСвойствоТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "ОбщиеРеквизиты", "Разрешены"); + УстановитьСвойствоТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "Использование", "Разрешено"); + + ДобавитьКоллекциюПолейТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "Реквизиты", "Разрешены"); + ДобавитьКоллекциюПолейТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "СтандартныеРеквизиты", "Разрешены"); + + ДобавитьКоллекциюТабличныхЧастейТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "ТабличныеЧасти", "Разрешены"); + + ДобавитьПолеТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "ВерсияДанных", "DataVersion", "Запрещено"); + ДобавитьПолеТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "Представление", "Presentation", "Запрещено"); + + ДобавитьРасширениеТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "Изменения", "Changes", "Запрещено"); + + // Установка основных свойств регистров. + ИменаТиповТаблиц = "РегистрСведений,РегистрРасчета"; + УстановитьСвойствоТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "ОбщиеРеквизиты", "Разрешены"); + ДобавитьКоллекциюПолейТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "Ресурсы", "Разрешены"); + ДобавитьКоллекциюПолейТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "Реквизиты", "Разрешены"); + ДобавитьКоллекциюПолейТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "СтандартныеРеквизиты", "Разрешены"); + + ИменаТиповТаблиц = "РегистрНакопления,РегистрБухгалтерии"; + УстановитьСвойствоТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "ОбщиеРеквизиты", "Недопустимы"); + ДобавитьКоллекциюПолейТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "Ресурсы", "Недопустимы"); + ДобавитьКоллекциюПолейТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "Реквизиты", "Недопустимы"); + ДобавитьКоллекциюПолейТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "СтандартныеРеквизиты", "Недопустимы"); + + ИменаТиповТаблиц = "РегистрСведений,РегистрНакопления,РегистрБухгалтерии,РегистрРасчета"; + УстановитьСвойствоТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "ЕстьОграничение", Истина); + ДобавитьКоллекциюПолейТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "Измерения", "Разрешены"); + + ДобавитьРасширениеТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "Изменения", "Changes", "Запрещено"); + + // Установка некоторых из указанных ранее свойств для остальных типов таблиц. + УстановитьСвойствоТипаТаблиц(ТипыТаблиц, "Последовательность", "ЕстьОграничение", Истина); + ДобавитьКоллекциюПолейТипаТаблиц(ТипыТаблиц, "Последовательность", "Измерения", "Разрешены"); + + УстановитьСвойствоТипаТаблиц(ТипыТаблиц, "ЖурналДокументов", "ОбщиеРеквизиты", "Разрешены"); + ДобавитьКоллекциюПолейТипаТаблиц(ТипыТаблиц, "ЖурналДокументов", "СтандартныеРеквизиты", "Разрешены"); + + УстановитьСвойствоТипаТаблиц(ТипыТаблиц, "Перечисление", "ЭтоСсылочныйТип", Истина); + ДобавитьКоллекциюПолейТипаТаблиц(ТипыТаблиц, "Перечисление", "СтандартныеРеквизиты", "Разрешены"); + + ИменаТиповТаблиц = "Константа,РегистрСведений"; + УстановитьСвойствоТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "Использование", "Разрешено"); + УстановитьСвойствоТипаТаблиц(ТипыТаблиц, "КритерийОтбора", "Использование", "Недопустимо"); + + ДобавитьРасширениеТипаТаблиц(ТипыТаблиц, "Константа", "Изменения", "Changes", "Запрещено"); + ДобавитьРасширениеТипаТаблиц(ТипыТаблиц, "РегистрСведений", "СрезПервых", "SliceFirst", "Недопустимо"); + ДобавитьРасширениеТипаТаблиц(ТипыТаблиц, "РегистрСведений", "СрезПоследних", "SliceLast", "Недопустимо"); + ДобавитьРасширениеТипаТаблиц(ТипыТаблиц, "БизнесПроцесс", "Точки", "Points", "Запрещено"); + + // Установка специализированных свойств. + УстановитьСвойствоТипаТаблиц(ТипыТаблиц, "ПланСчетов", "ПризнакиУчетаСубконто", "Разрешены"); + + ДобавитьКоллекциюПолейТипаТаблиц(ТипыТаблиц, "ЖурналДокументов", "Графы", "Разрешены"); + ДобавитьКоллекциюПолейТипаТаблиц(ТипыТаблиц, "ПланСчетов", "ПризнакиУчета", "Разрешены"); + ДобавитьКоллекциюПолейТипаТаблиц(ТипыТаблиц, "Задача", "РеквизитыАдресации", "Разрешены"); + + ДобавитьКоллекциюТабличныхЧастейТипаТаблиц(ТипыТаблиц, "ПланСчетов", "СтандартныеТабличныеЧасти", "Разрешены"); + ДобавитьКоллекциюТабличныхЧастейТипаТаблиц(ТипыТаблиц, "ПланВидовРасчета", "СтандартныеТабличныеЧасти", "Разрешены"); + + ИменаТиповТаблиц = "Справочник,Перечисление,ПланВидовХарактеристик,ПланСчетов,ПланВидовРасчета"; + УстановитьСвойствоТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "ЕстьПредопределенные", Истина); + + // Уточнение стандартных полей типов таблиц. + ИменаТиповТаблиц = "Документ,РегистрСведений,РегистрНакопления,РегистрБухгалтерии"; + ДобавитьПолеТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "МоментВремени", "PointInTime", "Недопустимо"); + + ИменаТиповТаблиц = "Справочник,ПланВидовХарактеристик,ПланСчетов,ПланВидовРасчета"; + ДобавитьПолеТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "ИмяПредопределенныхДанных", "PredefinedDataName", "Запрещено"); + + ДобавитьПолеТипаТаблиц(ТипыТаблиц, "Константа", "Значение", "Value", "Разрешено"); + ДобавитьПолеТипаТаблиц(ТипыТаблиц, "Последовательность", "Регистратор", "Recorder", "Разрешено"); + ДобавитьПолеТипаТаблиц(ТипыТаблиц, "Последовательность", "Период", "Period", "Разрешено"); + ДобавитьПолеТипаТаблиц(ТипыТаблиц, "ЖурналДокументов", "Тип", "Type", "Недопустимо"); + ДобавитьПолеТипаТаблиц(ТипыТаблиц, "Перечисление", "Порядок", "Order", "Запрещено"); + + Возврат ТипыТаблиц; + +КонецФункции + +// Для функции ТипыТаблиц. +Процедура ДобавитьТипТаблиц(ТипыТаблиц, ЯзыкРусский, ЯзыкАнглийский, ИмяКоллекции) + + // Свойство "Использование" для таблиц. + // "Разрешено" - можно использовать без ограничений. + // "Недопустимо" - не может использоваться в ограничении доступа платформы 1С:Предприятия. + // "Запрещено" - запрещено присоединять, как дополнительную таблицу в ограничении доступа БСП. + + СвойстваТипаТаблиц = Новый Структура; + СвойстваТипаТаблиц.Вставить("ИмяКоллекции", ИмяКоллекции); + СвойстваТипаТаблиц.Вставить("ЯзыкРусский", ЯзыкРусский); + СвойстваТипаТаблиц.Вставить("ЯзыкАнглийский", ЯзыкАнглийский); + СвойстваТипаТаблиц.Вставить("ЭтоСсылочныйТип", Ложь); + СвойстваТипаТаблиц.Вставить("ЕстьОграничение", Ложь); + СвойстваТипаТаблиц.Вставить("ЕстьПредопределенные", Ложь); + СвойстваТипаТаблиц.Вставить("КоллекцииПолей", Новый Соответствие); + СвойстваТипаТаблиц.Вставить("КоллекцииТабличныхЧастей", Новый Соответствие); + СвойстваТипаТаблиц.Вставить("ОбщиеРеквизиты", "Отсутствуют"); + СвойстваТипаТаблиц.Вставить("ПризнакиУчетаСубконто", "Отсутствуют"); + СвойстваТипаТаблиц.Вставить("УточнениеПолей", Новый Соответствие); + СвойстваТипаТаблиц.Вставить("УточнениеТаблиц", Новый Соответствие); + СвойстваТипаТаблиц.Вставить("Использование", "Запрещено"); + + ТипыТаблиц.ПоИменам.Вставить(ВРег(ЯзыкРусский), СвойстваТипаТаблиц); + ТипыТаблиц.ПоИменам.Вставить(ВРег(ЯзыкАнглийский), СвойстваТипаТаблиц); + + Если ЗначениеЗаполнено(ИмяКоллекции) Тогда + ТипыТаблиц.ПоКоллекциям.Вставить(ИмяКоллекции, СвойстваТипаТаблиц); + КонецЕсли; + +КонецПроцедуры + +// Для функции ТипыТаблиц. +Процедура УстановитьСвойствоТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, Свойство, Значение) + + Для Каждого ИмяТипаТаблицы Из СтрРазделить(ИменаТиповТаблиц, ",", Ложь) Цикл + СвойстваТипаТаблиц = ТипыТаблиц.ПоИменам.Получить(ВРег(ИмяТипаТаблицы)); + СвойстваТипаТаблиц[Свойство] = Значение; + КонецЦикла; + +КонецПроцедуры + +// Для функции ТипыТаблиц. +Процедура ДобавитьКоллекциюПолейТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, ИмяКоллекции, Использование) + + Для Каждого ИмяТипаТаблицы Из СтрРазделить(ИменаТиповТаблиц, ",", Ложь) Цикл + СвойстваТипаТаблиц = ТипыТаблиц.ПоИменам.Получить(ВРег(ИмяТипаТаблицы)); + СвойстваТипаТаблиц.КоллекцииПолей.Вставить(ИмяКоллекции, Использование); + КонецЦикла; + +КонецПроцедуры + +// Для функции ТипыТаблиц. +Процедура ДобавитьКоллекциюТабличныхЧастейТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, ИмяКоллекции, Использование) + + Для Каждого ИмяТипаТаблицы Из СтрРазделить(ИменаТиповТаблиц, ",", Ложь) Цикл + СвойстваТипаТаблиц = ТипыТаблиц.ПоИменам.Получить(ВРег(ИмяТипаТаблицы)); + СвойстваТипаТаблиц.КоллекцииТабличныхЧастей.Вставить(ИмяКоллекции, Использование); + КонецЦикла; + +КонецПроцедуры + +// Для функции ТипыТаблиц. +Процедура ДобавитьПолеТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, ЯзыкРусский, ЯзыкАнглийский, Использование) + + // Использование: + // "Разрешено" - можно использовать без ограничений. + // "Недопустимо" - не может использоваться в ограничении доступа платформы 1С:Предприятия. + // "Запрещено" - запрещено использовать в ограничении доступа БСП. + + Для Каждого ИмяТипаТаблицы Из СтрРазделить(ИменаТиповТаблиц, ",", Ложь) Цикл + УточнениеПоля = Новый Структура; + УточнениеПоля.Вставить("ЯзыкРусский", ЯзыкРусский); + УточнениеПоля.Вставить("ЯзыкАнглийский", ЯзыкАнглийский); + УточнениеПоля.Вставить("Использование", Использование); + + СвойстваТипаТаблиц = ТипыТаблиц.ПоИменам.Получить(ВРег(ИмяТипаТаблицы)); + + СвойстваТипаТаблиц.УточнениеПолей.Вставить(ВРег(ЯзыкРусский), УточнениеПоля); + СвойстваТипаТаблиц.УточнениеПолей.Вставить(ВРег(ЯзыкАнглийский), УточнениеПоля); + КонецЦикла; + +КонецПроцедуры + +// Для функции ТипыТаблиц. +Процедура ДобавитьРасширениеТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, ЯзыкРусский, ЯзыкАнглийский, Использование) + + // Использование: + // "Разрешено" - можно использовать без ограничений. + // "Недопустимо" - не может использоваться в ограничении доступа платформы 1С:Предприятия. + // "Запрещено" - запрещено использовать в ограничении доступа БСП. + + Для Каждого ИмяТипаТаблицы Из СтрРазделить(ИменаТиповТаблиц, ",", Ложь) Цикл + УточнениеТаблиц = Новый Структура; + УточнениеТаблиц.Вставить("ЯзыкРусский", ЯзыкРусский); + УточнениеТаблиц.Вставить("ЯзыкАнглийский", ЯзыкАнглийский); + УточнениеТаблиц.Вставить("Использование", Использование); + + СвойстваТипаТаблиц = ТипыТаблиц.ПоИменам.Получить(ВРег(ИмяТипаТаблицы)); + + СвойстваТипаТаблиц.УточнениеТаблиц.Вставить(ВРег(ЯзыкРусский), УточнениеТаблиц); + СвойстваТипаТаблиц.УточнениеТаблиц.Вставить(ВРег(ЯзыкАнглийский), УточнениеТаблиц); + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область СинтаксическийАнализ + +// Для функции РазобранноеОграничение. +Функция ЧастиОграничения(ВнутренниеДанные) + + ЧастиОграничения = Новый Структура; + ЧастиОграничения.Вставить("ДополнительныеТаблицы", Новый Массив); + ЧастиОграничения.Вставить("ПсевдонимОсновнойТаблицы", ""); + ЧастиОграничения.Вставить("ОграничениеЧтения", Новый Структура); + ЧастиОграничения.Вставить("ОграничениеИзменения", Новый Структура); + + ТаблицаНаборовСимволов = ВнутренниеДанные.ТаблицаНаборовСимволов; + + Если ТаблицаНаборовСимволов.Количество() = 0 Тогда + Возврат ЧастиОграничения; + КонецЕсли; + + ТаблицаНаборовСимволов.Колонки.Добавить("Строки", Новый ОписаниеТипов("Массив")); + ТаблицаНаборовСимволов.Колонки.Добавить("КонечнаяСтрока"); + + // Разделение ограничения на основные части. + Строки = ТаблицаНаборовСимволов.НайтиСтроки(Новый Структура("Символы, Вид", ";", "Разделитель")); + + ИндексыСтрокРазделителя = Новый Массив; + Для Каждого Строка Из Строки Цикл + ИндексыСтрокРазделителя.Добавить(ТаблицаНаборовСимволов.Индекс(Строка)); + КонецЦикла; + ИндексыСтрокРазделителя.Добавить(ТаблицаНаборовСимволов.Количество() - 1); + + СвойстваЧастей = Новый Массив; + ИндексСтроки = 0; + Для Каждого ИндексСтрокиРазделителя Из ИндексыСтрокРазделителя Цикл + СтрокиЧасти = Новый Массив; + Пока ИндексСтроки < ИндексСтрокиРазделителя Цикл + СтрокаЧасти = ТаблицаНаборовСимволов[ИндексСтроки]; + Если СтрокаЧасти.Вид <> "НедопустимыйСимвол" Тогда + СтрокиЧасти.Добавить(СтрокаЧасти); + КонецЕсли; + ИндексСтроки = ИндексСтроки + 1; + КонецЦикла; + СтрокаРазделителя = ТаблицаНаборовСимволов[ИндексСтрокиРазделителя]; + Если СтрокиЧасти.Количество() = 0 Тогда + СтрокиЧасти.Добавить(СтрокаРазделителя); + КонецЕсли; + СвойстваЧасти = Новый Структура; + СвойстваЧасти.Вставить("Строки", СтрокиЧасти); + СвойстваЧасти.Вставить("СтрокаРазделителя", СтрокаРазделителя); + СвойстваЧастей.Добавить(СвойстваЧасти); + Если СтрокиЧасти[0].Вид = "КлючевоеСлово" + И СтрокиЧасти[0].Тип = "Начало" Тогда + + СвойстваЧасти.Вставить("Имя", СтрокиЧасти[0].Уточнение); + СвойстваЧасти.Вставить("Представление", СтрокиЧасти[0].Символы); + + РазобратьЧастьОграничения(СвойстваЧасти, ВнутренниеДанные); + Иначе + СвойстваЧасти.Вставить("Имя", ""); + СвойстваЧасти.Вставить("Представление", ""); + КонецЕсли; + ИндексСтроки = ИндексСтрокиРазделителя + 1; + КонецЦикла; + + ДобавитьПсевдонимыПоУмолчанию(ВнутренниеДанные); + + // Анализ части 1. + СвойстваЧасти1 = СвойстваЧастей[0]; + + Если СвойстваЧасти1.Имя = "" Тогда + УстановитьОшибкуНачалаЧасти(СвойстваЧасти1, ПодставитьКлючевыеСловаВСтроку(ВнутренниеДанные, + НСтр("ru = 'В начале первой части текста ограничения не найдено ни одно из ключевых слов + |""%1"", ""%2"", ""%3""'"), + "РазрешитьЧтениеИзменение,РазрешитьЧтение,ПрисоединитьДополнительныеТаблицы")); + Возврат ЧастиОграничения; + + ИначеЕсли СвойстваЧасти1.Имя = "РазрешитьИзменениеЕслиРазрешеноЧтение" Тогда + УстановитьОшибкуНачалаЧасти(СвойстваЧасти1, + НСтр("ru = 'В начале первой части текста ограничения найдено недопустимое ключевое слово'")); + Возврат ЧастиОграничения; + + ИначеЕсли СвойстваЧастей.Количество() = 1 + И ( СвойстваЧасти1.Имя = "ПрисоединитьДополнительныеТаблицы" + Или СвойстваЧасти1.Имя = "РазрешитьЧтение" ) Тогда + + УстановитьОшибкуНачалаЧасти(ТаблицаНаборовСимволов, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Текст ограничения не может быть только из одной части + |с ключевым словом ""%1""'"), СвойстваЧасти1.Представление)); + Возврат ЧастиОграничения; + КонецЕсли; + + УстановитьЧастьОграничения(ЧастиОграничения, СвойстваЧасти1); + + Если СвойстваЧастей.Количество() < 2 Тогда + Возврат ЧастиОграничения; + КонецЕсли; + + // Анализ части 2. + СвойстваЧасти2 = СвойстваЧастей[1]; + + Если СвойстваЧасти1.Имя = "РазрешитьЧтениеИзменение" Тогда + УстановитьОшибкуНачалаЧасти(СвойстваЧасти1.СтрокаРазделителя, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Второй части текста ограничения не должно быть, когда + |в первой части указано ключевое слово ""%1""'"), СвойстваЧасти1.Представление)); + Возврат ЧастиОграничения; + КонецЕсли; + + Если СвойстваЧасти2.Имя = "" Тогда + Если СвойстваЧасти1.Имя = "РазрешитьЧтение" Тогда + УстановитьОшибкуНачалаЧасти(СвойстваЧасти2, ПодставитьКлючевыеСловаВСтроку(ВнутренниеДанные, + НСтр("ru = 'В начале второй части текста ограничения не найдено + |ключевое слово ""%1""'"), + "РазрешитьИзменениеЕслиРазрешеноЧтение")); + Иначе // СвойстваЧасти1.Имя = "ПрисоединитьДополнительныеТаблицы". + УстановитьОшибкуНачалаЧасти(СвойстваЧасти2, ПодставитьКлючевыеСловаВСтроку(ВнутренниеДанные, + НСтр("ru = 'В начале второй части текста ограничения не найдено ни одно из ключевых слов + |""%1"", ""%2""'"), + "РазрешитьЧтениеИзменение,РазрешитьЧтение")); + КонецЕсли; + Возврат ЧастиОграничения; + + ИначеЕсли СвойстваЧасти1.Имя = "РазрешитьЧтение" + И СвойстваЧасти2.Имя <> "РазрешитьИзменениеЕслиРазрешеноЧтение" + Или СвойстваЧасти1.Имя = "ПрисоединитьДополнительныеТаблицы" + И СвойстваЧасти2.Имя <> "РазрешитьЧтениеИзменение" + И СвойстваЧасти2.Имя <> "РазрешитьЧтение" Тогда + + УстановитьОшибкуНачалаЧасти(СвойстваЧасти2, + НСтр("ru = 'В начале второй части текста ограничения найдено недопустимое ключевое слово'")); + Возврат ЧастиОграничения; + + ИначеЕсли СвойстваЧастей.Количество() = 2 + И СвойстваЧасти2.Имя = "РазрешитьЧтение" Тогда + + УстановитьОшибкуНачалаЧасти(ТаблицаНаборовСимволов, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Текст ограничения не может быть только из двух частей, когда + |во второй части указано ключевое слово ""%1""'"), СвойстваЧасти2.Представление)); + Возврат ЧастиОграничения; + КонецЕсли; + + УстановитьЧастьОграничения(ЧастиОграничения, СвойстваЧасти2); + + Если СвойстваЧастей.Количество() < 3 Тогда + Возврат ЧастиОграничения; + КонецЕсли; + + // Анализ части 3. + СвойстваЧасти3 = СвойстваЧастей[2]; + + Если СвойстваЧасти2.Имя = "РазрешитьЧтениеИзменение" Тогда + УстановитьОшибкуНачалаЧасти(СвойстваЧасти2.СтрокаРазделителя, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Третьей части текста ограничения не должно быть, когда + |во второй части указано ключевое слово ""%1""'"), СвойстваЧасти2.Представление)); + Возврат ЧастиОграничения; + КонецЕсли; + + Если СвойстваЧасти3.Имя = "" Тогда + УстановитьОшибкуНачалаЧасти(СвойстваЧасти3, ПодставитьКлючевыеСловаВСтроку(ВнутренниеДанные, + НСтр("ru = 'В начале третьей части текста ограничения не найдено + |ключевое слово ""%1""'"), + "РазрешитьИзменениеЕслиРазрешеноЧтение")); + Возврат ЧастиОграничения; + + ИначеЕсли СвойстваЧасти2.Имя = "РазрешитьЧтение" + И СвойстваЧасти3.Имя <> "РазрешитьИзменениеЕслиРазрешеноЧтение" Тогда + + УстановитьОшибкуНачалаЧасти(СвойстваЧасти3, + НСтр("ru = 'В начале третьей части текста ограничения найдено недопустимое ключевое слово'")); + Возврат ЧастиОграничения; + КонецЕсли; + + УстановитьЧастьОграничения(ЧастиОграничения, СвойстваЧасти3); + + Возврат ЧастиОграничения; + +КонецФункции + +// Для функции ЧастиОграничения. +Процедура УстановитьЧастьОграничения(ЧастиОграничения, СвойстваЧасти) + + Если СвойстваЧасти.Имя = "РазрешитьЧтениеИзменение" + Или СвойстваЧасти.Имя = "РазрешитьЧтение" Тогда + + ИмяСвойства = "ОграничениеЧтения"; + + ИначеЕсли СвойстваЧасти.Имя = "РазрешитьИзменениеЕслиРазрешеноЧтение" Тогда + + ИмяСвойства = "ОграничениеИзменения"; + + Иначе // ПрисоединитьДополнительныеТаблицы. + + ИмяСвойства = "ДополнительныеТаблицы"; + ЧастиОграничения.ПсевдонимОсновнойТаблицы = СвойстваЧасти.ПсевдонимОсновнойТаблицы; + КонецЕсли; + + ЧастиОграничения[ИмяСвойства] = СвойстваЧасти.Состав; + +КонецПроцедуры + +// Для функции ЧастиОграничения, процедур РазобратьДополнительныеТаблицы, РазобратьУсловиеОграничения. +Процедура УстановитьОшибкуНачалаЧасти(СвойстваЧасти, ТекстОшибки) + + Если ТипЗнч(СвойстваЧасти) = Тип("ТаблицаЗначений") Тогда + СтрокаСОшибкой = СвойстваЧасти[СвойстваЧасти.Количество() - 1]; + + ИначеЕсли ТипЗнч(СвойстваЧасти) = Тип("СтрокаТаблицыЗначений") Тогда + СтрокаСОшибкой = СвойстваЧасти; + Иначе + СтрокаСОшибкой = СвойстваЧасти.Строки[0]; + КонецЕсли; + + СтрокаСОшибкой.ТекстОшибки = ТекстОшибки; + + // Требуется описание вариантов первых ключевых слов частей. + СтрокаСОшибкой.ПозицияОшибки = -1; + +КонецПроцедуры + +// Для процедуры РазобратьСоединение. +Процедура УстановитьОшибкуВнутриЧасти(Строки, ИндексСтроки, ТекстОшибки) + + Если ИндексСтроки < Строки.Количество() Тогда + СтрокаСОшибкой = Строки[ИндексСтроки]; + Иначе + СтрокаСОшибкой = Строки[ИндексСтроки - 1]; + // Ошибка в конце слова. + СтрокаСОшибкой.ПозицияОшибки = СтрДлина(СтрокаСОшибкой.Символы); + КонецЕсли; + + СтрокаСОшибкой.ТекстОшибки = ТекстОшибки; + +КонецПроцедуры + +// Для функции ВыраженияВСкобкахВоВложениях, ВыраженияВыборКогдаТогдаВоВложениях. +Процедура УстановитьОшибкуВСтроке(Строка, ТекстОшибки, ВКонцеСлова = Ложь, НомерСлова = 1) + + Если ЗначениеЗаполнено(Строка.ТекстОшибки) Тогда + Возврат; + КонецЕсли; + + Если ВКонцеСлова Тогда + Строка.ПозицияОшибки = СтрДлина(Строка.Символы); + + ИначеЕсли НомерСлова > 1 Тогда + СоставИмени = СтрРазделить(Строка.Символы, "."); + Если СоставИмени.Количество() > 1 Тогда + Строка.ПозицияОшибки = СтрДлина(СоставИмени[0]) + 1; + КонецЕсли; + КонецЕсли; + + Строка.ТекстОшибки = ТекстОшибки; + +КонецПроцедуры + +// Для функции ЧастиОграничения. +Процедура РазобратьЧастьОграничения(СвойстваЧасти, ВнутренниеДанные) + + ПервоеСлово = СвойстваЧасти.Строки[0]; + + Если СвойстваЧасти.Имя = "ПрисоединитьДополнительныеТаблицы" Тогда + СвойстваЧасти.Вставить("Состав", Новый Массив); + СвойстваЧасти.Вставить("ПсевдонимОсновнойТаблицы", ""); + РазобратьДополнительныеТаблицы(СвойстваЧасти, ВнутренниеДанные); + Иначе + СвойстваЧасти.Вставить("Состав", Новый Структура); + РазобратьУсловиеОграничения(СвойстваЧасти, ВнутренниеДанные); + КонецЕсли; + +КонецПроцедуры + +// Для процедуры РазобратьЧастьОграничения. +Процедура РазобратьДополнительныеТаблицы(СвойстваЧасти, ВнутренниеДанные) + + СтрокиЧасти = СвойстваЧасти.Строки; + + Если СтрокиЧасти.Количество() < 2 + Или СтрокиЧасти[1].Вид <> "КлючевоеСлово" + Или СтрокиЧасти[1].Уточнение <> "ЭтотСписок" Тогда + УстановитьОшибкуНачалаЧасти( + ?(СтрокиЧасти.Количество() < 3, СвойстваЧасти.СтрокаРазделителя, СтрокиЧасти[1]), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'После ключевого слова ""%1"" не найдено + |ключевое слово ""%2""'"), + СвойстваЧасти.Представление, + КлючевоеСловоСУчетомЯзыка("ЭтотСписок", ВнутренниеДанные))); + Возврат; + КонецЕсли; + + ИзменитьВидКлючевогоСловаСписокНаИмя(СтрокиЧасти, СтрокиЧасти[1]); + + Если СтрокиЧасти.Количество() < 3 + Или СтрокиЧасти[2].Вид <> "КлючевоеСлово" + Или СтрокиЧасти[2].Уточнение <> "Как" Тогда + УстановитьОшибкуНачалаЧасти( + ?(СтрокиЧасти.Количество() < 3, СвойстваЧасти.СтрокаРазделителя, СтрокиЧасти[2]), + ПодставитьКлючевыеСловаВСтроку(ВнутренниеДанные, + НСтр("ru = 'После ключевого слова ""%1"" не найдено ключевое слово ""%2""'"), + "Список,Как")); + Возврат; + КонецЕсли; + + Если СтрокиЧасти.Количество() < 4 + Или СтрокиЧасти[3].Вид <> "Имя" Тогда + УстановитьОшибкуНачалаЧасти( + ?(СтрокиЧасти.Количество() < 4, СвойстваЧасти.СтрокаРазделителя, СтрокиЧасти[3]), + ПодставитьКлючевыеСловаВСтроку(ВнутренниеДанные, + НСтр("ru = 'После ключевого слова ""%1"" не найден псевдоним'"), + "Как")); + Возврат; + КонецЕсли; + + УстановитьПсевдоним(СтрокиЧасти[3], СвойстваЧасти.ПсевдонимОсновнойТаблицы, ВнутренниеДанные); + + // Разделение описания на группы левых соединений. + Соединения = Новый Массив; + ТекущееСоединение = Новый Массив; + + Для Индекс = 4 По СтрокиЧасти.Количество()-1 Цикл + СтрокаЧасти = СтрокиЧасти[Индекс]; + + Если СтрокаЧасти.Вид = "КлючевоеСлово" + И СтрокаЧасти.Уточнение = "Левое" Тогда + + Если ТекущееСоединение.Количество() > 0 Тогда + Соединения.Добавить(ТекущееСоединение); + КонецЕсли; + ТекущееСоединение = Новый Массив; + ТекущееСоединение.Добавить(СтрокаЧасти); + + Если Индекс + 1 < СтрокиЧасти.Количество() + И СтрокиЧасти[Индекс + 1].Вид = "КлючевоеСлово" + И СтрокиЧасти[Индекс + 1].Уточнение = "Соединение" Тогда + + Индекс = Индекс + 1; + ТекущееСоединение.Добавить(СтрокиЧасти[Индекс]); + КонецЕсли; + + Продолжить; + КонецЕсли; + ТекущееСоединение.Добавить(СтрокаЧасти); + КонецЦикла; + + Если ТекущееСоединение.Количество() > 0 + Или Соединения.Количество() = 0 Тогда + + Соединения.Добавить(ТекущееСоединение); + КонецЕсли; + + Для Каждого Соединение Из Соединения Цикл + // Условие разбирается универсально (по максимуму возможностей) + // после чего устанавливаются ошибки на запрещенные возможности. + РазобратьСоединение(Соединение, СвойстваЧасти, ВнутренниеДанные); + КонецЦикла; + + // Продолжение разбора после заполнения псевдонимов всех дополнительных таблиц. + Для Каждого ОписаниеСоединения Из СвойстваЧасти.Состав Цикл + // Допустимы только простые условия: + // Поле1 = Поле2 [И Поле3 = Поле4] [И Поле5 = Константа]. + РазобратьПоляУсловияСоединенияИОтметитьЗапреты(ОписаниеСоединения, ВнутренниеДанные); + КонецЦикла; + +КонецПроцедуры + +// Для процедуры РазобратьДополнительныеТаблицы. +Процедура РазобратьСоединение(Соединение, СвойстваЧасти, ВнутренниеДанные) + + ОписаниеСоединения = Новый Структура; + ОписаниеСоединения.Вставить("Таблица", ""); + ОписаниеСоединения.Вставить("Псевдоним", ""); + ОписаниеСоединения.Вставить("УсловиеСоединения", Неопределено); + + Если Соединение[0].Вид <> "КлючевоеСлово" + Или Соединение[0].Уточнение <> "Левое" Тогда + УстановитьОшибкуВнутриЧасти(Соединение, 0, ПодставитьКлючевыеСловаВСтроку(ВнутренниеДанные, + НСтр("ru = 'Не найдено ключевое слово ""%1""'"), "Левое")); + + Если Соединение[0].Вид <> "КлючевоеСлово" + Или Соединение[0].Уточнение <> "Внутреннее" + И Соединение[0].Уточнение <> "Полное" Тогда + + Возврат; + КонецЕсли; + КонецЕсли; + + Если Соединение.Количество() < 2 + Или Соединение[1].Вид <> "КлючевоеСлово" + Или Соединение[1].Уточнение <> "Соединение" Тогда + УстановитьОшибкуВнутриЧасти(Соединение, 1, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'После ключевого слова ""%1"" не найдено ключевое слово ""%2""'"), + Соединение[0].Символы, + КлючевоеСловоСУчетомЯзыка("Соединение", ВнутренниеДанные))); + Возврат; + КонецЕсли; + + Если Соединение.Количество() < 3 + Или Соединение[2].Вид <> "Имя" Тогда + УстановитьОшибкуВнутриЧасти(Соединение, 2, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'После ключевого слова ""%1"" не найдено имя таблицы'"), + Соединение[1].Символы)); + Возврат; + КонецЕсли; + + УстановитьИмяТаблицы(Соединение[2], ОписаниеСоединения, ВнутренниеДанные); + + Если Соединение.Количество() < 4 + Или Соединение[3].Вид <> "КлючевоеСлово" + Или Соединение[3].Уточнение <> "Как" Тогда + УстановитьОшибкуВнутриЧасти(Соединение, 3, ПодставитьКлючевыеСловаВСтроку(ВнутренниеДанные, + НСтр("ru = 'После имени таблицы не найдено ключевое слово ""%1""'"), "Как")); + Возврат; + КонецЕсли; + + Если Соединение.Количество() < 5 + Или Соединение[4].Вид <> "Имя" Тогда + УстановитьОшибкуВнутриЧасти(Соединение, 4, ПодставитьКлючевыеСловаВСтроку(ВнутренниеДанные, + НСтр("ru = 'После ключевого слова ""%1"" не найден псевдоним таблицы'"), "Как")); + Возврат; + КонецЕсли; + + УстановитьПсевдоним(Соединение[4], ОписаниеСоединения, ВнутренниеДанные); + + Если Соединение.Количество() < 6 + Или Соединение[5].Вид <> "КлючевоеСлово" + Или Соединение[5].Уточнение <> "По" Тогда + УстановитьОшибкуВнутриЧасти(Соединение, 5, ПодставитьКлючевыеСловаВСтроку(ВнутренниеДанные, + НСтр("ru = 'После псевдонима таблицы не найдено ключевое слово ""%1""'"), "По")); + Возврат; + КонецЕсли; + + Условие = Новый Массив(Новый ФиксированныйМассив(Соединение)); + Для Индекс = 0 По 5 Цикл + Условие.Удалить(0); + КонецЦикла; + + РазобратьУсловие(Условие, ОписаниеСоединения.УсловиеСоединения, ВнутренниеДанные); + + СвойстваЧасти.Состав.Добавить(ОписаниеСоединения); + +КонецПроцедуры + +// Для процедуры РазобратьДополнительныеТаблицы. +Процедура РазобратьПоляУсловияСоединенияИОтметитьЗапреты(ОписаниеСоединения, ВнутренниеДанные) + + // Отметка некорректных аргументов операций и запрещенных возможностей. + ОбщиеУзлы = Новый Соответствие(УправлениеДоступомСлужебныйПовтИсп.УзлыДляПроверкиДоступности( + "Поле,Значение,Константа,И,=", Ложь)); + + ОбщиеУзлы.Вставить("Поле", Новый Структура("Выразить, Вложение, ЕстьNull", Ложь, Ложь, Ложь)); + + ДоступныеУзлы = Новый Структура; + ДоступныеУзлы.Вставить("Общие", ОбщиеУзлы); + ДоступныеУзлы.Вставить("УзлыКогда", ОбщиеУзлы); + ДоступныеУзлы.Вставить("УзлыТогдаИначе", ОбщиеУзлы); + + ФиксированныйКонтекст = Новый ФиксированнаяСтруктура(ВнутренниеДанные); + Контекст = Новый Структура(ФиксированныйКонтекст); + Контекст.Вставить("ЭтоУсловиеСоединения", Истина); + Контекст.Вставить("ЭтоУсловиеКогда", Ложь); + Контекст.Вставить("ЭтоЗначениеТогдаИначе", Ложь); + Контекст.Вставить("КорневойУзел", ОписаниеСоединения.УсловиеСоединения); + Контекст.Вставить("Родители", Новый Массив); + + ОтметитьНекорректныеАргументыИЗапрещенныеУзлы(ОписаниеСоединения.УсловиеСоединения, + ДоступныеУзлы, Контекст, Новый Структура("Узел", "")); + + УдалитьСвойствоИсточник(ОписаниеСоединения.УсловиеСоединения); + +КонецПроцедуры + +// Для процедур РазобратьУсловиеСоединения, РазобратьУсловиеОграничения. +Функция УзлыДляПроверкиДоступности(Список, ЭтоСписокИсключений) Экспорт + + ВсеУзлы = Новый Соответствие; + ВсеУзлы.Вставить("Поле", Новый Структура("Выразить, Вложение, ЕстьNull", Истина, Истина, Истина)); + ВсеУзлы.Вставить("Значение", Истина); + ВсеУзлы.Вставить("Константа", Истина); + ВсеУзлы.Вставить("И", Истина); + ВсеУзлы.Вставить("Или", Истина); + ВсеУзлы.Вставить("Не", Истина); + ВсеУзлы.Вставить("=", Истина); + ВсеУзлы.Вставить("<>", Истина); + ВсеУзлы.Вставить("В", Истина); + ВсеУзлы.Вставить("ЕстьNull", Истина); + ВсеУзлы.Вставить("Тип", Истина); + ВсеУзлы.Вставить("ТипЗначения", Истина); + ВсеУзлы.Вставить("Выбор", Истина); + ВсеУзлы.Вставить("ЗначениеРазрешено", Истина); + ВсеУзлы.Вставить("ЭтоАвторизованныйПользователь", Истина); + ВсеУзлы.Вставить("ЧтениеОбъектаРазрешено", Истина); + ВсеУзлы.Вставить("ИзменениеОбъектаРазрешено", Истина); + ВсеУзлы.Вставить("ЧтениеСпискаРазрешено", Истина); + ВсеУзлы.Вставить("ИзменениеСпискаРазрешено", Истина); + ВсеУзлы.Вставить("ДляВсехСтрок", Истина); + ВсеУзлы.Вставить("ДляОднойИзСтрок", Истина); + + МассивУзлов = СтрРазделить(Список, ",", Ложь); + Узлы = Новый Соответствие; + + Для Каждого Узел Из ВсеУзлы Цикл + Если ЭтоСписокИсключений Тогда + Если МассивУзлов.Найти(Узел.Ключ) = Неопределено Тогда + Узлы.Вставить(Узел.Ключ, Узел.Значение); + КонецЕсли; + Иначе + Если МассивУзлов.Найти(Узел.Ключ) <> Неопределено Тогда + Узлы.Вставить(Узел.Ключ, Узел.Значение); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат Новый ФиксированноеСоответствие(Узлы); + +КонецФункции + +// Для процедур РазобратьУсловиеСоединения, РазобратьУсловиеОграничения. +Процедура ОтметитьНекорректныеАргументыИЗапрещенныеУзлы(Условие, ДоступныеУзлы, Контекст, Родитель) + + Если Не ЗначениеЗаполнено(Условие) Тогда + Возврат; + КонецЕсли; + Контекст.Родители.Вставить(0, Родитель); + + Если Контекст.ЭтоУсловиеКогда Тогда + ТекущиеДоступныеУзлы = ДоступныеУзлы.УзлыКогда; + + ИначеЕсли Контекст.ЭтоЗначениеТогдаИначе Тогда + ТекущиеДоступныеУзлы = ДоступныеУзлы.УзлыТогдаИначе; + Иначе + ТекущиеДоступныеУзлы = ДоступныеУзлы.Общие; + КонецЕсли; + + ДоступностьУзла = ТекущиеДоступныеУзлы.Получить(Условие.Узел); + + Если ДоступностьУзла = Неопределено Тогда + УстановитьОшибкуУзелЗапрещен(Условие.Источник, Контекст); + КонецЕсли; + + Если Условие.Узел = "Поле" Тогда + + Если Не Контекст.ЭтоУсловиеСоединения Тогда + Если Родитель = Неопределено Тогда + Родитель = Новый Структура("Узел", ""); + КонецЕсли; + ПолеКлючаДоступа = Новый Структура; + ПолеКлючаДоступа.Вставить("Поле", Условие); + ПолеКлючаДоступа.Вставить("Родители", Новый ФиксированныйМассив(Контекст.Родители)); + ПолеКлючаДоступа.Вставить("Чтение", Контекст.Чтение); + Контекст.ПоляКлючаДоступа.Добавить(ПолеКлючаДоступа); + КонецЕсли; + + ВыделитьПсевдонимПоля(Условие, Контекст); + + Если Не ДоступностьУзла.Выразить + И Условие.Выразить <> Неопределено Тогда + + УстановитьОшибкуУзелЗапрещен(Условие.Источник, Контекст); + + ИначеЕсли Не ДоступностьУзла.Вложение + И Условие.Вложение <> Неопределено Тогда + + УстановитьОшибкуУзелЗапрещен(Условие.Вложение.Источник, Контекст); + + ИначеЕсли Не ДоступностьУзла.ЕстьNull + И Условие.ЕстьNull <> Неопределено Тогда + + УстановитьОшибкуУзелЗапрещен(Условие.ЕстьNullИсточник, Контекст); + КонецЕсли; + + ИначеЕсли Условие.Узел = "И" + Или Условие.Узел = "Или" Тогда + + Для Каждого Аргумент Из Условие.Аргументы Цикл + ОтметитьНекорректныеАргументыИЗапрещенныеУзлы(Аргумент, ДоступныеУзлы, Контекст, Условие); + КонецЦикла; + + ИначеЕсли Условие.Узел = "Не" + Или Условие.Узел = "ЕстьNull" + Или Условие.Узел = "ДляВсехСтрок" + Или Условие.Узел = "ДляОднойИзСтрок" Тогда + + // Проверка корректности параметра. + Если Условие.Узел = "ЕстьNull" + И ( Условие.Аргумент = Неопределено + Или Условие.Аргумент.Узел <> "Поле" ) Тогда + + УстановитьОшибкуВСтроке(Условие.Источник, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Операция ""%1"" допустима только после поля'"), + Условие.Источник.Символы)); + КонецЕсли; + ОтметитьНекорректныеАргументыИЗапрещенныеУзлы(Условие.Аргумент, ДоступныеУзлы, Контекст, Условие); + + ИначеЕсли Условие.Узел = "=" + Или Условие.Узел = "<>" Тогда + + СочетанияУзлов = Новый Соответствие; + СочетанияУзлов.Вставить("Значение", ",Поле,"); + СочетанияУзлов.Вставить("Константа", ",Поле,Константа,"); + + Если Контекст.ЭтоУсловиеСоединения Тогда + СочетанияУзлов.Вставить("Поле", ",Поле,Значение,Константа,"); + Иначе + СочетанияУзлов.Вставить("Поле", ",Значение,Константа,"); + СочетанияУзлов.Вставить("Тип", ",ТипЗначения,"); + СочетанияУзлов.Вставить("ТипЗначения", ",Тип,"); + КонецЕсли; + + СочетанияПервогоАргумента = СочетанияУзлов.Получить(Условие.ПервыйАргумент.Узел); + СочетанияВторогоАргумента = СочетанияУзлов.Получить(Условие.ВторойАргумент.Узел); + + ОшибкаВПервомАргументе = СочетанияПервогоАргумента = Неопределено; + ОшибкаВоВторомАргументе = СочетанияВторогоАргумента = Неопределено + Или СочетанияПервогоАргумента <> Неопределено + И СтрНайти(СочетанияПервогоАргумента, "," + Условие.ВторойАргумент.Узел + ",") = 0; + + Если ОшибкаВПервомАргументе Или ОшибкаВоВторомАргументе Тогда + Если Контекст.ЭтоУсловиеСоединения Тогда + ТекстОшибки = + НСтр("ru = 'Операция ""%1"" допустима только для поля с полем, значением или константой'"); + Иначе + ТекстОшибки = + НСтр("ru = 'Операция ""%1"" допустима только для поля со значением или константой, + |а также для типа значения с типом'"); + КонецЕсли; + Если ОшибкаВПервомАргументе Тогда + УстановитьОшибкуВСтроке(Условие.ПервыйАргумент.Источник, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстОшибки, Условие.Источник.Символы), + Истина); + КонецЕсли; + Если ОшибкаВоВторомАргументе Тогда + УстановитьОшибкуВСтроке(Условие.ВторойАргумент.Источник, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстОшибки, Условие.Источник.Символы)); + КонецЕсли; + КонецЕсли; + + ОтметитьНекорректныеАргументыИЗапрещенныеУзлы(Условие.ПервыйАргумент, ДоступныеУзлы, Контекст, Условие); + ОтметитьНекорректныеАргументыИЗапрещенныеУзлы(Условие.ВторойАргумент, ДоступныеУзлы, Контекст, Условие); + + ИначеЕсли Условие.Узел = "В" Тогда + ОтметитьНекорректныеАргументыИЗапрещенныеУзлы(Условие.Искомое, ДоступныеУзлы, Контекст, Условие); + Для Каждого Значение Из Условие.Значения Цикл + ОтметитьНекорректныеАргументыИЗапрещенныеУзлы(Значение, ДоступныеУзлы, Контекст, Условие); + КонецЦикла; + + ИначеЕсли Условие.Узел = "ТипЗначения" + Или Условие.Узел = "Тип" Тогда + + Если Родитель = Неопределено + Или Родитель.Узел <> "=" + И Родитель.Узел <> "<>" Тогда + + УстановитьОшибкуВСтроке(Условие.Источник, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Функция ""%1"" допустима только в операциях ""="" и ""<>""'"), + Условие.Источник.Символы)); + КонецЕсли; + + Если Условие.Узел = "ТипЗначения" Тогда + ОтметитьНекорректныеАргументыИЗапрещенныеУзлы(Условие.Аргумент, ДоступныеУзлы, Контекст, Условие); + КонецЕсли; + + ИначеЕсли Условие.Узел = "Выбор" Тогда + Если Условие.Выбор <> Неопределено Тогда + ОтметитьНекорректныеАргументыИЗапрещенныеУзлы(Условие.Выбор, ДоступныеУзлы, Контекст, Условие); + КонецЕсли; + ФиксированныйКонтекст = Новый ФиксированнаяСтруктура(Контекст); + КонтекстКогда = Новый Структура(ФиксированныйКонтекст); + КонтекстКогда.ЭтоУсловиеКогда = Истина; + КонтекстТогдаИначе = Новый Структура(ФиксированныйКонтекст); + КонтекстТогдаИначе.ЭтоЗначениеТогдаИначе = Истина; + + Для Каждого Когда Из Условие.Когда Цикл + ОтметитьНекорректныеАргументыИЗапрещенныеУзлы(Когда.Условие, ДоступныеУзлы, КонтекстКогда, Условие); + ОтметитьНекорректныеАргументыИЗапрещенныеУзлы(Когда.Значение, ДоступныеУзлы, КонтекстТогдаИначе, Условие); + КонецЦикла; + ОтметитьНекорректныеАргументыИЗапрещенныеУзлы(Условие.Иначе, ДоступныеУзлы, КонтекстТогдаИначе, Условие); + + ИначеЕсли Условие.Узел = "ЗначениеРазрешено" + Или Условие.Узел = "ЭтоАвторизованныйПользователь" + Или Условие.Узел = "ЧтениеОбъектаРазрешено" + Или Условие.Узел = "ИзменениеОбъектаРазрешено" + Или Условие.Узел = "ЧтениеСпискаРазрешено" + Или Условие.Узел = "ИзменениеСпискаРазрешено" Тогда + + ОтметитьНекорректныеАргументыИЗапрещенныеУзлы(Условие.Поле, ДоступныеУзлы, Контекст, Условие); + ОтметитьПовторыТиповСредиПроверяемыхИУточняемых(Условие, Контекст); + + // Добавление типов, наличие которых нужно проверить у полей. + Поле = Условие.Поле; + Уточнения = Новый Соответствие; + Для Каждого УточнениеСравнения Из Условие.УточненияСравнения Цикл + Если ТипЗнч(УточнениеСравнения.Ключ) <> Тип("СтрокаТаблицыЗначений") Тогда + Уточнения.Вставить(УточнениеСравнения.Ключ, УточнениеСравнения.Значение); + Продолжить; + КонецЕсли; + Уточнения.Вставить(УточнениеСравнения.Ключ.Символы, УточнениеСравнения.Значение); + ДобавитьТребуемоеПолеТаблицы(Контекст, Поле.Таблица, Поле.Имя, Поле.ИмяИсточник, + УточнениеСравнения.Ключ.Символы, УточнениеСравнения.Ключ); + КонецЦикла; + + // Удаление источников типов. + Условие.УточненияСравнения = Уточнения; + + Типы = Новый Массив; + Для Каждого Тип Из Условие.Типы Цикл + Типы.Добавить(Тип.Символы); + КонецЦикла; + Условие.Типы = Типы; + КонецЕсли; + + Контекст.Родители.Удалить(0); + +КонецПроцедуры + +// Для процедуры ОтметитьНекорректныеАргументыИЗапрещенныеУзлы. +Процедура ВыделитьПсевдонимПоля(УзелПоле, Контекст) + + Если УзелПоле.Вложение <> Неопределено Тогда + Вложение = УзелПоле.Вложение; + ВыделитьПсевдонимПоля(Вложение, Контекст); + Если ЗначениеЗаполнено(Вложение.Выразить) Тогда + УзелПоле.Таблица = Вложение.Выразить; + КонецЕсли; + + ИначеЕсли Не ЗначениеЗаполнено(УзелПоле.Имя) Тогда + Возврат; + Иначе + СоставИмени = СтрРазделить(УзелПоле.Имя, "."); + Если СоставИмени.Количество() > 1 Тогда + Таблица = Контекст.Псевдонимы.Получить(ВРег(СоставИмени[0])); + Если Таблица <> Неопределено Тогда + УзелПоле.Псевдоним = СоставИмени[0]; + СоставИмени.Удалить(0); + УзелПоле.Имя = СтрСоединить(СоставИмени, "."); + Если ЗначениеЗаполнено(Таблица) Тогда + УзелПоле.Таблица = Таблица; + КонецЕсли; + КонецЕсли; + КонецЕсли; + Если Контекст.ЭтоУсловиеСоединения + И Не ЗначениеЗаполнено(УзелПоле.Псевдоним) Тогда + + УстановитьОшибкуВСтроке(УзелПоле.ИмяИсточник, + НСтр("ru = 'В условии соединения перед именем поля требуется псевдоним'")); + КонецЕсли; + КонецЕсли; + + Если ЗначениеЗаполнено(УзелПоле.Выразить) Тогда + ДобавитьТребуемуюТаблицуКакСсылочныйТип(Контекст, УзелПоле.Выразить, УзелПоле.ВыразитьИсточник); + КонецЕсли; + + ДобавитьТребуемоеПолеТаблицы(Контекст, УзелПоле.Таблица, УзелПоле.Имя, УзелПоле.ИмяИсточник, + УзелПоле.Выразить, УзелПоле.ВыразитьИсточник, УзелПоле); + +КонецПроцедуры + +// Для процедур РазобратьУсловиеСоединения, РазобратьУсловиеОграничения. +Процедура УдалитьСвойствоИсточник(Условие) + + Если ТипЗнч(Условие) = Тип("СтрокаТаблицыЗначений") Тогда + ТекстОшибки = НСтр("ru = 'Не все источники наборов символов удалены'"); + ВызватьИсключение ТекстОшибки; + + ИначеЕсли ТипЗнч(Условие) <> Тип("Структура") Тогда + Возврат; + КонецЕсли; + + Если Условие.Свойство("Источник") Тогда + Условие.Удалить("Источник"); + КонецЕсли; + + Если Условие.Свойство("ИмяИсточник") Тогда + Условие.Удалить("ИмяИсточник"); + КонецЕсли; + + Если Условие.Свойство("ВыразитьИсточник") Тогда + Условие.Удалить("ВыразитьИсточник"); + КонецЕсли; + + Если Условие.Свойство("ЕстьNullИсточник") Тогда + Условие.Удалить("ЕстьNullИсточник"); + КонецЕсли; + + Для Каждого КлючИЗначение Из Условие Цикл + Значение = КлючИЗначение.Значение; + + Если ТипЗнч(Значение) = Тип("Массив") Тогда + Для Каждого Элемент Из Значение Цикл + УдалитьСвойствоИсточник(Элемент); + КонецЦикла; + + ИначеЕсли ТипЗнч(Значение) = Тип("Соответствие") Тогда + Для Каждого КлючИЗначение Из Значение Цикл + УдалитьСвойствоИсточник(КлючИЗначение.Ключ); + УдалитьСвойствоИсточник(КлючИЗначение.Значение); + КонецЦикла; + Иначе + УдалитьСвойствоИсточник(Значение); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Для процедуры ОтметитьНекорректныеАргументыИЗапрещенныеУзлы. +Процедура УстановитьОшибкуУзелЗапрещен(Строка, Контекст) + + Если Строка.Тип = "Функция" Тогда + Если Контекст.ЭтоУсловиеСоединения Тогда + ШаблонОшибки = НСтр("ru = 'Функция ""%1"" запрещена в условии соединения'"); + + ИначеЕсли Контекст.ЭтоУсловиеКогда Тогда + ШаблонОшибки = ПодставитьКлючевыеСловаВСтроку(Контекст, + НСтр("ru = 'Функция ""%3"" запрещена в условии ограничения в операции ""%1"" в предложении ""%2""'"), + "Выбор,Когда", Строка.Символы); + + ИначеЕсли Контекст.ЭтоЗначениеТогдаИначе Тогда + ШаблонОшибки = ПодставитьКлючевыеСловаВСтроку(Контекст, + НСтр("ru = 'Функция ""%4"" запрещена в условии ограничения в операции ""%1"" в предложениях ""%2"" и ""%3""'"), + "Выбор,Тогда,Иначе"); + Иначе + ШаблонОшибки = НСтр("ru = 'Функция ""%1"" запрещена в условии ограничения'"); + КонецЕсли; + Иначе + Если Контекст.ЭтоУсловиеСоединения Тогда + ШаблонОшибки = НСтр("ru = 'Операция ""%1"" запрещена в условии соединения'"); + + ИначеЕсли Контекст.ЭтоУсловиеКогда Тогда + ШаблонОшибки = ПодставитьКлючевыеСловаВСтроку(Контекст, + НСтр("ru = 'Операция ""%3"" запрещена в условии ограничения в операции ""%1"" в предложении ""%2""'"), + "Выбор,Когда", Строка.Символы); + + ИначеЕсли Контекст.ЭтоЗначениеТогдаИначе Тогда + ШаблонОшибки = ПодставитьКлючевыеСловаВСтроку(Контекст, + НСтр("ru = 'Операция ""%4"" запрещена в условии ограничения в операции ""%1"" в предложениях ""%2"" и ""%3""'"), + "Выбор,Тогда,Иначе"); + Иначе + ШаблонОшибки = НСтр("ru = 'Операция ""%1"" запрещена в условии ограничения'"); + КонецЕсли; + КонецЕсли; + + УстановитьОшибкуВСтроке(Строка, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонОшибки, Строка.Символы)); + +КонецПроцедуры + +// Для процедуры ОтметитьНекорректныеАргументыИЗапрещенныеУзлы. +Процедура ОтметитьПовторыТиповСредиПроверяемыхИУточняемых(Узел, Контекст) + + ТипыВСписке = Новый Соответствие; + + Для Каждого ТипВСписке Из Узел.Типы Цикл + Если ТипыВСписке.Получить(ВРег(ТипВСписке.Символы)) = Неопределено Тогда + ТипыВСписке.Вставить(ВРег(ТипВСписке.Символы), Истина); + Иначе + УстановитьОшибкуВСтроке(ТипВСписке, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Тип ""%1"" уже указан'"), ТипВСписке.Символы)); + КонецЕсли; + КонецЦикла; + + УточняемыеТипы = Новый Соответствие; + + Для Каждого УточнениеСравнения Из Узел.УточненияСравнения Цикл + Если ТипЗнч(УточнениеСравнения.Ключ) <> Тип("СтрокаТаблицыЗначений") Тогда + Продолжить; + КонецЕсли; + ИсточникТипа = УточнениеСравнения.Ключ; + + Если Не Узел.ПроверятьТипыКромеУказанных + И ТипыВСписке.Получить(ВРег(ИсточникТипа.Символы)) <> Неопределено Тогда + + УстановитьОшибкуВСтроке(ИсточникТипа, ПодставитьКлючевыеСловаВСтроку(Контекст, + НСтр("ru = 'Тип ""%2"" уже указан среди типов ключевого слова ""%1""'"), + "Только", + ИсточникТипа.Символы)); + + ИначеЕсли Узел.ПроверятьТипыКромеУказанных + И ТипыВСписке.Получить(ВРег(ИсточникТипа.Символы)) = Неопределено Тогда + + УстановитьОшибкуВСтроке(ИсточникТипа, ПодставитьКлючевыеСловаВСтроку(Контекст, + НСтр("ru = 'Тип ""%2"" не указан среди типов ключевого слова ""%1""'"), + "Кроме", + ИсточникТипа.Символы)); + + ИначеЕсли УточняемыеТипы.Получить(ВРег(ИсточникТипа.Символы)) <> Неопределено Тогда + УстановитьОшибкуВСтроке(ИсточникТипа, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Уточнение типа ""%1"" уже указано'"), ИсточникТипа.Символы)); + Иначе + УточняемыеТипы.Вставить(ВРег(ИсточникТипа.Символы), Истина); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Для процедуры РазобратьЧастьОграничения. +Процедура РазобратьУсловиеОграничения(СвойстваЧасти, ВнутренниеДанные) + + СтрокиЧасти = СвойстваЧасти.Строки; + ИзменитьВидКлючевогоСловаСписокНаИмя(СтрокиЧасти); + + Если СтрокиЧасти.Количество() < 2 + Или СтрокиЧасти[1].Вид <> "КлючевоеСлово" + Или СтрокиЧасти[1].Уточнение <> "Где" Тогда + УстановитьОшибкуНачалаЧасти( + ?(СтрокиЧасти.Количество() < 2, СвойстваЧасти.СтрокаРазделителя, СтрокиЧасти[1]), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'После ключевого слова ""%1"" не найдено + |ключевое слово ""%2""'"), + СвойстваЧасти.Представление, + КлючевоеСловоСУчетомЯзыка("Где", ВнутренниеДанные))); + Возврат; + КонецЕсли; + + Условие = Новый Массив(Новый ФиксированныйМассив(СтрокиЧасти)); + Для Индекс = 0 По 1 Цикл + Условие.Удалить(0); + КонецЦикла; + + РазобратьУсловие(Условие, СвойстваЧасти.Состав, ВнутренниеДанные); + + // Отметка некорректных параметров операций и неподдерживаемого функционала. + ОбщиеУзлы = УправлениеДоступомСлужебныйПовтИсп.УзлыДляПроверкиДоступности("", Истина); + + УзлыКогда = УправлениеДоступомСлужебныйПовтИсп.УзлыДляПроверкиДоступности( + "Поле,Значение,Константа,И,Или,Не,=,<>,В,ЕстьNull,Тип,ТипЗначения", Ложь); + + УзлыТогдаИначе = УправлениеДоступомСлужебныйПовтИсп.УзлыДляПроверкиДоступности( + "Выбор,ДляВсехСтрок,ДляОднойИзСтрок", Истина); + + ДоступныеУзлы = Новый Структура; + ДоступныеУзлы.Вставить("Общие", ОбщиеУзлы); + ДоступныеУзлы.Вставить("УзлыКогда", УзлыКогда); + ДоступныеУзлы.Вставить("УзлыТогдаИначе", УзлыТогдаИначе); + + ФиксированныйКонтекст = Новый ФиксированнаяСтруктура(ВнутренниеДанные); + Контекст = Новый Структура(ФиксированныйКонтекст); + Контекст.Вставить("ЭтоУсловиеСоединения", Ложь); + Контекст.Вставить("ЭтоУсловиеКогда", Ложь); + Контекст.Вставить("ЭтоЗначениеТогдаИначе", Ложь); + Контекст.Вставить("КорневойУзел", СвойстваЧасти.Состав); + Контекст.Вставить("Родители", Новый Массив); + Контекст.Вставить("Чтение", СтрНачинаетсяС(СвойстваЧасти.Имя, "РазрешитьЧтение")); + + ДобавитьПсевдонимыПоУмолчанию(Контекст); + + ОтметитьНекорректныеАргументыИЗапрещенныеУзлы(СвойстваЧасти.Состав, + ДоступныеУзлы, Контекст, Новый Структура("Узел", "")); + + УдалитьСвойствоИсточник(СвойстваЧасти.Состав); + +КонецПроцедуры + +// Для процедур ЧастиОграничения, РазобратьУсловиеОграничения. +Процедура ДобавитьПсевдонимыПоУмолчанию(Контекст); + + Если Контекст.Псевдонимы.Количество() > 0 Тогда + Возврат; + КонецЕсли; + + Контекст.Псевдонимы.Вставить(ВРег("ЭтотСписок"), ""); + Контекст.Псевдонимы.Вставить(ВРег("ThisList"), ""); + +КонецПроцедуры + +// Для процедур РазобратьУсловиеСоединения, РазобратьУсловиеОграничения. +Процедура РазобратьУсловие(Условие, Состав, ВнутренниеДанные) + + ВыраженияВСкобкахВоВложениях = ВыраженияВСкобкахВоВложениях(Условие); + + ФункцииСВыражениямиВСкобках = ФункцииСВыражениямиВСкобках( + ВыраженияВСкобкахВоВложениях, ВнутренниеДанные); + + ВыраженияВыборКогдаТогдаВоВложениях = ВыраженияВыборКогдаТогдаВоВложениях( + ФункцииСВыражениямиВСкобках, ВнутренниеДанные); + + Условие = ВыраженияВыборКогдаТогдаВоВложениях; + + РазобратьВыражение(Условие, Состав, ВнутренниеДанные, Ложь); + + ОбъединитьВложенныеЛогическиеОперации(Состав); + +КонецПроцедуры + +// Для процедуры РазобратьУсловие. +Процедура ОбъединитьВложенныеЛогическиеОперации(Состав) + + Если Состав = Неопределено Тогда + Возврат; + КонецЕсли; + + Если Состав.Узел = "И" + Или Состав.Узел = "Или" Тогда + + Индекс = Состав.Аргументы.Количество() - 1; + Пока Индекс >= 0 Цикл + + Аргумент = Состав.Аргументы[Индекс]; + ОбъединитьВложенныеЛогическиеОперации(Аргумент); + + Если Аргумент.Узел = Состав.Узел Тогда + Состав.Аргументы.Удалить(Индекс); + ВложенныйИндекс = Аргумент.Аргументы.Количество() - 1; + Пока ВложенныйИндекс >= 0 Цикл + Состав.Аргументы.Вставить(Индекс, Аргумент.Аргументы[ВложенныйИндекс]); + ВложенныйИндекс = ВложенныйИндекс - 1; + КонецЦикла; + КонецЕсли; + Индекс = Индекс - 1; + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + + +// Для процедур РазобратьУсловие, РазобратьФункцию, РазобратьВыбор. +Процедура РазобратьВыражение(Условие, Состав, ТекущийКонтекст, ВложенноеВыражение = Истина) + + ФиксированныйКонтекст = Новый ФиксированнаяСтруктура(ТекущийКонтекст); + Контекст = Новый Структура(ФиксированныйКонтекст); + Контекст.Вставить("Вложения", Новый Массив); + Контекст.Вставить("Описание"); + Контекст.Вставить("Строка"); + + Для Каждого Строка Из Условие Цикл + Контекст.Строка = Строка; + + Если Строка.Вид = "Имя" + Или Строка.Вид = "Число" + Или Строка.Вид = "ПроизвольнаяСтрока" + Или Строка.Вид = "КлючевоеСлово" + И ( Строка.Уточнение = "Истина" + Или Строка.Уточнение = "Ложь" + Или Строка.Уточнение = "Неопределено" ) Тогда + + НовоеОписание = ОписаниеУзлаПолеИлиУзлаКонстанта(Строка); + ДобавитьАргументФункциюВыборОператор(Контекст, НовоеОписание); + + ИначеЕсли Строка.Вид = "КлючевоеСлово" Тогда + + Если Строка.Тип = "Функция" + Или Строка.Уточнение = "В" Тогда + + Если Строка.Тип = "Функция" Тогда + РазобратьФункцию(Контекст); + Иначе + РазобратьСоединительВ(Контекст); + КонецЕсли; + + ИначеЕсли Строка.Тип = "Соединитель" Тогда + РазобратьСоединитель(Контекст); + + ИначеЕсли Строка.Тип = "Оператор" Тогда + РазобратьОператор(Контекст); + + ИначеЕсли Строка.Тип = "СловоВыбора" Тогда + РазобратьВыбор(Контекст); + Иначе + РазобратьОшибочноеКлючевоеСлово(Контекст); + КонецЕсли; + + ИначеЕсли Строка.Вид = "Операция" Тогда + РазобратьСоединитель(Контекст, Истина); + + ИначеЕсли Строка.Вид = "Разделитель" Тогда + Если Строка.Символы = "(" Тогда + НовоеОписание = Неопределено; + РазобратьВыражение(Строка.Строки, НовоеОписание, Контекст); + ДобавитьАргументФункциюВыборОператор(Контекст, НовоеОписание); + Если НовоеОписание <> Неопределено Тогда + НовоеОписание.Источник.Приоритет = 99; + КонецЕсли; + Иначе + Контекст.Описание = Неопределено; + УстановитьОшибкуВСтроке(Строка, + НСтр("ru = 'Запятая может использоваться только для разделения параметров функций'")); + КонецЕсли; + Иначе + Контекст.Описание = Неопределено; + УстановитьОшибкуВСтроке(Строка, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Обработка ключевого слова ""%1"" не определена'"), Строка.Символы)); + КонецЕсли; + + Если Контекст.Описание = Неопределено Тогда + // Возникала ошибка, останавливающая дальнейший разбор (предотвращение ложных срабатываний). + Прервать; + КонецЕсли; + КонецЦикла; + + Если Контекст.Описание = Неопределено Тогда + Если ВложенноеВыражение Тогда + Состав = Новый Структура("Источник, Узел, Значение", Строка, "Константа", Ложь); + Иначе + Состав = Неопределено; + КонецЕсли; + + ИначеЕсли Контекст.Вложения.Количество() = 0 Тогда + Состав = Контекст.Описание; + Иначе + Состав = Контекст.Вложения[Контекст.Вложения.Количество() - 1]; + КонецЕсли; + +КонецПроцедуры + +// Для процедур РазобратьВыражение, РазобратьПервыйПараметрПроверочнойФункции, +// РазобратьПараметрыФункцииТипЗначения, РазобратьВыбор и +// для функции ОписаниеУзлаПолеИзФункцииЕстьNull. +// +Функция ОписаниеУзлаПолеИлиУзлаКонстанта(Строка) + + // <Имя поля>, <Число>, <Произвольная строка>, Истина, Ложь, Неопределено. + + Если Строка.Вид = "Имя" Тогда + НовоеОписание = ОписаниеУзлаПоле(Строка); + НовоеОписание.Имя = Строка.Символы; + НовоеОписание.ИмяИсточник = Строка; + Иначе + СвойстваУзла = "Источник, Узел, Значение"; + НовоеОписание = Новый Структура(СвойстваУзла, Строка, "Константа"); + + Если Строка.Вид = "КлючевоеСлово" Тогда + Если Строка.Уточнение = "Истина" Тогда + НовоеОписание.Значение = Истина; + + ИначеЕсли Строка.Уточнение = "Ложь" Тогда + НовоеОписание.Значение = Ложь; + + Иначе // Строка.Вид = "Неопределено". + НовоеОписание.Значение = Неопределено; + КонецЕсли; + Иначе // "Число" или "ПроизвольнаяСтрока". + НовоеОписание.Значение = Строка.Уточнение; + КонецЕсли; + КонецЕсли; + + Возврат НовоеОписание; + +КонецФункции + +// Для функций ОписаниеУзлаПолеИлиУзлаКонстанта, ОписаниеУзлаПолеИзФункцииВыразить, ОписаниеУзлаПолеИзФункцииЕстьNull. +Функция ОписаниеУзлаПоле(Строка) + + СвойстваУзла = "Источник, Узел, Имя, Таблица, Псевдоним, Выразить, Вложение, ЕстьNull"; + НовоеОписание = Новый Структура(СвойстваУзла, Строка, "Поле"); + + НовоеОписание.Вставить("ИмяИсточник", Неопределено); + НовоеОписание.Вставить("ВыразитьИсточник", Неопределено); + НовоеОписание.Вставить("ЕстьNullИсточник", Неопределено); + + Возврат НовоеОписание; + +КонецФункции + +// Для процедуры РазобратьВыражение. +Процедура РазобратьСоединитель(Контекст, ЭтоОперация = Ложь) + + // И, Или, Как, Кроме, Только, Есть и любая операция =, <>, ... + // Ключевое слово В разбирается отдельно в процедуре "РазобратьОперациюВ". + + Строка = Контекст.Строка; + + НовоеОписание = Новый Структура("Источник, Узел", Строка, + ?(Строка.Вид = "Операция", Строка.Символы, Строка.Уточнение)); + + Если Строка.Уточнение = "И" + Или Строка.Уточнение = "Или" Тогда + + НовоеОписание.Вставить("Аргументы", Новый Массив); + НовоеОписание.Аргументы.Добавить(Неопределено); + ДобавитьСоединитель(Контекст, НовоеОписание, НовоеОписание.Аргументы[0]); + + ИначеЕсли Строка.Уточнение = "Есть" Тогда + НовоеОписание.Узел = "ЕстьNull"; + НовоеОписание.Вставить("Аргумент", Неопределено); + ДобавитьСоединитель(Контекст, НовоеОписание, НовоеОписание.Аргумент); + // Проверка корректности параметров выполняется + // в процедуре ОтметитьНекорректныеАргументыИЗапрещенныеУзлы. + + ИначеЕсли Строка.Вид = "Операция" Тогда + НовоеОписание.Вставить("ПервыйАргумент", Неопределено); + НовоеОписание.Вставить("ВторойАргумент", Неопределено); + ДобавитьСоединитель(Контекст, НовоеОписание, НовоеОписание.ПервыйАргумент); + // Проверка корректности аргументов выполняется + // в процедуре ОтметитьНекорректныеАргументыИЗапрещенныеУзлы. + + ИначеЕсли Строка.Уточнение = "Как" + Или Строка.Уточнение = "Кроме" + Или Строка.Уточнение = "Только" Тогда + + Контекст.Описание = Неопределено; + УстановитьОшибкуВСтроке(Строка, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ключевое слово ""%1"" может использоваться только в параметрах функций'"), Строка.Символы)); + Иначе + Контекст.Описание = Неопределено; + УстановитьОшибкуВСтроке(Строка, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Обработка ключевого слова ""%1"" не определена'"), Строка.Символы)); + КонецЕсли; + +КонецПроцедуры + +// Для процедуры РазобратьВыражение. +Процедура РазобратьСоединительВ(Контекст) + + Строка = Контекст.Строка; + + НовоеОписание = Новый Структура("Источник, Узел", Строка, Строка.Уточнение); + НовоеОписание.Вставить("Искомое", Неопределено); + НовоеОписание.Вставить("Значения", Новый Массив); + + СоставПараметров = ПараметрыРазделенныеЗапятыми(Строка); + // Ошибка отсутствия параметров уже установлена в функции ФункцииСВыражениямиВСкобках. + + Для Каждого ОписаниеПараметра Из СоставПараметров Цикл + Для Каждого Подстрока Из ОписаниеПараметра.Строки Цикл + + РазобратьЗначениеСоединителяВ(Контекст, Подстрока, НовоеОписание); + + Если ОписаниеПараметра.Строки[0] <> Подстрока Тогда + УстановитьОшибкуВСтроке(Подстрока, НСтр("ru = 'Перед параметром не указана запятая'")); + КонецЕсли; + + КонецЦикла; + КонецЦикла; + + ДобавитьСоединитель(Контекст, НовоеОписание, НовоеОписание.Искомое); + + Если НовоеОписание.Искомое.Узел <> "Поле" Тогда + УстановитьОшибкуВСтроке(Строка, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Операцию ""%1"" можно указывать только после имени поля'"), Строка.Символы)); + КонецЕсли; + +КонецПроцедуры + +// Для процедуры РазобратьСоединительВ. +Процедура РазобратьЗначениеСоединителяВ(Контекст, Подстрока, НовоеОписание) + + Строка = Контекст.Строка; + + Если Подстрока.Вид = "Число" + Или Подстрока.Вид = "ПроизвольнаяСтрока" Тогда + + ОписаниеКонстанты = Новый Структура("Источник, Узел", Подстрока, "Константа"); + ОписаниеКонстанты.Вставить("Значение", Подстрока.Уточнение); + НовоеОписание.Значения.Добавить(ОписаниеКонстанты); + + ИначеЕсли Подстрока.Вид = "КлючевоеСлово" Тогда + + Если Подстрока.Уточнение = "Значение" Тогда + НовыйКонтекст = НовыйКонтекст(Контекст, Подстрока, Неопределено); + РазобратьФункцию(НовыйКонтекст); + Если НовыйКонтекст.Описание <> Неопределено Тогда + НовоеОписание.Значения.Добавить(НовыйКонтекст.Описание); + КонецЕсли; + Иначе + УстановитьОшибкуВСтроке(Подстрока, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В списке значений операции ""%1"" ключевое слово ""%2"" недопустимо'"), + Строка.Символы, Подстрока.Символы)); + КонецЕсли; + + ИначеЕсли Подстрока.Вид = "Имя" Тогда + УстановитьОшибкуВСтроке(Подстрока, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В списке значений операции ""%1"" имя поля недопустимо'"), Строка.Символы)); + + ИначеЕсли Подстрока.Символы = "(" Тогда + УстановитьОшибкуВСтроке(Подстрока, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В списке значений операции ""%1"" скобки допустимы только для параметров функции'"), Строка.Символы)); + Иначе + УстановитьОшибкуВСтроке(Подстрока, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В списке значений операции ""%1"" можно указывать только значения'"), Строка.Символы)); + КонецЕсли; + +КонецПроцедуры + +// Для процедуры РазобратьЗначениеСоединителяВ. +Функция НовыйКонтекст(Контекст, Строка = null, Описание = null) + + ФиксированныйКонтекст = Новый ФиксированнаяСтруктура(Контекст); + НовыйКонтекст = Новый Структура(ФиксированныйКонтекст); + + Если Строка <> null Тогда + НовыйКонтекст.Строка = Строка; + КонецЕсли; + + Если Описание <> null Тогда + НовыйКонтекст.Описание = Описание; + КонецЕсли; + + Возврат НовыйКонтекст; + +КонецФункции + +// Для процедур РазобратьСоединитель, РазобратьСоединительВ, ВставитьСоединительСУчетомПриоритета. +Процедура ДобавитьСоединитель(Контекст, НовоеОписание, ПервыйАргумент); + + // Добавляемый соединитель: И, Или, В, Есть и любая операция (=, <>, ...). + + Описание = Контекст.Описание; + + Если Описание = Неопределено Тогда + Контекст.Описание = НовоеОписание; + + ИначеЕсли Описание.Узел = "И" + Или Описание.Узел = "Или" Тогда + + Если Описание.Аргументы.Количество() = 1 Тогда + Описание.Аргументы.Добавить(Неопределено); + ОбработатьПропущенныйАргументПослеСоединителя(Контекст, Описание.Аргументы[1]); + КонецЕсли; + ВставитьСоединительСУчетомПриоритета(Контекст, + Описание.Аргументы[1], НовоеОписание, ПервыйАргумент); + + ИначеЕсли Описание.Узел = "Не" Тогда + Если Не ЗначениеЗаполнено(Описание.Аргумент) Тогда + ОбработатьПропущенныйАргументПослеСоединителя(Контекст, Описание.Аргумент); + КонецЕсли; + ВставитьСоединительСУчетомПриоритета(Контекст, + Описание.Аргумент, НовоеОписание, ПервыйАргумент); + + ИначеЕсли Описание.Источник.Вид = "Операция" Тогда + Если Не ЗначениеЗаполнено(Описание.ВторойАргумент) Тогда + ОбработатьПропущенныйАргументПослеСоединителя(Контекст, Описание.ВторойАргумент, Ложь); + КонецЕсли; + ВставитьСоединительСУчетомПриоритета(Контекст, + Описание.ВторойАргумент, НовоеОписание, ПервыйАргумент); + + ИначеЕсли СтрНайти(",Поле,Значение,Константа,В,ЕстьNull,Выбор,", "," + Описание.Узел + ",") > 0 + Или Описание.Источник.Тип = "Функция" Тогда + // Второй аргумент операции В уже разобран в процедуре РазобратьОперациюВ. + // Второй аргумент Null операции Есть уже разобран в функции ФункцииСВыражениямиВСкобках. + // Остальные узлы не имеют второго аргумента. + ВставитьСоединительСУчетомПриоритета(Контекст, Неопределено, НовоеОписание, ПервыйАргумент); + Иначе + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не определена обработка узла ""%1""'"), Описание.Узел); + ВызватьИсключение ТекстОшибки; + КонецЕсли; + +КонецПроцедуры + +// Для процедуры ДобавитьСоединитель. +Процедура ОбработатьПропущенныйАргументПослеСоединителя(Контекст, ВторойАргумент, ЛогическаяОперация = Истина) + + УстановитьОшибкуВСтроке(Контекст.Описание.Источник, + ?(ЛогическаяОперация, + НСтр("ru = 'Не указан аргумент после логической операции'"), + НСтр("ru = 'Не указан аргумент после операции'")), + Истина); + + ВторойАргумент = Новый Структура("Источник, Узел, Значение", Контекст.Строка, "Константа", Истина); + +КонецПроцедуры + +// Для процедур ДобавитьСоединитель, ОбработатьПропущеннуюЛогическуюОперацию. +Процедура ВставитьСоединительСУчетомПриоритета(Контекст, + ПоследнийАргументОписания, НовоеОписание, ПервыйАргументНовогоОписания) + + Вложения = Контекст.Вложения; + + Если ПоследнийАргументОписания <> Неопределено + И Контекст.Строка.Приоритет >= Контекст.Описание.Источник.Приоритет Тогда + + // Замена аргумента текущего узла на соединитель (случай "А Или Б И ..."). + ПервыйАргументНовогоОписания = ПоследнийАргументОписания; + ПоследнийАргументОписания = НовоеОписание; + + Вложения.Вставить(0, Контекст.Описание); + Контекст.Описание = НовоеОписание; + Возврат; + КонецЕсли; + + Если Вложения.Количество() = 0 Тогда + // Вложение текущего узла, как первого аргумента соединителя (случай "А И Б Или ..."). + ПервыйАргументНовогоОписания = Контекст.Описание; + Контекст.Описание = НовоеОписание; + Возврат; + КонецЕсли; + + // Вложение предыдущего узла, как первого аргумента соединителя (случай "А И Не Б Или ..."). + Контекст.Описание = Вложения[0]; + Вложения.Удалить(0); + + ДобавитьСоединитель(Контекст, НовоеОписание, ПервыйАргументНовогоОписания); + +КонецПроцедуры + +// Для процедуры РазобратьВыражение. +Процедура РазобратьОператор(Контекст) + + // Оператор Не. + + НовоеОписание = Новый Структура("Источник, Узел, Аргумент", + Контекст.Строка, Контекст.Строка.Уточнение); + + ДобавитьАргументФункциюВыборОператор(Контекст, НовоеОписание); + + Контекст.Вложения.Вставить(0, Контекст.Описание); + Контекст.Описание = НовоеОписание; + +КонецПроцедуры + +// Для процедур РазобратьВыражение, РазобратьЗначениеСоединителяВ. +Процедура РазобратьФункцию(Контекст) + + Строка = Контекст.Строка; + + НовоеОписание = Новый Структура("Источник, Узел", Строка, Строка.Уточнение); + + Если Строка.Уточнение = "ЗначениеРазрешено" + Или Строка.Уточнение = "ЧтениеОбъектаРазрешено" + Или Строка.Уточнение = "ИзменениеОбъектаРазрешено" + Или Строка.Уточнение = "ЧтениеСпискаРазрешено" + Или Строка.Уточнение = "ИзменениеСпискаРазрешено" + Или Строка.Уточнение = "ЭтоАвторизованныйПользователь" Тогда + + РазобратьПараметрыПроверочнойФункции(Контекст, НовоеОписание); + + ИначеЕсли Строка.Уточнение = "ДляВсехСтрок" + Или Строка.Уточнение = "ДляОднойИзСтрок" Тогда + + ОписаниеВыражения = Неопределено; + РазобратьВыражение(Строка.Строки, ОписаниеВыражения, Контекст); + НовоеОписание.Вставить("Аргумент", ОписаниеВыражения); + + ИначеЕсли Строка.Уточнение = "Значение" Тогда + РазобратьПараметрыФункцииЗначениеИлиФункцииТип(Строка, НовоеОписание, Истина, Контекст); + + ИначеЕсли Строка.Уточнение = "Тип" Тогда + РазобратьПараметрыФункцииЗначениеИлиФункцииТип(Строка, НовоеОписание, Ложь, Контекст); + + ИначеЕсли Строка.Уточнение = "ТипЗначения" Тогда + РазобратьПараметрыФункцииТипЗначения(Контекст, НовоеОписание); + + ИначеЕсли Строка.Уточнение = "ЕстьNull" Тогда + НовоеОписание = ОписаниеУзлаПолеИзФункцииЕстьNull(Контекст.Строка, Контекст); + + ИначеЕсли Строка.Уточнение = "Выразить" Тогда + НовоеОписание = ОписаниеУзлаПолеИзФункцииВыразить(Контекст.Строка, Контекст); + + ИначеЕсли Не Строка.ЭтоРезерв Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не определена обработка функции ""%1""'"), Строка.Уточнение); + ВызватьИсключение ТекстОшибки; + КонецЕсли; + + ДобавитьАргументФункциюВыборОператор(Контекст, НовоеОписание); + +КонецПроцедуры + +// Для процедуры РазобратьФункцию. +Процедура РазобратьПараметрыПроверочнойФункции(Контекст, НовоеОписание) + + Строка = Контекст.Строка; + + НовоеОписание.Вставить("Поле", Неопределено); + НовоеОписание.Вставить("Типы", Новый Массив); + НовоеОписание.Вставить("ПроверятьТипыКромеУказанных", Ложь); + НовоеОписание.Вставить("УточненияСравнения", Новый Соответствие); + + СоставПараметров = ПараметрыРазделенныеЗапятыми(Строка); + + Если СоставПараметров.Количество() = 0 Тогда + Возврат; // Ошибка отсутствия параметров уже установлена в функции ФункцииСВыражениямиВСкобках. + КонецЕсли; + + РазобратьПервыйПараметрПроверочнойФункции(Контекст, СоставПараметров[0], НовоеОписание); + + Для Индекс = 1 По СоставПараметров.Количество() - 1 Цикл + РазобратьДополнительныйПараметрПроверочнойФункции(Контекст, + СоставПараметров[Индекс], НовоеОписание); + КонецЦикла; + +КонецПроцедуры + +// Для процедуры РазобратьПараметрыПроверочнойФункции. +Процедура РазобратьПервыйПараметрПроверочнойФункции(Контекст, ПервыйПараметр, НовоеОписание) + + Если ПервыйПараметр.Строки[0].Вид = "Имя" Тогда + НовоеОписание.Поле = ОписаниеУзлаПолеИлиУзлаКонстанта(ПервыйПараметр.Строки[0]); + + ИначеЕсли ПервыйПараметр.Строки[0].Вид = "КлючевоеСлово" + И ПервыйПараметр.Строки[0].Уточнение = "Выразить" Тогда + + НовоеОписание.Поле = ОписаниеУзлаПолеИзФункцииВыразить(ПервыйПараметр.Строки[0], Контекст); + + ИначеЕсли ПервыйПараметр.Строки[0].Вид = "КлючевоеСлово" + И ПервыйПараметр.Строки[0].Уточнение = "ЕстьNull" Тогда + + НовоеОписание.Поле = ОписаниеУзлаПолеИзФункцииЕстьNull(ПервыйПараметр.Строки[0], Контекст); + Иначе + УстановитьОшибкуВСтроке(ПервыйПараметр.Строки[0], + ПодставитьКлючевыеСловаВСтроку(Контекст, + НСтр("ru = 'Первым параметром может быть имя поля, функция ""%1"" или функция ""%2""'"), + "Выразить,ЕстьNull")); + Возврат; + КонецЕсли; + + Если ПервыйПараметр.Строки.Количество() < 2 Тогда + Возврат; + КонецЕсли; + + Если ПервыйПараметр.Строки[0].Вид = "КлючевоеСлово" + И ПервыйПараметр.Строки[0].Уточнение = "Выразить" + И НовоеОписание.Поле.Вложение = Неопределено Тогда + + УстановитьОшибкуВСтроке(ПервыйПараметр.Строки[0].КонечнаяСтрока, + ПодставитьКлючевыеСловаВСтроку(Контекст, + НСтр("ru = 'После вложенной функции ""%3"" должно быть указано имя поля через точку, + |если в параметре функции ""%4"" используется ключевое слово ""%1"" или ""%2""'"), + "Только,Кроме", + ПервыйПараметр.Строки[0].Символы, + Контекст.Строка.Символы), + Истина); + КонецЕсли; + + Если ПервыйПараметр.Строки[1].Вид <> "КлючевоеСлово" + Или ( ПервыйПараметр.Строки[1].Уточнение <> "Только" + И ПервыйПараметр.Строки[1].Уточнение <> "Кроме" ) Тогда + + УстановитьОшибкуВСтроке(ПервыйПараметр.Строки[1], + ПодставитьКлючевыеСловаВСтроку(Контекст, + НСтр("ru = 'После описания поля может быть указано, либо ключевое слово ""%1"", либо ""%2""'"), + "Только,Кроме")); + Возврат; + КонецЕсли; + + Если ПервыйПараметр.Строки[1].Уточнение = "Кроме" Тогда + НовоеОписание.ПроверятьТипыКромеУказанных = Истина; + КонецЕсли; + + Если ПервыйПараметр.Строки.Количество() < 3 Тогда + УстановитьОшибкуВСтроке(ПервыйПараметр.Строки[1], СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'После ключевого слова ""%1"" не указан тип (имя таблицы)'"), ПервыйПараметр.Строки[1].Символы)); + Возврат; + КонецЕсли; + + Если ПервыйПараметр.Строки[2].Вид <> "Имя" + И ПервыйПараметр.Строки[2].Символы <> "(" Тогда + + УстановитьОшибкуВСтроке(ПервыйПараметр.Строки[2], СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'После ключевого слова ""%1"" должен быть указан, либо тип (имя таблицы), либо список типов в скобках'"), + ПервыйПараметр.Строки[1].Символы)); + Возврат; + КонецЕсли; + + Если ПервыйПараметр.Строки.Количество() > 3 Тогда + УстановитьОшибкуВСтроке(ПервыйПараметр.Строки[3], СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Перед параметром функции ""%1"" не указана запятая'"), Контекст.Строка.Символы)); + КонецЕсли; + + Если ПервыйПараметр.Строки[2].Вид = "Имя" Тогда + НовоеОписание.Типы.Добавить(ПервыйПараметр.Строки[2]); + ДобавитьТребуемуюТаблицуКакСсылочныйТип(Контекст, ПервыйПараметр.Строки[2].Символы, ПервыйПараметр.Строки[2]); + Возврат; + КонецЕсли; + + СоставПараметров = ПараметрыРазделенныеЗапятыми(ПервыйПараметр.Строки[2]); + + Если СоставПараметров.Количество() = 0 Тогда + Возврат; // Ошибка отсутствия параметров уже установлена в функции ФункцииСВыражениямиВСкобках. + КонецЕсли; + + Для Каждого Параметр Из СоставПараметров Цикл + + Если Параметр.Строки[0].Вид = "Имя" + И Параметр.Строки.Количество() < 2 Тогда + + НовоеОписание.Типы.Добавить(Параметр.Строки[0]); + Иначе + УстановитьОшибкуВСтроке(Параметр.Строки[?(Параметр.Строки.Количество() < 2, 0, 1)], + НСтр("ru = 'В списке типов могут быть указаны только имена таблицы через запятую'")); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Для процедуры РазобратьПараметрыПроверочнойФункции. +Процедура РазобратьДополнительныйПараметрПроверочнойФункции(Контекст, Параметр, НовоеОписание) + + Если Параметр.Строки[0].Вид = "Имя" + Или Параметр.Строки[0].Вид = "КлючевоеСлово" + И ( Параметр.Строки[0].Тип = "ЗначениеСравнения" + Или Параметр.Строки[0].Тип = "ИмяТипа" ) Тогда + + Если Параметр.Строки[0].Вид = "Имя" Тогда + ЗначениеСравнения = Параметр.Строки[0]; + ДобавитьТребуемуюТаблицуКакСсылочныйТип(Контекст, Параметр.Строки[0].Символы, Параметр.Строки[0]); + Иначе + ЗначениеСравнения = Параметр.Строки[0].Уточнение; + КонецЕсли; + Иначе + УстановитьОшибкуВСтроке(Параметр.Строки[0], + ПодставитьКлючевыеСловаВСтроку(Контекст, + НСтр("ru = 'Дополнительным параметром может быть тип (имя таблицы), + |""%1"", ""%2"", ""%3"", ""%4"", ""%5"", ""%6"" и ""%7""'"), + "ПустаяСсылка,Неопределено,Null,Число,Строка,Дата,Булево")); + Возврат; + КонецЕсли; + + Если Параметр.Строки.Количество() < 2 Тогда + Если Параметр.Строки[0].Вид = "Имя" Тогда + Шаблон = НСтр("ru = 'После типа (имени таблицы) ""%2"" должно быть указано ключевое слово ""%1""'"); + Иначе + Шаблон = НСтр("ru = 'После ключевого слова ""%2"" должно быть указано ключевое слово ""%1""'"); + КонецЕсли; + УстановитьОшибкуВСтроке(Параметр.Строки[0], ПодставитьКлючевыеСловаВСтроку(Контекст, + Шаблон, "Как", Параметр.Строки[0].Символы), + Истина); + Возврат; + КонецЕсли; + + Если Параметр.Строки[1].Вид <> "КлючевоеСлово" + Или Параметр.Строки[1].Уточнение <> "Как" Тогда + + Если Параметр.Строки[0].Вид = "Имя" Тогда + Шаблон = НСтр("ru = 'После типа (имени таблицы) ""%2"" должно быть указано ключевое слово ""%1""'"); + Иначе + Шаблон = НСтр("ru = 'После ключевого слова ""%2"" должно быть указано ключевое слово ""%1""'"); + КонецЕсли; + УстановитьОшибкуВСтроке(Параметр.Строки[1], ПодставитьКлючевыеСловаВСтроку(Контекст, + Шаблон, "Как", Параметр.Строки[0].Символы)); + Возврат; + КонецЕсли; + + Если Параметр.Строки.Количество() < 3 Тогда + УстановитьОшибкуВСтроке(Параметр.Строки[1], ПодставитьКлючевыеСловаВСтроку(Контекст, + НСтр("ru = 'После ключевого слова ""%4"" не указано значение уточнения ""%1"", ""%2"" или ""%3""'"), + "Ложь,Истина,Пусто", + Параметр.Строки[1].Символы), + Истина); + Возврат; + КонецЕсли; + + Если Параметр.Строки[2].Вид <> "КлючевоеСлово" + Или Параметр.Строки[2].Тип <> "ЗначениеУточнения" Тогда + + УстановитьОшибкуВСтроке(Параметр.Строки[2], ПодставитьКлючевыеСловаВСтроку(Контекст, + НСтр("ru = 'После ключевого слова ""%4"" должно быть указано значение уточнения ""%1"", ""%2"" или ""%3""'"), + "Ложь,Истина,Пусто", + Параметр.Строки[1].Символы)); + Иначе + НовоеОписание.УточненияСравнения.Вставить(ЗначениеСравнения, Параметр.Строки[2].Уточнение); + КонецЕсли; + + Если Параметр.Строки.Количество() > 3 Тогда + УстановитьОшибкуВСтроке(Параметр.Строки[3], + НСтр("ru = 'Перед параметром не указана запятая или лишний параметр'")); + КонецЕсли; + +КонецПроцедуры + +// Для процедуры РазобратьФункцию. +Процедура РазобратьПараметрыФункцииЗначениеИлиФункцииТип(Строка, НовоеОписание, ЭтоФункцияЗначение, Контекст) + + НовоеОписание.Вставить("Имя", Неопределено); + + СоставПараметров = ПараметрыРазделенныеЗапятыми(Строка); + + Если СоставПараметров.Количество() = 0 Тогда + Возврат; // Ошибка отсутствия параметров уже установлена в функции ФункцииСВыражениямиВСкобках. + КонецЕсли; + + Параметр = СоставПараметров[0]; + Если Параметр.Строки[0].Вид = "Имя" Тогда + НовоеОписание.Имя = Параметр.Строки[0].Символы; + + Если ЭтоФункцияЗначение Тогда + ДобавитьТребуемыйПредопределенныйЭлемент(Контекст, НовоеОписание.Имя, Параметр.Строки[0]); + Иначе + ДобавитьТребуемуюТаблицуКакСсылочныйТип(Контекст, НовоеОписание.Имя, Параметр.Строки[0]); + КонецЕсли; + + ИначеЕсли ЭтоФункцияЗначение Тогда + УстановитьОшибкуВСтроке(Параметр.Строки[0], СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В функции ""%1"" можно указать только имя предопределенного значения'"), Строка.Символы)); + + ИначеЕсли Параметр.Строки[0].Вид = "КлючевоеСлово" + И Параметр.Строки[0].Тип = "ИмяТипа" Тогда + + НовоеОписание.Имя = Параметр.Строки[0].Уточнение; + Иначе + УстановитьОшибкуВСтроке(Параметр.Строки[0], ПодставитьКлючевыеСловаВСтроку(Контекст, + НСтр("ru = 'В функции ""%5"" можно указать имя таблицы или ""%1"", ""%2"", ""%3"" и ""%4""'"), + "Число,Строка,Дата,Булево", + Строка.Символы)); + КонецЕсли; + + Если Параметр.Строки.Количество() > 1 Тогда + УстановитьОшибкуВСтроке(Параметр.Строки[1], СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'У функции ""%1"" может быть только один параметр'"), Строка.Символы)); + КонецЕсли; + + Если СоставПараметров.Количество() > 1 Тогда + УстановитьОшибкуВСтроке(СоставПараметров[1].Строки[0], СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'У функции ""%1"" может быть только один параметр'"), Строка.Символы)); + КонецЕсли; + +КонецПроцедуры + +// Для процедуры РазобратьФункцию. +Процедура РазобратьПараметрыФункцииТипЗначения(Контекст, НовоеОписание) + + Строка = Контекст.Строка; + НовоеОписание.Вставить("Аргумент", Неопределено); + + СоставПараметров = ПараметрыРазделенныеЗапятыми(Строка); + + Если СоставПараметров.Количество() = 0 Тогда + Возврат; // Ошибка отсутствия параметров уже установлена в функции ФункцииСВыражениямиВСкобках. + КонецЕсли; + + Параметр = СоставПараметров[0]; + + Если Параметр.Строки[0].Вид = "Имя" Тогда + НовоеОписание.Аргумент = ОписаниеУзлаПолеИлиУзлаКонстанта(Параметр.Строки[0]); + + ИначеЕсли Параметр.Строки[0].Вид = "КлючевоеСлово" + И Параметр.Строки[0].Уточнение = "Выразить" Тогда + + НовоеОписание.Аргумент = ОписаниеУзлаПолеИзФункцииВыразить(Параметр.Строки[0], Контекст); + + ИначеЕсли Параметр.Строки[0].Вид = "КлючевоеСлово" + И Параметр.Строки[0].Уточнение = "ЕстьNull" Тогда + + НовоеОписание.Аргумент = ОписаниеУзлаПолеИзФункцииЕстьNull(Параметр.Строки[0], Контекст); + Иначе + УстановитьОшибкуВСтроке(Параметр.Строки[0], + ПодставитьКлючевыеСловаВСтроку(Контекст, + НСтр("ru = 'Параметром может быть имя поля, функция ""%1"" или функция ""%2""'"), + "Выразить,ЕстьNull")); + Возврат; + КонецЕсли; + + Если Параметр.Строки[0].Вид = "КлючевоеСлово" + И Параметр.Строки[0].Уточнение = "Выразить" + И НовоеОписание.Аргумент.Вложение = Неопределено Тогда + + УстановитьОшибкуВСтроке(Параметр.Строки[0].КонечнаяСтрока, + ПодставитьКлючевыеСловаВСтроку(Контекст, + НСтр("ru = 'После вложенной функции ""%1"" должно быть указано имя поля через точку'"), + Параметр.Строки[0].Символы), + Истина); + КонецЕсли; + + Если Параметр.Строки.Количество() < 2 Тогда + Возврат; + КонецЕсли; + + Если Параметр.Строки.Количество() > 1 Тогда + УстановитьОшибкуВСтроке(Параметр.Строки[1], СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'У функции ""%1"" может быть только один параметр'"), Строка.Символы)); + КонецЕсли; + + Если СоставПараметров.Количество() > 1 Тогда + УстановитьОшибкуВСтроке(СоставПараметров[1].Строки[0], СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'У функции ""%1"" может быть только один параметр'"), Строка.Символы)); + КонецЕсли; + +КонецПроцедуры + +// Для процедур РазобратьФункцию, РазобратьПервыйПараметрПроверочнойФункции, РазобратьПараметрыФункцииТипЗначения. +Функция ОписаниеУзлаПолеИзФункцииВыразить(Строка, Контекст) + + НовоеОписание = ОписаниеУзлаПоле(Строка); + + Если Строка.Строки.Количество() > 0 Тогда + ПоследняяСтрока = Строка.Строки[Строка.Строки.Количество() - 1]; + Если ПоследняяСтрока.Тип = "ДополнениеКВыразить" Тогда + Строка.Строки.Удалить(Строка.Строки.Количество() - 1); + НовоеОписание.Имя = Сред(ПоследняяСтрока.Символы, 2); + НовоеОписание.ИмяИсточник = ПоследняяСтрока; + НовоеОписание.Вложение = ОписаниеУзлаПолеИзФункцииВыразить(Строка, Контекст); + Возврат НовоеОписание; + КонецЕсли; + КонецЕсли; + + СоставПараметров = ПараметрыРазделенныеЗапятыми(Строка); + + Если СоставПараметров.Количество() = 0 Тогда + // Ошибка отсутствия параметров уже установлена в функции ФункцииСВыражениямиВСкобках. + Возврат НовоеОписание; + КонецЕсли; + + ПервыйПараметр = СоставПараметров[0]; + + Если ПервыйПараметр.Строки[0].Вид = "Имя" Тогда + НовоеОписание.Имя = ПервыйПараметр.Строки[0].Символы; + НовоеОписание.ИмяИсточник = ПервыйПараметр.Строки[0]; + + ИначеЕсли ПервыйПараметр.Строки[0].Вид = "КлючевоеСлово" + И ПервыйПараметр.Строки[0].Уточнение = "Выразить" Тогда + + НовоеОписание.Вложение = ОписаниеУзлаПолеИзФункцииВыразить(ПервыйПараметр.Строки[0], Контекст); + Если НовоеОписание.Вложение.Вложение = Неопределено Тогда + УстановитьОшибкуВСтроке(ПервыйПараметр.Строки[0].КонечнаяСтрока, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'После вложенной функции ""%1"" должно быть указано имя поля через точку'"), + ПервыйПараметр.Строки[0].Символы), + Истина); + Иначе + НовоеОписание = НовоеОписание.Вложение; + КонецЕсли; + + ИначеЕсли ПервыйПараметр.Строки[0].Вид = "КлючевоеСлово" + И ПервыйПараметр.Строки[0].Уточнение = "ЕстьNull" Тогда + + НовоеОписание = ОписаниеУзлаПолеИзФункцииЕстьNull(ПервыйПараметр.Строки[0], Контекст); + Иначе + УстановитьОшибкуВСтроке(ПервыйПараметр.Строки[0], + ПодставитьКлючевыеСловаВСтроку(Контекст, + НСтр("ru = 'Первым параметром может быть имя поля, функция ""%1"" или функция ""%2""'"), + "Выразить,ЕстьNull")); + Возврат НовоеОписание; + КонецЕсли; + + Если ПервыйПараметр.Строки.Количество() < 2 Тогда + УстановитьОшибкуВСтроке(ПервыйПараметр.Строки[0], + ПодставитьКлючевыеСловаВСтроку(Контекст, + НСтр("ru = 'После описания поля должно быть указано ключевое слово ""%1""'"), "Как"), Истина); + Возврат НовоеОписание; + КонецЕсли; + + Если ПервыйПараметр.Строки[1].Вид <> "КлючевоеСлово" + Или ПервыйПараметр.Строки[1].Уточнение <> "Как" Тогда + + УстановитьОшибкуВСтроке(ПервыйПараметр.Строки[1], + ПодставитьКлючевыеСловаВСтроку(Контекст, + НСтр("ru = 'После описания поля должно быть указано ключевое слово ""%1""'"), "Как")); + Возврат НовоеОписание; + КонецЕсли; + + Если ПервыйПараметр.Строки.Количество() < 3 Тогда + УстановитьОшибкуВСтроке(ПервыйПараметр.Строки[1], СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'После ключевого слова ""%1"" не указан тип (имя таблицы)'"), ПервыйПараметр.Строки[1].Символы)); + Возврат НовоеОписание; + КонецЕсли; + + Если ПервыйПараметр.Строки[2].Вид <> "Имя" Тогда + УстановитьОшибкуВСтроке(ПервыйПараметр.Строки[2], СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'После ключевого слова ""%1"" должен быть указан тип (имя таблицы)'"), + ПервыйПараметр.Строки[1].Символы)); + Иначе + НовоеОписание.Выразить = ПервыйПараметр.Строки[2].Символы; + НовоеОписание.ВыразитьИсточник = ПервыйПараметр.Строки[2]; + КонецЕсли; + + Если ПервыйПараметр.Строки.Количество() > 3 Тогда + УстановитьОшибкуВСтроке(ПервыйПараметр.Строки[3], СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'У функции ""%1"" может быть только один параметр'"), Строка.Символы)); + КонецЕсли; + + Если СоставПараметров.Количество() > 1 Тогда + УстановитьОшибкуВСтроке(ПервыйПараметр.КонечнаяСтрока, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'У функции ""%1"" может быть только один параметр'"), Строка.Символы)); + КонецЕсли; + + Возврат НовоеОписание; + +КонецФункции + +// Для процедур РазобратьФункцию, РазобратьПервыйПараметрПроверочнойФункции, +// РазобратьПараметрыФункцииТипЗначения и +// для функции ОписаниеУзлаПолеИзФункцииВыразить. +// +Функция ОписаниеУзлаПолеИзФункцииЕстьNull(Строка, Контекст) + + НовоеОписание = ОписаниеУзлаПоле(Строка); + НовоеОписание.ЕстьNullИсточник = Строка; + + СоставПараметров = ПараметрыРазделенныеЗапятыми(Строка); + + Если СоставПараметров.Количество() = 0 Тогда + // Ошибка отсутствия параметров уже установлена в функции ФункцииСВыражениямиВСкобках. + Возврат НовоеОписание; + КонецЕсли; + + ПервыйПараметр = СоставПараметров[0]; + + Если ПервыйПараметр.Строки[0].Вид = "Имя" Тогда + НовоеОписание.Имя = ПервыйПараметр.Строки[0].Символы; + НовоеОписание.ИмяИсточник = ПервыйПараметр.Строки[0]; + Иначе + УстановитьОшибкуВСтроке(ПервыйПараметр.Строки[0], СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Первым параметром функции ""%1"" может быть только имя поля'"), Строка.Символы)); + КонецЕсли; + + Если ПервыйПараметр.Строки.Количество() > 1 Тогда + УстановитьОшибкуВСтроке(ПервыйПараметр.Строки[1], СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Перед параметром функции ""%1"" не указана запятая'"), Строка.Символы)); + Возврат НовоеОписание; + КонецЕсли; + + Если СоставПараметров.Количество() < 2 Тогда + УстановитьОшибкуВСтроке(ПервыйПараметр.КонечнаяСтрока, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'У функции ""%1"" должно быть два параметра'"), Строка.Символы)); + Возврат НовоеОписание; + КонецЕсли; + + ВторойПараметр = СоставПараметров[1]; + + Если ВторойПараметр.Строки[0].Вид = "Число" + Или ВторойПараметр.Строки[0].Вид = "ПроизвольнаяСтрока" + Или ВторойПараметр.Строки[0].Вид = "КлючевоеСлово" + И ( ВторойПараметр.Строки[0].Уточнение = "Истина" + Или ВторойПараметр.Строки[0].Уточнение = "Ложь" + Или ВторойПараметр.Строки[0].Уточнение = "Неопределено" + Или ВторойПараметр.Строки[0].Уточнение = "Значение" ) Тогда + + Если ВторойПараметр.Строки[0].Уточнение = "Значение" Тогда + НовоеОписание.ЕстьNull = Новый Структура("Источник, Узел", + ВторойПараметр.Строки[0], ВторойПараметр.Строки[0].Уточнение); + + РазобратьПараметрыФункцииЗначениеИлиФункцииТип(ВторойПараметр.Строки[0], НовоеОписание.ЕстьNull, Истина, Контекст); + Иначе + НовоеОписание.ЕстьNull = ОписаниеУзлаПолеИлиУзлаКонстанта(ВторойПараметр.Строки[0]); + КонецЕсли; + Иначе + УстановитьОшибкуВСтроке(ВторойПараметр.Строки[0], СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'У функции ""%1"" второй параметр может быть, либо предопределенным значением, либо константой'"), + Строка.Символы)); + КонецЕсли; + + Если ВторойПараметр.Строки.Количество() > 1 Тогда + УстановитьОшибкуВСтроке(ВторойПараметр.Строки[1], СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'У функции ""%1"" может быть только два параметра'"), Строка.Символы)); + КонецЕсли; + + Если СоставПараметров.Количество() > 2 Тогда + УстановитьОшибкуВСтроке(СоставПараметров[2].Строки[0], СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'У функции ""%1"" должно быть только два параметра'"), Строка.Символы)); + КонецЕсли; + + Возврат НовоеОписание; + +КонецФункции + +// Для процедур РазобратьСоединительВ, РазобратьПараметрыПроверочнойФункции, +// РазобратьПараметрыФункцииЗначениеИлиФункцииТип, РазобратьПараметрыФункцииТипЗначения и +// для функций ОписаниеУзлаПолеИзФункцииВыразить, ОписаниеУзлаПолеИзФункцииЕстьNull. +// +Функция ПараметрыРазделенныеЗапятыми(Строка) + + СоставПараметров = Новый Массив; + + Если Строка.Строки.Количество() = 0 Тогда + Возврат СоставПараметров; + КонецЕсли; + + ОписаниеПараметра = Новый Структура("Строки, КонечнаяСтрока", Новый Массив); + ПредыдущаяПодстрокаЭтоЧастьАргумента = Ложь; + + Для Каждого Подстрока Из Строка.Строки Цикл + + Если Подстрока.Символы = "," Тогда + Если Не ПредыдущаяПодстрокаЭтоЧастьАргумента Тогда + Если Строка.Строки[0] = Подстрока Тогда + УстановитьОшибкуВСтроке(Подстрока, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Перед запятой не указан параметр'"), Подстрока.Символы)); + ОписаниеПараметра.Строки.Добавить(ДополнительнаяСтрока(Подстрока, "")); + Иначе + УстановитьОшибкуВСтроке(Подстрока, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Пропущен параметр или лишняя запятая'"), Подстрока.Символы)); + КонецЕсли; + КонецЕсли; + Если ОписаниеПараметра.Строки.Количество() > 0 Тогда + СоставПараметров.Добавить(ОписаниеПараметра); + ОписаниеПараметра.КонечнаяСтрока = Подстрока; + КонецЕсли; + ОписаниеПараметра = Новый Структура("Строки, КонечнаяСтрока", Новый Массив); + ПредыдущаяПодстрокаЭтоЧастьАргумента = Ложь; + Продолжить; + КонецЕсли; + + ПредыдущаяПодстрокаЭтоЧастьАргумента = Истина; + + ОписаниеПараметра.Строки.Добавить(Подстрока); + КонецЦикла; + + Если ОписаниеПараметра.Строки.Количество() > 0 Тогда + СоставПараметров.Добавить(ОписаниеПараметра); + ОписаниеПараметра.КонечнаяСтрока = Строка.КонечнаяСтрока; + Иначе + УстановитьОшибкуВСтроке(Подстрока, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Лишняя запятая или после запятой не указан параметр'"), Подстрока.Символы), Истина); + КонецЕсли; + + Возврат СоставПараметров; + +КонецФункции + +// Для процедуры РазобратьВыражение. +Процедура РазобратьВыбор(Контекст) + + Строка = Контекст.Строка; + + СвойстваУзла = "Источник, Узел, Выбор, Когда, Иначе"; + НовоеОписание = Новый Структура(СвойстваУзла, Строка, "Выбор"); + НовоеОписание.Когда = Новый Массив; + + ПропуститьАнализКогда = Ложь; + + Выбор = Строка.Строки[0]; + Если Выбор.Строки.Количество() > 0 Тогда + Если Выбор.Строки[0].Вид = "Имя" Тогда + НовоеОписание.Выбор = ОписаниеУзлаПолеИлиУзлаКонстанта(Выбор.Строки[0]); + Иначе + ПропуститьАнализКогда = Истина; + УстановитьОшибкуВСтроке(Выбор.Строки[0], СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Когда аргумент ключевого слова ""%1"" указан, то это может быть только имя поля'"), + Строка.Символы)); + КонецЕсли; + КонецЕсли; + + Индекс = 1; + Пока Строка.Строки[Индекс].Уточнение = "Когда" Цикл + ОписаниеКогдаТогда = Новый Структура("Условие, Значение"); + НовоеОписание.Когда.Добавить(ОписаниеКогдаТогда); + + Когда = Строка.Строки[Индекс]; + + Если Не ПропуститьАнализКогда Тогда + Если НовоеОписание.Выбор = Неопределено Тогда + РазобратьВыражение(Когда.Строки, ОписаниеКогдаТогда.Условие, Контекст); + + ИначеЕсли Когда.Строки.Количество() = 0 Тогда + Если ЗначениеЗаполнено(Когда.Символы) Тогда + УстановитьОшибкуВСтроке(Когда.Строки[0], СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Так как после ключевого слова ""%1"" указано поле, то после ключевого слова ""%2"" + |должно быть указано, либо предопределенное значение, либо константа'"), + Строка.Символы, + Когда.Символы)); + КонецЕсли; + + ИначеЕсли Когда.Строки[0].Вид = "Число" + Или Когда.Строки[0].Вид = "ПроизвольнаяСтрока" + Или Когда.Строки[0].Вид = "КлючевоеСлово" + И ( Когда.Строки[0].Уточнение = "Истина" + Или Когда.Строки[0].Уточнение = "Ложь" + Или Когда.Строки[0].Уточнение = "Неопределено" + Или Когда.Строки[0].Уточнение = "Значение" ) Тогда + + Если Когда.Строки[0].Уточнение = "Значение" Тогда + ОписаниеКогдаТогда.Условие = Новый Структура("Источник, Узел", + Когда.Строки[0], Когда.Строки[0].Уточнение); + + РазобратьПараметрыФункцииЗначениеИлиФункцииТип(Когда.Строки[0], ОписаниеКогдаТогда.Условие, Истина, Контекст); + Иначе + ОписаниеКогдаТогда.Условие = ОписаниеУзлаПолеИлиУзлаКонстанта(Когда.Строки[0]); + КонецЕсли; + ИначеЕсли ЗначениеЗаполнено(Когда.Символы) Тогда + УстановитьОшибкуВСтроке(Когда.Строки[0], СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Так как после ключевого слова ""%1"" указано поле, то после ключевого слова ""%2"" + |должно быть указано, либо предопределенное значение, либо константа'"), + Строка.Символы, + Когда.Символы)); + КонецЕсли; + КонецЕсли; + + СоставТогда = Строка.Строки[Индекс + 1]; + Если СоставТогда.Строки.Количество() > 0 Тогда + РазобратьВыражение(СоставТогда.Строки, ОписаниеКогдаТогда.Значение, Контекст); + + ИначеЕсли ЗначениеЗаполнено(СоставТогда.Символы) Тогда + УстановитьОшибкуВСтроке(Когда.Строки[0], СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'После ключевого слова ""%1"" должно быть указано логическое выражение'"), СоставТогда.Символы)); + КонецЕсли; + + Индекс = Индекс + 2; + КонецЦикла; + + РазобратьВыражение(Строка.Строки[Индекс].Строки, НовоеОписание.Иначе, Контекст); + + ДобавитьАргументФункциюВыборОператор(Контекст, НовоеОписание); + +КонецПроцедуры + +// Для процедуры РазобратьВыражение. +Процедура РазобратьОшибочноеКлючевоеСлово(Контекст) + + Строка = Контекст.Строка; + Контекст.Описание = Неопределено; + + Если Строка.Тип = "Неопределен" Тогда + // Для зарезервированных слов ошибка уже установлена. + Возврат; + КонецЕсли; + + Если Строка.Тип = "ЗначениеСравнения" Тогда + Если Строка.Уточнение = "Отключено" Тогда + // "Отключено". + УстановитьОшибкуВСтроке(Строка, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Значение ""%1"" может использоваться только как уточняемое значение + |в параметрах функции ""%2""'"), + Строка.Символы, + КлючевоеСловоСУчетомЯзыка("ЗначениеРазрешено", Контекст))); + Иначе + // "ПустаяСсылка" или "Null". + УстановитьОшибкуВСтроке(Строка, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Значение ""%1"" может использоваться только как уточняемое значение + |в параметрах функций проверки разрешений'"), + Строка.Символы)); + КонецЕсли; + + ИначеЕсли Строка.Тип = "ИмяТипа" Тогда + // "Число", "Строка", "Дата", "Булево". + УстановитьОшибкуВСтроке(Строка, ПодставитьКлючевыеСловаВСтроку(Контекст, + НСтр("ru = 'Имя типа ""%1"" может использоваться только, как параметр функции ""%2"" или + |как уточняемое значение в параметрах функций проверки разрешений'"), + Строка.Символы, + "Тип")); + Иначе + УстановитьОшибкуВСтроке(Строка, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Обработка ключевого слова ""%1"" не определена'"), Строка.Символы)); + КонецЕсли; + +КонецПроцедуры + +// Для процедур РазобратьВыражение, РазобратьОператор, РазобратьФункцию, РазобратьВыбор. +Процедура ДобавитьАргументФункциюВыборОператор(Контекст, ДобавляемоеОписание) + + // Текущий узел: Любой. + // Добавляемое описание: Поле, Значение, Константа, Не, Выбор, любая функция. + + Описание = Контекст.Описание; + + Если Описание = Неопределено Тогда + Контекст.Описание = ДобавляемоеОписание; + + ИначеЕсли Описание.Узел = "И" + Или Описание.Узел = "Или" Тогда + + Если Описание.Аргументы.Количество() = 1 Тогда + Описание.Аргументы.Добавить(ДобавляемоеОписание); + Иначе + ОбработатьПропущеннуюЛогическуюОперацию(Контекст, Описание.Аргументы[1], ДобавляемоеОписание); + КонецЕсли; + + ИначеЕсли Описание.Узел = "Не" Тогда + + Если Не ЗначениеЗаполнено(Описание.Аргумент) Тогда + Описание.Аргумент = ДобавляемоеОписание; + Иначе + ОбработатьПропущеннуюЛогическуюОперацию(Контекст, Описание.Аргумент, ДобавляемоеОписание); + КонецЕсли; + + ИначеЕсли Описание.Источник.Вид = "Операция" Тогда + + Если Не ЗначениеЗаполнено(Описание.ВторойАргумент) Тогда + Описание.ВторойАргумент = ДобавляемоеОписание; + // Проверка корректности аргументов выполняется + // в процедуре ОтметитьНекорректныеАргументыИЗапрещенныеУзлы. + Иначе + ОбработатьПропущеннуюЛогическуюОперацию(Контекст, Описание.ВторойАргумент, ДобавляемоеОписание); + КонецЕсли; + + ИначеЕсли СтрНайти(",Поле,Значение,Константа,В,ЕстьNull,Выбор,", "," + Описание.Узел + ",") > 0 + Или Описание.Источник.Тип = "Функция" Тогда + // Второй аргумент операции В уже разобран в процедуре РазобратьОперациюВ. + // Второй аргумент Null операции Есть уже разобран в функции ФункцииСВыражениямиВСкобках. + // Остальные узлы не имеют второго аргумента. + ОбработатьПропущеннуюЛогическуюОперацию(Контекст, Неопределено, ДобавляемоеОписание); + Иначе + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не определена обработка узла ""%1""'"), Описание.Узел); + ВызватьИсключение ТекстОшибки; + КонецЕсли; + +КонецПроцедуры + +// Для процедуры ДобавитьАргументФункциюВыборОператор +Процедура ОбработатьПропущеннуюЛогическуюОперацию(Контекст, ПоследнийАргументОписания, ДобавляемоеОписание) + + УстановитьОшибкуВСтроке(Контекст.Строка, НСтр("ru = 'Не указана логическая операция'")); + + // Восстановление. + ДополнительнаяСтрока = ДополнительнаяСтрока(Контекст.Строка, "И", Контекст); + + НовоеОписание = Новый Структура("Источник, Узел, Аргументы", ДополнительнаяСтрока, "И", Новый Массив); + НовоеОписание.Аргументы.Добавить(); + + ТекущаяСтрока = Контекст.Строка; + Контекст.Строка = ДополнительнаяСтрока; + + ВставитьСоединительСУчетомПриоритета(Контекст, + ПоследнийАргументОписания, НовоеОписание, НовоеОписание.Аргументы[0]); + + Контекст.Строка = ТекущаяСтрока; + + НовоеОписание.Аргументы.Добавить(ДобавляемоеОписание); + +КонецПроцедуры + +// Для процедуры РазобратьУсловие. +Функция ВыраженияВСкобкахВоВложениях(Строки) + + Результат = Новый Массив; + + ТекущееВложение = Новый Структура("Строки", Результат); + Вложения = Новый Массив; + Вложения.Добавить(ТекущееВложение); + + Для Каждого Строка Из Строки Цикл + Если Строка.Символы = "(" Тогда + ДобавитьВложение(Строка, Вложения, ТекущееВложение); + + ИначеЕсли Строка.Символы = ")" Тогда + Если Вложения.Количество() = 1 Тогда + УстановитьОшибкуВСтроке(Строка, + НСтр("ru = 'Указана закрывающаяся скобка до открывающейся скобки'")); + Иначе + УдалитьПоследнееВложение(Вложения, ТекущееВложение, Строка); + КонецЕсли; + Иначе + ТекущееВложение.Строки.Добавить(Строка); + КонецЕсли; + КонецЦикла; + + Пока Вложения.Количество() > 1 Цикл + ИндексПоследнегоВложения = Вложения.Количество() - 1; + Вложение = Вложения[ИндексПоследнегоВложения]; + Вложение.КонечнаяСтрока = Строка; + Вложения.Удалить(ИндексПоследнегоВложения); + УстановитьОшибкуВСтроке(Вложение, + НСтр("ru = 'Указана открывающаяся скобка без закрывающейся скобки'"), Истина); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Для процедуры РазобратьУсловие. +Функция ВыраженияВыборКогдаТогдаВоВложениях(Строки, Контекст) + + Результат = Новый Массив; + + ТекущееВложение = Новый Структура("Строки, Уточнение", Результат, ""); + Вложения = Новый Массив; + Вложения.Добавить(ТекущееВложение); + + Для Каждого Строка Из Строки Цикл + + Если Строка.Вид <> "КлючевоеСлово" + Или Строка.Тип <> "СловоВыбора" Тогда + + Если ТекущееВложение.Уточнение = "Выбор" Тогда + ТекущееВложение.Строки[0].Строки.Добавить(Строка); + Иначе + ТекущееВложение.Строки.Добавить(Строка); + Если Строка.Символы = "(" Тогда + Строка.Строки = ВыраженияВыборКогдаТогдаВоВложениях(Строка.Строки, Контекст); + КонецЕсли; + КонецЕсли; + ИначеЕсли Строка.Уточнение = "Выбор" Тогда + Если Вложения.Количество() = 1 Тогда + // Стандартная обработка после условия. + Иначе + Если ТекущееВложение.Уточнение = "Выбор" Тогда + УстановитьОшибкуВСтроке(ТекущееВложение, ПодставитьКлючевыеСловаВСтроку(Контекст, + НСтр("ru = 'После ключевого слова ""%1"" не указано ключевое слова ""%2""'"), "Выбор,Когда"), Истина); + ВосстановитьСтруктуруВыбора(ТекущееВложение, Вложения, ТекущееВложение, "Когда", Контекст); + КонецЕсли; + КонецЕсли; + ДобавитьВложение(Строка, Вложения, ТекущееВложение); + ТекущееВложение.Строки.Добавить(ДополнительнаяСтрока(ТекущееВложение, "Выбор", Контекст)); + + ИначеЕсли Строка.Уточнение = "Когда" Тогда + + Если Вложения.Количество() = 1 Тогда + УстановитьОшибкуВСтроке(Строка, ПодставитьКлючевыеСловаВСтроку(Контекст, + НСтр("ru = 'Ключевое слово ""%1"" указано до ключевого слова ""%2""'"), "Когда,Выбор")); + ВосстановитьСтруктуруВыбора(Строка, Вложения, ТекущееВложение, "Выбор", Контекст); + + ИначеЕсли ТекущееВложение.Уточнение = "Выбор" Тогда + // Стандартная обработка после условия. + + ИначеЕсли ТекущееВложение.Уточнение = "Когда" Тогда + УстановитьОшибкуВСтроке(ТекущееВложение, ПодставитьКлючевыеСловаВСтроку(Контекст, + НСтр("ru = 'После ключевого слова ""%1"" не указано ключевое слова ""%2""'"), "Когда,Тогда"), Истина); + ВосстановитьСтруктуруВыбора(ТекущееВложение, Вложения, ТекущееВложение, "Тогда", Контекст); + + ИначеЕсли ТекущееВложение.Уточнение = "Тогда" Тогда + УдалитьПоследнееВложение(Вложения, ТекущееВложение); + + Иначе // ТекущееВложение.Уточнение = "Иначе" + УстановитьОшибкуВСтроке(Строка, ПодставитьКлючевыеСловаВСтроку(Контекст, + НСтр("ru = 'Ключевое слово ""%1"" должно быть до ключевого слова ""%2""'"), "Когда,Иначе")); + УдалитьПоследнееВложение(Вложения, ТекущееВложение); + КонецЕсли; + ДобавитьВложение(Строка, Вложения, ТекущееВложение); + + ИначеЕсли Строка.Уточнение = "Тогда" Тогда + + Если Вложения.Количество() = 1 Тогда + УстановитьОшибкуВСтроке(Строка, ПодставитьКлючевыеСловаВСтроку(Контекст, + НСтр("ru = 'Ключевое слово ""%1"" указано до ключевых слов ""%2"" и ""%3""'"), "Тогда,Выбор,Когда")); + ВосстановитьСтруктуруВыбора(Строка, Вложения, ТекущееВложение, "Выбор,Когда", Контекст); + + ИначеЕсли ТекущееВложение.Уточнение = "Выбор" Тогда + УстановитьОшибкуВСтроке(Строка, ПодставитьКлючевыеСловаВСтроку(Контекст, + НСтр("ru = 'Ключевое слово ""%1"" указано до ключевого слова ""%2""'"), "Тогда,Когда")); + ВосстановитьСтруктуруВыбора(Строка, Вложения, ТекущееВложение, "Когда", Контекст); + + ИначеЕсли ТекущееВложение.Уточнение = "Когда" Тогда + // Стандартная обработка после условия. + + ИначеЕсли ТекущееВложение.Уточнение = "Тогда" Тогда + УстановитьОшибкуВСтроке(ТекущееВложение, ПодставитьКлючевыеСловаВСтроку(Контекст, + НСтр("ru = 'После ключевого слова ""%1"" не указано ключевое слова ""%2""'"), "Тогда,Когда"), Истина); + ВосстановитьСтруктуруВыбора(ТекущееВложение, Вложения, ТекущееВложение, "Когда", Контекст); + + Иначе // ТекущееВложение.Уточнение = "Иначе" + УстановитьОшибкуВСтроке(Строка, ПодставитьКлючевыеСловаВСтроку(Контекст, + НСтр("ru = 'Ключевое слово ""%1"" должно быть до ключевого слова ""%2""'"), "Тогда,Иначе")); + УдалитьПоследнееВложение(Вложения, ТекущееВложение); + ВосстановитьСтруктуруВыбора(Строка, Вложения, ТекущееВложение, "Когда", Контекст); + КонецЕсли; + УдалитьПоследнееВложение(Вложения, ТекущееВложение); + ДобавитьВложение(Строка, Вложения, ТекущееВложение); + + ИначеЕсли Строка.Уточнение = "Иначе" Тогда + + Если Вложения.Количество() = 1 Тогда + УстановитьОшибкуВСтроке(Строка, ПодставитьКлючевыеСловаВСтроку(Контекст, + НСтр("ru = 'Ключевое слово ""%1"" указано до ключевых слов ""%2"", ""%3"" и ""%4""'"), "Иначе,Выбор,Когда,Тогда")); + ВосстановитьСтруктуруВыбора(Строка, Вложения, ТекущееВложение, "Выбор,Когда,Тогда", Контекст); + + ИначеЕсли ТекущееВложение.Уточнение = "Выбор" Тогда + УстановитьОшибкуВСтроке(Строка, ПодставитьКлючевыеСловаВСтроку(Контекст, + НСтр("ru = 'Ключевое слово ""%1"" указано до ключевых слов ""%2"" и ""%3""'"), "Иначе,Когда,Тогда")); + ВосстановитьСтруктуруВыбора(Строка, Вложения, ТекущееВложение, "Когда,Тогда", Контекст); + + ИначеЕсли ТекущееВложение.Уточнение = "Когда" Тогда + УстановитьОшибкуВСтроке(Строка, ПодставитьКлючевыеСловаВСтроку(Контекст, + НСтр("ru = 'Ключевое слово ""%1"" указано до ключевого слова ""%2""'"), "Иначе,Тогда")); + УдалитьПоследнееВложение(Вложения, ТекущееВложение); + ВосстановитьСтруктуруВыбора(Строка, Вложения, ТекущееВложение, "Тогда", Контекст); + + ИначеЕсли ТекущееВложение.Уточнение = "Тогда" Тогда + // Стандартная обработка после условия. + + Иначе // ТекущееВложение.Уточнение = "Иначе" + УстановитьОшибкуВСтроке(Строка, ПодставитьКлючевыеСловаВСтроку(Контекст, + НСтр("ru = 'Ключевое слово ""%1"" указано повторно'"), "Иначе")); + КонецЕсли; + УдалитьПоследнееВложение(Вложения, ТекущееВложение); + ДобавитьВложение(Строка, Вложения, ТекущееВложение); + + Иначе // Строка.Уточнение = "Конец" + + Если Вложения.Количество() = 1 Тогда + УстановитьОшибкуВСтроке(Строка, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ключевое слово ""%1"" указано до ключевых слов ""%2"", ""%3"", ""%4"" и ""%5""'"), "Конец,Выбор,Когда,Тогда,Иначе")); + ВосстановитьСтруктуруВыбора(Строка, Вложения, ТекущееВложение, "Выбор,Когда,Тогда,Иначе", Контекст); + + ИначеЕсли ТекущееВложение.Уточнение = "Выбор" Тогда + УстановитьОшибкуВСтроке(Строка, ПодставитьКлючевыеСловаВСтроку(Контекст, + НСтр("ru = 'Ключевое слово ""%1"" указано до ключевых слов ""%2"", ""%3"" и ""%4""'"), "Конец,Когда,Тогда,Иначе")); + ВосстановитьСтруктуруВыбора(Строка, Вложения, ТекущееВложение, "Когда,Тогда,Иначе", Контекст); + + ИначеЕсли ТекущееВложение.Уточнение = "Когда" Тогда + УстановитьОшибкуВСтроке(Строка, ПодставитьКлючевыеСловаВСтроку(Контекст, + НСтр("ru = 'Ключевое слово ""%1"" указано до ключевых слов ""%2"" и ""%3""'"), "Конец,Тогда,Иначе")); + УдалитьПоследнееВложение(Вложения, ТекущееВложение); + ВосстановитьСтруктуруВыбора(Строка, Вложения, ТекущееВложение, "Тогда,Иначе", Контекст); + + ИначеЕсли ТекущееВложение.Уточнение = "Тогда" Тогда + УстановитьОшибкуВСтроке(Строка, ПодставитьКлючевыеСловаВСтроку(Контекст, + НСтр("ru = 'Ключевое слово ""%1"" указано до ключевого слова ""%2""'"), "Конец,Иначе")); + УдалитьПоследнееВложение(Вложения, ТекущееВложение); + ВосстановитьСтруктуруВыбора(Строка, Вложения, ТекущееВложение, "Иначе", Контекст); + + Иначе // ТекущееВложение.Уточнение = "Иначе". + // Стандартная обработка после условия. + КонецЕсли; + УдалитьПоследнееВложение(Вложения, ТекущееВложение); + УдалитьПоследнееВложение(Вложения, ТекущееВложение); + КонецЕсли; + КонецЦикла; + + Пока Вложения.Количество() > 1 Цикл + ТекущееВложение = Вложения[Вложения.Количество() - 1]; + + Если ТекущееВложение.Уточнение = "Выбор" Тогда + ТекстОшибки = ПодставитьКлючевыеСловаВСтроку(Контекст, + НСтр("ru = 'После ключевого слова ""%1"" не указаны ключевые слова ""%2"", ""%3"", ""%4"" и ""%5""'"), "Выбор,Когда,Тогда,Иначе,Конец"); + ВосстановитьСтруктуруВыбора(ТекущееВложение, Вложения, ТекущееВложение, "Когда,Тогда,Иначе", Контекст); + + ИначеЕсли ТекущееВложение.Уточнение = "Когда" Тогда + ТекстОшибки = ПодставитьКлючевыеСловаВСтроку(Контекст, + НСтр("ru = 'После ключевого слова ""%1"" не указаны ключевые слова ""%2"", ""%3"", ""%4""'"), "Когда,Тогда,Иначе,Конец"); + УдалитьПоследнееВложение(Вложения, ТекущееВложение); + ВосстановитьСтруктуруВыбора(ТекущееВложение, Вложения, ТекущееВложение, "Тогда,Иначе", Контекст); + + ИначеЕсли ТекущееВложение.Уточнение = "Тогда" Тогда + ТекстОшибки = ПодставитьКлючевыеСловаВСтроку(Контекст, + НСтр("ru = 'После ключевого слова ""%1"" не указаны ключевые слова ""%2"" и ""%3""'"), "Тогда,Иначе,Конец"); + УдалитьПоследнееВложение(Вложения, ТекущееВложение); + ВосстановитьСтруктуруВыбора(ТекущееВложение, Вложения, ТекущееВложение, "Иначе", Контекст); + + Иначе // ТекущееВложение.Уточнение = "Иначе" + ТекстОшибки = ПодставитьКлючевыеСловаВСтроку(Контекст, + НСтр("ru = 'После ключевого слова ""%1"" не указано ключевое слово ""%2""'"), "Иначе,Конец"); + КонецЕсли; + УстановитьОшибкуВСтроке(ТекущееВложение, ТекстОшибки, Истина); + УдалитьПоследнееВложение(Вложения, ТекущееВложение); + УдалитьПоследнееВложение(Вложения, ТекущееВложение); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Для процедуры РазобратьУсловие. +Функция ФункцииСВыражениямиВСкобках(Строки, ВнутренниеДанные) + + Результат = Новый Массив; + КоличествоСтрок = Строки.Количество(); + + Строка = Неопределено; + Индекс = 0; + Пока Индекс < КоличествоСтрок Цикл + ПредыдущаяСтрока = Строка; + Строка = Строки[Индекс]; + + Если Строка.Символы = "(" Тогда + Строка.Строки = ФункцииСВыражениямиВСкобках(Строка.Строки, ВнутренниеДанные); + + ИначеЕсли Строка.Вид = "КлючевоеСлово" + И ( Строка.Тип = "Функция" + Или Строка.Уточнение = "В" ) Тогда + + Если Индекс + 1 < Строки.Количество() + И Строки[Индекс + 1].Символы = "(" Тогда + + Индекс = Индекс + 1; + Строка.Строки = ФункцииСВыражениямиВСкобках(Строки[Индекс].Строки, ВнутренниеДанные); + Строка.КонечнаяСтрока = Строки[Индекс].КонечнаяСтрока; + + Если Строка.Строки.Количество() = 0 Тогда + Если Строка.Тип = "Функция" Тогда + УстановитьОшибкуВСтроке(Строки[Индекс], СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'У функции ""%1"" не указано ни одного параметра'"), Строка.Символы), Истина); + Иначе + УстановитьОшибкуВСтроке(Строки[Индекс], СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В списке значений операции ""%1"" не указано ни одного значения'"), Строка.Символы), Истина); + КонецЕсли; + КонецЕсли; + Иначе + Строка.Строки = Новый Массив; + Если Строка.Тип = "Функция" Тогда + УстановитьОшибкуВСтроке(Строка, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'После функции ""%1"" не указаны параметры в скобках'"), Строка.Символы), Истина); + Иначе + УстановитьОшибкуВСтроке(Строка, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'После ключевого слова ""%1"" не указаны значения в скобках'"), Строка.Символы), Истина); + КонецЕсли; + КонецЕсли; + + ИначеЕсли Строка.Вид = "КлючевоеСлово" + И Строка.Уточнение = "Есть" Тогда + + Если Индекс + 1 < Строки.Количество() + И Строки[Индекс + 1].Вид = "КлючевоеСлово" + И Строки[Индекс + 1].Уточнение = "Null" Тогда + + Индекс = Индекс + 1; + Строка.Строки.Добавить(Строки[Индекс]); + Иначе + Строка.Строки = Новый Массив; + УстановитьОшибкуВСтроке(Строка, ПодставитьКлючевыеСловаВСтроку(ВнутренниеДанные, + НСтр("ru = 'После ключевого слова ""%2"" не указано ключевое слово ""%1""'"), + "Null", + Строка.Символы), + Истина); + КонецЕсли; + + ИначеЕсли Строка.Вид = "Имя" + И СтрНачинаетсяС(Строка.Символы, ".") + И ПредыдущаяСтрока <> Неопределено Тогда + + Если ПредыдущаяСтрока <> Неопределено + И ПредыдущаяСтрока.Вид = "КлючевоеСлово" + И ПредыдущаяСтрока.Уточнение = "Выразить" Тогда + + Строка.Тип = "ДополнениеКВыразить"; + ПредыдущаяСтрока.Строки.Добавить(Строка); + Индекс = Индекс + 1; + Продолжить; + Иначе + УстановитьОшибкуВСтроке(Строка, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Имя поля не может начинаться с символа "".""'"), Строка.Символы)); + КонецЕсли; + КонецЕсли; + + Результат.Добавить(Строка); + Индекс = Индекс + 1; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Для функций ВыраженияВСкобкахВоВложениях, ВыраженияВыборКогдаТогдаВоВложениях. +Процедура ДобавитьВложение(Строка, Вложения, ТекущееВложение) + + ТекущееВложение.Строки.Добавить(Строка); + ТекущееВложение = Строка; + Вложения.Добавить(ТекущееВложение); + +КонецПроцедуры + +// Для функций ВыраженияВСкобкахВоВложениях, ВыраженияВыборКогдаТогдаВоВложениях. +Процедура УдалитьПоследнееВложение(Вложения, ТекущееВложение, КонечнаяСтрока = Неопределено) + + Если КонечнаяСтрока = Неопределено Тогда + Если ТекущееВложение.Строки.Количество() = 0 Тогда + КонечнаяСтрока = ТекущееВложение; + Иначе + КонечнаяСтрока = ТекущееВложение.Строки[ТекущееВложение.Строки.Количество() - 1]; + Если КонечнаяСтрока.КонечнаяСтрока <> Неопределено Тогда + КонечнаяСтрока = КонечнаяСтрока.КонечнаяСтрока; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + ТекущееВложение.КонечнаяСтрока = КонечнаяСтрока; + + ИндексПоследнегоВложения = Вложения.Количество() - 1; + Вложения.Удалить(ИндексПоследнегоВложения); + ТекущееВложение = Вложения[ИндексПоследнегоВложения - 1]; + +КонецПроцедуры + +// Для функции ВыраженияВыборКогдаТогдаВоВложениях. +Процедура ВосстановитьСтруктуруВыбора(Строка, Вложения, ТекущееВложение, СписокНедостающихСлов, Контекст) + + НедостающиеСлова = СтрРазделить(СписокНедостающихСлов, ",", Ложь); + + Для Каждого НедостающееСлово Из НедостающиеСлова Цикл + НоваяСтрока = ДополнительнаяСтрока(Строка, НедостающееСлово, Контекст); + ТекущееВложение.Строки.Добавить(НоваяСтрока); + + Если НедостающееСлово = "Выбор" Тогда + ТекущееВложение = НоваяСтрока; + Вложения.Добавить(ТекущееВложение); + КонецЕсли; + КонецЦикла; + + Если НедостающееСлово <> "Выбор" Тогда + ТекущееВложение = НоваяСтрока; + Вложения.Добавить(ТекущееВложение); + КонецЕсли; + +КонецПроцедуры + +// Для процедур ОбработатьПропущеннуюЛогическуюОперацию, ВыраженияВыборКогдаТогдаВоВложениях, +// ВосстановитьСтруктуруВыбора и для функции ПараметрыРазделенныеЗапятыми. +// +Функция ДополнительнаяСтрока(Строка, Уточнение = "", Контекст = Неопределено) + + Поля = "Символы, Вид, Тип, Приоритет, Уточнение, ИсходнаяСтрока, Строки, КонечнаяСтрока, ПозицияОшибки, ТекстОшибки"; + + НоваяСтрока = Новый Структура(Поля); + НоваяСтрока.Уточнение = Уточнение; + НоваяСтрока.Строки = Новый Массив; + НоваяСтрока.ИсходнаяСтрока = Строка; + + СвойстваСлова = ?(Контекст = Неопределено, + Неопределено, Контекст.СинтаксисЯзыка.СловаЯзыка.Получить(ВРег(Уточнение))); + + Если СвойстваСлова <> Неопределено Тогда + НоваяСтрока.Вид = "КлючевоеСлово"; + НоваяСтрока.Тип = СвойстваСлова.Тип; + НоваяСтрока.Приоритет = СвойстваСлова.Приоритет; + КонецЕсли; + + Возврат НоваяСтрока; + +КонецФункции + +// Для процедур РазобратьДополнительныеТаблицы, РазобратьУсловиеОграничения. +Процедура ИзменитьВидКлючевогоСловаСписокНаИмя(СтрокиЧасти, ИсключаемаяСтрока = Неопределено) + + Для Каждого Строка Из СтрокиЧасти Цикл + Если Строка = ИсключаемаяСтрока + Или Строка.Вид <> "КлючевоеСлово" + Или Строка.Уточнение <> "ЭтотСписок" Тогда + Продолжить; + КонецЕсли; + Строка.Вид = "Имя"; + Строка.Уточнение = ""; + КонецЦикла; + +КонецПроцедуры + +// Для процедур РазобратьДополнительныеТаблицы, РазобратьСоединение. +Процедура УстановитьПсевдоним(СтрокаЧасти, ОписаниеСоединения, ВнутренниеДанные) + + Если ЗначениеЗаполнено(СтрокаЧасти.ТекстОшибки) Тогда + Возврат; + КонецЕсли; + + ПозицияТочки = СтрНайти(СтрокаЧасти.Символы, "."); + Если ПозицияТочки > 0 Тогда + СтрокаЧасти.ПозицияОшибки = ПозицияТочки - 1; + СтрокаЧасти.ТекстОшибки = + НСтр("ru = 'Псевдоним не может содержать символа "".""'"); + + ИначеЕсли ТипЗнч(ОписаниеСоединения) = Тип("Строка") Тогда + ОписаниеСоединения = СтрокаЧасти.Символы; + ВнутренниеДанные.Псевдонимы.Вставить(ВРег(СтрокаЧасти.Символы), ""); + Иначе + ОписаниеСоединения.Псевдоним = СтрокаЧасти.Символы; + Если ВнутренниеДанные.Псевдонимы.Получить(ВРег(СтрокаЧасти.Символы)) = Неопределено Тогда + Если ЗначениеЗаполнено(ОписаниеСоединения.Таблица) Тогда + ВнутренниеДанные.Псевдонимы.Вставить(ВРег(СтрокаЧасти.Символы), ОписаниеСоединения.Таблица); + КонецЕсли; + Иначе + СтрокаЧасти.ТекстОшибки = НСтр("ru = 'Псевдоним повторяется'"); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Для процедуры РазобратьСоединение. +Процедура УстановитьИмяТаблицы(СтрокаЧасти, ОписаниеСоединения, ВнутренниеДанные) + + Если ЗначениеЗаполнено(СтрокаЧасти.ТекстОшибки) Тогда + Возврат; + КонецЕсли; + + Если СтрНачинаетсяС(СтрокаЧасти.Символы, ".") Тогда + СтрокаЧасти.ТекстОшибки = + НСтр("ru = 'Имя таблицы не может начинаться с символа "".""'"); + Возврат; + КонецЕсли; + + Если СтрЧислоВхождений(СтрокаЧасти.Символы, ".") > 2 Тогда + + ПозицияТочки = СтрНайти(СтрокаЧасти.Символы, "."); + ПозицияТочки = ПозицияТочки + СтрНайти(Сред(СтрокаЧасти.Символы, ПозицияТочки + 1), "."); + + ПозицияТочки = ПозицияТочки + СтрНайти(Сред(СтрокаЧасти.Символы, ПозицияТочки + 1), "."); + СтрокаЧасти.ТекстОшибки = + НСтр("ru = 'Полное имя таблицы не может содержать более двух символов "".""'"); + + СтрокаЧасти.ПозицияОшибки = ПозицияТочки - 1; + Возврат; + КонецЕсли; + + ОписаниеСоединения.Таблица = СтрокаЧасти.Символы; + + ДобавитьТребуемуюТаблицуКакИсточникДанных(ВнутренниеДанные, ОписаниеСоединения.Таблица, СтрокаЧасти); + +КонецПроцедуры + +// Для процедуры УстановитьИмяТаблицы. +Процедура ДобавитьТребуемуюТаблицуКакИсточникДанных(Контекст, Таблица, Источник) + + Если ЗначениеЗаполнено(Источник.ТекстОшибки) Тогда + Возврат; + КонецЕсли; + + СвойстваИмени = СвойстваИмениТаблицы(Контекст, Таблица); + + Если СвойстваИмени.ЧислоЧастейИмени < 2 + Или СвойстваИмени.ЧислоЧастейИмени > 3 Тогда + УстановитьОшибкуВСтроке(Источник, + НСтр("ru = 'В имени присоединяемой таблицы должна быть одна или две точки'")); + Возврат; + КонецЕсли; + + Если СвойстваИмени.СвойстваТипаТаблиц = Неопределено Тогда + УстановитьОшибкуВСтроке(Источник, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Некорректное начало ""%1"" имени таблицы ""%2""'"), СвойстваИмени.ИмяТипа, Таблица)); + Возврат; + КонецЕсли; + + Если СвойстваИмени.ЧислоЧастейИмени = 3 Тогда + СвойстваУточнения = СвойстваИмени.СвойстваТипаТаблиц.УточнениеТаблиц.Получить( + ВРег(СвойстваИмени.Расширение)); + + Если СвойстваУточнения <> Неопределено + И СвойстваУточнения.Использование <> "Разрешено" Тогда + + Если СвойстваУточнения.Использование = "Недопустимо" Тогда + УстановитьОшибкуВСтроке(Источник, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Недопустимо использовать таблицы ""%1"" группы таблиц ""%2""'"), + СвойстваИмени.Расширение, СвойстваИмени.ИмяТипа)); + Иначе + УстановитьОшибкуВСтроке(Источник, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Запрещено присоединять таблицы ""%1"" группы таблиц ""%2""'"), + СвойстваИмени.Расширение, СвойстваИмени.ИмяТипа)); + КонецЕсли; + Возврат; + КонецЕсли; + КонецЕсли; + + Свойства = СвойстваТребуемойТаблицы(Контекст, СвойстваИмени); + Свойства.Источники.Добавить(Источник); + +КонецПроцедуры + +// Для процедур ВыделитьПсевдонимПоля, РазобратьПервыйПараметрПроверочнойФункции, +// РазобратьДополнительныйПараметрПроверочнойФункции, РазобратьПараметрыФункцииЗначениеИлиФункцииТип. +// +Процедура ДобавитьТребуемуюТаблицуКакСсылочныйТип(Контекст, Таблица, Источник) + + Если ЗначениеЗаполнено(Источник.ТекстОшибки) Тогда + Возврат; + КонецЕсли; + + СвойстваИмени = СвойстваИмениТаблицы(Контекст, Таблица); + + Если СвойстваИмени.ЧислоЧастейИмени <> 2 Тогда + УстановитьОшибкуВСтроке(Источник, + НСтр("ru = 'В имени таблицы, указанной в качестве типа, должна быть одна точка'")); + Возврат; + КонецЕсли; + + Если СвойстваИмени.СвойстваТипаТаблиц = Неопределено Тогда + УстановитьОшибкуВСтроке(Источник, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Некорректное начало ""%1"" имени таблицы ""%2""'"), СвойстваИмени.ИмяТипа, Таблица)); + Возврат; + КонецЕсли; + + Если Не СвойстваИмени.СвойстваТипаТаблиц.ЭтоСсылочныйТип Тогда + УстановитьОшибкуВСтроке(Источник, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Группа таблиц ""%1"" не входит в состав ссылочных типов'"), СвойстваИмени.ИмяТипа, Таблица)); + Возврат; + КонецЕсли; + + Свойства = СвойстваТребуемойТаблицы(Контекст, СвойстваИмени); + Свойства.Источники.Добавить(Источник); + +КонецПроцедуры + +// Для процедуры РазобратьПараметрыФункцииЗначениеИлиФункцииТип. +Процедура ДобавитьТребуемыйПредопределенныйЭлемент(Контекст, ПолноеИмяПредопределенного, Источник) + + Если ЗначениеЗаполнено(Источник.ТекстОшибки) Тогда + Возврат; + КонецЕсли; + + СвойстваИмени = СвойстваИмениТаблицы(Контекст, ПолноеИмяПредопределенного); + + Если СвойстваИмени.ЧислоЧастейИмени <> 3 Тогда + УстановитьОшибкуВСтроке(Источник, + НСтр("ru = 'В имени предопределенного значения должно быть две точки'")); + Возврат; + КонецЕсли; + + Если СвойстваИмени.СвойстваТипаТаблиц = Неопределено Тогда + УстановитьОшибкуВСтроке(Источник, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Некорректное начало ""%1"" имени таблицы ""%2""'"), + СвойстваИмени.ИмяТипа, + СвойстваИмени.ИмяТипа + "." + СвойстваИмени.ИмяБезТипа)); + Возврат; + КонецЕсли; + + Если Не СвойстваИмени.СвойстваТипаТаблиц.ЭтоСсылочныйТип Тогда + УстановитьОшибкуВСтроке(Источник, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Группа таблиц ""%1"" не входит в состав ссылочных типов'"), СвойстваИмени.ИмяТипа)); + Возврат; + КонецЕсли; + + СвойстваСлова = Контекст.СинтаксисЯзыка.СловаЯзыка.Получить(ВРег(СвойстваИмени.Расширение)); + + Если Не СвойстваИмени.СвойстваТипаТаблиц.ЕстьПредопределенные + И Не СвойстваИмени.ИмяТипа = "Перечисление" + И ( СвойстваСлова = Неопределено + Или СвойстваСлова.Идентификатор <> "ПустаяСсылка") Тогда + + УстановитьОшибкуВСтроке(Источник, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В группе таблиц ""%1"" нет предопределенных элементов'"), СвойстваИмени.ИмяТипа)); + Возврат; + КонецЕсли; + + Свойства = СвойстваТребуемойТаблицы(Контекст, СвойстваИмени, Истина); + + СвойстваПредопределенного = Свойства.Предопределенные.Получить(ВРег(СвойстваИмени.Расширение)); + Если СвойстваПредопределенного = Неопределено Тогда + СвойстваПредопределенного = Новый Структура; + СвойстваПредопределенного.Вставить("ИмяСуществует", Ложь); + СвойстваПредопределенного.Вставить("Источники", Новый Массив); + Свойства.Предопределенные.Вставить(ВРег(СвойстваИмени.Расширение), СвойстваПредопределенного); + КонецЕсли; + СвойстваПредопределенного.Источники.Добавить(Источник); + +КонецПроцедуры + +// Для процедур ОтметитьНекорректныеАргументыИЗапрещенныеУзлы, ВыделитьПсевдонимПоля, +// ДобавитьТипыВидовДоступаПользователиИВнешниеПользователиДляПроверкиОтсутствия. +// +Процедура ДобавитьТребуемоеПолеТаблицы(Контекст, Таблица, ИмяПоля, Источник, + ТипПоля = "", ИсточникТипаПоля = Неопределено, УзелПоле = Неопределено) + + Если ЗначениеЗаполнено(Источник.ТекстОшибки) Тогда + Возврат; + КонецЕсли; + + СвойстваИмени = СвойстваИмениТаблицы(Контекст, Таблица); + Если СвойстваИмени.СвойстваТипаТаблиц = Неопределено Тогда + + Если СвойстваИмени.ЭтоОсновнаяТаблица + И Не Контекст.Свойство("ОшибкаНаПервоеПолеОсновнойТаблицыУстановлена") Тогда + + Контекст.Вставить("ОшибкаНаПервоеПолеОсновнойТаблицыУстановлена"); + УстановитьОшибкуВСтрокеИмениПоля(Контекст, Источник, + НСтр("ru = 'Поле не найдено, так как не найдена таблица ""%1""'"), 0, , + Контекст.ОсновнаяТаблица); + КонецЕсли; + + Возврат; + КонецЕсли; + + Свойства = СвойстваТребуемойТаблицы(Контекст, СвойстваИмени); + + СвойстваПоля = Свойства.Поля.Получить(ВРег(ИмяПоля)); + Если СвойстваПоля = Неопределено Тогда + СвойстваПоля = Новый Структура; + СвойстваПоля.Вставить("ПолеСОшибкой", 0); + СвойстваПоля.Вставить("ВидОшибки", ""); + СвойстваПоля.Вставить("Коллекция", ""); + СвойстваПоля.Вставить("СодержитТипы", Новый Соответствие); + СвойстваПоля.Вставить("Источники", Новый Соответствие); + СвойстваПоля.Вставить("УзлыПоле", Новый Массив); + Свойства.Поля.Вставить(ВРег(ИмяПоля), СвойстваПоля); + + Если Свойства.Свойство("ПервоеПоле") + И Свойства.ПервоеПоле = Неопределено + И Источник <> Неопределено Тогда + + СвойстваПоля.Вставить("ПервыйИсточник", Новый Структура("Ключ,Значение", Источник, Таблица)); + Свойства.ПервоеПоле = СвойстваПоля; + КонецЕсли; + КонецЕсли; + СвойстваПоля.Источники.Вставить(Источник, Таблица); + Если УзелПоле <> Неопределено Тогда + СвойстваПоля.УзлыПоле.Добавить(УзелПоле); + КонецЕсли; + + Если Не ЗначениеЗаполнено(ТипПоля) Тогда + Возврат; + КонецЕсли; + + Если ТипЗнч(ИсточникТипаПоля) = Тип("СтрокаТаблицыЗначений") + И ЗначениеЗаполнено(ИсточникТипаПоля.ТекстОшибки) Тогда + Возврат; + КонецЕсли; + + СвойстваТипа = СвойстваПоля.СодержитТипы.Получить(ВРег(ТипПоля)); + Если СвойстваТипа = Неопределено Тогда + СоставИмени = СтрРазделить(ТипПоля, "."); + СвойстваТипаТаблиц = Контекст.СинтаксисЯзыка.ТипыТаблиц.ПоИменам.Получить(ВРег(СоставИмени[0])); + Если СвойстваТипаТаблиц = Неопределено Тогда + ИмяТипа = ТипПоля; + ИмяКоллекцииТипа = ""; + ИмяОбъектаКоллекцииТипа = ""; + Иначе + ИмяТипа = СвойстваТипаТаблиц.ЯзыкРусский + "Ссылка." + СоставИмени[1]; + ИмяКоллекцииТипа = СвойстваТипаТаблиц.ИмяКоллекции; + ИмяОбъектаКоллекцииТипа = СоставИмени[1]; + КонецЕсли; + СвойстваТипа = Новый Структура; + СвойстваТипа.Вставить("СодержитТип", Ложь); + СвойстваТипа.Вставить("ИмяТипа", ИмяТипа); + СвойстваТипа.Вставить("ИмяКоллекцииТипа", ИмяКоллекцииТипа); + СвойстваТипа.Вставить("ИмяОбъектаКоллекцииТипа", ИмяОбъектаКоллекцииТипа); + СвойстваТипа.Вставить("Источники", Новый Соответствие); + СвойстваПоля.СодержитТипы.Вставить(ВРег(ТипПоля), СвойстваТипа); + КонецЕсли; + СвойстваТипа.Источники.Вставить(ИсточникТипаПоля, Источник); + +КонецПроцедуры + +// Для процедур ДобавитьТребуемуюТаблицуКакИсточникДанных, ДобавитьТребуемуюТаблицуКакСсылочныйТип, +// ДобавитьТребуемыйПредопределенныйЭлемент, ДобавитьТребуемоеПолеТаблицы. +// +Функция СвойстваИмениТаблицы(Контекст, ПолноеИмя) + + Если ЗначениеЗаполнено(ПолноеИмя) Тогда + Таблица = ПолноеИмя; + Иначе + Таблица = Контекст.ОсновнаяТаблица; + КонецЕсли; + + СоставИмени = СтрРазделить(Таблица, ".", Ложь); + + Свойства = Новый Структура; + Свойства.Вставить("ЧислоЧастейИмени", СоставИмени.Количество()); + Свойства.Вставить("ИмяТипа", СоставИмени[0]); + Свойства.Вставить("ИмяБезТипа", ?(СоставИмени.Количество() > 1, СоставИмени[1], Неопределено)); + Свойства.Вставить("Расширение", ?(СоставИмени.Количество() = 3, СоставИмени[2], Неопределено)); + Свойства.Вставить("ЭтоОсновнаяТаблица", ВРег(Таблица) = ВРег(Контекст.ОсновнаяТаблица)); + Свойства.Вставить("СвойстваТипаТаблиц", + Контекст.СинтаксисЯзыка.ТипыТаблиц.ПоИменам.Получить(ВРег(СоставИмени[0]))); + + Возврат Свойства; + +КонецФункции + +// Для процедур ДобавитьТребуемуюТаблицуКакИсточникДанных, ДобавитьТребуемуюТаблицуКакСсылочныйТип, +// ДобавитьТребуемыйПредопределенныйЭлемент, ДобавитьТребуемоеПолеТаблицы. +// +Функция СвойстваТребуемойТаблицы(Контекст, СвойстваИмени, БезРасширения = Ложь) + + ИмяКоллекции = СвойстваИмени.СвойстваТипаТаблиц.ИмяКоллекции; + + СвойстваКоллекции = Контекст.ПоляТаблиц.Получить(ИмяКоллекции); + Если СвойстваКоллекции = Неопределено Тогда + СвойстваКоллекции = Новый Соответствие; + Контекст.ПоляТаблиц.Вставить(ИмяКоллекции, СвойстваКоллекции); + КонецЕсли; + + Свойства = СвойстваКоллекции.Получить(ВРег(СвойстваИмени.ИмяБезТипа)); + Если Свойства = Неопределено Тогда + Свойства = Новый Структура; + Свойства.Вставить("ТаблицаСуществует", Ложь); + Свойства.Вставить("Источники", Новый Массив); + Свойства.Вставить("Поля", Новый Соответствие); + Свойства.Вставить("Предопределенные", Новый Соответствие); + Свойства.Вставить("Расширения", Новый Соответствие); + Если СвойстваИмени.ЭтоОсновнаяТаблица И СвойстваИмени.Расширение = Неопределено Тогда + Свойства.Вставить("ПервоеПоле"); + КонецЕсли; + СвойстваКоллекции.Вставить(ВРег(СвойстваИмени.ИмяБезТипа), Свойства); + КонецЕсли; + + Если СвойстваИмени.Расширение = Неопределено Или БезРасширения Тогда + Возврат Свойства; + КонецЕсли; + + СвойстваРасширения = Свойства.Расширения.Получить(ВРег(СвойстваИмени.Расширение)); + Если СвойстваРасширения = Неопределено Тогда + СвойстваРасширения = Новый Структура; + СвойстваРасширения.Вставить("ТаблицаСуществует", Ложь); + СвойстваРасширения.Вставить("Источники", Новый Массив); + СвойстваРасширения.Вставить("Поля", Новый Соответствие); + Если СвойстваИмени.ЭтоОсновнаяТаблица Тогда + СвойстваРасширения.Вставить("ПервоеПоле"); + КонецЕсли; + Свойства.Расширения.Вставить(ВРег(СвойстваИмени.Расширение), СвойстваРасширения); + КонецЕсли; + + Возврат СвойстваРасширения; + +КонецФункции + +// Для процедур и функций ЧастиОграничения, РазобратьДополнительныеТаблицы, РазобратьСоединение, +// РазобратьУсловиеОграничения, ВыраженияВыборКогдаТогдаВоВложениях. +Функция ПодставитьКлючевыеСловаВСтроку(Контекст, Строка, СписокСлов, ПараметрОдин = "", ПараметрДва = "", ПараметрТри = "") + + Слова = СтрРазделить(СписокСлов, ",", Ложь); + СловаДляПодстановки = Новый Соответствие; + + Для Каждого Слово Из Слова Цикл + СловаДляПодстановки.Вставить(Слова.Найти(Слово), + КлючевоеСловоСУчетомЯзыка(СокрЛП(Слово), Контекст)); + КонецЦикла; + + Индекс = СловаДляПодстановки.Количество(); + СловаДляПодстановки.Вставить(Индекс, ПараметрОдин); + СловаДляПодстановки.Вставить(Индекс + 1, ПараметрДва); + СловаДляПодстановки.Вставить(Индекс + 2, ПараметрТри); + + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Строка, + СловаДляПодстановки[0], СловаДляПодстановки[1], СловаДляПодстановки[2], + СловаДляПодстановки[3], СловаДляПодстановки[4], СловаДляПодстановки[5], + СловаДляПодстановки[6], СловаДляПодстановки[7], СловаДляПодстановки[8]); + +КонецФункции + +// Для процедур РазобратьДополнительныеТаблицы, РазобратьСоединение, РазобратьУсловиеОграничения. +Функция КлючевоеСловоСУчетомЯзыка(ИдентификаторСлова, Контекст) + + СвойстваСлова = Контекст.СинтаксисЯзыка.СловаЯзыка.Получить(ВРег(ИдентификаторСлова)); + + Если ВариантВстроенногоЯзыкаРусский() Тогда + Слово = СвойстваСлова.ЯзыкРусский; + Иначе + Слово = СвойстваСлова.ЯзыкАнглийский; + КонецЕсли; + + Если СвойстваСлова.ВерхнийРегистр Тогда + Слово = ВРег(Слово); + КонецЕсли; + + Возврат Слово; + +КонецФункции + +// Для функций ОписаниеДопустимыхШаблонов, КлючевоеСловоСУчетомЯзыка. +Функция ВариантВстроенногоЯзыкаРусский() + + Возврат Метаданные.ВариантВстроенногоЯзыка = Метаданные.СвойстваОбъектов.ВариантВстроенногоЯзыка.Русский; + +КонецФункции + +#КонецОбласти + +#Область АнализИменТаблицИПолейТаблиц + +// Проверка таблиц, полей таблиц и типов полей, найденных при разборе текста ограничения. +// Аналогичная процедура реализуется в СППР. +// +// Параметры: +// РазобранноеОграничение - Структура - возвращается функцией РазобранноеОграничение. +// +Процедура ПроверитьТаблицыПоляИТипыПолей(РазобранноеОграничение) + + Контекст = Новый Структура; + Контекст.Вставить("ТипыТаблиц", УправлениеДоступомСлужебныйПовтИсп.СинтаксисЯзыка().ТипыТаблиц); + + Для Каждого ТипТаблиц Из РазобранноеОграничение.ПоляТаблиц Цикл + КоллекцияТаблиц = Метаданные[ТипТаблиц.Ключ]; + + Для Каждого ПоляТаблицы Из ТипТаблиц.Значение Цикл + + МетаданныеТаблицы = КоллекцияТаблиц.Найти(ПоляТаблицы.Ключ); + Если МетаданныеТаблицы = Неопределено Тогда + Продолжить; + КонецЕсли; + ПоляТаблицы.Значение.ТаблицаСуществует = Истина; + + Контекст.Вставить("МетаданныеТаблицы", МетаданныеТаблицы); + Контекст.Вставить("СвойстваТипаТаблиц", Контекст.ТипыТаблиц.ПоКоллекциям.Получить(ТипТаблиц.Ключ)); + + Для Каждого ПолеТаблицы Из ПоляТаблицы.Значение.Поля Цикл + ОписаниеПоля = Новый Структура; + ОписаниеПоля.Вставить("СоставИмени", СтрРазделить(ПолеТаблицы.Ключ, ".")); + ОписаниеПоля.Вставить("Свойства", ПолеТаблицы.Значение); + ОписаниеПоля.Вставить("ТипПоля", Новый ОписаниеТипов); + ПроверитьПолеТаблицы(ОписаниеПоля, Контекст); + Если ОписаниеПоля.Свойства.ПолеСОшибкой = 0 Тогда + ПроверитьТипыПоля(ОписаниеПоля, Контекст); + КонецЕсли; + КонецЦикла; + + ПроверитьРасширенияТаблицы(ПоляТаблицы, Контекст); + ПроверитьПредопределенныеЗначенияТаблицы(ПоляТаблицы, Контекст); + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + +// Для процедур ПроверитьТаблицыПоляИТипыПолей, ПроверитьСледующееПолеЧерезТочку. +Процедура ПроверитьПолеТаблицы(ОписаниеПоля, Контекст, Индекс = 0, ПервыйВызов = Истина) + + СоставИмени = ОписаниеПоля.СоставИмени; + СвойстваПоля = ОписаниеПоля.Свойства; + + УточнениеПоля = Контекст.СвойстваТипаТаблиц.УточнениеПолей.Получить(ВРег(СоставИмени[Индекс])); + + Если УточнениеПоля <> Неопределено + И УточнениеПоля.Использование <> "Разрешено" Тогда + + СвойстваПоля.ПолеСОшибкой = Индекс + 1; + СвойстваПоля.ВидОшибки = УточнениеПоля; + Возврат; + КонецЕсли; + + Свойства = СвойстваПоляИлиТабличнойЧасти(СоставИмени[Индекс], Контекст, Индекс = 0); + Если Свойства = Неопределено Тогда + СвойстваПоля.ПолеСОшибкой = Индекс + 1; + СвойстваПоля.ВидОшибки = "НеНайдено"; + Возврат; + КонецЕсли; + Если Индекс = 0 Тогда + СвойстваПоля.Коллекция = Свойства.Коллекция; + КонецЕсли; + + Если Свойства.ЭтоТабличнаяЧасть Тогда + Если Индекс > 0 Тогда + СвойстваПоля.ПолеСОшибкой = Индекс + 1; + СвойстваПоля.ВидОшибки = "ТабличнаяЧастьПослеТочки"; + Возврат; + КонецЕсли; + Если Индекс + 1 = СоставИмени.Количество() Тогда + СвойстваПоля.ПолеСОшибкой = Индекс + 1; + СвойстваПоля.ВидОшибки = "ТабличнаяЧастьБезПоля"; + Возврат; + КонецЕсли; + Индекс = Индекс + 1; + Свойства = СвойстваПоляТабличнойЧасти(СоставИмени[Индекс], + Свойства.Метаданные, Свойства.Коллекция, Контекст.МетаданныеТаблицы); + Если Свойства = Неопределено Тогда + СвойстваПоля.ПолеСОшибкой = Индекс + 1; + СвойстваПоля.ВидОшибки = "НеНайдено"; + Возврат; + КонецЕсли; + КонецЕсли; + + ПроверитьСледующееПолеЧерезТочку(ОписаниеПоля, Индекс, Свойства, Контекст); + + Если ПервыйВызов Тогда + ЗаполнитьТипыПоляСтрокойДополнительно(ОписаниеПоля); + КонецЕсли; + +КонецПроцедуры + +// Для процедур ПроверитьПолеТаблицы и ПроверитьРасширенияТаблицы. +Процедура ПроверитьСледующееПолеЧерезТочку(ОписаниеПоля, Индекс, СвойстваТекущегоПоля, Контекст) + + ДобавитьТипыПоляДополнительно(ОписаниеПоля, Индекс, СвойстваТекущегоПоля, Контекст); + + Индекс = Индекс + 1; + Если Индекс = ОписаниеПоля.СоставИмени.Количество() Тогда + ОписаниеПоля.ТипПоля = Новый ОписаниеТипов(ОписаниеПоля.ТипПоля, СвойстваТекущегоПоля.Тип.Типы()); + Возврат; + КонецЕсли; + + СвойстваПоля = ОписаниеПоля.Свойства; + ПолеНайдено = Ложь; + + Если ОписаниеПоля.Свойство("ТаблицыСледующегоПоля") Тогда + // См. процедуру ДобавитьТипыПоляДополнительно. + Если ОписаниеПоля.ТаблицыСледующегоПоля.Количество() < Индекс + 1 Тогда + ТаблицыСледующегоПоля = Новый Массив; + ОписаниеПоля.ТаблицыСледующегоПоля.Добавить(ТаблицыСледующегоПоля); + Иначе + ТаблицыСледующегоПоля = ОписаниеПоля.ТаблицыСледующегоПоля[Индекс]; + КонецЕсли; + КонецЕсли; + + Для Каждого Тип Из СвойстваТекущегоПоля.Тип.Типы() Цикл + Если Не ОбщегоНазначения.ЭтоСсылка(Тип) Тогда + Продолжить; + КонецЕсли; + СвойстваПоля.ПолеСОшибкой = 0; + СвойстваПоля.ВидОшибки = ""; + + // Сохранение текущего контекста. + ТекущиеМетаданныеТаблицы = Контекст.МетаданныеТаблицы; + ТекущиеСвойстваТипаТаблиц = Контекст.СвойстваТипаТаблиц; + + Контекст.МетаданныеТаблицы = Метаданные.НайтиПоТипу(Тип); + ПолноеИмя = Контекст.МетаданныеТаблицы.ПолноеИмя(); + СоставПолногоИмени = СтрРазделить(ПолноеИмя, ".", Ложь); + Контекст.СвойстваТипаТаблиц = Контекст.ТипыТаблиц.ПоИменам.Получить(ВРег(СоставПолногоИмени[0])); + + ТекущийИндекс = Индекс; + ПроверитьПолеТаблицы(ОписаниеПоля, Контекст, ТекущийИндекс, Ложь); + + // Восстановление текущего контекста. + Контекст.МетаданныеТаблицы = ТекущиеМетаданныеТаблицы; + Контекст.СвойстваТипаТаблиц = ТекущиеСвойстваТипаТаблиц; + + Если СвойстваПоля.ПолеСОшибкой = 0 Тогда + ПолеНайдено = Истина; + Если ТаблицыСледующегоПоля <> Неопределено Тогда + // См. процедуру ДобавитьТипыПоляДополнительно. + ТаблицыСледующегоПоля.Добавить(ПолноеИмя); + КонецЕсли; + ИначеЕсли СвойстваПоля.ВидОшибки <> "НеНайдено" Тогда + Возврат; + КонецЕсли; + КонецЦикла; + + Если ПолеНайдено Тогда + СвойстваПоля.ПолеСОшибкой = 0; + СвойстваПоля.ВидОшибки = ""; + КонецЕсли; + +КонецПроцедуры + +// Для процедуры ПроверитьПолеТаблицы. +Функция СвойстваПоляИлиТабличнойЧасти(ИмяПоляИлиТабличнойЧасти, Контекст, ЭтоПервоеПоле) + + Результат = Новый Структура; + Результат.Вставить("ЭтоТабличнаяЧасть", Ложь); + Результат.Вставить("Коллекция"); + Результат.Вставить("Метаданные"); + Результат.Вставить("Тип"); + + МетаданныеТаблицы = Контекст.МетаданныеТаблицы; + СвойстваТипаТаблиц = Контекст.СвойстваТипаТаблиц; + + Для Каждого КоллекцияТабличныхЧастей Из СвойстваТипаТаблиц.КоллекцииТабличныхЧастей Цикл + Если КоллекцияТабличныхЧастей.Ключ = "СтандартныеТабличныеЧасти" Тогда + Для Каждого СтандартнаяТабличнаяЧасть Из МетаданныеТаблицы.СтандартныеТабличныеЧасти Цикл + Если ВРег(ИмяПоляИлиТабличнойЧасти) = ВРег(СтандартнаяТабличнаяЧасть.Имя) Тогда + Результат.Метаданные = СтандартнаяТабличнаяЧасть; + Прервать; + КонецЕсли; + КонецЦикла; + Иначе + Результат.Метаданные = МетаданныеТаблицы[КоллекцияТабличныхЧастей.Ключ].Найти(ИмяПоляИлиТабличнойЧасти); + КонецЕсли; + Если Результат.Метаданные <> Неопределено Тогда + Результат.ЭтоТабличнаяЧасть = Истина; + Результат.Коллекция = КоллекцияТабличныхЧастей.Ключ; + Возврат Результат; + КонецЕсли; + КонецЦикла; + + Для Каждого КоллекцияПолей Из СвойстваТипаТаблиц.КоллекцииПолей Цикл + Если КоллекцияПолей.Ключ = "СтандартныеРеквизиты" Тогда + Номер = 0; + Для Каждого СтандартныйРеквизит Из МетаданныеТаблицы.СтандартныеРеквизиты Цикл + Номер = Номер + 1; + Если ВРег(ИмяПоляИлиТабличнойЧасти) = ВРег(СтандартныйРеквизит.Имя) Тогда + Результат.Метаданные = СтандартныйРеквизит; + Прервать; + КонецЕсли; + КонецЦикла; + Иначе + Результат.Метаданные = МетаданныеТаблицы[КоллекцияПолей.Ключ].Найти(ИмяПоляИлиТабличнойЧасти); + КонецЕсли; + Если Результат.Метаданные <> Неопределено Тогда + Результат.Коллекция = КоллекцияПолей.Ключ; + Если Результат.Коллекция = "Графы" Тогда + Результат.Тип = Новый ОписаниеТипов; + Для Каждого МетаданныеСсылки Из Результат.Метаданные.Ссылки Цикл + Результат.Тип = Новый ОписаниеТипов(Результат.Тип, МетаданныеСсылки.Тип.Типы()); + КонецЦикла; + Иначе + Результат.Тип = Результат.Метаданные.Тип; + КонецЕсли; + Возврат Результат; + КонецЕсли; + КонецЦикла; + + Если СвойстваТипаТаблиц.ОбщиеРеквизиты <> "Отсутствуют" Тогда + Результат.Метаданные = Метаданные.ОбщиеРеквизиты.Найти(ИмяПоляИлиТабличнойЧасти); + Если Результат.Метаданные <> Неопределено Тогда + Результат.Коллекция = "ОбщиеРеквизиты"; + Результат.Тип = Результат.Метаданные.Тип; + Возврат Результат; + КонецЕсли; + КонецЕсли; + + Если СвойстваТипаТаблиц.ИмяКоллекции = "Константы" Тогда + + Если ВРег(ИмяПоляИлиТабличнойЧасти) = ВРег("Значение") + Или ВРег(ИмяПоляИлиТабличнойЧасти) = ВРег("Value") Тогда + + Результат.Коллекция = "СпециальныеПоля"; + Результат.Тип = МетаданныеТаблицы.Тип; + Результат.Вставить("ОсновнойПорядок", "001"); // См. процедуру ДобавитьОсновнойПорядокПоля. + Возврат Результат; + КонецЕсли; + + ИначеЕсли СвойстваТипаТаблиц.ИмяКоллекции = "Последовательности" Тогда + + Если ВРег(ИмяПоляИлиТабличнойЧасти) = ВРег("Период") + Или ВРег(ИмяПоляИлиТабличнойЧасти) = ВРег("Period") Тогда + + Результат.Коллекция = "СпециальныеПоля"; + Результат.Тип = Новый ОписаниеТипов("Дата"); + Результат.Вставить("ОсновнойПорядок", "001"); // См. процедуру ДобавитьОсновнойПорядокПоля. + Возврат Результат; + КонецЕсли; + + Если ВРег(ИмяПоляИлиТабличнойЧасти) = ВРег("Регистратор") + Или ВРег(ИмяПоляИлиТабличнойЧасти) = ВРег("Recorder") Тогда + + Результат.Коллекция = "СпециальныеПоля"; + Результат.Тип = Новый ОписаниеТипов; + Для Каждого ДокументМетаданные Из МетаданныеТаблицы.Документы Цикл + Результат.Тип = Новый ОписаниеТипов(Результат.Тип, "ДокументСсылка." + ДокументМетаданные.Имя); + КонецЦикла; + Результат.Вставить("ОсновнойПорядок", "002"); // См. процедуру ДобавитьОсновнойПорядокПоля. + Возврат Результат; + КонецЕсли; + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + +// Для процедур ПроверитьРасширенияТаблицы, ПроверитьПолеТаблицы. +Функция СвойстваПоляТабличнойЧасти(ИмяПоляТабличнойЧасти, МетаданныеТабличнойЧасти, ИмяКоллекции, МетаданныеТаблицы) + + Результат = Новый Структура; + Результат.Вставить("Тип"); + Результат.Вставить("ИмяТабличнойЧасти", МетаданныеТабличнойЧасти.Имя); + + Если ВРег(ИмяПоляТабличнойЧасти) = ВРег("Ссылка") + Или ВРег(ИмяПоляТабличнойЧасти) = ВРег("Ref") Тогда + + Для Каждого СтандартныйРеквизит Из МетаданныеТаблицы.СтандартныеРеквизиты Цикл + Если ВРег(ИмяПоляТабличнойЧасти) = ВРег(СтандартныйРеквизит.Имя) Тогда + Результат.Тип = СтандартныйРеквизит.Тип; + Возврат Результат; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Для Каждого СтандартныйРеквизит Из МетаданныеТабличнойЧасти.СтандартныеРеквизиты Цикл + Если ВРег(ИмяПоляТабличнойЧасти) = ВРег(СтандартныйРеквизит.Имя) Тогда + Результат.Тип = СтандартныйРеквизит.Тип; + Возврат Результат; + КонецЕсли; + КонецЦикла; + + Если ИмяКоллекции = "ТабличныеЧасти" Тогда + МетаданныеПоля = МетаданныеТабличнойЧасти.Реквизиты.Найти(ИмяПоляТабличнойЧасти); + Если МетаданныеПоля <> Неопределено Тогда + Результат.Тип = МетаданныеПоля.Тип; + Результат.Вставить("МетаданныеТабличнойЧасти", МетаданныеТабличнойЧасти); + Возврат Результат; + КонецЕсли; + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + +// Для процедур ПроверитьРасширенияТаблицы, ПроверитьПолеТаблицы. +Функция СвойстваПоляПерерасчета(ИмяПоляПерерасчета, МетаданныеПерерасчета, МетаданныеТаблицы) + + Результат = Новый Структура; + Результат.Вставить("Тип"); + Результат.Вставить("Коллекция"); + Результат.Вставить("Метаданные"); + + Если ВРег(ИмяПоляПерерасчета) = ВРег("ОбъектПерерасчета") + Или ВРег(ИмяПоляПерерасчета) = ВРег("RecalculationObject") Тогда + + ИмяПоля = "Регистратор"; + + ИначеЕсли ВРег(ИмяПоляПерерасчета) = ВРег("ВидРасчета") + Или ВРег(ИмяПоляПерерасчета) = ВРег("CalculationType") Тогда + + ИмяПоля = "ВидРасчета"; + КонецЕсли; + + Если ЗначениеЗаполнено(ИмяПоля) Тогда + Для Каждого СтандартныйРеквизит Из МетаданныеТаблицы.СтандартныеРеквизиты Цикл + Если ВРег(ИмяПоля) = ВРег(СтандартныйРеквизит.Имя) Тогда + Результат.Коллекция = "СтандартныеРеквизиты"; + Результат.Метаданные = СтандартныйРеквизит; + Результат.Тип = СтандартныйРеквизит.Тип; + Возврат Результат; + КонецЕсли; + КонецЦикла; + Возврат Неопределено; + КонецЕсли; + + МетаданныеПоля = МетаданныеПерерасчета.Измерения.Найти(ИмяПоляПерерасчета); + Если МетаданныеПоля <> Неопределено Тогда + Результат.Тип = МетаданныеПоля.ИзмерениеРегистра.Тип; + Результат.Коллекция = "СпециальныеПоля"; + Номер = 200 + МетаданныеТаблицы.Измерения.Индекс(МетаданныеПоля) + 1; + Результат.Вставить("ОсновнойПорядок", Номер); // См. процедуру ДобавитьОсновнойПорядокПоля. + Возврат Результат; + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + +// Для процедуры ПроверитьПолеТаблицы. +Процедура ДобавитьТипыПоляДополнительно(ОписаниеПоля, Индекс, СвойстваТекущегоПоля, Контекст) + + // Дополнительный сбор типов для использования в служебных процедурах. + + // Расширение свойств узла Поле для использования в служебных процедурах. + Если Индекс = 0 Тогда + Если ОписаниеПоля.СоставИмени.Количество() > 1 Тогда + ОписаниеПоля.Вставить("ТаблицыСледующегоПоля", Новый Массив); + КонецЕсли; + Если Не Контекст.СвойстваТипаТаблиц.ЭтоСсылочныйТип Тогда + ДобавитьОсновнойПорядокПоля(СвойстваТекущегоПоля, Контекст); + КонецЕсли; + КонецЕсли; + + Для Каждого УзелПоле Из ОписаниеПоля.Свойства.УзлыПоле Цикл + Если СвойстваТекущегоПоля.Свойство("ОсновнойПорядок") + И Не УзелПоле.Свойство("ОсновнойПорядок") Тогда + УзелПоле.Вставить("ОсновнойПорядок", СвойстваТекущегоПоля.ОсновнойПорядок); + КонецЕсли; + Если ОписаниеПоля.Свойство("ТаблицыСледующегоПоля") + И Не УзелПоле.Свойство("ТаблицыСледующегоПоля") Тогда + УзелПоле.Вставить("ТаблицыСледующегоПоля", ОписаниеПоля.ТаблицыСледующегоПоля); + КонецЕсли; + Если Не УзелПоле.Свойство("ТипыПоля") Тогда + УзелПоле.Вставить("ТипыПоля", Новый Массив); + УстановитьПолеСодержитNull(УзелПоле, СвойстваТекущегоПоля, Контекст); + КонецЕсли; + Если СвойстваТекущегоПоля.Свойство("ИмяТабличнойЧасти") + И ВРег(СвойстваТекущегоПоля.ИмяТабличнойЧасти) = ВРег(ОписаниеПоля.СоставИмени[0]) Тогда + + УзелПоле.ТипыПоля.Добавить(СвойстваТекущегоПоля.ИмяТабличнойЧасти); + КонецЕсли; + Если Индекс > УзелПоле.ТипыПоля.Количество() - 1 Тогда + УзелПоле.ТипыПоля.Добавить(СвойстваТекущегоПоля.Тип); + КонецЕсли; + УзелПоле.ТипыПоля[Индекс] = Новый ОписаниеТипов(УзелПоле.ТипыПоля[Индекс], + СвойстваТекущегоПоля.Тип.Типы()); + КонецЦикла; + + // Добавление типов поля строкой для проверки изменения в служебных процедурах. + ПолноеИмяПоля = Контекст.СвойстваТипаТаблиц.ЯзыкРусский + "." + ВРег(Контекст.МетаданныеТаблицы.Имя); + + Если СвойстваТекущегоПоля.Свойство("ИмяТабличнойЧасти") Тогда + ПолноеИмяПоля = ПолноеИмяПоля + "." + ВРег(СвойстваТекущегоПоля.ИмяТабличнойЧасти); + КонецЕсли; + + ПолноеИмяПоля = ПолноеИмяПоля + "." + ОписаниеПоля.СоставИмени[Индекс]; + + Если Не ОписаниеПоля.Свойство("ВсеПоля") Тогда + ОписаниеПоля.Вставить("ВсеПоля", Новый Соответствие); + ОписаниеПоля.Вставить("ТипыВсехПолей", Новый СписокЗначений); + КонецЕсли; + Если ОписаниеПоля.ВсеПоля.Получить(ПолноеИмяПоля) <> Неопределено Тогда + Возврат; + КонецЕсли; + ОписаниеПоля.ВсеПоля.Вставить(ПолноеИмяПоля, Истина); + + ТипыСтрокой = СтрокаДанныхДляХеширования(СвойстваТекущегоПоля.Тип); + ОписаниеПоля.ТипыВсехПолей.Добавить(ТипыСтрокой, ПолноеИмяПоля); + +КонецПроцедуры + +// Для процедуры ПроверитьПолеТаблицы. +Процедура ЗаполнитьТипыПоляСтрокойДополнительно(ОписаниеПоля) + + Если ОписаниеПоля.ТипыВсехПолей.Количество() > 1 Тогда + ОписаниеПоля.ТипыВсехПолей.СортироватьПоПредставлению(); + КонецЕсли; + ТипыСтрокой = СтрСоединить(ОписаниеПоля.ТипыВсехПолей.ВыгрузитьЗначения(), Символы.ПС); + УзлыПоле = ОписаниеПоля.Свойства.УзлыПоле; + + Для Каждого УзелПоле Из УзлыПоле Цикл + УзелПоле.Вставить("ТипыСтрокой", ТипыСтрокой); + КонецЦикла; + + ОписаниеПоля.Удалить("ВсеПоля"); + ОписаниеПоля.Удалить("ТипыВсехПолей"); + +КонецПроцедуры + +// Для процедуры ДобавитьТипыПоляДополнительно. +Процедура ДобавитьОсновнойПорядокПоля(СвойстваТекущегоПоля, Контекст) + + Если СвойстваТекущегоПоля.Коллекция = "СпециальныеПоля" Тогда + Возврат; // Установлен в функции СвойстваПоляИлиТабличнойЧасти. + КонецЕсли; + + МетаданныеТаблицы = Контекст.МетаданныеТаблицы; + МетаданныеПоля = СвойстваТекущегоПоля.Метаданные; + + Если СвойстваТекущегоПоля.Коллекция = "СтандартныеРеквизиты" Тогда + Индекс = 0; + Для Каждого СтандартныйРеквизит Из МетаданныеТаблицы.СтандартныеРеквизиты Цикл + Если СтандартныйРеквизит = МетаданныеПоля Тогда + Прервать; + КонецЕсли; + Индекс = Индекс + 1; + КонецЦикла; + Номер = 100 + Индекс + 1; + + ИначеЕсли СвойстваТекущегоПоля.Коллекция = "Измерения" Тогда + Номер = 200 + МетаданныеТаблицы.Измерения.Индекс(МетаданныеПоля) + 1; + + ИначеЕсли СвойстваТекущегоПоля.Коллекция = "Ресурсы" Тогда + Номер = 300 + МетаданныеТаблицы.Ресурсы.Индекс(МетаданныеПоля) + 1; + + ИначеЕсли СвойстваТекущегоПоля.Коллекция = "Реквизиты" Тогда + Номер = 400 + МетаданныеТаблицы.Реквизиты.Индекс(МетаданныеПоля) + 1; + + ИначеЕсли СвойстваТекущегоПоля.Коллекция = "ОбщиеРеквизиты" Тогда + Номер = 500 + Контекст.СвойстваТипаТаблиц.ОбщиеРеквизиты.Индекс(МетаданныеПоля) + 1; + КонецЕсли; + + СвойстваТекущегоПоля.Вставить("ОсновнойПорядок", Строка(Номер)); + +КонецПроцедуры + +// Для процедуры ДобавитьТипыПоляДополнительно. +Процедура УстановитьПолеСодержитNull(УзелПоле, СвойстваТекущегоПоля, Контекст) + + Если Контекст.СвойстваТипаТаблиц.ИмяКоллекции <> "Справочники" + И Контекст.СвойстваТипаТаблиц.ИмяКоллекции <> "ПланыВидовХарактеристик" + Или Не Контекст.МетаданныеТаблицы.Иерархический Тогда + + Возврат; + КонецЕсли; + + Если Контекст.СвойстваТипаТаблиц.ИмяКоллекции = "Справочники" + И Контекст.МетаданныеТаблицы.ВидИерархии + <> Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов Тогда + + Возврат; + КонецЕсли; + + Если СвойстваТекущегоПоля.Свойство("ИмяТабличнойЧасти") Тогда + Если СвойстваТекущегоПоля.Свойство("МетаданныеТабличнойЧасти") + И СвойстваТекущегоПоля.МетаданныеТабличнойЧасти.Использование + <> Метаданные.СвойстваОбъектов.ИспользованиеРеквизита.ДляГруппыИЭлемента Тогда + + УзелПоле.Вставить("ПолеСодержитNull"); + КонецЕсли; + + Возврат; + КонецЕсли; + + Если СвойстваТекущегоПоля.Коллекция = "Реквизиты" + И СвойстваТекущегоПоля.Метаданные.Использование + <> Метаданные.СвойстваОбъектов.ИспользованиеРеквизита.ДляГруппыИЭлемента Тогда + + УзелПоле.Вставить("ПолеСодержитNull"); + КонецЕсли; + +КонецПроцедуры + +// Для процедуры ПроверитьТаблицыПоляИТипыПолей. +Процедура ПроверитьРасширенияТаблицы(ПоляТаблицы, Контекст) + + СвойстваТипаТаблиц = Контекст.СвойстваТипаТаблиц; + + Если СвойстваТипаТаблиц.КоллекцииТабличныхЧастей.Количество() = 0 + И СвойстваТипаТаблиц.ИмяКоллекции <> "РегистрыРасчета" Тогда + Возврат; + КонецЕсли; + + МетаданныеТаблицы = Контекст.МетаданныеТаблицы; + + Для Каждого РасширениеТаблицы Из ПоляТаблицы.Значение.Расширения Цикл + + Если СвойстваТипаТаблиц.ИмяКоллекции = "РегистрыРасчета" Тогда + МетаданныеРасширения = МетаданныеТаблицы.Перерасчеты.Найти(РасширениеТаблицы.Ключ); + Иначе + Для Каждого КоллекцияТабличныхЧастей Из СвойстваТипаТаблиц.КоллекцииТабличныхЧастей Цикл + Если КоллекцияТабличныхЧастей.Ключ = "СтандартныеТабличныеЧасти" Тогда + Для Каждого СтандартнаяТабличнаяЧасть Из МетаданныеТаблицы.СтандартныеТабличныеЧасти Цикл + Если ВРег(РасширениеТаблицы.Ключ) = ВРег(СтандартнаяТабличнаяЧасть.Имя) Тогда + МетаданныеРасширения = СтандартнаяТабличнаяЧасть; + Прервать; + КонецЕсли; + КонецЦикла; + Иначе + МетаданныеРасширения = МетаданныеТаблицы[КоллекцияТабличныхЧастей.Ключ].Найти(РасширениеТаблицы.Ключ); + КонецЕсли; + Если МетаданныеРасширения <> Неопределено Тогда + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + Если МетаданныеРасширения = Неопределено Тогда + Продолжить; + КонецЕсли; + РасширениеТаблицы.Значение.ТаблицаСуществует = Истина; + + Для Каждого ПолеТаблицы Из РасширениеТаблицы.Значение.Поля Цикл + ОписаниеПоля = Новый Структура; + ОписаниеПоля.Вставить("СоставИмени", СтрРазделить(ПолеТаблицы.Ключ, ".")); + ОписаниеПоля.Вставить("Свойства", ПолеТаблицы.Значение); + ОписаниеПоля.Вставить("ТипПоля", Новый ОписаниеТипов); + + Индекс = 0; + Если СвойстваТипаТаблиц.ИмяКоллекции = "РегистрыРасчета" Тогда + СвойстваПоля = СвойстваПоляПерерасчета(ОписаниеПоля.СоставИмени[Индекс], + МетаданныеРасширения, МетаданныеТаблицы); + Иначе + СвойстваПоля = СвойстваПоляТабличнойЧасти(ОписаниеПоля.СоставИмени[Индекс], + МетаданныеРасширения, КоллекцияТабличныхЧастей.Ключ, МетаданныеТаблицы); + КонецЕсли; + + Если СвойстваПоля = Неопределено Тогда + ОписаниеПоля.Свойства.ПолеСОшибкой = Индекс + 1; + ОписаниеПоля.Свойства.ВидОшибки = "НеНайдено"; + Продолжить; + КонецЕсли; + ПроверитьСледующееПолеЧерезТочку(ОписаниеПоля, Индекс, СвойстваПоля, Контекст); + ЗаполнитьТипыПоляСтрокойДополнительно(ОписаниеПоля); + Если ОписаниеПоля.Свойства.ПолеСОшибкой = 0 Тогда + ПроверитьТипыПоля(ОписаниеПоля, Контекст); + КонецЕсли; + КонецЦикла; + + КонецЦикла; + +КонецПроцедуры + +// Для процедур ПроверитьТаблицыПоляИТипыПолей и ПроверитьРасширенияТаблицы. +Процедура ПроверитьТипыПоля(ОписаниеПоля, Контекст) + + ОписаниеТиповПоля = ОписаниеПоля.ТипПоля; + + Для Каждого ОписаниеТипа Из ОписаниеПоля.Свойства.СодержитТипы Цикл + СвойстваТипа = ОписаниеТипа.Значение; + Если ЗначениеЗаполнено(СвойстваТипа.ИмяКоллекцииТипа) + И Метаданные[СвойстваТипа.ИмяКоллекцииТипа].Найти(СвойстваТипа.ИмяОбъектаКоллекцииТипа) = Неопределено Тогда + Продолжить; + КонецЕсли; + Тип = Тип(ОписаниеТипа.Значение.ИмяТипа); + СвойстваТипа.СодержитТип = ОписаниеТиповПоля.СодержитТип(Тип); + КонецЦикла; + +КонецПроцедуры + +// Для процедуры ПроверитьТаблицыПоляИТипыПолей. +Процедура ПроверитьПредопределенныеЗначенияТаблицы(ПоляТаблицы, Контекст) + + СвойстваТипаТаблиц = Контекст.СвойстваТипаТаблиц; + + Если ПоляТаблицы.Значение.Предопределенные.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Если СвойстваТипаТаблиц.ЕстьПредопределенные Тогда + МетаданныеТаблицы = Контекст.МетаданныеТаблицы; + + Если СвойстваТипаТаблиц.ИмяКоллекции = "Перечисления" Тогда + ИменаПредопределенных = Новый Массив; + Для Каждого ЗначениеПеречисления Из МетаданныеТаблицы.ЗначенияПеречисления Цикл + ИменаПредопределенных.Добавить(ЗначениеПеречисления.Имя); + КонецЦикла; + Иначе + ИменаПредопределенных = Новый Массив(МетаданныеТаблицы.ПолучитьИменаПредопределенных()); + КонецЕсли; + Иначе + ИменаПредопределенных = Новый Массив; + КонецЕсли; + + ИменаПредопределенных.Добавить("ПустаяСсылка"); + ИменаПредопределенных.Добавить("EmptyRef"); + + Для Каждого Предопределенный Из ПоляТаблицы.Значение.Предопределенные Цикл + Для Каждого ИмяПредопределенного Из ИменаПредопределенных Цикл + Если ВРег(ИмяПредопределенного) = Предопределенный.Ключ Тогда + Предопределенный.Значение.ИмяСуществует = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + + +// Для функции СтруктураОграничения. +Процедура ОтметитьНекорректныеИменаТаблицПолейИТиповПолей(ПоляТаблиц, Контекст) + + Для Каждого ТипТаблиц Из ПоляТаблиц Цикл + Для Каждого ОписаниеТаблицы Из ТипТаблиц.Значение Цикл + СвойстваТаблицы = ОписаниеТаблицы.Значение; + + Если Не СвойстваТаблицы.ТаблицаСуществует Тогда + Для Каждого Источник Из СвойстваТаблицы.Источники Цикл + УстановитьОшибкуВСтроке(Источник, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не найдена таблица ""%1""'"), Источник.Символы), , 2); + КонецЦикла; + Если СвойстваТаблицы.Свойство("ПервоеПоле") + И СвойстваТаблицы.ПервоеПоле.ПервыйИсточник <> Неопределено Тогда + + УстановитьОшибкуВСтрокеИмениПоля(Контекст, СвойстваТаблицы.ПервоеПоле.ПервыйИсточник.Ключ, + НСтр("ru = 'Поле не найдено, так как не найдена таблица ""%1""'"), 0, , + СвойстваТаблицы.ПервоеПоле.ПервыйИсточник.Значение); + КонецЕсли; + Для Каждого ОписаниеПредопределенного Из СвойстваТаблицы.Предопределенные Цикл + Для Каждого Источник Из ОписаниеПредопределенного.Значение.Источники Цикл + СоставИмени = СтрРазделить(Источник.Символы, "."); + + УстановитьОшибкуВСтроке(Источник, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Предопределенное значение не найдено, так как не найдена таблица ""%1""'"), + СоставИмени[0] + "." + СоставИмени[1]), , 2); + КонецЦикла; + КонецЦикла; + Продолжить; + КонецЕсли; + + Для Каждого ОписаниеПредопределенного Из СвойстваТаблицы.Предопределенные Цикл + СвойстваПредопределенного = ОписаниеПредопределенного.Значение; + Если СвойстваПредопределенного.ИмяСуществует Тогда + Продолжить; + КонецЕсли; + Для Каждого Источник Из СвойстваПредопределенного.Источники Цикл + СоставИмени = СтрРазделить(Источник.Символы, "."); + Источник.ПозицияОшибки = СтрДлина(СоставИмени[0] + "." + СоставИмени[1]) + 1; + Источник.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не найдено предопределенное значение ""%1""'"), СоставИмени[2]); + КонецЦикла; + КонецЦикла; + + Для Каждого ОписаниеПоля Из СвойстваТаблицы.Поля Цикл + ОтметитьНекорректноеПолеИТипыПоля(ОписаниеПоля, Контекст); + КонецЦикла; + + Для Каждого ОписаниеРасширения Из СвойстваТаблицы.Расширения Цикл + СвойстваРасширения = ОписаниеРасширения.Значение; + Если Не СвойстваРасширения.ТаблицаСуществует Тогда + Для Каждого Источник Из СвойстваРасширения.Источники Цикл + УстановитьОшибкуВСтроке(Источник, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не найдена таблица ""%1""'"), Источник.Символы), , 2); + КонецЦикла; + Если СвойстваРасширения.Свойство("ПервоеПоле") + И СвойстваРасширения.ПервоеПоле.ПервыйИсточник <> Неопределено Тогда + + УстановитьОшибкуВСтрокеИмениПоля(Контекст, СвойстваРасширения.ПервоеПоле.ПервыйИсточник.Ключ, + НСтр("ru = 'Поле не найдено, так как не найдена таблица ""%1""'"), 0, , + СвойстваРасширения.ПервоеПоле.ПервыйИсточник.Значение); + КонецЕсли; + Продолжить; + КонецЕсли; + Для Каждого ОписаниеПоля Из СвойстваРасширения.Поля Цикл + ОтметитьНекорректноеПолеИТипыПоля(ОписаниеПоля, Контекст); + КонецЦикла; + КонецЦикла; + + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + +// Для процедуры ОтметитьНекорректныеИменаТаблицПолейИТиповПолей. +Процедура ОтметитьНекорректноеПолеИТипыПоля(ОписаниеПоля, Контекст) + + СвойстваПоля = ОписаниеПоля.Значение; + Если СвойстваПоля.ПолеСОшибкой = 1 Тогда + Для Каждого ОписаниеИсточника Из ОписаниеПоля.Значение.Источники Цикл + ВКонце = Ложь; + Если СвойстваПоля.ВидОшибки = "ТабличнаяЧастьБезПоля" Тогда + ВКонце = Истина; + ШаблонОшибки = НСтр("ru = 'Не указано поле после табличной части ""%1"" таблицы ""%2""'"); + + ИначеЕсли СвойстваПоля.ВидОшибки = "Недопустимо" Тогда + ШаблонОшибки = НСтр("ru = 'Недопустимо использовать поле ""%1"" таблицы ""%2""'"); + + ИначеЕсли СвойстваПоля.ВидОшибки = "Запрещено" Тогда + ШаблонОшибки = НСтр("ru = 'Запрещено использовать поле ""%1"" таблицы ""%2""'"); + Иначе + ШаблонОшибки = НСтр("ru = 'Не найдено поле ""%1"" таблицы ""%2""'"); + КонецЕсли; + УстановитьОшибкуВСтрокеИмениПоля(Контекст, + ОписаниеИсточника.Ключ, ШаблонОшибки, 1, Истина, ОписаниеИсточника.Значение, ВКонце); + КонецЦикла; + Возврат; + КонецЕсли; + + Если СвойстваПоля.ПолеСОшибкой > 1 Тогда + Для Каждого ОписаниеИсточника Из ОписаниеПоля.Значение.Источники Цикл + Если СвойстваПоля.ВидОшибки = "ТабличнаяЧастьПослеТочки" Тогда + ШаблонОшибки = НСтр("ru = 'Табличная часть ""%1"" не поддерживается ""через точку"" от поля'"); + + ИначеЕсли СвойстваПоля.ВидОшибки = "Недопустимо" Тогда + ШаблонОшибки = НСтр("ru = 'Недопустимо использовать поле ""%1""'"); + + ИначеЕсли СвойстваПоля.ВидОшибки = "Запрещено" Тогда + ШаблонОшибки = НСтр("ru = 'Запрещено использовать поле ""%1""'"); + Иначе + ШаблонОшибки = НСтр("ru = 'Не найдено поле ""%1""'"); + КонецЕсли; + УстановитьОшибкуВСтрокеИмениПоля(Контекст, + ОписаниеИсточника.Ключ, ШаблонОшибки, СвойстваПоля.ПолеСОшибкой, Истина); + КонецЦикла; + Возврат; + КонецЕсли; + + СоставИмени = СтрРазделить(ОписаниеПоля.Ключ, "."); + Если СоставИмени.Количество() > 1 + И ( СоставИмени[1] = ВРег("Ссылка") + Или СоставИмени[1] = ВРег("Ref") ) + И СвойстваПоля.Коллекция <> "ТабличныеЧасти" + И СвойстваПоля.Коллекция <> "СтандартныеТабличныеЧасти" Тогда + + Для Каждого ОписаниеИсточника Из ОписаниеПоля.Значение.Источники Цикл + ШаблонОшибки = НСтр("ru = 'Поле ""%1"" избыточно указывать ""через точку"" от любого поля'"); + УстановитьОшибкуВСтрокеИмениПоля(Контекст, + ОписаниеИсточника.Ключ, ШаблонОшибки, 2, Истина); + КонецЦикла; + Возврат; + КонецЕсли; + + Для Каждого ОписаниеТипа Из СвойстваПоля.СодержитТипы Цикл + СвойстваТипа = ОписаниеТипа.Значение; + Для Каждого ОписаниеИсточника Из ОписаниеТипа.Значение.Источники Цикл + Если ТипЗнч(ОписаниеИсточника.Ключ) = Тип("СтрокаТаблицыЗначений") Тогда + Если Не СвойстваТипа.СодержитТип Тогда + УстановитьОшибкуВСтроке(ОписаниеИсточника.Ключ, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'У поля ""%1"" не найден тип ""%2""'"), + ОписаниеИсточника.Значение.Символы, + ОписаниеИсточника.Ключ.Символы), + , 2); + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + +// Для процедуры ОтметитьНекорректныеИменаТаблицПолейИТиповПолей. +Процедура УстановитьОшибкуВСтрокеИмениПоля(Контекст, Строка, ШаблонОшибки, ПолеСОшибкой, + ВставитьИмя = Ложь, Таблица = Null, ВКонце = Ложь) + + Если ЗначениеЗаполнено(Строка.ТекстОшибки) Тогда + Возврат; + КонецЕсли; + + Если ТипЗнч(ВставитьИмя) = Тип("Строка") Тогда + СоставИмени = СтрРазделить(ВставитьИмя, "."); + ВставитьИмя = Истина; + Иначе + СоставИмени = СтрРазделить(Строка.Символы, "."); + КонецЕсли; + + Если СоставИмени.Количество() > 1 + И Контекст.Псевдонимы.Получить(ВРег(СоставИмени[0])) <> Неопределено Тогда + + Строка.ПозицияОшибки = СтрДлина(СоставИмени[0]) + 1; + СоставИмени.Удалить(0); + КонецЕсли; + + Для Номер = 1 По ПолеСОшибкой - 1 Цикл + Строка.ПозицияОшибки = Строка.ПозицияОшибки + СтрДлина(СоставИмени[0]) + 1; + СоставИмени.Удалить(0); + КонецЦикла; + Если ВКонце Тогда + Строка.ПозицияОшибки = Строка.ПозицияОшибки + СтрДлина(СоставИмени[0]); + КонецЕсли; + ИмяПоля = СоставИмени[0]; + + Если ВставитьИмя И Таблица <> Null Тогда + Строка.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, + ИмяПоля, ?(ЗначениеЗаполнено(Таблица), Таблица, Контекст.ОсновнаяТаблица)); + + ИначеЕсли ВставитьИмя Тогда + Строка.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, ИмяПоля); + + ИначеЕсли Таблица <> Null Тогда + Строка.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, + ?(ЗначениеЗаполнено(Таблица), Таблица, Контекст.ОсновнаяТаблица)); + Иначе + Строка.ТекстОшибки = ШаблонОшибки; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#Область ОбновлениеПрогрессаОбновленияДоступа + +Процедура ОбновитьПрогрессВФоне(Контекст, АдресРезультата) Экспорт + + ДатаНачалаОбновленияПрогресса = ТекущаяДатаСеанса(); + ДлительныеОперации.СообщитьПрогресс(0); // Обновление прогресса выполняется. + + СтрокиСписков = Контекст.ХранимыеДанные.СтрокиСписков; + СвойстваСписков = Контекст.ХранимыеДанные.СвойстваСписков; + Если Не Контекст.ЭтоПовторноеОбновлениеПрогресса Тогда + Контекст.ХранимыеДанные.ДатаПоследнегоОбновления = '00010101'; + КонецЕсли; + + ДействующиеПараметры = Неопределено; + ИдентификаторыТаблиц = ИдентификаторыСписковСОграничением(ДействующиеПараметры); + + Для Каждого КлючИЗначение Из ИдентификаторыТаблиц Цикл + Если Не Контекст.ПоказыватьОбработанныеСписки Тогда + Продолжить; + КонецЕсли; + Если СтрокиСписков.Получить(КлючИЗначение.Значение) <> Неопределено Тогда + Продолжить; + КонецЕсли; + ДобавитьНовуюСтрокуСписка(Контекст, КлючИЗначение.Значение, КлючИЗначение.Ключ); + КонецЦикла; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("МаксимальнаяДата", МаксимальнаяДата()); + Запрос.УстановитьПараметр("ДатаПоследнегоОбновления", Контекст.ХранимыеДанные.ДатаПоследнегоОбновления); + Запрос.УстановитьПараметр("ПустойУникальныйИдентификатор", + Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + + Контекст.ХранимыеДанные.ДатаПоследнегоОбновления = ДатаНачалаОбновленияПрогресса; + + Запрос.Текст = + "ВЫБРАТЬ + | ВсеСпискиОбновления.Список КАК Список, + | МАКСИМУМ(ВсеСпискиОбновления.ОбновлениеЭлементов) КАК ОбновлениеЭлементов, + | МАКСИМУМ(ВсеСпискиОбновления.ОбновлениеКлючейДоступа) КАК ОбновлениеКлючейДоступа + |ИЗ + | (ВЫБРАТЬ РАЗЛИЧНЫЕ + | ОбновлениеКлючейДоступаКДанным.Список КАК Список, + | ИСТИНА КАК ОбновлениеЭлементов, + | ЛОЖЬ КАК ОбновлениеКлючейДоступа + | ИЗ + | РегистрСведений.ОбновлениеКлючейДоступаКДанным КАК ОбновлениеКлючейДоступаКДанным + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ РАЗЛИЧНЫЕ + | ОбновлениеКлючейДоступаПользователей.Список, + | ЛОЖЬ, + | ИСТИНА + | ИЗ + | РегистрСведений.ОбновлениеКлючейДоступаПользователей КАК ОбновлениеКлючейДоступаПользователей) КАК ВсеСпискиОбновления + | + |СГРУППИРОВАТЬ ПО + | ВсеСпискиОбновления.Список + | + |УПОРЯДОЧИТЬ ПО + | Список + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Списки.Список КАК Список, + | ОбновлениеКлючейДоступаКДанным.ДатаПоследнегоОбновленногоЭлемента КАК ДатаПоследнегоОбновленногоЭлемента, + | ЕСТЬNULL(ОбновлениеКлючейДоступаКДанным.ПоследнийОбновленныйЭлемент, Списки.ПолноеОбновление) КАК ПоследнийОбновленныйЭлемент, + | ОбновлениеКлючейДоступаКДаннымДляВнешнихПользователей.ДатаПоследнегоОбновленногоЭлемента КАК ДатаПоследнегоОбновленногоЭлементаДляВнешнихПользователей, + | ЕСТЬNULL(ОбновлениеКлючейДоступаКДаннымДляВнешнихПользователей.ПоследнийОбновленныйЭлемент, Списки.ПолноеОбновлениеДляВнешнихПользователей) КАК ПоследнийОбновленныйЭлементДляВнешнихПользователей + |ИЗ + | (ВЫБРАТЬ + | ОбновлениеКлючейДоступаКДанным.Список КАК Список, + | МАКСИМУМ(ВЫБОР + | КОГДА ОбновлениеКлючейДоступаКДанным.ДляВнешнихПользователей + | ТОГДА ЛОЖЬ + | ИНАЧЕ ОбновлениеКлючейДоступаКДанным.КлючУникальности <> &ПустойУникальныйИдентификатор + | ИЛИ ОбновлениеКлючейДоступаКДанным.ДатаПоследнегоОбновленногоЭлемента = &МаксимальнаяДата + | КОНЕЦ) КАК ПолноеОбновление, + | МАКСИМУМ(ВЫБОР + | КОГДА ОбновлениеКлючейДоступаКДанным.ДляВнешнихПользователей + | ТОГДА ОбновлениеКлючейДоступаКДанным.КлючУникальности <> &ПустойУникальныйИдентификатор + | ИЛИ ОбновлениеКлючейДоступаКДанным.ДатаПоследнегоОбновленногоЭлемента = &МаксимальнаяДата + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ) КАК ПолноеОбновлениеДляВнешнихПользователей + | ИЗ + | РегистрСведений.ОбновлениеКлючейДоступаКДанным КАК ОбновлениеКлючейДоступаКДанным + | ГДЕ + | ОбновлениеКлючейДоступаКДанным.ДатаИзмененияЗаписиРегистра >= &ДатаПоследнегоОбновления + | + | СГРУППИРОВАТЬ ПО + | ОбновлениеКлючейДоступаКДанным.Список) КАК Списки + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОбновлениеКлючейДоступаКДанным КАК ОбновлениеКлючейДоступаКДанным + | ПО (НЕ Списки.ПолноеОбновление) + | И (ОбновлениеКлючейДоступаКДанным.Список = Списки.Список) + | И (ОбновлениеКлючейДоступаКДанным.ДляВнешнихПользователей = ЛОЖЬ) + | И (ОбновлениеКлючейДоступаКДанным.КлючУникальности = &ПустойУникальныйИдентификатор) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОбновлениеКлючейДоступаКДанным КАК ОбновлениеКлючейДоступаКДаннымДляВнешнихПользователей + | ПО (НЕ Списки.ПолноеОбновлениеДляВнешнихПользователей) + | И (ОбновлениеКлючейДоступаКДанным.Список = Списки.Список) + | И (ОбновлениеКлючейДоступаКДанным.ДляВнешнихПользователей = ИСТИНА) + | И (ОбновлениеКлючейДоступаКДанным.КлючУникальности = &ПустойУникальныйИдентификатор) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Списки.Список КАК Список, + | ЕСТЬNULL(ОбновлениеКлючейДоступаДляПользователей.ПоследнийОбновленныйКлючДоступа, Списки.ПолноеОбновление) КАК ПоследнийОбновленныйКлючДоступа, + | ЕСТЬNULL(ОбновлениеКлючейДоступаДляВнешнихПользователей.ПоследнийОбновленныйКлючДоступа, Списки.ПолноеОбновлениеДляВнешнихПользователей) КАК ПоследнийОбновленныйКлючДоступаДляВнешнихПользователей + |ИЗ + | (ВЫБРАТЬ + | ОбновлениеКлючейДоступаПользователей.Список КАК Список, + | МАКСИМУМ(ВЫБОР + | КОГДА ОбновлениеКлючейДоступаПользователей.ДляВнешнихПользователей + | ТОГДА ЛОЖЬ + | ИНАЧЕ ОбновлениеКлючейДоступаПользователей.КлючУникальности <> &ПустойУникальныйИдентификатор + | КОНЕЦ) КАК ПолноеОбновление, + | МАКСИМУМ(ВЫБОР + | КОГДА ОбновлениеКлючейДоступаПользователей.ДляВнешнихПользователей + | ТОГДА ОбновлениеКлючейДоступаПользователей.КлючУникальности <> &ПустойУникальныйИдентификатор + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ) КАК ПолноеОбновлениеДляВнешнихПользователей + | ИЗ + | РегистрСведений.ОбновлениеКлючейДоступаПользователей КАК ОбновлениеКлючейДоступаПользователей + | ГДЕ + | ОбновлениеКлючейДоступаПользователей.ДатаИзмененияЗаписиРегистра >= &ДатаПоследнегоОбновления + | + | СГРУППИРОВАТЬ ПО + | ОбновлениеКлючейДоступаПользователей.Список) КАК Списки + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОбновлениеКлючейДоступаПользователей КАК ОбновлениеКлючейДоступаДляПользователей + | ПО (НЕ Списки.ПолноеОбновление) + | И (ОбновлениеКлючейДоступаДляПользователей.Список = Списки.Список) + | И (ОбновлениеКлючейДоступаДляПользователей.ДляВнешнихПользователей = ЛОЖЬ) + | И (ОбновлениеКлючейДоступаДляПользователей.КлючУникальности = &ПустойУникальныйИдентификатор) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОбновлениеКлючейДоступаПользователей КАК ОбновлениеКлючейДоступаДляВнешнихПользователей + | ПО (НЕ Списки.ПолноеОбновлениеДляВнешнихПользователей) + | И (ОбновлениеКлючейДоступаДляВнешнихПользователей.Список = Списки.Список) + | И (ОбновлениеКлючейДоступаДляВнешнихПользователей.ДляВнешнихПользователей = ИСТИНА) + | И (ОбновлениеКлючейДоступаДляВнешнихПользователей.КлючУникальности = &ПустойУникальныйИдентификатор) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | КОЛИЧЕСТВО(*) КАК Количество + |ИЗ + | Справочник.КлючиДоступа КАК КлючиДоступа"; + + РезультатыЗапроса = Запрос.ВыполнитьПакет(); + + ВсеСпискиОбновления = РезультатыЗапроса[0].Выгрузить(); + СтрокиОбновленияКоличестваЭлементов = Новый Массив; + СтрокиОбновленияКоличестваКлючейДоступа = Новый Массив; + + Для Каждого СписокОбновления Из ВсеСпискиОбновления Цикл + Строка = СтрокиСписков.Получить(СписокОбновления.Список); + Если Строка = Неопределено Тогда + ДобавитьНовуюСтрокуСписка(Контекст, СписокОбновления.Список, ""); + КонецЕсли; + КонецЦикла; + + УдаляемыеСтроки = Новый Массив; + Для Каждого КлючИЗначение Из СтрокиСписков Цикл + Строка = КлючИЗначение.Значение; + СписокОбновления = ВсеСпискиОбновления.Найти(Строка.Список, "Список"); + Если СписокОбновления = Неопределено И Не Контекст.ПоказыватьОбработанныеСписки Тогда + УдаляемыеСтроки.Добавить(Строка); + Продолжить; + КонецЕсли; + СвойстваСписка = СвойстваСписков.Получить(Строка.Список); + Если СписокОбновления = Неопределено Или Не СписокОбновления.ОбновлениеЭлементов Тогда + СвойстваСписка.ДатаПоследнегоОбновленногоЭлемента = '00010101'; + СвойстваСписка.ПоследнийОбновленныйЭлемент = Неопределено; + СвойстваСписка.ДатаПоследнегоОбновленногоЭлементаДляВнешнихПользователей = '00010101'; + СвойстваСписка.ПоследнийОбновленныйЭлементДляВнешнихПользователей = Неопределено; + Если Контекст.РассчитыватьПоКоличествуДанных Тогда + Если Строка.ОбработаноЭлементов <> 100 Тогда + СтрокиОбновленияКоличестваЭлементов.Добавить(Строка); + КонецЕсли; + Иначе + ОбнулитьКоличествоЭлементов(Строка, Контекст); + КонецЕсли; + ОбновитьЗначениеВСтроке(Строка.ОбработаноЭлементов, 100, Строка, Контекст); + КонецЕсли; + Если СписокОбновления = Неопределено Или Не СписокОбновления.ОбновлениеКлючейДоступа Тогда + СвойстваСписка.ПоследнийОбновленныйКлючДоступа = Неопределено; + СвойстваСписка.ПоследнийОбновленныйКлючДоступаДляВнешнихПользователей = Неопределено; + Если Контекст.РассчитыватьПоКоличествуДанных Тогда + Если Строка.ОбработаноКлючейДоступа <> 100 Тогда + СтрокиОбновленияКоличестваКлючейДоступа.Добавить(Строка); + КонецЕсли; + Иначе + ОбнулитьКоличествоКлючейДоступа(Строка, Контекст); + КонецЕсли; + ОбновитьЗначениеВСтроке(Строка.ОбработаноКлючейДоступа, 100, Строка, Контекст); + КонецЕсли; + КонецЦикла; + + СпискиОбновленияЭлементов = РезультатыЗапроса[1].Выгрузить(); + ОбъектыМетаданныхПоИдентификаторам = + Справочники.ИдентификаторыОбъектовМетаданных.ОбъектыМетаданныхПоИдентификаторам( + СпискиОбновленияЭлементов.ВыгрузитьКолонку("Список"), Истина); + + Для Каждого ОписаниеОбновления Из СпискиОбновленияЭлементов Цикл + Строка = СтрокиСписков.Получить(ОписаниеОбновления.Список); + Если Строка = Неопределено Тогда + Продолжить; + КонецЕсли; + ОбъектМетаданных = ОбъектыМетаданныхПоИдентификаторам.Получить(ОписаниеОбновления.Список); + Если ТипЗнч(ОбъектМетаданных) <> Тип("ОбъектМетаданных") Тогда + Если УдаляемыеСтроки.Найти(Строка) = Неопределено Тогда + УдаляемыеСтроки.Добавить(Строка); + КонецЕсли; + Продолжить; + КонецЕсли; + Если Не ЗначениеЗаполнено(Строка.ИмяТаблицы) Тогда + Строка.ИмяТаблицы = ОбъектМетаданных.ПолноеИмя(); + КонецЕсли; + Если Не Контекст.РассчитыватьПоКоличествуДанных Тогда + ОбновитьЗначениеВСтроке(Строка.ОбработаноЭлементов, 0, Строка, Контекст); + ОбнулитьКоличествоЭлементов(Строка, Контекст); + Иначе + Свойства = СвойстваСписков.Получить(Строка.Список); + ЗаполнитьЗначенияСвойств(Свойства, ОписаниеОбновления); + Если Контекст.ЭтоПовторноеОбновлениеПрогресса Тогда + СтрокиОбновленияКоличестваЭлементов.Добавить(Строка); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + СпискиОбновленияКлючейДоступа = РезультатыЗапроса[2].Выгрузить(); + ОбъектыМетаданныхПоИдентификаторам = + Справочники.ИдентификаторыОбъектовМетаданных.ОбъектыМетаданныхПоИдентификаторам( + СпискиОбновленияКлючейДоступа.ВыгрузитьКолонку("Список"), Истина); + + Для Каждого ОписаниеОбновления Из СпискиОбновленияКлючейДоступа Цикл + ОбъектМетаданных = ОбъектыМетаданныхПоИдентификаторам.Получить(ОписаниеОбновления.Список); + Строка = СтрокиСписков.Получить(ОписаниеОбновления.Список); + Если Строка = Неопределено Тогда + Продолжить; + КонецЕсли; + Если ТипЗнч(ОбъектМетаданных) <> Тип("ОбъектМетаданных") Тогда + Если УдаляемыеСтроки.Найти(Строка) = Неопределено Тогда + УдаляемыеСтроки.Добавить(Строка); + КонецЕсли; + Продолжить; + КонецЕсли; + Если Не ЗначениеЗаполнено(Строка.ИмяТаблицы) Тогда + Строка.ИмяТаблицы = ОбъектМетаданных.ПолноеИмя(); + КонецЕсли; + Если Не Контекст.РассчитыватьПоКоличествуДанных Тогда + ОбновитьЗначениеВСтроке(Строка.ОбработаноКлючейДоступа, 0, Строка, Контекст); + ОбнулитьКоличествоКлючейДоступа(Строка, Контекст); + Иначе + Свойства = СвойстваСписков.Получить(Строка.Список); + ЗаполнитьЗначенияСвойств(Свойства, ОписаниеОбновления); + Если Контекст.ЭтоПовторноеОбновлениеПрогресса Тогда + СтрокиОбновленияКоличестваКлючейДоступа.Добавить(Строка); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Для Каждого УдаляемаяСтрока Из УдаляемыеСтроки Цикл + СтрокиСписков.Удалить(УдаляемаяСтрока.Список); + СвойстваСписков.Удалить(УдаляемаяСтрока.Список); + Индекс = Контекст.ДобавленныеСтроки.Найти(УдаляемаяСтрока); + Если Индекс <> Неопределено Тогда + Контекст.ДобавленныеСтроки.Удалить(Индекс); + Продолжить; + КонецЕсли; + Контекст.УдаленныеСтроки.Вставить(УдаляемаяСтрока.Список, Истина); + КонецЦикла; + + Индекс = Контекст.ДобавленныеСтроки.Количество() - 1; + Пока Индекс >= 0 Цикл + Если Не ЗначениеЗаполнено(Контекст.ДобавленныеСтроки[Индекс].ИмяТаблицы) Тогда + Контекст.ДобавленныеСтроки.Удалить(Индекс); + КонецЕсли; + Индекс = Индекс - 1; + КонецЦикла; + + Если Не Контекст.ЭтоПовторноеОбновлениеПрогресса Тогда + Для Каждого ОписаниеСтроки Из СтрокиСписков Цикл + СтрокиОбновленияКоличестваЭлементов.Добавить(ОписаниеСтроки.Значение); + СтрокиОбновленияКоличестваКлючейДоступа.Добавить(ОписаниеСтроки.Значение); + КонецЦикла; + КонецЕсли; + + КоличествоКлючей = РезультатыЗапроса[3].Выгрузить()[0].Количество; + Если Контекст.ЭтоПовторноеОбновлениеПрогресса + И Контекст.ХранимыеДанные.КоличествоКлючей <> КоличествоКлючей Тогда + + Для Каждого ОписаниеСтроки Из СтрокиСписков Цикл + Если СтрокиОбновленияКоличестваКлючейДоступа.Найти(ОписаниеСтроки.Значение) = Неопределено Тогда + СтрокиОбновленияКоличестваКлючейДоступа.Добавить(ОписаниеСтроки.Значение); + КонецЕсли; + КонецЦикла; + КонецЕсли; + Контекст.ХранимыеДанные.КоличествоКлючей = КоличествоКлючей; + + Если Контекст.РассчитыватьПоКоличествуДанных Тогда + ТекущийКонтекст = Новый Структура; + ТекущийКонтекст.Вставить("ДобавленныеСтроки", Контекст.ДобавленныеСтроки); + ТекущийКонтекст.Вставить("ИзмененныеСтроки", Контекст.ИзмененныеСтроки); + ТекущийКонтекст.Вставить("СвойстваСписков", СвойстваСписков); + ТекущийКонтекст.Вставить("СтрокиСписков", СтрокиСписков); + ТекущийКонтекст.Вставить("ДействующиеПараметры", ДействующиеПараметры); + ТекущийКонтекст.Вставить("СтрокиОбновленияКоличестваЭлементов", СтрокиОбновленияКоличестваЭлементов); + ТекущийКонтекст.Вставить("СтрокиОбновленияКоличестваКлючейДоступа", СтрокиОбновленияКоличестваКлючейДоступа); + ТекущийКонтекст.Вставить("ИдентификаторыТаблиц", ИдентификаторыТаблиц); + ТекущийКонтекст.Вставить("ХранимыеДанные", Контекст.ХранимыеДанные); + ВсегоОбновлено = 100; + РассчитатьВсегоОбновленоПоКоличествуДанных(ТекущийКонтекст, ВсегоОбновлено); + Иначе + Если Контекст.ХранимыеДанные.Свойство("КоличествоЭлементовПоСпискам") Тогда + Контекст.ХранимыеДанные.Удалить("КоличествоЭлементовПоСпискам"); + Контекст.ХранимыеДанные.Удалить("КоличествоКлючейДоступаПоСпискам"); + КонецЕсли; + ВсегоКоличество = ИдентификаторыТаблиц.Количество(); + Если СтрокиСписков.Количество() > ВсегоКоличество Тогда + ВсегоКоличество = СтрокиСписков.Количество(); + КонецЕсли; + ВсегоОбновлено = (100 + 100) * (ВсегоКоличество - СтрокиСписков.Количество()); + Для Каждого КлючИЗначение Из СтрокиСписков Цикл + Строка = КлючИЗначение.Значение; + ВсегоОбновлено = ВсегоОбновлено + Строка.ОбработаноЭлементов + Строка.ОбработаноКлючейДоступа; + КонецЦикла; + ВсегоОбновлено = ВсегоОбновлено / 2 / ВсегоКоличество; + КонецЕсли; + Если ВсегоОбновлено > 100 Тогда + ВсегоОбновлено = 100; + КонецЕсли; + Контекст.ВсегоОбновлено = Цел(ВсегоОбновлено); + + ВремяОбновления = ТекущаяДатаСеанса() - ДатаНачалаОбновленияПрогресса; + + Если Контекст.ЭтоПовторноеОбновлениеПрогресса + И ВремяОбновления > Контекст.ПериодОбновленияПрогресса Тогда + + Контекст.ПериодОбновленияПрогресса = ВремяОбновления; + Иначе + Контекст.Удалить("ПериодОбновленияПрогресса"); + КонецЕсли; + + Если Не Контекст.ЭтоПовторноеОбновлениеПрогресса И ВремяОбновления > 60 Тогда + Контекст.АвтообновлениеПрогресса = Ложь; + Иначе + Контекст.Удалить("АвтообновлениеПрогресса"); + КонецЕсли; + + Отбор = Новый Структура("Метаданные", Метаданные.РегламентныеЗадания.ОбновлениеДоступаНаУровнеЗаписей); + Задания = РегламентныеЗаданияСервер.НайтиЗадания(Отбор); + Включено = Ложь; + Для Каждого Задание Из Задания Цикл + Если Задание.Использование Тогда + Включено = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Если Не Включено И Контекст.ВсегоОбновлено < 100 Тогда + Контекст.Вставить("РегламентноеЗаданиеОтключено"); + КонецЕсли; + + ПоместитьВоВременноеХранилище(Контекст, АдресРезультата); + +КонецПроцедуры + +Процедура ОбнулитьКоличествоЭлементов(Строка, Контекст); + + ОбновитьЗначениеВСтроке(Строка.КоличествоЭлементов, 0, Строка, Контекст); + ОбновитьЗначениеВСтроке(Строка.КоличествоОбработанныхЭлементов, 0, Строка, Контекст); + ОбновитьЗначениеВСтроке(Строка.КоличествоЭлементовДляПользователей, 0, Строка, Контекст); + ОбновитьЗначениеВСтроке(Строка.КоличествоЭлементовДляВнешнихПользователей, 0, Строка, Контекст); + ОбновитьЗначениеВСтроке(Строка.КоличествоОставшихсяЭлементовДляПользователей, 0, Строка, Контекст); + ОбновитьЗначениеВСтроке(Строка.КоличествоОставшихсяЭлементовДляВнешнихПользователей, 0, Строка, Контекст); + +КонецПроцедуры + +Процедура ОбнулитьКоличествоКлючейДоступа(Строка, Контекст); + + ОбновитьЗначениеВСтроке(Строка.КоличествоКлючейДоступа, 0, Строка, Контекст); + ОбновитьЗначениеВСтроке(Строка.КоличествоОбработанныхКлючейДоступа, 0, Строка, Контекст); + ОбновитьЗначениеВСтроке(Строка.КоличествоКлючейДоступаДляПользователей, 0, Строка, Контекст); + ОбновитьЗначениеВСтроке(Строка.КоличествоКлючейДоступаДляВнешнихПользователей, 0, Строка, Контекст); + ОбновитьЗначениеВСтроке(Строка.КоличествоОставшихсяКлючейДоступаДляПользователей, 0, Строка, Контекст); + ОбновитьЗначениеВСтроке(Строка.КоличествоОставшихсяКлючейДоступаДляВнешнихПользователей, 0, Строка, Контекст); + +КонецПроцедуры + +Процедура ДобавитьНовуюСтрокуСписка(Контекст, Список, ИмяТаблицы) + + Строка = Новый Структура; + Строка.Вставить("Список", Список); + Строка.Вставить("СписокПредставление", Строка(Список)); + Строка.Вставить("ИмяТаблицы", ИмяТаблицы); + Строка.Вставить("ПозицияОбновления", ""); + Строка.Вставить("ОбработаноЭлементов", 0); + Строка.Вставить("ОбработаноКлючейДоступа", 0); + Строка.Вставить("КоличествоЭлементов", 0); + Строка.Вставить("КоличествоКлючейДоступа", 0); + Строка.Вставить("КоличествоОбработанныхЭлементов", 0); + Строка.Вставить("КоличествоОбработанныхКлючейДоступа", 0); + + Строка.Вставить("КоличествоЭлементовДляПользователей", 0); + Строка.Вставить("КоличествоЭлементовДляВнешнихПользователей", 0); + Строка.Вставить("КоличествоКлючейДоступаДляПользователей", 0); + Строка.Вставить("КоличествоКлючейДоступаДляВнешнихПользователей", 0); + Строка.Вставить("КоличествоОставшихсяЭлементовДляПользователей", 0); + Строка.Вставить("КоличествоОставшихсяЭлементовДляВнешнихПользователей", 0); + Строка.Вставить("КоличествоОставшихсяКлючейДоступаДляПользователей", 0); + Строка.Вставить("КоличествоОставшихсяКлючейДоступаДляВнешнихПользователей", 0); + + Контекст.ХранимыеДанные.СтрокиСписков.Вставить(Список, Строка); + Контекст.ДобавленныеСтроки.Добавить(Строка); + + Свойства = Новый Структура; + Свойства.Вставить("ДатаПоследнегоОбновленногоЭлемента", '00010101'); + Свойства.Вставить("ПоследнийОбновленныйЭлемент", Неопределено); + Свойства.Вставить("ПоследнийОбновленныйКлючДоступа", Неопределено); + + Свойства.Вставить("ДатаПоследнегоОбновленногоЭлементаДляВнешнихПользователей", '00010101'); + Свойства.Вставить("ПоследнийОбновленныйЭлементДляВнешнихПользователей", Неопределено); + Свойства.Вставить("ПоследнийОбновленныйКлючДоступаДляВнешнихПользователей", Неопределено); + + Контекст.ХранимыеДанные.СвойстваСписков.Вставить(Список, Свойства); + +КонецПроцедуры + +Процедура РассчитатьВсегоОбновленоПоКоличествуДанных(Контекст, ВсегоОбновлено) + + ТипыТаблицПоИменам = УправлениеДоступомСлужебныйПовтИсп.СинтаксисЯзыка().ТипыТаблиц.ПоИменам; + Контекст.Вставить("ТипыТаблицПоИменам", ТипыТаблицПоИменам); + + Если Не Контекст.ХранимыеДанные.Свойство("КоличествоЭлементовПоСпискам") Тогда + ЗаполнитьКоличествоЭлементовИКлючейДоступаПоСпискам(Контекст); + КонецЕсли; + + ОбновитьКоличествоЭлементовИКлючейДоступа(Контекст); + + КоличествоЭлементовПоСпискам = Контекст.ХранимыеДанные.КоличествоЭлементовПоСпискам; + КоличествоКлючейДоступаПоСпискам = Контекст.ХранимыеДанные.КоличествоКлючейДоступаПоСпискам; + + ОбщееКоличествоЭлементов = 0; + Для Каждого КлючИЗначение Из КоличествоЭлементовПоСпискам Цикл + ОбщееКоличествоЭлементов = ОбщееКоличествоЭлементов + КлючИЗначение.Значение; + КонецЦикла; + ОбщееКоличествоЭлементов = ?(ОбщееКоличествоЭлементов = 0, 100, ОбщееКоличествоЭлементов); + + ОбщееКоличествоКлючейДоступа = 0; + Для Каждого КлючИЗначение Из КоличествоКлючейДоступаПоСпискам Цикл + ОбщееКоличествоКлючейДоступа = ОбщееКоличествоКлючейДоступа + КлючИЗначение.Значение; + КонецЦикла; + ОбщееКоличествоКлючейДоступа = ?(ОбщееКоличествоКлючейДоступа = 0, 100, ОбщееКоличествоКлючейДоступа); + + ВсегоОбновленоЭлементов = 0; + ВсегоОбновленоКлючейДоступа = 0; + + ДобавкаОбщегоКоличестваЭлементов = 0; + ДобавкаОбщегоКоличестваКлючейДоступа = 0; + + ИменаТаблицСОбновлениемЭлементов = Новый Соответствие; + ИменаТаблицСОбновлениемКлючейДоступа = Новый Соответствие; + + Для Каждого КлючИЗначение Из Контекст.СтрокиСписков Цикл + Строка = КлючИЗначение.Значение; + + КоличествоЭлементов = КоличествоЭлементовПоСпискам.Получить(КлючИЗначение.Значение.ИмяТаблицы); + Если КоличествоЭлементов = Неопределено Тогда + Добавка = ?(КоличествоЭлементовПоСпискам.Количество() = 0, 10, + Цел(ОбщееКоличествоЭлементов / КоличествоЭлементовПоСпискам.Количество())); + ДобавкаОбщегоКоличестваЭлементов = ДобавкаОбщегоКоличестваЭлементов + Добавка; + Доля = Добавка * 0.1; + Иначе + Доля = КоличествоЭлементов / ОбщееКоличествоЭлементов; + ИменаТаблицСОбновлениемЭлементов.Вставить(КлючИЗначение.Значение.ИмяТаблицы, Истина); + КонецЕсли; + ВсегоОбновленоЭлементов = ВсегоОбновленоЭлементов + Строка.ОбработаноЭлементов * Доля; + + КоличествоКлючейДоступа = КоличествоКлючейДоступаПоСпискам.Получить(КлючИЗначение.Значение.ИмяТаблицы); + Если КоличествоКлючейДоступа = Неопределено Тогда + Добавка = ?(КоличествоКлючейДоступаПоСпискам.Количество() = 0, 10, + Цел(ОбщееКоличествоКлючейДоступа / КоличествоКлючейДоступаПоСпискам.Количество())); + ДобавкаОбщегоКоличестваКлючейДоступа = ДобавкаОбщегоКоличестваКлючейДоступа + Добавка; + Доля = Добавка * 0.1; + Иначе + Доля = КоличествоКлючейДоступа / ОбщееКоличествоКлючейДоступа; + ИменаТаблицСОбновлениемКлючейДоступа.Вставить(КлючИЗначение.Значение.ИмяТаблицы, Истина); + КонецЕсли; + ВсегоОбновленоКлючейДоступа = ВсегоОбновленоКлючейДоступа + Строка.ОбработаноКлючейДоступа * Доля; + КонецЦикла; + + КоличествоОбновленныхЭлементов = 0; + Для Каждого КлючИЗначение Из КоличествоЭлементовПоСпискам Цикл + Если ИменаТаблицСОбновлениемЭлементов.Получить(КлючИЗначение.Ключ) = Неопределено Тогда + КоличествоОбновленныхЭлементов = КоличествоОбновленныхЭлементов + КлючИЗначение.Значение; + КонецЕсли; + КонецЦикла; + ВсегоОбновленоЭлементов = ВсегоОбновленоЭлементов + + (КоличествоОбновленныхЭлементов / ОбщееКоличествоЭлементов) * 100; + + КоличествоОбновленныхКлючейДоступа = 0; + Для Каждого КлючИЗначение Из КоличествоКлючейДоступаПоСпискам Цикл + Если ИменаТаблицСОбновлениемКлючейДоступа.Получить(КлючИЗначение.Ключ) = Неопределено Тогда + КоличествоОбновленныхКлючейДоступа = КоличествоОбновленныхКлючейДоступа + КлючИЗначение.Значение; + КонецЕсли; + КонецЦикла; + ВсегоОбновленоКлючейДоступа = ВсегоОбновленоКлючейДоступа + + (КоличествоОбновленныхКлючейДоступа / ОбщееКоличествоКлючейДоступа) * 100; + + ВсегоОбновленоЭлементов = ВсегоОбновленоЭлементов + + ВсегоОбновленоЭлементов * ДобавкаОбщегоКоличестваЭлементов / ОбщееКоличествоЭлементов; + + ВсегоОбновленоКлючейДоступа = ВсегоОбновленоКлючейДоступа + + ВсегоОбновленоКлючейДоступа * ДобавкаОбщегоКоличестваКлючейДоступа / ОбщееКоличествоКлючейДоступа; + + ВсегоОбновлено = (ВсегоОбновленоЭлементов + ВсегоОбновленоКлючейДоступа) / 2; + +КонецПроцедуры + +Процедура ЗаполнитьКоличествоЭлементовИКлючейДоступаПоСпискам(Контекст) + + КоличествоЭлементовПоСпискам = Новый Соответствие; + КоличествоКлючейДоступаПоСпискам = Новый Соответствие; + Контекст.ХранимыеДанные.Вставить("КоличествоЭлементовПоСпискам", КоличествоЭлементовПоСпискам); + Контекст.ХранимыеДанные.Вставить("КоличествоКлючейДоступаПоСпискам", КоличествоКлючейДоступаПоСпискам); + + ОписаниеЗапроса = Новый Структура("Запрос, ТекстыПакетаЗапросов", Новый Запрос, Новый Массив); + + Индекс = 0; + ИменаТаблиц = Новый Массив; + Для Каждого КлючИЗначение Из Контекст.ИдентификаторыТаблиц Цикл + ИменаТаблиц.Добавить(КлючИЗначение.Ключ); + Строка = Новый Структура("Список, ИмяТаблицы", КлючИЗначение.Значение, КлючИЗначение.Ключ); + ДобавитьТекстЗапросаКоличестваЭлементов(ОписаниеЗапроса, Строка, Индекс, Контекст, Неопределено); + ДобавитьТекстЗапросаКоличестваКлючейДоступа(ОписаниеЗапроса, Строка, Индекс, Неопределено); + КонецЦикла; + + РезультатыЗапроса = ВыполнитьПакетЗапросовПоЧастям(ОписаниеЗапроса); + + Индекс = 0; + Для Каждого ИмяТаблицы Из ИменаТаблиц Цикл + Выборка = РезультатыЗапроса[Индекс].Выбрать(); + Количество = ?(Выборка.Следующий(), Выборка.Количество, 0); + КоличествоЭлементовПоСпискам[ИмяТаблицы] = Количество; + Индекс = Индекс + 1; + + Выборка = РезультатыЗапроса[Индекс].Выбрать(); + Количество = ?(Выборка.Следующий(), Выборка.Количество, 0); + КоличествоКлючейДоступаПоСпискам[ИмяТаблицы] = Количество; + Индекс = Индекс + 1; + КонецЦикла; + +КонецПроцедуры + +Процедура ОбновитьКоличествоЭлементовИКлючейДоступа(Контекст) + + ОписаниеЗапроса = Новый Структура("Запрос, ТекстыПакетаЗапросов", Новый Запрос, Новый Массив); + Индекс = 0; + Для Каждого Строка Из Контекст.СтрокиОбновленияКоличестваЭлементов Цикл + ДобавитьТекстЗапросаКоличестваЭлементов(ОписаниеЗапроса, Строка, Индекс, Контекст, Ложь); + ДобавитьТекстЗапросаКоличестваЭлементов(ОписаниеЗапроса, Строка, Индекс, Контекст, Истина); + ДобавитьТекстЗапросаКоличестваОставшихсяЭлементов(ОписаниеЗапроса, Строка, Индекс, Контекст, Ложь); + ДобавитьТекстЗапросаКоличестваОставшихсяЭлементов(ОписаниеЗапроса, Строка, Индекс, Контекст, Истина); + КонецЦикла; + Для Каждого Строка Из Контекст.СтрокиОбновленияКоличестваКлючейДоступа Цикл + ДобавитьТекстЗапросаКоличестваКлючейДоступа(ОписаниеЗапроса, Строка, Индекс, Ложь); + ДобавитьТекстЗапросаКоличестваКлючейДоступа(ОписаниеЗапроса, Строка, Индекс, Истина); + ДобавитьТекстЗапросаКоличестваОставшихсяКлючейДоступа(ОписаниеЗапроса, Строка, Индекс, Контекст, Ложь); + ДобавитьТекстЗапросаКоличестваОставшихсяКлючейДоступа(ОписаниеЗапроса, Строка, Индекс, Контекст, Истина); + КонецЦикла; + + Если ОписаниеЗапроса.ТекстыПакетаЗапросов.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + РезультатыЗапроса = ВыполнитьПакетЗапросовПоЧастям(ОписаниеЗапроса); + + КоличествоЭлементовПоСпискам = Контекст.ХранимыеДанные.КоличествоЭлементовПоСпискам; + КоличествоКлючейДоступаПоСпискам = Контекст.ХранимыеДанные.КоличествоКлючейДоступаПоСпискам; + ВерсииОграниченийСписков = Контекст.ДействующиеПараметры.ВерсииОграниченийСписков; + ТипыТаблицПоИменам = Контекст.ТипыТаблицПоИменам; + + Индекс = 0; + Для Каждого Строка Из Контекст.СтрокиОбновленияКоличестваЭлементов Цикл + Выборка = РезультатыЗапроса[Индекс].Выбрать(); + КоличествоЭлементовДляПользователей = ?(Выборка.Следующий(), Выборка.Количество, 0); + Индекс = Индекс + 1; + + Выборка = РезультатыЗапроса[Индекс].Выбрать(); + КоличествоЭлементовДляВнешнихПользователей = ?(Выборка.Следующий(), Выборка.Количество, 0); + Индекс = Индекс + 1; + + КоличествоЭлементов = КоличествоЭлементовДляПользователей + КоличествоЭлементовДляВнешнихПользователей; + ОбновитьЗначениеВСтроке(Строка.КоличествоЭлементов, КоличествоЭлементов, Строка, Контекст); + Если ЗначениеЗаполнено(Строка.ИмяТаблицы) Тогда + КоличествоЭлементовПоСпискам.Вставить(Строка.ИмяТаблицы, КоличествоЭлементов); + КонецЕсли; + + Если Строка.КоличествоЭлементов = 0 Тогда + ОбнулитьКоличествоЭлементов(Строка, Контекст); + ОбновитьЗначениеВСтроке(Строка.ОбработаноЭлементов, 100, Строка, Контекст); + Индекс = Индекс + 2; + Иначе + КоличествоОбработанныхЭлементов = 0; + СвойстваСписка = Контекст.СвойстваСписков.Получить(Строка.Список); + ЕстьКлючиДляПользователей = Ложь; + ЕстьКлючиДляВнешнихПользователей = Ложь; + Версии = ВерсииОграниченийСписков.Получить(Строка.ИмяТаблицы); + Если ЗначениеЗаполнено(Версии) Тогда + ЕстьКлючиДляПользователей = ЗначениеЗаполнено(СтрПолучитьСтроку(Версии, 1)); + ЕстьКлючиДляВнешнихПользователей = ЗначениеЗаполнено(СтрПолучитьСтроку(Версии, 2)); + КонецЕсли; + СоставИмени = СтрРазделить(Строка.ИмяТаблицы, ".", Ложь); + СвойстваТипа = ТипыТаблицПоИменам.Получить(ВРег(СоставИмени[0])); + Делитель = ?(СвойстваТипа.ЭтоСсылочныйТип, 2, 1); + Для ВидПользователей = 0 По 1 Цикл + Если ВидПользователей = 0 Тогда + ПоследнийОбновленныйЭлемент = СвойстваСписка.ПоследнийОбновленныйЭлемент; + Иначе + ПоследнийОбновленныйЭлемент = СвойстваСписка.ПоследнийОбновленныйЭлементДляВнешнихПользователей; + КонецЕсли; + Если ПоследнийОбновленныйЭлемент = Неопределено Или ПоследнийОбновленныйЭлемент = Ложь Тогда + КоличествоОставшихсяЭлементов = 0; + Иначе + Если ВидПользователей = 0 Тогда + ЕстьКлючиДляПользователей = Истина; + Иначе + ЕстьКлючиДляВнешнихПользователей = Истина; + КонецЕсли; + Если ПоследнийОбновленныйЭлемент = Истина Тогда + КоличествоОставшихсяЭлементов = ?(ВидПользователей = 0, + КоличествоЭлементовДляПользователей, КоличествоЭлементовДляВнешнихПользователей); + Иначе + Выборка = РезультатыЗапроса[Индекс].Выбрать(); + КоличествоОставшихсяЭлементов = ?(Выборка.Следующий(), Выборка.Количество, 0); + Если КоличествоОставшихсяЭлементов = -1 Тогда + КоличествоОставшихсяЭлементов = ?(ВидПользователей = 0, + КоличествоЭлементовДляПользователей, КоличествоЭлементовДляВнешнихПользователей); + КонецЕсли; + КонецЕсли; + КонецЕсли; + Если ВидПользователей = 0 Тогда + Если Не ЕстьКлючиДляПользователей Тогда + Строка.КоличествоОставшихсяЭлементовДляПользователей = 0; + Строка.КоличествоЭлементовДляПользователей = 0; + ИначеЕсли ТипЗнч(КоличествоОставшихсяЭлементов) = Тип("Число") Тогда + Строка.КоличествоОставшихсяЭлементовДляПользователей = КоличествоОставшихсяЭлементов; + Строка.КоличествоЭлементовДляПользователей = КоличествоЭлементовДляПользователей; + КонецЕсли; + КоличествоОбработанныхЭлементов = КоличествоОбработанныхЭлементов + + (Строка.КоличествоЭлементовДляПользователей + - Строка.КоличествоОставшихсяЭлементовДляПользователей) / Делитель; + Иначе + Если Не ЕстьКлючиДляВнешнихПользователей Тогда + Строка.КоличествоОставшихсяЭлементовДляВнешнихПользователей = 0; + Строка.КоличествоЭлементовДляВнешнихПользователей = 0; + ИначеЕсли ТипЗнч(КоличествоОставшихсяЭлементов) = Тип("Число") Тогда + Строка.КоличествоОставшихсяЭлементовДляВнешнихПользователей = КоличествоОставшихсяЭлементов; + Строка.КоличествоЭлементовДляВнешнихПользователей = КоличествоЭлементовДляВнешнихПользователей; + КонецЕсли; + КоличествоОбработанныхЭлементов = КоличествоОбработанныхЭлементов + + (Строка.КоличествоЭлементовДляВнешнихПользователей + - Строка.КоличествоОставшихсяЭлементовДляВнешнихПользователей) / Делитель; + КонецЕсли; + Индекс = Индекс + 1; + КонецЦикла; + Если Не ЕстьКлючиДляПользователей Или Не ЕстьКлючиДляВнешнихПользователей Тогда + КоличествоОбработанныхЭлементов = КоличествоОбработанныхЭлементов * Делитель; + КонецЕсли; + ОбновитьЗначениеВСтроке(Строка.КоличествоОбработанныхЭлементов, + Цел(КоличествоОбработанныхЭлементов), Строка, Контекст); + Если Строка.КоличествоОбработанныхЭлементов > Строка.КоличествоЭлементов Тогда + ОбновитьЗначениеВСтроке(Строка.КоличествоОбработанныхЭлементов, + Строка.КоличествоЭлементов, Строка, Контекст); + КонецЕсли; + ОбновитьЗначениеВСтроке(Строка.ОбработаноЭлементов, + Цел(Строка.КоличествоОбработанныхЭлементов / Строка.КоличествоЭлементов * 100), Строка, Контекст); + КонецЕсли; + КонецЦикла; + + Для Каждого Строка Из Контекст.СтрокиОбновленияКоличестваКлючейДоступа Цикл + Выборка = РезультатыЗапроса[Индекс].Выбрать(); + КоличествоКлючейДоступаДляПользователей = ?(Выборка.Следующий(), Выборка.Количество, 0); + Индекс = Индекс + 1; + + Выборка = РезультатыЗапроса[Индекс].Выбрать(); + КоличествоКлючейДоступаДляВнешнихПользователей = ?(Выборка.Следующий(), Выборка.Количество, 0); + Индекс = Индекс + 1; + + КоличествоКлючейДоступа = КоличествоКлючейДоступаДляПользователей + КоличествоКлючейДоступаДляВнешнихПользователей; + ОбновитьЗначениеВСтроке(Строка.КоличествоКлючейДоступа, КоличествоКлючейДоступа, Строка, Контекст); + Если ЗначениеЗаполнено(Строка.ИмяТаблицы) Тогда + КоличествоКлючейДоступаПоСпискам.Вставить(Строка.ИмяТаблицы, КоличествоКлючейДоступа); + КонецЕсли; + + Если Строка.КоличествоКлючейДоступа = 0 Тогда + ОбнулитьКоличествоКлючейДоступа(Строка, Контекст); + ОбновитьЗначениеВСтроке(Строка.ОбработаноКлючейДоступа, 100, Строка, Контекст); + Индекс = Индекс + 2; + Иначе + КоличествоОбработанныхКлючейДоступа = 0; + СвойстваСписка = Контекст.СвойстваСписков.Получить(Строка.Список); + Для ВидПользователей = 0 По 1 Цикл + Если ВидПользователей = 0 Тогда + ПоследнийОбновленныйКлючДоступа = СвойстваСписка.ПоследнийОбновленныйКлючДоступа; + Иначе + ПоследнийОбновленныйКлючДоступа = СвойстваСписка.ПоследнийОбновленныйКлючДоступаДляВнешнихПользователей; + КонецЕсли; + Если ПоследнийОбновленныйКлючДоступа = Неопределено Или ПоследнийОбновленныйКлючДоступа = Ложь Тогда + КоличествоОставшихсяКлючейДоступа = 0; + ИначеЕсли ПоследнийОбновленныйКлючДоступа = Истина Тогда + КоличествоОставшихсяКлючейДоступа = ?(ВидПользователей = 0, + КоличествоКлючейДоступаДляПользователей, КоличествоКлючейДоступаДляВнешнихПользователей); + Иначе + Выборка = РезультатыЗапроса[Индекс].Выбрать(); + КоличествоОставшихсяКлючейДоступа = ?(Выборка.Следующий(), Выборка.Количество, 0); + Если КоличествоОставшихсяКлючейДоступа = -1 Тогда + КоличествоОставшихсяКлючейДоступа = ?(ВидПользователей = 0, + КоличествоКлючейДоступаДляПользователей, КоличествоКлючейДоступаДляВнешнихПользователей); + КонецЕсли; + КонецЕсли; + Если ВидПользователей = 0 Тогда + Если ТипЗнч(КоличествоОставшихсяКлючейДоступа) = Тип("Число") Тогда + Строка.КоличествоОставшихсяКлючейДоступаДляПользователей = КоличествоОставшихсяКлючейДоступа; + Строка.КоличествоКлючейДоступаДляПользователей = КоличествоКлючейДоступаДляПользователей; + КонецЕсли; + КоличествоОбработанныхКлючейДоступа = КоличествоОбработанныхКлючейДоступа + + (Строка.КоличествоКлючейДоступаДляПользователей + - Строка.КоличествоОставшихсяКлючейДоступаДляПользователей); + Иначе + Если ТипЗнч(КоличествоОставшихсяКлючейДоступа) = Тип("Число") Тогда + Строка.КоличествоОставшихсяКлючейДоступаДляВнешнихПользователей = КоличествоОставшихсяКлючейДоступа; + Строка.КоличествоКлючейДоступаДляВнешнихПользователей = КоличествоКлючейДоступаДляВнешнихПользователей; + КонецЕсли; + КоличествоОбработанныхКлючейДоступа = КоличествоОбработанныхКлючейДоступа + + (Строка.КоличествоКлючейДоступаДляВнешнихПользователей + - Строка.КоличествоОставшихсяКлючейДоступаДляВнешнихПользователей); + КонецЕсли; + Индекс = Индекс + 1; + КонецЦикла; + ОбновитьЗначениеВСтроке(Строка.КоличествоОбработанныхКлючейДоступа, + Цел(КоличествоОбработанныхКлючейДоступа), Строка, Контекст); + Если Строка.КоличествоОбработанныхКлючейДоступа > Строка.КоличествоКлючейДоступа Тогда + ОбновитьЗначениеВСтроке(Строка.КоличествоОбработанныхКлючейДоступа, + Строка.КоличествоКлючейДоступа, Строка, Контекст); + КонецЕсли; + ОбновитьЗначениеВСтроке(Строка.ОбработаноКлючейДоступа, + Цел(Строка.КоличествоОбработанныхКлючейДоступа / Строка.КоличествоКлючейДоступа * 100), Строка, Контекст); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Функция ВыполнитьПакетЗапросовПоЧастям(ОписаниеЗапроса) + + РезультатыПакетаЗапросов = Новый Массив; + + ТекстыПорцииЗапросов = Новый Массив; + Для Каждого ТекстЗапроса Из ОписаниеЗапроса.ТекстыПакетаЗапросов Цикл + Если ТекстыПорцииЗапросов.Количество() = 200 Тогда + ДобавитьРезультатыЗапроса(РезультатыПакетаЗапросов, ТекстыПорцииЗапросов, ОписаниеЗапроса); + ТекстыПорцииЗапросов = Новый Массив; + КонецЕсли; + ТекстыПорцииЗапросов.Добавить(ТекстЗапроса); + КонецЦикла; + ДобавитьРезультатыЗапроса(РезультатыПакетаЗапросов, ТекстыПорцииЗапросов, ОписаниеЗапроса); + + Возврат РезультатыПакетаЗапросов; + +КонецФункции + +Процедура ДобавитьРезультатыЗапроса(РезультатыПакетаЗапросов, ТекстыПорцииЗапросов, ОписаниеЗапроса) + + Запрос = ОписаниеЗапроса.Запрос; + + Запрос.Текст = СтрСоединить(ТекстыПорцииЗапросов, ОбщегоНазначения.РазделительПакетаЗапросов()); + РезультатыЗапроса = Запрос.ВыполнитьПакет(); + Запрос.Текст = ""; + + Для Каждого РезультатЗапроса Из РезультатыЗапроса Цикл + РезультатыПакетаЗапросов.Добавить(РезультатЗапроса); + КонецЦикла; + +КонецПроцедуры + +Процедура ОбновитьЗначениеВСтроке(СтароеЗначение, НовоеЗначение, Строка, Контекст) + + Если СтароеЗначение = НовоеЗначение Тогда + Возврат; + КонецЕсли; + СтароеЗначение = НовоеЗначение; + + Если Контекст.ДобавленныеСтроки.Найти(Строка) = Неопределено + И Контекст.ИзмененныеСтроки.Получить(Строка) = Неопределено Тогда + + Контекст.ИзмененныеСтроки.Вставить(Строка.Список, Строка); + КонецЕсли; + +КонецПроцедуры + +Процедура ДобавитьТекстЗапросаКоличестваЭлементов(ОписаниеЗапроса, Строка, Индекс, Контекст, ДляВнешнихПользователей) + + Если ЗначениеЗаполнено(Строка.ИмяТаблицы) Тогда + СоставИмени = СтрРазделить(Строка.ИмяТаблицы, ".", Ложь); + СвойстваТипа = Контекст.ТипыТаблицПоИменам.Получить(ВРег(СоставИмени[0])); + Если СвойстваТипа.ЭтоСсылочныйТип Тогда + ТекстЗапроса = + "ВЫБРАТЬ + | КОЛИЧЕСТВО(*) КАК Количество + |ИЗ + | &ТекущаяТаблица КАК ТекущаяТаблица"; + + ИначеЕсли ДляВнешнихПользователей = Неопределено Тогда + ТекстЗапросаДляПользователей = ТекстЗапросаКоличестваЭлементовРегистра(Контекст, Строка, Индекс, Ложь); + ТекстЗапросаДляВнешнихПользователей = ТекстЗапросаКоличестваЭлементовРегистра(Контекст, Строка, Индекс, Истина); + ТекстЗапроса = + "ВЫБРАТЬ + | СУММА(КоличествоПоВидамПользователей.Количество) КАК Количество + |ИЗ + | (" + ТекстСОтступом(ТекстЗапросаДляПользователей, " ") + " + | + | ОБЪЕДИНИТЬ ВСЕ + | + | " + ТекстСОтступом(ТекстЗапросаДляВнешнихПользователей, " ") + ") КАК КоличествоПоВидамПользователей"; + Иначе + ТекстЗапроса = ТекстЗапросаКоличестваЭлементовРегистра(Контекст, Строка, Индекс, ДляВнешнихПользователей); + КонецЕсли; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекущаяТаблица", Строка.ИмяТаблицы); + Иначе + ТекстЗапроса = + "ВЫБРАТЬ + | 0 КАК Количество"; + КонецЕсли; + + ОписаниеЗапроса.ТекстыПакетаЗапросов.Добавить(ТекстЗапроса); + Индекс = Индекс + 1; + +КонецПроцедуры + +Функция ТекстЗапросаКоличестваЭлементовРегистра(Контекст, Строка, Индекс, ДляВнешнихПользователей) + + Свойства = Контекст.ДействующиеПараметры.ДополнительныйКонтекст[?(ДляВнешнихПользователей, + "ДляВнешнихПользователей", "ДляПользователей")].СвойстваОграниченияСписков.Получить(Строка.ИмяТаблицы); + + Если Свойства = Неопределено + Или Свойства.ОпорныеПоля = Неопределено + Или Свойства.ОпорныеПоля.Используемые.Количество() = 0 Тогда + + Возврат + "ВЫБРАТЬ + | 0 КАК Количество"; + КонецЕсли; + + ПоляВыбора = ""; + Для Каждого ИмяПоля Из Свойства.ОпорныеПоля.Используемые Цикл + ПоляВыбора = ПоляВыбора + ?(ПоляВыбора = "", "", ", + | ") + "ТекущаяТаблица." + ИмяПоля; + КонецЦикла; + + Если Свойства.ОпорныеПоля.Используемые.Количество() = 1 Тогда + ТекстЗапроса = + "ВЫБРАТЬ + | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ &ПоляВыбора) КАК Количество + |ИЗ + | &ТекущаяТаблица КАК ТекущаяТаблица"; + Иначе + ТекстЗапроса = + "ВЫБРАТЬ + | КОЛИЧЕСТВО(*) КАК Количество + |ИЗ + | (ВЫБРАТЬ РАЗЛИЧНЫЕ + | &ПоляВыбора + | ИЗ + | &ТекущаяТаблица КАК ТекущаяТаблица) КАК КоличествоКомбинаций"; + ПоляВыбора = ТекстСОтступом(ПоляВыбора, " "); + КонецЕсли; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПоляВыбора", ПоляВыбора); + + Возврат ТекстЗапроса; + +КонецФункции + +Процедура ДобавитьТекстЗапросаКоличестваОставшихсяЭлементов(ОписаниеЗапроса, Строка, Индекс, Контекст, ДляВнешнихПользователей) + + СвойстваСписка = Контекст.СвойстваСписков.Получить(Строка.Список); + СпискиСДатой = Контекст.ДействующиеПараметры.СпискиСДатой; + + СоставИмени = СтрРазделить(Строка.ИмяТаблицы, ".", Ложь); + СвойстваТипа = Контекст.ТипыТаблицПоИменам.Получить(ВРег(СоставИмени[0])); + + Если СвойстваСписка = Неопределено Тогда + ПоследнийОбновленныйЭлемент = Неопределено; + + ИначеЕсли ДляВнешнихПользователей Тогда + ДатаПоследнегоОбновленногоЭлемента = СвойстваСписка.ДатаПоследнегоОбновленногоЭлементаДляВнешнихПользователей; + ПоследнийОбновленныйЭлемент = СвойстваСписка.ПоследнийОбновленныйЭлементДляВнешнихПользователей; + Иначе + ДатаПоследнегоОбновленногоЭлемента = СвойстваСписка.ДатаПоследнегоОбновленногоЭлемента; + ПоследнийОбновленныйЭлемент = СвойстваСписка.ПоследнийОбновленныйЭлемент; + КонецЕсли; + + Если ТипЗнч(ПоследнийОбновленныйЭлемент) <> Тип("ХранилищеЗначения") Тогда + ТекстЗапроса = + "ВЫБРАТЬ + | НЕОПРЕДЕЛЕНО КАК Количество"; + Иначе + ПоследнийОбновленныйЭлемент = ПоследнийОбновленныйЭлемент.Получить(); + + УсловиеОтбора = ""; + Если СвойстваТипа.ЭтоСсылочныйТип Тогда + Если СпискиСДатой.Получить(Строка.ИмяТаблицы) <> Неопределено Тогда + + Если ТипЗнч(ДатаПоследнегоОбновленногоЭлемента) = Тип("Дата") Тогда + ИмяПараметра = "ПоследняяДата" + Формат(Индекс, "ЧГ="); + УсловиеОтбора = "ТекущаяТаблица.Дата <= &" + ИмяПараметра; + ОписаниеЗапроса.Запрос.УстановитьПараметр(ИмяПараметра, ДатаПоследнегоОбновленногоЭлемента); + КонецЕсли; + + ИначеЕсли ЗначениеЗаполнено(ПоследнийОбновленныйЭлемент) Тогда + ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(ПоследнийОбновленныйЭлемент)); + Если ОбъектМетаданных <> Неопределено + И ОбъектМетаданных.ПолноеИмя() = Строка.ИмяТаблицы Тогда + + ИмяПараметра = "ПоследняяСсылка" + Формат(Индекс, "ЧГ="); + УсловиеОтбора = "ТекущаяТаблица.Ссылка > &" + ИмяПараметра; + ОписаниеЗапроса.Запрос.УстановитьПараметр(ИмяПараметра, ПоследнийОбновленныйЭлемент); + КонецЕсли; + КонецЕсли; + Если ЗначениеЗаполнено(УсловиеОтбора) Тогда + ТекстЗапроса = + "ВЫБРАТЬ + | КОЛИЧЕСТВО(*) КАК Количество + |ИЗ + | &ТекущаяТаблица КАК ТекущаяТаблица + |ГДЕ + | &УсловиеОтбора"; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеОтбора", УсловиеОтбора); + Иначе + ТекстЗапроса = + "ВЫБРАТЬ + | -1 КАК Количество"; + КонецЕсли; + + ИначеЕсли ТипЗнч(ПоследнийОбновленныйЭлемент) = Тип("Структура") Тогда + ТекстЗапроса = ТекстЗапросаКоличестваОставшихсяЭлементовРегистра(ОписаниеЗапроса, + Строка, Индекс, Контекст, ДляВнешнихПользователей, ПоследнийОбновленныйЭлемент); + КонецЕсли; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекущаяТаблица", Строка.ИмяТаблицы); + КонецЕсли; + + ОписаниеЗапроса.ТекстыПакетаЗапросов.Добавить(ТекстЗапроса); + Индекс = Индекс + 1; + +КонецПроцедуры + +Функция ТекстЗапросаКоличестваОставшихсяЭлементовРегистра(ОписаниеЗапроса, Строка, Индекс, Контекст, + ДляВнешнихПользователей, ПоследнийОбновленныйЭлемент) + + Свойства = Контекст.ДействующиеПараметры.ДополнительныйКонтекст[?(ДляВнешнихПользователей, + "ДляВнешнихПользователей", "ДляПользователей")].СвойстваОграниченияСписков.Получить(Строка.ИмяТаблицы); + + Если Свойства = Неопределено + Или Свойства.ОпорныеПоля = Неопределено + Или Свойства.ОпорныеПоля.Используемые.Количество() = 0 + Или Свойства.ОпорныеПоля.Используемые.Количество() <> ПоследнийОбновленныйЭлемент.Количество() Тогда + + Возврат + "ВЫБРАТЬ + | -1 КАК Количество"; + КонецЕсли; + + ПараметрыОбновления = Новый Структура; + ПараметрыОбновления.Вставить("ОпорныеПоля", Свойства.ОпорныеПоля); + ПараметрыОбновления.Вставить("ИспользуетсяОграничениеПоВладельцу", Ложь); + КлючДанных = КлючДанных(ПараметрыОбновления, ПоследнийОбновленныйЭлемент); + + ПоляВыбора = ""; + УсловиеОтбора = ""; + + НомерПоля = 1; + Для Каждого ИмяПоля Из Свойства.ОпорныеПоля.Используемые Цикл + ИмяПоляВКлючеДанных = "Поле" + НомерПоля; + ИмяПараметра = ИмяПоля + Формат(Индекс, "ЧГ="); + + Отбор = ""; + Для ТекущийИндекс = 0 По НомерПоля - 2 Цикл + ТекущееИмяПоля = Свойства.ОпорныеПоля.Используемые[ТекущийИндекс]; + ТекущееИмяПараметра = ТекущееИмяПоля + Формат(Индекс, "ЧГ="); + Отбор = Отбор + ?(Отбор = "", "", " + | И ") + "ТекущаяТаблица." + ТекущееИмяПоля + " = &" + ТекущееИмяПараметра; + КонецЦикла; + Отбор = Отбор + ?(Отбор = "", "", " + | И ") + "ТекущаяТаблица." + ИмяПоля + " > &" + ИмяПараметра; + + УсловиеОтбора = УсловиеОтбора + ?(НомерПоля = 1, "" + Отбор, " + | ИЛИ " + ТекстСОтступом(Отбор, " ")); + + Если КлючДанных.Свойство(ИмяПоляВКлючеДанных) Тогда + ОписаниеЗапроса.Запрос.УстановитьПараметр(ИмяПараметра, КлючДанных[ИмяПоляВКлючеДанных]); + Иначе + ОписаниеЗапроса.Запрос.УстановитьПараметр(ИмяПараметра, Неопределено); + КонецЕсли; + ПоляВыбора = ПоляВыбора + ?(ПоляВыбора = "", "", ", + | ") + "ТекущаяТаблица." + ИмяПоля; + НомерПоля = НомерПоля + 1; + КонецЦикла; + + Если Свойства.ОпорныеПоля.Используемые.Количество() = 1 Тогда + ТекстЗапроса = + "ВЫБРАТЬ + | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ &ПоляВыбора) КАК Количество + |ИЗ + | &ТекущаяТаблица КАК ТекущаяТаблица + |ГДЕ + | &УсловиеОтбора"; + Иначе + ТекстЗапроса = + "ВЫБРАТЬ + | КОЛИЧЕСТВО(*) КАК Количество + |ИЗ + | (ВЫБРАТЬ РАЗЛИЧНЫЕ + | &ПоляВыбора + | ИЗ + | &ТекущаяТаблица КАК ТекущаяТаблица + | ГДЕ + | &УсловиеОтбора) КАК КоличествоКомбинаций"; + ПоляВыбора = ТекстСОтступом(ПоляВыбора, " "); + УсловиеОтбора = ТекстСОтступом(УсловиеОтбора, " "); + КонецЕсли; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПоляВыбора", ПоляВыбора); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеОтбора", УсловиеОтбора); + + Возврат ТекстЗапроса; + +КонецФункции + +Процедура ДобавитьТекстЗапросаКоличестваКлючейДоступа(ОписаниеЗапроса, Строка, Индекс, ДляВнешнихПользователей) + + ТекстЗапроса = + "ВЫБРАТЬ + | КОЛИЧЕСТВО(КлючиДоступа.Ссылка) КАК Количество + |ИЗ + | Справочник.КлючиДоступа КАК КлючиДоступа + |ГДЕ + | КлючиДоступа.Список = &Список + | И КлючиДоступа.ДляВнешнихПользователей = ЛОЖЬ"; + + ИмяПараметра = "СписокКлючей" + Формат(Индекс, "ЧГ="); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Список", "&" + ИмяПараметра); + ОписаниеЗапроса.Запрос.УстановитьПараметр(ИмяПараметра, Строка.Список); + + Если ДляВнешнихПользователей = Неопределено Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "КлючиДоступа.ДляВнешнихПользователей = ЛОЖЬ", "ИСТИНА"); + + ИначеЕсли ДляВнешнихПользователей Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ЛОЖЬ", "ИСТИНА"); + КонецЕсли; + + ОписаниеЗапроса.ТекстыПакетаЗапросов.Добавить(ТекстЗапроса); + Индекс = Индекс + 1; + +КонецПроцедуры + +Процедура ДобавитьТекстЗапросаКоличестваОставшихсяКлючейДоступа(ОписаниеЗапроса, Строка, Индекс, Контекст, ДляВнешнихПользователей) + + СвойстваСписка = Контекст.СвойстваСписков.Получить(Строка.Список); + Если ДляВнешнихПользователей Тогда + ПоследнийКлючДоступа = СвойстваСписка.ПоследнийОбновленныйКлючДоступаДляВнешнихПользователей; + Иначе + ПоследнийКлючДоступа = СвойстваСписка.ПоследнийОбновленныйКлючДоступа; + КонецЕсли; + Если ТипЗнч(ПоследнийКлючДоступа) <> Тип("ХранилищеЗначения") Тогда + ТекстЗапроса = + "ВЫБРАТЬ + | НЕОПРЕДЕЛЕНО КАК Количество"; + Иначе + ПоследнийКлючДоступа = ПоследнийКлючДоступа.Получить(); + УсловиеОтбора = ""; + Если ТипЗнч(ПоследнийКлючДоступа) = Тип("СправочникСсылка.КлючиДоступа") Тогда + ИмяПараметра = "СписокОбработанныхКлючей" + Формат(Индекс, "ЧГ="); + УсловиеОтбора = "КлючиДоступа.Список = &" + ИмяПараметра; + ОписаниеЗапроса.Запрос.УстановитьПараметр(ИмяПараметра, Строка.Список); + + УсловиеОтбора = УсловиеОтбора + " + | И КлючиДоступа.ДляВнешнихПользователей = " + ?(ДляВнешнихПользователей, "ИСТИНА", "ЛОЖЬ"); + + ИмяПараметра = "ПоследнийКлючДоступа" + Формат(Индекс, "ЧГ="); + УсловиеОтбора = УсловиеОтбора + " + | И КлючиДоступа.Ссылка > &" + ИмяПараметра; + ОписаниеЗапроса.Запрос.УстановитьПараметр(ИмяПараметра, ПоследнийКлючДоступа); + КонецЕсли; + + Если ЗначениеЗаполнено(УсловиеОтбора) Тогда + ТекстЗапроса = + "ВЫБРАТЬ + | КОЛИЧЕСТВО(*) КАК Количество + |ИЗ + | Справочник.КлючиДоступа КАК КлючиДоступа + |ГДЕ + | &УсловиеОтбора"; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеОтбора", УсловиеОтбора); + Иначе + ТекстЗапроса = + "ВЫБРАТЬ + | -1 КАК Количество"; + КонецЕсли; + КонецЕсли; + + ОписаниеЗапроса.ТекстыПакетаЗапросов.Добавить(ТекстЗапроса); + Индекс = Индекс + 1; + +КонецПроцедуры + +Функция ИдентификаторыСписковСОграничением(ДействующиеПараметры) + + ДействующиеПараметры = ДействующиеПараметрыОграниченияДоступа(Неопределено); + + Списки = Новый Массив; + Для Каждого ОписаниеВерсии Из ДействующиеПараметры.ВерсииОграниченийСписков Цикл + Списки.Добавить(ОписаниеВерсии.Ключ); + КонецЦикла; + + Возврат Справочники.ИдентификаторыОбъектовМетаданных.ИдентификаторыОбъектовМетаданных(Списки, Истина); + +КонецФункции + +Функция ПоследнееОбновлениеДоступа(ТекущееЗначение = Неопределено) Экспорт + + Свойства = Новый Структура; + Свойства.Вставить("ДатаЗапускаНаСервере", '00010101'); + Свойства.Вставить("ДатаЗавершенияНаСервере", '00010101'); + Свойства.Вставить("ТекстОшибкиЗавершения", ""); + Свойства.Вставить("НомерСеанса", 0); + Свойства.Вставить("НачалоСеанса", '00010101'); + Свойства.Вставить("ИмяКомпьютера", ""); + Свойства.Вставить("ИдентификаторФоновогоЗадания", + Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + + Если ТипЗнч(ТекущееЗначение) <> Тип("ХранилищеЗначения") Тогда + Возврат Свойства; + КонецЕсли; + + ТекущиеСвойства = ТекущееЗначение.Получить(); + + Если ТипЗнч(ТекущиеСвойства) <> Тип("Структура") Тогда + Возврат Свойства; + КонецЕсли; + + ЗаполнитьЗначенияСвойств(Свойства, ТекущиеСвойства); + + Возврат Свойства; + +КонецФункции + +Функция ТекущаяДатаНаСервере() Экспорт + + Возврат ТекущаяДата(); // Тут должна быть ТекущаяДата сервера, т.к. именно она записывается в журнал регистрации. + +КонецФункции + +#КонецОбласти + +#КонецОбласти + #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебныйВМоделиСервиса/Module.bsl index 487ce454f..7ee0652bb 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйВМоделиСервиса/Module.bsl @@ -136,6 +136,7 @@ Процедура ПриПолученииСпискаШаблонов(ШаблоныЗаданий) Экспорт ШаблоныЗаданий.Добавить(Метаданные.РегламентныеЗадания.ЗаполнениеДанныхДляОграниченияДоступа.Имя); + ШаблоныЗаданий.Добавить(Метаданные.РегламентныеЗадания.ОбновлениеДоступаНаУровнеЗаписей.Имя); КонецПроцедуры diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl index ff3c5e432..e1f489c1c 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl @@ -484,6 +484,282 @@ КонецФункции +#Область УниверсальноеОграничение + +Функция ПустыеСсылкиТиповГруппИЗначений() Экспорт + + ТипыГруппИЗначенийВидовДоступа = УправлениеДоступомСлужебныйПовтИсп.ТипыГруппИЗначенийВидовДоступа(); + ПустыеСсылки = Новый Соответствие; + + Для Каждого Строка Из ТипыГруппИЗначенийВидовДоступа Цикл + ПустыеСсылки.Вставить(ТипЗнч(Строка.ТипГруппИЗначений), Строка.ТипГруппИЗначений); + КонецЦикла; + + Возврат Новый ФиксированноеСоответствие(ПустыеСсылки); + +КонецФункции + +Функция КэшПараметровОграничения(КлючДанныхПовторногоИспользования) Экспорт + + Хранилище = Новый Структура; + Хранилище.Вставить("ВедущиеСпискиПроверенные", Новый Соответствие); + Хранилище.Вставить("ОграниченияСписков", Новый Соответствие); + Хранилище.Вставить("ИдентификаторыТранзакции", Новый Соответствие); + + Возврат Новый ФиксированнаяСтруктура(Хранилище); + +КонецФункции + +Функция СпискиСОграничением() Экспорт + + Списки = Новый Соответствие; + ИнтеграцияПодсистемБСП.ПриЗаполненииСписковСОграничениемДоступа(Списки); + УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа(Списки); + + СвойстваСписков = Новый Соответствие; + Для Каждого Список Из Списки Цикл + ПолноеИмя = Список.Ключ.ПолноеИмя(); + СвойстваСписков.Вставить(ПолноеИмя, Список.Значение); + КонецЦикла; + + Возврат Новый ФиксированноеСоответствие(СвойстваСписков); + +КонецФункции + +Функция РазрешенныйКлючДоступа() Экспорт + + УстановитьОтключениеБезопасногоРежима(Истина); + УстановитьПривилегированныйРежим(Истина); + + Ссылка = Справочники.КлючиДоступа.ПолучитьСсылку( + Новый УникальныйИдентификатор("8bfeb2d1-08c3-11e8-bcf8-d017c2abb532")); + + СсылкаВБазеДанных = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "Ссылка"); + Если Не ЗначениеЗаполнено(СсылкаВБазеДанных) Тогда + РазрешенныйКлюч = Справочники.КлючиДоступа.СоздатьЭлемент(); + РазрешенныйКлюч.УстановитьСсылкуНового(Ссылка); + РазрешенныйКлюч.Наименование = НСтр("ru = 'Разрешенный ключ доступа'"); + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.КлючиДоступа"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Ссылка); + + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + СсылкаВБазеДанных = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "Ссылка"); + Если Не ЗначениеЗаполнено(СсылкаВБазеДанных) Тогда + РазрешенныйКлюч.Записать(); + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + КонецЕсли; + + УстановитьПривилегированныйРежим(Ложь); + УстановитьОтключениеБезопасногоРежима(Ложь); + + Возврат Ссылка; + +КонецФункции + +Функция РазмерностьКлючаДоступа() Экспорт + + МетаданныеКлюча = Метаданные.Справочники.КлючиДоступа; + + Если КоличествоПодобныхЭлементовВКоллекции(МетаданныеКлюча.Реквизиты, "Значение") <> 5 Тогда + ВызватьИсключение + НСтр("ru = 'В справочнике КлючиДоступа должно быть 5 реквизитов Значение* и не более.'"); + КонецЕсли; + + Если МетаданныеКлюча.ТабличныеЧасти.Найти("Шапка") = Неопределено + Или КоличествоПодобныхЭлементовВКоллекции(МетаданныеКлюча.ТабличныеЧасти.Шапка.Реквизиты, "Значение", 6) <> 5 Тогда + ВызватьИсключение + НСтр("ru = 'В справочнике КлючиДоступа должна быть табличная часть Шапка с 5 реквизитами Значение* и не более.'"); + КонецЕсли; + + КоличествоТабличныхЧастей = КоличествоПодобныхЭлементовВКоллекции(МетаданныеКлюча.ТабличныеЧасти, "ТабличнаяЧасть"); + Если КоличествоТабличныхЧастей < 1 Или КоличествоТабличныхЧастей > 12 Тогда + ВызватьИсключение + НСтр("ru = 'В справочнике КлючиДоступа должно быть от 1 до 12 табличных частей ТабличнаяЧасть*.'"); + КонецЕсли; + + КоличествоТабличныхЧастей = 0; + КоличествоРеквизитовТабличнойЧасти = 0; + Для Каждого ТабличнаяЧасть Из МетаданныеКлюча.ТабличныеЧасти Цикл + Если Не СтрНачинаетсяС(ТабличнаяЧасть.Имя, "ТабличнаяЧасть") Тогда + Продолжить; + КонецЕсли; + КоличествоТабличныхЧастей = КоличествоТабличныхЧастей + 1; + Количество = КоличествоПодобныхЭлементовВКоллекции(ТабличнаяЧасть.Реквизиты, "Значение"); + Если Количество < 1 Или Количество > 15 Тогда + КоличествоРеквизитовТабличнойЧасти = 0; + Прервать; + КонецЕсли; + Если КоличествоРеквизитовТабличнойЧасти <> 0 + И КоличествоРеквизитовТабличнойЧасти <> Количество Тогда + + КоличествоРеквизитовТабличнойЧасти = 0; + Прервать; + КонецЕсли; + КоличествоРеквизитовТабличнойЧасти = Количество; + КонецЦикла; + + Если КоличествоРеквизитовТабличнойЧасти = 0 Тогда + ВызватьИсключение + НСтр("ru = 'В справочнике КлючиДоступа в табличных частях ТабличнаяЧасть* + |допустимо только одинаковое количество реквизитов Значение* и не более 15.'"); + КонецЕсли; + + Размерность = Новый Структура; + Размерность.Вставить("КоличествоТабличныхЧастей", КоличествоТабличныхЧастей); + Размерность.Вставить("КоличествоРеквизитовТабличнойЧасти", КоличествоРеквизитовТабличнойЧасти); + + Возврат Новый ФиксированнаяСтруктура(Размерность); + +КонецФункции + +Функция КоличествоОпорныхПолейРегистра(ИмяРегистра = "") Экспорт + + Если ИмяРегистра = "" Тогда + МетаданныеРегистраКлючей = Метаданные.РегистрыСведений.КлючиДоступаКРегистрам; + Иначе + МетаданныеРегистраКлючей = Метаданные.РегистрыСведений[ИмяРегистра]; + КонецЕсли; + + ПоследнийНомерПоля = 0; + Для Каждого Измерение Из МетаданныеРегистраКлючей.Измерения Цикл + Если Измерение.Имя = "Регистр" Тогда + Если ИмяРегистра = "" Тогда + Продолжить; + КонецЕсли; + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В отдельном регистре сведений %1 + |не должно быть измерения %2.'"), ИмяРегистра, "Регистр"); + КонецЕсли; + Если Измерение.Имя = "ДляВнешнихПользователей" Тогда + Продолжить; + КонецЕсли; + Если СтрДлина(Измерение.Имя) <> 5 Или Не СтрНачинаетсяС(Измерение.Имя, "Поле") Тогда + Прервать; + КонецЕсли; + Если Прав(Измерение.Имя, 1) <> Строка(ПоследнийНомерПоля + 1) Тогда + Прервать; + КонецЕсли; + ПоследнийНомерПоля = ПоследнийНомерПоля + 1; + КонецЦикла; + + Возврат ПоследнийНомерПоля; + +КонецФункции + +Функция МаксимальноеКоличествоОпорныхПолейРегистра() Экспорт + + // При изменении нужно синхронно изменить шаблон ограничения доступа ДляРегистра. + Возврат Число(5); + +КонецФункции + +Функция ПустыеЗначенияОпорныхПолей(Количество) Экспорт + + ПустыеЗначения = Новый Структура; + Для Номер = 1 По Количество Цикл + ПустыеЗначения.Вставить("Поле" + Номер, Перечисления.ДополнительныеЗначенияДоступа.Null); + КонецЦикла; + + Возврат ПустыеЗначения; + +КонецФункции + +Функция СинтаксисЯзыка() Экспорт + + Возврат УправлениеДоступомСлужебный.СинтаксисЯзыка(); + +КонецФункции + +Функция УзлыДляПроверкиДоступности(Список, ЭтоСписокИсключений) Экспорт + + Возврат УправлениеДоступомСлужебный.УзлыДляПроверкиДоступности(Список, ЭтоСписокИсключений); + +КонецФункции + +Функция РазделенныеДанныеНедоступны() Экспорт + + Возврат ОбщегоНазначения.РазделениеВключено() + И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных(); + +КонецФункции + +Функция ОписаниеПредопределенногоИдентификатораОбъектаМетаданных(ПолноеИмяОбъектаМетаданных) Экспорт + + Имена = УправлениеДоступомСлужебныйПовтИсп.ИменаПредопределенныхЭлементовСправочника( + "ИдентификаторыОбъектовМетаданных"); + + Имя = СтрЗаменить(ПолноеИмяОбъектаМетаданных, ".", ""); + + Если Имена.Найти(Имя) <> Неопределено Тогда + Возврат "ИдентификаторыОбъектовМетаданных." + Имя; + КонецЕсли; + + Имена = УправлениеДоступомСлужебныйПовтИсп.ИменаПредопределенныхЭлементовСправочника( + "ИдентификаторыОбъектовРасширений"); + + Если Имена.Найти(Имя) <> Неопределено Тогда + Возврат "ИдентификаторыОбъектовРасширений." + Имя; + КонецЕсли; + + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъектаМетаданных); + Если ОбъектМетаданных = Неопределено Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось получить имя предопределенного идентификатора объекта метаданных + |так как не существует указанный объект метаданных: + |""%1"".'"), + ПолноеИмяОбъектаМетаданных); + ВызватьИсключение ТекстОшибки; + КонецЕсли; + + Если ОбъектМетаданных.РасширениеКонфигурации() = Неопределено Тогда + Возврат "ИдентификаторыОбъектовМетаданных." + Имя; + КонецЕсли; + + Возврат "ИдентификаторыОбъектовРасширений." + Имя; + +КонецФункции + +Функция ИменаПредопределенныхЭлементовСправочника(ИмяСправочника) Экспорт + + Возврат Метаданные.Справочники[ИмяСправочника].ПолучитьИменаПредопределенных(); + +КонецФункции + +Функция ДопустимыеТипыЗначенийКлючейДоступа() Экспорт + + РазмерностьКлюча = РазмерностьКлючаДоступа(); + РеквизитыСправочника = Метаданные.Справочники.КлючиДоступа.Реквизиты; + ТабличныеЧастиСправочника = Метаданные.Справочники.КлючиДоступа.ТабличныеЧасти; + + ДопустимыеТипы = РеквизитыСправочника.Значение1.Тип.Типы(); + Для НомерРеквизита = 2 По 5 Цикл + УточнитьДопустимыеТипы(ДопустимыеТипы, РеквизитыСправочника["Значение" + НомерРеквизита]); + КонецЦикла; + Для НомерРеквизита = 6 По 10 Цикл + УточнитьДопустимыеТипы(ДопустимыеТипы, ТабличныеЧастиСправочника.Шапка.Реквизиты["Значение" + НомерРеквизита]); + КонецЦикла; + Для НомерТабличнойЧасти = 1 По РазмерностьКлюча.КоличествоТабличныхЧастей Цикл + ТабличнаяЧасть = ТабличныеЧастиСправочника["ТабличнаяЧасть" + НомерТабличнойЧасти]; + Для НомерРеквизита = 1 По РазмерностьКлюча.КоличествоРеквизитовТабличнойЧасти Цикл + УточнитьДопустимыеТипы(ДопустимыеТипы, ТабличнаяЧасть.Реквизиты["Значение" + НомерРеквизита]); + КонецЦикла; + КонецЦикла; + + Возврат Новый ОписаниеТипов(ДопустимыеТипы); + +КонецФункции + +#КонецОбласти + //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. @@ -510,4 +786,64 @@ КонецФункции +#Область УниверсальноеОграничение + +Функция КоличествоПодобныхЭлементовВКоллекции(Коллекция, НачалоИмени, НачальныйНомер = 1) + + КоличествоПодобных = 0; + МаксимальныйНомер = 0; + + Для Каждого ЭлементКоллекции Из Коллекция Цикл + Если Не СтрНачинаетсяС(ЭлементКоллекции.Имя, НачалоИмени) Тогда + Продолжить; + КонецЕсли; + НомерЭлемента = Сред(ЭлементКоллекции.Имя, СтрДлина(НачалоИмени) + 1); + Если СтрДлина(НомерЭлемента) < 1 Или СтрДлина(НомерЭлемента) > 2 Тогда + КоличествоПодобных = 0; + Прервать; + КонецЕсли; + Если Не ( Лев(НомерЭлемента, 1) >= "0" И Лев(НомерЭлемента, 1) <= "9" ) Тогда + КоличествоПодобных = 0; + Прервать; + КонецЕсли; + Если СтрДлина(НомерЭлемента) = 2 + И Не ( Лев(НомерЭлемента, 2) >= "0" И Лев(НомерЭлемента, 2) <= "9" ) Тогда + КоличествоПодобных = 0; + Прервать; + КонецЕсли; + НомерЭлемента = Число(НомерЭлемента); + Если НомерЭлемента < НачальныйНомер Тогда + КоличествоПодобных = 0; + Прервать; + КонецЕсли; + + КоличествоПодобных = КоличествоПодобных + 1; + МаксимальныйНомер = ?(МаксимальныйНомер > НомерЭлемента, МаксимальныйНомер, НомерЭлемента); + КонецЦикла; + + Если МаксимальныйНомер - НачальныйНомер + 1 <> КоличествоПодобных Тогда + КоличествоПодобных = 0; + КонецЕсли; + + Возврат КоличествоПодобных; + +КонецФункции + +// Для функции ДопустимыеТипыЗначенийКлючейДоступа. +Процедура УточнитьДопустимыеТипы(ДопустимыеТипы, Реквизит); + + Индекс = ДопустимыеТипы.Количество() - 1; + ОписаниеТипов = Реквизит.Тип; + + Пока Индекс >= 0 Цикл + Если Не ОписаниеТипов.СодержитТип(ДопустимыеТипы[Индекс]) Тогда + ДопустимыеТипы.Удалить(Индекс); + КонецЕсли; + Индекс = Индекс - 1; + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl index 05d3113bb..7c50168f2 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl @@ -8,7 +8,7 @@ // Параметры: // СсылкиИлиОбъекты - Массив - владельцы контактной информации. // ТипыКонтактнойИнформации - Массив, ПеречислениеСсылка.ТипыКонтактнойИнформации - Если указаны, то будет получена -// контактную информацию только этих типов. +// контактная информация только этих типов. // ВидыКонтактнойИнформации - Массив, СправочникСсылка.ВидыКонтактнойИнформации - Если указаны, то будет получена // контактную информацию только этих видов. // Дата - Дата - необязательный, дата с которой действует запись контактной информации, @@ -21,9 +21,11 @@ // * СсылкиИлиОбъекты - Ссылка - Владелец контактной информации. // * Вид - СправочникСсылка.ВидыКонтактнойИнформации - Вид контактной информации. // * Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - Тип контактной информации. -// * ЗначенияПолей - Строка - XML соответствующий XDTO пакету КонтактнаяИнформация или Адрес. +// * Значение - Строка - контактная информация во внутреннем формате JSON. // * Представление - Строка - Представление контактной информации. -// * Дата - Дата - Дата с которой действует запись контактной информации. +// * Дата - Дата - Дата, с которой действует запись контактной информации. +// * ЗначенияПолей - Строка - устаревший XML, соответствующий XDTO пакетам КонтактнаяИнформация или Адрес. Для +// обратной совместимости. // Функция КонтактнаяИнформацияОбъектов(СсылкиИлиОбъекты, Знач ТипыКонтактнойИнформации = Неопределено, Знач ВидыКонтактнойИнформации = Неопределено, Дата = Неопределено) Экспорт @@ -52,12 +54,21 @@ | КонтактнаяИнформация.Вид КАК Вид, | КонтактнаяИнформация.Тип КАК Тип, | КонтактнаяИнформация.ЗначенияПолей КАК ЗначенияПолей, + | КонтактнаяИнформация.Значение КАК Значение, | " + ДействуетС +" КАК Дата, | КонтактнаяИнформация.Представление КАК Представление |ИЗ | ВТКонтактнаяИнформация КАК КонтактнаяИнформация"; - Возврат Запрос.Выполнить().Выгрузить(); + Результат = Запрос.Выполнить().Выгрузить(); + Для каждого СтрокаКонтактнойИнформации Из Результат Цикл + Если ПустаяСтрока(СтрокаКонтактнойИнформации.Значение) + И ЗначениеЗаполнено(СтрокаКонтактнойИнформации.ЗначенияПолей) Тогда + СтрокаКонтактнойИнформации.Значение = КонтактнаяИнформацияВJSON(СтрокаКонтактнойИнформации.ЗначенияПолей); + КонецЕсли; + КонецЦикла; + + Возврат Результат; КонецФункции @@ -80,7 +91,8 @@ // * СсылкиИлиОбъекты - Ссылка - Владелец контактной информации. // * Вид - СправочникСсылка.ВидыКонтактнойИнформации - Вид контактной информации. // * Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - Тип контактной информации. -// * ЗначенияПолей - Строка - XML соответствующий XDTO пакету КонтактнаяИнформация или Адрес. +// * ЗначенияПолей - Строка - XML, соответствующий XDTO пакетам КонтактнаяИнформация или Адрес. +// * Значение - Строка - контактная информация во внутреннем формате JSON. // * Представление - Строка - Представление контактной информации. // * Дата - Дата - Дата с которой действует запись контактной информации. // @@ -93,11 +105,15 @@ Если МетаданныеОбъекта <> Неопределено И МетаданныеОбъекта.ТабличныеЧасти.Найти("КонтактнаяИнформация") <> Неопределено Тогда - Для каждого СтрокаКонтактнаяИнформация Из СсылкаИлиОбъект.КонтактнаяИнформация Цикл + Для каждого СтрокаКонтактнойИнформации Из СсылкаИлиОбъект.КонтактнаяИнформация Цикл Если ВидКонтактнойИнформации = Неопределено - ИЛИ СтрокаКонтактнаяИнформация.Вид = ВидКонтактнойИнформации Тогда + ИЛИ СтрокаКонтактнойИнформации.Вид = ВидКонтактнойИнформации Тогда НоваяСтрока = Результат.Добавить(); - ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаКонтактнаяИнформация); + ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаКонтактнойИнформации); + Если ПустаяСтрока(НоваяСтрока.Значение) + И ЗначениеЗаполнено(НоваяСтрока.ЗначенияПолей) Тогда + НоваяСтрока.Значение = КонтактнаяИнформацияВJSON(НоваяСтрока.ЗначенияПолей); + КонецЕсли; НоваяСтрока.Объект = СсылкаИлиОбъект; КонецЕсли; КонецЦикла; @@ -207,10 +223,11 @@ // Это нужно, если в таблице необходимо хранить контактной информацию для нескольких объектов. // // Возвращаемое значение: -// ТаблицаЗначений - результат. Колонки: -// * Объект - ЛюбаяСсылка - Ссылка на владельца контактной информации. +// ТаблицаЗначений - с колонками: +// * Объект - ЛюбаяСсылка - Владелец контактной информации. // * Вид - СправочникСсылка.ВидыКонтактнойИнформации - Вид контактной информации. // * Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - Тип контактной информации. +// * Значение - Строка - JSON соответствующий структуре контактной информации. // * ЗначенияПолей - Строка - XML соответствующий XDTO пакету КонтактнаяИнформация или Адрес. // * Представление - Строка - Представление контактной информации. // * Дата - Дата - Дата с которой действует запись контактной информации. @@ -218,14 +235,15 @@ Функция НоваяКонтактнаяИнформация(КолонкаОбъект = Истина) Экспорт КонтактнаяИнформация = Новый ТаблицаЗначений; - ОписаниеТиповСтрока500 = Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(500)); + ОписаниеТиповСтрока1500 = Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(1500)); Если КолонкаОбъект Тогда КонтактнаяИнформация.Колонки.Добавить("Объект"); КонецЕсли; - КонтактнаяИнформация.Колонки.Добавить("Представление", ОписаниеТиповСтрока500); + КонтактнаяИнформация.Колонки.Добавить("Представление", ОписаниеТиповСтрока1500); КонтактнаяИнформация.Колонки.Добавить("ЗначенияПолей", Новый ОписаниеТипов("Строка")); + КонтактнаяИнформация.Колонки.Добавить("Значение", Новый ОписаниеТипов("Строка")); КонтактнаяИнформация.Колонки.Добавить("Вид", Новый ОписаниеТипов("СправочникСсылка.ВидыКонтактнойИнформации")); КонтактнаяИнформация.Колонки.Добавить("Тип", Новый ОписаниеТипов("ПеречислениеСсылка.ТипыКонтактнойИнформации")); КонтактнаяИнформация.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата")); @@ -234,14 +252,15 @@ КонецФункции -// Добавляет контактную информацию к объекту по представлению или XML. +// Добавляет контактную информацию к объекту по представлению или JSON. // // Параметры: // СсылкаИлиОбъект - Произвольный - Ссылка или объект владельца содержащего контактную информацию. // Для ссылки после добавления контактной информации владелец будет записан. // Если передан объект, то контактная информация будет добавлена без записи. // Для сохранения изменений объект необходимо будет записать отдельно. -// ЗначениеИлиПредставление - Строка - Представление или XML соответствующего XDTO пакету КонтактнаяИнформация или Адрес. +// ЗначениеИлиПредставление - Строка - Представление, JSON или XML соответствующего XDTO пакету КонтактнаяИнформация +// или Адрес. // ВидКонтактнойИнформации - СправочникСсылка.ВидыКонтактнойИнформации - Вид добавляемой контактной информации. // Дата - Дата - Дата, с которой будет действовать запись контактной информации. // Требуется для контактной информации, у которой хранится история изменений. @@ -261,8 +280,12 @@ Объект = СсылкаИлиОбъект; Записывать = Ложь; КонецЕсли; - КонтактнаяИнформация = Объект.КонтактнаяИнформация; - ЭтоКонтактнаяИнформацияВXML = УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(ЗначениеИлиПредставление); + + КонтактнаяИнформация = Объект.КонтактнаяИнформация; + ЭтоКонтактнаяИнформацияВXML = УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(ЗначениеИлиПредставление); + ЭтоКонтактнаяИнформацияВJSON = УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(ЗначениеИлиПредставление); + ЭтоКонтактнаяИнформацияВСтруктуреJSON = ТипЗнч(ЗначениеИлиПредставление) = Тип("Структура"); + СвойстваВидаКонтактнойИнформации = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВидКонтактнойИнформации, "Тип, ХранитьИсториюИзменений"); МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(Объект)); Если МетаданныеОбъекта = Неопределено @@ -270,15 +293,30 @@ ВызватьИсключение НСтр("ru = 'Добавление контактной информации невозможно, у объекта нет таблицы с контактной информацией.'");; КонецЕсли; - ФорматКонтактнойИнформации = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВидКонтактнойИнформации, "Тип, ВключатьСтрануВПредставление, ПроверятьПоФИАС"); - Если ЭтоКонтактнаяИнформацияВXML Тогда - ФорматКонтактнойИнформации.Вставить("ФорматАдреса", ?(ФорматКонтактнойИнформации.ПроверятьПоФИАС, "ФИАС", "КЛАДР")); - Представление = УправлениеКонтактнойИнформациейСлужебный.ПредставлениеКонтактнойИнформации(ЗначениеИлиПредставление, ФорматКонтактнойИнформации); - ЗначенияПолей = ЗначениеИлиПредставление; + Если ЭтоКонтактнаяИнформацияВСтруктуреJSON Тогда + + ОбъектКонтактнойИнформации = ЗначениеИлиПредставление; + Значение = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(ЗначениеИлиПредставление); + ЗначенияПолей = КонтактнаяИнформацияВXML(Значение); + Представление = ОбъектКонтактнойИнформации.Value; + Иначе - КонтактнаяИнформацияXDTO = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOПоПредставлению(ЗначениеИлиПредставление, ВидКонтактнойИнформации); - ЗначенияПолей = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOВXML(КонтактнаяИнформацияXDTO); - Представление = ЗначениеИлиПредставление; + + Если ЭтоКонтактнаяИнформацияВXML Тогда + + ЗначенияПолей = ЗначениеИлиПредставление; + Значение = КонтактнаяИнформацияВJSON(ЗначениеИлиПредставление, СвойстваВидаКонтактнойИнформации.Тип); + ОбъектКонтактнойИнформации = УправлениеКонтактнойИнформациейСлужебный.СтрокаJSONВСтруктуру(Значение); + Представление = ОбъектКонтактнойИнформации.Value; + + Иначе + ОбъектКонтактнойИнформации = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияПоПредставлению(ЗначениеИлиПредставление, СвойстваВидаКонтактнойИнформации.Тип); + Значение = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(ОбъектКонтактнойИнформации); + ЗначенияПолей = КонтактнаяИнформацияВXML(Значение); + Представление = ЗначениеИлиПредставление; + + КонецЕсли; + КонецЕсли; Если Замещать Тогда @@ -289,9 +327,11 @@ СтрокаКонтактнойИнформации = КонтактнаяИнформация.Добавить(); Иначе Если ЭтоКонтактнаяИнформацияВXML Тогда - СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Найти(ЗначениеИлиПредставление, "ЗначенияПолей") + СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Найти(ЗначениеИлиПредставление, "ЗначенияПолей"); + ИначеЕсли ЭтоКонтактнаяИнформацияВJSON Тогда + СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Найти(ЗначениеИлиПредставление, "Значение"); Иначе - СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Найти(ЗначениеИлиПредставление, "Представление") + СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Найти(ЗначениеИлиПредставление, "Представление"); КонецЕсли; Если СтрокаКонтактнойИнформации = Неопределено Тогда Если ЗапрещенВводНесколькихЗначений(ВидКонтактнойИнформации, КонтактнаяИнформация, Дата) Тогда @@ -301,16 +341,16 @@ КонецЕсли; КонецЕсли; - СтрокаКонтактнойИнформации.Представление = Представление; - СтрокаКонтактнойИнформации.ЗначенияПолей = ЗначенияПолей; - СтрокаКонтактнойИнформации.Вид = ВидКонтактнойИнформации; - СтрокаКонтактнойИнформации.Тип = ФорматКонтактнойИнформации.Тип; - Если ВидКонтактнойИнформации.ХранитьИсториюИзменений И ЗначениеЗаполнено(Дата) Тогда + СтрокаКонтактнойИнформации.Значение = Значение; + СтрокаКонтактнойИнформации.Представление = Представление; + СтрокаКонтактнойИнформации.ЗначенияПолей = ЗначенияПолей; + СтрокаКонтактнойИнформации.Вид = ВидКонтактнойИнформации; + СтрокаКонтактнойИнформации.Тип = СвойстваВидаКонтактнойИнформации.Тип ; + Если СвойстваВидаКонтактнойИнформации.ХранитьИсториюИзменений И ЗначениеЗаполнено(Дата) Тогда СтрокаКонтактнойИнформации.ДействуетС = Дата; КонецЕсли; - ОбъектКонтактнойИнформации = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзXML(СтрокаКонтактнойИнформации.ЗначенияПолей, ВидКонтактнойИнформации); - ЗаполнитьТехническиеПоляКонтактнойИнформации(СтрокаКонтактнойИнформации, ОбъектКонтактнойИнформации, ФорматКонтактнойИнформации.Тип); + ЗаполнитьТехническиеПоляКонтактнойИнформации(СтрокаКонтактнойИнформации, ОбъектКонтактнойИнформации, СвойстваВидаКонтактнойИнформации.Тип); Если Записывать Тогда Объект.Записать(); @@ -357,7 +397,7 @@ ВладельцыКонтактнойИнформации.Вставить(СтрокаКонтактнойИнформации.Объект, ПараметрыКонтактнойИнформации); КонецЕсли; - ВосстановитьПустыеЗначениеПредставление(СтрокаКонтактнойИнформации); + ОбработатьСтрокуКонтактнойИнформации(СтрокаКонтактнойИнформации); КонецЦикла; @@ -394,6 +434,9 @@ Если ХранитьИсториюИзменений Тогда Отбор.Вставить("ДействуетС", СтрокаКонтактнойИнформацииОбъекта.Дата); НайденныеСтроки = Объект.КонтактнаяИнформация.НайтиСтроки(Отбор); + ИначеЕсли ЗначениеЗаполнено(СтрокаКонтактнойИнформацииОбъекта.Значение) Тогда + Отбор.Вставить("Значение", СтрокаКонтактнойИнформацииОбъекта.Значение); + НайденныеСтроки = Объект.КонтактнаяИнформация.НайтиСтроки(Отбор); Иначе Отбор.Вставить("ЗначенияПолей", СтрокаКонтактнойИнформацииОбъекта.ЗначенияПолей); НайденныеСтроки = Объект.КонтактнаяИнформация.НайтиСтроки(Отбор); @@ -439,7 +482,7 @@ Процедура УстановитьКонтактнуюИнформациюОбъекта(СсылкаИлиОбъект, Знач КонтактнаяИнформация, Замещать = Истина) Экспорт ЭтоСсылка = ОбщегоНазначения.ЗначениеСсылочногоТипа(СсылкаИлиОбъект); - Объект =?(ЭтоСсылка, СсылкаИлиОбъект.ПолучитьОбъект(), СсылкаИлиОбъект); + Объект =?(ЭтоСсылка, СсылкаИлиОбъект.ПолучитьОбъект(), СсылкаИлиОбъект); МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(СсылкаИлиОбъект)); Если МетаданныеОбъекта = Неопределено @@ -461,7 +504,7 @@ Периодическая = МетаданныеОбъекта.ТабличныеЧасти.КонтактнаяИнформация.Реквизиты.Найти("ДействуетС") <> Неопределено; Для каждого СтрокаКонтактнойИнформации Из КонтактнаяИнформация Цикл - ВосстановитьПустыеЗначениеПредставление(СтрокаКонтактнойИнформации); + ОбработатьСтрокуКонтактнойИнформации(СтрокаКонтактнойИнформации); КонецЦикла; Если Замещать Тогда @@ -496,6 +539,9 @@ Если ХранитьИсториюИзменений Тогда Отбор.Вставить("ДействуетС", СтрокаКонтактнойИнформацииОбъекта.Дата); НайденныеСтроки = Объект.КонтактнаяИнформация.НайтиСтроки(Отбор); + ИначеЕсли ЗначениеЗаполнено(СтрокаКонтактнойИнформацииОбъекта.Значение) Тогда + Отбор.Вставить("Значение", СтрокаКонтактнойИнформацииОбъекта.Значение); + НайденныеСтроки = Объект.КонтактнаяИнформация.НайтиСтроки(Отбор); Иначе Отбор.Вставить("ЗначенияПолей", СтрокаКонтактнойИнформацииОбъекта.ЗначенияПолей); НайденныеСтроки = Объект.КонтактнаяИнформация.НайтиСтроки(Отбор); @@ -524,6 +570,29 @@ //////////////////////////////////////////////////////////////////////////////// // Работа с контактной информацией из других подсистем. +// Преобразует все входящие форматы контактной информации в JSON. +// +// Параметры: +// КонтактнаяИнформация - Строка, Структура, Соответствие, СписокЗначений - Описание полей контактной информации. +// ОжидаемыйВид - СправочникСсылка.ВидыКонтактнойИнформации, ПеречислениеСсылка.ТипыКонтактнойИнформации - +// Используется для определения типа, если его невозможно вычислить по полю ЗначенияПолей. +// +// Возвращаемое значение: +// Строка - Контактная информация в формате JSON советующей структуре описанной в функции ОписаниеНовойКонтактнойИнформации +// общего модуля УправлениеКонтактнойИнформациейКлиентСервер. +// Поля могут быть расширены национальной спецификой в одноименной функции общего модуля РаботаСАдресамиКлиентСервер. +// +Функция КонтактнаяИнформацияВJSON(Знач КонтактнаяИнформация, Знач ОжидаемыйВид = Неопределено) Экспорт + + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(КонтактнаяИнформация) Тогда + Возврат КонтактнаяИнформация; + КонецЕсли; + + КонтактнаяИнформацияПоПолям = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация, ОжидаемыйВид); + Возврат УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(КонтактнаяИнформацияПоПолям); + +КонецФункции + // Преобразует все входящие форматы контактной информации в XML. // // Параметры: @@ -539,7 +608,7 @@ Функция КонтактнаяИнформацияВXML(Знач ЗначенияПолей, Знач Представление = "", Знач ОжидаемыйВид = Неопределено) Экспорт Результат = УправлениеКонтактнойИнформациейСлужебный.ПривестиКонтактнуюИнформациюXML(Новый Структура( - "ЗначенияПолей, Представление, ВидКонтактнойИнформации", + "ЗначенияПолей, Представление, ВидКонтактнойИнформации", ЗначенияПолей, Представление, ОжидаемыйВид)); Возврат Результат.ДанныеXML; @@ -548,17 +617,27 @@ // Возвращает тип контактной информации. // // Параметры: -// XMLСтрока - Строка - Контактная информация в виде XML советующего структуре XDTO пакетов КонтактнаяИнформация и Адрес. +// КонтактнаяИнформация - Строка - Контактная информация в виде XML советующего структуре XDTO пакетов КонтактнаяИнформация и Адрес. // // Возвращаемое значение: // ПеречислениеСсылка.ТипыКонтактнойИнформации - соответствующий тип. // -Функция ТипКонтактнойИнформации(Знач XMLСтрока) Экспорт - Возврат УправлениеКонтактнойИнформациейСлужебный.ТипКонтактнойИнформации(XMLСтрока); +Функция ТипКонтактнойИнформации(Знач КонтактнаяИнформация) Экспорт + + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(КонтактнаяИнформация) Тогда + + КонтактнаяИнформацияСтруктурой = УправлениеКонтактнойИнформациейСлужебный.СтрокаJSONВСтруктуру(КонтактнаяИнформация); + Если ТипЗнч(КонтактнаяИнформацияСтруктурой) = Тип("Структура") И КонтактнаяИнформацияСтруктурой.Свойство("type") Тогда + Возврат Перечисления.ТипыКонтактнойИнформации[КонтактнаяИнформацияСтруктурой.type]; + КонецЕсли; + + КонецЕсли; + + Возврат УправлениеКонтактнойИнформациейСлужебный.ТипКонтактнойИнформации(КонтактнаяИнформация); КонецФункции -// Преобразует представление контактной информации в XML строку соответствующую структуре -// XDTO пакетам КонтактнаяИнформация и Адрес. +// Преобразует представление контактной информации во внутренний формат JSON. +// // Для адресов, введенных в свободной форме, корректное преобразование не гарантируется. // // Параметры: @@ -567,20 +646,20 @@ // Структура - Вид или тип контактной информации. // // Возвращаемое значение: -// Строка - Контактная информация в виде XML советующего структуре XDTO пакетов КонтактнаяИнформация и Адрес. +// Строка - Контактная информация в виде JSON. // -Функция КонтактнаяИнформацияXMLПоПредставлению(Представление, ОжидаемыйВид) Экспорт +Функция КонтактнаяИнформацияПоПредставлению(Представление, ОжидаемыйВид) Экспорт - Возврат УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOВXML( - УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOПоПредставлению(Представление, ОжидаемыйВид)); + Возврат УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON( + УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияПоПредставлению(Представление, ОжидаемыйВид)); КонецФункции // Возвращает представление контактной информации (адреса, телефона, электронной почты и т.п.). // // Параметры: -// XMLСтрока - Строка, ОбъектXDTO - Строка XML или объект XDTO соответствующие XDTO пакетам -// КонтактнаяИнформация или Адрес. +// КонтактнаяИнформация - Строка, ОбъектXDTO - Строка JSON или XML контактной информации соответствующая +// XDTO пакетам КонтактнаяИнформация или Адрес. // ВидКонтактнойИнформации - Структура - Дополнительные параметры, влияющие на формирование представления адреса: // * ВключатьСтрануВПредставление - Булево - В представление будет включена страна адреса; // * ФорматАдреса - Строка - Варианты "ФИАС" или "КЛАДР". @@ -590,55 +669,73 @@ // Возвращаемое значение: // Строка - Представление контактной информации. // -Функция ПредставлениеКонтактнойИнформации(Знач XMLСтрока, Знач ВидКонтактнойИнформации = Неопределено) Экспорт +Функция ПредставлениеКонтактнойИнформации(Знач КонтактнаяИнформация, Знач ВидКонтактнойИнформации = Неопределено) Экспорт - Возврат УправлениеКонтактнойИнформациейСлужебный.ПредставлениеКонтактнойИнформации(XMLСтрока, ВидКонтактнойИнформации); + Возврат УправлениеКонтактнойИнформациейСлужебный.ПредставлениеКонтактнойИнформации(КонтактнаяИнформация, ВидКонтактнойИнформации); КонецФункции // Возвращает комментарий контактной информации. // // Параметры: -// XMLСтрока - ОбъектXDTO, Строка - Строка XML или объект XDTO соответствующие XDTO пакетам +// КонтактнаяИнформация - Строка - Строка JSON или XML или объект XDTO соответствующие XDTO пакетам // КонтактнаяИнформация или Адрес. // // Возвращаемое значение: // Строка - Комментарий контактной информации или пустая строка, -// если значение параметра XMLСтрока не является контактной информацией. +// если значение параметра не является контактной информацией. // -Функция КомментарийКонтактнойИнформации(XMLСтрока) Экспорт +Функция КомментарийКонтактнойИнформации(КонтактнаяИнформация) Экспорт - ЭтоСтрока = ТипЗнч(XMLСтрока) = Тип("Строка"); - - Если ЭтоСтрока И Не УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(XMLСтрока) Тогда - // Предыдущий формат значений полей, комментарий отсутствует. + Если ПустаяСтрока(КонтактнаяИнформация) Тогда Возврат ""; КонецЕсли; + + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнформация) Тогда + КонтактнаяИнформацияСтруктурой = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация); + ИначеЕсли УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(КонтактнаяИнформация) Тогда + КонтактнаяИнформацияСтруктурой = УправлениеКонтактнойИнформациейСлужебный.СтрокаJSONВСтруктуру(КонтактнаяИнформация); + Иначе + КонтактнаяИнформацияВXML = КонтактнаяИнформацияВXML(КонтактнаяИнформация); + КонтактнаяИнформацияСтруктурой = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформацияВXML); + КонецЕсли; - ОбъектXDTO = ?(ЭтоСтрока, УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзXML(XMLСтрока), XMLСтрока); - Возврат ОбъектXDTO.Комментарий; + Если КонтактнаяИнформацияСтруктурой.Свойство("Comment") Тогда + Возврат КонтактнаяИнформацияСтруктурой.Comment; + КонецЕсли; + + Возврат ""; КонецФункции // Устанавливает новый комментарий для контактной информации. // // Параметры: -// XMLСтрока - ОбъектXDTO, Строка - Строка XML или объект XDTO соответствующие XDTO пакетам -// КонтактнаяИнформация или Адрес. -// Комментарий - Строка - Новое значение комментария. +// КонтактнаяИнформация - Строка, ОбъектXDTO - Строка JSON или XML контактной информации соответствующая XDTO +// пакетам КонтактнаяИнформация или Адрес. +// Комментарий - Строка - Новое значение комментария. // -Процедура УстановитьКомментарийКонтактнойИнформации(XMLСтрока, Знач Комментарий) Экспорт +Процедура УстановитьКомментарийКонтактнойИнформации(КонтактнаяИнформация, Знач Комментарий) Экспорт - ЭтоСтрока = ТипЗнч(XMLСтрока) = Тип("Строка"); - Если ЭтоСтрока И Не УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(XMLСтрока) Тогда + ЭтоСтрока = ТипЗнч(КонтактнаяИнформация) = Тип("Строка"); + + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(КонтактнаяИнформация) Тогда + + КонтактнаяИнформацияСтруктурой = УправлениеКонтактнойИнформациейСлужебный.СтрокаJSONВСтруктуру(КонтактнаяИнформация); + Если ТипЗнч(КонтактнаяИнформацияСтруктурой) = Тип("Структура") И КонтактнаяИнформацияСтруктурой.Свойство("comment") Тогда + КонтактнаяИнформацияСтруктурой.comment = Комментарий; + КонецЕсли; + Возврат; + + ИначеЕсли ЭтоСтрока И Не УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнформация) Тогда // Предыдущий формат значений полей, комментарий отсутствует. Возврат; КонецЕсли; - ОбъектXDTO = ?(ЭтоСтрока, УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзXML(XMLСтрока), XMLСтрока); + ОбъектXDTO = ?(ЭтоСтрока, УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзXML(КонтактнаяИнформация), КонтактнаяИнформация); ОбъектXDTO.Комментарий = Комментарий; Если ЭтоСтрока Тогда - XMLСтрока = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOВXML(ОбъектXDTO); + КонтактнаяИнформация = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOВXML(ОбъектXDTO); КонецЕсли; КонецПроцедуры @@ -650,7 +747,8 @@ // Если страна не найдена ни в адресе, ни в классификаторе ОКСМ, то будет заполнено только поле "Наименование". // // Параметры: -// XMLСтрока - Строка - Строка XML соответствующая XDTO пакетам КонтактнаяИнформация или Адрес. +// Адрес - Структура, Строка - Адрес в формате JSON или строка XML соответствующая XDTO пакетам КонтактнаяИнформация +// или Адрес. // // Возвращаемое значение: // Структура - Описание страны адреса. Содержит поля: @@ -661,50 +759,59 @@ // * КодАльфа2 - Строка - Двузначный буквенный код страны альфа-2. // * КодАльфа3 - Строка - Трехзначный буквенный код страны альфа-3. // -Функция СтранаАдресаКонтактнойИнформации(Знач XMLСтрока) Экспорт +Функция СтранаАдресаКонтактнойИнформации(Знач Адрес) Экспорт Результат = Новый Структура("Ссылка, Код, Наименование, НаименованиеПолное, КодАльфа2, КодАльфа3"); - Если ПустаяСтрока(XMLСтрока) Тогда - Возврат Результат; - КонецЕсли; - // Читаем наименование страны - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); - Чтение = Новый ЧтениеXML; - Чтение.УстановитьСтроку(XMLСтрока); - XDTOАдрес = ФабрикаXDTO.ПрочитатьXML(Чтение, ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); - Адрес = XDTOАдрес.Состав; - Если Адрес = Неопределено Или Адрес.Тип() <> ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") Тогда + Если ТипЗнч(Адрес) = Тип("Строка") Тогда + + Если ПустаяСтрока(Адрес) Тогда + Возврат Результат; + КонецЕсли; + + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(Адрес) Тогда + Адрес = КонтактнаяИнформацияВJSON(Адрес, Перечисления.ТипыКонтактнойИнформации.Адрес); + КонецЕсли; + + Адрес = УправлениеКонтактнойИнформациейСлужебный.СтрокаJSONВСтруктуру(Адрес); + + ИначеЕсли ТипЗнч(Адрес) <> Тип("Структура") Тогда + ВызватьИсключение НСтр("ru = 'Невозможно определить страну, ожидается адрес.'"); + КонецЕсли; - Результат.Наименование = СокрЛП(Адрес.Страна); + Результат.Наименование = СокрЛП(Адрес.Country); ДанныеСтраны = ДанныеСтраныМира(, Результат.Наименование); Возврат ?(ДанныеСтраны = Неопределено, Результат, ДанныеСтраны); + КонецФункции // Возвращает домен сетевого адреса для веб-ссылки или адреса электронной почты. // // Параметры: -// XMLСтрока - Строка - Строка XML контактной информации соответствующая XDTO пакету КонтактнаяИнформация. +// КонтактнаяИнформация - Строка - Строка JSON или XML контактной информации соответствующая XDTO пакету КонтактнаяИнформация. // // Возвращаемое значение: // Строка - Домен адреса. // -Функция ДоменАдресаКонтактнойИнформации(Знач XMLСтрока) Экспорт - Если ПустаяСтрока(XMLСтрока) Тогда +Функция ДоменАдресаКонтактнойИнформации(Знач КонтактнаяИнформация) Экспорт + + Если ПустаяСтрока(КонтактнаяИнформация) Тогда Возврат ""; КонецЕсли; - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); - Чтение = Новый ЧтениеXML; - Чтение.УстановитьСтроку(XMLСтрока); - XDTOАдрес = ФабрикаXDTO.ПрочитатьXML(Чтение, ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); - Состав = XDTOАдрес.Состав; - Если Состав <> Неопределено Тогда - Тип = Состав.Тип(); - Если Тип = ФабрикаXDTO.Тип(ПространствоИмен, "ВебСайт") Тогда - ДоменАдреса = СокрЛП(Состав.Значение); + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнформация) Тогда + КонтактнаяИнформацияСтруктурой = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация); + ИначеЕсли УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(КонтактнаяИнформация) Тогда + КонтактнаяИнформацияСтруктурой = УправлениеКонтактнойИнформациейСлужебный.СтрокаJSONВСтруктуру(КонтактнаяИнформация); + КонецЕсли; + + Если КонтактнаяИнформацияСтруктурой.Свойство("Type") И КонтактнаяИнформацияСтруктурой.Свойство("Value") Тогда + + ДоменАдреса = СокрЛП(КонтактнаяИнформацияСтруктурой.Value); + Если Строка(КонтактнаяИнформацияСтруктурой.Type) = Строка(Перечисления.ТипыКонтактнойИнформации.ВебСтраница) Тогда + Позиция = СтрНайти(ДоменАдреса, "://"); Если Позиция > 0 Тогда ДоменАдреса = Сред(ДоменАдреса, Позиция + 3); @@ -712,12 +819,13 @@ Позиция = СтрНайти(ДоменАдреса, "/"); Возврат ?(Позиция = 0, ДоменАдреса, Лев(ДоменАдреса, Позиция - 1)); - ИначеЕсли Тип = ФабрикаXDTO.Тип(ПространствоИмен, "ЭлектроннаяПочта") Тогда - ДоменАдреса = СокрЛП(Состав.Значение); + ИначеЕсли Строка(КонтактнаяИнформацияСтруктурой.Type) = Строка(Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты) Тогда + Позиция = СтрНайти(ДоменАдреса, "@"); Возврат ?(Позиция = 0, ДоменАдреса, Сред(ДоменАдреса, Позиция + 1)); КонецЕсли; + КонецЕсли; ВызватьИсключение НСтр("ru = 'Невозможно определить домен, ожидается электронная почта или веб-ссылка.'"); @@ -726,33 +834,31 @@ // Возвращает строку с номером телефона без кода и дополнительного номера. // // Параметры: -// XMLСтрока - Строка - Строка XML контактной информации соответствующая XDTO пакету КонтактнаяИнформация. +// КонтактнаяИнформация - Строка - Строка JSON или XML контактной информации соответствующая XDTO пакету КонтактнаяИнформация. // // Возвращаемое значение: // Строка - Номер телефона. // -Функция НомерТелефонаКонтактнойИнформации(Знач XMLСтрока) Экспорт - Если ПустаяСтрока(XMLСтрока) Тогда +Функция НомерТелефонаКонтактнойИнформации(Знач КонтактнаяИнформация) Экспорт + + Если ПустаяСтрока(КонтактнаяИнформация) Тогда Возврат ""; КонецЕсли; - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); - Чтение = Новый ЧтениеXML; - Чтение.УстановитьСтроку(XMLСтрока); - XDTOАдрес = ФабрикаXDTO.ПрочитатьXML(Чтение, ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); - Состав = XDTOАдрес.Состав; - Если Состав <> Неопределено Тогда - Тип = Состав.Тип(); - Если Тип = ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона") Тогда - Возврат СокрЛП(Состав.Номер); - - ИначеЕсли Тип = ФабрикаXDTO.Тип(ПространствоИмен, "НомерФакса") Тогда - Возврат СокрЛП(Состав.Номер); - - КонецЕсли; + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнформация) Тогда + КонтактнаяИнформацияСтруктурой = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация); + ИначеЕсли УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(КонтактнаяИнформация) Тогда + КонтактнаяИнформацияСтруктурой = УправлениеКонтактнойИнформациейСлужебный.СтрокаJSONВСтруктуру(КонтактнаяИнформация); + КонецЕсли; + + Если КонтактнаяИнформацияСтруктурой.Свойство("Number") Тогда + + Возврат СокрЛП(КонтактнаяИнформацияСтруктурой.Number); + КонецЕсли; ВызватьИсключение НСтр("ru = 'Невозможно определить номер, ожидается телефона или факс.'"); + КонецФункции // Сравнивает два экземпляра контактной информации. @@ -881,6 +987,7 @@ | КонтактнаяИнформация.Тип КАК Тип, | КонтактнаяИнформация.ДействуетС КАК ДействуетС, | КонтактнаяИнформация.Представление КАК Представление, + | КонтактнаяИнформация.Значение, | КонтактнаяИнформация.ЗначенияПолей | " + СтрокаВременнойТаблицы + " |ИЗ @@ -896,6 +1003,7 @@ | КонтактнаяИнформация.Тип КАК Тип, | ДАТАВРЕМЯ(1,1,1) КАК ДействуетС, | КонтактнаяИнформация.Представление КАК Представление, + | КонтактнаяИнформация.Значение, | КонтактнаяИнформация.ЗначенияПолей КАК ЗначенияПолей | " + СтрокаВременнойТаблицы + " |ИЗ @@ -1143,6 +1251,7 @@ Возврат Справочники.СтраныМира.ПустаяСсылка(); КонецЕсли; + УстановитьПривилегированныйРежим(Истина); ОбъектСтраны = Справочники.СтраныМира.СоздатьЭлемент(); ЗаполнитьЗначенияСвойств(ОбъектСтраны, ДанныеЗаполнения); ОбъектСтраны.Записать(); @@ -1319,6 +1428,7 @@ | КонтактнаяИнформация.Вид КАК Вид, | ВидыКонтактнойИнформации.ХранитьИсториюИзменений КАК ХранитьИсториюИзменений, | КонтактнаяИнформация.ЗначенияПолей, + | КонтактнаяИнформация.Значение, | """" КАК ДействуетС, | 0 КАК ИдентификаторСтрокиТабличнойЧасти, | ЛОЖЬ КАК ЭтоИсторическаяКонтактнаяИнформация @@ -1378,6 +1488,7 @@ ТекстЗапроса = " ВЫБРАТЬ | КонтактнаяИнформация.Представление КАК Представление, + | КонтактнаяИнформация.Значение КАК Значение, | КонтактнаяИнформация.ЗначенияПолей КАК ЗначенияПолей, | КонтактнаяИнформация.НомерСтроки КАК НомерСтроки, " + ТекстЗапросаИсторическаяИнформация + " | КонтактнаяИнформация.Вид КАК Вид, @@ -1405,6 +1516,7 @@ | ЕСТЬNULL(КонтактнаяИнформация.ЭтоИсторическаяКонтактнаяИнформация, ЛОЖЬ) КАК ЭтоИсторическаяКонтактнаяИнформация, | ЕСТЬNULL(КонтактнаяИнформация.Представление, """") КАК Представление, | ЕСТЬNULL(КонтактнаяИнформация.ЗначенияПолей, """") КАК ЗначенияПолей, + | ЕСТЬNULL(КонтактнаяИнформация.Значение, """") КАК Значение, | ЕСТЬNULL(КонтактнаяИнформация.ДействуетС, 0) КАК ДействуетС, | ЕСТЬNULL(КонтактнаяИнформация.НомерСтроки, 0) КАК НомерСтроки, | 0 КАК ИдентификаторСтрокиТабличнойЧасти, @@ -1443,15 +1555,32 @@ КонтактнаяИнформация = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией).Строки; УстановитьПривилегированныйРежим(Ложь); + // Конвертация + Для Каждого СтрокаКИ Из КонтактнаяИнформация Цикл + Если ПустаяСтрока(СтрокаКИ.Значение) Тогда + Если ЗначениеЗаполнено(СтрокаКИ.ЗначенияПолей) Тогда + + КонтактнаяИнформацияПоПолям = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON(СтрокаКИ.ЗначенияПолей, + СтрокаКИ.Тип, СтрокаКИ.Представление); + СтрокаКИ.Значение = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(КонтактнаяИнформацияПоПолям); + + ИначеЕсли ЗначениеЗаполнено(СтрокаКИ.Представление) Тогда + + СтрокаКИ.Значение = КонтактнаяИнформацияПоПредставлению(СтрокаКИ.Представление, СтрокаКИ.Тип); + + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонтактнаяИнформация.Сортировать("РеквизитДопУпорядочивания, НомерСтроки"); СоздатьРеквизитыКонтактнойИнформации(Форма, ДобавляемыеРеквизиты, ИмяОбъекта, ИсключаемыеВиды, КонтактнаяИнформация, ОтложеннаяИнициализация); ПараметрыКонтактнойИнформации = ПараметрыВыводаКонтактнойИнформации(Форма, ИмяЭлементаДляРазмещения, ПоложениеЗаголовкаКИ, ОтложеннаяИнициализация, ИсключаемыеВиды); - ПараметрыКонтактнойИнформации.Владелец = СсылкаНаОбъект; + ПараметрыКонтактнойИнформации.Владелец = СсылкаНаОбъект; ПараметрыКонтактнойИнформации.ПараметрыАдреса.ТипПомещения = ТипПомещения; - // Кэш значений всех видов контактной информации у данного объекта. + // Кеш значений всех видов контактной информации у данного объекта. ДанныеВидовКонтактнойИнформации = УправлениеКонтактнойИнформациейСлужебный.ДанныеВидовКонтактнойИнформации( КонтактнаяИнформация.ВыгрузитьКолонку("Вид")); @@ -1469,13 +1598,13 @@ Продолжить; КонецЕсли; - Если СтрокаКИ.ПометкаУдаления И ПустаяСтрока(СтрокаКИ.ЗначенияПолей) Тогда + Если СтрокаКИ.ПометкаУдаления И ПустаяСтрока(СтрокаКИ.ЗначенияПолей) И ПустаяСтрока(СтрокаКИ.Значение) Тогда Продолжить; КонецЕсли; - ИндексЭлемента = СозданныеЭлементы.Найти(СтрокаКИ.Вид); + ИндексЭлемента = СозданныеЭлементы.Найти(СтрокаКИ.Вид); СтатическийЭлемент = ИндексЭлемента <> Неопределено; - ЭтоНовыйВидКИ = (СтрокаКИ.Вид <> ПредыдущийВид); + ЭтоНовыйВидКИ = (СтрокаКИ.Вид <> ПредыдущийВид); Если ОтложеннаяИнициализация Тогда @@ -1583,7 +1712,7 @@ ИмяТабличнойЧасти = ИменаТабличныхЧастейПоВидамКИ[РеквизитФормы.Вид]; МассивУдаляемыхРеквизитов.Добавить("Объект." + ИмяТабличнойЧасти + "." + РеквизитФормы.ИмяРеквизита); - МассивУдаляемыхРеквизитов.Добавить("Объект." + ИмяТабличнойЧасти + "." + РеквизитФормы.ИмяРеквизита + "ЗначенияПолей"); + МассивУдаляемыхРеквизитов.Добавить("Объект." + ИмяТабличнойЧасти + "." + РеквизитФормы.ИмяРеквизита + "Значение"); ИначеЕсли НЕ РеквизитФормы.Свойство("ЭтоИсторическаяКонтактнаяИнформация") ИЛИ НЕ РеквизитФормы.ЭтоИсторическаяКонтактнаяИнформация Тогда @@ -1695,18 +1824,18 @@ Если ОбязательноеЗаполнение И ПустаяСтрока(Представление) И Не ВидИнформации.ПометкаУдаления Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не заполнено.'"), ВидИнформации.Наименование),,Поле); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не заполнено.'"), ВидИнформации.Наименование),,Поле); ТекущийУровеньОшибок = 2; Иначе - ЗначенияПолей = СтрокаТабличнойЧастиФормы[ИмяРеквизита + "ЗначенияПолей"]; + Значение = СтрокаТабличнойЧастиФормы[ИмяРеквизита + "Значение"]; - ТекущийУровеньОшибок = ПроверитьЗаполнениеКонтактнойИнформации(Представление, ЗначенияПолей, ВидИнформации, - ТипИнформации, ИмяРеквизита, , Поле); + ТекущийУровеньОшибок = ПроверитьЗаполнениеКонтактнойИнформации(Представление, Значение, ВидИнформации, + ТипИнформации, ИмяРеквизита, , Поле); СтрокаТабличнойЧастиФормы[ИмяРеквизита] = Представление; - СтрокаТабличнойЧастиФормы[ИмяРеквизита + "ЗначенияПолей"] = ЗначенияПолей; + СтрокаТабличнойЧастиФормы[ИмяРеквизита + "Значение"] = Значение; КонецЕсли; @@ -1723,19 +1852,17 @@ Представление = Форма[ИмяРеквизита]; - Если ВидИнформации <> ПредыдущийВид - И ОбязательноеЗаполнение - И ПустаяСтрока(Представление) - И Не ЕстьДругиеЗаполненныеСтрокКИДанногоВида(Форма, СтрокаТаблицы, ВидИнформации) Тогда + Если ВидИнформации <> ПредыдущийВид И ОбязательноеЗаполнение И ПустаяСтрока(Представление) + И Не ЕстьДругиеЗаполненныеСтрокКИДанногоВида(Форма, СтрокаТаблицы, ВидИнформации) Тогда // И нет других строк с данными для видов КИ с множественными значениями. - - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не заполнено.'"), ВидИнформации.Наименование),,, ИмяРеквизита); - ТекущийУровеньОшибок = 2; + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не заполнено.'"), ВидИнформации.Наименование),,, ИмяРеквизита); + ТекущийУровеньОшибок = 2; Иначе - ТекущийУровеньОшибок = ПроверитьЗаполнениеКонтактнойИнформации(Представление, СтрокаТаблицы.ЗначенияПолей, + ТекущийУровеньОшибок = ПроверитьЗаполнениеКонтактнойИнформации(Представление, СтрокаТаблицы.Значение, ВидИнформации, ТипИнформации, ИмяРеквизита, Комментарий); КонецЕсли; @@ -1788,8 +1915,6 @@ КонецЕсли; КонецЕсли; - ВосстановитьПустыеЗначениеПредставление(СтрокаТаблицы); - Если СтрокаТаблицы.ЭтоРеквизитТабличнойЧасти Тогда Если ИменаТабличныхЧастейПоВидамКИ = Неопределено Тогда @@ -1808,9 +1933,8 @@ СтрокаТабличнойЧасти = Объект[ИмяТабличнойЧасти][СтрокаТабличнойЧастиФормы.НомерСтроки - 1]; СтрокаТабличнойЧасти.ИдентификаторСтрокиТабличнойЧасти = ИдентификаторСтроки; - ЗначенияПолей = СтрокаТабличнойЧастиФормы[ИмяРеквизита + "ЗначенияПолей"]; - - ЗаписатьКонтактнуюИнформацию(Объект, ЗначенияПолей, ВидИнформации, ТипИнформации, ИдентификаторСтроки); + Значение = СтрокаТабличнойЧастиФормы[ИмяРеквизита + "Значение"]; + ЗаписатьКонтактнуюИнформацию(Объект, Значение, ВидИнформации, ТипИнформации, ИдентификаторСтроки); КонецЦикла; @@ -1820,7 +1944,7 @@ КонецЕсли; ДействуетС = ?(СтрокаТаблицы.Свойство("ДействуетС"), СтрокаТаблицы.ДействуетС, Неопределено); - ЗаписатьКонтактнуюИнформацию(Объект, СтрокаТаблицы.ЗначенияПолей, ВидИнформации, ТипИнформации,, ДействуетС); + ЗаписатьКонтактнуюИнформацию(Объект, СтрокаТаблицы.Значение, ВидИнформации, ТипИнформации,, ДействуетС); КонецЕсли; КонецЦикла; @@ -1849,27 +1973,43 @@ ИначеЕсли Результат.Свойство("ДобавляемыйВид") Тогда ДобавитьСтрокуКонтактнойИнформации(Форма, Результат, Результат.ИмяЭлементаДляРазмещения); ИначеЕсли Результат.Свойство("ПоменятьМестамиЭлементы") Тогда - ЗначениеПервогоЭлемента = Форма[Результат.ПервыйЭлемент]; - Форма[Результат.ПервыйЭлемент] = Форма[Результат.ВторойЭлемент]; - Форма[Результат.ВторойЭлемент] = ЗначениеПервогоЭлемента ; - // Перемещение комментариев, если они есть. Отбор = Новый Структура("ИмяРеквизита", Результат.ПервыйЭлемент); ОписаниеКонтактнойИнформации = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов; - НайденнаяСтрокаПервыйЭлемент = ОписаниеКонтактнойИнформации.НайтиСтроки(Отбор)[0]; + ПервыйЭлемент = ОписаниеКонтактнойИнформации.НайтиСтроки(Отбор)[0]; Отбор = Новый Структура("ИмяРеквизита", Результат.ВторойЭлемент); - НайденнаяСтрокаВторойЭлемент = ОписаниеКонтактнойИнформации.НайтиСтроки(Отбор)[0]; + ВторойЭлемент = ОписаниеКонтактнойИнформации.НайтиСтроки(Отбор)[0]; + + СписокПереносимыхСвойств = "Комментарий,Представление,Значение,ЗначенияПолей"; + ВременныйБуфер = Новый Структура(СписокПереносимыхСвойств); + + ЗаполнитьЗначенияСвойств(ВременныйБуфер, ПервыйЭлемент); + ЗаполнитьЗначенияСвойств(ПервыйЭлемент, ВторойЭлемент, СписокПереносимыхСвойств); + ЗаполнитьЗначенияСвойств(ВторойЭлемент, ВременныйБуфер); + + Форма[Результат.ПервыйЭлемент] = ПервыйЭлемент.Представление; + Форма[Результат.ВторойЭлемент] = ВторойЭлемент.Представление; + + Форма.Элементы[Результат.ПервыйЭлемент].РасширеннаяПодсказка.Заголовок = ПервыйЭлемент.Комментарий; + Форма.Элементы[Результат.ВторойЭлемент].РасширеннаяПодсказка.Заголовок = ВторойЭлемент.Комментарий; - КомментарийПервыйЭлемент = НайденнаяСтрокаПервыйЭлемент.Комментарий; - НайденнаяСтрокаПервыйЭлемент.Комментарий = НайденнаяСтрокаВторойЭлемент.Комментарий; - НайденнаяСтрокаВторойЭлемент.Комментарий = КомментарийПервыйЭлемент; - Форма.Элементы[Результат.ПервыйЭлемент].РасширеннаяПодсказка.Заголовок = НайденнаяСтрокаПервыйЭлемент.Комментарий; - Форма.Элементы[Результат.ВторойЭлемент].РасширеннаяПодсказка.Заголовок = НайденнаяСтрокаВторойЭлемент.Комментарий; КонецЕсли; Если Результат.Свойство("ОбновитьКонтекстноеМеню") Тогда Если Результат.Свойство("ИмяЭлементаДляРазмещения") Тогда ОбновитьКонтекстноеМеню(Форма, Результат.ИмяЭлементаДляРазмещения); + + Если Результат.Свойство("ИмяРеквизита") Тогда + ОписаниеКонтактнойИнформации = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов; + Отбор = Новый Структура("ИмяРеквизита", Результат.ИмяРеквизита); + НайденнаяСтрока = ОписаниеКонтактнойИнформации.НайтиСтроки(Отбор)[0]; + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(НайденнаяСтрока.Значение) Тогда + КонтактнаяИнформацияПоПолям = УправлениеКонтактнойИнформациейСлужебный.СтрокаJSONВСтруктуру(НайденнаяСтрока.Значение); + КонтактнаяИнформацияПоПолям.Comment = ?(Результат.Свойство("Комментарий"), Результат.Комментарий, ""); + НайденнаяСтрока.Значение = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(КонтактнаяИнформацияПоПолям); + КонецЕсли; + КонецЕсли; + Иначе Для каждого ИмяЭлементаРазмещения Из Форма.ПараметрыКонтактнойИнформации Цикл ОбновитьКонтекстноеМеню(Форма, ИмяЭлементаРазмещения.Ключ); @@ -1878,6 +2018,7 @@ КонецЕсли; Возврат Неопределено; + КонецФункции // Обработчик подписки события "ОбработкаЗаполнения". @@ -1940,7 +2081,7 @@ ПараметрыКонтактнойИнформации = ПараметрыКонтактнойИнформацииФормы(Форма.ПараметрыКонтактнойИнформации, ИмяЭлементаДляРазмещения); - КонтактнаяИнформацияОписаниеДополнительныхРеквизитов = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Выгрузить(, "Вид, Представление, ЗначенияПолей, Комментарий"); + КонтактнаяИнформацияОписаниеДополнительныхРеквизитов = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Выгрузить(, "Вид, Представление, Значение, Комментарий"); Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Очистить(); ПоложениеЗаголовкаКИ = ?(ЗначениеЗаполнено(ПараметрыКонтактнойИнформации.ПоложениеЗаголовка), ПредопределенноеЗначение(ПараметрыКонтактнойИнформации.ПоложениеЗаголовка), ПоложениеЗаголовкаЭлементаФормы.Лево); @@ -2026,22 +2167,18 @@ ИмяРеквизита, Комментарий = Неопределено, ПутьКРеквизиту = "") Экспорт ТекстСериализации = ?(ПустаяСтрока(ЗначенияПолей), Представление, ЗначенияПолей); - - ОбъектКИ = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзXML(ТекстСериализации, ВидИнформации); - Если Комментарий <> Неопределено Тогда - ОбъектКИ.Комментарий = Комментарий; - КонецЕсли; - ОбъектКИ.Представление = Представление; - - Если ПустаяСтрока(Представление) И ПустаяСтрока(ОбъектКИ.Комментарий) Тогда - Возврат 0; + + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(ТекстСериализации) Тогда + ОбъектКИ = КонтактнаяИнформацияВJSON(ТекстСериализации); + Иначе + ОбъектКИ = ЗначенияПолей; КонецЕсли; // Проверка Если ТипИнформации = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда УровеньОшибок = ОшибкиЗаполненияЭлектроннойПочты(ОбъектКИ, ВидИнформации, ИмяРеквизита, ПутьКРеквизиту); ИначеЕсли ТипИнформации = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда - УровеньОшибок = ОшибкиЗаполненияАдреса(ОбъектКИ.Состав, ВидИнформации, ИмяРеквизита); + УровеньОшибок = ОшибкиЗаполненияАдреса(ОбъектКИ, ВидИнформации, ИмяРеквизита); ИначеЕсли ТипИнформации = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда УровеньОшибок = ОшибкиЗаполненияТелефона(ОбъектКИ, ВидИнформации, ИмяРеквизита); ИначеЕсли ТипИнформации = Перечисления.ТипыКонтактнойИнформации.Факс Тогда @@ -2104,9 +2241,6 @@ // Для типа Адрес - Структура, содержащая поля: // * ТолькоНациональныйАдрес - Булево - Истина, если возможен ввод только российских адресов. // * ПроверятьКорректность - Булево - Истина, если требуется запрещать пользователю записывать -// * ПроверятьПоФИАС - Булево - Истина, если требуется проверка адреса по ФИАС, иначе -// проверка по КЛАДР (только если ТолькоНациональныйАдрес = Истина -// и ПроверятьКорректность = Истина). // * ЗапрещатьВводНекорректного - Булево - Устарел. Все переданные значения игнорируются. // Для запрета пользователю записывать некорректные адреса, // следует использовать параметр ПроверятьКорректность. @@ -2206,9 +2340,6 @@ // * ТолькоНациональныйАдрес - Булево - Истина, если возможен ввод только российских адресов. // * ПроверятьКорректность - Булево - Истина, если требуется запрещать пользователю записывать // некорректный адрес (только если ТолькоНациональныйАдрес = Истина). -// * ПроверятьПоФИАС - Булево - Истина, если требуется проверка адреса по ФИАС, иначе -// проверка по КЛАДР (только если ТолькоНациональныйАдрес = Истина -// и ПроверятьКорректность = Истина). // * СкрыватьНеактуальныеАдреса - Булево - Истина, если не требуется показывать неактуальные адреса при // вводе (только если ТолькоНациональныйАдрес = Истина). // * ВключатьСтрануВПредставление - Булево - Истина, если требуется включать наименование страны в @@ -2243,8 +2374,8 @@ НастройкиПроверки = Новый Структура; НастройкиПроверки.Вставить("ТолькоНациональныйАдрес", Ложь); НастройкиПроверки.Вставить("ПроверятьКорректность", Ложь); - НастройкиПроверки.Вставить("ПроверятьПоФИАС", Ложь); НастройкиПроверки.Вставить("СкрыватьНеактуальныеАдреса", Ложь); + НастройкиПроверки.Вставить("ПроверятьПоФИАС", Истина); НастройкиПроверки.Вставить("ВключатьСтрануВПредставление", Ложь); НастройкиПроверки.Вставить("УказыватьОКТМО", Ложь); ИначеЕсли УстанавливаемыйТип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда @@ -2269,24 +2400,33 @@ // Записывает контактную информацию из XML в поля табличной части Контактная информация объекта. // // Параметры: -// Объект - ЛюбаяСсылка - номер телефона или факса. -// ЗначенияПолей - Строка - контактная информация в формате XML. +// Объект - ЛюбаяСсылка - ссылка на объект конфигурации, содержащий табличную часть контактная информация. +// Значение - Строка - контактная информация в внутреннем формате JSON. // ВидИнформации - Справочник.ВидыКонтактнойИнформация - ссылка на вид контактной информации. // ТипИнформации - Перечисление.ТипыКонтактнойИнформация - тип контактной информации. // ИдентификаторСтроки - Число - идентификатор строки табличной части. // Дата - Дата - Дата с которой действует запись контактной информации, // используется при хранение истории изменения контактной информации. -Процедура ЗаписатьКонтактнуюИнформацию(Объект, ЗначенияПолей, ВидИнформации, ТипИнформации, ИдентификаторСтроки = 0, Дата = Неопределено) Экспорт +Процедура ЗаписатьКонтактнуюИнформацию(Объект, Знач Значение, ВидИнформации, ТипИнформации, ИдентификаторСтроки = 0, Дата = Неопределено) Экспорт - ОбъектКИ = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзXML(ЗначенияПолей, ВидИнформации); + Если ПустаяСтрока(Значение) Тогда + Возврат; + КонецЕсли; - Если Не УправлениеКонтактнойИнформациейСлужебный.XDTOКонтактнаяИнформацияЗаполнена(ОбъектКИ) Тогда + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(Значение) Тогда + ОбъектКИ = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON(Значение, ТипИнформации); + Иначе + ОбъектКИ = УправлениеКонтактнойИнформациейСлужебный.СтрокаJSONВСтруктуру(Значение); + КонецЕсли; + + Если Не УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияЗаполнена(ОбъектКИ) Тогда Возврат; КонецЕсли; НоваяСтрока = Объект.КонтактнаяИнформация.Добавить(); - НоваяСтрока.Представление = ОбъектКИ.Представление; - НоваяСтрока.ЗначенияПолей = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOВXML(ОбъектКИ); + НоваяСтрока.Представление = ОбъектКИ.Value; + НоваяСтрока.Значение = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(ОбъектКИ); + НоваяСтрока.ЗначенияПолей = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзJSONВXML(ОбъектКИ, ТипИнформации); НоваяСтрока.Вид = ВидИнформации; НоваяСтрока.Тип = ТипИнформации; Если ЗначениеЗаполнено(Дата) Тогда @@ -2447,6 +2587,26 @@ //////////////////////////////////////////////////////////////////////////////// // Обратная совместимость. +// Устарела. Следует использовать УправлениеКонтактнойИнформацией.КонтактнаяИнформацияПоПредставлению. +// Преобразует представление контактной информации в XML строку соответствующую структуре +// XDTO пакетам КонтактнаяИнформация и Адрес. +// Для адресов, введенных в свободной форме, корректное преобразование не гарантируется. +// +// Параметры: +// Представление - Строка - Строковое представление контактной информации, выводимое пользователю. +// ОжидаемыйВид - СправочникСсылка.ВидыКонтактнойИнформации, ПеречислениеСсылка.ТипыКонтактнойИнформации, +// Структура - Вид или тип контактной информации. +// +// Возвращаемое значение: +// Строка - Контактная информация в виде XML советующего структуре XDTO пакетов КонтактнаяИнформация и Адрес. +// +Функция КонтактнаяИнформацияXMLПоПредставлению(Представление, ОжидаемыйВид) Экспорт + + Возврат УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOВXML( + УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOПоПредставлению(Представление, ОжидаемыйВид)); + +КонецФункции + // Устарела. Следует использовать РаботаСАдресами.ПредыдущийФорматКонтактнойИнформацииXML. // Преобразует данные формата XML в предыдущий формат контактной информации. // @@ -2929,7 +3089,7 @@ // * Результат - Строка - результат проверки: "Корректный", "НеПроверен", "СодержитОшибки". // * СписокОшибок - СписокЗначений - Информация о ошибках. Функция ПроверитьАдрес(Знач АдресВXML, ПараметрыПроверки = Неопределено) Экспорт - Возврат УправлениеКонтактнойИнформациейСлужебный.ПроверитьАдресВXML(АдресВXML, ПараметрыПроверки); + Возврат УправлениеКонтактнойИнформациейСлужебный.ПроверитьАдрес(АдресВXML, ПараметрыПроверки); КонецФункции // Устарела. Следует использовать ПараметрыКонтактнойИнформации. @@ -2969,6 +3129,35 @@ #Область СлужебныйПрограммныйИнтерфейс +// Возвращает сведения о телефоне или факсе. +// +// Параметры: +// КонтактнаяИнформация - Строка - адрес во внутреннем формате JSON или в XML, соответствующем XDTO пакету Адрес. +// +// Возвращаемое значение: +// Структура - сведения об телефона: +// * Представление - Строка - представление телефона. +// * КодСтраны - Строка - Код страны. Например, +7. +// * КодГорода - Строка - Код города. Например, 495. +// * НомерТелефона - Строка - Номер телефона. +// * Добавочный - Строка - Добавочный номер телефона. +// * Комментарий - Строка - Комментарий к номеру телефона. +// +Функция СведенияОТелефоне(КонтактнаяИнформация) Экспорт + + ТелефонаПоПолям = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация, Перечисления.ТипыКонтактнойИнформации.Телефон); + Результат = УправлениеКонтактнойИнформациейКлиентСервер.СтруктураПолейТелефона(); + Результат.Представление = ТелефонаПоПолям.Value; + Результат.КодСтраны = ТелефонаПоПолям.CountryCode; + Результат.КодГорода = ТелефонаПоПолям.AreaCode; + Результат.НомерТелефона = ТелефонаПоПолям.Number; + Результат.Добавочный = ТелефонаПоПолям.ExtNumber; + Результат.Комментарий = ТелефонаПоПолям.Comment; + + Возврат Результат; + +КонецФункции + // Устанавливает доступность элементов контактной информации на форме. // // Параметры: @@ -3161,7 +3350,7 @@ Процедура СоздатьРеквизитыКонтактнойИнформации(Знач Форма, Знач ДобавляемыеРеквизиты, Знач ИмяОбъекта, Знач ИсключаемыеВиды, Знач КонтактнаяИнформация, Знач ОтложеннаяИнициализация) - Строка500 = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(500)); + Строка1500 = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(1500)); СозданныеРеквизиты = ОбщегоНазначенияКлиентСервер.СкопироватьМассив(ИсключаемыеВиды); ПредыдущийВид = Неопределено; ПорядковыйНомер = 1; @@ -3188,9 +3377,8 @@ + ОбъектКонтактнойИнформации.Строки.Индекс(СтрокаКИ); ПутьРеквизитов = "Объект." + ИмяТабличнойЧасти; - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяРеквизита, Строка500, ПутьРеквизитов, СтрокаКИ.Наименование, Истина)); - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяРеквизита + "ЗначенияПолей", Новый ОписаниеТипов("СписокЗначений, Строка"), - ПутьРеквизитов,, Истина)); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяРеквизита, Строка1500, ПутьРеквизитов, СтрокаКИ.Наименование, Истина)); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяРеквизита + "Значение", Новый ОписаниеТипов("Строка"), ПутьРеквизитов,, Истина)); ПредыдущийВид = ТекущийВид; КонецЕсли; @@ -3221,7 +3409,7 @@ + ПорядковыйНомер; Если Не ОтложеннаяИнициализация Тогда ДобавляемыеРеквизиты.Добавить( - Новый РеквизитФормы(ОбъектКонтактнойИнформации.ИмяРеквизита, Строка500, , ОбъектКонтактнойИнформации.Наименование, Истина)); + Новый РеквизитФормы(ОбъектКонтактнойИнформации.ИмяРеквизита, Строка1500, , ОбъектКонтактнойИнформации.Наименование, Истина)); КонецЕсли; Иначе ОбъектКонтактнойИнформации.ИмяРеквизита = "КонтактнаяИнформацияПоле" + ОбъектКонтактнойИнформации.ИмяПредопределенныхДанных; @@ -3341,6 +3529,12 @@ Отбор = Новый Структура("ИмяРеквизита", ИмяРеквизита); НайденнаяСтрока = ОписаниеКонтактнойИнформации.НайтиСтроки(Отбор)[0]; + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(НайденнаяСтрока.Значение) Тогда + КонтактнаяИнформацияПоПолям = УправлениеКонтактнойИнформациейСлужебный.СтрокаJSONВСтруктуру(НайденнаяСтрока.Значение); + КонтактнаяИнформацияПоПолям.Comment = НайденнаяСтрока.Комментарий; + НайденнаяСтрока.Значение = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(КонтактнаяИнформацияПоПолям); + КонецЕсли; + ПолеВвода = Форма.Элементы.Найти(ИмяРеквизита); ПолеВвода.РасширеннаяПодсказка.Заголовок = НайденнаяСтрока.Комментарий; @@ -3516,7 +3710,13 @@ КонецЕсли; Иначе Элемент.Вид = ВидПоляФормы.ПолеВвода; - Элемент.УстановитьДействие("Очистка", "Подключаемый_КонтактнаяИнформацияОчистка"); + Элемент.УстановитьДействие("Очистка", "Подключаемый_КонтактнаяИнформацияОчистка"); + + Если ИнформацияОВидеКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда + Элемент.УстановитьДействие("Автоподбор", "Подключаемый_КонтактнаяИнформацияАвтоподбор"); + Элемент.УстановитьДействие("ОбработкаВыбора", "Подключаемый_КонтактнаяИнформацияОбработкаВыбора"); + КонецЕсли; + КонецЕсли; Элемент.ОтображениеПодсказки = ОтображениеПодсказки.ОтображатьСнизу; @@ -3575,7 +3775,7 @@ ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 9, Истина); КонецЕсли; - Если ИнформацияОВидеКИ.ХранитьИсториюИзменений И Не ИнформацияОВидеКИ.ПометкаУдаления Тогда + Если ИнформацияОВидеКИ.ХранитьИсториюИзменений И Не ИнформацияОВидеКИ.ПометкаУдаления Тогда // Вывод истории контактной информации через контекстное меню. ИмяКоманды = "КонтекстноеМенюИстория" + ИмяРеквизита; Кнопка = Форма.Элементы.Добавить(ИмяКоманды, Тип("КнопкаФормы"), Элемент.КонтекстноеМеню); @@ -3637,10 +3837,10 @@ КонецЕсли; // Редактирование в диалоге - Если ДляТипаКонтактнойИнформацииДоступноРедактированиеВДиалоге(ИнформацияОВидеКИ.Тип) + Если ДляТипаКонтактнойИнформацииДоступноРедактированиеВДиалоге(ИнформацияОВидеКИ.Тип) И Элемент.Вид = ВидПоляФормы.ПолеВвода Тогда - Элемент.КнопкаВыбора = Не ИнформацияОВидеКИ.ПометкаУдаления; + Элемент.КнопкаВыбора = Не ИнформацияОВидеКИ.ПометкаУдаления;; Если ИнформацияОВидеКИ.РедактированиеТолькоВДиалоге Тогда Элемент.РедактированиеТекста = Ложь; Элемент.ЦветФона = ЦветаСтиля.КонтактнаяИнформацияСРедактированиемВДиалогеЦвет; @@ -3758,15 +3958,13 @@ Если СоздатьТаблицуКонтактнойИнформации Тогда - Строка500 = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(500)); - // Создадим таблицу значений ИмяОписания = "КонтактнаяИнформацияОписаниеДополнительныхРеквизитов"; МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(ИмяОписания, Новый ОписаниеТипов("ТаблицаЗначений"))); МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ИмяРеквизита", Строка500, ИмяОписания)); МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("Вид", Новый ОписаниеТипов("СправочникСсылка.ВидыКонтактнойИнформации"), ИмяОписания)); МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("Тип", Новый ОписаниеТипов("ПеречислениеСсылка.ТипыКонтактнойИнформации"), ИмяОписания)); - МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ЗначенияПолей", Новый ОписаниеТипов("СписокЗначений, Строка"), ИмяОписания)); + МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("Значение", Новый ОписаниеТипов("Строка"), ИмяОписания)); МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("Представление", Строка500, ИмяОписания)); МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("Комментарий", Новый ОписаниеТипов("Строка"), ИмяОписания)); МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ЭтоРеквизитТабличнойЧасти", Новый ОписаниеТипов("Булево"), ИмяОписания)); @@ -3778,11 +3976,12 @@ Иначе РеквизитыТаблицы = Форма.ПолучитьРеквизиты("КонтактнаяИнформацияОписаниеДополнительныхРеквизитов"); РеквизитыДляСоздания = Новый Соответствие; - РеквизитыДляСоздания.Вставить("ИмяЭлементаДляРазмещения", Истина); - РеквизитыДляСоздания.Вставить("ХранитьИсториюИзменений", Истина); - РеквизитыДляСоздания.Вставить("ДействуетС", Истина); + РеквизитыДляСоздания.Вставить("ИмяЭлементаДляРазмещения", Истина); + РеквизитыДляСоздания.Вставить("ХранитьИсториюИзменений", Истина); + РеквизитыДляСоздания.Вставить("ДействуетС", Истина); РеквизитыДляСоздания.Вставить("ЭтоИсторическаяКонтактнаяИнформация", Истина); - РеквизитыДляСоздания.Вставить("МеждународныйФорматАдреса", Истина); + РеквизитыДляСоздания.Вставить("Значение", Истина); + РеквизитыДляСоздания.Вставить("МеждународныйФорматАдреса", Истина); Для Каждого Реквизит Из РеквизитыТаблицы Цикл Если РеквизитыДляСоздания[Реквизит.Имя] <> Неопределено Тогда @@ -3790,21 +3989,30 @@ КонецЕсли; КонецЦикла; + Если РеквизитыДляСоздания["Значение"] Тогда + МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("Значение", Новый ОписаниеТипов("Строка"), ИмяОписания)); + КонецЕсли; + Если РеквизитыДляСоздания["МеждународныйФорматАдреса"] Тогда МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("МеждународныйФорматАдреса", Новый ОписаниеТипов("Булево"), ИмяОписания)); КонецЕсли; + Если РеквизитыДляСоздания["ИмяЭлементаДляРазмещения"] Тогда МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ИмяЭлементаДляРазмещения", Строка500, ИмяОписания)); КонецЕсли; + Если РеквизитыДляСоздания["ХранитьИсториюИзменений"] Тогда МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ХранитьИсториюИзменений", Новый ОписаниеТипов("Булево"), ИмяОписания)); КонецЕсли; + Если РеквизитыДляСоздания["ДействуетС"] Тогда МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ДействуетС", Новый ОписаниеТипов("Дата"), ИмяОписания)); КонецЕсли; + Если РеквизитыДляСоздания["ЭтоИсторическаяКонтактнаяИнформация"] Тогда МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ЭтоИсторическаяКонтактнаяИнформация", Новый ОписаниеТипов("Булево"), ИмяОписания)); КонецЕсли; + КонецЕсли; Если СоздатьПараметрыКонтактнойИнформации Тогда @@ -3816,9 +4024,6 @@ Процедура УстановитьЗначенияРеквизитовПроверки(Объект, НастройкиПроверки = Неопределено) Объект.ПроверятьКорректность = ?(НастройкиПроверки = Неопределено, Ложь, НастройкиПроверки.ПроверятьКорректность); - Если Объект.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда - Объект.ПроверятьПоФИАС = ?(НастройкиПроверки = Неопределено, Ложь, НастройкиПроверки.ПроверятьПоФИАС); - КонецЕсли; Объект.ТолькоНациональныйАдрес = Ложь; Объект.ВключатьСтрануВПредставление = Ложь; @@ -3826,7 +4031,7 @@ КонецПроцедуры -Процедура ДобавитьРеквизитВОписание(Форма, СтрокаКонтактнойИнформации, ДанныеВидовКонтактнойИнформации, ЭтоНовыйВидКИ, +Процедура ДобавитьРеквизитВОписание(Форма, СтрокаКонтактнойИнформации, ДанныеВидовКонтактнойИнформации, ЭтоНовыйВидКИ, ЭтоРеквизитТабличнойЧасти = Ложь, ЗаполнятьЗначениеРеквизита = Истина, ИмяЭлементаДляРазмещения = "ГруппаКонтактнаяИнформация") НоваяСтрока = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Добавить(); @@ -3852,12 +4057,7 @@ НоваяСтрока.МеждународныйФорматАдреса = СтрокаКонтактнойИнформации.МеждународныйФорматАдреса; КонецЕсли; - Если ПустаяСтрока(СтрокаКонтактнойИнформации.ЗначенияПолей) Тогда - НоваяСтрока.ЗначенияПолей = ""; - Иначе - НоваяСтрока.ЗначенияПолей = УправлениеКонтактнойИнформациейКлиентСервер.ПреобразоватьСтрокуВСписокПолей(СтрокаКонтактнойИнформации.ЗначенияПолей); - КонецЕсли; - + НоваяСтрока.Значение = СтрокаКонтактнойИнформации.Значение; НоваяСтрока.Представление = СтрокаКонтактнойИнформации.Представление; НоваяСтрока.Комментарий = СтрокаКонтактнойИнформации.Комментарий; @@ -3877,7 +4077,7 @@ Если ЭтоНовыйВидКИ И ДанныеВидаКонтактнойИнформации.РазрешитьВводНесколькихЗначений И Не ЭтоРеквизитТабличнойЧасти И Не ДанныеВидаКонтактнойИнформации.ПометкаУдаления Тогда ПараметрыКонтактнойИнформации = ПараметрыКонтактнойИнформацииФормы(Форма.ПараметрыКонтактнойИнформации, ИмяЭлементаДляРазмещения); - ПараметрыКонтактнойИнформации.СписокДобавляемыхЭлементов.Добавить(ДанныеВидаКонтактнойИнформации, СтрокаКонтактнойИнформации.Наименование); + ПараметрыКонтактнойИнформации.СписокДобавляемыхЭлементов.Добавить(ДанныеВидаКонтактнойИнформации, СтрокаКонтактнойИнформации.Вид.Наименование); КонецЕсли; КонецПроцедуры @@ -4059,7 +4259,7 @@ Элемент.ПутьКДанным = "Объект." + ИмяТабличнойЧасти + "." + СтрокаТабличнойЧасти.ИмяРеквизита; Если ДляТипаКонтактнойИнформацииДоступноРедактированиеВДиалоге(СтрокаТабличнойЧасти.Тип) Тогда - Элемент.КнопкаВыбора = Не СтрокаТабличнойЧасти.ПометкаУдаления; + Элемент.КнопкаВыбора = Не СтрокаТабличнойЧасти.ПометкаУдаления;; Если ВидКонтактнойИнформацииТЧ.РедактированиеТолькоВДиалоге Тогда Элемент.РедактированиеТекста = Ложь; КонецЕсли; @@ -4094,6 +4294,7 @@ СтрокаТаблицы = СтрокиТаблицы[0]; СтрокаТаблицы[СтрокаТабличнойЧасти.ИмяРеквизита] = СтрокаТабличнойЧасти.Представление; СтрокаТаблицы[СтрокаТабличнойЧасти.ИмяРеквизита + "ЗначенияПолей"] = СтрокаТабличнойЧасти.ЗначенияПолей; + СтрокаТаблицы[СтрокаТабличнойЧасти.ИмяРеквизита + "Значение"] = СтрокаТабличнойЧасти.Значение; КонецЕсли; КонецЦикла; @@ -4126,19 +4327,16 @@ // СтрокаТабличнойЧасти - СтрокаТабличнойЧасти - заполняемая строка табличной части "Контактная информация". // Источник - ОбъектXDTO - контактная информация. // -Процедура ЗаполнитьРеквизитыТабличнойЧастиДляАдреса(СтрокаТабличнойЧасти, Источник) +Процедура ЗаполнитьРеквизитыТабличнойЧастиДляАдреса(СтрокаТабличнойЧасти, Адрес) // Умолчания СтрокаТабличнойЧасти.Страна = ""; СтрокаТабличнойЧасти.Регион = ""; СтрокаТабличнойЧасти.Город = ""; - Адрес = Источник.Состав; - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); - ЭтоАдрес = ТипЗнч(Адрес) = Тип("ОбъектXDTO") И Адрес.Тип() = ФабрикаXDTO.Тип(ПространствоИмен, "Адрес"); - Если ЭтоАдрес И Адрес.Состав <> Неопределено Тогда - СтрокаТабличнойЧасти.Страна = Адрес.Страна; + Если Адрес.Свойство("Country") Тогда + СтрокаТабличнойЧасти.Страна = Адрес.Country; Если Метаданные.Обработки.Найти("РасширенныйВводКонтактнойИнформации") <> Неопределено Тогда Обработки["РасширенныйВводКонтактнойИнформации"].ЗаполнитьРасширенныеРеквизитыТабличнойЧастиДляАдреса(Адрес, СтрокаТабличнойЧасти); @@ -4175,65 +4373,73 @@ // СтрокаТабличнойЧасти - СтрокаТабличнойЧасти - заполняемая строка табличной части "Контактная информация". // Источник - ОбъектXDTO - контактная информация. // -Процедура ЗаполнитьРеквизитыТабличнойЧастиДляТелефона(СтрокаТабличнойЧасти, Источник) +Процедура ЗаполнитьРеквизитыТабличнойЧастиДляТелефона(СтрокаТабличнойЧасти, Телефон) + + Если НЕ ЗначениеЗаполнено(Телефон) Тогда + Возврат; + КонецЕсли; // Умолчания СтрокаТабличнойЧасти.НомерТелефонаБезКодов = ""; СтрокаТабличнойЧасти.НомерТелефона = ""; - Телефон = Источник.Состав; - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); - Если Телефон <> Неопределено И Телефон.Тип() = ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона") Тогда - КодСтраны = Телефон.КодСтраны; - КодГорода = Телефон.КодГорода; - НомерТелефона = Телефон.Номер; - - Если СтрНачинаетсяС(КодСтраны, "+") Тогда - КодСтраны = Сред(КодСтраны, 2); - КонецЕсли; - - Поз = СтрНайти(НомерТелефона, ","); - Если Поз <> 0 Тогда - НомерТелефона = Лев(НомерТелефона, Поз-1); - КонецЕсли; - - Поз = СтрНайти(НомерТелефона, Символы.ПС); - Если Поз <> 0 Тогда - НомерТелефона = Лев(НомерТелефона, Поз-1); - КонецЕсли; - - СтрокаТабличнойЧасти.НомерТелефонаБезКодов = УбратьРазделителиВНомерТелефона(НомерТелефона); - СтрокаТабличнойЧасти.НомерТелефона = УбратьРазделителиВНомерТелефона(Строка(КодСтраны) + КодГорода + НомерТелефона); + КодСтраны = Телефон.CountryCode; + КодГорода = Телефон.AreaCode; + НомерТелефона = Телефон.Number; + + Если СтрНачинаетсяС(КодСтраны, "+") Тогда + КодСтраны = Сред(КодСтраны, 2); КонецЕсли; + Поз = СтрНайти(НомерТелефона, ","); + Если Поз <> 0 Тогда + НомерТелефона = Лев(НомерТелефона, Поз-1); + КонецЕсли; + + Поз = СтрНайти(НомерТелефона, Символы.ПС); + Если Поз <> 0 Тогда + НомерТелефона = Лев(НомерТелефона, Поз-1); + КонецЕсли; + + СтрокаТабличнойЧасти.НомерТелефонаБезКодов = УбратьРазделителиВНомерТелефона(НомерТелефона); + СтрокаТабличнойЧасти.НомерТелефона = УбратьРазделителиВНомерТелефона(Строка(КодСтраны) + КодГорода + НомерТелефона); + КонецПроцедуры // Заполняет дополнительные реквизиты табличной части "Контактная информация" для телефона и факса. // // Параметры: // СтрокаТабличнойЧасти - СтрокаТабличнойЧасти - заполняемая строка табличной части "Контактная информация". -// Источник - ОбъектXDTO - контактная информация. +// Источник - Структура, ОбъектXDTO - контактная информация. // Процедура ЗаполнитьРеквизитыТабличнойЧастиДляВебСтраницы(СтрокаТабличнойЧасти, Источник) - // Умолчания +// Умолчания СтрокаТабличнойЧасти.ДоменноеИмяСервера = ""; + АдресСтраницы = ""; - АдресСтраницы = Источник.Состав; - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); - Если АдресСтраницы <> Неопределено И АдресСтраницы.Тип() = ФабрикаXDTO.Тип(ПространствоИмен, "ВебСайт") Тогда - АдресСтрокой = АдресСтраницы.Значение; + Если ТипЗнч(Источник) = Тип("Структура") Тогда - // Удалим протокол - АдресСервера = Прав(АдресСтрокой, СтрДлина(АдресСтрокой) - СтрНайти(АдресСтрокой, "://") ); - Поз = СтрНайти(АдресСервера, "/"); - // Удалим путь - АдресСервера = ?(Поз = 0, АдресСервера, Лев(АдресСервера, Поз-1)); + Если Источник.Свойство("value") Тогда + АдресСтрокой = Источник.value; + КонецЕсли; - СтрокаТабличнойЧасти.ДоменноеИмяСервера = АдресСервера; + Иначе + + АдресСтраницы = Источник.Состав; + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); + Если АдресСтраницы <> Неопределено И АдресСтраницы.Тип() = ФабрикаXDTO.Тип(ПространствоИмен, "ВебСайт") Тогда + АдресСтрокой = АдресСтраницы.Значение; + КонецЕсли; КонецЕсли; + // Удалим протокол + Позиция = СтрНайти(АдресСтрокой, "://"); + АдресСервера = ?(Позиция = 0, АдресСтрокой, Сред(АдресСтрокой, Позиция + 3)); + + СтрокаТабличнойЧасти.ДоменноеИмяСервера = АдресСервера; + КонецПроцедуры // Заполняет контактную информацию в табличной части "Контактная информация" приемника. @@ -4287,36 +4493,37 @@ // Проверяет контактную информацию электронной почты и сообщает об ошибках. // // Параметры: -// Источник - ОбъектXDTO - контактная информацией. +// АдресЭП - Структура, Строка - контактная информацией. // ВидИнформации - СправочникСсылка.ВидыКонтактнойИнформации - вид контактной информации с настройками проверки. // ИмяРеквизита - Строка - необязательно имя реквизита для привязки сообщения об ошибке. // // Возвращаемое значение: // Число - уровень ошибок: 0 - нет, 1 - неблокирующие, 2 - блокирующие. // -Функция ОшибкиЗаполненияЭлектроннойПочты(Источник, ВидИнформации, Знач ИмяРеквизита = "", ПолеРеквизита = "") +Функция ОшибкиЗаполненияЭлектроннойПочты(АдресЭП, ВидИнформации, Знач ИмяРеквизита = "", ПолеРеквизита = "") Если Не ВидИнформации.ПроверятьКорректность Тогда Возврат 0; КонецЕсли; - СтрокаОшибки = ""; - - АдресЭП = Источник.Состав; - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); - Если АдресЭП <> Неопределено И АдресЭП.Тип() = ФабрикаXDTO.Тип(ПространствоИмен, "ЭлектроннаяПочта") Тогда - Попытка - Результат = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(АдресЭП.Значение); - Если Результат.Количество() > 1 Тогда - - СтрокаОшибки = НСтр("ru = 'Допускается ввод только одного адреса электронной почты'"); - - КонецЕсли; - Исключение - СтрокаОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - КонецПопытки; + Если Не ЗначениеЗаполнено(АдресЭП) Тогда + Возврат 0; КонецЕсли; + СтрокаОшибки = ""; + ЭлектроннаяПочта = УправлениеКонтактнойИнформациейСлужебный.СтрокаJSONВСтруктуру(АдресЭП); + + Попытка + Результат = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ЭлектроннаяПочта.Value); + Если Результат.Количество() > 1 Тогда + + СтрокаОшибки = НСтр("ru = 'Допускается ввод только одного адреса электронной почты'"); + + КонецЕсли; + Исключение + СтрокаОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + Если Не ПустаяСтрока(СтрокаОшибки) Тогда ВывестиСообщениеПользователю(СтрокаОшибки, ИмяРеквизита, ПолеРеквизита); УровеньОшибки = ?(ВидИнформации.ПроверятьКорректность, 2, 1); @@ -4366,34 +4573,40 @@ // Проверяет контактную информацию. // -Функция ПроверитьЗаполнениеКонтактнойИнформации(Представление, ЗначенияПолей, ВидИнформации, ТипИнформации, +Функция ПроверитьЗаполнениеКонтактнойИнформации(Представление, Значение, ВидИнформации, ТипИнформации, ИмяРеквизита, Комментарий = Неопределено, ПутьКРеквизиту = "") - ТекстСериализации = ?(ПустаяСтрока(ЗначенияПолей), Представление, ЗначенияПолей); - - ОбъектКИ = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзXML(ТекстСериализации, ВидИнформации); - Если Комментарий <> Неопределено Тогда - ОбъектКИ.Комментарий = Комментарий; + Если ПустаяСтрока(Значение) Тогда + + Если ПустаяСтрока(Представление) Тогда + Возврат 0; + КонецЕсли; + + РедактированиеТолькоВДиалоге = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВидИнформации, "РедактированиеТолькоВДиалоге"); + Если РедактированиеТолькоВДиалоге И СтрСравнить(Представление, УправлениеКонтактнойИнформациейКлиентСервер.ТекстПустогоАдресаВВидеГиперссылки()) = 0 Тогда + Возврат 0; + КонецЕсли; + + КонтактнаяИнформация = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияПоПредставлению(Представление, ВидИнформации); + Значение = ?(ТипЗнч(КонтактнаяИнформация) = Тип("Структура"), УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(КонтактнаяИнформация), ""); + + ИначеЕсли УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(Значение) Тогда + + Значение = КонтактнаяИнформацияВJSON(Значение, ВидИнформации); + КонецЕсли; - ОбъектКИ.Представление = Представление; - - Если ПустаяСтрока(Представление) И ПустаяСтрока(ОбъектКИ.Комментарий) Тогда - Возврат 0; - КонецЕсли; - - ЗначенияПолей = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOВXML(ОбъектКИ); // Проверка Если ТипИнформации = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда - УровеньОшибок = ОшибкиЗаполненияЭлектроннойПочты(ОбъектКИ, ВидИнформации, ИмяРеквизита, ПутьКРеквизиту); + УровеньОшибок = ОшибкиЗаполненияЭлектроннойПочты(Значение, ВидИнформации, ИмяРеквизита, ПутьКРеквизиту); ИначеЕсли ТипИнформации = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда - УровеньОшибок = ОшибкиЗаполненияАдреса(ОбъектКИ.Состав, ВидИнформации, ИмяРеквизита, ПутьКРеквизиту); + УровеньОшибок = ОшибкиЗаполненияАдреса(Значение, ВидИнформации, ИмяРеквизита, ПутьКРеквизиту); ИначеЕсли ТипИнформации = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда - УровеньОшибок = ОшибкиЗаполненияТелефона(ОбъектКИ, ВидИнформации, ИмяРеквизита); + УровеньОшибок = ОшибкиЗаполненияТелефона(Значение, ВидИнформации, ИмяРеквизита); ИначеЕсли ТипИнформации = Перечисления.ТипыКонтактнойИнформации.Факс Тогда - УровеньОшибок = ОшибкиЗаполненияТелефона(ОбъектКИ, ВидИнформации, ИмяРеквизита); + УровеньОшибок = ОшибкиЗаполненияТелефона(Значение, ВидИнформации, ИмяРеквизита); ИначеЕсли ТипИнформации = Перечисления.ТипыКонтактнойИнформации.ВебСтраница Тогда - УровеньОшибок = ОшибкиЗаполненияВебСтраницы(ОбъектКИ, ВидИнформации, ИмяРеквизита); + УровеньОшибок = ОшибкиЗаполненияВебСтраницы(Значение, ВидИнформации, ИмяРеквизита); Иначе // Другое (прочее) не проверяем. УровеньОшибок = 0; @@ -4407,30 +4620,39 @@ Процедура СкорректироватьКонтактнуюИнформацию(Форма, СтрокаКИ) РезультатПреобразования = Новый Структура; - Если ПустаяСтрока(СтрокаКИ.Представление) И ЗначениеЗаполнено(СтрокаКИ.ЗначенияПолей) Тогда - СтрокаКИ.Представление = УправлениеКонтактнойИнформациейСлужебный.ПредставлениеКонтактнойИнформации(СтрокаКИ.ЗначенияПолей, СтрокаКИ.Вид); - КонецЕсли; - Результат = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзXML(СтрокаКИ.ЗначенияПолей, СтрокаКИ.Вид, РезультатПреобразования, СтрокаКИ.Представление); - СтрокаКИ.Комментарий = ?(ЗначениеЗаполнено(Результат.Комментарий), Результат.Комментарий, ""); - - Если РезультатПреобразования.Количество() = 0 Тогда - Возврат; - КонецЕсли; + Если ПустаяСтрока(СтрокаКИ.Значение) Тогда - Если Не РезультатПреобразования.Свойство("СведенияИсправлены") ИЛИ РезультатПреобразования.СведенияИсправлены = Ложь Тогда - Возврат; - КонецЕсли; - - Если РезультатПреобразования.СведенияИсправлены Тогда - СтрокаКИ.ЗначенияПолей = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOВXML(Результат); - КонецЕсли; + Если ПустаяСтрока(СтрокаКИ.Представление) И ЗначениеЗаполнено(СтрокаКИ.ЗначенияПолей) Тогда + СтрокаКИ.Представление = УправлениеКонтактнойИнформациейСлужебный.ПредставлениеКонтактнойИнформации(СтрокаКИ.ЗначенияПолей, СтрокаКИ.Вид); + КонецЕсли; + + Результат = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзXML(СтрокаКИ.ЗначенияПолей, СтрокаКИ.Вид, РезультатПреобразования, СтрокаКИ.Представление); + СтрокаКИ.Комментарий = ?(ЗначениеЗаполнено(Результат.Комментарий), Результат.Комментарий, ""); + + Если РезультатПреобразования.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Если Не РезультатПреобразования.Свойство("СведенияИсправлены") ИЛИ РезультатПреобразования.СведенияИсправлены = Ложь Тогда + Возврат; + КонецЕсли; + + Если РезультатПреобразования.СведенияИсправлены Тогда + СтрокаКИ.ЗначенияПолей = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOВXML(Результат); + КонецЕсли; - Если РезультатПреобразования.Свойство("ТекстОшибки") Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(РезультатПреобразования.ТекстОшибки, , СтрокаКИ.ИмяРеквизита); + Если РезультатПреобразования.Свойство("ТекстОшибки") Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(РезультатПреобразования.ТекстОшибки, , СтрокаКИ.ИмяРеквизита); + КонецЕсли; + + Форма.Модифицированность = Истина; + КонецЕсли; - Форма.Модифицированность = Истина; + Если ПустаяСтрока(СтрокаКИ.Представление) И ЗначениеЗаполнено(СтрокаКИ.Значение) Тогда + СтрокаКИ.Представление = ПредставлениеКонтактнойИнформации(СтрокаКИ.Значение); + КонецЕсли; КонецПроцедуры @@ -4454,22 +4676,13 @@ Если НЕ УправлениеКонтактнойИнформациейСлужебный.ЭтоНациональныйАдрес(Источник) Тогда Возврат 0; КонецЕсли; - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); - Если Источник <> Неопределено И Источник.Тип() = ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") Тогда - Адрес = Источник; - Иначе - Адрес = Источник.Состав; - КонецЕсли; - - Если Адрес <> Неопределено И Адрес.Тип() = ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") Тогда - Если Метаданные.Обработки.Найти("РасширенныйВводКонтактнойИнформации") <> Неопределено Тогда - СписокОшибок = Обработки["РасширенныйВводКонтактнойИнформации"].ОшибкиЗаполненияАдресаXDTO(Адрес, ВидИнформации); - Для Каждого Элемент Из СписокОшибок Цикл - ВывестиСообщениеПользователю(Элемент.Представление, ИмяРеквизита, ПолеРеквизита); - ЕстьОшибки = Истина; - КонецЦикла; - КонецЕсли; + Если Метаданные.Обработки.Найти("РасширенныйВводКонтактнойИнформации") <> Неопределено Тогда + СписокОшибок = Обработки["РасширенныйВводКонтактнойИнформации"].ОшибкиЗаполненияАдресаXDTO(Источник, ВидИнформации); + Для Каждого Элемент Из СписокОшибок Цикл + ВывестиСообщениеПользователю(Элемент.Представление, ИмяРеквизита, ПолеРеквизита); + ЕстьОшибки = Истина; + КонецЦикла; КонецЕсли; Если ЕстьОшибки И ВидИнформации.ПроверятьКорректность Тогда @@ -4560,23 +4773,24 @@ КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОтправкаSMS") Тогда - МодульОтправкаSMS = ОбщегоНазначения.ОбщийМодуль("ОтправкаSMS"); + МодульОтправкаSMS = ОбщегоНазначения.ОбщийМодуль("ОтправкаSMS"); МожноОтправлятьSMS = МодульОтправкаSMS.ДоступнаОтправкаSMS(); Иначе МожноОтправлятьSMS = Ложь; КонецЕсли; ПараметрыКонтактнойИнформации = Новый Структура; - ПараметрыКонтактнойИнформации.Вставить("ГруппаДляРазмещения", ИмяЭлементаДляРазмещения); - ПараметрыКонтактнойИнформации.Вставить("ПоложениеЗаголовка", ЗначениеПоложенияЗаголовкаКИ(ПоложениеЗаголовкаКИ)); - ПараметрыКонтактнойИнформации.Вставить("ДобавленныеРеквизиты", Новый СписокЗначений); // - ПараметрыКонтактнойИнформации.Вставить("ОтложеннаяИнициализация", ОтложеннаяИнициализация); - ПараметрыКонтактнойИнформации.Вставить("ИсключаемыеВиды", ИсключаемыеВиды); + ПараметрыКонтактнойИнформации.Вставить("ГруппаДляРазмещения", ИмяЭлементаДляРазмещения); + ПараметрыКонтактнойИнформации.Вставить("ПоложениеЗаголовка", ЗначениеПоложенияЗаголовкаКИ(ПоложениеЗаголовкаКИ)); + ПараметрыКонтактнойИнформации.Вставить("ДобавленныеРеквизиты", Новый СписокЗначений); + ПараметрыКонтактнойИнформации.Вставить("ОтложеннаяИнициализация", ОтложеннаяИнициализация); + ПараметрыКонтактнойИнформации.Вставить("ИсключаемыеВиды", ИсключаемыеВиды); ПараметрыКонтактнойИнформации.Вставить("ВыполненаОтложеннаяИнициализация", Ложь); - ПараметрыКонтактнойИнформации.Вставить("ДобавленныеЭлементы", Новый СписокЗначений); - ПараметрыКонтактнойИнформации.Вставить("СписокДобавляемыхЭлементов", Новый СписокЗначений); - ПараметрыКонтактнойИнформации.Вставить("МожноОтправлятьSMS", МожноОтправлятьSMS); - ПараметрыКонтактнойИнформации.Вставить("Владелец", Неопределено); + ПараметрыКонтактнойИнформации.Вставить("ДобавленныеЭлементы", Новый СписокЗначений); + ПараметрыКонтактнойИнформации.Вставить("СписокДобавляемыхЭлементов", Новый СписокЗначений); + ПараметрыКонтактнойИнформации.Вставить("МожноОтправлятьSMS", МожноОтправлятьSMS); + ПараметрыКонтактнойИнформации.Вставить("Владелец", Неопределено); + ПараметрыАдреса = Новый Структура("ТипПомещения, Страна, Индекс", "Квартира"); ПараметрыКонтактнойИнформации.Вставить("ПараметрыАдреса", ПараметрыАдреса); @@ -4732,7 +4946,7 @@ ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 9, Истина); Если Не ВидКонтактнойИнформации.ПометкаУдаления Тогда - + ГруппаРазделитель = Форма.Элементы.Добавить("ПодменюРазделитель" + ИмяРеквизита, Тип("ГруппаФормы"), ГруппаРазделитель); ГруппаРазделитель.Вид = ВидГруппыФормы.ГруппаКнопок; @@ -4836,31 +5050,52 @@ Если Периодическая Тогда СтрокаКонтактнойИнформации.ДействуетС = СтрокаКонтактнойИнформацииОбъекта.Дата; КонецЕсли; - ОбъектКонтактнойИнформации = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзXML(СтрокаКонтактнойИнформации.ЗначенияПолей, СтрокаКонтактнойИнформации.Вид); + + ОбъектКонтактнойИнформации = УправлениеКонтактнойИнформациейСлужебный.СтрокаJSONВСтруктуру(СтрокаКонтактнойИнформации.Значение); ЗаполнитьТехническиеПоляКонтактнойИнформации(СтрокаКонтактнойИнформации, ОбъектКонтактнойИнформации, СтрокаКонтактнойИнформацииОбъекта.Тип); КонецПроцедуры -Процедура ВосстановитьПустыеЗначениеПредставление(СтрокаКонтактнойИнформации) +Процедура ОбработатьСтрокуКонтактнойИнформации(СтрокаКонтактнойИнформации) Если ПустаяСтрока(СтрокаКонтактнойИнформации.Представление) И ПустаяСтрока(СтрокаКонтактнойИнформации.ЗначенияПолей) Тогда Возврат; КонецЕсли; - Если ПустаяСтрока(СтрокаКонтактнойИнформации.Представление) Тогда - ФорматКонтактнойИнформации = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СтрокаКонтактнойИнформации.Вид, "Тип, ВключатьСтрануВПредставление, ПроверятьПоФИАС"); - ФорматКонтактнойИнформации.Вставить("ФорматАдреса", ?(ФорматКонтактнойИнформации.ПроверятьПоФИАС, "ФИАС", "КЛАДР")); - СтрокаКонтактнойИнформации.Представление = УправлениеКонтактнойИнформациейСлужебный.ПредставлениеКонтактнойИнформации(СтрокаКонтактнойИнформации.ЗначенияПолей, ФорматКонтактнойИнформации); - КонецЕсли; - Если ПустаяСтрока(СтрокаКонтактнойИнформации.ЗначенияПолей) Тогда - КонтактнаяИнформацияXDTO = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOПоПредставлению(СтрокаКонтактнойИнформации.Представление, СтрокаКонтактнойИнформации.Вид); - СтрокаКонтактнойИнформации.ЗначенияПолей = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOВXML(КонтактнаяИнформацияXDTO); - КонецЕсли; Если ПустаяСтрока(СтрокаКонтактнойИнформации.Тип) Тогда - СтрокаКонтактнойИнформации.Тип = СтрокаКонтактнойИнформации.Вид.Тип; + СтрокаКонтактнойИнформации.Тип = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ТипВидаКонтактнойИнформации(СтрокаКонтактнойИнформации.Вид); КонецЕсли; + Если ПустаяСтрока(СтрокаКонтактнойИнформации.Представление) Тогда + + ФорматКонтактнойИнформации = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СтрокаКонтактнойИнформации.Вид, "Тип, ВключатьСтрануВПредставление, ПроверятьПоФИАС"); + ФорматКонтактнойИнформации.Вставить("ФорматАдреса", "ФИАС"); + СтрокаКонтактнойИнформации.Представление = УправлениеКонтактнойИнформациейСлужебный.ПредставлениеКонтактнойИнформации(СтрокаКонтактнойИнформации.ЗначенияПолей, ФорматКонтактнойИнформации); + + КонецЕсли; + + Если ПустаяСтрока(СтрокаКонтактнойИнформации.Значение) Тогда + + Если ПустаяСтрока(СтрокаКонтактнойИнформации.ЗначенияПолей) Тогда + + АдресПоПолям = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияПоПредставлению(СтрокаКонтактнойИнформации.Представление, СтрокаКонтактнойИнформации.Тип); + СтрокаКонтактнойИнформации.Значение = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(АдресПоПолям); + СтрокаКонтактнойИнформации.ЗначенияПолей = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзJSONВXML(СтрокаКонтактнойИнформации.Значение, СтрокаКонтактнойИнформации.Тип); + + Иначе + + СтрокаКонтактнойИнформации.Значение = КонтактнаяИнформацияВJSON(СтрокаКонтактнойИнформации.ЗначенияПолей, СтрокаКонтактнойИнформации.Тип); + + КонецЕсли; + + ИначеЕсли ПустаяСтрока(СтрокаКонтактнойИнформации.ЗначенияПолей) Тогда + + КонтактнаяИнформацияXDTO = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOПоПредставлению(СтрокаКонтактнойИнформации.Представление, СтрокаКонтактнойИнформации.Вид); + СтрокаКонтактнойИнформации.ЗначенияПолей = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOВXML(КонтактнаяИнформацияXDTO); + + КонецЕсли; + КонецПроцедуры // Приводит код страны к единому виду - строка длиной три символа. @@ -4903,7 +5138,7 @@ Если ПодменюКопироватьАдреса <> Неопределено И КонтекстноеПодменюКопироватьАдреса = Неопределено Тогда Продолжить; КонецЕсли; - + КоличествоКомандВПодменю = 0; СписокАдресовВПодменю = Новый Соответствие(); СписокАдресовВПодменю.Вставить(ВРег(СтрокаКИ.Представление), Истина); @@ -4940,9 +5175,9 @@ КонецЕсли; Если ПодменюКопироватьАдреса <> Неопределено Тогда - ДобавитьКнопкуСкопироватьАдрес(Форма, ИмяКоманды, + ДобавитьКнопкуСкопироватьАдрес(Форма, ИмяКоманды, ПредставлениеАдреса, ПараметрыКонтактнойИнформации, ПодменюКопироватьАдреса); - КонецЕсли; + КонецЕсли; Если КонтекстноеПодменюКопироватьАдреса <> Неопределено Тогда ДобавитьКнопкуСкопироватьАдрес(Форма, ИмяКоманды, @@ -4951,7 +5186,6 @@ КонецЦикла; ОбщееКоличествоКоманд = ОбщееКоличествоКоманд + КоличествоКомандВПодменю; - КонецЦикла; КонецПроцедуры @@ -4970,4 +5204,42 @@ КонецПроцедуры -#КонецОбласти \ No newline at end of file +Функция ОписаниеНовойКонтактнойИнформации(Знач Тип) Экспорт + + Если Метаданные.ОбщиеМодули.Найти("РаботаСАдресамиКлиентСервер") <> Неопределено Тогда + МодульРаботаСАдресамиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресамиКлиентСервер"); + Возврат МодульРаботаСАдресамиКлиентСервер.ОписаниеНовойКонтактнойИнформации(Тип); + КонецЕсли; + + Возврат УправлениеКонтактнойИнформациейКлиентСервер.ОписаниеНовойКонтактнойИнформации(Тип); + +КонецФункции + +// Получение глубокого свойства объекта. +// +Функция ПолучитьXDTOРеквизитОбъекта(ОбъектXTDO, XPath) Экспорт + + // Переносов строки в XPath не ожидаем. + СтрокаСвойств = СтрЗаменить(СтрЗаменить(XPath, "/", Символы.ПС), Символы.ПС + Символы.ПС, "/"); + + ЧислоСвойств = СтрЧислоСтрок(СтрокаСвойств); + Если ЧислоСвойств = 1 Тогда + Результат = ОбъектXTDO.Получить(СтрокаСвойств); + Если ТипЗнч(Результат) = Тип("ОбъектXDTO") Тогда + Возврат Результат.Значение; + КонецЕсли; + Возврат Результат; + КонецЕсли; + + Результат = ?(ЧислоСвойств = 0, Неопределено, ОбъектXTDO); + Для Индекс = 1 По ЧислоСвойств Цикл + Результат = Результат.Получить(СтрПолучитьСтроку(СтрокаСвойств, Индекс)); + Если Результат = Неопределено Тогда + Прервать; + КонецЕсли; + КонецЦикла; + + Возврат Результат; +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl index b358c07b0..692f4165f 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl @@ -53,20 +53,24 @@ Форма.Модифицированность = Истина; КонецЕсли; ТекстРедактирования = Элемент.ТекстРедактирования; - Иначе - ТекстРедактирования = ?(ЗначениеЗаполнено(ДанныеСтроки.ЗначенияПолей), Форма[Элемент.Имя], ""); + Иначе + Если ДанныеСтроки <> Неопределено И ЗначениеЗаполнено(ДанныеСтроки.Значение) Тогда + ТекстРедактирования = Форма[Элемент.Имя]; + Иначе + ТекстРедактирования = ""; + КонецЕсли; КонецЕсли; ПараметрыКонтактнойИнформации = Форма.ПараметрыКонтактнойИнформации[ДанныеСтроки.ИмяЭлементаДляРазмещения]; ПараметрыОткрытияФормы = Новый Структура; ПараметрыОткрытияФормы.Вставить("ВидКонтактнойИнформации", ДанныеСтроки.Вид); - ПараметрыОткрытияФормы.Вставить("ЗначенияПолей", ДанныеСтроки.ЗначенияПолей); - ПараметрыОткрытияФормы.Вставить("Представление", ТекстРедактирования); - ПараметрыОткрытияФормы.Вставить("ТолькоПросмотр", Форма.ТолькоПросмотр Или Элемент.ТолькоПросмотр); - ПараметрыОткрытияФормы.Вставить("ТипПомещения", ПараметрыКонтактнойИнформации.ПараметрыАдреса.ТипПомещения); - ПараметрыОткрытияФормы.Вставить("Страна", ПараметрыКонтактнойИнформации.ПараметрыАдреса.Страна); - ПараметрыОткрытияФормы.Вставить("Индекс", ПараметрыКонтактнойИнформации.ПараметрыАдреса.Индекс); + ПараметрыОткрытияФормы.Вставить("Значение", ДанныеСтроки.Значение); + ПараметрыОткрытияФормы.Вставить("Представление", ТекстРедактирования); + ПараметрыОткрытияФормы.Вставить("ТолькоПросмотр", Форма.ТолькоПросмотр Или Элемент.ТолькоПросмотр); + ПараметрыОткрытияФормы.Вставить("ТипПомещения", ПараметрыКонтактнойИнформации.ПараметрыАдреса.ТипПомещения); + ПараметрыОткрытияФормы.Вставить("Страна", ПараметрыКонтактнойИнформации.ПараметрыАдреса.Страна); + ПараметрыОткрытияФормы.Вставить("Индекс", ПараметрыКонтактнойИнформации.ПараметрыАдреса.Индекс); ПараметрыОткрытияФормы.Вставить("КонтактнаяИнформацияОписаниеДополнительныхРеквизитов", Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов); Если Не ЭтоТабличнаяЧасть Тогда @@ -104,7 +108,7 @@ Результат = Новый Структура("ИмяРеквизита", ИмяРеквизита); НайденнаяСтрока = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Результат)[0]; - НайденнаяСтрока.ЗначенияПолей = ""; + НайденнаяСтрока.Значение = ""; НайденнаяСтрока.Представление = ""; НайденнаяСтрока.Комментарий = ""; @@ -186,7 +190,7 @@ ПоказатьАдресНаКарте(НайденнаяСтрока.Представление, "GoogleMaps"); Иначе ПервыйЭлемент = НайденнаяСтрока.ИмяРеквизита; - Индекс =Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Индекс(НайденнаяСтрока); + Индекс = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Индекс(НайденнаяСтрока); Если КомандаКонтекстногоМеню.НаправлениеПеремещения = 1 Тогда Если Индекс < Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Количество() - 1 Тогда ВторойЭлемент = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Получить(Индекс + 1).ИмяРеквизита; @@ -206,24 +210,28 @@ Результат = Новый Структура("ИмяРеквизита", ИмяРеквизитаИсточник); СтрокаПотребитель = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Результат)[0]; + Комментарий = СтрокаПотребитель.Комментарий; // Сохраняем старый комментарий. Если СтрокаПотребитель.Свойство("МеждународныйФорматАдреса") И СтрокаПотребитель.МеждународныйФорматАдреса Тогда ЗаполнитьЗначенияСвойств(СтрокаПотребитель, НайденнаяСтрока, "Комментарий"); ПредставлениеАдреса = СтроковыеФункцииКлиентСервер.СтрокаЛатиницей(НайденнаяСтрока.Представление); - СтрокаПотребитель.Представление = ПредставлениеАдреса; - Форма[СтрокаПотребитель.ИмяРеквизита] = ПредставлениеАдреса; - СтрокаПотребитель.ЗначенияПолей = ""; + СтрокаПотребитель.Представление = ПредставлениеАдреса; + Форма[СтрокаПотребитель.ИмяРеквизита] = ПредставлениеАдреса; + СтрокаПотребитель.Значение = УправлениеКонтактнойИнформациейСлужебныйВызовСервера.КонтактнаяИнформацияПоПредставлению(ПредставлениеАдреса, ТипКонтактнойИнформации); Иначе - ЗаполнитьЗначенияСвойств(СтрокаПотребитель, НайденнаяСтрока, "ЗначенияПолей,Представление,Комментарий"); + ЗаполнитьЗначенияСвойств(СтрокаПотребитель, НайденнаяСтрока, "Значение, Представление,Комментарий"); Форма[СтрокаПотребитель.ИмяРеквизита] = НайденнаяСтрока.Представление; КонецЕсли; Форма.Модифицированность = Истина; - Результат = Новый Структура("ОбновитьКонтекстноеМеню, ИмяРеквизита, ИмяЭлементаДляРазмещения", - Истина, СтрокаПотребитель.ИмяРеквизита, НайденнаяСтрока.ИмяЭлементаДляРазмещения); + Результат = Новый Структура(); + Результат.Вставить("ОбновитьКонтекстноеМеню", Истина); + Результат.Вставить("ИмяРеквизита", СтрокаПотребитель.ИмяРеквизита); + Результат.Вставить("Комментарий", Комментарий); + Результат.Вставить("ИмяЭлементаДляРазмещения", НайденнаяСтрока.ИмяЭлементаДляРазмещения); ОбновитьКонтактнуюИнформациюФормы(Форма, Результат); ИначеЕсли ТипКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты") Тогда @@ -271,6 +279,57 @@ КонецПроцедуры +// Обработчик события АвтоПодбор поля формы контактной информации. +// Вызывается из подключаемых действий при внедрении подсистемы "Контактная информация". +// +// Параметры: +// Текст - Строка - Строка текста, введенная пользователем в поле контактной информации. +// ДанныеВыбора - СписокЗначений - Содержит список значений, который будет использован при стандартной +// обработке события. +// СтандартнаяОбработка - Булево - В данный параметр передается признак выполнения стандартной +// (системной) обработки события. Если в теле процедуры-обработчика +// установить данному параметру значение Ложь, стандартная обработка события +// производиться не будет. +// +Процедура АвтоПодбор(Знач Текст, ДанныеВыбора, СтандартнаяОбработка = Ложь) Экспорт + + Если СтрДлина(Текст) > 2 Тогда + УправлениеКонтактнойИнформациейСлужебныйВызовСервера.АвтоподборАдреса(Текст, ДанныеВыбора); + Если ТипЗнч(ДанныеВыбора) = Тип("СписокЗначений") Тогда + СтандартнаяОбработка = (ДанныеВыбора.Количество() = 0); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Обработчик события ОбработкаВыбора поля формы контактной информации. +// Вызывается из подключаемых действий при внедрении подсистемы "Контактная информация". +// +// Параметры: +// Форма - УправляемаяФорма - Форма владельца контактной информации. +// ВыбранноеЗначение - Строка - Выбранное значение, которое будет установлено как значения поля ввода +// контактной информации. +// ИмяРеквизита - Строка - Имя реквизита формы, связанного с представление контактной информации. +// СтандартнаяОбработка - Булево - В данный параметр передается признак выполнения стандартной +// (системной) обработки события. Если в теле процедуры-обработчика +// установить данному параметру значение Ложь, стандартная обработка события +// производиться не будет. +// +Процедура ОбработкаВыбора(Знач Форма, Знач ВыбранноеЗначение, Знач ИмяРеквизита, СтандартнаяОбработка = Ложь) Экспорт + + СтандартнаяОбработка = Ложь; + Форма[ИмяРеквизита] = ВыбранноеЗначение.Представление; + + Отбор = Новый Структура("ИмяРеквизита", ИмяРеквизита); + Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор); + НайденныеСтроки = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Новый Структура("ИмяРеквизита", ИмяРеквизита)); + Если НайденныеСтроки.Количество() > 0 Тогда + НайденныеСтроки[0].Представление = ВыбранноеЗначение.Представление; + НайденныеСтроки[0].Значение = ВыбранноеЗначение.Адрес; + КонецЕсли; + +КонецПроцедуры + // Открытие формы адреса формы контактной информации. // Вызывается из подключаемых действий при внедрении подсистемы "Контактная информация". // @@ -372,7 +431,7 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("ВидКонтактнойИнформации", ВидКонтактнойИнформации); - ПараметрыФормы.Вставить("ЗначенияПолей", Значение); + ПараметрыФормы.Вставить("Значение", Значение); ПараметрыФормы.Вставить("Представление", Представление); ПараметрыФормы.Вставить("Комментарий", Комментарий); Если ТипКонтактнойИнформации <> Неопределено Тогда @@ -624,7 +683,7 @@ СписокКонтактнойИнформации = Новый Массив; Для каждого СтрокаКонтактнойИнформации Из НайденныеСтроки Цикл - КонтактнаяИнформация = Новый Структура("Представление, ЗначенияПолей, ДействуетС, Комментарий"); + КонтактнаяИнформация = Новый Структура("Представление, Значение, ЗначенияПолей, ДействуетС, Комментарий"); ЗаполнитьЗначенияСвойств(КонтактнаяИнформация, СтрокаКонтактнойИнформации); СписокКонтактнойИнформации.Добавить(КонтактнаяИнформация); КонецЦикла; @@ -778,6 +837,7 @@ ТекстПредставления = РезультатЗакрытия.Представление; ЗначенияПолей = РезультатЗакрытия.КонтактнаяИнформация; + Значение = РезультатЗакрытия.Значение; Комментарий = РезультатЗакрытия.Комментарий; Если ДанныеНаФорме.Свойство("ХранитьИсториюИзменений") И ДанныеНаФорме.ХранитьИсториюИзменений Тогда @@ -825,6 +885,7 @@ Если СтрокаСДействующимАдресом <> Неопределено Тогда ТекстПредставления = СтрокаСДействующимАдресом.Представление; ЗначенияПолей = СтрокаСДействующимАдресом.ЗначенияПолей; + Значение = СтрокаСДействующимАдресом.Значение; Комментарий = СтрокаСДействующимАдресом.Комментарий; КонецЕсли; @@ -838,13 +899,13 @@ КонецЕсли; Если ДополнительныеПараметры.ЭтоТабличнаяЧасть Тогда - ДанныеЗаполнения[Элемент.Имя + "ЗначенияПолей"] = РезультатЗакрытия.КонтактнаяИнформация; + ДанныеЗаполнения[Элемент.Имя + "Значение"] = РезультатЗакрытия.Значение; Иначе Форма.Элементы.Найти(Элемент.Имя).РасширеннаяПодсказка.Заголовок = Комментарий; ДанныеНаФорме.Представление = ТекстПредставления; - ДанныеНаФорме.ЗначенияПолей = ЗначенияПолей; + ДанныеНаФорме.Значение = РезультатЗакрытия.Значение; ДанныеНаФорме.Комментарий = Комментарий; КонецЕсли; @@ -965,7 +1026,7 @@ ПутьКСтроке = Форма.Элементы[Форма.ТекущийЭлемент.Имя].ТекущиеДанные; ДанныеСтроки.Представление = ПутьКСтроке[Элемент.Имя]; - ДанныеСтроки.ЗначенияПолей = ПутьКСтроке[Элемент.Имя + "ЗначенияПолей"]; + ДанныеСтроки.Значение = ПутьКСтроке[Элемент.Имя + "Значение"]; КонецЕсли; @@ -1027,8 +1088,6 @@ Процедура ПриИзмененииКонтактнойИнформации(Форма, Элемент, ЭтоТабличнаяЧасть, ОбновитьФорму) - Перем ДанныеЗаполнения, ДанныеСтроки, ИсторическаяКонтактнаяИнформация, Результат, Текст; - ЭтоТабличнаяЧасть = ЭтоТабличнаяЧасть(Элемент); Если ЭтоТабличнаяЧасть Тогда @@ -1048,13 +1107,19 @@ Текст = Элемент.ТекстРедактирования; Если ПустаяСтрока(Текст) Тогда + ДанныеЗаполнения[Элемент.Имя] = ""; Если ЭтоТабличнаяЧасть Тогда - ДанныеЗаполнения[Элемент.Имя + "ЗначенияПолей"] = ""; + ДанныеЗаполнения[Элемент.Имя + "Значение"] = ""; КонецЕсли; ДанныеСтроки.Представление = ""; - ДанныеСтроки.ЗначенияПолей = Неопределено; + ДанныеСтроки.Значение = ""; + Результат = Новый Структура("ОбновитьКонтекстноеМеню, ИмяЭлементаДляРазмещения", Истина, ДанныеСтроки.ИмяЭлементаДляРазмещения); + Если ОбновитьФорму Тогда + ОбновитьКонтекстноеМеню(Форма, ДанныеСтроки.ИмяЭлементаДляРазмещения); + КонецЕсли; Возврат; + КонецЕсли; Если ДанныеСтроки.Свойство("ХранитьИсториюИзменений") @@ -1067,11 +1132,11 @@ ДанныеСтроки.ДействуетС = НачалоДня(ОбщегоНазначенияКлиент.ДатаСеанса()); КонецЕсли; - ДанныеСтроки.ЗначенияПолей = УправлениеКонтактнойИнформациейСлужебныйВызовСервера.КонтактнаяИнформацияXMLПоПредставлению(Текст, ДанныеСтроки.Вид); + ДанныеСтроки.Значение = УправлениеКонтактнойИнформациейСлужебныйВызовСервера.КонтактнаяИнформацияПоПредставлению(Текст, ДанныеСтроки.Вид); ДанныеСтроки.Представление = Текст; Если ЭтоТабличнаяЧасть Тогда - ДанныеЗаполнения[Элемент.Имя + "ЗначенияПолей"] = ДанныеСтроки.ЗначенияПолей; + ДанныеЗаполнения[Элемент.Имя + "Значение"] = ДанныеСтроки.Значение; КонецЕсли; Если ДанныеСтроки.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес") И ОбновитьФорму Тогда @@ -1208,40 +1273,40 @@ Результат = Результат + ПредставлениеБайта( БинарныйМассивВЧисло( - ПобитовоеИли( + ЛогическоеПобитовоеИли( ЧислоВБинарныйМассив(192,8), ЧислоВБинарныйМассив(Цел(КодСимвола / Pow(2,6)),8)))); // 0xc0 | (ch >> 6) Результат = Результат + ПредставлениеБайта( БинарныйМассивВЧисло( - ПобитовоеИли( + ЛогическоеПобитовоеИли( ЧислоВБинарныйМассив(128,8), - ПобитовоеИ( + ЛогическоеПобитовоеИ( ЧислоВБинарныйМассив(КодСимвола,8), ЧислоВБинарныйМассив(63,8))))); //0x80 | (ch & 0x3F) Иначе // 0x7FF < ch <= 0xFFFF Результат = Результат + ПредставлениеБайта ( БинарныйМассивВЧисло( - ПобитовоеИли( + ЛогическоеПобитовоеИли( ЧислоВБинарныйМассив(224,8), ЧислоВБинарныйМассив(Цел(КодСимвола / Pow(2,12)),8)))); // 0xe0 | (ch >> 12) Результат = Результат + ПредставлениеБайта( БинарныйМассивВЧисло( - ПобитовоеИли( + ЛогическоеПобитовоеИли( ЧислоВБинарныйМассив(128,8), - ПобитовоеИ( + ЛогическоеПобитовоеИ( ЧислоВБинарныйМассив(Цел(КодСимвола / Pow(2,6)),8), ЧислоВБинарныйМассив(63,8))))); //0x80 | ((ch >> 6) & 0x3F) Результат = Результат + ПредставлениеБайта( БинарныйМассивВЧисло( - ПобитовоеИли( + ЛогическоеПобитовоеИли( ЧислоВБинарныйМассив(128,8), - ПобитовоеИ( + ЛогическоеПобитовоеИ( ЧислоВБинарныйМассив(КодСимвола,8), ЧислоВБинарныйМассив(63,8))))); //0x80 | (ch & 0x3F) @@ -1279,7 +1344,7 @@ Возврат Результат; КонецФункции -Функция ПобитовоеИ(БинарныйМассив1, БинарныйМассив2) +Функция ЛогическоеПобитовоеИ(БинарныйМассив1, БинарныйМассив2) Результат = Новый Массив; Для Индекс = 0 По БинарныйМассив1.Количество()-1 Цикл Результат.Добавить(БинарныйМассив1[Индекс] И БинарныйМассив2[Индекс]); @@ -1287,7 +1352,7 @@ Возврат Результат; КонецФункции -Функция ПобитовоеИли(БинарныйМассив1, БинарныйМассив2) +Функция ЛогическоеПобитовоеИли(БинарныйМассив1, БинарныйМассив2) Результат = Новый Массив; Для Индекс = 0 По БинарныйМассив1.Количество()-1 Цикл Результат.Добавить(БинарныйМассив1[Индекс] Или БинарныйМассив2[Индекс]); @@ -1295,4 +1360,93 @@ Возврат Результат; КонецФункции +Процедура ОбновитьКонтекстноеМеню(Форма, ИмяЭлементаДляРазмещения) + + ПараметрыКонтактнойИнформации = Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения]; + ВсеСтроки = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов; + НайденныеСтроки = ВсеСтроки.НайтиСтроки( + Новый Структура("Тип, ЭтоРеквизитТабличнойЧасти", ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес"), Ложь)); + + ОбщееКоличествоКоманд = 0; + Для Каждого СтрокаКИ Из ВсеСтроки Цикл + + Если ОбщееКоличествоКоманд > 50 Тогда // Ограничение для большого количества адресов на форме + Прервать; + КонецЕсли; + + Если СтрокаКИ.Тип <> ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес") Тогда + Продолжить; + КонецЕсли; + + ПодменюКопироватьАдреса = Форма.Элементы.Найти("ПодменюКопироватьАдреса" + СтрокаКИ.ИмяРеквизита); + КонтекстноеПодменюКопироватьАдреса = Форма.Элементы.Найти("КонтекстноеПодменюКопироватьАдреса" + СтрокаКИ.ИмяРеквизита); + Если ПодменюКопироватьАдреса <> Неопределено И КонтекстноеПодменюКопироватьАдреса = Неопределено Тогда + Продолжить; + КонецЕсли; + + КоличествоКомандВПодменю = 0; + СписокАдресовВПодменю = Новый Соответствие(); + СписокАдресовВПодменю.Вставить(ВРег(СтрокаКИ.Представление), Истина); + + Для Каждого Адрес Из НайденныеСтроки Цикл + + Если КоличествоКомандВПодменю > 7 Тогда // Ограничение для большого количества адресов на форме + Прервать; + КонецЕсли; + + Если Адрес.ЭтоИсторическаяКонтактнаяИнформация Или Адрес.ИмяРеквизита = СтрокаКИ.ИмяРеквизита Тогда + Продолжить; + КонецЕсли; + + ИмяКоманды = "МенюПодменюАдрес" + СтрокаКИ.ИмяРеквизита + "_" + Адрес.ИмяРеквизита; + Команда = Форма.Команды.Найти(ИмяКоманды); + Если Команда = Неопределено Тогда + Команда = Форма.Команды.Добавить(ИмяКоманды); + Команда.Подсказка = НСтр("ru = 'Скопировать адрес'"); + Команда.Действие = "Подключаемый_КонтактнаяИнформацияВыполнитьКоманду"; + Команда.ИзменяетСохраняемыеДанные = Истина; + + ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 9, Истина); + КоличествоКомандВПодменю = КоличествоКомандВПодменю + 1; + КонецЕсли; + + ПредставлениеАдреса = ?(СтрокаКИ.МеждународныйФорматАдреса, + СтроковыеФункцииКлиентСервер.СтрокаЛатиницей(Адрес.Представление), Адрес.Представление); + + Если СписокАдресовВПодменю[ВРег(Адрес.Представление)] <> Неопределено Тогда + ПредставлениеАдреса = ""; + Иначе + СписокАдресовВПодменю.Вставить(ВРег(Адрес.Представление), Истина); + КонецЕсли; + + Если ПодменюКопироватьАдреса <> Неопределено Тогда + ДобавитьКнопкуСкопироватьАдрес(Форма, ИмяКоманды, + ПредставлениеАдреса, ПараметрыКонтактнойИнформации, ПодменюКопироватьАдреса); + КонецЕсли; + + Если КонтекстноеПодменюКопироватьАдреса <> Неопределено Тогда + ДобавитьКнопкуСкопироватьАдрес(Форма, ИмяКоманды, + ПредставлениеАдреса, ПараметрыКонтактнойИнформации, КонтекстноеПодменюКопироватьАдреса); + КонецЕсли; + + КонецЦикла; + ОбщееКоличествоКоманд = ОбщееКоличествоКоманд + КоличествоКомандВПодменю; + КонецЦикла; + +КонецПроцедуры + +Процедура ДобавитьКнопкуСкопироватьАдрес(Форма, ИмяКоманды, ЗаголовокЭлемента, ПараметрыКонтактнойИнформации, Подменю) + + ИмяЭлемента = Подменю.Имя + "_" + ИмяКоманды; + Кнопка = Форма.Элементы.Найти(ИмяЭлемента); + Если Кнопка = Неопределено Тогда + Кнопка = Форма.Элементы.Добавить(ИмяЭлемента, Тип("КнопкаФормы"), Подменю); + Кнопка.ИмяКоманды = ИмяКоманды; + ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяЭлемента, 1); + КонецЕсли; + Кнопка.Заголовок = ЗаголовокЭлемента; + Кнопка.Видимость = ЗначениеЗаполнено(ЗаголовокЭлемента); + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl index 3ee83277c..bd0f3d6a3 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl @@ -33,12 +33,13 @@ ПредставлениеАдресаПоСтруктуре(СтруктураАдреса, "Город", Представление, "ГородСокращение", ФорматФИАС); ПредставлениеАдресаПоСтруктуре(СтруктураАдреса, "ВнутригородскойРайон", Представление, "ВнутригородскойРайонСокращение", ФорматФИАС); ПредставлениеАдресаПоСтруктуре(СтруктураАдреса, "НаселенныйПункт", Представление, "НаселенныйПунктСокращение", ФорматФИАС); + ПредставлениеАдресаПоСтруктуре(СтруктураАдреса, "Территория", Представление, "ТерриторияСокращение", ФорматФИАС); ПредставлениеАдресаПоСтруктуре(СтруктураАдреса, "Улица", Представление, "УлицаСокращение", ФорматФИАС); ПредставлениеАдресаПоСтруктуре(СтруктураАдреса, "ДополнительнаяТерритория", Представление, "ДополнительнаяТерриторияСокращение", ФорматФИАС); ПредставлениеАдресаПоСтруктуре(СтруктураАдреса, "ЭлементДополнительнойТерритории", Представление, "ЭлементДополнительнойТерриторииСокращение", ФорматФИАС); Если СтруктураАдреса.Свойство("Здание") Тогда - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Номер", СтруктураАдреса.Здание)), ", " + ЗначениеПоКлючуСтруктуры("ТипЗдания", СтруктураАдреса) + " № ", Представление); + ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Номер", СтруктураАдреса.Здание)), ", " + ЗначениеПоКлючуСтруктуры("ТипЗдания", СтруктураАдреса.Здание) + " № ", Представление); Иначе ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Дом", СтруктураАдреса)), ", " + ЗначениеПоКлючуСтруктуры("ТипДома", СтруктураАдреса) + " № ", Представление); КонецЕсли; @@ -119,6 +120,20 @@ КонецФункции +// Возвращает признак того, является ли строка данных контактной информации JSON данными. +// +// Параметры: +// Текст - Строка - Проверяемая строка. +// +// Возвращаемое значение: +// Булево - результат проверки. +// +Функция ЭтоКонтактнаяИнформацияВJSON(Знач Текст) Экспорт + + Возврат ТипЗнч(Текст) = Тип("Строка") И СтрНачинаетсяС(СокрЛ(Текст), "{"); + +КонецФункции + // Текст, который выводит в поле контактной информации, когда он не заполнен и отображается в виде гиперссылки. // // Возвращаемое значение: @@ -153,25 +168,13 @@ // Структура - пустая структура контактной информации, ключи - имена полей, значения поля. // Функция СтруктураКонтактнойИнформацииПоТипу(ТипКИ, ФорматАдреса = Неопределено) Экспорт - - Если Ложь Тогда - РаботаСАдресамиКлиентСервер = Неопределено; - КонецЕсли; - - Если ТипЗнч(РаботаСАдресамиКлиентСервер) = Тип("ОбщийМодуль") Тогда - - Возврат РаботаСАдресамиКлиентСервер.СтруктураКонтактнойИнформацииПоТипу(ТипКИ, ФорматАдреса); - + + Если ТипКИ = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес") Тогда + Возврат СтруктураПолейАдреса(); + ИначеЕсли ТипКИ = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Телефон") Тогда + Возврат СтруктураПолейТелефона(); Иначе - - Если ТипКИ = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес") Тогда - Возврат СтруктураПолейАдреса(); - ИначеЕсли ТипКИ = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Телефон") Тогда - Возврат СтруктураПолейТелефона(); - Иначе - Возврат Новый Структура; - КонецЕсли; - + Возврат Новый Структура; КонецЕсли; КонецФункции @@ -191,10 +194,105 @@ Возврат "http://www.v8.1c.ru/ssl/contactinfo"; КонецФункции +// Описание структуры контактной информации для хранения ее в формате JSON. +// Список полей может быть расширен национальными полями в одноименной функции общего модуля РаботаСАдресамиКлиентСервер. +// +// ТипКонтактнойИнформации - ПеречислениеСсылка.ТипыКонтактнойИнформации - +// Тип контактной информации, определяющий состав полей контактной информации. +// +// Возвращаемое значение: +// Структура - Поля контактной информации с полями: +// * Value - Строка - Представление контактной информации. +// * Comment - Строка - Комментарий. +// * Type - Строка - Тип контактной информации. +// Для типа контактной информации адрес: +// * Type - Строка - Тип контактной информации. +// * Country - Строка - Наименование страны. +// * CountryCode - Строка -Код страны. +// * ZIPcode- Строка -Индекс. +// * Area - Строка - представление региона +// * AreaType - Строка - сокращение(тип) региона. +// * City - Строка - представление города. +// * CityType - Строка - сокращение города. +// * Street - Строка - представление улицы. +// * StreetType - Строка - сокращение улицы. +// Для типа контактной информации телефон: +// * CountryCode - Строка - код страны. +// * AreaCode - Строка - региональный код. +// * Number - Строка - телефонный номер. +// * ExtNumber - Строка - дополнительный телефонный номер. +// +Функция ОписаниеНовойКонтактнойИнформации(Знач ТипКонтактнойИнформации) Экспорт + + Если ТипЗнч(ТипКонтактнойИнформации) <> Тип("ПеречислениеСсылка.ТипыКонтактнойИнформации") Тогда + ТипКонтактнойИнформации = ""; + КонецЕсли; + + Результат = Новый Структура; + + Результат.Вставить("value", ""); + Результат.Вставить("comment", ""); + Результат.Вставить("type", Строка(ТипКонтактнойИнформации)); + + Если ТипКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес") Тогда + + Результат.Вставить("country", ""); + Результат.Вставить("addressType", АдресВСвободнойФорме()); + Результат.Вставить("countryCode", ""); + Результат.Вставить("ZIPcode", ""); + Результат.Вставить("area", ""); + Результат.Вставить("areaType", ""); + Результат.Вставить("city", ""); + Результат.Вставить("cityType", ""); + Результат.Вставить("street", ""); + Результат.Вставить("streetType", ""); + + ИначеЕсли ТипКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Телефон") + Или ТипКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Факс") Тогда + + Результат.Вставить("countryCode", ""); + Результат.Вставить("areaCode", ""); + Результат.Вставить("number", ""); + Результат.Вставить("extNumber", ""); + + КонецЕсли; + + Возврат Результат; + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции +Функция АдресВСвободнойФорме() Экспорт + Возврат НСтр("ru='ВСвободнойФорме'"); +КонецФункции + +Функция АдресЕАЭС() Экспорт + Возврат НСтр("ru='ЕАЭС'"); +КонецФункции + +Функция ИностранныйАдрес() Экспорт + Возврат НСтр("ru='Иностранный'"); +КонецФункции + +Функция ЭтоАдресВСвободнойФорме(ТипАдреса) Экспорт + Возврат СтрСравнить(АдресВСвободнойФорме(), ТипАдреса) = 0; +КонецФункции + +Функция ЭтоИностранныйАдрес(ТипАдреса) Экспорт + Возврат СтрСравнить(ИностранныйАдрес(), ТипАдреса) = 0; +КонецФункции + +Функция ЗначениеСтроенияИлиПомещения(Тип, Значение) Экспорт + Возврат Новый Структура("Type, Number", Тип, Значение); +КонецФункции + +Функция ЭтоТипАдрес(ЗначениеТипа) Экспорт + Возврат СтрСравнить(ЗначениеТипа, Строка(ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес"))) = 0; +КонецФункции + // Возвращает пустую структура адреса. // // Возвращаемое значение: @@ -212,27 +310,6 @@ КонецФункции - -// Функция формирует полное наименование из массив адреса. -// -// Параметры: -// Адрес - массив - массив содержащий адресные объекты. -// Возвращаемое значение: -// Строка - Полное наименование адреса в виде строки. -Функция СформироватьПолноеНаименование(Адрес) Экспорт - - ПолноеНаименование = ""; - Разделитель = ""; - Для каждого Элемент Из Адрес Цикл - Если ЗначениеЗаполнено(Элемент) Тогда - ПолноеНаименование = ПолноеНаименование + Разделитель + Элемент; - Разделитель = ", "; - КонецЕсли; - КонецЦикла; - - Возврат ПолноеНаименование; -КонецФункции - #Область СлужебныеПроцедурыИФункцииПоРаботеСXMLАдресами // Возвращает структуру с наименованием и сокращением от значения. @@ -368,105 +445,6 @@ Возврат Неопределено; КонецФункции -// Обрабатывает структуру частей адреса и возвращает идентификатор ближайшего определенного родителя. -// -// Параметры: -// ЧастьАдреса - Строка, Структура - Идентификатор части или сама часть. -// ЧастиАдреса - Структура - Описание текущего состояния адреса. -// -// Возвращаемое значение: -// УникальныйИдентификатор - идентификатор родителя. -// -Функция ИдентификаторРодителяЧастиАдресаЭлемента(ЧастьАдреса, ЧастиАдреса) Экспорт - - ПутьXPath = ЧастьАдреса.ПутьXPath; - Элемент = Неопределено; - - Порядок = Новый СписокЗначений; - Для Каждого КлючЗначение Из ЧастиАдреса Цикл - Часть = КлючЗначение.Значение; - НовыйЭлемент = Порядок.Добавить(Часть.Уровень, КлючЗначение.Ключ); - Если Часть.ПутьXPath = ПутьXPath Тогда - Элемент = НовыйЭлемент; - КонецЕсли; - КонецЦикла; - Порядок.СортироватьПоЗначению(НаправлениеСортировки.Убыв); - - Если Элемент <> Неопределено Тогда - Для Позиция = Порядок.Индекс(Элемент) + 1 По Порядок.Количество() - 1 Цикл - Часть = ЧастиАдреса[ Порядок[Позиция].Представление ]; - Если ЗначениеЗаполнено(Часть.Представление) Тогда - Возврат Часть.Идентификатор; - КонецЕсли; - КонецЦикла; - КонецЕсли; - - Возврат Неопределено; -КонецФункции - -// Обрабатывает структуру частей адреса и возвращает идентификатор последнего заполненного элемента. -// -// Параметры: -// ЧастиАдреса - Структура - Описание текущего состояния адреса. -// -// Возвращаемое значение: -// УникальныйИдентификатор - идентификатор. -// -Функция ИдентификаторЭлементаПоЧастямАдреса(ЧастиАдреса, ИскатьПоУлицам = Истина) Экспорт - - Порядок = Новый СписокЗначений; - Для Каждого КлючЗначение Из ЧастиАдреса Цикл - Если НЕ ИскатьПоУлицам И КлючЗначение.Значение.Уровень > 6 Тогда - Продолжить; - КонецЕсли; - Порядок.Добавить(КлючЗначение.Значение.Уровень, КлючЗначение.Ключ); - КонецЦикла; - Порядок.СортироватьПоЗначению(НаправлениеСортировки.Убыв); - - Для Каждого ЭлементСписка Из Порядок Цикл - ИмяРеквизита = ЭлементСписка.Представление; - Если ЧастиАдреса.Свойство(ИмяРеквизита) Тогда - ЧастьАдреса = ЧастиАдреса[ИмяРеквизита]; - Если ЗначениеЗаполнено(ЧастьАдреса.Представление) Тогда - Возврат ЧастьАдреса.Идентификатор; - КонецЕсли; - КонецЕсли - КонецЦикла; - - Возврат Неопределено; -КонецФункции - -// Обрабатывает структуру частей адреса. -// -// Параметры: -// ИмяЧастиАдреса - Строка - Идентификатор части. -// ЧастиАдреса - Структура - Описание текущего состояния адреса. -// ВыбранноеЗначение - Строка, Структура - новое значение. -// -// Возвращаемое значение: -// Строка - Новое представление части адреса. -// -Функция УстановитьЗначениеЧастиАдреса(ИмяЧастиАдреса, ЧастиАдреса, ВыбранноеЗначение) Экспорт - - ЧастьАдреса = ЧастиАдреса[ИмяЧастиАдреса]; - - Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда - ЧастьАдреса.Идентификатор = ВыбранноеЗначение.Идентификатор; - ЧастьАдреса.Представление = ВыбранноеЗначение.Представление; - Иначе - ЧастьАдреса.Идентификатор = Неопределено; - ЧастьАдреса.Представление = СокрЛП(ВыбранноеЗначение); - КонецЕсли; - - Представление = ЧастьАдреса.Представление; - - Части = НаименованиеСокращение(Представление); - ЧастьАдреса.Наименование = Части.Наименование; - ЧастьАдреса.Сокращение = Части.Сокращение; - - Возврат Представление; -КонецФункции - #КонецОбласти #Область ПрочиеСлужебныеПроцедурыИФункции @@ -602,10 +580,12 @@ // Функция СтруктураЗначенийПолей(СтрокаПолей, ВидКонтактнойИнформации = Неопределено) Экспорт - Если ВидКонтактнойИнформации = Неопределено Тогда - Результат = Новый Структура; + Если ВидКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес") Тогда + Результат = СтруктураПолейАдреса(); + ИначеЕсли ВидКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Телефон") Тогда + Результат = СтруктураПолейТелефона(); Иначе - Результат = СтруктураКонтактнойИнформацииПоТипу(ВидКонтактнойИнформации.Тип); + Результат = Новый Структура; КонецЕсли; ПоследнийЭлемент = Неопределено; @@ -636,6 +616,29 @@ Возврат Результат; КонецФункции +Процедура ОбновитьПредставлениеАдреса(Адрес, ВключатьСтрануВПредставление) Экспорт + + Если ТипЗнч(Адрес) <> Тип("Структура") Тогда + ВызватьИсключение НСтр("ru='Для формирования представления адреса передан некорректный тип адреса'"); + КонецЕсли; + + СписокЗаполненныхУровней = Новый Массив; + + Если ВключатьСтрануВПредставление И Адрес.Свойство("Country") И НЕ ПустаяСтрока(Адрес.Country) Тогда + СписокЗаполненныхУровней.Добавить(Адрес.Country); + КонецЕсли; + + Если Адрес.Свойство("ZipCode") И НЕ ПустаяСтрока(Адрес.ZipCode) Тогда + СписокЗаполненныхУровней.Добавить(Адрес.ZipCode); + КонецЕсли; + + СписокЗаполненныхУровней.Добавить(Адрес["Area"] + " " + Адрес["AreaType"]); + СписокЗаполненныхУровней.Добавить(Адрес["City"] + " " + Адрес["CityType"]); + + Адрес.Value = СтрСоединить(СписокЗаполненныхУровней, ", "); + +КонецПроцедуры + #КонецОбласти #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебный/Module.bsl index 892a9a408..38f1cb971 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебный/Module.bsl @@ -1,27 +1,5 @@ #Область СлужебныйПрограммныйИнтерфейс -// Возвращает значение перечисления тип вида контактной информации. -// -// Параметры: -// ВидИнформации - СправочникСсылка.ВидыКонтактнойИнформации, Структура - источник данных. -// -Функция ТипВидаКонтактнойИнформации(Знач ВидИнформации) Экспорт - Результат = Неопределено; - - Тип = ТипЗнч(ВидИнформации); - Если Тип = Тип("ПеречислениеСсылка.ТипыКонтактнойИнформации") Тогда - Результат = ВидИнформации; - ИначеЕсли Тип = Тип("СправочникСсылка.ВидыКонтактнойИнформации") Тогда - Результат = ВидИнформации.Тип; - ИначеЕсли ВидИнформации <> Неопределено Тогда - Данные = Новый Структура("Тип"); - ЗаполнитьЗначенияСвойств(Данные, ВидИнформации); - Результат = Данные.Тип; - КонецЕсли; - - Возврат Результат; -КонецФункции - // Получить первое значение определенного вида контактной информации у объекта. // // Параметры: @@ -83,19 +61,19 @@ КонецФункции -Функция ПроверитьАдресВXML(АдресВXML, ПараметрыПроверкиАдреса = Неопределено) Экспорт +Функция ПроверитьАдрес(Адрес, ПараметрыПроверкиАдреса = Неопределено) Экспорт РезультатПроверки = Новый Структура("Результат, СписокОшибок"); РезультатПроверки.СписокОшибок = Новый СписокЗначений; - Если НЕ ЭтоСтрокаXML(АдресВXML) Тогда + Если ТипЗнч(Адрес) <> Тип("Строка") Тогда РезультатПроверки.Результат = "СодержитОшибки"; РезультатПроверки.СписокОшибок.Добавить("ФорматАдреса", НСтр("ru = 'Некорректный формат адреса'")); Возврат РезультатПроверки; КонецЕсли; - + Если Метаданные.Обработки.Найти("РасширенныйВводКонтактнойИнформации") <> Неопределено Тогда - Обработки["РасширенныйВводКонтактнойИнформации"].ПроверитьАдресВXML(АдресВXML, РезультатПроверки, ПараметрыПроверкиАдреса); + Обработки["РасширенныйВводКонтактнойИнформации"].ПроверитьАдрес(Адрес, РезультатПроверки, ПараметрыПроверкиАдреса); КонецЕсли; Возврат РезультатПроверки; @@ -237,6 +215,42 @@ #Область ОбновлениеИнформационнойБазы +Процедура АвтоподборАдреса(Знач Текст, ДанныеВыбора) Экспорт + + Если Метаданные.Обработки.Найти("РасширенныйВводКонтактнойИнформации") <> Неопределено Тогда + Результат = Обработки["РасширенныйВводКонтактнойИнформации"].СписокАвтоподбораНаселенногоПункта(Текст); + Если Результат.Отказ Тогда + Возврат; + КонецЕсли; + + ДанныеВыбора = Результат.Данные; + + // Оформление списка поиска + ФрагментыТекстаПоиска = СтрРазделить(Текст, " "); + Для каждого СтрокаДанных Из ДанныеВыбора Цикл + Представление = СтрокаДанных.Представление; + Для каждого ФрагментТекстаПоиска Из ФрагментыТекстаПоиска Цикл + ПредставлениеВрег = ВРег(Представление); + Позиция = СтрНайти(ПредставлениеВрег, ВРег(ФрагментТекстаПоиска)); + Если Позиция > 0 Тогда + Представление = Лев(Представление, Позиция - 1) + Символы.ПС + Символы.ВТаб + Сред(Представление, Позиция, СтрДлина(ФрагментТекстаПоиска)) + + Символы.ПС + Сред(Представление, Позиция + СтрДлина(ФрагментТекстаПоиска)); + КонецЕсли; + КонецЦикла; + Набор = СтрРазделить(Представление, Символы.ПС); + Для Счетчик = 0 По Набор.Количество() - 1 Цикл + Если СтрНачинаетсяС(Набор[Счетчик], Символы.ВТаб) Тогда + Набор[Счетчик] = Новый ФорматированнаяСтрока(СокрЛП(Набор[Счетчик]), Новый Шрифт(,, Истина), ЦветаСтиля.РезультатУспехЦвет); + КонецЕсли; + КонецЦикла; + СтрокаДанных.Представление = Новый ФорматированнаяСтрока(Набор); + + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры + // Неразделенный монопольный обработчик для копирования стран мира из нулевой области. // Сохраняет эталон и список областей данных - адресатов. // @@ -728,181 +742,271 @@ КонецФункции -// Преобразует XML в объект XDTO контактной информации. +// Разбирает представление КИ и возвращает XDTO. // // Параметры: -// Текст - Строка - строка XML контактной информации. -// ОжидаемыйВид - СправочникСсылка.ВидыКонтактнойИнформации, ПеречислениеСсылка.ТипыКонтактнойИнформации, Структура -// РезультатПреобразования - Структура - если задана, то в свойства записываются сведения: -// * ТекстОшибки - Строка - описание ошибок чтения. При этом возвращаемое значение функции будет -// корректного типа, но не заполнен. +// Текст - Строка - XML +// ОжидаемыйВид - СправочникСсылка.ВидыКонтактнойИнформации, ПеречислениеСсылка.ТипыКонтактнойИнформации, Структура. // // Возвращаемое значение: -// ОбъектXDTO - контактная информация, соответствующая XDTO-пакету КонтактнаяИнформация. -// -Функция КонтактнаяИнформацияИзXML(Знач Текст, Знач ОжидаемыйВид = Неопределено, РезультатПреобразования = Неопределено, Знач Представление = "") Экспорт +// Строк - контактная информация. +// +Функция КонтактнаяИнформацияПоПредставлению(Представление, ОжидаемыйВид) Экспорт - ОжидаемыйТип = ТипВидаКонтактнойИнформации(ОжидаемыйВид); + ОжидаемыйТип = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ТипВидаКонтактнойИнформации(ОжидаемыйВид); - Если РезультатПреобразования = Неопределено Или ТипЗнч(РезультатПреобразования) <> Тип("Структура") Тогда - РезультатПреобразования = Новый Структура; + Если ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда + + Возврат СформироватьАдресПоПредставлению(Представление, Истина); + + ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Телефон + ИЛИ ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Факс Тогда + Возврат ДесериализацияТелефонаФаксаВJSON("", Представление, ОжидаемыйТип); + + Иначе + + КонтактнойИнформации = УправлениеКонтактнойИнформациейКлиентСервер.ОписаниеНовойКонтактнойИнформации(ОжидаемыйТип); + КонтактнойИнформации.Value = Представление; + Возврат КонтактнойИнформации; + КонецЕсли; - РезультатПреобразования.Вставить("СведенияИсправлены", Ложь); - ПеречислениеАдрес = Перечисления.ТипыКонтактнойИнформации.Адрес; - ПеречислениеАдресЭлектроннойПочты = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты; - ПеречислениеSkype = Перечисления.ТипыКонтактнойИнформации.Skype; - ПеречислениеВебСтраница = Перечисления.ТипыКонтактнойИнформации.ВебСтраница; - ПеречислениеТелефон = Перечисления.ТипыКонтактнойИнформации.Телефон; - ПеречислениеФакс = Перечисления.ТипыКонтактнойИнформации.Факс; - ПеречислениеДругое = Перечисления.ТипыКонтактнойИнформации.Другое; +КонецФункции + +Функция СформироватьАдресПоПредставлению(Представление, РазбиватьНаПоля = Ложь) - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); - Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(Текст) Тогда - ЧтениеXML = Новый ЧтениеXML; + ЕстьРаботаСАдресамиКлиентСервер = Метаданные.ОбщиеМодули.Найти("РаботаСАдресамиКлиентСервер") <> Неопределено; + + Если ЕстьРаботаСАдресамиКлиентСервер Тогда + МодульРаботаСАдресамиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресамиКлиентСервер"); + Адрес = МодульРаботаСАдресамиКлиентСервер.ОписаниеНовойКонтактнойИнформации(Перечисления.ТипыКонтактнойИнформации.Адрес); + НаименованиеОсновнаяСтрана = СокрЛП(МодульРаботаСАдресамиКлиентСервер.ОсновнаяСтрана().Наименование); + Иначе + Адрес = УправлениеКонтактнойИнформациейКлиентСервер.ОписаниеНовойКонтактнойИнформации(Перечисления.ТипыКонтактнойИнформации.Адрес); + НаименованиеОсновнаяСтрана = ""; + КонецЕсли; + + // Разбираем адрес из его представления по классификатору. + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда + Адрес.Value = Представление; + Возврат Адрес; + КонецЕсли; + + ДанныеАнализа = ЧастиАдресаТаблицей(Представление); + Если ДанныеАнализа.Количество() = 0 Тогда + Возврат Адрес; + КонецЕсли; + + ОпределитьСтрануИИндекс(ДанныеАнализа); + СтрокаСтраны = ДанныеАнализа.Найти(-2, "Уровень"); + + Если СтрокаСтраны = Неопределено Тогда + Адрес.Country = НаименованиеОсновнаяСтрана; + Иначе + Адрес.Country = СокрЛП(ВРег(СтрокаСтраны.Значение)); + // Проверка наличия страны в справочнике Страны мира и неявное добавление ее в случае отсутствия. + СтранаМира = УправлениеКонтактнойИнформацией.СтранаМираПоКодуИлиНаименованию(Адрес.Country); + КонецЕсли; + + Если Адрес.Country = НаименованиеОсновнаяСтрана Тогда - Если Метаданные.ОбщиеМодули.Найти("РаботаСАдресами") <> Неопределено Тогда - МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами"); - Текст = МодульРаботаСАдресами.ПередЧтениемXDTOКонтактнаяИнформация(Текст); - КонецЕсли; - - ЧтениеXML.УстановитьСтроку(Текст); - - ТекстОшибки = Неопределено; - Попытка - Результат = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); - Исключение + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - ОписаниеПричиныОшибки = НСтр("ru='Сведения контактной информации были восстановлены после сбоя.'"); - Если ЗначениеЗаполнено(Представление) Тогда - Результат = КонтактнаяИнформацияXDTOПоПредставлению(Представление, ОжидаемыйВид); - ЗначенияПолей = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияXMLПоПредставлению(Представление, ОжидаемыйВид); - НовоеПредставление = УправлениеКонтактнойИнформацией.ПредставлениеКонтактнойИнформации(ЗначенияПолей, ОжидаемыйВид); - Если СтрСравнить(НовоеПредставление, Представление) <> 0 Тогда - ТекстОшибки = ОписаниеПричиныОшибки; - РезультатПреобразования.Вставить("ТекстОшибки", ТекстОшибки); + МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); + ВариантыАдреса = МодульАдресныйКлассификаторСлужебный.РаспознатьАдрес(ДанныеАнализа); + + Если ВариантыАдреса = Неопределено Тогда + + Если РазбиватьНаПоля Тогда + + МодульРаботаСАдресамиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресамиКлиентСервер"); + Адрес.AddressType = МодульРаботаСАдресамиКлиентСервер.МуниципальныйАдрес(); + + Адрес.Value = Представление; + РаспределитьАдресПоПолямБезКлассификатора(Адрес, ДанныеАнализа); + + Иначе + + Адрес.Value = Представление; + Адрес.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.АдресВСвободнойФорме(); + КонецЕсли; - - КонецЕсли; - - // Некорректный формат XML - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Предупреждение, , Текст, ОписаниеПричиныОшибки + Символы.ПС - + ИнформацияОбОшибке().Описание); - - РезультатПреобразования.Вставить("СведенияИсправлены", Истина); - КонецПопытки; - - Если ТекстОшибки = Неопределено И ОжидаемыйТип <> Неопределено Тогда - - Если Результат = Неопределено Тогда - ТекстОшибки = СтрЗаменить(НСтр("ru='Сведения контактной информации %ОжидаемыйВид% были повреждены или некорректно заполнены.'"), - "%ОжидаемыйВид%", Строка(ОжидаемыйВид)); Иначе - // Контролируем соответствие типов. - НайденТип = ?(Результат.Состав = Неопределено, Неопределено, Результат.Состав.Тип()); - ШаблонСообщения = СтрЗаменить(НСтр("ru='Сведения %1 контактной информации %ОжидаемыйВид% были повреждены или некорректно заполнены.'"), - "%ОжидаемыйВид%", Строка(ОжидаемыйВид)); - Если ОжидаемыйТип = ПеречислениеАдрес И НайденТип <> ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") Тогда - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, НСтр("ru='об адресе'")); - ИначеЕсли ОжидаемыйТип = ПеречислениеАдресЭлектроннойПочты И НайденТип <> ФабрикаXDTO.Тип(ПространствоИмен, "ЭлектроннаяПочта") Тогда - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, НСтр("ru='электронной почты'")); - ИначеЕсли ОжидаемыйТип = ПеречислениеВебСтраница И НайденТип <> ФабрикаXDTO.Тип(ПространствоИмен, "ВебСайт") Тогда - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, НСтр("ru='веб-страницы'")); - ИначеЕсли ОжидаемыйТип = ПеречислениеТелефон И НайденТип <> ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона") Тогда - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, НСтр("ru='о номере телефона'")); - ИначеЕсли ОжидаемыйТип = ПеречислениеФакс И НайденТип <> ФабрикаXDTO.Тип(ПространствоИмен, "НомерФакса") Тогда - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, НСтр("ru='о номере факса'")); - ИначеЕсли ОжидаемыйТип = ПеречислениеSkype И НайденТип <> ФабрикаXDTO.Тип(ПространствоИмен, "Skype") Тогда - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, НСтр("ru='о логине Skype'")); - ИначеЕсли ОжидаемыйТип = ПеречислениеДругое И НайденТип <> ФабрикаXDTO.Тип(ПространствоИмен, "Прочее") Тогда - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, НСтр("ru='о дополнительной'")); + Адрес = ВариантыАдреса; + Если ЕстьРаботаСАдресамиКлиентСервер Тогда + МодульРаботаСАдресамиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресамиКлиентСервер"); + МодульРаботаСАдресамиКлиентСервер.ОбновитьПредставлениеАдреса(Адрес, Ложь); + Иначе + УправлениеКонтактнойИнформациейКлиентСервер.ОбновитьПредставлениеАдреса(Адрес, Ложь); КонецЕсли; + КонецЕсли; - КонецЕсли; - - Если ТекстОшибки = Неопределено Тогда - // Успешно прочитано - Возврат Результат; - КонецЕсли; - - РезультатПреобразования.Вставить("ТекстОшибки", ТекстОшибки); - - // Будет возвращен пустой объект. - Текст = ""; - КонецЕсли; - - Если ТипЗнч(Текст) = Тип("СписокЗначений") Тогда - Представление = ""; - ЭтоНовый = Текст.Количество() = 0; - ИначеЕсли ПустаяСтрока(Представление) Тогда - Представление = Строка(Текст); - ЭтоНовый = ПустаяСтрока(Текст); - Иначе - ЭтоНовый = Ложь; - КонецЕсли; - - Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); - - // Разбор - Если ОжидаемыйТип = ПеречислениеАдрес Тогда - Если ЭтоНовый Тогда - Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Адрес")); - Иначе - Результат = АдресXMLВXDTO(Текст, Представление, ОжидаемыйТип); - КонецЕсли; - - ИначеЕсли ОжидаемыйТип = ПеречислениеТелефон Тогда - Если ЭтоНовый Тогда - Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона")); - Иначе - Результат = ДесериализацияТелефона(Текст, Представление, ОжидаемыйТип) - КонецЕсли; - - ИначеЕсли ОжидаемыйТип = ПеречислениеФакс Тогда - Если ЭтоНовый Тогда - Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "НомерФакса")); - Иначе - Результат = ДесериализацияФакса(Текст, Представление, ОжидаемыйТип) - КонецЕсли; - - ИначеЕсли ОжидаемыйТип = ПеречислениеАдресЭлектроннойПочты Тогда - Если ЭтоНовый Тогда - Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "ЭлектроннаяПочта")); - Иначе - Результат = ДесериализацияПрочейКонтактнойИнформации(Текст, Представление, ОжидаемыйТип) - КонецЕсли; - ИначеЕсли ОжидаемыйТип = ПеречислениеSkype Тогда - Если ЭтоНовый Тогда - Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Skype")); - Иначе - Результат = ДесериализацияПрочейКонтактнойИнформации(Текст, Представление, ОжидаемыйТип) - КонецЕсли; - ИначеЕсли ОжидаемыйТип = ПеречислениеВебСтраница Тогда - Если ЭтоНовый Тогда - Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "ВебСайт")); - Иначе - Результат = ДесериализацияПрочейКонтактнойИнформации(Текст, Представление, ОжидаемыйТип) - КонецЕсли; - - ИначеЕсли ОжидаемыйТип = ПеречислениеДругое Тогда - Если ЭтоНовый Тогда - Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Прочее")); - Иначе - Результат = ДесериализацияПрочейКонтактнойИнформации(Текст, Представление, ОжидаемыйТип) + КонецЕсли; Иначе - ТекстОшибки = НСтр("ru = 'Сведения о виде контактной информации %1 были повреждены или некорректно заполнены, - |т.к. обязательное поле тип не заполнено.'"); - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, ?(ЗначениеЗаполнено(ОжидаемыйВид), """" + ОжидаемыйВид.Наименование + """", "")); - РезультатПреобразования.Вставить("ТекстОшибки", ТекстОшибки); + + Если ЕстьРаботаСАдресамиКлиентСервер Тогда + МодульРаботаСАдресамиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресамиКлиентСервер"); + ТипАдреса = ?(УправлениеКонтактнойИнформацией.ЭтоСтранаУчастникЕАЭС(Адрес.Country), + УправлениеКонтактнойИнформациейКлиентСервер.АдресЕАЭС(), + УправлениеКонтактнойИнформациейКлиентСервер.ИностранныйАдрес()); + Адрес.AddressType = ТипАдреса; + Иначе + Адрес.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.АдресВСвободнойФорме(); + КонецЕсли; + + НовоеПредставление = Новый Массив; + ДанныеАнализа.Сортировать("Позиция"); + Для каждого ЧастьАдрес Из ДанныеАнализа Цикл + Если ЧастьАдрес.Уровень >=0 Тогда + НовоеПредставление.Добавить(ЧастьАдрес.Значение); + КонецЕсли; + КонецЦикла; + + Адрес.Area = СтрСоединить(НовоеПредставление, ", "); + + КонецЕсли; + + Если ПустаяСтрока(Адрес.ZipCode) Тогда + СтрокаИндекс = ДанныеАнализа.Найти(-1, "Уровень"); + Если СтрокаИндекс <> Неопределено Тогда + Адрес.ZipCode = СокрЛП(СтрокаИндекс.Значение); + КонецЕсли; + КонецЕсли; + + Возврат Адрес; + +КонецФункции + +Процедура РаспределитьАдресПоПолямБезКлассификатора(Адрес, ДанныеАнализа) + + ПредставлениеПоДаннымАнализа = Новый Массив; + Для каждого ЧастьАдрес Из ДанныеАнализа Цикл + Если ЧастьАдрес.Уровень >= 0 Тогда + ПредставлениеПоДаннымАнализа.Добавить(СокрЛП(ЧастьАдрес.Наименование + " " + ЧастьАдрес.Сокращение)); + КонецЕсли; + КонецЦикла; + + Адрес.Street = СтрСоединить(ПредставлениеПоДаннымАнализа, ", "); + +КонецПроцедуры + +Функция ЧастиАдресаТаблицей(Знач Текст) + + ТипСтрока = Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(128)); + ТипЧисло = Новый ОписаниеТипов("Число"); + + Результат = Новый ТаблицаЗначений; + Колонки = Результат.Колонки; + Колонки.Добавить("Уровень", ТипЧисло); + Колонки.Добавить("Позиция", ТипЧисло); + Колонки.Добавить("Значение", ТипСтрока); + Колонки.Добавить("Наименование", ТипСтрока); + Колонки.Добавить("Сокращение", ТипСтрока); + Колонки.Добавить("Начало", ТипЧисло); + Колонки.Добавить("Длина", ТипЧисло); + Колонки.Добавить("Идентификатор", ТипСтрока); + + Номер = 1; + Для Каждого Часть Из СловаТекстаТаблицей(Текст, "," + Символы.ПС) Цикл + Значение = СокрЛП(Часть.Значение); + Если ПустаяСтрока(Значение) Тогда + Продолжить; + КонецЕсли; + + Строка = Результат.Добавить(); + + Строка.Уровень = 0; + Строка.Позиция = Номер; + Номер = Номер + 1; + + Строка.Начало = Часть.Начало; + Строка.Длина = Часть.Длина; + + Позиция = СтрДлина(Значение); + Пока Позиция > 0 Цикл + Символ = Сред(Значение, Позиция, 1); + Если ПустаяСтрока(Символ) Тогда + Строка.Наименование = СокрЛП(Лев(Значение, Позиция-1)); + Прервать; + КонецЕсли; + Строка.Сокращение = Символ + Строка.Сокращение; + Позиция = Позиция - 1; + КонецЦикла; + + Если ПустаяСтрока(Строка.Наименование) Тогда + Строка.Наименование = СокрЛП(Строка.Сокращение); + Строка.Сокращение = ""; + КонецЕсли; + Строка.Значение = СокрЛП(Строка.Наименование + " " + Строка.Сокращение); + КонецЦикла; + + Возврат Результат; +КонецФункции + +Функция СловаТекстаТаблицей(Знач Текст, Знач Разделители = Неопределено) + + // Удаление из текста спец. символов "точек", "номеров". + Текст = СтрЗаменить(Текст, "№", ""); + + НачалоСлова = 0; + Состояние = 0; + + ТипСтрока = Новый ОписаниеТипов("Строка"); + ТипЧисло = Новый ОписаниеТипов("Число"); + + Результат = Новый ТаблицаЗначений; + Колонки = Результат.Колонки; + Колонки.Добавить("Значение", ТипСтрока); + Колонки.Добавить("Начало", ТипЧисло); + Колонки.Добавить("Длина", ТипЧисло); + + Для Позиция = 1 По СтрДлина(Текст) Цикл + ТекущийСимвол = Сред(Текст, Позиция, 1); + ЭтоРазделитель = ?(Разделители = Неопределено, ПустаяСтрока(ТекущийСимвол), СтрНайти(Разделители, ТекущийСимвол) > 0); + + Если Состояние = 0 И (Не ЭтоРазделитель) Тогда + НачалоСлова = Позиция; + Состояние = 1; + ИначеЕсли Состояние = 1 И ЭтоРазделитель Тогда + Строка = Результат.Добавить(); + Строка.Начало = НачалоСлова; + Строка.Длина = Позиция-НачалоСлова; + Строка.Значение = Сред(Текст, Строка.Начало, Строка.Длина); + Состояние = 0; + КонецЕсли; + КонецЦикла; + + Если Состояние = 1 Тогда + Строка = Результат.Добавить(); + Строка.Начало = НачалоСлова; + Строка.Длина = Позиция-НачалоСлова; + Строка.Значение = Сред(Текст, Строка.Начало, Строка.Длина) КонецЕсли; Возврат Результат; КонецФункции +Процедура ОпределитьСтрануИИндекс(ДанныеАдреса) + + ОписаниеТипаЧисло = Новый ОписаниеТипов("Число"); + + Классификатор = УправлениеКонтактнойИнформацией.ТаблицаКлассификатора(); + Для каждого ЭлементАдреса Из ДанныеАдреса Цикл + Индекс = ОписаниеТипаЧисло.ПривестиЗначение(ЭлементАдреса.Наименование); + Если Индекс >= 100000 И Индекс < 1000000 Тогда + ЭлементАдреса.Уровень = -1; + Иначе + Если Классификатор.Найти(ВРег(ЭлементАдреса.Значение), "Наименование") <> Неопределено Тогда + ЭлементАдреса.Уровень = -2; + КонецЕсли; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + // Разбирает представление КИ и возвращает XDTO. // // Параметры: @@ -914,7 +1018,7 @@ // Функция КонтактнаяИнформацияXDTOПоПредставлению(Текст, ОжидаемыйВид) Экспорт - ОжидаемыйТип = ТипВидаКонтактнойИнформации(ОжидаемыйВид); + ОжидаемыйТип = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ТипВидаКонтактнойИнформации(ОжидаемыйВид); Если ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда Возврат АдресXMLВXDTO("", Текст, ОжидаемыйТип); @@ -1041,10 +1145,10 @@ КонецФункции -// Возвращает представление контактной информации, сформированное из адреса в формате XML. +// Возвращает представление контактной информации. // // Параметры: -// XMLСтрока - Строка - Адрес в формат XML . +// КонтактнаяИнформация - Строка - Адрес в формат JSON или XML . // ФорматКонтактнойИнформации - Строка - если указано "КЛАДР", то в представление адреса // не включаются округ и внутригородской район. // ВидКонтактнойИнформации - Структура - дополнительные параметры формирования представления для адресов: @@ -1055,157 +1159,153 @@ // Возвращаемое значение: // Строка - сформированное представление. // -Функция ПредставлениеКонтактнойИнформации(Знач XMLСтрока, Знач ФорматКонтактнойИнформации) Экспорт +Функция ПредставлениеКонтактнойИнформации(Знач КонтактнаяИнформация, Знач ФорматКонтактнойИнформации) Экспорт - ЭтоСтрока = ТипЗнч(XMLСтрока) = Тип("Строка"); - Если ЭтоСтрока И Не УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(XMLСтрока) Тогда - // Предыдущий формат значений полей, возвращаем саму строку. - Возврат XMLСтрока; + Если ПустаяСтрока(КонтактнаяИнформация) Тогда + Возврат ""; КонецЕсли; - Вид = Новый Структура("Тип,ВключатьСтрануВПредставление,ФорматАдреса", "", Ложь, "КЛАДР"); - Если ФорматКонтактнойИнформации = Неопределено Тогда - Вид.Тип = ТипКонтактнойИнформации(?(ЭтоСтрока, XMLСтрока, КонтактнаяИнформацияИзXML(XMLСтрока))); - Иначе - ЗаполнитьЗначенияСвойств(Вид, ФорматКонтактнойИнформации); + Вид = Неопределено; + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(КонтактнаяИнформация) Тогда + КонтактнаяИнформация = СтрокаJSONВСтруктуру(КонтактнаяИнформация); + ИначеЕсли ТипЗнч(КонтактнаяИнформация) = Тип("Строка") Или ТипЗнч(КонтактнаяИнформация) = Тип("ОбъектXDTO") Тогда + КонтактнаяИнформация = КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация); + КонецЕсли; + Если ПустаяСтрока(КонтактнаяИнформация.Value) Тогда + СформироватьПредставлениеКонтактнойИнформации(КонтактнаяИнформация, Вид); КонецЕсли; - ОбъектXDTO = ?(ЭтоСтрока, КонтактнаяИнформацияИзXML(XMLСтрока), XMLСтрока); - Если Не ПустаяСтрока(ОбъектXDTO.Представление) Тогда - Возврат ОбъектXDTO.Представление; // Возвращаем ранее сформированное представление. - КонецЕсли; - - Возврат СформироватьПредставлениеКонтактнойИнформации(ОбъектXDTO, Вид); + Возврат КонтактнаяИнформация.Value КонецФункции -// Вычисляет и устанавливает флаг того, что адрес был введен в свободной форме. -// В качестве флага используется не пустота значения поля "Адрес_по_документу". +// Вычисляет, что адрес был введен в свободной форме. // // Параметры: -// XDTOИнформация - ОбъектXDTO, Строка - Контактная информация. -// НовоеЗначение - Булево - необязательное устанавливаемое новое значение. +// КонтактнаяИнформация - Структура, Строка - Контактная информация. // // Возвращаемое значение: // Булево - новое значение. // -Функция АдресВведенВСвободнойФорме(XDTOИнформация, НовоеЗначение = Неопределено) Экспорт - НадоСериализовать = ТипЗнч(XDTOИнформация) = Тип("Строка"); - Если НадоСериализовать И Не УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(XDTOИнформация) Тогда - // Старая версия значений полей, не поддерживается. - Возврат Ложь; +Функция АдресВведенВСвободнойФорме(Знач КонтактнаяИнформация) Экспорт + + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнформация) Тогда + КонтактнаяИнформацияJSON = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВJSON(КонтактнаяИнформация); + КонтактнаяИнформация = СтрокаJSONВСтруктуру(КонтактнаяИнформацияJSON); + ИначеЕсли УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(КонтактнаяИнформация) Тогда + КонтактнаяИнформация = СтрокаJSONВСтруктуру(КонтактнаяИнформация); КонецЕсли; - ОбъектXDTO = ?(НадоСериализовать, КонтактнаяИнформацияИзXML(XDTOИнформация), XDTOИнформация); - Если Не ЭтоНациональныйАдрес(ОбъектXDTO) Тогда - // Не поддерживаем - Возврат Ложь; + Если ТипЗнч(КонтактнаяИнформация) = Тип("Структура") + И КонтактнаяИнформация.Свойство("AddressType") Тогда + Возврат УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(КонтактнаяИнформация.AddressType); КонецЕсли; - АдресРФ = ОбъектXDTO.Состав.Состав; - Если ТипЗнч(НовоеЗначение) <> Тип("Булево") Тогда - // Читаем - Возврат Не ПустаяСтрока(АдресРФ.Адрес_по_документу); - КонецЕсли; - - // Устанавливаем - Если НовоеЗначение Тогда - АдресРФ.Адрес_по_документу = ОбъектXDTO.Представление; - Иначе - АдресРФ.Сбросить("Адрес_по_документу"); - КонецЕсли; + Возврат Ложь; - Если НадоСериализовать Тогда - XDTOИнформация = КонтактнаяИнформацияXDTOВXML(ОбъектXDTO); - КонецЕсли; - Возврат НовоеЗначение; КонецФункции // Формирует и возвращает представление контактной информации. // // Параметры: -// Информация - ОбъектXDTO, Строка - контактная информация. +// Информация - Структура, Строка - Контактная информация строкой в формате JSON или структура с полями. // ВидИнформации - СправочникСсылка.ВидыКонтактнойИнформации, Структура - параметры для формирования представления. -// ФорматАдреса - Строка - если указано "КЛАДР", то в представление адреса -// не включаются округ и внутригородской район. // // Возвращаемое значение: // Строка - сформированное представление. // -Функция СформироватьПредставлениеКонтактнойИнформации(Информация, ВидИнформации) Экспорт +Функция СформироватьПредставлениеКонтактнойИнформации(Знач Информация, Знач ВидИнформации) - Если ТипЗнч(Информация) = Тип("ОбъектXDTO") Тогда - Если Информация.Состав = Неопределено Тогда - Возврат Информация.Представление; + Если ТипЗнч(Информация) = Тип("Строка") И УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(Информация) Тогда + Информация = СтрокаJSONВСтруктуру(Информация); + КонецЕсли; + + Если ТипЗнч(Информация) = Тип("Структура") Тогда + + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоТипАдрес(Информация.Type) Тогда + Возврат ПредставлениеАдреса(Информация, ВидИнформации); + + ИначеЕсли Информация.Type = Строка(Перечисления.ТипыКонтактнойИнформации.Телефон) + ИЛИ Информация.Type = Строка(Перечисления.ТипыКонтактнойИнформации.Факс) Тогда + ПредставлениеТелефона = ПредставлениеТелефона(Информация); + Возврат ?(ПустаяСтрока(ПредставлениеТелефона), Информация.Value, ПредставлениеТелефона); КонецЕсли; - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); - ТипИнформации = Информация.Состав.Тип(); - Если ТипИнформации = ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") Тогда - Возврат ПредставлениеАдреса(Информация.Состав, ВидИнформации); - - ИначеЕсли ТипИнформации = ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона") Тогда - ПредставлениеТелефона = ПредставлениеТелефона(Информация.Состав); - Возврат ?(ПустаяСтрока(ПредставлениеТелефона), Информация.Представление, ПредставлениеТелефона); - - ИначеЕсли ТипИнформации = ФабрикаXDTO.Тип(ПространствоИмен, "НомерФакса") Тогда - ПредставлениеФакса = ПредставлениеТелефона(Информация.Состав); - Возврат ?(ПустаяСтрока(ПредставлениеФакса), Информация.Представление, ПредставлениеФакса); - - ИначеЕсли ТипИнформации = ФабрикаXDTO.Тип(ПространствоИмен, "ЭлектроннаяПочта") Тогда - Возврат Строка(Информация.Состав.Значение); - КонецЕсли; - - //// Заглушка на другие типы - Возврат Строка(Информация.Состав.Значение); + Возврат Информация.Value; КонецЕсли; // Старый формат или новый десериализованный. - Если ВидИнформации.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда - НоваяИнфо = АдресXMLВXDTO(Информация,,Перечисления.ТипыКонтактнойИнформации.Адрес); - Возврат СформироватьПредставлениеКонтактнойИнформации(НоваяИнфо, ВидИнформации); - КонецЕсли; + Возврат СформироватьПредставлениеКонтактнойИнформации(КонтактнаяИнформацияВСтруктуруJSON(Информация), ВидИнформации); - Возврат СокрЛП(Информация); КонецФункции -// Возвращает флаг того, что переданный адрес - российский. +// Возвращает флаг того, что переданный адрес - российский. // // Параметры: -// XDTOАдрес - ОбъектXDTO - Контактная информация или XDTO адреса. +// Адрес - Структура, Строка - Контактная информация адреса в виде структуры или строки JSON. // // Возвращаемое значение: // Булево - результат проверки. // -Функция ЭтоНациональныйАдрес(XDTOАдрес) Экспорт - Если Метаданные.Обработки.Найти("РасширенныйВводКонтактнойИнформации") <> Неопределено Тогда - Возврат Обработки["РасширенныйВводКонтактнойИнформации"].НациональныйАдрес(XDTOАдрес) <> Неопределено; +Функция ЭтоНациональныйАдрес(Знач Адрес) Экспорт + + Если НЕ ЗначениеЗаполнено(Адрес) Тогда + Возврат Ложь; + КонецЕсли; + + Если Метаданные.ОбщиеМодули.Найти("РаботаСАдресамиКлиентСервер") <> Неопределено Тогда + + Если ТипЗнч(Адрес) = Тип("Строка") Тогда + Адрес = СтрокаJSONВСтруктуру(Адрес); + КонецЕсли; + + Если ТипЗнч(Адрес) = Тип("Структура") И Адрес.Свойство("Country")Тогда + + МодульРаботаСАдресамиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресамиКлиентСервер"); + НаименованиеСтраны = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(МодульРаботаСАдресамиКлиентСервер.ОсновнаяСтрана(), "Наименование"); + Возврат СтрСравнить(НаименованиеСтраны, Адрес.Country) = 0; + + КонецЕсли; + КонецЕсли; Возврат Ложь; + КонецФункции // Формирует представление для адреса по правилу: -// 1) Страна, если надо. -// 2) Индекс, субъект рф, округ, район, город, внутригородской район, населенный пункт, улица. -// 3) Здания, помещения. +// 1) Страна, если надо. +// 2) Индекс, субъект рф, округ, район, город, внутригородской район, населенный пункт, улица. +// 3) Здания, помещения. // -Функция ПредставлениеАдреса(Знач XDTOАдрес, Знач ВидИнформации) Экспорт +// Параметры: +// Адрес - Структура - Адрес с разбивкой по полям. +// ВидИнформации - Структура - Описание вида контактной информации. +// +// Возвращаемое значение: +// Строка - Представление адреса. +// +Функция ПредставлениеАдреса(Знач Адрес, Знач ВидИнформации) - НациональныйАдрес = XDTOАдрес.Состав; - Страна = СокрЛП(XDTOАдрес.Страна); - - Если Метаданные.Обработки.Найти("РасширенныйВводКонтактнойИнформации") <> Неопределено Тогда - ЭтоНациональныйАдрес = Обработки["РасширенныйВводКонтактнойИнформации"].ЭтоНациональныйАдрес(НациональныйАдрес); + Если ТипЗнч(ВидИнформации) = Тип("Структура") И ВидИнформации.Свойство("ВключатьСтрануВПредставление") Тогда + ВключатьСтрануВПредставление = ВидИнформации.ВключатьСтрануВПредставление; Иначе - ЭтоНациональныйАдрес = Ложь; + ВключатьСтрануВПредставление = Ложь; КонецЕсли; - Если ЭтоНациональныйАдрес Тогда - Представление = Обработки["РасширенныйВводКонтактнойИнформации"].ПредставлениеАдреса(ВидИнформации, НациональныйАдрес, Страна); + Если ТипЗнч(Адрес) = Тип("Структура") Тогда + + Если Метаданные.ОбщиеМодули.Найти("РаботаСАдресамиКлиентСервер") <> Неопределено Тогда + МодульРаботаСАдресамиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресамиКлиентСервер"); + МодульРаботаСАдресамиКлиентСервер.ОбновитьПредставлениеАдреса(Адрес, ВключатьСтрануВПредставление); + Иначе + УправлениеКонтактнойИнформациейКлиентСервер.ОбновитьПредставлениеАдреса(Адрес, ВключатьСтрануВПредставление); + КонецЕсли; + + Возврат Адрес.Value; Иначе // Это иностранный адрес - Представление = СокрЛП(НациональныйАдрес); + Представление = СокрЛП(Адрес); Если СтрЧислоВхождений(Представление, ",") = 9 Тогда // Удаляем пустые значения и страну. @@ -1220,45 +1320,36 @@ КонецЕсли; КонецЕсли; - Если ВидИнформации.ВключатьСтрануВПредставление Тогда - ДобавлениеСтраны = Новый Массив; - ДобавлениеСтраны.Добавить(Страна); - ДобавлениеСтраны.Добавить(Представление); - Представление = УправлениеКонтактнойИнформациейКлиентСервер.СформироватьПолноеНаименование(ДобавлениеСтраны); - КонецЕсли; Возврат Представление; КонецФункции -Функция ПредставлениеТелефона(XDTOДанные) Экспорт +Функция ПредставлениеТелефона(ДанныеТелефон) - Возврат УправлениеКонтактнойИнформациейКлиентСервер.СформироватьПредставлениеТелефона( - СократитьНеЦифры(XDTOДанные.КодСтраны), - XDTOДанные.КодГорода, - XDTOДанные.Номер, - XDTOДанные.Добавочный, - ""); + Если ТипЗнч(ДанныеТелефон) = Тип("Структура") Тогда + ПредставлениеТелефона = УправлениеКонтактнойИнформациейКлиентСервер.СформироватьПредставлениеТелефона( + СократитьНеЦифры(ДанныеТелефон.countryCode), + ДанныеТелефон.areaCode, + ДанныеТелефон.number, + ДанныеТелефон.extNumber, + ""); + + Иначе + + ПредставлениеТелефона = УправлениеКонтактнойИнформациейКлиентСервер.СформироватьПредставлениеТелефона( + СократитьНеЦифры(ДанныеТелефон.КодСтраны), + ДанныеТелефон.КодГорода, + ДанныеТелефон.Номер, + ДанныеТелефон.Добавочный, + ""); + + КонецЕсли; + + Возврат ПредставлениеТелефона; + КонецФункции -// Возвращает представление факса. -// -// Параметры: -// XDTOДанные - ОбъектXDTO - контактная информация. -// ВидИнформации - СправочникСсылка.ВидыКонтактнойИнформации - ссылка на соответствующий вид контактной информации. -// -// Возвращаемое значение: -// Строка - представление. -// -Функция ПредставлениеФакса(XDTOДанные, ВидИнформации = Неопределено) Экспорт - Возврат УправлениеКонтактнойИнформациейКлиентСервер.СформироватьПредставлениеТелефона( - СократитьНеЦифры(XDTOДанные.КодСтраны), - XDTOДанные.КодГорода, - XDTOДанные.Номер, - XDTOДанные.Добавочный, - ""); -КонецФункции - // Конструктор структуры, совместимой по полям со справочником видов контактной информации. // // Параметры: @@ -1813,84 +1904,273 @@ #КонецОбласти +// Для обратной совместимости. + #Область СлужебныеПроцедурыИФункцииДляСовместимости +// Преобразует XML в объект XDTO контактной информации. +// +// Параметры: +// Текст - Строка - строка XML контактной информации. +// ОжидаемыйВид - СправочникСсылка.ВидыКонтактнойИнформации, ПеречислениеСсылка.ТипыКонтактнойИнформации, Структура +// РезультатПреобразования - Структура - если задана, то в свойства записываются сведения: +// * ТекстОшибки - Строка - описание ошибок чтения. При этом возвращаемое значение функции будет +// корректного типа, но не заполнен. +// +// Возвращаемое значение: +// ОбъектXDTO - контактная информация, соответствующая XDTO-пакету КонтактнаяИнформация. +// +Функция КонтактнаяИнформацияИзXML(Знач Текст, Знач ОжидаемыйВид = Неопределено, РезультатПреобразования = Неопределено, Знач Представление = "") Экспорт + + ОжидаемыйТип = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ТипВидаКонтактнойИнформации(ОжидаемыйВид); + + Если РезультатПреобразования = Неопределено Или ТипЗнч(РезультатПреобразования) <> Тип("Структура") Тогда + РезультатПреобразования = Новый Структура; + КонецЕсли; + РезультатПреобразования.Вставить("СведенияИсправлены", Ложь); + + ПеречислениеАдрес = Перечисления.ТипыКонтактнойИнформации.Адрес; + ПеречислениеАдресЭлектроннойПочты = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты; + ПеречислениеSkype = Перечисления.ТипыКонтактнойИнформации.Skype; + ПеречислениеВебСтраница = Перечисления.ТипыКонтактнойИнформации.ВебСтраница; + ПеречислениеТелефон = Перечисления.ТипыКонтактнойИнформации.Телефон; + ПеречислениеФакс = Перечисления.ТипыКонтактнойИнформации.Факс; + ПеречислениеДругое = Перечисления.ТипыКонтактнойИнформации.Другое; + + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); + + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(Текст) Тогда + ЧтениеXML = Новый ЧтениеXML; + + Если Метаданные.ОбщиеМодули.Найти("РаботаСАдресами") <> Неопределено Тогда + МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами"); + Текст = МодульРаботаСАдресами.ПередЧтениемXDTOКонтактнаяИнформация(Текст); + КонецЕсли; + + ЧтениеXML.УстановитьСтроку(Текст); + + ТекстОшибки = Неопределено; + + НеобходимоВосстановитьКонтактнуюИнформацию = Ложь; + + Попытка + Результат = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); + + Если КонтактнаяИнформацияXDTOПустая(Результат) Тогда + НеобходимоВосстановитьКонтактнуюИнформацию = Истина; + КонецЕсли; + + Исключение + + НеобходимоВосстановитьКонтактнуюИнформацию = Истина; + + КонецПопытки; + + Если НеобходимоВосстановитьКонтактнуюИнформацию Тогда + ОписаниеПричиныОшибки = НСтр("ru='Сведения контактной информации были восстановлены после сбоя.'"); + Если ЗначениеЗаполнено(Представление) Тогда + Результат = КонтактнаяИнформацияXDTOПоПредставлению(Представление, ОжидаемыйВид); + Если СтрСравнить(Результат.Представление, Представление) <> 0 Тогда + ТекстОшибки = ОписаниеПричиныОшибки; + РезультатПреобразования.Вставить("ТекстОшибки", ТекстОшибки); + КонецЕсли; + + КонецЕсли; + + // Некорректный формат XML + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Предупреждение, , Текст, ОписаниеПричиныОшибки + Символы.ПС + + ИнформацияОбОшибке().Описание); + + РезультатПреобразования.Вставить("СведенияИсправлены", Истина); + КонецЕсли; + + Если ТекстОшибки = Неопределено И ОжидаемыйТип <> Неопределено Тогда + + Если Результат = Неопределено Тогда + ТекстОшибки = СтрЗаменить(НСтр("ru='Сведения контактной информации %ОжидаемыйВид% были повреждены или некорректно заполнены.'"), + "%ОжидаемыйВид%", Строка(ОжидаемыйВид)); + Иначе + // Контролируем соответствие типов. + НайденТип = ?(Результат.Состав = Неопределено, Неопределено, Результат.Состав.Тип()); + + ШаблонСообщения = СтрЗаменить(НСтр("ru='Сведения %1 контактной информации %ОжидаемыйВид% были повреждены или некорректно заполнены.'"), + "%ОжидаемыйВид%", Строка(ОжидаемыйВид)); + Если ОжидаемыйТип = ПеречислениеАдрес И НайденТип <> ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, НСтр("ru='об адресе'")); + ИначеЕсли ОжидаемыйТип = ПеречислениеАдресЭлектроннойПочты И НайденТип <> ФабрикаXDTO.Тип(ПространствоИмен, "ЭлектроннаяПочта") Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, НСтр("ru='электронной почты'")); + ИначеЕсли ОжидаемыйТип = ПеречислениеВебСтраница И НайденТип <> ФабрикаXDTO.Тип(ПространствоИмен, "ВебСайт") Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, НСтр("ru='веб-страницы'")); + ИначеЕсли ОжидаемыйТип = ПеречислениеТелефон И НайденТип <> ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона") Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, НСтр("ru='о номере телефона'")); + ИначеЕсли ОжидаемыйТип = ПеречислениеФакс И НайденТип <> ФабрикаXDTO.Тип(ПространствоИмен, "НомерФакса") Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, НСтр("ru='о номере факса'")); + ИначеЕсли ОжидаемыйТип = ПеречислениеSkype И НайденТип <> ФабрикаXDTO.Тип(ПространствоИмен, "Skype") Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, НСтр("ru='о логине Skype'")); + ИначеЕсли ОжидаемыйТип = ПеречислениеДругое И НайденТип <> ФабрикаXDTO.Тип(ПространствоИмен, "Прочее") Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, НСтр("ru='о дополнительной'")); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если ТекстОшибки = Неопределено Тогда + // Успешно прочитано + Возврат Результат; + КонецЕсли; + + РезультатПреобразования.Вставить("ТекстОшибки", ТекстОшибки); + + // Будет возвращен пустой объект. + Текст = ""; + КонецЕсли; + + Если ТипЗнч(Текст) = Тип("СписокЗначений") Тогда + Представление = ""; + ЭтоНовый = Текст.Количество() = 0; + ИначеЕсли ПустаяСтрока(Представление) Тогда + Представление = Строка(Текст); + ЭтоНовый = ПустаяСтрока(Текст); + Иначе + ЭтоНовый = Ложь; + КонецЕсли; + + Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); + + // Разбор + Если ОжидаемыйТип = ПеречислениеАдрес Тогда + Если ЭтоНовый Тогда + Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Адрес")); + Иначе + Результат = АдресXMLВXDTO(Текст, Представление, ОжидаемыйТип); + КонецЕсли; + + ИначеЕсли ОжидаемыйТип = ПеречислениеТелефон Тогда + Если ЭтоНовый Тогда + Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона")); + Иначе + Результат = ДесериализацияТелефона(Текст, Представление, ОжидаемыйТип) + КонецЕсли; + + ИначеЕсли ОжидаемыйТип = ПеречислениеФакс Тогда + Если ЭтоНовый Тогда + Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "НомерФакса")); + Иначе + Результат = ДесериализацияФакса(Текст, Представление, ОжидаемыйТип) + КонецЕсли; + + ИначеЕсли ОжидаемыйТип = ПеречислениеАдресЭлектроннойПочты Тогда + Если ЭтоНовый Тогда + Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "ЭлектроннаяПочта")); + Иначе + Результат = ДесериализацияПрочейКонтактнойИнформации(Текст, Представление, ОжидаемыйТип) + КонецЕсли; + ИначеЕсли ОжидаемыйТип = ПеречислениеSkype Тогда + Если ЭтоНовый Тогда + Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Skype")); + Иначе + Результат = ДесериализацияПрочейКонтактнойИнформации(Текст, Представление, ОжидаемыйТип) + КонецЕсли; + ИначеЕсли ОжидаемыйТип = ПеречислениеВебСтраница Тогда + Если ЭтоНовый Тогда + Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "ВебСайт")); + Иначе + Результат = ДесериализацияПрочейКонтактнойИнформации(Текст, Представление, ОжидаемыйТип) + КонецЕсли; + + ИначеЕсли ОжидаемыйТип = ПеречислениеДругое Тогда + Если ЭтоНовый Тогда + Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Прочее")); + Иначе + Результат = ДесериализацияПрочейКонтактнойИнформации(Текст, Представление, ОжидаемыйТип) + КонецЕсли; + + Иначе + ТекстОшибки = НСтр("ru = 'Сведения о виде контактной информации %1 были повреждены или некорректно заполнены, + |т.к. обязательное поле тип не заполнено.'"); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, ?(ЗначениеЗаполнено(ОжидаемыйВид), """" + ОжидаемыйВид.Наименование + """", "")); + РезультатПреобразования.Вставить("ТекстОшибки", ТекстОшибки); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция КонтактнаяИнформацияXDTOПустая(Знач Результат) + + Состав = Результат.Свойства().Получить("Состав"); + Если Состав <> Неопределено Тогда + Сведения = Результат.Состав.Свойства().Получить("Состав"); + Если Сведения <> Неопределено Тогда + Если ТипЗнч(Результат.Состав.Состав) = Тип("Строка") Тогда + Возврат ПустаяСтрока(Результат.Состав.Состав); + ИначеЕсли ТипЗнч(Результат.Состав.Состав) = Тип("ОбъектXDTO") Тогда + Для каждого ПолеXDTO Из Результат.Состав.Состав.Свойства() Цикл + Если ПолеXDTO.Имя = "ДопАдрЭл" Или ПолеXDTO.Имя = "СвРайМО" Тогда + Продолжить; + ИначеЕсли ЗначениеЗаполнено(Результат.Состав.Состав.Получить(ПолеXDTO.Имя)) Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + КонецЕсли; + Иначе + ПолеЗначение = Результат.Состав.Свойства().Получить("Значение"); + Если ПолеЗначение <> Неопределено Тогда + Возврат ПустаяСтрока(Результат.Состав.Получить("Значение")); + КонецЕсли; + КонецЕсли; + + КонецЕсли; + + Возврат Истина; + +КонецФункции + // Возвращает флаг того, что переданных объект КИ содержит данные. // // Параметры: -// XDTOДанные - ОбъектXDTO - проверяемые данные контактной информации. +// КонтактнаяИнформация - Структура - проверяемые данные контактной информации. // // Возвращаемое значение: // Булево - флаг наличия данных. // -Функция XDTOКонтактнаяИнформацияЗаполнена(Знач XDTOДанные) Экспорт +Функция КонтактнаяИнформацияЗаполнена(Знач КонтактнаяИнформация) Экспорт - Возврат ЕстьЗаполненныеСвойстваXDTOКонтактнойИнформации(XDTOДанные); + Возврат ЕстьЗаполненныеСвойстваКонтактнойИнформации(КонтактнаяИнформация); КонецФункции -// Параметры: Владелец - ОбъектXDTO, Неопределено +// Параметры: Владелец - Структура, Неопределено // -Функция ЕстьЗаполненныеСвойстваXDTOКонтактнойИнформации(Знач Владелец) +Функция ЕстьЗаполненныеСвойстваКонтактнойИнформации(Знач Владелец) Если Владелец = Неопределено Тогда Возврат Ложь; КонецЕсли; // Список игнорируемых при сравнении свойств текущего владельца - особенности контактной информации. - Игнорируемые = Новый Соответствие; + СписокПолейДляПроверки = Новый Массив; + СписокПолейДляПроверки.Добавить("Value"); + СписокПолейДляПроверки.Добавить("Type"); + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоТипАдрес(Владелец.Type) Тогда + СписокПолейДляПроверки.Добавить("Country"); + КонецЕсли; - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); - ТипВладельца = Владелец.Тип(); - - Если ТипВладельца = ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") Тогда - // Страна не влияет на заполнение при остальных пустых. Игнорируем. - Игнорируемые.Вставить(Владелец.Свойства().Получить("Страна"), Истина); + Если Метаданные.ОбщиеМодули.Найти("РаботаСАдресамиКлиентСервер") <> Неопределено Тогда - Иначе - Если Метаданные.Обработки.Найти("РасширенныйВводКонтактнойИнформации") <> Неопределено Тогда - МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами"); - Обработки["РасширенныйВводКонтактнойИнформации"].ЗаполнитьСвойстваXDTOКонтактнойИнформацииДляРасширенныхАдресов(Владелец, - Игнорируемые, МодульРаботаСАдресами.ПространствоИмен(), ТипВладельца); - КонецЕсли; + МодульРаботаСАдресамиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресамиКлиентСервер"); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(СписокПолейДляПроверки, МодульРаботаСАдресамиКлиентСервер.ИменаУровнейАдреса(Владелец, Истина)); КонецЕсли; - Для Каждого Свойство Из Владелец.Свойства() Цикл - - Если Не Владелец.Установлено(Свойство) Или Игнорируемые[Свойство] <> Неопределено Тогда - Продолжить; - КонецЕсли; - - Если Свойство.ВерхняяГраница > 1 Или Свойство.ВерхняяГраница < 0 Тогда - Список = Владелец.ПолучитьСписок(Свойство); - - Если Список <> Неопределено Тогда - Для Каждого ЭлементСписка Из Список Цикл - Если Игнорируемые[ЭлементСписка] = Неопределено - И ЕстьЗаполненныеСвойстваXDTOКонтактнойИнформации(ЭлементСписка) Тогда - Возврат Истина; - КонецЕсли; - КонецЦикла; - КонецЕсли; - - Продолжить; - КонецЕсли; - - Значение = Владелец.Получить(Свойство); - Если ТипЗнч(Значение) = Тип("ОбъектXDTO") Тогда - Если ЕстьЗаполненныеСвойстваXDTOКонтактнойИнформации(Значение) Тогда - Возврат Истина; - КонецЕсли; - - ИначеЕсли Не ПустаяСтрока(Значение) Тогда + Для каждого ИмяПоля Из СписокПолейДляПроверки Цикл + Если Владелец.Свойство(ИмяПоля) <> Неопределено И ЗначениеЗаполнено(Владелец[ИмяПоля]) Тогда Возврат Истина; - КонецЕсли; - КонецЦикла; - + Возврат Ложь; + КонецФункции Процедура ЗаменитьВСтруктуреНеопределеноНаПустуюСтроку(СтруктураДляОбхода) Экспорт @@ -2015,7 +2295,102 @@ Результат.Представление = Представление; Возврат Результат; -КонецФункции +КонецФункции + +Функция ДесериализацияТелефонаФаксаВJSON(ЗначенияПолей, Представление = "", ОжидаемыйТип = Неопределено) + + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(ЗначенияПолей) Тогда + // Общий формат контактной информации. + Возврат КонтактнаяИнформацияИзXML(ЗначенияПолей, ОжидаемыйТип); + КонецЕсли; + + Данные = УправлениеКонтактнойИнформациейКлиентСервер.ОписаниеНовойКонтактнойИнформации(ОжидаемыйТип); + + // Из пар ключ-значение + СписокЗначенийПолей = Неопределено; + Если ТипЗнч(ЗначенияПолей)=Тип("СписокЗначений") Тогда + СписокЗначенийПолей = ЗначенияПолей; + ИначеЕсли Не ПустаяСтрока(ЗначенияПолей) Тогда + СписокЗначенийПолей = УправлениеКонтактнойИнформациейКлиентСервер.ПреобразоватьСтрокуВСписокПолей(ЗначенияПолей); + КонецЕсли; + + ПолеПредставления = ""; + Если СписокЗначенийПолей <> Неопределено Тогда + Для Каждого ЗначениеПоля Из СписокЗначенийПолей Цикл + Поле = ВРег(ЗначениеПоля.Представление); + + Если Поле = "КОДСТРАНЫ" Тогда + Данные.CountryCode = ЗначениеПоля.Значение; + + ИначеЕсли Поле = "КОДГОРОДА" Тогда + Данные.AreaCode = ЗначениеПоля.Значение; + + ИначеЕсли Поле = "НОМЕРТЕЛЕФОНА" Тогда + Данные.Number = ЗначениеПоля.Значение; + + ИначеЕсли Поле = "ДОБАВОЧНЫЙ" Тогда + Данные.ExtNumber = ЗначениеПоля.Значение; + + ИначеЕсли Поле = "ПРЕДСТАВЛЕНИЕ" Тогда + ПолеПредставления = СокрЛП(ЗначениеПоля.Значение); + + КонецЕсли; + + КонецЦикла; + + // Представление с приоритетами. + Если Не ПустаяСтрока(Представление) Тогда + Данные.Value = Представление; + ИначеЕсли ЗначениеЗаполнено(ПолеПредставления) Тогда + Данные.Value = ПолеПредставления; + Иначе + Данные.Value = ПредставлениеТелефона(Данные); + КонецЕсли; + + Возврат Данные; + КонецЕсли; + + // Разбираем из представления. + + // Группы цифр, разделенные символами - не цифрами: страна, город, номер, добавочный. + // Добавочный включает в себя непробельные символы слева и справа. + Позиция = 1; + Данные.CountryCode = НайтиПодстрокуЦифр(Представление, Позиция); + НачалоГорода = Позиция; + + Данные.AreaCode = НайтиПодстрокуЦифр(Представление, Позиция); + Данные.Number = НайтиПодстрокуЦифр(Представление, Позиция, " -"); + + Добавочный = СокрЛП(Сред(Представление, Позиция)); + Если СтрНачинаетсяС(Добавочный, ",") Тогда + Добавочный = СокрЛ(Сред(Добавочный, 2)); + КонецЕсли; + Если ВРег(Лев(Добавочный, 3 ))= "ДОБ" Тогда + Добавочный = СокрЛ(Сред(Добавочный, 4)); + КонецЕсли; + Если ВРег(Лев(Добавочный, 1 ))= "." Тогда + Добавочный = СокрЛ(Сред(Добавочный, 2)); + КонецЕсли; + Данные.ExtNumber = СокрЛП(Добавочный); + + // Корректируем возможные ошибки. + Если ПустаяСтрока(Данные.Number) Тогда + Если СтрНачинаетсяС(СокрЛ(Представление), "+") Тогда + // Была попытка явно указать код страны, оставляем страну в покое. + Данные.AreaCode = ""; + Данные.Number = СократитьНеЦифры(Сред(Представление, НачалоГорода)); + Данные.ExtNumber = ""; + Иначе + Данные.CountryCode = ""; + Данные.AreaCode = ""; + Данные.Number = Представление; + Данные.ExtNumber = ""; + КонецЕсли; + КонецЕсли; + + Данные.Value = Представление; + Возврат Данные; +КонецФункции // Возвращает первую подстроку из цифр в строке. Параметр ПозицияНачала изменяется на первую не цифру. // @@ -2101,7 +2476,7 @@ // ПеречислениеСсылка.ТипыКонтактнойИнформации - результат. // Функция ТипКонтактнойИнформации(Знач XMLСтрока) Экспорт - Возврат ЗначениеИзСтрокиXML( XSLT_ТипКонтактнойИнформацииПоСтрокеXML(XMLСтрока) ); + Возврат ЗначениеИзСтрокиXML(XSLT_ТипКонтактнойИнформацииПоСтрокеXML(XMLСтрока)); КонецФункции // Читает строку состава из значения контактной информации. @@ -2182,7 +2557,7 @@ // Преобразует контактную информацию в вид XML. // // Параметры: -// Данные - Строка - описание контактной информации. +// Данные - Строка - описание контактной информации XML или JSON. // - ОбъектXTDO - описание контактной информации. // - Структура - описание контактной информации. Ожидаются поля: // * ЗначенияПолей - Строка, Структура, СписокЗначений, Соответствие - поля контактной информации. @@ -2200,31 +2575,59 @@ // * ДанныеXML - Строка - текст XML. // Функция ПривестиКонтактнуюИнформациюXML(Знач Данные) Экспорт - Если ЭтоСтрокаXML(Данные) Тогда - Возврат Новый Структура("ДанныеXML, ТипКонтактнойИнформации", - Данные, ЗначениеИзСтрокиXML( XSLT_ТипКонтактнойИнформацииПоСтрокеXML(Данные) )); - - ИначеЕсли ТипЗнч(Данные) = Тип("ОбъектXDTO") Тогда - ДанныеXML = КонтактнаяИнформацияXDTOВXML(Данные); - Возврат Новый Структура("ДанныеXML, ТипКонтактнойИнформации", - ДанныеXML, ЗначениеИзСтрокиXML( XSLT_ТипКонтактнойИнформацииПоСтрокеXML(ДанныеXML) )); - - КонецЕсли; - - // Ожидаем структуру - Комментарий = Неопределено; - Данные.Свойство("Комментарий", Комментарий); - ЗначенияПолей = Данные.ЗначенияПолей; - Если ЭтоСтрокаXML(ЗначенияПолей) Тогда - // Возможно необходимо переопределить комментарий. + XMLСтрока = ""; + ЗначенияПолей = ""; + Комментарий = Неопределено; + ТипКонтактнойИнформации = Неопределено; + + Если ТипЗнч(Данные) = Тип("ОбъектXDTO") Тогда + XMLСтрока = КонтактнаяИнформацияXDTOВXML(Данные); + ТипКонтактнойИнформации = ЗначениеИзСтрокиXML(XSLT_ТипКонтактнойИнформацииПоСтрокеXML(XMLСтрока)); + Иначе + + Если ТипЗнч(Данные) = Тип("Структура") Тогда + ЗначенияПолей = ?(Данные.Свойство("ЗначенияПолей"), Данные.ЗначенияПолей, "");; + Комментарий = ?(Данные.Свойство("Комментарий"), Данные.Комментарий, ""); + + Если Данные.Свойство("ВидКонтактнойИнформации") И Данные.ВидКонтактнойИнформации <> Неопределено Тогда + ТипКонтактнойИнформации = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ТипВидаКонтактнойИнформации(Данные.ВидКонтактнойИнформации); + КонецЕсли; + + ИначеЕсли ТипЗнч(Данные) = Тип("Строка") Тогда + ЗначенияПолей = Данные; + КонецЕсли; + + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(ЗначенияПолей) Тогда + XMLСтрока = КонтактнаяИнформацияИзJSONВXML(ЗначенияПолей, ТипКонтактнойИнформации); + ТипКонтактнойИнформации = ЗначениеИзСтрокиXML(XSLT_ТипКонтактнойИнформацииПоСтрокеXML(XMLСтрока)); + ИначеЕсли ЭтоСтрокаXML(ЗначенияПолей) Тогда + XMLСтрока = ЗначенияПолей; + ТипКонтактнойИнформации = ЗначениеИзСтрокиXML(XSLT_ТипКонтактнойИнформацииПоСтрокеXML(XMLСтрока)); + ИначеЕсли ТипЗнч(ЗначенияПолей) = Тип("Строка") И ТипКонтактнойИнформации = Неопределено Тогда + + // старый формат ключ-значение + Если СтрНайти(ВРег(ЗначенияПолей), "РЕГИОН=") > 0 Тогда + ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Адрес; + ИначеЕсли СтрНайти(ВРег(ЗначенияПолей), "НОМЕРТЕЛЕФОНА=") > 0 Тогда + ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Телефон; + ИначеЕсли СтрНайти(ВРег(ЗначенияПолей), "НОМЕРФАКСА=") > 0 Тогда + ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Факс; + Иначе + ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Другое; + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + Если ЗначениеЗаполнено(XMLСтрока) Тогда + Если Не ПустаяСтрока(Комментарий) Тогда УправлениеКонтактнойИнформацией.УстановитьКомментарийКонтактнойИнформации(ЗначенияПолей, Комментарий); КонецЕсли; - - Возврат Новый Структура("ДанныеXML, ТипКонтактнойИнформации", - ЗначенияПолей, ЗначениеИзСтрокиXML( XSLT_ТипКонтактнойИнформацииПоСтрокеXML(ЗначенияПолей) )); - + + Возврат Новый Структура("ДанныеXML, ТипКонтактнойИнформации", XMLСтрока, ТипКонтактнойИнформации); КонецЕсли; // Разбираем по ЗначенияПолей, ВидКонтактнойИнформации, Представление. @@ -2257,9 +2660,6 @@ КонецЕсли; - // Разбираем по ВидКонтактнойИнформации. - ТипКонтактнойИнформации = ТипВидаКонтактнойИнформации(Данные.ВидКонтактнойИнформации); - Результат = Новый Структура("ТипКонтактнойИнформации, ДанныеXML", ТипКонтактнойИнформации); ВсеТипы = Перечисления.ТипыКонтактнойИнформации; @@ -2291,6 +2691,120 @@ Возврат Результат; КонецФункции + +// Преобразует формат из XML в JSON +// +Функция КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация, Знач Тип = Неопределено, Представление = "") Экспорт + + Если Тип <> Неопределено И ТипЗнч(Тип) <> Тип("ПеречислениеСсылка.ТипыКонтактнойИнформации") Тогда + Тип = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ТипВидаКонтактнойИнформации(Тип); + КонецЕсли; + + Если Тип = Неопределено Тогда + Если ТипЗнч(КонтактнаяИнформация) = Тип("Строка") Тогда + + Если ЭтоСтрокаXML(КонтактнаяИнформация) Тогда + Тип = ТипКонтактнойИнформации(КонтактнаяИнформация); + КонецЕсли; + + ИначеЕсли ТипЗнч(КонтактнаяИнформация) = Тип("ОбъектXDTO") Тогда + + НайденТип = ?(КонтактнаяИнформация.Состав = Неопределено, Неопределено, КонтактнаяИнформация.Состав.Тип()); + Тип = СоответствиеXDTOТиповКонтактнойИнформации(НайденТип); + + КонецЕсли; + КонецЕсли; + + Если Метаданные.ОбщиеМодули.Найти("РаботаСАдресами") <> Неопределено И Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда + + МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами"); + Возврат МодульРаботаСАдресами.КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация, Тип, Представление); + + КонецЕсли; + + Результат = УправлениеКонтактнойИнформациейКлиентСервер.ОписаниеНовойКонтактнойИнформации(Тип); + + НаименованиеСтраны = ""; + Формат9Запятых = Ложь; + ЭлементыАдреса = Новый Соответствие; + + Если ТипЗнч(КонтактнаяИнформация) = Тип("Строка") Тогда + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнформация) Тогда + + РезультатПреобразования = Новый Структура; + XDTOКонтактнаяИнформация = КонтактнаяИнформацияИзXML(КонтактнаяИнформация, Тип, РезультатПреобразования, Представление); + Результат.Value = XDTOКонтактнаяИнформация.Представление; + Результат.Comment = XDTOКонтактнаяИнформация.Комментарий; + Иначе + Если СтрЧислоВхождений(КонтактнаяИнформация, ",") = 9 Тогда + Формат9Запятых = Истина; + Результат.Value = КонтактнаяИнформация + Иначе + XDTOКонтактнаяИнформация = КонтактнаяИнформацияИзXML(КонтактнаяИнформация, Тип,, Представление); + КонецЕсли; + КонецЕсли; + Иначе + XDTOКонтактнаяИнформация = КонтактнаяИнформация; + Тип = Перечисления.ТипыКонтактнойИнформации.Адрес; + КонецЕсли; + + Если Тип <> Перечисления.ТипыКонтактнойИнформации.Адрес И Тип <> Перечисления.ТипыКонтактнойИнформации.Телефон Тогда + Возврат Результат; + КонецЕсли; + + Если НЕ Формат9Запятых Тогда + + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); + Состав = XDTOКонтактнаяИнформация.Состав; + + Если Состав = Неопределено Тогда + Возврат Результат; + КонецЕсли; + + XDTOТип = Состав.Тип(); + + Если XDTOТип = ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") Тогда + + Результат.Вставить("Country", Состав.Страна); + Страна = Справочники.СтраныМира.НайтиПоНаименованию(Состав.Страна, Истина); + НаименованиеСтраны = Страна.Наименование; + Результат.Вставить("CountryCode", СокрЛП(Страна.Код)); + + ИначеЕсли + + XDTOТип = ФабрикаXDTO.Тип(УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(), "НомерТелефона") + Или XDTOТип = ФабрикаXDTO.Тип(УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(), "НомерФакса") Тогда + + Результат.CountryCode = Состав.КодСтраны; + Результат.AreaCode = Состав.КодГорода; + Результат.Number = Состав.Номер; + Результат.ExtNumber = Состав.Добавочный; + Результат.value = XDTOКонтактнаяИнформация.Представление; + + КонецЕсли; + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция СоответствиеXDTOТиповКонтактнойИнформации(НайденТип) Экспорт + + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); + + СоответствиеТипов = Новый Соответствие; + СоответствиеТипов.Вставить(ФабрикаXDTO.Тип(ПространствоИмен, "Адрес"), Перечисления.ТипыКонтактнойИнформации.Адрес); + СоответствиеТипов.Вставить(ФабрикаXDTO.Тип(ПространствоИмен, "ЭлектроннаяПочта"), Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты); + СоответствиеТипов.Вставить(ФабрикаXDTO.Тип(ПространствоИмен, "ВебСайт"), Перечисления.ТипыКонтактнойИнформации.ВебСтраница); + СоответствиеТипов.Вставить(ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона"), Перечисления.ТипыКонтактнойИнформации.Телефон); + СоответствиеТипов.Вставить(ФабрикаXDTO.Тип(ПространствоИмен, "НомерФакса"), Перечисления.ТипыКонтактнойИнформации.Факс); + СоответствиеТипов.Вставить(ФабрикаXDTO.Тип(ПространствоИмен, "Skype"), Перечисления.ТипыКонтактнойИнформации.Skype); + СоответствиеТипов.Вставить(ФабрикаXDTO.Тип(ПространствоИмен, "Прочее"), Перечисления.ТипыКонтактнойИнформации.Другое); + + Возврат СоответствиеТипов[НайденТип]; + +КонецФункции #КонецОбласти @@ -2742,82 +3256,6 @@ КонецФункции -Функция КонтактнаяИнформацияВСтаруюСтруктуру(XDTOКонтактнаяИнформация) Экспорт - - Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(XDTOКонтактнаяИнформация) Тогда - XDTOКонтактная = КонтактнаяИнформацияИзXML(XDTOКонтактнаяИнформация); - Иначе - XDTOКонтактная = XDTOКонтактнаяИнформация - КонецЕсли; - - Результат = Новый Структура("Представление, ЗначенияПолей", XDTOКонтактная.Представление, Новый СписокЗначений); - - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); - Состав = XDTOКонтактная.Состав; - - Если Состав = Неопределено Тогда - Возврат Результат; - КонецЕсли; - - Тип = Состав.Тип(); - Если Тип = ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") Тогда - Результат.ЗначенияПолей = АдресВСписокПолей(Состав); - Результат.ЗначенияПолей.Добавить(Результат.Представление, "Представление"); - - ИначеЕсли Тип = ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона") Тогда - Результат.ЗначенияПолей = НомерТелефонаВСтарыйСписокПолей(Состав); - Результат.ЗначенияПолей.Добавить(XDTOКонтактная.Комментарий, "Комментарий"); - КонецЕсли; - - Возврат Результат; - -КонецФункции - -// Преобразует адрес формата XDTO в старый список полей типа СписокЗначений. -// -// Параметры: -// XDTOАдрес - ОбъектXDTO, Строка - контактная информация или строка XML. -// РасширенныйСоставПолей - Булево - необязательный флаг того, что состав полей будет сокращен для совместимости -// с обменом БСП 2.1.2. -// -// Возвращаемое значение: -// СписокЗначений -// -Функция АдресВСписокПолей(XDTOАдрес) - Список = Новый СписокЗначений; - - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); - XDTOТип = XDTOАдрес.Тип(); - Если XDTOТип = ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") Тогда - - // Страна с кодом - ДобавитьЗначение(Список, "Страна", XDTOАдрес.Страна); - Если ПустаяСтрока(XDTOАдрес.Страна) Тогда - КодСтраны = ""; - Иначе - Страна = Справочники.СтраныМира.НайтиПоНаименованию(XDTOАдрес.Страна, Истина); - КодСтраны = СокрЛП(Страна.Код); - КонецЕсли; - ДобавитьЗначение(Список, "КодСтраны", КодСтраны); - КонецЕсли; - Возврат Список; - -КонецФункции - -Процедура ДобавитьЗначение(Список, ИмяПоля, Значение, РазрешитьДубли = Ложь) - - Если Не РазрешитьДубли Тогда - Для Каждого Элемент Из Список Цикл - Если Элемент.Представление = ИмяПоля Тогда - Элемент.Значение = Строка(Значение); - Возврат; - КонецЕсли; - КонецЦикла; - КонецЕсли; - - Список.Добавить(Строка(Значение), ИмяПоля); -КонецПроцедуры - // Инициализация преобразователей // Преобразование для сравнения двух строк XML. @@ -3689,4 +4127,337 @@ #КонецОбласти +// Область Конвертация JSON и другие типы: структура, XML и т.п. + +// Конвертация + +Функция СтруктураВСтрокуJSON(Значение) Экспорт + + ЗаписьJSON = Новый ЗаписьJSON; + ЗаписьJSON.УстановитьСтроку(); + + Для каждого ЭлементСтруктуры Из Значение Цикл + Если ПустаяСтрока(ЭлементСтруктуры.Значение) И ЭлементСтруктуры.Значение <> "" Тогда + // Преобразуем неопределено, NULL и незначащие символы в пустую строку. + Значение[ЭлементСтруктуры.Ключ] = ""; + ИначеЕсли ТипЗнч(ЭлементСтруктуры.Значение) = Тип("Массив") Тогда + + Для каждого СтроенияИПомещения Из ЭлементСтруктуры.Значение Цикл + Если ПустаяСтрока(СтроенияИПомещения.Number) И СтроенияИПомещения.Number <> "" Тогда + СтроенияИПомещения.Number = ""; + КонецЕсли; + КонецЦикла; + + КонецЕсли; + КонецЦикла; + + ЗаписатьJSON(ЗаписьJSON, Значение,, "АдаптацияПолейКонтактнойИнформации", УправлениеКонтактнойИнформациейСлужебный); + + Возврат ЗаписьJSON.Закрыть(); + +КонецФункции + +Функция АдаптацияПолейКонтактнойИнформации(Свойство, Значение, ДополнительныеПараметрыФункцииПреобразования, Отказ) Экспорт + + Если ТипЗнч(Значение) = Тип("УникальныйИдентификатор") Тогда + Возврат Строка(Значение); + КонецЕсли; + +КонецФункции + +Функция СтрокаJSONВСтруктуру(Значение) Экспорт + + ЧтениеJSON = Новый ЧтениеJSON; + ЧтениеJSON.УстановитьСтроку(Значение); + + Результат = ПрочитатьJSON(ЧтениеJSON,,,, "ВосстановлениеПолейКонтактнойИнформации", УправлениеКонтактнойИнформациейСлужебный); + + ЧтениеJSON.Закрыть(); + + Возврат Результат; + +КонецФункции + +Функция ВосстановлениеПолейКонтактнойИнформации(Свойство, Значение, ДополнительныеПараметрыФункцииПреобразования) Экспорт + + Если СтрЗаканчиваетсяНа(ВРег(Свойство), "ID") И СтрДлина(Значение) = 36 Тогда + Возврат Новый УникальныйИдентификатор(Значение); + КонецЕсли; + +КонецФункции + +Функция КонтактнаяИнформацияИзJSONВXML(Знач КонтактнаяИнформация, ОжидаемыйТип = Неопределено) Экспорт + + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(КонтактнаяИнформация) Тогда + КонтактнаяИнформация = СтрокаJSONВСтруктуру(КонтактнаяИнформация); + КонецЕсли; + + Если ОжидаемыйТип = Неопределено Тогда + + Если ТипЗнч(КонтактнаяИнформация) = Тип("Структура") И КонтактнаяИнформация.Свойство("Type") Тогда + + ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации[КонтактнаяИнформация.Type]; + + ИначеЕсли УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнформация) Тогда + КонтактнаяИнформацияXML = ПривестиКонтактнуюИнформациюXML(КонтактнаяИнформация); + ОжидаемыйТип = КонтактнаяИнформацияXML.ТипКонтактнойИнформации; + Иначе + ТекстОшибки = НСтр("ru='Ошибка конвертации контактной информации из формата JSON в XML.'"); + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Ошибка,,, + ТекстОшибки + Символы.ПС + Строка(КонтактнаяИнформация)); + ВызватьИсключение НСтр("ru='Не удалось определить тип контактной информации. Подробнее см. в журнале регистрации.'"); + КонецЕсли; + + КонецЕсли; + + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); + + ЭтоНовый = ПустаяСтрока(КонтактнаяИнформация); + Представление = ""; + + Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); + + // Разбор + Если ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда + Если ЭтоНовый Тогда + Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Адрес")); + Иначе + Результат = КонвертироватьАдресИзJSONВXML(КонтактнаяИнформация, Представление, ОжидаемыйТип); + КонецЕсли; + + ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда + Если ЭтоНовый Тогда + Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона")); + Иначе + Результат = КонвертироватьТелефонФаксИзJSONВXML(КонтактнаяИнформация, Представление, ОжидаемыйТип) + КонецЕсли; + + ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Факс Тогда + Если ЭтоНовый Тогда + Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "НомерФакса")); + Иначе + Результат = КонвертироватьТелефонФаксИзJSONВXML(КонтактнаяИнформация, Представление, ОжидаемыйТип) + КонецЕсли; + + ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда + Если ЭтоНовый Тогда + Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "ЭлектроннаяПочта")); + Иначе + Результат = КонвертироватьПрочуюКонтактнуюИнформациюИзJSONВXML(КонтактнаяИнформация, Представление, ОжидаемыйТип) + КонецЕсли; + ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Skype Тогда + Если ЭтоНовый Тогда + Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Skype")); + Иначе + Результат = КонвертироватьПрочуюКонтактнуюИнформациюИзJSONВXML(КонтактнаяИнформация, Представление, ОжидаемыйТип) + КонецЕсли; + ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.ВебСтраница Тогда + Если ЭтоНовый Тогда + Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "ВебСайт")); + Иначе + Результат = КонвертироватьПрочуюКонтактнуюИнформациюИзJSONВXML(КонтактнаяИнформация, Представление, ОжидаемыйТип) + КонецЕсли; + + ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Другое Тогда + Если ЭтоНовый Тогда + Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Прочее")); + Иначе + Результат = КонвертироватьПрочуюКонтактнуюИнформациюИзJSONВXML(КонтактнаяИнформация, Представление, ОжидаемыйТип) + КонецЕсли; + + Иначе + ТекстОшибки = НСтр("ru = 'Сведения о виде контактной информации %1 были повреждены или некорректно заполнены, + |т.к. обязательное поле тип не заполнено.'"); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, ?(ЗначениеЗаполнено(ОжидаемыйТип), """" + СокрЛП(ОжидаемыйТип) + """", "")); + КонецЕсли; + + Возврат КонтактнаяИнформацияXDTOВXML(Результат); + +КонецФункции + +// Внутреннее для сериализации. +Функция КонвертироватьАдресИзJSONВXML(Знач ЗначенияПолей, Знач Представление, Знач ОжидаемыйТип = Неопределено) + + Если Метаданные.ОбщиеМодули.Найти("РаботаСАдресами") <> Неопределено Тогда + МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами"); + Возврат МодульРаботаСАдресами.КонвертироватьАдресИзJSONВXML(ЗначенияПолей, Представление, ОжидаемыйТип); + КонецЕсли; + + // Старый формат через разделитель строк и равенство. + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); + + Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); + Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Адрес")); + + // Общий состав + Адрес = Результат.Состав; + + ПолеПредставления = ""; + + Для Каждого ЭлементСписка Из ЗначенияПолей Цикл + + Если ПустаяСтрока(ЭлементСписка.Значение) Тогда + Продолжить; + КонецЕсли; + + ИмяПоля = ВРег(ЭлементСписка.Ключ); + + Если ИмяПоля = "COMMENT" Тогда + Комментарий = СокрЛП(ЭлементСписка.Значение); + Если ЗначениеЗаполнено(Комментарий) Тогда + Результат.Комментарий = Комментарий; + КонецЕсли; + + ИначеЕсли ИмяПоля = "COUNTRY" Тогда + Адрес.Страна = Строка(ЭлементСписка.Значение); + + ИначеЕсли ИмяПоля = "VALUE" Тогда + ПолеПредставления = СокрЛП(ЭлементСписка.Значение); + + КонецЕсли; + + КонецЦикла; + + // Представление с приоритетами. + Если Не ПустаяСтрока(Представление) Тогда + Результат.Представление = Представление; + Иначе + Результат.Представление = ПолеПредставления; + КонецЕсли; + + Адрес.Состав = Результат.Представление; + + Возврат Результат; +КонецФункции + +Функция КонвертироватьТелефонФаксИзJSONВXML(ЗначенияПолей, Представление = "", ОжидаемыйТип = Неопределено) + + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(ЗначенияПолей) Тогда + // Общий формат контактной информации. + Возврат КонтактнаяИнформацияИзXML(ЗначенияПолей, ОжидаемыйТип); + КонецЕсли; + + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); + + Если ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда + Данные = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона")); + + ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Факс Тогда + Данные = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "НомерФакса")); + + ИначеЕсли ОжидаемыйТип = Неопределено Тогда + // Считаем телефоном + Данные = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона")); + + Иначе + ВызватьИсключение НСтр("ru='Ошибка преобразования контактной информации, ожидается телефон или факс'"); + КонецЕсли; + + Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); + Результат.Состав = Данные; + + ПолеПредставления = ""; + Для Каждого ЗначениеПоля Из ЗначенияПолей Цикл + Поле = ВРег(ЗначениеПоля.Ключ); + + Если Поле = "COUNTRYCODE" Тогда + Данные.КодСтраны = ЗначениеПоля.Значение; + + ИначеЕсли Поле = "AREACODE" Тогда + Данные.КодГорода = ЗначениеПоля.Значение; + + ИначеЕсли Поле = "NUMBER" Тогда + Данные.Номер = ЗначениеПоля.Значение; + + ИначеЕсли Поле = "EXTNUMBER" Тогда + Данные.Добавочный = ЗначениеПоля.Значение; + + ИначеЕсли Поле = "VALUE" Тогда + ПолеПредставления = СокрЛП(ЗначениеПоля.Значение); + + ИначеЕсли Поле = "COMMENT" Тогда + Комментарий = СокрЛП(ЗначениеПоля.Значение); + Если ЗначениеЗаполнено(Комментарий) Тогда + Результат.Комментарий = Комментарий; + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + // Представление с приоритетами. + Если Не ПустаяСтрока(Представление) Тогда + Результат.Представление = Представление; + ИначеЕсли ЗначениеЗаполнено(ПолеПредставления) Тогда + Результат.Представление = ПолеПредставления; + Иначе + Результат.Представление = ПредставлениеТелефона(Данные); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Преобразует строку в XDTO прочую контактную информацию. +// +// Параметры: +// ЗначенияПолей - Строка - сериализованная информация, значения полей. +// Представление - Строка - представление старший-младший, используется для попытки разбора, если ЗначенияПолей пусто. +// ОжидаемыйТип - ПеречислениеСсылка.ТипыКонтактнойИнформации - необязательный тип для контроля. +// +// Возвращаемое значение: +// ОбъектXDTO - контактной информации. +// +Функция КонвертироватьПрочуюКонтактнуюИнформациюИзJSONВXML(ЗначенияПолей, Знач Представление = "", ОжидаемыйТип = Неопределено) + + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(ЗначенияПолей) Тогда + // Общий формат контактной информации. + Возврат КонтактнаяИнформацияИзXML(ЗначенияПолей, ОжидаемыйТип); + КонецЕсли; + + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); + Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); + + Если ПустаяСтрока(Представление) И ЗначенияПолей.Свойство("Value") И ЗначениеЗаполнено(ЗначенияПолей.Value) Тогда + Представление = ЗначенияПолей.Value; + КонецЕсли; + + Результат.Представление = Представление; + + Если ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда + Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "ЭлектроннаяПочта")); + + ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.ВебСтраница Тогда + Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "ВебСайт")); + + ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Skype Тогда + Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Skype")); + + ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Другое Тогда + Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Прочее")); + + ИначеЕсли ОжидаемыйТип <> Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Ошибка десериализации контактной информации, ожидается другой тип'"); + + КонецЕсли; + + Результат.Состав.Значение = Представление; + + Комментарий = ""; + Если ЗначенияПолей.Свойство("Comment") И ЗначениеЗаполнено(ЗначенияПолей.Comment) Тогда + Комментарий = СокрЛП(ЗначенияПолей.Comment); + Если ЗначениеЗаполнено(Комментарий) Тогда + Результат.Комментарий = Комментарий; + КонецЕсли; + КонецЕсли; + + + + Возврат Результат; + +КонецФункции + #КонецОбласти + + diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйВызовСервера/Module.bsl index 6f293f489..a7b0f7588 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйВызовСервера/Module.bsl @@ -3,15 +3,15 @@ // Разбирает представление контактной информации и возвращает строку XML со значениями полей. // // Параметры: -// Текст - Строка - XML +// Текст - Строка - Представление контактной информации // ОжидаемыйТип - СправочникСсылка.ВидыКонтактнойИнформации, ПеречислениеСсылка.ТипыКонтактнойИнформации - для // контроля типов. // // Возвращаемое значение: -// Строка - XML +// Строка - JSON // -Функция КонтактнаяИнформацияXMLПоПредставлению(Знач Текст, Знач ОжидаемыйВид) Экспорт - Возврат УправлениеКонтактнойИнформацией.КонтактнаяИнформацияXMLПоПредставлению(Текст, ОжидаемыйВид); +Функция КонтактнаяИнформацияПоПредставлению(Знач Текст, Знач ОжидаемыйВид) Экспорт + Возврат УправлениеКонтактнойИнформацией.КонтактнаяИнформацияПоПредставлению(Текст, ОжидаемыйВид); КонецФункции // Возвращает строку состава из значения контактной информации. @@ -73,4 +73,12 @@ КонецПроцедуры +// Заполняет список вариантов адреса при автоподборе по введенному пользователем тексту. +// +Процедура АвтоподборАдреса(Знач Текст, ДанныеВыбора) Экспорт + + УправлениеКонтактнойИнформациейСлужебный.АвтоподборАдреса(Текст, ДанныеВыбора); + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйПовтИсп/Module.bsl index e74c8eef7..805b0128a 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйПовтИсп/Module.bsl @@ -3,14 +3,38 @@ // Определяет наличие доступности подсистемы АдресныйКлассификатор и наличие записей о регионах в регистре сведений // АдресныеОбъекты. // -Функция АдресныйКлассификаторДоступен() Экспорт +Функция СведенияОДоступностиАдресногоКлассификатора() Экспорт ЕстьКлассификатор = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор"); Если ЕстьКлассификатор И НЕ ОбщегоНазначения.РазделениеВключено() Тогда + МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); - ЕстьКлассификатор = МодульАдресныйКлассификаторСлужебный.ПроверитьНачальноеЗаполнение(); + Возврат МодульАдресныйКлассификаторСлужебный.СведенияОДоступностиАдресныхСведений(); + КонецЕсли; - Возврат ЕстьКлассификатор; + Возврат Неопределено; +КонецФункции + +// Возвращает значение перечисления тип вида контактной информации. +// +// Параметры: +// ВидИнформации - СправочникСсылка.ВидыКонтактнойИнформации, Структура - источник данных. +// +Функция ТипВидаКонтактнойИнформации(Знач ВидИнформации) Экспорт + Результат = Неопределено; + + Тип = ТипЗнч(ВидИнформации); + Если Тип = Тип("ПеречислениеСсылка.ТипыКонтактнойИнформации") Тогда + Результат = ВидИнформации; + ИначеЕсли Тип = Тип("СправочникСсылка.ВидыКонтактнойИнформации") Тогда + Результат = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВидИнформации, "Тип"); + ИначеЕсли ВидИнформации <> Неопределено Тогда + Данные = Новый Структура("Тип"); + ЗаполнитьЗначенияСвойств(Данные, ВидИнформации); + Результат = Данные.Тип; + КонецЕсли; + + Возврат Результат; КонецФункции #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеПечатью/Module.bsl b/SSL/src/CommonModules/УправлениеПечатью/Module.bsl index 92b3db851..8cd0b06cf 100644 --- a/SSL/src/CommonModules/УправлениеПечатью/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатью/Module.bsl @@ -606,6 +606,10 @@ МакетыИДанные = МенеджерОбъекта.ПолучитьДанныеПечати(СоставДокументов, МассивИменМакетов); МакетыИДанные.Вставить("ЛокальныйКаталогФайловПечати", Неопределено); // Для обратной совместимости. + Если НЕ МакетыИДанные.Макеты.Свойство("ТипыМакетов") Тогда + МакетыИДанные.Макеты.Вставить("ТипыМакетов", Новый Соответствие); // Для обратной совместимости. + КонецЕсли; + Возврат МакетыИДанные; КонецФункции @@ -619,11 +623,12 @@ // "ОбщийМакет.<ИмяМакета>". // Возвращаемое значение: // ТабличныйДокумент - для макета типа MXL. -// ДвоичныеДанные - для макетов DOC и ODT. +// ДвоичныеДанные - для макетов офисных документов. // Функция МакетПечатнойФормы(ПутьКМакету) Экспорт - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Макет ""%1"" не найден. Операция прервана.'"), ПутьКМакету); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Макет ""%1"" не существует. Операция прервана.'"), ПутьКМакету); ЧастиПути = СтрРазделить(ПутьКМакету, ".", Истина); Если ЧастиПути.Количество() <> 2 И ЧастиПути.Количество() <> 3 Тогда ВызватьИсключение ТекстОшибки; @@ -648,21 +653,17 @@ Запрос.Параметры.Вставить("Объект", ИмяОбъекта); Запрос.Параметры.Вставить("ИмяМакета", "%" + ИмяМакета + "%"); - УстановитьОтключениеБезопасногоРежима(Истина); - УстановитьПривилегированныйРежим(Истина); - Выборка = Запрос.Выполнить().Выбрать(); - УстановитьПривилегированныйРежим(Ложь); - УстановитьОтключениеБезопасногоРежима(Ложь); - СписокМакетов = Новый Соответствие; Пока Выборка.Следующий() Цикл СписокМакетов.Вставить(Выборка.ИмяМакета, Выборка.Макет.Получить()); КонецЦикла; ИменаПоиска = Новый Массив; - Если СтрНайти(ИмяМакета, "ПФ_DOC_") > 0 Или СтрНайти(ИмяМакета, "ПФ_ODT_") > 0 Тогда + Если СтрНайти(ИмяМакета, "ПФ_DOC_") > 0 + Или СтрНайти(ИмяМакета, "ПФ_ODT_") > 0 Тогда // Для обратной совместимости. + ТекущийЯзык = ТекущийЯзык(); Если ТипЗнч(ТекущийЯзык) <> Тип("ОбъектМетаданных") Тогда ТекущийЯзык = Метаданные.ОсновнойЯзык; @@ -672,6 +673,7 @@ Если КодЯзыка <> Метаданные.ОсновнойЯзык.КодЯзыка Тогда ИменаПоиска.Добавить(ИмяМакета + "_" + Метаданные.ОсновнойЯзык.КодЯзыка); КонецЕсли; + КонецЕсли; ИменаПоиска.Добавить(ИмяМакета); @@ -812,10 +814,8 @@ Функция ДанныеQRКода(QRСтрока, УровеньКоррекции, Размер) Экспорт УстановитьОтключениеБезопасногоРежима(Истина); - - Отказ = Ложь; - ГенераторQRКода = КомпонентаФормированияQRКода(Отказ); - Если Отказ Тогда + ГенераторQRКода = КомпонентаФормированияQRКода(); + Если ГенераторQRКода = Неопределено Тогда Возврат Неопределено; КонецЕсли; @@ -987,6 +987,294 @@ КонецФункции +#Область РаботаСМакетамиОфисныхДокументов + +//////////////////////////////////////////////////////////////////////////////// +// Работа с макетами офисных документов. + +// Секция содержит интерфейсные функции (API), используемые при создании +// печатных форм основанных на офисных документах. На данный момент поддерживается +// офисные пакеты, работающие с форматом Office Open XML (MS Office, Open Office, Google Docs). +// +//////////////////////////////////////////////////////////////////////////////// +// Типы используемых данных (определяется конкретными реализациями). +// СсылкаПечатнаяФорма - ссылка на печатную форму. +// СсылкаМакет - ссылка на макет. +// Область - ссылка на область в печатной форме или макете (структура) +// доопределяется в интерфейсном модуле служебной информацией +// об области. +// ОписаниеОбласти - описание области макета (см. ниже). +// ДанныеЗаполнения - либо структура, либо массив структур (для случая +// списков и таблиц. +//////////////////////////////////////////////////////////////////////////////// +// ОписаниеОбласти - структура, описывающая подготовленные пользователем области макета +// ключ ИмяОбласти - имя области +// ключ ТипТипОбласти - ВерхнийКолонтитул. +// НижнийКолонтитул +// ВерхнийТитульныйКолонтитул +// НижнийТитульныйКолонтитул +// ВерхнийЧетныйКолонтитул +// НижнийЧетныйКолонтитул +// Общая +// СтрокаТаблицы +// Список +// + +//////////////////////////////////////////////////////////////////////////////// +// Функции инициализации и закрытия ссылок. + +// Создает структуру выходной печатной формой. +// Необходимо вызвать перед любыми действиями над формой. +// +// Параметры: +// УдалитьТипДокумента - Строка - устаревший параметр, не используется; +// УдалитьНастройкиСтраницыМакета - Соответствие - устаревший параметр, не используется; +// Макет - Структура - см. УправлениеПечатью.ИнициализироватьМакет. +// +// Возвращаемое значение: +// Структура - новая печатная форма. +// +Функция ИнициализироватьПечатнуюФорму(Знач УдалитьТипДокумента, Знач УдалитьНастройкиСтраницыМакета = Неопределено, Макет = Неопределено) Экспорт + + Если Макет = Неопределено Тогда + ВызватьИсключение "ru = 'Необходимо указать значение параметра ""Макет""'"; + КонецЕсли; + + ПечатнаяФорма = УправлениеПечатьюСлужебный.ИнициализироватьПечатнуюФорму(Макет); + ПечатнаяФорма.Вставить("Тип", "DOCX"); + ПечатнаяФорма.Вставить("ПоследняяВыведеннаяОбласть", Неопределено); + + Возврат ПечатнаяФорма; + +КонецФункции + +// Создает структуру макета. В дальнейшем эта структура используется при получении областей (тегов и +// таблиц), колонтитулов. +// +// Параметры: +// ДвоичныеДанныеМакета - ДвоичныеДанные - двоичные данные макета; +// УдалитьТипМакета - Строка - устаревший параметр, не используется; +// УдалитьИмяМакета - Строка - устаревший параметр, не используется. +// +// Возвращаемое значение: +// Структура - макет. +// +Функция ИнициализироватьМакетОфисногоДокумента(ДвоичныеДанныеМакета, Знач УдалитьТипМакета, Знач УдалитьИмяМакета = "") Экспорт + + Макет = УправлениеПечатьюСлужебный.ПолучитьМакет(ДвоичныеДанныеМакета); + Если Макет <> Неопределено Тогда + Макет.Вставить("Тип", "DOCX"); + Макет.Вставить("НастройкиСтраницыМакета", Новый Соответствие); + КонецЕсли; + + Возврат Макет; + +КонецФункции + +// Удаляет временные файлы, образовавшиеся после раскрытия xml структуры макета. +// Необходимо вызывать каждый раз после завершения формирования макета и печатной формы, +// а также в случае аварийного завершения формирования. +// +// Параметры: +// ПечатнаяФорма - Структура - см. УправлениеПечатью.ИнициализироватьПечатнуюФорму; +// УдалитьЗакрытьПриложение - Булево - устаревший параметр, не используется. +// +Процедура ОчиститьСсылки(ПечатнаяФорма, Знач УдалитьЗакрытьПриложение = Истина) Экспорт + + Если ПечатнаяФорма <> Неопределено Тогда + УправлениеПечатьюСлужебный.ЗакрытьСоединение(ПечатнаяФорма); + ПечатнаяФорма = Неопределено; + КонецЕсли; + +КонецПроцедуры + +// Формирует файл выходной печатной формы и помещает его в хранилище. +// Необходимо вызывать после помещения в структуру печатной формы всех необходимых областей. +// +// Параметры: +// ПечатнаяФорма - Структура - см. УправлениеПечатью.ИнициализироватьПечатнуюФорму. +// +// Возвращаемое значение: +// Строка - адрес хранилища, куда помещается сформированный файл. +// +Функция СформироватьДокумент(Знач ПечатнаяФорма) Экспорт + + АдресХранилищаПечатнойФормы = УправлениеПечатьюСлужебный.СформироватьДокумент(ПечатнаяФорма); + + Возврат АдресХранилищаПечатнойФормы; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Функции получения областей из макета, вывода в печатную форму областей макета +// и заполнение параметров в них. + +// Получает область из макета печатной формы. +// +// Параметры: +// СсылкаНаМакет - Структура - макет печатной формы. +// ОписаниеОбласти - Структура - описание области. +// +// Возвращаемое значение: +// Структура - область макета. +// +Функция ОбластьМакета(СсылкаНаМакет, ОписаниеОбласти) Экспорт + + Область = Неопределено; + + Если ОписаниеОбласти.ТипОбласти = "ВерхнийКолонтитул" ИЛИ ОписаниеОбласти.ТипОбласти = "ВерхнийЧетныйКолонтитул" ИЛИ ОписаниеОбласти.ТипОбласти = "ВерхнийТитульныйКолонтитул" Тогда + Область = УправлениеПечатьюСлужебный.ПолучитьОбластьВерхнегоКолонтитула(СсылкаНаМакет, ОписаниеОбласти.ИмяОбласти); + ИначеЕсли ОписаниеОбласти.ТипОбласти = "НижнийКолонтитул" ИЛИ ОписаниеОбласти.ТипОбласти = "НижнийЧетныйКолонтитул" ИЛИ ОписаниеОбласти.ТипОбласти = "НижнийТитульныйКолонтитул" Тогда + Область = УправлениеПечатьюСлужебный.ПолучитьОбластьНижнегоКолонтитула(СсылкаНаМакет, ОписаниеОбласти.ИмяОбласти); + ИначеЕсли ОписаниеОбласти.ТипОбласти = "Общая" Тогда + Область = УправлениеПечатьюСлужебный.ПолучитьОбластьМакета(СсылкаНаМакет, ОписаниеОбласти.ИмяОбласти); + ИначеЕсли ОписаниеОбласти.ТипОбласти = "СтрокаТаблицы" Тогда + Область = УправлениеПечатьюСлужебный.ПолучитьОбластьМакета(СсылкаНаМакет, ОписаниеОбласти.ИмяОбласти); + ИначеЕсли ОписаниеОбласти.ТипОбласти = "Список" Тогда + Область = УправлениеПечатьюСлужебный.ПолучитьОбластьМакета(СсылкаНаМакет, ОписаниеОбласти.ИмяОбласти); + Иначе + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Тип области не указан или указан некорректно: %1.'"), ОписаниеОбласти.ТипОбласти); + КонецЕсли; + + Если Область <> Неопределено Тогда + Область.Вставить("ОписаниеОбласти", ОписаниеОбласти); + КонецЕсли; + + Возврат Область; + +КонецФункции + +// Присоединяет область в печатную форму из макета. +// Применяется при одиночном выводе области. +// +// Параметры: +// ПечатнаяФорма - Структура - печатная форма, см. УправлениеПечатью.ИнициализироватьПечатнуюФорму. +// ОбластьМакета - Структура - см. УправлениеПечатью.ОбластьМакета. +// ПереходНаСледующуюСтроку - Булево - Истина, если требуется вставить разрыв после вывода области. +// +Процедура ПрисоединитьОбласть(ПечатнаяФорма, ОбластьМакета, Знач ПереходНаСледующуюСтроку = Ложь) Экспорт + + Если ОбластьМакета = Неопределено Тогда + Возврат; + КонецЕсли; + + Попытка + + ОписаниеОбласти = ОбластьМакета.ОписаниеОбласти; + + ВыведеннаяОбласть = Неопределено; + + Если ОписаниеОбласти.ТипОбласти = "ВерхнийКолонтитул" ИЛИ ОписаниеОбласти.ТипОбласти = "ВерхнийЧетныйКолонтитул" ИЛИ ОписаниеОбласти.ТипОбласти = "ВерхнийТитульныйКолонтитул" Тогда + ВыведеннаяОбласть = УправлениеПечатьюСлужебный.ДобавитьВерхнийКолонтитул(ПечатнаяФорма, ОбластьМакета); + ИначеЕсли ОписаниеОбласти.ТипОбласти = "НижнийКолонтитул" ИЛИ ОписаниеОбласти.ТипОбласти = "НижнийЧетныйКолонтитул" ИЛИ ОписаниеОбласти.ТипОбласти = "НижнийТитульныйКолонтитул" Тогда + ВыведеннаяОбласть = УправлениеПечатьюСлужебный.ДобавитьНижнийКолонтитул(ПечатнаяФорма, ОбластьМакета); + ИначеЕсли ОписаниеОбласти.ТипОбласти = "Общая" Тогда + ВыведеннаяОбласть = УправлениеПечатьюСлужебный.ПрисоединитьОбласть(ПечатнаяФорма, ОбластьМакета, ПереходНаСледующуюСтроку); + ИначеЕсли ОписаниеОбласти.ТипОбласти = "Список" ИЛИ ОписаниеОбласти.ТипОбласти = "СтрокаТаблицы" Тогда + ВыведеннаяОбласть = УправлениеПечатьюСлужебный.ПрисоединитьОбласть(ПечатнаяФорма, ОбластьМакета, ПереходНаСледующуюСтроку); + Иначе + ВызватьИсключение ТекстТипОбластиУказанНекорректно(); + КонецЕсли; + + ОписаниеОбласти.Вставить("Область", ВыведеннаяОбласть); + ОписаниеОбласти.Вставить("ПереходНаСледующуюСтроку", ПереходНаСледующуюСтроку); + + // Содержит тип области, и границы области (если требуется). + ПечатнаяФорма.ПоследняяВыведеннаяОбласть = ОписаниеОбласти; + + Исключение + СообщениеОбОшибке = СокрЛП(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + СообщениеОбОшибке = ?(Прав(СообщениеОбОшибке, 1) = ".", СообщениеОбОшибке, СообщениеОбОшибке + "."); + СообщениеОбОшибке = СообщениеОбОшибке + " " + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при попытке вывести область ""%1"" из макета.'"), + ОбластьМакета.ОписаниеОбласти.ИмяОбласти); + ВызватьИсключение СообщениеОбОшибке; + КонецПопытки; + +КонецПроцедуры + +// Заполняет параметры области печатной формы. +// +// Параметры: +// ПечатнаяФорма - Структура - область печатной формы, либо сама печатная форма. +// Данные - Структура - данные заполнения. +// +Процедура ЗаполнитьПараметры(ПечатнаяФорма, Данные) Экспорт + + ОписаниеОбласти = ПечатнаяФорма.ПоследняяВыведеннаяОбласть; + + Если ОписаниеОбласти.ТипОбласти = "ВерхнийКолонтитул" ИЛИ ОписаниеОбласти.ТипОбласти = "ВерхнийЧетныйКолонтитул" ИЛИ ОписаниеОбласти.ТипОбласти = "ВерхнийТитульныйКолонтитул" Тогда + УправлениеПечатьюСлужебный.ЗаполнитьПараметрыВерхнегоКолонтитула(ПечатнаяФорма, ПечатнаяФорма.ПоследняяВыведеннаяОбласть.Область, Данные); + ИначеЕсли ОписаниеОбласти.ТипОбласти = "НижнийКолонтитул" ИЛИ ОписаниеОбласти.ТипОбласти = "НижнийЧетныйКолонтитул" ИЛИ ОписаниеОбласти.ТипОбласти = "НижнийТитульныйКолонтитул" Тогда + УправлениеПечатьюСлужебный.ЗаполнитьПараметрыНижнегоКолонтитула(ПечатнаяФорма, ПечатнаяФорма.ПоследняяВыведеннаяОбласть.Область, Данные); + ИначеЕсли ОписаниеОбласти.ТипОбласти = "Общая" + ИЛИ ОписаниеОбласти.ТипОбласти = "СтрокаТаблицы" + ИЛИ ОписаниеОбласти.ТипОбласти = "Список" Тогда + УправлениеПечатьюСлужебный.ЗаполнитьПараметры(ПечатнаяФорма, ПечатнаяФорма.ПоследняяВыведеннаяОбласть.Область, Данные); + Иначе + ВызватьИсключение ТекстТипОбластиУказанНекорректно(); + КонецЕсли; + +КонецПроцедуры + +// Добавляет область в печатную форму из макета, при этом заменяя параметры в области значениями из данных объекта. +// Применяется при одиночном выводе области. +// +// Параметры: +// ПечатнаяФорма - Структура - печатная форма, см. УправлениеПечатью.ИнициализироватьПечатнуюФорму. +// ОбластьМакета - Структура - см. УправлениеПечатью.ОбластьМакета. +// Данные - Структура - данные заполнения. +// ПереходНаСледующуюСтроку - Булево - Истина, если требуется вставить разрыв после вывода области. +// +Процедура ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, ОбластьМакета, Данные, Знач ПереходНаСледующуюСтроку = Ложь) Экспорт + + Если ОбластьМакета = Неопределено Тогда + Возврат; + КонецЕсли; + + ПрисоединитьОбласть(ПечатнаяФорма, ОбластьМакета, ПереходНаСледующуюСтроку); + ЗаполнитьПараметры(ПечатнаяФорма, Данные); + +КонецПроцедуры + +// Добавляет область в печатную форму из макета, при этом заменяя +// параметры в области значениями из данных объекта. +// Применяется при одиночном выводе области. +// +// Параметры: +// ПечатнаяФорма - Структура - печатная форма, см. УправлениеПечатью.ИнициализироватьПечатнуюФорму. +// ОбластьМакета - Структура - см. УправлениеПечатью.ОбластьМакета. +// Данные - Массив - коллекция элементов типа Структура, данные объекта. +// ПереходНаСледСтроку - Булево - Истина, если требуется вставить разрыв после вывода области. +// +Процедура ПрисоединитьИЗаполнитьКоллекцию(ПечатнаяФорма, ОбластьМакета, Данные, Знач ПереходНаСледСтроку = Ложь) Экспорт + + Если ОбластьМакета = Неопределено Тогда + Возврат; + КонецЕсли; + + ОписаниеОбласти = ОбластьМакета.ОписаниеОбласти; + + Если ОписаниеОбласти.ТипОбласти = "СтрокаТаблицы" ИЛИ ОписаниеОбласти.ТипОбласти = "Список" Тогда + УправлениеПечатьюСлужебный.ПрисоединитьИЗаполнитьНабор(ПечатнаяФорма, ОбластьМакета, Данные, ПереходНаСледСтроку); + Иначе + ВызватьИсключение ТекстТипОбластиУказанНекорректно(); + КонецЕсли; + +КонецПроцедуры + +// Вставляет разрыв между строками в виде символа перевода строки. +// +// Параметры: +// ПечатнаяФорма - Структура - печатная форма, см. УправлениеПечатью.ИнициализироватьПечатнуюФорму. +// +Процедура ВставитьРазрывНаНовуюСтроку(ПечатнаяФорма) Экспорт + + УправлениеПечатьюСлужебный.ВставитьРазрывНаНовуюСтроку(ПечатнаяФорма); + +КонецПроцедуры + +#КонецОбласти + #Область УстаревшиеПроцедурыИФункции // Устарела. Следует использовать ПодключаемыеКоманды.ПриСозданииНаСервере. @@ -1105,7 +1393,7 @@ Возврат Результат; КонецФункции -// Подготовить коллекцию печатных форм - таблицу значений используемые при формировании печатных форм. +// Подготовить таблицу значений, используемых при формировании печатных форм. // Функция ПодготовитьКоллекциюПечатныхФорм(Знач ИменаМакетов) Экспорт @@ -1118,6 +1406,7 @@ Макеты.Колонки.Добавить("Картинка"); Макеты.Колонки.Добавить("ПолныйПутьКМакету"); Макеты.Колонки.Добавить("ИмяФайлаПечатнойФормы"); + Макеты.Колонки.Добавить("ОфисныеДокументы"); Если ТипЗнч(ИменаМакетов) = Тип("Строка") Тогда ИменаМакетов = СтрРазделить(ИменаМакетов, ","); @@ -1312,15 +1601,16 @@ Обработчик.РежимВыполнения = "Оперативно"; Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.4.4.10"; - Обработчик.Процедура = "УправлениеПечатью.ОчиститьПользовательскиеМакетыБезИзменений"; + Обработчик.Версия = "3.0.1.60"; + Обработчик.Процедура = "РегистрыСведений.ПользовательскиеМакетыПечати.ОбработатьПользовательскиеМакеты"; Обработчик.РежимВыполнения = "Отложенно"; Обработчик.ОчередьОтложеннойОбработки = 1; - Обработчик.Комментарий = НСтр("ru = 'Очищает пользовательские макеты, в которых нет изменений по сравнению с соответствующими поставляемыми макетами.'"); + Обработчик.Комментарий = НСтр("ru = 'Очищает пользовательские макеты, в которых нет изменений по сравнению с соответствующими поставляемыми макетами. + |Отключает пользовательские макеты, которые не совместимы с текущей версией конфигурации.'"); Обработчик.Идентификатор = Новый УникальныйИдентификатор("e5b0d876-c766-40a0-a0cf-ffccc83a193f"); Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; Обработчик.БлокируемыеОбъекты = "РегистрСведений.ПользовательскиеМакетыПечати"; - Обработчик.ПроцедураЗаполненияДанныхОбновления = "УправлениеПечатью.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"; + Обработчик.ПроцедураЗаполненияДанныхОбновления = "РегистрыСведений.ПользовательскиеМакетыПечати.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"; Обработчик.ЧитаемыеОбъекты = "РегистрСведений.ПользовательскиеМакетыПечати"; Обработчик.ИзменяемыеОбъекты = "РегистрСведений.ПользовательскиеМакетыПечати"; @@ -1464,7 +1754,7 @@ КонецПроцедуры -// Добавляет роль РедактированиеПечатныхФорм во все профили, в которые входит роль БазовыеПрава. +// Добавляет роль РедактированиеПечатныхФорм во все профили, в которые входит роль БазовыеПраваБСП. Процедура ДобавитьРольРедактированиеПечатныхФормВПрофилиСБазовымиПравами() Экспорт Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда @@ -1474,11 +1764,11 @@ МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); НовыеРоли = Новый Массив; - НовыеРоли.Добавить(Метаданные.Роли.БазовыеПрава.Имя); + НовыеРоли.Добавить(Метаданные.Роли.БазовыеПраваБСП.Имя); НовыеРоли.Добавить(Метаданные.Роли.РедактированиеПечатныхФорм.Имя); ЗаменяемыеРоли = Новый Соответствие; - ЗаменяемыеРоли.Вставить(Метаданные.Роли.БазовыеПрава.Имя, НовыеРоли); + ЗаменяемыеРоли.Вставить(Метаданные.Роли.БазовыеПраваБСП.Имя, НовыеРоли); МодульУправлениеДоступом.ЗаменитьРолиВПрофилях(ЗаменяемыеРоли); @@ -1638,6 +1928,11 @@ Отказ = ВременнаяКоллекцияДляОднойПечатнойФормы.Количество() = 0; // Предполагается одна печатная форма, но для обратной совместимости принимается вся коллекция. Для Каждого ВременнаяПечатнаяФорма Из ВременнаяКоллекцияДляОднойПечатнойФормы Цикл + + Если НЕ ВременнаяПечатнаяФорма.ОфисныеДокументы = Неопределено Тогда + ВременнаяПечатнаяФорма.ТабличныйДокумент = Новый ТабличныйДокумент; + КонецЕсли; + Если ВременнаяПечатнаяФорма.ТабличныйДокумент <> Неопределено Тогда ПечатнаяФорма = КоллекцияПечатныхФорм.Добавить(); ЗаполнитьЗначенияСвойств(ПечатнаяФорма, ВременнаяПечатнаяФорма); @@ -1649,6 +1944,7 @@ // Возникла ошибка при формировании печатной формы. Отказ = Истина; КонецЕсли; + КонецЦикла; // Вызов исключения при возникновении ошибки. @@ -1936,14 +2232,13 @@ КонецФункции -Функция КомпонентаФормированияQRКода(Отказ) +Функция КомпонентаФормированияQRКода() ТекстОшибки = НСтр("ru = 'Не удалось подключить внешнюю компоненту для генерации QR-кода. Подробности в журнале регистрации.'"); QRCodeGenerator = ОбщегоНазначения.ПодключитьКомпонентуИзМакета("QRCodeExtension", "ОбщийМакет.КомпонентаПечатиQRКода"); - Если QRCodeGenerator = Неопределено Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки,,,, Отказ); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки); КонецЕсли; Возврат QRCodeGenerator; @@ -2276,88 +2571,20 @@ КонецФункции Функция КопируемыеСвойстваТабличногоДокумента() Экспорт - Возврат "АвтоМасштаб,Вывод,ВысотаСтраницы,ДвусторонняяПечать,Защита,ИмяПринтера,КодЯзыка,КоличествоЭкземпляров,МасштабПечати,ОриентацияСтраницы,ПолеСверху,ПолеСлева,ПолеСнизу,ПолеСправа,РазборПоКопиям,РазмерКолонтитулаСверху,РазмерКолонтитулаСнизу,РазмерСтраницы,ТочностьПечати,ФоноваяКартинка,ЧерноБелаяПечать,ШиринаСтраницы,ЭкземпляровНаСтранице"; + Возврат "АвтоМасштаб,Вывод,ВысотаСтраницы,ДвусторонняяПечать,Защита,ИмяПринтера,КодЯзыка,КоличествоЭкземпляров,МасштабПечати,НомерПервойСтраницы,ОриентацияСтраницы,ПолеСверху,ПолеСлева,ПолеСнизу,ПолеСправа,РазборПоКопиям,РазмерКолонтитулаСверху,РазмерКолонтитулаСнизу,РазмерСтраницы,ТочностьПечати,ФоноваяКартинка,ЧерноБелаяПечать,ШиринаСтраницы,ЭкземпляровНаСтранице"; КонецФункции -// Регистрирует на плане обмена ОбновлениеИнформационнойБазы объекты, -// которые необходимо обновить на новую версию. -// -// Параметры: -// Параметры - Структура - служебный параметр для передачи в процедуру ОбновлениеИнформационнойБазы.ОтметитьКОбработке. -// -Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт - - ТекстЗапроса = - "ВЫБРАТЬ - | ПользовательскиеМакетыПечати.ИмяМакета КАК ИмяМакета, - | ПользовательскиеМакетыПечати.Объект КАК Объект - |ИЗ - | РегистрСведений.ПользовательскиеМакетыПечати КАК ПользовательскиеМакетыПечати"; - - Запрос = Новый Запрос(ТекстЗапроса); - ПользовательскиеМакеты = Запрос.Выполнить().Выгрузить(); - - ДополнительныеПараметры = ОбновлениеИнформационнойБазы.ДополнительныеПараметрыОтметкиОбработки(); - ДополнительныеПараметры.ЭтоНезависимыйРегистрСведений = Истина; - ДополнительныеПараметры.ПолноеИмяРегистра = "РегистрСведений.ПользовательскиеМакетыПечати"; - - ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, ПользовательскиеМакеты, ДополнительныеПараметры); - -КонецПроцедуры +Функция МакетыРазличаются(Знач ИсходныйМакет, ИзмененныйМакет) Экспорт + Возврат ОбщегоНазначения.КонтрольнаяСуммаСтрокой(НормализоватьМакет(ИсходныйМакет)) <> ОбщегоНазначения.КонтрольнаяСуммаСтрокой(НормализоватьМакет(ИзмененныйМакет)); +КонецФункции -Процедура ОчиститьПользовательскиеМакетыБезИзменений(Параметры) Экспорт - - Выборка = ОбновлениеИнформационнойБазы.ВыбратьИзмеренияНезависимогоРегистраСведенийДляОбработки(Параметры.Очередь, "РегистрСведений.ПользовательскиеМакетыПечати"); - Пока Выборка.Следующий() Цикл - Запись = РегистрыСведений.ПользовательскиеМакетыПечати.СоздатьМенеджерЗаписи(); - Запись.ИмяМакета = Выборка.ИмяМакета; - Запись.Объект = Выборка.Объект; - Запись.Прочитать(); - ИзмененныйМакет = Запись.Макет.Получить(); - - ЭтоОбщийМакет = СтрРазделить(Выборка.Объект, ".", Истина).Количество() < 2; - - Если ЭтоОбщийМакет Тогда - ИмяОбъектаМетаданныхМакета = "ОбщийМакет." + Выборка.ИмяМакета; - Иначе - ИмяОбъектаМетаданныхМакета = Выборка.Объект + ".Макет." + Выборка.ИмяМакета; - КонецЕсли; - - НаборЗаписей = РегистрыСведений.ПользовательскиеМакетыПечати.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.Объект.Установить(Выборка.Объект); - НаборЗаписей.Отбор.ИмяМакета.Установить(Выборка.ИмяМакета); - - Если Метаданные.НайтиПоПолномуИмени(ИмяОбъектаМетаданныхМакета) = Неопределено Тогда - ИмяСобытия = НСтр("ru = 'Печать'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Обнаружен пользовательский макет, отсутствующий в метаданных конфигурации: - |""%1"".'"), ИмяОбъектаМетаданныхМакета); - ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Предупреждение, , ИмяОбъектаМетаданныхМакета, ТекстОшибки); - ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(НаборЗаписей); - Продолжить; - КонецЕсли; - - Если ЭтоОбщийМакет Тогда - МакетИзМетаданных = ПолучитьОбщийМакет(Выборка.ИмяМакета); - Иначе - МакетИзМетаданных = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(Выборка.Объект).ПолучитьМакет(Выборка.ИмяМакета); - КонецЕсли; - - Если Не МакетыРазличаются(МакетИзМетаданных, ИзмененныйМакет) Тогда - ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборЗаписей); - Иначе - ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(НаборЗаписей); - КонецЕсли; - КонецЦикла; - - Параметры.ОбработкаЗавершена = ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, "РегистрСведений.ПользовательскиеМакетыПечати"); - -КонецПроцедуры +Функция НормализоватьМакет(Знач Макет) + ХранилищеМакета = Новый ХранилищеЗначения(Макет); + Возврат ХранилищеМакета.Получить(); +КонецФункции -Функция МакетыРазличаются(ИсходныйМакет, ИзмененныйМакет) - - Возврат ОбщегоНазначения.КонтрольнаяСуммаСтрокой(Новый ХранилищеЗначения(ИсходныйМакет, Новый СжатиеДанных(9))) <> ОбщегоНазначения.КонтрольнаяСуммаСтрокой(Новый ХранилищеЗначения(ИзмененныйМакет, Новый СжатиеДанных(9))); - +Функция ТекстТипОбластиУказанНекорректно() + Возврат НСтр("ru = 'Тип области не указан или указан некорректно.'"); КонецФункции #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl index 7de9fb87c..df849621b 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl @@ -1,5 +1,5 @@ ////////////////////////////////////////////////////////////////////////////////// -// Печать с использованием макетов в формате MS Word. +// Печать с использованием макетов в формате Microsoft Word (doc) на клиенте. Для обратной совместимости. // // Описание структур данных: // diff --git a/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/УправлениеПечатьюMSWordКлиент.mdo b/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/УправлениеПечатьюMSWordКлиент.mdo index 7706f2d10..cb7c73278 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/УправлениеПечатьюMSWordКлиент.mdo +++ b/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/УправлениеПечатьюMSWordКлиент.mdo @@ -5,6 +5,7 @@ ru Управление печатью MS Word клиент + АПК:566 устаревший код, работа в веб-клиенте не требуется true true diff --git a/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl index bb5998b13..098a85b95 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// Open Office Writer - специфичные функции. +// Печать с использованием макетов в формате OpenDocument Text (odt) на клиенте. Для обратной совместимости. // // Описание ссылки на печатную форму и макет. // Структура с полями: diff --git a/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/УправлениеПечатьюOOWriterКлиент.mdo b/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/УправлениеПечатьюOOWriterКлиент.mdo index 283ffd1f1..7831133fd 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/УправлениеПечатьюOOWriterКлиент.mdo +++ b/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/УправлениеПечатьюOOWriterКлиент.mdo @@ -5,6 +5,7 @@ ru Управление печатью OpenOffice.org Writer клиент + АПК:566 устаревший код, работа в веб-клиенте не требуется true true diff --git a/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl index 2fa2923b5..5199f15fb 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl @@ -184,14 +184,13 @@ КонецПроцедуры -#Область РаботаСМакетамиОфисныхДокументов +#Область УстаревшиеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Работа с макетами офисных документов. // Секция содержит интерфейсные функции (API), используемые при создании -// печатных форм основанных на офисных документах. На данный момент поддерживается -// два офисных пакета MS Office (шаблоны MS Word) и Open Office (шаблоны OO Writer). +// печатных форм основанных на офисных документах MS Office (шаблоны MS Word) и Open Office (шаблоны OO Writer). // //////////////////////////////////////////////////////////////////////////////// // Типы используемых данных (определяется конкретными реализациями). @@ -216,6 +215,8 @@ //////////////////////////////////////////////////////////////////////////////// // Функции инициализации и закрытия ссылок. +// Устарела. Следует использовать УправлениеПечатью.ИнициализироватьПечатнуюФорму. +// // Создает соединение с выходной печатной формой. // Необходимо вызвать перед любыми действиями над формой. // Функция не работает в любых других браузерах кроме IE. @@ -247,6 +248,8 @@ КонецФункции +// Устарела. Следует использовать УправлениеПечатью.ИнициализироватьМакетОфисногоДокумента. +// // Создает COM-соединение с макетом. В дальнейшем это соединение используется при получении из него областей (тегов и // таблиц). // Функция не работает в любых других браузерах кроме IE. @@ -290,6 +293,8 @@ КонецФункции +// Устарела. Следует использовать УправлениеПечатью.ОчиститьСсылки. +// // Освобождает ссылки в созданном интерфейсе связи с офисным приложением. // Необходимо вызывать каждый раз после завершения формирования макета и выводе печатной формы пользователю. // @@ -315,6 +320,8 @@ //////////////////////////////////////////////////////////////////////////////// // Функция отображения печатной формы пользователю. +// Устарела. Более не требуется. +// // Показывает сформированный документ пользователю. // // Параметры: @@ -334,6 +341,8 @@ // Функции получения областей из макета, вывода в печатную форму областей макета // и заполнение параметров в них. +// Устарела. Следует использовать УправлениеПечатью.ОбластьМакета. +// // Получает область из макета печатной формы. // // Параметры: @@ -388,12 +397,14 @@ КонецФункции +// Устарела. Следует использовать УправлениеПечатью.ПрисоединитьОбласть. +// // Присоединяет область в печатную форму из макета. // Применяется при одиночном выводе области. // // Параметры: -// ПечатнаяФорма - Структура - печатная форма, см. ИнициализироватьПечатнуюФорму(). -// ОбластьМакета - Структура - см. ОбластьМакета(). +// ПечатнаяФорма - Структура - печатная форма, см. ИнициализироватьПечатнуюФорму. +// ОбластьМакета - Структура - см. ОбластьМакета. // ПереходНаСледующуюСтроку - Булево - Истина, если требуется вставить разрыв после вывода области. // Процедура ПрисоединитьОбласть(Знач ПечатнаяФорма, Знач ОбластьМакета, Знач ПереходНаСледующуюСтроку = Истина) Экспорт @@ -463,6 +474,8 @@ КонецПроцедуры +// Устарела. Следует использовать УправлениеПечатью.ЗаполнитьПараметры. +// // Заполняет параметры области печатной формы. // // Параметры: @@ -500,12 +513,14 @@ КонецПроцедуры +// Устарела. Следует использовать УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры. +// // Добавляет область в печатную форму из макета, при этом заменяя параметры в области значениями из данных объекта. // Применяется при одиночном выводе области. // // Параметры: -// ПечатнаяФорма - Структура - печатная форма, см. ИнициализироватьПечатнуюФорму(). -// ОбластьМакета - Структура - см. ОбластьМакета(). +// ПечатнаяФорма - Структура - печатная форма, см. ИнициализироватьПечатнуюФорму. +// ОбластьМакета - Структура - см. ОбластьМакета. // Данные - Структура - данные заполнения. // ПереходНаСледующуюСтроку - Булево - Истина, если требуется вставить разрыв после вывода области. // @@ -519,12 +534,14 @@ КонецПроцедуры +// Устарела. Следует использовать УправлениеПечатью.ПрисоединитьИЗаполнитьКоллекцию. +// // Добавляет область в печатную форму из макета, при этом заменяя // параметры в области значениями из данных объекта. // Применяется при одиночном выводе области. // // Параметры: -// ПечатнаяФорма - Структура - печатная форма, см. ИнициализироватьПечатнуюФорму(). +// ПечатнаяФорма - Структура - печатная форма, см. ИнициализироватьПечатнуюФорму. // ОбластьМакета - Структура - см. ОбластьМакета(). // Данные - Массив - коллекция элементов типа Структура, данные объекта. // ПереходНаСледСтроку - Булево - Истина, если требуется вставить разрыв после вывода области. @@ -559,10 +576,12 @@ КонецПроцедуры +// Устарела. Следует использовать УправлениеПечатью.ВставитьРазрывНаНовуюСтроку. +// // Вставляет разрыв между строками в виде символа перевода строки. // // Параметры: -// ПечатнаяФорма - Структура - печатная форма, см. ИнициализироватьПечатнуюФорму(). +// ПечатнаяФорма - Структура - печатная форма, см. ИнициализироватьПечатнуюФорму. // Процедура ВставитьРазрывНаНовуюСтроку(Знач ПечатнаяФорма) Экспорт @@ -574,9 +593,7 @@ КонецПроцедуры -#КонецОбласти - -#Область УстаревшиеПроцедурыИФункции +// Прочие устаревшие процедуры и функции // Устарела. Следует использовать ПодключаемыеКомандыКлиент.ВыполнитьКоманду. // diff --git a/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl index 716333b0d..0406401eb 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl @@ -14,7 +14,6 @@ КонецПроцедуры // Переопределяет таблицу возможных форматов для сохранения табличного документа. -// Вызывается из ОбщегоНазначения.НастройкиФорматовСохраненияТабличногоДокумента(). // Используется в случае, когда необходимо сократить список форматов сохранения, предлагаемый пользователю // перед сохранением печатной формы в файл, либо перед отправкой по почте. // diff --git a/SSL/src/CommonModules/УправлениеПечатьюСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюСлужебный/Module.bsl new file mode 100644 index 000000000..727183a91 --- /dev/null +++ b/SSL/src/CommonModules/УправлениеПечатьюСлужебный/Module.bsl @@ -0,0 +1,3144 @@ +#Область СлужебныеПроцедурыИФункции + +////////////////////////////////////////////////////////////////////////////////// +// Печать с использованием макетов в формате Office Open XML. +// +// Описание структур данных: +// +// Макет - структура, используемая для хранения областей, разделов и колонтитулов из исходного шаблона. +// - ИмяКаталога - Строка - путь, куда распаковывается контейнер DOCX шаблона для дальнейшего анализа. +// - СтруктураДокумента - Структура - коллекция, куда собирается информация по областям, разделам и колонтитулам, +// входящих в шаблон. +// +// ПечатнаяФорма - структура, используемая для вывода и заполнения областей из структуры "Макет". +// - ИмяКаталога - Строка - путь, куда помещается структура каталогов конечного документа для последующей сборки +// контейнера DOCX. +// - СтруктураДокумента - Структура - коллекция, куда собирается информация по областям, разделам и колонтитулам, +// выведенных в конечный документ. +// +// Структура документа +// - ОбластиДокумента - Соответствие - коллекция шаблонов областей, в которой ключ - имя области в исходном шаблоне. +// - Разделы - Соответствие - коллекция разделов шаблона, в которой ключ - номер раздела в исходном шаблоне. +// - Колонтитулы - Соответствие - коллекция колонтитулов шаблона, в которой ключ - имя колонтитула, сформированное +// из исходного шаблона. +// - ПрисоединенныеОбласти - Массив - коллекция заполненных и выведенных областей в конечном документе. +// - ТипыКонтента - Строка - текст файла [Content_Types].xml из контейнера DOCX. +// - СвязиКонтента - Строка - текст файла document.xml.rels из контейнера DOCX. +// - ТаблицаСвязейКонтента - таблица значений - разобранный файл document.xml.rels по именам и +// идентификаторам ресурсов. +// - КаталогКартинок - Строка - путь для сохранения картинок в конечном документе. +// - РасширенияКартинок - Массив - расширения добавленных изображений в конечный документ. +// - ИдентификаторДокумента - Строка - идентификатор ревизии документа. +// +// Структура раздела +// - Колонтитулы - Соответствие - коллекция колонтитулов шаблона для конкретного раздела, в которой ключ - +// имя колонтитула в исходном шаблоне. +// - Текст - Строка - текст раздела в исходном шаблоне. +// - Номер - Число - номер раздела в исходном шаблоне. +// +// Структура области +// - Имя - Строка - имя области, заданное в исходном шаблоне. +// - Текст - Строка - текст области, заданный в исходном шаблоне. +// - НомерРаздела - Число - номер раздела в исходном шаблоне, в который входит область. +// +// Структура колонтитула +// - Имя - Строка - имя колонтитула, сформированное из исходного шаблона. +// - ИмяВнутр - Строка - имя файла колонтитула из структуры контейнера DOCX исходного шаблона. +// - Текст - Строка - текст колонтитула, заданный в исходном шаблоне. +// - НомерРаздела - Число - номер раздела в исходном шаблоне, к которому относится колонтитул. +// + +// Возвращает структуру печатной формы для формирования конечного документа. +// +// Параметры: +// Макет - Структура - макет печатной формы. +// +// Возвращаемое значение: +// Структура - Печатная форма. +// +Функция ИнициализироватьПечатнуюФорму(Макет) Экспорт + + ИмяВременногоКаталога = ОбщегоНазначения.СоздатьВременныйКаталог(); + + КопироватьСодержимоеКаталога(Макет.ИмяКаталога, ИмяВременногоКаталога); + + СтруктураДокумента = ИнициализироватьДокумент(); + + ПечатнаяФорма = Новый Структура; + ПечатнаяФорма.Вставить("ИмяКаталога", ИмяВременногоКаталога); + ПечатнаяФорма.Вставить("СтруктураДокумента", СтруктураДокумента); + + ИнициализироватьСтруктуруПечатнойФормы(ПечатнаяФорма, Макет); + + Возврат ПечатнаяФорма; + +КонецФункции + +// Возвращает структуру макета печатной формы. +// Файл макета заполняется на основе двоичных данных, переданных в параметрах функции. +// +// Параметры: +// ДвоичныеДанныеМакета - ДвоичныеДанные - Двоичные данные макета. +// +// Возвращаемое значение: +// Структура - Макет печатной формы. +// +Функция ПолучитьМакет(ДвоичныеДанныеМакета) Экспорт + + Расширение = ОпределитьРасширениеФайлаДанныхПоСигнатуре(ДвоичныеДанныеМакета); + Если НЕ Расширение = "docx" Тогда + ЗаписатьСобытияВЖурналРегистрации(СобытиеЖурналаРегистрации(), "Ошибка", НСтр("ru = 'Макет шаблона офисного документа имеет не верный формат.'")); + ВызватьИсключение(НСтр("ru = 'Ошибка анализа макета шаблона. Макет шаблона офисного документа имеет не верный формат.'")); + КонецЕсли; + + ИмяВременногоФайла = ПолучитьИмяВременногоФайла("docx"); + ИмяВременногоКаталога = ОбщегоНазначения.СоздатьВременныйКаталог(); + + ДвоичныеДанныеМакета.Записать(ИмяВременногоФайла); + + РазобратьКонтейнерДокументDOCX(ИмяВременногоФайла, ИмяВременногоКаталога); + + УдалитьФайлы(ИмяВременногоФайла); + + СтруктураДокумента = ИнициализироватьДокумент(); + + Макет = Новый Структура; + Макет.Вставить("ИмяКаталога", ИмяВременногоКаталога); + Макет.Вставить("СтруктураДокумента", СтруктураДокумента); + + ИнициализироватьСтруктуруМакета(Макет); + + Возврат Макет; + +КонецФункции + +// Очищает все файлы, связанные с печатной формой или макетом печатной формы. +// Параметры: +// ПечатнаяФорма - Структура - Печатная форма или макет печатной формы. +// +Процедура ЗакрытьСоединение(ПечатнаяФорма) Экспорт + + Попытка + ОбщегоНазначения.УдалитьВременныйКаталог(ПечатнаяФорма.ИмяКаталога); + Исключение + ЗаписатьСобытияВЖурналРегистрации(СобытиеЖурналаРегистрации(), "Ошибка", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение(НСтр("ru = 'Не удалось удалить временный каталог шаблона печатной формы по причине:'") + Символы.ПС + + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + +КонецПроцедуры + +// Собирает конечный документ из структуры печатной формы и формирует файл данных формата DOCX. +// Файл данных помещается во временное хранилище. +// +// Параметры: +// ПечатнаяФорма - Структура - Печатная форма; +// +// Возвращаемое значение: +// Строка - Адрес сформированного документа во временном хранилище. +// +Функция СформироватьДокумент(ПечатнаяФорма) Экспорт + + КоличествоОбластей = ПечатнаяФорма.СтруктураДокумента.ПрисоединенныеОбласти.Количество(); + + Если КоличествоОбластей = 0 Тогда + УдалитьФайлы(ПечатнаяФорма.ИмяКаталога); + Возврат Неопределено; + КонецЕсли; + + ПутьКДокументу = СобратьФайлДокументаDOCX(ПечатнаяФорма); + + ДвоичныеДанные = Новый ДвоичныеДанные(ПутьКДокументу); + + АдресХранилищаПечатнойФормы = ПоместитьВоВременноеХранилище(ДвоичныеДанные, Новый УникальныйИдентификатор); + + УдалитьФайлы(ПутьКДокументу); + УдалитьФайлы(ПечатнаяФорма.ИмяКаталога); + + Возврат АдресХранилищаПечатнойФормы; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Функции для получения областей из макета. + +// Получает область из макета. +// +// Параметры: +// Макет - Структура - Макет печатной формы. +// ИмяОбласти - Строка - Имя области в макете. +// +// Возвращаемое значение: +// Структура - Область макета. +// +Функция ПолучитьОбластьМакета(Макет, Знач ИмяОбласти) Экспорт + + Возврат ПолучитьИзСтруктурыДокументаОбластьДокумента(Макет.СтруктураДокумента, ИмяОбласти); + +КонецФункции + +// Получает область верхнего колонтитула первой области макета. +// +// Параметры: +// Макет - Структура - Макет печатной формы; +// ТипКолонтитула - Строка - Тип колонтитула в макете; +// НомерРаздела - Число - Номер раздела, в который входит колонтитул. +// +// Возвращаемое значение: +// Структура - Область колонтитула. +// +Функция ПолучитьОбластьВерхнегоКолонтитула(Макет, Знач ТипКолонтитула = "ВерхнийКолонтитул", Знач НомерРаздела = 1) Экспорт + + Параметры = СтрРазделить(ТипКолонтитула, "_"); + Если Параметры.Количество() = 2 Тогда + ТипКолонтитула = Параметры[0]; + Попытка + НомерРаздела = Число(Параметры[1]); + Исключение + НомерРаздела = 1; + КонецПопытки; + КонецЕсли; + + Возврат ПолучитьИзСтруктурыДокументаКолонтитул(Макет.СтруктураДокумента, ТипКолонтитула, НомерРаздела); + +КонецФункции + +// Получает область нижнего колонтитула первой области макета. +// +// Параметры: +// Макет - Структура - Макет печатной формы; +// ТипКолонтитула - Строка - Тип колонтитула в макете; +// НомерРаздела - Число - Номер раздела, в который входит колонтитул. +// +// Возвращаемое значение: +// Структура - Область колонтитула. +// +Функция ПолучитьОбластьНижнегоКолонтитула(Макет, Знач ТипКолонтитула = "НижнийКолонтитул", Знач НомерРаздела = 1) Экспорт + + Параметры = СтрРазделить(ТипКолонтитула, "_"); + Если Параметры.Количество() = 2 Тогда + ТипКолонтитула = Параметры[0]; + Попытка + НомерРаздела = Число(Параметры[1]); + Исключение + НомерРаздела = 1; + КонецПопытки; + КонецЕсли; + + ОбластьКолонтитула = ПолучитьИзСтруктурыДокументаКолонтитул(Макет.СтруктураДокумента, ТипКолонтитула, НомерРаздела); + + Возврат ОбластьКолонтитула; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Функции для добавления областей к печатной форме. + +// Добавляет нижний колонтитул в печатную форму из макета. +// +// Параметры: +// ПечатнаяФорма - Структура - Печатная форма; +// Колонтитул - Структура - Область колонтитула. +// +// Возвращаемое значение: +// Структура - Область добавленного колонтитула. +// +Функция ДобавитьНижнийКолонтитул(ПечатнаяФорма, Колонтитул) Экспорт + + ДобавитьВСтруктуруДокументаКолонтитул(ПечатнаяФорма.СтруктураДокумента, Колонтитул); + СтруктураКолонтитула = ПрисоединитьКСтруктуреДокументаКолонтитул(ПечатнаяФорма.СтруктураДокумента, Колонтитул); + + Возврат СтруктураКолонтитула; + +КонецФункции + +// Заполняет параметры нижнего колонтитула в печатной форме из макета. +// +// Параметры: +// ПечатнаяФорма - Структура - Печатная форма; +// Колонтитул - Структура - Область колонтитула; +// ДанныеОбъекта - Структура - Данные объекта для заполнения. +// +Процедура ЗаполнитьПараметрыНижнегоКолонтитула(ПечатнаяФорма, Колонтитул, ДанныеОбъекта = Неопределено) Экспорт + + Если НЕ ТипЗнч(ДанныеОбъекта) = Тип("Структура") Тогда + Возврат; + КонецЕсли; + + ЗаполнитьПараметрыОбласти(ПечатнаяФорма, Колонтитул, ДанныеОбъекта); + +КонецПроцедуры + +// Добавляет верхний колонтитул в печатную форму из макета. +// +// Параметры: +// ПечатнаяФорма - Структура - Печатная форма; +// Колонтитул - Структура - Область колонтитула. +// +// Возвращаемое значение: +// Структура - Область добавленного колонтитула. +// +Функция ДобавитьВерхнийКолонтитул(ПечатнаяФорма, Колонтитул) Экспорт + + ДобавитьВСтруктуруДокументаКолонтитул(ПечатнаяФорма.СтруктураДокумента, Колонтитул); + СтруктураКолонтитула = ПрисоединитьКСтруктуреДокументаКолонтитул(ПечатнаяФорма.СтруктураДокумента, Колонтитул); + + Возврат СтруктураКолонтитула; + +КонецФункции + +// Заполняет параметры верхнего колонтитула в печатной форме из макета. +// +// Параметры: +// ПечатнаяФорма - Структура - Печатная форма; +// Колонтитул - Структура - Область колонтитула; +// ДанныеОбъекта - Структура - Данные объекта для заполнения. +// +Процедура ЗаполнитьПараметрыВерхнегоКолонтитула(ПечатнаяФорма, Колонтитул, ДанныеОбъекта = Неопределено) Экспорт + + Если НЕ ТипЗнч(ДанныеОбъекта) = Тип("Структура") Тогда + Возврат; + КонецЕсли; + + ЗаполнитьПараметрыОбласти(ПечатнаяФорма, Колонтитул, ДанныеОбъекта); + +КонецПроцедуры + +// Добавляет область в печатную форму из макета, при этом заменяя +// параметры в области значениями из данных объекта. +// Применяется при одиночном выводе области. +// +// Параметры: +// ПечатнаяФорма - Структура - Печатная форма; +// ОбластьМакета - Структура - Область макета; +// ПереходНаСледСтроку - Булево - Определяет, требуется ли вставлять разрыв после вывода области. +// +// Возвращаемое значение: +// Структура - Присоединенная область. +// +Функция ПрисоединитьОбласть(ПечатнаяФорма, ОбластьМакета, Знач ПереходНаСледСтроку = Ложь) Экспорт + + ДобавитьВСтруктуруДокументаОбластьДокумента(ПечатнаяФорма.СтруктураДокумента, ОбластьМакета); + СтруктураОбласти = ПрисоединитьКСтруктуреДокументаОбластьДокумента(ПечатнаяФорма.СтруктураДокумента, ОбластьМакета); + + Если ПереходНаСледСтроку Тогда + ВставитьРазрывНаНовуюСтроку(ПечатнаяФорма); + КонецЕсли; + + Возврат СтруктураОбласти; + +КонецФункции + +// Заменяет параметры в области значениями из данных объекта. +// +// Параметры: +// ПечатнаяФорма - Структура - Печатная форма; +// ОбластьМакета - Структура - Область макета; +// ДанныеОбъекта - Структура - Данные объекта для заполнения. +// +Процедура ЗаполнитьПараметры(ПечатнаяФорма, ОбластьМакета, ДанныеОбъекта = Неопределено) Экспорт + + Если НЕ ТипЗнч(ДанныеОбъекта) = Тип("Структура") Тогда + Возврат; + КонецЕсли; + + ЗаполнитьПараметрыОбласти(ПечатнаяФорма, ОбластьМакета, ДанныеОбъекта); + +КонецПроцедуры + +// Добавляет область коллекции в печатную форму из макета, при этом заменяя +// параметры в области значениями из данных объекта. +// Применяется при выводе данных списка (маркированного или нумерованного) или таблицы. +// +// Параметры: +// ПечатнаяФорма - Структура - Печатная форма; +// ОбластьМакета - Структура - Область макета; +// ДанныеОбъекта - Структура - Данные объекта для заполнения. +// ПереходНаСледСтроку - Булево - Определяет, требуется ли вставлять разрыв после вывода областей всей коллекции. +// +Процедура ПрисоединитьИЗаполнитьНабор(ПечатнаяФорма, ОбластьМакета, ДанныеОбъекта = Неопределено, + Знач ПереходНаСледСтроку = Ложь) Экспорт + + Если НЕ ТипЗнч(ДанныеОбъекта) = Тип("Массив") Тогда + Возврат; + КонецЕсли; + + Если ДанныеОбъекта.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Для Каждого ДанныеСтроки Из ДанныеОбъекта Цикл + + Если НЕ ТипЗнч(ДанныеСтроки) = Тип("Структура") Тогда + Продолжить; + КонецЕсли; + + Область = ПрисоединитьОбласть(ПечатнаяФорма, ОбластьМакета); + ЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеСтроки); + + КонецЦикла; + + Если ПереходНаСледСтроку Тогда + ВставитьРазрывНаНовуюСтроку(ПечатнаяФорма); + КонецЕсли; + +КонецПроцедуры + +// Вставляет разрыв на следующую строку. +// +// Параметры: +// ПечатнаяФорма - Структура - Печатная форма; +// +Процедура ВставитьРазрывНаНовуюСтроку(ПечатнаяФорма) Экспорт + + Абзац = ПечатнаяФорма.СтруктураДокумента.ОбластиДокумента.Получить("Абзац"); + + Если Абзац <> Неопределено Тогда + + Абзац.НомерРаздела = 1; + + Количество = ПечатнаяФорма.СтруктураДокумента.ПрисоединенныеОбласти.Количество(); + + Если Количество <> 0 Тогда + Абзац.НомерРаздела = ПечатнаяФорма.СтруктураДокумента.ПрисоединенныеОбласти[Количество - 1].НомерРаздела; + КонецЕсли; + + ПрисоединитьОбласть(ПечатнаяФорма, Абзац, Ложь); + + КонецЕсли; + +КонецПроцедуры + +#Область РаботаСоСтруктуройДокумента + +Функция ИнициализироватьДокумент() + + Результат = Новый Структура; + Результат.Вставить("ОбластиДокумента", Новый Соответствие); + Результат.Вставить("Разделы", Новый Соответствие); + Результат.Вставить("Колонтитулы", Новый Соответствие); + Результат.Вставить("ПрисоединенныеОбласти", Новый Массив); + Результат.Вставить("ТипыКонтента", ""); + Результат.Вставить("СвязиКонтента", ""); + Результат.Вставить("ТаблицаСвязейКонтента", Новый ТаблицаЗначений); + Результат.Вставить("КаталогКартинок", ""); + Результат.Вставить("РасширенияКартинок", Новый Массив); + Результат.Вставить("ИдентификаторДокумента", ""); + + ОписаниеЧисла = Новый ОписаниеТипов("Число"); + ОписаниеСтроки = Новый ОписаниеТипов("Строка"); + + Результат.ТаблицаСвязейКонтента.Колонки.Добавить("ИмяРесурса", ОписаниеСтроки); + Результат.ТаблицаСвязейКонтента.Колонки.Добавить("ИдРесурса", ОписаниеСтроки); + Результат.ТаблицаСвязейКонтента.Колонки.Добавить("НомерРесурса", ОписаниеЧисла); + + Возврат Результат; + +КонецФункции + +Функция ОбластьРаздела() + + Результат = Новый Структура; + Результат.Вставить("Колонтитулы", Новый Соответствие); + Результат.Вставить("Текст", ""); + Результат.Вставить("Номер", 1); + + Возврат Результат; + +КонецФункции + +Функция ОбластьДокумента() + + Результат = Новый Структура; + Результат.Вставить("Имя", ""); + Результат.Вставить("Текст", ""); + Результат.Вставить("НомерРаздела", 1); + + Возврат Результат; + +КонецФункции + +Функция ОбластьКолонтитула() + + Результат = Новый Структура; + Результат.Вставить("Имя", ""); + Результат.Вставить("ИмяВнутр", ""); + Результат.Вставить("Текст", ""); + Результат.Вставить("НомерРаздела", 1); + + Возврат Результат; + +КонецФункции + +Функция ДобавитьВСтруктуруДокументаРаздел(СтруктураДокумента, Раздел) + + СтруктураРаздела = ОбластьРаздела(); + ЗаполнитьЗначенияСвойств(СтруктураРаздела, Раздел); + СтруктураДокумента.Разделы.Вставить(СтруктураРаздела.Номер, СтруктураРаздела); + Возврат СтруктураРаздела; + +КонецФункции + +Функция ДобавитьВСтруктуруДокументаОбластьДокумента(СтруктураДокумента, Область) + + СтруктураОбласти = ОбластьДокумента(); + ЗаполнитьЗначенияСвойств(СтруктураОбласти, Область); + СтруктураДокумента.ОбластиДокумента.Вставить(СтруктураОбласти.Имя, СтруктураОбласти); + Возврат СтруктураОбласти; + +КонецФункции + +Функция ДобавитьВСтруктуруДокументаКолонтитул(СтруктураДокумента, Колонтитул, Знач КлючКолонтитула = "") + + Раздел = СтруктураДокумента.Разделы.Получить(Колонтитул.НомерРаздела); + + Если Раздел = Неопределено Тогда + Колонтитул.Вставить("Номер", Колонтитул.НомерРаздела); + Раздел = ДобавитьВСтруктуруДокументаРаздел(СтруктураДокумента, Колонтитул); + КонецЕсли; + + СтруктураКолонтитула = ОбластьКолонтитула(); + ЗаполнитьЗначенияСвойств(СтруктураКолонтитула, Колонтитул); + + Если ПустаяСтрока(КлючКолонтитула) Тогда + КлючКолонтитула = СтруктураКолонтитула.Имя + "_" + Формат(СтруктураКолонтитула.НомерРаздела, "ЧГ=0"); + КонецЕсли; + + СтруктураДокумента.Колонтитулы.Вставить(КлючКолонтитула, СтруктураКолонтитула); + + Возврат СтруктураКолонтитула; + +КонецФункции + +Функция ПрисоединитьКСтруктуреДокументаОбластьДокумента(СтруктураДокумента, Область) + + СтруктураОбласти = ОбластьДокумента(); + ЗаполнитьЗначенияСвойств(СтруктураОбласти, Область); + + СтруктураДокумента.ПрисоединенныеОбласти.Добавить(СтруктураОбласти); + + Возврат СтруктураОбласти; + +КонецФункции + +Функция ПрисоединитьКСтруктуреДокументаКолонтитул(СтруктураДокумента, Колонтитул) + + СтруктураКолонтитула = ОбластьКолонтитула(); + ЗаполнитьЗначенияСвойств(СтруктураКолонтитула, Колонтитул); + + Раздел = СтруктураДокумента.Разделы.Получить(СтруктураКолонтитула.НомерРаздела); + + Если Раздел = Неопределено Тогда + СтруктураКолонтитула.Вставить("НомерРаздела", 1); + Раздел = СтруктураДокумента.Разделы.Получить(1); + КонецЕсли; + + КлючКолонтитула = СтруктураКолонтитула.Имя + "_" + Формат(СтруктураКолонтитула.НомерРаздела, "ЧГ=0"); + Раздел.Колонтитулы.Вставить(КлючКолонтитула, СтруктураКолонтитула); + Возврат СтруктураКолонтитула; + +КонецФункции + +Функция ПолучитьИзСтруктурыДокументаОбластьДокумента(СтруктураДокумента, ИмяОбласти) + + Возврат СтруктураДокумента.ОбластиДокумента.Получить(ИмяОбласти); + +КонецФункции + +Функция ПолучитьИзСтруктурыДокументаКолонтитул(СтруктураДокумента, ИмяКолонтитула, НомерРаздела = 1) + + КлючКолонтитула = ИмяКолонтитула + "_" + Формат(НомерРаздела, "ЧГ=0"); + Возврат СтруктураДокумента.Колонтитулы.Получить(КлючКолонтитула); + +КонецФункции + +Процедура ДобавитьСтрокуВТаблицуСвязейКонтента(СтруктураДокумента, ИмяРесурса, ИдРесурса, НомерРесурса) + + НоваяСтрока = СтруктураДокумента.ТаблицаСвязейКонтента.Добавить(); + НоваяСтрока.ИмяРесурса = ИмяРесурса; + НоваяСтрока.ИдРесурса = ИдРесурса; + НоваяСтрока.НомерРесурса = НомерРесурса; + +КонецПроцедуры + +#КонецОбласти + +#Область РаботаСOpenOfficeXML + +Процедура РазобратьКонтейнерДокументDOCX(Знач ПолноеИмяФайла, Знач ПутьКСтруктуреФайла) + + Попытка + Архиватор = Новый ЧтениеZipФайла(ПолноеИмяФайла); + Исключение + УдалитьФайлы(ПолноеИмяФайла); + ЗаписатьСобытияВЖурналРегистрации(СобытиеЖурналаРегистрации(), "Ошибка", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение(НСтр("ru = 'Не удалось открыть файла шаблона по причине:'") + Символы.ПС + + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Попытка + Архиватор.ИзвлечьВсе(ПутьКСтруктуреФайла, РежимВосстановленияПутейФайловZIP.Восстанавливать); + Исключение + Архиватор.Закрыть(); + УдалитьФайлы(ПолноеИмяФайла); + ЗаписатьСобытияВЖурналРегистрации(СобытиеЖурналаРегистрации(), "Ошибка", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение(НСтр("ru = 'Не удалось выполнить разбор файла шаблона по причине:'") + Символы.ПС + + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Архиватор.Закрыть(); + +КонецПроцедуры + +Процедура СобратьКонтейнерДокументаDOCX(Знач ПолноеИмяФайла, Знач ПутьКСтруктуреФайла) + + Попытка + Архиватор = Новый ЗаписьZipФайла(ПолноеИмяФайла); + Исключение + ЗаписатьСобытияВЖурналРегистрации(СобытиеЖурналаРегистрации(), "Ошибка", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение(НСтр("ru = 'Не удалось создать файл документа по причине:'") + Символы.ПС + + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + МаскаУпаковкиФайлов = ПутьКСтруктуреФайла + ?(Прав(ПутьКСтруктуреФайла, 1) = "\", "", "\") + "*"; + + Попытка + Архиватор.Добавить(МаскаУпаковкиФайлов, РежимСохраненияПутейZIP.СохранятьОтносительныеПути, РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно); + Архиватор.Записать(); + Исключение + ЗаписатьСобытияВЖурналРегистрации(СобытиеЖурналаРегистрации(), "Ошибка", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение(НСтр("ru = 'Не удалось сформировать файл документа по причине:'") + Символы.ПС + + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + ДвоичныеДанный = Новый ДвоичныеДанные(ПолноеИмяФайла); + ЧтениеДанных = Новый ЧтениеДанных(ДвоичныеДанный); + + ЗаписьДанных = Новый ЗаписьДанных(ПолноеИмяФайла); + ЗаписьДанных.ЗаписатьБайт(ЧтениеДанных.ПрочитатьБайт()); + ЗаписьДанных.ЗаписатьБайт(ЧтениеДанных.ПрочитатьБайт()); + ЗаписьДанных.ЗаписатьБайт(ЧтениеДанных.ПрочитатьБайт()); + ЗаписьДанных.ЗаписатьБайт(ЧтениеДанных.ПрочитатьБайт()); + ЗаписьДанных.ЗаписатьБайт(ЧтениеДанных.ПрочитатьБайт()); + ЗаписьДанных.ЗаписатьБайт(0); + ЗаписьДанных.ЗаписатьБайт(6); + ЗаписьДанных.ЗаписатьБайт(0); + + ЧтениеДанных.ПрочитатьБайт(); + ЧтениеДанных.ПрочитатьБайт(); + ЧтениеДанных.ПрочитатьБайт(); + + РезультатЧтенияДанных = ЧтениеДанных.Прочитать(); + + ЗаписьДанных.Записать(РезультатЧтенияДанных.ПолучитьДвоичныеДанные()); + ЗаписьДанных.Закрыть(); + +КонецПроцедуры + +Функция СобратьФайлДокументаDOCX(ПечатнаяФорма) + + ИзменяемыеФайлы = Новый Соответствие; + ИзменяемыеФайлы.Вставить("СвязиКонтента", ПечатнаяФорма.ИмяКаталога + "\word\_rels\document.xml.rels"); + ИзменяемыеФайлы.Вставить("ТипыКонтента", ПечатнаяФорма.ИмяКаталога + "\[Content_Types].xml"); + ИзменяемыеФайлы.Вставить("Документ", ПечатнаяФорма.ИмяКаталога + "\word\document.xml"); + + // Удаляем файлы пустых колонтитулов + КолонтитулВыведен = Новый Соответствие; + + Для Каждого Раздел Из ПечатнаяФорма.СтруктураДокумента.Разделы Цикл + + Для Каждого ЭлементКолонтитула Из Раздел.Значение.Колонтитулы Цикл + + Колонтитул = ЭлементКолонтитула.Значение; + + ИмяФайла = ПечатнаяФорма.ИмяКаталога + "\word\" + Колонтитул.ИмяВнутр + ".xml"; + Если ПустаяСтрока(Колонтитул.Текст) Тогда + Продолжить; + КонецЕсли; + + ЗаписьXML = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.UTF8); + ЗаписьXML.Записать(Колонтитул.Текст); + ЗаписьXML.Закрыть(); + + КолонтитулВыведен.Вставить(ЭлементКолонтитула.Ключ, ИСТИНА); + + КонецЦикла; + + КонецЦикла; + + МассивФайловКолонтитулов = Новый Массив; + + Для Каждого ЭлементКолонтитула Из ПечатнаяФорма.СтруктураДокумента.Колонтитулы Цикл + + Если КолонтитулВыведен.Получить(ЭлементКолонтитула.Ключ) = ИСТИНА Тогда + Продолжить; + КонецЕсли; + + Колонтитул = ЭлементКолонтитула.Значение; + Колонтитул.Текст = ""; + + ИмяФайла = ПечатнаяФорма.ИмяКаталога + "\word\" + Колонтитул.ИмяВнутр + ".xml"; + УдалитьФайлы(ИмяФайла); + МассивФайловКолонтитулов.Добавить(Колонтитул.ИмяВнутр); + + КонецЦикла; + + // Обрабатываем связи контента + + ЧтениеXML = ИнициализироватьЧтениеXML(ПечатнаяФорма.СтруктураДокумента.СвязиКонтента); + ЗаписьXML = ИнициализироватьЗаписьXML("", ИзменяемыеФайлы.Получить("СвязиКонтента")); + + ПропуститьТэг = Ложь; + ПродолжитьЧтение = Истина; + + Пока 1 = 1 Цикл + + Если ПропуститьТэг Тогда + ЧтениеXML.Пропустить(); + ПродолжитьЧтение = ЧтениеXML.Прочитать(); + ПропуститьТэг = Ложь; + Иначе + ПродолжитьЧтение = ЧтениеXML.Прочитать(); + КонецЕсли; + + Если НЕ ПродолжитьЧтение Тогда + Прервать; + КонецЕсли; + + Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "Relationship" Тогда + + ЗначениеАтрибута = ЧтениеXML.ПолучитьАтрибут("Target"); + + Для Каждого ИмяФайлаКолонтитула Из МассивФайловКолонтитулов Цикл + + Если СтрНайти(ЗначениеАтрибута, ИмяФайлаКолонтитула) > 0 Тогда + ПропуститьТэг = Истина; + Прервать; + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + Если НЕ ПропуститьТэг Тогда + ЗаписатьЭлементXML(ЧтениеXML, ЗаписьXML); + КонецЕсли; + + КонецЦикла; + + ПечатнаяФорма.СтруктураДокумента.СвязиКонтента = ЗаписьXML.Закрыть(); + + // Обрабатываем типы контента + + ЧтениеXML = ИнициализироватьЧтениеXML(ПечатнаяФорма.СтруктураДокумента.ТипыКонтента); + ЗаписьXML = ИнициализироватьЗаписьXML("", ИзменяемыеФайлы.Получить("ТипыКонтента")); + + ПропуститьТэг = Ложь; + ПродолжитьЧтение = Истина; + + Пока 1 = 1 Цикл + + Если ПропуститьТэг Тогда + ЧтениеXML.Пропустить(); + ПродолжитьЧтение = ЧтениеXML.Прочитать(); + ПропуститьТэг = Ложь; + Иначе + ПродолжитьЧтение = ЧтениеXML.Прочитать(); + КонецЕсли; + + Если НЕ ПродолжитьЧтение Тогда + Прервать; + КонецЕсли; + + Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "Override" Тогда + + ЗначениеАтрибута = ЧтениеXML.ПолучитьАтрибут("PartName"); + + Для Каждого ИмяФайлаКолонтитула Из МассивФайловКолонтитулов Цикл + + Если СтрНайти(ЗначениеАтрибута, ИмяФайлаКолонтитула) > 0 Тогда + ПропуститьТэг = Истина; + Прервать; + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + Если НЕ ПропуститьТэг Тогда + ЗаписатьЭлементXML(ЧтениеXML, ЗаписьXML); + КонецЕсли; + + КонецЦикла; + + ПечатнаяФорма.СтруктураДокумента.ТипыКонтента = ЗаписьXML.Закрыть(); + + // Формирование документа печатной формы + + ПорядковыйНомер = 1; + СодержаниеФайла = ""; + + ЗаписьXML = ИнициализироватьЗаписьXML("", ИзменяемыеФайлы.Получить("Документ")); + + НомерРаздела = Неопределено; + КоличествоОбластей = ПечатнаяФорма.СтруктураДокумента.ПрисоединенныеОбласти.Количество(); + ИдентификаторДокумента = ПечатнаяФорма.СтруктураДокумента.ИдентификаторДокумента; + + Для Каждого Область Из ПечатнаяФорма.СтруктураДокумента.ПрисоединенныеОбласти Цикл + + Если Область.НомерРаздела = 0 Тогда + Область.НомерРаздела = ?(НомерРаздела = Неопределено, 1, НомерРаздела); + КонецЕсли; + + ВывестиПромежуточныйРаздел = ?(НомерРаздела <> Неопределено И НомерРаздела <> Область.НомерРаздела, Истина, Ложь); + + ЭтоПоследняяОбласть = ?(ПорядковыйНомер = КоличествоОбластей, Истина, Ложь); + + // Запись промежуточного раздела + + Если ВывестиПромежуточныйРаздел = Истина И ЭтоПоследняяОбласть = Ложь Тогда + + РазделКВыводу = ПечатнаяФорма.СтруктураДокумента.Разделы.Получить(НомерРаздела); + + Если РазделКВыводу <> Неопределено Тогда + + ТекстРаздела = ОбработатьРазделДокумента(ПечатнаяФорма.СтруктураДокумента, РазделКВыводу); + + ТэгОткрытияРаздела = ""; + ТэгЗакрытияРаздела = ""; + ТекстРаздела = ТэгОткрытияРаздела + ТекстРаздела + ТэгЗакрытияРаздела; + ЗаписьXML.ЗаписатьБезОбработки(ТекстРаздела); + + КонецЕсли; + + КонецЕсли; + + // Запись тела + + ЧтениеXML = ИнициализироватьЧтениеXML(Область.Текст); + + Пока ЧтениеXML.Прочитать() Цикл + + Если ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента И ЧтениеXML.Имя = "w:body" Тогда + Прервать; + КонецЕсли; + + Если ПорядковыйНомер > 1 Тогда + + Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И (ЧтениеXML.Имя = "w:document" Или ЧтениеXML.Имя = "w:body") Тогда + Продолжить; + КонецЕсли; + + КонецЕсли; + + ЗаписатьЭлементXML(ЧтениеXML, ЗаписьXML); + + КонецЦикла; + + // Запись заключительного раздела + + Если ЭтоПоследняяОбласть Тогда + + РазделКВыводу = ПечатнаяФорма.СтруктураДокумента.Разделы.Получить(Область.НомерРаздела); + Если РазделКВыводу <> Неопределено Тогда + ТекстРаздела = ОбработатьРазделДокумента(ПечатнаяФорма.СтруктураДокумента, РазделКВыводу); + ЗаписьXML.ЗаписатьБезОбработки(ТекстРаздела); + КонецЕсли; + + КонецЕсли; + + ПорядковыйНомер = ПорядковыйНомер + 1; + НомерРаздела = Область.НомерРаздела; + + КонецЦикла; + + ЗаписьXML.ЗаписатьКонецЭлемента(); // Закрытие тэга + ЗаписьXML.ЗаписатьКонецЭлемента(); // Закрытие тэга + + Документ = ЗаписьXML.Закрыть(); + + ПутьКДокументу = ПолучитьИмяВременногоФайла("DOCX"); + + СобратьКонтейнерДокументаDOCX(ПутьКДокументу, ПечатнаяФорма.ИмяКаталога); + + Возврат ПутьКДокументу; + +КонецФункции + +Процедура ИнициализироватьСтруктуруМакета(Макет) + + ИмяКаталога = Макет.ИмяКаталога; + СтруктураДокумента = Макет.СтруктураДокумента; + ТаблицаСвязейКонтента = СтруктураДокумента.ТаблицаСвязейКонтента; + + МаскаТипов = "[Content_Types].xml"; + ФайлТипов = НайтиФайлы(ИмяКаталога, МаскаТипов); + Если ФайлТипов.Количество() = 1 Тогда + Чтение = Новый ЧтениеТекста(ФайлТипов[0].ПолноеИмя, КодировкаТекста.UTF8); + ТекстФайла = Чтение.Прочитать(); + СтруктураДокумента.ТипыКонтента = ТекстФайла; + КонецЕсли; + + КаталогФайлаСвязей = ИмяКаталога + "\word\_rels"; + МаскаСвязей = "document.xml.rels"; + ФайлСвязей = НайтиФайлы(КаталогФайлаСвязей, МаскаСвязей); + + Если ФайлСвязей.Количество() = 1 Тогда + + ЧтениеXML = Новый ЧтениеТекста(ФайлСвязей[0].ПолноеИмя, КодировкаТекста.UTF8); + ТекстФайла = ЧтениеXML.Прочитать(); + СтруктураДокумента.СвязиКонтента = ТекстФайла; + + ЧтениеXML = ИнициализироватьЧтениеXML(ТекстФайла); + + Пока ЧтениеXML.Прочитать() Цикл + + Если НЕ (ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "Relationship") Тогда + Продолжить; + КонецЕсли; + + ИдРесурса = ЧтениеXML.ПолучитьАтрибут("Id"); + НомерРесурса = Число(СтрЗаменить(СокрЛП(ИдРесурса),"rId","")); + + НоваяСтрока = ТаблицаСвязейКонтента.Добавить(); + НоваяСтрока.ИмяРесурса = ЧтениеXML.ПолучитьАтрибут("Target"); + НоваяСтрока.ИдРесурса = ИдРесурса; + НоваяСтрока.НомерРесурса = НомерРесурса; + + КонецЦикла; + + КонецЕсли; + + // Получить таблицу номеров ресурсов + + КаталогСоСтруктуройФайла = ИмяКаталога + "\word"; + СтруктурныеФайлы = НайтиФайлы(КаталогСоСтруктуройФайла, "document.xml"); + + Для Каждого ТекФайл Из СтруктурныеФайлы Цикл + ЧтениеXML = ИнициализироватьЧтениеXML(ТекФайл.ПолноеИмя, 1); + ПараметрыАнализа = Новый Структура("ТипАнализа", 1); + РазбитьТекстШаблонаНаОбласти(ЧтениеXML, СтруктураДокумента, ПараметрыАнализа); + КонецЦикла; + + Для Каждого Раздел Из СтруктураДокумента.Разделы Цикл + ЧтениеXML = ИнициализироватьЧтениеXML(Раздел.Значение.Текст); + ВыделитьИзРазделаКолонтитулы(ЧтениеXML, СтруктураДокумента, Раздел.Значение); + КонецЦикла; + + СтруктурныеФайлы = НайтиФайлы(КаталогСоСтруктуройФайла, "*.xml"); + + Для Каждого ТекФайл Из СтруктурныеФайлы Цикл + + Если НЕ (Лев(ТекФайл.ИмяБезРасширения, 6) = "header") И НЕ (Лев(ТекФайл.ИмяБезРасширения, 6) = "footer") Тогда + Продолжить; + КонецЕсли; + + Колонтитул = СтруктураДокумента.Колонтитулы.Получить(ТекФайл.Имя); + + Если Колонтитул = Неопределено Тогда + Продолжить; + КонецЕсли; + + СтруктураДокумента.Колонтитулы.Удалить(ТекФайл.Имя); + СтруктураДокумента.Колонтитулы.Вставить(Колонтитул.Имя + "_" + Формат(Колонтитул.НомерРаздела, "ЧГ=0"), Колонтитул); + + ЧтениеXML = ИнициализироватьЧтениеXML(ТекФайл.ПолноеИмя, 1); + ПараметрыАнализа = Новый Структура("ТипАнализа, СтруктураАнализа", 2, Колонтитул); + + РазбитьТекстШаблонаНаОбласти(ЧтениеXML, СтруктураДокумента, ПараметрыАнализа); + + КонецЦикла; + +КонецПроцедуры + +Процедура ИнициализироватьСтруктуруПечатнойФормы(ПечатнаяФорма, Макет) + + ИмяКаталога = ПечатнаяФорма.ИмяКаталога; + СтруктураДокумента = ПечатнаяФорма.СтруктураДокумента; + + СтруктураДокумента.ИдентификаторДокумента = Макет.СтруктураДокумента.ИдентификаторДокумента; + СтруктураДокумента.КаталогКартинок = ИмяКаталога + "\word\media\"; + СтруктураДокумента.ТаблицаСвязейКонтента = Макет.СтруктураДокумента.ТаблицаСвязейКонтента.Скопировать(); + + МаскаТипов = "[Content_Types].xml"; + ФайлТипов = НайтиФайлы(ИмяКаталога, МаскаТипов); + Если ФайлТипов.Количество() = 1 Тогда + ЧтениеXML = Новый ЧтениеТекста(ФайлТипов[0].ПолноеИмя,КодировкаТекста.UTF8); + ТекстФайла = ЧтениеXML.Прочитать(); + СтруктураДокумента.ТипыКонтента = ТекстФайла; + КонецЕсли; + + КаталогФайлаСвязей = ИмяКаталога + "\word\_rels"; + МаскаСвязей = "document.xml.rels"; + ФайлСвязей = НайтиФайлы(КаталогФайлаСвязей, МаскаСвязей); + + Если ФайлСвязей.Количество() = 1 Тогда + ЧтениеXML = Новый ЧтениеТекста(ФайлСвязей[0].ПолноеИмя, КодировкаТекста.UTF8); + ТекстФайла = ЧтениеXML.Прочитать(); + СтруктураДокумента.СвязиКонтента = ТекстФайла; + КонецЕсли; + + КаталогСоСтруктуройФайла = ИмяКаталога + "\word"; + МаскаФайлов ="*.xml"; + СтруктурныеФайлы = НайтиФайлы(КаталогСоСтруктуройФайла, МаскаФайлов); + + Для Каждого ТекФайл Из СтруктурныеФайлы Цикл + + Если ТекФайл.ИмяБезРасширения = "document" Тогда + ЗаписьXML = Новый ЗаписьТекста(ТекФайл.ПолноеИмя, КодировкаТекста.UTF8); + ЗаписьXML.Записать(""); + КонецЕсли; + + Если Лев(ТекФайл.ИмяБезРасширения, 6) = "header" Тогда + ЗаписьXML = Новый ЗаписьТекста(ТекФайл.ПолноеИмя,КодировкаТекста.UTF8); + ЗаписьXML.Записать(""); + КонецЕсли; + + Если Лев(ТекФайл.ИмяБезРасширения, 6) = "footer" Тогда + ЗаписьXML = Новый ЗаписьТекста(ТекФайл.ПолноеИмя, КодировкаТекста.UTF8); + ЗаписьXML.Записать(""); + КонецЕсли; + + КонецЦикла; + + // Текст копирования колонтитулов и разделов из макета + Для Каждого Раздел Из Макет.СтруктураДокумента.Разделы Цикл + ДобавитьВСтруктуруДокументаРаздел(СтруктураДокумента, Раздел.Значение); + КонецЦикла; + + Для Каждого Колонтитул Из Макет.СтруктураДокумента.Колонтитулы Цикл + + ДобавитьВСтруктуруДокументаКолонтитул(СтруктураДокумента, Колонтитул.Значение); + СтруктураКолонтитула = СтруктураДокумента.Колонтитулы.Получить(Колонтитул.Ключ); + Если СтруктураКолонтитула <> Неопределено Тогда + СтруктураКолонтитула.Текст = ""; + КонецЕсли; + + КонецЦикла; + + Абзац = Макет.СтруктураДокумента.ОбластиДокумента.Получить("Абзац"); + + Если Абзац <> Неопределено Тогда + ДобавитьВСтруктуруДокументаОбластьДокумента(СтруктураДокумента, Абзац); + КонецЕсли; + +КонецПроцедуры + +Процедура ЗаполнитьПараметрыОбласти(ПечатнаяФорма, Область, ДанныеОбъекта) + + ОбработатьТекст = ЛОЖЬ; + СтруктураРазбораXML = ИнициализироватьРазборXML(); + + ОткрытаТаблица = Ложь; + ОткрытаКлеткаТаблицы = Ложь; + + ШиринаТаблицы = 0; + ШиринаКлеткиТаблицы = 0; + + РазрешениеОсновногоЭкрана = ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить("РазрешениеОсновногоЭкрана"); + РазрешениеОсновногоЭкрана = ?(РазрешениеОсновногоЭкрана = Неопределено, 72, РазрешениеОсновногоЭкрана); + + ЧтениеXML = ИнициализироватьЧтениеXML(Область.Текст); + ИнициализироватьЗаписьВПоток(СтруктураРазбораXML, "Область", ""); + + Пока ЧтениеXML.Прочитать() Цикл + + Если ЧтениеНачалаТекстаСтроки(СтруктураРазбораXML, ЧтениеXML) Тогда + ОбработатьТекст = ИСТИНА; + КонецЕсли; + + Если ЧтениеКонцаТекстаСтроки(СтруктураРазбораXML, ЧтениеXML) Тогда + ОбработатьТекст = ЛОЖЬ; + КонецЕсли; + + Если ЧтениеНачалаТаблицы(СтруктураРазбораXML, ЧтениеXML) Тогда + ОткрытаТаблица = Истина; + КонецЕсли; + + Если ОткрытаТаблица И ЧтениеНачалаШириныТаблицы(СтруктураРазбораXML, ЧтениеXML) Тогда + УстановитьШиринуПоля(ЧтениеXML, ШиринаТаблицы); + КонецЕсли; + + Если ОткрытаТаблица И ЧтениеНачалаКлеткиТаблицы(СтруктураРазбораXML, ЧтениеXML) Тогда + ОткрытаКлеткаТаблицы = Истина; + КонецЕсли; + + Если ОткрытаКлеткаТаблицы И ЧтениеНачалаШириныКлеткиТаблицы(СтруктураРазбораXML, ЧтениеXML) Тогда + УстановитьШиринуПоля(ЧтениеXML, ШиринаКлеткиТаблицы, ШиринаТаблицы); + КонецЕсли; + + Если ЧтениеКонцаКлеткиТаблицы(СтруктураРазбораXML, ЧтениеXML) Тогда + ОткрытаКлеткаТаблицы = Ложь; + ШиринаКлеткиТаблицы = 0; + КонецЕсли; + + Если ЧтениеКонцаТаблицы(СтруктураРазбораXML, ЧтениеXML) Тогда + ОткрытаТаблица = Ложь; + ШиринаТаблицы = 0; + КонецЕсли; + + Если ОбработатьТекст И ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда + + ТекстУзла = ЧтениеXML.Значение; + + ПараметрыИзТекста = Новый Массив; + + ВыделитьПараметры(ПараметрыИзТекста, ТекстУзла); + + ВыводТекста = Истина; + ВыводКартинки = Ложь; + + Для Каждого ПараметрТекст Из ПараметрыИзТекста Цикл + + ЗначениеПараметра = Строка(ДанныеОбъекта[ПараметрТекст]); + + Если ТипЗнч(ЗначениеПараметра) = Тип("Строка") И НЕ СтрНачинаетсяС(ЗначениеПараметра, "e1cib/tempstorage") Тогда + ТекстУзла = СтрЗаменить(ТекстУзла, "{v8 " + ПараметрТекст + "}", ЗначениеПараметра); + ИначеЕсли ТипЗнч(ЗначениеПараметра) = Тип("Строка") И СтрНачинаетсяС(ЗначениеПараметра, "e1cib/tempstorage") Тогда + ТекстУзла = ЗначениеПараметра; + ВыводТекста = Ложь; + ВыводКартинки = Истина; + Прервать; + КонецЕсли; + + КонецЦикла; + + Если ВыводТекста Тогда + + ЗаписатьТекстВПотоки(СтруктураРазбораXML, ЧтениеXML, "Область", ТекстУзла); + + ИначеЕсли ВыводКартинки Тогда + + ДвоичныеДанные = ПолучитьИзВременногоХранилища(ТекстУзла); + + СтруктураКартинка = Новый Структура; + СтруктураКартинка.Вставить("ДвоичныеДанные", ДвоичныеДанные); + СтруктураКартинка.Вставить("ИмяКартинки", "image"); + СтруктураКартинка.Вставить("КаталогКартинок", ПечатнаяФорма.СтруктураДокумента.КаталогКартинок); + + ПараметрыКартинки = ПолучитьАтрибутыИзображения(ДвоичныеДанные); + + Если ПараметрыКартинки.Количество() = 0 ИЛИ ПараметрыКартинки.ТипИзображения = Null Тогда + ЗаписатьТекстВПотоки(СтруктураРазбораXML, ЧтениеXML, "Область", ТекстУзла); + Продолжить; + КонецЕсли; + + Если НЕ ШиринаКлеткиТаблицы = 0 Тогда + + ОтношениеВысотыКШирине = ПараметрыКартинки.Высота / ПараметрыКартинки.Ширина; + + ШиринаКартинки = ШиринаКлеткиТаблицы * 914400 / РазрешениеОсновногоЭкрана / 20; + ВысотаКартинки = ОтношениеВысотыКШирине * ШиринаКлеткиТаблицы * 914400 / РазрешениеОсновногоЭкрана / 20; + + Иначе + + КоэффициентМасштаба = 2; + КоэффициентПропорций = 914400 / (РазрешениеОсновногоЭкрана * КоэффициентМасштаба); + + ШиринаКартинки = КоэффициентПропорций * ПараметрыКартинки.Ширина; + ВысотаКартинки = КоэффициентПропорций * ПараметрыКартинки.Высота; + + КонецЕсли; + + ШиринаКартинки = Окр(ШиринаКартинки, 0); + ВысотаКартинки = Окр(ВысотаКартинки, 0); + + СтруктураКартинка.Вставить("РасширениеКартинки", СтрЗаменить(ПараметрыКартинки.ТипИзображения, "image/", "")); + СтруктураКартинка.Вставить("ШиринаКартинки", ШиринаКартинки); + СтруктураКартинка.Вставить("ВысотаКартинки", ВысотаКартинки); + + + ВнестиКартинкуВБиблиотекуДокумента(ПечатнаяФорма.СтруктураДокумента, СтруктураКартинка); + ШаблонКартинкиXML = ПолучитьШаблонКартинки(); + ПодготовитьШаблонКартинки(ШаблонКартинкиXML, СтруктураКартинка); + ВнестиТекстКартинкиВДокумент(СтруктураРазбораXML.ПотокиЗаписи.Область.Поток, СтруктураКартинка); + + КонецЕсли + + Иначе + ЗаписатьЭлементXMLВПоток(СтруктураРазбораXML, ЧтениеXML, ПечатнаяФорма.СтруктураДокумента); + КонецЕсли; + + КонецЦикла; + + Область.Текст = ЗавершитьЗаписьВПоток(СтруктураРазбораXML, "Область"); + +КонецПроцедуры + +Процедура ВыделитьПараметры(МассивПараметров, Знач Текст) + + НачалоПараметра = СтрНайти(Текст, "{v8 "); + + Если НачалоПараметра > 0 Тогда + + Текст = Прав(Текст, СтрДлина(Текст) - (НачалоПараметра+3)); + КонецПараметра = СтрНайти(Текст, "}"); + Если КонецПараметра > 0 Тогда + ТекстПараметра = Лев(Текст, КонецПараметра-1); + МассивПараметров.Добавить(ТекстПараметра); + Текст = Прав(Текст, СтрДлина(Текст) - (СтрДлина(ТекстПараметра) + 1)); + КонецЕсли; + + НачалоПараметра = СтрНайти(Текст, "{v8 "); + Если НачалоПараметра > 0 Тогда + ВыделитьПараметры(МассивПараметров, Текст); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +Процедура УстановитьШиринуПоля(ЧтениеXML, Ширина, Знач ШиринаТаблицы = 0) + + ТипDXA = Ложь; + ТипPCT = Ложь; + + Ширина = ЧтениеXML.ПолучитьАтрибут("w:w"); + ТипШирины = ЧтениеXML.ПолучитьАтрибут("w:type"); + + Если ТипШирины = "auto" Тогда + ТипDXA = Ложь; + ИначеЕсли ТипШирины = "dxa" Тогда + ТипDXA = Истина; + ИначеЕсли ТипШирины = "pct" Тогда + ТипPCT = Истина; + КонецЕсли; + + Если НЕ ТипDXA ИЛИ (ТипPCT И ШиринаТаблицы = 0) Тогда + Ширина = 0; + ИначеЕсли ТипPCT И НЕ ШиринаТаблицы = 0 Тогда + + // 5000 - значение равное 100% для типа "pct". + // ПолеРодитель - в значениях dxa. + + Ширина = ШиринаТаблицы * Ширина / 50 / 100; + + КонецЕсли; + +КонецПроцедуры + +Функция ПолучитьШаблонКартинки() + + ШаблонКартинкиXML = + " + | + | + | + | + | + | + | + | + | + | + | + | + | + | + | + | + | + | + | + | + | + | + | + | + | + | + | + | + | + | + | + | + | + | + | + | + | + | + | + | + | + | + | + | + | + | + |"; + + Возврат ШаблонКартинкиXML; + +КонецФункции + +Процедура ПодготовитьШаблонКартинки(ШаблонКартинки, СтруктураКартинка) + + // Параметры подстановки + // 1 - id + // 2 - name + // 3 - descr + // 4 - rId + // 5 - uri + // 6 - cx + // 7 - cy + ОбработанныйШаблонКартинки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонКартинки, + "0", + СтруктураКартинка.ИмяКартинки, + СтруктураКартинка.ИмяКартинки, + СтруктураКартинка.rId, + "{28A0092B-C50C-407E-A947-70E740481C1C}", + Формат(СтруктураКартинка.ШиринаКартинки, "ЧГ=0"), + Формат(СтруктураКартинка.ВысотаКартинки, "ЧГ=0")); + + СтруктураКартинка.Вставить("ТекстКартинки", ОбработанныйШаблонКартинки); + +КонецПроцедуры + +Процедура ВнестиКартинкуВБиблиотекуДокумента(СтруктураДокумента, СтруктураКартинка) + + КаталогMedia = Новый Файл(СтруктураКартинка.КаталогКартинок); + TypeImage = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"; + + Если НЕ КаталогMedia.Существует() Тогда + СоздатьКаталог(СтруктураКартинка.КаталогКартинок); + КонецЕсли; + + // Добавить строку в rels файл + ЧтениеXML = ИнициализироватьЧтениеXML(СтруктураДокумента.СвязиКонтента); + ЗаписьXML = ИнициализироватьЗаписьXML(""); + + СтруктураДокумента.ТаблицаСвязейКонтента.Сортировать("НомерРесурса Возр"); + МаксНомерРесурса = СтруктураДокумента.ТаблицаСвязейКонтента[СтруктураДокумента.ТаблицаСвязейКонтента.Количество() - 1].НомерРесурса; + + Пока ЧтениеXML.Прочитать() Цикл + + Если ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента И ЧтениеXML.Имя = "Relationships" Тогда + + НомерРесурса = МаксНомерРесурса + 1; + ИдРесурса = "rId" + Формат(МаксНомерРесурса + 1, "ЧГ=0"); + ИмяКартинки = СтруктураКартинка.ИмяКартинки + ИдРесурса; + ИмяРесурса = "media/" + ИмяКартинки + "." + СтруктураКартинка.РасширениеКартинки; + + ДобавитьСтрокуВТаблицуСвязейКонтента(СтруктураДокумента, ИмяРесурса, ИдРесурса, НомерРесурса); + + СтруктураКартинка.Вставить("rId", ИдРесурса); + СтруктураКартинка.ИмяКартинки = ИмяКартинки; + + ЗаписьXML.ЗаписатьНачалоЭлемента("Relationship"); + ЗаписьXML.ЗаписатьАтрибут("Target", ИмяРесурса); + ЗаписьXML.ЗаписатьАтрибут("Type", TypeImage); + ЗаписьXML.ЗаписатьАтрибут("Id", ИдРесурса); + ЗаписьXML.ЗаписатьКонецЭлемента(); + + ЗаписатьЭлементXML(ЧтениеXML, ЗаписьXML); + + ДобавитьРасширениеКартинкиВТипыКонтента(СтруктураДокумента, СтруктураКартинка); + + Иначе + ЗаписатьЭлементXML(ЧтениеXML, ЗаписьXML); + КонецЕсли; + + КонецЦикла; + + ЧтениеXML.Закрыть(); + СтруктураДокумента.СвязиКонтента = ЗаписьXML.Закрыть(); + + // Записать картинку в каталог media + ДвоичныеДанные = СтруктураКартинка.ДвоичныеДанные; + ДвоичныеДанные.Записать(СтруктураКартинка.КаталогКартинок + СтруктураКартинка.ИмяКартинки + "." + СтруктураКартинка.РасширениеКартинки); + +КонецПроцедуры + +Процедура ВнестиТекстКартинкиВДокумент(ЗаписьXML, СтруктураКартинка) + + ЗаписьXML.ЗаписатьКонецЭлемента(); // Закрывается текстовый тэг параметра w:t. + ЗаписьXML.ЗаписатьБезОбработки(СтруктураКартинка.ТекстКартинки); + ЗаписьXML.ЗаписатьНачалоЭлемента("w:t"); + +КонецПроцедуры + +Процедура ДобавитьРасширениеКартинкиВТипыКонтента(СтруктураДокумента, СтруктураКартинка) + + ДобавленныеРасширения = СтруктураДокумента.РасширенияКартинок; + РасширениеКартинки = СтруктураКартинка.РасширениеКартинки; + + Если НЕ ДобавленныеРасширения.Найти(РасширениеКартинки) = Неопределено Тогда + Возврат; + КонецЕсли; + + ЧтениеXML = ИнициализироватьЧтениеXML(СтруктураДокумента.ТипыКонтента); + + ЗаписьXML = ИнициализироватьЗаписьXML(""); + + РасширениеИмеется = Ложь; + + Пока ЧтениеXML.Прочитать() Цикл + + Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "Default" Тогда + + ЗначениеExtension = ЧтениеXML.ЗначениеАтрибута("Extension"); + + Если ЗначениеExtension = РасширениеКартинки Тогда + РасширениеИмеется = Истина; + КонецЕсли; + + ЗаписатьЭлементXML(ЧтениеXML, ЗаписьXML); + + ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента И ЧтениеXML.Имя = "Types" Тогда + + Если НЕ РасширениеИмеется Тогда + + ЗаписьXML.ЗаписатьНачалоЭлемента("Default"); + ЗаписьXML.ЗаписатьАтрибут("ContentType", "image/" + РасширениеКартинки); + ЗаписьXML.ЗаписатьАтрибут("Extension", РасширениеКартинки); + ЗаписьXML.ЗаписатьКонецЭлемента(); + + ДобавленныеРасширения.Добавить(РасширениеКартинки); + + КонецЕсли; + + ЗаписатьЭлементXML(ЧтениеXML, ЗаписьXML); + + Иначе + + ЗаписатьЭлементXML(ЧтениеXML, ЗаписьXML); + + КонецЕсли; + + КонецЦикла; + + ЧтениеXML.Закрыть(); + СтруктураДокумента.ТипыКонтента = ЗаписьXML.Закрыть(); + +КонецПроцедуры + +#Область ПростыеОперацииСДаннымиXML + +Функция ИнициализироватьЗаписьXML(КорневойТэг, ПутьКФайлу = "", Кодировка = "UTF-8", ЗаписатьОбъявление = Истина) + + ЗаписьXML = Новый ЗаписьXML; + Если ПустаяСтрока(ПутьКФайлу) Тогда + ЗаписьXML.УстановитьСтроку(Кодировка); + Иначе + ЗаписьXML.ОткрытьФайл(ПутьКФайлу, Кодировка) + КонецЕсли; + + Если ЗаписатьОбъявление Тогда + ЗаписьXML.ЗаписатьБезОбработки(""); + КонецЕсли; + + Если Не ПустаяСтрока(КорневойТэг) Тогда + ЗаписьXML.ЗаписатьНачалоЭлемента(КорневойТэг); + КонецЕсли; + + Возврат ЗаписьXML; + +КонецФункции + +Функция ИнициализироватьЧтениеXML(ДанныеЧтения, ТипДанных = 0) + + ЧтениеXML = Новый ЧтениеXML; + Если ТипДанных = 0 Тогда + Чтение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, ИмяПотока, КорневойТэг = "w:next", ЗаписатьОбъявление = Истина) + + Если Не ПустаяСтрока(СтруктураРазбораXML.БлокирующийПоток) И НЕ СтруктураРазбораXML.БлокирующийПоток = ИмяПотока Тогда + Возврат; + КонецЕсли; + + Если НЕ СтруктураРазбораXML.ПотокиЗаписи.Свойство(ИмяПотока) Тогда + СтруктураРазбораXML.ПотокиЗаписи.Вставить(ИмяПотока, Новый Структура("Поток, ЗаписьРазрешена, Уровень, ПотокЗакрыт, ТекстПотока")); + КонецЕсли; + + Если НЕ СтруктураРазбораXML.ПотокиЗаписи[ИмяПотока].ЗаписьРазрешена = Неопределено Тогда + ВозобновитьЗаписьВПоток(СтруктураРазбораXML, ИмяПотока); + Возврат; + КонецЕсли; + + СтруктураРазбораXML.ПотокиЗаписи[ИмяПотока].ЗаписьРазрешена = Истина; + СтруктураРазбораXML.ПотокиЗаписи[ИмяПотока].Поток = ИнициализироватьЗаписьXML(КорневойТэг, , , ЗаписатьОбъявление); + СтруктураРазбораXML.ПотокиЗаписи[ИмяПотока].Уровень = ?(ПустаяСтрока(КорневойТэг), 0, 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.ПотокиЗаписи[ИмяПотока].Уровень > 0 Цикл + СтруктураРазбораXML.ПотокиЗаписи[ИмяПотока].Поток.ЗаписатьКонецЭлемента(); + СтруктураРазбораXML.ПотокиЗаписи[ИмяПотока].Уровень = СтруктураРазбораXML.ПотокиЗаписи[ИмяПотока].Уровень - 1; + КонецЦикла; + + СтруктураРазбораXML.ПотокиЗаписи[ИмяПотока].ТекстПотока = СтруктураРазбораXML.ПотокиЗаписи[ИмяПотока].Поток.Закрыть(); + СтруктураРазбораXML.ПотокиЗаписи[ИмяПотока].ЗаписьРазрешена = Неопределено; + СтруктураРазбораXML.ПотокиЗаписи[ИмяПотока].ПотокЗакрыт = Истина; + + Возврат СтруктураРазбораXML.ПотокиЗаписи[ИмяПотока].ТекстПотока; + +КонецФункции + +Процедура ПеренестиЗаписьВПоток(СтруктураРазбораXML, ИмяПотокаИсточника, ИмяПотокаПриемника) + + Если Не ПустаяСтрока(СтруктураРазбораXML.БлокирующийПоток) И НЕ СтруктураРазбораXML.БлокирующийПоток = ИмяПотокаПриемника Тогда + Возврат; + КонецЕсли; + + Если НЕ СтруктураРазбораXML.ПотокиЗаписи.Свойство(ИмяПотокаИсточника) + ИЛИ НЕ СтруктураРазбораXML.ПотокиЗаписи.Свойство(ИмяПотокаПриемника) Тогда + Возврат; + КонецЕсли; + + ЗавершитьЗаписьВПоток(СтруктураРазбораXML, ИмяПотокаИсточника); + + ТекстПотока = СтруктураРазбораXML.ПотокиЗаписи[ИмяПотокаИсточника].ТекстПотока; + ТекстПотока = СтрЗаменить(ТекстПотока, "", ""); + + ЧтениеXML = ИнициализироватьЧтениеXML(ТекстПотока); + + Пока ЧтениеXML.Прочитать() Цикл + + Если ЧтениеXML.Имя = "w:next" Тогда + Продолжить; + КонецЕсли; + + ЗаписатьЭлементXML(ЧтениеXML, СтруктураРазбораXML.ПотокиЗаписи[ИмяПотокаПриемника].Поток); + + КонецЦикла; + + ЧтениеXML.Закрыть(); + +КонецПроцедуры + +Процедура ПеренестиОткрывающиеТэгиЗаписиВПоток(СтруктураРазбораXML, ИмяПотокаИсточника, ИмяПотокаПриемника, СтопТэг) + + Если Не ПустаяСтрока(СтруктураРазбораXML.БлокирующийПоток) И НЕ СтруктураРазбораXML.БлокирующийПоток = ИмяПотокаПриемника Тогда + Возврат; + КонецЕсли; + + Если НЕ СтруктураРазбораXML.ПотокиЗаписи.Свойство(ИмяПотокаИсточника) + ИЛИ НЕ СтруктураРазбораXML.ПотокиЗаписи.Свойство(ИмяПотокаПриемника) Тогда + Возврат; + КонецЕсли; + + Если НЕ СтруктураРазбораXML.ПотокиЗаписи[ИмяПотокаИсточника].ПотокЗакрыт Тогда + СтруктураРазбораXML.ПотокиЗаписи[ИмяПотокаИсточника].ЗаписьРазрешена = Ложь; + СтруктураРазбораXML.ПотокиЗаписи[ИмяПотокаИсточника].Поток.ЗаписатьКонецЭлемента(); + СтруктураРазбораXML.ПотокиЗаписи[ИмяПотокаИсточника].ТекстПотока = СтруктураРазбораXML.ПотокиЗаписи[ИмяПотокаИсточника].Поток.Закрыть(); + СтруктураРазбораXML.ПотокиЗаписи[ИмяПотокаИсточника].ПотокЗакрыт = Истина; + КонецЕсли; + + ТекстПотока = СтруктураРазбораXML.ПотокиЗаписи[ИмяПотокаИсточника].ТекстПотока; + ТекстПотока = СтрЗаменить(ТекстПотока, "", ""); + + ЧтениеXML = ИнициализироватьЧтениеXML(ТекстПотока); + + Пока ЧтениеXML.Прочитать() Цикл + + Если ЧтениеXML.Имя = "w:next" Тогда + Продолжить; + КонецЕсли; + + Если ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда + Продолжить; + КонецЕсли; + + Если ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента И ЧтениеXML.Имя = СтопТэг Тогда + Прервать; + КонецЕсли; + + Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + СтруктураРазбораXML.ПотокиЗаписи[ИмяПотокаПриемника].Уровень = СтруктураРазбораXML.ПотокиЗаписи[ИмяПотокаПриемника].Уровень + 1; + КонецЕсли; + + Если ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда + СтруктураРазбора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.ПотокиЗаписи[ИмяПотока].ПотокЗакрыт = Истина Тогда + Возврат; + КонецЕсли; + + Для Индекс = 1 По КоличествоЭлементов Цикл + СтруктураРазбораXML.ПотокиЗаписи[ИмяПотока].Поток.ЗаписатьКонецЭлемента(); + СтруктураРазбораXML.ПотокиЗаписи[ИмяПотока].Уровень = СтруктураРазбораXML.ПотокиЗаписи.СтрокиПарам.Уровень - 1; + КонецЦикла; + +КонецПроцедуры + +Функция ПотокАктивен(СтруктураРазбораXML, ИмяПотока) + + Если НЕ СтруктураРазбораXML.ПотокиЗаписи.Свойство(ИмяПотока) Тогда + Возврат Ложь; + КонецЕсли; + + Если СтруктураРазбораXML.ПотокиЗаписи[ИмяПотока].ЗаписьРазрешена = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + Возврат Истина; + +КонецФункции + +Процедура ЗаписатьИнструкциюОбработкиВПотоки(СтруктураРазбораXML, ЧтениеXML, ИмяПотока = "") + + Для Каждого ЭлементПотока Из СтруктураРазбораXML.ПотокиЗаписи Цикл + + Если Не ПустаяСтрока(СтруктураРазбораXML.БлокирующийПоток) И НЕ ЭлементПотока.Ключ = СтруктураРазбораXML.БлокирующийПоток Тогда + Продолжить; + КонецЕсли; + + Если НЕ ПустаяСтрока(ИмяПотока) И НЕ ЭлементПотока.Ключ = ИмяПотока Тогда + Продолжить; + КонецЕсли; + + Если НЕ ЭлементПотока.Значение.ЗаписьРазрешена = Истина Тогда + Продолжить; + КонецЕсли; + + ЭлементПотока.Значение.Поток.ЗаписатьИнструкциюОбработки(ЧтениеXML.Имя, ЧтениеXML.Значение); + + КонецЦикла; + +КонецПроцедуры + +Процедура ЗаписатьНачалоЭлементаВПотоки(СтруктураРазбораXML, ЧтениеXML, ИмяПотока = "") + + Для Каждого ЭлементПотока Из СтруктураРазбораXML.ПотокиЗаписи Цикл + + Если Не ПустаяСтрока(СтруктураРазбораXML.БлокирующийПоток) И НЕ ЭлементПотока.Ключ = СтруктураРазбораXML.БлокирующийПоток Тогда + Продолжить; + КонецЕсли; + + Если НЕ ПустаяСтрока(ИмяПотока) И НЕ ЭлементПотока.Ключ = ИмяПотока Тогда + Продолжить; + КонецЕсли; + + Если НЕ ЭлементПотока.Значение.ЗаписьРазрешена = Истина Тогда + Продолжить; + КонецЕсли; + + ЭлементПотока.Значение.Поток.ЗаписатьНачалоЭлемента(ЧтениеXML.Имя); + ЭлементПотока.Значение.Уровень = ЭлементПотока.Значение.Уровень + 1; + + КонецЦикла; + +КонецПроцедуры + +Процедура ЗаписатьАтрибутВПотоки(СтруктураРазбораXML, ЧтениеXML, ИмяПотока = "", Знач Текст = Неопределено) + + Для Каждого ЭлементПотока Из СтруктураРазбораXML.ПотокиЗаписи Цикл + + Если Не ПустаяСтрока(СтруктураРазбораXML.БлокирующийПоток) И НЕ ЭлементПотока.Ключ = СтруктураРазбораXML.БлокирующийПоток Тогда + Продолжить; + КонецЕсли; + + Если НЕ ПустаяСтрока(ИмяПотока) И НЕ ЭлементПотока.Ключ = ИмяПотока Тогда + Продолжить; + КонецЕсли; + + Если НЕ ЭлементПотока.Значение.ЗаписьРазрешена = Истина Тогда + Продолжить; + КонецЕсли; + + Если Текст = Неопределено Тогда + Текст = ЧтениеXML.Значение; + КонецЕсли; + + ЭлементПотока.Значение.Поток.ЗаписатьНачалоАтрибута(ЧтениеXML.Имя); + ЭлементПотока.Значение.Поток.ЗаписатьТекст(Текст); + ЭлементПотока.Значение.Поток.ЗаписатьКонецАтрибута(); + + КонецЦикла; + +КонецПроцедуры + +Процедура ЗаписатьКонецЭлементаВПотоки(СтруктураРазбораXML, ЧтениеXML, ИмяПотока = "") + + Для Каждого ЭлементПотока Из СтруктураРазбораXML.ПотокиЗаписи Цикл + + Если Не ПустаяСтрока(СтруктураРазбораXML.БлокирующийПоток) И НЕ ЭлементПотока.Ключ = СтруктураРазбораXML.БлокирующийПоток Тогда + Продолжить; + КонецЕсли; + + Если НЕ ПустаяСтрока(ИмяПотока) И НЕ ЭлементПотока.Ключ = ИмяПотока Тогда + Продолжить; + КонецЕсли; + + Если НЕ ЭлементПотока.Значение.ЗаписьРазрешена = Истина Тогда + Продолжить; + КонецЕсли; + + ЭлементПотока.Значение.Поток.ЗаписатьКонецЭлемента(); + ЭлементПотока.Значение.Уровень = ЭлементПотока.Значение.Уровень - 1; + + КонецЦикла; + +КонецПроцедуры + +Процедура ЗаписатьТекстВПотоки(СтруктураРазбораXML, ЧтениеXML, ИмяПотока = "", Знач Текст = Неопределено) + + Для Каждого ЭлементПотока Из СтруктураРазбораXML.ПотокиЗаписи Цикл + + Если Не ПустаяСтрока(СтруктураРазбораXML.БлокирующийПоток) И НЕ ЭлементПотока.Ключ = СтруктураРазбораXML.БлокирующийПоток Тогда + Продолжить; + КонецЕсли; + + Если НЕ ПустаяСтрока(ИмяПотока) И НЕ ЭлементПотока.Ключ = ИмяПотока Тогда + Продолжить; + КонецЕсли; + + Если НЕ ЭлементПотока.Значение.ЗаписьРазрешена = Истина Тогда + Продолжить; + КонецЕсли; + + Если Текст = Неопределено Тогда + Текст = ЧтениеXML.Значение; + КонецЕсли; + + ЧислоСтрок = ?(ПустаяСтрока(Текст), 1, СтрЧислоСтрок(Текст)); + + Если ЧислоСтрок > 1 Тогда + + Для Инд = 1 По ЧислоСтрок Цикл + + СтрокаТекста = СтрПолучитьСтроку(Текст, Инд); + ЭлементПотока.Значение.Поток.ЗаписатьТекст(СтрокаТекста); + + Если Инд < ЧислоСтрок Тогда + ЭлементПотока.Значение.Поток.ЗаписатьКонецЭлемента(); + ЭлементПотока.Значение.Поток.ЗаписатьНачалоЭлемента("w:br"); + ЭлементПотока.Значение.Поток.ЗаписатьКонецЭлемента(); + ЭлементПотока.Значение.Поток.ЗаписатьНачалоЭлемента("w:t"); + КонецЕсли; + + КонецЦикла; + + Иначе + ЭлементПотока.Значение.Поток.ЗаписатьТекст(Текст); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура ЗаписатьЭлементXMLВПоток(СтруктураРазбораXML, ЧтениеXML, СтруктураДокумента) + + Если ЧтениеXML.ТипУзла = ТипУзлаXML.ИнструкцияОбработки Тогда + + ЗаписатьИнструкциюОбработкиВПотоки(СтруктураРазбораXML, ЧтениеXML); + + ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + + ИмяУзла = ЧтениеXML.Имя; + + ЗаписатьНачалоЭлементаВПотоки(СтруктураРазбораXML, ЧтениеXML); + + Пока ЧтениеXML.ПрочитатьАтрибут() Цикл + + Если ПустаяСтрока(СтруктураДокумента.ИдентификаторДокумента) И (Лев(ЧтениеXML.Имя, 6) = "w:rsid") Тогда + СтруктураДокумента.ИдентификаторДокумента = ЧтениеXML.Значение; + КонецЕсли; + + ЗначениеАтрибута = ЧтениеXML.Значение; + + Если Лев(ЧтениеXML.Имя, 6) = "w:rsid" Тогда + ЗначениеАтрибута = СтруктураДокумента.ИдентификаторДокумента; + КонецЕсли; + + ЗаписатьАтрибутВПотоки(СтруктураРазбораXML, ЧтениеXML,, ЗначениеАтрибута); + + Если ИмяУзла = "w:document" ИЛИ ИмяУзла = "w:ftr" ИЛИ ИмяУзла = "w:hdr" Тогда + СтруктураРазбораXML.АтрибутыXML = СтруктураРазбораXML.АтрибутыXML + " " + ЧтениеXML.Имя + "=""" + ЧтениеXML.Значение + """"; + КонецЕсли; + + КонецЦикла; + + ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда + + ЗаписатьКонецЭлементаВПотоки(СтруктураРазбораXML, ЧтениеXML); + + ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда + + Если СтруктураРазбораXML.Свойство("СтатусТэга1С") Тогда + АнализироватьПараметрыВСтроке(ЧтениеXML.Значение, СтруктураРазбораXML); + КонецЕсли; + + ЗаписатьТекстВПотоки(СтруктураРазбораXML, ЧтениеXML); + + КонецЕсли; + +КонецПроцедуры + +Функция ЧтениеНачалаЛюбогоБлокаКромеПараграфа(СтруктураРазбораXML, ЧтениеXML) + + Если Не ПустаяСтрока(СтруктураРазбораXML.БлокирующийПоток) Тогда + Возврат Ложь; + КонецЕсли; + + Возврат ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И НЕ ЧтениеXML.Имя = "w:p"; + +КонецФункции + +Функция ЧтениеКонцаЛюбогоБлокаКромеПараграфа(СтруктураРазбораXML, ЧтениеXML) + + Если Не ПустаяСтрока(СтруктураРазбораXML.БлокирующийПоток) Тогда + Возврат Ложь; + КонецЕсли; + + Возврат ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента И НЕ ЧтениеXML.Имя = "w:p"; + +КонецФункции + +Функция ЧтениеНачалаТелаДокумента(СтруктураРазбораXML, ЧтениеXML) + + Если Не ПустаяСтрока(СтруктураРазбораXML.БлокирующийПоток) Тогда + Возврат Ложь; + КонецЕсли; + + Возврат ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "w:body"; + +КонецФункции + +Функция ЧтениеНачалаТелаКолонтитула(СтруктураРазбораXML, ЧтениеXML) + + Если Не ПустаяСтрока(СтруктураРазбораXML.БлокирующийПоток) Тогда + Возврат Ложь; + КонецЕсли; + + Возврат ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И (ЧтениеXML.Имя = "w:ftr" ИЛИ ЧтениеXML.Имя = "w:hdr"); + +КонецФункции + +Функция ЧтениеНачалаПараграфа(СтруктураРазбораXML, ЧтениеXML) + + Если Не ПустаяСтрока(СтруктураРазбораXML.БлокирующийПоток) Тогда + Возврат Ложь; + КонецЕсли; + + Возврат ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "w:p"; + +КонецФункции + +Функция ЧтениеКонцаПараграфа(СтруктураРазбораXML, ЧтениеXML) + + Если Не ПустаяСтрока(СтруктураРазбораXML.БлокирующийПоток) Тогда + Возврат Ложь; + КонецЕсли; + + Возврат ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента И ЧтениеXML.Имя = "w:p"; + +КонецФункции + +Функция ЧтениеНачалаСтроки(СтруктураРазбораXML, ЧтениеXML) + + Если Не ПустаяСтрока(СтруктураРазбораXML.БлокирующийПоток) Тогда + Возврат Ложь; + КонецЕсли; + + Возврат ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "w:r"; + +КонецФункции + +Функция ЧтениеКонцаСтроки(СтруктураРазбораXML, ЧтениеXML) + + Если Не ПустаяСтрока(СтруктураРазбораXML.БлокирующийПоток) Тогда + Возврат Ложь; + КонецЕсли; + + Возврат ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента И ЧтениеXML.Имя = "w:r"; + +КонецФункции + +Функция ЧтениеНачалаТекстаСтроки(СтруктураРазбораXML, ЧтениеXML) + + Если Не ПустаяСтрока(СтруктураРазбораXML.БлокирующийПоток) Тогда + Возврат Ложь; + КонецЕсли; + + Возврат ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "w:t"; + +КонецФункции + +Функция ЧтениеКонцаТекстаСтроки(СтруктураРазбораXML, ЧтениеXML) + + Если Не ПустаяСтрока(СтруктураРазбораXML.БлокирующийПоток) Тогда + Возврат Ложь; + КонецЕсли; + + Возврат ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента И ЧтениеXML.Имя = "w:t"; + +КонецФункции + +Функция ЧтениеНачалаТаблицы(СтруктураРазбораXML, ЧтениеXML) + + Если Не ПустаяСтрока(СтруктураРазбораXML.БлокирующийПоток) Тогда + Возврат Ложь; + КонецЕсли; + + Возврат ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "w:tbl"; + +КонецФункции + +Функция ЧтениеКонцаТаблицы(СтруктураРазбораXML, ЧтениеXML) + + Если Не ПустаяСтрока(СтруктураРазбораXML.БлокирующийПоток) Тогда + Возврат Ложь; + КонецЕсли; + + Возврат ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента И ЧтениеXML.Имя = "w:tbl"; + +КонецФункции + +Функция ЧтениеНачалаШириныТаблицы(СтруктураРазбораXML, ЧтениеXML) + + Если Не ПустаяСтрока(СтруктураРазбораXML.БлокирующийПоток) Тогда + Возврат Ложь; + КонецЕсли; + + Возврат ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "w:tblW"; + +КонецФункции + +Функция ЧтениеНачалаШириныКлеткиТаблицы(СтруктураРазбораXML, ЧтениеXML) + + Если Не ПустаяСтрока(СтруктураРазбораXML.БлокирующийПоток) Тогда + Возврат Ложь; + КонецЕсли; + + Возврат ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "w:tcW"; + +КонецФункции + +Функция ЧтениеНачалаКлеткиТаблицы(СтруктураРазбораXML, ЧтениеXML) + + Если Не ПустаяСтрока(СтруктураРазбораXML.БлокирующийПоток) Тогда + Возврат Ложь; + КонецЕсли; + + Возврат ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "w:tc"; + +КонецФункции + +Функция ЧтениеКонцаКлеткиТаблицы(СтруктураРазбораXML, ЧтениеXML) + + Если Не ПустаяСтрока(СтруктураРазбораXML.БлокирующийПоток) Тогда + Возврат Ложь; + КонецЕсли; + + Возврат ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента И ЧтениеXML.Имя = "w:tc"; + +КонецФункции + +Функция ЧтениеНачалаРаздела(СтруктураРазбораXML, ЧтениеXML) + + Если Не ПустаяСтрока(СтруктураРазбораXML.БлокирующийПоток) И НЕ СтруктураРазбораXML.БлокирующийПоток = "Раздел" Тогда + Возврат Ложь; + КонецЕсли; + + Возврат ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "w:sectPr"; + +КонецФункции + +Функция ЧтениеКонцаРаздела(СтруктураРазбораXML, ЧтениеXML) + + Если Не ПустаяСтрока(СтруктураРазбораXML.БлокирующийПоток) И НЕ СтруктураРазбораXML.БлокирующийПоток = "Раздел" Тогда + Возврат Ложь; + КонецЕсли; + + Возврат ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента И ЧтениеXML.Имя = "w:sectPr"; + +КонецФункции + +Функция ИнициализироватьРазборXML() + + Результат = Новый Структура; + Результат.Вставить("ПотокиЗаписи", Новый Структура); + Результат.Вставить("АтрибутыXML", ""); + Результат.Вставить("ИмяОбласти", ""); + Результат.Вставить("СтатусОбласти", 0); + Результат.Вставить("НомерРаздела", 1); + Результат.Вставить("БлокирующийПоток", ""); + Результат.Вставить("РазобранныеСтроки", Новый Массив); + Результат.Вставить("ИмяПотокаФормата", ""); + + Возврат Результат; + +КонецФункции + +Функция ТипыКолонтитулов() + + Результат = Новый Соответствие; + Результат.Вставить("w:headerReference_even", "ВерхнийЧетныйКолонтитул"); + Результат.Вставить("w:footerReference_even", "НижнийЧетныйКолонтитул"); + Результат.Вставить("w:headerReference_first", "ВерхнийТитульныйКолонтитул"); + Результат.Вставить("w:footerReference_first", "НижнийТитульныйКолонтитул"); + Результат.Вставить("w:headerReference_default", "ВерхнийКолонтитул"); + Результат.Вставить("w:footerReference_default", "НижнийКолонтитул"); + + Возврат Результат; + +КонецФункции + +Процедура СброситьСтатусыТэгов1С(СтруктураРазбораXML, СброситьПотокиШаблоннойСтроки = Ложь) + + СтруктураРазбораXML.Вставить("СтатусТэга1С", 0); + СтруктураРазбораXML.Вставить("ТипТэга1С", 0); + СтруктураРазбораXML.Вставить("ИмяТэга1С", ""); + СтруктураРазбораXML.Вставить("ПолноеИмяТэга1С", ""); + СтруктураРазбораXML.Вставить("ТекстДоТэга1С", ""); + СтруктураРазбораXML.Вставить("ТекстПослеТэга1С", ""); + + Если СброситьПотокиШаблоннойСтроки Тогда + СброситьПотокиШаблоннойСтроки(СтруктураРазбораXML) + КонецЕсли; + +КонецПроцедуры + +Процедура ДобавитьРазобраннуюСтроку(СтруктураРазбораXML, Строка, СтатусТэга1С = 0, ИмяОбласти = "", ПотокФормата = "") + + СтруктураСтроки = Новый Структура; + СтруктураСтроки.Вставить("СтатусТэга1С", СтатусТэга1С); + СтруктураСтроки.Вставить("ИмяОбласти", ИмяОбласти); + СтруктураСтроки.Вставить("Текст", Строка); + СтруктураСтроки.Вставить("ПотокФормата", ПотокФормата); + + СтруктураРазбораXML.РазобранныеСтроки.Добавить(СтруктураСтроки); + +КонецПроцедуры + +Процедура СформироватьРазобранныеСтроки(СтруктураРазбораXML) + + Если СтруктураРазбораXML.СтатусТэга1С = 7 И СтруктураРазбораXML.ТипТэга1С = 0 + ИЛИ СтруктураРазбораXML.СтатусТэга1С = 3 И СтруктураРазбораXML.ТипТэга1С = 1 И НЕ ПустаяСтрока(СтруктураРазбораXML.ИмяОбласти) + ИЛИ СтруктураРазбораXML.СтатусТэга1С = 7 И СтруктураРазбораXML.ТипТэга1С = 1 И НЕ СтруктураРазбораXML.ИмяТэга1С = СтруктураРазбораXML.ИмяОбласти Тогда + + СброситьСтатусыТэгов1С(СтруктураРазбораXML, Истина); + Возврат; + КонецЕсли; + + Если НЕ СтруктураРазбораXML.ТекстДоТэга1С = "" Тогда + ДобавитьРазобраннуюСтроку(СтруктураРазбораXML, СтруктураРазбораXML.ТекстДоТэга1С,,,"ФорматТекстаДо"); + КонецЕсли; + + Если НЕ СтруктураРазбораXML.ПолноеИмяТэга1С = "" Тогда + ДобавитьРазобраннуюСтроку(СтруктураРазбораXML, СтруктураРазбораXML.ПолноеИмяТэга1С, ?(СтруктураРазбораXML.ТипТэга1С = 1, СтруктураРазбораXML.СтатусТэга1С, 0), ?(СтруктураРазбораXML.ТипТэга1С = 1, СтруктураРазбораXML.ИмяТэга1С, ""),"ФорматТэга1С"); + КонецЕсли; + + Если НЕ СтруктураРазбораXML.ТекстПослеТэга1С = "" Тогда + ДобавитьРазобраннуюСтроку(СтруктураРазбораXML, СтруктураРазбораXML.ТекстПослеТэга1С,,,"ФорматТекстаПосле"); + КонецЕсли; + + СброситьСтатусыТэгов1С(СтруктураРазбораXML); + +КонецПроцедуры + +Процедура ОчиститьРазобранныеСтроки(СтруктураРазбораXML) + + СтруктураРазбораXML.РазобранныеСтроки.Очистить(); + +КонецПроцедуры + +Процедура ИнициализироватьПотокиШаблоннойСтроки(СтруктураРазбораXML) + + Если СтруктураРазбораXML.СтатусТэга1С = 1 ИЛИ СтруктураРазбораXML.СтатусТэга1С = 5 Тогда + + Если НЕ ПотокАктивен(СтруктураРазбораXML, "ФорматТекстаДо") Тогда + ИнициализироватьЗаписьВПоток(СтруктураРазбораXML, "ФорматТекстаДо"); + ПеренестиЗаписьВПоток(СтруктураРазбораXML, СтруктураРазбораXML.ИмяПотокаФормата, "ФорматТекстаДо"); + ОстановитьЗаписьВПоток(СтруктураРазбораXML, "ФорматТекстаДо"); + КонецЕсли; + + КонецЕсли; + + Если СтруктураРазбораXML.СтатусТэга1С = 2 ИЛИ СтруктураРазбораXML.СтатусТэга1С = 6 Тогда + + Если НЕ ПотокАктивен(СтруктураРазбораXML, "ФорматТекстаДо") Тогда + ИнициализироватьЗаписьВПоток(СтруктураРазбораXML, "ФорматТекстаДо"); + ПеренестиЗаписьВПоток(СтруктураРазбораXML, СтруктураРазбораXML.ИмяПотокаФормата, "ФорматТекстаДо"); + ОстановитьЗаписьВПоток(СтруктураРазбораXML, "ФорматТекстаДо"); + КонецЕсли; + + Если НЕ ПотокАктивен(СтруктураРазбораXML, "ФорматТэга1С") Тогда + ИнициализироватьЗаписьВПоток(СтруктураРазбораXML, "ФорматТэга1С"); + ПеренестиЗаписьВПоток(СтруктураРазбораXML, СтруктураРазбораXML.ИмяПотокаФормата, "ФорматТэга1С"); + ОстановитьЗаписьВПоток(СтруктураРазбораXML, "ФорматТэга1С"); + КонецЕсли; + + КонецЕсли; + + Если СтруктураРазбораXML.СтатусТэга1С = 3 ИЛИ СтруктураРазбораXML.СтатусТэга1С = 7 Тогда + + Если НЕ ПотокАктивен(СтруктураРазбораXML, "ФорматТекстаДо") Тогда + ИнициализироватьЗаписьВПоток(СтруктураРазбораXML, "ФорматТекстаДо"); + ПеренестиЗаписьВПоток(СтруктураРазбораXML, СтруктураРазбораXML.ИмяПотокаФормата, "ФорматТекстаДо"); + ОстановитьЗаписьВПоток(СтруктураРазбораXML, "ФорматТекстаДо"); + КонецЕсли; + + Если НЕ ПотокАктивен(СтруктураРазбораXML, "ФорматТэга1С") Тогда + ИнициализироватьЗаписьВПоток(СтруктураРазбораXML, "ФорматТэга1С"); + ПеренестиЗаписьВПоток(СтруктураРазбораXML, СтруктураРазбораXML.ИмяПотокаФормата, "ФорматТэга1С"); + ОстановитьЗаписьВПоток(СтруктураРазбораXML, "ФорматТэга1С"); + КонецЕсли; + + Если НЕ ПотокАктивен(СтруктураРазбораXML, "ФорматТекстаПосле") Тогда + ИнициализироватьЗаписьВПоток(СтруктураРазбораXML, "ФорматТекстаПосле"); + ПеренестиЗаписьВПоток(СтруктураРазбораXML, СтруктураРазбораXML.ИмяПотокаФормата, "ФорматТекстаПосле"); + ОстановитьЗаписьВПоток(СтруктураРазбораXML, "ФорматТекстаПосле"); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +Процедура СброситьПотокиШаблоннойСтроки(СтруктураРазбораXML) + + СброситьЗаписьВПоток(СтруктураРазбораXML, "ФорматТекстаДо"); + СброситьЗаписьВПоток(СтруктураРазбораXML, "ФорматТэга1С"); + СброситьЗаписьВПоток(СтруктураРазбораXML, "ФорматТекстаПосле"); + +КонецПроцедуры + +Процедура РазбитьТекстШаблонаНаОбласти(ЧтениеXML, СтруктураДокумента, ПараметрыАнализа) + + УровеньТэгаБлок = -1; + УровеньТэгаОбласть = -1; + УровеньАбзаца = "0"; + ТекущийУровень = 0; + ПропуститьТэг = Ложь; + СнятьБлокирующийПоток = Ложь; + + СтруктураРазбораXML = ИнициализироватьРазборXML(); + + СброситьСтатусыТэгов1С(СтруктураРазбораXML); + + ИнициализироватьЗаписьВПоток(СтруктураРазбораXML, "Заголовок", ""); + + Если ПараметрыАнализа.ТипАнализа <> 1 Тогда + ИнициализироватьЗаписьВПоток(СтруктураРазбораXML, "Блок", ""); + УровеньТэгаБлок = 0; + КонецЕсли; + + Пока ЧтениеXML.Прочитать() Цикл + + // тег описания пространства имен во временном xml + Если ЧтениеXML.Имя = "w:next" Тогда + Продолжить; + КонецЕсли; + + Если (ЧтениеXML.Имя = "w:bookmarkStart" ИЛИ ЧтениеXML.Имя = "w:bookmarkEnd") Тогда + + Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + ПропуститьТэг = Истина; + ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда + ПропуститьТэг = Ложь; + КонецЕсли; + + Продолжить; + + КонецЕсли; + + Если ПропуститьТэг Тогда + Продолжить; + КонецЕсли; + + Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + ТекущийУровень = ТекущийУровень + 1; + КонецЕсли; + + Если ЧтениеНачалаРаздела(СтруктураРазбораXML, ЧтениеXML) Тогда + СтруктураРазбораXML.БлокирующийПоток = "Раздел"; + ИнициализироватьЗаписьВПоток(СтруктураРазбораXML, "Раздел", "", Ложь); + ПеренестиОткрывающиеТэгиЗаписиВПоток(СтруктураРазбораXML, "Заголовок", "Раздел", "w:body"); + КонецЕсли; + + Если ЧтениеНачалаЛюбогоБлокаКромеПараграфа(СтруктураРазбораXML, ЧтениеXML) И ТекущийУровень = УровеньТэгаБлок Тогда + ИнициализироватьЗаписьВПоток(СтруктураРазбораXML, "Блок"); + КонецЕсли; + + Если ЧтениеНачалаПараграфа(СтруктураРазбораXML, ЧтениеXML) Тогда + + Если Число(УровеньАбзаца) > 0 Тогда + ОстановитьЗаписьВПоток(СтруктураРазбораXML, "Строки" + УровеньАбзаца); + ОстановитьЗаписьВПоток(СтруктураРазбораXML, "Абзац" + УровеньАбзаца); + ОстановитьЗаписьВПоток(СтруктураРазбораXML, "СтрокаПарам" + УровеньАбзаца); + КонецЕсли; + + УровеньАбзаца = Формат(Число(УровеньАбзаца) + 1, "ЧН=0; ЧГ=0"); + + СброситьСтатусыТэгов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.ПотокиЗаписи.Заголовок.Уровень + 1; + УровеньТэгаОбласть = СтруктураРазбораXML.ПотокиЗаписи.Заголовок.Уровень + 2; + + ЗавершитьЗаписьВПоток(СтруктураРазбораXML, "Заголовок"); + + КонецЕсли; + + Если ЧтениеКонцаСтроки(СтруктураРазбораXML, ЧтениеXML) Тогда + + Если СтруктураРазбораXML.СтатусТэга1С = 0 И СтруктураРазбораXML.РазобранныеСтроки.Количество() = 0 Тогда + ПеренестиЗаписьВПоток(СтруктураРазбораXML, "Строки" + УровеньАбзаца, "Абзац" + УровеньАбзаца); + ИначеЕсли СтруктураРазбораXML.РазобранныеСтроки.Количество() > 0 Тогда + + ИнициализироватьЗаписьВПоток(СтруктураРазбораXML, "СтрокиПарам"); + + КоличествоСтрок = 0; + + Для Каждого ЭлементСтроки Из СтруктураРазбораXML.РазобранныеСтроки Цикл + + Если ПараметрыАнализа.ТипАнализа = 1 И ТекущийУровень = УровеньТэгаОбласть И ЭлементСтроки.СтатусТэга1С = 3 И ПустаяСтрока(СтруктураРазбораXML.ИмяОбласти) Тогда + + СтруктураРазбораXML.ИмяОбласти = ЭлементСтроки.ИмяОбласти; + СтруктураРазбораXML.СтатусОбласти = 0; + КоличествоСтрок = 0; + + ИнициализироватьЗаписьВПоток(СтруктураРазбораXML, "Область", ""); + ПеренестиОткрывающиеТэгиЗаписиВПоток(СтруктураРазбораXML, "Заголовок", "Область", "w:body"); + ОстановитьЗаписьВПоток(СтруктураРазбораXML, "Область"); + СброситьЗаписьВПоток(СтруктураРазбораXML, "СтрокиПарам"); + ИнициализироватьЗаписьВПоток(СтруктураРазбораXML, "СтрокиПарам"); + + Прервать; + + ИначеЕсли ПараметрыАнализа.ТипАнализа = 1 И ТекущийУровень = УровеньТэгаОбласть И ЭлементСтроки.СтатусТэга1С = 7 И СтруктураРазбораXML.ИмяОбласти = ЭлементСтроки.ИмяОбласти Тогда + + ТекстОбласти = ЗавершитьЗаписьВПоток(СтруктураРазбораXML, "Область"); + + СтруктураОбласти = ОбластьДокумента(); + СтруктураОбласти.Имя = СтруктураРазбораXML.ИмяОбласти; + СтруктураОбласти.Текст = ТекстОбласти; + СтруктураОбласти.НомерРаздела = СтруктураРазбораXML.НомерРаздела; + + ДобавитьВСтруктуруДокументаОбластьДокумента(СтруктураДокумента, СтруктураОбласти); + + СтруктураРазбораXML.ИмяОбласти = ""; + СтруктураРазбораXML.СтатусОбласти = 0; + + Прервать; + + КонецЕсли; + + КоличествоСтрок = КоличествоСтрок + 1; + + ЗавершитьЗаписьВПоток(СтруктураРазбораXML, ЭлементСтроки.ПотокФормата); + + ИмеетсяАтрибутПробела = СтрНайти(СтруктураРазбораXML.ПотокиЗаписи[ЭлементСтроки.ПотокФормата].ТекстПотока, "w:t xml:space", НаправлениеПоиска.СКонца) > 0; + + ПеренестиОткрывающиеТэгиЗаписиВПоток(СтруктураРазбораXML, ЭлементСтроки.ПотокФормата, "СтрокиПарам", "w:t"); + + Если НЕ ИмеетсяАтрибутПробела И (ПустаяСтрока(Лев(ЭлементСтроки.Текст, 1)) ИЛИ ПустаяСтрока(Прав(ЭлементСтроки.Текст, 1))) Тогда + ДобавитьАтрибутВПоток(СтруктураРазбораXML, "СтрокиПарам", "xml:space", "preserve"); + КонецЕсли; + ДобавитьТекстВПоток(СтруктураРазбораXML, "СтрокиПарам", ЭлементСтроки.Текст); + ЗакрытьЭлементыВПотоке(СтруктураРазбораXML, "СтрокиПарам", 2); + + КонецЦикла; + + Если КоличествоСтрок > 0 Тогда + ПеренестиЗаписьВПоток(СтруктураРазбораXML, "СтрокиПарам", "Абзац" + УровеньАбзаца); + КонецЕсли; + + СброситьЗаписьВПоток(СтруктураРазбораXML, "СтрокиПарам"); + СброситьПотокиШаблоннойСтроки(СтруктураРазбораXML); + ОчиститьРазобранныеСтроки(СтруктураРазбораXML); + + КонецЕсли; + + СброситьЗаписьВПоток(СтруктураРазбораXML, "СтрокаПарам" + УровеньАбзаца); + + Если СтруктураРазбораXML.СтатусТэга1С = 0 И СтруктураРазбораXML.РазобранныеСтроки.Количество() = 0 ИЛИ СтруктураРазбораXML.РазобранныеСтроки.Количество() > 0 Тогда + СброситьЗаписьВПоток(СтруктураРазбораXML, "Строки" + УровеньАбзаца); + ИнициализироватьЗаписьВПоток(СтруктураРазбораXML, "Строки" + УровеньАбзаца); + ОстановитьЗаписьВПоток(СтруктураРазбораXML, "Строки" + УровеньАбзаца); + КонецЕсли; + + КонецЕсли; + + Если ЧтениеКонцаПараграфа(СтруктураРазбораXML, ЧтениеXML) Тогда + + Если НЕ СтруктураРазбораXML.СтатусТэга1С = 0 Тогда + СброситьСтатусыТэгов1С(СтруктураРазбораXML, Истина); + КонецЕсли; + + Если Число(УровеньАбзаца) > 1 Тогда + ПотокПереноса = "Абзац" + Формат(Число(УровеньАбзаца) - 1, "ЧН=0; ЧГ=0"); + ПеренестиЗаписьВПоток(СтруктураРазбораXML, "Абзац" + УровеньАбзаца, ПотокПереноса); + Иначе + ПотокПереноса = ?(ТекущийУровень = УровеньТэгаБлок, "Область", "Блок"); + КонецЕсли; + + Если ПараметрыАнализа.ТипАнализа <> 1 Тогда + ПеренестиЗаписьВПоток(СтруктураРазбораXML, "Абзац" + УровеньАбзаца, "Блок"); + ПотокПереноса = "Блок"; + ИначеЕсли Не ПустаяСтрока(СтруктураРазбораXML.ИмяОбласти) И СтруктураРазбораXML.СтатусОбласти = 1 Тогда + ПеренестиЗаписьВПоток(СтруктураРазбораXML, "Абзац" + УровеньАбзаца, ПотокПереноса); + КонецЕсли; + + Если ПотокПереноса = "Блок" Тогда + ВозобновитьЗаписьВПоток(СтруктураРазбораXML, "Блок"); + КонецЕсли; + + СброситьЗаписьВПоток(СтруктураРазбораXML, "Абзац" + УровеньАбзаца); + СброситьЗаписьВПоток(СтруктураРазбораXML, "Строки" + УровеньАбзаца); + + Если Не ПустаяСтрока(СтруктураРазбораXML.ИмяОбласти) И СтруктураРазбораXML.СтатусОбласти = 0 Тогда + СтруктураРазбораXML.СтатусОбласти = 1; + КонецЕсли; + + УровеньАбзаца = Формат(Число(УровеньАбзаца) - 1, "ЧН=0; ЧГ=0"); + + Если Число(УровеньАбзаца) > 1 Тогда + ВозобновитьЗаписьВПоток(СтруктураРазбораXML, "Строки" + УровеньАбзаца); + ВозобновитьЗаписьВПоток(СтруктураРазбораXML, "Абзац" + УровеньАбзаца); + ВозобновитьЗаписьВПоток(СтруктураРазбораXML, "СтрокаПарам" + УровеньАбзаца); + СтруктураРазбораXML.ИмяПотокаФормата = "СтрокаПарам" + УровеньАбзаца; + КонецЕсли; + + КонецЕсли; + + Если ЧтениеКонцаЛюбогоБлокаКромеПараграфа(СтруктураРазбораXML, ЧтениеXML) И ТекущийУровень = УровеньТэгаБлок Тогда + Если Не ПустаяСтрока(СтруктураРазбораXML.ИмяОбласти) И СтруктураРазбораXML.СтатусОбласти = 1 Тогда + ПеренестиЗаписьВПоток(СтруктураРазбораXML, "Блок", "Область"); + КонецЕсли; + СброситьЗаписьВПоток(СтруктураРазбораXML, "Блок"); + КонецЕсли; + + Если ЧтениеКонцаРаздела(СтруктураРазбораXML, ЧтениеXML) Тогда + + ТекстРаздела = ЗавершитьЗаписьВПоток(СтруктураРазбораXML, "Раздел"); + + СтруктураРаздела = ОбластьРаздела(); + СтруктураРаздела.Текст = ТекстРаздела; + СтруктураРаздела.Номер = СтруктураРазбораXML.НомерРаздела; + + ДобавитьВСтруктуруДокументаРаздел(СтруктураДокумента, СтруктураРаздела); + + СтруктураРазбораXML.НомерРаздела = СтруктураРазбораXML.НомерРаздела + 1; + + СнятьБлокирующийПоток = Истина; + + КонецЕсли; + + Если СнятьБлокирующийПоток И ТекущийУровень = УровеньТэгаБлок Тогда + СнятьБлокирующийПоток = Ложь; + СтруктураРазбораXML.БлокирующийПоток = ""; + КонецЕсли; + + Если ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда + ТекущийУровень = ТекущийУровень - 1; + КонецЕсли; + + КонецЦикла; + + Если ПараметрыАнализа.ТипАнализа = 2 ИЛИ ПараметрыАнализа.ТипАнализа = 3 Тогда + ТекстОбласти = ЗавершитьЗаписьВПоток(СтруктураРазбораXML, "Блок"); + ПараметрыАнализа.СтруктураАнализа.Текст = ТекстОбласти; + КонецЕсли; + + Если ПараметрыАнализа.ТипАнализа = 1 Тогда + + ИнициализироватьЗаписьВПоток(СтруктураРазбораXML, "Абзац", ""); + ПеренестиОткрывающиеТэгиЗаписиВПоток(СтруктураРазбораXML, "Заголовок", "Абзац", "w:body"); + + ТекстРазрыва = ""; + СтруктураРазбораXML.ПотокиЗаписи.Абзац.Поток.ЗаписатьБезОбработки(ТекстРазрыва); + + ТекстОбласти = ЗавершитьЗаписьВПоток(СтруктураРазбораXML, "Абзац"); + + СтруктураОбласти = ОбластьДокумента(); + СтруктураОбласти.Имя = "Абзац"; + СтруктураОбласти.Текст = ТекстОбласти; + СтруктураОбласти.НомерРаздела = 0; + ДобавитьВСтруктуруДокументаОбластьДокумента(СтруктураДокумента, СтруктураОбласти); + + КонецЕсли; + +КонецПроцедуры + +Процедура АнализироватьПараметрыВСтроке(Знач Строка, СтруктураРазбораXML) + + // 1 - начало тэга {v8 + // 2 - начало параметра тэга {v8 + // 3 - конец параметра тэга {v8 + + // 5 - начало тэга {/v8 + // 6 - начало параметра тэга {/v8 + // 7 - конец параметра тэга {/v8 + + ПризнакНачалаТэга1С = "{v8 "; + ПризнакКонцаТэга1С = "{/v8 "; + + ДлинаСтрокиТэга1С = СтрДлина(СтруктураРазбораXML.ПолноеИмяТэга1С); + ДлинаСтроки = СтрДлина(Строка); + + Для ф = 1 По ДлинаСтроки Цикл + + Символ = Сред(Строка, ф, 1); + КодСимвола = КодСимвола(Символ); + + Если Символ = "{" И (СтруктураРазбораXML.СтатусТэга1С = 3 ИЛИ СтруктураРазбораXML.СтатусТэга1С = 7) Тогда + ИнициализироватьПотокиШаблоннойСтроки(СтруктураРазбораXML); + СформироватьРазобранныеСтроки(СтруктураРазбораXML); + ДлинаСтрокиТэга1С = 0; + КонецЕсли; + + Если ДлинаСтрокиТэга1С + 1 <= СтрДлина(ПризнакНачалаТэга1С) И Лев(ПризнакНачалаТэга1С, ДлинаСтрокиТэга1С + 1) = СтруктураРазбораXML.ПолноеИмяТэга1С + Символ Тогда + + СтруктураРазбораXML.СтатусТэга1С = 1; + СтруктураРазбораXML.ПолноеИмяТэга1С = СтруктураРазбораXML.ПолноеИмяТэга1С + Символ; + ДлинаСтрокиТэга1С = ДлинаСтрокиТэга1С + 1; + Продолжить; + + ИначеЕсли ДлинаСтрокиТэга1С <= СтрДлина(ПризнакКонцаТэга1С) И Лев(ПризнакКонцаТэга1С, ДлинаСтрокиТэга1С + 1) = СтруктураРазбораXML.ПолноеИмяТэга1С + Символ Тогда + + СтруктураРазбораXML.СтатусТэга1С = 5; + СтруктураРазбораXML.ПолноеИмяТэга1С = СтруктураРазбораXML.ПолноеИмяТэга1С + Символ; + ДлинаСтрокиТэга1С = ДлинаСтрокиТэга1С + 1; + Продолжить; + + КонецЕсли; + + Если СтруктураРазбораXML.СтатусТэга1С = 0 И СтрНачинаетсяС(СтруктураРазбораXML.ПолноеИмяТэга1С, ПризнакНачалаТэга1С) Тогда + СтруктураРазбораXML.СтатусТэга1С = 1; + ИначеЕсли СтруктураРазбораXML.СтатусТэга1С = 0 И СтрНачинаетсяС(СтруктураРазбораXML.ПолноеИмяТэга1С, ПризнакКонцаТэга1С) Тогда + СтруктураРазбораXML.СтатусТэга1С = 5; + КонецЕсли; + + Если СтруктураРазбораXML.СтатусТэга1С = 1 И НЕ СтрНачинаетсяС(СтруктураРазбораXML.ПолноеИмяТэга1С, ПризнакНачалаТэга1С) + ИЛИ СтруктураРазбораXML.СтатусТэга1С = 5 И НЕ СтрНачинаетсяС(СтруктураРазбораXML.ПолноеИмяТэга1С, ПризнакКонцаТэга1С) + ИЛИ СтруктураРазбораXML.СтатусТэга1С = 5 И ПустаяСтрока(СтруктураРазбораXML.ИмяОбласти) Тогда + Текст = СтруктураРазбораXML.ТекстДоТэга1С + СтруктураРазбораXML.ПолноеИмяТэга1С + СтруктураРазбораXML.ТекстПослеТэга1С; + СброситьСтатусыТэгов1С(СтруктураРазбораXML); + СтруктураРазбораXML.ТекстДоТэга1С = Текст; + ДлинаСтрокиТэга1С = 0; + КонецЕсли; + + Если СтруктураРазбораXML.СтатусТэга1С = 1 ИЛИ СтруктураРазбораXML.СтатусТэга1С = 5 Тогда + СтруктураРазбораXML.СтатусТэга1С = СтруктураРазбораXML.СтатусТэга1С + 1; + КонецЕсли; + + Если СтруктураРазбораXML.СтатусТэга1С = 2 ИЛИ СтруктураРазбораXML.СтатусТэга1С = 6 Тогда + + СтруктураРазбораXML.ПолноеИмяТэга1С = СтруктураРазбораXML.ПолноеИмяТэга1С + Символ; + ДлинаСтрокиТэга1С = ДлинаСтрокиТэга1С + 1; + + Если((КодСимвола >= 48 И КодСимвола <= 57) ИЛИ (КодСимвола >= 65 И КодСимвола <= 90) ИЛИ (КодСимвола >= 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С; + СброситьСтатусыТэгов1С(СтруктураРазбораXML); + СтруктураРазбораXML.ТекстДоТэга1С = Текст; + ДлинаСтрокиТэга1С = 0; + КонецЕсли; + + ИначеЕсли СтруктураРазбораXML.СтатусТэга1С = 3 ИЛИ СтруктураРазбораXML.СтатусТэга1С = 7 Тогда + СтруктураРазбораXML.ТекстПослеТэга1С = СтруктураРазбораXML.ТекстПослеТэга1С + Символ; + Иначе + СтруктураРазбораXML.ТекстДоТэга1С = СтруктураРазбораXML.ТекстДоТэга1С + Символ; + КонецЕсли; + + КонецЦикла; + + Если СтруктураРазбораXML.СтатусТэга1С = 0 И СтруктураРазбораXML.РазобранныеСтроки.Количество() > 0 Тогда + СтруктураРазбораXML.СтатусТэга1С = 3; + КонецЕсли; + + Если СтруктураРазбораXML.СтатусТэга1С = 0 Тогда + СброситьПотокиШаблоннойСтроки(СтруктураРазбораXML); + Иначе + ИнициализироватьПотокиШаблоннойСтроки(СтруктураРазбораXML); + КонецЕсли; + + Если СтруктураРазбораXML.СтатусТэга1С = 3 ИЛИ СтруктураРазбораXML.СтатусТэга1С = 7 Тогда + СформироватьРазобранныеСтроки(СтруктураРазбораXML); + КонецЕсли; + + Если СтруктураРазбораXML.СтатусТэга1С = 0 И СтруктураРазбораXML.РазобранныеСтроки.Количество() = 0 Тогда + СброситьСтатусыТэгов1С(СтруктураРазбораXML); + КонецЕсли; + +КонецПроцедуры + +Процедура ВыделитьИзРазделаКолонтитулы(ЧтениеXML, СтруктураДокумента, Раздел) + + ТипыКолонтитулов = ТипыКолонтитулов(); + + Пока ЧтениеXML.Прочитать() Цикл + + Если НЕ (ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И (ЧтениеXML.Имя = "w:headerReference" ИЛИ ЧтениеXML.Имя = "w:footerReference")) Тогда + Продолжить; + КонецЕсли; + + ИмяТэга = ЧтениеXML.Имя; + Атрибут_wtype = ЧтениеXML.ПолучитьАтрибут("w:type"); + Атрибут_rid = ЧтениеXML.ПолучитьАтрибут("r:id"); + + НайденнаяСтрока = СтруктураДокумента.ТаблицаСвязейКонтента.Найти(Атрибут_rid); + + Если НайденнаяСтрока = Неопределено Тогда + Продолжить; + КонецЕсли; + + ТипКолонтитула = ТипыКолонтитулов.Получить(ИмяТэга + "_" + Атрибут_wtype); + + СтруктураКолонтитула = ОбластьКолонтитула(); + СтруктураКолонтитула.Имя = ТипКолонтитула; + СтруктураКолонтитула.ИмяВнутр = СтрЗаменить(НайденнаяСтрока.ИмяРесурса, ".xml", ""); + СтруктураКолонтитула.НомерРаздела = Раздел.Номер; + + ДобавитьВСтруктуруДокументаКолонтитул(СтруктураДокумента, СтруктураКолонтитула, НайденнаяСтрока.ИмяРесурса); + + КонецЦикла; + +КонецПроцедуры + +Функция ОбработатьРазделДокумента(СтруктураДокумента, Раздел) + + ТипыКолонтитулов = ТипыКолонтитулов(); + + ЧтениеXML = ИнициализироватьЧтениеXML(Раздел.Текст); + ЗаписьXML = ИнициализироватьЗаписьXML("",,,Ложь); + + ПропуститьТэг = Ложь; + ЗаписатьБезусловно = Ложь; + + Пока ЧтениеXML.Прочитать() Цикл + + Если ПропуститьТэг = Истина Тогда + ПропуститьТэг = Ложь; + Продолжить; + КонецЕсли; + + Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И (ЧтениеXML.Имя = "w:document" ИЛИ ЧтениеXML.Имя = "w:body") Тогда + Продолжить; + КонецЕсли; + + Если ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда + Продолжить; + КонецЕсли; + + Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И (ЧтениеXML.Имя = "w:headerReference" ИЛИ ЧтениеXML.Имя = "w:footerReference") Тогда + + ИмяТэга = ЧтениеXML.Имя; + ЗначениеАтрибута = ЧтениеXML.ПолучитьАтрибут("w:type"); + КлючКолонтитула = ИмяТэга + "_" + ЗначениеАтрибута; + ТипКолонтитула = ТипыКолонтитулов.Получить(КлючКолонтитула); + КлючВСтруктуреДокумента = ТипКолонтитула + "_" + Формат(Раздел.Номер, "ЧГ=0"); + КолонтитулВСтруктуре = СтруктураДокумента.Колонтитулы.Получить(КлючВСтруктуреДокумента); + + Если КолонтитулВСтруктуре.Текст = "" Тогда + ПропуститьТэг = Истина; + Продолжить; + КонецЕсли; + + КонецЕсли; + + Если ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента И (ЧтениеXML.Имя = "w:document" ИЛИ ЧтениеXML.Имя = "w:body") Тогда + Продолжить; + КонецЕсли; + + ЗаписатьЭлементXML(ЧтениеXML, ЗаписьXML); + + КонецЦикла; + + ТекстРаздела = ЗаписьXML.Закрыть(); + + Возврат ТекстРаздела; + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область РаботаСИзображением + +//////////////////////////////////////////////////////////////////////////////// +// Функции обработки файлов изображений + +// Возвращает ширину, высоту, и тип изображения для файлов GIF, JPG, PNG, BMP, TIFF +Функция ПолучитьАтрибутыИзображения(ДанныеЧтения) + + АтрибутыИзображения = Новый Структура; + + Если ТипЗнч(ДанныеЧтения) = Тип("Строка") Тогда + + Попытка + ПотокДанных = ФайловыеПотоки.ОткрытьДляЧтения(ДанныеЧтения); + Исключение + Возврат АтрибутыИзображения; + КонецПопытки; + + ИначеЕсли ТипЗнч(ДанныеЧтения) = Тип("ДвоичныеДанные") Тогда + ПотокДанных = ДанныеЧтения + Иначе + Возврат АтрибутыИзображения; + КонецЕсли; + + ЧтениеДанных = Новый ЧтениеДанных(ПотокДанных); + + Символ1 = ЧтениеДанных.ПрочитатьБайт(); + Символ2 = ЧтениеДанных.ПрочитатьБайт(); + Символ3 = ЧтениеДанных.ПрочитатьБайт(); + + // MIME syntax - "type/subtype" + MimeType = Null; + + Ширина = -1; + Высота = -1; + + Если (Символ(Символ1) = "G" И Символ(Символ2) = "I" И Символ(Символ3) = "F") Тогда // GIF + + ЧтениеДанных.Пропустить(3); + Ширина = ПрочитатьЗначениеБайтаИзПотока(ЧтениеДанных, 2, Ложь); + Высота = ПрочитатьЗначениеБайтаИзПотока(ЧтениеДанных, 2 , Ложь); + MimeType = "image/gif"; + + ИначеЕсли (Символ1 = 255 И Символ2 = 216) Тогда // JPG + + Пока (Символ3 = 255) Цикл + + Маркер = ЧтениеДанных.ПрочитатьБайт(); + Длина = ПрочитатьЗначениеБайтаИзПотока(ЧтениеДанных, 2, Истина); + + Если (Маркер = 192 ИЛИ Маркер = 193 ИЛИ Маркер = 194) Тогда + + ЧтениеДанных.Пропустить(1); + Высота = ПрочитатьЗначениеБайтаИзПотока(ЧтениеДанных, 2, Истина); + Ширина = ПрочитатьЗначениеБайтаИзПотока(ЧтениеДанных, 2, Истина); + MimeType = "image/jpeg"; + Прервать; + + КонецЕсли; + + ЧтениеДанных.Пропустить(Длина - 2); + Символ3 = ЧтениеДанных.ПрочитатьБайт(); + + КонецЦикла; + + ИначеЕсли (Символ1 = 137 И Символ2 = 80 И Символ3 = 78) Тогда // PNG + + ЧтениеДанных.Пропустить(15); + Ширина = ПрочитатьЗначениеБайтаИзПотока(ЧтениеДанных, 2 , Истина); + ЧтениеДанных.Пропустить(2); + Высота = ПрочитатьЗначениеБайтаИзПотока(ЧтениеДанных, 2, Истина); + MimeType = "image/png"; + + ИначеЕсли (Символ1 = 66 И Символ2 = 77) Тогда // BMP + + ЧтениеДанных.Пропустить(15); + Ширина = ПрочитатьЗначениеБайтаИзПотока(ЧтениеДанных, 2, Ложь); + ЧтениеДанных.Пропустить(2); + Высота = ПрочитатьЗначениеБайтаИзПотока(ЧтениеДанных, 2, Ложь); + MimeType = "image/bmp"; + + Иначе + + Символ4 = ЧтениеДанных.ПрочитатьБайт(); + + Если((Символ(Символ1) = "M" И Символ(Символ2) = "M" И Символ3 = 0 И Символ4 = 42) ИЛИ (Символ(Символ1) = "I" И Символ(Символ2) = "I" И Символ3 = 42 И Символ4 = 0)) Тогда //TIFF + + ПорядокБайтовBigEndian = Символ(Символ1) = "M"; + + // Image header + ImageFileDirectory = 0; + ImageFileDirectory = ПрочитатьЗначениеБайтаИзПотока(ЧтениеДанных, 4, ПорядокБайтовBigEndian); + + ЧтениеДанных.Пропустить(ImageFileDirectory - 8); + Вхождения = ПрочитатьЗначениеБайтаИзПотока(ЧтениеДанных, 2, ПорядокБайтовBigEndian); + + Индекс = 1; + Пока Индекс <= Вхождения Цикл + + Тэг = ПрочитатьЗначениеБайтаИзПотока(ЧтениеДанных, 2, ПорядокБайтовBigEndian); + ТипПоля = ПрочитатьЗначениеБайтаИзПотока(ЧтениеДанных, 2, ПорядокБайтовBigEndian); + Пропуск = ПрочитатьЗначениеБайтаИзПотока(ЧтениеДанных, 4, ПорядокБайтовBigEndian); + + Если (ТипПоля = 3 ИЛИ ТипПоля = 8) Тогда + + ЗначениеСмещения = ПрочитатьЗначениеБайтаИзПотока(ЧтениеДанных, 2, ПорядокБайтовBigEndian); + ЧтениеДанных.Пропустить(2); + + Иначе + + ЗначениеСмещения = ПрочитатьЗначениеБайтаИзПотока(ЧтениеДанных, 4, ПорядокБайтовBigEndian); + + КонецЕсли; + + Если (Тэг = 256) Тогда + + Ширина = ЗначениеСмещения; + + ИначеЕсли (Тэг = 257) Тогда + + Высота = ЗначениеСмещения; + + КонецЕсли; + + Если (Ширина <> -1 И Высота <> -1) Тогда + + MimeType = "image/tiff"; + Прервать; + + КонецЕсли; + + Индекс = Индекс + 1; + + КонецЦикла; + + КонецЕсли; + + КонецЕсли; + + ЧтениеДанных.Закрыть(); + + АтрибутыИзображения.Вставить("ТипИзображения", MimeType); + АтрибутыИзображения.Вставить("Высота", ?(MimeType = Null, 0, Высота)); + АтрибутыИзображения.Вставить("Ширина", ?(MimeType = Null, 0, Ширина)); + + Возврат АтрибутыИзображения; + +КонецФункции + +Функция ПрочитатьЗначениеБайтаИзПотока(ПотокВвода, ЧислоБайтов, ПорядокБайтовBigEndian) + + Значение = 0; + + ВеличинаСмещения = ?(ПорядокБайтовBigEndian = Истина, (ЧислоБайтов - 1) * 8, 0); + Количество = ?(ПорядокБайтовBigEndian = Истина, -8, 8); + + Индекс = 0; + Пока Индекс < ЧислоБайтов Цикл + + Значение = ПобитовоеИли_(Значение, ПобитовыйСдвигВлево_(ПотокВвода.ПрочитатьБайт(), ВеличинаСмещения)); + ВеличинаСмещения = ВеличинаСмещения + Количество; + + Индекс = Индекс + 1; + + КонецЦикла; + + Возврат Значение; + +КонецФункции + +Функция ПобитовыйСдвигВлево_(Знач Число, Смещение = 0) + + ДвоичноеПредставление = ПолучитьДвоичноеПредставлениеЧисла(Число); + МассивДвоичногоЧисла = РазобратьДвоичноеПредставление(ДвоичноеПредставление); + + Для Инд = 0 По Смещение - 1 Цикл + + Индекс = 1; + Пока Индекс <= МассивДвоичногоЧисла.ВГраница() - Инд Цикл + + МассивДвоичногоЧисла[Индекс-1] = МассивДвоичногоЧисла[Индекс]; + Индекс = Индекс + 1; + + КонецЦикла; + + МассивДвоичногоЧисла[МассивДвоичногоЧисла.ВГраница()- Инд] = "0"; + + КонецЦикла; + + + ДвоичноеПредставлениеМассиваЧисла = ПолучитьДвоичноеПредставлениеМассиваЧисла(МассивДвоичногоЧисла); + + Результат = ЧислоИзДвоичнойСтроки("0b" + ДвоичноеПредставлениеМассиваЧисла); + + Возврат Результат; + +КонецФункции + +Функция ПобитовоеИли_(Число1, Число2) + + ДвоичноеПредставлениеЧисла1 = ПолучитьДвоичноеПредставлениеЧисла(Число1); + ДвоичноеПредставлениеЧисла2 = ПолучитьДвоичноеПредставлениеЧисла(Число2); + + МассивДвоичногоЧисла1 = РазобратьДвоичноеПредставление(ДвоичноеПредставлениеЧисла1); + МассивДвоичногоЧисла2 = РазобратьДвоичноеПредставление(ДвоичноеПредставлениеЧисла2); + + ДлинаМассива = МассивДвоичногоЧисла1.ВГраница(); + + Для Инд = 0 По ДлинаМассива Цикл + + Если МассивДвоичногоЧисла1[Инд] = "1" ИЛИ МассивДвоичногоЧисла2[Инд] = "1" Тогда + МассивДвоичногоЧисла1[Инд] = "1"; + КонецЕсли; + + КонецЦикла; + + ДвоичноеПредставлениеМассиваЧисла = ПолучитьДвоичноеПредставлениеМассиваЧисла(МассивДвоичногоЧисла1); + + Результат = ЧислоИзДвоичнойСтроки("0b" + ДвоичноеПредставлениеМассиваЧисла); + + Возврат Результат; + +КонецФункции + +Функция ПолучитьДвоичноеПредставлениеЧисла(Значение, Маска = "00000000000000000000000000000000") + + Результат = ""; + Шаблон = "01"; + Основание = СтрДлина(Шаблон); + + Пока Значение > 0 Цикл + + Остаток = Значение % Основание; + Результат1 = Сред(Шаблон, Остаток + 1, 1); + Значение = (Значение - Остаток) / Основание; + Результат = Результат1 + Результат; + + КонецЦикла; + + ЛидирующиеНули = ""; + + ЧислоНулей = СтрДлина(Маска) - СтрДлина(Результат); + + Для Инд = 1 По ЧислоНулей Цикл + Результат = "0" + Результат; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция ПолучитьДвоичноеПредставлениеМассиваЧисла(МассивДвоичногоЧисла) + + Результат = ""; + + Для Инд = 0 По МассивДвоичногоЧисла.ВГраница() Цикл + Результат = Результат + МассивДвоичногоЧисла[Инд]; + КонецЦикла; + + Возврат Результат + +КонецФункции + +Функция РазобратьДвоичноеПредставление(ДвоичноеПредставление) + + МассивДвоичногоЧисла = Новый Массив(СтрДлина(ДвоичноеПредставление)); + + Для Инд = 0 По МассивДвоичногоЧисла.ВГраница() Цикл + МассивДвоичногоЧисла[Инд] = Сред(ДвоичноеПредставление, Инд + 1, 1); + КонецЦикла; + + Возврат МассивДвоичногоЧисла; + +КонецФункции + +#КонецОбласти + +//////////////////////////////////////////////////////////////////////////////// +// Прочие процедуры и функции + +Функция СобытиеЖурналаРегистрации() + + Возврат НСтр("ru = 'Печать'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + +КонецФункции + +Процедура КопироватьСодержимоеКаталога(Откуда, Куда) + + КаталогНазначения = Новый Файл(Куда); + + Если КаталогНазначения.Существует() Тогда + Если КаталогНазначения.ЭтоФайл() Тогда + УдалитьФайлы(КаталогНазначения.ПолноеИмя); + СоздатьКаталог(Куда); + КонецЕсли; + Иначе + СоздатьКаталог(Куда); + КонецЕсли; + + Файлы = НайтиФайлы(Откуда, "*.*"); + + Для Каждого Файл Из Файлы Цикл + Если Файл.ЭтоКаталог() Тогда + КопироватьСодержимоеКаталога(Файл.ПолноеИмя, Куда + "\" + Файл.Имя); + Иначе + КопироватьФайл(Файл.ПолноеИмя, Куда + "\" + Файл.Имя); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// ЗаписатьСобытияВЖурналРегистрации +// Параметры: +// * ИмяСобытия - Строка - Имя записываемого события. +// * ПредставлениеУровня - Строка - Представление значений коллекции УровеньЖурналаРегистрации. +// Доступные значения: "Информация", "Ошибка", "Предупреждение", "Примечание". +// * Комментарий - Строка - Комментарий события. +Процедура ЗаписатьСобытияВЖурналРегистрации(ИмяСобытия, ПредставлениеУровня, Комментарий) + + СписокСобытий = Новый СписокЗначений; + + СтруктураСобытия = Новый Структура; + СтруктураСобытия.Вставить("ИмяСобытия", ИмяСобытия); + СтруктураСобытия.Вставить("ПредставлениеУровня", ПредставлениеУровня); + СтруктураСобытия.Вставить("Комментарий", Комментарий); + + СписокСобытий.Добавить(СтруктураСобытия); + + ЖурналРегистрации.ЗаписатьСобытияВЖурналРегистрации(СписокСобытий); + +КонецПроцедуры + +// Определяет расширение файла данных исходя из их его сигнатуры. Файл анализируются +// по первым 8 байтам на отношению к типам docx, doc, odt. +// Для вызова из клиентских и серверных модулей печати форм по макетам офисных документов. +// +// Параметры: +// ДанныеИлиСтруктура - ДвоичныеДанные, Структура - файл документа или строка таблицы команд. +// +// Возвращаемое значение: +// Строка, Неопределено - расширение файла двоичных данных или Неопределено, если не удалось определить расширение. +// +Функция ОпределитьРасширениеФайлаДанныхПоСигнатуре(ДанныеИлиСтруктура) Экспорт + + Если ТипЗнч(ДанныеИлиСтруктура) = Тип("Структура") Тогда + Попытка + МакетИДанныеОбъекта = УправлениеПечатью.МакетыИДанныеОбъектовДляПечати(ДанныеИлиСтруктура.МенеджерПечати, + ДанныеИлиСтруктура.Идентификатор, Новый Массив); + ДвоичныеДанныеМакета = МакетИДанныеОбъекта.Макеты.ДвоичныеДанныеМакетов.Получить(ДанныеИлиСтруктура.Идентификатор); + Исключение + Возврат Неопределено; + КонецПопытки; + Иначе + ДвоичныеДанныеМакета = ДанныеИлиСтруктура; + КонецЕсли; + + Если ДвоичныеДанныеМакета = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + ПотокДанных = ДвоичныеДанныеМакета.ОткрытьПотокДляЧтения(); + ЧтениеДанных = Новый ЧтениеДанных(ПотокДанных); + + Символ1 = ЧтениеДанных.ПрочитатьБайт(); + Символ2 = ЧтениеДанных.ПрочитатьБайт(); + Символ3 = ЧтениеДанных.ПрочитатьБайт(); + Символ4 = ЧтениеДанных.ПрочитатьБайт(); + Символ5 = ЧтениеДанных.ПрочитатьБайт(); + Символ6 = ЧтениеДанных.ПрочитатьБайт(); + Символ7 = ЧтениеДанных.ПрочитатьБайт(); + Символ8 = ЧтениеДанных.ПрочитатьБайт(); + + ПотокДанных.Закрыть(); + + Если Символ1 = 208 И Символ2 = 207 И Символ3 = 17 И Символ4 = 224 И Символ5 = 161 И Символ6 = 177 И Символ7 = 26 И Символ8 = 225 Тогда + Возврат "doc"; + ИначеЕсли Символ1 = 80 И Символ2 = 75 И Символ3 = 3 И Символ4 = 4 И Символ5 = 20 И Символ6 = 0 И Символ7 = 0 И Символ8 = 8 + ИЛИ Символ1 = 80 И Символ2 = 75 И Символ3 = 3 И Символ4 = 4 И Символ5 = 10 И Символ6 = 0 И Символ7 = 0 И Символ8 = 0 Тогда + Возврат "odt"; + ИначеЕсли Символ1 = 80 И Символ2 = 75 И Символ3 = 3 И Символ4 = 4 И Символ5 = 20 И Символ6 = 0 Тогда + Возврат "docx"; + Иначе + Возврат Неопределено; + КонецЕсли; + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеПечатьюСлужебный/УправлениеПечатьюСлужебный.mdo b/SSL/src/CommonModules/УправлениеПечатьюСлужебный/УправлениеПечатьюСлужебный.mdo new file mode 100644 index 000000000..5e66831a7 --- /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 e4b179dbf..5b23ca08c 100644 --- a/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl @@ -86,13 +86,9 @@ НаборыСвойствОбъекта = УправлениеСвойствамиСлужебный.ПолучитьНаборыСвойствОбъекта( ОписаниеОбъекта, КлючНазначения); - Для каждого Строка Из НаборыСвойствОбъекта Цикл - Если УправлениеСвойствамиСлужебный.ВидыСвойствНабора(Строка.Набор).ДополнительныеРеквизиты Тогда - - Форма.Свойства_НаборыДополнительныхРеквизитовОбъекта.Добавить( - Строка.Набор, Строка.Заголовок); - КонецЕсли; - КонецЦикла; + УправлениеСвойствамиСлужебный.ЗаполнитьНаборыСДополнительнымиРеквизитами( + НаборыСвойствОбъекта, + Форма.Свойства_НаборыДополнительныхРеквизитовОбъекта); СведенияНеНайдены = УправлениеСвойствамиСлужебный.ДополнительныеРеквизитыИСведенияНеНайдены( Форма.Свойства_НаборыДополнительныхРеквизитовОбъекта, Ложь, Истина); @@ -367,13 +363,9 @@ НаборыСвойствОбъекта = УправлениеСвойствамиСлужебный.ПолучитьНаборыСвойствОбъекта( ОписаниеОбъекта, КлючНазначения); - Для каждого Строка Из НаборыСвойствОбъекта Цикл - Если УправлениеСвойствамиСлужебный.ВидыСвойствНабора(Строка.Набор).ДополнительныеРеквизиты Тогда - - Форма.Свойства_НаборыДополнительныхРеквизитовОбъекта.Добавить( - Строка.Набор, Строка.Заголовок); - КонецЕсли; - КонецЦикла; + УправлениеСвойствамиСлужебный.ЗаполнитьНаборыСДополнительнымиРеквизитами( + НаборыСвойствОбъекта, + Форма.Свойства_НаборыДополнительныхРеквизитовОбъекта); ОбновитьКлючНазначенияФормы(Форма, КлючНазначения); @@ -608,7 +600,7 @@ ГруппаГиперссылки.Вид = ВидГруппыФормы.ОбычнаяГруппа; ГруппаГиперссылки.Отображение = ОтображениеОбычнойГруппы.Нет; ГруппаГиперссылки.ОтображатьЗаголовок = Ложь; - ГруппаГиперссылки.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + ГруппаГиперссылки.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; ГруппаГиперссылки.Заголовок = ОписаниеСвойства.Наименование; Элемент = Форма.Элементы.Добавить(ОписаниеСвойства.ИмяРеквизитаЗначение, Тип("ПолеФормы"), ГруппаГиперссылки); @@ -1201,6 +1193,15 @@ КонецФункции +// Проверяет доступность подсистемы для текущего пользователя. +// +// Возвращаемое значение: +// Булево - Истина, если подсистема доступна. +// +Функция СвойстваДоступны() Экспорт + Возврат ПравоДоступа("Чтение", Метаданные.Справочники.НаборыДополнительныхРеквизитовИСведений); +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обновление информационной базы. @@ -1734,6 +1735,8 @@ КонецФункции + + Функция ИспользуютсяСвойства(Форма, ДополнительныеПараметры) Если Не ПравоДоступа("Чтение", Метаданные.Справочники.НаборыДополнительныхРеквизитовИСведений) Тогда diff --git a/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl index de26d2028..ed389ea2a 100644 --- a/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl @@ -179,6 +179,20 @@ Обработчик.РежимВыполнения = "Оперативно"; Обработчик.НачальноеЗаполнение = Истина; + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "3.0.1.101"; + Обработчик.Идентификатор = Новый УникальныйИдентификатор("ecd6aad4-4b04-43be-82bc-cd4f563beb0b"); + Обработчик.Процедура = "ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.ОбработатьДанныеДляПереходаНаНовуюВерсию"; + Обработчик.Комментарий = НСтр("ru = 'Заполняет уникальное имя дополнительных реквизитов и сведений. + |Редактирование дополнительных реквизитов и сведений будет недоступно до завершения обновления.'"); + Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.ОчередьОтложеннойОбработки = 1; + Обработчик.ПроцедураЗаполненияДанныхОбновления = "ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"; + Обработчик.ЧитаемыеОбъекты = "ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения"; + Обработчик.ИзменяемыеОбъекты = "ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения"; + Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; + Обработчик.БлокируемыеОбъекты = "ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения"; + КонецПроцедуры // См. ЗапретРедактированияРеквизитовОбъектовПереопределяемый.ПриОпределенииОбъектовСЗаблокированнымиРеквизитами. @@ -247,6 +261,16 @@ КонецПроцедуры +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииСписковСОграничениемДоступа(Списки) Экспорт + + Списки.Вставить(Метаданные.Справочники.ЗначенияСвойствОбъектов, Истина); + Списки.Вставить(Метаданные.Справочники.ЗначенияСвойствОбъектовИерархия, Истина); + Списки.Вставить(Метаданные.ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения, Истина); + Списки.Вставить(Метаданные.РегистрыСведений.ДополнительныеСведения, Истина); + +КонецПроцедуры + // См. УправлениеДоступомПереопределяемый.ПриЗаполненииИспользованияВидаДоступа. Процедура ПриЗаполненииИспользованияВидаДоступа(ВидДоступа, Использование) Экспорт @@ -590,17 +614,30 @@ ОписаниеСвойства = ОписаниеСвойств.Найти(Строка.Свойство, "Свойство"); Если ОписаниеСвойства <> Неопределено Тогда // Поддержка строк неограниченной длины. - Если НЕ ЭтоДополнительноеСведение - И (ИспользоватьНеограниченнуюСтроку( - ОписаниеСвойства.ТипЗначения, - ОписаниеСвойства.МногострочноеПолеВвода) - Или ИспользоватьСтрокуВВидеСсылки( - ОписаниеСвойства.ТипЗначения, - ОписаниеСвойства.ВыводитьВВидеГиперссылки, - ОписаниеСвойства.МногострочноеПолеВвода)) - И НЕ ПустаяСтрока(Строка.ТекстоваяСтрока) Тогда - - ОписаниеСвойства.Значение = Строка.ТекстоваяСтрока; + Если НЕ ЭтоДополнительноеСведение Тогда + ИспользоватьСтрокуВВидеСсылки = ИспользоватьСтрокуВВидеСсылки( + ОписаниеСвойства.ТипЗначения, + ОписаниеСвойства.ВыводитьВВидеГиперссылки, + ОписаниеСвойства.МногострочноеПолеВвода); + ИспользоватьНеограниченнуюСтроку = ИспользоватьНеограниченнуюСтроку( + ОписаниеСвойства.ТипЗначения, + ОписаниеСвойства.МногострочноеПолеВвода); + НеобходимоПеренестиЗначениеИзСсылки = НеобходимоПеренестиЗначениеИзСсылки( + Строка.ТекстоваяСтрока, + Строка.Значение); + Если (ИспользоватьНеограниченнуюСтроку + Или ИспользоватьСтрокуВВидеСсылки + Или НеобходимоПеренестиЗначениеИзСсылки) + И НЕ ПустаяСтрока(Строка.ТекстоваяСтрока) Тогда + Если Не ИспользоватьСтрокуВВидеСсылки И НеобходимоПеренестиЗначениеИзСсылки Тогда + ЗначениеБезСсылки = ЗначениеБезСсылки(Строка.ТекстоваяСтрока, Строка.Значение); + ОписаниеСвойства.Значение = ЗначениеБезСсылки; + Иначе + ОписаниеСвойства.Значение = Строка.ТекстоваяСтрока; + КонецЕсли; + Иначе + ОписаниеСвойства.Значение = Строка.Значение; + КонецЕсли; Иначе ОписаниеСвойства.Значение = Строка.Значение; КонецЕсли; @@ -649,8 +686,12 @@ Возврат Неопределено; КонецЕсли; - СвойстваСсылки = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( - Ссылка, "ПометкаУдаления, ЭтоГруппа, Предопределенный, Родитель, ИмяПредопределенныхДанных"); + Если ТипЗнч(Ссылка) = Тип("Структура") Тогда + СвойстваСсылки = Ссылка; + Иначе + СвойстваСсылки = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( + Ссылка, "ПометкаУдаления, ЭтоГруппа, Предопределенный, Родитель, ИмяПредопределенныхДанных"); + КонецЕсли; Если УчитыватьПометкуУдаления И СвойстваСсылки.ПометкаУдаления Тогда Возврат Неопределено; @@ -718,6 +759,31 @@ КонецФункции +Процедура ЗаполнитьНаборыСДополнительнымиРеквизитами(ВсеНаборы, НаборыСРеквизитами) Экспорт + + Ссылки = ВсеНаборы.ВыгрузитьКолонку("Набор"); + + СвойстваСсылок = ОбщегоНазначения.ЗначенияРеквизитовОбъектов( + Ссылки, "ПометкаУдаления, ЭтоГруппа, Предопределенный, Родитель, ИмяПредопределенныхДанных"); + + Для Каждого СвойстваСсылки Из СвойстваСсылок Цикл + ТипСсылки = Неопределено; + МетаданныеВладельца = МетаданныеВладельцаЗначенийСвойствНабора(СвойстваСсылки.Значение, Истина, ТипСсылки); + + Если МетаданныеВладельца = Неопределено Тогда + Возврат; + КонецЕсли; + + // Проверка использования дополнительных реквизитов. + Если МетаданныеВладельца.ТабличныеЧасти.Найти("ДополнительныеРеквизиты") <> Неопределено Тогда + Строка = ВсеНаборы.Найти(СвойстваСсылки.Ключ, "Набор"); + НаборыСРеквизитами.Добавить(Строка.Набор, Строка.Заголовок); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + // Определяет, что тип значения содержит тип дополнительных значений свойств. Функция ТипЗначенияСодержитЗначенияСвойств(ТипЗначения) Экспорт @@ -789,6 +855,11 @@ Возврат; КонецЕсли; + Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + // В неразделенном режиме не проверяем. + Возврат; + КонецЕсли; + Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ @@ -1150,6 +1221,31 @@ КонецФункции +Функция НеобходимоПеренестиЗначениеИзСсылки(Значение, Представление) + + Если ЗначениеЗаполнено(Представление) И Лев(Значение, 7) = " "%1", Представление); + + Результат = СтрЗаменить(Значение, НачалоСсылки, ""); + Результат = СтрЗаменить(Результат, КонецСсылки, ""); + Возврат Результат; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обновление информационной базы. diff --git a/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl b/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl index 0ee16b06a..b98d8b018 100644 --- a/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl +++ b/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl @@ -171,11 +171,19 @@ Исключение - ДанныеАнализаОшибочныхПолучателей = РезультатАнализаОшибочныхПолучателей(ПисьмоОбъект, ПараметрыПисьма.ОшибочныеПолучатели); + ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов = Ложь; + ВсеАдресатыПисьмаОтвергнутыСервером = Ложь; + ПредставлениеОшибочныхАдресатов = ""; - ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов = ДанныеАнализаОшибочныхПолучателей.ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов; - ВсеАдресатыПисьмаОтвергнутыСервером = ДанныеАнализаОшибочныхПолучателей.ВсеАдресатыПисьмаОтвергнутыСервером; - ПредставлениеОшибочныхАдресатов = ДанныеАнализаОшибочныхПолучателей.ПредставлениеОшибочныхАдресатов; + Если ПараметрыПисьма.Свойство("ОшибочныеПолучатели") Тогда + + ДанныеАнализаОшибочныхПолучателей = РезультатАнализаОшибочныхПолучателей(ПисьмоОбъект, ПараметрыПисьма.ОшибочныеПолучатели); + + ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов = ДанныеАнализаОшибочныхПолучателей.ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов; + ВсеАдресатыПисьмаОтвергнутыСервером = ДанныеАнализаОшибочныхПолучателей.ВсеАдресатыПисьмаОтвергнутыСервером; + ПредставлениеОшибочныхАдресатов = ДанныеАнализаОшибочныхПолучателей.ПредставлениеОшибочныхАдресатов; + + КонецЕсли; Если ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов И Не ВсеАдресатыПисьмаОтвергнутыСервером Тогда @@ -225,7 +233,7 @@ Попытка Если ПротоколПодключения = ПротоколИнтернетПочты.IMAP - И Не СерверИсходящейПочтыНеТребуетДополнительнойОтправкиПоIMAP(Профиль.АдресСервераSMTP) Тогда + И Не СерверИсходящейПочтыНеТребуетДополнительнойОтправкиПоIMAP(ВыборкаПисьма.СерверИсходящейПочты) Тогда Взаимодействия.ВыполнитьОтправкуПисьма(ПисьмоОбъект, Соединение, ПараметрыПисьма, "IMAP"); ИдентификаторСообщенияОтправкаIMAP = ПараметрыПисьма.ИдентификаторСообщения; КонецЕсли; @@ -362,9 +370,9 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | УчетныеЗаписиЭлектроннойПочты.Ссылка КАК Ссылка, - | УчетныеЗаписиЭлектроннойПочты.АдресЭлектроннойПочты КАК АдресЭлектроннойПочты, - | УчетныеЗаписиЭлектроннойПочты.Наименование КАК Наименование, + | УчетныеЗаписиЭлектроннойПочты.Ссылка КАК Ссылка, + | УчетныеЗаписиЭлектроннойПочты.АдресЭлектроннойПочты КАК АдресЭлектроннойПочты, + | УчетныеЗаписиЭлектроннойПочты.Наименование КАК Наименование, | ЕСТЬNULL(НастройкиУчетныхЗаписейЭлектроннойПочты.ПомещатьПисьмоВПапкуПисьмаОснования, ЛОЖЬ) КАК ПомещатьПисьмоВПапкуПисьмаОснования, | ВЫБОР | КОГДА УчетныеЗаписиЭлектроннойПочты.ВладелецУчетнойЗаписи = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) @@ -389,6 +397,7 @@ | ПО (ДатыПоследнейЗагрузкиПочтовыхСообщений.УчетнаяЗапись = УчетныеЗаписиЭлектроннойПочты.Ссылка) |ГДЕ | УчетныеЗаписиЭлектроннойПочты.ИспользоватьДляПолучения + | И НЕ УчетныеЗаписиЭлектроннойПочты.ПометкаУдаления | И НЕ ЕСТЬNULL(НастройкиУчетныхЗаписейЭлектроннойПочты.НеИспользоватьВоВстроенномПочтовомКлиенте, ЛОЖЬ)"; Выборка = Запрос.Выполнить().Выбрать(); @@ -449,6 +458,7 @@ | ПО НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма.Письмо = ЭлектронноеПисьмоИсходящее.Ссылка |ГДЕ | НЕ ЭлектронноеПисьмоИсходящее.ПометкаУдаления + | И НЕ УчетныеЗаписиЭлектроннойПочты.ПометкаУдаления | И ЭлектронноеПисьмоИсходящее.СтатусПисьма = ЗНАЧЕНИЕ(Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Исходящее) | И ЭлектронноеПисьмоИсходящее.Автор = &Пользователь | И УчетныеЗаписиЭлектроннойПочты.ИспользоватьДляОтправки @@ -2432,7 +2442,7 @@ | Файлы.ИндексКартинки КАК ИндексКартинки, | Файлы.Размер КАК Размер, | Файлы.ИДФайлаЭлектронногоПисьма КАК ИДФайлаЭлектронногоПисьма, - | &ПодписанЭП КАК ПодписанЭП, + | &ПодписанЭП КАК ПодписанЭП, | ВЫБОР | КОГДА Файлы.Расширение = &ПустаяСтрока | ТОГДА Файлы.Наименование @@ -2649,8 +2659,8 @@ "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 | УчетныеЗаписиЭлектроннойПочты.Ссылка КАК Ссылка |ИЗ - | Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты КАК НастройкиУчетныхЗаписейЭлектроннойПочты + | РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты КАК НастройкиУчетныхЗаписейЭлектроннойПочты + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты | ПО НастройкиУчетныхЗаписейЭлектроннойПочты.УчетнаяЗаписьЭлектроннойПочты = УчетныеЗаписиЭлектроннойПочты.Ссылка |ГДЕ | УчетныеЗаписиЭлектроннойПочты.ИспользоватьДляОтправки @@ -2679,7 +2689,7 @@ КонецПроцедуры -Процедура СоздатьОтправитьУведомлениеОПрочтении(Выборка,ЭтоРегламентноеЗадание,Соединение = Неопределено) +Процедура СоздатьОтправитьУведомлениеОПрочтении(Выборка, ЭтоРегламентноеЗадание, Соединение = Неопределено) ПараметрыПисьма = Новый Структура; @@ -2690,10 +2700,11 @@ ПараметрыПисьма.Вставить("Кодировка","UTF-8"); ПараметрыПисьма.Вставить("Важность", ВажностьИнтернетПочтовогоСообщения.Обычная); ПараметрыПисьма.Вставить("ТипТекста", Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст); - ПараметрыПисьма.Вставить("ОбрабатыватьТексты",Ложь); + ПараметрыПисьма.Вставить("ОбрабатыватьТексты", Ложь); + ПараметрыПисьма.Вставить("Соединение", Соединение); Попытка - РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(Выборка.УчетнаяЗапись, ПараметрыПисьма, Соединение); + РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(Выборка.УчетнаяЗапись, ПараметрыПисьма); Исключение Если ЭтоРегламентноеЗадание Тогда @@ -2928,6 +2939,7 @@ | ПО ПоследняяИспользовавшаясяУчетная.УчетнаяЗапись = УчетныеЗаписиЭлектроннойПочты.Ссылка |ГДЕ | УчетныеЗаписиЭлектроннойПочты.ИспользоватьДляОтправки + | И НЕ УчетныеЗаписиЭлектроннойПочты.ПометкаУдаления | И НЕ ЕСТЬNULL(НастройкиУчетныхЗаписейЭлектроннойПочты.НеИспользоватьВоВстроенномПочтовомКлиенте, ЛОЖЬ) | И (УчетныеЗаписиЭлектроннойПочты.ВладелецУчетнойЗаписи = &ТекущийПользователь | ИЛИ УчетныеЗаписиЭлектроннойПочты.ВладелецУчетнойЗаписи = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)) diff --git a/SSL/src/CommonModules/УправлениеЭлектроннойПочтойКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеЭлектроннойПочтойКлиент/Module.bsl index a3f888d74..2f76ea378 100644 --- a/SSL/src/CommonModules/УправлениеЭлектроннойПочтойКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеЭлектроннойПочтойКлиент/Module.bsl @@ -7,13 +7,15 @@ // СправочникСсылка.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы - ссылка на файл, который необходимо // открыть. // -Процедура ОткрытьВложение(Ссылка, Форма) Экспорт +Процедура ОткрытьВложение(Ссылка, Форма, ДляРедактирования = Ложь) Экспорт ДанныеФайла = РаботаСФайламиКлиент.ДанныеФайла(Ссылка, Форма.УникальныйИдентификатор); Если Форма.ЗапрещенныеРасширения.НайтиПоЗначению(ДанныеФайла.Расширение) <> Неопределено Тогда ДополнительныеПараметры = Новый Структура("ДанныеФайла", ДанныеФайла); + ДополнительныеПараметры.Вставить("ДляРедактирования", ДляРедактирования); + Оповещение = Новый ОписаниеОповещения("ОткрытьФайлПослеПодтверждения", ЭтотОбъект, ДополнительныеПараметры); ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("Ключ", "ПередОткрытиемФайла"); @@ -23,14 +25,14 @@ КонецЕсли; - РаботаСФайламиКлиент.ОткрытьФайл(ДанныеФайла); + РаботаСФайламиКлиент.ОткрытьФайл(ДанныеФайла, ДляРедактирования); КонецПроцедуры Процедура ОткрытьФайлПослеПодтверждения(Результат, ДополнительныеПараметры) Экспорт Если Результат <> Неопределено И Результат = "Продолжить" Тогда - РаботаСФайламиКлиент.ОткрытьФайл(ДополнительныеПараметры.ДанныеФайла); + РаботаСФайламиКлиент.ОткрытьФайл(ДополнительныеПараметры.ДанныеФайла, ДополнительныеПараметры.ДляРедактирования); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВМоделиСервиса/Module.bsl index 55a3c51b1..03e96cfc8 100644 --- a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВМоделиСервиса/Module.bsl @@ -150,18 +150,18 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ ОБНОВЛЕНИЯ ИНФОРМАЦИОННОЙ БАЗЫ +// Обновление информационной базы. // Заполняет очередь извлечения текста для текущей области данных. Используется для начального заполнения при // обновлении. Процедура ЗаполнитьОчередьИзвлеченияТекста() Экспорт - Если НЕ РаботаВМоделиСервисаПовтИсп.ЭтоРазделеннаяКонфигурация() Тогда + Если Не РаботаВМоделиСервисаПовтИсп.ЭтоРазделеннаяКонфигурация() Тогда Возврат; КонецЕсли; Запрос = Новый Запрос; - Запрос.Текст = РаботаСФайламиСлужебныйВызовСервера.ТекстЗапросаДляИзвлеченияТекста(Истина); + Запрос.Текст = РаботаСФайламиСлужебный.ТекстЗапросаДляИзвлеченияТекста(Истина); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл diff --git a/SSL/src/CommonModules/ЦентрМониторингаВызовСервераПовтИсп/Module.bsl b/SSL/src/CommonModules/ЦентрМониторингаВызовСервераПовтИсп/Module.bsl deleted file mode 100644 index ed4f5efb7..000000000 --- a/SSL/src/CommonModules/ЦентрМониторингаВызовСервераПовтИсп/Module.bsl +++ /dev/null @@ -1,22 +0,0 @@ -#Область СлужебныеПроцедурыИФункции - -#Область РаботаСПараметрамиЦентраМониторинга - -Функция ПолучитьПараметрыЦентраМониторинга(Параметры = Неопределено) Экспорт - Возврат ЦентрМониторингаСлужебный.ПолучитьПараметрыЦентраМониторинга(Параметры); -КонецФункции - -// Устарела. Будет удалена в следующей редакции библиотеки. -// Необходимо использовать ЦентрМониторинга.ЗаписыватьОперацииБизнесСтатистики. -// -Функция ЗаписыватьОперацииБизнесСтатистики() Экспорт - ПараметрыЦентраМониторинга = Новый Структура("ВключитьЦентрМониторинга, ЦентрОбработкиИнформацииОПрограмме, РегистрироватьБизнесСтатистику"); - - ПолучитьПараметрыЦентраМониторинга(ПараметрыЦентраМониторинга); - - Возврат (ПараметрыЦентраМониторинга.ВключитьЦентрМониторинга ИЛИ ПараметрыЦентраМониторинга.ЦентрОбработкиИнформацииОПрограмме) И ПараметрыЦентраМониторинга.РегистрироватьБизнесСтатистику; -КонецФункции - -#КонецОбласти - -#КонецОбласти diff --git a/SSL/src/CommonModules/ЦентрМониторингаГлобальный/Module.bsl b/SSL/src/CommonModules/ЦентрМониторингаГлобальный/Module.bsl index 7d122b1a4..7ea2d91ad 100644 --- a/SSL/src/CommonModules/ЦентрМониторингаГлобальный/Module.bsl +++ b/SSL/src/CommonModules/ЦентрМониторингаГлобальный/Module.bsl @@ -12,4 +12,10 @@ ЦентрМониторингаКлиентСлужебный.ОповеститьЗапросНаПолучениеДампов(); КонецПроцедуры +// Выводит запрос на получение контактной информации администратора. +// +Процедура ЦентрМониторингаЗапросКонтактнойИнформации() Экспорт + ЦентрМониторингаКлиентСлужебный.ОповеститьЗапросКонтактнойИнформации(); +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/ЦентрМониторингаКлиентСлужебный/Module.bsl b/SSL/src/CommonModules/ЦентрМониторингаКлиентСлужебный/Module.bsl index be8cb0179..e7c7e7ddb 100644 --- a/SSL/src/CommonModules/ЦентрМониторингаКлиентСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ЦентрМониторингаКлиентСлужебный/Module.bsl @@ -34,6 +34,10 @@ ОповеститьЗапросНаПолучениеДампов(); УстановитьПараметрыПриложенияЦентрМониторинга("ЗапросПолныхДамповВыведен", Истина); КонецЕсли; + Если Параметры.ЦентрМониторинга.Получить("ЗапросНаПолучениеКонтактов") = Истина Тогда + ОповеститьЗапросКонтактнойИнформации(); + УстановитьПараметрыПриложенияЦентрМониторинга("ЗапросНаПолучениеКонтактовВыведен", Истина); + КонецЕсли; Если Параметры.ЦентрМониторинга.Получить("ЗапросНаОтправкуДампов") = Истина Тогда ИнформацияОДампах = Параметры.ЦентрМониторинга.Получить("ИнформацияОДампах"); // Проверяем, было ли сообщение выведено ранее. @@ -69,6 +73,10 @@ ИнформацияОДампах = ЦентрМониторингаПараметрыПриложения["ИнформацияКлиента"]["ПараметрыКлиента"]["ИнформацияОДампах"]; УстановитьПараметрыПриложенияЦентрМониторинга("ИнформацияОДампах", ИнформацияОДампах); КонецЕсли; + Если ЦентрМониторингаПараметрыПриложения["ИнформацияКлиента"]["ПараметрыКлиента"]["ЗапросНаПолучениеКонтактов"] = Истина Тогда + ПодключитьОбработчикОжидания("ЦентрМониторингаЗапросКонтактнойИнформации",120, Истина); + УстановитьПараметрыПриложенияЦентрМониторинга("ЗапросНаПолучениеКонтактовВыведен", Истина); + КонецЕсли; КонецПроцедуры @@ -145,6 +153,8 @@ ПараметрыКлиента.Вставить("ИнформацияОДампах", ""); ПараметрыКлиента.Вставить("ЗапросНаПолучениеДампов", Ложь); ПараметрыКлиента.Вставить("ЗапросНаОтправку", Ложь); + ПараметрыКлиента.Вставить("ЗапросНаПолучениеКонтактов", Ложь); + ПараметрыКлиента.Вставить("ЗапросНаПолучениеКонтактовВыведен", Ложь); КонецЕсли; ПараметрыКлиентаИнформация = Новый Соответствие; @@ -194,19 +204,38 @@ КонецПроцедуры Процедура ОповеститьЗапросНаПолучениеДампов() Экспорт - ПоказатьОповещениеПользователя(НСтр("ru = 'Предоставить отчеты об ошибках'"), + ПоказатьОповещениеПользователя(НСтр("ru = 'Отчеты об ошибках'"), "e1cib/app/Обработка.НастройкиЦентраМониторинга.Форма.ЗапросНаСборИОтправкуОтчетовОбОшибках", - , + НСтр("ru = 'Предоставьте отчеты о возникающих ошибках'"), БиблиотекаКартинок.Предупреждение32, СтатусОповещенияПользователя.Важное, "ЗапросНаПолучениеДампов"); КонецПроцедуры Процедура ОповеститьЗапросНаОтправкуДампов() Экспорт - ПоказатьОповещениеПользователя(НСтр("ru = 'Отправить отчеты об ошибках'"), + ПоказатьОповещениеПользователя(НСтр("ru = 'Отчеты об ошибках'"), "e1cib/app/Обработка.НастройкиЦентраМониторинга.Форма.ЗапросНаОтправкуОтчетовОбОшибках", - , + НСтр("ru = 'Отправьте отчеты о возникающих ошибках'"), БиблиотекаКартинок.Предупреждение32, СтатусОповещенияПользователя.Важное, "ЗапросНаОтправкуДампов"); КонецПроцедуры +Процедура ОповеститьЗапросКонтактнойИнформации() Экспорт + ПоказатьОповещениеПользователя(НСтр("ru = 'Проблемы производительности'"), + Новый ОписаниеОповещения( + "ПриНажатииОповещенияЗапросКонтактнойИнформации", + ЭтотОбъект, Истина), + НСтр("ru = 'Сообщить о проблемах производительности'"), + БиблиотекаКартинок.Предупреждение32, + СтатусОповещенияПользователя.Важное, "ЗапросКонтактнойИнформации"); +КонецПроцедуры + +Процедура ПриНажатииОповещенияЗапросКонтактнойИнформации(ПоЗапросу) Экспорт + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ПоЗапросу", ПоЗапросу); + ОткрытьФорму("Обработка.НастройкиЦентраМониторинга.Форма.ОтправкаКонтактнойИнформации", ПараметрыФормы); + +КонецПроцедуры + + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ЦентрМониторингаПереопределяемый/Module.bsl b/SSL/src/CommonModules/ЦентрМониторингаПереопределяемый/Module.bsl index 173c32ca7..315b63ce2 100644 --- a/SSL/src/CommonModules/ЦентрМониторингаПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ЦентрМониторингаПереопределяемый/Module.bsl @@ -3,7 +3,10 @@ // Выполняется при запуске регламентного задания. // Процедура ПриСбореПоказателейСтатистикиКонфигурации() Экспорт - + + + + @@ -26,5 +29,4 @@ КонецПроцедуры - #КонецОбласти diff --git a/SSL/src/CommonModules/ЦентрМониторингаСлужебный/Module.bsl b/SSL/src/CommonModules/ЦентрМониторингаСлужебный/Module.bsl index 6ac5a828d..590e25a9b 100644 --- a/SSL/src/CommonModules/ЦентрМониторингаСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ЦентрМониторингаСлужебный/Module.bsl @@ -121,20 +121,25 @@ ПараметрыРаботыКлиента = Новый Структура("ЧасовойПоясСеанса, ХешПользователя, РегистрироватьБизнесСтатистику, |ВыводитьЗапросПолныхДампов, ЗапросПолныхДамповВыведен, ИнформацияОДампах, - |ЗапросНаПолучениеДампов,ЗапросНаОтправку"); + |ЗапросНаПолучениеДампов,ЗапросНаОтправку,ЗапросНаПолучениеКонтактов, + |ЗапросНаПолучениеКонтактовВыведен"); УникальныйИдентификаторПользователя = Строка(ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор); НомерСеанса = Формат(НомерСеансаИнформационнойБазы(), "ЧГ=0"); ХешПользователя = ОбщегоНазначения.КонтрольнаяСуммаСтрокой(УникальныйИдентификаторПользователя + НомерСеанса); - РегистрироватьБизнесСтатистику = ПолучитьПараметрыЦентраМониторинга("РегистрироватьБизнесСтатистику"); + РегистрироватьБизнесСтатистику = ПолучитьПараметрыЦентраМониторинга("РегистрироватьБизнесСтатистику"); + ЗапросНаПолучениеКонтактов = ПолучитьПараметрыЦентраМониторинга("ЗапросКонтактнойИнформации") = 3; ПараметрыОповещенияОДампах = ПараметрыОповещенияОДампах(); + ЭтоПолноправныйПользователь = Пользователи.ЭтоПолноправныйПользователь(, Истина); + НастройкиЦентраМониторинга = Новый Структура; - НастройкиЦентраМониторинга.Вставить("ВключитьОповещение", Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ТекущиеДела")); + // Всегда включаем оповещения, оповещения о дампах важны для Администратора. + НастройкиЦентраМониторинга.Вставить("ВключитьОповещение", Истина); ЦентрМониторингаПереопределяемый.ПриОпределенииНастроек(НастройкиЦентраМониторинга); - ПараметрыРаботыКлиента.ВыводитьЗапросПолныхДампов = Пользователи.ЭтоПолноправныйПользователь(, Истина) И НастройкиЦентраМониторинга.ВключитьОповещение; + ПараметрыРаботыКлиента.ВыводитьЗапросПолныхДампов = ЭтоПолноправныйПользователь И НастройкиЦентраМониторинга.ВключитьОповещение; ПараметрыРаботыКлиента.ЗапросПолныхДамповВыведен = Ложь; ПараметрыРаботыКлиента.ЗапросНаПолучениеДампов = ПараметрыОповещенияОДампах.ЗапросНаПолучениеДампов; ПараметрыРаботыКлиента.ЗапросНаОтправку = ПараметрыОповещенияОДампах.ЗапросНаОтправку; @@ -142,9 +147,14 @@ ПараметрыРаботыКлиента.ЧасовойПоясСеанса = ЧасовойПоясСеанса(); ПараметрыРаботыКлиента.ХешПользователя = ХешПользователя; ПараметрыРаботыКлиента.РегистрироватьБизнесСтатистику = РегистрироватьБизнесСтатистику; - + ПараметрыРаботыКлиента.ЗапросНаПолучениеКонтактов = ЗапросНаПолучениеКонтактов; + ПараметрыРаботыКлиента.ЗапросНаПолучениеКонтактовВыведен = Ложь; + Параметры.Вставить("ЦентрМониторинга", Новый ФиксированнаяСтруктура(ПараметрыРаботыКлиента)); + // Запишем активность пользователя в бизнес-статистику при запуске. + ЗаписатьАктивностьПользователя(ХешПользователя); + КонецПроцедуры Процедура ПриВыполненииСтандартныхПериодическихПроверокНаСервере(Параметры) Экспорт @@ -183,11 +193,14 @@ ЗапросНаПолучениеДампов = ПараметрыОповещенияОДампах.ЗапросНаПолучениеДампов И НЕ Параметры.Получить("ЗапросПолныхДамповВыведен") = Истина; + ЗапросНаПолучениеКонтактов = ПолучитьПараметрыЦентраМониторинга("ЗапросКонтактнойИнформации") = 3 + И НЕ Параметры.Получить("ЗапросНаПолучениеКонтактовВыведен") = Истина; ПараметрыНовые = Новый Соответствие(Параметры); ПараметрыНовые.Вставить("ЗапросНаПолучениеДампов", ЗапросНаПолучениеДампов); ПараметрыНовые.Вставить("ЗапросНаОтправкуДампов", ПараметрыОповещенияОДампах.ЗапросНаОтправку); ПараметрыНовые.Вставить("ИнформацияОДампах", ПараметрыОповещенияОДампах.ИнформацияОДампах); + ПараметрыНовые.Вставить("ЗапросНаПолучениеКонтактов", ЗапросНаПолучениеКонтактов); Параметры = Новый ФиксированноеСоответствие(ПараметрыНовые); КонецЕсли; @@ -295,7 +308,7 @@ Дело = ТекущиеДела.Добавить(); Дело.Идентификатор = "ЗапросНаПолучениеДампов"; Дело.ЕстьДела = ЗапросНаПолучениеДампов; - Дело.Важное = Ложь; + Дело.Важное = Истина; Дело.СкрыватьВНастройках = Истина; Дело.Владелец = Раздел; Дело.Представление = НСтр("ru = 'Предоставить отчеты об ошибках'"); @@ -311,6 +324,7 @@ И НЕ ПустаяСтрока(ПараметрыЦентраМониторинга.ВариантДампа) И ЕстьДампы И ПараметрыЦентраМониторинга.СпрашиватьПередОтправкой + И ПараметрыЦентраМониторинга.ТипДампа = "3" И Не ПустаяСтрока(ПараметрыЦентраМониторинга.ИнформацияОДампах) И ПараметрыЦентраМониторинга.БазовыеПроверкиПройдены; Для Каждого Раздел Из Разделы Цикл @@ -326,6 +340,21 @@ Дело.Форма = "Обработка.НастройкиЦентраМониторинга.Форма.ЗапросНаОтправкуОтчетовОбОшибках"; КонецЦикла; + // 3. Запрос контактной информации. + ЕстьЗапросКонтактнойИнформации = ПараметрыЦентраМониторинга.ЗапросКонтактнойИнформации = 3; + Для Каждого Раздел Из Разделы Цикл + Дело = ТекущиеДела.Добавить(); + Дело.Идентификатор = "ЗапросКонтактнойИнформации"; + Дело.ЕстьДела = ЕстьЗапросКонтактнойИнформации; + Дело.Важное = Истина; + Дело.Владелец = Раздел; + Дело.Представление = НСтр("ru = 'Сообщить о проблемах производительности'"); + Дело.Количество = 0; + Дело.Подсказка = НСтр("ru = 'Обнаружены проблемы производительности. Пожалуйста, расскажите нам об этих проблемах.'"); + Дело.ПараметрыФормы = Новый Структура("ПоЗапросу", Истина); + Дело.Форма = "Обработка.НастройкиЦентраМониторинга.Форма.ОтправкаКонтактнойИнформации"; + КонецЦикла; + КонецПроцедуры #КонецОбласти @@ -396,6 +425,9 @@ ПараметрыЦентраМониторинга.Вставить("ОтправкаДанныхСледующееФормирование"); ПараметрыЦентраМониторинга.Вставить("ОтправкаДанныхПериодФормирования"); + ПараметрыЦентраМониторинга.Вставить("ДатаОповещения"); + ПараметрыЦентраМониторинга.Вставить("ПринудительнаяОтправкаМинидампов"); + ПараметрыЦентраМониторинга.Вставить("ТаймаутОтветаПользователя"); ПараметрыЦентраМониторинга = ПолучитьПараметрыЦентраМониторинга(ПараметрыЦентраМониторинга); @@ -535,10 +567,21 @@ И Не ПустаяСтрока(ПараметрыЦентраМониторинга.ВариантДампа) И ДатаЗапуска < ПараметрыЦентраМониторинга.ОкончаниеСбораДампов; Если НачатьСборИОтправкуОтчетовОбОшибках Тогда + + Если НЕ ЗначениеЗаполнено(ПараметрыЦентраМониторинга.ДатаОповещения) Тогда + // Установим дату срабатывания оповещения. + УстановитьПараметрЦентраМониторинга("ДатаОповещения", ДатаЗапуска); + ИначеЕсли ДатаЗапуска > ПараметрыЦентраМониторинга.ДатаОповещения + ПараметрыЦентраМониторинга.ТаймаутОтветаПользователя * 86400 + И ПараметрыЦентраМониторинга.ПринудительнаяОтправкаМинидампов = 2 Тогда + // Истек таймаут, включаем принудительную отправку. + УстановитьПараметрЦентраМониторинга("ПринудительнаяОтправкаМинидампов", 1); + ЦентрМониторинга.ЗаписатьОперациюБизнесСтатистики("ЦентрМониторинга.РегистрацияДампов.ПринудительнаяОтправкаМинидамповВключена", 1); + КонецЕсли; + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда // Для файловой базы сбор и отправка происходят в ПриВыполненииСтандартныхПериодическихПроверокНаСервере. - Иначе - // Проверим, существует ли регламентное задание. + Иначе + // Проверим, существует ли регламентное задание. РегЗадание = ПолучитьРегламентноеЗадание("СборИОтправкаОтчетовОбОшибках", Ложь); Если РегЗадание = Неопределено Тогда РегЗадание = ПолучитьРегламентноеЗадание("СборИОтправкаОтчетовОбОшибках", Истина); @@ -1143,6 +1186,17 @@ JSONСтруктура.Вставить("internal_perf", СекцияТопAPDEXСлужебные["TopApdexTechnology"]); КонецЕсли; КонецЕсли; + + Если Параметры.КонтактнаяИнформацияИзменена + И (Параметры.ЗапросКонтактнойИнформации = 0 + ИЛИ Параметры.ЗапросКонтактнойИнформации = 1) Тогда + КонтактнаяИнформация = Новый Структура; + КонтактнаяИнформация.Вставить("ЗапросКонтактнойИнформации", Параметры.ЗапросКонтактнойИнформации); + КонтактнаяИнформация.Вставить("КонтактнаяИнформация", Параметры.КонтактнаяИнформация); + КонтактнаяИнформация.Вставить("КонтактнаяИнформацияКомментарий", Параметры.КонтактнаяИнформацияКомментарий); + КонтактнаяИнформация.Вставить("ЛогинПортала", Параметры.ЛогинПортала); + JSONСтруктура.Вставить("contacts", КонтактнаяИнформация); + КонецЕсли; Возврат JSONСтруктура; КонецФункции @@ -1169,12 +1223,24 @@ #Область РаботаСHTTPСервисом Функция HTTPСервисОтправитьДанныеСлужебный(Параметры) + + ЗащищенноеСоединение = Неопределено; Если Параметры.ЗащищенноеСоединение Тогда - HTTPСоединение = Новый HTTPСоединение(Параметры.Сервер, Параметры.Порт,,,,Параметры.Таймаут, ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение()); - Иначе - HTTPСоединение = Новый HTTPСоединение(Параметры.Сервер, Параметры.Порт,,,,Параметры.Таймаут); + ЗащищенноеСоединение = ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение(); КонецЕсли; - + + ИнтернетПрокси = Неопределено; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда + МодульПолучениеФайловИзИнтернетаКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернетаКлиентСервер"); + ИнтернетПрокси = МодульПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси("https"); + КонецЕсли; + + HTTPСоединение = Новый HTTPСоединение( + Параметры.Сервер, Параметры.Порт,,, + ИнтернетПрокси, + Параметры.Таймаут, + ЗащищенноеСоединение); + HTTPЗапрос = Новый HTTPЗапрос(Параметры.АдресРесурса); Если Параметры.ТипДанных = "Текст" Тогда @@ -1268,9 +1334,12 @@ ВремяНачала = МодульОценкаПроизводительности.НачатьЗамерВремени(); КонецЕсли; - КаталогДампов = ПолучитьКаталогДампов(); + ТипДампа = ПолучитьПараметрыЦентраМониторинга("ТипДампа"); + КаталогДампов = ПолучитьКаталогДампов(ТипДампа); Если КаталогДампов.Путь <> Неопределено Тогда + // Проверим, нужно ли оповестить Администратора о падении процессов. + ПроверитьНеобходимостьОповещенияОДампах(КаталогДампов.Путь); Если КаталогДампов.УдалятьДампы Тогда ДампыДляУдаления = РегистрыСведений.ДампыПлатформы.ПолучитьДампыДляУдаления(); @@ -1445,6 +1514,12 @@ Параметры.Вставить("РезультатОтправки", ПараметрыЦентраМониторинга.РезультатОтправки); Параметры.Вставить("ОтправлятьФайлыДампов", ПараметрыЦентраМониторинга.ОтправлятьФайлыДампов); Параметры.Вставить("СпрашиватьПередОтправкой", ПараметрыЦентраМониторинга.СпрашиватьПередОтправкой); + // Контактная информация. + Параметры.Вставить("ЗапросКонтактнойИнформации", ПараметрыЦентраМониторинга.ЗапросКонтактнойИнформации); + Параметры.Вставить("КонтактнаяИнформация", ПараметрыЦентраМониторинга.КонтактнаяИнформация); + Параметры.Вставить("КонтактнаяИнформацияКомментарий", ПараметрыЦентраМониторинга.КонтактнаяИнформацияКомментарий); + Параметры.Вставить("ЛогинПортала", ПараметрыЦентраМониторинга.ЛогинПортала); + Параметры.Вставить("КонтактнаяИнформацияИзменена", ПараметрыЦентраМониторинга.КонтактнаяИнформацияИзменена); НачатьТранзакцию(); Попытка @@ -1649,10 +1724,22 @@ ПараметрыКонстанты.Вставить("РезервМестаВыключен", 40); ПараметрыКонстанты.Вставить("РезервМестаВключен", 20); ПараметрыКонстанты.Вставить("ОкончаниеСбораДампов", Дата(2017,1,1)); - // Хранит список компьютеров, где включен сбор полных дампов. + // Хранит список компьютеров, где включен сбор полных, (а иногда - мини) дампов. ПараметрыКонстанты.Вставить("СборПолныхДамповВключен", Новый Соответствие); ПараметрыКонстанты.Вставить("ВариантыДампов", Новый Соответствие); ПараметрыКонстанты.Вставить("ВариантыДамповОдобренные", Новый Соответствие); + // Параметры проверки частоты падения дампов. + ПараметрыКонстанты.Вставить("ГлубинаПроверкиДампов", 604800); + ПараметрыКонстанты.Вставить("МинимальноеКоличествоДампов", 10000); + ПараметрыКонстанты.Вставить("ПроверкаДамповСледующая", Дата(1,1,1)); + ПараметрыКонстанты.Вставить("ПроверкаДамповПериодичность", 14400); + // Определяет тип собираемых дампов. По умолчанию - минидампы. + ПараметрыКонстанты.Вставить("ТипДампа", "0"); // "0" - минидамп, "3" - полный дамп. + + // Принудительная отправка мини дампов. + ПараметрыКонстанты.Вставить("ТаймаутОтветаПользователя", 14); // Сколько дней ждать ответа Администратора, в днях. + ПараметрыКонстанты.Вставить("ПринудительнаяОтправкаМинидампов", 0); // Сколько дней ждать ответа Администратора, в днях. + ПараметрыКонстанты.Вставить("ДатаОповещения", Дата(1,1,1)); // Дата регистрации запроса дампов или оповещения о дампах. // Параметры отправки тестового пакета. @@ -1664,6 +1751,19 @@ // ПараметрыКонстанты.Вставить("ОзнакомительныйПакетОтправлен", Ложь); + // Параметры получения контактной информации. + // + // ЗапросКонтактнойИнформации + // 0 - Пользователь отказался, + // 1 - Пользователь согласился, + // 2 - нет ответа на вопрос, еще никогда не спрашивали. + // 3 - получен запрос на предоставление контактной информации. + ПараметрыКонстанты.Вставить("ЗапросКонтактнойИнформации", 2); + ПараметрыКонстанты.Вставить("КонтактнаяИнформация", ""); + ПараметрыКонстанты.Вставить("КонтактнаяИнформацияКомментарий", ""); + ПараметрыКонстанты.Вставить("ЛогинПортала", ""); + ПараметрыКонстанты.Вставить("КонтактнаяИнформацияИзменена", Ложь); + Возврат ПараметрыКонстанты; КонецФункции @@ -1718,6 +1818,7 @@ ПараметрыОтправки.Вставить("РегистрироватьПроизводительностьТехнологическую", Ложь); ПараметрыОтправки.Вставить("РезультатОтправки", ""); // Результат отправки дампа обнуляем при успешной отправке пакета. ПараметрыОтправки.Вставить("ОзнакомительныйПакетОтправлен", Истина); // Если ответ от сервиса получен, то всегда истина. + ПараметрыОтправки.Вставить("КонтактнаяИнформацияИзменена", Ложь); // Признак изменения контактов всегда снимаем при успешной отправке. СоответствиеПараметров = Новый Структура; СоответствиеПараметров.Вставить("info", "РегистрироватьИнформациюОСистеме"); @@ -1994,6 +2095,8 @@ ИмяФайлаНастроек = "logcfg.xml"; ПутьКаталога = СформироватьПутьСРазделителем(КаталогНастроек.Путь); + СборПолныхДамповВключен = ПолучитьПараметрыЦентраМониторинга("СборПолныхДамповВключен")[ИмяКомпьютера()]; + Файл = Новый Файл(ПутьКаталога + ИмяФайлаНастроек); Если Файл.Существует() Тогда Попытка @@ -2039,14 +2142,12 @@ Если ПараметрыДампов <> Неопределено Тогда КаталогДампов.Путь = СформироватьПутьСРазделителем(ПараметрыДампов.Location); - Если ТипДампа = "0" И (ПараметрыДампов.type = "0" ИЛИ СтрНайти(КаталогДампов.Путь, "80af5716-b134-4b1c-a38d-4658d1ac4196") > 0) Тогда + Если СтрНайти(КаталогДампов.Путь, "80af5716-b134-4b1c-a38d-4658d1ac4196") > 0 И НЕ СборПолныхДамповВключен = Истина Тогда КаталогДампов.УдалятьДампы = Истина; КонецЕсли; ЧтениеXML.Закрыть(); - Если ПараметрыДампов.type <> "3" И ТипДампа = "3" Тогда - СоздатьСекциюСбораДампов(Файл, ЧтениеXML, КаталогДампов, ТипДампа); - ИначеЕсли ПараметрыДампов.type = "3" И ПрекратитьСборПолных Тогда + Если ПараметрыДампов.type <> ТипДампа Тогда СоздатьСекциюСбораДампов(Файл, ЧтениеXML, КаталогДампов, ТипДампа); ИначеЕсли СтрНайти(КаталогДампов.Путь, "80af5716-b134-4b1c-a38d-4658d1ac4196") > 0 Тогда Если НЕ ПараметрыДампов.Свойство("externaldump") Тогда @@ -2062,7 +2163,7 @@ Иначе КаталогДампов.Путь = СоздатьФайлНастроекСбораДампов(ПутьКаталога, ТипДампа); - Если ТипДампа = "0" Тогда + Если НЕ СборПолныхДамповВключен Тогда КаталогДампов.УдалятьДампы = Истина; КонецЕсли; Если КаталогДампов.Путь = Неопределено Тогда @@ -2484,6 +2585,7 @@ // Получение данных об использовании ролей. Запрос = Новый Запрос(ТекстЗапросаИспользованияРолей()); Запрос.УстановитьПараметр("ПустойУИД", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + Запрос.УстановитьПараметр("ТекущаяДата", НачалоДня(ТекущаяДатаСеанса())); РезультатПакет = Запрос.ВыполнитьПакет(); // Формирование структуры: роли в разрезе профилей групп доступа. @@ -2493,7 +2595,7 @@ ДополнительныеПараметры = Новый Соответствие; ДополнительныеПараметры.Вставить("КолонкиИндекса", КолонкиИндекса); - РолиПрофилей = РезультатПакет[7].Выгрузить(); + РолиПрофилей = РезультатПакет[8].Выгрузить(); РолиПрофилей.Колонки.Добавить("ПрофильУИД", Новый ОписаниеТипов("Строка")); Для Каждого Строка Из РолиПрофилей Цикл Строка.ПрофильУИД = Строка(Строка.Профиль.УникальныйИдентификатор()); @@ -2511,7 +2613,7 @@ ДополнительныеПараметры = Новый Соответствие; ДополнительныеПараметры.Вставить("КолонкиИндекса", КолонкиИндекса); - ДанныеПрофилей = РезультатПакет[6].Выгрузить(); + ДанныеПрофилей = РезультатПакет[7].Выгрузить(); ДанныеПрофилей.Колонки.Добавить("ПрофильУИД", Новый ОписаниеТипов("Строка")); ДанныеПрофилей.Колонки.Добавить("ИдентификаторПоставляемыхДанныхСтрока", Новый ОписаниеТипов("Строка")); Для Каждого Строка Из ДанныеПрофилей Цикл @@ -2532,6 +2634,34 @@ Возврат "ВЫБРАТЬ + | СоставыГруппПользователей.ГруппаПользователей КАК ГруппаПользователей, + | СведенияОПользователях.Пользователь КАК Пользователь, + | ВЫБОР + | КОГДА РАЗНОСТЬДАТ(СведенияОПользователях.ДатаПоследнейАктивности, &ТекущаяДата, ДЕНЬ) <= 7 + | ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ КАК АктивныхЗаНеделю, + | ВЫБОР + | КОГДА РАЗНОСТЬДАТ(СведенияОПользователях.ДатаПоследнейАктивности, &ТекущаяДата, ДЕНЬ) <= 30 + | ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ КАК АктивныхЗаМесяц + |ПОМЕСТИТЬ ВТСоставыГруппИАктивность + |ИЗ + | РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОПользователях КАК СведенияОПользователях + | ПО СоставыГруппПользователей.Пользователь = СведенияОПользователях.Пользователь + |ГДЕ + | СоставыГруппПользователей.Используется + | И НЕ СоставыГруппПользователей.Пользователь.ИдентификаторПользователяИБ = &ПустойУИД + | + |ИНДЕКСИРОВАТЬ ПО + | ГруппаПользователей, + | Пользователь + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ | ПрофилиГруппДоступа.Ссылка КАК Профиль, | ПрофилиГруппДоступа.ИдентификаторПоставляемыхДанных КАК ИдентификаторПоставляемыхДанных, | ПрофилиГруппДоступа.ПоставляемыйПрофильИзменен КАК ПоставляемыйПрофильИзменен, @@ -2541,25 +2671,27 @@ | ИЛИ ГруппыДоступаПользователи.Ссылка.Пользователь = ЗНАЧЕНИЕ(Справочник.ВнешниеПользователи.ПустаяСсылка) | ИЛИ ГруппыДоступаПользователи.Ссылка.Пользователь = НЕОПРЕДЕЛЕНО КАК ОбщаяГруппаДоступа, | ГруппыДоступаПользователи.Пользователь КАК ПользовательТЧ, - | СоставыГруппПользователей.Пользователь КАК ПользовательРС + | СоставыГруппПользователей.Пользователь КАК ПользовательРС, + | СоставыГруппПользователей.АктивныхЗаНеделю КАК АктивныхЗаНеделю, + | СоставыГруппПользователей.АктивныхЗаМесяц КАК АктивныхЗаМесяц |ПОМЕСТИТЬ ВТДанныеПрофилей |ИЗ | Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТСоставыГруппИАктивность КАК СоставыГруппПользователей | ПО ГруппыДоступаПользователи.Пользователь = СоставыГруппПользователей.ГруппаПользователей | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа КАК ПрофилиГруппДоступа | ПО (ПрофилиГруппДоступа.Ссылка = ГруппыДоступаПользователи.Ссылка.Профиль) | И (НЕ ГруппыДоступаПользователи.Ссылка.Профиль.ПометкаУдаления) |ГДЕ - | СоставыГруппПользователей.Используется - | И НЕ ГруппыДоступаПользователи.Ссылка.Профиль.ПометкаУдаления - | И НЕ СоставыГруппПользователей.Пользователь.ИдентификаторПользователяИБ = &ПустойУИД + | НЕ ГруппыДоступаПользователи.Ссылка.Профиль.ПометкаУдаления | |СГРУППИРОВАТЬ ПО | ПрофилиГруппДоступа.Ссылка, | ПрофилиГруппДоступа.Наименование, | ГруппыДоступаПользователи.Пользователь, | СоставыГруппПользователей.Пользователь, + | СоставыГруппПользователей.АктивныхЗаНеделю, + | СоставыГруппПользователей.АктивныхЗаМесяц, | ГруппыДоступаПользователи.Ссылка, | ГруппыДоступаПользователи.Ссылка.Пользователь = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) | ИЛИ ГруппыДоступаПользователи.Ссылка.Пользователь = ЗНАЧЕНИЕ(Справочник.ВнешниеПользователи.ПустаяСсылка) @@ -2679,12 +2811,16 @@ | КОГДА Вложенный.ПользовательРС ССЫЛКА Справочник.ВнешниеПользователи | ТОГДА 1 | ИНАЧЕ 0 - | КОНЕЦ) КАК ВнешниеПользователи + | КОНЕЦ) КАК ВнешниеПользователи, + | СУММА(Вложенный.АктивныхЗаНеделю) КАК АктивныхЗаНеделю, + | СУММА(Вложенный.АктивныхЗаМесяц) КАК АктивныхЗаМесяц |ПОМЕСТИТЬ ПользователиПрофиля |ИЗ | (ВЫБРАТЬ | ВТДанныеПрофилей.Профиль КАК Профиль, - | ВТДанныеПрофилей.ПользовательРС КАК ПользовательРС + | ВТДанныеПрофилей.ПользовательРС КАК ПользовательРС, + | СУММА(ВТДанныеПрофилей.АктивныхЗаНеделю) КАК АктивныхЗаНеделю, + | СУММА(ВТДанныеПрофилей.АктивныхЗаМесяц) КАК АктивныхЗаМесяц | ИЗ | ВТДанныеПрофилей КАК ВТДанныеПрофилей | @@ -2711,6 +2847,8 @@ | ЕСТЬNULL(ГруппыПользователей.ГруппВнешнихПользователей, 0) КАК ГруппВнешнихПользователей, | ЕСТЬNULL(ПользователиПрофиля.Пользователи, 0) КАК Пользователи, | ЕСТЬNULL(ПользователиПрофиля.ВнешниеПользователи, 0) КАК ВнешниеПользователи, + | ЕСТЬNULL(ПользователиПрофиля.АктивныхЗаНеделю, 0) КАК АктивныхЗаНеделю, + | ЕСТЬNULL(ПользователиПрофиля.АктивныхЗаМесяц, 0) КАК АктивныхЗаМесяц, | ЕСТЬNULL(ВидыДоступа.ВсегоВидовДоступа, 0) КАК ВсегоВидовДоступа, | ЕСТЬNULL(ВидыДоступа.ПредустановленныхВидовДоступа, 0) КАК ПредустановленныхВидовДоступа |ИЗ @@ -2820,8 +2958,7 @@ ХешПользователя = Параметры["ИнформацияКлиента"]["ПараметрыКлиента"]["ХешПользователя"]; - ИмяОперацииСтатистики = "СтатистикаКлиента.АктивныхПользователей"; - ЦентрМониторинга.ЗаписатьОперациюБизнесСтатистикиЧас(ИмяОперацииСтатистики, ХешПользователя, 1); + ЗаписатьАктивностьПользователя(ХешПользователя); ИмяОперацииСтатистики = "СтатистикаКлиента.АктивныхОкон"; Значение = Параметры["ИнформацияКлиента"]["АктивныхОкон"]; @@ -2829,6 +2966,11 @@ КонецПроцедуры +Процедура ЗаписатьАктивностьПользователя(ХешПользователя) + ИмяОперацииСтатистики = "СтатистикаКлиента.АктивныхПользователей"; + ЦентрМониторинга.ЗаписатьОперациюБизнесСтатистикиЧас(ИмяОперацииСтатистики, ХешПользователя, 1); +КонецПроцедуры + Процедура ЗаписатьДанныеСКлиента(Параметры) ТекДата = ТекущаяУниверсальнаяДата(); @@ -2988,6 +3130,7 @@ ПолучаемыеПараметры.Вставить("БазовыеПроверкиПройдены"); ПолучаемыеПараметры.Вставить("ВариантыДампов"); ПолучаемыеПараметры.Вставить("ВариантДампа"); + ПолучаемыеПараметры.Вставить("ТипДампа"); ПолучаемыеПараметры.Вставить("СпрашиватьПередОтправкой"); ПолучаемыеПараметры.Вставить("ИнформацияОДампах"); @@ -3001,6 +3144,7 @@ И НЕ ПустаяСтрока(ПараметрыЦентраМониторинга.ВариантДампа) И ЕстьДампы И ПараметрыЦентраМониторинга.СпрашиватьПередОтправкой + И ПараметрыЦентраМониторинга.ТипДампа = "3" И Не ПустаяСтрока(ПараметрыЦентраМониторинга.ИнформацияОДампах) И ПараметрыЦентраМониторинга.БазовыеПроверкиПройдены; @@ -3022,19 +3166,21 @@ ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.СборИОтправкаОтчетовОбОшибках); ПараметрыСбораИОтправкиДампов = ПолучитьПараметрыЦентраМониторинга(); + ВариантДампа = ПараметрыСбораИОтправкиДампов.ВариантДампа; ИмяКомпьютера = ИмяКомпьютера(); + ИзмененТипДампа = Ложь; // Проверим, разрешен ли сбор дампов. Если ПараметрыСбораИОтправкиДампов.ОтправлятьФайлыДампов = 0 Тогда УстановитьПривилегированныйРежим(Истина); - УстановитьПараметрЦентраМониторинга("РезультатОтправки", Нстр("ru = 'Пользователь отказал в предоставлении полных дампов.'")); + УстановитьПараметрЦентраМониторинга("РезультатОтправки", Нстр("ru = 'Пользователь отказал в предоставлении дампов.'")); УстановитьПривилегированныйРежим(Ложь); ПрекратитьСборПолныхДампов(); Возврат; КонецЕсли; // Проверим, запрашивали ли мы вообще сбор полных дампов. - Если ПустаяСтрока(ПараметрыСбораИОтправкиДампов.ВариантДампа) Тогда + Если ПустаяСтрока(ВариантДампа) Тогда Возврат; КонецЕсли; @@ -3052,9 +3198,29 @@ Возврат; КонецЕсли; + ТребованиеДампа = ДампТребуется(ВариантДампа, ВариантДампа); + // Если дамп не требуется - выключаем сбор. + Если НЕ ТребованиеДампа.Требуется Тогда + ПрекратитьСборПолныхДампов(); + Возврат; + Иначе + // Если тип собираемого дампа не совпадает с требуемым - меняем тип дампа. + // Нужно собирать минидамп или полный и пользователь согласовал. + Если ТребованиеДампа.ТипДампа <> ПараметрыСбораИОтправкиДампов.ТипДампа + И (ТребованиеДампа.ТипДампа = "0" + ИЛИ ПараметрыСбораИОтправкиДампов.ОтправлятьФайлыДампов = 1 + И ТребованиеДампа.ТипДампа = "3") Тогда + УстановитьПривилегированныйРежим(Истина); + УстановитьПараметрЦентраМониторинга("ТипДампа", ТребованиеДампа.ТипДампа); + ПараметрыСбораИОтправкиДампов.ТипДампа = ТребованиеДампа.ТипДампа; + УстановитьПривилегированныйРежим(Ложь); + ИзмененТипДампа = Истина; + КонецЕсли; + КонецЕсли; + // Проверим, сможем ли мы изменить logcfg при необходимости и получим каталог хранения дампов // Заодно проверим, включен ли сбор дампов. - ТипДампа = ?(ПараметрыСбораИОтправкиДампов.ОтправлятьФайлыДампов = 2,"0","3"); + ТипДампа = ПараметрыСбораИОтправкиДампов.ТипДампа; КаталогДампов = ПолучитьКаталогДампов(ТипДампа); ПараметрыСбораИОтправкиДампов.Вставить("КаталогДампов", КаталогДампов.Путь); Если КаталогДампов.Путь = Неопределено Тогда @@ -3064,7 +3230,9 @@ ПрекратитьСборПолныхДампов(); Возврат; Иначе - Если ТипДампа = "3" Тогда + Если ПараметрыСбораИОтправкиДампов.ОтправлятьФайлыДампов = 1 + ИЛИ ПараметрыСбораИОтправкиДампов.ПринудительнаяОтправкаМинидампов = 1 + И ПараметрыСбораИОтправкиДампов.ТипДампа = "0" Тогда ПараметрыСбораИОтправкиДампов.СборПолныхДамповВключен.Вставить(ИмяКомпьютера, Истина); КонецЕсли; КонецЕсли; @@ -3079,20 +3247,38 @@ Возврат; КонецЕсли; БукваДиска = Лев(КаталогДампов.Путь, ПозицияРазделителя-1); - РезультатЗамера = СвободноеМестоНаДиске(БукваДиска, СКлиентаНаСервере); - Если НЕ РезультатЗамера.Успешно Тогда - УстановитьПривилегированныйРежим(Истина); - УстановитьПараметрЦентраМониторинга("РезультатОтправки", РезультатЗамера.ОписаниеОшибки); - УстановитьПривилегированныйРежим(Ложь); - ПрекратитьСборПолныхДампов(); - Возврат; - КонецЕсли; - + // Если сбор включен. Если ПараметрыСбораИОтправкиДампов.СборПолныхДамповВключен[ИмяКомпьютера] = Истина Тогда - // Проверим, достаточно ли свободного места. - Если РезультатЗамера.Значение/1024 < ПараметрыСбораИОтправкиДампов.РезервМестаВключен Тогда + Если ПустаяСтрока(ИдентификаторЗадания) Тогда + ИдентификаторЗадания = "ВыполнениеНаСервере"; + КонецЕсли; + + // Если изменен тип дампа, то надо очистить каталог дампов. + Если ИзмененТипДампа Тогда + ФайлыУдалены(КаталогДампов.Путь); + Иначе + // Собираем дампы. + СобратьДампы(ПараметрыСбораИОтправкиДампов); + КонецЕсли; + + // Отправляем дампы. + ОтправитьДампы(ПараметрыСбораИОтправкиДампов); + + РезультатЗамера = СвободноеМестоНаДиске(БукваДиска, СКлиентаНаСервере); + Если НЕ РезультатЗамера.Успешно Тогда + УстановитьПривилегированныйРежим(Истина); + УстановитьПараметрЦентраМониторинга("РезультатОтправки", РезультатЗамера.ОписаниеОшибки); + УстановитьПривилегированныйРежим(Ложь); + ПрекратитьСборПолныхДампов(); + Возврат; + КонецЕсли; + + // Проверим, достаточно ли свободного места для сбора полных дампов. + // Проверка идет после сбора и отправки, так как в ходе сбора и отправки дампов место освободится. + Если РезультатЗамера.Значение/1024 < ПараметрыСбораИОтправкиДампов.РезервМестаВключен + И ТипДампа = "3" Тогда УстановитьПривилегированныйРежим(Истина); УстановитьПараметрЦентраМониторинга("РезультатОтправки", НСтр("ru = 'Недостаточно свободного места для хранения дампов. Сбор дампов будет отключен.'")); УстановитьПривилегированныйРежим(Ложь); @@ -3100,16 +3286,6 @@ Возврат; КонецЕсли; - Если ПустаяСтрока(ИдентификаторЗадания) Тогда - ИдентификаторЗадания = "ВыполнениеНаСервере"; - КонецЕсли; - - // Собираем дампы. - СобратьДампы(ПараметрыСбораИОтправкиДампов); - - // Отправляем дампы. - ОтправитьДампы(ПараметрыСбораИОтправкиДампов); - СборПолныхДамповВключен = ПолучитьПараметрыЦентраМониторинга("СборПолныхДамповВключен"); СборПолныхДамповВключен.Вставить(ИмяКомпьютера, Истина); УстановитьПривилегированныйРежим(Истина); @@ -3118,8 +3294,18 @@ Иначе // Если сбор выключен. - // Проверим, достаточно ли свободного места. - Если РезультатЗамера.Значение/1024 < ПараметрыСбораИОтправкиДампов.РезервМестаВыключен Тогда + РезультатЗамера = СвободноеМестоНаДиске(БукваДиска, СКлиентаНаСервере); + Если НЕ РезультатЗамера.Успешно Тогда + УстановитьПривилегированныйРежим(Истина); + УстановитьПараметрЦентраМониторинга("РезультатОтправки", РезультатЗамера.ОписаниеОшибки); + УстановитьПривилегированныйРежим(Ложь); + ПрекратитьСборПолныхДампов(); + Возврат; + КонецЕсли; + + // Проверим, достаточно ли свободного места для сбора полных дампов. + Если РезультатЗамера.Значение/1024 < ПараметрыСбораИОтправкиДампов.РезервМестаВыключен + И ТипДампа = "3" Тогда УстановитьПривилегированныйРежим(Истина); УстановитьПараметрЦентраМониторинга("РезультатОтправки", НСтр("ru = 'Недостаточно свободного места для сбора дампов.'")); УстановитьПривилегированныйРежим(Ложь); @@ -3135,12 +3321,8 @@ КонецЕсли; - // Если запрошенный дамп больше не требуется, отправку необходимо прекратить. - Если НЕ ДампТребуется(ПараметрыСбораИОтправкиДампов.ВариантДампа, "None") Тогда - ПрекратитьСборПолныхДампов(); - КонецЕсли; - - УдалитьУстаревшиеФайлы(ПараметрыСбораИОтправкиДампов.ВариантДампа, КаталогДампов.Путь); + // Удаляет устаревшие файлы дампов, кроме запрошенных. + УдалитьУстаревшиеФайлы(ВариантДампа, КаталогДампов.Путь); КонецПроцедуры @@ -3149,7 +3331,7 @@ // Получаем каталог хранения дампов. КаталогДампов = Параметры.КаталогДампов; - ИмяСвойства = ?(Параметры.СпрашиватьПередОтправкой, "ВариантыДампов", "ВариантыДамповОдобренные"); + ИмяСвойства = ?(Параметры.СпрашиватьПередОтправкой И Параметры.ТипДампа = "3", "ВариантыДампов", "ВариантыДамповОдобренные"); Если НЕ Параметры.Свойство(ИмяСвойства) Тогда Параметры.Вставить(ИмяСвойства, Новый Соответствие); @@ -3174,7 +3356,8 @@ ВариантДампа = СтруктураДампа.Процесс + "_" + СтруктураДампа.ВерсияПлатформы + "_" + СтруктураДампа.Смещение; // Если дамп с ненулевым смещением, то надо проверить, стоит ли его отправлять и соответствует ли он запрошенному. - Если ДампТребуется(ВариантДампа, Параметры.ВариантДампа) Тогда + ТребованиеДампа = ДампТребуется(ВариантДампа, Параметры.ВариантДампа, Параметры.ТипДампа); + Если ТребованиеДампа.Требуется Тогда ИмяАрхива = КаталогДампов + ВариантДампа + ".zip"; @@ -3219,7 +3402,7 @@ Параметры.Вставить("ВариантыДамповОдобренные", ПолучитьПараметрыЦентраМониторинга("ВариантыДамповОдобренные")); - Если Параметры.СпрашиватьПередОтправкой Тогда + Если Параметры.СпрашиватьПередОтправкой И Параметры.ТипДампа = "3" Тогда Если Параметры.Свойство("ВариантыДампов") И Параметры.ВариантыДампов.Количество() Тогда @@ -3236,7 +3419,8 @@ ДанныеДампа = Запись.Значение; // Спросим у сервиса ЦМ нужен ли такой дамп. - Если ДампТребуется(ВариантДампа, Параметры.ВариантДампа) Тогда + ТребованиеДампа = ДампТребуется(ВариантДампа, Параметры.ВариантДампа, Параметры.ТипДампа); + Если ТребованиеДампа.Требуется Тогда ВсегоШтук = ВсегоШтук + 1; ОбщийОбъем = ОбщийОбъем + ДанныеДампа.Размер; Иначе @@ -3274,7 +3458,7 @@ Если ИмяКомпьютера <> Запись.Значение.ИмяКомпьютера Тогда Продолжить; КонецЕсли; - Если ОтправкаДампа(Запись.Ключ, Запись.Значение, ТребуемыйДамп) Тогда + Если ОтправкаДампа(Запись.Ключ, Запись.Значение, ТребуемыйДамп, Параметры.ТипДампа) Тогда МассивОтправленных.Добавить(Запись.Ключ); КонецЕсли; КонецЦикла; @@ -3304,6 +3488,8 @@ НовыеПараметры.Вставить("ВариантыДампов", Новый Соответствие); НовыеПараметры.Вставить("ВариантыДамповОдобренные", Новый Соответствие); НовыеПараметры.Вставить("ИнформацияОДампах", ""); + НовыеПараметры.Вставить("ТипДампа", "0"); + НовыеПараметры.Вставить("ДатаОповещения", Дата(1,1,1)); НовыеПараметры.Вставить("БазовыеПроверкиПройдены", Ложь); Попытка @@ -3361,94 +3547,135 @@ Функция СвободноеМестоНаДиске(БукваДиска, СКлиентаНаСервере) - РезультатЗапроса = Новый Структура("Значение, Успешно, ОписаниеОшибки", 0, Истина, ""); - - КоманднаяСтрока = "typeperf ""\LogicalDisk("+БукваДиска+")\Free Megabytes"" -sc 1"; - ПараметрыЗапускаПрограммы = Новый Структура; - ПараметрыЗапускаПрограммы.Вставить("ТекущийКаталог", ""); - ПараметрыЗапускаПрограммы.Вставить("ДождатьсяЗавершения", Истина); - ПараметрыЗапускаПрограммы.Вставить("ПолучитьПотокВывода", Истина); - ПараметрыЗапускаПрограммы.Вставить("ПолучитьПотокОшибок", Истина); - ПараметрыЗапускаПрограммы.Вставить("СКлиентаНаСервере", СКлиентаНаСервере); - - РезультатЗапуска = ЗапуститьПрограмму(КоманднаяСтрока, ПараметрыЗапускаПрограммы, "437"); - + РезультатЗапроса = Новый Структура; + РезультатЗапроса.Вставить("Значение", 0); + РезультатЗапроса.Вставить("Успешно", Истина); + РезультатЗапроса.Вставить("ОписаниеОшибки", ""); + + КоманднаяСтрока = "typeperf ""\LogicalDisk(" + БукваДиска + ")\Free Megabytes"" -sc 1"; + + ПараметрыЗапускаПрограммы = ОбщегоНазначенияКлиентСервер.ПараметрыЗапускаПрограммы(); + ПараметрыЗапускаПрограммы.ДождатьсяЗавершения = Истина; + ПараметрыЗапускаПрограммы.ПолучитьПотокВывода = Истина; + ПараметрыЗапускаПрограммы.ПолучитьПотокОшибок = Истина; + ПараметрыЗапускаПрограммы.Кодировка = "437"; + + РезультатЗапуска = ОбщегоНазначенияКлиентСервер.ЗапуститьПрограмму(КоманднаяСтрока, ПараметрыЗапускаПрограммы); + ПотокОшибок = РезультатЗапуска.ПотокОшибок; ПотокВывода = РезультатЗапуска.ПотокВывода; Если ЗначениеЗаполнено(ПотокОшибок) Тогда РезультатЗапроса.Успешно = Ложь; - РезультатЗапроса.ОписаниеОшибки = НСтр("ru='Ошибка при выполнении команды typeperf'"); + РезультатЗапроса.ОписаниеОшибки = НСтр("ru='Ошибка при выполнении команды typeperf'"); Иначе МассивСтрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПотокВывода, Символы.ПС, Истина, Истина); - Если МассивСтрок.Количество()>=2 Тогда + Если МассивСтрок.Количество() >= 2 Тогда ИскомаяСтрока = МассивСтрок[1]; МассивПодстрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИскомаяСтрока, ",", Истина, Истина); - Если МассивПодстрок.Количество()>=2 Тогда + Если МассивПодстрок.Количество() >= 2 Тогда ИскомаяСтрока = МассивПодстрок[1]; ИскомаяСтрока = СтрЗаменить(ИскомаяСтрока,"""",""); Попытка РезультатЗапроса.Значение = Число(ИскомаяСтрока); + ЦентрМониторинга.ЗаписатьОперациюБизнесСтатистикиСутки( + "СтатистикаКлиента.ИнформацияОСистеме.СвободноНаДиске." + БукваДиска, "", РезультатЗапроса.Значение, Истина); Исключение РезультатЗапроса.Успешно = Ложь; - РезультатЗапроса.ОписаниеОшибки = ОписаниеОшибки(); + РезультатЗапроса.ОписаниеОшибки = ОписаниеОшибки(); КонецПопытки; КонецЕсли; Иначе РезультатЗапроса.Успешно = Ложь; - РезультатЗапроса.ОписаниеОшибки = НСтр("ru='Не удалось разобрать результат typeperf'"); - КонецЕсли; + РезультатЗапроса.ОписаниеОшибки = НСтр("ru='Не удалось разобрать результат typeperf'"); + КонецЕсли; КонецЕсли; Возврат РезультатЗапроса; КонецФункции -Функция ДампТребуется(ВариантДампа, ТребуемыйДамп) +// Возвращает необходимость сбора дампа. +// Если тип дампа указан, возвращает только необходимость. +// Если тип дампа не указан, возвращает необходимость и тип. +// В случае недоступности сервиса собираем полные. +// +Функция ДампТребуется(ВариантДампа, ЗапрошенныйДамп, ТипДампа = "") - Результат = Ложь; + Результат = Новый Структура("Требуется, ТипДампа", Ложь, ТипДампа); + ТребуемыеДампы = ТребуемыеДампы(ВариантДампа); - // Обратимся к http-сервису. - Параметры = ПолучитьПараметрыСервисаОтправки(); - - // Узнаем, актуален ли дамп. - АдресРесурса = Параметры.АдресРесурсаДляДампов; - Если Прав(АдресРесурса, 1) <> "/" Тогда - АдресРесурса = АдресРесурса + "/"; - КонецЕсли; - - GUID = Строка(Параметры.ИдентификаторИнформационнойБазы); - АдресРесурса = АдресРесурса + "IsDumpNeeded" + "/" + GUID + "/" + ВариантДампа; - - ПараметрыHTTP = Новый Структура; - ПараметрыHTTP.Вставить("Сервер", Параметры.Сервер); - ПараметрыHTTP.Вставить("АдресРесурса", АдресРесурса); - ПараметрыHTTP.Вставить("Данные", ""); - ПараметрыHTTP.Вставить("Порт", Параметры.Порт); - ПараметрыHTTP.Вставить("ЗащищенноеСоединение", Параметры.ЗащищенноеСоединение); - ПараметрыHTTP.Вставить("Метод", "GET"); - ПараметрыHTTP.Вставить("ТипДанных", ""); - ПараметрыHTTP.Вставить("Таймаут", 60); - - HTTPОтвет = HTTPСервисОтправитьДанныеСлужебный(ПараметрыHTTP); - - Если HTTPОтвет.КодСостояния = 200 Тогда - Результат = HTTPОтвет.Тело = "true"; - // Эта ветка для проверки востребованности запрошенного варианта дампа. - // Если ответа от веб-сервиса нет, то продолжаем сбор. - ИначеЕсли ТребуемыйДамп = "None" Тогда - Результат = Истина; - // Эта ветка для проверки востребованности собранного варианта дампа. - // Если ответа от веб-сервиса нет, то собранный дамп должен быть равен запрошенному. + // Если запрос не удалось выполнить, будем считать, что дамп требуется в том случае, + // когда он совпадает с с требуемым дампом. + Если НЕ ТребуемыеДампы.ЗапросУспешен Тогда + Если ВариантДампа = ЗапрошенныйДамп Тогда + Результат.Требуется = Истина; + Результат.ТипДампа = "3"; + КонецЕсли; Иначе - Результат = ВариантДампа = ТребуемыйДамп; - КонецЕсли; - + // Проверка при сборе/отправке. + Если Не ПустаяСтрока(ТипДампа) Тогда + Если ТипДампа = "0" И ТребуемыеДампы.Минидамп Тогда + Результат.Требуется = Истина; + ИначеЕсли ТипДампа = "3" И ТребуемыеДампы.ПолныйДамп Тогда + Результат.Требуется = Истина; + КонецЕсли; + Иначе + // На случай, когда надо определить тип собираемого дампа. + Если ТребуемыеДампы.Минидамп Тогда + Результат.Требуется = Истина; + Результат.ТипДампа = "0"; + ИначеЕсли ТребуемыеДампы.ПолныйДамп Тогда + Результат.Требуется = Истина; + Результат.ТипДампа = "3"; + КонецЕсли; + КонецЕсли; + КонецЕсли; + Возврат Результат; КонецФункции -Функция МожноЗагружатьДамп(ВариантДампа) +// Возвращает требуемые типы дампов по варианту дампа. +// +Функция ТребуемыеДампы(ВариантДампа) + Результат = Новый Структура("ЗапросУспешен, Минидамп, ПолныйДамп", Ложь, Ложь, Ложь); + + // Обратимся к http-сервису. + Параметры = ПолучитьПараметрыСервисаОтправки(); + + // Узнаем, актуален ли дамп. + АдресРесурса = Параметры.АдресРесурсаДляДампов; + Если Прав(АдресРесурса, 1) <> "/" Тогда + АдресРесурса = АдресРесурса + "/"; + КонецЕсли; + + GUID = Строка(Параметры.ИдентификаторИнформационнойБазы); + АдресРесурса = АдресРесурса + "IsDumpNeeded" + "/" + GUID + "/" + ВариантДампа + "/json"; + + ПараметрыHTTP = Новый Структура; + ПараметрыHTTP.Вставить("Сервер", Параметры.Сервер); + ПараметрыHTTP.Вставить("АдресРесурса", АдресРесурса); + ПараметрыHTTP.Вставить("Данные", ""); + ПараметрыHTTP.Вставить("Порт", Параметры.Порт); + ПараметрыHTTP.Вставить("ЗащищенноеСоединение", Параметры.ЗащищенноеСоединение); + ПараметрыHTTP.Вставить("Метод", "GET"); + ПараметрыHTTP.Вставить("ТипДанных", ""); + ПараметрыHTTP.Вставить("Таймаут", 60); + + HTTPОтвет = HTTPСервисОтправитьДанныеСлужебный(ПараметрыHTTP); + + Если HTTPОтвет.КодСостояния = 200 Тогда + Ответ = СтрокаJSONВСтруктуру(HTTPОтвет.Тело); + Результат.Минидамп = Ответ.MiniDump; + Результат.ПолныйДамп = Ответ.FullDump; + Результат.ЗапросУспешен = Истина; + КонецЕсли; + + Возврат Результат; +КонецФункции + +Функция МожноЗагружатьДамп(ВариантДампа, ТипДампа) Результат = Ложь; @@ -3462,7 +3689,7 @@ КонецЕсли; GUID = Строка(Параметры.ИдентификаторИнформационнойБазы); - АдресРесурса = АдресРесурса + "CanLoadDump" + "/" + GUID + "/" + ВариантДампа; + АдресРесурса = АдресРесурса + "CanLoadDump" + "/" + GUID + "/" + ВариантДампа + "/" + ТипДампа; ПараметрыHTTP = Новый Структура; ПараметрыHTTP.Вставить("Сервер", Параметры.Сервер); @@ -3484,7 +3711,7 @@ КонецФункции -Функция ОтправкаДампа(ВариантДампа, Данные, ТребуемыйДамп) +Функция ОтправкаДампа(ВариантДампа, Данные, ТребуемыйДамп, ТипДампа) РезультатОтправки = Ложь; @@ -3497,13 +3724,14 @@ КонецЕсли; // Проверим, актуален ли еще дамп. Если нет - удалим. - Если Не ДампТребуется(ВариантДампа, ТребуемыйДамп) Тогда + ТребованиеДампа = ДампТребуется(ВариантДампа, ТребуемыйДамп, ТипДампа); + Если Не ТребованиеДампа.Требуется Тогда ФайлыУдалены(Данные.ПолноеИмя); Возврат Истина; КонецЕсли; // Проверим, разрешит ли нам сервер загружать дамп, возможно нужно подождать. - Если Не МожноЗагружатьДамп(ВариантДампа) Тогда + Если Не МожноЗагружатьДамп(ВариантДампа, ТипДампа) Тогда Возврат Ложь; КонецЕсли; @@ -3526,7 +3754,7 @@ АдресРесурса = АдресРесурса + "/"; КонецЕсли; - АдресРесурса = АдресРесурса + "LoadDump" + "/" + GUID + "/" + ВариантДампа + "/" + HASH; + АдресРесурса = АдресРесурса + "LoadDump" + "/" + GUID + "/" + ВариантДампа + "/" + HASH + "/" + ТипДампа; ПараметрыHTTP = Новый Структура; ПараметрыHTTP.Вставить("Сервер", Параметры.Сервер); @@ -3562,207 +3790,93 @@ Возврат Истина; КонецФункции -#КонецОбласти - -#Область ЗапускПрограмм - -// Возвращает структуру параметров для см. процедуру ЗапуститьПрограмму. -// -// Возвращаемое значение: -// ТекущийКаталог - Строка - Задает текущий каталог запускаемого приложения. -// ДождатьсяЗавершения - Булево - Истина - дожидаться завершения запущенного приложения -// перед продолжением работы. -// ПолучитьПотокВывода - Булево - Истина - результат, направленный в поток stdout, -// если не указан ДождатьсяЗавершения - игнорируется. -// ПолучитьПотокОшибок - Булево - Истина - ошибки, направленные в поток stderr, -// если не указан ДождатьсяЗавершения - игнорируется. -Функция ПараметрыЗапускаПрограммы() +Процедура ПроверитьНеобходимостьОповещенияОДампах(ПутьККаталогуДампов) - Параметры = Новый Структура; - Параметры.Вставить("ТекущийКаталог", ""); - Параметры.Вставить("СКлиентаНаСервере", Ложь); - Параметры.Вставить("ДождатьсяЗавершения", Ложь); - Параметры.Вставить("ПолучитьПотокВывода", Ложь); - Параметры.Вставить("ПолучитьПотокОшибок", Ложь); + ПараметрыЦентраМониторинга = Новый Структура(); + ПараметрыЦентраМониторинга.Вставить("ОтправлятьФайлыДампов"); + ПараметрыЦентраМониторинга.Вставить("ВариантДампа"); + ПараметрыЦентраМониторинга.Вставить("ОкончаниеСбораДампов"); + ПараметрыЦентраМониторинга.Вставить("ГлубинаПроверкиДампов"); + ПараметрыЦентраМониторинга.Вставить("МинимальноеКоличествоДампов"); + ПараметрыЦентраМониторинга.Вставить("ПроверкаДамповСледующая"); + ПараметрыЦентраМониторинга.Вставить("ПроверкаДамповПериодичность"); + ПараметрыЦентраМониторинга.Вставить("ТипДампа"); + ПараметрыЦентраМониторинга.Вставить("РезервМестаВыключен"); + ПараметрыЦентраМониторинга = ПолучитьПараметрыЦентраМониторинга(ПараметрыЦентраМониторинга); - Возврат Параметры; - -КонецФункции - -// Запускает внешнюю программу в соответствии с параметрами запуска. -// -// Параметры: -// СтрокаКоманды - Строка - Командная строка для запуска программы. -// ПараметрыЗапускаПрограммы - Структура, Неопределено - см. функцию ПараметрыЗапускаПрограммы. -// -// Возвращаемое значение: -// Структура - Результат работы программы. -// КодВозврата - Число - код возврата программы. -// ПотокВывода - Строка - результат работы программы, направленный в поток stdout. -// ПотокОшибок - Строка - ошибки исполнения программы, направленные в поток stderr. -// -Функция ЗапуститьПрограмму(Знач СтрокаКоманды, ПараметрыЗапускаПрограммы = Неопределено, Кодировка = "") - - Если СодержитНебезопасныеДействия(СтрокаКоманды) Тогда - ВызватьИсключение НСтр("ru = 'Недопустимое значение параметра СтрокаКоманды. - |Строка команды не должна содержать символы: ""$"", ""`"", ""|"", "";"", ""&"".'"); - КонецЕсли; - - Если ПараметрыЗапускаПрограммы = Неопределено Тогда - ПараметрыЗапускаПрограммы = ПараметрыЗапускаПрограммы(); - КонецЕсли; - - ТекущийКаталог = ПараметрыЗапускаПрограммы.ТекущийКаталог; - СКлиентаНаСервере = ПараметрыЗапускаПрограммы.СКлиентаНаСервере; - ДождатьсяЗавершения = ПараметрыЗапускаПрограммы.ДождатьсяЗавершения; - ПолучитьПотокВывода = ПараметрыЗапускаПрограммы.ПолучитьПотокВывода; - ПолучитьПотокОшибок = ПараметрыЗапускаПрограммы.ПолучитьПотокОшибок; - - Если Не ПустаяСтрока(Кодировка) Тогда - СтрокаКоманды = "chcp " + Кодировка + " | " + СтрокаКоманды; - КонецЕсли; - - Если ДождатьсяЗавершения Тогда - - Если ПолучитьПотокВывода Тогда - ФайлПотокаВывода = ПолучитьИмяВременногоФайла("stdout.tmp"); - СтрокаКоманды = СтрокаКоманды + " > """ + ФайлПотокаВывода + """"; - КонецЕсли; - - Если ПолучитьПотокОшибок Тогда - ФайлПотокаОшибок = ПолучитьИмяВременногоФайла("stderr.tmp"); - СтрокаКоманды = СтрокаКоманды + " 2>""" + ФайлПотокаОшибок + """"; - КонецЕсли; - - КонецЕсли; - - Если Не ПустаяСтрока(ТекущийКаталог) Тогда - СтрокаКоманды = "cd """ + ТекущийКаталог + """ && " + СтрокаКоманды; - КонецЕсли; - - КодВозврата = Неопределено; - - СистемнаяИнформация = Новый СистемнаяИнформация(); - Если (СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86) - Или (СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64) Тогда - - // Для Windows выполняем запуск через cmd.exe (для перенаправления stdout и stderr). - СтрокаКоманды = "cmd /c """ + СтрокаКоманды + """"; - - Если СКлиентаНаСервере Тогда - Оболочка = Новый COMОбъект("Wscript.Shell"); - // Run запускает новый процесс, не являющийся дочерним текущего процесса (в отличии от Exec). - КодВозврата = Оболочка.Run(СтрокаКоманды, 0, ДождатьсяЗавершения); - Оболочка = Неопределено; - Иначе - ЗапуститьПриложение(СтрокаКоманды,, ДождатьсяЗавершения, КодВозврата); - КонецЕсли; - - Иначе - // Для ОС Linux и MacOS просто запускаем команду. - ЗапуститьПриложение(СтрокаКоманды,, ДождатьсяЗавершения, КодВозврата); - - КонецЕсли; - - // Переопределение возвращенного оболочной значения. - Если КодВозврата = Неопределено Тогда - КодВозврата = 0; - КонецЕсли; - - ПотокВывода = ""; - ПотокОшибок = ""; - - Если ДождатьсяЗавершения Тогда - - Если ПолучитьПотокВывода Тогда - - ЧтениеПотокаВывода = Новый ЧтениеТекста(ФайлПотокаВывода, КодировкаСтандартныхПотоков()); - ПотокВывода = ЧтениеПотокаВывода.Прочитать(); - ЧтениеПотокаВывода.Закрыть(); - - УдалитьВременныйФайл(ФайлПотокаВывода); - - Если ПотокВывода = Неопределено Тогда - ПотокВывода = ""; - КонецЕсли; - - КонецЕсли; - - Если ПолучитьПотокОшибок Тогда - - ЧтениеПотокаОшибок = Новый ЧтениеТекста(ФайлПотокаОшибок, КодировкаСтандартныхПотоков()); - ПотокОшибок = ЧтениеПотокаОшибок.Прочитать(); - ЧтениеПотокаОшибок.Закрыть(); - - УдалитьВременныйФайл(ФайлПотокаОшибок); - - Если ПотокОшибок = Неопределено Тогда - ПотокОшибок = ""; - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - - Результат = Новый Структура; - Результат.Вставить("КодВозврата", КодВозврата); - Результат.Вставить("ПотокВывода", ПотокВывода); - Результат.Вставить("ПотокОшибок", ПотокОшибок); - - Возврат Результат; - -КонецФункции - -// Возвращает кодировку стандартных поток вывода и ошибок, используемую в текущей ОС. -// -// Возвращаемое значение: -// КодировкаТекста - кодировка стандартных потоков вывода и ошибок. -// -Функция КодировкаСтандартныхПотоков() - - СистемнаяИнформация = Новый СистемнаяИнформация(); - Если (СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86) - Или (СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64) Тогда - - Кодировка = КодировкаТекста.OEM; - Иначе - Кодировка = КодировкаТекста.Системная; - КонецЕсли; - - Возврат Кодировка; - -КонецФункции - -Процедура УдалитьВременныйФайл(ПолноеИмяФайла) - - Если ПустаяСтрока(ПолноеИмяФайла) Тогда + // Администратор отказался от сбора и отправки дампов. + Если ПараметрыЦентраМониторинга.ОтправлятьФайлыДампов = 0 Тогда Возврат; КонецЕсли; - - Попытка - УдалитьФайлы(ПолноеИмяФайла); - Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Базовая функциональность'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Предупреждение,,, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось удалить временный файл - |%1 по причине: %2'"), - ПолноеИмяФайла, - КраткоеПредставлениеОшибки(ИнформацияОбОшибке()))); - КонецПопытки; + + ТекущаяДата = ТекущаяУниверсальнаяДата(); + // Сбор дампов уже включен, не нужно проверок. + Если Не ПараметрыЦентраМониторинга.ОтправлятьФайлыДампов = 0 + И Не ПустаяСтрока(ПараметрыЦентраМониторинга.ВариантДампа) + И ТекущаяДата < ПараметрыЦентраМониторинга.ОкончаниеСбораДампов Тогда + Возврат; + КонецЕсли; + + // Если время следующей проверки не подошло. + Если ПараметрыЦентраМониторинга.ПроверкаДамповСледующая > ТекущаяДата Тогда + Возврат; + КонецЕсли; + + УстановитьПараметрЦентраМониторинга("ПроверкаДамповСледующая", ТекущаяДата + ПараметрыЦентраМониторинга.ПроверкаДамповПериодичность); + + ДатаНачала = ТекущаяДата - ПараметрыЦентраМониторинга.ГлубинаПроверкиДампов; + + СисИнфо = Новый СистемнаяИнформация; + + ТопДампов = РегистрыСведений.ДампыПлатформы.ПолучитьТопВариантов(ДатаНачала, ТекущаяДата, 10, СисИнфо.ВерсияПриложения); + Выборка = ТопДампов.Выбрать(); + Пока Выборка.Следующий() Цикл + // Если дампов возникло больше минимума, проверяем, нужен ли он. + Если Выборка.КоличествоВариантов >= ПараметрыЦентраМониторинга.МинимальноеКоличествоДампов Тогда + // Если дамп нужен, то инициируем его сбор. + ТребованиеДампа = ДампТребуется(Выборка.ВариантДампа, ""); + Если ТребованиеДампа.Требуется Тогда + Если ТребованиеДампа.ТипДампа = "3" Тогда + // Для полного дампа проверяем, достаточно ли места. + ПозицияРазделителя = СтрНайти(ПутьККаталогуДампов, ПолучитьРазделительПутиСервера()); + Если ПозицияРазделителя = 0 Тогда + Продолжить; + КонецЕсли; + БукваДиска = Лев(ПутьККаталогуДампов, ПозицияРазделителя-1); + РезультатЗамера = СвободноеМестоНаДиске(БукваДиска, Ложь); + Если НЕ РезультатЗамера.Успешно Тогда + Продолжить; + КонецЕсли; + Если РезультатЗамера.Значение/1024 < ПараметрыЦентраМониторинга.РезервМестаВыключен Тогда + Продолжить; + КонецЕсли; + КонецЕсли; + + // Устанавливаем параметры сбора дампов. + НовыеПараметры = Новый Структура; + НовыеПараметры.Вставить("ВариантДампа", Выборка.ВариантДампа); + НовыеПараметры.Вставить("ОкончаниеСбораДампов", НачалоДня(ТекущаяДата)+30*86400); + // Пока пользователь не согласился, на даем возможности включить сбор полных дампов. + Если ПараметрыЦентраМониторинга.ОтправлятьФайлыДампов = 1 Тогда + НовыеПараметры.Вставить("ТипДампа", ТребованиеДампа.ТипДампа); + Иначе + НовыеПараметры.Вставить("ТипДампа", "0"); + КонецЕсли; + УстановитьПараметрыЦентраМониторинга(НовыеПараметры); + ЦентрМониторинга.ЗаписатьОперациюБизнесСтатистики("ЦентрМониторинга.РегистрацияДампов.ОповеститьАдминистратора", 1); + + // Прерываем обход коллекции, т.к. запросили сбор дампов у Администратора. + Прервать; + + КонецЕсли; + Иначе + // Прерываем обход коллекции, если дампов меньше минимума. + Прервать; + КонецЕсли; + КонецЦикла; КонецПроцедуры -Функция СодержитНебезопасныеДействия(СтрокаКоманды) - - Возврат СтрНайти(СтрокаКоманды, "$") <> 0 - Или СтрНайти(СтрокаКоманды, "`") <> 0 - Или СтрНайти(СтрокаКоманды, "|") <> 0 - Или СтрНайти(СтрокаКоманды, ";") <> 0 - Или СтрНайти(СтрокаКоманды, "&") <> 0; - -КонецФункции - #КонецОбласти #Область ОтправкаТестовогоПакета diff --git a/SSL/src/CommonModules/ШаблоныСообщений/Module.bsl b/SSL/src/CommonModules/ШаблоныСообщений/Module.bsl index e30d8bb3e..986995783 100644 --- a/SSL/src/CommonModules/ШаблоныСообщений/Module.bsl +++ b/SSL/src/CommonModules/ШаблоныСообщений/Module.bsl @@ -329,6 +329,22 @@ #КонецОбласти +#Область СлужебныйПрограммныйИнтерфейс + +// Определяет, является ли переданная ссылка элементом справочника шаблоны сообщений. +// +// Параметры: +// ШаблонСсылка - СправочникСсылка.ШаблоныСообщений - Ссылка на элемент справочника шаблоны сообщений. +// +// Возвращаемое значение: +// Булево - Если Истина, то ссылка является элементом справочника шаблоны сообщений. +// +Функция ЭтоШаблон(ШаблонСсылка) Экспорт + Возврат ТипЗнч(ШаблонСсылка) = Тип("СправочникСсылка.ШаблоныСообщений"); +КонецФункции + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции Функция СформироватьПараметрыОтправки(Шаблон, Предмет, УникальныйИдентификатор, ДополнительныеПараметры = Неопределено) diff --git a/SSL/src/CommonModules/ШаблоныСообщенийВызовСервера/Module.bsl b/SSL/src/CommonModules/ШаблоныСообщенийВызовСервера/Module.bsl deleted file mode 100644 index 37f2ffa71..000000000 --- a/SSL/src/CommonModules/ШаблоныСообщенийВызовСервера/Module.bsl +++ /dev/null @@ -1,26 +0,0 @@ -#Область СлужебныеПроцедурыИФункции - -Функция ШаблонПоВладельцу(ВладелецШаблона) Экспорт - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | ШаблоныСообщений.Ссылка КАК Ссылка - |ИЗ - | Справочник.ШаблоныСообщений КАК ШаблоныСообщений - |ГДЕ - | ШаблоныСообщений.ВладелецШаблона = &ВладелецШаблона"; - - Запрос.УстановитьПараметр("ВладелецШаблона", ВладелецШаблона); - - РезультатЗапроса = Запрос.Выполнить(); - - Если НЕ РезультатЗапроса.Пустой() Тогда - Возврат РезультатЗапроса.Выгрузить()[0].Ссылка; - Иначе - Возврат Справочники.ШаблоныСообщений.ПустаяСсылка(); - КонецЕсли; - -КонецФункции - -#КонецОбласти diff --git a/SSL/src/CommonModules/ШаблоныСообщенийВызовСервера/ШаблоныСообщенийВызовСервера.mdo b/SSL/src/CommonModules/ШаблоныСообщенийВызовСервера/ШаблоныСообщенийВызовСервера.mdo deleted file mode 100644 index 2a70c558d..000000000 --- a/SSL/src/CommonModules/ШаблоныСообщенийВызовСервера/ШаблоныСообщенийВызовСервера.mdo +++ /dev/null @@ -1,10 +0,0 @@ - - - ШаблоныСообщенийВызовСервера - - ru - Шаблоны сообщений вызов сервера - - true - true - diff --git a/SSL/src/CommonModules/ШаблоныСообщенийСлужебный/Module.bsl b/SSL/src/CommonModules/ШаблоныСообщенийСлужебный/Module.bsl index b55b3a04a..f86626e21 100644 --- a/SSL/src/CommonModules/ШаблоныСообщенийСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ШаблоныСообщенийСлужебный/Module.bsl @@ -18,12 +18,6 @@ И ПараметрыОтправки.ДополнительныеПараметры.Свойство("ВидСообщения") Тогда ПараметрыШаблона.ТипШаблона = ПараметрыОтправки.ДополнительныеПараметры.ВидСообщения; КонецЕсли; - Иначе - Если ПараметрыОтправки.Шаблон.ПредназначенДляSMS Тогда - ПараметрыОтправки.ДополнительныеПараметры.Вставить("ВидСообщения", "СообщениеSMS"); - Иначе - ПараметрыОтправки.ДополнительныеПараметры.Вставить("ВидСообщения", "ЭлектроннаяПочта"); - КонецЕсли; КонецЕсли; МенеджерОбъекта = Неопределено; @@ -106,11 +100,7 @@ НомераПолучателей = Новый Массив; Для каждого Получатель Из Сообщение.Получатель Цикл - Если ТипЗнч(Получатель) = Тип("Структура") Тогда - НомераПолучателей.Добавить(Получатель.НомерТелефона); - Иначе - НомераПолучателей.Добавить(Получатель.Значение); - КонецЕсли; + НомераПолучателей.Добавить(Получатель.Значение); КонецЦикла; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОтправкаSMS") Тогда @@ -134,7 +124,9 @@ Результат.ОписаниеОшибки = РезультатОтправкаSMS.ОписаниеОшибки; Иначе + Результат.ОписаниеОшибки = НСтр("ru = 'Сообщение SMS не может быть отправлено сразу.'"); + КонецЕсли; Возврат Результат; @@ -142,7 +134,6 @@ КонецЕсли; Иначе - Если Сообщение.Получатель.Количество() = 0 Тогда Результат.ОписаниеОшибки = НСтр("ru = 'Сообщение не может быть отправлено сразу, т.к необходимо ввести адрес электронной почты.'"); Возврат Результат; @@ -242,6 +233,24 @@ //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем конфигурации. +// См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. +Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "3.0.1.35"; + Обработчик.Процедура = "ШаблоныСообщенийСлужебный.ДобавитьРольДобавлениеИзменениеЛичныхШаблоновВПрофилиСБазовымиПравами"; + Обработчик.РежимВыполнения = "Оперативно"; + +КонецПроцедуры + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииСписковСОграничениемДоступа(Списки) Экспорт + + Списки.Вставить(Метаданные.Справочники.ШаблоныСообщений, Истина); + Списки.Вставить(Метаданные.Справочники.ШаблоныСообщенийПрисоединенныеФайлы, Истина); + +КонецПроцедуры + // См. УправлениеДоступомПереопределяемый.ПриЗаполненииВидовОграниченийПравОбъектовМетаданных. Процедура ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(Описание) Экспорт @@ -263,6 +272,29 @@ #Область СлужебныеПроцедурыИФункции +Функция ШаблонПоВладельцу(ВладелецШаблона) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ШаблоныСообщений.Ссылка КАК Ссылка + |ИЗ + | Справочник.ШаблоныСообщений КАК ШаблоныСообщений + |ГДЕ + | ШаблоныСообщений.ВладелецШаблона = &ВладелецШаблона"; + + Запрос.УстановитьПараметр("ВладелецШаблона", ВладелецШаблона); + + РезультатЗапроса = Запрос.Выполнить(); + + Если НЕ РезультатЗапроса.Пустой() Тогда + Возврат РезультатЗапроса.Выгрузить()[0].Ссылка; + Иначе + Возврат Справочники.ШаблоныСообщений.ПустаяСсылка(); + КонецЕсли; + +КонецФункции + Функция КонструкторСообщения(ПараметрыШаблона = Неопределено) Экспорт Сообщение = Новый Структура(); @@ -440,16 +472,12 @@ КонецЦикла; Сообщение = ВнешнийОбъект.СформироватьСообщениеПоШаблону(Значения); - - Если ТипЗнч(Сообщение) = Тип("Структура") И ПараметрыОтправки.ДополнительныеПараметры.ВидСообщения = "СообщениеSMS" Тогда - - СформированноеСообщение.Текст = Сообщение.ТекстСообщенияSMS; - - ИначеЕсли ТипЗнч(Сообщение) = Тип("Структура") И Сообщение.Свойство("СтруктураВложений") Тогда - + СтандартнаяОбработка = Ложь; + Получатели = ВнешнийОбъект.СтруктураДанныхПолучатели(Значения, СтандартнаяОбработка); + Если ТипЗнч(Сообщение) = Тип("Структура") И Сообщение.Свойство("СтруктураВложений") Тогда + // Обратная совместимость СформированноеСообщение.Текст = Сообщение.ТекстПисьмаHTML; - СформированноеСообщение.Тема = Сообщение.ТемаПисьма; - + СформированноеСообщение.Тема = Сообщение.ТемаПисьма; Для каждого Вложение Из Сообщение.СтруктураВложений Цикл НовоеВложение = СформированноеСообщение.Вложения.Добавить(); НовоеВложение.АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(Вложение.Значение.ПолучитьДвоичныеДанные(), ПараметрыОтправки.УникальныйИдентификатор); @@ -457,17 +485,14 @@ НовоеВложение.Представление = Вложение.Ключ; КонецЦикла; + Для каждого Получатель Из Получатели Цикл + СформированноеСообщение.Получатель.Добавить(Получатель.Адрес, Получатель.Представление); + КонецЦикла; + КонецЕсли; - СтандартнаяОбработка = Ложь; - Получатели = ВнешнийОбъект.СтруктураДанныхПолучатели(Значения, СтандартнаяОбработка); - Для каждого Получатель Из Получатели Цикл - СформированноеСообщение.Получатель.Добавить(Получатель.Адрес, Получатель.Представление); - КонецЦикла; - Возврат СформированноеСообщение; - - КонецЕсли; + КонецЕсли КонецФункции @@ -479,16 +504,8 @@ ПараметрыШаблона.ТипШаблона = "SMS"; КонецЕсли; - МенеджерОбъекта = Неопределено; - Если ПараметрыОтправки.Свойство("Предмет") И ЗначениеЗаполнено(ПараметрыОтправки.Предмет) Тогда - МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(ПараметрыОтправки.Предмет)); - Если МетаданныеОбъекта <> Неопределено Тогда - МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(МетаданныеОбъекта.ПолноеИмя()); - КонецЕсли; - КонецЕсли; - СформированноеСообщение = КонструкторСообщения(); - ЗаполнитьПолучателейСообщения(ПараметрыОтправки, ПараметрыШаблона, СформированноеСообщение, МенеджерОбъекта); + ЗаполнитьПолучателейСообщения(ПараметрыОтправки, ПараметрыШаблона, СформированноеСообщение, Неопределено); Возврат СформированноеСообщение; @@ -2135,10 +2152,8 @@ МенеджерОбъекта.ПриЗаполненииТелефоновПолучателейВСообщении(Получатели, ПредметСообщения); КонецЕсли; - РасширенныйСписокПолучателей = ПараметрыОтправки.ДополнительныеПараметры.Свойство("РасширенныйСписокПолучателей") И ПараметрыОтправки.ДополнительныеПараметры.РасширенныйСписокПолучателей; - - Если РасширенныйСписокПолучателей Или (ПараметрыШаблона.Свойство("РасширенныйСписокПолучателей") - И ПараметрыШаблона.РасширенныйСписокПолучателей) Тогда + Если ПараметрыШаблона.Свойство("РасширенныйСписокПолучателей") + И ПараметрыШаблона.РасширенныйСписокПолучателей Тогда Результат.Получатель = Новый Массив; Для каждого Получатель Из Получатели Цикл @@ -2298,4 +2313,27 @@ КонецФункции +// Обновление + +// Добавляет роль ДобавлениеИзменениеЛичныхШаблоновСообщений во все профили, в которые входит роль БазовыеПраваБСП. +Процедура ДобавитьРольДобавлениеИзменениеЛичныхШаблоновВПрофилиСБазовымиПравами() Экспорт + + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + Возврат; + КонецЕсли; + + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + + НовыеРоли = Новый Массив; + НовыеРоли.Добавить(Метаданные.Роли.БазовыеПраваБСП.Имя); + НовыеРоли.Добавить(Метаданные.Роли.ДобавлениеИзменениеЛичныхШаблоновСообщений.Имя); + + ЗаменяемыеРоли = Новый Соответствие; + ЗаменяемыеРоли.Вставить(Метаданные.Роли.БазовыеПраваБСП.Имя, НовыеРоли); + + МодульУправлениеДоступом.ЗаменитьРолиВПрофилях(ЗаменяемыеРоли); + +КонецПроцедуры + + #КонецОбласти diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиент/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиент/Module.bsl index 5bb525f4d..db763daae 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиент/Module.bsl @@ -1129,7 +1129,7 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("ВыбранныйСертификат", Сертификат); - ПараметрыФормы.Вставить("ДляШифрованияИРасшифровки", Истина); + ПараметрыФормы.Вставить("ДляШифрованияИРасшифровки", ДляШифрованияИРасшифровки); ЭлектроннаяПодписьСлужебныйКлиент.ВыборСертификатаДляПодписанияИлиРасшифровки(ПараметрыФормы, Элемент); diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебный/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебный/Module.bsl index c8e5e808b..ebcecf2aa 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебный/Module.bsl @@ -109,7 +109,7 @@ Обработчик.РежимВыполнения = "Монопольно"; Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.4.6.9"; + Обработчик.Версия = "3.0.1.69"; Обработчик.Комментарий = НСтр("ru = 'Заполнение справочника Программы электронной подписи и шифрования.'"); Обработчик.Идентификатор = Новый УникальныйИдентификатор("8e76369a-e16c-415d-bfeb-95e7e5f07a00"); @@ -738,10 +738,10 @@ КонецЕсли; Если ТипЗнч(Форма.ОтборСертификатов) = Тип("СписокЗначений") Тогда - Если Форма.ОтборСертификатов.Количество() > 1 Тогда + Если Форма.СертификатСписокВыбора.Количество() = 0 Тогда Сертификат = Неопределено; - ИначеЕсли Форма.ОтборСертификатов.Количество() = 1 Тогда - Сертификат = Форма.ОтборСертификатов[0].Значение; + Иначе + Сертификат = Форма.СертификатСписокВыбора[0].Значение; КонецЕсли; КонецЕсли; @@ -1672,12 +1672,24 @@ Если ТипЗнч(ОтборСертификатов) = Тип("СписокЗначений") Тогда Если ОтборСертификатов.Количество() > 0 Тогда + ТекущийСписок = Новый СписокЗначений; Для каждого ЭлементСписка Из ОтборСертификатов Цикл Свойства = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( - ЭлементСписка.Значение, "Ссылка, Наименование, Отпечаток"); + ЭлементСписка.Значение, "Ссылка, Наименование, Отпечаток, Пользователь"); Если ОтпечаткиСертификатовНаКлиенте.Найти(Свойства.Отпечаток) <> Неопределено Тогда - СписокВыбора.Добавить(Свойства.Ссылка, Свойства.Наименование); + ТекущийСписок.Добавить(Свойства.Ссылка, Свойства.Наименование, + Свойства.Пользователь = ПользователиКлиентСервер.АвторизованныйПользователь()); + КонецЕсли; + КонецЦикла; + Для Каждого ЭлементСписка Из ТекущийСписок Цикл + Если ЭлементСписка.Пометка Тогда + СписокВыбора.Добавить(ЭлементСписка.Значение, ЭлементСписка.Представление); + КонецЕсли; + КонецЦикла; + Для Каждого ЭлементСписка Из ТекущийСписок Цикл + Если Не ЭлементСписка.Пометка Тогда + СписокВыбора.Добавить(ЭлементСписка.Значение, ЭлементСписка.Представление); КонецЕсли; КонецЦикла; Возврат; diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиент/Module.bsl index 0ced2fdcf..aa675bbab 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиент/Module.bsl @@ -3538,6 +3538,7 @@ Процедура ПолучитьДанныеИзОписанияДанныхПродолжение(Результат, Контекст) Экспорт ЭтоXMLDSig = (ТипЗнч(Результат) = Тип("Структура") + И Результат.Свойство("Данные") И ТипЗнч(Результат.Данные) = Тип("Структура") И Результат.Данные.Свойство("ПараметрыXMLDSig")); @@ -3834,7 +3835,7 @@ КонецПроцедуры -Процедура НачатьПодписаниеСообщенияSOAP(Контекст) +Процедура НачатьПодписаниеСообщенияSOAP(Контекст) Попытка ОписаниеОповещения = Новый ОписаниеОповещения( @@ -4028,7 +4029,7 @@ КонецПроцедуры -Процедура НачатьПроверкуПодписиСообщенияSOAP(Контекст) +Процедура НачатьПроверкуПодписиСообщенияSOAP(Контекст) Попытка ОписаниеОповещения = Новый ОписаниеОповещения( diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиентСервер/Module.bsl index 38b2fbe06..bb68f164b 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиентСервер/Module.bsl @@ -300,7 +300,7 @@ // Только для внутреннего использования. Функция ДатыСертификата(Сертификат) Экспорт - #Если ВебКлиент Или ТонкийКлиент Тогда + #Если ВебКлиент Или ТонкийКлиент ИЛИ МобильныйКлиент Тогда ДобавкаВремени = ОбщегоНазначенияКлиент.ДатаСеанса() - ОбщегоНазначенияКлиент.ДатаУниверсальная(); #Иначе ДобавкаВремени = ТекущаяДатаСеанса() - ТекущаяУниверсальнаяДата(); @@ -332,7 +332,7 @@ // Только для внутреннего использования. Процедура ДобавитьСвойстваСертификатов(Таблица, МассивСертификатов, БезОтбора, ТолькоОтпечатки = Ложь, ВОблачномСервисе = Ложь) Экспорт - #Если ВебКлиент Или ТонкийКлиент Тогда + #Если ВебКлиент Или ТонкийКлиент ИЛИ МобильныйКлиент Тогда ТекущаяДатаСеанса = ОбщегоНазначенияКлиент.ДатаСеанса(); #Иначе ТекущаяДатаСеанса = ТекущаяДатаСеанса(); @@ -401,7 +401,7 @@ // Только для внутреннего использования. Процедура ДобавитьОтпечаткиСертификатов(Массив, МассивСертификатов) Экспорт - #Если ВебКлиент Или ТонкийКлиент Тогда + #Если ВебКлиент Или ТонкийКлиент ИЛИ МобильныйКлиент Тогда ТекущаяДатаСеанса = ОбщегоНазначенияКлиент.ДатаСеанса(); #Иначе ТекущаяДатаСеанса = ТекущаяДатаСеанса(); diff --git a/SSL/src/CommonPictures/ВнешняяКомпонентаДоступна/Picture.zip b/SSL/src/CommonPictures/ВнешняяКомпонентаДоступна/Picture.zip new file mode 100644 index 000000000..92294b527 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..7967f0d3e --- /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..b5d556346 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..3a45e62dc --- /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 similarity index 100% rename from SSL/src/CommonPictures/Обсуждения/Picture.zip rename to SSL/src/CommonPictures/ПодключениеОбсуждений/Picture.zip diff --git a/SSL/src/CommonPictures/Обсуждения/Обсуждения.mdo b/SSL/src/CommonPictures/ПодключениеОбсуждений/ПодключениеОбсуждений.mdo similarity index 65% rename from SSL/src/CommonPictures/Обсуждения/Обсуждения.mdo rename to SSL/src/CommonPictures/ПодключениеОбсуждений/ПодключениеОбсуждений.mdo index 5fe8a6e80..821f53a99 100644 --- a/SSL/src/CommonPictures/Обсуждения/Обсуждения.mdo +++ b/SSL/src/CommonPictures/ПодключениеОбсуждений/ПодключениеОбсуждений.mdo @@ -1,8 +1,8 @@ - Обсуждения + ПодключениеОбсуждений ru - Обсуждения + Подключение обсуждений diff --git a/SSL/src/CommonPictures/РасширениеКонфигурацииИзГлавногоУзла/Picture.png b/SSL/src/CommonPictures/РасширениеКонфигурацииИзГлавногоУзла/Picture.png new file mode 100644 index 000000000..b811fba5f Binary files /dev/null and b/SSL/src/CommonPictures/РасширениеКонфигурацииИзГлавногоУзла/Picture.png differ diff --git a/SSL/src/CommonPictures/РасширениеКонфигурацииИзГлавногоУзла/РасширениеКонфигурацииИзГлавногоУзла.mdo b/SSL/src/CommonPictures/РасширениеКонфигурацииИзГлавногоУзла/РасширениеКонфигурацииИзГлавногоУзла.mdo new file mode 100644 index 000000000..05554adc5 --- /dev/null +++ b/SSL/src/CommonPictures/РасширениеКонфигурацииИзГлавногоУзла/РасширениеКонфигурацииИзГлавногоУзла.mdo @@ -0,0 +1,8 @@ + + + РасширениеКонфигурацииИзГлавногоУзла + + ru + Расширение конфигурации из главного узла + + diff --git a/SSL/src/CommonPictures/СинхронизацияДанныхСостояниеРасписания/Picture.zip b/SSL/src/CommonPictures/СинхронизацияДанныхСостояниеРасписания/Picture.zip deleted file mode 100644 index 00ebda326..000000000 Binary files a/SSL/src/CommonPictures/СинхронизацияДанныхСостояниеРасписания/Picture.zip and /dev/null differ diff --git a/SSL/src/CommonPictures/СинхронизацияДанныхСостояниеСинхронизации/Picture.png b/SSL/src/CommonPictures/СинхронизацияДанныхСостояниеСинхронизации/Picture.png new file mode 100644 index 000000000..e5c96a020 Binary files /dev/null and b/SSL/src/CommonPictures/СинхронизацияДанныхСостояниеСинхронизации/Picture.png differ diff --git a/SSL/src/CommonPictures/СинхронизацияДанныхСостояниеРасписания/СинхронизацияДанныхСостояниеРасписания.mdo b/SSL/src/CommonPictures/СинхронизацияДанныхСостояниеСинхронизации/СинхронизацияДанныхСостояниеСинхронизации.mdo similarity index 55% rename from SSL/src/CommonPictures/СинхронизацияДанныхСостояниеРасписания/СинхронизацияДанныхСостояниеРасписания.mdo rename to SSL/src/CommonPictures/СинхронизацияДанныхСостояниеСинхронизации/СинхронизацияДанныхСостояниеСинхронизации.mdo index 34c351e6a..31f6eb535 100644 --- a/SSL/src/CommonPictures/СинхронизацияДанныхСостояниеРасписания/СинхронизацияДанныхСостояниеРасписания.mdo +++ b/SSL/src/CommonPictures/СинхронизацияДанныхСостояниеСинхронизации/СинхронизацияДанныхСостояниеСинхронизации.mdo @@ -1,8 +1,8 @@ - - СинхронизацияДанныхСостояниеРасписания + + СинхронизацияДанныхСостояниеСинхронизации ru - Синхронизация данных состояние расписания + Состояние синхронизации данных diff --git a/SSL/src/CommonTemplates/КомпонентаTWAIN/Template.bin b/SSL/src/CommonTemplates/КомпонентаTWAIN/Template.addin similarity index 100% rename from SSL/src/CommonTemplates/КомпонентаTWAIN/Template.bin rename to SSL/src/CommonTemplates/КомпонентаTWAIN/Template.addin diff --git a/SSL/src/CommonTemplates/КомпонентаTWAIN/КомпонентаTWAIN.mdo b/SSL/src/CommonTemplates/КомпонентаTWAIN/КомпонентаTWAIN.mdo index 057bbec6b..dad66a300 100644 --- a/SSL/src/CommonTemplates/КомпонентаTWAIN/КомпонентаTWAIN.mdo +++ b/SSL/src/CommonTemplates/КомпонентаTWAIN/КомпонентаTWAIN.mdo @@ -6,5 +6,5 @@ Компонента TWAIN Компонента сканирования с помощью интерфейса TWAIN - BinaryData + AddIn diff --git a/SSL/src/CommonTemplates/КомпонентаПечатиQRКода/Template.bin b/SSL/src/CommonTemplates/КомпонентаПечатиQRКода/Template.addin similarity index 100% rename from SSL/src/CommonTemplates/КомпонентаПечатиQRКода/Template.bin rename to SSL/src/CommonTemplates/КомпонентаПечатиQRКода/Template.addin diff --git a/SSL/src/CommonTemplates/КомпонентаПечатиQRКода/КомпонентаПечатиQRКода.mdo b/SSL/src/CommonTemplates/КомпонентаПечатиQRКода/КомпонентаПечатиQRКода.mdo index f382b726d..edaaa500a 100644 --- a/SSL/src/CommonTemplates/КомпонентаПечатиQRКода/КомпонентаПечатиQRКода.mdo +++ b/SSL/src/CommonTemplates/КомпонентаПечатиQRКода/КомпонентаПечатиQRКода.mdo @@ -6,5 +6,5 @@ Компонента печати QR кода Компонента печати QR кода - BinaryData + AddIn diff --git a/SSL/src/CommonTemplates/КомпонентаПоискаСтрок/Template.bin b/SSL/src/CommonTemplates/КомпонентаПоискаСтрок/Template.addin similarity index 100% rename from SSL/src/CommonTemplates/КомпонентаПоискаСтрок/Template.bin rename to SSL/src/CommonTemplates/КомпонентаПоискаСтрок/Template.addin diff --git a/SSL/src/CommonTemplates/КомпонентаПоискаСтрок/КомпонентаПоискаСтрок.mdo b/SSL/src/CommonTemplates/КомпонентаПоискаСтрок/КомпонентаПоискаСтрок.mdo index 9a991d936..4a80d2b73 100644 --- a/SSL/src/CommonTemplates/КомпонентаПоискаСтрок/КомпонентаПоискаСтрок.mdo +++ b/SSL/src/CommonTemplates/КомпонентаПоискаСтрок/КомпонентаПоискаСтрок.mdo @@ -5,5 +5,5 @@ ru Компонента поиска строк - BinaryData + AddIn diff --git a/SSL/src/CommonTemplates/КомпонентаСклоненияФИО/Template.bin b/SSL/src/CommonTemplates/КомпонентаСклоненияФИО/Template.addin similarity index 100% rename from SSL/src/CommonTemplates/КомпонентаСклоненияФИО/Template.bin rename to SSL/src/CommonTemplates/КомпонентаСклоненияФИО/Template.addin diff --git a/SSL/src/CommonTemplates/КомпонентаСклоненияФИО/КомпонентаСклоненияФИО.mdo b/SSL/src/CommonTemplates/КомпонентаСклоненияФИО/КомпонентаСклоненияФИО.mdo index 0be755de5..f35a2331a 100644 --- a/SSL/src/CommonTemplates/КомпонентаСклоненияФИО/КомпонентаСклоненияФИО.mdo +++ b/SSL/src/CommonTemplates/КомпонентаСклоненияФИО/КомпонентаСклоненияФИО.mdo @@ -5,5 +5,5 @@ ru Компонента склонения ФИО - BinaryData + AddIn diff --git a/SSL/src/Configuration/Configuration.mdo b/SSL/src/Configuration/Configuration.mdo index 2ad3671c7..ca73da804 100644 --- a/SSL/src/Configuration/Configuration.mdo +++ b/SSL/src/Configuration/Configuration.mdo @@ -1,17 +1,17 @@ - + БиблиотекаСтандартныхПодсистем ru - Библиотека стандартных подсистем, редакция 2.4 + Библиотека стандартных подсистем, редакция 3.0 - - - - - - - + + + + + + + ManagedApplication PersonalComputer Russian @@ -19,7 +19,7 @@ Role.АдминистраторСистемы Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок Фирма "1С" - 2.4.6.177 + 3.0.1.204 http://downloads.v8.1c.ru/tmplts/ true @@ -36,11 +36,11 @@ Language.Русский ru - Библиотека стандартных подсистем, редакция 2.4 + Библиотека стандартных подсистем, редакция 3.0 ru - Библиотека стандартных подсистем, редакция 2.4 + Библиотека стандартных подсистем, редакция 3.0 @@ -56,7 +56,7 @@ NotAutoFree UseWithWarnings TaxiEnableVersion8_2 - 8.3.10 + 8.3.12 Русский @@ -129,6 +129,8 @@ CommonPicture.ВидыНавигацииПоВзаимодействиямОтПредметовВзаимодействий CommonPicture.ВидыНавигацииПоВзаимодействиямОтРеквизитаПредмета CommonPicture.ВидыОпераций + CommonPicture.ВнешняяКомпонентаДоступна + CommonPicture.ВнешняяКомпонентаНеДоступна CommonPicture.ВнешняяСсылкаНаОбъектИнформационнойБазы CommonPicture.Вопрос32 CommonPicture.ВосклицательныйЗнакКрасный @@ -238,7 +240,6 @@ CommonPicture.НетГраницы CommonPicture.ОбновитьФайлИзФайлаНаДиске CommonPicture.ОбновлениеВнешнихКомпонентССайта - CommonPicture.Обсуждения CommonPicture.ОбъединитьЯчейки CommonPicture.ОбычныйДоступСФлажком CommonPicture.ОпубликоватьФайл @@ -273,6 +274,7 @@ CommonPicture.ПиктограммыНастроекОтчета CommonPicture.ПиктограммыПланОбменаУзел CommonPicture.ПиктограммыЭлементов + CommonPicture.ПодключениеОбсуждений CommonPicture.Подменю CommonPicture.ПодписанЗашифрованЗаголовок CommonPicture.ПодписанЗашифрованСостояния @@ -307,6 +309,7 @@ CommonPicture.РазрешитьРедактированиеРеквизитовОбъекта CommonPicture.Рассчитать CommonPicture.РассылкаОтчетов + CommonPicture.РасширениеКонфигурацииИзГлавногоУзла CommonPicture.РедактироватьМакет CommonPicture.РедактироватьФайл CommonPicture.РежимИспользованияПриложенияВСервисеЛокально @@ -323,7 +326,7 @@ CommonPicture.СинхронизацияДанныхНепринятыеПоДате CommonPicture.СинхронизацияДанныхОтключение CommonPicture.СинхронизацияДанныхПодсистема - CommonPicture.СинхронизацияДанныхСостояниеРасписания + CommonPicture.СинхронизацияДанныхСостояниеСинхронизации CommonPicture.Сканирование CommonPicture.СкопироватьВБуферОбмена CommonPicture.Скрепка @@ -404,6 +407,7 @@ CommonPicture.ЯндексКарты SessionParameter.АвторизованныйПользователь SessionParameter.БуферОбмена + SessionParameter.ВерсииШаблоновОграниченияДоступа SessionParameter.ВерсияРасширений SessionParameter.ВидыДоступаБезГруппДляЗначенияДоступа SessionParameter.ВидыДоступаСОднойГруппойДляЗначенияДоступа @@ -411,18 +415,22 @@ SessionParameter.ВсеВидыДоступаКромеСпециальных SessionParameter.ВыполняетсяЗаписьОбъекта SessionParameter.ВыполняетсяОбновлениеИБ + SessionParameter.ГруппыДоступаАвторизованногоПользователя SessionParameter.ДатаОбновленияПовторноИспользуемыхЗначенийМРО SessionParameter.ДействующиеДатыЗапретаИзменения SessionParameter.ИдентификаторыТаблицСОтдельнымиНастройкамиПрав + SessionParameter.КлючДанныхПовторногоИспользования SessionParameter.КомментарийЗамераВремени SessionParameter.ОбластьДанныхЗначение SessionParameter.ОбластьДанныхИспользование SessionParameter.ОбновитьВерсиюДатЗапретаИзмененияПослеЗагрузкиДанных SessionParameter.ОграничениеДоступаНаУровнеЗаписейВключено + SessionParameter.ОграничениеДоступаНаУровнеЗаписейУниверсально SessionParameter.ОтмененныеДлительныеОперации SessionParameter.ОшибкаРасхожденияВерсийПриПолученииДанных SessionParameter.ПараметрыКлиентаНаСервере SessionParameter.ПараметрыОбработчикаОбновления + SessionParameter.ПараметрыОграниченияДоступа SessionParameter.ПараметрыСеансаСинхронизацииДанных SessionParameter.ПаролиСинхронизацииДанных SessionParameter.ПодключенныеРасширения @@ -432,6 +440,12 @@ SessionParameter.ПропуститьПроверкуЗапретаИзменения SessionParameter.РаботаСВнешнимиРесурсамиЗаблокирована SessionParameter.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском + SessionParameter.СпискиСОграничениемЧерезКлючиДоступаГруппДоступа + SessionParameter.СпискиСОграничениемЧерезКлючиДоступаПользователей + SessionParameter.СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа + SessionParameter.СпискиСОтключеннымОграничениемПоПолям + SessionParameter.СпискиСОтключеннымОграничениемЧтения + SessionParameter.СпискиССокращеннымНаборомПолейВРегистрахКлючей SessionParameter.ТаблицыСОтдельнымиНастройкамиПрав SessionParameter.ТекущийВнешнийПользователь SessionParameter.ТекущийПользователь @@ -440,8 +454,8 @@ SessionParameter.УстановленныеРасширения Role.АдминистраторСистемы Role.Администрирование - Role.БазовыеПрава - Role.БазовыеПраваВнешнегоПользователя + Role.БазовыеПраваБСП + Role.БазовыеПраваВнешнихПользователейБСП Role.ВыводНаПринтерФайлБуферОбмена Role.ВызовОнлайнПоддержки Role.ВыполнениеСинхронизацииДанных @@ -460,6 +474,7 @@ Role.ДобавлениеИзменениеКалендарныхГрафиков Role.ДобавлениеИзменениеКурсовВалют Role.ДобавлениеИзменениеЛичныхВариантовОтчетов + Role.ДобавлениеИзменениеЛичныхШаблоновСообщений Role.ДобавлениеИзменениеНапоминаний Role.ДобавлениеИзменениеОпросов Role.ДобавлениеИзменениеОтветовНаВопросыАнкет @@ -508,7 +523,9 @@ Role.ЧтениеИнформацииОВерсияхОбъектов Role.ЧтениеКурсовВалют Role.ЧтениеОтветовНаВопросыАнкет + Role.ЧтениеРассылокОтчетов Role.ЧтениеРезультатовПроверкиУчета + Role.ЧтениеШаблоновСообщений CommonTemplate.ИнструкцияКакВыполнитьУстановкуОбновленияВручную CommonTemplate.КомпонентаTWAIN CommonTemplate.КомпонентаПечатиQRКода @@ -560,8 +577,11 @@ CommonModule.ВзаимодействияКлиентСерверСлужебныйПовтИсп CommonModule.ВзаимодействияПереопределяемый CommonModule.ВзаимодействияСобытия + CommonModule.ВнешниеКомпонентыВМоделиСервисаСлужебный + CommonModule.ВнешниеКомпонентыВМоделиСервисаСлужебныйКлиент CommonModule.ВнешниеКомпонентыВызовСервера CommonModule.ВнешниеКомпонентыКлиент + CommonModule.ВнешниеКомпонентыСервер CommonModule.ВнешниеКомпонентыСлужебный CommonModule.ВнешниеКомпонентыСлужебныйВызовСервера CommonModule.ВнешниеКомпонентыСлужебныйКлиент @@ -625,6 +645,7 @@ CommonModule.ИнформацияПриЗапускеКлиент CommonModule.ИнформацияПриЗапускеПереопределяемый CommonModule.КалендарныеГрафики + CommonModule.КалендарныеГрафикиВМоделиСервиса CommonModule.КалендарныеГрафикиПереопределяемый CommonModule.КалендарныеГрафикиСлужебныйВМоделиСервиса CommonModule.КонтрольВеденияУчета @@ -654,7 +675,6 @@ CommonModule.ОбменДаннымиВызовСервера CommonModule.ОбменДаннымиГлобальный CommonModule.ОбменДаннымиКлиент - CommonModule.ОбменДаннымиКлиентСервер CommonModule.ОбменДаннымиПереопределяемый CommonModule.ОбменДаннымиПовтИсп CommonModule.ОбменДаннымиСервер @@ -692,6 +712,8 @@ CommonModule.ОбщегоНазначенияПереопределяемый CommonModule.ОбщегоНазначенияПовтИсп CommonModule.ОбщегоНазначенияСлужебныйКлиент + CommonModule.ОрганизацииПереопределяемый + CommonModule.ОрганизацииСервер CommonModule.ОтправкаSMS CommonModule.ОтправкаSMSКлиент CommonModule.ОтправкаSMSКлиентПереопределяемый @@ -704,6 +726,7 @@ CommonModule.ОтправкаSMSЧерезБилайн CommonModule.ОтправкаSMSЧерезМТС CommonModule.ОтправкаSMSЧерезСМСУслуги + CommonModule.ОтчетОДвиженияхДокументаПереопределяемый CommonModule.ОтчетОДвиженияхДокументаСлужебныйКлиент CommonModule.ОтчетыКлиент CommonModule.ОтчетыКлиентПереопределяемый @@ -887,6 +910,7 @@ CommonModule.УправлениеПечатьюКлиент CommonModule.УправлениеПечатьюКлиентСервер CommonModule.УправлениеПечатьюПереопределяемый + CommonModule.УправлениеПечатьюСлужебный CommonModule.УправлениеПечатьюСлужебныйКлиент CommonModule.УправлениеСвойствами CommonModule.УправлениеСвойствамиКлиент @@ -899,7 +923,6 @@ CommonModule.ФайловыеФункцииСлужебныйВМоделиСервиса CommonModule.ФизическиеЛицаКлиентСервер CommonModule.ЦентрМониторинга - CommonModule.ЦентрМониторингаВызовСервераПовтИсп CommonModule.ЦентрМониторингаГлобальный CommonModule.ЦентрМониторингаКлиент CommonModule.ЦентрМониторингаКлиентСлужебный @@ -907,7 +930,6 @@ CommonModule.ЦентрМониторингаПовтИсп CommonModule.ЦентрМониторингаСлужебный CommonModule.ШаблоныСообщений - CommonModule.ШаблоныСообщенийВызовСервера CommonModule.ШаблоныСообщенийКлиент CommonModule.ШаблоныСообщенийКлиентСервер CommonModule.ШаблоныСообщенийПереопределяемый @@ -941,9 +963,10 @@ XDTOPackage.EnterpriseData_1_3_8 XDTOPackage.EnterpriseData_1_4_4 XDTOPackage.EnterpriseData_1_5_2 - XDTOPackage.EnterpriseData_1_6_2 + XDTOPackage.EnterpriseData_1_6_1 XDTOPackage.EnterpriseDataExchange_1_0_1_1 XDTOPackage.ExchangeMessage + XDTOPackage.Patch XDTOPackage.SuppliedData XDTOPackage.Адрес XDTOPackage.АдресныйКлассификатор @@ -959,6 +982,7 @@ WebService.EnterpriseDataUpload_1_0_1_1 WebService.Exchange WebService.Exchange_2_0_1_6 + WebService.Exchange_3_0_1_1 WebService.InterfaceVersion WebService.MessageExchange WebService.MessageExchange_2_0_1_6 @@ -968,7 +992,6 @@ EventSubscription.ВключитьРегламентноеЗаданиеПриИзмененииФункциональнойОпции EventSubscription.ВыполнитьДействияПередЗаписьюПрисоединенногоФайла EventSubscription.ВыполнитьДействияПередУдалениемПрисоединенногоФайла - EventSubscription.ВыполнитьДействияПослеОтправкиДанныхУзлаВРаспределеннойИнформационнойБазе EventSubscription.ВыполнитьДействияПослеПолученияДанныхУзлаВРаспределеннойИнформационнойБазе EventSubscription.ВыполнитьДействияПриЗаписиПрисоединенногоФайла EventSubscription.ДополнительныеОтчетыИОбработкиПередУдалениемИдентификатораОбъектаМетаданных @@ -1009,6 +1032,14 @@ EventSubscription.ПроверитьВозможностьИзмененияНастроекОбменаДанными EventSubscription.ПроверитьДатуЗапретаИзмененияПередЗаписьюДокументаЗащитаПерсональныхДанных EventSubscription.ПроверитьДатуЗапретаИзмененияПередУдалениемЗащитаПерсональныхДанных + EventSubscription.ПроверитьДоступПередЗаписью + EventSubscription.ПроверитьДоступПередЗаписьюДокумента + EventSubscription.ПроверитьДоступПередЗаписьюНабораЗаписей + EventSubscription.ПроверитьДоступПередЗаписьюНабораЗаписейРегистраРасчета + EventSubscription.ПроверитьДоступПриЗаписи + EventSubscription.ПроверитьДоступПриЗаписиДокумента + EventSubscription.ПроверитьДоступПриЗаписиНабораЗаписей + EventSubscription.ПроверитьДоступПриЗаписиНабораЗаписейРегистраРасчета EventSubscription.ПроверитьИзменениеФильтровОграниченияМиграцииДанных EventSubscription.ПроверитьИзмененияДатВПредмете EventSubscription.ПроверитьУстранениеПроблемыДокумента @@ -1030,7 +1061,7 @@ ScheduledJob.КонтрольАктивностиПользователей ScheduledJob.МониторингЗадач ScheduledJob.ОбновлениеАгрегатов - ScheduledJob.ОбновлениеВнешнихКомпонентССайта + ScheduledJob.ОбновлениеДоступаНаУровнеЗаписей ScheduledJob.ОбновлениеИндексаППД ScheduledJob.ОбновлениеОбластейДанных ScheduledJob.ОбновлениеСтатусовДоставкиSMS @@ -1102,6 +1133,7 @@ FunctionalOption.ИспользуютсяПрофилиБезопасности FunctionalOption.ИсточникДанныхАдресногоКлассификатора FunctionalOption.ОграничиватьДоступНаУровнеЗаписей + FunctionalOption.ОграничиватьДоступНаУровнеЗаписейУниверсально FunctionalOption.ОтложенноеОбновлениеВГлавномУзлеЗавершеноУспешно FunctionalOption.ОтложенноеОбновлениеЗавершеноУспешно FunctionalOption.ОтправлятьПисьмаВФорматеHTML @@ -1126,6 +1158,11 @@ DefinedType.ВерсионируемыеДанныеОбъект DefinedType.ВладелецВнешнихЗначенийВНаборахЗначенийДоступаОбъект DefinedType.ВладелецДополнительныхСведений + DefinedType.ВладелецЗначенийКлючейДоступа + DefinedType.ВладелецЗначенийКлючейДоступаДокумент + DefinedType.ВладелецЗначенийКлючейДоступаНаборЗаписей + DefinedType.ВладелецЗначенийКлючейДоступаНаборЗаписейРегистраРасчета + DefinedType.ВладелецЗначенийКлючейДоступаОбъект DefinedType.ВладелецКонтактнойИнформации DefinedType.ВладелецНаборовЗначенийДоступаОбъект DefinedType.ВладелецНастроекПрав @@ -1151,6 +1188,7 @@ DefinedType.ОтложенныйБизнесПроцесс DefinedType.ПодписанныйОбъект DefinedType.Подразделение + DefinedType.ПолеРегистраКлючейДоступаКРегистрам DefinedType.ПолучательРассылки DefinedType.Пользователь DefinedType.ПредметВзаимодействия @@ -1183,12 +1221,14 @@ CommonCommand.КартаМаршрутаБизнесПроцесса CommonCommand.МоиЗаметкиПоПредмету CommonCommand.Напомнить - CommonCommand.НастроитьПараметрыТранспортаСообщенийОбмена CommonCommand.НастроитьПрава CommonCommand.НастройкаОбменаСообщениями CommonCommand.НастройкаОнлайнПоддержки CommonCommand.НастройкаСистемнойУчетнойЗаписиЭлектроннойПочты + CommonCommand.НастройкиПодключения + CommonCommand.НастройкиПодключенияКонечнойТочки CommonCommand.НастройкиСинхронизацииДанных + CommonCommand.НачатьИнтервью CommonCommand.ОбменСообщениями CommonCommand.ОтправитьSMS CommonCommand.ОтправитьПисьмо @@ -1293,6 +1333,7 @@ Constant.КаталогСообщенийОбменаДаннымиДляWindows Constant.КлючОбластиДанных Constant.КоличествоЗамеровВПакетеЭкспорта + Constant.КоличествоПотоковОбновленияДоступа Constant.КоличествоПотоковОбновленияИнформационнойБазы Constant.КоличествоЭлементовВТранзакцииЗагрузкиДанных Constant.КопироватьОбластиДанныхИзЭталонной @@ -1306,6 +1347,7 @@ Constant.НастройкиПодчиненногоУзлаРИБ Constant.НеИспользоватьРазделениеПоОбластямДанных Constant.ОграничиватьДоступНаУровнеЗаписей + Constant.ОграничиватьДоступНаУровнеЗаписейУниверсально Constant.ОтложенноеОбновлениеВГлавномУзлеЗавершеноУспешно Constant.ОтложенноеОбновлениеЗавершеноУспешно Constant.ОтправлятьПисьмаВФорматеHTML @@ -1319,6 +1361,7 @@ Constant.ПериодХраненияЗамеров Constant.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском Constant.ПоддержкаРезервногоКопирования + Constant.ПоследнееОбновлениеДоступа Constant.ПредставлениеОбластиДанных Constant.ПрефиксОбластиДанных Constant.ПрефиксУзлаРаспределеннойИнформационнойБазы @@ -1383,7 +1426,6 @@ CommonForm.ДополнительноеОписание CommonForm.ДополнительныеОтчетыИОбработки CommonForm.ДополнительныеПараметрыПроксиСервера - CommonForm.ДоступныеВидыКлиентовВнешнейКомпоненты CommonForm.МастерАнкетыПоРазделам CommonForm.НапоминаниеПриРедактировании CommonForm.НастройкаДоступаКСервисуMorpher @@ -1391,8 +1433,8 @@ CommonForm.НастройкаМоихОтчетовИОбработок CommonForm.НастройкаОбменаСообщениями CommonForm.НастройкаОнлайнПоддержки - CommonForm.НастройкаОсновногоРабочегоКаталога CommonForm.НастройкаОтправкиSMS + CommonForm.НастройкаРабочегоКаталога CommonForm.НастройкиВходаПользователей CommonForm.НастройкиПравОбъектов CommonForm.НастройкиРегистрацииСобытийДоступаКПерсональнымДанным @@ -1408,6 +1450,7 @@ CommonForm.ПараметрыПроксиСервера CommonForm.ПечатьДокументов CommonForm.ПодготовкаНовогоПисьма + CommonForm.ПоддерживаемыеКлиентскиеПриложения CommonForm.ПодключениеКонечнойТочки CommonForm.ПоискИсполняемогоФайлаОнлайнПоддержки CommonForm.ПоказателиВыделенныхЯчеек @@ -1433,6 +1476,8 @@ CommonForm.СравнениеТабличныхДокументов CommonForm.СтруктураПодчиненности CommonForm.УстановкаВедущейКонечнойТочки + CommonForm.УстановкаВнешнейКомпонентыНевозможна + CommonForm.УстановленныеИсправления CommonForm.УточнениеКонтактов CommonForm.ФайлыВТоме CommonForm.ФормаВариантаОтчета @@ -1466,7 +1511,9 @@ Catalog.Календари Catalog.КлассификаторБанков Catalog.КлючевыеОперации + Catalog.КлючиДоступа Catalog.НаборыДополнительныхРеквизитовИСведений + Catalog.ОбщиеВнешниеКомпоненты Catalog.ОчередьЗаданий Catalog.ОчередьЗаданийОбластейДанных Catalog.ПапкиФайлов @@ -1714,6 +1761,11 @@ InformationRegister.ИсполнителиЗадач InformationRegister.ИсторияАдресныхОбъектов InformationRegister.КалендарныеГрафики + InformationRegister.КлючиДоступаВнешнихПользователей + InformationRegister.КлючиДоступаГруппДоступа + InformationRegister.КлючиДоступаКОбъектам + InformationRegister.КлючиДоступаКРегистрам + InformationRegister.КлючиДоступаПользователей InformationRegister.КодировкиФайлов InformationRegister.КомментарииОперацииСтатистики InformationRegister.КомментарииСтатистики @@ -1728,11 +1780,13 @@ InformationRegister.НастройкиВариантовОтчетов InformationRegister.НастройкиВерсионированияОбъектов InformationRegister.НастройкиКомандПечати + InformationRegister.НастройкиОбменаДаннымиXDTO InformationRegister.НастройкиОтправителя InformationRegister.НастройкиОчисткиФайлов InformationRegister.НастройкиПравОбъектов InformationRegister.НастройкиСинхронизацииФайлов - InformationRegister.НастройкиТранспортаОбмена + InformationRegister.НастройкиТранспортаОбменаДанными + InformationRegister.НастройкиТранспортаОбменаСообщениями InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты InformationRegister.НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма InformationRegister.НомераОтсканированныхФайлов @@ -1740,6 +1794,8 @@ InformationRegister.ОбластиПерсональныхДанных InformationRegister.ОбластиСтатистики InformationRegister.ОбластиТребующиеОбработкиПоставляемыхДанных + InformationRegister.ОбновлениеКлючейДоступаКДанным + InformationRegister.ОбновлениеКлючейДоступаПользователей InformationRegister.ОбработчикиСобытийСинхронизацииДанных InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз InformationRegister.ОперацииСтатистики @@ -1748,6 +1804,7 @@ InformationRegister.ОчередьИзвлеченияТекста InformationRegister.ПакетыДляОтправки InformationRegister.ПакетыИнформацииПриЗапуске + InformationRegister.ПараметрыОграниченияДоступа InformationRegister.ПараметрыРаботыВерсийРасширений InformationRegister.ПараметрыРаботыПрограммы InformationRegister.ПодпискиПолучателей @@ -1792,7 +1849,6 @@ InformationRegister.ТаблицыГруппДоступа InformationRegister.УведомленияОПрочтении InformationRegister.Удалить_АктивныеПредметыВзаимодействий - InformationRegister.УдалитьАдресныйКлассификатор InformationRegister.УдалитьБлокировкиСеансовОбластиДанных InformationRegister.УдалитьВерсииПодсистем InformationRegister.УдалитьГруппыЗначенийДоступа @@ -1802,8 +1858,10 @@ InformationRegister.УдалитьЗамерыВремениТехнологические InformationRegister.УдалитьНаборыЗначенийДоступа InformationRegister.УдалитьНастройкиВерсионированияОбъектов + InformationRegister.УдалитьНастройкиТранспортаОбмена InformationRegister.УдалитьОбластиДанных InformationRegister.УдалитьОбластиКРезервномуКопированию + InformationRegister.УдалитьОбластиПерсональныхДанных InformationRegister.УдалитьОчередьЗаданий InformationRegister.УдалитьОчередьИзвлеченияТекста InformationRegister.УдалитьПраваПоЗначениямДоступа diff --git a/SSL/src/Configuration/ParentConfigurations.bin b/SSL/src/Configuration/ParentConfigurations.bin index bf05fd6ae..16e651cf0 100644 --- a/SSL/src/Configuration/ParentConfigurations.bin +++ b/SSL/src/Configuration/ParentConfigurations.bin @@ -1 +1 @@ -{6,1,1,856f538b-3b47-4062-800b-76eef16e7409,1,66a42a75-1044-4ede-a734-29ccf96aede9,"2.4.6.177","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",5576,1,0,bb1c0918-fb25-448b-9410-2028e07e1999,bb1c0918-fb25-448b-9410-2028e07e1999,1,0,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,1,0,9233322b-dfdb-4c66-91fe-1299292d40a5,9233322b-dfdb-4c66-91fe-1299292d40a5,1,0,7795348b-2f52-47f7-bf00-e11e5e795a43,7795348b-2f52-47f7-bf00-e11e5e795a43,1,0,0421b67e-ed26-491d-ab98-ec59002ed4ce,0421b67e-ed26-491d-ab98-ec59002ed4ce,1,0,bb47ced2-31f9-4870-8633-20b986e53ccc,bb47ced2-31f9-4870-8633-20b986e53ccc,1,0,7d8acec9-f5a9-411e-921c-446ed0dd3332,7d8acec9-f5a9-411e-921c-446ed0dd3332,1,0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,1,0,cdbd26b1-9583-46e8-adf7-8cc705639892,cdbd26b1-9583-46e8-adf7-8cc705639892,1,0,c0e38c3e-7088-4e35-9d84-2d0ab9655402,c0e38c3e-7088-4e35-9d84-2d0ab9655402,1,0,1098786f-dd24-4cce-b212-be0cb5f01735,1098786f-dd24-4cce-b212-be0cb5f01735,1,0,3c0037f3-4422-4836-b116-8c72e32bdd55,3c0037f3-4422-4836-b116-8c72e32bdd55,1,0,6f7c6c31-206b-4010-bdad-1ad2e304f154,6f7c6c31-206b-4010-bdad-1ad2e304f154,1,0,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,1,0,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,1,0,5b68d479-7880-44de-84e3-7f578b43f0dc,5b68d479-7880-44de-84e3-7f578b43f0dc,1,0,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,1,0,b4629308-42de-4ce8-8591-cf0c2399a9a2,b4629308-42de-4ce8-8591-cf0c2399a9a2,1,0,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,1,0,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,1,0,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,1,0,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1,0,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,1,0,b93b8760-6200-40ee-8bdc-875ba80a6155,b93b8760-6200-40ee-8bdc-875ba80a6155,1,0,c27472ee-879a-4746-9d21-122738ec80b7,c27472ee-879a-4746-9d21-122738ec80b7,1,0,e8b248d9-9049-456a-9c7d-7a0462cc67ab,e8b248d9-9049-456a-9c7d-7a0462cc67ab,1,0,d4562287-440d-4462-9de2-7097ccbf3764,d4562287-440d-4462-9de2-7097ccbf3764,1,0,ec797c75-02c5-4cf5-9dd4-26cd46c99519,ec797c75-02c5-4cf5-9dd4-26cd46c99519,1,0,6fccdf59-fc99-4a2b-a144-fffe438a147c,6fccdf59-fc99-4a2b-a144-fffe438a147c,1,0,08a413ff-bebd-42e5-8ff3-2115746a0844,08a413ff-bebd-42e5-8ff3-2115746a0844,1,0,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,1,0,da9b32e6-5b93-45a6-84b2-238d57541e18,da9b32e6-5b93-45a6-84b2-238d57541e18,1,0,e43d69c8-b284-47da-b236-611bc94a15b6,e43d69c8-b284-47da-b236-611bc94a15b6,1,0,31eeaa05-6c49-41fe-b840-1edbad4ccac7,31eeaa05-6c49-41fe-b840-1edbad4ccac7,1,0,842c8662-8f39-405e-9665-cbdabc116159,842c8662-8f39-405e-9665-cbdabc116159,1,0,fca4b033-02c4-4d61-9e51-87783c3cef1a,fca4b033-02c4-4d61-9e51-87783c3cef1a,1,0,396ef757-d7f6-411f-8c4c-1acb1106a009,396ef757-d7f6-411f-8c4c-1acb1106a009,1,0,839e29b1-a0d2-40fa-9f3e-46e66b943358,839e29b1-a0d2-40fa-9f3e-46e66b943358,1,0,9aecf4f5-46ed-4d1c-a584-cd028e467895,9aecf4f5-46ed-4d1c-a584-cd028e467895,1,0,21d92c2f-6c78-43ce-b1f4-59d7845b5a91,21d92c2f-6c78-43ce-b1f4-59d7845b5a91,1,0,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,1,0,a1f10624-22e9-4a04-b370-fd085bdd0f67,a1f10624-22e9-4a04-b370-fd085bdd0f67,1,0,2a4b10be-3cd7-4755-905f-7b4d02ff6a22,2a4b10be-3cd7-4755-905f-7b4d02ff6a22,1,0,3cffb795-2a28-4beb-92f4-5813f5994022,3cffb795-2a28-4beb-92f4-5813f5994022,1,0,3323ca68-1382-4710-a933-23fc56588935,3323ca68-1382-4710-a933-23fc56588935,1,0,d6b12775-3255-42b8-88b2-62684f873e7d,d6b12775-3255-42b8-88b2-62684f873e7d,1,0,cc23d903-ccc5-42f4-862f-5e7278c4e346,cc23d903-ccc5-42f4-862f-5e7278c4e346,1,0,98f033e0-fa40-46e0-b51a-87a066749a35,98f033e0-fa40-46e0-b51a-87a066749a35,1,0,e8b4cb2d-1180-4101-954a-4cb5464f198c,e8b4cb2d-1180-4101-954a-4cb5464f198c,1,0,a379287d-1ce8-460d-a503-910e728e28f1,a379287d-1ce8-460d-a503-910e728e28f1,1,0,f765c4ba-c677-42ac-8d0c-43bb485405b9,f765c4ba-c677-42ac-8d0c-43bb485405b9,1,0,83192b3e-e7a9-4595-8887-24cda84457a9,83192b3e-e7a9-4595-8887-24cda84457a9,1,0,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,1,0,c8a4c5da-bc88-4f6e-9787-1c22c2f41be7,c8a4c5da-bc88-4f6e-9787-1c22c2f41be7,1,0,08eeb8f1-944f-4450-83f6-ef20aaab7d86,08eeb8f1-944f-4450-83f6-ef20aaab7d86,1,0,8d77dd4a-e646-4105-8dcf-8ce8fc3da0b4,8d77dd4a-e646-4105-8dcf-8ce8fc3da0b4,1,0,2fd12dba-5311-4f31-949c-f6b15decc0cc,2fd12dba-5311-4f31-949c-f6b15decc0cc,1,0,d7cf3981-cf63-4a21-868b-8175a7704a8f,d7cf3981-cf63-4a21-868b-8175a7704a8f,1,0,35895e12-52b6-49a1-acdf-6d828a948af0,35895e12-52b6-49a1-acdf-6d828a948af0,1,0,0ae93712-74e8-41c7-8f2d-4dfc8983697d,0ae93712-74e8-41c7-8f2d-4dfc8983697d,1,0,060b6f18-538c-4ea1-9748-00efe0b1ab57,060b6f18-538c-4ea1-9748-00efe0b1ab57,1,0,307b6821-fd82-4a1c-9fdb-a26293d4f713,307b6821-fd82-4a1c-9fdb-a26293d4f713,1,0,a952960b-be1b-4ec4-bd76-80915065a60b,a952960b-be1b-4ec4-bd76-80915065a60b,1,0,64f548c8-c1fc-434e-b3ee-5be367ead1db,64f548c8-c1fc-434e-b3ee-5be367ead1db,1,0,9e4dfdfa-ec05-4c9e-89bd-fc24f60f2678,9e4dfdfa-ec05-4c9e-89bd-fc24f60f2678,1,0,cd592a5d-b184-4558-8a28-7079ccf28b89,cd592a5d-b184-4558-8a28-7079ccf28b89,1,0,2009c673-c1a5-45fc-8da2-a36c435085a6,2009c673-c1a5-45fc-8da2-a36c435085a6,1,0,ab7e5f9a-1dfe-4165-a540-21f45ae1d94d,ab7e5f9a-1dfe-4165-a540-21f45ae1d94d,1,0,5d16e042-3889-4851-86f1-bc43bf06ee88,5d16e042-3889-4851-86f1-bc43bf06ee88,1,0,e5a0e7c2-6186-43a3-a1c5-1f16990602a4,e5a0e7c2-6186-43a3-a1c5-1f16990602a4,1,0,3d47838b-e1aa-4acb-96bf-6de2f9be8bdb,3d47838b-e1aa-4acb-96bf-6de2f9be8bdb,1,0,e0d3efe0-a321-4790-ba5d-e549a91a3ec6,e0d3efe0-a321-4790-ba5d-e549a91a3ec6,1,0,e39ecc8a-ce81-483d-85de-b0488c8b7749,e39ecc8a-ce81-483d-85de-b0488c8b7749,1,0,8f3b124f-bf85-4307-8f0c-47be1fb5c8b0,8f3b124f-bf85-4307-8f0c-47be1fb5c8b0,1,0,e15c3525-3453-4b62-834e-7c69f9efea51,e15c3525-3453-4b62-834e-7c69f9efea51,1,0,1514eaff-faea-4d82-9465-d0d5292bb31d,1514eaff-faea-4d82-9465-d0d5292bb31d,1,0,6d39c6df-8cd4-47ad-9125-252b37d94575,6d39c6df-8cd4-47ad-9125-252b37d94575,1,0,ad73f3a3-1dad-4920-af41-bda2b947a2f7,ad73f3a3-1dad-4920-af41-bda2b947a2f7,1,0,98b67b5a-3550-4a64-9e07-07fcc9154c73,98b67b5a-3550-4a64-9e07-07fcc9154c73,1,0,ad7c6165-2e44-4808-a77a-526882cf5dea,ad7c6165-2e44-4808-a77a-526882cf5dea,1,0,b7e435a9-6107-4d02-a949-cff793462e31,b7e435a9-6107-4d02-a949-cff793462e31,1,0,f0cda8f5-56f5-423b-8c1c-7113433ebf25,f0cda8f5-56f5-423b-8c1c-7113433ebf25,1,0,1a220e88-428b-4d85-926d-e572bf19997c,1a220e88-428b-4d85-926d-e572bf19997c,1,0,ca0d938b-244e-421f-9fa4-320784b9f416,ca0d938b-244e-421f-9fa4-320784b9f416,1,0,a108b11d-a489-4684-84ea-d5377c7394de,a108b11d-a489-4684-84ea-d5377c7394de,1,0,289a2d84-2477-4177-a6ef-507e2cadeea2,289a2d84-2477-4177-a6ef-507e2cadeea2,1,0,61cd6eab-6bab-4382-986e-4c7fc44f369b,61cd6eab-6bab-4382-986e-4c7fc44f369b,1,0,757b547b-b79c-459a-a64a-eef19a09a38f,757b547b-b79c-459a-a64a-eef19a09a38f,1,0,950f8fd5-fefa-4bfb-97a0-38d77ae830dc,950f8fd5-fefa-4bfb-97a0-38d77ae830dc,1,0,cbbe7903-842c-470e-a2d6-7928df8f13e9,cbbe7903-842c-470e-a2d6-7928df8f13e9,1,0,e02597c4-bf45-4bb6-931d-62d2244f6c58,e02597c4-bf45-4bb6-931d-62d2244f6c58,1,0,42544966-445d-41b8-b6a0-a52c64758232,42544966-445d-41b8-b6a0-a52c64758232,1,0,a92d8a5c-b595-4c6c-9f1d-5e85b1c996b4,a92d8a5c-b595-4c6c-9f1d-5e85b1c996b4,1,0,bd68dd13-66bb-40ed-8f4b-0767b7063ffd,bd68dd13-66bb-40ed-8f4b-0767b7063ffd,1,0,9eea8645-1ba7-4faf-9c29-868bf99964dd,9eea8645-1ba7-4faf-9c29-868bf99964dd,1,0,e07ac651-07b9-4664-95e8-f3f5a51ea6c8,e07ac651-07b9-4664-95e8-f3f5a51ea6c8,1,0,0c44fdea-7b81-45be-87f5-d64456a9d379,0c44fdea-7b81-45be-87f5-d64456a9d379,1,0,d09d6f21-cdd0-485e-bd2c-92092a1aefef,d09d6f21-cdd0-485e-bd2c-92092a1aefef,1,0,2fc92784-d7b0-4209-ba06-e54bed2f160f,2fc92784-d7b0-4209-ba06-e54bed2f160f,1,0,d5a5f53b-9cd5-4036-a379-31680cec3c24,d5a5f53b-9cd5-4036-a379-31680cec3c24,1,0,e5b8ea5c-1d08-4f0a-a8f6-358b41e2e9f2,e5b8ea5c-1d08-4f0a-a8f6-358b41e2e9f2,1,0,a4e4c91c-fd95-4369-98e3-51ffba79937b,a4e4c91c-fd95-4369-98e3-51ffba79937b,1,0,d343d4e4-d07f-48c3-9db1-774b0d6c1134,d343d4e4-d07f-48c3-9db1-774b0d6c1134,1,0,14ef2331-6d9b-4cf1-90f3-7d4ac410439d,14ef2331-6d9b-4cf1-90f3-7d4ac410439d,1,0,04ab13b1-ffc2-47f5-aa0d-5850dcbd4a62,04ab13b1-ffc2-47f5-aa0d-5850dcbd4a62,1,0,968588bb-ee60-4399-955a-3ec4228d3c40,968588bb-ee60-4399-955a-3ec4228d3c40,1,0,23dbb528-7ea8-44ae-a1f2-b7608118666e,23dbb528-7ea8-44ae-a1f2-b7608118666e,1,0,b9627855-6773-4a59-b7d3-f9e2e565cd9e,b9627855-6773-4a59-b7d3-f9e2e565cd9e,1,0,ad87bd29-0ad1-4da4-ac62-38e714e0cb9f,ad87bd29-0ad1-4da4-ac62-38e714e0cb9f,1,0,283ce432-3553-4de9-94a2-ca9a590437f5,283ce432-3553-4de9-94a2-ca9a590437f5,1,0,0da019ca-1fc7-4aff-8998-3ddcccf10872,0da019ca-1fc7-4aff-8998-3ddcccf10872,1,0,7102d4fa-92f2-4fba-ad09-a33dbc71bef2,7102d4fa-92f2-4fba-ad09-a33dbc71bef2,1,0,34b0e268-497d-44d4-b822-84909d0685aa,34b0e268-497d-44d4-b822-84909d0685aa,1,0,8961a859-2203-4678-ae1f-63e2474a787a,8961a859-2203-4678-ae1f-63e2474a787a,1,0,fe63db47-3ece-4518-b6a2-0b6499f60a61,fe63db47-3ece-4518-b6a2-0b6499f60a61,1,0,654523be-93d9-4faa-9a35-ce2fede13820,654523be-93d9-4faa-9a35-ce2fede13820,1,0,671afc3e-7589-49d8-95a5-1cf195c3b2f8,671afc3e-7589-49d8-95a5-1cf195c3b2f8,1,0,47accdc7-8fa0-4996-9305-c42b6ca12df9,47accdc7-8fa0-4996-9305-c42b6ca12df9,1,0,5abc496c-5745-4220-9fdc-bac092717871,5abc496c-5745-4220-9fdc-bac092717871,1,0,6b29b4b3-df0a-42f7-b89f-809ffbdacf02,6b29b4b3-df0a-42f7-b89f-809ffbdacf02,1,0,43d8dd53-df3e-407e-a3c1-5b893cc1976c,43d8dd53-df3e-407e-a3c1-5b893cc1976c,1,0,b8c4aff0-a36d-4be9-9a5e-b0873d83ff15,b8c4aff0-a36d-4be9-9a5e-b0873d83ff15,1,0,5a88f624-7b7e-43fe-8bc4-ae85d832a855,5a88f624-7b7e-43fe-8bc4-ae85d832a855,1,0,42e39ef7-268f-4053-b4e5-4bceab17d3e4,42e39ef7-268f-4053-b4e5-4bceab17d3e4,1,0,7df36398-7752-4f51-9978-1bcb4bcdd062,7df36398-7752-4f51-9978-1bcb4bcdd062,1,0,9fd55b7f-209b-4b74-99d6-965b8f6f2df9,9fd55b7f-209b-4b74-99d6-965b8f6f2df9,1,0,f818fde9-1b06-4507-a69f-4dcb0ce8cd7a,f818fde9-1b06-4507-a69f-4dcb0ce8cd7a,1,0,a6690ef1-b16a-4d58-bc31-a8089b2c00d8,a6690ef1-b16a-4d58-bc31-a8089b2c00d8,1,0,fce03f58-7f68-4d7c-a999-687667c1f03d,fce03f58-7f68-4d7c-a999-687667c1f03d,1,0,316f94ec-81ed-4b5c-aa9d-98d2cfe1c641,316f94ec-81ed-4b5c-aa9d-98d2cfe1c641,1,0,f4885af5-6ed6-40e8-81a5-0e9537f943d7,f4885af5-6ed6-40e8-81a5-0e9537f943d7,1,0,87472d14-0d8c-4813-8a3e-2721bbb26811,87472d14-0d8c-4813-8a3e-2721bbb26811,1,0,44cf6d0a-0a5b-4ca1-b91e-af61f40fb825,44cf6d0a-0a5b-4ca1-b91e-af61f40fb825,1,0,dcdf2b25-b024-4a89-b2c4-0a2ee43ef623,dcdf2b25-b024-4a89-b2c4-0a2ee43ef623,1,0,9200527c-b6b9-4962-9440-10449583e1e3,9200527c-b6b9-4962-9440-10449583e1e3,1,0,e8faa1a9-807a-4916-b3c5-76ba2199754c,e8faa1a9-807a-4916-b3c5-76ba2199754c,1,0,99b5c632-61fe-41f5-ac00-ea530633bf28,99b5c632-61fe-41f5-ac00-ea530633bf28,1,0,a3c9c4e7-d36a-4db1-bd95-a50886c4be60,a3c9c4e7-d36a-4db1-bd95-a50886c4be60,1,0,4c53f94e-d7e8-457c-b337-59d3b3c5bf24,4c53f94e-d7e8-457c-b337-59d3b3c5bf24,1,0,bd6d7dcd-421c-402e-b6b8-f6ce6b18c140,bd6d7dcd-421c-402e-b6b8-f6ce6b18c140,1,0,485911f7-a964-450d-82da-cab020836eb2,485911f7-a964-450d-82da-cab020836eb2,1,0,484003f5-a6df-48fb-a395-d0e0ebc8cc0d,484003f5-a6df-48fb-a395-d0e0ebc8cc0d,1,0,cedd0b47-07cb-4dae-86b5-31d396b693c7,cedd0b47-07cb-4dae-86b5-31d396b693c7,1,0,8b4614aa-c769-49f4-a281-a0ffb101abf1,8b4614aa-c769-49f4-a281-a0ffb101abf1,1,0,c08391e1-c4e3-42aa-8738-061031d0cb75,c08391e1-c4e3-42aa-8738-061031d0cb75,1,0,b7a0d00f-fbf3-41fe-b72f-c17e163264f9,b7a0d00f-fbf3-41fe-b72f-c17e163264f9,1,0,bf4c6723-e586-4643-9f03-9e672afea26f,bf4c6723-e586-4643-9f03-9e672afea26f,1,0,4c3a39e3-40ee-423b-91f0-14b60e045b40,4c3a39e3-40ee-423b-91f0-14b60e045b40,1,0,23204b0b-bf77-4f7c-9945-e73ad924ebb4,23204b0b-bf77-4f7c-9945-e73ad924ebb4,1,0,dd9d3586-775b-4d5b-ab2d-78db0870ecdd,dd9d3586-775b-4d5b-ab2d-78db0870ecdd,1,0,44c610c3-9c0b-4bf0-95d6-f17100d3e98d,44c610c3-9c0b-4bf0-95d6-f17100d3e98d,1,0,a54f2d41-a05e-4878-80c6-81ca2899fa4c,a54f2d41-a05e-4878-80c6-81ca2899fa4c,1,0,23a898d9-5bcb-4744-ab6c-97b17dc98f20,23a898d9-5bcb-4744-ab6c-97b17dc98f20,1,0,50a04251-ac9c-4a21-a37f-ebc9ac3ef233,50a04251-ac9c-4a21-a37f-ebc9ac3ef233,1,0,f8f56806-ed7e-4059-a0c8-940538c14c98,f8f56806-ed7e-4059-a0c8-940538c14c98,1,0,9ff9f92b-c509-48da-82ce-15b524a895d6,9ff9f92b-c509-48da-82ce-15b524a895d6,1,0,c8bf96c8-f359-4940-8e87-3d190371d6d3,c8bf96c8-f359-4940-8e87-3d190371d6d3,1,0,477f0b81-0eb1-4de1-8cb5-38f1e0823947,477f0b81-0eb1-4de1-8cb5-38f1e0823947,1,0,d914eaa9-ce85-4df7-a545-2d411ef915b0,d914eaa9-ce85-4df7-a545-2d411ef915b0,1,0,41881344-82b7-4904-9ab8-0207d9bcd0a9,41881344-82b7-4904-9ab8-0207d9bcd0a9,1,0,ef4d648f-4cac-4df9-9880-2aa13c422d10,ef4d648f-4cac-4df9-9880-2aa13c422d10,1,0,21032fa5-9426-40bd-91e4-ace1e4ceb013,21032fa5-9426-40bd-91e4-ace1e4ceb013,1,0,7185a8f8-48c4-43a9-b31f-102302b8f152,7185a8f8-48c4-43a9-b31f-102302b8f152,1,0,ddfe5401-e136-4f20-aa65-aeb42a61a1f0,ddfe5401-e136-4f20-aa65-aeb42a61a1f0,1,0,27a80757-c0fd-40c7-ad24-4c819c1ba72b,27a80757-c0fd-40c7-ad24-4c819c1ba72b,1,0,c573a29f-4c39-402d-8af4-e0fff80877f8,c573a29f-4c39-402d-8af4-e0fff80877f8,1,0,7fce9e49-e558-4760-9d95-dde6ac6c1e78,7fce9e49-e558-4760-9d95-dde6ac6c1e78,1,0,e5aba4a3-6056-4ef3-827c-d74283175393,e5aba4a3-6056-4ef3-827c-d74283175393,1,0,63039e62-7314-42ff-bdc6-c251f38b3827,63039e62-7314-42ff-bdc6-c251f38b3827,1,0,8a4b7aab-b602-4581-8fa4-fab66791f701,8a4b7aab-b602-4581-8fa4-fab66791f701,1,0,7c92c579-4651-4fe3-90dc-6c9b594b76f0,7c92c579-4651-4fe3-90dc-6c9b594b76f0,1,0,a2be2d7a-cca0-460f-a915-dadfb9cd588b,a2be2d7a-cca0-460f-a915-dadfb9cd588b,1,0,35bac3e3-1329-4aa6-866f-f6fcaed8cd6e,35bac3e3-1329-4aa6-866f-f6fcaed8cd6e,1,0,ed53b24d-5338-4ae1-8659-0ea6450dc7bb,ed53b24d-5338-4ae1-8659-0ea6450dc7bb,1,0,6add2712-48e8-4b22-a7bb-7d8c808ac5fc,6add2712-48e8-4b22-a7bb-7d8c808ac5fc,1,0,1f4408f5-460e-431b-9842-bc6875ccf0ae,1f4408f5-460e-431b-9842-bc6875ccf0ae,1,0,ec09aa2d-758f-4ae8-96b7-0f05b8187dda,ec09aa2d-758f-4ae8-96b7-0f05b8187dda,1,0,7bfc6163-a62f-45e8-9112-40a5d675ba4a,7bfc6163-a62f-45e8-9112-40a5d675ba4a,1,0,542ff510-0245-4a08-80ac-a9941c66ae93,542ff510-0245-4a08-80ac-a9941c66ae93,1,0,03297623-eaa2-4db0-bf1b-ce2076faf20a,03297623-eaa2-4db0-bf1b-ce2076faf20a,1,0,3c6ef64e-c9bd-4cba-98a4-ffcc5b93b6da,3c6ef64e-c9bd-4cba-98a4-ffcc5b93b6da,1,0,700c2edd-c457-47b7-a7d3-5fb3d9078d1f,700c2edd-c457-47b7-a7d3-5fb3d9078d1f,1,0,82a3802c-b6d6-4511-bd8b-eeec003afa33,82a3802c-b6d6-4511-bd8b-eeec003afa33,1,0,8b59dec8-12b8-455f-8dfc-7c3f03b4ffa5,8b59dec8-12b8-455f-8dfc-7c3f03b4ffa5,1,0,b5eb2e12-c39c-44fa-b940-09b4dcd2817c,b5eb2e12-c39c-44fa-b940-09b4dcd2817c,1,0,5d5ffb56-e18b-4831-94f0-d7a76c2eee6f,5d5ffb56-e18b-4831-94f0-d7a76c2eee6f,1,0,590f29f4-2db1-47c6-83a0-f44d4bbe6e3e,590f29f4-2db1-47c6-83a0-f44d4bbe6e3e,1,0,a755cb43-492d-4069-9b6a-29b92ebb5b0e,a755cb43-492d-4069-9b6a-29b92ebb5b0e,1,0,7f7598e5-ca54-487e-b95c-b18d330b034c,7f7598e5-ca54-487e-b95c-b18d330b034c,1,0,86d09107-f511-4148-b5d9-d97e92addfde,86d09107-f511-4148-b5d9-d97e92addfde,1,0,c14c1f91-f4b9-44d6-b560-8dcdb5faf5f9,c14c1f91-f4b9-44d6-b560-8dcdb5faf5f9,1,0,55b78834-3d90-4858-a6f7-e0368b1d8c41,55b78834-3d90-4858-a6f7-e0368b1d8c41,1,0,059b9a75-f53a-4518-a48a-afc72ab9ee36,059b9a75-f53a-4518-a48a-afc72ab9ee36,1,0,bc0dcb68-bfb8-49f4-8eb4-2ca953d852bd,bc0dcb68-bfb8-49f4-8eb4-2ca953d852bd,1,0,31e95872-97c7-49e3-bd1b-8df4de07014d,31e95872-97c7-49e3-bd1b-8df4de07014d,1,0,8b9be02b-cd1f-4231-a895-6c9be26348c2,8b9be02b-cd1f-4231-a895-6c9be26348c2,1,0,c52c4b8c-6be7-460a-9b54-6cdf64e3f8fe,c52c4b8c-6be7-460a-9b54-6cdf64e3f8fe,1,0,64e03321-33a4-424d-a101-90f1e0da4c2e,64e03321-33a4-424d-a101-90f1e0da4c2e,1,0,fa4f0b33-5253-4a5f-8121-feae3e1968a6,fa4f0b33-5253-4a5f-8121-feae3e1968a6,1,0,e0d21be2-91dc-4a04-9078-49420ddddcd5,e0d21be2-91dc-4a04-9078-49420ddddcd5,1,0,56c97764-7dba-42e0-8ba0-82712aca20e9,56c97764-7dba-42e0-8ba0-82712aca20e9,1,0,a1d80053-ef03-4c00-9fc9-266e61aeaffb,a1d80053-ef03-4c00-9fc9-266e61aeaffb,1,0,03ad9b3d-8f3a-4482-a777-f6a3b3d953d6,03ad9b3d-8f3a-4482-a777-f6a3b3d953d6,1,0,3f05dcf9-be52-42e1-b5ff-dea14d97a26f,3f05dcf9-be52-42e1-b5ff-dea14d97a26f,1,0,ea868745-71fc-483c-aa6e-f242c06c673f,ea868745-71fc-483c-aa6e-f242c06c673f,1,0,7f3c6269-ea41-492f-87b7-7eaaf712762e,7f3c6269-ea41-492f-87b7-7eaaf712762e,1,0,a5d037b0-c666-4179-9d6a-5f48c4a126a8,a5d037b0-c666-4179-9d6a-5f48c4a126a8,1,0,f0850411-4dee-4f1d-baec-7d6c96b10637,f0850411-4dee-4f1d-baec-7d6c96b10637,1,0,12f95031-b81f-4802-b2f3-6f70def90db0,12f95031-b81f-4802-b2f3-6f70def90db0,1,0,5732112a-f31d-41cd-9a7f-312a27395502,5732112a-f31d-41cd-9a7f-312a27395502,1,0,bbf8342b-24f0-4d11-bb5a-4c89d5ea7766,bbf8342b-24f0-4d11-bb5a-4c89d5ea7766,1,0,691f9902-6b95-4579-a3d9-3b2b5b548776,691f9902-6b95-4579-a3d9-3b2b5b548776,1,0,06fc381d-f27a-433c-95c3-e0981e01f22b,06fc381d-f27a-433c-95c3-e0981e01f22b,1,0,f646835e-61eb-4ebd-811e-dac5e70bd1b4,f646835e-61eb-4ebd-811e-dac5e70bd1b4,1,0,61b49c4c-3021-4868-834a-9137476ae169,61b49c4c-3021-4868-834a-9137476ae169,1,0,58911911-5192-45fe-87cf-c4a222a521a1,58911911-5192-45fe-87cf-c4a222a521a1,1,0,70067937-9f27-4442-b87b-6c4576ce1b78,70067937-9f27-4442-b87b-6c4576ce1b78,1,0,115d5d06-a2fc-453e-aab5-c869b6d5850b,115d5d06-a2fc-453e-aab5-c869b6d5850b,1,0,d33ca006-d81d-4ef8-8503-7878e81c599f,d33ca006-d81d-4ef8-8503-7878e81c599f,1,0,123bb339-b95e-44c3-b1e9-482dcaa6f297,123bb339-b95e-44c3-b1e9-482dcaa6f297,1,0,f4119605-beb3-46b6-b372-ecdb74f10a33,f4119605-beb3-46b6-b372-ecdb74f10a33,1,0,d2a2e332-a52c-4277-bd19-5ea8ef198469,d2a2e332-a52c-4277-bd19-5ea8ef198469,1,0,e440c594-14bb-4a6e-af53-a4519c7d5548,e440c594-14bb-4a6e-af53-a4519c7d5548,1,0,4165bdaa-8e27-40de-bcdc-0379c34e8868,4165bdaa-8e27-40de-bcdc-0379c34e8868,1,0,a9a3fde2-99d5-4ebf-88b1-eccd9d74276e,a9a3fde2-99d5-4ebf-88b1-eccd9d74276e,1,0,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,c2049ace-3095-4dd7-9cc0-7721118451ad,c2049ace-3095-4dd7-9cc0-7721118451ad,1,0,dc17d8b6-d277-43eb-8823-71d440ae1e90,dc17d8b6-d277-43eb-8823-71d440ae1e90,1,0,c5b8bf21-5c8f-4e5b-8b85-bfac387ce99a,c5b8bf21-5c8f-4e5b-8b85-bfac387ce99a,1,0,2465986e-7519-4638-9f62-5f692bebeeac,2465986e-7519-4638-9f62-5f692bebeeac,1,0,d9a6706e-3dcd-4aec-b9d1-542330ba6e2e,d9a6706e-3dcd-4aec-b9d1-542330ba6e2e,1,0,7cbf0398-2bc7-4f40-9a9e-af4135c6a2d2,7cbf0398-2bc7-4f40-9a9e-af4135c6a2d2,1,0,022f99dd-e1b7-42a7-8141-a8c2e8628901,022f99dd-e1b7-42a7-8141-a8c2e8628901,1,0,2522fce4-d121-482b-a39d-0c1a842d315e,2522fce4-d121-482b-a39d-0c1a842d315e,1,0,cc770616-f6f6-4054-876c-f319b1f8c6cf,cc770616-f6f6-4054-876c-f319b1f8c6cf,1,0,3baffdec-a2cb-48c9-9c21-4fc469e81e3b,3baffdec-a2cb-48c9-9c21-4fc469e81e3b,1,0,8486e623-1a54-4ad9-ab44-591b6a559bc3,8486e623-1a54-4ad9-ab44-591b6a559bc3,1,0,dce82d28-9a7b-4d4c-af13-90f459cf4af2,dce82d28-9a7b-4d4c-af13-90f459cf4af2,1,0,cb9f2231-49bb-4b14-a124-8996628afead,cb9f2231-49bb-4b14-a124-8996628afead,1,0,6fe9a455-7fef-4a1b-8109-57eafc17e2b6,6fe9a455-7fef-4a1b-8109-57eafc17e2b6,1,0,dc1b8bce-49c5-4fd2-a597-27f1fbc98648,dc1b8bce-49c5-4fd2-a597-27f1fbc98648,1,0,ac4c6275-3c23-4a1f-b19e-c674fd685e8f,ac4c6275-3c23-4a1f-b19e-c674fd685e8f,1,0,896de79f-3c34-4436-a4e2-4dd4f45c3e20,896de79f-3c34-4436-a4e2-4dd4f45c3e20,1,0,25d118f0-bfb7-4f08-84b1-0511b0fc92e8,25d118f0-bfb7-4f08-84b1-0511b0fc92e8,1,0,e6c42b5d-57fd-42ce-a968-653620e797f6,e6c42b5d-57fd-42ce-a968-653620e797f6,1,0,724fb328-fec6-4afe-bc99-0ff0951b184b,724fb328-fec6-4afe-bc99-0ff0951b184b,1,0,7a0cdc94-9e53-4fcc-ac2f-97ad2ad939f5,7a0cdc94-9e53-4fcc-ac2f-97ad2ad939f5,1,0,f6259a3b-98f5-4649-8fd0-da0a0285f375,f6259a3b-98f5-4649-8fd0-da0a0285f375,1,0,c565bf25-c55e-4324-851a-cec497f5114a,c565bf25-c55e-4324-851a-cec497f5114a,1,0,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,4807629d-8421-4bd9-beb4-5b2940197958,4807629d-8421-4bd9-beb4-5b2940197958,1,0,4bad7c64-131a-42cb-9be7-d61f14f456d0,4bad7c64-131a-42cb-9be7-d61f14f456d0,1,0,d46e141b-7a10-4d65-971f-3a35f2114017,d46e141b-7a10-4d65-971f-3a35f2114017,1,0,cd6f96c7-33ee-42b1-bb81-ce7d9652337c,cd6f96c7-33ee-42b1-bb81-ce7d9652337c,1,0,766c7fb5-727e-4975-9ea1-3b0df4739620,766c7fb5-727e-4975-9ea1-3b0df4739620,1,0,ba59393c-c499-4999-91d4-b9e34d94db0e,ba59393c-c499-4999-91d4-b9e34d94db0e,1,0,626da0dd-d75b-4779-be1f-9b71d2f2d4e1,626da0dd-d75b-4779-be1f-9b71d2f2d4e1,1,0,1d4b7f71-6c72-4f41-a2ed-1f2fe2122c04,1d4b7f71-6c72-4f41-a2ed-1f2fe2122c04,1,0,fcf6a4cd-d0c9-4f83-b9b0-514baed3ccb9,fcf6a4cd-d0c9-4f83-b9b0-514baed3ccb9,1,0,3f92cffe-b4ea-45e3-b2b9-a9e316405a8c,3f92cffe-b4ea-45e3-b2b9-a9e316405a8c,1,0,a3a9a48b-f241-45b2-b93b-d34bba0a8a66,a3a9a48b-f241-45b2-b93b-d34bba0a8a66,1,0,ba5574bd-53ca-413f-a245-272f468a80fb,ba5574bd-53ca-413f-a245-272f468a80fb,1,0,772e7011-0019-4edc-b673-b7151cf4fa6c,772e7011-0019-4edc-b673-b7151cf4fa6c,1,0,21ac47fa-12c2-43e2-9b57-afdf521d3485,21ac47fa-12c2-43e2-9b57-afdf521d3485,1,0,f58bffe7-4a02-4c4e-bfed-7895177a400c,f58bffe7-4a02-4c4e-bfed-7895177a400c,1,0,fe285122-2257-4fb2-ab7e-1683c31db1c6,fe285122-2257-4fb2-ab7e-1683c31db1c6,1,0,0facc6eb-a178-45ee-a6bc-4bf085d80453,0facc6eb-a178-45ee-a6bc-4bf085d80453,1,0,f74eef36-9441-4b6f-b21c-de9643832f9f,f74eef36-9441-4b6f-b21c-de9643832f9f,1,0,8d1c44d7-52f2-4089-9d77-2f03bf051455,8d1c44d7-52f2-4089-9d77-2f03bf051455,1,0,ac2e5217-aaeb-4b6f-b063-538c84f2da06,ac2e5217-aaeb-4b6f-b063-538c84f2da06,1,0,b5e73fbe-499c-4666-a482-0ef399c97c1e,b5e73fbe-499c-4666-a482-0ef399c97c1e,1,0,a0811e0a-91b6-4c4b-a6d2-a57b9185983b,a0811e0a-91b6-4c4b-a6d2-a57b9185983b,1,0,4ac77dea-3c2b-4566-8857-ba99f7b025c9,4ac77dea-3c2b-4566-8857-ba99f7b025c9,1,0,8e87da88-9fa8-4dd8-b904-622b763239f4,8e87da88-9fa8-4dd8-b904-622b763239f4,1,0,529cc5b5-835f-4e70-9232-a9649fdc7ae5,529cc5b5-835f-4e70-9232-a9649fdc7ae5,1,0,09fec67d-6e45-428c-b858-9ae20979676c,09fec67d-6e45-428c-b858-9ae20979676c,1,0,4875a235-bcc8-47eb-83e3-a66f0f690b97,4875a235-bcc8-47eb-83e3-a66f0f690b97,1,0,58ffc4d9-d711-4b68-905c-d2ac4f78b547,58ffc4d9-d711-4b68-905c-d2ac4f78b547,1,0,114ab2a1-f7c3-4453-a6cc-4c5a23c00cb5,114ab2a1-f7c3-4453-a6cc-4c5a23c00cb5,1,0,93c347d8-66cb-406c-9ee6-b1962482893f,93c347d8-66cb-406c-9ee6-b1962482893f,1,0,94ab750f-46b4-427c-a7f2-4e94fb9b0678,94ab750f-46b4-427c-a7f2-4e94fb9b0678,1,0,397d9926-31a3-4c03-acb7-74478f9863e1,397d9926-31a3-4c03-acb7-74478f9863e1,1,0,264dd12a-b4c5-44bf-b3c0-ef9225505f76,264dd12a-b4c5-44bf-b3c0-ef9225505f76,1,0,90b8fdf3-3e42-442f-a002-6a28ad0edc99,90b8fdf3-3e42-442f-a002-6a28ad0edc99,1,0,92f35bea-50b8-4a1c-8fb2-a8c7df7a50db,92f35bea-50b8-4a1c-8fb2-a8c7df7a50db,1,0,82ba8c13-6567-4f0c-be0e-0884ce19bbcc,82ba8c13-6567-4f0c-be0e-0884ce19bbcc,1,0,4bdc1a18-f184-4f95-bda4-8f5c4b7c3aa1,4bdc1a18-f184-4f95-bda4-8f5c4b7c3aa1,1,0,697bd1de-bbef-4362-aa39-71f6008f4bd7,697bd1de-bbef-4362-aa39-71f6008f4bd7,1,0,a3e9afe9-1587-47c7-8e7b-b8df6b3a2664,a3e9afe9-1587-47c7-8e7b-b8df6b3a2664,1,0,0e31d69a-8d2c-4ad0-b3ac-93ba5afcefdf,0e31d69a-8d2c-4ad0-b3ac-93ba5afcefdf,1,0,3de28e34-3c1e-4e7f-a720-3418c8c9c496,3de28e34-3c1e-4e7f-a720-3418c8c9c496,1,0,7f2d69b4-2f87-40f4-a78c-fe4cabc2a502,7f2d69b4-2f87-40f4-a78c-fe4cabc2a502,1,0,dacb236e-42a5-47e5-b239-ff18ae48e21e,dacb236e-42a5-47e5-b239-ff18ae48e21e,1,0,5cdb6e71-fd20-461a-83db-d59ccdb5b366,5cdb6e71-fd20-461a-83db-d59ccdb5b366,1,0,388b8576-9ba4-460f-b71b-3d644663656a,388b8576-9ba4-460f-b71b-3d644663656a,1,0,d4d38827-fce6-4c39-a4b4-51c7d7edc475,d4d38827-fce6-4c39-a4b4-51c7d7edc475,1,0,2d40609d-b56f-4082-9a6f-8216817ebd24,2d40609d-b56f-4082-9a6f-8216817ebd24,1,0,b238b4b2-beaf-4b5d-a728-8aebac3bacb5,b238b4b2-beaf-4b5d-a728-8aebac3bacb5,1,0,732b19c8-4f22-4748-a796-71538e46fc2f,732b19c8-4f22-4748-a796-71538e46fc2f,1,0,9fb2169b-fc77-4a3f-a1d8-b939079d9d9d,9fb2169b-fc77-4a3f-a1d8-b939079d9d9d,1,0,3fe0ef25-ce56-435d-b343-eadfec91a636,3fe0ef25-ce56-435d-b343-eadfec91a636,1,0,74f02619-7fa8-4c6d-81d6-230156ee45f4,74f02619-7fa8-4c6d-81d6-230156ee45f4,1,0,62ef3558-5ad3-44ab-8578-1acbbfa54135,62ef3558-5ad3-44ab-8578-1acbbfa54135,1,0,a103cca0-8243-40e9-bcdd-97a1cc8a3943,a103cca0-8243-40e9-bcdd-97a1cc8a3943,1,0,c3572d8d-46ff-40bb-800c-2c07f884c219,c3572d8d-46ff-40bb-800c-2c07f884c219,1,0,80fd89d7-160d-4528-9aa0-05b8dac64b4c,80fd89d7-160d-4528-9aa0-05b8dac64b4c,1,0,4eb24fcd-85f6-4fa6-bc9f-baef3861664e,4eb24fcd-85f6-4fa6-bc9f-baef3861664e,1,0,da551cf6-4f86-4e37-8967-a84c80e1fb13,da551cf6-4f86-4e37-8967-a84c80e1fb13,1,0,5fb2c120-fd14-4e78-a35f-c8e9478b3235,5fb2c120-fd14-4e78-a35f-c8e9478b3235,1,0,9d514ce1-f9bd-4018-8107-545cdd372fbd,9d514ce1-f9bd-4018-8107-545cdd372fbd,1,0,fe6b732f-3a33-460f-9686-cffdd5f7d99b,fe6b732f-3a33-460f-9686-cffdd5f7d99b,1,0,06250212-aeb1-4cb8-8785-ea71b1dad848,06250212-aeb1-4cb8-8785-ea71b1dad848,1,0,0c068a61-e5e6-4475-96fa-b7c1d825da42,0c068a61-e5e6-4475-96fa-b7c1d825da42,1,0,1047e34d-397a-42cc-80e6-1be755bd6462,1047e34d-397a-42cc-80e6-1be755bd6462,1,0,1cd473c3-4e36-47a9-b466-73d86ec244b0,1cd473c3-4e36-47a9-b466-73d86ec244b0,1,0,c3e31dfd-b79b-49b9-9dc0-e2439bfe5ab7,c3e31dfd-b79b-49b9-9dc0-e2439bfe5ab7,1,0,b406b5f9-eeaf-43a0-8930-067554d783c9,b406b5f9-eeaf-43a0-8930-067554d783c9,1,0,47718840-2939-4e30-a72c-a20c88ac4c17,47718840-2939-4e30-a72c-a20c88ac4c17,1,0,58a38994-9fe4-4783-967d-79d1141b90f3,58a38994-9fe4-4783-967d-79d1141b90f3,1,0,6e23a4b2-f53c-41ea-9fef-8f4561b8e0cc,6e23a4b2-f53c-41ea-9fef-8f4561b8e0cc,1,0,7c2e35a8-d05d-4e52-baee-a1e13585c502,7c2e35a8-d05d-4e52-baee-a1e13585c502,1,0,5d8b60e5-d407-4d8a-b4fb-e26a36ab8180,5d8b60e5-d407-4d8a-b4fb-e26a36ab8180,1,0,2cea7641-6f1d-4bc7-9d38-8d99f196e0f5,2cea7641-6f1d-4bc7-9d38-8d99f196e0f5,1,0,7fa6a20a-26e2-41ad-be66-a43b50d0bbcd,7fa6a20a-26e2-41ad-be66-a43b50d0bbcd,1,0,ab5b0155-a4b1-47a1-ad87-12365dde20c1,ab5b0155-a4b1-47a1-ad87-12365dde20c1,1,0,f551f78a-2f05-4932-ac33-cfa1b077f46f,f551f78a-2f05-4932-ac33-cfa1b077f46f,1,0,a96091a7-d3a5-4893-8440-f360231bf468,a96091a7-d3a5-4893-8440-f360231bf468,1,0,9ce6eef0-5280-4374-9714-474ac571e4e2,9ce6eef0-5280-4374-9714-474ac571e4e2,1,0,6f21c34c-26aa-493d-aa08-2d4366b4064a,6f21c34c-26aa-493d-aa08-2d4366b4064a,1,0,0f55650a-2422-42a9-8258-61df4c17f1ef,0f55650a-2422-42a9-8258-61df4c17f1ef,1,0,2ef4ea1d-fd86-4ef3-a7e0-73abba89474d,2ef4ea1d-fd86-4ef3-a7e0-73abba89474d,1,0,3eaece9d-c9be-4b0b-a6f6-a3932274b806,3eaece9d-c9be-4b0b-a6f6-a3932274b806,1,0,5d9427ec-981d-4fb5-878b-8dba0d3a5536,5d9427ec-981d-4fb5-878b-8dba0d3a5536,1,0,c5dd6184-96e5-4abc-8c1e-5270e6547ee5,c5dd6184-96e5-4abc-8c1e-5270e6547ee5,1,0,a0047712-5769-495d-97af-20d06751a5b4,a0047712-5769-495d-97af-20d06751a5b4,1,0,e729c3c6-16e5-405b-99b1-a88022300c6d,e729c3c6-16e5-405b-99b1-a88022300c6d,1,0,9c089520-8233-42f6-8eee-9839ac708c6f,9c089520-8233-42f6-8eee-9839ac708c6f,1,0,24f2cfc7-6dc0-400c-8eb2-106ca2ea7034,24f2cfc7-6dc0-400c-8eb2-106ca2ea7034,1,0,5f3ffa44-49be-4da5-ab2a-a35c9bd76dee,5f3ffa44-49be-4da5-ab2a-a35c9bd76dee,1,0,89055896-49dd-4cfd-ab78-8ac3698e12d5,89055896-49dd-4cfd-ab78-8ac3698e12d5,1,0,aeb54e92-a1d0-46a1-b4cb-87d3c29fa30b,aeb54e92-a1d0-46a1-b4cb-87d3c29fa30b,1,0,8395bfb2-3cf4-4bec-b19b-eb6dd3aa7a39,8395bfb2-3cf4-4bec-b19b-eb6dd3aa7a39,1,0,672c4741-6d7b-4d3e-baa7-389bef0625d7,672c4741-6d7b-4d3e-baa7-389bef0625d7,1,0,04398ec0-1c13-43f8-8f5d-7b7619592a4d,04398ec0-1c13-43f8-8f5d-7b7619592a4d,1,0,ce463861-92df-47f2-bd0f-4a2dbf72aacc,ce463861-92df-47f2-bd0f-4a2dbf72aacc,1,0,eca79a64-3d00-4178-b4eb-cf5468622c96,eca79a64-3d00-4178-b4eb-cf5468622c96,1,0,1487d68c-7a2f-48cf-8c80-4074072ed52c,1487d68c-7a2f-48cf-8c80-4074072ed52c,1,0,6ed8c74c-6b6e-4ed1-95ff-a733f618b213,6ed8c74c-6b6e-4ed1-95ff-a733f618b213,1,0,d97c6536-fd62-4c9a-b83e-490a29a0721b,d97c6536-fd62-4c9a-b83e-490a29a0721b,1,0,60cd8bc4-6a5d-4d36-83d0-76a8477eda6a,60cd8bc4-6a5d-4d36-83d0-76a8477eda6a,1,0,6dc4c216-e49f-4833-b45f-6060b67995ef,6dc4c216-e49f-4833-b45f-6060b67995ef,1,0,4655fa12-9169-4d08-bdab-9b3174d0b223,4655fa12-9169-4d08-bdab-9b3174d0b223,1,0,6c07ddfb-8823-4953-9905-9550b847dc3f,6c07ddfb-8823-4953-9905-9550b847dc3f,1,0,2362a8d5-dca2-4527-acc0-63782377f28a,2362a8d5-dca2-4527-acc0-63782377f28a,1,0,dfd6d85c-a734-4458-83b0-87b5949f9c68,dfd6d85c-a734-4458-83b0-87b5949f9c68,1,0,4e3b0b9f-45b7-48a8-86c6-cc14a921aa78,4e3b0b9f-45b7-48a8-86c6-cc14a921aa78,1,0,79b6ecf5-8a6b-44a4-9587-5f8764463228,79b6ecf5-8a6b-44a4-9587-5f8764463228,1,0,cd49148c-e385-4b75-a758-a93196e73dba,cd49148c-e385-4b75-a758-a93196e73dba,1,0,ece15c4e-4a4b-421b-9f00-10f698da476b,ece15c4e-4a4b-421b-9f00-10f698da476b,1,0,6cb136cd-dc5c-4d85-8a0d-70b9f8bf70d5,6cb136cd-dc5c-4d85-8a0d-70b9f8bf70d5,1,0,300ecdd6-144f-48c8-9fd4-6166f1de1047,300ecdd6-144f-48c8-9fd4-6166f1de1047,1,0,b6bbfb59-8249-47af-9394-be262f118811,b6bbfb59-8249-47af-9394-be262f118811,1,0,15dab650-f7ed-42bc-8ca3-c104c3e68ce4,15dab650-f7ed-42bc-8ca3-c104c3e68ce4,1,0,fb63d488-fb91-4d08-8f8c-f4836538216f,fb63d488-fb91-4d08-8f8c-f4836538216f,1,0,b8be6c09-6880-45d3-a2d1-06ad72d069c9,b8be6c09-6880-45d3-a2d1-06ad72d069c9,1,0,3c1b10c7-3667-43f0-ac03-8cdaa84cb177,3c1b10c7-3667-43f0-ac03-8cdaa84cb177,1,0,148dd521-8754-451b-803b-cbee7c3d3965,148dd521-8754-451b-803b-cbee7c3d3965,1,0,38bc48c7-3938-47be-be3f-844f19561301,38bc48c7-3938-47be-be3f-844f19561301,1,0,4bdd09d5-6bc9-421f-99f0-ae905340f0d4,4bdd09d5-6bc9-421f-99f0-ae905340f0d4,1,0,147038fb-6154-41f3-aad6-547db27d1e43,147038fb-6154-41f3-aad6-547db27d1e43,1,0,832fa9d3-deab-4c57-b6e2-dee5d24d6100,832fa9d3-deab-4c57-b6e2-dee5d24d6100,1,0,dd4270ef-6b4c-491e-8871-959dbec14c53,dd4270ef-6b4c-491e-8871-959dbec14c53,1,0,c2b115d3-04f8-43c8-aed9-c61280b8cc3b,c2b115d3-04f8-43c8-aed9-c61280b8cc3b,1,0,8ccd9be8-ef26-49b9-8cee-03ae4e500386,8ccd9be8-ef26-49b9-8cee-03ae4e500386,1,0,ddca925c-fdcd-40ce-a504-4fca1758de3f,ddca925c-fdcd-40ce-a504-4fca1758de3f,1,0,f64de21f-5a7c-4a1a-a929-07fc53049f6c,f64de21f-5a7c-4a1a-a929-07fc53049f6c,1,0,470cdf43-07f4-46d5-aab2-d41f1e5da3cd,470cdf43-07f4-46d5-aab2-d41f1e5da3cd,1,0,ea653eca-f96a-447d-8b09-7a7cb6929ed6,ea653eca-f96a-447d-8b09-7a7cb6929ed6,1,0,ea07cd11-418c-4e4f-be9f-c160ee8a64e8,ea07cd11-418c-4e4f-be9f-c160ee8a64e8,1,0,5efc4bc4-b711-4620-8d2e-9d947c6cc141,5efc4bc4-b711-4620-8d2e-9d947c6cc141,1,0,1d8d0eed-caaa-494c-aeea-0df5846fc97a,1d8d0eed-caaa-494c-aeea-0df5846fc97a,1,0,6de9dab4-ee34-4584-a2e7-7a29c86794b0,6de9dab4-ee34-4584-a2e7-7a29c86794b0,1,0,ae52e48c-20ec-43cd-a9a5-b1753558e1d2,ae52e48c-20ec-43cd-a9a5-b1753558e1d2,1,0,5e08154e-bd8b-4e61-8a6c-b5b500f12b99,5e08154e-bd8b-4e61-8a6c-b5b500f12b99,1,0,39af0f4c-0f0d-4e9a-aa63-d0eee3985b4e,39af0f4c-0f0d-4e9a-aa63-d0eee3985b4e,1,0,2b72fe1c-afe1-4905-8db2-2bb1baca6295,2b72fe1c-afe1-4905-8db2-2bb1baca6295,1,0,aa8c4a71-3276-4b83-8be2-3528129e58b3,aa8c4a71-3276-4b83-8be2-3528129e58b3,1,0,4bc4c6db-0ef8-405f-8875-b4cb1540aeb5,4bc4c6db-0ef8-405f-8875-b4cb1540aeb5,1,0,dbd8391c-a174-43d6-a8db-d9ab76b4edbe,dbd8391c-a174-43d6-a8db-d9ab76b4edbe,1,0,e9a2441e-faf9-4158-acc7-b1a6178ae0f3,e9a2441e-faf9-4158-acc7-b1a6178ae0f3,1,0,ce5f5470-b704-4f55-8dc8-17cf2c2b367a,ce5f5470-b704-4f55-8dc8-17cf2c2b367a,1,0,0072986b-0463-4a39-9851-f9adeda99716,0072986b-0463-4a39-9851-f9adeda99716,1,0,fa44433b-1c44-45a0-9487-47aa092442cf,fa44433b-1c44-45a0-9487-47aa092442cf,1,0,041cecfd-cef2-45d9-90e8-afe0d97d2d95,041cecfd-cef2-45d9-90e8-afe0d97d2d95,1,0,0d4a26fb-7176-43f2-8767-d3e227c7306a,0d4a26fb-7176-43f2-8767-d3e227c7306a,1,0,933cbafc-5667-4a91-8b1d-dca3d7662522,933cbafc-5667-4a91-8b1d-dca3d7662522,1,0,ea0a498a-a1cb-4f28-88cb-0bc62971172b,ea0a498a-a1cb-4f28-88cb-0bc62971172b,1,0,7e4222fd-fb98-4ae5-9d98-d41c3d572a0c,7e4222fd-fb98-4ae5-9d98-d41c3d572a0c,1,0,d9d14a24-c023-4b69-ad57-30d1474e1232,d9d14a24-c023-4b69-ad57-30d1474e1232,1,0,b6e98aee-4936-491d-8c67-8490e1af2e34,b6e98aee-4936-491d-8c67-8490e1af2e34,1,0,b292eb46-df87-43c0-9a37-93c5a22af252,b292eb46-df87-43c0-9a37-93c5a22af252,1,0,0943dd00-1653-4760-a9fe-ebc083ffa660,0943dd00-1653-4760-a9fe-ebc083ffa660,1,0,ede6a379-b0e5-4b8d-a454-779c0fd8b0b3,ede6a379-b0e5-4b8d-a454-779c0fd8b0b3,1,0,4fb8564e-2338-4c23-84a4-31f768047ced,4fb8564e-2338-4c23-84a4-31f768047ced,1,0,6179c7bf-08d6-4600-8cdc-ea6d4187bd55,6179c7bf-08d6-4600-8cdc-ea6d4187bd55,1,0,f93c9a7f-0249-421e-b3d0-55f02d130017,f93c9a7f-0249-421e-b3d0-55f02d130017,1,0,062c507a-9d35-4eb5-bb91-d106a535a503,062c507a-9d35-4eb5-bb91-d106a535a503,1,0,ea1284f2-33f1-4e3d-b009-1ffad3aaf300,ea1284f2-33f1-4e3d-b009-1ffad3aaf300,1,0,fd317d96-380e-4ee7-a25b-401e8521cc7a,fd317d96-380e-4ee7-a25b-401e8521cc7a,1,0,3b380a63-9232-42c2-bfa2-e8fc89448bbd,3b380a63-9232-42c2-bfa2-e8fc89448bbd,1,0,e18b4527-8727-4a10-9e99-a80012debe6c,e18b4527-8727-4a10-9e99-a80012debe6c,1,0,1ed910db-e434-4efd-9b12-c25353a31d5a,1ed910db-e434-4efd-9b12-c25353a31d5a,1,0,10556a26-ea4b-46b4-84d1-175eb13b333f,10556a26-ea4b-46b4-84d1-175eb13b333f,1,0,f1e600b0-55ed-4611-b147-f04d5621796b,f1e600b0-55ed-4611-b147-f04d5621796b,1,0,e3b84128-95e1-45df-84db-5e1791779543,e3b84128-95e1-45df-84db-5e1791779543,1,0,76702e9e-fa7a-4b98-befa-f9b37db2dae0,76702e9e-fa7a-4b98-befa-f9b37db2dae0,1,0,101a4eb3-cdda-47af-8c69-615a6920347a,101a4eb3-cdda-47af-8c69-615a6920347a,1,0,cf19f220-f6d4-4c9e-b5d5-9d94234f0a2c,cf19f220-f6d4-4c9e-b5d5-9d94234f0a2c,1,0,e9d95895-8708-4035-89ad-72573b870491,e9d95895-8708-4035-89ad-72573b870491,1,0,f410a5db-8698-44ca-9ff6-2c530e1f5c2a,f410a5db-8698-44ca-9ff6-2c530e1f5c2a,1,0,f0152598-ffa3-4eb7-811f-906e569373e6,f0152598-ffa3-4eb7-811f-906e569373e6,1,0,f79bada2-838f-4e4f-a017-935cf671a70c,f79bada2-838f-4e4f-a017-935cf671a70c,1,0,312118ff-a2a4-479c-964a-5250cca0cd20,312118ff-a2a4-479c-964a-5250cca0cd20,1,0,f8d32d21-ea2f-42bb-a785-9bd3cf754cd9,f8d32d21-ea2f-42bb-a785-9bd3cf754cd9,1,0,3f3a0b1b-04ce-47c1-928d-5e3483e9fd73,3f3a0b1b-04ce-47c1-928d-5e3483e9fd73,1,0,8a310493-c06f-46db-b2b5-14d6ed203312,8a310493-c06f-46db-b2b5-14d6ed203312,1,0,caf8f0e8-7a2c-498b-9b74-ed6b87cce670,caf8f0e8-7a2c-498b-9b74-ed6b87cce670,1,0,b68ec95b-64f3-4a2b-9683-231d50f01eeb,b68ec95b-64f3-4a2b-9683-231d50f01eeb,1,0,89318397-b3a6-4468-985b-ed5cb8ab5cdb,89318397-b3a6-4468-985b-ed5cb8ab5cdb,1,0,5e5b0ad7-ef73-4a73-baf5-360a9244a1cc,5e5b0ad7-ef73-4a73-baf5-360a9244a1cc,1,0,4a008342-f72f-4ca1-bad1-64b59b509911,4a008342-f72f-4ca1-bad1-64b59b509911,1,0,4436b2cf-2d71-401f-99fd-012ff0c91fbd,4436b2cf-2d71-401f-99fd-012ff0c91fbd,1,0,cefa1723-a4d4-44c4-bd57-ffa713f9306c,cefa1723-a4d4-44c4-bd57-ffa713f9306c,1,0,5d75aae8-9d9c-4a47-b8c0-2ce56431fe53,5d75aae8-9d9c-4a47-b8c0-2ce56431fe53,1,0,5396be45-d7c0-43df-aed4-cad062a02b11,5396be45-d7c0-43df-aed4-cad062a02b11,1,0,017e3da8-e48e-488b-9bbf-4fef1a4f3417,017e3da8-e48e-488b-9bbf-4fef1a4f3417,1,0,de4d37c9-b278-4c0c-bc10-1b63ecd72947,de4d37c9-b278-4c0c-bc10-1b63ecd72947,1,0,5a741cf6-8160-4409-9396-2e6d1e67e6fa,5a741cf6-8160-4409-9396-2e6d1e67e6fa,1,0,4920aabf-6f53-4f91-932a-8ace24631a74,4920aabf-6f53-4f91-932a-8ace24631a74,1,0,ce7a7f72-9d7d-4240-b852-e83b4b8d944b,ce7a7f72-9d7d-4240-b852-e83b4b8d944b,1,0,7531fb7c-a4ae-42df-b8e5-d8bfcb66be52,7531fb7c-a4ae-42df-b8e5-d8bfcb66be52,1,0,7309e58d-b0d4-4e0f-a74d-68cab03fea8e,7309e58d-b0d4-4e0f-a74d-68cab03fea8e,1,0,bbec9c3d-31dd-484e-ab32-41ef845f1370,bbec9c3d-31dd-484e-ab32-41ef845f1370,1,0,8692ba41-d91d-4af0-8aba-69dd5409d593,8692ba41-d91d-4af0-8aba-69dd5409d593,1,0,5cc3a29d-aa98-42bf-9800-f584229c8e46,5cc3a29d-aa98-42bf-9800-f584229c8e46,1,0,a95b564a-c895-40f2-b947-ea08462bb2a0,a95b564a-c895-40f2-b947-ea08462bb2a0,1,0,1e015740-5b45-4729-9732-57359a7c602f,1e015740-5b45-4729-9732-57359a7c602f,1,0,db82191f-77bd-44da-8b33-86f01018e25a,db82191f-77bd-44da-8b33-86f01018e25a,1,0,ca63ca2f-703d-4317-8c5d-0650ea638f3f,ca63ca2f-703d-4317-8c5d-0650ea638f3f,1,0,aa2256c7-9847-40a5-9e49-11c508e0d45b,aa2256c7-9847-40a5-9e49-11c508e0d45b,1,0,a04493f4-508c-4047-b0e3-b7d4bde6427b,a04493f4-508c-4047-b0e3-b7d4bde6427b,1,0,418982cd-d403-47cf-a7ef-993a36104947,418982cd-d403-47cf-a7ef-993a36104947,1,0,485ebc6a-0e3e-4278-8ef1-c6194d6d5015,485ebc6a-0e3e-4278-8ef1-c6194d6d5015,1,0,816c8143-8b02-4f4a-8eb1-44c7fb36afcc,816c8143-8b02-4f4a-8eb1-44c7fb36afcc,1,0,35eea3b8-d017-442a-b5a0-a1571165b9a9,35eea3b8-d017-442a-b5a0-a1571165b9a9,1,0,7e84901c-cb7f-437c-a135-0902cd47acb6,7e84901c-cb7f-437c-a135-0902cd47acb6,1,0,da2b47f5-4109-4f72-a4a5-70be24a6881f,da2b47f5-4109-4f72-a4a5-70be24a6881f,1,0,849f034e-85dc-4515-aae6-240c1e0d46d9,849f034e-85dc-4515-aae6-240c1e0d46d9,1,0,5fbea8c7-48e3-4ed0-a8d0-cf942b37a166,5fbea8c7-48e3-4ed0-a8d0-cf942b37a166,1,0,d85ba2d1-63e9-4680-bd88-6c0c4dba5d0f,d85ba2d1-63e9-4680-bd88-6c0c4dba5d0f,1,0,acfa1919-07ce-4464-8552-6b104e284dca,acfa1919-07ce-4464-8552-6b104e284dca,1,0,cd74d617-8ebe-4a7d-b011-38c98d856d8c,cd74d617-8ebe-4a7d-b011-38c98d856d8c,1,0,f4cff4ff-68e9-4072-971e-1b359d3aa980,f4cff4ff-68e9-4072-971e-1b359d3aa980,1,0,f9a5bd40-7c56-4ced-bddb-a66c1fc31b81,f9a5bd40-7c56-4ced-bddb-a66c1fc31b81,1,0,fdb012c9-583a-42af-95da-070e75a58078,fdb012c9-583a-42af-95da-070e75a58078,1,0,7d069b11-cddd-463d-97be-3cbeaaf0954c,7d069b11-cddd-463d-97be-3cbeaaf0954c,1,0,8c5fae4c-b5b6-4e05-9453-4ac5de07c54c,8c5fae4c-b5b6-4e05-9453-4ac5de07c54c,1,0,8242daae-181a-47df-b28e-c1de3fce0359,8242daae-181a-47df-b28e-c1de3fce0359,1,0,8de2c020-0ebe-4374-93d7-d2e19ed82470,8de2c020-0ebe-4374-93d7-d2e19ed82470,1,0,d1b950b0-dd66-49f9-998e-3ae5e820ae7f,d1b950b0-dd66-49f9-998e-3ae5e820ae7f,1,0,57e39881-cbf9-4cac-9ed0-bf4a6ea667ee,57e39881-cbf9-4cac-9ed0-bf4a6ea667ee,1,0,b9004626-915c-44c8-9cb7-25e5b627ee83,b9004626-915c-44c8-9cb7-25e5b627ee83,1,0,63c6cfad-124d-491a-829d-b298463c95e6,63c6cfad-124d-491a-829d-b298463c95e6,1,0,737404de-5b9d-4445-81c5-2c5b50b36846,737404de-5b9d-4445-81c5-2c5b50b36846,1,0,1e020429-ac68-46f4-b34c-c2c4a2b494f6,1e020429-ac68-46f4-b34c-c2c4a2b494f6,1,0,1c1a5bf8-bbe6-4a69-973e-11445175dac2,1c1a5bf8-bbe6-4a69-973e-11445175dac2,1,0,f11ffcfd-3588-4785-b222-cebe80455303,f11ffcfd-3588-4785-b222-cebe80455303,1,0,789a2027-8601-434c-bf47-37696a3966ad,789a2027-8601-434c-bf47-37696a3966ad,1,0,1c7e9baa-7728-4afd-829a-806cee13ecdb,1c7e9baa-7728-4afd-829a-806cee13ecdb,1,0,5d216c28-0724-4e7d-86cf-b6f75e7e28b7,5d216c28-0724-4e7d-86cf-b6f75e7e28b7,1,0,bfdc6346-db5b-427f-acca-9b48db8fefd0,bfdc6346-db5b-427f-acca-9b48db8fefd0,1,0,1c3f258c-345e-47f6-9e29-98b1222fb348,1c3f258c-345e-47f6-9e29-98b1222fb348,1,0,dfafcdf3-cdeb-4822-9f41-a730d9d3fb24,dfafcdf3-cdeb-4822-9f41-a730d9d3fb24,1,0,4c3085e1-2f86-4af4-a392-ab45e30a7152,4c3085e1-2f86-4af4-a392-ab45e30a7152,1,0,35c938f4-065f-47f5-a75b-637ed0080725,35c938f4-065f-47f5-a75b-637ed0080725,1,0,36e096be-ee28-437a-b8f2-c1e274c150e3,36e096be-ee28-437a-b8f2-c1e274c150e3,1,0,e14c0841-226c-4c79-bec9-cfc8d2c3a160,e14c0841-226c-4c79-bec9-cfc8d2c3a160,1,0,6f3c5b90-b030-4267-a973-33d12c2c7680,6f3c5b90-b030-4267-a973-33d12c2c7680,1,0,1ff8210b-26c5-4429-b580-7c6ec7c9b63a,1ff8210b-26c5-4429-b580-7c6ec7c9b63a,1,0,c6af8b0f-3767-4198-88e2-f5763cb0294a,c6af8b0f-3767-4198-88e2-f5763cb0294a,1,0,b107a4a8-0db8-44f4-93f7-9f231e850398,b107a4a8-0db8-44f4-93f7-9f231e850398,1,0,88b879b7-1bb3-4478-b569-35bdb5c56939,88b879b7-1bb3-4478-b569-35bdb5c56939,1,0,7a62d031-c340-4b1e-90af-fff697a2e979,7a62d031-c340-4b1e-90af-fff697a2e979,1,0,18bf6916-83cc-41e5-a35b-1489450ae632,18bf6916-83cc-41e5-a35b-1489450ae632,1,0,ebab97cf-5335-4648-9845-8ca41f79fb49,ebab97cf-5335-4648-9845-8ca41f79fb49,1,0,bb29fa44-6772-4426-a0b8-422115e14288,bb29fa44-6772-4426-a0b8-422115e14288,1,0,904e1209-91d8-49b1-b291-364ef728cbbf,904e1209-91d8-49b1-b291-364ef728cbbf,1,0,1198f2ee-b8a8-456d-9461-61bc5d42c7a1,1198f2ee-b8a8-456d-9461-61bc5d42c7a1,1,0,b8ecb7f0-ef40-4d31-9ec2-a731439d3200,b8ecb7f0-ef40-4d31-9ec2-a731439d3200,1,0,e4da2959-0fb0-48fb-a5aa-e7a5589d69c3,e4da2959-0fb0-48fb-a5aa-e7a5589d69c3,1,0,b5365cb6-a4e7-479b-82f4-f4ad80fcd7c9,b5365cb6-a4e7-479b-82f4-f4ad80fcd7c9,1,0,e51ae56c-d311-46b7-8d4c-19a432f4cd16,e51ae56c-d311-46b7-8d4c-19a432f4cd16,1,0,e000d04e-37eb-4d95-a833-b0a9b10ee0b9,e000d04e-37eb-4d95-a833-b0a9b10ee0b9,1,0,40d3ed07-3b56-4c9f-8b96-d94455202ef0,40d3ed07-3b56-4c9f-8b96-d94455202ef0,1,0,23314bcd-2dd4-43f1-9fdb-ae182a48c886,23314bcd-2dd4-43f1-9fdb-ae182a48c886,1,0,c5f86fa3-4a36-4e22-8b57-7088dd250cd3,c5f86fa3-4a36-4e22-8b57-7088dd250cd3,1,0,9440a132-366f-4fc9-bd72-2544ba2b072a,9440a132-366f-4fc9-bd72-2544ba2b072a,1,0,84282afa-21f5-40db-9386-e6f741c9a06c,84282afa-21f5-40db-9386-e6f741c9a06c,1,0,5b3b3da9-8619-4fbd-b140-3528875cd179,5b3b3da9-8619-4fbd-b140-3528875cd179,1,0,99e5e866-7ac6-4916-ab66-3e2909822c56,99e5e866-7ac6-4916-ab66-3e2909822c56,1,0,03363877-2752-4a03-95f2-d73b732e0bfd,03363877-2752-4a03-95f2-d73b732e0bfd,1,0,8d9d2284-e592-44c5-93bb-247037ab6b95,8d9d2284-e592-44c5-93bb-247037ab6b95,1,0,0b0d2b7c-d52e-4163-83cf-a7e86bb47c47,0b0d2b7c-d52e-4163-83cf-a7e86bb47c47,1,0,78051e10-74ab-44be-adca-e4c93824a386,78051e10-74ab-44be-adca-e4c93824a386,1,0,73629419-83d8-4727-88a9-76c851d104c9,73629419-83d8-4727-88a9-76c851d104c9,1,0,cadb54f0-dcff-4f96-983e-a309fd72f330,cadb54f0-dcff-4f96-983e-a309fd72f330,1,0,a9c3065b-db68-4f59-9235-33f9fbfdaafd,a9c3065b-db68-4f59-9235-33f9fbfdaafd,1,0,3715cf3d-0abc-4711-8ac9-d41f0be7878f,3715cf3d-0abc-4711-8ac9-d41f0be7878f,1,0,8e8d8078-8b32-4c24-b26e-89a92bf60160,8e8d8078-8b32-4c24-b26e-89a92bf60160,1,0,f96cbb27-7619-41e0-8577-e623ef02dc58,f96cbb27-7619-41e0-8577-e623ef02dc58,1,0,ed5ff5b0-f980-4b9a-9299-eef68e3b42d5,ed5ff5b0-f980-4b9a-9299-eef68e3b42d5,1,0,d74dfd31-2016-435b-8652-15fdbca59490,d74dfd31-2016-435b-8652-15fdbca59490,1,0,ba8111a9-1d33-4615-ad0b-b3e923b2f3bd,ba8111a9-1d33-4615-ad0b-b3e923b2f3bd,1,0,27651e0e-d560-434b-a49c-f473a5b20c4d,27651e0e-d560-434b-a49c-f473a5b20c4d,1,0,dab1491b-0685-442d-b945-2bfde3f37933,dab1491b-0685-442d-b945-2bfde3f37933,1,0,ce85554b-81ba-4149-a951-d09bdc14fa16,ce85554b-81ba-4149-a951-d09bdc14fa16,1,0,23a1ef35-1469-44ea-8535-fa9c7f535cae,23a1ef35-1469-44ea-8535-fa9c7f535cae,1,0,9ff1c73e-71be-4ea6-97fb-e710d995ee62,9ff1c73e-71be-4ea6-97fb-e710d995ee62,1,0,8c7d74bf-2865-47d9-8a16-5b0db1104a3a,8c7d74bf-2865-47d9-8a16-5b0db1104a3a,1,0,2558d812-ac0a-49ba-87db-3f661209a3c4,2558d812-ac0a-49ba-87db-3f661209a3c4,1,0,20d712ef-77c1-4374-92e1-f20a3ebc7eab,20d712ef-77c1-4374-92e1-f20a3ebc7eab,1,0,65d23ce8-e326-45ee-86b0-6dcf35797201,65d23ce8-e326-45ee-86b0-6dcf35797201,1,0,a2683c3f-1b21-47d8-951d-7d30cde51efc,a2683c3f-1b21-47d8-951d-7d30cde51efc,1,0,54c77053-1728-4914-a354-73fe8853a0e1,54c77053-1728-4914-a354-73fe8853a0e1,1,0,21136691-078f-4bf7-bddd-f41416a76d86,21136691-078f-4bf7-bddd-f41416a76d86,1,0,9d669d30-a0af-4095-852a-96b4224ee933,9d669d30-a0af-4095-852a-96b4224ee933,1,0,30a121c7-c4f5-45c4-9504-9778ed85d9e3,30a121c7-c4f5-45c4-9504-9778ed85d9e3,1,0,c68e2157-2541-4f80-966a-d68ce603f131,c68e2157-2541-4f80-966a-d68ce603f131,1,0,126d5d78-a2b0-4c16-b429-bf8d251280e7,126d5d78-a2b0-4c16-b429-bf8d251280e7,1,0,f8f96dce-913c-4858-bcb7-dcfe3dc2f72e,f8f96dce-913c-4858-bcb7-dcfe3dc2f72e,1,0,12443114-1931-4eb7-968a-7dbe166b7298,12443114-1931-4eb7-968a-7dbe166b7298,1,0,0080c29d-ec54-43a8-aab8-c67e0279b6b7,0080c29d-ec54-43a8-aab8-c67e0279b6b7,1,0,a0271f6e-dc70-4dfe-a395-203e8a89f933,a0271f6e-dc70-4dfe-a395-203e8a89f933,1,0,e5dfee58-f748-48ee-81a3-7c6133f06365,e5dfee58-f748-48ee-81a3-7c6133f06365,1,0,c0e01a15-6937-4331-bdd7-2f5a68d0d3dd,c0e01a15-6937-4331-bdd7-2f5a68d0d3dd,1,0,d065c02e-9991-468a-ae32-b8c29d078d03,d065c02e-9991-468a-ae32-b8c29d078d03,1,0,c509683e-eb13-4e1a-91ed-cd6982ec5001,c509683e-eb13-4e1a-91ed-cd6982ec5001,1,0,88bf6f58-7943-42c4-bc0f-56b991590026,88bf6f58-7943-42c4-bc0f-56b991590026,1,0,68500931-89e0-491e-aba8-b013c9e6f8c3,68500931-89e0-491e-aba8-b013c9e6f8c3,1,0,70b79e56-bb71-4f38-93cf-94dda79d9b4c,70b79e56-bb71-4f38-93cf-94dda79d9b4c,1,0,5c4c9931-3fb0-47a8-9e4f-d552de12b355,5c4c9931-3fb0-47a8-9e4f-d552de12b355,1,0,dc1d0f97-e2f3-4e1d-b21c-411b46e39848,dc1d0f97-e2f3-4e1d-b21c-411b46e39848,1,0,2a498baf-ec2e-4dda-b568-801bb60db225,2a498baf-ec2e-4dda-b568-801bb60db225,1,0,8a32af97-cdb5-46b4-ab7b-e1509e26ecc3,8a32af97-cdb5-46b4-ab7b-e1509e26ecc3,1,0,9f59f8cd-8d61-4fbc-ae6e-32f28ce0035a,9f59f8cd-8d61-4fbc-ae6e-32f28ce0035a,1,0,70f156d8-9cb4-442d-a36b-7a43d03bcd12,70f156d8-9cb4-442d-a36b-7a43d03bcd12,1,0,35989876-16b1-4b02-9381-444a06a7a21d,35989876-16b1-4b02-9381-444a06a7a21d,1,0,f7608000-1e8a-4ca4-afb7-e04ef547b70a,f7608000-1e8a-4ca4-afb7-e04ef547b70a,1,0,f0a6de82-45ab-4153-bccf-df82fc960aa1,f0a6de82-45ab-4153-bccf-df82fc960aa1,1,0,77adf47b-6015-46fc-9e29-f1c025ea0d81,77adf47b-6015-46fc-9e29-f1c025ea0d81,1,0,26cea519-19d0-4707-be0a-1a43fde6e563,26cea519-19d0-4707-be0a-1a43fde6e563,1,0,9fb3e902-3154-4bab-9bfe-9a266dc49fa5,9fb3e902-3154-4bab-9bfe-9a266dc49fa5,1,0,af8d4bc9-2f0f-44d3-89ce-2593877055c8,af8d4bc9-2f0f-44d3-89ce-2593877055c8,1,0,344fb829-a1cc-4b17-8f98-2d4f93bfcd6a,344fb829-a1cc-4b17-8f98-2d4f93bfcd6a,1,0,eb35bff2-8467-48fe-bf93-ece2aa40f506,eb35bff2-8467-48fe-bf93-ece2aa40f506,1,0,68cf55da-b29e-4a65-815b-c9cdc8e5888e,68cf55da-b29e-4a65-815b-c9cdc8e5888e,1,0,a9f927ef-22a2-4d77-8648-4bb25eeaccf2,a9f927ef-22a2-4d77-8648-4bb25eeaccf2,1,0,1041ed81-c1f7-43b2-9087-914865a3076e,1041ed81-c1f7-43b2-9087-914865a3076e,1,0,5d7174d2-42b3-4e12-b705-4209dd73b53b,5d7174d2-42b3-4e12-b705-4209dd73b53b,1,0,b1b5bf08-1c57-4875-87bb-ad1fa1a3251f,b1b5bf08-1c57-4875-87bb-ad1fa1a3251f,1,0,e00dcab4-5e92-44e3-bcdf-a31dd32a195f,e00dcab4-5e92-44e3-bcdf-a31dd32a195f,1,0,5a4c6511-f8ed-40e4-a251-e28f62629cf2,5a4c6511-f8ed-40e4-a251-e28f62629cf2,1,0,cfe59dfd-a509-4f83-b926-b3ff94234a43,cfe59dfd-a509-4f83-b926-b3ff94234a43,1,0,17df1591-61b0-4204-8379-8d1f58445968,17df1591-61b0-4204-8379-8d1f58445968,1,0,9020fa9d-e7de-4574-ab65-db6651b5b610,9020fa9d-e7de-4574-ab65-db6651b5b610,1,0,fd5e72f7-3078-48eb-b01b-1800ffbd86d3,fd5e72f7-3078-48eb-b01b-1800ffbd86d3,1,0,e83ad33d-27df-4181-afd2-b7f416e6e705,e83ad33d-27df-4181-afd2-b7f416e6e705,1,0,ddeec7f4-8bd3-40af-bcac-00d18c0e6d6a,ddeec7f4-8bd3-40af-bcac-00d18c0e6d6a,1,0,f0438b0a-7916-4de4-a3a8-d43407c3295f,f0438b0a-7916-4de4-a3a8-d43407c3295f,1,0,3309648c-aae6-4684-ae8d-7ed636bc3468,3309648c-aae6-4684-ae8d-7ed636bc3468,1,0,f9aa933e-6684-48de-b802-96c8e61b1fe6,f9aa933e-6684-48de-b802-96c8e61b1fe6,1,0,f41e5a5b-394b-423a-bee5-ed4d1da0be71,f41e5a5b-394b-423a-bee5-ed4d1da0be71,1,0,23db175f-ddfb-4af7-9c0c-232b6adb7daf,23db175f-ddfb-4af7-9c0c-232b6adb7daf,1,0,9de4d430-95ec-4435-b3e8-4fc85778d517,9de4d430-95ec-4435-b3e8-4fc85778d517,1,0,205b8908-fa21-42bd-bff0-fb95e6787f15,205b8908-fa21-42bd-bff0-fb95e6787f15,1,0,4e309f26-35e8-49d9-bbd1-c7884e666dca,4e309f26-35e8-49d9-bbd1-c7884e666dca,1,0,84f05fe4-51d3-49a8-83e7-1cae2028147e,84f05fe4-51d3-49a8-83e7-1cae2028147e,1,0,8a9ab11b-5bb5-4da9-9053-8f9e8198d019,8a9ab11b-5bb5-4da9-9053-8f9e8198d019,1,0,5320abf1-b09b-4de0-9adf-4cb1da31df6f,5320abf1-b09b-4de0-9adf-4cb1da31df6f,1,0,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,f135b60e-6d28-4ba1-acd7-76090f14855d,f135b60e-6d28-4ba1-acd7-76090f14855d,1,0,5b105084-c4ba-4ff6-9196-8b3e3a9991e2,5b105084-c4ba-4ff6-9196-8b3e3a9991e2,1,0,c6267c5a-3878-4d0c-8674-4d4dd672b99c,c6267c5a-3878-4d0c-8674-4d4dd672b99c,1,0,44c9e8a9-8efd-4391-a1b2-4ef278376b4d,44c9e8a9-8efd-4391-a1b2-4ef278376b4d,1,0,96d66cdd-d40c-43a3-92ce-40aef2101b64,96d66cdd-d40c-43a3-92ce-40aef2101b64,1,0,9daa8270-4782-4d83-af03-c8d2b11057ff,9daa8270-4782-4d83-af03-c8d2b11057ff,1,0,4b8927df-e124-4bf6-9d70-6e91b4796d90,4b8927df-e124-4bf6-9d70-6e91b4796d90,1,0,871b63a2-c7a6-4343-8d8b-7dda1b0def87,871b63a2-c7a6-4343-8d8b-7dda1b0def87,1,0,52b45b3d-b01b-4aac-8a1e-e256957c39c3,52b45b3d-b01b-4aac-8a1e-e256957c39c3,1,0,fc78d8df-ab27-4544-a65c-73908b9c5425,fc78d8df-ab27-4544-a65c-73908b9c5425,1,0,f8a090d2-b2d1-4ead-a8bf-6325a7552743,f8a090d2-b2d1-4ead-a8bf-6325a7552743,1,0,84f935da-9fe5-44ea-845b-b447b8b0a6f5,84f935da-9fe5-44ea-845b-b447b8b0a6f5,1,0,d0b49fd9-4054-409f-97a0-a0811ba6c1ab,d0b49fd9-4054-409f-97a0-a0811ba6c1ab,1,0,8ca63a1d-4593-4f52-8b5e-4feb9f8487ca,8ca63a1d-4593-4f52-8b5e-4feb9f8487ca,1,0,1e4cc0d6-6e5e-4d16-ba44-060912ec292f,1e4cc0d6-6e5e-4d16-ba44-060912ec292f,1,0,e9311a22-56b5-4607-8eaa-52382ed040c3,e9311a22-56b5-4607-8eaa-52382ed040c3,1,0,dc7b8596-b2c0-415f-95d9-c0aaa96c5675,dc7b8596-b2c0-415f-95d9-c0aaa96c5675,1,0,87e6e315-01e0-41eb-8373-0a60635f2f7a,87e6e315-01e0-41eb-8373-0a60635f2f7a,1,0,c4fe10b6-d025-4736-be23-3113bd7fe7b4,c4fe10b6-d025-4736-be23-3113bd7fe7b4,1,0,8fdfef8d-502e-4d27-a539-e833048fa1eb,8fdfef8d-502e-4d27-a539-e833048fa1eb,1,0,65530aca-7cf2-4a52-b5be-5dcbc15a049e,65530aca-7cf2-4a52-b5be-5dcbc15a049e,1,0,15eb2c2d-305d-42c0-9aec-936b82114bdb,15eb2c2d-305d-42c0-9aec-936b82114bdb,1,0,bb99bc44-f83e-48bb-93fd-7b07ca7da6a7,bb99bc44-f83e-48bb-93fd-7b07ca7da6a7,1,0,cbca7272-2aae-4e21-b3f5-12786f085648,cbca7272-2aae-4e21-b3f5-12786f085648,1,0,7718bd0b-7b8a-4ffc-b228-f05683b5531a,7718bd0b-7b8a-4ffc-b228-f05683b5531a,1,0,38aeb32b-9e3b-4b4a-9a61-97da63cdea48,38aeb32b-9e3b-4b4a-9a61-97da63cdea48,1,0,0b303d25-e141-431f-828c-1778d3c247f6,0b303d25-e141-431f-828c-1778d3c247f6,1,0,881f53bc-a52e-4312-b09d-3d3f53ddf84b,881f53bc-a52e-4312-b09d-3d3f53ddf84b,1,0,2e36a7b3-5331-4fab-a0a3-31b42a8387fe,2e36a7b3-5331-4fab-a0a3-31b42a8387fe,1,0,945ae8d2-b74a-41e9-b740-c82acdd40d04,945ae8d2-b74a-41e9-b740-c82acdd40d04,1,0,976533bf-f162-42a1-a47e-6d681ee67b82,976533bf-f162-42a1-a47e-6d681ee67b82,1,0,19bc0dd8-9e6b-4855-bc42-b4e98443163f,19bc0dd8-9e6b-4855-bc42-b4e98443163f,1,0,a61e10af-eaba-4e7a-a641-65d77453a559,a61e10af-eaba-4e7a-a641-65d77453a559,1,0,edf81bbb-905a-474d-959a-db5629a8e104,edf81bbb-905a-474d-959a-db5629a8e104,1,0,4c8eb34e-0bb6-487a-a2ae-24083b1f6d2e,4c8eb34e-0bb6-487a-a2ae-24083b1f6d2e,1,0,276c42ca-f5e0-4bb4-9b89-a925def35cb1,276c42ca-f5e0-4bb4-9b89-a925def35cb1,1,0,41a9cabc-5667-4ca0-a798-ba0b22bd1aa0,41a9cabc-5667-4ca0-a798-ba0b22bd1aa0,1,0,1bf44c42-87c0-4f2e-846c-b04d0b7e8d7d,1bf44c42-87c0-4f2e-846c-b04d0b7e8d7d,1,0,8811ea1a-1221-47b7-9574-3f36ff15a3cf,8811ea1a-1221-47b7-9574-3f36ff15a3cf,1,0,a84891cc-e996-489a-abde-5b5af166a057,a84891cc-e996-489a-abde-5b5af166a057,1,0,1d715463-691b-4c01-ae39-57c261f2a6ad,1d715463-691b-4c01-ae39-57c261f2a6ad,1,0,4c3d007f-a62c-4fd9-beda-58dbf08ad188,4c3d007f-a62c-4fd9-beda-58dbf08ad188,1,0,c35373a9-f0b0-4ddb-a985-409ac9c64609,c35373a9-f0b0-4ddb-a985-409ac9c64609,1,0,c5b4d6e4-4c99-46cb-98cf-9a0024215a12,c5b4d6e4-4c99-46cb-98cf-9a0024215a12,1,0,c1c40916-fee5-46e3-90fc-10e7595866c9,c1c40916-fee5-46e3-90fc-10e7595866c9,1,0,19a307b1-9ef0-4fc6-bf4f-7636e9118399,19a307b1-9ef0-4fc6-bf4f-7636e9118399,1,0,666244a4-5636-4405-89dd-bbd8f4278071,666244a4-5636-4405-89dd-bbd8f4278071,1,0,8b79f0e3-9024-4073-aa6b-a42beed9b0c6,8b79f0e3-9024-4073-aa6b-a42beed9b0c6,1,0,29a627a9-debc-4074-88d0-ec3561e1ef9c,29a627a9-debc-4074-88d0-ec3561e1ef9c,1,0,5a01a002-8833-4c89-b8d6-9b63fc49d3b6,5a01a002-8833-4c89-b8d6-9b63fc49d3b6,1,0,39f5e272-9a10-40b0-8a10-92037828b206,39f5e272-9a10-40b0-8a10-92037828b206,1,0,87dad256-122b-4d7e-b249-a2c313a9cf33,87dad256-122b-4d7e-b249-a2c313a9cf33,1,0,57a030fb-ed57-4ffc-a462-c7bbd2435c3d,57a030fb-ed57-4ffc-a462-c7bbd2435c3d,1,0,f20a04a7-84fa-48e3-8ac5-28176c1fcada,f20a04a7-84fa-48e3-8ac5-28176c1fcada,1,0,b722d6e1-fd6f-4bb4-923d-01764393722d,b722d6e1-fd6f-4bb4-923d-01764393722d,1,0,ac5f945e-2d03-44fb-a8cf-5d786194cefd,ac5f945e-2d03-44fb-a8cf-5d786194cefd,1,0,698ec00f-bf75-420e-81ab-a98808daf3f7,698ec00f-bf75-420e-81ab-a98808daf3f7,1,0,f441907c-d02e-431e-baf4-1854e48a1f50,f441907c-d02e-431e-baf4-1854e48a1f50,1,0,4ad722ca-10fc-4a83-91c9-ef0012685f89,4ad722ca-10fc-4a83-91c9-ef0012685f89,1,0,783dd4ba-a597-45ba-8989-2ed5224d62bc,783dd4ba-a597-45ba-8989-2ed5224d62bc,1,0,3b033d29-0de7-49dd-90bc-f414b28426d7,3b033d29-0de7-49dd-90bc-f414b28426d7,1,0,97aaede5-d32f-4eba-b0e0-5ae5f094a8b7,97aaede5-d32f-4eba-b0e0-5ae5f094a8b7,1,0,dad9710a-73ca-4e0d-b98b-75f955d0822d,dad9710a-73ca-4e0d-b98b-75f955d0822d,1,0,d01beeab-7c42-4d5e-a2f6-f190b9f703a5,d01beeab-7c42-4d5e-a2f6-f190b9f703a5,1,0,2191939f-6f71-47c9-a3d2-57acbf7f411e,2191939f-6f71-47c9-a3d2-57acbf7f411e,1,0,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,cafc86e1-d7f1-4cd2-ac20-04fa0917556a,cafc86e1-d7f1-4cd2-ac20-04fa0917556a,1,0,514e95b8-2fdd-46f7-89bf-7d1a3d9d6e1b,514e95b8-2fdd-46f7-89bf-7d1a3d9d6e1b,1,0,47058e36-a281-43a5-a41d-691b3ef32b5b,47058e36-a281-43a5-a41d-691b3ef32b5b,1,0,4fc5c023-91e2-4b3e-8f61-4dfe3be78f3a,4fc5c023-91e2-4b3e-8f61-4dfe3be78f3a,1,0,646def82-bc88-4187-8be0-93938656a20f,646def82-bc88-4187-8be0-93938656a20f,1,0,e620e93c-4382-478f-a700-ad2faa67362b,e620e93c-4382-478f-a700-ad2faa67362b,1,0,a07971f5-ed6d-4829-a6bb-4b17cd5c6f6c,a07971f5-ed6d-4829-a6bb-4b17cd5c6f6c,1,0,06323ebd-5f74-494a-99a5-eb77e23d8637,06323ebd-5f74-494a-99a5-eb77e23d8637,1,0,9c4e28e8-7257-42ed-9fd8-793a0b8eb945,9c4e28e8-7257-42ed-9fd8-793a0b8eb945,1,0,9b7b6d0e-68d6-4a73-837c-2a6fd456b236,9b7b6d0e-68d6-4a73-837c-2a6fd456b236,1,0,7f6222c1-1a50-4565-b66b-bcb430674efc,7f6222c1-1a50-4565-b66b-bcb430674efc,1,0,a4a8693b-dc91-4762-92e6-35360c8768db,a4a8693b-dc91-4762-92e6-35360c8768db,1,0,2ae236ec-28a7-44e0-a0ba-be62fe52d817,2ae236ec-28a7-44e0-a0ba-be62fe52d817,1,0,2fb5650f-a5e5-4db8-a6a7-ca1101b41d3e,2fb5650f-a5e5-4db8-a6a7-ca1101b41d3e,1,0,4929cf90-54c6-412c-b2fa-dc8230fb8f85,4929cf90-54c6-412c-b2fa-dc8230fb8f85,1,0,52ae6431-afb3-4dea-b106-00e11b174ec7,52ae6431-afb3-4dea-b106-00e11b174ec7,1,0,b18bdc5f-a2b6-4b15-81c3-37b27a5a3176,b18bdc5f-a2b6-4b15-81c3-37b27a5a3176,1,0,c996916d-7f1c-4fbf-939f-3e1bafe81f7d,c996916d-7f1c-4fbf-939f-3e1bafe81f7d,1,0,528d96cc-8838-49ea-8d76-ea56747882e0,528d96cc-8838-49ea-8d76-ea56747882e0,1,0,b9166ea0-cce8-4f76-a9cb-a3d6eb4dfb95,b9166ea0-cce8-4f76-a9cb-a3d6eb4dfb95,1,0,8b83324c-e10e-49d1-99d7-5bc468c25975,8b83324c-e10e-49d1-99d7-5bc468c25975,1,0,ddb75923-27bf-4996-b024-4bc6eb0f59a7,ddb75923-27bf-4996-b024-4bc6eb0f59a7,1,0,fcb46a8a-3461-4ec2-9aa0-685aedb9dd50,fcb46a8a-3461-4ec2-9aa0-685aedb9dd50,1,0,ed137e05-1996-411d-9927-45a3d7e3ee3b,ed137e05-1996-411d-9927-45a3d7e3ee3b,1,0,bdde9030-5718-4f5e-a9e2-f641f4ce69f9,bdde9030-5718-4f5e-a9e2-f641f4ce69f9,1,0,fbebf341-9842-41e1-8e4d-490fa02065ce,fbebf341-9842-41e1-8e4d-490fa02065ce,1,0,3be0acc7-223a-46ec-9ea2-ec99b869fa78,3be0acc7-223a-46ec-9ea2-ec99b869fa78,1,0,067f88f6-ccd2-491e-a466-94345a1f220f,067f88f6-ccd2-491e-a466-94345a1f220f,1,0,642154b8-97da-4c4f-bf34-c1124215077d,642154b8-97da-4c4f-bf34-c1124215077d,1,0,abc10867-39ae-46bf-8bd7-90f645919235,abc10867-39ae-46bf-8bd7-90f645919235,1,0,b3396504-8ccb-43d6-9a0f-ab259ba0a542,b3396504-8ccb-43d6-9a0f-ab259ba0a542,1,0,f59f91c5-026a-4dc5-996e-0d59814a9604,f59f91c5-026a-4dc5-996e-0d59814a9604,1,0,aac9966f-e9ea-4106-97bb-6b9822939bc7,aac9966f-e9ea-4106-97bb-6b9822939bc7,1,0,cf7bc2ca-fb57-4b1a-98cf-f2caa7e611f5,cf7bc2ca-fb57-4b1a-98cf-f2caa7e611f5,1,0,486083d8-33b1-453f-9f05-5ff867e2f4ba,486083d8-33b1-453f-9f05-5ff867e2f4ba,1,0,e4f9d9f6-38d7-4056-a95a-987ad2da2211,e4f9d9f6-38d7-4056-a95a-987ad2da2211,1,0,22c21c2b-4297-43b2-88f0-9555d22f7a14,22c21c2b-4297-43b2-88f0-9555d22f7a14,1,0,734f61c4-5429-4a09-8697-8949ac5e6bd1,734f61c4-5429-4a09-8697-8949ac5e6bd1,1,0,d04e0e2d-0a5f-4866-b0b3-b582915db899,d04e0e2d-0a5f-4866-b0b3-b582915db899,1,0,19649d3f-52aa-4054-bb84-a6a11d212495,19649d3f-52aa-4054-bb84-a6a11d212495,1,0,640d7486-8abd-40aa-a244-2ed899b7225a,640d7486-8abd-40aa-a244-2ed899b7225a,1,0,58321939-f25a-456d-8dee-97e64743dc2e,58321939-f25a-456d-8dee-97e64743dc2e,1,0,416fba62-70c4-4f8c-b10b-56d47b27ca35,416fba62-70c4-4f8c-b10b-56d47b27ca35,1,0,ec48a164-bc30-4e36-a40a-a3cca07aea0d,ec48a164-bc30-4e36-a40a-a3cca07aea0d,1,0,3174d57f-c6a8-44dc-adc1-47e9a54c844d,3174d57f-c6a8-44dc-adc1-47e9a54c844d,1,0,c05f87b4-ec5f-4d14-981f-02ca8ba89863,c05f87b4-ec5f-4d14-981f-02ca8ba89863,1,0,b7736108-89bd-44eb-89c1-8a5a774058f1,b7736108-89bd-44eb-89c1-8a5a774058f1,1,0,560a5f44-e4e6-46d9-a9fe-3609842d0e3e,560a5f44-e4e6-46d9-a9fe-3609842d0e3e,1,0,98f68a75-ebf9-4c59-b6a8-b3634089ca6b,98f68a75-ebf9-4c59-b6a8-b3634089ca6b,1,0,875d1fc1-8172-4e48-8192-035882e1665d,875d1fc1-8172-4e48-8192-035882e1665d,1,0,26132b28-98cc-4690-92ad-139f91839ba2,26132b28-98cc-4690-92ad-139f91839ba2,1,0,0bd85b79-cc32-4c1d-b629-567a1bdfac56,0bd85b79-cc32-4c1d-b629-567a1bdfac56,1,0,b87ce4f9-aaa6-4a4c-af80-0bd9adc83506,b87ce4f9-aaa6-4a4c-af80-0bd9adc83506,1,0,ca81e0ea-c428-47f9-aedb-078214104a2f,ca81e0ea-c428-47f9-aedb-078214104a2f,1,0,9518d09c-6996-4439-9278-3c71d5ae8fce,9518d09c-6996-4439-9278-3c71d5ae8fce,1,0,9dd6e7d6-cd98-4928-b50c-38bdbc61c211,9dd6e7d6-cd98-4928-b50c-38bdbc61c211,1,0,5fbd9a13-012d-4c36-b72c-da3bc4157cff,5fbd9a13-012d-4c36-b72c-da3bc4157cff,1,0,6ae6e515-5cd4-4eca-8602-c6abe6d66276,6ae6e515-5cd4-4eca-8602-c6abe6d66276,1,0,44b8472b-0f70-49cc-8f71-9c9d3e9cfbcc,44b8472b-0f70-49cc-8f71-9c9d3e9cfbcc,1,0,b071a44e-9a34-4af3-a59a-35aa5f3a74b4,b071a44e-9a34-4af3-a59a-35aa5f3a74b4,1,0,35a28677-0653-47f9-82e1-02c4b9266fee,35a28677-0653-47f9-82e1-02c4b9266fee,1,0,2e17464f-9cef-4812-865f-4eb77ff16b6a,2e17464f-9cef-4812-865f-4eb77ff16b6a,1,0,e5ecbb1f-981d-4928-9335-22216879f7e2,e5ecbb1f-981d-4928-9335-22216879f7e2,1,0,461be12a-9f16-4826-978a-436608ca8733,461be12a-9f16-4826-978a-436608ca8733,1,0,9b143299-d300-4b6c-b667-5552fb3bdcde,9b143299-d300-4b6c-b667-5552fb3bdcde,1,0,0de070f4-d8b7-48bb-bfc9-027dd727a4ad,0de070f4-d8b7-48bb-bfc9-027dd727a4ad,1,0,74973d06-f57d-403e-945c-5cd2f4fc4869,74973d06-f57d-403e-945c-5cd2f4fc4869,1,0,259564b8-172e-4eed-9360-d561ec6dad69,259564b8-172e-4eed-9360-d561ec6dad69,1,0,91c799d7-2b3d-4d1a-87ff-221057a428c6,91c799d7-2b3d-4d1a-87ff-221057a428c6,1,0,a50fcacc-6d2d-496c-bea0-9c73cd153437,a50fcacc-6d2d-496c-bea0-9c73cd153437,1,0,a6846c5a-7cf6-4df2-a159-2fd33d18d18f,a6846c5a-7cf6-4df2-a159-2fd33d18d18f,1,0,0fb72f4b-e6f6-4b70-8ec7-fdb6d4ad928e,0fb72f4b-e6f6-4b70-8ec7-fdb6d4ad928e,1,0,5a2d5d8a-afd9-4954-9868-7c82bad00426,5a2d5d8a-afd9-4954-9868-7c82bad00426,1,0,26aea96b-20f8-4e35-b55f-4fe3602e6597,26aea96b-20f8-4e35-b55f-4fe3602e6597,1,0,a3a3a211-e361-4e41-a6f8-d731a366c163,a3a3a211-e361-4e41-a6f8-d731a366c163,1,0,c40d6fde-4d9a-4d9e-af86-42b7916e2abe,c40d6fde-4d9a-4d9e-af86-42b7916e2abe,1,0,4d5204ae-711d-4c31-8a18-280dbc9d2bf5,4d5204ae-711d-4c31-8a18-280dbc9d2bf5,1,0,ca01417c-0ffd-4e00-91e8-93cd305be82d,ca01417c-0ffd-4e00-91e8-93cd305be82d,1,0,14fcf5e5-5856-4b5f-8c3f-75eaba0f7268,14fcf5e5-5856-4b5f-8c3f-75eaba0f7268,1,0,0a0af8bf-0caa-40df-9a69-71f98ca9ff89,0a0af8bf-0caa-40df-9a69-71f98ca9ff89,1,0,6ac7db0c-18ed-4d3b-956a-5985214db474,6ac7db0c-18ed-4d3b-956a-5985214db474,1,0,267103e0-6703-4a74-bb4f-af610d7ef332,267103e0-6703-4a74-bb4f-af610d7ef332,1,0,e1823be2-b646-4a1a-a9a9-c925a12c0586,e1823be2-b646-4a1a-a9a9-c925a12c0586,1,0,e613a6aa-82cb-40fd-8f28-0a74fe21e6a6,e613a6aa-82cb-40fd-8f28-0a74fe21e6a6,1,0,b98ca634-25a5-4366-af04-815ba34c8bb2,b98ca634-25a5-4366-af04-815ba34c8bb2,1,0,14d69108-4d26-401a-b7ae-2c86dadf831c,14d69108-4d26-401a-b7ae-2c86dadf831c,1,0,d6251f65-d366-4bc9-a5db-42063fe03594,d6251f65-d366-4bc9-a5db-42063fe03594,1,0,22c60cbc-429f-40d9-bf8b-681b7786c41d,22c60cbc-429f-40d9-bf8b-681b7786c41d,1,0,31dd320b-06aa-4314-9914-2c2420f572a1,31dd320b-06aa-4314-9914-2c2420f572a1,1,0,56730848-3bef-4b8c-b449-fe9d09c9c374,56730848-3bef-4b8c-b449-fe9d09c9c374,1,0,43c477d2-1234-4c4a-a18a-022c0ddf2fd5,43c477d2-1234-4c4a-a18a-022c0ddf2fd5,1,0,91d8c5e4-eaec-4951-9224-16882fda08f6,91d8c5e4-eaec-4951-9224-16882fda08f6,1,0,4304ffb9-7ede-4c59-bef8-26fe3e8f0103,4304ffb9-7ede-4c59-bef8-26fe3e8f0103,1,0,4654d192-74bf-430f-abee-6f4dc431b182,4654d192-74bf-430f-abee-6f4dc431b182,1,0,1ea750ae-5ec4-43c5-b34f-fd28999d41d7,1ea750ae-5ec4-43c5-b34f-fd28999d41d7,1,0,4678c704-933a-45ef-9d41-89b8f39016bb,4678c704-933a-45ef-9d41-89b8f39016bb,1,0,8ceea1e8-42ce-469f-823a-ceffdbd6b112,8ceea1e8-42ce-469f-823a-ceffdbd6b112,1,0,80eb2a49-8c0e-4f92-b99c-7fdadca03e7b,80eb2a49-8c0e-4f92-b99c-7fdadca03e7b,1,0,3f7ee937-d853-47b7-a1f5-d821208e3531,3f7ee937-d853-47b7-a1f5-d821208e3531,1,0,086d69d6-e2fa-45cb-84b6-f8f3e2919160,086d69d6-e2fa-45cb-84b6-f8f3e2919160,1,0,6995ee71-5901-46d9-a5c1-b35d795bda20,6995ee71-5901-46d9-a5c1-b35d795bda20,1,0,e93a4293-0497-4f11-b8b9-40300104fb96,e93a4293-0497-4f11-b8b9-40300104fb96,1,0,93531e5d-5dfc-42e8-be52-2e83f37262b0,93531e5d-5dfc-42e8-be52-2e83f37262b0,1,0,61bf78c0-7004-4a74-b362-e979c7316e05,61bf78c0-7004-4a74-b362-e979c7316e05,1,0,c4351896-eff1-4e4d-8823-028d63a9d6bf,c4351896-eff1-4e4d-8823-028d63a9d6bf,1,0,475f83a2-ba5a-4072-94f8-1324b1f198a4,475f83a2-ba5a-4072-94f8-1324b1f198a4,1,0,cd7c15c1-c573-46c9-b109-339b8b54c3ee,cd7c15c1-c573-46c9-b109-339b8b54c3ee,1,0,efd89929-4db9-4c58-b3cb-a8d9a41a1df2,efd89929-4db9-4c58-b3cb-a8d9a41a1df2,1,0,deee8bde-381f-4094-8794-7a06248860dd,deee8bde-381f-4094-8794-7a06248860dd,1,0,8c2a0f6b-492c-4c5a-97c5-da0d07f9d781,8c2a0f6b-492c-4c5a-97c5-da0d07f9d781,1,0,d92cb614-ed09-47db-b70b-d3e533c44c6a,d92cb614-ed09-47db-b70b-d3e533c44c6a,1,0,2757ee75-4b36-4901-bff1-044708754edb,2757ee75-4b36-4901-bff1-044708754edb,1,0,0e6bab27-bf94-4732-8549-dbd9b8a5f4e9,0e6bab27-bf94-4732-8549-dbd9b8a5f4e9,1,0,774c92d6-9b9b-422a-83d7-8d42ae2a9f60,774c92d6-9b9b-422a-83d7-8d42ae2a9f60,1,0,90032ffa-f117-4a34-82f8-cc7e5a22a542,90032ffa-f117-4a34-82f8-cc7e5a22a542,1,0,71144539-6472-4727-8887-0139f6221370,71144539-6472-4727-8887-0139f6221370,1,0,bff07da4-ae19-48a9-806b-14b285d42485,bff07da4-ae19-48a9-806b-14b285d42485,1,0,659cd4f6-d18c-4d75-a7e6-7c124a63ab9a,659cd4f6-d18c-4d75-a7e6-7c124a63ab9a,1,0,b0ccc05d-8d39-4f57-8e87-6846014f92ea,b0ccc05d-8d39-4f57-8e87-6846014f92ea,1,0,49e787c9-753a-468a-b8dd-2e970d9a1fed,49e787c9-753a-468a-b8dd-2e970d9a1fed,1,0,e871dea7-1953-4511-90b0-e0957afac4c0,e871dea7-1953-4511-90b0-e0957afac4c0,1,0,64fbfed7-9dda-481b-a4f7-fe440f24ba7e,64fbfed7-9dda-481b-a4f7-fe440f24ba7e,1,0,b2835a5b-5c91-448c-9eb1-1bb1c9a5e727,b2835a5b-5c91-448c-9eb1-1bb1c9a5e727,1,0,447fb310-0588-4e0d-8f6d-5fc1f3bb1180,447fb310-0588-4e0d-8f6d-5fc1f3bb1180,1,0,d91441cf-d793-4dfa-9225-f0c16818edde,d91441cf-d793-4dfa-9225-f0c16818edde,1,0,8986c155-54be-4b1b-b31a-5c00b88bc40d,8986c155-54be-4b1b-b31a-5c00b88bc40d,1,0,40ae107d-67a8-404c-adf9-1a760bba94ff,40ae107d-67a8-404c-adf9-1a760bba94ff,1,0,42a39785-144c-4d2d-92c6-fd8b345f687b,42a39785-144c-4d2d-92c6-fd8b345f687b,1,0,f3bd841b-fb36-4462-9627-b51801e563cd,f3bd841b-fb36-4462-9627-b51801e563cd,1,0,0a23f273-5589-4a48-be3a-eee7565749aa,0a23f273-5589-4a48-be3a-eee7565749aa,1,0,494eb9d9-4a10-4e85-b511-375408f21bbe,494eb9d9-4a10-4e85-b511-375408f21bbe,1,0,3fbbca3f-d4fa-4d65-a08f-0a348b9030c6,3fbbca3f-d4fa-4d65-a08f-0a348b9030c6,1,0,a161dd07-4a6e-4d0f-b72c-702d0d3a83a3,a161dd07-4a6e-4d0f-b72c-702d0d3a83a3,1,0,7172bed5-b12b-4e83-b15d-1d95b63a6272,7172bed5-b12b-4e83-b15d-1d95b63a6272,1,0,25d75a3c-b801-4b1e-aed8-90e667f36c67,25d75a3c-b801-4b1e-aed8-90e667f36c67,1,0,addb3aa1-a9d6-4d30-b5db-7f3ce46bc1b2,addb3aa1-a9d6-4d30-b5db-7f3ce46bc1b2,1,0,63ebf7fd-d514-4fce-abc1-fb3f253d01cd,63ebf7fd-d514-4fce-abc1-fb3f253d01cd,1,0,a275802f-937a-49f4-92da-fcdd185a036d,a275802f-937a-49f4-92da-fcdd185a036d,1,0,ec6ed9cb-85a2-4303-9906-cfb4ce6500bf,ec6ed9cb-85a2-4303-9906-cfb4ce6500bf,1,0,f2dc9319-ba60-421a-8340-be3e3a291393,f2dc9319-ba60-421a-8340-be3e3a291393,1,0,bf4eb62a-bc74-4845-bad2-58a2a8302a65,bf4eb62a-bc74-4845-bad2-58a2a8302a65,1,0,b66eb190-1c16-4f20-a94f-954bcdf313b8,b66eb190-1c16-4f20-a94f-954bcdf313b8,1,0,49e21b87-beae-4640-a497-ef468da0cbbc,49e21b87-beae-4640-a497-ef468da0cbbc,1,0,bbdfeebd-cda0-4911-8f31-553d751340a7,bbdfeebd-cda0-4911-8f31-553d751340a7,1,0,dc7adfb7-41e7-4019-a18d-5d9f5d227b71,dc7adfb7-41e7-4019-a18d-5d9f5d227b71,1,0,20aad006-5b1e-4cc2-94ef-668dd002667b,20aad006-5b1e-4cc2-94ef-668dd002667b,1,0,af6af7ae-d68a-4e12-ba2c-a360ce2920a7,af6af7ae-d68a-4e12-ba2c-a360ce2920a7,1,0,b0f5bce4-2ad3-416e-9b1e-3fb23deaa040,b0f5bce4-2ad3-416e-9b1e-3fb23deaa040,1,0,2befb2e3-7354-4a01-83d6-b24262704a5e,2befb2e3-7354-4a01-83d6-b24262704a5e,1,0,5b93975e-b2a4-4102-a060-2667f5813c94,5b93975e-b2a4-4102-a060-2667f5813c94,1,0,dcdc9c65-c2d5-4531-a325-f64b3861cbab,dcdc9c65-c2d5-4531-a325-f64b3861cbab,1,0,8d2bfd40-f185-4eab-b374-872d49310eb2,8d2bfd40-f185-4eab-b374-872d49310eb2,1,0,523de426-e5a6-49e0-8144-c637f80d8ddd,523de426-e5a6-49e0-8144-c637f80d8ddd,1,0,09256328-6205-4b04-b908-3287ae8ded75,09256328-6205-4b04-b908-3287ae8ded75,1,0,05a6e161-9791-4c5b-8753-bd6370cc4cc9,05a6e161-9791-4c5b-8753-bd6370cc4cc9,1,0,662c5b48-62e1-451e-b37f-20f3f2bb0347,662c5b48-62e1-451e-b37f-20f3f2bb0347,1,0,08dbba81-68fb-49ef-8aac-9631fcfa87c6,08dbba81-68fb-49ef-8aac-9631fcfa87c6,1,0,dd7191b6-cbc0-4b0b-a51a-c27a1e1720fa,dd7191b6-cbc0-4b0b-a51a-c27a1e1720fa,1,0,8170a27d-45e9-48b1-860b-c2d9cc5961cd,8170a27d-45e9-48b1-860b-c2d9cc5961cd,1,0,f1c08fed-f3db-4f72-8a8e-7c626b8cc130,f1c08fed-f3db-4f72-8a8e-7c626b8cc130,1,0,e8c3b796-bfd8-4108-ab5f-d0f21b7bd9a6,e8c3b796-bfd8-4108-ab5f-d0f21b7bd9a6,1,0,f41d01ec-983a-4b39-9c11-a6d25d08df4f,f41d01ec-983a-4b39-9c11-a6d25d08df4f,1,0,3247e64e-b57e-4c33-8086-7ab93c5b6371,3247e64e-b57e-4c33-8086-7ab93c5b6371,1,0,e5dca369-dc9a-4332-a509-f734b8787e13,e5dca369-dc9a-4332-a509-f734b8787e13,1,0,722af623-156c-4e63-8b2a-93da760f1559,722af623-156c-4e63-8b2a-93da760f1559,1,0,393074c4-0afc-4232-8101-11a4ea6ed28a,393074c4-0afc-4232-8101-11a4ea6ed28a,1,0,5ff23123-450c-40ae-9b79-c540da53e2a0,5ff23123-450c-40ae-9b79-c540da53e2a0,1,0,639339a1-7de5-4b05-adf3-f60e7edd922c,639339a1-7de5-4b05-adf3-f60e7edd922c,1,0,dea9af9d-13c0-40d4-a9b0-1908e0a58795,dea9af9d-13c0-40d4-a9b0-1908e0a58795,1,0,9e9b8c05-787a-43c0-891d-3d9ad7e4976f,9e9b8c05-787a-43c0-891d-3d9ad7e4976f,1,0,1abeb10b-0558-4478-8f51-d0964ba3c274,1abeb10b-0558-4478-8f51-d0964ba3c274,1,0,38325a66-588a-4db0-8e0c-21d239408369,38325a66-588a-4db0-8e0c-21d239408369,1,0,7c27e885-33fd-4da2-a60d-50336c0189b0,7c27e885-33fd-4da2-a60d-50336c0189b0,1,0,0e1a45b0-d95d-415f-b954-5689610aa393,0e1a45b0-d95d-415f-b954-5689610aa393,1,0,4736b3d3-f696-4bdd-b0e3-0884ea88f623,4736b3d3-f696-4bdd-b0e3-0884ea88f623,1,0,f6939587-ff87-4eca-ae52-10e1bd2abfce,f6939587-ff87-4eca-ae52-10e1bd2abfce,1,0,a8e4d97f-e2da-4aa8-a221-3cbcc135f403,a8e4d97f-e2da-4aa8-a221-3cbcc135f403,1,0,f2b0eab2-e34b-42f8-9b24-5596b4c17d7f,f2b0eab2-e34b-42f8-9b24-5596b4c17d7f,1,0,3cb575a9-dc82-45e0-81f0-d651e12246da,3cb575a9-dc82-45e0-81f0-d651e12246da,1,0,01a73950-3e8f-4f56-903f-af0d9574e72e,01a73950-3e8f-4f56-903f-af0d9574e72e,1,0,14bd0844-c829-4325-aa7f-0f417bf955dc,14bd0844-c829-4325-aa7f-0f417bf955dc,1,0,7f1cd658-ca10-49c6-80ef-b8956f3269ea,7f1cd658-ca10-49c6-80ef-b8956f3269ea,1,0,b0d9086f-cef7-47a8-ad62-d85fea28ebda,b0d9086f-cef7-47a8-ad62-d85fea28ebda,1,0,49c010fc-f5cc-45f4-ba46-132e7661c3dd,49c010fc-f5cc-45f4-ba46-132e7661c3dd,1,0,3f3b592d-ca61-40c7-be1f-e5d3224a1eb3,3f3b592d-ca61-40c7-be1f-e5d3224a1eb3,1,0,2c02a558-8d12-44cf-be6b-9c399b9032e5,2c02a558-8d12-44cf-be6b-9c399b9032e5,1,0,d94d4931-7c81-4ee8-93ea-b2c54b152fa5,d94d4931-7c81-4ee8-93ea-b2c54b152fa5,1,0,c770bdd5-c7c0-4751-b31d-46c0ea1f49b7,c770bdd5-c7c0-4751-b31d-46c0ea1f49b7,1,0,6afcc089-7f15-42e8-97b5-6aad6cf2e6f9,6afcc089-7f15-42e8-97b5-6aad6cf2e6f9,1,0,cce4c615-dc29-42b3-9d3d-b277dde4a2e4,cce4c615-dc29-42b3-9d3d-b277dde4a2e4,1,0,9c267aa6-5f23-49f6-868a-3324ef2845ff,9c267aa6-5f23-49f6-868a-3324ef2845ff,1,0,495eeeee-d7bf-4063-99e2-86daa066451a,495eeeee-d7bf-4063-99e2-86daa066451a,1,0,b6184698-79e4-4c19-9440-092ccd9dabf8,b6184698-79e4-4c19-9440-092ccd9dabf8,1,0,7d01fc0c-378e-421d-ab70-6a418eed5941,7d01fc0c-378e-421d-ab70-6a418eed5941,1,0,6eeb4867-bf9d-48dc-b96b-934a0c293010,6eeb4867-bf9d-48dc-b96b-934a0c293010,1,0,1d49b1bb-5f90-46e4-adcf-55ad46442648,1d49b1bb-5f90-46e4-adcf-55ad46442648,1,0,e1803e54-ec5e-4a82-8097-5e2331820991,e1803e54-ec5e-4a82-8097-5e2331820991,1,0,f69ec1f9-826e-4eb4-b52c-3f6a3dfc3361,f69ec1f9-826e-4eb4-b52c-3f6a3dfc3361,1,0,4cbb0b91-dbdd-472f-93c5-061076b6a8d3,4cbb0b91-dbdd-472f-93c5-061076b6a8d3,1,0,8506dbe9-7066-444b-83b6-fb2d71a336e7,8506dbe9-7066-444b-83b6-fb2d71a336e7,1,0,240b4df5-0d75-4e5a-9ae8-d0bc7cc51722,240b4df5-0d75-4e5a-9ae8-d0bc7cc51722,1,0,6686d828-3129-4d44-a8a2-a64657d424cb,6686d828-3129-4d44-a8a2-a64657d424cb,1,0,90433152-f389-4d45-8ccc-3eb6c7a7e1f0,90433152-f389-4d45-8ccc-3eb6c7a7e1f0,1,0,ce235ab9-1dec-459a-9fec-498c262ece56,ce235ab9-1dec-459a-9fec-498c262ece56,1,0,9ec53d1a-ed7a-41e8-b5d0-6c2181fd63a5,9ec53d1a-ed7a-41e8-b5d0-6c2181fd63a5,1,0,97edd94a-4bf2-4ed7-b98f-677f869b0715,97edd94a-4bf2-4ed7-b98f-677f869b0715,1,0,a9ae364f-b668-4fb4-b976-f227951ffb6b,a9ae364f-b668-4fb4-b976-f227951ffb6b,1,0,e660c8bf-af5f-4525-a56e-68925d2b96fa,e660c8bf-af5f-4525-a56e-68925d2b96fa,1,0,2fad50a6-6a3e-4f87-ab84-907364427a63,2fad50a6-6a3e-4f87-ab84-907364427a63,1,0,9567765b-8e02-4262-89a9-5c354109cc4c,9567765b-8e02-4262-89a9-5c354109cc4c,1,0,e37aa075-143b-44e9-a2e2-77b3e0f76a77,e37aa075-143b-44e9-a2e2-77b3e0f76a77,1,0,1df47f0c-7935-481b-9dfb-1f660ea81a2b,1df47f0c-7935-481b-9dfb-1f660ea81a2b,1,0,258736e4-93c0-4a46-8caa-75be42c9f006,258736e4-93c0-4a46-8caa-75be42c9f006,1,0,3153b2b9-9e3e-4d6b-ab8c-5ccaac78a08a,3153b2b9-9e3e-4d6b-ab8c-5ccaac78a08a,1,0,56d0acf3-c888-4824-a6e4-27d61fa35415,56d0acf3-c888-4824-a6e4-27d61fa35415,1,0,588bd1b2-ee61-4a05-83cd-efb1b82ccb44,588bd1b2-ee61-4a05-83cd-efb1b82ccb44,1,0,439129dd-ad00-484c-b84a-fb325af979ed,439129dd-ad00-484c-b84a-fb325af979ed,1,0,bb4db4de-dec5-4bf9-be83-a0d845398d49,bb4db4de-dec5-4bf9-be83-a0d845398d49,1,0,dcae6376-f44c-421e-87f2-df83413c021e,dcae6376-f44c-421e-87f2-df83413c021e,1,0,dbdcdcab-4cd5-44af-b52c-6ce14a26ca9c,dbdcdcab-4cd5-44af-b52c-6ce14a26ca9c,1,0,151f2d0a-cc43-490d-ad7d-71390703aa72,151f2d0a-cc43-490d-ad7d-71390703aa72,1,0,2a515a4f-683b-4674-b097-62dd2d940c39,2a515a4f-683b-4674-b097-62dd2d940c39,1,0,d14058f5-dfd4-47eb-ae6d-01b7062f5940,d14058f5-dfd4-47eb-ae6d-01b7062f5940,1,0,90f358ae-9c80-40cf-8e8f-aa02d78a2cdb,90f358ae-9c80-40cf-8e8f-aa02d78a2cdb,1,0,1681dd7a-de80-4b8d-9657-c9702a19d653,1681dd7a-de80-4b8d-9657-c9702a19d653,1,0,10d796e9-a3d4-4ef0-87d5-8315aa12f1c8,10d796e9-a3d4-4ef0-87d5-8315aa12f1c8,1,0,fdb5b235-1978-4c2a-a03f-02341df00c3c,fdb5b235-1978-4c2a-a03f-02341df00c3c,1,0,9f593f27-8009-40c0-94d6-53f177ce55f4,9f593f27-8009-40c0-94d6-53f177ce55f4,1,0,38637f61-399a-4966-9e64-4751aecffa31,38637f61-399a-4966-9e64-4751aecffa31,1,0,0f38a18b-a36c-45fe-86c1-396634aaa5df,0f38a18b-a36c-45fe-86c1-396634aaa5df,1,0,f2b7b8d0-c0f7-46ba-907a-f8dfa76fc2da,f2b7b8d0-c0f7-46ba-907a-f8dfa76fc2da,1,0,a81c783d-2dea-4dde-9ca1-7b23d609eb22,a81c783d-2dea-4dde-9ca1-7b23d609eb22,1,0,137ec4ee-5053-47a7-8f5d-f6e63174608f,137ec4ee-5053-47a7-8f5d-f6e63174608f,1,0,820bb4b4-895b-4ccf-a350-2545bf8a2f7e,820bb4b4-895b-4ccf-a350-2545bf8a2f7e,1,0,530a3164-4ef1-4b3b-8269-13764ef4bf15,530a3164-4ef1-4b3b-8269-13764ef4bf15,1,0,6df2bb92-558c-4453-9de4-e4176e8f93dc,6df2bb92-558c-4453-9de4-e4176e8f93dc,1,0,0ce4c8a4-b20b-4550-bee3-f677e9ec64e9,0ce4c8a4-b20b-4550-bee3-f677e9ec64e9,1,0,30d5c2a6-b3cf-4ed5-ba75-850bcae932d1,30d5c2a6-b3cf-4ed5-ba75-850bcae932d1,1,0,0bf5e9c1-905a-4202-8b96-ed831b41be4b,0bf5e9c1-905a-4202-8b96-ed831b41be4b,1,0,e92ae368-0d7c-4fb7-b6d0-5ab63dc95a6a,e92ae368-0d7c-4fb7-b6d0-5ab63dc95a6a,1,0,f30c9c4b-aa6c-4b15-9ac7-888c0c0cabd9,f30c9c4b-aa6c-4b15-9ac7-888c0c0cabd9,1,0,be15e947-f671-4848-ada1-51239af73615,be15e947-f671-4848-ada1-51239af73615,1,0,3fc019d1-aec8-4835-96c5-3bbf43da0b94,3fc019d1-aec8-4835-96c5-3bbf43da0b94,1,0,5371672a-c8e0-4c12-834e-f23dd885b49a,5371672a-c8e0-4c12-834e-f23dd885b49a,1,0,d3e0dd8f-886a-4441-8f05-fd629da80f07,d3e0dd8f-886a-4441-8f05-fd629da80f07,1,0,6417d7c8-6436-4907-98eb-44cd7638f3f1,6417d7c8-6436-4907-98eb-44cd7638f3f1,1,0,1f927f76-5523-4880-9d26-d69a059f2b67,1f927f76-5523-4880-9d26-d69a059f2b67,1,0,27a9c1de-90a9-49f8-8b16-f7ef041ae1de,27a9c1de-90a9-49f8-8b16-f7ef041ae1de,1,0,ba49877b-6e30-4177-a67c-00e65aa498fb,ba49877b-6e30-4177-a67c-00e65aa498fb,1,0,25b39aeb-94c3-4199-9d56-5bd87e325bf2,25b39aeb-94c3-4199-9d56-5bd87e325bf2,1,0,b0b63551-4e83-4201-af9a-b4ab150c43a5,b0b63551-4e83-4201-af9a-b4ab150c43a5,1,0,ca85912b-87b4-481e-9184-017364b4603d,ca85912b-87b4-481e-9184-017364b4603d,1,0,2bd80198-4739-4e8f-9af1-40addc91a05b,2bd80198-4739-4e8f-9af1-40addc91a05b,1,0,2650db63-ca98-4a8a-8c36-165548aa5279,2650db63-ca98-4a8a-8c36-165548aa5279,1,0,6a8fdf0a-5dff-49e4-a423-fc80aceeee27,6a8fdf0a-5dff-49e4-a423-fc80aceeee27,1,0,4b9320f1-c7b1-4c08-a832-64ef108d0d6d,4b9320f1-c7b1-4c08-a832-64ef108d0d6d,1,0,e8c5c961-0633-438d-ba50-d2a774f6b167,e8c5c961-0633-438d-ba50-d2a774f6b167,1,0,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,33c66a15-e48e-406a-a77c-02af72ae96d5,33c66a15-e48e-406a-a77c-02af72ae96d5,1,0,e57f4619-b5ed-44de-a186-a13a3897731b,e57f4619-b5ed-44de-a186-a13a3897731b,1,0,3b78a9d0-7382-4115-a7dc-d06c9a1962d1,3b78a9d0-7382-4115-a7dc-d06c9a1962d1,1,0,9935d602-668e-4df9-a338-0f542def878b,9935d602-668e-4df9-a338-0f542def878b,1,0,459ed297-0c0d-4bdb-90a3-da387868f040,459ed297-0c0d-4bdb-90a3-da387868f040,1,0,ccb5b9a7-1a10-4803-b455-0350afe4b584,ccb5b9a7-1a10-4803-b455-0350afe4b584,1,0,c86aa97a-5898-4cb2-ae62-598bddf8e99f,c86aa97a-5898-4cb2-ae62-598bddf8e99f,1,0,d3c9b925-6b74-42db-8b21-ab21d24797d1,d3c9b925-6b74-42db-8b21-ab21d24797d1,1,0,c5033dd2-0911-4124-8688-dc9dabf3155f,c5033dd2-0911-4124-8688-dc9dabf3155f,1,0,274357df-cb5c-407d-ae72-58046c310db2,274357df-cb5c-407d-ae72-58046c310db2,1,0,5467001e-d025-4669-b16e-26381ac4403f,5467001e-d025-4669-b16e-26381ac4403f,1,0,cb3a5c5b-7bdc-4e12-96f1-11b1213b6853,cb3a5c5b-7bdc-4e12-96f1-11b1213b6853,1,0,e6fe7103-4dfa-4302-a58e-ccd7fac19c9d,e6fe7103-4dfa-4302-a58e-ccd7fac19c9d,1,0,bb3a9973-67ce-479e-8668-c2f3bb20301e,bb3a9973-67ce-479e-8668-c2f3bb20301e,1,0,e5250dfe-dda2-4547-9b9e-2470ea1be1ab,e5250dfe-dda2-4547-9b9e-2470ea1be1ab,1,0,2c3fccc6-c4c0-49ec-bfc2-05ce05f27ea9,2c3fccc6-c4c0-49ec-bfc2-05ce05f27ea9,1,0,37169451-1464-4f24-8ca6-802963ffb636,37169451-1464-4f24-8ca6-802963ffb636,1,0,c3a958b1-590f-4418-a74f-5982b478cf52,c3a958b1-590f-4418-a74f-5982b478cf52,1,0,ef0e618d-0942-460a-ac65-9aca2fed976e,ef0e618d-0942-460a-ac65-9aca2fed976e,1,0,fd1ed7ec-d848-41cd-8ce3-2e5a682abcf0,fd1ed7ec-d848-41cd-8ce3-2e5a682abcf0,1,0,2ac8bd69-9fbf-4f15-b58d-397d9e903532,2ac8bd69-9fbf-4f15-b58d-397d9e903532,1,0,2ff35814-7eaa-4ae5-bbac-f46bebb36c9d,2ff35814-7eaa-4ae5-bbac-f46bebb36c9d,1,0,5b460b92-2c74-4f59-88b2-18d9aac42c04,5b460b92-2c74-4f59-88b2-18d9aac42c04,1,0,db05d35b-5f53-4c27-ba80-b477b9a98299,db05d35b-5f53-4c27-ba80-b477b9a98299,1,0,fa872ae1-b699-46fe-9d6a-e42e1388752b,fa872ae1-b699-46fe-9d6a-e42e1388752b,1,0,1acf34e6-c428-4130-82f0-5160dfcc0858,1acf34e6-c428-4130-82f0-5160dfcc0858,1,0,57046262-b9ce-4670-9cf5-6db9e58dd0d5,57046262-b9ce-4670-9cf5-6db9e58dd0d5,1,0,a9824176-36d5-4be5-9984-f4312ff48515,a9824176-36d5-4be5-9984-f4312ff48515,1,0,8e980ca0-1627-45e8-bd27-5dd1ac199459,8e980ca0-1627-45e8-bd27-5dd1ac199459,1,0,8b653beb-af9f-4f39-b691-ae14f80b7cd6,8b653beb-af9f-4f39-b691-ae14f80b7cd6,1,0,77559c11-713f-454d-aff4-56649e1350e9,77559c11-713f-454d-aff4-56649e1350e9,1,0,0c965703-c1d0-48b7-80f9-b8d869ff98f5,0c965703-c1d0-48b7-80f9-b8d869ff98f5,1,0,51f8d5ff-aec5-4c0a-ad02-df8c6cb1b4ad,51f8d5ff-aec5-4c0a-ad02-df8c6cb1b4ad,1,0,7ba42162-557b-4e34-8aca-0cdee8cb2452,7ba42162-557b-4e34-8aca-0cdee8cb2452,1,0,eee99b8e-29b6-4b7a-81f1-3d91d740c0d7,eee99b8e-29b6-4b7a-81f1-3d91d740c0d7,1,0,ad4f2d1f-1e6f-4f6a-8061-202c0e42a8e4,ad4f2d1f-1e6f-4f6a-8061-202c0e42a8e4,1,0,dd577924-c6cb-4aa9-9db5-366d8958d00f,dd577924-c6cb-4aa9-9db5-366d8958d00f,1,0,8ed8f72e-404a-4be4-a44d-ddebbad5f411,8ed8f72e-404a-4be4-a44d-ddebbad5f411,1,0,e919bc4c-86e6-44f6-be27-5a729b63d042,e919bc4c-86e6-44f6-be27-5a729b63d042,1,0,ec580e4f-1518-4923-a10e-bc1da8688b37,ec580e4f-1518-4923-a10e-bc1da8688b37,1,0,91c3902a-314f-4d40-8bcc-8dd131fed2f4,91c3902a-314f-4d40-8bcc-8dd131fed2f4,1,0,ae2b21c5-9349-49e8-9627-26f05c21f43a,ae2b21c5-9349-49e8-9627-26f05c21f43a,1,0,7e4c0b74-e807-4aa9-ad69-3c85b147bb61,7e4c0b74-e807-4aa9-ad69-3c85b147bb61,1,0,917a19d7-73db-4247-b892-397598d67879,917a19d7-73db-4247-b892-397598d67879,1,0,1f866dc3-a4bc-4e8d-96a3-a26ee073926f,1f866dc3-a4bc-4e8d-96a3-a26ee073926f,1,0,d8066600-c669-449d-a187-fdd3af8f7afa,d8066600-c669-449d-a187-fdd3af8f7afa,1,0,dadf86a6-c118-4827-b1b9-6cfee731242f,dadf86a6-c118-4827-b1b9-6cfee731242f,1,0,45bf7b20-f048-491a-a989-e50bea13d028,45bf7b20-f048-491a-a989-e50bea13d028,1,0,9ad3b432-5b49-44ee-9d8d-83c36458d927,9ad3b432-5b49-44ee-9d8d-83c36458d927,1,0,a9967bff-53b9-4295-a253-3647d956d3cb,a9967bff-53b9-4295-a253-3647d956d3cb,1,0,75f0fd5b-c594-4f3a-8ff2-3fdadf1dc96d,75f0fd5b-c594-4f3a-8ff2-3fdadf1dc96d,1,0,b8a31397-8974-44ec-92b0-7cbdc481cf7e,b8a31397-8974-44ec-92b0-7cbdc481cf7e,1,0,b29c7c0d-03eb-422b-a899-ba9a7eba99f6,b29c7c0d-03eb-422b-a899-ba9a7eba99f6,1,0,fb16c4d5-854c-4525-92be-b21fa2df5b0d,fb16c4d5-854c-4525-92be-b21fa2df5b0d,1,0,5771de21-2086-432b-ad91-de14a39bd5bc,5771de21-2086-432b-ad91-de14a39bd5bc,1,0,b15bcf3b-0228-4d02-8f20-cd6ba82f7585,b15bcf3b-0228-4d02-8f20-cd6ba82f7585,1,0,ed96fbfa-bda7-405c-9073-d0b6feffedad,ed96fbfa-bda7-405c-9073-d0b6feffedad,1,0,50c724cb-dde1-4313-9492-b1750bd0afc1,50c724cb-dde1-4313-9492-b1750bd0afc1,1,0,12901981-6106-4471-ab3a-e127c2bb4ebd,12901981-6106-4471-ab3a-e127c2bb4ebd,1,0,17ad1497-fa0e-469f-b2e2-b94a6f848ec5,17ad1497-fa0e-469f-b2e2-b94a6f848ec5,1,0,d5ea5dea-233d-4106-b9ba-f030d4f762ef,d5ea5dea-233d-4106-b9ba-f030d4f762ef,1,0,903af05e-5ac5-46aa-843b-d74f9e417c1d,903af05e-5ac5-46aa-843b-d74f9e417c1d,1,0,4dc4862e-74c3-469d-863b-09fdbe0d6be0,4dc4862e-74c3-469d-863b-09fdbe0d6be0,1,0,a344290a-c9be-47a7-95ad-ced1b52a0995,a344290a-c9be-47a7-95ad-ced1b52a0995,1,0,a4e56049-4de9-40a3-8197-a5c84a11f516,a4e56049-4de9-40a3-8197-a5c84a11f516,1,0,339c9220-fd5b-45d3-b300-cdcc8788f87e,339c9220-fd5b-45d3-b300-cdcc8788f87e,1,0,02d7d401-3c0c-4fd0-b096-1f73b6ec14c3,02d7d401-3c0c-4fd0-b096-1f73b6ec14c3,1,0,9042a6de-5048-432d-a448-7e21f2d1d24a,9042a6de-5048-432d-a448-7e21f2d1d24a,1,0,350d46bf-114e-48e7-90c6-6708d949f20d,350d46bf-114e-48e7-90c6-6708d949f20d,1,0,d047caa8-7bcf-41ac-a18e-97877d6e0a2a,d047caa8-7bcf-41ac-a18e-97877d6e0a2a,1,0,aac20ff3-5873-432e-b763-14411e623d41,aac20ff3-5873-432e-b763-14411e623d41,1,0,fbc4df3e-c235-4197-8c1f-a5e39ac63a8c,fbc4df3e-c235-4197-8c1f-a5e39ac63a8c,1,0,6df44466-8750-481a-9baf-c924f0d45353,6df44466-8750-481a-9baf-c924f0d45353,1,0,110121eb-a0eb-4662-8911-3dcc3d341a73,110121eb-a0eb-4662-8911-3dcc3d341a73,1,0,f8980c18-6b9c-4e45-919a-22e976d2a846,f8980c18-6b9c-4e45-919a-22e976d2a846,1,0,c946efb7-c67e-49c1-bf56-d3c2d7220acd,c946efb7-c67e-49c1-bf56-d3c2d7220acd,1,0,7ed6bd83-b61d-4db4-8549-acacbdda6ca2,7ed6bd83-b61d-4db4-8549-acacbdda6ca2,1,0,6b7c9f74-f2b6-463e-acb9-9f82901986cf,6b7c9f74-f2b6-463e-acb9-9f82901986cf,1,0,fc4c1d64-132b-4687-a37d-05000fdb4ba5,fc4c1d64-132b-4687-a37d-05000fdb4ba5,1,0,528777cd-090b-4b70-82f5-56def98c5893,528777cd-090b-4b70-82f5-56def98c5893,1,0,49dbe467-8832-4ede-9a05-494248619aeb,49dbe467-8832-4ede-9a05-494248619aeb,1,0,460ed9ca-10c2-491c-a641-b92ffc2a8e7c,460ed9ca-10c2-491c-a641-b92ffc2a8e7c,1,0,bd5fadd3-9264-4c3b-9bd5-51e91847a6fb,bd5fadd3-9264-4c3b-9bd5-51e91847a6fb,1,0,09c73108-8528-4970-9b7f-fff9eda7816a,09c73108-8528-4970-9b7f-fff9eda7816a,1,0,40aa936e-cb1c-4ae9-85f1-6d930a5815cc,40aa936e-cb1c-4ae9-85f1-6d930a5815cc,1,0,f568245a-d158-45dc-af92-2d411f12db7b,f568245a-d158-45dc-af92-2d411f12db7b,1,0,0f17cdac-aa17-45e6-b3d0-220b13345390,0f17cdac-aa17-45e6-b3d0-220b13345390,1,0,c675db75-d0c3-4026-b97c-6b23ecbb336a,c675db75-d0c3-4026-b97c-6b23ecbb336a,1,0,469f67fa-98b0-44b0-abd4-cae136c02834,469f67fa-98b0-44b0-abd4-cae136c02834,1,0,16a18458-999c-420e-80df-8fc10855746c,16a18458-999c-420e-80df-8fc10855746c,1,0,b794f222-0fde-439f-97a3-0da74075b415,b794f222-0fde-439f-97a3-0da74075b415,1,0,3a716aad-9b2c-48a7-b802-80732066391b,3a716aad-9b2c-48a7-b802-80732066391b,1,0,480d959f-aac8-4241-875f-78e1c1f32621,480d959f-aac8-4241-875f-78e1c1f32621,1,0,496e5de8-d75c-4536-9993-75374f070b40,496e5de8-d75c-4536-9993-75374f070b40,1,0,b4e610ba-c9c8-4b25-903b-e567dcbc2556,b4e610ba-c9c8-4b25-903b-e567dcbc2556,1,0,48febdbd-a085-4113-8511-ed7ff6be7d3c,48febdbd-a085-4113-8511-ed7ff6be7d3c,1,0,49413232-c0c3-4983-9d10-291a0399281b,49413232-c0c3-4983-9d10-291a0399281b,1,0,032bb782-96a7-4c1b-8b8f-eb4e18b555b7,032bb782-96a7-4c1b-8b8f-eb4e18b555b7,1,0,b9b076bb-38ab-4a94-8226-41a4d4d7432c,b9b076bb-38ab-4a94-8226-41a4d4d7432c,1,0,e12da8db-4037-473e-ba2b-d0ceb4534dcb,e12da8db-4037-473e-ba2b-d0ceb4534dcb,1,0,789514e5-8ea3-4a5e-88c5-ed89c4135866,789514e5-8ea3-4a5e-88c5-ed89c4135866,1,0,a16768ff-6137-43d8-8784-4805ed83632a,a16768ff-6137-43d8-8784-4805ed83632a,1,0,61971286-9f94-4a27-aa34-e10848adb70a,61971286-9f94-4a27-aa34-e10848adb70a,1,0,1e75d143-3452-496e-a137-6d7f4c4ed019,1e75d143-3452-496e-a137-6d7f4c4ed019,1,0,e0619d14-c658-4eb5-841a-3a029de28be4,e0619d14-c658-4eb5-841a-3a029de28be4,1,0,99a3b660-7875-47f7-9c6c-c552e5673deb,99a3b660-7875-47f7-9c6c-c552e5673deb,1,0,2bdcf3a5-c8e1-492c-afee-f9db68e2fbb6,2bdcf3a5-c8e1-492c-afee-f9db68e2fbb6,1,0,41cbf934-ea54-41df-abf0-09f319d2e67a,41cbf934-ea54-41df-abf0-09f319d2e67a,1,0,47246084-a5f8-4d0f-b4e2-204c1b97483a,47246084-a5f8-4d0f-b4e2-204c1b97483a,1,0,e58233ec-6cfc-4a8b-9929-689fa69cdb07,e58233ec-6cfc-4a8b-9929-689fa69cdb07,1,0,3291a891-a47c-43ca-b088-aecd3867d38c,3291a891-a47c-43ca-b088-aecd3867d38c,1,0,56cde2b4-00f2-49ba-b407-16e241c17fd2,56cde2b4-00f2-49ba-b407-16e241c17fd2,1,0,bd84fb2b-4c52-4e2f-a8c5-f289b8336145,bd84fb2b-4c52-4e2f-a8c5-f289b8336145,1,0,219ed110-f2a0-41c1-ac5a-02301b248c54,219ed110-f2a0-41c1-ac5a-02301b248c54,1,0,1c722dfd-2b07-4985-9188-17353de24771,1c722dfd-2b07-4985-9188-17353de24771,1,0,1a630496-2cdd-4c89-a1aa-ed20545ad133,1a630496-2cdd-4c89-a1aa-ed20545ad133,1,0,b0dd02ee-ea6a-43f2-baa2-abac0a1ab4bb,b0dd02ee-ea6a-43f2-baa2-abac0a1ab4bb,1,0,b19cea0e-e57a-4969-8daf-f48d3d16705f,b19cea0e-e57a-4969-8daf-f48d3d16705f,1,0,d4059340-3361-4baa-ae48-ecbfb9800a2e,d4059340-3361-4baa-ae48-ecbfb9800a2e,1,0,f78f6c43-dd90-4117-acf7-ed5b951cb964,f78f6c43-dd90-4117-acf7-ed5b951cb964,1,0,8eebd519-4989-4784-82b8-39d77eebfb17,8eebd519-4989-4784-82b8-39d77eebfb17,1,0,0a2cb6e3-d9fa-4881-b136-7b6db9efca07,0a2cb6e3-d9fa-4881-b136-7b6db9efca07,1,0,c1561ed9-2fbf-4c12-a484-07f8adbe8fa3,c1561ed9-2fbf-4c12-a484-07f8adbe8fa3,1,0,4527877b-5723-4aa5-8705-98174ac9c337,4527877b-5723-4aa5-8705-98174ac9c337,1,0,d6b21e7b-df57-4280-8c95-c269b5316018,d6b21e7b-df57-4280-8c95-c269b5316018,1,0,808c468b-6322-428d-ac6a-ccf2228b05b6,808c468b-6322-428d-ac6a-ccf2228b05b6,1,0,13664bb2-738f-4d18-b382-a7bcf8105a5a,13664bb2-738f-4d18-b382-a7bcf8105a5a,1,0,f3f56abe-9248-4555-bf99-29560eb4f9ee,f3f56abe-9248-4555-bf99-29560eb4f9ee,1,0,0dbd5d55-a85f-4c7e-ac31-7ba4ab7cc371,0dbd5d55-a85f-4c7e-ac31-7ba4ab7cc371,1,0,dd9d09ef-3b4b-4bb5-9408-9c4080049bb3,dd9d09ef-3b4b-4bb5-9408-9c4080049bb3,1,0,3eb43a06-b32d-4904-8489-6264d0207623,3eb43a06-b32d-4904-8489-6264d0207623,1,0,a18098cf-5a61-46b5-bd55-cc61d15aa6bc,a18098cf-5a61-46b5-bd55-cc61d15aa6bc,1,0,18615fe1-cfee-4888-9c09-88d1c5db39eb,18615fe1-cfee-4888-9c09-88d1c5db39eb,1,0,63e363fa-8b0c-4d48-ab1b-9c953c5ed4c0,63e363fa-8b0c-4d48-ab1b-9c953c5ed4c0,1,0,087c83c0-75e7-476b-b7c6-5be55498a190,087c83c0-75e7-476b-b7c6-5be55498a190,1,0,ec5e5413-9e77-4929-83b8-6fee70688b28,ec5e5413-9e77-4929-83b8-6fee70688b28,1,0,59cd8e3f-ecf3-4e1d-bd98-41551d5d6f68,59cd8e3f-ecf3-4e1d-bd98-41551d5d6f68,1,0,8390c864-2b84-4c45-8583-cb4a4ab49168,8390c864-2b84-4c45-8583-cb4a4ab49168,1,0,1b2fefca-fef5-4319-90cc-325444cb63a6,1b2fefca-fef5-4319-90cc-325444cb63a6,1,0,34a128be-8fbb-4dd8-ac23-9f35041feb63,34a128be-8fbb-4dd8-ac23-9f35041feb63,1,0,baa31006-e0d6-496e-a60e-27b3dfd19397,baa31006-e0d6-496e-a60e-27b3dfd19397,1,0,3007d8ff-3942-45ed-bac5-8a6c40ca060c,3007d8ff-3942-45ed-bac5-8a6c40ca060c,1,0,8bfe1474-fd12-4744-a9ab-3383bfe766b3,8bfe1474-fd12-4744-a9ab-3383bfe766b3,1,0,3af97375-f776-4129-9521-b8d65d795db6,3af97375-f776-4129-9521-b8d65d795db6,1,0,0e98801b-a45b-44cb-a341-7e43d723f6ed,0e98801b-a45b-44cb-a341-7e43d723f6ed,1,0,5b71cd3b-d5b8-4632-9678-0ab1e1d2ea91,5b71cd3b-d5b8-4632-9678-0ab1e1d2ea91,1,0,103ac72d-c386-40ea-89d4-35798d064f1a,103ac72d-c386-40ea-89d4-35798d064f1a,1,0,645ceb40-1e9f-4a67-aa7f-b9002fa066b3,645ceb40-1e9f-4a67-aa7f-b9002fa066b3,1,0,d1fe15e9-8e5c-4819-85cd-24ab31409437,d1fe15e9-8e5c-4819-85cd-24ab31409437,1,0,c8c5bfe9-ead5-4e79-9fd5-60ad275faa1e,c8c5bfe9-ead5-4e79-9fd5-60ad275faa1e,1,0,8f9826b6-890e-4ba3-a1f2-bc9ebb3238dd,8f9826b6-890e-4ba3-a1f2-bc9ebb3238dd,1,0,74f68bda-17b1-4b3c-aa64-b1014300f9b5,74f68bda-17b1-4b3c-aa64-b1014300f9b5,1,0,90a195b0-7f64-4ccb-986e-8c8c2cf12ccd,90a195b0-7f64-4ccb-986e-8c8c2cf12ccd,1,0,9f9d1f8c-7ff9-420f-a426-48f33493d9f2,9f9d1f8c-7ff9-420f-a426-48f33493d9f2,1,0,ab7bc0bc-b4b8-4a4a-aecc-1cbe14fd4975,ab7bc0bc-b4b8-4a4a-aecc-1cbe14fd4975,1,0,9f8d9594-674f-49ef-9fb8-bb64d5c40a37,9f8d9594-674f-49ef-9fb8-bb64d5c40a37,1,0,47ee7d38-9fa9-458d-abee-e11270f79494,47ee7d38-9fa9-458d-abee-e11270f79494,1,0,bb6b83ff-81f4-4c39-ad8e-8cda9ccd9cb9,bb6b83ff-81f4-4c39-ad8e-8cda9ccd9cb9,1,0,076daecf-8fcb-496b-9f13-c4faa3a8a722,076daecf-8fcb-496b-9f13-c4faa3a8a722,1,0,f1a8357b-7083-42b3-ab5d-36223a3dd2a4,f1a8357b-7083-42b3-ab5d-36223a3dd2a4,1,0,296d7725-bdd3-4210-9db9-31de5711ea9b,296d7725-bdd3-4210-9db9-31de5711ea9b,1,0,6ecc5bc2-20b3-46f3-8019-ae1e1f3de319,6ecc5bc2-20b3-46f3-8019-ae1e1f3de319,1,0,1d05f89a-23dd-4d30-8786-abe8a9a39a40,1d05f89a-23dd-4d30-8786-abe8a9a39a40,1,0,245c2c6c-7b7f-4381-9304-1d7287a215fa,245c2c6c-7b7f-4381-9304-1d7287a215fa,1,0,fd17bbe4-34d9-4832-8eea-8eeb82194e4c,fd17bbe4-34d9-4832-8eea-8eeb82194e4c,1,0,d4c72d7f-7e1f-473c-9a2b-fa675fc78731,d4c72d7f-7e1f-473c-9a2b-fa675fc78731,1,0,8bb5be12-98df-4a38-bffe-432fb13d8101,8bb5be12-98df-4a38-bffe-432fb13d8101,1,0,94209023-ce88-401c-9aff-526fb7e43709,94209023-ce88-401c-9aff-526fb7e43709,1,0,22b99094-b52a-4244-ae91-53848d82560b,22b99094-b52a-4244-ae91-53848d82560b,1,0,22c9e2fa-c1f0-41ec-b6f2-9d7357dd3479,22c9e2fa-c1f0-41ec-b6f2-9d7357dd3479,1,0,b0002134-d5c9-4508-9f0e-97f92461b590,b0002134-d5c9-4508-9f0e-97f92461b590,1,0,1506ec71-cb38-4831-a29d-dac2c4deddda,1506ec71-cb38-4831-a29d-dac2c4deddda,1,0,e05fd82b-b77b-4b7f-b300-43653017f341,e05fd82b-b77b-4b7f-b300-43653017f341,1,0,d3b5e5ee-2317-43b4-b669-3af2ce635cf3,d3b5e5ee-2317-43b4-b669-3af2ce635cf3,1,0,f15a0526-c207-42fe-aed9-438ae0c4a4b8,f15a0526-c207-42fe-aed9-438ae0c4a4b8,1,0,9d444a41-7190-48fb-9a4a-08f8e7bc32a3,9d444a41-7190-48fb-9a4a-08f8e7bc32a3,1,0,8583cab0-0620-4346-96e0-bcac40981b8a,8583cab0-0620-4346-96e0-bcac40981b8a,1,0,e1dfba26-c682-42a2-8e15-fe6f535c9ce1,e1dfba26-c682-42a2-8e15-fe6f535c9ce1,1,0,095990b1-187b-400c-941a-275f272239ca,095990b1-187b-400c-941a-275f272239ca,1,0,ba108470-350d-40c3-bb44-9852c2aa8c97,ba108470-350d-40c3-bb44-9852c2aa8c97,1,0,a37c33fa-64b0-4a1b-846a-0a236bad44f8,a37c33fa-64b0-4a1b-846a-0a236bad44f8,1,0,d8481ce1-7f64-47b0-8fc0-6642ae93aca1,d8481ce1-7f64-47b0-8fc0-6642ae93aca1,1,0,a50f4324-da44-449b-b500-74228b2aa7e0,a50f4324-da44-449b-b500-74228b2aa7e0,1,0,04236716-9c36-4a1d-b4fb-4b8c65644ab4,04236716-9c36-4a1d-b4fb-4b8c65644ab4,1,0,97276702-6686-4ac4-8360-d85369a08b20,97276702-6686-4ac4-8360-d85369a08b20,1,0,e5450ee7-e891-4f58-9a01-d2d81d5ddd6d,e5450ee7-e891-4f58-9a01-d2d81d5ddd6d,1,0,068883fe-d7ae-40e7-ad82-864867916daa,068883fe-d7ae-40e7-ad82-864867916daa,1,0,c1b02568-2095-4f83-8543-2402f67dbe3d,c1b02568-2095-4f83-8543-2402f67dbe3d,1,0,8b749b7a-5e68-4523-adc2-8b3c5ce9701c,8b749b7a-5e68-4523-adc2-8b3c5ce9701c,1,0,bf3c7edc-0791-459e-a7ac-b7e8d7ed97fe,bf3c7edc-0791-459e-a7ac-b7e8d7ed97fe,1,0,7dc6d13e-4edf-4e6a-9ee9-4b32ad889ecf,7dc6d13e-4edf-4e6a-9ee9-4b32ad889ecf,1,0,aecbd726-6952-49e6-b544-4c5cc764c24c,aecbd726-6952-49e6-b544-4c5cc764c24c,1,0,d335cfbf-bc78-4274-a178-10f60372474a,d335cfbf-bc78-4274-a178-10f60372474a,1,0,0f4411b3-addf-4fcf-8da8-c5140dea356c,0f4411b3-addf-4fcf-8da8-c5140dea356c,1,0,c501f9ab-d01b-4137-8cd0-e66103117c84,c501f9ab-d01b-4137-8cd0-e66103117c84,1,0,8d5d4e0f-b7b5-4cdc-aedc-571517fa101f,8d5d4e0f-b7b5-4cdc-aedc-571517fa101f,1,0,66e65355-1424-4c74-801c-faf5357257aa,66e65355-1424-4c74-801c-faf5357257aa,1,0,0a93187b-7ae4-4985-8089-3099dfec2b48,0a93187b-7ae4-4985-8089-3099dfec2b48,1,0,044458f3-ed9b-4afb-ae73-8f9162c032bf,044458f3-ed9b-4afb-ae73-8f9162c032bf,1,0,578f618e-5f4a-4e86-959d-39b59e973936,578f618e-5f4a-4e86-959d-39b59e973936,1,0,f74ede2e-2d28-4224-ba44-773eda7760a4,f74ede2e-2d28-4224-ba44-773eda7760a4,1,0,217df06a-1bdf-4394-b617-ed756ff17bc6,217df06a-1bdf-4394-b617-ed756ff17bc6,1,0,a1572e97-a487-497a-9062-49315e237e0f,a1572e97-a487-497a-9062-49315e237e0f,1,0,969cdcb8-0f2a-427f-93a0-e7ae38f465e8,969cdcb8-0f2a-427f-93a0-e7ae38f465e8,1,0,3c5d87a0-cfce-464a-b946-64c5a589a376,3c5d87a0-cfce-464a-b946-64c5a589a376,1,0,2d22c67d-4795-4a6b-bc81-a3ed1eb28367,2d22c67d-4795-4a6b-bc81-a3ed1eb28367,1,0,763de8d1-7f53-41b6-8d97-7da724e9f763,763de8d1-7f53-41b6-8d97-7da724e9f763,1,0,75592ed4-2aab-4dfc-ae7b-d93e2a98370f,75592ed4-2aab-4dfc-ae7b-d93e2a98370f,1,0,4ad59c75-cca4-4968-82e6-babd72d8b318,4ad59c75-cca4-4968-82e6-babd72d8b318,1,0,c248de15-63a2-48ec-8695-7a5213d4fc9b,c248de15-63a2-48ec-8695-7a5213d4fc9b,1,0,272ff0f9-7266-4c22-be12-fe62682b56a5,272ff0f9-7266-4c22-be12-fe62682b56a5,1,0,9f141dd5-d866-4c25-b58a-a7766a08b4e7,9f141dd5-d866-4c25-b58a-a7766a08b4e7,1,0,0570d846-889d-4cfc-98fb-a1ad0181597f,0570d846-889d-4cfc-98fb-a1ad0181597f,1,0,19e17c58-953f-4917-8b6a-c88808fcca36,19e17c58-953f-4917-8b6a-c88808fcca36,1,0,4804316d-3765-4a83-8438-10e8e82656db,4804316d-3765-4a83-8438-10e8e82656db,1,0,59458556-e343-4215-8e6c-69f924ec4183,59458556-e343-4215-8e6c-69f924ec4183,1,0,dd553dca-7eba-41bf-8939-2c61e170ff65,dd553dca-7eba-41bf-8939-2c61e170ff65,1,0,b4ecf3dc-a2aa-406e-a593-1700ea8746bc,b4ecf3dc-a2aa-406e-a593-1700ea8746bc,1,0,933d7ce7-ea82-4b26-8d1b-dc92cb5ac92d,933d7ce7-ea82-4b26-8d1b-dc92cb5ac92d,1,0,8099e978-28cc-4ade-ac5a-3785f3a45f70,8099e978-28cc-4ade-ac5a-3785f3a45f70,1,0,11eff613-8077-41fa-8cb8-5e8dc27d0e4f,11eff613-8077-41fa-8cb8-5e8dc27d0e4f,1,0,fe023ca5-f11a-4b98-99c1-363508e4ea4a,fe023ca5-f11a-4b98-99c1-363508e4ea4a,1,0,6f8d515e-13d9-45f8-9793-3757f5b85f81,6f8d515e-13d9-45f8-9793-3757f5b85f81,1,0,25ec541c-c437-4318-b2a8-5146df6ae080,25ec541c-c437-4318-b2a8-5146df6ae080,1,0,148754ed-3063-40a7-a3c3-8ad105552370,148754ed-3063-40a7-a3c3-8ad105552370,1,0,ab3f0862-c355-4fd7-a2a7-4eb8278de510,ab3f0862-c355-4fd7-a2a7-4eb8278de510,1,0,85bbfe20-a6a4-49ca-8f20-342f4cbe8258,85bbfe20-a6a4-49ca-8f20-342f4cbe8258,1,0,c12c3f3b-3a96-4e70-b131-8d7bd765095f,c12c3f3b-3a96-4e70-b131-8d7bd765095f,1,0,70ee4b32-80d1-4b79-a322-0433f1b8c7f1,70ee4b32-80d1-4b79-a322-0433f1b8c7f1,1,0,c563588c-346e-499e-ae33-9ff3cb62e658,c563588c-346e-499e-ae33-9ff3cb62e658,1,0,40dbc001-97b6-4188-8de9-3adac670bac4,40dbc001-97b6-4188-8de9-3adac670bac4,1,0,a4ed8b24-bd23-45a7-9f34-61b25b91d0c6,a4ed8b24-bd23-45a7-9f34-61b25b91d0c6,1,0,65efaa10-3239-4f0f-a08e-88c89d9d8d5a,65efaa10-3239-4f0f-a08e-88c89d9d8d5a,1,0,93aa5247-6823-4f70-9d47-e5a0f409828a,93aa5247-6823-4f70-9d47-e5a0f409828a,1,0,030c6a22-a3d5-4cf2-9f7b-dc4fe3732f83,030c6a22-a3d5-4cf2-9f7b-dc4fe3732f83,1,0,b19f1223-5ebe-4446-bacc-bc7d53486f2e,b19f1223-5ebe-4446-bacc-bc7d53486f2e,1,0,6ea7e8e9-0faa-43fd-b9c8-1a7b8f899d6d,6ea7e8e9-0faa-43fd-b9c8-1a7b8f899d6d,1,0,7be1decf-feb1-422b-a3f2-f60d08fdb0e6,7be1decf-feb1-422b-a3f2-f60d08fdb0e6,1,0,bf3167d6-3047-482a-b280-184f446ae7a3,bf3167d6-3047-482a-b280-184f446ae7a3,1,0,50c47c0a-a199-4020-9df4-91b17c159454,50c47c0a-a199-4020-9df4-91b17c159454,1,0,c1d449af-8a6e-4cb0-b2c9-50ea5405c44c,c1d449af-8a6e-4cb0-b2c9-50ea5405c44c,1,0,faecdc33-fed8-4b44-96f4-4215c26959b6,faecdc33-fed8-4b44-96f4-4215c26959b6,1,0,09c29992-47a8-4fca-bd95-e7dbc53e8c4c,09c29992-47a8-4fca-bd95-e7dbc53e8c4c,1,0,f07cf7bd-6f3f-426a-8b71-ba1dcb827654,f07cf7bd-6f3f-426a-8b71-ba1dcb827654,1,0,9df3792e-a4ee-4a2c-9296-c1384925521e,9df3792e-a4ee-4a2c-9296-c1384925521e,1,0,03d423db-f98a-468f-9040-5b76454e5a98,03d423db-f98a-468f-9040-5b76454e5a98,1,0,08f394f9-d254-4fe5-8651-a69c96de7a62,08f394f9-d254-4fe5-8651-a69c96de7a62,1,0,e90ec54b-8b86-43df-8c3c-18c6676bf3f1,e90ec54b-8b86-43df-8c3c-18c6676bf3f1,1,0,6aff6b2f-660b-4d75-9064-fed7a6b0feac,6aff6b2f-660b-4d75-9064-fed7a6b0feac,1,0,53502127-9f47-4e2e-b3ed-eb3c3aae1c50,53502127-9f47-4e2e-b3ed-eb3c3aae1c50,1,0,2fcdd0b5-b738-4e19-8bbf-13a72d7014ec,2fcdd0b5-b738-4e19-8bbf-13a72d7014ec,1,0,59dc7e8d-6f5c-4e1b-816e-5fc15c0e96e0,59dc7e8d-6f5c-4e1b-816e-5fc15c0e96e0,1,0,e60a9221-7676-456f-8a01-b317b03a278b,e60a9221-7676-456f-8a01-b317b03a278b,1,0,4e81ec90-f668-49ca-9193-22337bafb01b,4e81ec90-f668-49ca-9193-22337bafb01b,1,0,104c7c31-5bbd-4242-b29a-2c0d8b69a1b9,104c7c31-5bbd-4242-b29a-2c0d8b69a1b9,1,0,cd60adec-52d6-4fa8-85ca-26551196432c,cd60adec-52d6-4fa8-85ca-26551196432c,1,0,4dfbabd7-d5e5-4b2a-b8d1-752e416629a0,4dfbabd7-d5e5-4b2a-b8d1-752e416629a0,1,0,b71ddbdb-08bb-46be-a79d-319c4a557e76,b71ddbdb-08bb-46be-a79d-319c4a557e76,1,0,d3dfa867-3d52-4872-a69e-f27636abe1bd,d3dfa867-3d52-4872-a69e-f27636abe1bd,1,0,6952d1aa-7132-4e40-8542-f64a4dc1e029,6952d1aa-7132-4e40-8542-f64a4dc1e029,1,0,51a1bc4c-9139-42a4-92c3-f45c837cbdb9,51a1bc4c-9139-42a4-92c3-f45c837cbdb9,1,0,1621811b-dfd3-4c58-8e15-ced16690147a,1621811b-dfd3-4c58-8e15-ced16690147a,1,0,3f266e51-0476-4b7f-8d61-6f9f4456049d,3f266e51-0476-4b7f-8d61-6f9f4456049d,1,0,2b9ce591-ff13-4c2d-85c4-632a2609a211,2b9ce591-ff13-4c2d-85c4-632a2609a211,1,0,689ca0ec-61ce-4590-b73b-ac81e8f1d459,689ca0ec-61ce-4590-b73b-ac81e8f1d459,1,0,3ea1895f-66d0-4bbb-a66b-0c9d411a7c55,3ea1895f-66d0-4bbb-a66b-0c9d411a7c55,1,0,55ad36d7-399e-4b82-8d1c-d45bd890abfe,55ad36d7-399e-4b82-8d1c-d45bd890abfe,1,0,0f3b9012-7bf6-4451-b0c3-139d98d9c2c1,0f3b9012-7bf6-4451-b0c3-139d98d9c2c1,1,0,1b39a65f-5425-4bcb-85bd-1425274af8a8,1b39a65f-5425-4bcb-85bd-1425274af8a8,1,0,392a0618-a41a-4713-a561-f3a80b85abd8,392a0618-a41a-4713-a561-f3a80b85abd8,1,0,a453384d-658d-40f1-ac69-578aa3a24e39,a453384d-658d-40f1-ac69-578aa3a24e39,1,0,2215a441-b9b1-4e5c-8df3-e6cee9226c43,2215a441-b9b1-4e5c-8df3-e6cee9226c43,1,0,2a8d4908-ea0d-4837-be3f-bd78f6b61254,2a8d4908-ea0d-4837-be3f-bd78f6b61254,1,0,ec1deb79-7369-4b26-8e91-f51399e8052a,ec1deb79-7369-4b26-8e91-f51399e8052a,1,0,75dde4fb-3a1a-450c-95c2-c1f95a781db9,75dde4fb-3a1a-450c-95c2-c1f95a781db9,1,0,0ae3ac56-160a-417e-9952-719d02e7f089,0ae3ac56-160a-417e-9952-719d02e7f089,1,0,f5b3983d-d22d-44a8-9069-0a60d8b858bf,f5b3983d-d22d-44a8-9069-0a60d8b858bf,1,0,a64b15fa-fc34-43fe-a366-d27c0f1c3df2,a64b15fa-fc34-43fe-a366-d27c0f1c3df2,1,0,8b13e848-8fd3-4326-bd18-5a5b12ed3dc5,8b13e848-8fd3-4326-bd18-5a5b12ed3dc5,1,0,b9a6b053-2b93-4946-9531-040d3131dcc5,b9a6b053-2b93-4946-9531-040d3131dcc5,1,0,9f36d26e-aa71-44d5-ac27-9aaa643555c3,9f36d26e-aa71-44d5-ac27-9aaa643555c3,1,0,87b8b5d7-d3d6-450a-adb1-5c875257ec80,87b8b5d7-d3d6-450a-adb1-5c875257ec80,1,0,e3640efe-e46c-4588-b251-dda23bf0641d,e3640efe-e46c-4588-b251-dda23bf0641d,1,0,bb6e6574-4328-4cf5-a043-a7d8f6c81414,bb6e6574-4328-4cf5-a043-a7d8f6c81414,1,0,b46b5090-5eb1-4950-9031-8b43f611fa9c,b46b5090-5eb1-4950-9031-8b43f611fa9c,1,0,522a4bff-34d3-46b2-8c66-0b30d881a86e,522a4bff-34d3-46b2-8c66-0b30d881a86e,1,0,3d7908b1-bd82-475e-8488-fafcbe3458ee,3d7908b1-bd82-475e-8488-fafcbe3458ee,1,0,1bac040b-83e4-402f-a9bf-d6a7b10c91e0,1bac040b-83e4-402f-a9bf-d6a7b10c91e0,1,0,e9c632b0-7977-4e44-ac56-882617ad7cdc,e9c632b0-7977-4e44-ac56-882617ad7cdc,1,0,e84acba7-7e0f-43e8-a545-6e53d529d5d4,e84acba7-7e0f-43e8-a545-6e53d529d5d4,1,0,3b089d90-7ece-4b74-a4dc-e436d9d31b3b,3b089d90-7ece-4b74-a4dc-e436d9d31b3b,1,0,0f9c08c2-e7fa-4ea0-a935-f927feb01131,0f9c08c2-e7fa-4ea0-a935-f927feb01131,1,0,6086d53f-f1b2-4126-ab46-64705fe63b87,6086d53f-f1b2-4126-ab46-64705fe63b87,1,0,62a6b1c9-8288-4fa1-a17d-241b85a5e4b0,62a6b1c9-8288-4fa1-a17d-241b85a5e4b0,1,0,57069b56-f732-41c0-9a75-cbdb1e88556c,57069b56-f732-41c0-9a75-cbdb1e88556c,1,0,6d042890-27b2-4efc-935e-8190bb57c037,6d042890-27b2-4efc-935e-8190bb57c037,1,0,23e79add-7f1c-422a-9df1-8f76ebf805df,23e79add-7f1c-422a-9df1-8f76ebf805df,1,0,9295d88f-0865-440c-a98a-4710c50211be,9295d88f-0865-440c-a98a-4710c50211be,1,0,90aa51ae-434d-48f4-bfe3-0e1dd3aeea6f,90aa51ae-434d-48f4-bfe3-0e1dd3aeea6f,1,0,38ac9a13-665a-4201-b5cc-687fe4a01130,38ac9a13-665a-4201-b5cc-687fe4a01130,1,0,97c59096-b2dc-45d0-a580-b3018a04f9af,97c59096-b2dc-45d0-a580-b3018a04f9af,1,0,5dcd8e28-b058-405a-bac4-defab7d4b789,5dcd8e28-b058-405a-bac4-defab7d4b789,1,0,6fbf63b7-1692-495e-a8ec-bdda182997a3,6fbf63b7-1692-495e-a8ec-bdda182997a3,1,0,077af11c-fd3c-4e87-b169-5f3137464f77,077af11c-fd3c-4e87-b169-5f3137464f77,1,0,8172256e-f51e-4de0-bd07-3668785f4cb9,8172256e-f51e-4de0-bd07-3668785f4cb9,1,0,ccb54dc9-3d12-43d0-af6a-138d3526f5d5,ccb54dc9-3d12-43d0-af6a-138d3526f5d5,1,0,da8f7f30-eb80-44db-a451-348306c90cd8,da8f7f30-eb80-44db-a451-348306c90cd8,1,0,b82bcff8-49c9-44a9-8a9f-4428b0cc54a5,b82bcff8-49c9-44a9-8a9f-4428b0cc54a5,1,0,870b4d6d-0b89-4eda-a2b3-5c6db7dbe864,870b4d6d-0b89-4eda-a2b3-5c6db7dbe864,1,0,c172aeaf-b444-47c0-baee-80ccd91fe934,c172aeaf-b444-47c0-baee-80ccd91fe934,1,0,757ea742-8c14-4e0a-a867-432eee5cfc64,757ea742-8c14-4e0a-a867-432eee5cfc64,1,0,b8c36d5a-7966-4978-9225-67502b9c60a4,b8c36d5a-7966-4978-9225-67502b9c60a4,1,0,37ea0c64-2fec-4c2e-922b-d3a2f01f3e22,37ea0c64-2fec-4c2e-922b-d3a2f01f3e22,1,0,9847676d-f44d-46a0-83e2-4a43a835caf8,9847676d-f44d-46a0-83e2-4a43a835caf8,1,0,43c18cae-21a9-413b-a350-d5cf826980f0,43c18cae-21a9-413b-a350-d5cf826980f0,1,0,16773cdb-b979-42d5-a2a5-d4b79e8737bd,16773cdb-b979-42d5-a2a5-d4b79e8737bd,1,0,c28a190a-f487-4e99-b8f8-6928268086f8,c28a190a-f487-4e99-b8f8-6928268086f8,1,0,94e02f76-8656-4999-9470-dd996118400c,94e02f76-8656-4999-9470-dd996118400c,1,0,9effd265-3783-44e2-8698-80dd82137546,9effd265-3783-44e2-8698-80dd82137546,1,0,bef52020-98f8-465b-8981-e5f8eed62308,bef52020-98f8-465b-8981-e5f8eed62308,1,0,19897ad0-bdb5-439c-b4a2-a773c0ce5cf5,19897ad0-bdb5-439c-b4a2-a773c0ce5cf5,1,0,e731dab7-df9e-48ae-8542-4c0c30666ae9,e731dab7-df9e-48ae-8542-4c0c30666ae9,1,0,f321e378-6d50-4567-8434-813f367d3a65,f321e378-6d50-4567-8434-813f367d3a65,1,0,27246fd8-a8a3-4244-b49a-c0372a812167,27246fd8-a8a3-4244-b49a-c0372a812167,1,0,0841ebfc-12e6-4b3e-a60f-861b15e1b63c,0841ebfc-12e6-4b3e-a60f-861b15e1b63c,1,0,bde05768-2dd6-4800-985d-27075f610cca,bde05768-2dd6-4800-985d-27075f610cca,1,0,d18956cf-e449-48cc-a127-01b5dc910ea2,d18956cf-e449-48cc-a127-01b5dc910ea2,1,0,8e5487a3-b5e5-40ca-88f3-5b0ea0c4d481,8e5487a3-b5e5-40ca-88f3-5b0ea0c4d481,1,0,5d338e31-a56b-45f0-8a62-0270ca543f6a,5d338e31-a56b-45f0-8a62-0270ca543f6a,1,0,afd8251f-548b-4bb6-8ad0-4f412bec7cb6,afd8251f-548b-4bb6-8ad0-4f412bec7cb6,1,0,e352fc19-96be-4410-a516-bc58cc234422,e352fc19-96be-4410-a516-bc58cc234422,1,0,9b742da4-1696-4c06-9dfa-dd85c9286c74,9b742da4-1696-4c06-9dfa-dd85c9286c74,1,0,db1062bc-4164-4095-9640-9804c0ebcd0b,db1062bc-4164-4095-9640-9804c0ebcd0b,1,0,c11d967b-1250-4345-90b0-011a96c5ae5e,c11d967b-1250-4345-90b0-011a96c5ae5e,1,0,ea7c61ff-745c-4908-9a94-bba022d12de4,ea7c61ff-745c-4908-9a94-bba022d12de4,1,0,24eed105-f612-4340-ad79-388a7b39b58c,24eed105-f612-4340-ad79-388a7b39b58c,1,0,8e4bd2ac-d555-490e-87ab-1b0cdd6f72e9,8e4bd2ac-d555-490e-87ab-1b0cdd6f72e9,1,0,4d6683a3-1edd-4d04-8e02-0be002e4e5a4,4d6683a3-1edd-4d04-8e02-0be002e4e5a4,1,0,c7ffd8ab-15e9-4cf1-a7fd-d05534dff000,c7ffd8ab-15e9-4cf1-a7fd-d05534dff000,1,0,53caada5-1d53-45dc-9432-90075ddca890,53caada5-1d53-45dc-9432-90075ddca890,1,0,d1472d23-954b-4069-b2d6-df08c6ec0be1,d1472d23-954b-4069-b2d6-df08c6ec0be1,1,0,93fe2ce6-7193-42bc-a966-4653b7989eaa,93fe2ce6-7193-42bc-a966-4653b7989eaa,1,0,6a2add61-edb7-4561-bae9-06b3741e7726,6a2add61-edb7-4561-bae9-06b3741e7726,1,0,a7fe0aa5-722c-4a09-889b-ee422421addc,a7fe0aa5-722c-4a09-889b-ee422421addc,1,0,798bd34c-d0ee-4590-9b1d-8bc47e42ca8c,798bd34c-d0ee-4590-9b1d-8bc47e42ca8c,1,0,80048d97-e917-4d03-bb49-e797e63f7fd2,80048d97-e917-4d03-bb49-e797e63f7fd2,1,0,0c838a31-2b08-447c-b39a-a613cfba526c,0c838a31-2b08-447c-b39a-a613cfba526c,1,0,b25083c5-9b97-49a4-b6c3-bbf8d7f91cd3,b25083c5-9b97-49a4-b6c3-bbf8d7f91cd3,1,0,86c679c0-3531-4622-9a1f-3d9d6ccdd431,86c679c0-3531-4622-9a1f-3d9d6ccdd431,1,0,3bc2ca38-4a10-4ebd-a5dc-3418db494f0c,3bc2ca38-4a10-4ebd-a5dc-3418db494f0c,1,0,670c62c1-1a33-4dec-9540-5b4c1fe29074,670c62c1-1a33-4dec-9540-5b4c1fe29074,1,0,cc664d81-d0af-4d25-ae29-64f422e51bf2,cc664d81-d0af-4d25-ae29-64f422e51bf2,1,0,e1314cd1-e662-4c29-ad51-492cb0029883,e1314cd1-e662-4c29-ad51-492cb0029883,1,0,ae3876e2-bd06-415b-9d9a-b77d787be09e,ae3876e2-bd06-415b-9d9a-b77d787be09e,1,0,0cf49621-afc5-4c8d-a1b5-f8c30db9f415,0cf49621-afc5-4c8d-a1b5-f8c30db9f415,1,0,4718392b-477c-496b-9d28-ddbdaa7a04f2,4718392b-477c-496b-9d28-ddbdaa7a04f2,1,0,879844f0-30b4-47f5-8d2e-5fea29910368,879844f0-30b4-47f5-8d2e-5fea29910368,1,0,303334ba-2785-47fe-a094-84f9dea33be2,303334ba-2785-47fe-a094-84f9dea33be2,1,0,9690842c-7a2c-4b5d-a238-f730afc49a7b,9690842c-7a2c-4b5d-a238-f730afc49a7b,1,0,04424730-6992-4a5b-838b-7a7c16dedbd0,04424730-6992-4a5b-838b-7a7c16dedbd0,1,0,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,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,72d41d01-9c9d-4fbe-8a39-932d82d171ef,72d41d01-9c9d-4fbe-8a39-932d82d171ef,1,0,697d5715-dd04-40be-9b28-539734725158,697d5715-dd04-40be-9b28-539734725158,1,0,d831a8ac-88a4-4191-ab0b-7538dfb3e7d7,d831a8ac-88a4-4191-ab0b-7538dfb3e7d7,1,0,d95fcb37-fc65-466d-93e2-489f41683276,d95fcb37-fc65-466d-93e2-489f41683276,1,0,c6b0d31e-7b68-4c7f-a565-0ac8a7c11143,c6b0d31e-7b68-4c7f-a565-0ac8a7c11143,1,0,a27a9296-46bb-49a1-8308-db675baa81d0,a27a9296-46bb-49a1-8308-db675baa81d0,1,0,1456f317-360c-4190-b2d1-1be7484369a5,1456f317-360c-4190-b2d1-1be7484369a5,1,0,5ac74bb3-a4df-47db-ad87-6cb95b85c51f,5ac74bb3-a4df-47db-ad87-6cb95b85c51f,1,0,4867948f-b027-44ae-b78c-a94e00eed52b,4867948f-b027-44ae-b78c-a94e00eed52b,1,0,aa0c32ae-da52-4df9-8b77-99ea31f8df81,aa0c32ae-da52-4df9-8b77-99ea31f8df81,1,0,d7dcd391-3a0e-4aa9-9b53-467a1de67593,d7dcd391-3a0e-4aa9-9b53-467a1de67593,1,0,3d4cb11a-7ce7-4c46-a427-99d6f41f08bf,3d4cb11a-7ce7-4c46-a427-99d6f41f08bf,1,0,ef044879-e731-418a-b917-6a685f27c5f4,ef044879-e731-418a-b917-6a685f27c5f4,1,0,618d13d5-fd1f-4b70-ad45-dd6a17a50730,618d13d5-fd1f-4b70-ad45-dd6a17a50730,1,0,58037b76-b548-4f07-bd67-67e552a5c6e5,58037b76-b548-4f07-bd67-67e552a5c6e5,1,0,68f19104-5fa3-4f28-a84b-bf68c3bed49b,68f19104-5fa3-4f28-a84b-bf68c3bed49b,1,0,f88ccd7a-8d15-4b24-addf-da522a0b4a43,f88ccd7a-8d15-4b24-addf-da522a0b4a43,1,0,0f8e87d4-ffb7-4cff-a2d3-6d5c5219ff0b,0f8e87d4-ffb7-4cff-a2d3-6d5c5219ff0b,1,0,1511c2e3-aeb4-422a-b6ae-03412b714c93,1511c2e3-aeb4-422a-b6ae-03412b714c93,1,0,00e48a23-eb5b-4a29-b36c-218ab9760f23,00e48a23-eb5b-4a29-b36c-218ab9760f23,1,0,331db120-ba88-4eb3-a8ec-10691be82e2d,331db120-ba88-4eb3-a8ec-10691be82e2d,1,0,349378d1-abe3-44de-84a4-d525b08e0474,349378d1-abe3-44de-84a4-d525b08e0474,1,0,1526b18d-7fab-414e-a5b2-377b67ac0b55,1526b18d-7fab-414e-a5b2-377b67ac0b55,1,0,c561fe6b-53ea-435b-a230-1850e2dc1ff5,c561fe6b-53ea-435b-a230-1850e2dc1ff5,1,0,aba7605f-6baf-42a8-b5ad-8f71c780b81f,aba7605f-6baf-42a8-b5ad-8f71c780b81f,1,0,8fc19eca-1a15-4758-af4b-79637e51edfb,8fc19eca-1a15-4758-af4b-79637e51edfb,1,0,be9144ce-5560-47bb-8c5e-9beefd15bfc3,be9144ce-5560-47bb-8c5e-9beefd15bfc3,1,0,ad09d1e6-5982-4e1c-864e-452ac5b2915a,ad09d1e6-5982-4e1c-864e-452ac5b2915a,1,0,c0bc4cc4-b5ca-47c2-b589-c0d25bb63f1e,c0bc4cc4-b5ca-47c2-b589-c0d25bb63f1e,1,0,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,2233ce53-b8a8-4c83-97a2-683c8575462a,2233ce53-b8a8-4c83-97a2-683c8575462a,1,0,d6a5083f-ca9a-42ed-b202-2983e4ba21c2,d6a5083f-ca9a-42ed-b202-2983e4ba21c2,1,0,bd69bf55-dee0-4553-8f90-5fd025c0f773,bd69bf55-dee0-4553-8f90-5fd025c0f773,1,0,2071f210-dc13-43c0-a58e-b982821d6842,2071f210-dc13-43c0-a58e-b982821d6842,1,0,3cda70d0-3116-4508-82ea-5ea0f0921262,3cda70d0-3116-4508-82ea-5ea0f0921262,1,0,d5588c0d-3e94-485b-a7e9-45f5cf74df9e,d5588c0d-3e94-485b-a7e9-45f5cf74df9e,1,0,f415296e-fceb-4835-abe9-17bb17a5d5e5,f415296e-fceb-4835-abe9-17bb17a5d5e5,1,0,0e805e1f-3797-4ef9-94d3-0ec58ac1b605,0e805e1f-3797-4ef9-94d3-0ec58ac1b605,1,0,8677bd53-5569-4d44-b7ce-d1b3fe12c78d,8677bd53-5569-4d44-b7ce-d1b3fe12c78d,1,0,19056365-9ff1-4733-876e-a7ebdbbe0557,19056365-9ff1-4733-876e-a7ebdbbe0557,1,0,c8679d82-075c-4556-8231-c004d144fe61,c8679d82-075c-4556-8231-c004d144fe61,1,0,5e09dc5e-bbb7-4c38-b609-940c24f63c84,5e09dc5e-bbb7-4c38-b609-940c24f63c84,1,0,017b28eb-8ba9-465e-a748-20eadbeb4ea2,017b28eb-8ba9-465e-a748-20eadbeb4ea2,1,0,c0bb2d66-94c9-4bc6-afd5-534075e8395b,c0bb2d66-94c9-4bc6-afd5-534075e8395b,1,0,db7cc693-1645-4416-a9d9-5a7584cd3bbc,db7cc693-1645-4416-a9d9-5a7584cd3bbc,1,0,c849fb09-7833-49c8-9461-98426dc6c0af,c849fb09-7833-49c8-9461-98426dc6c0af,1,0,6c58fc3a-37f8-44b7-b076-2c10ce09b554,6c58fc3a-37f8-44b7-b076-2c10ce09b554,1,0,245c07a9-98b0-452b-b899-dc8751ab7ce0,245c07a9-98b0-452b-b899-dc8751ab7ce0,1,0,b0ca1b85-e1de-4b7c-8261-7f9e8a6a72eb,b0ca1b85-e1de-4b7c-8261-7f9e8a6a72eb,1,0,ae67dfe5-bb36-4400-81f5-8dab1fd0ca6e,ae67dfe5-bb36-4400-81f5-8dab1fd0ca6e,1,0,91d7687b-7627-473f-a08d-433f9d385107,91d7687b-7627-473f-a08d-433f9d385107,1,0,83db1b00-e9e3-41da-8a59-47589dcfd618,83db1b00-e9e3-41da-8a59-47589dcfd618,1,0,91d2d798-1498-4c52-aa7b-99db4b992876,91d2d798-1498-4c52-aa7b-99db4b992876,1,0,e85a03d3-e7c7-4058-992a-515a557d9e52,e85a03d3-e7c7-4058-992a-515a557d9e52,1,0,d3a1d247-8f4a-45af-9861-7e313a100209,d3a1d247-8f4a-45af-9861-7e313a100209,1,0,83385f31-2cdf-44a1-85c3-461e4ad5fd45,83385f31-2cdf-44a1-85c3-461e4ad5fd45,1,0,b55b06db-604e-4fb9-9253-638c747bd8f9,b55b06db-604e-4fb9-9253-638c747bd8f9,1,0,9cd9a3e1-b52c-4151-abd3-2744ed03cc1b,9cd9a3e1-b52c-4151-abd3-2744ed03cc1b,1,0,9aa0c1ef-45b4-405b-ad6f-ebcf876e6318,9aa0c1ef-45b4-405b-ad6f-ebcf876e6318,1,0,deb69010-80b0-4e28-acc7-8c50e8e6f873,deb69010-80b0-4e28-acc7-8c50e8e6f873,1,0,1a9177fe-6699-42b3-9588-eed9c6008c2d,1a9177fe-6699-42b3-9588-eed9c6008c2d,1,0,4f49412a-fbbe-4ee1-9c2b-affe5266bba7,4f49412a-fbbe-4ee1-9c2b-affe5266bba7,1,0,ae698468-f42a-4400-aee6-fd849740e634,ae698468-f42a-4400-aee6-fd849740e634,1,0,0b88b50d-6aa1-4364-82bd-1c0c0da93a58,0b88b50d-6aa1-4364-82bd-1c0c0da93a58,1,0,ddec19a2-2a76-4eeb-9cbb-6bc2b4a32bc8,ddec19a2-2a76-4eeb-9cbb-6bc2b4a32bc8,1,0,6438435e-97cc-4bd2-98dc-e21cee55bb0f,6438435e-97cc-4bd2-98dc-e21cee55bb0f,1,0,00579e31-e97d-4d79-ba25-b8d500a17e7f,00579e31-e97d-4d79-ba25-b8d500a17e7f,1,0,5001bea4-c8f9-4950-9eda-d33125e3bb46,5001bea4-c8f9-4950-9eda-d33125e3bb46,1,0,4ac6d0dd-0007-46b8-bfcc-93c0f85b6b85,4ac6d0dd-0007-46b8-bfcc-93c0f85b6b85,1,0,e815010d-e03d-46e4-b482-c1556902cc26,e815010d-e03d-46e4-b482-c1556902cc26,1,0,d4ab930a-ddaa-4552-afed-2618af822365,d4ab930a-ddaa-4552-afed-2618af822365,1,0,dd03e170-4186-495b-ae1c-fc66385d7ccf,dd03e170-4186-495b-ae1c-fc66385d7ccf,1,0,81fbb02e-76b2-4bca-bb3b-871e4e969a3c,81fbb02e-76b2-4bca-bb3b-871e4e969a3c,1,0,cdef5df6-f3a1-4950-b197-4f375914f885,cdef5df6-f3a1-4950-b197-4f375914f885,1,0,c1caff49-dc4b-4b3e-be47-122ea8b70416,c1caff49-dc4b-4b3e-be47-122ea8b70416,1,0,a1185a4c-7351-48b0-b662-61f61a1ad715,a1185a4c-7351-48b0-b662-61f61a1ad715,1,0,4ee0c7a4-cc26-438d-8908-f6a900c99d8b,4ee0c7a4-cc26-438d-8908-f6a900c99d8b,1,0,71d03545-df45-4c70-aa0d-3b916f2a9041,71d03545-df45-4c70-aa0d-3b916f2a9041,1,0,da9b0d3d-27dd-4a85-b0df-ec2f54d884f6,da9b0d3d-27dd-4a85-b0df-ec2f54d884f6,1,0,28a25822-2306-409a-a7c8-6f7e42bf25e8,28a25822-2306-409a-a7c8-6f7e42bf25e8,1,0,a45fa0c3-c363-4465-861f-13cedfeb79dd,a45fa0c3-c363-4465-861f-13cedfeb79dd,1,0,a72517c3-8c91-4e40-81ac-83c762789e87,a72517c3-8c91-4e40-81ac-83c762789e87,1,0,0233b335-7e26-4661-9850-8ab09d3178e3,0233b335-7e26-4661-9850-8ab09d3178e3,1,0,d942d536-5d01-4571-b910-abd973996a38,d942d536-5d01-4571-b910-abd973996a38,1,0,b82a7103-b872-49c3-b632-81d5a0051136,b82a7103-b872-49c3-b632-81d5a0051136,1,0,4b17ac35-78cb-4d01-bb08-659c0a93e8ce,4b17ac35-78cb-4d01-bb08-659c0a93e8ce,1,0,20c2053c-8ebd-4c07-8d95-956b424d047c,20c2053c-8ebd-4c07-8d95-956b424d047c,1,0,7c9dee81-7e85-4d26-84c3-66b0d770ac5a,7c9dee81-7e85-4d26-84c3-66b0d770ac5a,1,0,08fe5e70-ac6b-427a-b6f2-0e2f7848fa6b,08fe5e70-ac6b-427a-b6f2-0e2f7848fa6b,1,0,bef6081e-f377-41d6-83a1-b0e218a3fb46,bef6081e-f377-41d6-83a1-b0e218a3fb46,1,0,9b67bfd5-ef23-4205-b7ba-9466517e9999,9b67bfd5-ef23-4205-b7ba-9466517e9999,1,0,ea2c4c8e-23cc-4884-812e-1e959da48afc,ea2c4c8e-23cc-4884-812e-1e959da48afc,1,0,9474b4f1-b1bb-4fcf-acdb-a149a09b8490,9474b4f1-b1bb-4fcf-acdb-a149a09b8490,1,0,63fd620c-59a5-493c-a39e-457fad6fe35f,63fd620c-59a5-493c-a39e-457fad6fe35f,1,0,46b0a5b3-1fa7-44ff-a941-c6de47d36e77,46b0a5b3-1fa7-44ff-a941-c6de47d36e77,1,0,52e0ede7-de57-4640-b432-96e56131f277,52e0ede7-de57-4640-b432-96e56131f277,1,0,89888993-3b05-475e-ac76-3cd7ced93250,89888993-3b05-475e-ac76-3cd7ced93250,1,0,129f704b-cc63-4a4e-b6a7-9e53de4537a2,129f704b-cc63-4a4e-b6a7-9e53de4537a2,1,0,ea97b67e-1182-49c3-b95a-8fcce4cd3d09,ea97b67e-1182-49c3-b95a-8fcce4cd3d09,1,0,592f55e1-b004-44ef-878a-6c2016ccbeb0,592f55e1-b004-44ef-878a-6c2016ccbeb0,1,0,19add2bd-eede-4a05-901b-cf8ce49a638f,19add2bd-eede-4a05-901b-cf8ce49a638f,1,0,becf53b6-3fbc-4c70-822f-4a70b0434353,becf53b6-3fbc-4c70-822f-4a70b0434353,1,0,7dc0429d-146a-4c4f-b122-5d5c053bd4ed,7dc0429d-146a-4c4f-b122-5d5c053bd4ed,1,0,f8dc2485-685b-4e41-834a-a2cbbbe4d53b,f8dc2485-685b-4e41-834a-a2cbbbe4d53b,1,0,c38d8135-e11f-4860-b370-84ff279b7fbd,c38d8135-e11f-4860-b370-84ff279b7fbd,1,0,ee0798f5-47a8-4118-a25c-cfd3473007c1,ee0798f5-47a8-4118-a25c-cfd3473007c1,1,0,652ee894-047b-4a5a-a500-2d61b4c4a473,652ee894-047b-4a5a-a500-2d61b4c4a473,1,0,8a95d199-9bd1-4cbb-9d1a-941e80fa2105,8a95d199-9bd1-4cbb-9d1a-941e80fa2105,1,0,33f8cd94-71e7-4703-92c3-22690fbd871a,33f8cd94-71e7-4703-92c3-22690fbd871a,1,0,b6e5de4d-0156-4342-b646-6e6920a4bd3a,b6e5de4d-0156-4342-b646-6e6920a4bd3a,1,0,c03f9972-5a1f-449b-b170-5a958c2b5846,c03f9972-5a1f-449b-b170-5a958c2b5846,1,0,25896075-2484-4879-8310-7f5680d80b48,25896075-2484-4879-8310-7f5680d80b48,1,0,09858042-6284-4499-8055-c1b5b783ce5f,09858042-6284-4499-8055-c1b5b783ce5f,1,0,1e3c444d-6f73-4eb0-a12d-7106daf36b14,1e3c444d-6f73-4eb0-a12d-7106daf36b14,1,0,1e63c656-a0e7-4b33-8bac-2a196e028ffa,1e63c656-a0e7-4b33-8bac-2a196e028ffa,1,0,e417e2ab-5e25-40a9-8dc2-9552a4fe1a38,e417e2ab-5e25-40a9-8dc2-9552a4fe1a38,1,0,085cbea9-1df1-4ee9-afb7-da2bf313697e,085cbea9-1df1-4ee9-afb7-da2bf313697e,1,0,38fc1e6e-7cd3-437b-b429-6655be34cd01,38fc1e6e-7cd3-437b-b429-6655be34cd01,1,0,b3152292-5546-4896-ad24-cb41057698d8,b3152292-5546-4896-ad24-cb41057698d8,1,0,5f3d5a05-a581-462d-96a2-2750ba0e0481,5f3d5a05-a581-462d-96a2-2750ba0e0481,1,0,477ab478-b336-4bac-898f-e20e3a4039b5,477ab478-b336-4bac-898f-e20e3a4039b5,1,0,a4d767a1-d2e6-4e0a-ab35-9207eef54998,a4d767a1-d2e6-4e0a-ab35-9207eef54998,1,0,e50cb13a-151b-45d2-a7b7-d23440ddfa24,e50cb13a-151b-45d2-a7b7-d23440ddfa24,1,0,cc3a7f15-4db6-445e-b282-f44d0460b7d3,cc3a7f15-4db6-445e-b282-f44d0460b7d3,1,0,0b8bfb71-d430-4bdf-8391-a534b3a15fc3,0b8bfb71-d430-4bdf-8391-a534b3a15fc3,1,0,0d8770aa-fa6e-471c-92c8-b96576927ef0,0d8770aa-fa6e-471c-92c8-b96576927ef0,1,0,4f86b052-b81e-49b8-9fa8-82b2ecbc8e01,4f86b052-b81e-49b8-9fa8-82b2ecbc8e01,1,0,e25b2b10-bf08-42db-9642-861efc5e583b,e25b2b10-bf08-42db-9642-861efc5e583b,1,0,b8a32c33-4e15-4c21-baab-64a86d44321b,b8a32c33-4e15-4c21-baab-64a86d44321b,1,0,d7dd9a03-6818-4987-8f39-58e1c906569f,d7dd9a03-6818-4987-8f39-58e1c906569f,1,0,e4216976-2747-4078-81d4-8ffab668c1f7,e4216976-2747-4078-81d4-8ffab668c1f7,1,0,fce028b8-b530-49f0-b6ad-a28d03e19b0f,fce028b8-b530-49f0-b6ad-a28d03e19b0f,1,0,301eea20-0e7f-441e-a531-28b4627dfd93,301eea20-0e7f-441e-a531-28b4627dfd93,1,0,3b9c03bc-8517-498f-8052-e53854fb0753,3b9c03bc-8517-498f-8052-e53854fb0753,1,0,47da49ee-b243-4e78-9c8f-bb26c60e6136,47da49ee-b243-4e78-9c8f-bb26c60e6136,1,0,39bee714-cacd-4d48-97a5-c838660e049a,39bee714-cacd-4d48-97a5-c838660e049a,1,0,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,68e82adf-bc03-4f23-9ec4-749ed42241da,68e82adf-bc03-4f23-9ec4-749ed42241da,1,0,7ae5d177-a3e6-4989-b10c-8e0a605c26d9,7ae5d177-a3e6-4989-b10c-8e0a605c26d9,1,0,41f87891-ddd5-4e0f-a4f2-8039fb71981b,41f87891-ddd5-4e0f-a4f2-8039fb71981b,1,0,29f2094a-d0d1-425c-8161-45a9ba186e19,29f2094a-d0d1-425c-8161-45a9ba186e19,1,0,a57f6dc1-59d7-4311-8acd-65ce57a9f386,a57f6dc1-59d7-4311-8acd-65ce57a9f386,1,0,893b2dd9-a939-4799-9b78-50d788a5f3ba,893b2dd9-a939-4799-9b78-50d788a5f3ba,1,0,68229ecd-7ecc-4194-a3e5-f8df39b55d6a,68229ecd-7ecc-4194-a3e5-f8df39b55d6a,1,0,e4842271-4fc0-4e15-afef-876f05af78c0,e4842271-4fc0-4e15-afef-876f05af78c0,1,0,31ee6430-b65d-42fa-859b-c4f1c40686ae,31ee6430-b65d-42fa-859b-c4f1c40686ae,1,0,c59e11f3-6bcb-404a-9d76-1416c12be354,c59e11f3-6bcb-404a-9d76-1416c12be354,1,0,c1a1f12b-3978-4047-956e-a5c7de8371a0,c1a1f12b-3978-4047-956e-a5c7de8371a0,1,0,ac39b903-0c60-417e-a50f-49ed375424f5,ac39b903-0c60-417e-a50f-49ed375424f5,1,0,135d57fe-d420-4bb0-9120-e43fd9b55c16,135d57fe-d420-4bb0-9120-e43fd9b55c16,1,0,9893e2d6-f3f8-4d73-bb06-19bf26d216ab,9893e2d6-f3f8-4d73-bb06-19bf26d216ab,1,0,16392cf6-dd83-4df0-a54b-6efc29778a89,16392cf6-dd83-4df0-a54b-6efc29778a89,1,0,e693cdd0-8ead-4ba5-adec-86bab74ee7cd,e693cdd0-8ead-4ba5-adec-86bab74ee7cd,1,0,a4ec7d3d-2d01-436c-98ec-ec42733ee5c6,a4ec7d3d-2d01-436c-98ec-ec42733ee5c6,1,0,10db9f99-c7d1-4b16-9ea2-9bfc2aa4ddb5,10db9f99-c7d1-4b16-9ea2-9bfc2aa4ddb5,1,0,230722e6-942f-4594-be89-eff59c6572bf,230722e6-942f-4594-be89-eff59c6572bf,1,0,eaf6045f-9ac0-43ef-b165-a45be75a4d44,eaf6045f-9ac0-43ef-b165-a45be75a4d44,1,0,237dab99-ed72-432c-ad01-c6045d74f000,237dab99-ed72-432c-ad01-c6045d74f000,1,0,a1130128-cc48-4555-93a2-99e7f74f77dc,a1130128-cc48-4555-93a2-99e7f74f77dc,1,0,9b4b7424-1af7-4d80-8404-8819fcfeae75,9b4b7424-1af7-4d80-8404-8819fcfeae75,1,0,94e08dcf-3885-4a73-82ab-cb291f1cf95f,94e08dcf-3885-4a73-82ab-cb291f1cf95f,1,0,405c52c4-25fe-45ff-abab-bf01041e768d,405c52c4-25fe-45ff-abab-bf01041e768d,1,0,55ce840b-5838-4107-886d-f935b9907bd8,55ce840b-5838-4107-886d-f935b9907bd8,1,0,0b3088c9-7fb9-4979-acce-16d7ae7ba6b7,0b3088c9-7fb9-4979-acce-16d7ae7ba6b7,1,0,f1753bda-16db-4b00-a16a-37ddade8403f,f1753bda-16db-4b00-a16a-37ddade8403f,1,0,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,133f181a-fade-4182-826d-904fac780326,133f181a-fade-4182-826d-904fac780326,1,0,f60cb71a-f451-426a-aa3a-aa266b8da149,f60cb71a-f451-426a-aa3a-aa266b8da149,1,0,641ebe22-7135-4adb-bbd6-e0c37d246a2d,641ebe22-7135-4adb-bbd6-e0c37d246a2d,1,0,f71ba01e-9f6b-4241-8048-4368c8888756,f71ba01e-9f6b-4241-8048-4368c8888756,1,0,23abf9ba-63f9-4173-a9ce-3cbdf1ec3a52,23abf9ba-63f9-4173-a9ce-3cbdf1ec3a52,1,0,973609a2-5b5d-45c4-9606-a13d0de1a09b,973609a2-5b5d-45c4-9606-a13d0de1a09b,1,0,6aa814fa-417e-428c-951e-6efd9d0775da,6aa814fa-417e-428c-951e-6efd9d0775da,1,0,a247efe1-8608-4780-9cc8-54e29944475b,a247efe1-8608-4780-9cc8-54e29944475b,1,0,4b8c3c82-6e8f-469e-8a80-144361d1d0b2,4b8c3c82-6e8f-469e-8a80-144361d1d0b2,1,0,a8f162e9-3f59-41a5-b82f-da20928213c7,a8f162e9-3f59-41a5-b82f-da20928213c7,1,0,ade68dfd-5037-4fd7-b043-9514e3fe6342,ade68dfd-5037-4fd7-b043-9514e3fe6342,1,0,7b008aad-9d05-43e1-8295-62ae58cfff42,7b008aad-9d05-43e1-8295-62ae58cfff42,1,0,fdaf9255-d621-4a98-9530-f618ed440795,fdaf9255-d621-4a98-9530-f618ed440795,1,0,48cefa96-46c7-4870-a096-951dcbae479a,48cefa96-46c7-4870-a096-951dcbae479a,1,0,d74e01cc-941b-4974-8771-0bd2e0d86724,d74e01cc-941b-4974-8771-0bd2e0d86724,1,0,0daac965-2026-4acc-8ba1-3c1f01779257,0daac965-2026-4acc-8ba1-3c1f01779257,1,0,65a331c0-7501-49f6-8027-35b703d11834,65a331c0-7501-49f6-8027-35b703d11834,1,0,c67fab0a-704f-43ae-bd03-4b5b1a880b24,c67fab0a-704f-43ae-bd03-4b5b1a880b24,1,0,c1703a14-61a0-4461-8ad8-7173e2c431fe,c1703a14-61a0-4461-8ad8-7173e2c431fe,1,0,aecf5653-3005-43f2-ab49-40977e70f02b,aecf5653-3005-43f2-ab49-40977e70f02b,1,0,4093fe34-7557-4f15-831b-d654b94b8010,4093fe34-7557-4f15-831b-d654b94b8010,1,0,ee10023f-5c63-4cb3-8e6c-db566c788c9d,ee10023f-5c63-4cb3-8e6c-db566c788c9d,1,0,aae09896-3b22-4d7d-9059-e47660f8b88b,aae09896-3b22-4d7d-9059-e47660f8b88b,1,0,845530cd-36fb-44c3-b30a-730985c9ca2d,845530cd-36fb-44c3-b30a-730985c9ca2d,1,0,475f8577-a141-496b-94e1-53215c0dd017,475f8577-a141-496b-94e1-53215c0dd017,1,0,97638762-c01e-4c8f-88e2-b356e517e18f,97638762-c01e-4c8f-88e2-b356e517e18f,1,0,074e34f2-e9be-4bd3-beca-8b916772e2be,074e34f2-e9be-4bd3-beca-8b916772e2be,1,0,28fecf1b-7cab-4087-b66e-2052edb8ce3a,28fecf1b-7cab-4087-b66e-2052edb8ce3a,1,0,d85b00b7-b0d8-4b91-8d7f-0c2da524d446,d85b00b7-b0d8-4b91-8d7f-0c2da524d446,1,0,cc906f05-5ea6-43cb-a084-c4ee51ca4bd5,cc906f05-5ea6-43cb-a084-c4ee51ca4bd5,1,0,ce5549bd-ba99-4259-86a3-36521bad59f5,ce5549bd-ba99-4259-86a3-36521bad59f5,1,0,f5417147-4d2a-4e49-911b-2bb5eccb8441,f5417147-4d2a-4e49-911b-2bb5eccb8441,1,0,20fbed2b-4393-4de0-a71d-017a336bdac0,20fbed2b-4393-4de0-a71d-017a336bdac0,1,0,2ca4fc58-798b-4fc3-8673-27688ce7a1f2,2ca4fc58-798b-4fc3-8673-27688ce7a1f2,1,0,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,44b28019-01c0-468d-9b60-e050ff8b71ac,44b28019-01c0-468d-9b60-e050ff8b71ac,1,0,69f6173c-a570-41ff-b07f-5b85f7187515,69f6173c-a570-41ff-b07f-5b85f7187515,1,0,9c443dd3-4acb-4c5a-9c4b-af8b0c87e861,9c443dd3-4acb-4c5a-9c4b-af8b0c87e861,1,0,98153b59-8cc6-4dc7-b945-99c1146d07da,98153b59-8cc6-4dc7-b945-99c1146d07da,1,0,3e2828b4-2b55-471e-ac69-55119c2480f8,3e2828b4-2b55-471e-ac69-55119c2480f8,1,0,657b8663-713c-4a80-81e1-8c0166742a35,657b8663-713c-4a80-81e1-8c0166742a35,1,0,d416cc2a-425f-4c01-a550-5a755ed78cc8,d416cc2a-425f-4c01-a550-5a755ed78cc8,1,0,df9db8d5-c5c2-4a9d-88fe-77247b2c417e,df9db8d5-c5c2-4a9d-88fe-77247b2c417e,1,0,08baf3ee-b8ca-4f29-89fc-c15344064ad3,08baf3ee-b8ca-4f29-89fc-c15344064ad3,1,0,01b85e3a-9920-425a-9de5-5079fffeef93,01b85e3a-9920-425a-9de5-5079fffeef93,1,0,82e12316-cc64-4d2f-83fa-054b5a738f02,82e12316-cc64-4d2f-83fa-054b5a738f02,1,0,6b70f7e1-8bdb-4fc4-9b95-0e045bfa288c,6b70f7e1-8bdb-4fc4-9b95-0e045bfa288c,1,0,a890be6b-f050-4ea4-a388-570948ffd22b,a890be6b-f050-4ea4-a388-570948ffd22b,1,0,b00c31d6-4fc6-4189-9f72-f91742ec705f,b00c31d6-4fc6-4189-9f72-f91742ec705f,1,0,1333101b-82e8-41a9-a793-5af5dcd6f68a,1333101b-82e8-41a9-a793-5af5dcd6f68a,1,0,766c9bee-b0fc-4a7f-b88e-cd8c4aad73b8,766c9bee-b0fc-4a7f-b88e-cd8c4aad73b8,1,0,0f25646a-90f9-4747-a778-7efdaabc284c,0f25646a-90f9-4747-a778-7efdaabc284c,1,0,9b9cd161-5bee-4433-a0ec-b67deb099b5e,9b9cd161-5bee-4433-a0ec-b67deb099b5e,1,0,ca179cb5-65e1-4a55-bf12-096b926accb0,ca179cb5-65e1-4a55-bf12-096b926accb0,1,0,d508b3e9-4dac-40a3-9a0b-1cc76b4196ea,d508b3e9-4dac-40a3-9a0b-1cc76b4196ea,1,0,63470706-f14b-4733-87c2-d1173f5d7e7a,63470706-f14b-4733-87c2-d1173f5d7e7a,1,0,472ce1c2-9e83-418b-b1ec-e15e126bc919,472ce1c2-9e83-418b-b1ec-e15e126bc919,1,0,9fe30414-8261-4403-a854-f22b61824f69,9fe30414-8261-4403-a854-f22b61824f69,1,0,07bb26ac-bd97-465f-a192-db7fedbb579b,07bb26ac-bd97-465f-a192-db7fedbb579b,1,0,76cdcc51-0e6a-4f9c-a115-1864998c2add,76cdcc51-0e6a-4f9c-a115-1864998c2add,1,0,71c3e5d3-7504-433f-9d48-7c287b2b863b,71c3e5d3-7504-433f-9d48-7c287b2b863b,1,0,0894db61-51f6-4068-9634-e55d95e2a8ac,0894db61-51f6-4068-9634-e55d95e2a8ac,1,0,0d8c215d-1210-47a2-897d-a3257b9f849a,0d8c215d-1210-47a2-897d-a3257b9f849a,1,0,c971e0ba-53b8-4454-92f7-40b0d639058a,c971e0ba-53b8-4454-92f7-40b0d639058a,1,0,0f0456a8-ca04-4de4-9d9b-e8b0fdb8b860,0f0456a8-ca04-4de4-9d9b-e8b0fdb8b860,1,0,ed297409-6215-4fd4-b47d-a2247e0343da,ed297409-6215-4fd4-b47d-a2247e0343da,1,0,5ae2a1de-6380-45cc-9c8f-5612cd5ba627,5ae2a1de-6380-45cc-9c8f-5612cd5ba627,1,0,e8aa2ba2-7dfa-47e3-bc18-6156f700ceed,e8aa2ba2-7dfa-47e3-bc18-6156f700ceed,1,0,8c472f51-47ec-43c4-9858-fd19ac3e17f3,8c472f51-47ec-43c4-9858-fd19ac3e17f3,1,0,c54f31ce-114b-46d3-b4c6-12c8f07727ca,c54f31ce-114b-46d3-b4c6-12c8f07727ca,1,0,5a9c82c1-d0cd-48ff-b91c-38b950591e4c,5a9c82c1-d0cd-48ff-b91c-38b950591e4c,1,0,59855d19-29cd-4efd-a453-b19e574113ef,59855d19-29cd-4efd-a453-b19e574113ef,1,0,249b6436-bd44-4950-b118-7f40f7aaf794,249b6436-bd44-4950-b118-7f40f7aaf794,1,0,c1508d67-ac6d-41e3-884d-b3bdd54659f8,c1508d67-ac6d-41e3-884d-b3bdd54659f8,1,0,3436b16e-ef5b-4abb-9aad-c70a7c8560ed,3436b16e-ef5b-4abb-9aad-c70a7c8560ed,1,0,9dd57f32-90a1-4a1d-bc2a-c1b12461d963,9dd57f32-90a1-4a1d-bc2a-c1b12461d963,1,0,ce6d1259-af90-482b-b19a-405512321bd9,ce6d1259-af90-482b-b19a-405512321bd9,1,0,eb276904-cad7-4401-bb78-2d13946291f1,eb276904-cad7-4401-bb78-2d13946291f1,1,0,79ff04ac-4625-469b-916e-938f04de4dd2,79ff04ac-4625-469b-916e-938f04de4dd2,1,0,35103a27-230c-45c0-a8c9-24bd46608bbb,35103a27-230c-45c0-a8c9-24bd46608bbb,1,0,c5e9f987-4466-4161-8e36-278b0b3ce056,c5e9f987-4466-4161-8e36-278b0b3ce056,1,0,b6566d54-e821-4a2a-a447-0f533f35de91,b6566d54-e821-4a2a-a447-0f533f35de91,1,0,46568b9a-a765-4037-8a86-b184a570ab37,46568b9a-a765-4037-8a86-b184a570ab37,1,0,4fcc7278-2fec-49ee-b0ef-c7d5f5f698a4,4fcc7278-2fec-49ee-b0ef-c7d5f5f698a4,1,0,547a6dec-6fe8-439d-a8d9-ac2612af20d2,547a6dec-6fe8-439d-a8d9-ac2612af20d2,1,0,2bc2c4b7-dacb-4cb3-b5b2-712b19bebcd7,2bc2c4b7-dacb-4cb3-b5b2-712b19bebcd7,1,0,84395058-d46a-428c-b782-a9fa89fea14a,84395058-d46a-428c-b782-a9fa89fea14a,1,0,64f667e5-6a8f-448f-aed5-a4d461232845,64f667e5-6a8f-448f-aed5-a4d461232845,1,0,a148cdff-0e67-48e6-9cc5-e8a6f5aa1ae8,a148cdff-0e67-48e6-9cc5-e8a6f5aa1ae8,1,0,037842ca-aeaf-4e27-9a0e-e929438b6f40,037842ca-aeaf-4e27-9a0e-e929438b6f40,1,0,b43abcf7-1f1d-4a59-b0d1-0a493c3a4785,b43abcf7-1f1d-4a59-b0d1-0a493c3a4785,1,0,ab6fdd75-2ea6-4408-8c03-0cfab775a7a0,ab6fdd75-2ea6-4408-8c03-0cfab775a7a0,1,0,9da32b56-ff89-4739-bb99-615074b72298,9da32b56-ff89-4739-bb99-615074b72298,1,0,2c8ab5a6-66d5-4b6f-94ae-4292724ded7f,2c8ab5a6-66d5-4b6f-94ae-4292724ded7f,1,0,4766c40e-6330-4c1d-a64f-0c8c672886a4,4766c40e-6330-4c1d-a64f-0c8c672886a4,1,0,de25a90c-4b46-4340-b649-93e16dde33de,de25a90c-4b46-4340-b649-93e16dde33de,1,0,4f2d0398-49f4-410c-a451-436cbf96a262,4f2d0398-49f4-410c-a451-436cbf96a262,1,0,b2c8bd74-21c9-4495-93e2-ca5355698350,b2c8bd74-21c9-4495-93e2-ca5355698350,1,0,39bc2bc6-2a4f-4e26-b1b9-fb8473234f09,39bc2bc6-2a4f-4e26-b1b9-fb8473234f09,1,0,cc9679a5-1ed2-4290-8c9b-8a2f6614d053,cc9679a5-1ed2-4290-8c9b-8a2f6614d053,1,0,93016393-c637-4d81-8675-aa5e51e678e0,93016393-c637-4d81-8675-aa5e51e678e0,1,0,d8621f68-106e-4058-963f-56010491ae2e,d8621f68-106e-4058-963f-56010491ae2e,1,0,f2e2df50-52fc-4e95-909b-80fc91a68f62,f2e2df50-52fc-4e95-909b-80fc91a68f62,1,0,1a1d8dd0-1559-426c-ad3c-baa6eb3a53db,1a1d8dd0-1559-426c-ad3c-baa6eb3a53db,1,0,7a944c45-9b3d-411f-b2ef-de3c896092bb,7a944c45-9b3d-411f-b2ef-de3c896092bb,1,0,d2762764-b5c0-4aeb-8e89-3371972f22d8,d2762764-b5c0-4aeb-8e89-3371972f22d8,1,0,573f1753-9194-4aaf-9217-5cac70ff108f,573f1753-9194-4aaf-9217-5cac70ff108f,1,0,323997ca-488d-4d84-aa44-da60b6b4d414,323997ca-488d-4d84-aa44-da60b6b4d414,1,0,50d3e00e-1a83-4bd5-91db-0561560caf42,50d3e00e-1a83-4bd5-91db-0561560caf42,1,0,1f7ec25a-05b1-468b-8857-2bb1aed3678a,1f7ec25a-05b1-468b-8857-2bb1aed3678a,1,0,c121b8bc-ecbf-4775-b210-3c1e3502a6ac,c121b8bc-ecbf-4775-b210-3c1e3502a6ac,1,0,9f4d5fe5-9bda-4ba9-a313-db1ab0ea14d1,9f4d5fe5-9bda-4ba9-a313-db1ab0ea14d1,1,0,4a1e6d25-89e7-468a-aef1-6ded0154dca2,4a1e6d25-89e7-468a-aef1-6ded0154dca2,1,0,44afff59-0590-4929-93b8-7b49735f21b5,44afff59-0590-4929-93b8-7b49735f21b5,1,0,905624ea-b253-413f-b651-1eb2c5a7d52a,905624ea-b253-413f-b651-1eb2c5a7d52a,1,0,b639ed30-3e37-4c65-a39f-00fe735950eb,b639ed30-3e37-4c65-a39f-00fe735950eb,1,0,76ef7f67-0ce8-4ee2-9134-e793c41b8de3,76ef7f67-0ce8-4ee2-9134-e793c41b8de3,1,0,f137eb0f-bde7-412d-9229-d7a4f9456e6c,f137eb0f-bde7-412d-9229-d7a4f9456e6c,1,0,90880131-8065-4a7e-a0fa-ecff9e27363c,90880131-8065-4a7e-a0fa-ecff9e27363c,1,0,57e9fcea-342c-4089-bd10-befb3faf0dbd,57e9fcea-342c-4089-bd10-befb3faf0dbd,1,0,f85ff11a-163e-4d18-98bc-b0ebe83d34e4,f85ff11a-163e-4d18-98bc-b0ebe83d34e4,1,0,51a0444d-13c8-45a8-97f6-f3f976964bf8,51a0444d-13c8-45a8-97f6-f3f976964bf8,1,0,9892f922-8745-4164-a200-94b5edc1ea0a,9892f922-8745-4164-a200-94b5edc1ea0a,1,0,38eb3fd1-57be-4dc2-bed4-d8107086bf2a,38eb3fd1-57be-4dc2-bed4-d8107086bf2a,1,0,6b6d541b-5dc1-4150-b8d1-5844a694ac6a,6b6d541b-5dc1-4150-b8d1-5844a694ac6a,1,0,2b1619a6-c841-4963-8c51-c1d8d6ba3746,2b1619a6-c841-4963-8c51-c1d8d6ba3746,1,0,eab50f82-4612-47fd-a5c2-9678016a1937,eab50f82-4612-47fd-a5c2-9678016a1937,1,0,2609ba3c-e4de-45b3-86e0-93db39a21eee,2609ba3c-e4de-45b3-86e0-93db39a21eee,1,0,00dcfeab-7ba1-4a50-996e-4fd693dd0514,00dcfeab-7ba1-4a50-996e-4fd693dd0514,1,0,d21971c9-9aa6-448a-ab37-49ad0b0547ec,d21971c9-9aa6-448a-ab37-49ad0b0547ec,1,0,627438b8-c738-4e02-a0e7-cfd7fbf8eca1,627438b8-c738-4e02-a0e7-cfd7fbf8eca1,1,0,30f6aedf-946f-400c-822d-5fa375b8fb1d,30f6aedf-946f-400c-822d-5fa375b8fb1d,1,0,00418e6c-77b2-4753-b9ff-3a8013436f8a,00418e6c-77b2-4753-b9ff-3a8013436f8a,1,0,8deaa3d0-b36b-4f20-a9a8-11d829f5ef9d,8deaa3d0-b36b-4f20-a9a8-11d829f5ef9d,1,0,26986f8d-d56d-4641-9184-2632d0881cca,26986f8d-d56d-4641-9184-2632d0881cca,1,0,144676de-f369-49f1-bb21-d60e073936df,144676de-f369-49f1-bb21-d60e073936df,1,0,d5537afb-df5f-4edf-a3d3-ff6b2a908ad9,d5537afb-df5f-4edf-a3d3-ff6b2a908ad9,1,0,d9f1f56b-75c8-43e9-8043-89076c225f78,d9f1f56b-75c8-43e9-8043-89076c225f78,1,0,4d660fec-4a76-470e-bba9-3d031941b289,4d660fec-4a76-470e-bba9-3d031941b289,1,0,a3c9a7eb-2104-4402-954c-3e12de4a7de3,a3c9a7eb-2104-4402-954c-3e12de4a7de3,1,0,38bf6d3b-5435-4bac-b9fc-23b80afeb760,38bf6d3b-5435-4bac-b9fc-23b80afeb760,1,0,a2a51b70-9570-4f53-9d30-e9a9b099a475,a2a51b70-9570-4f53-9d30-e9a9b099a475,1,0,556a0e57-5b3b-4303-a013-0bd296c506b8,556a0e57-5b3b-4303-a013-0bd296c506b8,1,0,fabbac92-cb98-4087-b3fa-387482ed0d86,fabbac92-cb98-4087-b3fa-387482ed0d86,1,0,304525f8-c697-4835-b0a6-4ed3cbcaf3c6,304525f8-c697-4835-b0a6-4ed3cbcaf3c6,1,0,fdcbe67c-55fb-444d-bed8-cee956ca3530,fdcbe67c-55fb-444d-bed8-cee956ca3530,1,0,e09534e3-ac6e-42a6-86e8-564acb20089a,e09534e3-ac6e-42a6-86e8-564acb20089a,1,0,6ff5b3cb-efff-430d-bf0a-957405f116ca,6ff5b3cb-efff-430d-bf0a-957405f116ca,1,0,d06e845a-9f54-40dd-b0df-6988def62017,d06e845a-9f54-40dd-b0df-6988def62017,1,0,7badb97b-c359-42af-9066-6bbfc0650cf9,7badb97b-c359-42af-9066-6bbfc0650cf9,1,0,63223883-06cf-4d01-be95-5e410cc58a22,63223883-06cf-4d01-be95-5e410cc58a22,1,0,1929139f-dabb-4c40-9423-158093360889,1929139f-dabb-4c40-9423-158093360889,1,0,dad92df4-685b-4260-b35f-4d031262dfea,dad92df4-685b-4260-b35f-4d031262dfea,1,0,4399c19a-ddba-42e9-88b4-c5c28abad237,4399c19a-ddba-42e9-88b4-c5c28abad237,1,0,982315ba-df74-4a31-8929-71d1e5e6f147,982315ba-df74-4a31-8929-71d1e5e6f147,1,0,8d1c01a9-9806-4e5d-bafb-ce6af11d5650,8d1c01a9-9806-4e5d-bafb-ce6af11d5650,1,0,fd3a6a7e-203d-447a-aebd-7626579387fb,fd3a6a7e-203d-447a-aebd-7626579387fb,1,0,8014684f-e1f1-4163-9083-459a009c0aac,8014684f-e1f1-4163-9083-459a009c0aac,1,0,ad6384d5-278b-44d3-993a-d5a39e7c98ca,ad6384d5-278b-44d3-993a-d5a39e7c98ca,1,0,ff976027-75e8-475c-abfa-876d36733c13,ff976027-75e8-475c-abfa-876d36733c13,1,0,7452d9c0-cb03-4d1b-afd4-8855950f2ad8,7452d9c0-cb03-4d1b-afd4-8855950f2ad8,1,0,32d4a42d-6e4d-49db-b5bc-1ea6dbe9fe4d,32d4a42d-6e4d-49db-b5bc-1ea6dbe9fe4d,1,0,40c8b547-35d0-4dbd-8fa1-ba108c3022b1,40c8b547-35d0-4dbd-8fa1-ba108c3022b1,1,0,3f823f5b-e5a8-40af-8fc3-e4c6ffb18fa3,3f823f5b-e5a8-40af-8fc3-e4c6ffb18fa3,1,0,e55d259f-cfaa-46f9-92c4-687e1ff3b89d,e55d259f-cfaa-46f9-92c4-687e1ff3b89d,1,0,cf13e2d9-72a0-47c0-bae2-f674024bbdb2,cf13e2d9-72a0-47c0-bae2-f674024bbdb2,1,0,540be4e1-6eae-48e2-a645-8bd0a1259c65,540be4e1-6eae-48e2-a645-8bd0a1259c65,1,0,f772abd3-8ea0-41e9-aaca-c5375778941a,f772abd3-8ea0-41e9-aaca-c5375778941a,1,0,a1e494f8-96a4-41bd-9234-b87e8d8742c5,a1e494f8-96a4-41bd-9234-b87e8d8742c5,1,0,5c6b9fb5-7d29-4161-a81b-7c618ca07a47,5c6b9fb5-7d29-4161-a81b-7c618ca07a47,1,0,b322b047-16eb-4500-826a-6dfebb7d997a,b322b047-16eb-4500-826a-6dfebb7d997a,1,0,bbbc2d1f-2f78-4b7e-b5fb-ca7c74051221,bbbc2d1f-2f78-4b7e-b5fb-ca7c74051221,1,0,83ead93b-4ff6-487d-934e-25088944fccc,83ead93b-4ff6-487d-934e-25088944fccc,1,0,764c76cc-0473-4633-868d-02f96aa43c10,764c76cc-0473-4633-868d-02f96aa43c10,1,0,c8da922f-e31e-49b0-b90e-1c060424bde5,c8da922f-e31e-49b0-b90e-1c060424bde5,1,0,41462827-fd8b-4ee6-a739-a884d704bba5,41462827-fd8b-4ee6-a739-a884d704bba5,1,0,7b01236c-5ab7-43fa-aa0e-1ae55c8a4efe,7b01236c-5ab7-43fa-aa0e-1ae55c8a4efe,1,0,eca025d2-4fe9-4542-b9f5-46ae2631256e,eca025d2-4fe9-4542-b9f5-46ae2631256e,1,0,9416a741-5106-454e-b953-81f3d99d5e71,9416a741-5106-454e-b953-81f3d99d5e71,1,0,35bc58df-8aff-48dd-83a9-b60b0461f94d,35bc58df-8aff-48dd-83a9-b60b0461f94d,1,0,0f46ae6b-9fe8-471a-a59f-af5e66cb9e00,0f46ae6b-9fe8-471a-a59f-af5e66cb9e00,1,0,feb1a5c1-c805-4079-8f05-8a44f51b0b02,feb1a5c1-c805-4079-8f05-8a44f51b0b02,1,0,ff7916bd-cbd1-4d9e-8aab-bad9fffaa0d4,ff7916bd-cbd1-4d9e-8aab-bad9fffaa0d4,1,0,1f55f330-7c0a-4a29-905f-51d664515bc5,1f55f330-7c0a-4a29-905f-51d664515bc5,1,0,6106e958-354c-4211-992c-3c3819e8828e,6106e958-354c-4211-992c-3c3819e8828e,1,0,9d6d77a9-1f55-4162-93a5-14bb3f3febaf,9d6d77a9-1f55-4162-93a5-14bb3f3febaf,1,0,61789ea5-aad2-4b3b-a1c7-3ff7409379eb,61789ea5-aad2-4b3b-a1c7-3ff7409379eb,1,0,2cd04d4c-2619-40c9-adf4-7bb281f045b6,2cd04d4c-2619-40c9-adf4-7bb281f045b6,1,0,1d6b8425-360c-4ab1-9bab-cc9a3b590bb2,1d6b8425-360c-4ab1-9bab-cc9a3b590bb2,1,0,9f67d228-79aa-44e6-8dc7-fae4fbdfef2a,9f67d228-79aa-44e6-8dc7-fae4fbdfef2a,1,0,231d3950-f363-4e63-83cd-8ddb81507c27,231d3950-f363-4e63-83cd-8ddb81507c27,1,0,87429f11-bf95-4013-bf13-da904570f88d,87429f11-bf95-4013-bf13-da904570f88d,1,0,6173cab2-e0f5-40c1-8e74-4f41fc8bd68f,6173cab2-e0f5-40c1-8e74-4f41fc8bd68f,1,0,feb41347-62db-41cf-ace0-d8b9de361af3,feb41347-62db-41cf-ace0-d8b9de361af3,1,0,5a088468-4065-4e0c-9b84-1162de8d3fdd,5a088468-4065-4e0c-9b84-1162de8d3fdd,1,0,dbdf3ae7-a0af-44b9-8e3d-c402d98cda03,dbdf3ae7-a0af-44b9-8e3d-c402d98cda03,1,0,5f91b00f-d8fc-4d63-8486-66339357ab22,5f91b00f-d8fc-4d63-8486-66339357ab22,1,0,16d44ab1-4bce-4df8-a215-6ed5173c75a8,16d44ab1-4bce-4df8-a215-6ed5173c75a8,1,0,375977c1-5745-4e78-a4df-cef966c0ccf8,375977c1-5745-4e78-a4df-cef966c0ccf8,1,0,2582a714-a6d6-4d37-b9a7-5e89e18b0f27,2582a714-a6d6-4d37-b9a7-5e89e18b0f27,1,0,c3796d85-2a24-43c4-9673-64e56249a1d0,c3796d85-2a24-43c4-9673-64e56249a1d0,1,0,fc1066b5-20d4-4c73-85f8-9889e554d6e1,fc1066b5-20d4-4c73-85f8-9889e554d6e1,1,0,a9b6b5fd-1862-4207-87e8-5c25a8f86c57,a9b6b5fd-1862-4207-87e8-5c25a8f86c57,1,0,731211c2-ef90-4883-9525-83cd91b742ac,731211c2-ef90-4883-9525-83cd91b742ac,1,0,0adf02da-940a-4bfc-afa5-59605494a169,0adf02da-940a-4bfc-afa5-59605494a169,1,0,8361991a-0f30-4a03-9a4c-90556b744f53,8361991a-0f30-4a03-9a4c-90556b744f53,1,0,5a3cc2a8-f519-45ac-af9b-c57a4f1acdc0,5a3cc2a8-f519-45ac-af9b-c57a4f1acdc0,1,0,08427a9a-fb3a-4bc1-b2e2-72e4f89680cd,08427a9a-fb3a-4bc1-b2e2-72e4f89680cd,1,0,259cb8f5-9e78-4b2f-941b-ccb4b1112c8b,259cb8f5-9e78-4b2f-941b-ccb4b1112c8b,1,0,24f9d1a6-73d0-4cc7-b3ca-d36c5c7a9892,24f9d1a6-73d0-4cc7-b3ca-d36c5c7a9892,1,0,73c1a829-0191-486b-97a0-7f333c6f8011,73c1a829-0191-486b-97a0-7f333c6f8011,1,0,5504f5d1-35d8-4a47-a0e1-003fe00395c1,5504f5d1-35d8-4a47-a0e1-003fe00395c1,1,0,56242b05-d722-4d4a-82d9-517e0e169d0b,56242b05-d722-4d4a-82d9-517e0e169d0b,1,0,f9196766-4ae2-4a73-bed6-4a8838323e02,f9196766-4ae2-4a73-bed6-4a8838323e02,1,0,4eeda6df-fb48-4c88-853f-9c35e2b3a3cf,4eeda6df-fb48-4c88-853f-9c35e2b3a3cf,1,0,50a1e3bf-8624-4474-854e-21b89aaf97ed,50a1e3bf-8624-4474-854e-21b89aaf97ed,1,0,503b3eab-b7f1-4ede-8845-3290a834cec7,503b3eab-b7f1-4ede-8845-3290a834cec7,1,0,847b97a3-d0bc-45e2-b06c-932bb22d8eca,847b97a3-d0bc-45e2-b06c-932bb22d8eca,1,0,6c7b82ca-37b0-4f67-b7fa-ab1b77c0fb61,6c7b82ca-37b0-4f67-b7fa-ab1b77c0fb61,1,0,3116fa60-bc42-4dea-aa03-387896168690,3116fa60-bc42-4dea-aa03-387896168690,1,0,06afe397-1c7e-400e-bb24-f8e611d114e8,06afe397-1c7e-400e-bb24-f8e611d114e8,1,0,f0105e51-9510-426a-8aa0-af827d93ffd9,f0105e51-9510-426a-8aa0-af827d93ffd9,1,0,ca797560-8802-4bdc-b21f-7a7fd795beae,ca797560-8802-4bdc-b21f-7a7fd795beae,1,0,3df19dbf-efe7-4e31-99ad-fafb59ec1329,3df19dbf-efe7-4e31-99ad-fafb59ec1329,1,0,baf12d47-fbfe-4563-aa23-26d9f7e83169,baf12d47-fbfe-4563-aa23-26d9f7e83169,1,0,e2046f49-6fea-4bf4-92b0-92f3c8357bcf,e2046f49-6fea-4bf4-92b0-92f3c8357bcf,1,0,0ba11486-1972-4434-ab1a-5bb75cc05e9f,0ba11486-1972-4434-ab1a-5bb75cc05e9f,1,0,4ed9c555-7dd0-4577-bf62-152b4c5ec9f2,4ed9c555-7dd0-4577-bf62-152b4c5ec9f2,1,0,11fe3a42-98c4-49ba-b697-86ffb172f16f,11fe3a42-98c4-49ba-b697-86ffb172f16f,1,0,07b53818-7318-4400-8af5-457fac012755,07b53818-7318-4400-8af5-457fac012755,1,0,292b47e7-5cf3-462d-a466-dac6253a7f03,292b47e7-5cf3-462d-a466-dac6253a7f03,1,0,8ecc070f-f6fb-46b1-9636-b77aa80f8804,8ecc070f-f6fb-46b1-9636-b77aa80f8804,1,0,8405be9d-465b-4744-b04f-03933b52f02e,8405be9d-465b-4744-b04f-03933b52f02e,1,0,a8021ff9-f0ae-49ab-b8ac-5e3d8fe90d82,a8021ff9-f0ae-49ab-b8ac-5e3d8fe90d82,1,0,f09b09ce-9e3c-406a-8508-b6e7e6ec966e,f09b09ce-9e3c-406a-8508-b6e7e6ec966e,1,0,9bf55587-1ffe-42bc-b8e8-3f956956f689,9bf55587-1ffe-42bc-b8e8-3f956956f689,1,0,2f67931e-543f-457e-80fd-78ca754e2e9c,2f67931e-543f-457e-80fd-78ca754e2e9c,1,0,595e5752-36a7-4bba-8a40-26920acae01d,595e5752-36a7-4bba-8a40-26920acae01d,1,0,28801fba-c429-4afa-bdcd-b3ec3ec22fda,28801fba-c429-4afa-bdcd-b3ec3ec22fda,1,0,d1a873ae-d45b-4600-9419-e701dce3da02,d1a873ae-d45b-4600-9419-e701dce3da02,1,0,e3a31f0d-a98f-43c6-bc39-087095ae8c39,e3a31f0d-a98f-43c6-bc39-087095ae8c39,1,0,e39d8ff3-52db-4ba4-b4ea-42d5ee787076,e39d8ff3-52db-4ba4-b4ea-42d5ee787076,1,0,b1c1c2eb-f9cd-468a-8398-b0b7f611f832,b1c1c2eb-f9cd-468a-8398-b0b7f611f832,1,0,4bb0f7c3-62f3-4352-9bc8-e243dd18fe4a,4bb0f7c3-62f3-4352-9bc8-e243dd18fe4a,1,0,bc106ef9-3eeb-40d4-aa59-ae1855ba1744,bc106ef9-3eeb-40d4-aa59-ae1855ba1744,1,0,73d8b319-9bea-4638-a602-23c12f37c227,73d8b319-9bea-4638-a602-23c12f37c227,1,0,cef55e64-d4ad-42dc-aa5a-ea65a3af7cfa,cef55e64-d4ad-42dc-aa5a-ea65a3af7cfa,1,0,a43e9de0-2921-4c58-a5f8-7446258be967,a43e9de0-2921-4c58-a5f8-7446258be967,1,0,307656e3-df7f-46e7-946c-bbd439265c95,307656e3-df7f-46e7-946c-bbd439265c95,1,0,eb3dfdc7-58b8-4b1f-b079-368c262364c9,eb3dfdc7-58b8-4b1f-b079-368c262364c9,1,0,5030a318-f8f7-4ec7-80d6-6eee0772562f,5030a318-f8f7-4ec7-80d6-6eee0772562f,1,0,242e911d-e49c-4b8a-8543-cc2e079220fd,242e911d-e49c-4b8a-8543-cc2e079220fd,1,0,9ea39d31-3775-4fb8-a3f3-202e54354d49,9ea39d31-3775-4fb8-a3f3-202e54354d49,1,0,73044e20-148c-46e9-b5b5-973c91de0d61,73044e20-148c-46e9-b5b5-973c91de0d61,1,0,f8ab477c-8e78-48c0-9f99-27748b109706,f8ab477c-8e78-48c0-9f99-27748b109706,1,0,24cff6c8-6c20-4383-b97c-6afa52738960,24cff6c8-6c20-4383-b97c-6afa52738960,1,0,462e2694-750d-49ef-93ac-17a7779be68d,462e2694-750d-49ef-93ac-17a7779be68d,1,0,c24ff02e-5afc-45df-81cf-64ea2b261c2d,c24ff02e-5afc-45df-81cf-64ea2b261c2d,1,0,2d51aae9-650d-4719-a94d-2609b69a2d36,2d51aae9-650d-4719-a94d-2609b69a2d36,1,0,6025f5b5-6dc7-46b8-96e6-02823c5b4de7,6025f5b5-6dc7-46b8-96e6-02823c5b4de7,1,0,5d9d88ea-b2e4-425c-bb4d-a005e867d56c,5d9d88ea-b2e4-425c-bb4d-a005e867d56c,1,0,b76d342c-0f9d-4eb0-b49e-a9f472a4dd0d,b76d342c-0f9d-4eb0-b49e-a9f472a4dd0d,1,0,85639a53-b367-49ce-84f2-4e21d81c489b,85639a53-b367-49ce-84f2-4e21d81c489b,1,0,24b59586-178e-4efc-90ae-529553f3bb6c,24b59586-178e-4efc-90ae-529553f3bb6c,1,0,20e75dd5-222a-4100-aa43-3684991e3f21,20e75dd5-222a-4100-aa43-3684991e3f21,1,0,3c611832-4bc2-4229-a27d-d5dc82f3a498,3c611832-4bc2-4229-a27d-d5dc82f3a498,1,0,50e9eb52-02e3-44ff-9c9e-e76dbe38da63,50e9eb52-02e3-44ff-9c9e-e76dbe38da63,1,0,5dadc422-1fbd-4918-9db3-09ec72c3404e,5dadc422-1fbd-4918-9db3-09ec72c3404e,1,0,ffdaf8a0-7a8f-4756-bdfc-a0c6ae6c3869,ffdaf8a0-7a8f-4756-bdfc-a0c6ae6c3869,1,0,ab1bcabf-ffb0-4914-8ad0-b94b5aaeab1d,ab1bcabf-ffb0-4914-8ad0-b94b5aaeab1d,1,0,c5478d09-c8d3-4cc6-878e-27656ecc8409,c5478d09-c8d3-4cc6-878e-27656ecc8409,1,0,01b97d2f-40b9-4f12-8bc5-ab75fd160b7c,01b97d2f-40b9-4f12-8bc5-ab75fd160b7c,1,0,75974146-5b1a-412c-b7d5-1575704bbdab,75974146-5b1a-412c-b7d5-1575704bbdab,1,0,949f87cb-258c-4b6b-95ee-8a7491a4b64e,949f87cb-258c-4b6b-95ee-8a7491a4b64e,1,0,8a348012-99dc-4dc9-8bec-0df3caf4cdc5,8a348012-99dc-4dc9-8bec-0df3caf4cdc5,1,0,5c089988-5381-41ed-9f05-f85db46b8d94,5c089988-5381-41ed-9f05-f85db46b8d94,1,0,85a36352-1569-4ce4-aeba-477db524c36d,85a36352-1569-4ce4-aeba-477db524c36d,1,0,ebfb6f80-88f5-4046-8ae7-e11a7b0c1beb,ebfb6f80-88f5-4046-8ae7-e11a7b0c1beb,1,0,d99991b8-3a81-4e18-b0ad-05fc3e3a199b,d99991b8-3a81-4e18-b0ad-05fc3e3a199b,1,0,dd383422-dddb-4a81-9326-015fd345b5c1,dd383422-dddb-4a81-9326-015fd345b5c1,1,0,b2e656c1-f4ff-4d95-b066-4ee11ce4dea8,b2e656c1-f4ff-4d95-b066-4ee11ce4dea8,1,0,2d86d1fc-5367-47b8-804e-7f9c5fc8f3b1,2d86d1fc-5367-47b8-804e-7f9c5fc8f3b1,1,0,782cb93d-36e6-4923-b2b6-75caa3459cd6,782cb93d-36e6-4923-b2b6-75caa3459cd6,1,0,0eea37cc-47f8-4819-85da-d4991f4e58ed,0eea37cc-47f8-4819-85da-d4991f4e58ed,1,0,0f314b6b-5ed1-46ed-bdfd-cf53330c2783,0f314b6b-5ed1-46ed-bdfd-cf53330c2783,1,0,b51eaf45-baa1-4d1c-bcb7-a89bb8bcc26a,b51eaf45-baa1-4d1c-bcb7-a89bb8bcc26a,1,0,5ea29362-0ab7-4ca3-865e-bf93db5ca24b,5ea29362-0ab7-4ca3-865e-bf93db5ca24b,1,0,64ff6058-c6f3-4682-b9a1-11ec438fa447,64ff6058-c6f3-4682-b9a1-11ec438fa447,1,0,ced01234-9417-49ce-adf0-8cdd15e6dd7d,ced01234-9417-49ce-adf0-8cdd15e6dd7d,1,0,c1272bfc-196a-4f99-935f-e2516bc138d2,c1272bfc-196a-4f99-935f-e2516bc138d2,1,0,313e0688-745a-4385-b040-7ef8317a0eb7,313e0688-745a-4385-b040-7ef8317a0eb7,1,0,7fe61c5d-30bc-440d-9e40-12ff3b296616,7fe61c5d-30bc-440d-9e40-12ff3b296616,1,0,37c37f15-f84b-456b-aab6-729562dc0908,37c37f15-f84b-456b-aab6-729562dc0908,1,0,45a2569e-820c-4d7d-ba74-4a781d26bb2b,45a2569e-820c-4d7d-ba74-4a781d26bb2b,1,0,996c7873-1cc9-44f6-915b-5c6ed7ef2370,996c7873-1cc9-44f6-915b-5c6ed7ef2370,1,0,8dc08932-0988-4e82-8a5f-385c0694f9ff,8dc08932-0988-4e82-8a5f-385c0694f9ff,1,0,13dee5d8-f165-48de-9ccb-3ef0239f4b27,13dee5d8-f165-48de-9ccb-3ef0239f4b27,1,0,2767473e-79fb-4c7c-a7d1-a83a8f2df71d,2767473e-79fb-4c7c-a7d1-a83a8f2df71d,1,0,9395eb9d-6aff-4af5-a6f1-5c39014ba67b,9395eb9d-6aff-4af5-a6f1-5c39014ba67b,1,0,8a13c899-1659-48cf-9aa2-07ca99547b7b,8a13c899-1659-48cf-9aa2-07ca99547b7b,1,0,eb3f959c-94a4-4e77-b9f9-e81954254079,eb3f959c-94a4-4e77-b9f9-e81954254079,1,0,71dfde27-3762-4dd0-9252-6e703ce1b101,71dfde27-3762-4dd0-9252-6e703ce1b101,1,0,f5ef3f75-7d12-4284-844f-54d19d1f7e2f,f5ef3f75-7d12-4284-844f-54d19d1f7e2f,1,0,7974e41d-5af3-4636-b405-c9405d89fb53,7974e41d-5af3-4636-b405-c9405d89fb53,1,0,21fad9b6-44df-417c-ba18-de4b8af98a34,21fad9b6-44df-417c-ba18-de4b8af98a34,1,0,11c086b0-c646-4701-983d-c38758286354,11c086b0-c646-4701-983d-c38758286354,1,0,36d6b0e1-5e10-408a-8eb1-09839e57690f,36d6b0e1-5e10-408a-8eb1-09839e57690f,1,0,6423b849-7ca4-4501-8856-445157d7e5df,6423b849-7ca4-4501-8856-445157d7e5df,1,0,0819e2b0-1eb0-41b3-ab89-0974bd926fb6,0819e2b0-1eb0-41b3-ab89-0974bd926fb6,1,0,e814287f-1c13-4f74-9507-d22a62394fd2,e814287f-1c13-4f74-9507-d22a62394fd2,1,0,417ac987-7369-45af-b670-fdffb048f33d,417ac987-7369-45af-b670-fdffb048f33d,1,0,640a5d72-dbc7-421b-afdb-cc3a4622ae04,640a5d72-dbc7-421b-afdb-cc3a4622ae04,1,0,79da84c1-5ac2-4472-8eb9-f0484b9582c2,79da84c1-5ac2-4472-8eb9-f0484b9582c2,1,0,2d0b161b-7d69-4ec4-a483-79bd458cb62c,2d0b161b-7d69-4ec4-a483-79bd458cb62c,1,0,f178bc1b-ebea-4fa9-8861-fe0d91f103e4,f178bc1b-ebea-4fa9-8861-fe0d91f103e4,1,0,e33a9c94-7e98-4b38-ba20-4546a90b2937,e33a9c94-7e98-4b38-ba20-4546a90b2937,1,0,1610e73c-58df-41cc-8349-51b920806821,1610e73c-58df-41cc-8349-51b920806821,1,0,ae37f465-1ee5-4f06-a834-deea9e9e0eb3,ae37f465-1ee5-4f06-a834-deea9e9e0eb3,1,0,c6ccf82f-f130-4037-9e89-1e0365b996a4,c6ccf82f-f130-4037-9e89-1e0365b996a4,1,0,c532963e-0d92-44b9-9cfc-43ed2744ccf9,c532963e-0d92-44b9-9cfc-43ed2744ccf9,1,0,6aff2855-24d4-4f90-b617-53326efdd1bd,6aff2855-24d4-4f90-b617-53326efdd1bd,1,0,0107a9c7-4c85-49c4-918a-925d85d57a0b,0107a9c7-4c85-49c4-918a-925d85d57a0b,1,0,6e1efa55-969b-4c2b-8af2-b11d672db5f0,6e1efa55-969b-4c2b-8af2-b11d672db5f0,1,0,e5b578a1-e33b-4d49-8064-427aa928a844,e5b578a1-e33b-4d49-8064-427aa928a844,1,0,f74e97ad-fef6-4122-a056-86f2d59dfdaf,f74e97ad-fef6-4122-a056-86f2d59dfdaf,1,0,df1ef691-1e86-4a80-8671-53b3d4504bfb,df1ef691-1e86-4a80-8671-53b3d4504bfb,1,0,474b9918-23da-4289-91a9-9115526c9b5d,474b9918-23da-4289-91a9-9115526c9b5d,1,0,1cf7be60-fd84-430d-b1b5-5619c51b8b3f,1cf7be60-fd84-430d-b1b5-5619c51b8b3f,1,0,60aa9d44-5986-490e-8093-f65e194b3607,60aa9d44-5986-490e-8093-f65e194b3607,1,0,a36dee5e-7184-4caf-bf46-3977b165093b,a36dee5e-7184-4caf-bf46-3977b165093b,1,0,aa3c61a7-c905-4b5a-a44d-e2ac5d79158a,aa3c61a7-c905-4b5a-a44d-e2ac5d79158a,1,0,182916b2-972b-4e39-93ba-d45aa7a195f5,182916b2-972b-4e39-93ba-d45aa7a195f5,1,0,2b654a53-7ce8-421f-aaf5-aa1451d91415,2b654a53-7ce8-421f-aaf5-aa1451d91415,1,0,30e55306-ea5c-4ef4-9903-ea030afa3d85,30e55306-ea5c-4ef4-9903-ea030afa3d85,1,0,234c1a72-8349-472a-8373-2a25ce6252f2,234c1a72-8349-472a-8373-2a25ce6252f2,1,0,b1ccb9f7-11ff-4ad2-8806-d64de84662f0,b1ccb9f7-11ff-4ad2-8806-d64de84662f0,1,0,539e0db9-be24-4086-9632-af20553ee50f,539e0db9-be24-4086-9632-af20553ee50f,1,0,b9adeb51-a009-4e83-85f8-bfa1547429d6,b9adeb51-a009-4e83-85f8-bfa1547429d6,1,0,ac9f4c2e-316b-4f96-8fe6-fb5a5a7e48ed,ac9f4c2e-316b-4f96-8fe6-fb5a5a7e48ed,1,0,da808c0e-b1b0-4d46-8c63-2bbe7d0dca9d,da808c0e-b1b0-4d46-8c63-2bbe7d0dca9d,1,0,92876c9e-52ff-480d-9878-5766f4f9d12c,92876c9e-52ff-480d-9878-5766f4f9d12c,1,0,b729d739-5249-4765-85ee-fd792bb22911,b729d739-5249-4765-85ee-fd792bb22911,1,0,d65c4485-7bac-4206-9a6c-7156f4bb876d,d65c4485-7bac-4206-9a6c-7156f4bb876d,1,0,d431d1e2-13dc-495c-9de1-b5ec872eceed,d431d1e2-13dc-495c-9de1-b5ec872eceed,1,0,e8bec681-d269-41ba-9184-556cbcc27d74,e8bec681-d269-41ba-9184-556cbcc27d74,1,0,b8aaef91-f72c-4127-a494-771c13694ca4,b8aaef91-f72c-4127-a494-771c13694ca4,1,0,433a114f-3198-4ef6-bbf8-ce9b54fdb736,433a114f-3198-4ef6-bbf8-ce9b54fdb736,1,0,02ac711c-e38e-422e-ac28-ba1b298df9cc,02ac711c-e38e-422e-ac28-ba1b298df9cc,1,0,3e090261-4aa2-4ece-9f77-62df83c890b3,3e090261-4aa2-4ece-9f77-62df83c890b3,1,0,bbfd9834-12b4-49ca-bdae-5c94efa80482,bbfd9834-12b4-49ca-bdae-5c94efa80482,1,0,9292034c-24e8-49a7-9b77-7974e117847d,9292034c-24e8-49a7-9b77-7974e117847d,1,0,3327b7d4-62fc-44cc-83b4-c449bfa4e706,3327b7d4-62fc-44cc-83b4-c449bfa4e706,1,0,43ecee25-68eb-48cf-bbaa-aee71052438f,43ecee25-68eb-48cf-bbaa-aee71052438f,1,0,93799f8b-0188-4546-8815-35e733bcc2b1,93799f8b-0188-4546-8815-35e733bcc2b1,1,0,9dc3a563-11bb-40a7-8431-c1d4367ccbaf,9dc3a563-11bb-40a7-8431-c1d4367ccbaf,1,0,c9ea4e72-5f01-42ae-88e3-52e49757b26f,c9ea4e72-5f01-42ae-88e3-52e49757b26f,1,0,38d92d75-c8b8-42d6-9e0a-6dc0811a8652,38d92d75-c8b8-42d6-9e0a-6dc0811a8652,1,0,0f564dbe-6a6e-48df-9718-5cea5d608ee6,0f564dbe-6a6e-48df-9718-5cea5d608ee6,1,0,a623fef1-96eb-41ba-93fe-09162698f419,a623fef1-96eb-41ba-93fe-09162698f419,1,0,45a8d7cb-c927-4a4e-a653-13fd9b1eda10,45a8d7cb-c927-4a4e-a653-13fd9b1eda10,1,0,d8e1f92f-9efa-422d-bb21-43bd1a363cec,d8e1f92f-9efa-422d-bb21-43bd1a363cec,1,0,c1416383-bd7e-4dc4-ad88-d98ac87157fd,c1416383-bd7e-4dc4-ad88-d98ac87157fd,1,0,5e8bddc7-7836-4ec8-b6e1-0c15d228f47e,5e8bddc7-7836-4ec8-b6e1-0c15d228f47e,1,0,d5d9976a-4cc0-43f7-afd6-d43cebb07940,d5d9976a-4cc0-43f7-afd6-d43cebb07940,1,0,899f1526-d6bc-42ef-852e-7297a06db9e3,899f1526-d6bc-42ef-852e-7297a06db9e3,1,0,1b4feda1-e555-4b85-b236-b21153a7246f,1b4feda1-e555-4b85-b236-b21153a7246f,1,0,61d3cef4-2c42-417d-a762-a2d2f5a28924,61d3cef4-2c42-417d-a762-a2d2f5a28924,1,0,c694c132-1ddb-4273-818a-d3cca88c082a,c694c132-1ddb-4273-818a-d3cca88c082a,1,0,cd4da06e-c06b-4233-befc-1bc4c4db58e3,cd4da06e-c06b-4233-befc-1bc4c4db58e3,1,0,918a01fe-f753-4a4a-9200-55bbd6edaf5f,918a01fe-f753-4a4a-9200-55bbd6edaf5f,1,0,51a8a209-2a9d-419f-9fda-f7aeac68bdbe,51a8a209-2a9d-419f-9fda-f7aeac68bdbe,1,0,ef43961f-8cac-4f3f-bcee-c6bc51c4148c,ef43961f-8cac-4f3f-bcee-c6bc51c4148c,1,0,7ab6acda-6732-4582-8092-d43f9a98a28d,7ab6acda-6732-4582-8092-d43f9a98a28d,1,0,5ab1d405-bfc3-4440-8cdd-3a63013b064d,5ab1d405-bfc3-4440-8cdd-3a63013b064d,1,0,d6704410-6297-481e-a6cb-6d6aa566b4f8,d6704410-6297-481e-a6cb-6d6aa566b4f8,1,0,398937ca-b035-43bd-b0da-8c5153a87cb8,398937ca-b035-43bd-b0da-8c5153a87cb8,1,0,5b441321-bd1e-4c56-8f09-365b05985eed,5b441321-bd1e-4c56-8f09-365b05985eed,1,0,6bcba052-4d81-409d-b1a2-eed6be6fb024,6bcba052-4d81-409d-b1a2-eed6be6fb024,1,0,559f1e66-e8da-437a-aa27-d0e1be6619b6,559f1e66-e8da-437a-aa27-d0e1be6619b6,1,0,704d69cd-d921-4957-a004-43bd7eb4d979,704d69cd-d921-4957-a004-43bd7eb4d979,1,0,f1594682-16ac-408c-8307-a7a8db79b09f,f1594682-16ac-408c-8307-a7a8db79b09f,1,0,863aebd2-ce32-4f1f-bb3d-d6062ab187fd,863aebd2-ce32-4f1f-bb3d-d6062ab187fd,1,0,4cb814d8-cb1b-4366-b500-e820ad526b0c,4cb814d8-cb1b-4366-b500-e820ad526b0c,1,0,7da5f3b4-6330-4112-9d3a-7bb42996aa4a,7da5f3b4-6330-4112-9d3a-7bb42996aa4a,1,0,6c43df9f-ca36-415b-afec-302807820d73,6c43df9f-ca36-415b-afec-302807820d73,1,0,c7fb7551-806a-40b2-8879-14cd897b60d8,c7fb7551-806a-40b2-8879-14cd897b60d8,1,0,68337023-d573-4d04-95b6-44f73258c2a4,68337023-d573-4d04-95b6-44f73258c2a4,1,0,7cf39337-b722-486f-8e37-a62239d0ccd2,7cf39337-b722-486f-8e37-a62239d0ccd2,1,0,2571cfaf-d876-4385-a60a-1488aacf7080,2571cfaf-d876-4385-a60a-1488aacf7080,1,0,4ea1dd0a-6eab-48e4-a6a7-314d0e211d6c,4ea1dd0a-6eab-48e4-a6a7-314d0e211d6c,1,0,44398566-3189-4584-8f8a-9deb1d07ce41,44398566-3189-4584-8f8a-9deb1d07ce41,1,0,6f4e3082-9c8c-4289-8cc2-704c8d2763ce,6f4e3082-9c8c-4289-8cc2-704c8d2763ce,1,0,accfa63a-479d-4996-95bc-cdf5acdf203c,accfa63a-479d-4996-95bc-cdf5acdf203c,1,0,351998e0-8939-4dd4-a833-f4756bcc53b8,351998e0-8939-4dd4-a833-f4756bcc53b8,1,0,093332f5-3eb4-478c-ac95-59dcdc96765a,093332f5-3eb4-478c-ac95-59dcdc96765a,1,0,cd69bad8-524e-4be4-88cc-7732a88b38b8,cd69bad8-524e-4be4-88cc-7732a88b38b8,1,0,0a32248c-6994-4988-90d1-30882bc9da6b,0a32248c-6994-4988-90d1-30882bc9da6b,1,0,b57b53cb-6972-4bda-ae46-96571be1ebec,b57b53cb-6972-4bda-ae46-96571be1ebec,1,0,1a1a9636-fb72-4e4a-af96-5858442b1e61,1a1a9636-fb72-4e4a-af96-5858442b1e61,1,0,bca9cf34-9e11-4014-976a-28c4330b136e,bca9cf34-9e11-4014-976a-28c4330b136e,1,0,65fffe1a-6f36-4f50-975f-4471ad29d3ec,65fffe1a-6f36-4f50-975f-4471ad29d3ec,1,0,8fe5dad5-686a-4631-ae05-2917c33f7d83,8fe5dad5-686a-4631-ae05-2917c33f7d83,1,0,edef86c6-73bf-4e47-b62d-b2b548a732cd,edef86c6-73bf-4e47-b62d-b2b548a732cd,1,0,a1715044-d76f-4238-ba3e-989d04078d83,a1715044-d76f-4238-ba3e-989d04078d83,1,0,e72e59c0-391d-497e-9407-063e0edf573e,e72e59c0-391d-497e-9407-063e0edf573e,1,0,ae8a1e69-ee1c-4efa-8d63-0279b18617f6,ae8a1e69-ee1c-4efa-8d63-0279b18617f6,1,0,a7ec91a5-2ed4-4ecd-b794-fcd3bb5ea4a2,a7ec91a5-2ed4-4ecd-b794-fcd3bb5ea4a2,1,0,299c47a7-0b30-4f62-8f5c-f087ad6411fb,299c47a7-0b30-4f62-8f5c-f087ad6411fb,1,0,4d4724df-24fb-4c59-9d04-3f984906214a,4d4724df-24fb-4c59-9d04-3f984906214a,1,0,95b10bc8-39ef-43f5-b74e-f36cfa9bc806,95b10bc8-39ef-43f5-b74e-f36cfa9bc806,1,0,cb9b73ee-8531-48d9-9266-9aaa4336a612,cb9b73ee-8531-48d9-9266-9aaa4336a612,1,0,b7b80237-d642-4c21-a9ee-64fc4ed20d2f,b7b80237-d642-4c21-a9ee-64fc4ed20d2f,1,0,aeee2eea-1bb9-4e8a-ac5c-c940eaa86511,aeee2eea-1bb9-4e8a-ac5c-c940eaa86511,1,0,d042687f-0725-4611-a868-f5b4f6a3a3a8,d042687f-0725-4611-a868-f5b4f6a3a3a8,1,0,bb143340-7fff-49ef-b121-355c96613f78,bb143340-7fff-49ef-b121-355c96613f78,1,0,cd5fbbcb-19b8-4c0b-93c7-ebdf642826db,cd5fbbcb-19b8-4c0b-93c7-ebdf642826db,1,0,f2f69644-80dc-4b5e-a208-ed1de131e25e,f2f69644-80dc-4b5e-a208-ed1de131e25e,1,0,73060f72-6d08-47da-aac8-d4d2ed8f871c,73060f72-6d08-47da-aac8-d4d2ed8f871c,1,0,f3a6219e-bff5-4d36-9baa-bb214cebc2ed,f3a6219e-bff5-4d36-9baa-bb214cebc2ed,1,0,82e8ac21-c2aa-47de-89ae-ea6cc10cc862,82e8ac21-c2aa-47de-89ae-ea6cc10cc862,1,0,13b27ec3-2be9-4959-92e5-94ba7bb64f03,13b27ec3-2be9-4959-92e5-94ba7bb64f03,1,0,9f832f4b-ae60-4d81-9ffd-6e00f7e02560,9f832f4b-ae60-4d81-9ffd-6e00f7e02560,1,0,6f6ef6ac-5bb7-41e4-b6d5-0f068e8cb176,6f6ef6ac-5bb7-41e4-b6d5-0f068e8cb176,1,0,821225ea-1bad-49a6-a422-80d8a09baf13,821225ea-1bad-49a6-a422-80d8a09baf13,1,0,d0106f3a-8490-4277-a278-75c318ec252c,d0106f3a-8490-4277-a278-75c318ec252c,1,0,5035aa55-d557-419a-89e2-10ed0f8d109b,5035aa55-d557-419a-89e2-10ed0f8d109b,1,0,5f93d2af-64ff-41cc-8403-4a0e83160fea,5f93d2af-64ff-41cc-8403-4a0e83160fea,1,0,c12c90e4-7c40-489b-b14b-6b9442016e0f,c12c90e4-7c40-489b-b14b-6b9442016e0f,1,0,6371e288-3502-4d66-9006-b5a36107c0b7,6371e288-3502-4d66-9006-b5a36107c0b7,1,0,245814f7-028c-4c13-98eb-15412e851f81,245814f7-028c-4c13-98eb-15412e851f81,1,0,0132e564-2cd3-4930-8962-1068532f4be4,0132e564-2cd3-4930-8962-1068532f4be4,1,0,57d0f9b0-18d0-48ba-9f3c-d106f66ac602,57d0f9b0-18d0-48ba-9f3c-d106f66ac602,1,0,3a7cfd4c-c943-43c2-a8d5-6d8ab3a10fc9,3a7cfd4c-c943-43c2-a8d5-6d8ab3a10fc9,1,0,36b8b08f-0da3-4dbd-9aa8-73220ca9101d,36b8b08f-0da3-4dbd-9aa8-73220ca9101d,1,0,7021fca5-d612-43e1-927b-7f822153cf75,7021fca5-d612-43e1-927b-7f822153cf75,1,0,9fd16d51-91bb-4973-a7c4-cf4db87da8bf,9fd16d51-91bb-4973-a7c4-cf4db87da8bf,1,0,ee0a8d23-660a-492b-a813-b57394acee05,ee0a8d23-660a-492b-a813-b57394acee05,1,0,d1eda8f4-ffdd-445a-882c-6124d9f7fcf2,d1eda8f4-ffdd-445a-882c-6124d9f7fcf2,1,0,ade21e2e-349f-414b-8f35-6ae3b6a4064d,ade21e2e-349f-414b-8f35-6ae3b6a4064d,1,0,cce823c6-3bd5-4e46-91f6-8715cb72b1d5,cce823c6-3bd5-4e46-91f6-8715cb72b1d5,1,0,f3a8dd22-4469-4a3b-a7dd-78a5624b7bf0,f3a8dd22-4469-4a3b-a7dd-78a5624b7bf0,1,0,83f51efe-e2af-459a-b59f-2c036124ac23,83f51efe-e2af-459a-b59f-2c036124ac23,1,0,6ed466d7-e016-4d9c-9c0e-8deed48cbd70,6ed466d7-e016-4d9c-9c0e-8deed48cbd70,1,0,b03829e9-ba22-4584-85f0-c36d63f48242,b03829e9-ba22-4584-85f0-c36d63f48242,1,0,084a7c95-a59b-4861-b8b3-b5710a57ac60,084a7c95-a59b-4861-b8b3-b5710a57ac60,1,0,efcea6da-6746-4e00-913a-14cab38b5d84,efcea6da-6746-4e00-913a-14cab38b5d84,1,0,aff367fb-7fca-44d0-adf9-3731f14834f6,aff367fb-7fca-44d0-adf9-3731f14834f6,1,0,a2782760-dd4c-44d2-a785-814d6f610455,a2782760-dd4c-44d2-a785-814d6f610455,1,0,245162d8-6ae1-47e5-a0c9-0d5f2e5d8ea8,245162d8-6ae1-47e5-a0c9-0d5f2e5d8ea8,1,0,6581ac1f-11ef-42b8-9f3b-590bb7546e63,6581ac1f-11ef-42b8-9f3b-590bb7546e63,1,0,ce952e88-35b7-4506-81ac-d7081e50a650,ce952e88-35b7-4506-81ac-d7081e50a650,1,0,5d7a53fa-1a89-4e6e-868c-4077bd84c0ce,5d7a53fa-1a89-4e6e-868c-4077bd84c0ce,1,0,3bf1281f-7570-4633-86b9-3e953a7e6647,3bf1281f-7570-4633-86b9-3e953a7e6647,1,0,715dc289-5b14-4ee0-8716-9c15958b9069,715dc289-5b14-4ee0-8716-9c15958b9069,1,0,92707138-5004-4378-8477-f909166d319d,92707138-5004-4378-8477-f909166d319d,1,0,43661775-43bb-4d9e-bfbb-c46e7d194ca3,43661775-43bb-4d9e-bfbb-c46e7d194ca3,1,0,532637ef-be0d-4f42-9747-a88e17eb3def,532637ef-be0d-4f42-9747-a88e17eb3def,1,0,61127152-3e24-40b4-8a23-5eb6cae568ff,61127152-3e24-40b4-8a23-5eb6cae568ff,1,0,ffd987e3-e8af-4d46-881e-1e312e74dbac,ffd987e3-e8af-4d46-881e-1e312e74dbac,1,0,ad1142ed-183d-47a3-800c-997a3770e11e,ad1142ed-183d-47a3-800c-997a3770e11e,1,0,ebef37c6-4808-4683-93be-036ce19cafd5,ebef37c6-4808-4683-93be-036ce19cafd5,1,0,66364cd4-aaa5-421d-96d6-3c283c14650d,66364cd4-aaa5-421d-96d6-3c283c14650d,1,0,fdbbbf8b-dacf-436e-8d8b-1e2b8e854b17,fdbbbf8b-dacf-436e-8d8b-1e2b8e854b17,1,0,3c54d440-e908-43d6-a5cc-bb64620c82d7,3c54d440-e908-43d6-a5cc-bb64620c82d7,1,0,23a240a2-52ee-46ab-89d9-50dcee2cc8d2,23a240a2-52ee-46ab-89d9-50dcee2cc8d2,1,0,bf1dd911-8ee1-407b-acae-10c85b74baf3,bf1dd911-8ee1-407b-acae-10c85b74baf3,1,0,e924058f-25c3-4744-a565-836b824991b7,e924058f-25c3-4744-a565-836b824991b7,1,0,bc6a47a1-a3f3-4d7e-9dad-099bd3dba751,bc6a47a1-a3f3-4d7e-9dad-099bd3dba751,1,0,518dcd70-4ccf-4866-a94f-7ceec7dd2801,518dcd70-4ccf-4866-a94f-7ceec7dd2801,1,0,f9950ab5-1077-4033-bbbf-53899a1bcf33,f9950ab5-1077-4033-bbbf-53899a1bcf33,1,0,8f16763b-86f0-4ad0-b786-cce7dcb3460e,8f16763b-86f0-4ad0-b786-cce7dcb3460e,1,0,0481bc65-6a32-46b9-ae87-993ba52a29a5,0481bc65-6a32-46b9-ae87-993ba52a29a5,1,0,36ebebbb-dff1-4dbd-870b-58bd4a71fa1f,36ebebbb-dff1-4dbd-870b-58bd4a71fa1f,1,0,dbc5f419-63b0-4cbe-90ff-c0101105e46c,dbc5f419-63b0-4cbe-90ff-c0101105e46c,1,0,c708f6e9-b7a0-4046-90f3-83527da7b872,c708f6e9-b7a0-4046-90f3-83527da7b872,1,0,0006b44a-3a0c-4be4-8dd0-bd0db9ddcc4d,0006b44a-3a0c-4be4-8dd0-bd0db9ddcc4d,1,0,14256e0a-a947-42a3-8e36-47bfbb052a0c,14256e0a-a947-42a3-8e36-47bfbb052a0c,1,0,1b1aa77a-d14b-4751-a7da-0b5bac4db461,1b1aa77a-d14b-4751-a7da-0b5bac4db461,1,0,c0dcdb22-6719-4597-a781-bca1370909e5,c0dcdb22-6719-4597-a781-bca1370909e5,1,0,7ebf99c3-33d2-4e4c-ac45-ca4ed0c3c100,7ebf99c3-33d2-4e4c-ac45-ca4ed0c3c100,1,0,7a34f723-cd14-4949-a40f-7ce579bf0449,7a34f723-cd14-4949-a40f-7ce579bf0449,1,0,5cdc9ac7-bba9-4ed1-845a-607976fc4679,5cdc9ac7-bba9-4ed1-845a-607976fc4679,1,0,295f3692-0721-4c41-a69b-171ef20a5018,295f3692-0721-4c41-a69b-171ef20a5018,1,0,86c22871-6d1c-44e0-8ade-ce4bdeb23321,86c22871-6d1c-44e0-8ade-ce4bdeb23321,1,0,da51de81-4d4f-46b5-a308-7b50db6c45a7,da51de81-4d4f-46b5-a308-7b50db6c45a7,1,0,8d31ce6a-4d44-46c6-a11c-47fb33e88691,8d31ce6a-4d44-46c6-a11c-47fb33e88691,1,0,c2a8c2d3-ff13-4a13-acd4-797118c4e767,c2a8c2d3-ff13-4a13-acd4-797118c4e767,1,0,bc6adf75-8666-49f3-9703-b0014dfee123,bc6adf75-8666-49f3-9703-b0014dfee123,1,0,30632f54-b779-4857-a5cc-c53fe8887ee5,30632f54-b779-4857-a5cc-c53fe8887ee5,1,0,087480bb-8c89-4b00-a29b-b7e29926478d,087480bb-8c89-4b00-a29b-b7e29926478d,1,0,685373b7-638a-439a-8cba-703d56e4e404,685373b7-638a-439a-8cba-703d56e4e404,1,0,eafaec9c-030b-4e5f-8fa8-e17dad2feec9,eafaec9c-030b-4e5f-8fa8-e17dad2feec9,1,0,df22b227-b2c3-4e65-9706-7582f99fe59c,df22b227-b2c3-4e65-9706-7582f99fe59c,1,0,35828c88-f1ec-42e7-b189-78748931ee4a,35828c88-f1ec-42e7-b189-78748931ee4a,1,0,8a41b8f1-93fc-44e6-bf45-0d1fa9d24f4a,8a41b8f1-93fc-44e6-bf45-0d1fa9d24f4a,1,0,1cfba08f-d5e5-4833-b494-a25d0477e9c3,1cfba08f-d5e5-4833-b494-a25d0477e9c3,1,0,ae22743b-6d21-4fbb-bb4c-fee53e2b87cb,ae22743b-6d21-4fbb-bb4c-fee53e2b87cb,1,0,921a0a14-8c06-4894-95ce-423000769364,921a0a14-8c06-4894-95ce-423000769364,1,0,3805ee39-a48a-499a-9ef8-9c2a5985404f,3805ee39-a48a-499a-9ef8-9c2a5985404f,1,0,07ccfe87-e1ab-4da7-92cb-a612e0972b0b,07ccfe87-e1ab-4da7-92cb-a612e0972b0b,1,0,08c2f92c-eb05-49e7-bfc9-4a89607b9864,08c2f92c-eb05-49e7-bfc9-4a89607b9864,1,0,6d751379-89a7-49b5-93e5-578329c63d9c,6d751379-89a7-49b5-93e5-578329c63d9c,1,0,c3f156ef-947e-4ebb-883f-4f099a116063,c3f156ef-947e-4ebb-883f-4f099a116063,1,0,5e3ab0a3-c0a6-4f41-85d3-2eede4abb555,5e3ab0a3-c0a6-4f41-85d3-2eede4abb555,1,0,a065ffc3-f50b-4a78-9b84-bfc4e5515a4b,a065ffc3-f50b-4a78-9b84-bfc4e5515a4b,1,0,4cba5a06-1484-4dd1-8e35-2d702c7d96d0,4cba5a06-1484-4dd1-8e35-2d702c7d96d0,1,0,e98e9e56-2995-430c-bd3b-f1070aec15a5,e98e9e56-2995-430c-bd3b-f1070aec15a5,1,0,d35c51b0-4cb7-4f9c-8aac-6a25a1b49adf,d35c51b0-4cb7-4f9c-8aac-6a25a1b49adf,1,0,8a7546f4-bfc9-4732-bf60-43a41e2c8753,8a7546f4-bfc9-4732-bf60-43a41e2c8753,1,0,16244165-d5a4-4012-8bb5-7f5fee1111af,16244165-d5a4-4012-8bb5-7f5fee1111af,1,0,290b72ad-004f-46ab-be5e-47557543b965,290b72ad-004f-46ab-be5e-47557543b965,1,0,e1b2ccf9-5a8f-4008-86f3-d2c7cf5581d1,e1b2ccf9-5a8f-4008-86f3-d2c7cf5581d1,1,0,fa0e0792-bffb-47ce-866f-9e8dbdab17a4,fa0e0792-bffb-47ce-866f-9e8dbdab17a4,1,0,263bcd20-9878-48d4-aac4-b371ec49d8d6,263bcd20-9878-48d4-aac4-b371ec49d8d6,1,0,da1d8660-2757-4cea-bae0-c2210b9406ae,da1d8660-2757-4cea-bae0-c2210b9406ae,1,0,d60329c6-8f48-481d-82e7-18da355cb09c,d60329c6-8f48-481d-82e7-18da355cb09c,1,0,67a04d72-afea-487a-b629-e4b7dfc1df32,67a04d72-afea-487a-b629-e4b7dfc1df32,1,0,c4b14162-b25b-4099-9ec3-7251848ef08a,c4b14162-b25b-4099-9ec3-7251848ef08a,1,0,8eb5ba97-eb38-4357-8bfc-e9618280800d,8eb5ba97-eb38-4357-8bfc-e9618280800d,1,0,b72f73d5-e274-472b-871b-16af72dab603,b72f73d5-e274-472b-871b-16af72dab603,1,0,b008d184-0b61-460d-9490-89ecc1cd58ba,b008d184-0b61-460d-9490-89ecc1cd58ba,1,0,c8340e2f-6958-4bcd-8e17-499c4adfe60b,c8340e2f-6958-4bcd-8e17-499c4adfe60b,1,0,c72831cd-d064-4fe8-9603-64e6d7b8ac4d,c72831cd-d064-4fe8-9603-64e6d7b8ac4d,1,0,03f68d82-752c-45d1-bf9a-60ecd21a2c81,03f68d82-752c-45d1-bf9a-60ecd21a2c81,1,0,307e8938-e347-4eff-b2fb-fd0b8f4aa27f,307e8938-e347-4eff-b2fb-fd0b8f4aa27f,1,0,d4fffc79-2841-49a9-a382-e9e4138984df,d4fffc79-2841-49a9-a382-e9e4138984df,1,0,84e4c572-5b32-46e0-82a0-0c76d4ef5d73,84e4c572-5b32-46e0-82a0-0c76d4ef5d73,1,0,9f41f903-d316-4189-8dc0-603ea9036c1c,9f41f903-d316-4189-8dc0-603ea9036c1c,1,0,e19e70d6-8707-4dde-ae69-7bd97035ca03,e19e70d6-8707-4dde-ae69-7bd97035ca03,1,0,425b5272-1130-457d-8a05-aee8fad681d9,425b5272-1130-457d-8a05-aee8fad681d9,1,0,8d583436-f2a6-4a33-8137-1376f5754643,8d583436-f2a6-4a33-8137-1376f5754643,1,0,4a864e74-41ce-4673-a080-bc3c2ba1b8ee,4a864e74-41ce-4673-a080-bc3c2ba1b8ee,1,0,d279958e-6dd4-4bb0-a65f-c8768b4c4d96,d279958e-6dd4-4bb0-a65f-c8768b4c4d96,1,0,8f09cbed-6f24-461f-9b35-31c64310e74a,8f09cbed-6f24-461f-9b35-31c64310e74a,1,0,2d66502d-77ab-4cc9-9ccf-5433458fae9f,2d66502d-77ab-4cc9-9ccf-5433458fae9f,1,0,cff48da7-3c46-4602-83e8-90c9ea53e107,cff48da7-3c46-4602-83e8-90c9ea53e107,1,0,7155472d-c791-402c-96e1-d25612024c88,7155472d-c791-402c-96e1-d25612024c88,1,0,fb90c261-24a7-4cef-8a2c-85c0e4fdd64a,fb90c261-24a7-4cef-8a2c-85c0e4fdd64a,1,0,9005911d-ea81-48b6-bf50-1a328ff4d7be,9005911d-ea81-48b6-bf50-1a328ff4d7be,1,0,7df12006-c0c0-42a6-b852-bdced72c62e3,7df12006-c0c0-42a6-b852-bdced72c62e3,1,0,9c00987d-3c55-40eb-bae8-f36e71e4ef87,9c00987d-3c55-40eb-bae8-f36e71e4ef87,1,0,29273130-5142-48c9-8399-00e5ab4b6203,29273130-5142-48c9-8399-00e5ab4b6203,1,0,9e14cd7e-1293-4008-baf8-88df6a98abf7,9e14cd7e-1293-4008-baf8-88df6a98abf7,1,0,211d226f-dac6-43d5-8720-952da4339e35,211d226f-dac6-43d5-8720-952da4339e35,1,0,df67cdcd-20ff-46d4-902b-dc4d81ee46bd,df67cdcd-20ff-46d4-902b-dc4d81ee46bd,1,0,98e3aace-52a6-4911-8205-92165adca6de,98e3aace-52a6-4911-8205-92165adca6de,1,0,91f4dbf9-d539-4239-a95d-c1d9e14e50f8,91f4dbf9-d539-4239-a95d-c1d9e14e50f8,1,0,577e5fea-b792-4c8b-b3b3-a03a14b64b04,577e5fea-b792-4c8b-b3b3-a03a14b64b04,1,0,ba5ec2d6-1791-42b5-8e6f-04d1d18e9469,ba5ec2d6-1791-42b5-8e6f-04d1d18e9469,1,0,b18d312b-f9c3-4f37-ac77-d499e949f154,b18d312b-f9c3-4f37-ac77-d499e949f154,1,0,ace2beea-d393-412f-8b71-b845b665e2c4,ace2beea-d393-412f-8b71-b845b665e2c4,1,0,463b8966-a5f9-4a80-82b9-1608a1622e13,463b8966-a5f9-4a80-82b9-1608a1622e13,1,0,3fd4bc77-2a1b-4750-a54a-4171c8d40027,3fd4bc77-2a1b-4750-a54a-4171c8d40027,1,0,5b27fde9-fa80-48b1-aea1-73e132b9a944,5b27fde9-fa80-48b1-aea1-73e132b9a944,1,0,00bf04d6-6a8e-4b13-94cf-36c1c6090cd8,00bf04d6-6a8e-4b13-94cf-36c1c6090cd8,1,0,a747ec6b-f230-49b4-a929-7ed1ba87b078,a747ec6b-f230-49b4-a929-7ed1ba87b078,1,0,796f8fb4-d9cd-40ae-936b-8a70d2eb1121,796f8fb4-d9cd-40ae-936b-8a70d2eb1121,1,0,01cb357c-af28-4855-afae-45b6df19b344,01cb357c-af28-4855-afae-45b6df19b344,1,0,4802e016-a9e9-47d0-916b-b42194a1f388,4802e016-a9e9-47d0-916b-b42194a1f388,1,0,a1740d1f-1b8f-4db5-be5e-0eac44e934b8,a1740d1f-1b8f-4db5-be5e-0eac44e934b8,1,0,4062674a-4a81-494d-82bc-4984cd7c7903,4062674a-4a81-494d-82bc-4984cd7c7903,1,0,782a8801-06ca-4d63-bf8b-63d2320766d8,782a8801-06ca-4d63-bf8b-63d2320766d8,1,0,93a73123-d98c-4286-9269-7bfcedd115e8,93a73123-d98c-4286-9269-7bfcedd115e8,1,0,c5985c02-1824-4ce9-b415-1621dd2ee864,c5985c02-1824-4ce9-b415-1621dd2ee864,1,0,993ce747-cdc9-445f-ad7d-daf53cd5f7e9,993ce747-cdc9-445f-ad7d-daf53cd5f7e9,1,0,e819aaf6-3dfb-492a-8a4a-50a7c6854790,e819aaf6-3dfb-492a-8a4a-50a7c6854790,1,0,62b95ba1-f213-42fb-90f3-a03e8094bc9e,62b95ba1-f213-42fb-90f3-a03e8094bc9e,1,0,619b534d-5605-40d3-9b8c-4443a21d7795,619b534d-5605-40d3-9b8c-4443a21d7795,1,0,a010bbf4-d547-4576-9797-28e3096ffed3,a010bbf4-d547-4576-9797-28e3096ffed3,1,0,a44c3eb2-1054-41ca-82e8-fc35336e7009,a44c3eb2-1054-41ca-82e8-fc35336e7009,1,0,01f67911-4ca7-4668-b970-62c299b98e56,01f67911-4ca7-4668-b970-62c299b98e56,1,0,20c89c94-f77f-4e14-8c97-2a70c1419ce3,20c89c94-f77f-4e14-8c97-2a70c1419ce3,1,0,aa509aa3-dd45-41f3-82c7-59662c2e2c47,aa509aa3-dd45-41f3-82c7-59662c2e2c47,1,0,c4552529-e69e-4c5c-bd66-04b2f7dac281,c4552529-e69e-4c5c-bd66-04b2f7dac281,1,0,381b49ba-793a-4418-9fd4-598844fb72a6,381b49ba-793a-4418-9fd4-598844fb72a6,1,0,1aee302d-df31-49ea-b542-436dc1d79ae1,1aee302d-df31-49ea-b542-436dc1d79ae1,1,0,593509da-d33c-49ff-a62c-a28cbc4651c1,593509da-d33c-49ff-a62c-a28cbc4651c1,1,0,5e346a0b-a322-4565-adb9-70131fb05fa3,5e346a0b-a322-4565-adb9-70131fb05fa3,1,0,9a69c559-194b-4f74-9879-82740260f5f6,9a69c559-194b-4f74-9879-82740260f5f6,1,0,93bf1dcf-670d-4c8b-bdbf-e43c2edf8056,93bf1dcf-670d-4c8b-bdbf-e43c2edf8056,1,0,8a06f980-78f3-42f4-9d96-da2e0f0f36a7,8a06f980-78f3-42f4-9d96-da2e0f0f36a7,1,0,fee2aa74-7a81-4ab2-a457-2edf8ac1aa2d,fee2aa74-7a81-4ab2-a457-2edf8ac1aa2d,1,0,2e19fb7b-270f-4181-b4a1-640280bbbc5c,2e19fb7b-270f-4181-b4a1-640280bbbc5c,1,0,cf69b045-665d-4f6c-827f-5044beacd125,cf69b045-665d-4f6c-827f-5044beacd125,1,0,aa773eef-0c4a-49be-9f5e-9131bc041415,aa773eef-0c4a-49be-9f5e-9131bc041415,1,0,9b31e474-01d4-4c3b-a633-3a2ff3917d62,9b31e474-01d4-4c3b-a633-3a2ff3917d62,1,0,1c09bf33-9b54-4bfd-bc92-e7324025fab0,1c09bf33-9b54-4bfd-bc92-e7324025fab0,1,0,8d7750e9-899f-4434-8702-44cd02681779,8d7750e9-899f-4434-8702-44cd02681779,1,0,d85244dc-c417-4e69-9aa7-7ad313ecb940,d85244dc-c417-4e69-9aa7-7ad313ecb940,1,0,3bebf5e9-68bb-48dc-a39d-cbdca2dbecb1,3bebf5e9-68bb-48dc-a39d-cbdca2dbecb1,1,0,cd392ef0-dedb-4f83-9a2c-a24190ee0dc0,cd392ef0-dedb-4f83-9a2c-a24190ee0dc0,1,0,bb2f0c1c-3cfb-4a26-b6de-5bbeb5614587,bb2f0c1c-3cfb-4a26-b6de-5bbeb5614587,1,0,0713de12-87d5-4877-bd8a-2b6466df67df,0713de12-87d5-4877-bd8a-2b6466df67df,1,0,b848aafc-44fb-4dfe-8eec-233dc08fbbb6,b848aafc-44fb-4dfe-8eec-233dc08fbbb6,1,0,c4d7c569-4649-4f98-a048-45f3c5933670,c4d7c569-4649-4f98-a048-45f3c5933670,1,0,6dc05d69-bd54-4e8a-8985-c2ddfa0aaffb,6dc05d69-bd54-4e8a-8985-c2ddfa0aaffb,1,0,426cbebb-880b-49c5-b046-83c5e071273e,426cbebb-880b-49c5-b046-83c5e071273e,1,0,ad08b104-01f8-4900-a06c-baa1d55eba84,ad08b104-01f8-4900-a06c-baa1d55eba84,1,0,9352d10d-188f-4074-8dd1-7be5c11525e3,9352d10d-188f-4074-8dd1-7be5c11525e3,1,0,1933634a-6f10-48e7-99f0-60ac338f7832,1933634a-6f10-48e7-99f0-60ac338f7832,1,0,655deec5-c079-4748-8521-b3f10c243394,655deec5-c079-4748-8521-b3f10c243394,1,0,f6d4d818-d54c-4337-82cf-abd5e6dbe770,f6d4d818-d54c-4337-82cf-abd5e6dbe770,1,0,656c447b-291f-4e62-81ac-1c004841aa72,656c447b-291f-4e62-81ac-1c004841aa72,1,0,c9a06c8d-2f6d-4e03-bc62-a1a19f17faf3,c9a06c8d-2f6d-4e03-bc62-a1a19f17faf3,1,0,5ba93404-58ad-4321-9a62-27db828f75f6,5ba93404-58ad-4321-9a62-27db828f75f6,1,0,3da20e86-1d83-4935-b425-a91392dc8f35,3da20e86-1d83-4935-b425-a91392dc8f35,1,0,b56f25d2-72a9-4d80-8998-77ac3097c873,b56f25d2-72a9-4d80-8998-77ac3097c873,1,0,03bd775a-e0a1-4205-82ce-6068e73ad134,03bd775a-e0a1-4205-82ce-6068e73ad134,1,0,40bed47b-7754-4a70-b51a-47385fd46e83,40bed47b-7754-4a70-b51a-47385fd46e83,1,0,773ef914-5e7e-4ec1-bcdb-b2d111b560e6,773ef914-5e7e-4ec1-bcdb-b2d111b560e6,1,0,1e5a4f93-1ab9-4775-9538-2a1772215d89,1e5a4f93-1ab9-4775-9538-2a1772215d89,1,0,c25db165-0734-4fef-b161-e5164954a616,c25db165-0734-4fef-b161-e5164954a616,1,0,37e3d914-643e-4963-b4a0-7bc6727c0c9b,37e3d914-643e-4963-b4a0-7bc6727c0c9b,1,0,b6902500-3e03-4e83-a077-00500abc00b6,b6902500-3e03-4e83-a077-00500abc00b6,1,0,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,344cb0de-315d-4d05-93f8-8a1f53208470,344cb0de-315d-4d05-93f8-8a1f53208470,1,0,cd869887-0b0e-43db-8b51-04fe4a1341d5,cd869887-0b0e-43db-8b51-04fe4a1341d5,1,0,98aa5d5e-6c0e-4b9b-a3fa-335635d15217,98aa5d5e-6c0e-4b9b-a3fa-335635d15217,1,0,a7973409-b18e-4b88-ad50-e2ae89470d8f,a7973409-b18e-4b88-ad50-e2ae89470d8f,1,0,a537875e-492e-4cf2-96e9-e2e97bb206da,a537875e-492e-4cf2-96e9-e2e97bb206da,1,0,cd8fd85f-f02e-4f11-b4b4-40670febfaca,cd8fd85f-f02e-4f11-b4b4-40670febfaca,1,0,3f023afb-c02a-42ee-9afe-0f47ef3fe721,3f023afb-c02a-42ee-9afe-0f47ef3fe721,1,0,d7fe80d3-7fcf-427e-a991-5384f0c3947e,d7fe80d3-7fcf-427e-a991-5384f0c3947e,1,0,085a08f3-9d93-429d-9b1b-9065ab8363f7,085a08f3-9d93-429d-9b1b-9065ab8363f7,1,0,a530c0a1-c1d2-40bb-9d0e-320074dbb684,a530c0a1-c1d2-40bb-9d0e-320074dbb684,1,0,55c63580-16f1-4d6f-a40b-e630f71ebb98,55c63580-16f1-4d6f-a40b-e630f71ebb98,1,0,0a136ad9-22ad-4ba7-a31a-40a193b49d26,0a136ad9-22ad-4ba7-a31a-40a193b49d26,1,0,208c7b8c-3df9-4441-8ebf-34ffa81572a2,208c7b8c-3df9-4441-8ebf-34ffa81572a2,1,0,8c17fd7c-74d7-496a-a843-42022afb0707,8c17fd7c-74d7-496a-a843-42022afb0707,1,0,091ccac1-9a63-4a89-bb0c-333b274b0c70,091ccac1-9a63-4a89-bb0c-333b274b0c70,1,0,b456d820-8034-4381-960d-66d9f86b0a4b,b456d820-8034-4381-960d-66d9f86b0a4b,1,0,bd55fd03-cf67-4333-a554-98e03d18f780,bd55fd03-cf67-4333-a554-98e03d18f780,1,0,6eac5f7b-0952-4c94-9028-529b14ffcd4f,6eac5f7b-0952-4c94-9028-529b14ffcd4f,1,0,1a7c774d-5b86-4051-b797-3081e19fa30a,1a7c774d-5b86-4051-b797-3081e19fa30a,1,0,00949768-5833-4fe2-8752-b009d1bceef8,00949768-5833-4fe2-8752-b009d1bceef8,1,0,167455d1-6658-409f-834c-f6ccfe7b25de,167455d1-6658-409f-834c-f6ccfe7b25de,1,0,c5b3ca21-8f7b-4933-853c-7d95b17b5631,c5b3ca21-8f7b-4933-853c-7d95b17b5631,1,0,8b0faa1e-09da-4ba4-894e-e86abc5d39df,8b0faa1e-09da-4ba4-894e-e86abc5d39df,1,0,cb50b309-1b6c-400c-9e9e-67204dcccaae,cb50b309-1b6c-400c-9e9e-67204dcccaae,1,0,e2b482cb-6954-4e6a-abe9-d0a01f64b73a,e2b482cb-6954-4e6a-abe9-d0a01f64b73a,1,0,2a6e1f2b-7378-456b-9657-9e971eaff716,2a6e1f2b-7378-456b-9657-9e971eaff716,1,0,c3cdea20-3055-4b4e-a531-a02d4f3ed294,c3cdea20-3055-4b4e-a531-a02d4f3ed294,1,0,7183d525-212a-42f3-a7e5-eb9deaeaa4a3,7183d525-212a-42f3-a7e5-eb9deaeaa4a3,1,0,b82b27cc-e81c-4b7c-9833-ea4f2ce21edb,b82b27cc-e81c-4b7c-9833-ea4f2ce21edb,1,0,4347f77e-bad9-4525-90a0-794787f03585,4347f77e-bad9-4525-90a0-794787f03585,1,0,cfde3330-2bed-4273-8d69-c213ebdde247,cfde3330-2bed-4273-8d69-c213ebdde247,1,0,2d6ca049-89a5-437e-971c-b8e42f61b460,2d6ca049-89a5-437e-971c-b8e42f61b460,1,0,c450ebe1-4223-4a7a-b9fa-374d5c13dc8c,c450ebe1-4223-4a7a-b9fa-374d5c13dc8c,1,0,271d58d0-4449-40cc-bae9-cc4c50eebd9b,271d58d0-4449-40cc-bae9-cc4c50eebd9b,1,0,58df9322-c786-4dd1-af49-7cd164b378da,58df9322-c786-4dd1-af49-7cd164b378da,1,0,8d48de7f-61d6-4462-9c14-f728206a482c,8d48de7f-61d6-4462-9c14-f728206a482c,1,0,a87e890a-8924-4f56-9e37-04579b95297a,a87e890a-8924-4f56-9e37-04579b95297a,1,0,c71d4fa4-86b0-41e2-8b6a-cfb91e131eaf,c71d4fa4-86b0-41e2-8b6a-cfb91e131eaf,1,0,4c1f2581-ee42-4df5-9169-20205a18a9be,4c1f2581-ee42-4df5-9169-20205a18a9be,1,0,bb3d9ea3-8895-4950-9ee9-4249ca983d48,bb3d9ea3-8895-4950-9ee9-4249ca983d48,1,0,86ea21fa-5ecc-4d81-b6ad-d71e7ed39009,86ea21fa-5ecc-4d81-b6ad-d71e7ed39009,1,0,b806d2b6-bbd1-4abd-9471-7791603a2fcf,b806d2b6-bbd1-4abd-9471-7791603a2fcf,1,0,d7aa519b-9a2e-4946-bd06-9ac22bb7c1e4,d7aa519b-9a2e-4946-bd06-9ac22bb7c1e4,1,0,ecee1ec8-aa1f-4b90-a1b3-2538a53c0dd7,ecee1ec8-aa1f-4b90-a1b3-2538a53c0dd7,1,0,34f50dd9-de16-4013-a2ef-6595d9c28930,34f50dd9-de16-4013-a2ef-6595d9c28930,1,0,56fcca65-3429-4409-bce7-f434f6530a74,56fcca65-3429-4409-bce7-f434f6530a74,1,0,5236ca8d-a4a6-4df8-a6a3-5cfe02c49aeb,5236ca8d-a4a6-4df8-a6a3-5cfe02c49aeb,1,0,bcfabf25-ae2f-4f73-836c-2cab3617a0b6,bcfabf25-ae2f-4f73-836c-2cab3617a0b6,1,0,b286f047-a4d0-4808-b1b4-27997ead6d49,b286f047-a4d0-4808-b1b4-27997ead6d49,1,0,49da2d3a-657a-4cfd-8e37-422b96d2cda5,49da2d3a-657a-4cfd-8e37-422b96d2cda5,1,0,fced16ae-abee-4fbe-9582-dfd368d5610a,fced16ae-abee-4fbe-9582-dfd368d5610a,1,0,afe60bad-1585-487f-9a39-9b9e031f9576,afe60bad-1585-487f-9a39-9b9e031f9576,1,0,4c4f0475-bd11-40c8-af0d-8affec6f838d,4c4f0475-bd11-40c8-af0d-8affec6f838d,1,0,7aee36ac-bbd1-4b06-8266-b7325fb9ce3c,7aee36ac-bbd1-4b06-8266-b7325fb9ce3c,1,0,855439d7-a621-48f5-b6d9-bc2bbd11ad90,855439d7-a621-48f5-b6d9-bc2bbd11ad90,1,0,4e0ec0f0-eb44-41b0-b950-88fdb6ac0db2,4e0ec0f0-eb44-41b0-b950-88fdb6ac0db2,1,0,2f25e742-555b-4db8-bff2-2d345ce2a93a,2f25e742-555b-4db8-bff2-2d345ce2a93a,1,0,303d8c17-4303-4f1d-8bed-51cd7ea0a4b2,303d8c17-4303-4f1d-8bed-51cd7ea0a4b2,1,0,46affd3a-f31c-4432-bd58-2f2b1ed9bc4e,46affd3a-f31c-4432-bd58-2f2b1ed9bc4e,1,0,a7fee9d3-569d-4b5b-bd47-44790e0095f5,a7fee9d3-569d-4b5b-bd47-44790e0095f5,1,0,a258fe12-7e55-4f89-86fa-962b1d2947ac,a258fe12-7e55-4f89-86fa-962b1d2947ac,1,0,93701593-5ac8-4266-b471-7e9ed35a9c3e,93701593-5ac8-4266-b471-7e9ed35a9c3e,1,0,0fdb864e-ede9-4777-835c-0804968ee544,0fdb864e-ede9-4777-835c-0804968ee544,1,0,04c45a51-4a8e-48fa-a39c-f67ce2079fc4,04c45a51-4a8e-48fa-a39c-f67ce2079fc4,1,0,b46546fe-3d6b-473f-a7cb-ff3b3ae0bafe,b46546fe-3d6b-473f-a7cb-ff3b3ae0bafe,1,0,e7b1810c-8e6c-4759-9e6f-c754b5a1ac77,e7b1810c-8e6c-4759-9e6f-c754b5a1ac77,1,0,5dee9814-fe38-4631-8148-8d6c87ef6f47,5dee9814-fe38-4631-8148-8d6c87ef6f47,1,0,37d17053-5c2b-4972-b6a5-a589f2ddbde6,37d17053-5c2b-4972-b6a5-a589f2ddbde6,1,0,c349968a-3f87-425b-8efb-d847934dee4b,c349968a-3f87-425b-8efb-d847934dee4b,1,0,3bb8dc33-970c-4c58-9036-ce716d963847,3bb8dc33-970c-4c58-9036-ce716d963847,1,0,fae0d2e0-1bcd-4a77-86d6-407ca05c1c95,fae0d2e0-1bcd-4a77-86d6-407ca05c1c95,1,0,b3ff39fa-f665-4d01-9a2a-69722e6b1071,b3ff39fa-f665-4d01-9a2a-69722e6b1071,1,0,0abacb0a-ce00-474e-8aec-35685c51ddef,0abacb0a-ce00-474e-8aec-35685c51ddef,1,0,ae407b17-03aa-4268-8603-58d6714dae89,ae407b17-03aa-4268-8603-58d6714dae89,1,0,5c0ce79b-97a9-4917-9b02-a4548a97d5a1,5c0ce79b-97a9-4917-9b02-a4548a97d5a1,1,0,c552cfac-d3ef-4b63-a0b9-7c79261ff9f3,c552cfac-d3ef-4b63-a0b9-7c79261ff9f3,1,0,5bb6e52c-ac26-4143-8e90-f04f703f823b,5bb6e52c-ac26-4143-8e90-f04f703f823b,1,0,579baaa4-6493-4d99-8744-6399757295c7,579baaa4-6493-4d99-8744-6399757295c7,1,0,ae6d0e12-8857-476c-b4b2-f03295cbed3e,ae6d0e12-8857-476c-b4b2-f03295cbed3e,1,0,cc8e3172-491d-45d8-a7eb-fc6c400845cb,cc8e3172-491d-45d8-a7eb-fc6c400845cb,1,0,d7cfc87f-ac09-44aa-91d9-6511c408c5cb,d7cfc87f-ac09-44aa-91d9-6511c408c5cb,1,0,7ee1e0d0-9735-45da-bd24-c0dbabfd5b1e,7ee1e0d0-9735-45da-bd24-c0dbabfd5b1e,1,0,bd0e3bd4-1207-41ea-8dfc-afa8f7d08cc2,bd0e3bd4-1207-41ea-8dfc-afa8f7d08cc2,1,0,51d83895-5692-4479-9612-07c790d19dff,51d83895-5692-4479-9612-07c790d19dff,1,0,9c1325af-7492-42be-b3af-51b692534510,9c1325af-7492-42be-b3af-51b692534510,1,0,dface15c-cd65-4fb1-b4dd-b513086d3f8e,dface15c-cd65-4fb1-b4dd-b513086d3f8e,1,0,d854b528-8456-4453-9c2d-4f96caf10481,d854b528-8456-4453-9c2d-4f96caf10481,1,0,245f870e-a53a-4d86-aa0a-c0c7709b8acb,245f870e-a53a-4d86-aa0a-c0c7709b8acb,1,0,476f6bfa-b10c-4e0f-8499-23c652715b3f,476f6bfa-b10c-4e0f-8499-23c652715b3f,1,0,65c9754b-53f6-4616-a9d4-74826f7b0ced,65c9754b-53f6-4616-a9d4-74826f7b0ced,1,0,eca2b076-d218-4d1c-948b-7894edf9fa49,eca2b076-d218-4d1c-948b-7894edf9fa49,1,0,d6969c1e-e13c-4542-abb7-9cf6bb50b8e2,d6969c1e-e13c-4542-abb7-9cf6bb50b8e2,1,0,ccd91f94-d3f1-4aa3-90cf-081d72c4cab1,ccd91f94-d3f1-4aa3-90cf-081d72c4cab1,1,0,aa7d5ca4-3c02-4ca1-a790-2435ee9f9f02,aa7d5ca4-3c02-4ca1-a790-2435ee9f9f02,1,0,b7e85f5c-4312-44c6-895a-3f636a8c78d8,b7e85f5c-4312-44c6-895a-3f636a8c78d8,1,0,3b6e7ee6-0ef5-464a-a01a-6143479c7a61,3b6e7ee6-0ef5-464a-a01a-6143479c7a61,1,0,1969e8d1-0a82-44cb-a0d4-e5badb1d28d4,1969e8d1-0a82-44cb-a0d4-e5badb1d28d4,1,0,a1afacc5-f49a-4df2-a44d-479594d50179,a1afacc5-f49a-4df2-a44d-479594d50179,1,0,fe70eba3-7477-4a38-a511-d69960abb928,fe70eba3-7477-4a38-a511-d69960abb928,1,0,6534ea96-2145-49e6-9739-f59459dc7f6b,6534ea96-2145-49e6-9739-f59459dc7f6b,1,0,f49bffa0-cad6-4801-b82e-21aa580e72e6,f49bffa0-cad6-4801-b82e-21aa580e72e6,1,0,bbbfb817-8db3-4415-86c3-af028276d6e9,bbbfb817-8db3-4415-86c3-af028276d6e9,1,0,6a91112c-f6cc-47a0-9d26-a36c7702af7d,6a91112c-f6cc-47a0-9d26-a36c7702af7d,1,0,40a59681-f31d-4fb9-9301-67c1430590e0,40a59681-f31d-4fb9-9301-67c1430590e0,1,0,cb92dc2e-6053-4233-a408-4464514b1257,cb92dc2e-6053-4233-a408-4464514b1257,1,0,8cd65ad3-a7a3-46f6-9061-e8751fd5073e,8cd65ad3-a7a3-46f6-9061-e8751fd5073e,1,0,85550a7a-8fe0-4296-ace5-63cf053536b4,85550a7a-8fe0-4296-ace5-63cf053536b4,1,0,cf1bd9cd-2ef2-4868-b6c0-5160860690f7,cf1bd9cd-2ef2-4868-b6c0-5160860690f7,1,0,9c3bc502-bcb1-4c90-ae43-53c798958339,9c3bc502-bcb1-4c90-ae43-53c798958339,1,0,3f8b6411-6606-4d27-891e-7c77be47c5f9,3f8b6411-6606-4d27-891e-7c77be47c5f9,1,0,bed3f0b2-40c6-4323-9bca-cb8864e38ec0,bed3f0b2-40c6-4323-9bca-cb8864e38ec0,1,0,5eb4ca7f-027a-4860-a167-e6b424527e7a,5eb4ca7f-027a-4860-a167-e6b424527e7a,1,0,f9b98ba5-1fa8-42a4-b1a2-dd71874083cb,f9b98ba5-1fa8-42a4-b1a2-dd71874083cb,1,0,6871015f-d959-4a77-a091-a23cb4ebd8f9,6871015f-d959-4a77-a091-a23cb4ebd8f9,1,0,e5e1631b-a494-4e73-b356-b4330b84cc88,e5e1631b-a494-4e73-b356-b4330b84cc88,1,0,f8f0857f-2c75-471a-ae0b-a3a265e1eb25,f8f0857f-2c75-471a-ae0b-a3a265e1eb25,1,0,a23f97fb-7ac9-4941-a2c6-bbff6c36ac12,a23f97fb-7ac9-4941-a2c6-bbff6c36ac12,1,0,80cf54ed-8677-4c89-a378-0abef6c64010,80cf54ed-8677-4c89-a378-0abef6c64010,1,0,f0dec7b3-2d6a-44ce-a1da-9c71ccd37539,f0dec7b3-2d6a-44ce-a1da-9c71ccd37539,1,0,56ee3afd-5ae6-421e-b9f3-26505e40f100,56ee3afd-5ae6-421e-b9f3-26505e40f100,1,0,63c9a839-78b2-4706-b380-5aedf6914930,63c9a839-78b2-4706-b380-5aedf6914930,1,0,40f5c1cb-2654-4738-bb44-6734b0e3490b,40f5c1cb-2654-4738-bb44-6734b0e3490b,1,0,2ec484b1-95eb-43a7-9430-1c1ef49f05af,2ec484b1-95eb-43a7-9430-1c1ef49f05af,1,0,1a314ce2-03bc-4267-89a9-bb5bb866f552,1a314ce2-03bc-4267-89a9-bb5bb866f552,1,0,e3b783a6-5ea2-4cd4-955b-df63d93c1f25,e3b783a6-5ea2-4cd4-955b-df63d93c1f25,1,0,f8ab62ad-7776-49ae-b1bb-51bea9a9992b,f8ab62ad-7776-49ae-b1bb-51bea9a9992b,1,0,e859dd18-8baf-49c0-b7a0-1205b6c125d3,e859dd18-8baf-49c0-b7a0-1205b6c125d3,1,0,da59378e-0a97-4cff-977b-cc51967068ee,da59378e-0a97-4cff-977b-cc51967068ee,1,0,bbaad46d-f60d-49e6-a077-075366bca47e,bbaad46d-f60d-49e6-a077-075366bca47e,1,0,0d9f5703-91e4-4769-bedd-5bd974f2f617,0d9f5703-91e4-4769-bedd-5bd974f2f617,1,0,926cdf17-1929-43d6-8205-858aab558ad9,926cdf17-1929-43d6-8205-858aab558ad9,1,0,5ec6838f-2d70-4f91-b41b-16adfe8ed587,5ec6838f-2d70-4f91-b41b-16adfe8ed587,1,0,6420ad7e-61ca-4af9-9715-f2b0c3e2c58f,6420ad7e-61ca-4af9-9715-f2b0c3e2c58f,1,0,bee8b8a0-f058-44cb-822c-620351567627,bee8b8a0-f058-44cb-822c-620351567627,1,0,26365e29-903b-47fd-ad96-e0d87f5d6e87,26365e29-903b-47fd-ad96-e0d87f5d6e87,1,0,569180cb-ce54-4267-94b9-332e35e3c17d,569180cb-ce54-4267-94b9-332e35e3c17d,1,0,55bce105-51c0-452e-9eec-b960fe740db2,55bce105-51c0-452e-9eec-b960fe740db2,1,0,776c171d-5dd5-4965-94dc-c2fe6792d5f2,776c171d-5dd5-4965-94dc-c2fe6792d5f2,1,0,86bb1105-702a-47be-906a-1821a69b1b6c,86bb1105-702a-47be-906a-1821a69b1b6c,1,0,40653767-9542-44e9-a84b-ffee75584638,40653767-9542-44e9-a84b-ffee75584638,1,0,49bd152e-479a-46fe-b3af-26ed9181dc34,49bd152e-479a-46fe-b3af-26ed9181dc34,1,0,0a742dd2-1ff4-42de-b303-f2bb01b36fe2,0a742dd2-1ff4-42de-b303-f2bb01b36fe2,1,0,69e13959-51ad-4ac2-9cfc-17ac28b78c78,69e13959-51ad-4ac2-9cfc-17ac28b78c78,1,0,f890ca1b-f2c2-4630-9002-301b759ca6d9,f890ca1b-f2c2-4630-9002-301b759ca6d9,1,0,08c8a9bf-7b89-4d0e-a496-4c7efeca0577,08c8a9bf-7b89-4d0e-a496-4c7efeca0577,1,0,f6c2b015-9cfc-40d2-a93f-b0e88db4a23f,f6c2b015-9cfc-40d2-a93f-b0e88db4a23f,1,0,103f3d8f-e47a-4772-bdd7-dd5f8508d22b,103f3d8f-e47a-4772-bdd7-dd5f8508d22b,1,0,ba8ea271-8716-49ef-8b10-f4b5798c1f62,ba8ea271-8716-49ef-8b10-f4b5798c1f62,1,0,3633c30c-9479-4801-89cc-a5734a41e465,3633c30c-9479-4801-89cc-a5734a41e465,1,0,f295c68d-7e29-48b8-a95a-56e96d9843c1,f295c68d-7e29-48b8-a95a-56e96d9843c1,1,0,7ebe16ee-8e5d-4b05-89b5-9539f73be90c,7ebe16ee-8e5d-4b05-89b5-9539f73be90c,1,0,ea5d0221-fb1e-4626-862a-9c1209365d8f,ea5d0221-fb1e-4626-862a-9c1209365d8f,1,0,12bce69b-933c-4ce4-9d29-a47f3db0226e,12bce69b-933c-4ce4-9d29-a47f3db0226e,1,0,82dcd6a3-c35b-421c-a8f9-77855ad2abca,82dcd6a3-c35b-421c-a8f9-77855ad2abca,1,0,ad0b1720-282e-49d4-af80-324a887963c3,ad0b1720-282e-49d4-af80-324a887963c3,1,0,9ec6fc35-e84e-4f82-b616-5c02e945cc8f,9ec6fc35-e84e-4f82-b616-5c02e945cc8f,1,0,a2c42946-1cdb-457a-a45b-97781cfb4a15,a2c42946-1cdb-457a-a45b-97781cfb4a15,1,0,20adf54c-044c-4bea-8028-b6d20917a030,20adf54c-044c-4bea-8028-b6d20917a030,1,0,dea6b05f-d3e1-4ff4-8f71-6a0c18134e94,dea6b05f-d3e1-4ff4-8f71-6a0c18134e94,1,0,fcb97a46-d5fd-4bb5-b899-17723a9fe346,fcb97a46-d5fd-4bb5-b899-17723a9fe346,1,0,a666af62-aa5d-4b2b-b9e5-017d1c93ae6a,a666af62-aa5d-4b2b-b9e5-017d1c93ae6a,1,0,7604b15a-8c5e-4515-84b9-c1d36f9efd0a,7604b15a-8c5e-4515-84b9-c1d36f9efd0a,1,0,a1a44832-6026-47ae-affd-5b6d52e84307,a1a44832-6026-47ae-affd-5b6d52e84307,1,0,d2fd8650-d13a-411d-8206-61b16016bd82,d2fd8650-d13a-411d-8206-61b16016bd82,1,0,f98bcdb8-6eed-4b4f-b3da-d80b5e8bed44,f98bcdb8-6eed-4b4f-b3da-d80b5e8bed44,1,0,fbaa5b0a-56dc-4bf1-b1b2-e48073f63d13,fbaa5b0a-56dc-4bf1-b1b2-e48073f63d13,1,0,a92acf0e-9132-4456-9a82-1543d98ca453,a92acf0e-9132-4456-9a82-1543d98ca453,1,0,4033eb31-8281-402a-afff-431fa36e589e,4033eb31-8281-402a-afff-431fa36e589e,1,0,5a1e1da5-7307-4f48-bb1c-2977fc4d7cef,5a1e1da5-7307-4f48-bb1c-2977fc4d7cef,1,0,f59488c7-4643-4988-8043-5c9724e04279,f59488c7-4643-4988-8043-5c9724e04279,1,0,cfe022b5-7647-4b5c-a2bd-f5d313f4a9db,cfe022b5-7647-4b5c-a2bd-f5d313f4a9db,1,0,3c0a9c45-8e57-43fa-8ae3-26b15571f2cd,3c0a9c45-8e57-43fa-8ae3-26b15571f2cd,1,0,85223d37-2503-4783-94dc-fe6265e718d5,85223d37-2503-4783-94dc-fe6265e718d5,1,0,0918cd76-56e5-4314-8a1c-c21d023ba6f8,0918cd76-56e5-4314-8a1c-c21d023ba6f8,1,0,9db21c2e-79fa-44e4-902e-416abfccb54a,9db21c2e-79fa-44e4-902e-416abfccb54a,1,0,fb082db3-197b-4d1e-b9ea-362624d547ee,fb082db3-197b-4d1e-b9ea-362624d547ee,1,0,c09dcf00-a45a-4487-99c5-d3a37956ec88,c09dcf00-a45a-4487-99c5-d3a37956ec88,1,0,531a5a0c-6ac9-4e93-8caa-42d9aad0bc82,531a5a0c-6ac9-4e93-8caa-42d9aad0bc82,1,0,2714e1b6-6b02-43a1-bc94-2934b429ed35,2714e1b6-6b02-43a1-bc94-2934b429ed35,1,0,e33c73b2-ef0b-49b7-a65f-ab2c814ad256,e33c73b2-ef0b-49b7-a65f-ab2c814ad256,1,0,4c7016da-9991-4917-8eaa-e760cc9e29d1,4c7016da-9991-4917-8eaa-e760cc9e29d1,1,0,febb3770-5c11-4ada-9e49-a27950bdaddf,febb3770-5c11-4ada-9e49-a27950bdaddf,1,0,d7b57669-e538-4e54-ab1b-8428f0586466,d7b57669-e538-4e54-ab1b-8428f0586466,1,0,9c484a15-039e-416d-af97-4c2bd90fd873,9c484a15-039e-416d-af97-4c2bd90fd873,1,0,534855e3-4cf2-471c-b982-7138917050c9,534855e3-4cf2-471c-b982-7138917050c9,1,0,4c72b944-d000-4920-aec8-54029f88ddf4,4c72b944-d000-4920-aec8-54029f88ddf4,1,0,b4033d05-05c2-4617-80d9-abfa389c47f4,b4033d05-05c2-4617-80d9-abfa389c47f4,1,0,aa29e1be-4e99-4136-8dc1-0124908979ad,aa29e1be-4e99-4136-8dc1-0124908979ad,1,0,0d76799d-7fc7-446b-88fb-dca839de00a5,0d76799d-7fc7-446b-88fb-dca839de00a5,1,0,cb5674c3-0d91-4948-bafd-d9ef44a2a69d,cb5674c3-0d91-4948-bafd-d9ef44a2a69d,1,0,ea4a869c-861c-412c-a3be-de1c57d1a251,ea4a869c-861c-412c-a3be-de1c57d1a251,1,0,eeafcc8c-fbe2-4bb4-8b8a-cf663208258d,eeafcc8c-fbe2-4bb4-8b8a-cf663208258d,1,0,6a3bd39a-59cb-4763-b49f-7ab67167a8b7,6a3bd39a-59cb-4763-b49f-7ab67167a8b7,1,0,6c1d8f6c-db33-46dc-8824-aceacb4bf9c1,6c1d8f6c-db33-46dc-8824-aceacb4bf9c1,1,0,50ac390d-324f-40bd-b3df-0468a63b94b6,50ac390d-324f-40bd-b3df-0468a63b94b6,1,0,80337710-2c60-45c4-ae1f-bb42731fb611,80337710-2c60-45c4-ae1f-bb42731fb611,1,0,9dcf467e-7701-4c7b-b747-95f4d9b9295c,9dcf467e-7701-4c7b-b747-95f4d9b9295c,1,0,dd07b255-25af-466e-a224-c561a8ca567b,dd07b255-25af-466e-a224-c561a8ca567b,1,0,77149f7a-8a76-4569-9487-991c41e132ef,77149f7a-8a76-4569-9487-991c41e132ef,1,0,1e9e115a-e65b-4346-b0d3-47cf1dbe75f2,1e9e115a-e65b-4346-b0d3-47cf1dbe75f2,1,0,9e1be65e-986f-4d21-91f0-15c66db0c947,9e1be65e-986f-4d21-91f0-15c66db0c947,1,0,67993b79-6aca-4641-b2e2-0a15f44e47d5,67993b79-6aca-4641-b2e2-0a15f44e47d5,1,0,d2fe4578-a1f8-4586-b052-fa71d25365c9,d2fe4578-a1f8-4586-b052-fa71d25365c9,1,0,f31f3dab-5796-47ac-a54d-3081f8cad817,f31f3dab-5796-47ac-a54d-3081f8cad817,1,0,cd59707e-b9e4-4038-8203-ae22a8060e8d,cd59707e-b9e4-4038-8203-ae22a8060e8d,1,0,db497857-33d3-49a1-b328-dfc62c973ecb,db497857-33d3-49a1-b328-dfc62c973ecb,1,0,139c001c-7b07-465a-9187-399ad32d294f,139c001c-7b07-465a-9187-399ad32d294f,1,0,5d228ce4-069e-4f98-beed-b8e1de17c3d9,5d228ce4-069e-4f98-beed-b8e1de17c3d9,1,0,9770fc09-87bf-4fce-9b0d-410efd30edae,9770fc09-87bf-4fce-9b0d-410efd30edae,1,0,f3d8590a-dcfa-4d41-8d03-642b99ffa040,f3d8590a-dcfa-4d41-8d03-642b99ffa040,1,0,3d73d5ff-995e-40ed-a401-cec2a3d12c8f,3d73d5ff-995e-40ed-a401-cec2a3d12c8f,1,0,20156709-1481-4007-8e89-9ce79fc589fc,20156709-1481-4007-8e89-9ce79fc589fc,1,0,fbcda361-0ef2-47b4-ba1c-1d1952898bd3,fbcda361-0ef2-47b4-ba1c-1d1952898bd3,1,0,7e7c5abd-b645-4de5-a40e-5805ec4456e2,7e7c5abd-b645-4de5-a40e-5805ec4456e2,1,0,763a16c3-a728-4b65-a485-705990310b4a,763a16c3-a728-4b65-a485-705990310b4a,1,0,65338920-c744-4d1e-b351-848b90a3feda,65338920-c744-4d1e-b351-848b90a3feda,1,0,2aedb1ac-caf1-45c7-913e-82a36637d5d4,2aedb1ac-caf1-45c7-913e-82a36637d5d4,1,0,e177e258-7d0c-4fe1-80e5-3b89de9e23d9,e177e258-7d0c-4fe1-80e5-3b89de9e23d9,1,0,3f25ac9f-c6b4-4ccc-bec4-a90c99403823,3f25ac9f-c6b4-4ccc-bec4-a90c99403823,1,0,56177464-5e9f-4598-96bc-eb311993c503,56177464-5e9f-4598-96bc-eb311993c503,1,0,c2308e60-2844-4bd8-bc8a-c9c20e5fc62d,c2308e60-2844-4bd8-bc8a-c9c20e5fc62d,1,0,bdfe65f4-4174-4e66-915c-943137981cf0,bdfe65f4-4174-4e66-915c-943137981cf0,1,0,5271de2d-d3a0-4128-90e0-cd8e1ea2ad30,5271de2d-d3a0-4128-90e0-cd8e1ea2ad30,1,0,c895d58a-5be1-4157-81af-f4f6db9b4b9e,c895d58a-5be1-4157-81af-f4f6db9b4b9e,1,0,0d89036c-af6e-4709-847c-0dab74a33d72,0d89036c-af6e-4709-847c-0dab74a33d72,1,0,7d223aab-d4f6-41d5-a701-6fe03517cf50,7d223aab-d4f6-41d5-a701-6fe03517cf50,1,0,631cdd15-eb1f-4903-9073-4de3911ba2e6,631cdd15-eb1f-4903-9073-4de3911ba2e6,1,0,6b10ab0a-8d4e-4847-9ce7-663fb4770c35,6b10ab0a-8d4e-4847-9ce7-663fb4770c35,1,0,42630eee-ce93-40a8-b96e-3eb759f48976,42630eee-ce93-40a8-b96e-3eb759f48976,1,0,174e0187-cf34-4949-8dc2-a1f9aece78dc,174e0187-cf34-4949-8dc2-a1f9aece78dc,1,0,5d9f2db6-704d-45cb-96c3-e59e47ad4fea,5d9f2db6-704d-45cb-96c3-e59e47ad4fea,1,0,e4dbeb50-292f-452f-a0da-a55e5ea936e4,e4dbeb50-292f-452f-a0da-a55e5ea936e4,1,0,8ce6cc1a-8570-4704-b9a3-44e815b2e753,8ce6cc1a-8570-4704-b9a3-44e815b2e753,1,0,71aa2bf7-85c9-40f3-a9b0-f6d666eddd28,71aa2bf7-85c9-40f3-a9b0-f6d666eddd28,1,0,497cbe4d-586d-48a2-8e98-d20e3e09ed42,497cbe4d-586d-48a2-8e98-d20e3e09ed42,1,0,38b7679d-3739-4572-baf2-d8c7b2a94f0a,38b7679d-3739-4572-baf2-d8c7b2a94f0a,1,0,1470f052-f032-46bc-b1ee-54555e725dfd,1470f052-f032-46bc-b1ee-54555e725dfd,1,0,4019a5e9-1f50-44b9-98ba-87c07a0ce4e5,4019a5e9-1f50-44b9-98ba-87c07a0ce4e5,1,0,7d336fdd-5cbf-4c92-a783-f451f7590502,7d336fdd-5cbf-4c92-a783-f451f7590502,1,0,ee8af8ee-e49a-4511-9a91-48814ab99d23,ee8af8ee-e49a-4511-9a91-48814ab99d23,1,0,3a7d9d49-b5e5-4c5c-958e-a4c6afda8b9d,3a7d9d49-b5e5-4c5c-958e-a4c6afda8b9d,1,0,bc10ad8f-383c-469a-8c0e-60805161055b,bc10ad8f-383c-469a-8c0e-60805161055b,1,0,86760ecb-2ddd-40ce-bc4f-94c23027a55e,86760ecb-2ddd-40ce-bc4f-94c23027a55e,1,0,6fbf844e-ee8d-490f-9177-6392d262312f,6fbf844e-ee8d-490f-9177-6392d262312f,1,0,703a3e8a-0204-4e8f-8fa0-a2ed1aeb7662,703a3e8a-0204-4e8f-8fa0-a2ed1aeb7662,1,0,f5d90a5a-1adb-49d6-8640-2e4054bdb99f,f5d90a5a-1adb-49d6-8640-2e4054bdb99f,1,0,37722a34-1148-4cc8-95e6-4645ae9cca98,37722a34-1148-4cc8-95e6-4645ae9cca98,1,0,11f32e0f-7d16-4ebd-9cef-fffd2d64e70a,11f32e0f-7d16-4ebd-9cef-fffd2d64e70a,1,0,cc34bd23-de0a-4b09-8333-e4693576b9f4,cc34bd23-de0a-4b09-8333-e4693576b9f4,1,0,b16d5e79-9d7e-4d3e-9be8-3b2a932abf78,b16d5e79-9d7e-4d3e-9be8-3b2a932abf78,1,0,903af13a-1f73-4145-a3d0-971c3be5fbe6,903af13a-1f73-4145-a3d0-971c3be5fbe6,1,0,fb42ad06-d5a4-40ea-817c-fa7ff385d8db,fb42ad06-d5a4-40ea-817c-fa7ff385d8db,1,0,bc110a6a-26fa-4aa1-a2ef-bdaeaa0a33af,bc110a6a-26fa-4aa1-a2ef-bdaeaa0a33af,1,0,953dbad6-4f5c-4319-874a-db358a77d001,953dbad6-4f5c-4319-874a-db358a77d001,1,0,05243f56-7e9b-4a61-8efb-1b5e525fff21,05243f56-7e9b-4a61-8efb-1b5e525fff21,1,0,7aa86a2d-2b47-447e-8901-806411011279,7aa86a2d-2b47-447e-8901-806411011279,1,0,fca0dfad-f853-4694-9ce9-53a3a10f59b7,fca0dfad-f853-4694-9ce9-53a3a10f59b7,1,0,934b8380-c6e0-49f8-a6c2-91c0ddb2f95e,934b8380-c6e0-49f8-a6c2-91c0ddb2f95e,1,0,57f4ee70-185e-4f2a-91a6-6c0bf93c1000,57f4ee70-185e-4f2a-91a6-6c0bf93c1000,1,0,b4cb92fb-ad82-44ed-9203-397b412b3453,b4cb92fb-ad82-44ed-9203-397b412b3453,1,0,69ceac29-06d3-45f2-b914-7966465cd0d3,69ceac29-06d3-45f2-b914-7966465cd0d3,1,0,b690721d-960b-4374-8d2c-feed3a2b354b,b690721d-960b-4374-8d2c-feed3a2b354b,1,0,271243d3-1871-4a0a-bf7f-63bacacf0a59,271243d3-1871-4a0a-bf7f-63bacacf0a59,1,0,b1ed134b-f2aa-4b06-b7a2-0e524ead04df,b1ed134b-f2aa-4b06-b7a2-0e524ead04df,1,0,5b379a72-8605-4e88-84cb-14272a3b8f5f,5b379a72-8605-4e88-84cb-14272a3b8f5f,1,0,150c9d05-4ccc-4cb7-879d-b1d9c3534343,150c9d05-4ccc-4cb7-879d-b1d9c3534343,1,0,65000437-bd07-4841-a458-679d44768c46,65000437-bd07-4841-a458-679d44768c46,1,0,1281fe19-bbca-4a4f-84d8-14187e62000f,1281fe19-bbca-4a4f-84d8-14187e62000f,1,0,9b7051d5-abc4-416c-a0e6-515d120d78e4,9b7051d5-abc4-416c-a0e6-515d120d78e4,1,0,86d1bc4e-f08d-48c7-8b3a-3c5feb0c843c,86d1bc4e-f08d-48c7-8b3a-3c5feb0c843c,1,0,869938e6-6310-4326-bd15-5b91fe2e0911,869938e6-6310-4326-bd15-5b91fe2e0911,1,0,8ed7254b-bbf8-49d9-8a73-9a91316fd02d,8ed7254b-bbf8-49d9-8a73-9a91316fd02d,1,0,a156521a-ece1-49d3-8056-1c3508273c45,a156521a-ece1-49d3-8056-1c3508273c45,1,0,075d39e0-a77a-4d0b-9260-7524fb5b2d0c,075d39e0-a77a-4d0b-9260-7524fb5b2d0c,1,0,10018f80-3138-4089-bf9a-a5f178f1e295,10018f80-3138-4089-bf9a-a5f178f1e295,1,0,43aba109-4b7f-45ef-9c30-8b754e81911b,43aba109-4b7f-45ef-9c30-8b754e81911b,1,0,4ccd72e1-7fd7-4a3b-8428-71b44992937e,4ccd72e1-7fd7-4a3b-8428-71b44992937e,1,0,46077650-2b2c-4319-8279-41f277971669,46077650-2b2c-4319-8279-41f277971669,1,0,4afe733d-64a0-4ea5-9d12-6e2c86eb91e4,4afe733d-64a0-4ea5-9d12-6e2c86eb91e4,1,0,612f3b95-d7db-4b33-92b5-4873205b424b,612f3b95-d7db-4b33-92b5-4873205b424b,1,0,d0b79c3d-b0c5-4eb3-9971-1def1c88698f,d0b79c3d-b0c5-4eb3-9971-1def1c88698f,1,0,e82ebd72-7b5a-4f45-b853-1001bf680a05,e82ebd72-7b5a-4f45-b853-1001bf680a05,1,0,a74879b8-c080-4cc0-b44f-2b7c4dae87fe,a74879b8-c080-4cc0-b44f-2b7c4dae87fe,1,0,e9e9b733-e97a-430d-95ce-45ea27751f64,e9e9b733-e97a-430d-95ce-45ea27751f64,1,0,86ffe9a7-9b3e-49ab-bd88-20269fec56bc,86ffe9a7-9b3e-49ab-bd88-20269fec56bc,1,0,3dd50c66-27f7-4f1e-86e9-c709995c8609,3dd50c66-27f7-4f1e-86e9-c709995c8609,1,0,45c0003f-0ed7-4582-b84e-217fdc4ddeaf,45c0003f-0ed7-4582-b84e-217fdc4ddeaf,1,0,ed1369c5-c274-45bd-ae91-7648565ae09f,ed1369c5-c274-45bd-ae91-7648565ae09f,1,0,8d0fce61-a22f-4033-9e03-3f00c4a21722,8d0fce61-a22f-4033-9e03-3f00c4a21722,1,0,bfb3f026-e940-49c3-ac30-408186f9e11e,bfb3f026-e940-49c3-ac30-408186f9e11e,1,0,e1dc83eb-a8cd-454b-8de8-cff2049be78c,e1dc83eb-a8cd-454b-8de8-cff2049be78c,1,0,9edd9288-1463-4d67-b9f0-40f351d978e9,9edd9288-1463-4d67-b9f0-40f351d978e9,1,0,c9db6c68-965f-4567-b26e-5d497a389de1,c9db6c68-965f-4567-b26e-5d497a389de1,1,0,4da2f65d-56bd-4140-9b31-e5ccac4a800a,4da2f65d-56bd-4140-9b31-e5ccac4a800a,1,0,eb163bba-b94c-4a78-9c2d-7b519325e3d4,eb163bba-b94c-4a78-9c2d-7b519325e3d4,1,0,58cdbd20-a7f4-4c4c-8a4e-638714cc2699,58cdbd20-a7f4-4c4c-8a4e-638714cc2699,1,0,616cd2cc-eaf4-4586-bca1-c044429b491a,616cd2cc-eaf4-4586-bca1-c044429b491a,1,0,939bdb9a-294b-4b42-a56f-030f69bc29c4,939bdb9a-294b-4b42-a56f-030f69bc29c4,1,0,ee7a763b-bcbf-4ff3-89af-eb7965b33515,ee7a763b-bcbf-4ff3-89af-eb7965b33515,1,0,e72b3ae6-00e9-45d7-a4f3-bc8a5a2f5ae4,e72b3ae6-00e9-45d7-a4f3-bc8a5a2f5ae4,1,0,81d900be-ddc1-417f-ae2c-1aacf040de9a,81d900be-ddc1-417f-ae2c-1aacf040de9a,1,0,c65f69ce-be78-4e8d-b91d-293c4108ce77,c65f69ce-be78-4e8d-b91d-293c4108ce77,1,0,521a5717-0b38-401d-bd72-30cee219bd14,521a5717-0b38-401d-bd72-30cee219bd14,1,0,977c30dc-6f27-4931-9fd5-d12ed147e3ec,977c30dc-6f27-4931-9fd5-d12ed147e3ec,1,0,eea4f72e-dd1b-46c7-b270-876a482236b3,eea4f72e-dd1b-46c7-b270-876a482236b3,1,0,25e8d286-dfbb-4fdf-974b-fe3f6f76eac0,25e8d286-dfbb-4fdf-974b-fe3f6f76eac0,1,0,2d249dad-8b4f-462b-ab13-892639a6e071,2d249dad-8b4f-462b-ab13-892639a6e071,1,0,f6249bf4-d2e7-48f3-808f-d776915d14cb,f6249bf4-d2e7-48f3-808f-d776915d14cb,1,0,75f11ecd-c87a-4a14-a7ca-c755f63d7cf8,75f11ecd-c87a-4a14-a7ca-c755f63d7cf8,1,0,883cdeb0-e747-4157-bbe7-0ebc423a82af,883cdeb0-e747-4157-bbe7-0ebc423a82af,1,0,ba62ac73-91da-4dad-abc7-3cf8acf7e315,ba62ac73-91da-4dad-abc7-3cf8acf7e315,1,0,6a71416d-dba1-4883-9264-597ecf9d6270,6a71416d-dba1-4883-9264-597ecf9d6270,1,0,ce3fc202-7893-4d1b-9c8f-1b3349a5c147,ce3fc202-7893-4d1b-9c8f-1b3349a5c147,1,0,6593baab-fce0-49ed-867e-be242bfc08d7,6593baab-fce0-49ed-867e-be242bfc08d7,1,0,403390cf-d3f8-4dfa-b83d-e2fca4ee0dff,403390cf-d3f8-4dfa-b83d-e2fca4ee0dff,1,0,57aed64d-da61-4c18-af21-dab3afdc5c03,57aed64d-da61-4c18-af21-dab3afdc5c03,1,0,452822b4-a590-44db-ab77-d8c01f7300e7,452822b4-a590-44db-ab77-d8c01f7300e7,1,0,62a71ba7-3226-4d10-8cc9-ac9908a00ae7,62a71ba7-3226-4d10-8cc9-ac9908a00ae7,1,0,6ce1d71d-7548-4ee7-be78-21ae23d5a08d,6ce1d71d-7548-4ee7-be78-21ae23d5a08d,1,0,f5ad6743-b19b-44c4-b3d1-2e39d74a4abd,f5ad6743-b19b-44c4-b3d1-2e39d74a4abd,1,0,4b89b7fb-31d9-43c7-9f7e-b0c31fa3331d,4b89b7fb-31d9-43c7-9f7e-b0c31fa3331d,1,0,19b29d30-e395-42f2-b700-7474bb2cdcb7,19b29d30-e395-42f2-b700-7474bb2cdcb7,1,0,b0deb957-624b-4bcb-824c-76aedf1affe9,b0deb957-624b-4bcb-824c-76aedf1affe9,1,0,9934e608-593d-45d0-9df3-539f0c8fc385,9934e608-593d-45d0-9df3-539f0c8fc385,1,0,80da4126-4319-425f-8427-7d60652cf754,80da4126-4319-425f-8427-7d60652cf754,1,0,05236ace-bcdd-4eb8-a1fb-5843ee311d10,05236ace-bcdd-4eb8-a1fb-5843ee311d10,1,0,0f1b284c-6c9e-4799-bc47-3326c4b7bec2,0f1b284c-6c9e-4799-bc47-3326c4b7bec2,1,0,449060fd-4711-4b9e-93e0-11b35c314fb3,449060fd-4711-4b9e-93e0-11b35c314fb3,1,0,e7efa9d5-ea93-4070-87bb-a4d95116d1b4,e7efa9d5-ea93-4070-87bb-a4d95116d1b4,1,0,0614d340-6524-4715-978d-87ab21377e72,0614d340-6524-4715-978d-87ab21377e72,1,0,d47daac5-ec3b-4d4e-8b01-045a37f7074d,d47daac5-ec3b-4d4e-8b01-045a37f7074d,1,0,9d6ed3b9-35cd-47c0-9dfc-732e5066a071,9d6ed3b9-35cd-47c0-9dfc-732e5066a071,1,0,912cbd30-1ed5-4888-a4b6-98e9215b28e9,912cbd30-1ed5-4888-a4b6-98e9215b28e9,1,0,abf093ce-be63-487d-8be4-be282aa475be,abf093ce-be63-487d-8be4-be282aa475be,1,0,7a910ad6-b922-4716-8140-1540d76296b2,7a910ad6-b922-4716-8140-1540d76296b2,1,0,5189beb9-b939-4f97-aca0-c2f3492ac8b9,5189beb9-b939-4f97-aca0-c2f3492ac8b9,1,0,0b139d7a-b583-4082-b9f2-8f3fb444bd51,0b139d7a-b583-4082-b9f2-8f3fb444bd51,1,0,b8931f98-c1d7-4e9b-be43-065064e7ba95,b8931f98-c1d7-4e9b-be43-065064e7ba95,1,0,ab2b472d-97d5-4c33-86fd-e2cdaedf3f3d,ab2b472d-97d5-4c33-86fd-e2cdaedf3f3d,1,0,60848308-931c-4da3-aa4b-37f6fb4b194f,60848308-931c-4da3-aa4b-37f6fb4b194f,1,0,0761c32c-1de6-4c40-9178-64aeb46b6622,0761c32c-1de6-4c40-9178-64aeb46b6622,1,0,08af8da8-d44b-46f0-a8d3-60421e7b5a1a,08af8da8-d44b-46f0-a8d3-60421e7b5a1a,1,0,54b14504-503b-45f6-9b5d-785b49829425,54b14504-503b-45f6-9b5d-785b49829425,1,0,80d3ee33-1cdc-4af6-85c2-787094526592,80d3ee33-1cdc-4af6-85c2-787094526592,1,0,c8b28660-6cb0-4ef5-85c2-a75da863ba96,c8b28660-6cb0-4ef5-85c2-a75da863ba96,1,0,1cd607b4-49fc-460e-a014-6afe50083b47,1cd607b4-49fc-460e-a014-6afe50083b47,1,0,a215e767-36e9-4408-9d18-7b4be757022a,a215e767-36e9-4408-9d18-7b4be757022a,1,0,a3e262bc-9f0d-480d-a1d1-c2326105d22d,a3e262bc-9f0d-480d-a1d1-c2326105d22d,1,0,8eae0c79-288b-4773-90bb-49299ad45628,8eae0c79-288b-4773-90bb-49299ad45628,1,0,2faa5594-f1b4-4312-b674-82fdf9623105,2faa5594-f1b4-4312-b674-82fdf9623105,1,0,185c1ad3-b5db-49b6-9342-d08e1bf64903,185c1ad3-b5db-49b6-9342-d08e1bf64903,1,0,3c69a4ad-001d-4421-88f6-412e15d710d6,3c69a4ad-001d-4421-88f6-412e15d710d6,1,0,d0373603-5abb-4f7b-8d2f-9f7fb52615aa,d0373603-5abb-4f7b-8d2f-9f7fb52615aa,1,0,f20a35fe-6029-4dc8-b6b4-b098dbce12e8,f20a35fe-6029-4dc8-b6b4-b098dbce12e8,1,0,6a68a08a-ea37-4573-ab9f-ec822f6d250b,6a68a08a-ea37-4573-ab9f-ec822f6d250b,1,0,00e87d04-8104-420b-b2c6-7304889a75b2,00e87d04-8104-420b-b2c6-7304889a75b2,1,0,bde86820-f7bb-463b-97d0-bfa5f8323af0,bde86820-f7bb-463b-97d0-bfa5f8323af0,1,0,b9b24093-810c-4158-846d-e2c7aea54d36,b9b24093-810c-4158-846d-e2c7aea54d36,1,0,289a6aac-dc4e-4fae-8815-853e78d450bb,289a6aac-dc4e-4fae-8815-853e78d450bb,1,0,557e7d89-83ed-45d0-86cc-6e355f14025d,557e7d89-83ed-45d0-86cc-6e355f14025d,1,0,d681b26b-dd8d-46d7-986e-10f05c37a1e4,d681b26b-dd8d-46d7-986e-10f05c37a1e4,1,0,4d3c216e-c04f-4884-8681-1c861c50ce7d,4d3c216e-c04f-4884-8681-1c861c50ce7d,1,0,4a41eee0-c973-4824-a07c-9fcf731f055e,4a41eee0-c973-4824-a07c-9fcf731f055e,1,0,ee756c33-f408-4449-a6bb-3186a0421362,ee756c33-f408-4449-a6bb-3186a0421362,1,0,fbfa8f64-52e4-48f6-b0fb-fd06976dd93d,fbfa8f64-52e4-48f6-b0fb-fd06976dd93d,1,0,6ff66622-4d20-4696-9fe9-4b4faeb21d96,6ff66622-4d20-4696-9fe9-4b4faeb21d96,1,0,46237eec-c206-4d21-883c-27599b9ed38c,46237eec-c206-4d21-883c-27599b9ed38c,1,0,92cbfe14-35c5-440b-9a13-ef8c8ab0630a,92cbfe14-35c5-440b-9a13-ef8c8ab0630a,1,0,8ce759ff-f579-461c-bb1e-9ac2b01e88df,8ce759ff-f579-461c-bb1e-9ac2b01e88df,1,0,8b451909-2c15-48f2-b869-65e7031cc542,8b451909-2c15-48f2-b869-65e7031cc542,1,0,ab6ff81a-56aa-4742-afe4-d7a652e9d2de,ab6ff81a-56aa-4742-afe4-d7a652e9d2de,1,0,7b377fca-4466-476f-9eb2-0b00141103d6,7b377fca-4466-476f-9eb2-0b00141103d6,1,0,9ce5eceb-f366-4035-956e-62721358b154,9ce5eceb-f366-4035-956e-62721358b154,1,0,1685c406-d0cb-4e0a-a3b0-036c8c22942a,1685c406-d0cb-4e0a-a3b0-036c8c22942a,1,0,892dc4c4-a72b-4dbf-af62-9f9ae0e05aa1,892dc4c4-a72b-4dbf-af62-9f9ae0e05aa1,1,0,81db41a6-2580-4a69-b1fd-57cfd48a7efa,81db41a6-2580-4a69-b1fd-57cfd48a7efa,1,0,0db8b3b2-bf24-4006-9897-797084c241ef,0db8b3b2-bf24-4006-9897-797084c241ef,1,0,fd9d34d9-9c9c-4c05-9c08-b93d4b237adf,fd9d34d9-9c9c-4c05-9c08-b93d4b237adf,1,0,381b7dae-6b34-42a7-9fee-2a4af8a1cc18,381b7dae-6b34-42a7-9fee-2a4af8a1cc18,1,0,31e9ca0d-9ae1-4740-a0a6-2739aa29c99f,31e9ca0d-9ae1-4740-a0a6-2739aa29c99f,1,0,20091427-d173-40ca-b2c4-53ee99b0b5ae,20091427-d173-40ca-b2c4-53ee99b0b5ae,1,0,14cbde39-a39a-48e5-9b72-b798a0bcea3f,14cbde39-a39a-48e5-9b72-b798a0bcea3f,1,0,56871c10-e3af-4679-afad-3baa910d73bb,56871c10-e3af-4679-afad-3baa910d73bb,1,0,f81b51c5-57e4-41f8-9ad5-3d2717351b95,f81b51c5-57e4-41f8-9ad5-3d2717351b95,1,0,3c09f0cd-fbec-46ae-95b0-a00cc53c07ef,3c09f0cd-fbec-46ae-95b0-a00cc53c07ef,1,0,de0a39e0-d37d-47c6-a019-e44836edc8d1,de0a39e0-d37d-47c6-a019-e44836edc8d1,1,0,1fdcc1e7-ad53-409e-ba13-84c6429740cd,1fdcc1e7-ad53-409e-ba13-84c6429740cd,1,0,71d544bf-15c1-4581-8baa-ac126308425c,71d544bf-15c1-4581-8baa-ac126308425c,1,0,1bd0b688-d0fb-4ca2-85aa-4bd82b72ccc2,1bd0b688-d0fb-4ca2-85aa-4bd82b72ccc2,1,0,7acfe30e-73cb-465a-88f2-92b7275dc49b,7acfe30e-73cb-465a-88f2-92b7275dc49b,1,0,8e387dac-5029-49da-a013-355df0a51a44,8e387dac-5029-49da-a013-355df0a51a44,1,0,13859664-8307-40e8-855b-557b9cf2f1ec,13859664-8307-40e8-855b-557b9cf2f1ec,1,0,e4397fba-507f-497c-9414-7d08ccd4d799,e4397fba-507f-497c-9414-7d08ccd4d799,1,0,794f5fb5-3b8f-4f45-9250-7a3b9d1db383,794f5fb5-3b8f-4f45-9250-7a3b9d1db383,1,0,f7a89bfc-e3c9-4894-a2df-6c229b4e0fd8,f7a89bfc-e3c9-4894-a2df-6c229b4e0fd8,1,0,1e8b70ce-27fc-418f-b3f3-e6efbce9f7a2,1e8b70ce-27fc-418f-b3f3-e6efbce9f7a2,1,0,d915d338-3e4c-45c3-aef5-a07cf41b05f6,d915d338-3e4c-45c3-aef5-a07cf41b05f6,1,0,28080e64-cd09-410d-9e3e-3ffdb43d3ace,28080e64-cd09-410d-9e3e-3ffdb43d3ace,1,0,978640a2-5c4b-4e21-857e-34f00840fba8,978640a2-5c4b-4e21-857e-34f00840fba8,1,0,da2913e3-a29b-423f-9aae-08fed56a7d90,da2913e3-a29b-423f-9aae-08fed56a7d90,1,0,149e72b8-cc03-4b4f-8ca4-07987600c34d,149e72b8-cc03-4b4f-8ca4-07987600c34d,1,0,7649bd7b-fe8c-4338-80fc-153160a5e538,7649bd7b-fe8c-4338-80fc-153160a5e538,1,0,7779cd6d-8fa1-49cb-9bbc-9dfd0979f3f4,7779cd6d-8fa1-49cb-9bbc-9dfd0979f3f4,1,0,3dec1ae7-90bb-45ab-aa04-48cfbc14742e,3dec1ae7-90bb-45ab-aa04-48cfbc14742e,1,0,6137605e-4850-44ec-b4ee-048bd8e0ec3a,6137605e-4850-44ec-b4ee-048bd8e0ec3a,1,0,ee28aa9b-0f31-4d8b-8444-43b8bc88bd23,ee28aa9b-0f31-4d8b-8444-43b8bc88bd23,1,0,0e6e9372-beb4-478e-9428-71b19a60739b,0e6e9372-beb4-478e-9428-71b19a60739b,1,0,32b11498-542f-46b2-829f-1525936ab7fa,32b11498-542f-46b2-829f-1525936ab7fa,1,0,64afa916-4750-4008-8c6c-2a470fb11283,64afa916-4750-4008-8c6c-2a470fb11283,1,0,f4a85bfb-40c7-4f81-af32-d07b96c53ad0,f4a85bfb-40c7-4f81-af32-d07b96c53ad0,1,0,35354abc-9a76-4ee8-8796-c24b37365ea0,35354abc-9a76-4ee8-8796-c24b37365ea0,1,0,7078977f-31bf-427e-ac37-e309d81fe999,7078977f-31bf-427e-ac37-e309d81fe999,1,0,bb39ae51-be82-4bb5-a30e-2bf2b53be59e,bb39ae51-be82-4bb5-a30e-2bf2b53be59e,1,0,d8854555-9e15-4d82-a1fd-656a848a8e8a,d8854555-9e15-4d82-a1fd-656a848a8e8a,1,0,53191842-ea05-4491-84d7-071cd201992d,53191842-ea05-4491-84d7-071cd201992d,1,0,86c70449-4cf7-4baf-9742-b82b134ed929,86c70449-4cf7-4baf-9742-b82b134ed929,1,0,af3b1881-163a-4c07-a1d9-77ceadf59c77,af3b1881-163a-4c07-a1d9-77ceadf59c77,1,0,d3443b92-32f5-4ac0-8356-062647efe3d8,d3443b92-32f5-4ac0-8356-062647efe3d8,1,0,b78be6fb-7db8-48c8-ba7b-aab1fea34890,b78be6fb-7db8-48c8-ba7b-aab1fea34890,1,0,bd27276a-e80c-4135-b341-f99a816ffe86,bd27276a-e80c-4135-b341-f99a816ffe86,1,0,35306678-147c-4ad1-a3c6-c80a11afa22f,35306678-147c-4ad1-a3c6-c80a11afa22f,1,0,0da75726-ae71-4d83-a696-a774c787a8a2,0da75726-ae71-4d83-a696-a774c787a8a2,1,0,5b30b0e9-f986-49b8-8668-5bb0e09f0cfe,5b30b0e9-f986-49b8-8668-5bb0e09f0cfe,1,0,896a7267-0198-4cbb-b6e6-7aa157c0cc61,896a7267-0198-4cbb-b6e6-7aa157c0cc61,1,0,2005bf54-219b-4111-bff1-e12e2c6dca3e,2005bf54-219b-4111-bff1-e12e2c6dca3e,1,0,abab8f73-d705-4350-b44d-f912649a2190,abab8f73-d705-4350-b44d-f912649a2190,1,0,20c9c25c-f8c9-429f-84bd-543cb809abef,20c9c25c-f8c9-429f-84bd-543cb809abef,1,0,dc5f451e-3275-43a8-9f48-45b83220d461,dc5f451e-3275-43a8-9f48-45b83220d461,1,0,028f5e81-61df-4d13-876d-781c5fd18ee6,028f5e81-61df-4d13-876d-781c5fd18ee6,1,0,3cbb59ef-7f64-4590-8a54-ba01e78283c3,3cbb59ef-7f64-4590-8a54-ba01e78283c3,1,0,a5b83672-2ead-4d0a-a4e5-ddd991f1addc,a5b83672-2ead-4d0a-a4e5-ddd991f1addc,1,0,388eb513-fadb-40cd-8a7b-33b904dd758e,388eb513-fadb-40cd-8a7b-33b904dd758e,1,0,0613c6aa-e1fe-4632-a396-a17ec773158f,0613c6aa-e1fe-4632-a396-a17ec773158f,1,0,1a330987-4c79-4ab7-b250-db8d32c78751,1a330987-4c79-4ab7-b250-db8d32c78751,1,0,b7295e8e-0aa4-4a49-81ea-0594a358e9ca,b7295e8e-0aa4-4a49-81ea-0594a358e9ca,1,0,555062ed-9a04-41d8-877f-0a667e9a08cd,555062ed-9a04-41d8-877f-0a667e9a08cd,1,0,5b1db523-b5cb-4ff8-8662-5feeb4282b4a,5b1db523-b5cb-4ff8-8662-5feeb4282b4a,1,0,ac160e1c-fef7-4625-84e0-964b397f6bdb,ac160e1c-fef7-4625-84e0-964b397f6bdb,1,0,b8946d9c-dda8-4b94-8cbf-db62b647c53e,b8946d9c-dda8-4b94-8cbf-db62b647c53e,1,0,24215916-7732-4030-9f88-163f644e94f7,24215916-7732-4030-9f88-163f644e94f7,1,0,69697945-9748-4cea-a20f-e244b46de2e8,69697945-9748-4cea-a20f-e244b46de2e8,1,0,68538fd1-262c-43ea-b09f-8a66643a0062,68538fd1-262c-43ea-b09f-8a66643a0062,1,0,d042a8e1-a7b9-4f26-abc4-d618bc73e9f5,d042a8e1-a7b9-4f26-abc4-d618bc73e9f5,1,0,82ad24cc-d9f8-440b-a720-e204101d85da,82ad24cc-d9f8-440b-a720-e204101d85da,1,0,aa63c001-c3da-4179-8fd8-fe2ff510511e,aa63c001-c3da-4179-8fd8-fe2ff510511e,1,0,b2e894b0-6443-4a52-95b6-6b564f809680,b2e894b0-6443-4a52-95b6-6b564f809680,1,0,8010065f-aec8-4768-85ec-9eb7b2b01e7e,8010065f-aec8-4768-85ec-9eb7b2b01e7e,1,0,a44348cb-e20c-4afd-8483-3b9c735b352c,a44348cb-e20c-4afd-8483-3b9c735b352c,1,0,ebfe4c74-6e16-4b64-8a52-cea95c446903,ebfe4c74-6e16-4b64-8a52-cea95c446903,1,0,ea9ed37c-7f58-43a8-990c-f1feb5d2d275,ea9ed37c-7f58-43a8-990c-f1feb5d2d275,1,0,d912e472-9553-4b96-8b16-7aaff6c14239,d912e472-9553-4b96-8b16-7aaff6c14239,1,0,b04018b5-a74d-43c9-8519-6cc8aa23fe09,b04018b5-a74d-43c9-8519-6cc8aa23fe09,1,0,8f5af22e-3e73-4a4f-b91e-eccd0f5084fd,8f5af22e-3e73-4a4f-b91e-eccd0f5084fd,1,0,9283277f-2b75-4c3a-810a-8d4071b3afcc,9283277f-2b75-4c3a-810a-8d4071b3afcc,1,0,d03d5b18-57a2-43c0-99ea-8ad9d5788179,d03d5b18-57a2-43c0-99ea-8ad9d5788179,1,0,c491a7fc-14f9-498a-b7dd-575dfc66878e,c491a7fc-14f9-498a-b7dd-575dfc66878e,1,0,db15f8eb-4736-4b47-9cee-3e6883f0888c,db15f8eb-4736-4b47-9cee-3e6883f0888c,1,0,59064eb2-2770-4f1c-96bd-801926fe68ef,59064eb2-2770-4f1c-96bd-801926fe68ef,1,0,df81cc63-26f2-4e66-bf0b-fd083a6a7d7b,df81cc63-26f2-4e66-bf0b-fd083a6a7d7b,1,0,8a8848b8-345a-452d-bf95-28f9c91c7e95,8a8848b8-345a-452d-bf95-28f9c91c7e95,1,0,a9441693-87ca-4157-98e1-63375852755c,a9441693-87ca-4157-98e1-63375852755c,1,0,6303ea55-e8ed-4acc-9717-941eefafc2a9,6303ea55-e8ed-4acc-9717-941eefafc2a9,1,0,5b4e1b83-fc10-4acc-bef7-81c73dbbc453,5b4e1b83-fc10-4acc-bef7-81c73dbbc453,1,0,d0b17206-3949-4513-a47f-02e1a8ba369a,d0b17206-3949-4513-a47f-02e1a8ba369a,1,0,cb4f20d4-13e6-4c27-b491-da7931f4bf05,cb4f20d4-13e6-4c27-b491-da7931f4bf05,1,0,6b2340d7-687f-43a3-8eb8-8ddb86712466,6b2340d7-687f-43a3-8eb8-8ddb86712466,1,0,40b08a20-51a3-438b-ba54-466917ea809f,40b08a20-51a3-438b-ba54-466917ea809f,1,0,9846e2f6-d82a-42a6-bf50-2a9cdf750a8f,9846e2f6-d82a-42a6-bf50-2a9cdf750a8f,1,0,9328da5c-4689-4a60-8136-ae9eac46ab38,9328da5c-4689-4a60-8136-ae9eac46ab38,1,0,ca5d586f-81bb-40ee-b3bd-de854857c984,ca5d586f-81bb-40ee-b3bd-de854857c984,1,0,af22406b-daac-475d-b6a9-577452502b84,af22406b-daac-475d-b6a9-577452502b84,1,0,7a925960-a579-4b06-90e0-5121dc774024,7a925960-a579-4b06-90e0-5121dc774024,1,0,32c10512-7bb8-423b-9503-ab2fa41386a4,32c10512-7bb8-423b-9503-ab2fa41386a4,1,0,888edfc4-8140-4675-b267-c32bf1d8d29d,888edfc4-8140-4675-b267-c32bf1d8d29d,1,0,2abbd53a-0ead-42af-8df6-fde663aea300,2abbd53a-0ead-42af-8df6-fde663aea300,1,0,24611bf9-5492-443a-935c-a0058e86493f,24611bf9-5492-443a-935c-a0058e86493f,1,0,42641296-64da-46e0-a407-de2d492f9c90,42641296-64da-46e0-a407-de2d492f9c90,1,0,b834af0b-086c-445d-a271-7e178c324551,b834af0b-086c-445d-a271-7e178c324551,1,0,ec34befe-3c0b-4a75-b943-840c52e7dda5,ec34befe-3c0b-4a75-b943-840c52e7dda5,1,0,7f18eb86-e9ac-4cb8-a9aa-389f61dff582,7f18eb86-e9ac-4cb8-a9aa-389f61dff582,1,0,b5e81952-e469-4f26-b8d2-90e7d9e7bc1d,b5e81952-e469-4f26-b8d2-90e7d9e7bc1d,1,0,6733f1bd-7878-4a33-8995-c07526e87c1a,6733f1bd-7878-4a33-8995-c07526e87c1a,1,0,f7e73257-fae1-465a-ae74-faaa0273a416,f7e73257-fae1-465a-ae74-faaa0273a416,1,0,73f89524-dbe8-426f-8ee6-1277eb1967cc,73f89524-dbe8-426f-8ee6-1277eb1967cc,1,0,ee7d970c-cef7-4740-a357-1fe78f88a6e6,ee7d970c-cef7-4740-a357-1fe78f88a6e6,1,0,ff18803b-4c3a-4720-a718-7547f04c6e2f,ff18803b-4c3a-4720-a718-7547f04c6e2f,1,0,0e0670d6-d8f7-4728-bd1b-f016fffa0570,0e0670d6-d8f7-4728-bd1b-f016fffa0570,1,0,13beb01d-dd08-4a6d-863b-651e70bbf51f,13beb01d-dd08-4a6d-863b-651e70bbf51f,1,0,a53f6e85-fbf7-4fb1-9301-d63e812fe16c,a53f6e85-fbf7-4fb1-9301-d63e812fe16c,1,0,57a0f5f3-6573-4b35-af25-cea3a25641f1,57a0f5f3-6573-4b35-af25-cea3a25641f1,1,0,0b7c4cb7-5126-4b5e-8941-cd56eaef76a0,0b7c4cb7-5126-4b5e-8941-cd56eaef76a0,1,0,144d5498-bb61-4bec-bef3-85a5a4aec3d5,144d5498-bb61-4bec-bef3-85a5a4aec3d5,1,0,94bc76ae-72a0-418f-98c4-ae0a0326a2da,94bc76ae-72a0-418f-98c4-ae0a0326a2da,1,0,784475ff-eec5-462a-a511-ba31f8374c2e,784475ff-eec5-462a-a511-ba31f8374c2e,1,0,ecaa0af8-549c-4c07-82ff-1c4e02ff15b8,ecaa0af8-549c-4c07-82ff-1c4e02ff15b8,1,0,45a8c780-c067-40d7-bbe9-81f854aacf7a,45a8c780-c067-40d7-bbe9-81f854aacf7a,1,0,57885cac-059a-4a08-aa2c-43b116d2c777,57885cac-059a-4a08-aa2c-43b116d2c777,1,0,c0403df4-b1f2-4d7e-adb5-9ed881c1359b,c0403df4-b1f2-4d7e-adb5-9ed881c1359b,1,0,27e0b5d9-1a4c-45b8-8969-d1d1c39129c1,27e0b5d9-1a4c-45b8-8969-d1d1c39129c1,1,0,56b570b1-93b0-468a-9672-9c71113753f3,56b570b1-93b0-468a-9672-9c71113753f3,1,0,e7b0ae70-0192-456c-9dc5-e66049fa9df2,e7b0ae70-0192-456c-9dc5-e66049fa9df2,1,0,68944d09-618e-4fa3-a7af-8c84218e0ac7,68944d09-618e-4fa3-a7af-8c84218e0ac7,1,0,91b12ce3-e8ba-4c9d-9daa-1d5532500314,91b12ce3-e8ba-4c9d-9daa-1d5532500314,1,0,733dc291-0bef-4fe8-ac9f-63440f0c2ad0,733dc291-0bef-4fe8-ac9f-63440f0c2ad0,1,0,356a8091-4c0b-41d0-b8d2-963b3a807469,356a8091-4c0b-41d0-b8d2-963b3a807469,1,0,5b7b7dc3-dbef-4854-9395-30a3ae4d751c,5b7b7dc3-dbef-4854-9395-30a3ae4d751c,1,0,cb57aabc-eeef-42b4-9bc2-873cebd9618c,cb57aabc-eeef-42b4-9bc2-873cebd9618c,1,0,2fcd2c85-6778-42fa-9bdd-a6ba47497ec0,2fcd2c85-6778-42fa-9bdd-a6ba47497ec0,1,0,52f30ed7-aa16-4ce2-9684-e50229ab0015,52f30ed7-aa16-4ce2-9684-e50229ab0015,1,0,79c2e2bd-f923-42ec-8bdc-3e517e08ee7c,79c2e2bd-f923-42ec-8bdc-3e517e08ee7c,1,0,0526492c-be48-4c84-8d68-19fa1c7e9d6e,0526492c-be48-4c84-8d68-19fa1c7e9d6e,1,0,54ecaf7b-9bc5-483c-96e1-270bcd323590,54ecaf7b-9bc5-483c-96e1-270bcd323590,1,0,2a1f77ba-fa2e-4281-8e68-7ec4ca0261b7,2a1f77ba-fa2e-4281-8e68-7ec4ca0261b7,1,0,58f6f8fa-7473-40f5-973a-6279335d8f33,58f6f8fa-7473-40f5-973a-6279335d8f33,1,0,ec0c3187-de61-4bc8-a52a-7617f47ffb6d,ec0c3187-de61-4bc8-a52a-7617f47ffb6d,1,0,1e71ec59-55a4-45e8-a8c9-f70c2cb56589,1e71ec59-55a4-45e8-a8c9-f70c2cb56589,1,0,fa3632fe-185b-49aa-85ae-dfb721835d40,fa3632fe-185b-49aa-85ae-dfb721835d40,1,0,a4f15108-477c-465e-aaea-cb495ef52cf5,a4f15108-477c-465e-aaea-cb495ef52cf5,1,0,9cda5c2c-f401-4f63-b445-cef160296e48,9cda5c2c-f401-4f63-b445-cef160296e48,1,0,e8ae4a26-3127-43ae-af7a-c2e278d2611d,e8ae4a26-3127-43ae-af7a-c2e278d2611d,1,0,b923c78f-d074-41b4-b832-086686258f19,b923c78f-d074-41b4-b832-086686258f19,1,0,8ff96413-6fdd-4b8d-a181-ea0d8633defc,8ff96413-6fdd-4b8d-a181-ea0d8633defc,1,0,54604ed2-766b-4308-b99e-447817d82799,54604ed2-766b-4308-b99e-447817d82799,1,0,7abdb07b-edbc-4c3b-aa53-afaa92dc9071,7abdb07b-edbc-4c3b-aa53-afaa92dc9071,1,0,ee008096-1ae8-4a64-9d3d-14cb15c8be70,ee008096-1ae8-4a64-9d3d-14cb15c8be70,1,0,a0a85b22-63ee-4a05-8b0d-1feb9ee07b0a,a0a85b22-63ee-4a05-8b0d-1feb9ee07b0a,1,0,a4754a7b-971f-4517-963e-b7cb9d57f86d,a4754a7b-971f-4517-963e-b7cb9d57f86d,1,0,f48b4475-2cd9-41df-962a-6529f84985ca,f48b4475-2cd9-41df-962a-6529f84985ca,1,0,2fbfe405-48e6-4abf-99c2-7f1f66a62b48,2fbfe405-48e6-4abf-99c2-7f1f66a62b48,1,0,5e6637c7-19b5-4ac2-a8e9-d119e49f444e,5e6637c7-19b5-4ac2-a8e9-d119e49f444e,1,0,bf94feb9-edf7-4df8-b5f5-805613663a0a,bf94feb9-edf7-4df8-b5f5-805613663a0a,1,0,6d852a13-c85e-4e84-8396-f91c1ed0596e,6d852a13-c85e-4e84-8396-f91c1ed0596e,1,0,9c2d5313-a4fd-417e-a340-ad4980d0028b,9c2d5313-a4fd-417e-a340-ad4980d0028b,1,0,4fb4a280-9426-4c41-a9ba-11f9d01a0740,4fb4a280-9426-4c41-a9ba-11f9d01a0740,1,0,1591ee7e-870c-4bf7-9450-be84f1b2506f,1591ee7e-870c-4bf7-9450-be84f1b2506f,1,0,7e32c295-a769-4cff-a3eb-992f7031475f,7e32c295-a769-4cff-a3eb-992f7031475f,1,0,5a398637-a06c-4442-9093-a864fa7f049f,5a398637-a06c-4442-9093-a864fa7f049f,1,0,fe4aa694-76c4-49c9-96ce-a2476f4ff58b,fe4aa694-76c4-49c9-96ce-a2476f4ff58b,1,0,115a6019-ef87-4126-8ebf-070c1e882940,115a6019-ef87-4126-8ebf-070c1e882940,1,0,162ce023-b2e1-41dc-bcaf-b8e30caccce0,162ce023-b2e1-41dc-bcaf-b8e30caccce0,1,0,526c688e-a4d4-45f7-8bba-b8ceff38fe27,526c688e-a4d4-45f7-8bba-b8ceff38fe27,1,0,67efa786-312f-4c9c-b970-0320e92069af,67efa786-312f-4c9c-b970-0320e92069af,1,0,5b952e35-1037-4447-8293-6d8889692c8b,5b952e35-1037-4447-8293-6d8889692c8b,1,0,05bc8b4e-8c90-4502-8b16-7b1e7625d569,05bc8b4e-8c90-4502-8b16-7b1e7625d569,1,0,ce34d88d-3017-4197-a962-ea23a6a96d32,ce34d88d-3017-4197-a962-ea23a6a96d32,1,0,2cbc16da-aa67-4ad6-82f8-fa6922447be6,2cbc16da-aa67-4ad6-82f8-fa6922447be6,1,0,19d7a1ba-c343-4575-95da-53dac6d4b2cb,19d7a1ba-c343-4575-95da-53dac6d4b2cb,1,0,6cc8b3a0-3377-4b39-b6b0-69c862a15465,6cc8b3a0-3377-4b39-b6b0-69c862a15465,1,0,acb193f4-52e5-4572-a79b-b825a2f6525f,acb193f4-52e5-4572-a79b-b825a2f6525f,1,0,5d46f719-e468-48e2-b4ec-acb85c710451,5d46f719-e468-48e2-b4ec-acb85c710451,1,0,9fb13bfe-80c7-43c3-b0da-9185ab197ce2,9fb13bfe-80c7-43c3-b0da-9185ab197ce2,1,0,cd80a520-1d1c-4d80-8a4a-360ac1ca98d8,cd80a520-1d1c-4d80-8a4a-360ac1ca98d8,1,0,e9aef0c8-9dc4-4c4a-8288-8b2d9860624d,e9aef0c8-9dc4-4c4a-8288-8b2d9860624d,1,0,733d4494-01e2-46f5-a49b-f289267a90c9,733d4494-01e2-46f5-a49b-f289267a90c9,1,0,5422610d-b92c-4213-a58c-8db067d93b66,5422610d-b92c-4213-a58c-8db067d93b66,1,0,8f59a635-9e0e-470d-8fda-a47a262a59c2,8f59a635-9e0e-470d-8fda-a47a262a59c2,1,0,ffb50eb9-149a-46ec-9472-d8f20ad09810,ffb50eb9-149a-46ec-9472-d8f20ad09810,1,0,5ae3bba3-dc98-4470-a73d-3bd951c0a3f2,5ae3bba3-dc98-4470-a73d-3bd951c0a3f2,1,0,7a6449e2-e90a-4720-a769-192284ef69c1,7a6449e2-e90a-4720-a769-192284ef69c1,1,0,02118b98-2349-46b1-a328-d6e2b5781f7e,02118b98-2349-46b1-a328-d6e2b5781f7e,1,0,67de9cbb-5c80-4cff-bfbe-269a958e08e6,67de9cbb-5c80-4cff-bfbe-269a958e08e6,1,0,2228a457-6805-41ee-85af-5ebca9568bf4,2228a457-6805-41ee-85af-5ebca9568bf4,1,0,96b71795-e230-4ecb-b98d-4feb3f8b9662,96b71795-e230-4ecb-b98d-4feb3f8b9662,1,0,1e14d062-1d5a-4939-8ce6-4d9514990376,1e14d062-1d5a-4939-8ce6-4d9514990376,1,0,f86f24d2-9a83-47ae-9d95-b49a0a295770,f86f24d2-9a83-47ae-9d95-b49a0a295770,1,0,8368e1fa-da0c-4a9b-9d50-a122933c7899,8368e1fa-da0c-4a9b-9d50-a122933c7899,1,0,37986729-a275-4e86-8613-faee9a4f2525,37986729-a275-4e86-8613-faee9a4f2525,1,0,5814cb3a-8f7c-45b4-a590-b69d4912120f,5814cb3a-8f7c-45b4-a590-b69d4912120f,1,0,f06c8396-65ec-4ece-aed0-d45b2d8969b5,f06c8396-65ec-4ece-aed0-d45b2d8969b5,1,0,1faeab7f-7bd7-496d-8882-4aab6c425854,1faeab7f-7bd7-496d-8882-4aab6c425854,1,0,af922fb8-a99c-4154-89fe-d30a4d13024a,af922fb8-a99c-4154-89fe-d30a4d13024a,1,0,24c2f463-2bbb-471f-a409-507afad52caf,24c2f463-2bbb-471f-a409-507afad52caf,1,0,cbb07013-9ae1-43ec-8142-a724d788cb67,cbb07013-9ae1-43ec-8142-a724d788cb67,1,0,2403ac84-b513-4aa0-9a68-8d1ad705ce24,2403ac84-b513-4aa0-9a68-8d1ad705ce24,1,0,952b49e0-e1a1-4130-8fb2-083e3988255c,952b49e0-e1a1-4130-8fb2-083e3988255c,1,0,367b227f-f66e-4cec-9fc3-850bca8bc6c8,367b227f-f66e-4cec-9fc3-850bca8bc6c8,1,0,1a3a8a3a-dc34-4491-883d-57c3fb69840a,1a3a8a3a-dc34-4491-883d-57c3fb69840a,1,0,7fcb9d79-1144-4099-8d7f-309d3bf045a5,7fcb9d79-1144-4099-8d7f-309d3bf045a5,1,0,db418313-8583-48a9-9fec-e2c5de4fdf76,db418313-8583-48a9-9fec-e2c5de4fdf76,1,0,6277a3b5-b158-4b58-a92b-5efdf2dabac0,6277a3b5-b158-4b58-a92b-5efdf2dabac0,1,0,2f26970e-b964-43e2-8d6d-999bbc577689,2f26970e-b964-43e2-8d6d-999bbc577689,1,0,65a50026-88e7-45dd-bb0c-f212218ca093,65a50026-88e7-45dd-bb0c-f212218ca093,1,0,ed9e5fbe-1db8-4fb9-a9fa-bb1927cae196,ed9e5fbe-1db8-4fb9-a9fa-bb1927cae196,1,0,1dd2b2c4-00aa-4029-ba32-fe82aa5c6cbe,1dd2b2c4-00aa-4029-ba32-fe82aa5c6cbe,1,0,2f4ea53a-c84d-4d5f-ae7a-817a20ccd96a,2f4ea53a-c84d-4d5f-ae7a-817a20ccd96a,1,0,b2a39c8a-d884-4dfe-a593-e6788dabbd6b,b2a39c8a-d884-4dfe-a593-e6788dabbd6b,1,0,3d0afdb2-ab8f-43c0-920a-88ed85545b2f,3d0afdb2-ab8f-43c0-920a-88ed85545b2f,1,0,17477f72-0622-445c-9cb7-2c5a5a65bbe0,17477f72-0622-445c-9cb7-2c5a5a65bbe0,1,0,01a1fd57-6c09-4a5b-9f75-da4366159423,01a1fd57-6c09-4a5b-9f75-da4366159423,1,0,71d79b25-3682-4f2c-b6b2-a307e3e72844,71d79b25-3682-4f2c-b6b2-a307e3e72844,1,0,45c1ed0d-202e-4289-820f-e1de0f544386,45c1ed0d-202e-4289-820f-e1de0f544386,1,0,e889e80f-97c9-43c6-8268-d652764fcafb,e889e80f-97c9-43c6-8268-d652764fcafb,1,0,4eb48d3a-e2d5-4db5-b08b-4b6ccc701f77,4eb48d3a-e2d5-4db5-b08b-4b6ccc701f77,1,0,95ccaaf2-f6ca-4540-8a39-3c90121c4236,95ccaaf2-f6ca-4540-8a39-3c90121c4236,1,0,7c920b8b-1dbf-4f7e-99af-1ca784a59a64,7c920b8b-1dbf-4f7e-99af-1ca784a59a64,1,0,f47a9bec-2a9f-4955-a432-acb63a5b0e46,f47a9bec-2a9f-4955-a432-acb63a5b0e46,1,0,1ba73b6b-cb72-4370-a268-279dcd7a54b9,1ba73b6b-cb72-4370-a268-279dcd7a54b9,1,0,49de6b63-a845-4b5a-9818-18a3e0bb6fe8,49de6b63-a845-4b5a-9818-18a3e0bb6fe8,1,0,b787818e-5572-4ef2-ba54-1e9b69569824,b787818e-5572-4ef2-ba54-1e9b69569824,1,0,1e13bd37-61b5-4901-a607-e00e5d1900a8,1e13bd37-61b5-4901-a607-e00e5d1900a8,1,0,395b43e4-c18b-4f68-b99c-aed8d4b8cac9,395b43e4-c18b-4f68-b99c-aed8d4b8cac9,1,0,231d7b21-c00c-4782-b610-d56593be436f,231d7b21-c00c-4782-b610-d56593be436f,1,0,79250d1a-77ff-4015-a5b5-83460b1611e2,79250d1a-77ff-4015-a5b5-83460b1611e2,1,0,60018ee0-71ec-4975-a95d-f6f188748ff2,60018ee0-71ec-4975-a95d-f6f188748ff2,1,0,68d35468-279a-43ef-9d71-fed44a792177,68d35468-279a-43ef-9d71-fed44a792177,1,0,77bec3d8-582a-4156-861b-4902008f014c,77bec3d8-582a-4156-861b-4902008f014c,1,0,bf3304c0-5078-478f-bbf8-6178264c5f26,bf3304c0-5078-478f-bbf8-6178264c5f26,1,0,2ad1caba-7a89-4389-934f-419970260961,2ad1caba-7a89-4389-934f-419970260961,1,0,bfc1a708-662d-4dc1-82b4-7b09bb1b0751,bfc1a708-662d-4dc1-82b4-7b09bb1b0751,1,0,f88c4a72-368c-4f45-bb2c-d18f214a5079,f88c4a72-368c-4f45-bb2c-d18f214a5079,1,0,611876ba-7e6e-40c3-89a9-bb9b19cd1bfb,611876ba-7e6e-40c3-89a9-bb9b19cd1bfb,1,0,9dc2e313-c086-4fd9-83e8-911859ef480d,9dc2e313-c086-4fd9-83e8-911859ef480d,1,0,8a14ced0-9e45-4b3a-a135-11413c3a33c2,8a14ced0-9e45-4b3a-a135-11413c3a33c2,1,0,af7377db-0b27-42f7-a639-e2feb4015412,af7377db-0b27-42f7-a639-e2feb4015412,1,0,e1a200e2-64f3-434c-ae0d-5f24b9d65c9b,e1a200e2-64f3-434c-ae0d-5f24b9d65c9b,1,0,ab7db146-f26a-418a-8c45-e2513bf84e08,ab7db146-f26a-418a-8c45-e2513bf84e08,1,0,ece3bd8d-6616-44d5-9c14-6b3557738872,ece3bd8d-6616-44d5-9c14-6b3557738872,1,0,663a80ba-b97e-4265-a627-4a7d273f9472,663a80ba-b97e-4265-a627-4a7d273f9472,1,0,fbf754c3-ab89-4704-b01a-67f8bcea0c7c,fbf754c3-ab89-4704-b01a-67f8bcea0c7c,1,0,3b0afd55-f08d-4d59-b6df-d7c4d1c52446,3b0afd55-f08d-4d59-b6df-d7c4d1c52446,1,0,4893ad50-df19-4d86-9469-40491ba733c9,4893ad50-df19-4d86-9469-40491ba733c9,1,0,25a65c1e-8e67-4135-843d-1e0da72dfd64,25a65c1e-8e67-4135-843d-1e0da72dfd64,1,0,5724fbd5-4d91-4e6d-ae24-8925a4d83c83,5724fbd5-4d91-4e6d-ae24-8925a4d83c83,1,0,29a6416e-b0f5-4111-8f86-1ba80244e73a,29a6416e-b0f5-4111-8f86-1ba80244e73a,1,0,0f49085a-9b83-4256-be60-f341b2ef132e,0f49085a-9b83-4256-be60-f341b2ef132e,1,0,f44c66d6-cfe2-482f-a921-de3db3cd09ea,f44c66d6-cfe2-482f-a921-de3db3cd09ea,1,0,5ec1b7af-f4bc-4ec1-8f43-85c4f9d146a0,5ec1b7af-f4bc-4ec1-8f43-85c4f9d146a0,1,0,c521bd61-386e-41c8-bcc3-29d54b63cc32,c521bd61-386e-41c8-bcc3-29d54b63cc32,1,0,d46e3424-6d30-4229-9a56-ab256517534a,d46e3424-6d30-4229-9a56-ab256517534a,1,0,09d3633d-8e8c-47f3-8f34-d70eb94577e1,09d3633d-8e8c-47f3-8f34-d70eb94577e1,1,0,fe868143-363b-4da1-889b-98d4dd10a1fd,fe868143-363b-4da1-889b-98d4dd10a1fd,1,0,b791a549-ae94-46f2-8f04-771fdeb4cc54,b791a549-ae94-46f2-8f04-771fdeb4cc54,1,0,4681cb63-c581-4c08-b18c-016d9b478ef2,4681cb63-c581-4c08-b18c-016d9b478ef2,1,0,04055821-03ce-4049-af2c-8670c80517f6,04055821-03ce-4049-af2c-8670c80517f6,1,0,0101305d-62eb-4802-9cd4-d615a518d842,0101305d-62eb-4802-9cd4-d615a518d842,1,0,898d2ba7-631a-4e7a-9bdf-cd2ef411e57a,898d2ba7-631a-4e7a-9bdf-cd2ef411e57a,1,0,1d429511-9446-4102-95f4-df676125e14c,1d429511-9446-4102-95f4-df676125e14c,1,0,bf1fc624-60d7-4a04-bb3a-b6e2882bebfe,bf1fc624-60d7-4a04-bb3a-b6e2882bebfe,1,0,7c424424-9660-462d-9cf2-4c1e6bd284fa,7c424424-9660-462d-9cf2-4c1e6bd284fa,1,0,e118f957-ab2c-473b-ab64-37032f727416,e118f957-ab2c-473b-ab64-37032f727416,1,0,e770e26e-a3a4-487d-b3bb-aeb63d8b7323,e770e26e-a3a4-487d-b3bb-aeb63d8b7323,1,0,21f64e5f-dc94-4ce9-b836-e75646ae3325,21f64e5f-dc94-4ce9-b836-e75646ae3325,1,0,82e8a180-f2e1-406c-9609-89d33504aff2,82e8a180-f2e1-406c-9609-89d33504aff2,1,0,e7437c81-3d5b-466e-880c-8febe4a68e88,e7437c81-3d5b-466e-880c-8febe4a68e88,1,0,99bc26f9-ba56-4c63-9fd1-c2f3d630b93c,99bc26f9-ba56-4c63-9fd1-c2f3d630b93c,1,0,307771e6-bcf7-4016-b369-e1655bbe9e94,307771e6-bcf7-4016-b369-e1655bbe9e94,1,0,bf8c60f7-7dea-4a2c-8ce2-7001a6a37bfa,bf8c60f7-7dea-4a2c-8ce2-7001a6a37bfa,1,0,38fc6a54-846c-40b0-9254-3261f540bf18,38fc6a54-846c-40b0-9254-3261f540bf18,1,0,d9134d0c-56cd-4b8f-ab11-ae37fc306801,d9134d0c-56cd-4b8f-ab11-ae37fc306801,1,0,9408d0ee-bd61-4b95-ac7c-98de139b5f9e,9408d0ee-bd61-4b95-ac7c-98de139b5f9e,1,0,8f2af24b-f5fa-4f6d-831e-28453bdedefc,8f2af24b-f5fa-4f6d-831e-28453bdedefc,1,0,d119e21d-0087-4f22-b3bd-b14707b65330,d119e21d-0087-4f22-b3bd-b14707b65330,1,0,dc9b4072-11de-40fe-bf2a-f7b15af0a250,dc9b4072-11de-40fe-bf2a-f7b15af0a250,1,0,e2cf5ca9-c2a0-4506-89e6-318cad0a48a3,e2cf5ca9-c2a0-4506-89e6-318cad0a48a3,1,0,aa0e290d-21ab-4197-b8f3-cf1f97ab1b98,aa0e290d-21ab-4197-b8f3-cf1f97ab1b98,1,0,eefa9859-4168-4a10-923f-e4a713c99a3b,eefa9859-4168-4a10-923f-e4a713c99a3b,1,0,5aecdfd1-1cd7-4523-be23-7e32fcb01a94,5aecdfd1-1cd7-4523-be23-7e32fcb01a94,1,0,932b1c1a-72eb-49cd-8218-d0ced9c454d8,932b1c1a-72eb-49cd-8218-d0ced9c454d8,1,0,96d70dc4-02bd-47ad-9465-81de6ff5bdc9,96d70dc4-02bd-47ad-9465-81de6ff5bdc9,1,0,38acaf7a-5a77-40bf-ba2a-17b31cccd37d,38acaf7a-5a77-40bf-ba2a-17b31cccd37d,1,0,cb604857-8e49-4f2f-b5c8-2a7d8a3cf8e4,cb604857-8e49-4f2f-b5c8-2a7d8a3cf8e4,1,0,f33e9c76-e523-4f4e-ab4b-3fc1b256d8dd,f33e9c76-e523-4f4e-ab4b-3fc1b256d8dd,1,0,5dd336c4-88c5-4f53-acf0-5f86a658c528,5dd336c4-88c5-4f53-acf0-5f86a658c528,1,0,c723112b-286d-46f1-989d-81252062a025,c723112b-286d-46f1-989d-81252062a025,1,0,67e8b47e-4bad-4b2f-b196-8a9708893051,67e8b47e-4bad-4b2f-b196-8a9708893051,1,0,39bddcde-697c-4e77-adfd-e4a77529ea97,39bddcde-697c-4e77-adfd-e4a77529ea97,1,0,a3b15381-bf9b-4b26-96eb-392fa2cc8223,a3b15381-bf9b-4b26-96eb-392fa2cc8223,1,0,a583e53a-3f3c-48c7-8928-37ce40b2bafe,a583e53a-3f3c-48c7-8928-37ce40b2bafe,1,0,a844dd4a-274a-4894-9446-031dbe006084,a844dd4a-274a-4894-9446-031dbe006084,1,0,9a740f81-5437-47af-8ed9-ea62edcb2ea1,9a740f81-5437-47af-8ed9-ea62edcb2ea1,1,0,cdf54c86-0a1c-4f74-93ee-6d8d8db0a778,cdf54c86-0a1c-4f74-93ee-6d8d8db0a778,1,0,77bdd30f-4933-4bda-9c7a-b0a097da0910,77bdd30f-4933-4bda-9c7a-b0a097da0910,1,0,a8d52851-4293-4fe4-b2cb-f9c8c166ed97,a8d52851-4293-4fe4-b2cb-f9c8c166ed97,1,0,d4879ecc-8f1a-4183-99a8-d6dfc1eed3f8,d4879ecc-8f1a-4183-99a8-d6dfc1eed3f8,1,0,8e9eb604-5f15-4ef5-8906-5bcd57b3d099,8e9eb604-5f15-4ef5-8906-5bcd57b3d099,1,0,a682e9e1-284f-4e32-86b2-6736f159f585,a682e9e1-284f-4e32-86b2-6736f159f585,1,0,84f0bd89-9b86-440f-b942-9b685e22233e,84f0bd89-9b86-440f-b942-9b685e22233e,1,0,f2d508b3-9425-4ce6-86d8-5893ca4a8cd6,f2d508b3-9425-4ce6-86d8-5893ca4a8cd6,1,0,ce61612f-bcbb-4a02-bca0-d88e0ee42bd7,ce61612f-bcbb-4a02-bca0-d88e0ee42bd7,1,0,c1c35035-44cc-4aa1-ae8e-db3513ddc5f3,c1c35035-44cc-4aa1-ae8e-db3513ddc5f3,1,0,ac52baa1-02cb-4ce8-8f4f-1f9441b1cda0,ac52baa1-02cb-4ce8-8f4f-1f9441b1cda0,1,0,fabf8a0b-366f-4f23-9377-315534bb854b,fabf8a0b-366f-4f23-9377-315534bb854b,1,0,7aac6439-64c9-4492-b866-bf91dda82d06,7aac6439-64c9-4492-b866-bf91dda82d06,1,0,6ffe3723-c6df-497b-a3ff-d817fbabfd8c,6ffe3723-c6df-497b-a3ff-d817fbabfd8c,1,0,528a82b7-ef06-4d90-bb32-bd6d76ed6c74,528a82b7-ef06-4d90-bb32-bd6d76ed6c74,1,0,08b86f29-64ef-467a-af1a-d27ffdf621ba,08b86f29-64ef-467a-af1a-d27ffdf621ba,1,0,6483d1ab-c53d-4985-ad7e-b799adbcd9da,6483d1ab-c53d-4985-ad7e-b799adbcd9da,1,0,82f66233-ed13-49ae-ab72-7cf91c88c760,82f66233-ed13-49ae-ab72-7cf91c88c760,1,0,75cddbcd-e960-4164-81d8-ac0a2a36e95b,75cddbcd-e960-4164-81d8-ac0a2a36e95b,1,0,e14d57f4-ae4a-4644-9ec1-a6af1b3e4c41,e14d57f4-ae4a-4644-9ec1-a6af1b3e4c41,1,0,314f8451-ba96-46cd-bf9f-3a87df7d2a5b,314f8451-ba96-46cd-bf9f-3a87df7d2a5b,1,0,d9151001-a911-45c1-a8e6-dcf0da623ed3,d9151001-a911-45c1-a8e6-dcf0da623ed3,1,0,42f4ad3c-3724-4032-82f0-10c8dbe6cc9f,42f4ad3c-3724-4032-82f0-10c8dbe6cc9f,1,0,bbd8b83d-413a-4ffc-8351-e0ec4f4ae619,bbd8b83d-413a-4ffc-8351-e0ec4f4ae619,1,0,c49cef0d-3b71-4e66-9e35-72b94920dae5,c49cef0d-3b71-4e66-9e35-72b94920dae5,1,0,30e06f80-b6d0-4fa9-a346-8e17dbe2fb68,30e06f80-b6d0-4fa9-a346-8e17dbe2fb68,1,0,e589a693-ff50-4c36-ae26-a8fcae966d57,e589a693-ff50-4c36-ae26-a8fcae966d57,1,0,8bacb87e-c2e9-41f5-bae1-c3a6b0e8179f,8bacb87e-c2e9-41f5-bae1-c3a6b0e8179f,1,0,90f023f5-5b48-4f98-bfc6-b704277a355d,90f023f5-5b48-4f98-bfc6-b704277a355d,1,0,99485603-706d-4301-be25-82b1c0ee8f4d,99485603-706d-4301-be25-82b1c0ee8f4d,1,0,e7a28021-c75e-41b2-9974-cf4beee34d28,e7a28021-c75e-41b2-9974-cf4beee34d28,1,0,21e3bdf3-7cec-42de-8ef3-5815b9a1b747,21e3bdf3-7cec-42de-8ef3-5815b9a1b747,1,0,2a603c61-4cbf-4c6d-a0b2-40c835d36737,2a603c61-4cbf-4c6d-a0b2-40c835d36737,1,0,a8d7f071-401b-499e-957c-d077d8002e54,a8d7f071-401b-499e-957c-d077d8002e54,1,0,b6206c73-cf17-4e74-a14d-f2a2ef2b2cc1,b6206c73-cf17-4e74-a14d-f2a2ef2b2cc1,1,0,b363f72f-3629-453c-9f7d-9828ef6de733,b363f72f-3629-453c-9f7d-9828ef6de733,1,0,211a539b-4be9-4816-98f6-f756e65eafd8,211a539b-4be9-4816-98f6-f756e65eafd8,1,0,e2d8167d-3ebf-4771-b9e0-e6382d68cc18,e2d8167d-3ebf-4771-b9e0-e6382d68cc18,1,0,e9b9da80-7806-4c9c-a002-01cfa3109169,e9b9da80-7806-4c9c-a002-01cfa3109169,1,0,a271041d-0203-4ecd-bb39-70256c50192e,a271041d-0203-4ecd-bb39-70256c50192e,1,0,73eff626-a363-4a5a-879e-61ef6ce0726f,73eff626-a363-4a5a-879e-61ef6ce0726f,1,0,acf15b79-a6c4-4c46-8013-50d3b223baf6,acf15b79-a6c4-4c46-8013-50d3b223baf6,1,0,f6a29b80-e4c3-4c4f-8e2c-d4dda851d813,f6a29b80-e4c3-4c4f-8e2c-d4dda851d813,1,0,2d8d5d74-2bc0-4282-af66-e4a37694c147,2d8d5d74-2bc0-4282-af66-e4a37694c147,1,0,cfd31341-287b-4684-9ac0-b28b4e066f15,cfd31341-287b-4684-9ac0-b28b4e066f15,1,0,81de1b0b-7f2d-4098-ae99-061c6a90dc29,81de1b0b-7f2d-4098-ae99-061c6a90dc29,1,0,77c8a065-a8aa-4f39-93b6-c88f4c38ec66,77c8a065-a8aa-4f39-93b6-c88f4c38ec66,1,0,366fa6da-d3bf-4bb0-9a55-a307f9edee6a,366fa6da-d3bf-4bb0-9a55-a307f9edee6a,1,0,dd0610c8-cd87-4fe2-8a1f-70157132785b,dd0610c8-cd87-4fe2-8a1f-70157132785b,1,0,f829e2a9-5bdb-4171-8b32-8d10d5968813,f829e2a9-5bdb-4171-8b32-8d10d5968813,1,0,647ba8f8-57f7-4c19-af59-525517c1e392,647ba8f8-57f7-4c19-af59-525517c1e392,1,0,39062cb3-4ae8-4c0d-889b-038a55179946,39062cb3-4ae8-4c0d-889b-038a55179946,1,0,c62d4212-36ca-4afb-bac9-269b6f64ca51,c62d4212-36ca-4afb-bac9-269b6f64ca51,1,0,5cec5e16-46ad-4f8c-b869-f5b1cc487884,5cec5e16-46ad-4f8c-b869-f5b1cc487884,1,0,ca0363bb-81c2-4fce-b2f0-e8f42d118a74,ca0363bb-81c2-4fce-b2f0-e8f42d118a74,1,0,7aacdf81-49fd-47a3-a36a-c483f1b05872,7aacdf81-49fd-47a3-a36a-c483f1b05872,1,0,857015e2-afb2-403d-bfb7-7acb5080797b,857015e2-afb2-403d-bfb7-7acb5080797b,1,0,5657286b-114b-41de-ab7d-45d0f0d95e2d,5657286b-114b-41de-ab7d-45d0f0d95e2d,1,0,42a0271e-6783-44db-95c1-09805ae01f58,42a0271e-6783-44db-95c1-09805ae01f58,1,0,8628783e-4fad-4dff-8220-9e0ddc8580f8,8628783e-4fad-4dff-8220-9e0ddc8580f8,1,0,356fc245-3034-42d1-84d0-632c6dc7a3d5,356fc245-3034-42d1-84d0-632c6dc7a3d5,1,0,07462664-6b58-4f5a-9b3f-2e5c376f17df,07462664-6b58-4f5a-9b3f-2e5c376f17df,1,0,6f23e946-f700-424b-b9bf-3a9c8846908d,6f23e946-f700-424b-b9bf-3a9c8846908d,1,0,f3ef5989-a848-4a7f-8ac5-0eca882a6aa1,f3ef5989-a848-4a7f-8ac5-0eca882a6aa1,1,0,4f5087ab-cc60-4d1e-ba83-a319536bf8ba,4f5087ab-cc60-4d1e-ba83-a319536bf8ba,1,0,07d0d6e9-e0a7-4543-9668-3850c1e0a15c,07d0d6e9-e0a7-4543-9668-3850c1e0a15c,1,0,c656771c-dcb7-4c78-9a16-e62806d5bb5a,c656771c-dcb7-4c78-9a16-e62806d5bb5a,1,0,ec42c45c-18ca-44b0-9c59-1cb204552a43,ec42c45c-18ca-44b0-9c59-1cb204552a43,1,0,2aafb1a1-4321-47e9-9783-03ab616a2873,2aafb1a1-4321-47e9-9783-03ab616a2873,1,0,71109997-6da0-4eaf-bbf2-f94fa24f37cc,71109997-6da0-4eaf-bbf2-f94fa24f37cc,1,0,a3deeef2-f8a2-462f-a57f-87d89e4ec12a,a3deeef2-f8a2-462f-a57f-87d89e4ec12a,1,0,d601281c-379d-4a9d-843e-478fd6567415,d601281c-379d-4a9d-843e-478fd6567415,1,0,fd9b3f7d-d25d-4ecb-8b87-218d5ccf1f7b,fd9b3f7d-d25d-4ecb-8b87-218d5ccf1f7b,1,0,427e6f15-334e-42be-9554-895d8f7ebfc6,427e6f15-334e-42be-9554-895d8f7ebfc6,1,0,02abb5e3-9d4e-4c45-af19-71796966ed19,02abb5e3-9d4e-4c45-af19-71796966ed19,1,0,e85a4314-7b63-4294-9bd0-ff77e3ae7c1e,e85a4314-7b63-4294-9bd0-ff77e3ae7c1e,1,0,36bc8523-41a5-48ff-9bd0-758d078c4408,36bc8523-41a5-48ff-9bd0-758d078c4408,1,0,94ca1b45-3cf0-4857-8299-999c93f4fb56,94ca1b45-3cf0-4857-8299-999c93f4fb56,1,0,ee8419c6-79ca-4546-9a66-bacaa08d2a73,ee8419c6-79ca-4546-9a66-bacaa08d2a73,1,0,e36ddb60-2f21-4c5f-b96c-947bcf2af42a,e36ddb60-2f21-4c5f-b96c-947bcf2af42a,1,0,d4a0ca3b-3985-4ba2-9e96-1c5baed28b46,d4a0ca3b-3985-4ba2-9e96-1c5baed28b46,1,0,ada11ea2-94d5-4172-a383-a51774599568,ada11ea2-94d5-4172-a383-a51774599568,1,0,50515bbc-43ee-4b00-bfc5-105b7981bd8f,50515bbc-43ee-4b00-bfc5-105b7981bd8f,1,0,1ea080b0-0a11-4152-b8bb-4918bc142a23,1ea080b0-0a11-4152-b8bb-4918bc142a23,1,0,a21cd1c1-4649-4dc2-9dbd-a913f2d6ca75,a21cd1c1-4649-4dc2-9dbd-a913f2d6ca75,1,0,6930e471-7935-4d68-a980-2acde93ba801,6930e471-7935-4d68-a980-2acde93ba801,1,0,2c425fa5-b10b-4a6f-926a-5cb4c1f2d491,2c425fa5-b10b-4a6f-926a-5cb4c1f2d491,1,0,5135cc48-c749-4acb-a225-d110f386f482,5135cc48-c749-4acb-a225-d110f386f482,1,0,15e6f31b-556a-4f47-9f40-2f69ac7fcb43,15e6f31b-556a-4f47-9f40-2f69ac7fcb43,1,0,53c4c3b2-9257-4d02-8df8-6b55fe9abdae,53c4c3b2-9257-4d02-8df8-6b55fe9abdae,1,0,d2dba2ae-e987-4c9d-a289-3dc19afa87cd,d2dba2ae-e987-4c9d-a289-3dc19afa87cd,1,0,2e9fa546-96fb-4ecb-b933-7921e131e89b,2e9fa546-96fb-4ecb-b933-7921e131e89b,1,0,4645b1ad-eb8f-484c-b29c-2093d9ef9dba,4645b1ad-eb8f-484c-b29c-2093d9ef9dba,1,0,637a132b-1a88-44ba-b45f-ed4ed1ac1001,637a132b-1a88-44ba-b45f-ed4ed1ac1001,1,0,699f734b-43d2-4351-bff8-e0e21e164a42,699f734b-43d2-4351-bff8-e0e21e164a42,1,0,95f0792a-7ac4-450a-b05c-219741e61abd,95f0792a-7ac4-450a-b05c-219741e61abd,1,0,742a2e8c-496e-4e02-931d-d33f7afe07a5,742a2e8c-496e-4e02-931d-d33f7afe07a5,1,0,c3efa853-cd29-4618-929f-e3bec33dfd65,c3efa853-cd29-4618-929f-e3bec33dfd65,1,0,62185c28-3d24-487a-9441-b309dcf11e31,62185c28-3d24-487a-9441-b309dcf11e31,1,0,9f264aeb-664d-4724-8248-11873d63ef3b,9f264aeb-664d-4724-8248-11873d63ef3b,1,0,b926d058-53a9-4eea-b4f9-98e77f798dd9,b926d058-53a9-4eea-b4f9-98e77f798dd9,1,0,495e2c77-4868-4191-ac18-f94e55a5982e,495e2c77-4868-4191-ac18-f94e55a5982e,1,0,20191a65-322c-457d-85f5-ed1258b6fe8e,20191a65-322c-457d-85f5-ed1258b6fe8e,1,0,d71ca3bc-e41a-44d9-afe4-c68f1211b3a1,d71ca3bc-e41a-44d9-afe4-c68f1211b3a1,1,0,23b46ecd-14dc-4cc5-8ff0-c676a8337aee,23b46ecd-14dc-4cc5-8ff0-c676a8337aee,1,0,769c60aa-44f4-4c98-a461-d3f5c2b67f61,769c60aa-44f4-4c98-a461-d3f5c2b67f61,1,0,f9809c99-0eaa-4249-967c-a4bef4763277,f9809c99-0eaa-4249-967c-a4bef4763277,1,0,37fa88a0-f2c1-455f-a28d-74165e8b933d,37fa88a0-f2c1-455f-a28d-74165e8b933d,1,0,e4476f09-909b-49f7-8e01-72eea8ceaca6,e4476f09-909b-49f7-8e01-72eea8ceaca6,1,0,2861412c-46f0-454e-b81d-fe081afb5c7a,2861412c-46f0-454e-b81d-fe081afb5c7a,1,0,2b4ece05-b694-42e9-8239-55722fd84294,2b4ece05-b694-42e9-8239-55722fd84294,1,0,6564ce89-134f-4726-8693-fd93aad46180,6564ce89-134f-4726-8693-fd93aad46180,1,0,0d743731-da5d-4c99-b19f-e93c69b77e14,0d743731-da5d-4c99-b19f-e93c69b77e14,1,0,d6f15367-23e2-4766-bc7c-8acd0063aa0c,d6f15367-23e2-4766-bc7c-8acd0063aa0c,1,0,966b1bde-5b0c-446d-b38b-dc037e2ff7ad,966b1bde-5b0c-446d-b38b-dc037e2ff7ad,1,0,fa4c5665-4d73-4db2-a055-8c1c8a302f82,fa4c5665-4d73-4db2-a055-8c1c8a302f82,1,0,e3e0caa1-6d3f-45a6-9043-d58a34f35b8f,e3e0caa1-6d3f-45a6-9043-d58a34f35b8f,1,0,9100b286-8ae9-4de3-b116-5ce0fa95b80c,9100b286-8ae9-4de3-b116-5ce0fa95b80c,1,0,3d315df6-e000-4cbd-810d-0b26c0d1bc54,3d315df6-e000-4cbd-810d-0b26c0d1bc54,1,0,fa429302-ccaf-4c89-8a11-3a1d30817c00,fa429302-ccaf-4c89-8a11-3a1d30817c00,1,0,9b4c49ce-93da-439a-8d67-f3774e92800a,9b4c49ce-93da-439a-8d67-f3774e92800a,1,0,5f8fa827-7017-4b45-b458-3571b8b611f5,5f8fa827-7017-4b45-b458-3571b8b611f5,1,0,79749167-2912-4e06-9deb-7915a1b4390d,79749167-2912-4e06-9deb-7915a1b4390d,1,0,1c93fcd3-53a1-403f-a30b-454fbc941d55,1c93fcd3-53a1-403f-a30b-454fbc941d55,1,0,0fc54be4-2e19-45cf-b62f-7cbc70a70d5f,0fc54be4-2e19-45cf-b62f-7cbc70a70d5f,1,0,adec3963-b22f-4463-a3f4-c9ec27d187a8,adec3963-b22f-4463-a3f4-c9ec27d187a8,1,0,d8dae0c8-8e11-44bf-bf60-d316220f3e82,d8dae0c8-8e11-44bf-bf60-d316220f3e82,1,0,12afec4d-1728-4aa8-86e5-23cd2f1572b3,12afec4d-1728-4aa8-86e5-23cd2f1572b3,1,0,16bc197b-5a2f-43f4-8ba0-ffabd9289f5c,16bc197b-5a2f-43f4-8ba0-ffabd9289f5c,1,0,ee0c3960-d1bf-411f-a51f-e6e27dabea87,ee0c3960-d1bf-411f-a51f-e6e27dabea87,1,0,d7fb9441-1aef-4257-af3f-7f16340ac85e,d7fb9441-1aef-4257-af3f-7f16340ac85e,1,0,d07c094c-2795-4e0c-b030-bdb82be7ba6d,d07c094c-2795-4e0c-b030-bdb82be7ba6d,1,0,62637860-2013-4f9d-9aed-7cbb0dce8983,62637860-2013-4f9d-9aed-7cbb0dce8983,1,0,331217f6-7ec2-425d-93bd-f2979c5f2e05,331217f6-7ec2-425d-93bd-f2979c5f2e05,1,0,7d5b2b73-27e6-4a61-9558-eb2410eb9f2f,7d5b2b73-27e6-4a61-9558-eb2410eb9f2f,1,0,d754ed75-2a32-4b86-a153-7b50c39f9836,d754ed75-2a32-4b86-a153-7b50c39f9836,1,0,b81f3ee1-66f7-4626-a35b-ef85388c678e,b81f3ee1-66f7-4626-a35b-ef85388c678e,1,0,2ad04793-c162-4915-a260-ca4da535cdac,2ad04793-c162-4915-a260-ca4da535cdac,1,0,6568d853-dfe5-4064-aa73-c1f546e951b4,6568d853-dfe5-4064-aa73-c1f546e951b4,1,0,7cee27a7-9827-47f8-96f3-d4f1f3dcabe9,7cee27a7-9827-47f8-96f3-d4f1f3dcabe9,1,0,9bfba5cd-551a-4685-99dd-ebfd9f7fd7d1,9bfba5cd-551a-4685-99dd-ebfd9f7fd7d1,1,0,bbe718b2-6b4c-4d78-a408-5369d356a1e6,bbe718b2-6b4c-4d78-a408-5369d356a1e6,1,0,4ecd85c4-5be7-4e6b-8c53-7dd32bd4d707,4ecd85c4-5be7-4e6b-8c53-7dd32bd4d707,1,0,eb7623df-b4e3-4272-9f92-42a9214f9f17,eb7623df-b4e3-4272-9f92-42a9214f9f17,1,0,c7e4e97f-fb85-4e95-bfdf-7706e867d89b,c7e4e97f-fb85-4e95-bfdf-7706e867d89b,1,0,b08fd921-c3d6-44eb-9401-fec5acab5d22,b08fd921-c3d6-44eb-9401-fec5acab5d22,1,0,f4f185af-5507-427c-b82b-515ea71f3fc1,f4f185af-5507-427c-b82b-515ea71f3fc1,1,0,1611855a-abf4-4269-aed3-3f78dce7bea5,1611855a-abf4-4269-aed3-3f78dce7bea5,1,0,c5bd277c-b258-43af-9c80-3e328b1581f5,c5bd277c-b258-43af-9c80-3e328b1581f5,1,0,d6fa2b86-1c3b-4c14-8a66-b6dbd40bca19,d6fa2b86-1c3b-4c14-8a66-b6dbd40bca19,1,0,f9cefef4-2182-42ca-93ef-b6a51d6555cc,f9cefef4-2182-42ca-93ef-b6a51d6555cc,1,0,71e1c7de-7367-424c-ae07-6ec04b408b83,71e1c7de-7367-424c-ae07-6ec04b408b83,1,0,b3956392-199c-4934-80d1-8cdab453d879,b3956392-199c-4934-80d1-8cdab453d879,1,0,5e26aeb7-617c-4983-b40d-5a61c77aa6a4,5e26aeb7-617c-4983-b40d-5a61c77aa6a4,1,0,d1bd7448-aa5f-43fc-9735-224f36960c3e,d1bd7448-aa5f-43fc-9735-224f36960c3e,1,0,94dbfc4c-d530-4fbd-b7cf-a58a56289b97,94dbfc4c-d530-4fbd-b7cf-a58a56289b97,1,0,6fa25c57-411d-4f9c-9c3e-c7ea1b1f7195,6fa25c57-411d-4f9c-9c3e-c7ea1b1f7195,1,0,1bfa15cf-222e-4e5b-beb7-7a50f8131799,1bfa15cf-222e-4e5b-beb7-7a50f8131799,1,0,8227471b-8ffb-4ba7-b4da-b21570582876,8227471b-8ffb-4ba7-b4da-b21570582876,1,0,25864028-1a53-4a8d-b6e4-189fa62c62f5,25864028-1a53-4a8d-b6e4-189fa62c62f5,1,0,e923beae-0bd8-4119-a802-fd6bfb729f10,e923beae-0bd8-4119-a802-fd6bfb729f10,1,0,d40bb9f7-3397-40ad-b658-f8942bdbbaee,d40bb9f7-3397-40ad-b658-f8942bdbbaee,1,0,67c1269a-79e6-44d9-9254-671c50fb3974,67c1269a-79e6-44d9-9254-671c50fb3974,1,0,5d455d2a-910d-48c7-bc74-ba5ad7855110,5d455d2a-910d-48c7-bc74-ba5ad7855110,1,0,7cf3feea-75e2-42cc-9c89-4a9182034910,7cf3feea-75e2-42cc-9c89-4a9182034910,1,0,930a0156-feb3-4e14-96a5-cd183a4891f4,930a0156-feb3-4e14-96a5-cd183a4891f4,1,0,cfa55ab3-1335-4712-8352-03c2f0277708,cfa55ab3-1335-4712-8352-03c2f0277708,1,0,fb176f8b-edb9-4e4b-926d-dabe9552bfa1,fb176f8b-edb9-4e4b-926d-dabe9552bfa1,1,0,cd5c52d4-f832-4a3b-b4c7-b4f3e0c98222,cd5c52d4-f832-4a3b-b4c7-b4f3e0c98222,1,0,e268a337-f576-4ec2-8a22-0500b79b2441,e268a337-f576-4ec2-8a22-0500b79b2441,1,0,eb33a8fa-75a6-4926-a025-05bc0abe4374,eb33a8fa-75a6-4926-a025-05bc0abe4374,1,0,c352da94-ea64-44b1-b2df-2c4ed9e2efc5,c352da94-ea64-44b1-b2df-2c4ed9e2efc5,1,0,6babd40a-8b8f-454b-b4a4-7cf2854f49a2,6babd40a-8b8f-454b-b4a4-7cf2854f49a2,1,0,bf480259-6e72-4ad1-ac41-0b0d41a75387,bf480259-6e72-4ad1-ac41-0b0d41a75387,1,0,a41f060a-f0f6-4940-960b-5056082b2c45,a41f060a-f0f6-4940-960b-5056082b2c45,1,0,5d45a926-513f-4bbc-a002-54a2db94b297,5d45a926-513f-4bbc-a002-54a2db94b297,1,0,73f5ce9e-d5a7-45c0-965a-8af1d776a98a,73f5ce9e-d5a7-45c0-965a-8af1d776a98a,1,0,073e14d4-5d43-428b-a9a7-985d173e94c7,073e14d4-5d43-428b-a9a7-985d173e94c7,1,0,61dc318a-c17d-402e-bf64-a0c0a63a1c93,61dc318a-c17d-402e-bf64-a0c0a63a1c93,1,0,c4b0c101-8cd9-441c-b94c-9dfa1ad58d45,c4b0c101-8cd9-441c-b94c-9dfa1ad58d45,1,0,2394775b-8910-4667-9c74-e1606e0b13bc,2394775b-8910-4667-9c74-e1606e0b13bc,1,0,43c88ffd-a036-4563-890b-bdc60180e841,43c88ffd-a036-4563-890b-bdc60180e841,1,0,af6e5e8e-6482-4820-a810-9e275ae039bf,af6e5e8e-6482-4820-a810-9e275ae039bf,1,0,fe3ccb8b-fee7-4825-a7bc-4b0fd432d382,fe3ccb8b-fee7-4825-a7bc-4b0fd432d382,1,0,7690620b-21d9-463a-8c22-60844927b4a0,7690620b-21d9-463a-8c22-60844927b4a0,1,0,e7f96a15-9f62-4a7f-85f3-06ba5d30b130,e7f96a15-9f62-4a7f-85f3-06ba5d30b130,1,0,b1db3255-38da-4684-b44e-4e2e9ee1dc35,b1db3255-38da-4684-b44e-4e2e9ee1dc35,1,0,4761f89b-7894-4dca-83b0-3be2d0828781,4761f89b-7894-4dca-83b0-3be2d0828781,1,0,573ff1f2-0ef5-4962-a0f6-eb84d430fe03,573ff1f2-0ef5-4962-a0f6-eb84d430fe03,1,0,7236d52f-9068-45ad-8b92-a7319e737e08,7236d52f-9068-45ad-8b92-a7319e737e08,1,0,3b0b708f-1b6c-4eb2-a2ad-86c088d9f1bf,3b0b708f-1b6c-4eb2-a2ad-86c088d9f1bf,1,0,9db23e96-d13a-4847-941a-462f64d0619d,9db23e96-d13a-4847-941a-462f64d0619d,1,0,7575fd54-c91b-4220-a2ef-2cf533f60426,7575fd54-c91b-4220-a2ef-2cf533f60426,1,0,1b751f19-bb0c-40c2-a5d1-068544c36c6b,1b751f19-bb0c-40c2-a5d1-068544c36c6b,1,0,26e2c83b-8873-4ad3-9c50-e94421473a43,26e2c83b-8873-4ad3-9c50-e94421473a43,1,0,f0b2ec05-8e01-4ccf-b927-671329a9013b,f0b2ec05-8e01-4ccf-b927-671329a9013b,1,0,ab442b11-2482-4f80-ac82-01966e0657ec,ab442b11-2482-4f80-ac82-01966e0657ec,1,0,14fe4d39-81a1-470e-9724-6642ce34ad89,14fe4d39-81a1-470e-9724-6642ce34ad89,1,0,457578ab-dfe2-4419-8d8a-64283b341f42,457578ab-dfe2-4419-8d8a-64283b341f42,1,0,67ef6671-f537-46bf-88e6-f5bcf34a17a4,67ef6671-f537-46bf-88e6-f5bcf34a17a4,1,0,de778ca7-feaf-4531-80ae-11a534c56928,de778ca7-feaf-4531-80ae-11a534c56928,1,0,0dfbe7a9-9c2e-4cbd-ac53-3b547fd73e91,0dfbe7a9-9c2e-4cbd-ac53-3b547fd73e91,1,0,0a76a84d-e883-477e-8b87-7bf984cdc1cf,0a76a84d-e883-477e-8b87-7bf984cdc1cf,1,0,2b6c4184-6d7d-48e5-bd4e-ad31e63398d6,2b6c4184-6d7d-48e5-bd4e-ad31e63398d6,1,0,86df8648-e195-4661-99ee-6052788eb276,86df8648-e195-4661-99ee-6052788eb276,1,0,a22cf6e9-1157-4be5-8d30-aa9bbf2b5e6e,a22cf6e9-1157-4be5-8d30-aa9bbf2b5e6e,1,0,35133725-9647-42dc-a76a-2e62b2918ac4,35133725-9647-42dc-a76a-2e62b2918ac4,1,0,fa9572ee-0303-4421-9125-70cf3dd5a8c7,fa9572ee-0303-4421-9125-70cf3dd5a8c7,1,0,4cdd7920-0c49-4950-b92f-fdf6e34578b2,4cdd7920-0c49-4950-b92f-fdf6e34578b2,1,0,0af48650-5fef-4a5b-8ac8-38a9ded23bd4,0af48650-5fef-4a5b-8ac8-38a9ded23bd4,1,0,c7b883dc-6c26-4eb5-bc19-7919ad57da27,c7b883dc-6c26-4eb5-bc19-7919ad57da27,1,0,7fc37008-c378-4a70-a9a9-07543c7248a6,7fc37008-c378-4a70-a9a9-07543c7248a6,1,0,6410853e-a17e-44db-b8cc-bfefd7c4d239,6410853e-a17e-44db-b8cc-bfefd7c4d239,1,0,df042e4e-01a6-4480-a9c5-c0d7a454bb41,df042e4e-01a6-4480-a9c5-c0d7a454bb41,1,0,5a4abb96-8a18-4249-9fbb-7270fe2ba25b,5a4abb96-8a18-4249-9fbb-7270fe2ba25b,1,0,6852c584-d989-418d-8d18-255492891ef0,6852c584-d989-418d-8d18-255492891ef0,1,0,6a4972f1-012c-438b-b1d3-81e7f6da3ddd,6a4972f1-012c-438b-b1d3-81e7f6da3ddd,1,0,ff7cfd75-e0ba-49a3-92e1-33ea26df46e2,ff7cfd75-e0ba-49a3-92e1-33ea26df46e2,1,0,bc37fc81-6a86-4e72-b75a-abb75bddc4b3,bc37fc81-6a86-4e72-b75a-abb75bddc4b3,1,0,ff830967-faa9-415f-aa6e-8d27779f91f8,ff830967-faa9-415f-aa6e-8d27779f91f8,1,0,34dd0dd6-880c-4a90-9b9c-0503c8dc4ef3,34dd0dd6-880c-4a90-9b9c-0503c8dc4ef3,1,0,88618d0f-97af-4055-a490-561d4b8065a7,88618d0f-97af-4055-a490-561d4b8065a7,1,0,faffa228-4f4f-43f6-99b9-ed8c93af85c0,faffa228-4f4f-43f6-99b9-ed8c93af85c0,1,0,7b816ca0-ba60-4637-8348-23b26ad23e3f,7b816ca0-ba60-4637-8348-23b26ad23e3f,1,0,814a6db4-a43c-44e6-ac44-11983642c5ad,814a6db4-a43c-44e6-ac44-11983642c5ad,1,0,0bd74786-e018-4a66-b994-cdb439c57657,0bd74786-e018-4a66-b994-cdb439c57657,1,0,f50fcf2b-90bb-4d73-9fda-f4575e7682fa,f50fcf2b-90bb-4d73-9fda-f4575e7682fa,1,0,a01b8078-a6cd-4184-9317-2f1e0bcefb3a,a01b8078-a6cd-4184-9317-2f1e0bcefb3a,1,0,54a279b1-9e6a-49b0-8fda-e2807cf3a2a3,54a279b1-9e6a-49b0-8fda-e2807cf3a2a3,1,0,09502176-c53d-4525-b8ed-32d0a2e21a5d,09502176-c53d-4525-b8ed-32d0a2e21a5d,1,0,75ad984e-d41f-4591-b207-e8a4b05757a7,75ad984e-d41f-4591-b207-e8a4b05757a7,1,0,3f020f90-7aeb-4b21-ad71-4572ac796d4c,3f020f90-7aeb-4b21-ad71-4572ac796d4c,1,0,759e2ba0-2941-4cc1-8409-50b8a3620058,759e2ba0-2941-4cc1-8409-50b8a3620058,1,0,491cf25d-091e-4e09-b145-92d7073326cf,491cf25d-091e-4e09-b145-92d7073326cf,1,0,9b9d4d10-a4f2-4b0d-a63a-15d55f30fb26,9b9d4d10-a4f2-4b0d-a63a-15d55f30fb26,1,0,579f18ce-a7ce-4eb8-a4e3-a134a9a27bc1,579f18ce-a7ce-4eb8-a4e3-a134a9a27bc1,1,0,e7d05eca-2fdd-4cbb-8e2c-537525326ffe,e7d05eca-2fdd-4cbb-8e2c-537525326ffe,1,0,900bc96e-fbcc-473e-970c-96f561420f8e,900bc96e-fbcc-473e-970c-96f561420f8e,1,0,c3bb7b85-1e90-45c4-9bc1-39bbd253d498,c3bb7b85-1e90-45c4-9bc1-39bbd253d498,1,0,21d5a0b0-9a2b-4989-a50a-781645513179,21d5a0b0-9a2b-4989-a50a-781645513179,1,0,22df0fa4-cb1c-45a2-bcce-d32ed44e462a,22df0fa4-cb1c-45a2-bcce-d32ed44e462a,1,0,d97c6204-3656-4591-aea9-6ebedffe1247,d97c6204-3656-4591-aea9-6ebedffe1247,1,0,7caabe33-184f-45db-bef4-59d4e9cd2394,7caabe33-184f-45db-bef4-59d4e9cd2394,1,0,3255033a-e922-412e-a825-a3e8bd284703,3255033a-e922-412e-a825-a3e8bd284703,1,0,1aa65c35-e8a0-4c8a-90a3-48b62314cb19,1aa65c35-e8a0-4c8a-90a3-48b62314cb19,1,0,f250f992-ad5a-4dab-ad38-240604adb0c4,f250f992-ad5a-4dab-ad38-240604adb0c4,1,0,c4a7efca-f27d-4fdd-86ab-cc22a2a96fb2,c4a7efca-f27d-4fdd-86ab-cc22a2a96fb2,1,0,e63671f6-c96d-4ea4-8300-af7dbd0d016f,e63671f6-c96d-4ea4-8300-af7dbd0d016f,1,0,2c511469-0df6-470f-a808-decb275e8b1a,2c511469-0df6-470f-a808-decb275e8b1a,1,0,1bbb289c-a78a-47d0-b082-c2225ae1dc83,1bbb289c-a78a-47d0-b082-c2225ae1dc83,1,0,99b40f9f-f8f1-4779-8afc-59d30612f3d6,99b40f9f-f8f1-4779-8afc-59d30612f3d6,1,0,6131e875-3254-4281-9343-9118564c5451,6131e875-3254-4281-9343-9118564c5451,1,0,69622ff8-8a23-42fc-b63d-5097e3f636ac,69622ff8-8a23-42fc-b63d-5097e3f636ac,1,0,b88450cc-0dd4-4881-b3d9-a9e4e07e08f5,b88450cc-0dd4-4881-b3d9-a9e4e07e08f5,1,0,ef326bd8-1570-455e-ae8c-063b5578ad15,ef326bd8-1570-455e-ae8c-063b5578ad15,1,0,3713c76d-6ff7-4d45-9f15-d061bdf7dee2,3713c76d-6ff7-4d45-9f15-d061bdf7dee2,1,0,cb6d4979-2d70-4ceb-af08-deb2b19daf14,cb6d4979-2d70-4ceb-af08-deb2b19daf14,1,0,bf30b754-84fb-4104-b52b-a4f7df6fba12,bf30b754-84fb-4104-b52b-a4f7df6fba12,1,0,7bbd0835-b3e9-40cb-a424-670828b60bbb,7bbd0835-b3e9-40cb-a424-670828b60bbb,1,0,3e2138ea-48f9-4a60-8f22-53933bea49db,3e2138ea-48f9-4a60-8f22-53933bea49db,1,0,16bda2eb-eab8-4230-b89f-517fb943e009,16bda2eb-eab8-4230-b89f-517fb943e009,1,0,00964512-297f-4b8b-8def-8e4fc0eba991,00964512-297f-4b8b-8def-8e4fc0eba991,1,0,4185fea3-baba-4ba5-8019-9023b3011d4d,4185fea3-baba-4ba5-8019-9023b3011d4d,1,0,ea790035-92d6-445e-9fa3-08e565634d2b,ea790035-92d6-445e-9fa3-08e565634d2b,1,0,cce8900a-51eb-487d-b380-227d1b9d3943,cce8900a-51eb-487d-b380-227d1b9d3943,1,0,c043c36c-90c6-483b-bc20-7c2d85109b90,c043c36c-90c6-483b-bc20-7c2d85109b90,1,0,a1e619a6-3bb2-468d-a225-c88ccc3b71f5,a1e619a6-3bb2-468d-a225-c88ccc3b71f5,1,0,91d2d40a-c271-412c-b344-1fc98b94ba21,91d2d40a-c271-412c-b344-1fc98b94ba21,1,0,7ce47046-aee8-4809-bac9-a98930a844e1,7ce47046-aee8-4809-bac9-a98930a844e1,1,0,f480b8b9-ecec-4207-a0aa-12c5be4c2250,f480b8b9-ecec-4207-a0aa-12c5be4c2250,1,0,32717d25-6644-4903-8950-03e4c9b1a8fe,32717d25-6644-4903-8950-03e4c9b1a8fe,1,0,3644d8f3-db88-4fce-a851-39c115acfe03,3644d8f3-db88-4fce-a851-39c115acfe03,1,0,4653da74-34b2-47b9-ad88-efd761d6f1e9,4653da74-34b2-47b9-ad88-efd761d6f1e9,1,0,abf8a23d-45c3-4feb-8df2-279b709d7722,abf8a23d-45c3-4feb-8df2-279b709d7722,1,0,b0cd056f-c601-4d07-89c4-f7137b88bab6,b0cd056f-c601-4d07-89c4-f7137b88bab6,1,0,5cc3ebef-8f09-443c-b131-e5c3a9f7d260,5cc3ebef-8f09-443c-b131-e5c3a9f7d260,1,0,b9a21b8f-8a95-4c86-9ab2-ee6c90164e18,b9a21b8f-8a95-4c86-9ab2-ee6c90164e18,1,0,96ed4d39-3bdc-480f-af86-218f22000514,96ed4d39-3bdc-480f-af86-218f22000514,1,0,c9f72e74-22ac-4dc0-8462-0aa7819a9342,c9f72e74-22ac-4dc0-8462-0aa7819a9342,1,0,ca650484-293f-403a-b916-5ec7c3a8969e,ca650484-293f-403a-b916-5ec7c3a8969e,1,0,b71e706d-623e-4039-9bf0-24f151d861d8,b71e706d-623e-4039-9bf0-24f151d861d8,1,0,528f4823-33d8-49bd-a8fe-756a08a107c2,528f4823-33d8-49bd-a8fe-756a08a107c2,1,0,4869095b-b76e-45ca-b77d-0e74f59673f0,4869095b-b76e-45ca-b77d-0e74f59673f0,1,0,bcca2442-448b-4760-923b-cc9621ecb441,bcca2442-448b-4760-923b-cc9621ecb441,1,0,ba7657df-429a-4737-b787-19ef09fdebb2,ba7657df-429a-4737-b787-19ef09fdebb2,1,0,867d72be-f406-45a5-a511-b90459683f11,867d72be-f406-45a5-a511-b90459683f11,1,0,88b22e62-c144-401f-9635-3fb4d914772e,88b22e62-c144-401f-9635-3fb4d914772e,1,0,efeb2914-6604-403a-a11e-5cb995ab2bc9,efeb2914-6604-403a-a11e-5cb995ab2bc9,1,0,4c2dd77f-adc7-4f11-8e8f-1f8e41e6c84b,4c2dd77f-adc7-4f11-8e8f-1f8e41e6c84b,1,0,8f2b8a8e-4cd3-45e3-89ae-1cc4bd0ff30a,8f2b8a8e-4cd3-45e3-89ae-1cc4bd0ff30a,1,0,24b3aecc-f92f-475b-862e-83dd6d6aa2b9,24b3aecc-f92f-475b-862e-83dd6d6aa2b9,1,0,8525d945-08aa-4928-8dca-4e172ea94328,8525d945-08aa-4928-8dca-4e172ea94328,1,0,de506523-241a-4845-9259-37066afbf16a,de506523-241a-4845-9259-37066afbf16a,1,0,0510206f-eef0-4a5e-aeb7-d53c26d34adb,0510206f-eef0-4a5e-aeb7-d53c26d34adb,1,0,e616e007-43e7-4740-a083-b85f5435718a,e616e007-43e7-4740-a083-b85f5435718a,1,0,82be906c-bb06-40ea-b908-54574b0b4848,82be906c-bb06-40ea-b908-54574b0b4848,1,0,727da5b1-e054-4832-8e44-f5d5e56f52e5,727da5b1-e054-4832-8e44-f5d5e56f52e5,1,0,6135ffd5-1510-4aa8-8bf5-d7c0ca624414,6135ffd5-1510-4aa8-8bf5-d7c0ca624414,1,0,1f8cb390-2cbb-4a88-96ee-b31695b73d78,1f8cb390-2cbb-4a88-96ee-b31695b73d78,1,0,6feaad7c-9680-4341-b215-14581e2e2b37,6feaad7c-9680-4341-b215-14581e2e2b37,1,0,d5656a92-adfb-4733-830d-2b1565798b1f,d5656a92-adfb-4733-830d-2b1565798b1f,1,0,2ee0d56b-cd7c-42db-8fb6-c1567fe1967d,2ee0d56b-cd7c-42db-8fb6-c1567fe1967d,1,0,b0f6ea83-2849-4151-930d-692866919db3,b0f6ea83-2849-4151-930d-692866919db3,1,0,05558ce4-8568-4009-b1d7-307d54967515,05558ce4-8568-4009-b1d7-307d54967515,1,0,74380324-9b7b-49f6-9458-88deb9405f98,74380324-9b7b-49f6-9458-88deb9405f98,1,0,5286ceb2-0f16-4d70-ad89-dc15a308bb8d,5286ceb2-0f16-4d70-ad89-dc15a308bb8d,1,0,0abf70e0-0d81-4d85-a288-a2134da5fbf1,0abf70e0-0d81-4d85-a288-a2134da5fbf1,1,0,392fc734-4251-4d28-bfd1-d6f2f33ec0e5,392fc734-4251-4d28-bfd1-d6f2f33ec0e5,1,0,f66cb2da-3b3c-481f-823a-506f8290f619,f66cb2da-3b3c-481f-823a-506f8290f619,1,0,b80ddaf8-c5c3-4bde-98ed-74a1a0446f38,b80ddaf8-c5c3-4bde-98ed-74a1a0446f38,1,0,e4f16dbf-609d-4a34-a0bf-b20e5925c1ba,e4f16dbf-609d-4a34-a0bf-b20e5925c1ba,1,0,0bdcf045-5132-4a68-839c-a30515dc569e,0bdcf045-5132-4a68-839c-a30515dc569e,1,0,683861f9-9a5f-47db-8b03-959f839d5a3a,683861f9-9a5f-47db-8b03-959f839d5a3a,1,0,56fda0b0-c0ae-4ea2-8f77-df22a9ca3e87,56fda0b0-c0ae-4ea2-8f77-df22a9ca3e87,1,0,125be5bf-f410-451d-aa96-22fabc6a4d8a,125be5bf-f410-451d-aa96-22fabc6a4d8a,1,0,e5017fd0-ecea-48ae-99c8-7fc8c4f1d72b,e5017fd0-ecea-48ae-99c8-7fc8c4f1d72b,1,0,0a46166a-4562-4a50-b139-39dbe8a1fc84,0a46166a-4562-4a50-b139-39dbe8a1fc84,1,0,9aa6d1d1-75ad-40e4-b01f-274826c0c9da,9aa6d1d1-75ad-40e4-b01f-274826c0c9da,1,0,6ce64d65-f710-4d3f-a85f-26ce6915451e,6ce64d65-f710-4d3f-a85f-26ce6915451e,1,0,33eb9806-e34f-42a0-9825-3ff2de92c503,33eb9806-e34f-42a0-9825-3ff2de92c503,1,0,4905fcc5-9bd7-4b1b-b51d-882b11ee3d74,4905fcc5-9bd7-4b1b-b51d-882b11ee3d74,1,0,bcb58235-7cd7-4c15-a1eb-194ee38259e6,bcb58235-7cd7-4c15-a1eb-194ee38259e6,1,0,e19aefe7-634d-4218-8d40-75802d1691e0,e19aefe7-634d-4218-8d40-75802d1691e0,1,0,b885dbb2-6e18-46a6-929c-3d6d392343ad,b885dbb2-6e18-46a6-929c-3d6d392343ad,1,0,d31e24cf-7493-45dc-ba81-3a00618e53bc,d31e24cf-7493-45dc-ba81-3a00618e53bc,1,0,03f32b08-1b71-47cb-ba1d-965037df4d64,03f32b08-1b71-47cb-ba1d-965037df4d64,1,0,ce2a8ff8-94fd-4ce2-9caa-4711e9b79ee9,ce2a8ff8-94fd-4ce2-9caa-4711e9b79ee9,1,0,f942d212-9be0-4d80-84b6-5b63070e33e4,f942d212-9be0-4d80-84b6-5b63070e33e4,1,0,bea6bbc1-c1e4-4306-a0ca-efd47b9a8b23,bea6bbc1-c1e4-4306-a0ca-efd47b9a8b23,1,0,19a0b881-302e-4d0e-ace0-29a9d8379a48,19a0b881-302e-4d0e-ace0-29a9d8379a48,1,0,64c91eaa-084f-4801-8dbf-4e075c689c2b,64c91eaa-084f-4801-8dbf-4e075c689c2b,1,0,c01bb4de-06f7-4c3d-8ea3-d861f89948c0,c01bb4de-06f7-4c3d-8ea3-d861f89948c0,1,0,3c8c4f7b-d267-422c-becd-b6e8a9d6fe49,3c8c4f7b-d267-422c-becd-b6e8a9d6fe49,1,0,3aa12805-823a-439b-b039-fb9940aee312,3aa12805-823a-439b-b039-fb9940aee312,1,0,87d53573-f266-4b74-94af-041ae4b6518f,87d53573-f266-4b74-94af-041ae4b6518f,1,0,65a8545a-e73c-4c6a-8f87-7734d7ff5c03,65a8545a-e73c-4c6a-8f87-7734d7ff5c03,1,0,801cf1f7-2c65-4126-a3e9-b66abfdde67a,801cf1f7-2c65-4126-a3e9-b66abfdde67a,1,0,b991eefb-0d97-48a1-89c8-3d83b3b8d97a,b991eefb-0d97-48a1-89c8-3d83b3b8d97a,1,0,29c2bc01-8838-4459-8ac2-79862aa1dbc9,29c2bc01-8838-4459-8ac2-79862aa1dbc9,1,0,ad556c33-6811-48b4-ae90-57700a4d3fd6,ad556c33-6811-48b4-ae90-57700a4d3fd6,1,0,6e0833f4-3b57-4a5f-810f-9e2a492335df,6e0833f4-3b57-4a5f-810f-9e2a492335df,1,0,78ccdf33-9c2b-4931-afa3-5d652f2bcbc5,78ccdf33-9c2b-4931-afa3-5d652f2bcbc5,1,0,977bc9d8-9843-4343-85af-11a3d91f9966,977bc9d8-9843-4343-85af-11a3d91f9966,1,0,02ff9ef0-1057-4bc2-b745-1c2ae41835e3,02ff9ef0-1057-4bc2-b745-1c2ae41835e3,1,0,5a86abe7-db6c-43a3-9bcd-9b3647519c6b,5a86abe7-db6c-43a3-9bcd-9b3647519c6b,1,0,a6582448-734d-4a4c-a32c-c4755ca1bc93,a6582448-734d-4a4c-a32c-c4755ca1bc93,1,0,6a0b9a91-51a0-4ef4-b630-4f1b5a1da2b7,6a0b9a91-51a0-4ef4-b630-4f1b5a1da2b7,1,0,53327cc4-22b0-40f9-bae7-db483f85901c,53327cc4-22b0-40f9-bae7-db483f85901c,1,0,098d904d-95c9-459e-86d0-357ba9a40191,098d904d-95c9-459e-86d0-357ba9a40191,1,0,e9ab9d00-6e42-439b-8efc-fcacf727016d,e9ab9d00-6e42-439b-8efc-fcacf727016d,1,0,2d58033f-e15d-4a91-8165-dd311025c7c4,2d58033f-e15d-4a91-8165-dd311025c7c4,1,0,49cb3a36-90b3-4154-b571-265fc5cee21e,49cb3a36-90b3-4154-b571-265fc5cee21e,1,0,10472d2c-18ca-49b0-bd9d-c750db8498c5,10472d2c-18ca-49b0-bd9d-c750db8498c5,1,0,8efe5daf-272d-4255-b5c4-66dca7463b50,8efe5daf-272d-4255-b5c4-66dca7463b50,1,0,65af25a6-f699-4c40-b13e-3b7dff3f16fe,65af25a6-f699-4c40-b13e-3b7dff3f16fe,1,0,c4d2486d-289c-4812-b223-5ccfcd7f29e3,c4d2486d-289c-4812-b223-5ccfcd7f29e3,1,0,f9229c3e-4a47-49a4-8b14-908218012ff7,f9229c3e-4a47-49a4-8b14-908218012ff7,1,0,7c8b9203-2808-4a78-a2b1-b7a71b4f13f6,7c8b9203-2808-4a78-a2b1-b7a71b4f13f6,1,0,b9743978-ba6d-4892-bb32-f24d4a47dd50,b9743978-ba6d-4892-bb32-f24d4a47dd50,1,0,c43accb9-f33d-437f-b305-0595f8fe3032,c43accb9-f33d-437f-b305-0595f8fe3032,1,0,084a398b-836e-424c-af93-22aa39d5a15a,084a398b-836e-424c-af93-22aa39d5a15a,1,0,7da57c89-af2c-445a-96f7-39250f70306f,7da57c89-af2c-445a-96f7-39250f70306f,1,0,b5b94d94-25f7-4cfa-b1e9-6009fb848763,b5b94d94-25f7-4cfa-b1e9-6009fb848763,1,0,a2accf54-5966-42e8-ab2e-e56e415963ee,a2accf54-5966-42e8-ab2e-e56e415963ee,1,0,d8eb5329-5900-4b5d-b45e-458513dddfef,d8eb5329-5900-4b5d-b45e-458513dddfef,1,0,6d521e58-24a3-4f19-b4b0-dff84f7ca86b,6d521e58-24a3-4f19-b4b0-dff84f7ca86b,1,0,d5afea8a-1b7a-4b23-8ae0-cefa0b937b17,d5afea8a-1b7a-4b23-8ae0-cefa0b937b17,1,0,6ffd2da8-db97-46fc-9a53-8e665a598e3c,6ffd2da8-db97-46fc-9a53-8e665a598e3c,1,0,8c413fa5-9e24-4b81-aa55-0e78c5e3e20f,8c413fa5-9e24-4b81-aa55-0e78c5e3e20f,1,0,a4322f22-7de0-4018-8e06-9f1aa7cf0c07,a4322f22-7de0-4018-8e06-9f1aa7cf0c07,1,0,eaaed107-69d4-4963-be83-74519e331715,eaaed107-69d4-4963-be83-74519e331715,1,0,38cddf96-8703-4396-8c73-47fb22828a48,38cddf96-8703-4396-8c73-47fb22828a48,1,0,2c2cb793-0177-4983-91ca-9c292c5b10f1,2c2cb793-0177-4983-91ca-9c292c5b10f1,1,0,2a2e7f51-a4e5-48ec-b969-b1fca18ba9b5,2a2e7f51-a4e5-48ec-b969-b1fca18ba9b5,1,0,221fa473-3327-44e6-a033-6fdfd2be713c,221fa473-3327-44e6-a033-6fdfd2be713c,1,0,7a5973f0-7e29-44af-8e7b-70af71f704a4,7a5973f0-7e29-44af-8e7b-70af71f704a4,1,0,2b2bf0f7-0946-4492-bba0-27f007a70e64,2b2bf0f7-0946-4492-bba0-27f007a70e64,1,0,22c9a703-5ed3-4156-8fa6-476b1c1452f1,22c9a703-5ed3-4156-8fa6-476b1c1452f1,1,0,8be10d88-8c37-4444-9c89-6cbbe9913bda,8be10d88-8c37-4444-9c89-6cbbe9913bda,1,0,27089e8e-2c75-431c-b808-5d4dcba3cdca,27089e8e-2c75-431c-b808-5d4dcba3cdca,1,0,9ab3980e-a480-4f90-a8cc-bde99d5ace35,9ab3980e-a480-4f90-a8cc-bde99d5ace35,1,0,ec928563-6e35-4b84-b477-90d2481cec1c,ec928563-6e35-4b84-b477-90d2481cec1c,1,0,5d3e9678-20fe-4128-867a-3f7addaa7831,5d3e9678-20fe-4128-867a-3f7addaa7831,1,0,bb878f73-8a0f-459a-9076-ce57fe7957dc,bb878f73-8a0f-459a-9076-ce57fe7957dc,1,0,cb1d4a41-20a9-4d76-8798-d47d8858bff1,cb1d4a41-20a9-4d76-8798-d47d8858bff1,1,0,a2b4110b-4d9c-40fd-ab46-bfa08d2eb993,a2b4110b-4d9c-40fd-ab46-bfa08d2eb993,1,0,4f262b7f-927e-45f2-ad90-9d5e1b3155d1,4f262b7f-927e-45f2-ad90-9d5e1b3155d1,1,0,9f4b8e36-83ff-4694-8540-b5f47b18395f,9f4b8e36-83ff-4694-8540-b5f47b18395f,1,0,b4c026eb-4271-4366-b529-1cdfe2874563,b4c026eb-4271-4366-b529-1cdfe2874563,1,0,314b0da2-24d3-48cc-8532-d36c45eb3bf8,314b0da2-24d3-48cc-8532-d36c45eb3bf8,1,0,2e3ac3fb-9f0e-463f-95c2-9f661ce2e015,2e3ac3fb-9f0e-463f-95c2-9f661ce2e015,1,0,4077e700-ec20-4afa-8155-bf7e516a70cb,4077e700-ec20-4afa-8155-bf7e516a70cb,1,0,5198c6db-2100-4902-82c8-85c8ea555e78,5198c6db-2100-4902-82c8-85c8ea555e78,1,0,b99f2a63-54e8-490b-a0a4-1941fbc38b3f,b99f2a63-54e8-490b-a0a4-1941fbc38b3f,1,0,f0b1e9f4-2e07-44e6-88d2-c11457135781,f0b1e9f4-2e07-44e6-88d2-c11457135781,1,0,e010c0f9-f770-4fdc-8607-50838c0262ef,e010c0f9-f770-4fdc-8607-50838c0262ef,1,0,f935399f-3554-4c08-b0a6-eba13074e1b7,f935399f-3554-4c08-b0a6-eba13074e1b7,1,0,10008125-3aeb-4912-8ad6-d92d283ea09a,10008125-3aeb-4912-8ad6-d92d283ea09a,1,0,765f9584-fefa-4695-b130-dd54c3b0d79d,765f9584-fefa-4695-b130-dd54c3b0d79d,1,0,dd050ca0-8335-4654-ab5c-7babcb4824ef,dd050ca0-8335-4654-ab5c-7babcb4824ef,1,0,706cbf55-626d-4cab-b589-a2464368f6c1,706cbf55-626d-4cab-b589-a2464368f6c1,1,0,d22a0a50-220d-459e-a23a-39730a1e67c4,d22a0a50-220d-459e-a23a-39730a1e67c4,1,0,2c1c9284-ba8b-4282-a89c-429f02ea41f6,2c1c9284-ba8b-4282-a89c-429f02ea41f6,1,0,8c241467-76f7-4161-a8a1-5da4a6576b75,8c241467-76f7-4161-a8a1-5da4a6576b75,1,0,1d3b9eff-5d0b-437b-932f-0ec466e092b2,1d3b9eff-5d0b-437b-932f-0ec466e092b2,1,0,fd7e5257-024c-46de-9ff3-edd302fadba5,fd7e5257-024c-46de-9ff3-edd302fadba5,1,0,a4168057-d99f-4b55-b762-214f95ae3a30,a4168057-d99f-4b55-b762-214f95ae3a30,1,0,ab4fe549-1c07-42d9-b412-8b89ed115591,ab4fe549-1c07-42d9-b412-8b89ed115591,1,0,0335804e-efe5-4fb9-9ae9-2ddca73d77f3,0335804e-efe5-4fb9-9ae9-2ddca73d77f3,1,0,b49c589d-b45d-4aff-8899-72cfe433e9a6,b49c589d-b45d-4aff-8899-72cfe433e9a6,1,0,f71a8d47-6a6c-4b7e-90b3-5b7a3be3ccd3,f71a8d47-6a6c-4b7e-90b3-5b7a3be3ccd3,1,0,273ad3f7-c645-434d-93b0-e832134f3043,273ad3f7-c645-434d-93b0-e832134f3043,1,0,d320803b-1de4-4e66-b455-0afe39be5c41,d320803b-1de4-4e66-b455-0afe39be5c41,1,0,67e85b9a-a138-49ea-b474-04475f0f8c90,67e85b9a-a138-49ea-b474-04475f0f8c90,1,0,364218e0-87ba-4008-a3e3-e2351a5e04b8,364218e0-87ba-4008-a3e3-e2351a5e04b8,1,0,788a98e0-194f-466c-b4fa-bafd527aae26,788a98e0-194f-466c-b4fa-bafd527aae26,1,0,5d990585-02dd-4a13-8dfa-920df7d1dbb0,5d990585-02dd-4a13-8dfa-920df7d1dbb0,1,0,143f6db9-a4dc-4039-90d0-6161394a3e2f,143f6db9-a4dc-4039-90d0-6161394a3e2f,1,0,07820e9e-9d6b-4c37-909e-90dbd33e30c0,07820e9e-9d6b-4c37-909e-90dbd33e30c0,1,0,483dfce4-9c66-4739-94d4-17a005d64f5b,483dfce4-9c66-4739-94d4-17a005d64f5b,1,0,19506116-43ef-433c-822c-ef8717b0da6b,19506116-43ef-433c-822c-ef8717b0da6b,1,0,464b92cc-b577-4350-ae9f-e697390248d7,464b92cc-b577-4350-ae9f-e697390248d7,1,0,5a1242c8-3817-4d2c-9bfd-f62a6b80730c,5a1242c8-3817-4d2c-9bfd-f62a6b80730c,1,0,b9be6caf-e5e0-45a9-8cc8-3c83721632a2,b9be6caf-e5e0-45a9-8cc8-3c83721632a2,1,0,97e853dc-065f-4c6d-84cb-3d3aff367b22,97e853dc-065f-4c6d-84cb-3d3aff367b22,1,0,2f1fdf47-2627-496f-9e1f-77019abb2104,2f1fdf47-2627-496f-9e1f-77019abb2104,1,0,c996532a-8795-4136-8a40-9bb4b263277c,c996532a-8795-4136-8a40-9bb4b263277c,1,0,64c77788-fc49-4979-8163-949a891bd8b7,64c77788-fc49-4979-8163-949a891bd8b7,1,0,c39750ca-e33f-40c2-b830-119423d9a2ae,c39750ca-e33f-40c2-b830-119423d9a2ae,1,0,9372ff6b-27b6-48f3-a2a2-762e7c485766,9372ff6b-27b6-48f3-a2a2-762e7c485766,1,0,f454595a-4a3d-451b-8e8b-b17aa8314591,f454595a-4a3d-451b-8e8b-b17aa8314591,1,0,d3b7f89e-eb04-404e-bcc1-1d3557fb8d1a,d3b7f89e-eb04-404e-bcc1-1d3557fb8d1a,1,0,442f9d7b-ae8f-4074-8ece-d5aa1c66e35c,442f9d7b-ae8f-4074-8ece-d5aa1c66e35c,1,0,bc708da8-7fc6-4da1-8129-9ef6a86667af,bc708da8-7fc6-4da1-8129-9ef6a86667af,1,0,061842fe-4077-4d6e-aefe-de79409da730,061842fe-4077-4d6e-aefe-de79409da730,1,0,86249619-8981-4fc4-85fc-ce30e4b9d542,86249619-8981-4fc4-85fc-ce30e4b9d542,1,0,da6e4bff-9835-4b92-b62b-291a5d6c86fe,da6e4bff-9835-4b92-b62b-291a5d6c86fe,1,0,98aa8a80-29fa-4a54-8d0e-90d413d63da1,98aa8a80-29fa-4a54-8d0e-90d413d63da1,1,0,60af0c11-852e-4b45-afb7-251d75a87150,60af0c11-852e-4b45-afb7-251d75a87150,1,0,37e81463-a558-4b03-b0e4-82ac0e99c80c,37e81463-a558-4b03-b0e4-82ac0e99c80c,1,0,8be35c43-32e6-418d-b3d6-e53ef56babb7,8be35c43-32e6-418d-b3d6-e53ef56babb7,1,0,3e4f5fd0-af15-41ae-896e-458ce9fb7e4d,3e4f5fd0-af15-41ae-896e-458ce9fb7e4d,1,0,935d01e1-232b-480e-a6bf-c21c617c6348,935d01e1-232b-480e-a6bf-c21c617c6348,1,0,9bc7cc99-1237-4f9c-8a4e-f3ab459186ef,9bc7cc99-1237-4f9c-8a4e-f3ab459186ef,1,0,05c702a1-2c74-45d5-b2ee-fdd795b0945a,05c702a1-2c74-45d5-b2ee-fdd795b0945a,1,0,3fadaeb7-2c41-42a4-bfa8-c585602b1028,3fadaeb7-2c41-42a4-bfa8-c585602b1028,1,0,171a0dfc-032e-4eaf-81a2-e5e0dfde8d56,171a0dfc-032e-4eaf-81a2-e5e0dfde8d56,1,0,083c709b-ed8c-47e4-a190-421e14259e73,083c709b-ed8c-47e4-a190-421e14259e73,1,0,b98dacc7-29e1-426b-a664-0a988f18186c,b98dacc7-29e1-426b-a664-0a988f18186c,1,0,d678856d-6e7c-443f-a6e3-350bbe8af659,d678856d-6e7c-443f-a6e3-350bbe8af659,1,0,d0979762-22ce-41be-b7a4-5e9ac149d94b,d0979762-22ce-41be-b7a4-5e9ac149d94b,1,0,ae23e70c-479e-47ad-9bfa-58560a903410,ae23e70c-479e-47ad-9bfa-58560a903410,1,0,c0d83781-bbda-43f7-bf0e-5defa3d47143,c0d83781-bbda-43f7-bf0e-5defa3d47143,1,0,21fa5fdd-acbc-403b-9acb-bbf95284bd20,21fa5fdd-acbc-403b-9acb-bbf95284bd20,1,0,576a01e3-4d6d-4241-a3c4-7661ba129bcb,576a01e3-4d6d-4241-a3c4-7661ba129bcb,1,0,9f7290dd-19f4-4163-9795-fe562e84f06d,9f7290dd-19f4-4163-9795-fe562e84f06d,1,0,c3b5c81f-b787-4f63-8cba-79def0921477,c3b5c81f-b787-4f63-8cba-79def0921477,1,0,1f0cb3d4-1344-451b-a257-be3cd854acfd,1f0cb3d4-1344-451b-a257-be3cd854acfd,1,0,0131fe59-ce47-48b7-8f7e-1544bf0fa031,0131fe59-ce47-48b7-8f7e-1544bf0fa031,1,0,c8b0a1be-97c6-4a16-b1dd-31901ac61cdc,c8b0a1be-97c6-4a16-b1dd-31901ac61cdc,1,0,372150e2-526e-4424-8c54-e4b16bdd25b5,372150e2-526e-4424-8c54-e4b16bdd25b5,1,0,2f9c347d-ee82-49f2-a5eb-97f55374856f,2f9c347d-ee82-49f2-a5eb-97f55374856f,1,0,752dc569-cf84-42d7-911d-49d455f7214e,752dc569-cf84-42d7-911d-49d455f7214e,1,0,fecab2b9-27e1-44d6-9082-79c3569b7477,fecab2b9-27e1-44d6-9082-79c3569b7477,1,0,07ae092f-8517-47b7-b54c-5dbcb6506929,07ae092f-8517-47b7-b54c-5dbcb6506929,1,0,db4c25bb-d199-43ec-833d-82972de04a41,db4c25bb-d199-43ec-833d-82972de04a41,1,0,43d19685-0794-41f2-9171-bf565133718d,43d19685-0794-41f2-9171-bf565133718d,1,0,b68c15c4-4966-4f13-8912-2d479b65089a,b68c15c4-4966-4f13-8912-2d479b65089a,1,0,8f6770c2-654c-4cc7-8ed5-15b5b2e3109a,8f6770c2-654c-4cc7-8ed5-15b5b2e3109a,1,0,a89ee622-6942-411a-8566-f03d139c9e5b,a89ee622-6942-411a-8566-f03d139c9e5b,1,0,f87e3935-dae1-4192-b6a7-05e3c700c590,f87e3935-dae1-4192-b6a7-05e3c700c590,1,0,ee635706-6ee2-4956-8d58-a235f64687f6,ee635706-6ee2-4956-8d58-a235f64687f6,1,0,a5a40ca7-d665-420b-a516-1355019d6901,a5a40ca7-d665-420b-a516-1355019d6901,1,0,198ea989-5001-47ac-86b8-aa2585a5f7d7,198ea989-5001-47ac-86b8-aa2585a5f7d7,1,0,4abe448b-a225-4ac2-8cc9-c3c6c0e9b1ac,4abe448b-a225-4ac2-8cc9-c3c6c0e9b1ac,1,0,fb84c5f7-11da-4b17-979e-41e27a74e789,fb84c5f7-11da-4b17-979e-41e27a74e789,1,0,adf9304c-ccf8-492e-95b1-0754764586a2,adf9304c-ccf8-492e-95b1-0754764586a2,1,0,fd175112-ec8f-4088-9b21-d8135056f0c5,fd175112-ec8f-4088-9b21-d8135056f0c5,1,0,ddd82a66-1eda-409f-b6c0-e22c4bd2c1b7,ddd82a66-1eda-409f-b6c0-e22c4bd2c1b7,1,0,df76a1b7-312a-4e77-bac1-79befadb4495,df76a1b7-312a-4e77-bac1-79befadb4495,1,0,ab39fad8-1039-491e-982a-c49637770ec0,ab39fad8-1039-491e-982a-c49637770ec0,1,0,7d93a6ba-3ca7-45ab-a540-743c79587535,7d93a6ba-3ca7-45ab-a540-743c79587535,1,0,76b58810-0527-4dfc-8858-bac68e7e65f3,76b58810-0527-4dfc-8858-bac68e7e65f3,1,0,aba97fd9-f05e-45cd-8404-ed702070e17a,aba97fd9-f05e-45cd-8404-ed702070e17a,1,0,f5c415cd-429b-469f-9332-c43ab5d1c8d6,f5c415cd-429b-469f-9332-c43ab5d1c8d6,1,0,504280a1-a451-4547-ae71-e217f8fdf8f6,504280a1-a451-4547-ae71-e217f8fdf8f6,1,0,b071a9fe-0e9f-4ded-8dab-b1388fd12897,b071a9fe-0e9f-4ded-8dab-b1388fd12897,1,0,a2accd5e-e6f5-4d5f-8243-51aadfa88b00,a2accd5e-e6f5-4d5f-8243-51aadfa88b00,1,0,458e9c6b-b828-404b-be5a-c6c0aeea34c9,458e9c6b-b828-404b-be5a-c6c0aeea34c9,1,0,7262eb4d-2d2d-454c-beaa-974645813af7,7262eb4d-2d2d-454c-beaa-974645813af7,1,0,45fa9f17-eeb1-43e2-b78c-f81a341f1bff,45fa9f17-eeb1-43e2-b78c-f81a341f1bff,1,0,49221b2f-aae2-4bee-9a1a-18263fc74244,49221b2f-aae2-4bee-9a1a-18263fc74244,1,0,da0cd264-da2f-4044-af28-c91d2efe1d5c,da0cd264-da2f-4044-af28-c91d2efe1d5c,1,0,f1b1db38-2d9f-4409-a6d6-fd7192b1f102,f1b1db38-2d9f-4409-a6d6-fd7192b1f102,1,0,fad26b16-8638-496b-bd12-381fc6f5b71f,fad26b16-8638-496b-bd12-381fc6f5b71f,1,0,ed3cfb74-a37a-4314-a2d7-4ce717a2edd9,ed3cfb74-a37a-4314-a2d7-4ce717a2edd9,1,0,324a56c9-02d9-4177-af84-a817b8c41169,324a56c9-02d9-4177-af84-a817b8c41169,1,0,1e44abfe-c173-4802-b535-96849d384983,1e44abfe-c173-4802-b535-96849d384983,1,0,2751a509-037b-49aa-9ca8-e87057d6d82c,2751a509-037b-49aa-9ca8-e87057d6d82c,1,0,35f62549-eb6a-4284-a6e3-406b0d9df0cf,35f62549-eb6a-4284-a6e3-406b0d9df0cf,1,0,cee94c04-7a46-47a5-bdd5-6f0dbd884e97,cee94c04-7a46-47a5-bdd5-6f0dbd884e97,1,0,fd66995b-ee76-41d3-983f-33d84bdcbbd4,fd66995b-ee76-41d3-983f-33d84bdcbbd4,1,0,73e97918-b34e-4ad2-8591-4c219eb92f2c,73e97918-b34e-4ad2-8591-4c219eb92f2c,1,0,445cf7eb-35d0-48f8-9579-c2ec574ef324,445cf7eb-35d0-48f8-9579-c2ec574ef324,1,0,1025657e-afd2-4c7b-96d5-ccbedaca4619,1025657e-afd2-4c7b-96d5-ccbedaca4619,1,0,64839c78-b2fa-4d80-bee0-b3d3a7e5db35,64839c78-b2fa-4d80-bee0-b3d3a7e5db35,1,0,e754ad5c-cf3c-4198-af81-128475924cb0,e754ad5c-cf3c-4198-af81-128475924cb0,1,0,ed65d504-b210-4014-85ec-275ad633ef04,ed65d504-b210-4014-85ec-275ad633ef04,1,0,dc31edb1-273e-4b1a-8e69-32393479ff36,dc31edb1-273e-4b1a-8e69-32393479ff36,1,0,3ab0649b-239f-4466-b897-73c0ab628927,3ab0649b-239f-4466-b897-73c0ab628927,1,0,4c697110-8941-4d6d-ba03-f2b9e96ff82e,4c697110-8941-4d6d-ba03-f2b9e96ff82e,1,0,7ea4112d-fc41-4f1e-bd22-f04adeac1d8f,7ea4112d-fc41-4f1e-bd22-f04adeac1d8f,1,0,b172631b-da0d-42f4-ae6b-ae122a46cced,b172631b-da0d-42f4-ae6b-ae122a46cced,1,0,1a25e744-37ae-46ca-a328-ff8eced21a82,1a25e744-37ae-46ca-a328-ff8eced21a82,1,0,dddabe54-a93b-4e4b-acbb-cc522e4d7c28,dddabe54-a93b-4e4b-acbb-cc522e4d7c28,1,0,46169f0b-8514-40a1-9d27-8489cab72503,46169f0b-8514-40a1-9d27-8489cab72503,1,0,d9cf39cc-8652-4c4d-bc5b-b4e455c0083f,d9cf39cc-8652-4c4d-bc5b-b4e455c0083f,1,0,4b0d7d39-5f79-4a21-b0bb-d3142a3bc8a9,4b0d7d39-5f79-4a21-b0bb-d3142a3bc8a9,1,0,c90243af-582c-4f5a-88e7-e0cbc0555fcb,c90243af-582c-4f5a-88e7-e0cbc0555fcb,1,0,14bf4066-15cb-4165-b854-45443ee27da1,14bf4066-15cb-4165-b854-45443ee27da1,1,0,a0861dd3-ced5-485e-8719-0ad0bc3adc0d,a0861dd3-ced5-485e-8719-0ad0bc3adc0d,1,0,5a94a307-3f54-4753-8ef5-ce9f88417827,5a94a307-3f54-4753-8ef5-ce9f88417827,1,0,0f09b6b8-72ac-4461-96c4-683be403e2ff,0f09b6b8-72ac-4461-96c4-683be403e2ff,1,0,b73d0f07-9c6e-41b1-9acc-8e83dacd7528,b73d0f07-9c6e-41b1-9acc-8e83dacd7528,1,0,19d1d74a-de5f-475a-896c-a32b7d28f918,19d1d74a-de5f-475a-896c-a32b7d28f918,1,0,4427cab9-4eea-4415-98ef-6021a447c60c,4427cab9-4eea-4415-98ef-6021a447c60c,1,0,fe46b4da-d865-468f-badd-83644bf88faa,fe46b4da-d865-468f-badd-83644bf88faa,1,0,2851c9d4-4366-4488-926d-a7fcd3b1548c,2851c9d4-4366-4488-926d-a7fcd3b1548c,1,0,31116aa2-cfbc-48e8-886b-45c1c17508fd,31116aa2-cfbc-48e8-886b-45c1c17508fd,1,0,6aa819d3-c56d-4561-a2e4-a1188ab1295a,6aa819d3-c56d-4561-a2e4-a1188ab1295a,1,0,2ddf344d-7065-40d5-9306-23870d8fc04a,2ddf344d-7065-40d5-9306-23870d8fc04a,1,0,c630ab2d-0a20-4136-88b6-220b2cad6a71,c630ab2d-0a20-4136-88b6-220b2cad6a71,1,0,00cd1dea-bc54-475c-956d-dc5221104932,00cd1dea-bc54-475c-956d-dc5221104932,1,0,3807f865-dd2c-44f7-9238-3db191f0a186,3807f865-dd2c-44f7-9238-3db191f0a186,1,0,e6a53f32-0b7d-499d-844e-fb8df13a3519,e6a53f32-0b7d-499d-844e-fb8df13a3519,1,0,4a55351b-77e2-4c7c-a7d7-aac213d3c2a7,4a55351b-77e2-4c7c-a7d7-aac213d3c2a7,1,0,f79ac41b-6ab2-4afc-aa98-b70b72d78bb4,f79ac41b-6ab2-4afc-aa98-b70b72d78bb4,1,0,2c5a56d3-386e-45df-adc2-4471f52f9bdc,2c5a56d3-386e-45df-adc2-4471f52f9bdc,1,0,8f184df5-bfe8-4df3-bc7c-18218cef7650,8f184df5-bfe8-4df3-bc7c-18218cef7650,1,0,387e273a-889f-454b-8b43-feaa12025fde,387e273a-889f-454b-8b43-feaa12025fde,1,0,22474ca3-565b-4b67-a5b4-b0b959306d10,22474ca3-565b-4b67-a5b4-b0b959306d10,1,0,1c38ad75-b294-4c05-89ce-69ce4d9a291f,1c38ad75-b294-4c05-89ce-69ce4d9a291f,1,0,078d1e8f-6d27-4761-9532-b1e7a60e4c13,078d1e8f-6d27-4761-9532-b1e7a60e4c13,1,0,4262193c-58ad-47c6-8088-735d8cd037ea,4262193c-58ad-47c6-8088-735d8cd037ea,1,0,36a2b5f9-ded5-4fc3-a7bd-e12b37cd6bab,36a2b5f9-ded5-4fc3-a7bd-e12b37cd6bab,1,0,de6d1aad-39eb-46ce-87aa-d29812bb37bf,de6d1aad-39eb-46ce-87aa-d29812bb37bf,1,0,4ad859ec-cc75-4bac-9e89-397798450e48,4ad859ec-cc75-4bac-9e89-397798450e48,1,0,d93ab94c-0f55-4b80-b226-41b44c73b3ea,d93ab94c-0f55-4b80-b226-41b44c73b3ea,1,0,94cbed80-5a35-471f-b354-439a11629210,94cbed80-5a35-471f-b354-439a11629210,1,0,1162cc0a-42e5-47cb-9507-68459579f110,1162cc0a-42e5-47cb-9507-68459579f110,1,0,17f9f188-d3fd-4fe1-a00c-b0dde64a0f9e,17f9f188-d3fd-4fe1-a00c-b0dde64a0f9e,1,0,bb49dc80-4934-4f44-8f27-9a363dca8dc4,bb49dc80-4934-4f44-8f27-9a363dca8dc4,1,0,7338e497-03a7-4ed4-85a2-ca802c065a9f,7338e497-03a7-4ed4-85a2-ca802c065a9f,1,0,49fe879c-8972-4c9a-bb08-e3e5b2e5ff84,49fe879c-8972-4c9a-bb08-e3e5b2e5ff84,1,0,5249687b-9ff4-46f5-be15-dbb5d5047fd1,5249687b-9ff4-46f5-be15-dbb5d5047fd1,1,0,d33df51c-3dcd-496c-90f2-7ee05582bdf7,d33df51c-3dcd-496c-90f2-7ee05582bdf7,1,0,24b39ebd-2424-4939-8e3e-d09eb674d409,24b39ebd-2424-4939-8e3e-d09eb674d409,1,0,08c751bb-9e57-4536-901e-bb316c8e96d7,08c751bb-9e57-4536-901e-bb316c8e96d7,1,0,de0afa6f-07c6-441c-a4ca-e7ed709a8da5,de0afa6f-07c6-441c-a4ca-e7ed709a8da5,1,0,034cdcef-08e5-4751-9885-400aa69e0b94,034cdcef-08e5-4751-9885-400aa69e0b94,1,0,3e44d463-f253-4a64-8d68-631fcb66935c,3e44d463-f253-4a64-8d68-631fcb66935c,1,0,653d6483-029b-4453-a7d0-3a3c6d9d0b05,653d6483-029b-4453-a7d0-3a3c6d9d0b05,1,0,ac507771-50bd-4f8b-b72f-5954562c9131,ac507771-50bd-4f8b-b72f-5954562c9131,1,0,efefebea-2032-4006-b9ca-50a23b7da1ef,efefebea-2032-4006-b9ca-50a23b7da1ef,1,0,4c794d37-3352-4acb-a939-5e90fb682db8,4c794d37-3352-4acb-a939-5e90fb682db8,1,0,5f3fea83-6ca8-481b-9e2b-789a6fd01e2e,5f3fea83-6ca8-481b-9e2b-789a6fd01e2e,1,0,008f5068-da9c-4dac-9c0a-a50366d27cbb,008f5068-da9c-4dac-9c0a-a50366d27cbb,1,0,950b3ee3-070f-4946-8b9b-0aa2058de986,950b3ee3-070f-4946-8b9b-0aa2058de986,1,0,bd04a870-0943-4bdb-9e30-50a69daa8a13,bd04a870-0943-4bdb-9e30-50a69daa8a13,1,0,a23e6c77-8c12-4f99-ae2d-68a12274be38,a23e6c77-8c12-4f99-ae2d-68a12274be38,1,0,3c4454cd-31e9-42a5-9127-fb66a628f0e1,3c4454cd-31e9-42a5-9127-fb66a628f0e1,1,0,c02c5cbf-b25a-4956-8aa7-74cfeb66d508,c02c5cbf-b25a-4956-8aa7-74cfeb66d508,1,0,31cac1e9-eb16-489c-9322-30d1e27a80b3,31cac1e9-eb16-489c-9322-30d1e27a80b3,1,0,0d100e33-7941-41c1-962d-7672c874e9c5,0d100e33-7941-41c1-962d-7672c874e9c5,1,0,c5ac53c9-c9b2-4b90-a21e-10f1daa756c5,c5ac53c9-c9b2-4b90-a21e-10f1daa756c5,1,0,6e61d717-de36-4dce-8af9-b6c14ed76acb,6e61d717-de36-4dce-8af9-b6c14ed76acb,1,0,474518fe-9cb5-4a12-9388-bc7a64511617,474518fe-9cb5-4a12-9388-bc7a64511617,1,0,64337614-b1c9-4931-b576-448721fa4602,64337614-b1c9-4931-b576-448721fa4602,1,0,1d73b59c-0594-4ed3-b584-cf1261941e1d,1d73b59c-0594-4ed3-b584-cf1261941e1d,1,0,8ff2547f-d596-4fa1-9e12-079e1cc4c057,8ff2547f-d596-4fa1-9e12-079e1cc4c057,1,0,1ab0c8f8-b908-4618-ae88-af37b8f1224e,1ab0c8f8-b908-4618-ae88-af37b8f1224e,1,0,bd3ec5a9-161d-487e-ab1d-e5e15a6e3a7b,bd3ec5a9-161d-487e-ab1d-e5e15a6e3a7b,1,0,b85b3a58-95e4-4698-b1ae-037901ecc1b1,b85b3a58-95e4-4698-b1ae-037901ecc1b1,1,0,b77d748a-d180-432d-91c3-774e6ccf7efa,b77d748a-d180-432d-91c3-774e6ccf7efa,1,0,e5b9c1b0-4690-442c-b160-e6c587e42e57,e5b9c1b0-4690-442c-b160-e6c587e42e57,1,0,e3adb576-6b33-475b-976b-7a6783de3184,e3adb576-6b33-475b-976b-7a6783de3184,1,0,c6cef8db-0689-42a6-9f43-c86b7c3cf0e9,c6cef8db-0689-42a6-9f43-c86b7c3cf0e9,1,0,78f5a205-dffb-4009-897a-e8f36372f33c,78f5a205-dffb-4009-897a-e8f36372f33c,1,0,f7597041-f182-42fb-803a-2521c70d627d,f7597041-f182-42fb-803a-2521c70d627d,1,0,ce988b8a-d0c1-400a-9466-aa757501bb58,ce988b8a-d0c1-400a-9466-aa757501bb58,1,0,ab98d665-8da8-406e-9e0e-3e130ab393ef,ab98d665-8da8-406e-9e0e-3e130ab393ef,1,0,9e823bb6-b0c0-439e-81e4-ebd46b79b99c,9e823bb6-b0c0-439e-81e4-ebd46b79b99c,1,0,118a0e62-c0bb-435b-9e3e-c64563efa602,118a0e62-c0bb-435b-9e3e-c64563efa602,1,0,b57bc8a9-8a59-4192-a442-2e1982e83179,b57bc8a9-8a59-4192-a442-2e1982e83179,1,0,5b06ccda-2a70-4621-8273-78408cbe72a9,5b06ccda-2a70-4621-8273-78408cbe72a9,1,0,89753385-64fd-4e76-9857-bfd5d7c23f71,89753385-64fd-4e76-9857-bfd5d7c23f71,1,0,1b3113f3-e7d4-4e6f-b6ed-08f5fd78c68e,1b3113f3-e7d4-4e6f-b6ed-08f5fd78c68e,1,0,53e72cf2-e2a5-4b59-b5b1-a1fc28fda5bf,53e72cf2-e2a5-4b59-b5b1-a1fc28fda5bf,1,0,e20bcb57-2f68-4709-8a11-105d561a2dda,e20bcb57-2f68-4709-8a11-105d561a2dda,1,0,3df3f61a-2c17-4278-8d82-91089f793e6a,3df3f61a-2c17-4278-8d82-91089f793e6a,1,0,ea8beea1-7d80-4613-b2f9-79ee612e977a,ea8beea1-7d80-4613-b2f9-79ee612e977a,1,0,afd62a32-fdbb-429a-9a64-89c61a07e018,afd62a32-fdbb-429a-9a64-89c61a07e018,1,0,027cef43-99bd-48d3-a1a3-2102ac003742,027cef43-99bd-48d3-a1a3-2102ac003742,1,0,00197ea9-de76-4e2a-97bc-93e44053e35e,00197ea9-de76-4e2a-97bc-93e44053e35e,1,0,540a47b8-f6d4-4531-ac87-3f7cfbef4c8c,540a47b8-f6d4-4531-ac87-3f7cfbef4c8c,1,0,a51f7c6f-2631-4d23-becc-c0e8b711fddd,a51f7c6f-2631-4d23-becc-c0e8b711fddd,1,0,37806357-d92c-4bea-a5ef-77f138578fda,37806357-d92c-4bea-a5ef-77f138578fda,1,0,91b100e6-fbbe-4bb0-8d51-d12595a2a3e8,91b100e6-fbbe-4bb0-8d51-d12595a2a3e8,1,0,0a880538-f97f-448e-a4a9-82b0194dbe28,0a880538-f97f-448e-a4a9-82b0194dbe28,1,0,179868b7-d342-4df0-9386-c114d75faf3a,179868b7-d342-4df0-9386-c114d75faf3a,1,0,bbc4cc8c-31c2-4fcf-b86c-9ec65b2772b0,bbc4cc8c-31c2-4fcf-b86c-9ec65b2772b0,1,0,4d72bd30-8d60-4f84-9ad8-83489d9cb3fb,4d72bd30-8d60-4f84-9ad8-83489d9cb3fb,1,0,7e4afed8-5c56-4765-bcd0-a40e6121ba22,7e4afed8-5c56-4765-bcd0-a40e6121ba22,1,0,155660a1-8a63-4562-a715-d75a8af7176b,155660a1-8a63-4562-a715-d75a8af7176b,1,0,878fe826-fa99-44ad-9891-5eada9744017,878fe826-fa99-44ad-9891-5eada9744017,1,0,0d61712a-dfaf-46f1-b728-62993dd94fbe,0d61712a-dfaf-46f1-b728-62993dd94fbe,1,0,3a6cf496-09b9-4947-9df5-06d23b474558,3a6cf496-09b9-4947-9df5-06d23b474558,1,0,625b498a-33d1-4162-9525-fb7790cbb6a8,625b498a-33d1-4162-9525-fb7790cbb6a8,1,0,28223f7b-d15a-4f12-b57c-1f6d08a902f9,28223f7b-d15a-4f12-b57c-1f6d08a902f9,1,0,dd9eb5b7-5aed-4e51-9939-9ff14492d240,dd9eb5b7-5aed-4e51-9939-9ff14492d240,1,0,b2a14899-d589-4990-b85e-7bffb427e8af,b2a14899-d589-4990-b85e-7bffb427e8af,1,0,0981d114-05bd-4ee1-a8fd-398fa6620d0b,0981d114-05bd-4ee1-a8fd-398fa6620d0b,1,0,3210ba40-382e-4917-ad0f-9bd88d23dc25,3210ba40-382e-4917-ad0f-9bd88d23dc25,1,0,835e3ead-d01f-410b-937a-902dd5e66aec,835e3ead-d01f-410b-937a-902dd5e66aec,1,0,40141982-d1d6-416f-844e-19143a407ff9,40141982-d1d6-416f-844e-19143a407ff9,1,0,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,fc65918a-2ad1-47b1-980d-5afe63579964,fc65918a-2ad1-47b1-980d-5afe63579964,1,0,7ece6efe-16a1-4294-8c28-3fa6427ba9f0,7ece6efe-16a1-4294-8c28-3fa6427ba9f0,1,0,61094d92-b1e6-45b9-9258-38a7bb1d6469,61094d92-b1e6-45b9-9258-38a7bb1d6469,1,0,4791b5d4-3568-4420-8c25-89ecce7c6353,4791b5d4-3568-4420-8c25-89ecce7c6353,1,0,66ec2482-c1f3-45d3-9257-e0b9f5ae772a,66ec2482-c1f3-45d3-9257-e0b9f5ae772a,1,0,d3211832-c8ca-437a-8810-82e06cbb48de,d3211832-c8ca-437a-8810-82e06cbb48de,1,0,8131d701-1014-4196-9b67-914e451f8a3a,8131d701-1014-4196-9b67-914e451f8a3a,1,0,2b102933-c660-4e74-ae9a-5061a88ed672,2b102933-c660-4e74-ae9a-5061a88ed672,1,0,56c897b7-d34e-4d7d-9a3b-d0779be5c189,56c897b7-d34e-4d7d-9a3b-d0779be5c189,1,0,3ac81c80-56bd-4750-b135-07ab522e3eab,3ac81c80-56bd-4750-b135-07ab522e3eab,1,0,5657872f-c7d5-446f-bcc3-d0b86ad63a42,5657872f-c7d5-446f-bcc3-d0b86ad63a42,1,0,d5214cb9-67e2-469f-989f-3f2b662ae830,d5214cb9-67e2-469f-989f-3f2b662ae830,1,0,69679e88-4f2b-4dd6-8cb2-b88293d07b55,69679e88-4f2b-4dd6-8cb2-b88293d07b55,1,0,68679208-9972-4854-8649-49bdf6212255,68679208-9972-4854-8649-49bdf6212255,1,0,98393093-7ba6-4b4d-86be-ee5826cd8cd5,98393093-7ba6-4b4d-86be-ee5826cd8cd5,1,0,87de486d-3f35-4432-a7cd-9d3832db63cf,87de486d-3f35-4432-a7cd-9d3832db63cf,1,0,246f17a0-93a7-4e2c-8fa6-f57405f0abeb,246f17a0-93a7-4e2c-8fa6-f57405f0abeb,1,0,ea6c4830-a34d-4026-a0ca-5cf7e44f089d,ea6c4830-a34d-4026-a0ca-5cf7e44f089d,1,0,bb7ce04a-8143-4c0b-a196-1b57f1640142,bb7ce04a-8143-4c0b-a196-1b57f1640142,1,0,4872f12c-705c-4dd3-802f-d27496a0d634,4872f12c-705c-4dd3-802f-d27496a0d634,1,0,3bacfd93-dfc7-4154-9d3f-b61ddc5c6721,3bacfd93-dfc7-4154-9d3f-b61ddc5c6721,1,0,0c0bbfba-c1c4-4bb5-a813-10da4bef7911,0c0bbfba-c1c4-4bb5-a813-10da4bef7911,1,0,f9ada91a-e673-4821-9bce-cb0dd75ca28b,f9ada91a-e673-4821-9bce-cb0dd75ca28b,1,0,9fcf68bb-43e2-4cd1-89ec-8797ad9c0e8b,9fcf68bb-43e2-4cd1-89ec-8797ad9c0e8b,1,0,90ce635a-0277-4056-980d-d1a16d91cb30,90ce635a-0277-4056-980d-d1a16d91cb30,1,0,e61a8360-a0f8-4d86-b91a-2ae9b8552bf0,e61a8360-a0f8-4d86-b91a-2ae9b8552bf0,1,0,1e77e873-632c-482b-8f46-8f8cc3cc8cef,1e77e873-632c-482b-8f46-8f8cc3cc8cef,1,0,00605607-03ab-43fc-ba08-9fc32f582d0a,00605607-03ab-43fc-ba08-9fc32f582d0a,1,0,5ab0a910-74ab-4af0-b5a3-40845a789fde,5ab0a910-74ab-4af0-b5a3-40845a789fde,1,0,bb659006-c11e-4427-8d86-229ba43ef679,bb659006-c11e-4427-8d86-229ba43ef679,1,0,766208a3-2780-427b-a7d3-93abe99d236b,766208a3-2780-427b-a7d3-93abe99d236b,1,0,63ce4c3c-5bad-409c-904f-18f34cf1da78,63ce4c3c-5bad-409c-904f-18f34cf1da78,1,0,62bddcee-bef6-42cc-9ba3-e99b8160dcc2,62bddcee-bef6-42cc-9ba3-e99b8160dcc2,1,0,26ac22f9-0bbb-4671-b446-626e345e2461,26ac22f9-0bbb-4671-b446-626e345e2461,1,0,0d63ee6d-e17f-4a86-b384-adf9793f3331,0d63ee6d-e17f-4a86-b384-adf9793f3331,1,0,f152945b-2a7b-449e-a915-176166af7bac,f152945b-2a7b-449e-a915-176166af7bac,1,0,77f5d86a-7fae-4490-9740-0e31102dab5c,77f5d86a-7fae-4490-9740-0e31102dab5c,1,0,5a54bc1a-d178-412c-bf4a-cf92d7f141aa,5a54bc1a-d178-412c-bf4a-cf92d7f141aa,1,0,24be43ec-d39e-46aa-9c11-2536b835e515,24be43ec-d39e-46aa-9c11-2536b835e515,1,0,c9ca80ef-c7b7-4425-b5c0-3d13af82f291,c9ca80ef-c7b7-4425-b5c0-3d13af82f291,1,0,df9af3ee-6a69-4a03-8ff5-0735e9a38013,df9af3ee-6a69-4a03-8ff5-0735e9a38013,1,0,1b27eb77-d535-43a5-8ae1-fa2fec15d92c,1b27eb77-d535-43a5-8ae1-fa2fec15d92c,1,0,7743fe24-b941-4dad-bc76-05fb6b26b1d7,7743fe24-b941-4dad-bc76-05fb6b26b1d7,1,0,5bf2da0d-f318-4036-9234-8a3a6eca88b2,5bf2da0d-f318-4036-9234-8a3a6eca88b2,1,0,288525fc-d3fa-4c8e-a1d7-d2d1ef4cd0ef,288525fc-d3fa-4c8e-a1d7-d2d1ef4cd0ef,1,0,c3634571-6fe5-45ab-9362-161305eef661,c3634571-6fe5-45ab-9362-161305eef661,1,0,ec11342f-594f-416f-a10f-bd1bfa695c08,ec11342f-594f-416f-a10f-bd1bfa695c08,1,0,31c3ac44-204e-43fd-bca3-fd18fa091c58,31c3ac44-204e-43fd-bca3-fd18fa091c58,1,0,74f03c35-5da0-406e-a938-e8e5d49975ef,74f03c35-5da0-406e-a938-e8e5d49975ef,1,0,c9ab3890-6d16-431f-ab2b-b5058e6202a4,c9ab3890-6d16-431f-ab2b-b5058e6202a4,1,0,5ee9eed7-3c6c-4264-ab9a-6f24f9c80598,5ee9eed7-3c6c-4264-ab9a-6f24f9c80598,1,0,3c33adc7-abea-4e0f-9e5d-d8f10abb63df,3c33adc7-abea-4e0f-9e5d-d8f10abb63df,1,0,4090c6f7-1d25-4b17-9baa-18daa0640b0f,4090c6f7-1d25-4b17-9baa-18daa0640b0f,1,0,26125e58-dfc8-4bbb-a3a4-80616471746e,26125e58-dfc8-4bbb-a3a4-80616471746e,1,0,b1c699cd-efdc-461c-ad37-10bfd4bc9674,b1c699cd-efdc-461c-ad37-10bfd4bc9674,1,0,6add1920-5073-4b1e-b7e0-13bf1e65e4c3,6add1920-5073-4b1e-b7e0-13bf1e65e4c3,1,0,f12c946c-98e4-4da6-8a88-c555e9dc3bdd,f12c946c-98e4-4da6-8a88-c555e9dc3bdd,1,0,ec5718b7-1c4d-4bdc-9426-40a339bb29cf,ec5718b7-1c4d-4bdc-9426-40a339bb29cf,1,0,ecd8772d-e33f-426f-a87a-e28bd94d5fdf,ecd8772d-e33f-426f-a87a-e28bd94d5fdf,1,0,96661303-1286-4f84-93b7-0e6da2bd7893,96661303-1286-4f84-93b7-0e6da2bd7893,1,0,68076431-36e6-46dc-92cb-e0d8e605bf66,68076431-36e6-46dc-92cb-e0d8e605bf66,1,0,239fa55a-6572-4e5c-9918-c2e14063c76d,239fa55a-6572-4e5c-9918-c2e14063c76d,1,0,8211a1b6-c3b1-466b-8d11-22603fb50c7a,8211a1b6-c3b1-466b-8d11-22603fb50c7a,1,0,7e7dfcb5-04eb-40f4-8f4c-f29644e81473,7e7dfcb5-04eb-40f4-8f4c-f29644e81473,1,0,daef68a3-c6c3-450d-b8fd-7af2a2f5572e,daef68a3-c6c3-450d-b8fd-7af2a2f5572e,1,0,a83cb338-5707-42c9-9e88-11f6c68fcc32,a83cb338-5707-42c9-9e88-11f6c68fcc32,1,0,985106b7-7476-4b48-90ac-ad86876395b5,985106b7-7476-4b48-90ac-ad86876395b5,1,0,0d8db0c9-adbc-478d-997c-3d7feccac99b,0d8db0c9-adbc-478d-997c-3d7feccac99b,1,0,3fd2ef04-c178-47bf-ab62-7baf83236d99,3fd2ef04-c178-47bf-ab62-7baf83236d99,1,0,b4cd1b51-dbc0-4bb0-879e-5ac0d58e78c1,b4cd1b51-dbc0-4bb0-879e-5ac0d58e78c1,1,0,320bf2e6-a3a8-490b-8aa0-21369ffb121b,320bf2e6-a3a8-490b-8aa0-21369ffb121b,1,0,a3bafc54-8fe4-4841-acc6-74a87baf9caf,a3bafc54-8fe4-4841-acc6-74a87baf9caf,1,0,f93741c9-ab94-464b-b0d4-4af99c9f92d5,f93741c9-ab94-464b-b0d4-4af99c9f92d5,1,0,0fddbd8d-12dd-4af1-9e34-feebf4bc38b1,0fddbd8d-12dd-4af1-9e34-feebf4bc38b1,1,0,2e9548a6-1fd8-4430-8864-91bde0d2a7a1,2e9548a6-1fd8-4430-8864-91bde0d2a7a1,1,0,c59fd3f8-c734-49d3-90ba-e608a22ac981,c59fd3f8-c734-49d3-90ba-e608a22ac981,1,0,b26235ed-374c-44ab-8b3c-01d7c4d82d4c,b26235ed-374c-44ab-8b3c-01d7c4d82d4c,1,0,5056db9f-9ebe-4cca-98f0-5f4817a1cba4,5056db9f-9ebe-4cca-98f0-5f4817a1cba4,1,0,475f76ea-f494-41f1-9b65-f39907e5a427,475f76ea-f494-41f1-9b65-f39907e5a427,1,0,986280d1-41bb-4b15-a5ae-516d6a04c1f4,986280d1-41bb-4b15-a5ae-516d6a04c1f4,1,0,43bfd29a-d254-4c33-8639-200b483578c1,43bfd29a-d254-4c33-8639-200b483578c1,1,0,6a274167-7f80-4613-9890-259ffd8ccfc4,6a274167-7f80-4613-9890-259ffd8ccfc4,1,0,00696255-ea14-4fee-8633-0962f3c441d1,00696255-ea14-4fee-8633-0962f3c441d1,1,0,4e90e1ab-b1ec-4795-ad45-1db151a5492c,4e90e1ab-b1ec-4795-ad45-1db151a5492c,1,0,91791e56-ca80-4d90-b8a8-16145f6a9721,91791e56-ca80-4d90-b8a8-16145f6a9721,1,0,b242c6a2-5ac9-4edb-b5dd-24eda8162151,b242c6a2-5ac9-4edb-b5dd-24eda8162151,1,0,8d080f3c-06ed-48bf-9709-eea73d676741,8d080f3c-06ed-48bf-9709-eea73d676741,1,0,57b31a5d-9fdc-43d2-ae81-67157822c4b6,57b31a5d-9fdc-43d2-ae81-67157822c4b6,1,0,d4e2da66-9a70-459f-a873-cb4ad71d17b2,d4e2da66-9a70-459f-a873-cb4ad71d17b2,1,0,a84a91d2-d326-4bf4-82e6-d573ee35d090,a84a91d2-d326-4bf4-82e6-d573ee35d090,1,0,fef27478-ddfd-4ad9-8161-148761f29698,fef27478-ddfd-4ad9-8161-148761f29698,1,0,39cbda23-db3f-4ddd-8981-8540247406db,39cbda23-db3f-4ddd-8981-8540247406db,1,0,c8a18d99-62ff-45a4-acb5-48e3310c1b53,c8a18d99-62ff-45a4-acb5-48e3310c1b53,1,0,a6eb0cb1-80f0-4390-80ff-7af53f8e63c3,a6eb0cb1-80f0-4390-80ff-7af53f8e63c3,1,0,3500c6fa-813a-49dd-a4bf-163500db5b7f,3500c6fa-813a-49dd-a4bf-163500db5b7f,1,0,1d02493a-dd89-4a51-b75e-9c49f9818b95,1d02493a-dd89-4a51-b75e-9c49f9818b95,1,0,2845c5d1-e836-4499-bcae-f3c8fdae75ee,2845c5d1-e836-4499-bcae-f3c8fdae75ee,1,0,fe4e8e4e-9471-4583-b9b3-576007db08ee,fe4e8e4e-9471-4583-b9b3-576007db08ee,1,0,49deaaa8-6d50-4b25-8153-6712d88fb0fb,49deaaa8-6d50-4b25-8153-6712d88fb0fb,1,0,1eeb7634-e924-4ad8-92e0-1c54c22b1ba6,1eeb7634-e924-4ad8-92e0-1c54c22b1ba6,1,0,46a06de8-06fd-4b49-835f-4f24b832b3c4,46a06de8-06fd-4b49-835f-4f24b832b3c4,1,0,3845a567-4375-4c3a-af61-5b82674060ab,3845a567-4375-4c3a-af61-5b82674060ab,1,0,ab210fb8-4fc4-47f8-b8ef-3a00eeb0ab8b,ab210fb8-4fc4-47f8-b8ef-3a00eeb0ab8b,1,0,a835a3a7-989b-4247-b836-d23bba2f391a,a835a3a7-989b-4247-b836-d23bba2f391a,1,0,58f5c354-8f1d-4064-ba35-527ea3d2f4a9,58f5c354-8f1d-4064-ba35-527ea3d2f4a9,1,0,9b149c20-9328-4e2d-a34b-95c883ae4dcc,9b149c20-9328-4e2d-a34b-95c883ae4dcc,1,0,dd6fdc0d-49bb-4fa1-aa17-bd9dc38a0992,dd6fdc0d-49bb-4fa1-aa17-bd9dc38a0992,1,0,f8dbf226-ea56-4b15-baf1-a41fceba2a32,f8dbf226-ea56-4b15-baf1-a41fceba2a32,1,0,fc1476f7-26e6-4374-b99b-e515d86c050a,fc1476f7-26e6-4374-b99b-e515d86c050a,1,0,e0eb7b4a-9a13-4752-9327-e13d2abc4fc5,e0eb7b4a-9a13-4752-9327-e13d2abc4fc5,1,0,c4753515-a483-453e-a48b-b12d8ef48fd9,c4753515-a483-453e-a48b-b12d8ef48fd9,1,0,2d9048eb-abdf-4980-96ed-788fbb0f4ea7,2d9048eb-abdf-4980-96ed-788fbb0f4ea7,1,0,98c3bc52-2351-460c-8b8e-0d3f45ca3131,98c3bc52-2351-460c-8b8e-0d3f45ca3131,1,0,b1ff31b9-c9f2-4be4-ac9a-62faa1d1eb81,b1ff31b9-c9f2-4be4-ac9a-62faa1d1eb81,1,0,c14ea7a0-1fb6-4d54-82d6-7f12f11b0c0b,c14ea7a0-1fb6-4d54-82d6-7f12f11b0c0b,1,0,29645810-44aa-402c-9561-7819d6f4a7ab,29645810-44aa-402c-9561-7819d6f4a7ab,1,0,46bf4911-5200-44ac-9b4d-eb0089c12e34,46bf4911-5200-44ac-9b4d-eb0089c12e34,1,0,6e1685bd-7269-401c-b36e-def6a36b41d5,6e1685bd-7269-401c-b36e-def6a36b41d5,1,0,9d77103a-9921-4f6c-98fc-d7f42f0f2d8d,9d77103a-9921-4f6c-98fc-d7f42f0f2d8d,1,0,e03b6592-b597-4795-a78e-775d4f2258db,e03b6592-b597-4795-a78e-775d4f2258db,1,0,6ae9e86a-a42f-4de0-a891-6abe1ed16cdd,6ae9e86a-a42f-4de0-a891-6abe1ed16cdd,1,0,3b207d5f-6584-4cf2-9173-20235484f9f4,3b207d5f-6584-4cf2-9173-20235484f9f4,1,0,878d9efe-b0e7-487f-b8f7-83470c131e09,878d9efe-b0e7-487f-b8f7-83470c131e09,1,0,8270573d-8ed6-449d-853b-462d2dabaaa9,8270573d-8ed6-449d-853b-462d2dabaaa9,1,0,baeec6cd-b220-4240-95f2-3a0c1ee06c2e,baeec6cd-b220-4240-95f2-3a0c1ee06c2e,1,0,f2502463-67e4-4bfe-8ad5-fb80aa73975a,f2502463-67e4-4bfe-8ad5-fb80aa73975a,1,0,59e885e6-d978-40c2-95b6-35fc61074fb4,59e885e6-d978-40c2-95b6-35fc61074fb4,1,0,267dc512-9ee1-4bc1-9034-3effb7fb2949,267dc512-9ee1-4bc1-9034-3effb7fb2949,1,0,0f211e73-5be9-4015-93e7-ccf63e793cb6,0f211e73-5be9-4015-93e7-ccf63e793cb6,1,0,6574d8f4-fb97-4a26-b166-711fad63aa07,6574d8f4-fb97-4a26-b166-711fad63aa07,1,0,fb3eddaf-3241-4d59-8314-97a5ae9258c4,fb3eddaf-3241-4d59-8314-97a5ae9258c4,1,0,6528bd7a-bac1-4c8b-9b00-6be01c0121b1,6528bd7a-bac1-4c8b-9b00-6be01c0121b1,1,0,d8601e95-af94-4805-974a-99c539725d74,d8601e95-af94-4805-974a-99c539725d74,1,0,6d98f877-f3bb-4795-9025-2631468a331f,6d98f877-f3bb-4795-9025-2631468a331f,1,0,89b9379d-ace9-48cc-b979-a66fd45aeb1d,89b9379d-ace9-48cc-b979-a66fd45aeb1d,1,0,c4a5c44d-329d-41b5-9a6c-bddbc15f6249,c4a5c44d-329d-41b5-9a6c-bddbc15f6249,1,0,9767a113-5a42-4749-bf40-0f349e85615d,9767a113-5a42-4749-bf40-0f349e85615d,1,0,a3b0494c-f436-45ea-9577-4c0c86b057c9,a3b0494c-f436-45ea-9577-4c0c86b057c9,1,0,5101c142-b25c-4bef-80e7-7407f2c15c90,5101c142-b25c-4bef-80e7-7407f2c15c90,1,0,6d7872f1-fd54-41c4-8253-5f2b125f31ae,6d7872f1-fd54-41c4-8253-5f2b125f31ae,1,0,0c218200-27a8-4f71-9b09-3632dd453644,0c218200-27a8-4f71-9b09-3632dd453644,1,0,2d8a74e5-eb29-448b-b4c0-1f41fa171b5e,2d8a74e5-eb29-448b-b4c0-1f41fa171b5e,1,0,b5d30250-18ab-4af1-b99a-ff5dba334d1f,b5d30250-18ab-4af1-b99a-ff5dba334d1f,1,0,936f1aa5-7516-444b-b451-1162fa5d705f,936f1aa5-7516-444b-b451-1162fa5d705f,1,0,e8d5533e-2669-44f6-9eed-eaedab666d42,e8d5533e-2669-44f6-9eed-eaedab666d42,1,0,dd8e0f41-51a3-4bf2-a32e-084f9ad09be7,dd8e0f41-51a3-4bf2-a32e-084f9ad09be7,1,0,9e323b0d-4e3b-45d4-9705-aa30e63014f5,9e323b0d-4e3b-45d4-9705-aa30e63014f5,1,0,5afa798a-958e-4e0c-a380-0104f4c037a7,5afa798a-958e-4e0c-a380-0104f4c037a7,1,0,c0295fd9-c749-41b3-8d0d-6af16f484b1f,c0295fd9-c749-41b3-8d0d-6af16f484b1f,1,0,bd32a863-3090-432d-89c4-356ba86a0bdc,bd32a863-3090-432d-89c4-356ba86a0bdc,1,0,4621bf5a-46b5-4b82-8ae4-cc8e11e81ba0,4621bf5a-46b5-4b82-8ae4-cc8e11e81ba0,1,0,ed5465b4-a556-4078-ab18-49fef2afba2e,ed5465b4-a556-4078-ab18-49fef2afba2e,1,0,7368ab8f-59d5-4270-a43b-0f3e422169ed,7368ab8f-59d5-4270-a43b-0f3e422169ed,1,0,eeb0571b-1b74-4889-b8b5-f94186d692d7,eeb0571b-1b74-4889-b8b5-f94186d692d7,1,0,9ef3b72c-caa3-486b-9917-04c00f6689c1,9ef3b72c-caa3-486b-9917-04c00f6689c1,1,0,cb3039d8-4b11-4d03-b0ca-eae5dfc01b0a,cb3039d8-4b11-4d03-b0ca-eae5dfc01b0a,1,0,9245417f-f247-47ba-a1b4-a17ec2e8776c,9245417f-f247-47ba-a1b4-a17ec2e8776c,1,0,a4b721d7-b119-47eb-80e0-7db34c83964f,a4b721d7-b119-47eb-80e0-7db34c83964f,1,0,512629d1-e8b7-4f66-b613-b8c0cb9c250b,512629d1-e8b7-4f66-b613-b8c0cb9c250b,1,0,b7cf4684-4432-4658-9c06-b315d470a3a6,b7cf4684-4432-4658-9c06-b315d470a3a6,1,0,d3bc8211-54d8-47dd-aecf-5da72b65195f,d3bc8211-54d8-47dd-aecf-5da72b65195f,1,0,33f11da8-f670-4ec3-9d40-96fce031c60f,33f11da8-f670-4ec3-9d40-96fce031c60f,1,0,97cbd5b5-5a39-418c-93b5-f9934fa1ba4e,97cbd5b5-5a39-418c-93b5-f9934fa1ba4e,1,0,f74c2d41-2433-4bed-8aef-adfeed198252,f74c2d41-2433-4bed-8aef-adfeed198252,1,0,3c2b8a8a-bfe7-4e37-9d83-55a695a06605,3c2b8a8a-bfe7-4e37-9d83-55a695a06605,1,0,56c9703a-751a-4e6c-81f4-a8756fb040e3,56c9703a-751a-4e6c-81f4-a8756fb040e3,1,0,c3a86eec-1ff5-4392-9904-91a12a2e253a,c3a86eec-1ff5-4392-9904-91a12a2e253a,1,0,f5df72a3-c71c-412b-8c3e-6329f1d3a7da,f5df72a3-c71c-412b-8c3e-6329f1d3a7da,1,0,f02b7246-dae9-4e15-b4cd-b06133664d34,f02b7246-dae9-4e15-b4cd-b06133664d34,1,0,77f20022-17ce-4e00-8a84-015238bce6f3,77f20022-17ce-4e00-8a84-015238bce6f3,1,0,3734619b-7059-4547-8b97-0b3393389d4d,3734619b-7059-4547-8b97-0b3393389d4d,1,0,a30bf95f-aabd-4da0-8287-61e08f9362fb,a30bf95f-aabd-4da0-8287-61e08f9362fb,1,0,f5a7df18-2ddb-4053-9aeb-57fc37ae557e,f5a7df18-2ddb-4053-9aeb-57fc37ae557e,1,0,4078867c-2972-47f9-bebd-935a6f1cc667,4078867c-2972-47f9-bebd-935a6f1cc667,1,0,8502fe39-c241-4be5-a313-fd887bbbdfa1,8502fe39-c241-4be5-a313-fd887bbbdfa1,1,0,67a71201-13e5-42a3-902f-fb3a59710dfb,67a71201-13e5-42a3-902f-fb3a59710dfb,1,0,3a79a951-a997-4596-ab62-ba376d67725d,3a79a951-a997-4596-ab62-ba376d67725d,1,0,dd4fe688-c113-4ac5-8114-b89cf1b0eb55,dd4fe688-c113-4ac5-8114-b89cf1b0eb55,1,0,884c28de-434f-440a-8c63-67e659c097ad,884c28de-434f-440a-8c63-67e659c097ad,1,0,92ead3b5-8c55-4e4d-bd47-009e025b22f8,92ead3b5-8c55-4e4d-bd47-009e025b22f8,1,0,50d8e365-aa58-4b60-8992-01943379d485,50d8e365-aa58-4b60-8992-01943379d485,1,0,9bb58c7c-d87d-435b-adf6-09c8f75d47b2,9bb58c7c-d87d-435b-adf6-09c8f75d47b2,1,0,b3f7f763-bea9-4f59-9450-df95e5c3d89d,b3f7f763-bea9-4f59-9450-df95e5c3d89d,1,0,9111e28e-c1c7-414b-9288-61bd06a04d04,9111e28e-c1c7-414b-9288-61bd06a04d04,1,0,bcd705ba-c9ac-4e73-94b1-7632c0f06c04,bcd705ba-c9ac-4e73-94b1-7632c0f06c04,1,0,fec102ea-a3f6-49b5-b4b8-6884b0654129,fec102ea-a3f6-49b5-b4b8-6884b0654129,1,0,246571fb-38c7-4da6-929d-d8b44bc3437c,246571fb-38c7-4da6-929d-d8b44bc3437c,1,0,047fd6d7-5e30-4184-a09a-6525de526cc7,047fd6d7-5e30-4184-a09a-6525de526cc7,1,0,beb44b02-5d5e-4127-aee7-e184a43a4210,beb44b02-5d5e-4127-aee7-e184a43a4210,1,0,1dedfbc2-9250-4229-a6ea-5e085f33e7c3,1dedfbc2-9250-4229-a6ea-5e085f33e7c3,1,0,e24641ed-3e92-46d7-852b-9958ab7bc520,e24641ed-3e92-46d7-852b-9958ab7bc520,1,0,bc2aa3f9-ef2c-49a5-8cd9-ddd8a8cbe19d,bc2aa3f9-ef2c-49a5-8cd9-ddd8a8cbe19d,1,0,b6ac4cd6-c68f-4464-88e9-a8d335d581c6,b6ac4cd6-c68f-4464-88e9-a8d335d581c6,1,0,2c61114f-abd7-4415-8cdf-4fe95d9fe354,2c61114f-abd7-4415-8cdf-4fe95d9fe354,1,0,abd7a766-5cc1-48db-8d29-797e9d666a78,abd7a766-5cc1-48db-8d29-797e9d666a78,1,0,1704b5e3-8e77-4df6-9223-e6e5c41a280d,1704b5e3-8e77-4df6-9223-e6e5c41a280d,1,0,62eca88f-025d-44de-b92c-46cd8bc7e4a1,62eca88f-025d-44de-b92c-46cd8bc7e4a1,1,0,b0dde395-8498-4469-9507-d290798117d7,b0dde395-8498-4469-9507-d290798117d7,1,0,999616ea-0faa-4ae2-9841-6a6997ea6694,999616ea-0faa-4ae2-9841-6a6997ea6694,1,0,c5f91669-13d8-4f0a-a054-2701078da38a,c5f91669-13d8-4f0a-a054-2701078da38a,1,0,34f9872b-e02e-4093-ba06-3cb5b8995850,34f9872b-e02e-4093-ba06-3cb5b8995850,1,0,18515c19-c9ef-4c9f-8d12-4f58ffa251e8,18515c19-c9ef-4c9f-8d12-4f58ffa251e8,1,0,3afe11f6-7424-4b41-a42f-91db33756fa3,3afe11f6-7424-4b41-a42f-91db33756fa3,1,0,94e68502-adf1-476e-be2f-8418385959fa,94e68502-adf1-476e-be2f-8418385959fa,1,0,bf80ccc5-f907-4e7f-a007-6030c7ba682e,bf80ccc5-f907-4e7f-a007-6030c7ba682e,1,0,134bbd7c-cadd-4395-b7a4-0249dfe7d0b1,134bbd7c-cadd-4395-b7a4-0249dfe7d0b1,1,0,05f1f184-50cb-47c5-b3a8-62be6a9780c1,05f1f184-50cb-47c5-b3a8-62be6a9780c1,1,0,f908b81e-f5ba-46ca-b7c0-8cb43ab23901,f908b81e-f5ba-46ca-b7c0-8cb43ab23901,1,0,3c305f89-e453-46c7-987b-f01dc964efdb,3c305f89-e453-46c7-987b-f01dc964efdb,1,0,1809ff43-2af2-44d1-ac7b-91d5bbe4f0ce,1809ff43-2af2-44d1-ac7b-91d5bbe4f0ce,1,0,58c3936c-4db0-45c8-a22e-b5dd49a61497,58c3936c-4db0-45c8-a22e-b5dd49a61497,1,0,9aa607bc-5870-436a-bbe1-296560393e3b,9aa607bc-5870-436a-bbe1-296560393e3b,1,0,1635be16-4861-4a7d-babc-4caff448a7f7,1635be16-4861-4a7d-babc-4caff448a7f7,1,0,9e399087-c957-4a7a-ab9d-2b689736caab,9e399087-c957-4a7a-ab9d-2b689736caab,1,0,e7542e37-a2f0-43b5-852e-4e2b24b1b71f,e7542e37-a2f0-43b5-852e-4e2b24b1b71f,1,0,3e94649c-7d69-4fb4-ada1-ae00eabf02b6,3e94649c-7d69-4fb4-ada1-ae00eabf02b6,1,0,2b7372be-af0d-464e-8d09-8172229790af,2b7372be-af0d-464e-8d09-8172229790af,1,0,d85346db-be25-4dab-a2db-647c3d40dd17,d85346db-be25-4dab-a2db-647c3d40dd17,1,0,c7bafd34-5b15-42ec-b329-0be3002775ad,c7bafd34-5b15-42ec-b329-0be3002775ad,1,0,6feb2278-9149-47f8-a0ec-eb4bd9f44716,6feb2278-9149-47f8-a0ec-eb4bd9f44716,1,0,c960082b-8c16-4d7b-b7fd-b1f2bfe07e0b,c960082b-8c16-4d7b-b7fd-b1f2bfe07e0b,1,0,cd6770d5-cd3c-47af-bc46-c865993adf63,cd6770d5-cd3c-47af-bc46-c865993adf63,1,0,97ec899d-a2a0-4691-83ff-25b78dd49ef6,97ec899d-a2a0-4691-83ff-25b78dd49ef6,1,0,411db885-f761-44e5-bdd1-9fdf9e741ac1,411db885-f761-44e5-bdd1-9fdf9e741ac1,1,0,269ada84-71a9-4b4b-9604-caa40c5b7067,269ada84-71a9-4b4b-9604-caa40c5b7067,1,0,ea13607a-3e05-4468-9932-41b6d51cfedf,ea13607a-3e05-4468-9932-41b6d51cfedf,1,0,9f9936fc-54a0-4812-b12d-2f8f91551440,9f9936fc-54a0-4812-b12d-2f8f91551440,1,0,a5667633-9264-4dfa-9e26-c45e96e61ae3,a5667633-9264-4dfa-9e26-c45e96e61ae3,1,0,2eeea138-481c-4fde-9e8a-709d751cc469,2eeea138-481c-4fde-9e8a-709d751cc469,1,0,43e37533-ed38-4000-a387-5749f8d9aaf3,43e37533-ed38-4000-a387-5749f8d9aaf3,1,0,e93bdb44-64b3-43d8-b15a-c561dbb91974,e93bdb44-64b3-43d8-b15a-c561dbb91974,1,0,a7c7c835-5402-4bdd-a0e3-d21746174d5a,a7c7c835-5402-4bdd-a0e3-d21746174d5a,1,0,07e81872-afac-4720-86b4-91e7bf4a2881,07e81872-afac-4720-86b4-91e7bf4a2881,1,0,02c5f3b2-d691-4eaf-84fd-763770e4b1cb,02c5f3b2-d691-4eaf-84fd-763770e4b1cb,1,0,845262f8-8208-4c90-98ec-c85dd5734cf0,845262f8-8208-4c90-98ec-c85dd5734cf0,1,0,532dfa48-39b0-4d0f-9f8c-b51ca27e47a9,532dfa48-39b0-4d0f-9f8c-b51ca27e47a9,1,0,17bc0f34-c35b-4beb-be5f-8e8d8f06c053,17bc0f34-c35b-4beb-be5f-8e8d8f06c053,1,0,f91813e6-b75c-43fb-8da3-a0d958dc6fa0,f91813e6-b75c-43fb-8da3-a0d958dc6fa0,1,0,ad066c0d-4f4c-48af-9cc8-bb835372150a,ad066c0d-4f4c-48af-9cc8-bb835372150a,1,0,a2145e81-239e-4267-8a43-ea3f7babe878,a2145e81-239e-4267-8a43-ea3f7babe878,1,0,39598414-9c1d-46ec-a534-8bd43e622e45,39598414-9c1d-46ec-a534-8bd43e622e45,1,0,b552c510-4fd4-4c16-9022-dc5babcafc52,b552c510-4fd4-4c16-9022-dc5babcafc52,1,0,3892c06d-28f1-4238-a929-201316cac1ed,3892c06d-28f1-4238-a929-201316cac1ed,1,0,c13dea2e-17fa-4a5f-a70f-96e623db8a6b,c13dea2e-17fa-4a5f-a70f-96e623db8a6b,1,0,339e8cba-a92e-42f6-8d00-3b8b56ce3b0f,339e8cba-a92e-42f6-8d00-3b8b56ce3b0f,1,0,1f587ff1-95a4-4f45-85b4-22bb97011177,1f587ff1-95a4-4f45-85b4-22bb97011177,1,0,567c68fd-74c7-4b6e-9119-56ac8d78073c,567c68fd-74c7-4b6e-9119-56ac8d78073c,1,0,3326bbcb-b277-44db-a252-2448119e8146,3326bbcb-b277-44db-a252-2448119e8146,1,0,61cac5f7-320c-4098-9078-44fadcdeb219,61cac5f7-320c-4098-9078-44fadcdeb219,1,0,304304b1-36a4-42bb-8ab9-b23b59795001,304304b1-36a4-42bb-8ab9-b23b59795001,1,0,a22d1a4f-cb7c-4bcc-b258-ecca282fb071,a22d1a4f-cb7c-4bcc-b258-ecca282fb071,1,0,e5beda2c-f4e2-4a6b-a1d0-a877eb0c9f5b,e5beda2c-f4e2-4a6b-a1d0-a877eb0c9f5b,1,0,cd454738-62dd-4f95-af33-b52750678428,cd454738-62dd-4f95-af33-b52750678428,1,0,2a479b8f-7569-43d0-8ca3-9001d6ec57f0,2a479b8f-7569-43d0-8ca3-9001d6ec57f0,1,0,e4abafc6-f859-4d96-9818-5b9bf8d66d69,e4abafc6-f859-4d96-9818-5b9bf8d66d69,1,0,535acd2c-26d2-4f32-9ae6-cc1956317c59,535acd2c-26d2-4f32-9ae6-cc1956317c59,1,0,801adeeb-8a7f-44c1-b649-a7dfffc7b65d,801adeeb-8a7f-44c1-b649-a7dfffc7b65d,1,0,ac4e0868-ba49-46b4-8872-d42483a5591f,ac4e0868-ba49-46b4-8872-d42483a5591f,1,0,45e6c4a6-1d63-4b94-a7d2-fbd3fb68061b,45e6c4a6-1d63-4b94-a7d2-fbd3fb68061b,1,0,0493dcf1-5f94-41f9-a4c7-a52e12a29068,0493dcf1-5f94-41f9-a4c7-a52e12a29068,1,0,ca4c0299-625a-4b03-be0e-36ffb45c6d08,ca4c0299-625a-4b03-be0e-36ffb45c6d08,1,0,7fa1119b-4321-4b8f-a879-1d940084145a,7fa1119b-4321-4b8f-a879-1d940084145a,1,0,5d9c0841-6ea6-48dc-a53b-9f19894750f8,5d9c0841-6ea6-48dc-a53b-9f19894750f8,1,0,86b5303b-d967-4bc6-b2da-066c5a58613f,86b5303b-d967-4bc6-b2da-066c5a58613f,1,0,853b824d-9377-475f-913e-d02bd60f5f64,853b824d-9377-475f-913e-d02bd60f5f64,1,0,d5a73869-381e-4878-8db7-596643937202,d5a73869-381e-4878-8db7-596643937202,1,0,3a93f1d2-3e9c-41a9-9d53-314538a96bb2,3a93f1d2-3e9c-41a9-9d53-314538a96bb2,1,0,8bc4bece-027f-460c-ade0-d7c7d3d9a6b7,8bc4bece-027f-460c-ade0-d7c7d3d9a6b7,1,0,dd73a8d8-a6db-4d3c-a808-d82bad8876b9,dd73a8d8-a6db-4d3c-a808-d82bad8876b9,1,0,11a93e3a-3c5b-4242-913c-02474a383344,11a93e3a-3c5b-4242-913c-02474a383344,1,0,ddd2861c-592b-4879-b9de-4b05a22c0b43,ddd2861c-592b-4879-b9de-4b05a22c0b43,1,0,5b383021-a800-4f0b-b8a3-d344389bff6c,5b383021-a800-4f0b-b8a3-d344389bff6c,1,0,8fe71bce-a61a-4a2e-bd18-81c7a7bb4456,8fe71bce-a61a-4a2e-bd18-81c7a7bb4456,1,0,11e708d8-82f4-4d45-a77d-7b9d23c0ef54,11e708d8-82f4-4d45-a77d-7b9d23c0ef54,1,0,8a57d427-a34e-4121-84e6-1a86a9f9092d,8a57d427-a34e-4121-84e6-1a86a9f9092d,1,0,dbc1bf11-e92a-4f4e-90d4-6a3ccdaec7e5,dbc1bf11-e92a-4f4e-90d4-6a3ccdaec7e5,1,0,29ec9423-25ef-4cf2-ad6a-58f854c3e22b,29ec9423-25ef-4cf2-ad6a-58f854c3e22b,1,0,2607e4d1-4fc0-4270-ad45-2c95d4aa04da,2607e4d1-4fc0-4270-ad45-2c95d4aa04da,1,0,b4b4bd5d-a860-4994-90b7-0c60ab680c4e,b4b4bd5d-a860-4994-90b7-0c60ab680c4e,1,0,68447105-a784-4803-8eb8-3701b0fc819d,68447105-a784-4803-8eb8-3701b0fc819d,1,0,5fb5320c-cd7c-4f28-ad6a-8670a60a9e11,5fb5320c-cd7c-4f28-ad6a-8670a60a9e11,1,0,59dee70d-aeca-470a-b3c4-e43bb16c5753,59dee70d-aeca-470a-b3c4-e43bb16c5753,1,0,82777e92-0681-44bf-b51e-4d98fcd5d5bd,82777e92-0681-44bf-b51e-4d98fcd5d5bd,1,0,2e0b331d-92d4-4250-94c6-9ced8cdcb1e4,2e0b331d-92d4-4250-94c6-9ced8cdcb1e4,1,0,4599ef83-5f1e-44af-ae0c-67988656a99e,4599ef83-5f1e-44af-ae0c-67988656a99e,1,0,acb0d7eb-2ed9-4419-b79d-7dc661d70c30,acb0d7eb-2ed9-4419-b79d-7dc661d70c30,1,0,e1b94dcf-ec37-4b2d-a7af-120eeee40944,e1b94dcf-ec37-4b2d-a7af-120eeee40944,1,0,7d2a37b1-a1a0-435a-846a-95e255655044,7d2a37b1-a1a0-435a-846a-95e255655044,1,0,109db64c-00dc-490e-99a5-4430d9344e99,109db64c-00dc-490e-99a5-4430d9344e99,1,0,85837a55-fed5-4b7b-a622-30d728b9a677,85837a55-fed5-4b7b-a622-30d728b9a677,1,0,0fd79cdb-dc7a-40ca-a3bc-2c7a7b4691bb,0fd79cdb-dc7a-40ca-a3bc-2c7a7b4691bb,1,0,6ede8b5c-7df0-44a5-9136-8109bbd8b5a9,6ede8b5c-7df0-44a5-9136-8109bbd8b5a9,1,0,325bacdd-793f-47d8-b987-57e9d5f2782b,325bacdd-793f-47d8-b987-57e9d5f2782b,1,0,80395d47-70d7-4d8d-9b18-93283fba80c2,80395d47-70d7-4d8d-9b18-93283fba80c2,1,0,8b621ec9-24c9-4166-90ce-29c5ad30f78b,8b621ec9-24c9-4166-90ce-29c5ad30f78b,1,0,cc98670a-7b18-4973-b211-90261c5c8c10,cc98670a-7b18-4973-b211-90261c5c8c10,1,0,da9821c3-4b16-48b7-9088-d3cf8ac536a6,da9821c3-4b16-48b7-9088-d3cf8ac536a6,1,0,fb36c775-1124-4ba6-8af8-133bf66fcb54,fb36c775-1124-4ba6-8af8-133bf66fcb54,1,0,51f9aff4-71da-4b1b-b48b-04122a17d855,51f9aff4-71da-4b1b-b48b-04122a17d855,1,0,d5142574-a040-4dd0-a482-cdc61c1d86ab,d5142574-a040-4dd0-a482-cdc61c1d86ab,1,0,62957889-503f-4923-a372-29776dc3b5e5,62957889-503f-4923-a372-29776dc3b5e5,1,0,778e79ee-eb1a-4d52-8a31-58e781c78fe4,778e79ee-eb1a-4d52-8a31-58e781c78fe4,1,0,90385850-d37b-4b2e-ac87-95c17f32197c,90385850-d37b-4b2e-ac87-95c17f32197c,1,0,b9e5bb39-ed0a-4e12-b7e4-2d9b5015bf9c,b9e5bb39-ed0a-4e12-b7e4-2d9b5015bf9c,1,0,dbced4aa-6432-4f0c-a99a-5a3e7b0f6755,dbced4aa-6432-4f0c-a99a-5a3e7b0f6755,1,0,e849e46c-2ce6-427b-92bc-06d7997f59bf,e849e46c-2ce6-427b-92bc-06d7997f59bf,1,0,5a971dc0-28bf-4426-9426-9f456aea080a,5a971dc0-28bf-4426-9426-9f456aea080a,1,0,f480ac52-e2f1-4ed0-a0b1-20a622f77302,f480ac52-e2f1-4ed0-a0b1-20a622f77302,1,0,5c63e7cd-ecdb-45ae-a589-f6c38f5a8e76,5c63e7cd-ecdb-45ae-a589-f6c38f5a8e76,1,0,b9b0fbdc-8fda-46d1-bb3e-561a03604971,b9b0fbdc-8fda-46d1-bb3e-561a03604971,1,0,eadfdbe3-bc85-4084-aef6-4cfd258ee6f1,eadfdbe3-bc85-4084-aef6-4cfd258ee6f1,1,0,672c2936-9771-4e32-a970-7ac7f12a21e8,672c2936-9771-4e32-a970-7ac7f12a21e8,1,0,73afaad8-dfa9-43e3-bdaf-543c3545d788,73afaad8-dfa9-43e3-bdaf-543c3545d788,1,0,c264441d-4805-4968-baa2-37b8970049c7,c264441d-4805-4968-baa2-37b8970049c7,1,0,4f0bda80-2246-43be-95f8-ae8480682cd5,4f0bda80-2246-43be-95f8-ae8480682cd5,1,0,ac4fa2a4-93a1-4aa6-986a-5f576457fc8a,ac4fa2a4-93a1-4aa6-986a-5f576457fc8a,1,0,6f683f46-9eef-4e78-bc2f-7174238bf53c,6f683f46-9eef-4e78-bc2f-7174238bf53c,1,0,7d1ed38b-98cf-4a0e-a605-680bb580d904,7d1ed38b-98cf-4a0e-a605-680bb580d904,1,0,b769eda0-11de-401c-a68b-4fce4555d4fc,b769eda0-11de-401c-a68b-4fce4555d4fc,1,0,fd7a668f-3099-4e15-956a-92c6295dd4d5,fd7a668f-3099-4e15-956a-92c6295dd4d5,1,0,afcbd830-ec5f-4865-a176-ea3014dff908,afcbd830-ec5f-4865-a176-ea3014dff908,1,0,dc5fc801-14e4-42e8-b396-76eb30b69eea,dc5fc801-14e4-42e8-b396-76eb30b69eea,1,0,485b9f00-475a-49e5-ade2-b2e05d94ecf0,485b9f00-475a-49e5-ade2-b2e05d94ecf0,1,0,b7fae67e-bdbb-4cdf-a6fd-26265e48fddb,b7fae67e-bdbb-4cdf-a6fd-26265e48fddb,1,0,398bf9d1-c353-461e-a1be-683047dcbe41,398bf9d1-c353-461e-a1be-683047dcbe41,1,0,f36150de-33af-4410-8a4c-8c9f4b545793,f36150de-33af-4410-8a4c-8c9f4b545793,1,0,62f97480-7d4a-48f3-9d1d-612909b242c9,62f97480-7d4a-48f3-9d1d-612909b242c9,1,0,2b4f6e2f-6cc4-4c7c-98a6-786f3793366b,2b4f6e2f-6cc4-4c7c-98a6-786f3793366b,1,0,3068be84-a401-4701-8ac9-411fae130f84,3068be84-a401-4701-8ac9-411fae130f84,1,0,957394a7-e5b8-47fc-8680-1e71efe2be7d,957394a7-e5b8-47fc-8680-1e71efe2be7d,1,0,ba49a9e4-6ec1-43ff-92cd-9dbf221bbf09,ba49a9e4-6ec1-43ff-92cd-9dbf221bbf09,1,0,4f25ef45-c8d9-401d-b0e8-2217ac310f04,4f25ef45-c8d9-401d-b0e8-2217ac310f04,1,0,504ca240-b5ae-433e-ae5f-d818263eea23,504ca240-b5ae-433e-ae5f-d818263eea23,1,0,32461819-9437-417d-8d1e-851c9a2dcee2,32461819-9437-417d-8d1e-851c9a2dcee2,1,0,74228950-8a4b-4dd6-a053-8650de202521,74228950-8a4b-4dd6-a053-8650de202521,1,0,6b9ce91e-08b9-4972-9878-1724c67b68ec,6b9ce91e-08b9-4972-9878-1724c67b68ec,1,0,640814f2-6082-475e-8006-25fd5b24afdb,640814f2-6082-475e-8006-25fd5b24afdb,1,0,6fcd2a3a-4d66-40e3-bde0-5c274b43783f,6fcd2a3a-4d66-40e3-bde0-5c274b43783f,1,0,569047c2-0879-4fba-a814-44812d21043b,569047c2-0879-4fba-a814-44812d21043b,1,0,0c3c4494-c037-431e-9eeb-9b6cfd7372c3,0c3c4494-c037-431e-9eeb-9b6cfd7372c3,1,0,80512d95-5458-4934-98ae-a7b58099196b,80512d95-5458-4934-98ae-a7b58099196b,1,0,6f2354cd-4a34-4921-96bb-b786486f85cf,6f2354cd-4a34-4921-96bb-b786486f85cf,1,0,f1b66ea8-262d-4b38-a039-b83a843f6ee8,f1b66ea8-262d-4b38-a039-b83a843f6ee8,1,0,bcae6e05-f1fd-413e-9eef-2e1cee42a962,bcae6e05-f1fd-413e-9eef-2e1cee42a962,1,0,40da1bca-ebb3-4c64-bf54-1f37b71d47b6,40da1bca-ebb3-4c64-bf54-1f37b71d47b6,1,0,778b4c8f-7a1e-4b4b-9f68-12cbf52bf195,778b4c8f-7a1e-4b4b-9f68-12cbf52bf195,1,0,91562fe8-e630-4bcb-a14e-c0e1e129141a,91562fe8-e630-4bcb-a14e-c0e1e129141a,1,0,c261abfd-3828-47b5-aa32-dfdd3a1636ad,c261abfd-3828-47b5-aa32-dfdd3a1636ad,1,0,e9aa6dab-0d96-42ce-9bd6-b8b10d755f8c,e9aa6dab-0d96-42ce-9bd6-b8b10d755f8c,1,0,1db1cb24-f364-4b91-bc96-c216764207a0,1db1cb24-f364-4b91-bc96-c216764207a0,1,0,64d7c8a7-1c15-4afb-ad97-abf8729c604e,64d7c8a7-1c15-4afb-ad97-abf8729c604e,1,0,a3cbbc8a-4afd-48c5-91d4-4849d18905c1,a3cbbc8a-4afd-48c5-91d4-4849d18905c1,1,0,5d6b29dc-38af-4dce-b79c-ce8f23afb3b1,5d6b29dc-38af-4dce-b79c-ce8f23afb3b1,1,0,c04b685a-0d2d-404c-a74a-775ffab298ce,c04b685a-0d2d-404c-a74a-775ffab298ce,1,0,5fe6967d-e333-464b-a89e-8c868c0ce37d,5fe6967d-e333-464b-a89e-8c868c0ce37d,1,0,5aef2892-7a87-4d3b-bb46-8340a7fb97a8,5aef2892-7a87-4d3b-bb46-8340a7fb97a8,1,0,84da1ef8-1784-4dfc-b17a-7728aa7ff62a,84da1ef8-1784-4dfc-b17a-7728aa7ff62a,1,0,9155c95b-6afb-41bb-bd0b-d37e503fc163,9155c95b-6afb-41bb-bd0b-d37e503fc163,1,0,d917c19e-be15-41cc-9c8a-a97c8de85309,d917c19e-be15-41cc-9c8a-a97c8de85309,1,0,54b5b44c-5f24-4b2a-982c-4489b18db7f0,54b5b44c-5f24-4b2a-982c-4489b18db7f0,1,0,5bc04a9a-6a0a-4607-b8eb-743b87143ae7,5bc04a9a-6a0a-4607-b8eb-743b87143ae7,1,0,90420fe9-f75a-4bcc-8e1a-9d665a61ecef,90420fe9-f75a-4bcc-8e1a-9d665a61ecef,1,0,904d5bd0-3843-4aaa-86a3-f8e12282e5c0,904d5bd0-3843-4aaa-86a3-f8e12282e5c0,1,0,e057e428-99c1-419d-a169-697c1e825e94,e057e428-99c1-419d-a169-697c1e825e94,1,0,784a60bd-4070-476d-9b8b-f607c76dc52b,784a60bd-4070-476d-9b8b-f607c76dc52b,1,0,ce1ffc4e-56c2-45ce-80e8-8b96d00316bc,ce1ffc4e-56c2-45ce-80e8-8b96d00316bc,1,0,47907538-9357-4885-8b50-17f2e16c260f,47907538-9357-4885-8b50-17f2e16c260f,1,0,17e1840f-fef3-4f17-8476-273e6af24cb4,17e1840f-fef3-4f17-8476-273e6af24cb4,1,0,a64566fa-b706-49bc-8277-4531145c400e,a64566fa-b706-49bc-8277-4531145c400e,1,0,a8f32b13-249c-4ce6-a521-f06a87f2e670,a8f32b13-249c-4ce6-a521-f06a87f2e670,1,0,815775e4-cfb7-495b-87c4-d134b90d93d4,815775e4-cfb7-495b-87c4-d134b90d93d4,1,0,e867f2f1-0550-4d15-9e40-ba36c9aabfbd,e867f2f1-0550-4d15-9e40-ba36c9aabfbd,1,0,8bdbb9ef-3a91-4374-b3c5-9447005bb1b7,8bdbb9ef-3a91-4374-b3c5-9447005bb1b7,1,0,7a27b378-89ac-4cad-8c69-a0cd14812d7e,7a27b378-89ac-4cad-8c69-a0cd14812d7e,1,0,d2433a11-8e1d-4e4c-966d-37cde6283f72,d2433a11-8e1d-4e4c-966d-37cde6283f72,1,0,59eb5919-3c33-48bf-b322-ec78018e4142,59eb5919-3c33-48bf-b322-ec78018e4142,1,0,63f308a5-b955-48a5-8052-50c5bede65d0,63f308a5-b955-48a5-8052-50c5bede65d0,1,0,1b614b97-5c1d-497a-9574-40114059f836,1b614b97-5c1d-497a-9574-40114059f836,1,0,477dfea4-e401-4cf0-b0a8-2df7c3836c58,477dfea4-e401-4cf0-b0a8-2df7c3836c58,1,0,294c000f-6979-4ed1-bbc7-7402facd9185,294c000f-6979-4ed1-bbc7-7402facd9185,1,0,db607fbc-f785-47d5-9550-577424aa3fe9,db607fbc-f785-47d5-9550-577424aa3fe9,1,0,b7111ddf-a623-4bae-90aa-636148492ca2,b7111ddf-a623-4bae-90aa-636148492ca2,1,0,905d9dcd-5793-4362-8fe8-2edce8c35e32,905d9dcd-5793-4362-8fe8-2edce8c35e32,1,0,a96cb6fd-54e0-4514-9210-7f4636acd336,a96cb6fd-54e0-4514-9210-7f4636acd336,1,0,3580e7a7-95d1-4a8e-bc12-a1449fe03757,3580e7a7-95d1-4a8e-bc12-a1449fe03757,1,0,13759790-6c70-4323-9321-a68b90c51663,13759790-6c70-4323-9321-a68b90c51663,1,0,d9704b20-c29c-4e7f-b777-0ac9080a5631,d9704b20-c29c-4e7f-b777-0ac9080a5631,1,0,c1372891-0f55-4868-ab97-906eff52be0e,c1372891-0f55-4868-ab97-906eff52be0e,1,0,33e96bda-1708-4ee4-8d4d-3b919bda3e38,33e96bda-1708-4ee4-8d4d-3b919bda3e38,1,0,53fb35a7-44ab-42e7-8dba-6fa08bf5ba2c,53fb35a7-44ab-42e7-8dba-6fa08bf5ba2c,1,0,93fcaa62-2a19-468b-9128-c7930583fbfd,93fcaa62-2a19-468b-9128-c7930583fbfd,1,0,2d885109-4c96-41c0-a996-785bfd793c2d,2d885109-4c96-41c0-a996-785bfd793c2d,1,0,e870a1bd-0c08-4d1e-832a-357922983c19,e870a1bd-0c08-4d1e-832a-357922983c19,1,0,9f71aeac-f889-40dc-91bd-d670da4efd2b,9f71aeac-f889-40dc-91bd-d670da4efd2b,1,0,62f8a9b2-9e56-4d5c-a7e2-a85f5b27a5b7,62f8a9b2-9e56-4d5c-a7e2-a85f5b27a5b7,1,0,614ef0bd-3298-408b-bf71-37df8ee60702,614ef0bd-3298-408b-bf71-37df8ee60702,1,0,26ff1be6-f72a-456a-9dce-302029752603,26ff1be6-f72a-456a-9dce-302029752603,1,0,db850a08-0c99-4a57-9b04-38be64bd38fb,db850a08-0c99-4a57-9b04-38be64bd38fb,1,0,abeca127-5ae9-46af-a5e8-d6438fd68367,abeca127-5ae9-46af-a5e8-d6438fd68367,1,0,bce81631-9f6d-42b3-b4b6-2199afb08f2f,bce81631-9f6d-42b3-b4b6-2199afb08f2f,1,0,67d6878f-3e47-4142-8f98-c5a207f0b8a8,67d6878f-3e47-4142-8f98-c5a207f0b8a8,1,0,7f4b872f-0e50-49dd-984d-f5fc3ac3f2f0,7f4b872f-0e50-49dd-984d-f5fc3ac3f2f0,1,0,68636657-4d46-4c2a-9b2f-11521a55dfb4,68636657-4d46-4c2a-9b2f-11521a55dfb4,1,0,18a83f43-dc84-4f8a-9580-681b19f571c4,18a83f43-dc84-4f8a-9580-681b19f571c4,1,0,01c588b0-d0ce-4978-b04d-084e6a00fcc7,01c588b0-d0ce-4978-b04d-084e6a00fcc7,1,0,a23642d9-8c4f-44a5-8865-bfb286e47c55,a23642d9-8c4f-44a5-8865-bfb286e47c55,1,0,7b37e038-dcef-41e1-b6e7-ed73c6958415,7b37e038-dcef-41e1-b6e7-ed73c6958415,1,0,24df2d14-5ebf-4ded-ba14-5daee7a0c536,24df2d14-5ebf-4ded-ba14-5daee7a0c536,1,0,13d6e2e9-b268-4c1b-8b8b-30c5296cfe4c,13d6e2e9-b268-4c1b-8b8b-30c5296cfe4c,1,0,03bb028a-ee8c-411e-8382-653046f803c6,03bb028a-ee8c-411e-8382-653046f803c6,1,0,c4fa80ca-32d6-4a44-9fe2-7ffd67e1cb30,c4fa80ca-32d6-4a44-9fe2-7ffd67e1cb30,1,0,8aa73dfd-41ac-4f79-bf73-cd2da51b1232,8aa73dfd-41ac-4f79-bf73-cd2da51b1232,1,0,38d5ed93-133b-44fe-827a-69a6cfc0461d,38d5ed93-133b-44fe-827a-69a6cfc0461d,1,0,cae8a6f2-bbe9-4b73-b839-9bf8e5e2818d,cae8a6f2-bbe9-4b73-b839-9bf8e5e2818d,1,0,0a79ee40-e6d6-4dbf-8378-98c2ec1e8ef9,0a79ee40-e6d6-4dbf-8378-98c2ec1e8ef9,1,0,5148d263-de26-4c92-b090-ae59f42dfb05,5148d263-de26-4c92-b090-ae59f42dfb05,1,0,dbefe81f-85cf-4d84-9600-b359598c2543,dbefe81f-85cf-4d84-9600-b359598c2543,1,0,1a624a06-93b8-4d1f-8c14-2061e1e7927c,1a624a06-93b8-4d1f-8c14-2061e1e7927c,1,0,4ad54ca8-8e4a-4a35-9537-0395851fcdfb,4ad54ca8-8e4a-4a35-9537-0395851fcdfb,1,0,3e427c09-79ed-45f7-b4c9-d9aa7ccc01b2,3e427c09-79ed-45f7-b4c9-d9aa7ccc01b2,1,0,1a4dd1f5-c2d6-4e06-b428-ab7870810bf3,1a4dd1f5-c2d6-4e06-b428-ab7870810bf3,1,0,d5967e0f-03cd-4190-a702-7e9290eae1eb,d5967e0f-03cd-4190-a702-7e9290eae1eb,1,0,78fdbce8-8479-4edd-89c0-1bbaf8ffd482,78fdbce8-8479-4edd-89c0-1bbaf8ffd482,1,0,8eb18de5-8283-4d0c-bb11-b882e78181d5,8eb18de5-8283-4d0c-bb11-b882e78181d5,1,0,27b27cc5-d1ad-4a2a-bcf4-ec2ebb3eba43,27b27cc5-d1ad-4a2a-bcf4-ec2ebb3eba43,1,0,7059b117-714c-4710-aebe-76f88c4d41d5,7059b117-714c-4710-aebe-76f88c4d41d5,1,0,ea050453-4947-40dc-aa2a-503ddd1a235a,ea050453-4947-40dc-aa2a-503ddd1a235a,1,0,37d0e6d4-702e-46f5-ae87-4d393fa0c701,37d0e6d4-702e-46f5-ae87-4d393fa0c701,1,0,1e963c1e-f914-46e1-81d3-90d126fc6f8d,1e963c1e-f914-46e1-81d3-90d126fc6f8d,1,0,3a62d88e-9298-42c0-bd87-c749ecd01d19,3a62d88e-9298-42c0-bd87-c749ecd01d19,1,0,abbf064e-c6ea-4712-930b-a9fef42e0ee1,abbf064e-c6ea-4712-930b-a9fef42e0ee1,1,0,fc13dd80-ce44-4ed1-a9d7-dae44602b954,fc13dd80-ce44-4ed1-a9d7-dae44602b954,1,0,a3fe224e-c3ef-4e30-90e4-c4ed5eb11824,a3fe224e-c3ef-4e30-90e4-c4ed5eb11824,1,0,433b23a1-a863-4775-b2f2-1384e8f3cbbb,433b23a1-a863-4775-b2f2-1384e8f3cbbb,1,0,a1677c47-b9a4-427a-972d-9bb2293445b6,a1677c47-b9a4-427a-972d-9bb2293445b6,1,0,e4a328c0-e73b-465d-ae36-38e5a71690fa,e4a328c0-e73b-465d-ae36-38e5a71690fa,1,0,bf66612b-aec4-414b-bee6-9bcab145c7cc,bf66612b-aec4-414b-bee6-9bcab145c7cc,1,0,811f356f-554a-4a63-90b6-dedb5fec7c05,811f356f-554a-4a63-90b6-dedb5fec7c05,1,0,85bebd81-a355-4010-889b-cff6f72dafcb,85bebd81-a355-4010-889b-cff6f72dafcb,1,0,49521f36-fd1b-47dd-81cc-48b6fb651e22,49521f36-fd1b-47dd-81cc-48b6fb651e22,1,0,1491cc2a-b3be-4bcc-a181-ce68d4b5d4cb,1491cc2a-b3be-4bcc-a181-ce68d4b5d4cb,1,0,bc946e21-53bb-4332-8c63-7b0aa78826eb,bc946e21-53bb-4332-8c63-7b0aa78826eb,1,0,4be2bdad-9a43-4593-acbc-a02e9144a89f,4be2bdad-9a43-4593-acbc-a02e9144a89f,1,0,64a86d5d-f925-45ee-82da-76df1cc20729,64a86d5d-f925-45ee-82da-76df1cc20729,1,0,eb4455f2-a5a0-44fb-8302-7312bc32df66,eb4455f2-a5a0-44fb-8302-7312bc32df66,1,0,cd6d2ab5-8e5c-4db3-8c8c-0526046a9b68,cd6d2ab5-8e5c-4db3-8c8c-0526046a9b68,1,0,9f20e59e-7db8-466f-b965-7045fc3f1489,9f20e59e-7db8-466f-b965-7045fc3f1489,1,0,cb057756-d3f7-4c50-a9d0-bac9ca2abd46,cb057756-d3f7-4c50-a9d0-bac9ca2abd46,1,0,89ac3d39-1915-4e67-a4e4-5a67a155cb75,89ac3d39-1915-4e67-a4e4-5a67a155cb75,1,0,d27b637d-5a51-49ff-bf73-343891534586,d27b637d-5a51-49ff-bf73-343891534586,1,0,b5a073a2-54e2-47c9-b533-f75fd2c9f343,b5a073a2-54e2-47c9-b533-f75fd2c9f343,1,0,0c8571be-f9b6-4292-add9-980cfe7fa2ec,0c8571be-f9b6-4292-add9-980cfe7fa2ec,1,0,989b8ccd-bc05-48c1-9969-b3733028b65f,989b8ccd-bc05-48c1-9969-b3733028b65f,1,0,6c70b13d-f9d0-459f-8d38-c01c11f356f1,6c70b13d-f9d0-459f-8d38-c01c11f356f1,1,0,45ca19df-90f3-4143-a659-bc0cb97efee9,45ca19df-90f3-4143-a659-bc0cb97efee9,1,0,bbaed1bd-0eb7-4f2b-b844-ab79c1d0a091,bbaed1bd-0eb7-4f2b-b844-ab79c1d0a091,1,0,2e7fbea4-57ac-4633-bb39-8725e57bc7ba,2e7fbea4-57ac-4633-bb39-8725e57bc7ba,1,0,83ae9b22-20ff-4e94-9282-19daf2274328,83ae9b22-20ff-4e94-9282-19daf2274328,1,0,dcad5d84-6643-4f0b-9e6e-73fe343db4a7,dcad5d84-6643-4f0b-9e6e-73fe343db4a7,1,0,e1ca1374-6dad-46d3-bb72-b67f3e6b1809,e1ca1374-6dad-46d3-bb72-b67f3e6b1809,1,0,a92b2b70-7e69-49d1-b921-c9d1b0718f94,a92b2b70-7e69-49d1-b921-c9d1b0718f94,1,0,d57a3300-0f9f-4fe5-b627-01c96b723053,d57a3300-0f9f-4fe5-b627-01c96b723053,1,0,19f690a3-d27b-43c1-94b7-585fc628da05,19f690a3-d27b-43c1-94b7-585fc628da05,1,0,d375fac5-098c-42b5-a0bd-9a4ae7516ada,d375fac5-098c-42b5-a0bd-9a4ae7516ada,1,0,29034f3e-d2eb-44e0-ac85-f2ffaf14eb90,29034f3e-d2eb-44e0-ac85-f2ffaf14eb90,1,0,ce65563d-03dc-46d8-96d4-c2d4ae2a2960,ce65563d-03dc-46d8-96d4-c2d4ae2a2960,1,0,5079f17e-dfd6-43f4-83fa-6ac408e5bd3b,5079f17e-dfd6-43f4-83fa-6ac408e5bd3b,1,0,7a4346c3-f1aa-4ce0-886e-76cd9abf563c,7a4346c3-f1aa-4ce0-886e-76cd9abf563c,1,0,cf783265-a4cb-436f-963a-1ff8220ae246,cf783265-a4cb-436f-963a-1ff8220ae246,1,0,3560f949-48f9-4fca-9fe2-81efc1ec0eee,3560f949-48f9-4fca-9fe2-81efc1ec0eee,1,0,662078f0-b75d-4c44-896f-7b7f74fd1ed4,662078f0-b75d-4c44-896f-7b7f74fd1ed4,1,0,4fa11304-fbd4-4c90-909d-5024283a6868,4fa11304-fbd4-4c90-909d-5024283a6868,1,0,207290c2-5221-48ad-99aa-bb0f7955df3f,207290c2-5221-48ad-99aa-bb0f7955df3f,1,0,162137ef-dea2-4ace-9e67-897dad0e7c3d,162137ef-dea2-4ace-9e67-897dad0e7c3d,1,0,d91a016e-cca9-4976-9c53-2c96fa95cf1a,d91a016e-cca9-4976-9c53-2c96fa95cf1a,1,0,012fb2f1-1c15-4800-8968-78a90c2a1348,012fb2f1-1c15-4800-8968-78a90c2a1348,1,0,a29a36aa-3c90-4be9-8ffc-20237721d1d0,a29a36aa-3c90-4be9-8ffc-20237721d1d0,1,0,aec8f9e6-d177-45f5-ba55-2d662428c2ae,aec8f9e6-d177-45f5-ba55-2d662428c2ae,1,0,b0bf8af5-d824-459c-bc40-17495406af3c,b0bf8af5-d824-459c-bc40-17495406af3c,1,0,7dfdd08b-7cd9-480c-829d-97f5e7152eec,7dfdd08b-7cd9-480c-829d-97f5e7152eec,1,0,64752b64-80ae-4537-986a-d61423dc546b,64752b64-80ae-4537-986a-d61423dc546b,1,0,2c37e123-ea35-4501-93e1-2fa295444bec,2c37e123-ea35-4501-93e1-2fa295444bec,1,0,c8bd3ac8-3b49-46bb-aadd-7270ad2868fc,c8bd3ac8-3b49-46bb-aadd-7270ad2868fc,1,0,a997a430-3ea8-4fde-9f53-7b507a04c215,a997a430-3ea8-4fde-9f53-7b507a04c215,1,0,f648e19d-026b-4fa7-8e70-1866b27b94f8,f648e19d-026b-4fa7-8e70-1866b27b94f8,1,0,d32081fc-47d3-4e66-837e-705c94ba8ca8,d32081fc-47d3-4e66-837e-705c94ba8ca8,1,0,69c207c2-7699-4467-b127-286ecd6d0f29,69c207c2-7699-4467-b127-286ecd6d0f29,1,0,e33df42d-4c64-4475-8294-6b05ecdb4e02,e33df42d-4c64-4475-8294-6b05ecdb4e02,1,0,6094a0ed-2051-4649-ad75-dfeb389d3cbb,6094a0ed-2051-4649-ad75-dfeb389d3cbb,1,0,6944a7e2-b9a1-492f-a6f2-9bf31d97ec78,6944a7e2-b9a1-492f-a6f2-9bf31d97ec78,1,0,f3750ea4-5f9e-4ab3-9495-3f182ecff407,f3750ea4-5f9e-4ab3-9495-3f182ecff407,1,0,14002d51-87d4-4647-92ef-a9b1935cb666,14002d51-87d4-4647-92ef-a9b1935cb666,1,0,e941a39d-1f3c-4e6e-af17-75f92a15dd40,e941a39d-1f3c-4e6e-af17-75f92a15dd40,1,0,d9bbedcb-4872-4183-83c2-6c2aae9634b0,d9bbedcb-4872-4183-83c2-6c2aae9634b0,1,0,72c695c3-66f6-4aa8-8a39-737ec6967a1d,72c695c3-66f6-4aa8-8a39-737ec6967a1d,1,0,2beef1e0-7a59-407e-b454-ee2ec38ca4b3,2beef1e0-7a59-407e-b454-ee2ec38ca4b3,1,0,b57a1d6f-8375-4d57-a2c1-f53e25318ddb,b57a1d6f-8375-4d57-a2c1-f53e25318ddb,1,0,d5d11480-d5c7-4569-80c1-f872655ff084,d5d11480-d5c7-4569-80c1-f872655ff084,1,0,b1e45d36-08e9-430e-976b-03e6e3320c6a,b1e45d36-08e9-430e-976b-03e6e3320c6a,1,0,b5384eb7-40e4-4437-b96b-eab9b7b5b8f2,b5384eb7-40e4-4437-b96b-eab9b7b5b8f2,1,0,8e21374f-5a65-406c-856d-2040607da4bc,8e21374f-5a65-406c-856d-2040607da4bc,1,0,7904d64a-2c30-4434-8924-b4817b727db9,7904d64a-2c30-4434-8924-b4817b727db9,1,0,c550a43a-1240-4f29-9045-a262f37f703a,c550a43a-1240-4f29-9045-a262f37f703a,1,0,86b1feed-ed65-4672-a49a-c52282b40be3,86b1feed-ed65-4672-a49a-c52282b40be3,1,0,85ac42d7-400a-4469-8fcd-e6a14f258792,85ac42d7-400a-4469-8fcd-e6a14f258792,1,0,be0fbbfc-5873-41a6-80ef-35ed1b8adb4c,be0fbbfc-5873-41a6-80ef-35ed1b8adb4c,1,0,1b63cbbb-77b1-4e78-a4c7-ddea8ea7294d,1b63cbbb-77b1-4e78-a4c7-ddea8ea7294d,1,0,3e5f5167-8978-4191-b0f6-6a262b848b95,3e5f5167-8978-4191-b0f6-6a262b848b95,1,0,ae3aef9e-df3b-4ebc-912d-2bc581063745,ae3aef9e-df3b-4ebc-912d-2bc581063745,1,0,5c4ecf15-b92d-4610-b2bb-f2331c5c7528,5c4ecf15-b92d-4610-b2bb-f2331c5c7528,1,0,a8c09e65-6e10-4772-b264-6ead83d52fe3,a8c09e65-6e10-4772-b264-6ead83d52fe3,1,0,256618cc-0956-4cda-9691-e4ced68a791f,256618cc-0956-4cda-9691-e4ced68a791f,1,0,e20593fd-b3e3-41d2-8c8d-97b5d6148fa4,e20593fd-b3e3-41d2-8c8d-97b5d6148fa4,1,0,4b9771a7-b924-4e61-8468-4633e3c54706,4b9771a7-b924-4e61-8468-4633e3c54706,1,0,bc846fc8-3c67-45f8-9c5c-69bf1190baf9,bc846fc8-3c67-45f8-9c5c-69bf1190baf9,1,0,667de710-cee5-4a97-8434-641d199f3b68,667de710-cee5-4a97-8434-641d199f3b68,1,0,e9a2320b-71a1-4974-8b5a-1990062ec7df,e9a2320b-71a1-4974-8b5a-1990062ec7df,1,0,2e459a7c-c448-4db4-ae21-e59646527030,2e459a7c-c448-4db4-ae21-e59646527030,1,0,891194d9-9f02-4b22-89cd-941181c83ecb,891194d9-9f02-4b22-89cd-941181c83ecb,1,0,a4d3b738-9ae3-46a9-ac21-7ac3d081c727,a4d3b738-9ae3-46a9-ac21-7ac3d081c727,1,0,f6e85eeb-d81b-4526-9a33-ab77bd447236,f6e85eeb-d81b-4526-9a33-ab77bd447236,1,0,470e37fe-d149-4007-b397-12fc84f93041,470e37fe-d149-4007-b397-12fc84f93041,1,0,f8d9068d-8a4e-4b23-b5ca-5b9ddce1f60f,f8d9068d-8a4e-4b23-b5ca-5b9ddce1f60f,1,0,7175cfa0-885c-4807-98ec-af255dcd55d9,7175cfa0-885c-4807-98ec-af255dcd55d9,1,0,1773ff66-ebe4-46e1-b505-d07d87c7fe3e,1773ff66-ebe4-46e1-b505-d07d87c7fe3e,1,0,f5b66759-8102-4cba-a3fd-ee96db5bc809,f5b66759-8102-4cba-a3fd-ee96db5bc809,1,0,6c205eae-9113-46c1-a245-25d29173646e,6c205eae-9113-46c1-a245-25d29173646e,1,0,4cc4aa90-49fb-4602-9f9c-d4d47d223988,4cc4aa90-49fb-4602-9f9c-d4d47d223988,1,0,af6bccbb-a6cb-41ee-bc4e-f2d6a5e0f419,af6bccbb-a6cb-41ee-bc4e-f2d6a5e0f419,1,0,d08679db-f83f-476e-b8c4-f3f52c3cf6fd,d08679db-f83f-476e-b8c4-f3f52c3cf6fd,1,0,e0227e4b-be22-4614-8980-5d573fae705d,e0227e4b-be22-4614-8980-5d573fae705d,1,0,7a7b7882-a4c1-40c8-a807-cb2d71d054cc,7a7b7882-a4c1-40c8-a807-cb2d71d054cc,1,0,6f36007b-04dc-4007-abf7-e20fbd126b97,6f36007b-04dc-4007-abf7-e20fbd126b97,1,0,66ef1631-277b-4c22-99d7-1434b4dbbb3f,66ef1631-277b-4c22-99d7-1434b4dbbb3f,1,0,aa6444a8-6c17-4207-a623-9b734e08e30e,aa6444a8-6c17-4207-a623-9b734e08e30e,1,0,898535ff-50cd-464a-aadc-5e4f9de15b04,898535ff-50cd-464a-aadc-5e4f9de15b04,1,0,385e209d-65aa-43b1-8591-f92544882740,385e209d-65aa-43b1-8591-f92544882740,1,0,7cfa5a37-b9f8-43e4-ae33-e3a7251dd052,7cfa5a37-b9f8-43e4-ae33-e3a7251dd052,1,0,2f8a5b9d-ab86-492b-85d1-5a28535b2ebc,2f8a5b9d-ab86-492b-85d1-5a28535b2ebc,1,0,737f6f1b-9ffc-4916-b378-7321eab1f886,737f6f1b-9ffc-4916-b378-7321eab1f886,1,0,8381bc76-0e0f-4196-9911-ec05730cb1c9,8381bc76-0e0f-4196-9911-ec05730cb1c9,1,0,01dedf5b-2cce-4d24-81ea-2e3af82f5794,01dedf5b-2cce-4d24-81ea-2e3af82f5794,1,0,771a1900-46be-49fe-a02d-584780de8363,771a1900-46be-49fe-a02d-584780de8363,1,0,f81b1f2d-6fde-4861-8fee-1dbe6acf3985,f81b1f2d-6fde-4861-8fee-1dbe6acf3985,1,0,b62eecf6-6ee3-4a70-a4d6-3f064ae35c43,b62eecf6-6ee3-4a70-a4d6-3f064ae35c43,1,0,9bf2525c-e8fc-44e6-ac14-7df3208dbb0f,9bf2525c-e8fc-44e6-ac14-7df3208dbb0f,1,0,a2faa3f8-5064-4fbf-a90e-26d15c021cd3,a2faa3f8-5064-4fbf-a90e-26d15c021cd3,1,0,527ea8ca-e723-454a-8e9e-f2e7a38e62ee,527ea8ca-e723-454a-8e9e-f2e7a38e62ee,1,0,ef257b20-da10-4cda-8b9d-7de2d68a2f71,ef257b20-da10-4cda-8b9d-7de2d68a2f71,1,0,de0d41b7-acc0-4ebc-8933-d6b5ad351860,de0d41b7-acc0-4ebc-8933-d6b5ad351860,1,0,acd30e63-68dc-4ab2-a6fe-16eb69d09271,acd30e63-68dc-4ab2-a6fe-16eb69d09271,1,0,9ef5dd5e-1f26-4187-90a0-a3ac7aaabc1d,9ef5dd5e-1f26-4187-90a0-a3ac7aaabc1d,1,0,1a354069-07ea-40e0-bbac-e1b6232750c2,1a354069-07ea-40e0-bbac-e1b6232750c2,1,0,df31548b-0b8e-412b-999a-761970ae3c23,df31548b-0b8e-412b-999a-761970ae3c23,1,0,05135747-43e7-4b61-bc30-57b3289ea923,05135747-43e7-4b61-bc30-57b3289ea923,1,0,6d63728d-3384-4131-b890-1b82d14a04b7,6d63728d-3384-4131-b890-1b82d14a04b7,1,0,13b3c973-6be3-4898-89d5-20852cd14e46,13b3c973-6be3-4898-89d5-20852cd14e46,1,0,d978d078-4fd8-40b9-90c2-047cdaf94cba,d978d078-4fd8-40b9-90c2-047cdaf94cba,1,0,f38bb317-8a59-4786-be76-e1d4e534628d,f38bb317-8a59-4786-be76-e1d4e534628d,1,0,f4554046-493e-4960-94df-0a8b9d02f474,f4554046-493e-4960-94df-0a8b9d02f474,1,0,06abad33-2d69-4e8b-a16c-8aa0d4422d5a,06abad33-2d69-4e8b-a16c-8aa0d4422d5a,1,0,9222a6c0-b785-4811-bfb6-44ac44a55925,9222a6c0-b785-4811-bfb6-44ac44a55925,1,0,ea84021d-2431-44ad-a446-f1fb979c9e96,ea84021d-2431-44ad-a446-f1fb979c9e96,1,0,d86acdeb-fa70-4d1c-bd0c-1b4ea30c03dd,d86acdeb-fa70-4d1c-bd0c-1b4ea30c03dd,1,0,8fa21575-177f-4b7c-94b5-dfeefe737cb4,8fa21575-177f-4b7c-94b5-dfeefe737cb4,1,0,6da034af-0481-4a3c-aff9-c50ced6f21d4,6da034af-0481-4a3c-aff9-c50ced6f21d4,1,0,d07016c8-7d97-42cd-865b-85b49075adfb,d07016c8-7d97-42cd-865b-85b49075adfb,1,0,491a2337-1bf9-45c1-8ae6-95605ef41992,491a2337-1bf9-45c1-8ae6-95605ef41992,1,0,c3f2a760-610a-40e0-945b-1f9f6369444d,c3f2a760-610a-40e0-945b-1f9f6369444d,1,0,9202335d-50bb-4282-9438-24c7fb9cf637,9202335d-50bb-4282-9438-24c7fb9cf637,1,0,a62906e5-27f8-4e72-8769-9a3eed6997d7,a62906e5-27f8-4e72-8769-9a3eed6997d7,1,0,6c5d0ac3-6086-434c-812b-1c1158ecc574,6c5d0ac3-6086-434c-812b-1c1158ecc574,1,0,783536d7-c0db-44c9-96e8-58b57804d7c8,783536d7-c0db-44c9-96e8-58b57804d7c8,1,0,a8295435-c2c4-4aff-874b-7412556aa76d,a8295435-c2c4-4aff-874b-7412556aa76d,1,0,f6c4e24b-172b-4ba3-8e3e-988306ade660,f6c4e24b-172b-4ba3-8e3e-988306ade660,1,0,9baab24c-a5a3-46f4-ad17-a28d4a49f851,9baab24c-a5a3-46f4-ad17-a28d4a49f851,1,0,d1952319-0e42-4684-a386-fbe7c24526c2,d1952319-0e42-4684-a386-fbe7c24526c2,1,0,01cd59fc-8577-4b3c-9d69-6db75e81e7c4,01cd59fc-8577-4b3c-9d69-6db75e81e7c4,1,0,83b47a9d-d44b-4c40-becd-df74f9cb2e91,83b47a9d-d44b-4c40-becd-df74f9cb2e91,1,0,d03e636e-ff88-4e96-bf3c-d795d10cbcb0,d03e636e-ff88-4e96-bf3c-d795d10cbcb0,1,0,86e2a2eb-160f-4e93-a449-b2f726286d1b,86e2a2eb-160f-4e93-a449-b2f726286d1b,1,0,8e6e1f24-83bf-42c2-9eda-b3874c7910c3,8e6e1f24-83bf-42c2-9eda-b3874c7910c3,1,0,364184c2-ec71-44be-b40c-ba719b4ab0e1,364184c2-ec71-44be-b40c-ba719b4ab0e1,1,0,7ef46c54-ec0c-4211-a750-e5949956b593,7ef46c54-ec0c-4211-a750-e5949956b593,1,0,04823681-875e-459a-b3cf-051c89527f38,04823681-875e-459a-b3cf-051c89527f38,1,0,8e115a0c-a17c-4d7e-bd2c-305fb53d09ca,8e115a0c-a17c-4d7e-bd2c-305fb53d09ca,1,0,38265f08-3301-40d1-b630-a319c983e826,38265f08-3301-40d1-b630-a319c983e826,1,0,5175c496-bac7-4c57-9628-793b727aecd0,5175c496-bac7-4c57-9628-793b727aecd0,1,0,1453309e-77d0-444d-ac3f-fd7c2cb65c0c,1453309e-77d0-444d-ac3f-fd7c2cb65c0c,1,0,fc42df4a-93f0-461f-acfe-fea09158030f,fc42df4a-93f0-461f-acfe-fea09158030f,1,0,9f0a7909-0b97-48a7-964f-a52cb3c19c4e,9f0a7909-0b97-48a7-964f-a52cb3c19c4e,1,0,6d002aef-00c9-4069-80df-153151218831,6d002aef-00c9-4069-80df-153151218831,1,0,4fec3a6c-5a99-4763-aa07-d5de8712559e,4fec3a6c-5a99-4763-aa07-d5de8712559e,1,0,968a1202-d271-43e0-bfd4-d38e49ceadd4,968a1202-d271-43e0-bfd4-d38e49ceadd4,1,0,c80e2ef7-93b6-4cef-806a-2dfcf2fd80e6,c80e2ef7-93b6-4cef-806a-2dfcf2fd80e6,1,0,b3b4fbf1-cbf0-4ee2-a490-4d657693479b,b3b4fbf1-cbf0-4ee2-a490-4d657693479b,1,0,ea61e442-273e-4ce4-a806-8090893729ba,ea61e442-273e-4ce4-a806-8090893729ba,1,0,aef03c0b-2846-43b7-b382-9a51ec783e85,aef03c0b-2846-43b7-b382-9a51ec783e85,1,0,e7100f2b-d169-4635-ab87-7a2225ff12ee,e7100f2b-d169-4635-ab87-7a2225ff12ee,1,0,1e2d790c-0076-413a-b5fb-f25c01ab6ad5,1e2d790c-0076-413a-b5fb-f25c01ab6ad5,1,0,0dcc537b-76b3-4e73-b060-6cbdcf6345db,0dcc537b-76b3-4e73-b060-6cbdcf6345db,1,0,ae662b53-e11e-4b59-be52-b9d4ab00c4a4,ae662b53-e11e-4b59-be52-b9d4ab00c4a4,1,0,ce55df94-71e4-46ac-9b3b-bdae5d336b0a,ce55df94-71e4-46ac-9b3b-bdae5d336b0a,1,0,7601fa7e-079a-4347-abea-e161b2d00783,7601fa7e-079a-4347-abea-e161b2d00783,1,0,ee84cb40-f82d-4558-91be-229d68ad9f4a,ee84cb40-f82d-4558-91be-229d68ad9f4a,1,0,101a7eff-9556-4165-879a-a7c8a852e236,101a7eff-9556-4165-879a-a7c8a852e236,1,0,01775932-3603-4efc-9235-abdb97490dea,01775932-3603-4efc-9235-abdb97490dea,1,0,7637844b-4059-4f8a-8436-b4f4e8cb4f74,7637844b-4059-4f8a-8436-b4f4e8cb4f74,1,0,b6bb4cbe-b6fa-4d28-b372-0b959951ad4d,b6bb4cbe-b6fa-4d28-b372-0b959951ad4d,1,0,0ee5b788-61dc-464b-86da-f985df7704b6,0ee5b788-61dc-464b-86da-f985df7704b6,1,0,1c2da2ac-e797-11e6-0489-a8667f21fde4,1c2da2ac-e797-11e6-0489-a8667f21fde4,1,0,2375c6a8-9799-4b7c-a48d-091a90c67693,2375c6a8-9799-4b7c-a48d-091a90c67693,1,0,3d3c3360-4502-4ad4-bbe9-35d4ba9b54b3,3d3c3360-4502-4ad4-bbe9-35d4ba9b54b3,1,0,df7892fe-e796-11e6-0489-a8667f21fde4,df7892fe-e796-11e6-0489-a8667f21fde4,1,0,9b0671c6-6e92-42e6-9cf4-13d4be11f27d,9b0671c6-6e92-42e6-9cf4-13d4be11f27d,1,0,63c6522f-be04-422a-b4f4-0f55f58b09a8,63c6522f-be04-422a-b4f4-0f55f58b09a8,1,0,be919dc1-a377-43e1-82e6-ce946cabdd55,be919dc1-a377-43e1-82e6-ce946cabdd55,1,0,6b17a0fc-4d6f-4189-9067-c58a95f04dd7,6b17a0fc-4d6f-4189-9067-c58a95f04dd7,1,0,9ded532e-9e60-4895-a4c5-4ea6697aa83c,9ded532e-9e60-4895-a4c5-4ea6697aa83c,1,0,106c5159-ffc7-4059-b3e3-acf74326a44f,106c5159-ffc7-4059-b3e3-acf74326a44f,1,0,d39fd717-1a69-4fd3-889e-4fa9abefea1c,d39fd717-1a69-4fd3-889e-4fa9abefea1c,1,0,fae8b26c-e796-11e6-0489-a8667f21fde4,fae8b26c-e796-11e6-0489-a8667f21fde4,1,0,5b85e6df-7493-4201-97ad-2aea14de6006,5b85e6df-7493-4201-97ad-2aea14de6006,1,0,061e6c0f-ba52-40ec-96ad-2eba3eee3097,061e6c0f-ba52-40ec-96ad-2eba3eee3097,1,0,d77e3c65-e9fd-4ba7-885f-a8a2f4c827d2,d77e3c65-e9fd-4ba7-885f-a8a2f4c827d2,1,0,4fb86bf3-02ad-4f0e-85a9-98be6c350a06,4fb86bf3-02ad-4f0e-85a9-98be6c350a06,1,0,4840753b-e2e1-4e67-b35f-2f5eab7754f5,4840753b-e2e1-4e67-b35f-2f5eab7754f5,1,0,4095c9e7-83ab-4db9-a2d0-a9f4ef9ee53e,4095c9e7-83ab-4db9-a2d0-a9f4ef9ee53e,1,0,6ffd9c17-d90b-4d19-b337-0fbc2c717557,6ffd9c17-d90b-4d19-b337-0fbc2c717557,1,0,9a11a6bd-0c13-4be2-9e34-b12b7554f3c9,9a11a6bd-0c13-4be2-9e34-b12b7554f3c9,1,0,3bb83275-7a0e-420f-8c6b-028038f11a8c,3bb83275-7a0e-420f-8c6b-028038f11a8c,1,0,e1950a23-f6e7-48af-b78a-77aa61f08ece,e1950a23-f6e7-48af-b78a-77aa61f08ece,1,0,1cc3d7c4-9178-4a40-86ea-2bbc1f5aa69f,1cc3d7c4-9178-4a40-86ea-2bbc1f5aa69f,1,0,790735cf-f6e2-4b0d-bb16-c5b9ea95efae,790735cf-f6e2-4b0d-bb16-c5b9ea95efae,1,0,5d726fa3-bde0-4d97-a577-415857bbb5c1,5d726fa3-bde0-4d97-a577-415857bbb5c1,1,0,f63d0e2d-4685-4ac5-b22c-1b83e3ab955f,f63d0e2d-4685-4ac5-b22c-1b83e3ab955f,1,0,49068231-202c-4ac6-a39a-69207cb597dd,49068231-202c-4ac6-a39a-69207cb597dd,1,0,5a470575-e012-42ad-9ad7-53930a8e843f,5a470575-e012-42ad-9ad7-53930a8e843f,1,0,5872d4ed-6503-422d-bcf9-63a8df3e777d,5872d4ed-6503-422d-bcf9-63a8df3e777d,1,0,e21cda29-2579-485e-a207-20b76f719c80,e21cda29-2579-485e-a207-20b76f719c80,1,0,1b232a57-2833-42c6-b318-38dae2af1ab2,1b232a57-2833-42c6-b318-38dae2af1ab2,1,0,007ade8c-b102-408b-b877-b531e046560b,007ade8c-b102-408b-b877-b531e046560b,1,0,a8dfea6c-0c21-456d-96ab-f4bb5d579b13,a8dfea6c-0c21-456d-96ab-f4bb5d579b13,1,0,305f1ef1-4f9c-40a2-a978-3a4c0ecf75d4,305f1ef1-4f9c-40a2-a978-3a4c0ecf75d4,1,0,eb69c41a-392d-43bb-9b67-a0adcb651b1e,eb69c41a-392d-43bb-9b67-a0adcb651b1e,1,0,93b01c88-48a2-4753-b443-0e9892395a8f,93b01c88-48a2-4753-b443-0e9892395a8f,1,0,0b7f8e05-bb34-47cc-9775-04362e814316,0b7f8e05-bb34-47cc-9775-04362e814316,1,0,e71e0297-3709-4247-933e-18a6350cbf39,e71e0297-3709-4247-933e-18a6350cbf39,1,0,0b32e372-c6ad-4dda-acd1-8b5d58537d37,0b32e372-c6ad-4dda-acd1-8b5d58537d37,1,0,602dac6f-abe6-407a-92d3-7f1613e5dda6,602dac6f-abe6-407a-92d3-7f1613e5dda6,1,0,db03a88b-2804-45c2-9089-7ddb87ef2f18,db03a88b-2804-45c2-9089-7ddb87ef2f18,1,0,df6417d1-c722-4a87-a543-5d2c31795b20,df6417d1-c722-4a87-a543-5d2c31795b20,1,0,526a85c9-3a8d-4044-adb9-fd0689c70601,526a85c9-3a8d-4044-adb9-fd0689c70601,1,0,c4203772-580c-4db1-9bde-8925faa90688,c4203772-580c-4db1-9bde-8925faa90688,1,0,f64a91c4-f5cb-4e8e-8387-9f242ce6de44,f64a91c4-f5cb-4e8e-8387-9f242ce6de44,1,0,dc024d33-1715-40da-9c00-443d25a31ebc,dc024d33-1715-40da-9c00-443d25a31ebc,1,0,f8f585d1-01a0-4892-8852-c692ffaa1344,f8f585d1-01a0-4892-8852-c692ffaa1344,1,0,35c237a7-71e1-415c-809d-e99babee4e0e,35c237a7-71e1-415c-809d-e99babee4e0e,1,0,9ab0fe18-4dd7-4eed-958d-8537d4896d84,9ab0fe18-4dd7-4eed-958d-8537d4896d84,1,0,2278dc46-46ce-4d00-9289-4de1640782d7,2278dc46-46ce-4d00-9289-4de1640782d7,1,0,1f983a04-c2df-40bb-bee2-b326474d89f8,1f983a04-c2df-40bb-bee2-b326474d89f8,1,0,f03f1b68-e924-4c06-b0aa-8033a9a2f592,f03f1b68-e924-4c06-b0aa-8033a9a2f592,1,0,5e453d10-235d-4e53-86b1-20eed3247992,5e453d10-235d-4e53-86b1-20eed3247992,1,0,0eefb856-0fb4-4c3e-bb08-e88b03a44065,0eefb856-0fb4-4c3e-bb08-e88b03a44065,1,0,21ba8b9f-de97-40a1-8ea1-85a29e8e53ef,21ba8b9f-de97-40a1-8ea1-85a29e8e53ef,1,0,738228ad-c30a-42f4-a6ad-bde0edba6266,738228ad-c30a-42f4-a6ad-bde0edba6266,1,0,c08aea99-ee33-488c-9ba0-f8b24a6d1d04,c08aea99-ee33-488c-9ba0-f8b24a6d1d04,1,0,df8e8344-d7bc-4cf2-b498-88d3abb66c09,df8e8344-d7bc-4cf2-b498-88d3abb66c09,1,0,e6d13536-3021-45b2-a8e1-bdb0e0be850c,e6d13536-3021-45b2-a8e1-bdb0e0be850c,1,0,b49f538c-b2b2-4a1f-a6b4-a911033b1666,b49f538c-b2b2-4a1f-a6b4-a911033b1666,1,0,794e952b-6b03-4a1e-ad3f-453376bccf45,794e952b-6b03-4a1e-ad3f-453376bccf45,1,0,3e2a0713-e6ed-4d38-8036-72f7b62ca64a,3e2a0713-e6ed-4d38-8036-72f7b62ca64a,1,0,5cd997ba-f123-47b3-8cde-fbba45a4a11c,5cd997ba-f123-47b3-8cde-fbba45a4a11c,1,0,0d746247-c4f4-47a5-a373-45ec4023d3ef,0d746247-c4f4-47a5-a373-45ec4023d3ef,1,0,a25bcf4e-1a47-472b-9f93-f6ab45abf461,a25bcf4e-1a47-472b-9f93-f6ab45abf461,1,0,958b7dab-0aba-423f-ab81-b70f2b93a027,958b7dab-0aba-423f-ab81-b70f2b93a027,1,0,a17ec3be-2255-42af-a6ee-d3fb8bb00519,a17ec3be-2255-42af-a6ee-d3fb8bb00519,1,0,add0b22d-ff5a-41f7-88a1-ef34880e50c9,add0b22d-ff5a-41f7-88a1-ef34880e50c9,1,0,f660bf92-7de1-4a22-9cea-777069e4679d,f660bf92-7de1-4a22-9cea-777069e4679d,1,0,54f3fbe7-ac93-44f6-ba6e-37cb99f3569c,54f3fbe7-ac93-44f6-ba6e-37cb99f3569c,1,0,20feb794-eb05-46a6-90e7-ca4e2376d7b2,20feb794-eb05-46a6-90e7-ca4e2376d7b2,1,0,c73da415-6fc3-449a-a784-b25aed54eccd,c73da415-6fc3-449a-a784-b25aed54eccd,1,0,8deb4f57-18fc-4db0-ad0f-82d60af3d80b,8deb4f57-18fc-4db0-ad0f-82d60af3d80b,1,0,2f484aa4-452a-46af-a707-a5a6917bc0db,2f484aa4-452a-46af-a707-a5a6917bc0db,1,0,fd6ff934-6f11-4182-b0cb-6926902d33c0,fd6ff934-6f11-4182-b0cb-6926902d33c0,1,0,315af891-2075-4833-a404-6c0f2004ee53,315af891-2075-4833-a404-6c0f2004ee53,1,0,5725db77-bfbf-4d85-9565-163b309a53ee,5725db77-bfbf-4d85-9565-163b309a53ee,1,0,99a7142c-b3c7-4221-abf8-6831a3cbc16e,99a7142c-b3c7-4221-abf8-6831a3cbc16e,1,0,d367a1a1-5a54-4bf9-96c7-d55667e2fb16,d367a1a1-5a54-4bf9-96c7-d55667e2fb16,1,0,2e09abe1-0934-42ae-970f-5e001c35c31a,2e09abe1-0934-42ae-970f-5e001c35c31a,1,0,587d48a3-5627-4481-b13e-c22740b57d8a,587d48a3-5627-4481-b13e-c22740b57d8a,1,0,1f3e3089-1e04-4147-8ece-aa96a76467dd,1f3e3089-1e04-4147-8ece-aa96a76467dd,1,0,22a213b5-ed72-4181-8ff8-89f860c87aa1,22a213b5-ed72-4181-8ff8-89f860c87aa1,1,0,4c56cbff-653e-4f16-b702-c77190d7eb7f,4c56cbff-653e-4f16-b702-c77190d7eb7f,1,0,172ff335-c7ae-4905-b705-2a1475b95713,172ff335-c7ae-4905-b705-2a1475b95713,1,0,db4c311d-ee62-4d47-ac31-5a20cadb7ed1,db4c311d-ee62-4d47-ac31-5a20cadb7ed1,1,0,cf896f41-7cea-4083-a9f8-96ad881ce641,cf896f41-7cea-4083-a9f8-96ad881ce641,1,0,1d852dc0-90c9-4568-84f9-b1d822573b6b,1d852dc0-90c9-4568-84f9-b1d822573b6b,1,0,24f85dbd-59be-4b8d-bea8-7ff8ddb7486a,24f85dbd-59be-4b8d-bea8-7ff8ddb7486a,1,0,c997f56c-ef9c-434e-bc4e-7fc5f885aaba,c997f56c-ef9c-434e-bc4e-7fc5f885aaba,1,0,37c8f5e1-3513-47f8-896d-a54d11b83dcd,37c8f5e1-3513-47f8-896d-a54d11b83dcd,1,0,9e07733c-39f0-491b-91e1-bf2782d957dd,9e07733c-39f0-491b-91e1-bf2782d957dd,1,0,cc584a1d-dc91-4693-a5c9-6e8c6607e9d8,cc584a1d-dc91-4693-a5c9-6e8c6607e9d8,1,0,5902d979-1235-4d5a-ace7-93261bdeb725,5902d979-1235-4d5a-ace7-93261bdeb725,1,0,5a090286-7969-44c9-815b-fc58aeb5d8d3,5a090286-7969-44c9-815b-fc58aeb5d8d3,1,0,8e87cf35-af54-4fa2-9428-460b765b282b,8e87cf35-af54-4fa2-9428-460b765b282b,1,0,73380bb1-bee3-4b73-a3df-1dbea99011d2,73380bb1-bee3-4b73-a3df-1dbea99011d2,1,0,8be29533-38de-413d-b420-7dac2e80af6c,8be29533-38de-413d-b420-7dac2e80af6c,1,0,82a77018-8e38-41dd-9d1f-3130bc29a707,82a77018-8e38-41dd-9d1f-3130bc29a707,1,0,4d75aaef-532e-4ed3-8153-083f04f05cc1,4d75aaef-532e-4ed3-8153-083f04f05cc1,1,0,3854a0ba-e156-4ba3-a301-b1a41ac386c4,3854a0ba-e156-4ba3-a301-b1a41ac386c4,1,0,f8136f59-ef0c-4c0f-8207-f7a4000e4f0c,f8136f59-ef0c-4c0f-8207-f7a4000e4f0c,1,0,c2321963-cd86-45ec-b323-3fdb5932da3a,c2321963-cd86-45ec-b323-3fdb5932da3a,1,0,d5af38bf-6261-4177-8f74-998a85f0ef39,d5af38bf-6261-4177-8f74-998a85f0ef39,1,0,42bbd9f7-ef72-440f-9eb1-fcb3bdc1d91e,42bbd9f7-ef72-440f-9eb1-fcb3bdc1d91e,1,0,4b714d9c-26f4-46e8-ac79-471522b3853b,4b714d9c-26f4-46e8-ac79-471522b3853b,1,0,411489de-f907-4d60-a776-64bb0aa12a0e,411489de-f907-4d60-a776-64bb0aa12a0e,1,0,58d9ba60-a0c7-405d-a76e-0b0a796daaf3,58d9ba60-a0c7-405d-a76e-0b0a796daaf3,1,0,9c47670e-9eb9-49ec-876c-cd545aaa093c,9c47670e-9eb9-49ec-876c-cd545aaa093c,1,0,f57e74e6-75e8-4136-911e-86793036a077,f57e74e6-75e8-4136-911e-86793036a077,1,0,8492ee20-3f15-45d8-b70d-19b5cd6f1ae3,8492ee20-3f15-45d8-b70d-19b5cd6f1ae3,1,0,3ba8c378-ef3d-4646-90b3-6d8078aa623e,3ba8c378-ef3d-4646-90b3-6d8078aa623e,1,0,b96b2e45-8fb3-4d48-ab53-d3bbf6ef0284,b96b2e45-8fb3-4d48-ab53-d3bbf6ef0284,1,0,5ac38b5a-92e5-47eb-b956-24d9f010cb9f,5ac38b5a-92e5-47eb-b956-24d9f010cb9f,1,0,d61ca454-505b-4fd6-be15-d7ed948a5ff6,d61ca454-505b-4fd6-be15-d7ed948a5ff6,1,0,2dd7eb87-8130-425a-be13-85235508cde6,2dd7eb87-8130-425a-be13-85235508cde6,1,0,8a62c997-4fda-4464-90bd-ab719161949f,8a62c997-4fda-4464-90bd-ab719161949f,1,0,28af52dd-3144-428b-956d-b6f27863ec4a,28af52dd-3144-428b-956d-b6f27863ec4a,1,0,8ac94328-2300-4681-9c35-fd7e2f830310,8ac94328-2300-4681-9c35-fd7e2f830310,1,0,da0ee165-1917-466b-ac5c-16c28e2318bb,da0ee165-1917-466b-ac5c-16c28e2318bb,1,0,4868cb2e-0892-42bc-9de1-73cb8a15a96f,4868cb2e-0892-42bc-9de1-73cb8a15a96f,1,0,e8b80879-33b3-4c45-ad68-1acabcf91faf,e8b80879-33b3-4c45-ad68-1acabcf91faf,1,0,4a87fafc-7ca7-478e-bb31-358c2b85fa92,4a87fafc-7ca7-478e-bb31-358c2b85fa92,1,0,239601eb-e8de-4d58-a32a-01ee52f6e698,239601eb-e8de-4d58-a32a-01ee52f6e698,1,0,11370667-bec5-4a2d-8aa1-97f4d795718f,11370667-bec5-4a2d-8aa1-97f4d795718f,1,0,2032162d-fbb5-4e6a-be72-cda79869b9ff,2032162d-fbb5-4e6a-be72-cda79869b9ff,1,0,95a8e790-25ef-4ef3-a44a-f150bf1ceb1f,95a8e790-25ef-4ef3-a44a-f150bf1ceb1f,1,0,10543f9a-4e3f-427a-b36a-9c66709dd6fb,10543f9a-4e3f-427a-b36a-9c66709dd6fb,1,0,973967e5-1702-4fb8-ba36-70fd5b3b7e7c,973967e5-1702-4fb8-ba36-70fd5b3b7e7c,1,0,96ab5424-7be1-416d-b74d-d0c815726b1f,96ab5424-7be1-416d-b74d-d0c815726b1f,1,0,3714e794-ddef-4ad9-a933-6130bbc84545,3714e794-ddef-4ad9-a933-6130bbc84545,1,0,282b089c-7411-40d6-9a0a-ceaf6abb5586,282b089c-7411-40d6-9a0a-ceaf6abb5586,1,0,678188aa-76e7-49bc-a4be-1c55ccd625b1,678188aa-76e7-49bc-a4be-1c55ccd625b1,1,0,6c27eece-2f8e-48eb-b9c7-f9c414ee15bd,6c27eece-2f8e-48eb-b9c7-f9c414ee15bd,1,0,b3415b4a-d8de-4536-aa4b-82e75fd986ee,b3415b4a-d8de-4536-aa4b-82e75fd986ee,1,0,acc996ab-672a-4602-b7ad-8eee83557e61,acc996ab-672a-4602-b7ad-8eee83557e61,1,0,bf9e9c2f-e5dc-4f82-8e9a-7f35e3ad9a0b,bf9e9c2f-e5dc-4f82-8e9a-7f35e3ad9a0b,1,0,371361b6-15fd-4e62-9f60-cc8ee3fbacf0,371361b6-15fd-4e62-9f60-cc8ee3fbacf0,1,0,97745768-ed35-44f1-beba-abb8b28a29ae,97745768-ed35-44f1-beba-abb8b28a29ae,1,0,69364942-bcd1-4b06-9b57-fa59b4e7c552,69364942-bcd1-4b06-9b57-fa59b4e7c552,1,0,ab201c5f-4134-42cf-a528-c1c4df02f2d7,ab201c5f-4134-42cf-a528-c1c4df02f2d7,1,0,303fb7b5-6a23-40ea-ae12-b54f4ebae026,303fb7b5-6a23-40ea-ae12-b54f4ebae026,1,0,634cd26b-78f1-4446-8aad-b96ed16e5329,634cd26b-78f1-4446-8aad-b96ed16e5329,1,0,d8e62f1a-92ca-4971-9609-e79da798c083,d8e62f1a-92ca-4971-9609-e79da798c083,1,0,61892a62-9381-401d-af31-9073ef2509fb,61892a62-9381-401d-af31-9073ef2509fb,1,0,eb74ebf0-a9c6-4c4c-b279-5a46f40ea0d3,eb74ebf0-a9c6-4c4c-b279-5a46f40ea0d3,1,0,d5e1806b-9827-40ab-9cfa-23c22456d137,d5e1806b-9827-40ab-9cfa-23c22456d137,1,0,b57b186a-ec1e-46a2-87ae-6ba27793ebf6,b57b186a-ec1e-46a2-87ae-6ba27793ebf6,1,0,d24170d7-5477-4ec8-acd2-0de8bd2067d6,d24170d7-5477-4ec8-acd2-0de8bd2067d6,1,0,f047da82-7574-4da4-b54e-480195280a11,f047da82-7574-4da4-b54e-480195280a11,1,0,a469f018-da26-485f-87c3-f580321a34f0,a469f018-da26-485f-87c3-f580321a34f0,1,0,adcb0dca-d810-461e-8f45-1d3cd6ffad4d,adcb0dca-d810-461e-8f45-1d3cd6ffad4d,1,0,9e16edb6-d841-48fa-bfe1-f9aabdcf9e46,9e16edb6-d841-48fa-bfe1-f9aabdcf9e46,1,0,628de771-c19c-4474-989f-8fb6cd7756a2,628de771-c19c-4474-989f-8fb6cd7756a2,1,0,6b0ddefa-ee70-4b27-989f-e23c734ab943,6b0ddefa-ee70-4b27-989f-e23c734ab943,1,0,ee873280-28ea-41fb-af52-c10c2018cbe4,ee873280-28ea-41fb-af52-c10c2018cbe4,1,0,6789e57b-1293-442c-97d0-b8007367602e,6789e57b-1293-442c-97d0-b8007367602e,1,0,0f193c89-b664-448e-bed3-2147430367f7,0f193c89-b664-448e-bed3-2147430367f7,1,0,4c9b2506-75a8-47d3-a5d5-d946088ba14a,4c9b2506-75a8-47d3-a5d5-d946088ba14a,1,0,36eacaa1-2efd-49c0-82de-2f8972535bf2,36eacaa1-2efd-49c0-82de-2f8972535bf2,1,0,c35a643d-fe3a-4293-93c0-074fa68a31e3,c35a643d-fe3a-4293-93c0-074fa68a31e3,1,0,9f7b9fd8-4bdd-4492-abf7-09b3f7f23e16,9f7b9fd8-4bdd-4492-abf7-09b3f7f23e16,1,0,72ee9a03-a320-4e60-be04-0ee813ea567f,72ee9a03-a320-4e60-be04-0ee813ea567f,1,0,f6f52cc8-23a3-4402-b1eb-0e41584c802a,f6f52cc8-23a3-4402-b1eb-0e41584c802a,1,0,8398e065-8b4b-4901-b057-2a048776bafe,8398e065-8b4b-4901-b057-2a048776bafe,1,0,073c56ca-bf45-422d-957a-f9c57aeee4d0,073c56ca-bf45-422d-957a-f9c57aeee4d0,1,0,d73e084f-9201-40c8-8ad4-f61b6cbb47c9,d73e084f-9201-40c8-8ad4-f61b6cbb47c9,1,0,68598d98-0c59-4cda-b0b2-6901d3aff88b,68598d98-0c59-4cda-b0b2-6901d3aff88b,1,0,219c1375-f26e-4698-aa82-4b9d735df783,219c1375-f26e-4698-aa82-4b9d735df783,1,0,ff5121c1-7f11-48cd-a9df-3588cf9f6d21,ff5121c1-7f11-48cd-a9df-3588cf9f6d21,1,0,32012b27-1b43-49be-b9af-df0c877e7a4c,32012b27-1b43-49be-b9af-df0c877e7a4c,1,0,e97d5152-9e58-4a91-a691-b4d358f1c89d,e97d5152-9e58-4a91-a691-b4d358f1c89d,1,0,1de4d7ee-7ddd-44db-bf7f-1b99b653652c,1de4d7ee-7ddd-44db-bf7f-1b99b653652c,1,0,dfe624ac-9f49-46dd-b821-1f1f5b5e0d15,dfe624ac-9f49-46dd-b821-1f1f5b5e0d15,1,0,296c478b-4103-46cb-9d14-97f59034ffd4,296c478b-4103-46cb-9d14-97f59034ffd4,1,0,fb918a68-f86d-46c0-9078-61d2b32b5aef,fb918a68-f86d-46c0-9078-61d2b32b5aef,1,0,9ca4d0c4-f5d3-4748-bf73-f3cd1bc4ac46,9ca4d0c4-f5d3-4748-bf73-f3cd1bc4ac46,1,0,1ddfc773-4f3c-4764-978e-585aab4666de,1ddfc773-4f3c-4764-978e-585aab4666de,1,0,e424d122-1dbb-4545-975c-177997129f2e,e424d122-1dbb-4545-975c-177997129f2e,1,0,c83bc626-dfdd-4451-92b0-b53eed40f534,c83bc626-dfdd-4451-92b0-b53eed40f534,1,0,7b9b1d11-4f78-4113-8fca-1a3a30953aef,7b9b1d11-4f78-4113-8fca-1a3a30953aef,1,0,7f84cb85-c3e4-4b53-b829-3b1e216f978a,7f84cb85-c3e4-4b53-b829-3b1e216f978a,1,0,7e621ecc-7d2b-42bf-a502-f8e59de56b63,7e621ecc-7d2b-42bf-a502-f8e59de56b63,1,0,798fd445-d02e-4e97-890a-0283f33317cf,798fd445-d02e-4e97-890a-0283f33317cf,1,0,095583ca-010d-43ad-8c7a-8938fa4cb761,095583ca-010d-43ad-8c7a-8938fa4cb761,1,0,178d210c-e847-4805-a8d4-31acdf4983af,178d210c-e847-4805-a8d4-31acdf4983af,1,0,aa214d9f-23b1-4996-8a43-9010dceeb53d,aa214d9f-23b1-4996-8a43-9010dceeb53d,1,0,26a5527e-dc2b-45a4-a51c-b1dfb31fa8a2,26a5527e-dc2b-45a4-a51c-b1dfb31fa8a2,1,0,aefc3149-90ee-4ccc-8fb6-b1f6096237f6,aefc3149-90ee-4ccc-8fb6-b1f6096237f6,1,0,d9d103bd-1dd6-48a9-8869-6c8485705393,d9d103bd-1dd6-48a9-8869-6c8485705393,1,0,cf2f7e1f-9b0b-4ae9-9c94-99d80bf95eae,cf2f7e1f-9b0b-4ae9-9c94-99d80bf95eae,1,0,ff0e8487-bdbf-4b21-877e-00008c81bc09,ff0e8487-bdbf-4b21-877e-00008c81bc09,1,0,39c9f8ac-56a0-4057-8359-7228bf97184a,39c9f8ac-56a0-4057-8359-7228bf97184a,1,0,763fbb4c-cab2-4c71-ba16-7e2ce8c3dc97,763fbb4c-cab2-4c71-ba16-7e2ce8c3dc97,1,0,2c0dd892-1d3e-4497-850b-080bdb9c59d8,2c0dd892-1d3e-4497-850b-080bdb9c59d8,1,0,3b727d49-c9ed-4d9e-af61-c13b9a170c75,3b727d49-c9ed-4d9e-af61-c13b9a170c75,1,0,1b264744-bdcd-4c5c-932b-0ac4b990dd78,1b264744-bdcd-4c5c-932b-0ac4b990dd78,1,0,a2dbf20e-1fe9-463d-8fd4-76ce2e4854d1,a2dbf20e-1fe9-463d-8fd4-76ce2e4854d1,1,0,37bde288-8e02-4127-bd80-de8ae7590a14,37bde288-8e02-4127-bd80-de8ae7590a14,1,0,a9b8e517-78cd-4428-b2fc-9e16af0069d7,a9b8e517-78cd-4428-b2fc-9e16af0069d7,1,0,5c592024-c009-4674-bbb8-283669e673ef,5c592024-c009-4674-bbb8-283669e673ef,1,0,e76f16b9-77a0-4033-90d0-6e04e4494747,e76f16b9-77a0-4033-90d0-6e04e4494747,1,0,cfb221fc-8639-4e15-9a78-f7837d657a99,cfb221fc-8639-4e15-9a78-f7837d657a99,1,0,4e61c8c3-756e-4937-adf6-6a1e9a89fc6a,4e61c8c3-756e-4937-adf6-6a1e9a89fc6a,1,0,022147c1-1ebe-4c8d-b367-4c47115b101d,022147c1-1ebe-4c8d-b367-4c47115b101d,1,0,2975d4c8-90d8-4791-8bc2-4adaa328ddc0,2975d4c8-90d8-4791-8bc2-4adaa328ddc0,1,0,fca6b230-a38e-4791-9cc5-3d215f79dc6f,fca6b230-a38e-4791-9cc5-3d215f79dc6f,1,0,04e87de4-940a-4533-8c81-8f145b201dc0,04e87de4-940a-4533-8c81-8f145b201dc0,1,0,573ef4f4-e9e6-4b7c-944d-30808a6a00b7,573ef4f4-e9e6-4b7c-944d-30808a6a00b7,1,0,fa488af9-a5ec-47d8-8661-fa5058a60a6b,fa488af9-a5ec-47d8-8661-fa5058a60a6b,1,0,97cc84c6-3565-474c-a028-83acb5390446,97cc84c6-3565-474c-a028-83acb5390446,1,0,9bf07c3e-7fdf-4a4f-ab00-98c7668349bd,9bf07c3e-7fdf-4a4f-ab00-98c7668349bd,1,0,ebbf6957-6ff6-4dc2-9e20-23d1da091f05,ebbf6957-6ff6-4dc2-9e20-23d1da091f05,1,0,9b80acf6-6bf0-42c4-abb3-2fa2fcf4088c,9b80acf6-6bf0-42c4-abb3-2fa2fcf4088c,1,0,1dcec107-9d5f-4b69-ad65-cc4cb1f27a9c,1dcec107-9d5f-4b69-ad65-cc4cb1f27a9c,1,0,b366d7eb-626c-4c0c-b4cc-c392763e6e94,b366d7eb-626c-4c0c-b4cc-c392763e6e94,1,0,4c7e24aa-726a-4595-82ad-ef1e525b14fa,4c7e24aa-726a-4595-82ad-ef1e525b14fa,1,0,aed2ceeb-cc0f-4bdc-bb94-2e15cd68aa96,aed2ceeb-cc0f-4bdc-bb94-2e15cd68aa96,1,0,04b5ae71-7fa4-4a64-b406-59dc603b80c5,04b5ae71-7fa4-4a64-b406-59dc603b80c5,1,0,f23a2023-f776-40db-8689-1fc3f7ebc482,f23a2023-f776-40db-8689-1fc3f7ebc482,1,0,1e7684f0-1b3b-4a32-8602-dd0672c5a800,1e7684f0-1b3b-4a32-8602-dd0672c5a800,1,0,ab178a93-8570-43b6-ae42-f34a7cc4f359,ab178a93-8570-43b6-ae42-f34a7cc4f359,1,0,4c82f31d-7a98-47dd-89dc-1846cb15bf3b,4c82f31d-7a98-47dd-89dc-1846cb15bf3b,1,0,168e3189-2676-4cdb-bc9d-78d85df51faf,168e3189-2676-4cdb-bc9d-78d85df51faf,1,0,ecf1a87f-4ca4-4efb-a84c-b2db1b0e8829,ecf1a87f-4ca4-4efb-a84c-b2db1b0e8829,1,0,470bbff8-20d0-475c-a61a-1a09ac14c2db,470bbff8-20d0-475c-a61a-1a09ac14c2db,1,0,6ea25680-c4db-4717-9498-62420ca16970,6ea25680-c4db-4717-9498-62420ca16970,1,0,14e20d48-635e-4c52-9099-e743323fc190,14e20d48-635e-4c52-9099-e743323fc190,1,0,c37a660e-16c5-495e-9486-e61bcb693fa0,c37a660e-16c5-495e-9486-e61bcb693fa0,1,0,8f44ebad-1160-474e-a566-fb9da55ffcba,8f44ebad-1160-474e-a566-fb9da55ffcba,1,0,11cf336e-7890-4972-bf71-32d7416ff647,11cf336e-7890-4972-bf71-32d7416ff647,1,0,4c4d61a6-6bb6-4a15-9a81-25fdcf96ec4b,4c4d61a6-6bb6-4a15-9a81-25fdcf96ec4b,1,0,14bd3392-36cd-4ed0-8847-44375d6fb861,14bd3392-36cd-4ed0-8847-44375d6fb861,1,0,759ede7a-e832-44e6-9b11-5bfb3c507820,759ede7a-e832-44e6-9b11-5bfb3c507820,1,0,64484611-b32c-4155-a063-7df5a3f924dd,64484611-b32c-4155-a063-7df5a3f924dd,1,0,2f2ac0db-db86-4ed2-a55a-b245b4d00d70,2f2ac0db-db86-4ed2-a55a-b245b4d00d70,1,0,821b93bd-f0dd-4468-972a-d9b2b4de72f1,821b93bd-f0dd-4468-972a-d9b2b4de72f1,1,0,56900066-90e3-40c0-b64a-8f7964a4dfc1,56900066-90e3-40c0-b64a-8f7964a4dfc1,1,0,56f0c4d6-9b13-486a-9586-05e657dca8be,56f0c4d6-9b13-486a-9586-05e657dca8be,1,0,c795c0d3-6a0d-4311-9821-df320663727e,c795c0d3-6a0d-4311-9821-df320663727e,1,0,512b8d89-8798-4549-9e79-b9c3f7d9098f,512b8d89-8798-4549-9e79-b9c3f7d9098f,1,0,e1fe71f8-f37c-4705-aca1-c25e2bdc5db6,e1fe71f8-f37c-4705-aca1-c25e2bdc5db6,1,0,7f356abf-9045-4a76-89f3-8b52d467122a,7f356abf-9045-4a76-89f3-8b52d467122a,1,0,625a61ac-4ad0-4b31-aa67-9f864154b9c4,625a61ac-4ad0-4b31-aa67-9f864154b9c4,1,0,51fa8d01-44a1-4e75-9b04-6a2504972f08,51fa8d01-44a1-4e75-9b04-6a2504972f08,1,0,73dae482-a1ee-4c57-8859-2dd8e8635a49,73dae482-a1ee-4c57-8859-2dd8e8635a49,1,0,e4ea640f-e3a4-44ad-b17d-51f32136372e,e4ea640f-e3a4-44ad-b17d-51f32136372e,1,0,7dca913d-e37a-4740-8e3d-677d379605ee,7dca913d-e37a-4740-8e3d-677d379605ee,1,0,bd1cf7ef-f3e2-4441-836b-16f2cc227aa9,bd1cf7ef-f3e2-4441-836b-16f2cc227aa9,1,0,e62e60ea-9f0c-4a7e-869f-4639f31f826c,e62e60ea-9f0c-4a7e-869f-4639f31f826c,1,0,c9035b0f-cfc4-4761-9ba0-a8aacfaa9c72,c9035b0f-cfc4-4761-9ba0-a8aacfaa9c72,1,0,7efb0bf4-d40c-417b-b9bc-f4a5af66ec09,7efb0bf4-d40c-417b-b9bc-f4a5af66ec09,1,0,4cd4694f-17f8-43ba-8940-07628bd937fe,4cd4694f-17f8-43ba-8940-07628bd937fe,1,0,9b9e81f9-e23f-4c77-bf6f-edbce8ebabfa,9b9e81f9-e23f-4c77-bf6f-edbce8ebabfa,1,0,fb5e93bb-e1ff-47a6-a362-ea94e6cbac65,fb5e93bb-e1ff-47a6-a362-ea94e6cbac65,1,0,7df6c94b-3cfe-4764-988e-858d733e35d9,7df6c94b-3cfe-4764-988e-858d733e35d9,1,0,8b251c7d-2d55-4734-a1da-7f1115d95080,8b251c7d-2d55-4734-a1da-7f1115d95080,1,0,87b3153d-bef0-4441-8b1c-a5fc7ba4c36a,87b3153d-bef0-4441-8b1c-a5fc7ba4c36a,1,0,5a8c3621-595a-4168-8bba-a7f8d499e47e,5a8c3621-595a-4168-8bba-a7f8d499e47e,1,0,fc4cfed6-e492-4420-b357-8143a8c2a41a,fc4cfed6-e492-4420-b357-8143a8c2a41a,1,0,4311a250-64af-443e-a711-93b7c41175cf,4311a250-64af-443e-a711-93b7c41175cf,1,0,804b6c57-1d7b-4927-be5b-84b7959fe55e,804b6c57-1d7b-4927-be5b-84b7959fe55e,1,0,f2655d85-79ea-4736-8f41-94a4f9b2b998,f2655d85-79ea-4736-8f41-94a4f9b2b998,1,0,21258174-3a95-4c10-bb8f-4d6db0c5ae0e,21258174-3a95-4c10-bb8f-4d6db0c5ae0e,1,0,a8eb5ed9-df99-405b-afad-eeaa98956eee,a8eb5ed9-df99-405b-afad-eeaa98956eee,1,0,a64d4b1b-fae4-43ae-ae98-bdc4e59a94c1,a64d4b1b-fae4-43ae-ae98-bdc4e59a94c1,1,0,26a1279f-91f0-4632-ad7c-21cf2f524208,26a1279f-91f0-4632-ad7c-21cf2f524208,1,0,bf751ed0-ee47-4eaf-81bd-f0da00bef343,bf751ed0-ee47-4eaf-81bd-f0da00bef343,1,0,14b65111-4c0e-4521-9fcd-2a8d4aaa6b4b,14b65111-4c0e-4521-9fcd-2a8d4aaa6b4b,1,0,1f1def7c-e0ee-4963-afea-1751bf1b812c,1f1def7c-e0ee-4963-afea-1751bf1b812c,1,0,9a4c0898-ab56-425c-8191-5ab90f4e12bf,9a4c0898-ab56-425c-8191-5ab90f4e12bf,1,0,6841ec47-7a84-441a-b975-69d089072ce7,6841ec47-7a84-441a-b975-69d089072ce7,1,0,ead4001a-0d8a-4b95-8212-2a40e5aa6659,ead4001a-0d8a-4b95-8212-2a40e5aa6659,1,0,22165c8a-2179-4cd5-b195-bd2721e9e232,22165c8a-2179-4cd5-b195-bd2721e9e232,1,0,b28c3a8f-8cad-45eb-90d3-6d90a0b3f881,b28c3a8f-8cad-45eb-90d3-6d90a0b3f881,1,0,3c5974ec-f76d-401c-a8e4-d51c7cd4c4fb,3c5974ec-f76d-401c-a8e4-d51c7cd4c4fb,1,0,609a9bc9-4225-4fe1-91fa-90c9c2e5cfba,609a9bc9-4225-4fe1-91fa-90c9c2e5cfba,1,0,d22ed498-c7df-45bb-869f-f16d3aa2d3d3,d22ed498-c7df-45bb-869f-f16d3aa2d3d3,1,0,4a966f6e-87dd-4dae-9cc0-dbabee9424dc,4a966f6e-87dd-4dae-9cc0-dbabee9424dc,1,0,9d9debfd-4a10-4f09-9d09-2aa5e058b525,9d9debfd-4a10-4f09-9d09-2aa5e058b525,1,0,fc19586c-d89c-495c-b473-6f85967ed48e,fc19586c-d89c-495c-b473-6f85967ed48e,1,0,2ac7c701-a281-4e77-a5f8-294526021e2d,2ac7c701-a281-4e77-a5f8-294526021e2d,1,0,979df549-889d-496a-b6ce-c56d54c771b5,979df549-889d-496a-b6ce-c56d54c771b5,1,0,91b320d8-3426-44d3-97d7-c200287d7343,91b320d8-3426-44d3-97d7-c200287d7343,1,0,b9297f72-b40a-4adb-9975-bb693d4834a4,b9297f72-b40a-4adb-9975-bb693d4834a4,1,0,41cf3916-216f-4c4e-a587-82777f4263e0,41cf3916-216f-4c4e-a587-82777f4263e0,1,0,2ce3a350-86f1-4275-8299-3c3693ca11fa,2ce3a350-86f1-4275-8299-3c3693ca11fa,1,0,59f0ed15-c84c-4f41-bdd4-26317e4e914d,59f0ed15-c84c-4f41-bdd4-26317e4e914d,1,0,4b5ff142-47b8-4548-b6f9-56ebcbd40e35,4b5ff142-47b8-4548-b6f9-56ebcbd40e35,1,0,8fef790c-a3f4-460c-9093-5065cbdba196,8fef790c-a3f4-460c-9093-5065cbdba196,1,0,79bd24d0-61a9-4558-90ac-4e726066789c,79bd24d0-61a9-4558-90ac-4e726066789c,1,0,d843cbd7-e2b5-4c50-8ed2-7cb0baac8ecc,d843cbd7-e2b5-4c50-8ed2-7cb0baac8ecc,1,0,ef356548-51a4-4b09-b37d-ede5b8f3edb6,ef356548-51a4-4b09-b37d-ede5b8f3edb6,1,0,53c0d900-5e96-4381-a1ed-4424a5799608,53c0d900-5e96-4381-a1ed-4424a5799608,1,0,64fe317a-7d0e-4758-b5cf-0d871d2bf4ad,64fe317a-7d0e-4758-b5cf-0d871d2bf4ad,1,0,abfb7ac3-ebfa-4275-a039-a6b94bb9a76f,abfb7ac3-ebfa-4275-a039-a6b94bb9a76f,1,0,45ca9e20-1246-4400-a019-ffb521af6ea7,45ca9e20-1246-4400-a019-ffb521af6ea7,1,0,73eed854-5c3a-4a10-9bfa-793fd517f303,73eed854-5c3a-4a10-9bfa-793fd517f303,1,0,c3eb2836-ea4d-48cc-a03f-3a0c30f67e7f,c3eb2836-ea4d-48cc-a03f-3a0c30f67e7f,1,0,9134dc40-a8f1-4c60-9431-27cb98be5ecd,9134dc40-a8f1-4c60-9431-27cb98be5ecd,1,0,16c4622a-33af-4a95-b44e-0861a6df21d2,16c4622a-33af-4a95-b44e-0861a6df21d2,1,0,d8cac67b-cce2-4a00-a8df-c6570c50153f,d8cac67b-cce2-4a00-a8df-c6570c50153f,1,0,37213c65-bf26-4e50-a2fa-58eb45439b58,37213c65-bf26-4e50-a2fa-58eb45439b58,1,0,e43c08a9-6496-4c8e-bfe2-9d728e31d63d,e43c08a9-6496-4c8e-bfe2-9d728e31d63d,1,0,b6b31892-73ee-4c9b-92b0-2735536c4938,b6b31892-73ee-4c9b-92b0-2735536c4938,1,0,deb8b883-142e-47d0-a722-7c734a0cf9b3,deb8b883-142e-47d0-a722-7c734a0cf9b3,1,0,a6794f74-08a4-4b73-add7-e6d0d1b6e7a3,a6794f74-08a4-4b73-add7-e6d0d1b6e7a3,1,0,29233058-ccb1-4110-a9bc-cdb4c531f35a,29233058-ccb1-4110-a9bc-cdb4c531f35a,1,0,cf3729b2-9ee6-437c-81df-83966793be50,cf3729b2-9ee6-437c-81df-83966793be50,1,0,429d08b7-0b98-4f9b-a053-d04dd84a7026,429d08b7-0b98-4f9b-a053-d04dd84a7026,1,0,b64fd964-cee8-4619-872f-82d2fdc14240,b64fd964-cee8-4619-872f-82d2fdc14240,1,0,5ce7846d-9806-40f5-8631-4e14deb8bc95,5ce7846d-9806-40f5-8631-4e14deb8bc95,1,0,79528a0e-1e48-4d14-bd28-756fd5db57b9,79528a0e-1e48-4d14-bd28-756fd5db57b9,1,0,4eeab8c2-d901-4b95-adea-4a08f79d0fa2,4eeab8c2-d901-4b95-adea-4a08f79d0fa2,1,0,d9426219-4b37-4776-8d5d-acab5825e789,d9426219-4b37-4776-8d5d-acab5825e789,1,0,7ce1f9eb-ac51-46fd-adc5-c8b9bfb32e44,7ce1f9eb-ac51-46fd-adc5-c8b9bfb32e44,1,0,4fef5026-1cba-4c33-ae75-5f9570a8e6b6,4fef5026-1cba-4c33-ae75-5f9570a8e6b6,1,0,243ee3d4-4130-41ea-a37c-c7b39a5e73fa,243ee3d4-4130-41ea-a37c-c7b39a5e73fa,1,0,29e7299a-ce80-497a-8102-615d0a001ea8,29e7299a-ce80-497a-8102-615d0a001ea8,1,0,f9e48170-62eb-4d6b-b861-c7af1b4a38c3,f9e48170-62eb-4d6b-b861-c7af1b4a38c3,1,0,9bcc8f9a-ec12-45f2-8a32-6946d556f57a,9bcc8f9a-ec12-45f2-8a32-6946d556f57a,1,0,adc2cc11-b647-453f-a98e-8a73b7c368c7,adc2cc11-b647-453f-a98e-8a73b7c368c7,1,0,4522c564-61da-40da-a749-5312121a331d,4522c564-61da-40da-a749-5312121a331d,1,0,9394c709-6cbe-4ef6-bc8c-cba8af65821e,9394c709-6cbe-4ef6-bc8c-cba8af65821e,1,0,2943b572-7411-4f92-a6cc-7ee552b85223,2943b572-7411-4f92-a6cc-7ee552b85223,1,0,28478e7a-e8aa-40aa-866c-a3624f903141,28478e7a-e8aa-40aa-866c-a3624f903141,1,0,f692ab21-a8de-4feb-914f-4beef350543a,f692ab21-a8de-4feb-914f-4beef350543a,1,0,0ec0b1a0-5f0d-4a14-9a84-49098befa0af,0ec0b1a0-5f0d-4a14-9a84-49098befa0af,1,0,c644ab9b-7bcb-4bfa-b8ba-4c5f7689c91c,c644ab9b-7bcb-4bfa-b8ba-4c5f7689c91c,1,0,dabb3395-6100-4f53-913d-e0230e81b494,dabb3395-6100-4f53-913d-e0230e81b494,1,0,e0a3fae1-1582-4c7a-acd8-870b558acec4,e0a3fae1-1582-4c7a-acd8-870b558acec4,1,0,4a749e8c-cb35-4bc4-9b31-fb5bc0eab474,4a749e8c-cb35-4bc4-9b31-fb5bc0eab474,1,0,da4a0c05-2285-434b-b7f8-83b2a0d7f23d,da4a0c05-2285-434b-b7f8-83b2a0d7f23d,1,0,8afa9a0e-04c1-4cac-82bb-6767cc0594d9,8afa9a0e-04c1-4cac-82bb-6767cc0594d9,1,0,ecbe625a-55eb-437a-8dee-33fb034d4c0d,ecbe625a-55eb-437a-8dee-33fb034d4c0d,1,0,5d4cefac-5dc4-4d73-8b4b-900a8464fbb2,5d4cefac-5dc4-4d73-8b4b-900a8464fbb2,1,0,948b10b3-0d7c-4dca-8816-75eb86e7881b,948b10b3-0d7c-4dca-8816-75eb86e7881b,1,0,9de91b5a-98e4-414b-b650-b669b0159b49,9de91b5a-98e4-414b-b650-b669b0159b49,1,0,3de3948d-40ff-4e0d-8445-9bf49c916161,3de3948d-40ff-4e0d-8445-9bf49c916161,1,0,73a093ea-1927-483b-b6f5-8f0cbd253753,73a093ea-1927-483b-b6f5-8f0cbd253753,1,0,345f04c0-0274-4e79-b523-f1fa3cf0d92a,345f04c0-0274-4e79-b523-f1fa3cf0d92a,1,0,f3a14787-de1b-4b65-8cb1-bc33a785821c,f3a14787-de1b-4b65-8cb1-bc33a785821c,1,0,ec61075e-fbcb-494a-b790-81548a212d2b,ec61075e-fbcb-494a-b790-81548a212d2b,1,0,0c444045-302b-4dbd-a9a3-81fd40004948,0c444045-302b-4dbd-a9a3-81fd40004948,1,0,1528b799-1c0f-4244-85e8-e738b827934a,1528b799-1c0f-4244-85e8-e738b827934a,1,0,45d79e4d-8c2a-432b-abb8-fb9046abea40,45d79e4d-8c2a-432b-abb8-fb9046abea40,1,0,8f4d2fa9-c6ed-4f85-b3ef-f9214468ffc4,8f4d2fa9-c6ed-4f85-b3ef-f9214468ffc4,1,0,cb73c8c2-3b09-42e9-ac26-1bd51854efb6,cb73c8c2-3b09-42e9-ac26-1bd51854efb6,1,0,bd0f9ec3-156a-4a6f-a52b-1213ec825bc0,bd0f9ec3-156a-4a6f-a52b-1213ec825bc0,1,0,e9f393e5-04d3-4330-afb0-aa73caf0c5cd,e9f393e5-04d3-4330-afb0-aa73caf0c5cd,1,0,036868c2-e2c4-426b-8402-0d77b4224828,036868c2-e2c4-426b-8402-0d77b4224828,1,0,1bf18e24-8157-4aa4-b790-21c6535f5233,1bf18e24-8157-4aa4-b790-21c6535f5233,1,0,18470536-57df-48f0-9a85-68e4006558eb,18470536-57df-48f0-9a85-68e4006558eb,1,0,893e2f4c-b056-42ae-89fb-ecd90a53bb4c,893e2f4c-b056-42ae-89fb-ecd90a53bb4c,1,0,5eaaa3fd-3a87-4eaa-93a9-49337b19eddd,5eaaa3fd-3a87-4eaa-93a9-49337b19eddd,1,0,77ee9f6c-0be9-450f-978c-297626d6275b,77ee9f6c-0be9-450f-978c-297626d6275b,1,0,a63e6145-0d4b-4da2-9864-485a61e621df,a63e6145-0d4b-4da2-9864-485a61e621df,1,0,f29738d5-ad22-47bf-9053-497763674486,f29738d5-ad22-47bf-9053-497763674486,1,0,9c23d3bd-7a98-4d71-b9b0-78cda4ffb3ce,9c23d3bd-7a98-4d71-b9b0-78cda4ffb3ce,1,0,9aca958a-a938-4421-9e37-6606e02f7b77,9aca958a-a938-4421-9e37-6606e02f7b77,1,0,44109976-b763-4807-a013-9d04c3675bf3,44109976-b763-4807-a013-9d04c3675bf3,1,0,46127175-144d-438e-8fbe-c55ae0233620,46127175-144d-438e-8fbe-c55ae0233620,1,0,20754057-6397-4478-a484-74b8c2f243ee,20754057-6397-4478-a484-74b8c2f243ee,1,0,b8a06e8b-4581-4088-a5b4-a5d3330eab22,b8a06e8b-4581-4088-a5b4-a5d3330eab22,1,0,ea838b79-af81-4767-a8b1-fce68baa866a,ea838b79-af81-4767-a8b1-fce68baa866a,1,0,5e1056d0-6778-4030-8806-3dc90ffed318,5e1056d0-6778-4030-8806-3dc90ffed318,1,0,068e6f32-a2b6-4ade-9b9e-db3eac8b09c1,068e6f32-a2b6-4ade-9b9e-db3eac8b09c1,1,0,3701531a-b408-455f-a49d-652d3fcab4ef,3701531a-b408-455f-a49d-652d3fcab4ef,1,0,63e229aa-2638-45f1-9c5e-f821d9397ac3,63e229aa-2638-45f1-9c5e-f821d9397ac3,1,0,9e425f71-ef7d-4936-9f1b-7dceca99ca95,9e425f71-ef7d-4936-9f1b-7dceca99ca95,1,0,968ecea6-7d21-4e85-9d25-e8c6fe1b76cc,968ecea6-7d21-4e85-9d25-e8c6fe1b76cc,1,0,c6777ffe-1fb2-4807-8624-43f47a4e3947,c6777ffe-1fb2-4807-8624-43f47a4e3947,1,0,91c8e02d-ec9c-41d6-a2b1-ec1e906c055a,91c8e02d-ec9c-41d6-a2b1-ec1e906c055a,1,0,be42c5c6-b604-4180-a3d7-24b2348c8d5e,be42c5c6-b604-4180-a3d7-24b2348c8d5e,1,0,6223c072-bff3-4ea8-96a1-ac2a5bbe9f99,6223c072-bff3-4ea8-96a1-ac2a5bbe9f99,1,0,6fd083fe-a132-4f63-b38f-4891004aca8a,6fd083fe-a132-4f63-b38f-4891004aca8a,1,0,f9f021ca-8b3e-4d10-9538-1bce7e851fdd,f9f021ca-8b3e-4d10-9538-1bce7e851fdd,1,0,bb7cf0f8-56b0-4c0d-b206-79051ba83f6d,bb7cf0f8-56b0-4c0d-b206-79051ba83f6d,1,0,ab057ce4-ac51-4465-8aad-eadc9088c62d,ab057ce4-ac51-4465-8aad-eadc9088c62d,1,0,8842c0e3-2e20-4f37-ae7c-f5449004994b,8842c0e3-2e20-4f37-ae7c-f5449004994b,1,0,5b2cc44b-69cb-495c-a26b-003a495df40b,5b2cc44b-69cb-495c-a26b-003a495df40b,1,0,30250d93-10ff-45c9-920b-5fed3f9d8093,30250d93-10ff-45c9-920b-5fed3f9d8093,1,0,fc959221-6313-45d9-b2c4-85befaede226,fc959221-6313-45d9-b2c4-85befaede226,1,0,6ffa8536-7639-4e9a-9f6d-4eda71f5ca3b,6ffa8536-7639-4e9a-9f6d-4eda71f5ca3b,1,0,5206d407-ac91-477e-80e7-97c312da934c,5206d407-ac91-477e-80e7-97c312da934c,1,0,15b53eaa-cb35-4385-9515-c2ec6e1fdb4b,15b53eaa-cb35-4385-9515-c2ec6e1fdb4b,1,0,ccb8a530-260a-4488-b1d9-c67325c69bf4,ccb8a530-260a-4488-b1d9-c67325c69bf4,1,0,c869c1b7-3c04-4e5e-a033-d3f2fb0af03c,c869c1b7-3c04-4e5e-a033-d3f2fb0af03c,1,0,23f93492-59f5-491b-8708-45096934c7e6,23f93492-59f5-491b-8708-45096934c7e6,1,0,30f5471a-17fb-4184-9798-4f8e3ef0cccb,30f5471a-17fb-4184-9798-4f8e3ef0cccb,1,0,27abda4c-a43c-49b4-90cd-db780afe0c45,27abda4c-a43c-49b4-90cd-db780afe0c45,1,0,450a36cb-9bc1-4c5b-ae21-0e023f3eb951,450a36cb-9bc1-4c5b-ae21-0e023f3eb951,1,0,1a28db16-d410-4101-bf31-21cefa880dae,1a28db16-d410-4101-bf31-21cefa880dae,1,0,2b85bcf6-85b0-4efb-bada-b65414a8d264,2b85bcf6-85b0-4efb-bada-b65414a8d264,1,0,cf027de4-59c9-4b8f-9695-b1d4d16548fe,cf027de4-59c9-4b8f-9695-b1d4d16548fe,1,0,d33ceaee-a374-40a3-9406-cbcbf82fd8ae,d33ceaee-a374-40a3-9406-cbcbf82fd8ae,1,0,0b13cad5-91ae-4cd1-a620-9a315ae8024c,0b13cad5-91ae-4cd1-a620-9a315ae8024c,1,0,d0634a8e-676f-4f49-9a38-7cb80cfa9fdf,d0634a8e-676f-4f49-9a38-7cb80cfa9fdf,1,0,59bb5271-4cc7-45aa-8e2a-f556a4afa2dc,59bb5271-4cc7-45aa-8e2a-f556a4afa2dc,1,0,81dd61e5-fe02-4272-a525-affda9b606ca,81dd61e5-fe02-4272-a525-affda9b606ca,1,0,8de7b423-b7d1-46fe-b1dc-fb936736b864,8de7b423-b7d1-46fe-b1dc-fb936736b864,1,0,f565876c-0326-4b12-895e-c248b9e64115,f565876c-0326-4b12-895e-c248b9e64115,1,0,62f075c5-1ad0-4a29-9f40-567b9fa70cdf,62f075c5-1ad0-4a29-9f40-567b9fa70cdf,1,0,88cefe4a-a6c5-4753-935e-f956d9de9f77,88cefe4a-a6c5-4753-935e-f956d9de9f77,1,0,882e78b7-90bd-4b95-8852-146bdb51ec15,882e78b7-90bd-4b95-8852-146bdb51ec15,1,0,ae4435c3-62c0-4f08-b526-7f9571eed8ae,ae4435c3-62c0-4f08-b526-7f9571eed8ae,1,0,91a1bd81-e6fa-476c-85e6-317a91f6c8bc,91a1bd81-e6fa-476c-85e6-317a91f6c8bc,1,0,f799e1d1-bb78-4a7a-bb1a-d79ba29acd0c,f799e1d1-bb78-4a7a-bb1a-d79ba29acd0c,1,0,c7b46558-d688-4c42-ae52-f98de7923176,c7b46558-d688-4c42-ae52-f98de7923176,1,0,31fdbb46-1df1-4b74-a54e-b922260dcca6,31fdbb46-1df1-4b74-a54e-b922260dcca6,1,0,0f6f8fd9-b3af-4d06-bc47-bdad238d15b7,0f6f8fd9-b3af-4d06-bc47-bdad238d15b7,1,0,460e76d2-4ed6-464e-bf9c-a6bcf920aaf2,460e76d2-4ed6-464e-bf9c-a6bcf920aaf2,1,0,80c23bf0-cef0-4d07-a017-d90635f8041d,80c23bf0-cef0-4d07-a017-d90635f8041d,1,0,47a24216-3299-470b-a18c-d8c1258fff24,47a24216-3299-470b-a18c-d8c1258fff24,1,0,72dcfd46-491e-4f88-a0ea-57919f8fbdea,72dcfd46-491e-4f88-a0ea-57919f8fbdea,1,0,fa7a11cc-7ee0-4550-8d0d-9c7464d57a37,fa7a11cc-7ee0-4550-8d0d-9c7464d57a37,1,0,8317ac49-890d-4921-8c0d-1bfc676f0b40,8317ac49-890d-4921-8c0d-1bfc676f0b40,1,0,f9161bc3-9a1c-4870-8681-8e97d8ce838a,f9161bc3-9a1c-4870-8681-8e97d8ce838a,1,0,5e53ccc6-5ab4-4f9d-b524-0081d345d7a2,5e53ccc6-5ab4-4f9d-b524-0081d345d7a2,1,0,c3b3805b-3501-47a7-b280-46180049b235,c3b3805b-3501-47a7-b280-46180049b235,1,0,29af05c2-37de-495b-b3cf-477d452abe5e,29af05c2-37de-495b-b3cf-477d452abe5e,1,0,0c732569-a50f-4be3-a214-0843c6a3da47,0c732569-a50f-4be3-a214-0843c6a3da47,1,0,f55d74bf-5824-4228-9683-31f7c7fdf74d,f55d74bf-5824-4228-9683-31f7c7fdf74d,1,0,5e922083-0ceb-449a-8201-7dd27a46f2fc,5e922083-0ceb-449a-8201-7dd27a46f2fc,1,0,0d142fcd-a596-4cdf-a3f6-c31becdb7b59,0d142fcd-a596-4cdf-a3f6-c31becdb7b59,1,0,c30c6860-befb-497e-b432-3dba0f86c540,c30c6860-befb-497e-b432-3dba0f86c540,1,0,d97e78c7-f2c1-4e0e-9c9b-d2dd6a94da22,d97e78c7-f2c1-4e0e-9c9b-d2dd6a94da22,1,0,e757303e-c61a-4e42-9829-c5a36dba9414,e757303e-c61a-4e42-9829-c5a36dba9414,1,0,cb3bb725-ed7a-4cde-a0ac-26a0b168c0ea,cb3bb725-ed7a-4cde-a0ac-26a0b168c0ea,1,0,091de87c-0801-4bd3-aaaa-ed37bc4cd161,091de87c-0801-4bd3-aaaa-ed37bc4cd161,1,0,9a6bfcbe-6ac7-4839-bfb9-a11b97e64185,9a6bfcbe-6ac7-4839-bfb9-a11b97e64185,1,0,b53c545c-3b1c-4315-a213-4f2b2c7128aa,b53c545c-3b1c-4315-a213-4f2b2c7128aa,1,0,02a84df9-2171-43e6-8135-a74edd384826,02a84df9-2171-43e6-8135-a74edd384826,1,0,ff36356d-cb1d-4316-896a-c6ae83b92437,ff36356d-cb1d-4316-896a-c6ae83b92437,1,0,465cce6a-7064-4b0a-932c-40f842042f33,465cce6a-7064-4b0a-932c-40f842042f33,1,0,f9cd82e7-8252-4bb6-8e08-23ab45ed3976,f9cd82e7-8252-4bb6-8e08-23ab45ed3976,1,0,e67dff00-92e2-4f58-a950-d5bbca9291c5,e67dff00-92e2-4f58-a950-d5bbca9291c5,1,0,e1964724-804a-4ecc-be9e-5b84e58f2b84,e1964724-804a-4ecc-be9e-5b84e58f2b84,1,0,46e961c2-cd45-4d76-a6ad-c1d5c8dc95cc,46e961c2-cd45-4d76-a6ad-c1d5c8dc95cc,1,0,bf3cb513-2856-472b-8713-7bf8ba70cdce,bf3cb513-2856-472b-8713-7bf8ba70cdce,1,0,de4815c8-0853-47e0-862b-b60119c674f6,de4815c8-0853-47e0-862b-b60119c674f6,1,0,dbe02a79-3179-42bb-a8e8-dd9bf3ff705c,dbe02a79-3179-42bb-a8e8-dd9bf3ff705c,1,0,8f17ec3f-6d62-46b8-baef-b20430e948ce,8f17ec3f-6d62-46b8-baef-b20430e948ce,1,0,ea1298d0-9396-4a50-b83e-24064e8dd99d,ea1298d0-9396-4a50-b83e-24064e8dd99d,1,0,038dbb00-e4c6-4e64-b861-3a0764f54ab3,038dbb00-e4c6-4e64-b861-3a0764f54ab3,1,0,1c291f7d-a493-4297-8aaa-912896800066,1c291f7d-a493-4297-8aaa-912896800066,1,0,69149801-a825-4ed2-b077-c26660dff271,69149801-a825-4ed2-b077-c26660dff271,1,0,12146ed3-c159-4d6b-ae1a-1ecd30e5a87e,12146ed3-c159-4d6b-ae1a-1ecd30e5a87e,1,0,518ab687-b84a-40c8-8547-aee4257c1b71,518ab687-b84a-40c8-8547-aee4257c1b71,1,0,5cec0949-bfe8-4f7e-98c1-0c402be3ea09,5cec0949-bfe8-4f7e-98c1-0c402be3ea09,1,0,7732ef07-16eb-46a0-9645-7de95c5482af,7732ef07-16eb-46a0-9645-7de95c5482af,1,0,75dac536-b316-4b04-a57b-03656c678bec,75dac536-b316-4b04-a57b-03656c678bec,1,0,a07d6c85-159d-4d09-b117-561a1e20329f,a07d6c85-159d-4d09-b117-561a1e20329f,1,0,8a2f9733-4f83-41f2-9d74-dca7161a4b41,8a2f9733-4f83-41f2-9d74-dca7161a4b41,1,0,fbd2d900-1e0d-48f3-9793-0186ee49915c,fbd2d900-1e0d-48f3-9793-0186ee49915c,1,0,436b558e-6547-4ba6-8cee-954fe36743ea,436b558e-6547-4ba6-8cee-954fe36743ea,1,0,6120bb6e-b177-48bf-b467-02bab0d4cc0d,6120bb6e-b177-48bf-b467-02bab0d4cc0d,1,0,a5af4715-6c4f-484b-9599-5b1b9147713f,a5af4715-6c4f-484b-9599-5b1b9147713f,1,0,307b6e66-6fef-4777-b20a-37898928932f,307b6e66-6fef-4777-b20a-37898928932f,1,0,a69494c0-dcce-4359-aa82-c1cfae8a43eb,a69494c0-dcce-4359-aa82-c1cfae8a43eb,1,0,2b243d49-5500-403a-b177-ac1c70bb889d,2b243d49-5500-403a-b177-ac1c70bb889d,1,0,51c040c6-e7a4-4e0e-b479-039636fdb6ec,51c040c6-e7a4-4e0e-b479-039636fdb6ec,1,0,8ede4c18-ebf0-4c39-9e82-c59df8d62ca7,8ede4c18-ebf0-4c39-9e82-c59df8d62ca7,1,0,b2c200a7-b9cc-4d84-b839-e69f2a14a8f5,b2c200a7-b9cc-4d84-b839-e69f2a14a8f5,1,0,8a50e7f2-97a9-4ed8-a46f-6413f7fcf8cd,8a50e7f2-97a9-4ed8-a46f-6413f7fcf8cd,1,0,4a69a70d-1b4c-4999-a3dd-ae1deb331fea,4a69a70d-1b4c-4999-a3dd-ae1deb331fea,1,0,3a36e0f5-a645-47f1-99ae-5b0493d604ad,3a36e0f5-a645-47f1-99ae-5b0493d604ad,1,0,57f762f7-b8e4-498b-a3dc-3d40c94855ec,57f762f7-b8e4-498b-a3dc-3d40c94855ec,1,0,ca7d4086-de35-40fd-af65-73369d452135,ca7d4086-de35-40fd-af65-73369d452135,1,0,563c0f5c-e0b4-4229-a3f6-183091060aa4,563c0f5c-e0b4-4229-a3f6-183091060aa4,1,0,bf967588-ea8f-49a3-9331-af2331ffa162,bf967588-ea8f-49a3-9331-af2331ffa162,1,0,d59c2725-5d98-495e-9f86-f5d38dbfad90,d59c2725-5d98-495e-9f86-f5d38dbfad90,1,0,176f8835-73d2-4fbe-9d2a-0a4c79d3b871,176f8835-73d2-4fbe-9d2a-0a4c79d3b871,1,0,0ba68198-983d-409b-be27-96f1572b3f12,0ba68198-983d-409b-be27-96f1572b3f12,1,0,9cd1e8dd-e2be-48a9-b32d-43688e1748bc,9cd1e8dd-e2be-48a9-b32d-43688e1748bc,1,0,decb27a8-7dd3-4601-a694-30429e638b39,decb27a8-7dd3-4601-a694-30429e638b39,1,0,922ac6c0-a6a8-444e-9aad-27dc0f49b32e,922ac6c0-a6a8-444e-9aad-27dc0f49b32e,1,0,d7a128e4-f31f-4b09-8424-e816ab59d5c3,d7a128e4-f31f-4b09-8424-e816ab59d5c3,1,0,0ce6e252-8d6e-4bfe-b8cc-daf3434fa51e,0ce6e252-8d6e-4bfe-b8cc-daf3434fa51e,1,0,aa9513b4-f575-4030-a7f9-ac09aa319e98,aa9513b4-f575-4030-a7f9-ac09aa319e98,1,0,f01afc5e-91b8-4cc2-b63a-c245e5e36d01,f01afc5e-91b8-4cc2-b63a-c245e5e36d01,1,0,028cbc0e-023d-40ad-86c3-5e6f8dc96c57,028cbc0e-023d-40ad-86c3-5e6f8dc96c57,1,0,d03f66b1-48a3-434b-bb58-9fd53c183514,d03f66b1-48a3-434b-bb58-9fd53c183514,1,0,a469e55e-d7ca-4c27-b350-fafe7364c18f,a469e55e-d7ca-4c27-b350-fafe7364c18f,1,0,b4dde44e-57d5-4c3a-bb9b-643787ce07b0,b4dde44e-57d5-4c3a-bb9b-643787ce07b0,1,0,d2160866-78ca-424a-92b9-d389fb341ee0,d2160866-78ca-424a-92b9-d389fb341ee0,1,0,73b36823-72a4-4286-8ee2-02b2f086d5ea,73b36823-72a4-4286-8ee2-02b2f086d5ea,1,0,ecaba9aa-fca7-42f5-a4fe-d8176cf875b9,ecaba9aa-fca7-42f5-a4fe-d8176cf875b9,1,0,4378ab20-5467-476b-8f04-4b6876efdee6,4378ab20-5467-476b-8f04-4b6876efdee6,1,0,55e47901-c79c-41c5-9d7f-6b6846ed2782,55e47901-c79c-41c5-9d7f-6b6846ed2782,1,0,c013a650-bd4b-4e14-97cc-05df17dbb0d5,c013a650-bd4b-4e14-97cc-05df17dbb0d5,1,0,00bc2e99-c7c9-4a4b-b0bc-c9babe17deda,00bc2e99-c7c9-4a4b-b0bc-c9babe17deda,1,0,177710c8-2441-4436-a096-64c27aa7aec5,177710c8-2441-4436-a096-64c27aa7aec5,1,0,ab143db8-185b-4093-a3b1-c65322cb8fd6,ab143db8-185b-4093-a3b1-c65322cb8fd6,1,0,e3ce5882-541e-4620-9c24-f00deacc33c2,e3ce5882-541e-4620-9c24-f00deacc33c2,1,0,c9694243-390e-4217-8996-b33924c4fe60,c9694243-390e-4217-8996-b33924c4fe60,1,0,8e08ea9b-8c63-475a-9335-c8edc6214555,8e08ea9b-8c63-475a-9335-c8edc6214555,1,0,19bd6152-7e9c-4710-80c3-c6aa399fe4e9,19bd6152-7e9c-4710-80c3-c6aa399fe4e9,1,0,72846fcc-a9ab-4393-9133-38c1805abab1,72846fcc-a9ab-4393-9133-38c1805abab1,1,0,91a81670-9124-4b65-aecd-77f252249030,91a81670-9124-4b65-aecd-77f252249030,1,0,ed2e5344-9261-4473-86a5-f914b8458cfc,ed2e5344-9261-4473-86a5-f914b8458cfc,1,0,4ff32c59-4ca5-4e60-b54c-f46f757758e2,4ff32c59-4ca5-4e60-b54c-f46f757758e2,1,0,acbc674d-d053-43f4-9d62-86fbbb962ee2,acbc674d-d053-43f4-9d62-86fbbb962ee2,1,0,e0608801-124b-4c52-9a17-9072eb5b676c,e0608801-124b-4c52-9a17-9072eb5b676c,1,0,64e3295e-89c6-4b09-8dc4-b552da47db84,64e3295e-89c6-4b09-8dc4-b552da47db84,1,0,2c1846a5-09f2-414b-b95c-67ed7432ce0e,2c1846a5-09f2-414b-b95c-67ed7432ce0e,1,0,ce339ae7-a794-425b-8d5f-b04fd4b21364,ce339ae7-a794-425b-8d5f-b04fd4b21364,1,0,3ad5d8a7-3071-46aa-aebf-306bdb67983b,3ad5d8a7-3071-46aa-aebf-306bdb67983b,1,0,ab7ef662-71c1-4d51-9f0f-ea8c5ea3df8a,ab7ef662-71c1-4d51-9f0f-ea8c5ea3df8a,1,0,cb954476-c551-4a06-9bcd-18d67ba47dc8,cb954476-c551-4a06-9bcd-18d67ba47dc8,1,0,79201015-bfae-463e-81f1-0ae2d3066f3f,79201015-bfae-463e-81f1-0ae2d3066f3f,1,0,bed8af4e-fa3a-4b25-ba6e-5b7b4a6cd363,bed8af4e-fa3a-4b25-ba6e-5b7b4a6cd363,1,0,951927d4-7bfc-4edb-b97f-dcc29a937400,951927d4-7bfc-4edb-b97f-dcc29a937400,1,0,71309e88-d514-40f3-a329-b2a420e75504,71309e88-d514-40f3-a329-b2a420e75504,1,0,1ea3178b-73dd-4063-9140-c61687a4b1b8,1ea3178b-73dd-4063-9140-c61687a4b1b8,1,0,85fd7ef4-2886-4e2c-a6eb-63d0b0b9cd55,85fd7ef4-2886-4e2c-a6eb-63d0b0b9cd55,1,0,696723be-7b4f-4321-956e-eff07ea9f5fa,696723be-7b4f-4321-956e-eff07ea9f5fa,1,0,616c27dc-5c59-4469-97a7-27e0752bd3a7,616c27dc-5c59-4469-97a7-27e0752bd3a7,1,0,f7323121-74bc-441c-a3e9-dd5cb4f0accd,f7323121-74bc-441c-a3e9-dd5cb4f0accd,1,0,fddfb2fd-4d58-4bc6-b196-720425a8c029,fddfb2fd-4d58-4bc6-b196-720425a8c029,1,0,ce075cf1-1778-4671-aa40-166e6c41adc8,ce075cf1-1778-4671-aa40-166e6c41adc8,1,0,eddb111f-7622-44a3-b7d8-97faec67b23c,eddb111f-7622-44a3-b7d8-97faec67b23c,1,0,84872892-842e-4d7d-a3cd-576c42343a7a,84872892-842e-4d7d-a3cd-576c42343a7a,1,0,78ad6047-473d-494b-a2ba-81e062b567e6,78ad6047-473d-494b-a2ba-81e062b567e6,1,0,0fdbd1ab-716d-46b5-aa75-fb09812ced5b,0fdbd1ab-716d-46b5-aa75-fb09812ced5b,1,0,b26ab92b-9739-4eb4-b855-be6850274432,b26ab92b-9739-4eb4-b855-be6850274432,1,0,17944416-85a5-49e4-9fa8-652c671c3df0,17944416-85a5-49e4-9fa8-652c671c3df0,1,0,b7936cda-654e-4707-af76-385a63243cdf,b7936cda-654e-4707-af76-385a63243cdf,1,0,192844c3-7cb9-4477-a4af-0edb8ce5129d,192844c3-7cb9-4477-a4af-0edb8ce5129d,1,0,33324481-55d1-475f-9f12-7542a05429a2,33324481-55d1-475f-9f12-7542a05429a2,1,0,07b7591f-dcfc-483f-85f6-b5a08d952fe2,07b7591f-dcfc-483f-85f6-b5a08d952fe2,1,0,866c418f-332e-415a-bb8e-794d38f15080,866c418f-332e-415a-bb8e-794d38f15080,1,0,a34b8fdc-e756-4065-b68a-12a07fa7c40e,a34b8fdc-e756-4065-b68a-12a07fa7c40e,1,0,b853debb-d715-4296-9070-45cc5dae571d,b853debb-d715-4296-9070-45cc5dae571d,1,0,fc406b50-f267-44b8-a833-ba7e8880903e,fc406b50-f267-44b8-a833-ba7e8880903e,1,0,6517bf8b-d2fd-4b6b-a4a5-b3086ebad8de,6517bf8b-d2fd-4b6b-a4a5-b3086ebad8de,1,0,391a1891-85a2-45b8-a747-3ecd705fc75b,391a1891-85a2-45b8-a747-3ecd705fc75b,1,0,cc815221-3d2a-4ea3-b1e6-6cb9fb410bd9,cc815221-3d2a-4ea3-b1e6-6cb9fb410bd9,1,0,b9ef62f6-9b1d-4d13-8016-73ed531d195a,b9ef62f6-9b1d-4d13-8016-73ed531d195a,1,0,742ed6d8-0f8d-4569-b30f-9ff3804cc3b7,742ed6d8-0f8d-4569-b30f-9ff3804cc3b7,1,0,229fe764-87f5-4d19-b042-c31fef5cddd6,229fe764-87f5-4d19-b042-c31fef5cddd6,1,0,74cd7504-d34f-42ff-90ff-7abcd54e8b6c,74cd7504-d34f-42ff-90ff-7abcd54e8b6c,1,0,e932800c-fd81-417d-a601-c774b888d66a,e932800c-fd81-417d-a601-c774b888d66a,1,0,a2335b6f-1dbb-4722-979b-8bed83aa8c94,a2335b6f-1dbb-4722-979b-8bed83aa8c94,1,0,211cf921-d880-4f74-b8ee-5312dea28613,211cf921-d880-4f74-b8ee-5312dea28613,1,0,2fd3a396-b8ae-409e-9373-02a039393a80,2fd3a396-b8ae-409e-9373-02a039393a80,1,0,61ae74be-64b2-4bf2-aa63-8fe3dc7ed47d,61ae74be-64b2-4bf2-aa63-8fe3dc7ed47d,1,0,346ef414-b20b-4095-86fe-18ca21c9887f,346ef414-b20b-4095-86fe-18ca21c9887f,1,0,c01ab97b-4964-4f7d-b749-56c0b94feb93,c01ab97b-4964-4f7d-b749-56c0b94feb93,1,0,0cc63813-cf16-4a99-b3bd-18a773091230,0cc63813-cf16-4a99-b3bd-18a773091230,1,0,4fc00971-c980-468a-9690-5cd520d12eb0,4fc00971-c980-468a-9690-5cd520d12eb0,1,0,85972c27-4f39-4982-9307-7877e87ef87b,85972c27-4f39-4982-9307-7877e87ef87b,1,0,96afdffb-7595-4c49-9e86-8296f50bd2f5,96afdffb-7595-4c49-9e86-8296f50bd2f5,1,0,823d5b5e-e9bf-40f0-9dcd-579bb53847bb,823d5b5e-e9bf-40f0-9dcd-579bb53847bb,1,0,e125d3e0-950f-42ee-8904-bd26091afa55,e125d3e0-950f-42ee-8904-bd26091afa55,1,0,2b4797a5-074a-4a01-b99f-1c5590cfde40,2b4797a5-074a-4a01-b99f-1c5590cfde40,1,0,718e53d2-24ec-40fb-9def-825441ada46c,718e53d2-24ec-40fb-9def-825441ada46c,1,0,4c0a7fd6-8f09-41d6-949f-65ce708c1256,4c0a7fd6-8f09-41d6-949f-65ce708c1256,1,0,792abc06-b52a-4691-ba92-96ed73ca702a,792abc06-b52a-4691-ba92-96ed73ca702a,1,0,148dbe44-86d1-4362-b9db-8ff68cd2b34d,148dbe44-86d1-4362-b9db-8ff68cd2b34d,1,0,1fbc893e-3000-4fac-88f5-c82251835d65,1fbc893e-3000-4fac-88f5-c82251835d65,1,0,05852816-63ec-4179-abca-66372bbfb04c,05852816-63ec-4179-abca-66372bbfb04c,1,0,0165f721-b011-4524-bfd5-81e35092f2be,0165f721-b011-4524-bfd5-81e35092f2be,1,0,e74925d4-1979-4600-8560-0932d26450ad,e74925d4-1979-4600-8560-0932d26450ad,1,0,aa108131-151d-4356-8a24-345e4ec74281,aa108131-151d-4356-8a24-345e4ec74281,1,0,284b77a8-d9f4-44c4-a2dc-91c1f8bd5808,284b77a8-d9f4-44c4-a2dc-91c1f8bd5808,1,0,e3251f1a-3c80-4c86-9960-270920bd512f,e3251f1a-3c80-4c86-9960-270920bd512f,1,0,3c3d5474-977b-4df9-88de-042e997bd10d,3c3d5474-977b-4df9-88de-042e997bd10d,1,0,4b88d172-5a44-4011-bb38-e94bf7a9c879,4b88d172-5a44-4011-bb38-e94bf7a9c879,1,0,3bced2d4-e3d7-4489-a26d-f84620b096f4,3bced2d4-e3d7-4489-a26d-f84620b096f4,1,0,e8c048fc-0f39-4778-aaf3-d6bff5acb06a,e8c048fc-0f39-4778-aaf3-d6bff5acb06a,1,0,c7efb89b-f9e5-4b58-b7a0-502cea8cf1d4,c7efb89b-f9e5-4b58-b7a0-502cea8cf1d4,1,0,cd133f15-aa45-4ec9-93c2-2f0f66baf3f3,cd133f15-aa45-4ec9-93c2-2f0f66baf3f3,1,0,18436045-1008-4114-8032-274fea0f4627,18436045-1008-4114-8032-274fea0f4627,1,0,cad93727-cffb-44a6-aaee-be73a078e802,cad93727-cffb-44a6-aaee-be73a078e802,1,0,c034f410-ff8e-45d7-925f-94448f88a7af,c034f410-ff8e-45d7-925f-94448f88a7af,1,0,0027727b-3917-4010-9953-1649266e8ed7,0027727b-3917-4010-9953-1649266e8ed7,1,0,b088786a-046f-458c-8e7a-5bebf8df8b34,b088786a-046f-458c-8e7a-5bebf8df8b34,1,0,6d015113-1e32-4f5e-aacd-8134d7307125,6d015113-1e32-4f5e-aacd-8134d7307125,1,0,58230238-d2f2-422e-90cb-de355996eb19,58230238-d2f2-422e-90cb-de355996eb19,1,0,3d907678-628d-4fb2-85c2-149839024c08,3d907678-628d-4fb2-85c2-149839024c08,1,0,71384d10-6acf-4139-b766-cb8b5796f1a7,71384d10-6acf-4139-b766-cb8b5796f1a7,1,0,a8f149d7-e9bc-4695-b4f4-88434e31aafb,a8f149d7-e9bc-4695-b4f4-88434e31aafb,1,0,10dcbcc6-7793-4da7-a9a5-e4f124209d3e,10dcbcc6-7793-4da7-a9a5-e4f124209d3e,1,0,11ba510f-cb57-43d0-9897-c49e10b67ccd,11ba510f-cb57-43d0-9897-c49e10b67ccd,1,0,9d92af67-c88d-4429-9e85-0b5bf04c4b79,9d92af67-c88d-4429-9e85-0b5bf04c4b79,1,0,b009bc99-ea12-46db-a7f8-cb3e285b20d0,b009bc99-ea12-46db-a7f8-cb3e285b20d0,1,0,43523bbb-c923-4a20-bcb5-50d30cc826ee,43523bbb-c923-4a20-bcb5-50d30cc826ee,1,0,c89d9aad-3364-45df-88b5-b23ae76edbba,c89d9aad-3364-45df-88b5-b23ae76edbba,1,0,9a2f2cd1-4c9f-460b-b3b7-64706a0164ab,9a2f2cd1-4c9f-460b-b3b7-64706a0164ab,1,0,7e4b9dce-e332-4d35-8b5f-d3f88918989d,7e4b9dce-e332-4d35-8b5f-d3f88918989d,1,0,96fe619a-b819-4f96-9788-e1f4ef57833a,96fe619a-b819-4f96-9788-e1f4ef57833a,1,0,94dff2da-f721-411a-9fc0-5d013b685dcc,94dff2da-f721-411a-9fc0-5d013b685dcc,1,0,9343fc5f-7b08-4be5-8cd5-dbed635b819d,9343fc5f-7b08-4be5-8cd5-dbed635b819d,1,0,99e87e66-1b07-451b-a476-f5213cbd7150,99e87e66-1b07-451b-a476-f5213cbd7150,1,0,c3317f75-f6ad-41f6-97f1-77074c3ff62a,c3317f75-f6ad-41f6-97f1-77074c3ff62a,1,0,8800dec9-84f8-4643-8742-1d76fe575f58,8800dec9-84f8-4643-8742-1d76fe575f58,1,0,62903794-3b41-4d21-b800-1c26dbeda3ce,62903794-3b41-4d21-b800-1c26dbeda3ce,1,0,9bda4a0b-e8a7-4acf-9f07-4033b3a84ebc,9bda4a0b-e8a7-4acf-9f07-4033b3a84ebc,1,0,4ba2e55e-29bc-4fbe-83e8-8bfa36abfdab,4ba2e55e-29bc-4fbe-83e8-8bfa36abfdab,1,0,93de88de-0069-4aa8-96b2-d5709e4def2f,93de88de-0069-4aa8-96b2-d5709e4def2f,1,0,9f94fadf-ac9d-4e57-9fe4-41ce8cfbec6a,9f94fadf-ac9d-4e57-9fe4-41ce8cfbec6a,1,0,12d4ffc8-592e-42a7-b8c6-20bd58f6da90,12d4ffc8-592e-42a7-b8c6-20bd58f6da90,1,0,3a8d9010-8785-4d8d-b908-b821d7d681c9,3a8d9010-8785-4d8d-b908-b821d7d681c9,1,0,2568a935-ea49-4b99-aa9c-de27de6a0e81,2568a935-ea49-4b99-aa9c-de27de6a0e81,1,0,de2bdd4f-93f2-4341-86d6-7082fc286a5c,de2bdd4f-93f2-4341-86d6-7082fc286a5c,1,0,ba96ec0e-931e-45be-a782-e68ba4fedddb,ba96ec0e-931e-45be-a782-e68ba4fedddb,1,0,9af5882f-3a42-4fae-83df-6aa8de577112,9af5882f-3a42-4fae-83df-6aa8de577112,1,0,79bc5e39-3017-48bf-8e42-fa34e8b581ef,79bc5e39-3017-48bf-8e42-fa34e8b581ef,1,0,fe6e207f-d306-4470-8441-ffd3f3710d31,fe6e207f-d306-4470-8441-ffd3f3710d31,1,0,7451af80-7387-4e8d-a3da-2ae0540c3fd4,7451af80-7387-4e8d-a3da-2ae0540c3fd4,1,0,1c1e01f2-b2b3-480d-ae51-2db27b82dedd,1c1e01f2-b2b3-480d-ae51-2db27b82dedd,1,0,df459525-4e4d-4819-b996-5a6379b22a88,df459525-4e4d-4819-b996-5a6379b22a88,1,0,ed1d69f4-b09f-430a-bb2e-a23fe4dedf6b,ed1d69f4-b09f-430a-bb2e-a23fe4dedf6b,1,0,e67b4a32-4bac-450e-be6d-88c262383f31,e67b4a32-4bac-450e-be6d-88c262383f31,1,0,8b83bb54-4c23-4bd8-bd00-374a7a101cfa,8b83bb54-4c23-4bd8-bd00-374a7a101cfa,1,0,6c4c3eca-8b02-451b-af52-93073c3da146,6c4c3eca-8b02-451b-af52-93073c3da146,1,0,095c281c-3903-465d-baea-af1e6abf8019,095c281c-3903-465d-baea-af1e6abf8019,1,0,440d115d-a769-427e-891a-88d65fba2057,440d115d-a769-427e-891a-88d65fba2057,1,0,f7932210-027e-4fad-b7f7-3530789ce803,f7932210-027e-4fad-b7f7-3530789ce803,1,0,7bbfd95e-39a1-485b-930f-c9210c18dcd0,7bbfd95e-39a1-485b-930f-c9210c18dcd0,1,0,4975d3d6-b5a2-41c6-973b-6817013a388d,4975d3d6-b5a2-41c6-973b-6817013a388d,1,0,18ebc799-9724-4ffb-855e-b09a0723869e,18ebc799-9724-4ffb-855e-b09a0723869e,1,0,a06b8ef5-83e6-4fc6-91e1-256004134d69,a06b8ef5-83e6-4fc6-91e1-256004134d69,1,0,1d6a68ec-917f-4c3b-b970-797a6921cbc9,1d6a68ec-917f-4c3b-b970-797a6921cbc9,1,0,ae29eb40-5c8f-4ab4-8556-f98d45e8effe,ae29eb40-5c8f-4ab4-8556-f98d45e8effe,1,0,5b663988-3599-46dc-8d59-4c82ceac537c,5b663988-3599-46dc-8d59-4c82ceac537c,1,0,0f5f136c-688b-491e-a72b-3d9c2e609f0e,0f5f136c-688b-491e-a72b-3d9c2e609f0e,1,0,5573b405-6ac4-4632-b8d6-5d1cbdb63b97,5573b405-6ac4-4632-b8d6-5d1cbdb63b97,1,0,679cc0df-df5c-4c33-8c64-c0b6cee39116,679cc0df-df5c-4c33-8c64-c0b6cee39116,1,0,b156752b-f25c-4f35-9474-8ac3636597f5,b156752b-f25c-4f35-9474-8ac3636597f5,1,0,b67b872e-236a-4ea7-9838-0827234867b4,b67b872e-236a-4ea7-9838-0827234867b4,1,0,1e5ced23-48a7-4f3c-aa3b-78399a2b9e2b,1e5ced23-48a7-4f3c-aa3b-78399a2b9e2b,1,0,ce422d4f-1221-4ebf-a801-975a3220a226,ce422d4f-1221-4ebf-a801-975a3220a226,1,0,8735949b-f259-48b9-97e9-a81dfc7dcc8d,8735949b-f259-48b9-97e9-a81dfc7dcc8d,1,0,b8810612-dc7a-4a45-a83c-163a8669b578,b8810612-dc7a-4a45-a83c-163a8669b578,1,0,00e4dc17-b984-4f45-8b42-2e6a7a5dbced,00e4dc17-b984-4f45-8b42-2e6a7a5dbced,1,0,349c3dc3-0729-41f3-983f-3b13170c6509,349c3dc3-0729-41f3-983f-3b13170c6509,1,0,8281df26-4bde-47ba-926e-f22a8042bf1f,8281df26-4bde-47ba-926e-f22a8042bf1f,1,0,7278fb66-1d48-4c1d-bd15-425f78ad0c32,7278fb66-1d48-4c1d-bd15-425f78ad0c32,1,0,6893007f-8354-4b3b-b205-7c7d385cbde0,6893007f-8354-4b3b-b205-7c7d385cbde0,1,0,d74365a3-b434-41d0-84a7-543c336b5880,d74365a3-b434-41d0-84a7-543c336b5880,1,0,3d42502a-5705-49d7-b4ed-29edbd6306bc,3d42502a-5705-49d7-b4ed-29edbd6306bc,1,0,221e24e6-b31c-45b6-8835-2ad08d595c5f,221e24e6-b31c-45b6-8835-2ad08d595c5f,1,0,fd0fa6c9-1f42-4907-a266-fe7b6847e58a,fd0fa6c9-1f42-4907-a266-fe7b6847e58a,1,0,2e8cbcd7-f5b5-471e-863a-e09b4bc8e163,2e8cbcd7-f5b5-471e-863a-e09b4bc8e163,1,0,55956063-b227-4c74-8d9c-4a62b4f0dbc7,55956063-b227-4c74-8d9c-4a62b4f0dbc7,1,0,b6871b83-7269-43a9-b9a6-a195ff93365d,b6871b83-7269-43a9-b9a6-a195ff93365d,1,0,7dcd627c-16f6-41f9-b474-590ad1c7d2ed,7dcd627c-16f6-41f9-b474-590ad1c7d2ed,1,0,0cf89f30-e702-4c9e-8af4-888634463b99,0cf89f30-e702-4c9e-8af4-888634463b99,1,0,77f890ac-3c9c-4043-a5b7-12158772bcf5,77f890ac-3c9c-4043-a5b7-12158772bcf5,1,0,2bc734f9-8c0d-473a-b1c3-340395069501,2bc734f9-8c0d-473a-b1c3-340395069501,1,0,316c3933-21dd-4e8a-9450-0900e85ef7e2,316c3933-21dd-4e8a-9450-0900e85ef7e2,1,0,994fe78b-9f61-4aaf-9355-fafcae6b816d,994fe78b-9f61-4aaf-9355-fafcae6b816d,1,0,8448f07b-751b-4670-b44c-3564e81e5cdc,8448f07b-751b-4670-b44c-3564e81e5cdc,1,0,17aadd5f-cda2-4785-a07f-3ab4b04434a6,17aadd5f-cda2-4785-a07f-3ab4b04434a6,1,0,71bc35e6-0fec-4e54-af2d-23d1357d1c3b,71bc35e6-0fec-4e54-af2d-23d1357d1c3b,1,0,1832336e-32f6-42c4-9087-8614ead52bb3,1832336e-32f6-42c4-9087-8614ead52bb3,1,0,ff9f7b5c-70f4-4eed-8216-64448e7da76f,ff9f7b5c-70f4-4eed-8216-64448e7da76f,1,0,44ac2869-990d-4cac-a14b-c1a28854341e,44ac2869-990d-4cac-a14b-c1a28854341e,1,0,d5df31c3-89f9-469c-80a9-fb4706d30bc4,d5df31c3-89f9-469c-80a9-fb4706d30bc4,1,0,e73a6a9d-8ddd-4531-9f17-745117d9da9b,e73a6a9d-8ddd-4531-9f17-745117d9da9b,1,0,9dd4e17c-d10b-435e-8665-08997edc3e7e,9dd4e17c-d10b-435e-8665-08997edc3e7e,1,0,cafd44e1-8509-4550-8329-ff8cab0c31ae,cafd44e1-8509-4550-8329-ff8cab0c31ae,1,0,ee0412d3-58e7-4715-8774-d49778e1ef73,ee0412d3-58e7-4715-8774-d49778e1ef73,1,0,ea31df21-1402-417a-9788-b17a7116e842,ea31df21-1402-417a-9788-b17a7116e842,1,0,7a93efb9-62bb-437a-8095-b26a2c8ce8ed,7a93efb9-62bb-437a-8095-b26a2c8ce8ed,1,0,e964753f-7f4c-4f9f-bd17-cdac317c1d35,e964753f-7f4c-4f9f-bd17-cdac317c1d35,1,0,20c2aba0-e2b2-4e4f-9d48-1515c0ae7b4d,20c2aba0-e2b2-4e4f-9d48-1515c0ae7b4d,1,0,43c22498-3fd6-4038-a291-05f0db9ab66a,43c22498-3fd6-4038-a291-05f0db9ab66a,1,0,4ffc9d16-c450-4ecb-b8f6-9ec6fe37fc75,4ffc9d16-c450-4ecb-b8f6-9ec6fe37fc75,1,0,ee6e5e56-5848-46b6-89bf-b9345a57d94c,ee6e5e56-5848-46b6-89bf-b9345a57d94c,1,0,8817c872-bdee-4577-bcc3-4046edc72803,8817c872-bdee-4577-bcc3-4046edc72803,1,0,5b88c214-4e4e-45c2-b8c5-14eb852e9900,5b88c214-4e4e-45c2-b8c5-14eb852e9900,1,0,105cd740-1f60-45e1-871c-adeecd291b0d,105cd740-1f60-45e1-871c-adeecd291b0d,1,0,95aec7d2-179b-4ea3-a3df-3d737b713564,95aec7d2-179b-4ea3-a3df-3d737b713564,1,0,4bd1cae4-d5b5-444e-9cf5-67a969714293,4bd1cae4-d5b5-444e-9cf5-67a969714293,1,0,b1a330d7-9b88-44e9-aba6-41ce5e5e669c,b1a330d7-9b88-44e9-aba6-41ce5e5e669c,1,0,f279a625-b88f-43b4-bce9-de1186fe7d7e,f279a625-b88f-43b4-bce9-de1186fe7d7e,1,0,99fc224a-2a61-441a-85e9-d69df6aa8b5e,99fc224a-2a61-441a-85e9-d69df6aa8b5e,1,0,a528c26f-3ceb-4ae4-8420-edfbdea6e1ac,a528c26f-3ceb-4ae4-8420-edfbdea6e1ac,1,0,d009782b-d73e-42d1-9979-2cbaf20ee98e,d009782b-d73e-42d1-9979-2cbaf20ee98e,1,0,1ef6282c-ae81-4d76-8e3e-99fec58fc7bd,1ef6282c-ae81-4d76-8e3e-99fec58fc7bd,1,0,88d8edf7-654f-4627-b68d-c7e929726da6,88d8edf7-654f-4627-b68d-c7e929726da6,1,0,483720db-6c9e-4179-b5c7-56159c9b6073,483720db-6c9e-4179-b5c7-56159c9b6073,1,0,1725c619-9c4a-40ac-9044-00fee71945a4,1725c619-9c4a-40ac-9044-00fee71945a4,1,0,45a85e25-7c33-4ff5-87a0-2a0b4cda8130,45a85e25-7c33-4ff5-87a0-2a0b4cda8130,1,0,e95b126d-797d-4071-b7b4-b14aaf595f2d,e95b126d-797d-4071-b7b4-b14aaf595f2d,1,0,9241ea3c-633f-4469-9e70-c5a20e464da8,9241ea3c-633f-4469-9e70-c5a20e464da8,1,0,bbadbe1b-cb33-4cc5-84c8-a4fdfc8a2247,bbadbe1b-cb33-4cc5-84c8-a4fdfc8a2247,1,0,961ae0fb-7f7b-414d-8fbf-32b893b41085,961ae0fb-7f7b-414d-8fbf-32b893b41085,1,0,10adf8c8-6f5f-477f-b244-4452b774b766,10adf8c8-6f5f-477f-b244-4452b774b766,1,0,ac9dcb8c-d4f5-4f0d-affb-e4187eafdf14,ac9dcb8c-d4f5-4f0d-affb-e4187eafdf14,1,0,04ec5e44-8469-4e9c-8021-83d258f2ec54,04ec5e44-8469-4e9c-8021-83d258f2ec54,1,0,cff36ede-0bd1-424b-8c75-b9695133f32e,cff36ede-0bd1-424b-8c75-b9695133f32e,1,0,9d872d99-eac7-43ee-8ce2-c9d31a76bd75,9d872d99-eac7-43ee-8ce2-c9d31a76bd75,1,0,77e5bd01-35f3-4072-bc7a-8730e6dcbab3,77e5bd01-35f3-4072-bc7a-8730e6dcbab3,1,0,58b33683-1916-4aef-9b98-5569ef7782ed,58b33683-1916-4aef-9b98-5569ef7782ed,1,0,d3e1f622-f438-4cad-94ae-0272f51610f7,d3e1f622-f438-4cad-94ae-0272f51610f7,1,0,8569cd73-d40d-4d92-83e0-8ece0c03a86a,8569cd73-d40d-4d92-83e0-8ece0c03a86a,1,0,9ebe2809-be6b-4c91-9443-b237fb7ad43c,9ebe2809-be6b-4c91-9443-b237fb7ad43c,1,0,bf29c091-de15-4cd4-be0e-a9785f97d444,bf29c091-de15-4cd4-be0e-a9785f97d444,1,0,6a675752-fd31-46a5-8a62-2a1ede437c68,6a675752-fd31-46a5-8a62-2a1ede437c68,1,0,060b2bb4-ca03-4da9-930f-7f91f6299a35,060b2bb4-ca03-4da9-930f-7f91f6299a35,1,0,394b1a1c-a7ae-41b7-a346-4bac99fa567d,394b1a1c-a7ae-41b7-a346-4bac99fa567d,1,0,9a5fa511-59e8-4a1b-a101-f276f0b7b261,9a5fa511-59e8-4a1b-a101-f276f0b7b261,1,0,ccfe4e36-80b6-419f-8bb3-c1046203d023,ccfe4e36-80b6-419f-8bb3-c1046203d023,1,0,94b2e060-53b7-4b40-af05-30bea3520330,94b2e060-53b7-4b40-af05-30bea3520330,1,0,0f634f7e-7d6b-43e4-8e5e-a31ed05898ea,0f634f7e-7d6b-43e4-8e5e-a31ed05898ea,1,0,41b0dabd-85a3-4819-84dd-371eaf4f996e,41b0dabd-85a3-4819-84dd-371eaf4f996e,1,0,86a5ba4d-0681-4ddc-a505-0f537528e1a3,86a5ba4d-0681-4ddc-a505-0f537528e1a3,1,0,12d936f5-932b-4561-b934-c8444808a450,12d936f5-932b-4561-b934-c8444808a450,1,0,2ccb06ca-9bb7-4b74-9a96-c109bb117984,2ccb06ca-9bb7-4b74-9a96-c109bb117984,1,0,ac1a661d-db18-4576-80a9-a19d4140c05e,ac1a661d-db18-4576-80a9-a19d4140c05e,1,0,acd89f6c-a25f-47b9-ac21-036bfafcc0fc,acd89f6c-a25f-47b9-ac21-036bfafcc0fc,1,0,aa114d56-2faf-4925-8319-f0aa3993e9ee,aa114d56-2faf-4925-8319-f0aa3993e9ee,1,0,c3ffeb09-121b-4d77-9c15-def4648b4f3c,c3ffeb09-121b-4d77-9c15-def4648b4f3c,1,0,c2de0724-04c1-4adb-b62a-b7ba727dbe67,c2de0724-04c1-4adb-b62a-b7ba727dbe67,1,0,4ae26777-69ff-4a55-942b-0bad8ab7a70a,4ae26777-69ff-4a55-942b-0bad8ab7a70a,1,0,a0d8fb0a-0e90-4140-8687-e249b153dc66,a0d8fb0a-0e90-4140-8687-e249b153dc66,1,0,917c6f60-2a07-4587-9496-d393aff93953,917c6f60-2a07-4587-9496-d393aff93953,1,0,4bac50a2-762a-44e6-b8c5-3b09ef1a3f5e,4bac50a2-762a-44e6-b8c5-3b09ef1a3f5e,1,0,9fe72d73-4c95-47e0-bf92-dcb714d747c6,9fe72d73-4c95-47e0-bf92-dcb714d747c6,1,0,fe00e64f-2fa9-44a7-9bd7-854ebb6c0185,fe00e64f-2fa9-44a7-9bd7-854ebb6c0185,1,0,4d84bb11-e06e-4ed9-915b-76ee0e385a8b,4d84bb11-e06e-4ed9-915b-76ee0e385a8b,1,0,2b94076d-39ee-45ad-9ba5-435115cf5d4f,2b94076d-39ee-45ad-9ba5-435115cf5d4f,1,0,72ace16c-e90a-4d05-bc23-4351d4c87683,72ace16c-e90a-4d05-bc23-4351d4c87683,1,0,bd86e378-84bb-486a-be7b-319a3fe3b70b,bd86e378-84bb-486a-be7b-319a3fe3b70b,1,0,ef3bc279-6721-4949-8dc0-f96141f7f05c,ef3bc279-6721-4949-8dc0-f96141f7f05c,1,0,f81c7e21-48ad-4b64-975d-e62d34c7235a,f81c7e21-48ad-4b64-975d-e62d34c7235a,1,0,d0523c14-585e-45d3-9735-891235631004,d0523c14-585e-45d3-9735-891235631004,1,0,b6f8bc3e-f0cd-43ef-b060-d701cd446197,b6f8bc3e-f0cd-43ef-b060-d701cd446197,1,0,4f10e5f9-6cfd-4fa9-9c72-d19a484a796c,4f10e5f9-6cfd-4fa9-9c72-d19a484a796c,1,0,b94e805f-e1ab-4870-b855-98aa401864b2,b94e805f-e1ab-4870-b855-98aa401864b2,1,0,ff8eedeb-fc3e-4bee-852b-6da6d59ff38c,ff8eedeb-fc3e-4bee-852b-6da6d59ff38c,1,0,a98bd18f-ccda-41a2-a1b2-8b37cc1f6c36,a98bd18f-ccda-41a2-a1b2-8b37cc1f6c36,1,0,62f9fe19-3d64-4506-a0bc-dbfe47b4df64,62f9fe19-3d64-4506-a0bc-dbfe47b4df64,1,0,45af8f5d-d505-466b-a798-19f2219a180c,45af8f5d-d505-466b-a798-19f2219a180c,1,0,8a8229bc-f70a-4434-bacc-8a81fc58154b,8a8229bc-f70a-4434-bacc-8a81fc58154b,1,0,6324ad14-82ca-467b-b6b7-8d5f6049ca65,6324ad14-82ca-467b-b6b7-8d5f6049ca65,1,0,273446f0-f28b-4ce2-874c-3c6a57299b71,273446f0-f28b-4ce2-874c-3c6a57299b71,1,0,eb2f7449-ee42-43ec-b59c-3e07a6e3c139,eb2f7449-ee42-43ec-b59c-3e07a6e3c139,1,0,f8a7913a-2c64-47e1-8ae9-622fc6e9477e,f8a7913a-2c64-47e1-8ae9-622fc6e9477e,1,0,9b46a2b4-223d-4527-a94e-37ecd4fe72d7,9b46a2b4-223d-4527-a94e-37ecd4fe72d7,1,0,7a4e17bf-3649-4982-a9c6-5982390f1f1d,7a4e17bf-3649-4982-a9c6-5982390f1f1d,1,0,722be6e0-2698-431b-9206-777a36e6742f,722be6e0-2698-431b-9206-777a36e6742f,1,0,75bb0122-26bd-40be-8de8-7a57680c85ae,75bb0122-26bd-40be-8de8-7a57680c85ae,1,0,5e22429f-9ec0-4943-bf80-1becc4b8e5cb,5e22429f-9ec0-4943-bf80-1becc4b8e5cb,1,0,0153e60e-daca-48ac-b1c6-adecc89f579e,0153e60e-daca-48ac-b1c6-adecc89f579e,1,0,1ed4cf25-19f0-49f5-96a0-0ffe13adfe35,1ed4cf25-19f0-49f5-96a0-0ffe13adfe35,1,0,a896bc34-30a6-48b6-acfc-786c24c186bd,a896bc34-30a6-48b6-acfc-786c24c186bd,1,0,3867f4cb-bf54-42fb-8ea6-ca51d7cd6c91,3867f4cb-bf54-42fb-8ea6-ca51d7cd6c91,1,0,da8ae00a-7207-4ceb-b739-9114888c5b27,da8ae00a-7207-4ceb-b739-9114888c5b27,1,0,a6be80f7-d6aa-4371-a180-3d355080d849,a6be80f7-d6aa-4371-a180-3d355080d849,1,0,b37722c3-e29f-4a40-b4eb-0317919fc7a5,b37722c3-e29f-4a40-b4eb-0317919fc7a5,1,0,b1b1cd90-094d-428b-a6bc-156521c1c54d,b1b1cd90-094d-428b-a6bc-156521c1c54d,1,0,4f79ef7c-79be-4a69-acc0-bd591c712d03,4f79ef7c-79be-4a69-acc0-bd591c712d03,1,0,a0dd2129-d3a1-4bca-b555-72b065be1c13,a0dd2129-d3a1-4bca-b555-72b065be1c13,1,0,dc5e8229-e301-477c-846e-2e7078e3ee5f,dc5e8229-e301-477c-846e-2e7078e3ee5f,1,0,24836e44-8fdd-44bd-91d8-4ddab2caf485,24836e44-8fdd-44bd-91d8-4ddab2caf485,1,0,3727bcfe-4d75-4270-86e7-4a66ab14866c,3727bcfe-4d75-4270-86e7-4a66ab14866c,1,0,870a4708-0b5a-4fa3-9978-d94b161d289a,870a4708-0b5a-4fa3-9978-d94b161d289a,1,0,30e9f89d-7b94-488e-9963-886c271b1af7,30e9f89d-7b94-488e-9963-886c271b1af7,1,0,91af7a52-0825-4af5-94df-cc501e0123cd,91af7a52-0825-4af5-94df-cc501e0123cd,1,0,1c2cc78a-2ae6-4996-a743-7b55aecbe84c,1c2cc78a-2ae6-4996-a743-7b55aecbe84c,1,0,9292bf81-5668-4d52-a4ec-a93bc4b0ad3b,9292bf81-5668-4d52-a4ec-a93bc4b0ad3b,1,0,9693cc78-852e-445b-a7d2-f1689fa9eeec,9693cc78-852e-445b-a7d2-f1689fa9eeec,1,0,eb33e555-db41-462a-a45d-c7e0945cece8,eb33e555-db41-462a-a45d-c7e0945cece8,1,0,9cfd517c-1008-483a-9f65-7d15feb2cefc,9cfd517c-1008-483a-9f65-7d15feb2cefc,1,0,d66adc5e-25a3-472e-b0a4-5f22f88d7a0f,d66adc5e-25a3-472e-b0a4-5f22f88d7a0f,1,0,ae48d48f-cd39-4821-a4b7-9394b2a77ef6,ae48d48f-cd39-4821-a4b7-9394b2a77ef6,1,0,f34d3a69-533e-49df-b91d-f7f7f49c5fb1,f34d3a69-533e-49df-b91d-f7f7f49c5fb1,1,0,1d76f613-f4f6-4772-8c16-d97b3104a553,1d76f613-f4f6-4772-8c16-d97b3104a553,1,0,3e58d607-b906-449f-b044-9c130a487b86,3e58d607-b906-449f-b044-9c130a487b86,1,0,7a911212-7fde-4ea8-a1fa-229116b60895,7a911212-7fde-4ea8-a1fa-229116b60895,1,0,f4580043-5bc2-4295-8523-909302009b44,f4580043-5bc2-4295-8523-909302009b44,1,0,dc8af632-a5a4-4270-ba5f-2d3ba506f7e3,dc8af632-a5a4-4270-ba5f-2d3ba506f7e3,1,0,81936ac2-32fe-4e14-897b-0aba92b90c05,81936ac2-32fe-4e14-897b-0aba92b90c05,1,0,9f88e355-3f8f-4fcd-b45f-39c3d45490f5,9f88e355-3f8f-4fcd-b45f-39c3d45490f5,1,0,2e233e3c-687c-4516-87c6-5d6c5f9f04a2,2e233e3c-687c-4516-87c6-5d6c5f9f04a2,1,0,2afdcde7-46ef-4624-8b84-c6381ff2f3a4,2afdcde7-46ef-4624-8b84-c6381ff2f3a4,1,0,2d279d24-1953-4a2f-8206-77481d2fd718,2d279d24-1953-4a2f-8206-77481d2fd718,1,0,aa6abffe-1b09-48f9-9aee-4f234db6b2a2,aa6abffe-1b09-48f9-9aee-4f234db6b2a2,1,0,0a920200-77d0-42ea-abf6-0d40d63289b0,0a920200-77d0-42ea-abf6-0d40d63289b0,1,0,c850bafc-4073-44ef-b148-194f87c46f0e,c850bafc-4073-44ef-b148-194f87c46f0e,1,0,6d1dd726-815d-476e-b668-95cff4182e54,6d1dd726-815d-476e-b668-95cff4182e54,1,0,12f4a0ed-4798-4467-8834-de3eb385e22d,12f4a0ed-4798-4467-8834-de3eb385e22d,1,0,5710809e-4c41-42ab-952f-f7778fe9be0f,5710809e-4c41-42ab-952f-f7778fe9be0f,1,0,0811f6c2-6bb3-43b8-9944-910adc4c6f23,0811f6c2-6bb3-43b8-9944-910adc4c6f23,1,0,c1646df4-9fce-44f0-9cc3-a5dab0bbef2e,c1646df4-9fce-44f0-9cc3-a5dab0bbef2e,1,0,c86b02ab-3532-4f4c-b993-e237ed0d4d12,c86b02ab-3532-4f4c-b993-e237ed0d4d12,1,0,ac028c56-b2a8-4a9b-a325-554c636f838e,ac028c56-b2a8-4a9b-a325-554c636f838e,1,0,0ed85f4c-c002-49b6-99b9-0c3c4b7f940e,0ed85f4c-c002-49b6-99b9-0c3c4b7f940e,1,0,f99e98ac-cd94-4989-8c02-ef8b323c6815,f99e98ac-cd94-4989-8c02-ef8b323c6815,1,0,e2562347-4549-4111-862e-86c20a6daade,e2562347-4549-4111-862e-86c20a6daade,1,0,b270fc64-15c6-41ed-ad09-44c833ca7c41,b270fc64-15c6-41ed-ad09-44c833ca7c41,1,0,4c3312fd-5613-4e9b-ae7c-572fa1887ded,4c3312fd-5613-4e9b-ae7c-572fa1887ded,1,0,6c8c9618-287a-41ab-890c-60250925ad52,6c8c9618-287a-41ab-890c-60250925ad52,1,0,55b9650e-098b-4d44-9fb5-d525b46f014b,55b9650e-098b-4d44-9fb5-d525b46f014b,1,0,5b7b32ec-3d0e-42e9-bd13-5d2b8cc1942d,5b7b32ec-3d0e-42e9-bd13-5d2b8cc1942d,1,0,bc55dc06-a769-40be-9c99-0794bdd2dbea,bc55dc06-a769-40be-9c99-0794bdd2dbea,1,0,feb5f490-e791-11e6-508c-a8667f21fde4,feb5f490-e791-11e6-508c-a8667f21fde4,1,0,7861e179-96d2-422f-a7c2-b38b59074956,7861e179-96d2-422f-a7c2-b38b59074956,1,0,0b2416bc-f322-45b3-8c3f-2c8a206c55a1,0b2416bc-f322-45b3-8c3f-2c8a206c55a1,1,0,6962f838-e792-11e6-508c-a8667f21fde4,6962f838-e792-11e6-508c-a8667f21fde4,1,0,3797b4c6-e336-4cbe-8d0b-0902e1247b42,3797b4c6-e336-4cbe-8d0b-0902e1247b42,1,0,67ebc493-d29a-4614-890a-feb8b5bd884b,67ebc493-d29a-4614-890a-feb8b5bd884b,1,0,dc79e5e2-37d1-4f19-9500-15c1d9be10eb,dc79e5e2-37d1-4f19-9500-15c1d9be10eb,1,0,dba6cb38-79c6-4060-87c5-a993548f36c4,dba6cb38-79c6-4060-87c5-a993548f36c4,1,0,6b44227a-e226-4bcb-8638-06b49f830669,6b44227a-e226-4bcb-8638-06b49f830669,1,0,f2406400-87e9-4df2-bcd3-8f1e3ad62088,f2406400-87e9-4df2-bcd3-8f1e3ad62088,1,0,4f2b6bf8-e792-11e6-508c-a8667f21fde4,4f2b6bf8-e792-11e6-508c-a8667f21fde4,1,0,ecaacedb-bf2d-4736-a9e1-fa89cda85ee6,ecaacedb-bf2d-4736-a9e1-fa89cda85ee6,1,0,a5623e87-3102-4521-b4ab-c41bf2403a1a,a5623e87-3102-4521-b4ab-c41bf2403a1a,1,0,599b1692-5f4e-42ef-ae1a-822ff527a415,599b1692-5f4e-42ef-ae1a-822ff527a415,1,0,ee9abe8a-b3a2-48a9-9157-ea537e83b7e7,ee9abe8a-b3a2-48a9-9157-ea537e83b7e7,1,0,4bb7372a-87a9-426e-b09f-fc0110455b10,4bb7372a-87a9-426e-b09f-fc0110455b10,1,0,ac853a0f-c185-4cdb-9f09-c921770937b5,ac853a0f-c185-4cdb-9f09-c921770937b5,1,0,920a7940-4d12-476d-a909-2231787839a9,920a7940-4d12-476d-a909-2231787839a9,1,0,168fce48-2413-45fc-ad21-9b465121d81b,168fce48-2413-45fc-ad21-9b465121d81b,1,0,d65c8992-aabc-4b67-9893-01862231ebe1,d65c8992-aabc-4b67-9893-01862231ebe1,1,0,23f70675-6a05-4b50-ad68-c55ddc93e857,23f70675-6a05-4b50-ad68-c55ddc93e857,1,0,b3aeeb3c-622d-4e0c-8c13-199f0e431a7d,b3aeeb3c-622d-4e0c-8c13-199f0e431a7d,1,0,ad14c4d1-bc11-44b6-a32c-c00fb89a9ea5,ad14c4d1-bc11-44b6-a32c-c00fb89a9ea5,1,0,32eb2a75-ff35-4795-bf0c-12b1328441ee,32eb2a75-ff35-4795-bf0c-12b1328441ee,1,0,8e877990-a64c-4c45-91f1-007d47618cc7,8e877990-a64c-4c45-91f1-007d47618cc7,1,0,73c6640e-2fe6-4132-9237-d6f28cbacc1c,73c6640e-2fe6-4132-9237-d6f28cbacc1c,1,0,69489064-c131-4618-b31f-e6964d593f4a,69489064-c131-4618-b31f-e6964d593f4a,1,0,1731708f-53cb-4b00-b90e-f581b4baa845,1731708f-53cb-4b00-b90e-f581b4baa845,1,0,d4b0feca-c00a-4d48-9f23-d92277ea6483,d4b0feca-c00a-4d48-9f23-d92277ea6483,1,0,00b2a0b3-6af8-4ea4-aa38-d1e078d5cbff,00b2a0b3-6af8-4ea4-aa38-d1e078d5cbff,1,0,20f7fdd2-30f6-4a52-a63b-7d2c326c0e83,20f7fdd2-30f6-4a52-a63b-7d2c326c0e83,1,0,23cb5bc2-9638-4d1c-b4bc-d5297e271570,23cb5bc2-9638-4d1c-b4bc-d5297e271570,1,0,6e547ccb-6d5a-4f7c-aaf0-568c22d2c276,6e547ccb-6d5a-4f7c-aaf0-568c22d2c276,1,0,04b7389d-697d-4b0d-a239-ac8c674cc46f,04b7389d-697d-4b0d-a239-ac8c674cc46f,1,0,a1cf5173-2e86-4ed7-9a0b-1bd5e578326a,a1cf5173-2e86-4ed7-9a0b-1bd5e578326a,1,0,864cad61-8280-415d-8fe1-bcb39d56670a,864cad61-8280-415d-8fe1-bcb39d56670a,1,0,b106bd29-5dc7-44d7-94d0-00f61499392e,b106bd29-5dc7-44d7-94d0-00f61499392e,1,0,a4febff8-0566-4977-bf55-1d574568fe9f,a4febff8-0566-4977-bf55-1d574568fe9f,1,0,5199cc65-bed1-40b9-96fe-cf6d855a8b91,5199cc65-bed1-40b9-96fe-cf6d855a8b91,1,0,f518add9-5c26-4dac-ab2e-b30fe3fbd347,f518add9-5c26-4dac-ab2e-b30fe3fbd347,1,0,23f53317-7aa8-4816-8a69-3d39d5e76da0,23f53317-7aa8-4816-8a69-3d39d5e76da0,1,0,9ade5155-fa6d-4999-b019-a5e7e235a158,9ade5155-fa6d-4999-b019-a5e7e235a158,1,0,8b302c5e-b255-4cb5-94d9-0dfef4250097,8b302c5e-b255-4cb5-94d9-0dfef4250097,1,0,08eb74b6-1e1c-4004-a0f8-b6f1fdfc68ef,08eb74b6-1e1c-4004-a0f8-b6f1fdfc68ef,1,0,49d713b8-6a61-4bd1-9650-0de1869967d2,49d713b8-6a61-4bd1-9650-0de1869967d2,1,0,4738ffd0-3c3b-4e5f-8773-0c9a80efdfbf,4738ffd0-3c3b-4e5f-8773-0c9a80efdfbf,1,0,bd0e4aeb-19f9-48fc-b838-38d785004360,bd0e4aeb-19f9-48fc-b838-38d785004360,1,0,3d1bae2a-4dfd-48e5-bfe9-b7e30c8475f6,3d1bae2a-4dfd-48e5-bfe9-b7e30c8475f6,1,0,0f2ec7ac-6d3f-4fcf-af3d-b0bfaa187a4b,0f2ec7ac-6d3f-4fcf-af3d-b0bfaa187a4b,1,0,6d351276-2c04-4198-a3e4-865881c12f5c,6d351276-2c04-4198-a3e4-865881c12f5c,1,0,73b1d2e2-0eeb-45dc-8ca3-3bda594d6823,73b1d2e2-0eeb-45dc-8ca3-3bda594d6823,1,0,5c4abd61-2f29-499e-a2ca-d133e9eeeaea,5c4abd61-2f29-499e-a2ca-d133e9eeeaea,1,0,0ddeed48-b98a-47c3-84a2-2eac065be06c,0ddeed48-b98a-47c3-84a2-2eac065be06c,1,0,7987fe2c-d7cc-4fd2-ac4e-610bfb1ab6d2,7987fe2c-d7cc-4fd2-ac4e-610bfb1ab6d2,1,0,fc18d95e-a51d-45c0-83b0-09aeb2b5b03a,fc18d95e-a51d-45c0-83b0-09aeb2b5b03a,1,0,61b947a5-edca-43ca-82c4-5a7b529d8f82,61b947a5-edca-43ca-82c4-5a7b529d8f82,1,0,59eb6a7a-1d96-4985-8d8e-575162759415,59eb6a7a-1d96-4985-8d8e-575162759415,1,0,68564573-ed49-4519-a8b3-997865fe70a6,68564573-ed49-4519-a8b3-997865fe70a6,1,0,6c789969-d066-489d-ad88-92e2a5a6ec69,6c789969-d066-489d-ad88-92e2a5a6ec69,1,0,2a07d696-75d6-4a12-a310-30d6598b4a4c,2a07d696-75d6-4a12-a310-30d6598b4a4c,1,0,dde88f56-417c-4559-a893-85dc91e7e623,dde88f56-417c-4559-a893-85dc91e7e623,1,0,963eedab-6976-4a98-b9ad-b81f89239661,963eedab-6976-4a98-b9ad-b81f89239661,1,0,3370d43e-8e97-4411-8123-2bb2bcf60a75,3370d43e-8e97-4411-8123-2bb2bcf60a75,1,0,d9d377c9-406f-4bc9-8076-1f049348b816,d9d377c9-406f-4bc9-8076-1f049348b816,1,0,dcfcb108-3761-43d9-ad2a-29633bd1ae47,dcfcb108-3761-43d9-ad2a-29633bd1ae47,1,0,afde7867-15d3-43fa-b439-6d9e40df580b,afde7867-15d3-43fa-b439-6d9e40df580b,1,0,a676ff94-a0d1-4de9-8690-ec67f2c891d8,a676ff94-a0d1-4de9-8690-ec67f2c891d8,1,0,012bf716-3672-462e-b390-7bb4384ab4b1,012bf716-3672-462e-b390-7bb4384ab4b1,1,0,65342599-ff37-4f99-8e40-f05d87403bcf,65342599-ff37-4f99-8e40-f05d87403bcf,1,0,3a3f505a-7a50-4111-8029-5b9057fed232,3a3f505a-7a50-4111-8029-5b9057fed232,1,0,36baa776-83c4-413d-b70c-cbbc45e25662,36baa776-83c4-413d-b70c-cbbc45e25662,1,0,b65f9165-c20d-4053-8a0b-cff3f693b762,b65f9165-c20d-4053-8a0b-cff3f693b762,1,0,51af096b-687f-44f4-a0d8-306f670fc5ce,51af096b-687f-44f4-a0d8-306f670fc5ce,1,0,75972f88-aedd-4338-a3b5-320cd632a2e6,75972f88-aedd-4338-a3b5-320cd632a2e6,1,0,1363523a-929e-49ac-ae39-d43acf9f0478,1363523a-929e-49ac-ae39-d43acf9f0478,1,0,f6ff0bb8-c1fd-4eae-b919-6d10d4504f0c,f6ff0bb8-c1fd-4eae-b919-6d10d4504f0c,1,0,2876c476-8280-426d-8bf9-c93beda0ddd5,2876c476-8280-426d-8bf9-c93beda0ddd5,1,0,963e0813-4f6b-4d31-b66d-77125c47ce19,963e0813-4f6b-4d31-b66d-77125c47ce19,1,0,a720abc8-dcf0-4684-8d94-22d394a8e4df,a720abc8-dcf0-4684-8d94-22d394a8e4df,1,0,e40f53de-c27b-4e74-8241-f784d7ca5c84,e40f53de-c27b-4e74-8241-f784d7ca5c84,1,0,ef38b84d-277e-48c2-8826-330132eb6807,ef38b84d-277e-48c2-8826-330132eb6807,1,0,67a50910-059a-4724-84e0-c21bc3ac74c2,67a50910-059a-4724-84e0-c21bc3ac74c2,1,0,fdd83a89-a2fe-40d8-a531-a10bfeb36a1d,fdd83a89-a2fe-40d8-a531-a10bfeb36a1d,1,0,0d190f8b-87c5-4dd1-bcfb-609ec3a44f72,0d190f8b-87c5-4dd1-bcfb-609ec3a44f72,1,0,9e78a2b9-44fc-4971-801d-1ddd4bb09cfd,9e78a2b9-44fc-4971-801d-1ddd4bb09cfd,1,0,2c0d11fc-b927-4b5d-a16c-d60e69580824,2c0d11fc-b927-4b5d-a16c-d60e69580824,1,0,5251e744-666e-48a0-a5b4-9cef313c7631,5251e744-666e-48a0-a5b4-9cef313c7631,1,0,ebedc283-5eb0-459b-b686-f8643666b8b8,ebedc283-5eb0-459b-b686-f8643666b8b8,1,0,6a6afffd-cfed-4801-8b59-34d27e46565c,6a6afffd-cfed-4801-8b59-34d27e46565c,1,0,a469b12d-4537-419c-91e0-37abc9d31505,a469b12d-4537-419c-91e0-37abc9d31505,1,0,6f312bda-1f4d-48a6-bd95-f23f34f0ea4b,6f312bda-1f4d-48a6-bd95-f23f34f0ea4b,1,0,82c42232-531e-403f-8599-cc21a248fa2c,82c42232-531e-403f-8599-cc21a248fa2c,1,0,9104b791-9ac4-41ba-a7f0-9e609db3b578,9104b791-9ac4-41ba-a7f0-9e609db3b578,1,0,2d3721d1-816f-4e84-9df1-863cb269d83d,2d3721d1-816f-4e84-9df1-863cb269d83d,1,0,73554821-8ab5-44ab-a593-37ca10a1b777,73554821-8ab5-44ab-a593-37ca10a1b777,1,0,d5a98e02-e199-445e-8d53-11acd07f473f,d5a98e02-e199-445e-8d53-11acd07f473f,1,0,79db55d6-e916-4bde-b417-7d0a53bb85af,79db55d6-e916-4bde-b417-7d0a53bb85af,1,0,3084fb99-59cb-4338-ae37-0b1e8b333f01,3084fb99-59cb-4338-ae37-0b1e8b333f01,1,0,818a1fbf-17c1-44f9-8e20-27d4ceda549c,818a1fbf-17c1-44f9-8e20-27d4ceda549c,1,0,959a5d25-03e5-4911-bbb7-b93714db7eed,959a5d25-03e5-4911-bbb7-b93714db7eed,1,0,1d0b6a8d-9351-4ce2-85dd-6ac508c660c2,1d0b6a8d-9351-4ce2-85dd-6ac508c660c2,1,0,0b09cf2f-1759-4362-b997-29e09ac00445,0b09cf2f-1759-4362-b997-29e09ac00445,1,0,f6a9eb9c-a1c2-4114-b155-3ce94c7b7f20,f6a9eb9c-a1c2-4114-b155-3ce94c7b7f20,1,0,828ddf5d-ca09-4baf-897f-77d569e02a6b,828ddf5d-ca09-4baf-897f-77d569e02a6b,1,0,8856015c-a695-4b1a-99ef-770263f9dc4a,8856015c-a695-4b1a-99ef-770263f9dc4a,1,0,183ec2b5-e173-4885-9e26-1098ffa15020,183ec2b5-e173-4885-9e26-1098ffa15020,1,0,74702fdf-bfc5-4658-ba58-e39bcfbaa647,74702fdf-bfc5-4658-ba58-e39bcfbaa647,1,0,2f436ec3-6a04-4d2c-998a-c60ea875ca86,2f436ec3-6a04-4d2c-998a-c60ea875ca86,1,0,6a947b2d-3e6b-42c8-a9fd-4c5a71d600a9,6a947b2d-3e6b-42c8-a9fd-4c5a71d600a9,1,0,ae641a80-4ada-4592-ace9-29a82e6700e4,ae641a80-4ada-4592-ace9-29a82e6700e4,1,0,f0b0608c-178f-4dea-b461-0d8f00d79d30,f0b0608c-178f-4dea-b461-0d8f00d79d30,1,0,ed2dba0c-7fe3-4d24-b6a6-b104beadc286,ed2dba0c-7fe3-4d24-b6a6-b104beadc286,1,0,a4c98768-c9fc-4f95-b89b-bb1cb0e8fade,a4c98768-c9fc-4f95-b89b-bb1cb0e8fade,1,0,5546b9a9-a4fe-4a2b-9492-883bcb37a210,5546b9a9-a4fe-4a2b-9492-883bcb37a210,1,0,6fb76c5f-844f-4cbc-ae7c-4ac834fddfc9,6fb76c5f-844f-4cbc-ae7c-4ac834fddfc9,1,0,275a5772-8428-497a-81ef-c919f15fcccd,275a5772-8428-497a-81ef-c919f15fcccd,1,0,8df6e7e6-2a1e-4cf3-bdc9-60e52ea3f625,8df6e7e6-2a1e-4cf3-bdc9-60e52ea3f625,1,0,bf070420-9eb7-4372-96a6-b0d00ac3ce8c,bf070420-9eb7-4372-96a6-b0d00ac3ce8c,1,0,10336352-f3a1-4bc3-bdec-1a2eef15f176,10336352-f3a1-4bc3-bdec-1a2eef15f176,1,0,cacabf2f-6d1c-4c33-80c7-c27a5e757cc9,cacabf2f-6d1c-4c33-80c7-c27a5e757cc9,1,0,3b7c713e-81ae-4adc-9519-99c936599ef7,3b7c713e-81ae-4adc-9519-99c936599ef7,1,0,1c8ffbbd-035c-45cf-8ec8-dc5d26d7f673,1c8ffbbd-035c-45cf-8ec8-dc5d26d7f673,1,0,ecda2c4b-6411-4b47-ab59-1918bad5acdd,ecda2c4b-6411-4b47-ab59-1918bad5acdd,1,0,a9a05a66-0a1c-4e53-9d09-1abe8f45e354,a9a05a66-0a1c-4e53-9d09-1abe8f45e354,1,0,2c811ee8-f50d-4c39-82ee-0492feb1c431,2c811ee8-f50d-4c39-82ee-0492feb1c431,1,0,399f679b-f48a-4d4e-b890-5eab9e4598c3,399f679b-f48a-4d4e-b890-5eab9e4598c3,1,0,da9ca4c4-c291-4f8b-accd-bc1b123ed4f8,da9ca4c4-c291-4f8b-accd-bc1b123ed4f8,1,0,9ad1ea04-1aee-4a80-b4df-60526cdf3ad0,9ad1ea04-1aee-4a80-b4df-60526cdf3ad0,1,0,190bc52e-0d51-4dfc-9f16-99ed71ebfa75,190bc52e-0d51-4dfc-9f16-99ed71ebfa75,1,0,0c24858a-7e64-426f-9b59-392449aecaf5,0c24858a-7e64-426f-9b59-392449aecaf5,1,0,b1d61e28-f3dc-418b-b5df-f75622a4b980,b1d61e28-f3dc-418b-b5df-f75622a4b980,1,0,bec4c82f-4e76-4d16-bb4d-b6d9fa404c5d,bec4c82f-4e76-4d16-bb4d-b6d9fa404c5d,1,0,4033f86b-d250-475a-8837-071bf31664b0,4033f86b-d250-475a-8837-071bf31664b0,1,0,876e31ff-ab7b-4ea4-b491-161963727dd1,876e31ff-ab7b-4ea4-b491-161963727dd1,1,0,bb43995b-68b4-41a1-8458-e10a2d8925f1,bb43995b-68b4-41a1-8458-e10a2d8925f1,1,0,61730dd9-fed7-43ce-8f38-724cac8f3d08,61730dd9-fed7-43ce-8f38-724cac8f3d08,1,0,e6a494b8-27e7-46a6-9435-7be6e150a69e,e6a494b8-27e7-46a6-9435-7be6e150a69e,1,0,133dc852-59d3-4351-934d-8845f8a38431,133dc852-59d3-4351-934d-8845f8a38431,1,0,55dbaaf1-554d-46e2-b42a-ce6a8bf20dfb,55dbaaf1-554d-46e2-b42a-ce6a8bf20dfb,1,0,b67914a8-d483-4bed-bd4d-a4aadd4998a4,b67914a8-d483-4bed-bd4d-a4aadd4998a4,1,0,707a8a49-fec5-454c-9e80-c3da829d395c,707a8a49-fec5-454c-9e80-c3da829d395c,1,0,b5ea4aff-11be-4232-94a2-cb92801b6c49,b5ea4aff-11be-4232-94a2-cb92801b6c49,1,0,6f630213-c16c-421c-a160-09e3c729ab26,6f630213-c16c-421c-a160-09e3c729ab26,1,0,878c638c-7c84-4914-896a-d4fdf0d759ef,878c638c-7c84-4914-896a-d4fdf0d759ef,1,0,6065653e-b7a9-4033-9617-f64430c57d89,6065653e-b7a9-4033-9617-f64430c57d89,1,0,9ec63da6-1f53-417f-9c7d-6879eaa56a7e,9ec63da6-1f53-417f-9c7d-6879eaa56a7e,1,0,00d1d85b-c258-4f10-9d13-a99375a29fc1,00d1d85b-c258-4f10-9d13-a99375a29fc1,1,0,0544376f-461c-42c3-a102-e0ae65e3c0c6,0544376f-461c-42c3-a102-e0ae65e3c0c6,1,0,6df8d316-6ac3-4626-8951-1ad36d7049ed,6df8d316-6ac3-4626-8951-1ad36d7049ed,1,0,f211b418-899d-4220-a14b-4a7302183e46,f211b418-899d-4220-a14b-4a7302183e46,1,0,e499629a-69ed-46b4-be5d-7b1f2f6a11d4,e499629a-69ed-46b4-be5d-7b1f2f6a11d4,1,0,52ab6aea-e6a0-43f0-9cc8-f7c9126635cc,52ab6aea-e6a0-43f0-9cc8-f7c9126635cc,1,0,876b23bf-2f48-4916-ad0f-4de8306e1864,876b23bf-2f48-4916-ad0f-4de8306e1864,1,0,e983f539-e369-491e-9cee-510518187870,e983f539-e369-491e-9cee-510518187870,1,0,9a402a9c-a31f-4082-91d5-b4fe7576a5c2,9a402a9c-a31f-4082-91d5-b4fe7576a5c2,1,0,e99a1b17-0e37-489a-bc39-3dd2e23b0861,e99a1b17-0e37-489a-bc39-3dd2e23b0861,1,0,e7c63a25-c804-4bc4-a6f1-81009dd889e2,e7c63a25-c804-4bc4-a6f1-81009dd889e2,1,0,7ccd86cd-4294-4f6c-84f4-98e25e479f4d,7ccd86cd-4294-4f6c-84f4-98e25e479f4d,1,0,70e710c5-42df-465f-a9c5-8345c87e1f19,70e710c5-42df-465f-a9c5-8345c87e1f19,1,0,4c1576c4-b327-4ec1-87bc-662c5aba343b,4c1576c4-b327-4ec1-87bc-662c5aba343b,1,0,0f694ef1-4a97-4aed-ab4b-0b2c18ea7e17,0f694ef1-4a97-4aed-ab4b-0b2c18ea7e17,1,0,14facdfb-9835-4bb6-98a8-5a6ca9a5d2f8,14facdfb-9835-4bb6-98a8-5a6ca9a5d2f8,1,0,4492ac73-eb91-41f8-98f1-54c2b3ad212a,4492ac73-eb91-41f8-98f1-54c2b3ad212a,1,0,869b43fb-968f-4fe0-b945-5030c90a38f2,869b43fb-968f-4fe0-b945-5030c90a38f2,1,0,af071a52-212b-4131-98e6-81f6048a70e6,af071a52-212b-4131-98e6-81f6048a70e6,1,0,37210dde-9a2f-475c-8341-578ac99f0e17,37210dde-9a2f-475c-8341-578ac99f0e17,1,0,e5094d4f-ee61-4142-a97b-d96172350f65,e5094d4f-ee61-4142-a97b-d96172350f65,1,0,3a8fffb6-a732-440c-afb9-d1c699ea53b6,3a8fffb6-a732-440c-afb9-d1c699ea53b6,1,0,b0650787-8ff5-4407-b491-bcdc2f61fd58,b0650787-8ff5-4407-b491-bcdc2f61fd58,1,0,33dd6bba-0044-4e2f-ae9e-c8a26079ab2a,33dd6bba-0044-4e2f-ae9e-c8a26079ab2a,1,0,3f289f67-dfc7-4f2d-90e4-b47aff76ecdb,3f289f67-dfc7-4f2d-90e4-b47aff76ecdb,1,0,9aadad98-69f5-41ce-ad1c-0afd8c610d86,9aadad98-69f5-41ce-ad1c-0afd8c610d86,1,0,706a3db0-9d4f-4c08-91cd-3ccaa6d06d3b,706a3db0-9d4f-4c08-91cd-3ccaa6d06d3b,1,0,3d662173-e19d-4077-9a08-8c8899226e24,3d662173-e19d-4077-9a08-8c8899226e24,1,0,69fd1e6e-7302-4ca8-8419-ec567ae66bef,69fd1e6e-7302-4ca8-8419-ec567ae66bef,1,0,0eee931a-57bb-4844-8e6e-eaca342640a0,0eee931a-57bb-4844-8e6e-eaca342640a0,1,0,20c57e30-5856-4801-9e77-8006471d89f8,20c57e30-5856-4801-9e77-8006471d89f8,1,0,64eff9f4-c57b-40a0-bd83-7e371fd010ce,64eff9f4-c57b-40a0-bd83-7e371fd010ce,1,0,4a3fe393-8aea-4394-8c10-a234f1f191ad,4a3fe393-8aea-4394-8c10-a234f1f191ad,1,0,6f9a3d00-d935-4fa6-9fd2-14700226daff,6f9a3d00-d935-4fa6-9fd2-14700226daff,1,0,d792831c-698d-40c6-96c2-dd0ae6f30707,d792831c-698d-40c6-96c2-dd0ae6f30707,1,0,a1d91c5f-1acd-4b46-887e-d06e7260dd20,a1d91c5f-1acd-4b46-887e-d06e7260dd20,1,0,3fd26019-c464-4c73-b18e-0888740b1747,3fd26019-c464-4c73-b18e-0888740b1747,1,0,a21989bd-a57f-4969-be3b-d8b39ead4145,a21989bd-a57f-4969-be3b-d8b39ead4145,1,0,c4aee120-cdbb-4b48-a1c7-99cccbafb120,c4aee120-cdbb-4b48-a1c7-99cccbafb120,1,0,6b3e07d5-9299-4933-b3fa-c3cc5f5aa7c9,6b3e07d5-9299-4933-b3fa-c3cc5f5aa7c9,1,0,a3667b25-7c18-446d-a318-685a4fe4bf89,a3667b25-7c18-446d-a318-685a4fe4bf89,1,0,fd271670-bde6-4351-abec-eb82548c6c98,fd271670-bde6-4351-abec-eb82548c6c98,1,0,498b012b-bb63-490e-8100-1d33dc84b400,498b012b-bb63-490e-8100-1d33dc84b400,1,0,8103f12c-ed50-4052-8117-33b6d11ef620,8103f12c-ed50-4052-8117-33b6d11ef620,1,0,4f8653e4-3f58-4bad-8ded-424fe7b1d18a,4f8653e4-3f58-4bad-8ded-424fe7b1d18a,1,0,799b3dda-fbfc-4dea-a577-30321e64f4d5,799b3dda-fbfc-4dea-a577-30321e64f4d5,1,0,7c7857b6-90e8-4b3f-9902-fd81bf68d133,7c7857b6-90e8-4b3f-9902-fd81bf68d133,1,0,617de19c-bf01-4900-832a-c169e9faeb79,617de19c-bf01-4900-832a-c169e9faeb79,1,0,70b73fd0-f5dc-411e-9bbb-10a538e8281b,70b73fd0-f5dc-411e-9bbb-10a538e8281b,1,0,758f44ad-54da-4f72-accf-0afecc4f4827,758f44ad-54da-4f72-accf-0afecc4f4827,1,0,05ee4a7c-63e6-4587-8be7-e206345e3471,05ee4a7c-63e6-4587-8be7-e206345e3471,1,0,98d5e98b-0382-4b28-a5d9-24392925664a,98d5e98b-0382-4b28-a5d9-24392925664a,1,0,7c424a77-2a83-4a85-8b7d-e8bb6d013c77,7c424a77-2a83-4a85-8b7d-e8bb6d013c77,1,0,2a77eb39-0487-4fb0-8d5b-d4a27592ea60,2a77eb39-0487-4fb0-8d5b-d4a27592ea60,1,0,19a18193-c5d3-4e56-86c5-5a81c525e9ad,19a18193-c5d3-4e56-86c5-5a81c525e9ad,1,0,c208fcc0-d7b2-435b-963a-e18c97727f8f,c208fcc0-d7b2-435b-963a-e18c97727f8f,1,0,ac5db038-8bc3-45ff-9e8d-04ea9fef6d43,ac5db038-8bc3-45ff-9e8d-04ea9fef6d43,1,0,bf11f7b1-6332-4499-ba48-b94bc10ef869,bf11f7b1-6332-4499-ba48-b94bc10ef869,1,0,479d9428-02fd-47d2-a869-a3695b315724,479d9428-02fd-47d2-a869-a3695b315724,1,0,838b4840-86e3-4bf3-8b95-1e58ef60e97a,838b4840-86e3-4bf3-8b95-1e58ef60e97a,1,0,36d258b5-bfda-4b40-88a8-1e0abf351805,36d258b5-bfda-4b40-88a8-1e0abf351805,1,0,cc95b010-ca42-4b54-9c50-0551b2c690ed,cc95b010-ca42-4b54-9c50-0551b2c690ed,1,0,829fb3c0-6d96-4765-adc6-f177344a4a33,829fb3c0-6d96-4765-adc6-f177344a4a33,1,0,9241e7fe-e3e8-4ddd-ac6c-4edb1a1b2f71,9241e7fe-e3e8-4ddd-ac6c-4edb1a1b2f71,1,0,05c27c89-2c26-4252-842d-9aa43ba0ea2f,05c27c89-2c26-4252-842d-9aa43ba0ea2f,1,0,7c1e16c2-201d-4a3f-b0f4-9d66f5f8a68b,7c1e16c2-201d-4a3f-b0f4-9d66f5f8a68b,1,0,f092729c-6b5d-4709-8b28-15e06129731d,f092729c-6b5d-4709-8b28-15e06129731d,1,0,c03be2f7-d681-417d-975a-5c8c7b716659,c03be2f7-d681-417d-975a-5c8c7b716659,1,0,fca7af5f-bdc0-4264-be68-5e5e38545368,fca7af5f-bdc0-4264-be68-5e5e38545368,1,0,a3fc0bce-a87e-4c15-b57b-f285a694bcdf,a3fc0bce-a87e-4c15-b57b-f285a694bcdf,1,0,ae124745-edfb-11e6-4681-a8667f21fde4,ae124745-edfb-11e6-4681-a8667f21fde4,1,0,f6fcf9c2-edfb-11e6-4681-a8667f21fde4,f6fcf9c2-edfb-11e6-4681-a8667f21fde4,1,0,ec70cf10-edfb-11e6-4681-a8667f21fde4,ec70cf10-edfb-11e6-4681-a8667f21fde4,1,0,7c47f039-1ca9-4c6f-ac36-f4cb59b48b65,7c47f039-1ca9-4c6f-ac36-f4cb59b48b65,1,0,0b7cee9b-3870-49f5-a58e-063cf5353467,0b7cee9b-3870-49f5-a58e-063cf5353467,1,0,d392a791-af74-40c9-ab20-6ed6aeabe864,d392a791-af74-40c9-ab20-6ed6aeabe864,1,0,974d2430-1ff6-4be9-a5aa-aa896e9a66d4,974d2430-1ff6-4be9-a5aa-aa896e9a66d4,1,0,1612570d-b069-405a-9dd3-80b8175fb468,1612570d-b069-405a-9dd3-80b8175fb468,1,0,3c429fe8-e663-4a58-817f-8f8382697dbb,3c429fe8-e663-4a58-817f-8f8382697dbb,1,0,c37be0c3-d2db-4e63-a8cb-7956a5396650,c37be0c3-d2db-4e63-a8cb-7956a5396650,1,0,83180e0d-fc4b-41ec-9a17-5af555a4776f,83180e0d-fc4b-41ec-9a17-5af555a4776f,1,0,27c52afc-7127-41e1-af8a-1b1bd2c9bfa8,27c52afc-7127-41e1-af8a-1b1bd2c9bfa8,1,0,7f68e4c1-c4f7-4c6c-8f0a-225e544e07ee,7f68e4c1-c4f7-4c6c-8f0a-225e544e07ee,1,0,561ed574-617d-4a46-b32b-f022e07846c8,561ed574-617d-4a46-b32b-f022e07846c8,1,0,cba706bf-a9a7-4dda-9c5a-a26e85119396,cba706bf-a9a7-4dda-9c5a-a26e85119396,1,0,159a4eb5-00cd-426c-86e3-09cd3f569f22,159a4eb5-00cd-426c-86e3-09cd3f569f22,1,0,f03cdb56-ef3f-461f-91b1-cdcaed2786e8,f03cdb56-ef3f-461f-91b1-cdcaed2786e8,1,0,3e8c6546-416c-4437-8c85-2cf591b4fc3f,3e8c6546-416c-4437-8c85-2cf591b4fc3f,1,0,038e5027-3cc5-4ea2-b0b5-28a7544ad53e,038e5027-3cc5-4ea2-b0b5-28a7544ad53e,1,0,9a0b27db-e4ac-496b-b6de-876b90381527,9a0b27db-e4ac-496b-b6de-876b90381527,1,0,2ded5135-b6c3-46dd-b563-7b6fab986d23,2ded5135-b6c3-46dd-b563-7b6fab986d23,1,0,14215720-ccb3-4e5a-8345-cd42c96a3e77,14215720-ccb3-4e5a-8345-cd42c96a3e77,1,0,24fa0604-b6a5-49ad-9d03-b2cf8e81dad8,24fa0604-b6a5-49ad-9d03-b2cf8e81dad8,1,0,0690a5c7-bc25-4101-afa5-69c095d415c2,0690a5c7-bc25-4101-afa5-69c095d415c2,1,0,2ad7b509-4cd1-456a-a6ae-94649fdf8c3e,2ad7b509-4cd1-456a-a6ae-94649fdf8c3e,1,0,79013bba-a0f2-481c-a63e-095a54ee52aa,79013bba-a0f2-481c-a63e-095a54ee52aa,1,0,8523c346-f144-41b8-a702-2d588e7097c2,8523c346-f144-41b8-a702-2d588e7097c2,1,0,93969a30-d9d7-4f2f-85fa-57a4eb7495bf,93969a30-d9d7-4f2f-85fa-57a4eb7495bf,1,0,9fb73c9b-05de-4474-8a28-7e3fd5b2b143,9fb73c9b-05de-4474-8a28-7e3fd5b2b143,1,0,fa2bd6a6-bb46-4e21-8684-248578310164,fa2bd6a6-bb46-4e21-8684-248578310164,1,0,f7cf3b42-39c0-48db-b8ca-fe9ea267a45a,f7cf3b42-39c0-48db-b8ca-fe9ea267a45a,1,0,3a0c06eb-f6d5-46c3-b0b9-c8d98e572093,3a0c06eb-f6d5-46c3-b0b9-c8d98e572093,1,0,88ccac36-169d-48f8-bc68-15e3bb775b79,88ccac36-169d-48f8-bc68-15e3bb775b79,1,0,a1640988-bd60-43b3-86f1-184b9db275c6,a1640988-bd60-43b3-86f1-184b9db275c6,1,0,300a02f7-8062-4843-b11e-0321f8b40f4d,300a02f7-8062-4843-b11e-0321f8b40f4d,1,0,bac41d45-249f-40b4-a013-008e261369c8,bac41d45-249f-40b4-a013-008e261369c8,1,0,84e34b4a-02e8-4676-8b81-771ddf3c2931,84e34b4a-02e8-4676-8b81-771ddf3c2931,1,0,0aa6a024-66ae-4592-87d6-f7cb2a59f906,0aa6a024-66ae-4592-87d6-f7cb2a59f906,1,0,734b4dc5-dc91-4945-a2d7-cefe56a6e0a6,734b4dc5-dc91-4945-a2d7-cefe56a6e0a6,1,0,bb2dcb37-410d-4a6c-9ace-1f04177d6e88,bb2dcb37-410d-4a6c-9ace-1f04177d6e88,1,0,cb6ecc18-a14f-4c3c-a39d-2cd2d1ab4e03,cb6ecc18-a14f-4c3c-a39d-2cd2d1ab4e03,1,0,f71ac535-74a5-4001-a613-455a9e1bf734,f71ac535-74a5-4001-a613-455a9e1bf734,1,0,55a42b83-b6d2-409b-a8ff-7849b08e07ed,55a42b83-b6d2-409b-a8ff-7849b08e07ed,1,0,61889399-ecc2-442c-a790-a8b27a7a540c,61889399-ecc2-442c-a790-a8b27a7a540c,1,0,ecd3a928-3e59-439c-8f58-ba360f2a8b3c,ecd3a928-3e59-439c-8f58-ba360f2a8b3c,1,0,4ee2efbc-bc4a-4b47-bfdb-bb83f108c5bb,4ee2efbc-bc4a-4b47-bfdb-bb83f108c5bb,1,0,fb9c08ee-92e9-4bd9-8794-ef0f221eee99,fb9c08ee-92e9-4bd9-8794-ef0f221eee99,1,0,e4cd44e6-1255-490f-96d9-f805ac92cf67,e4cd44e6-1255-490f-96d9-f805ac92cf67,1,0,8ae9be37-cda5-4b66-8a97-5e77d2a2c75f,8ae9be37-cda5-4b66-8a97-5e77d2a2c75f,1,0,5a9011fc-c023-47fb-a999-2c6ca33a04b9,5a9011fc-c023-47fb-a999-2c6ca33a04b9,1,0,ab574fa5-0730-4456-b741-111e5ea8a896,ab574fa5-0730-4456-b741-111e5ea8a896,1,0,b8d5adf0-dc2f-4041-bc97-cb2442f00054,b8d5adf0-dc2f-4041-bc97-cb2442f00054,1,0,398199c4-4830-48e9-89c5-45c2c5a30ee6,398199c4-4830-48e9-89c5-45c2c5a30ee6,1,0,e5bc54f0-d7d0-471c-adda-a0e73e0dd3cf,e5bc54f0-d7d0-471c-adda-a0e73e0dd3cf,1,0,af447f33-ef41-4eda-96ec-5bac26fff33e,af447f33-ef41-4eda-96ec-5bac26fff33e,1,0,f0c83fc5-6e9a-4185-ab43-2b419ace7909,f0c83fc5-6e9a-4185-ab43-2b419ace7909,1,0,4bd15718-6a0e-4a86-921a-09d38ba4be4c,4bd15718-6a0e-4a86-921a-09d38ba4be4c,1,0,32586ba6-8922-4321-b134-70d1b77a16a4,32586ba6-8922-4321-b134-70d1b77a16a4,1,0,2d942a50-b239-4b8c-812a-5a634f5dcaef,2d942a50-b239-4b8c-812a-5a634f5dcaef,1,0,8ab0c61d-85b4-47e3-aca1-1890e4c6ec8d,8ab0c61d-85b4-47e3-aca1-1890e4c6ec8d,1,0,a21cf522-d657-49ba-a198-01ff1de5e3f0,a21cf522-d657-49ba-a198-01ff1de5e3f0,1,0,4dc698da-8471-4b3f-816d-f1467cd2e5f1,4dc698da-8471-4b3f-816d-f1467cd2e5f1,1,0,7ceb2f18-4dae-4b13-a5be-e949be165b4e,7ceb2f18-4dae-4b13-a5be-e949be165b4e,1,0,c4f94f6d-e33f-4226-bf47-c4b544098082,c4f94f6d-e33f-4226-bf47-c4b544098082,1,0,0abca5b8-4974-48aa-bf5d-dbbe2c2ea0e6,0abca5b8-4974-48aa-bf5d-dbbe2c2ea0e6,1,0,fc67b510-3fb4-4305-92d2-c252bc718f03,fc67b510-3fb4-4305-92d2-c252bc718f03,1,0,ed98a7b2-ad31-401f-a65e-dfbcc8e5a4a8,ed98a7b2-ad31-401f-a65e-dfbcc8e5a4a8,1,0,9a5e3d2c-ab69-4f9d-a56f-20bb5f0be1e2,9a5e3d2c-ab69-4f9d-a56f-20bb5f0be1e2,1,0,cf1f7915-94ad-47e7-8676-73271d0cf71e,cf1f7915-94ad-47e7-8676-73271d0cf71e,1,0,fceb6e4a-bd51-4193-a542-70d2317af669,fceb6e4a-bd51-4193-a542-70d2317af669,1,0,f9f991a6-ddf3-4953-8a1f-e6c0e1a7f4e9,f9f991a6-ddf3-4953-8a1f-e6c0e1a7f4e9,1,0,80847d57-1795-46c7-a106-926e1f43ac1e,80847d57-1795-46c7-a106-926e1f43ac1e,1,0,38685415-dc87-48b4-8cc4-f85b438f2ec2,38685415-dc87-48b4-8cc4-f85b438f2ec2,1,0,110eff8b-aeec-4ba5-b710-fefc1bd60284,110eff8b-aeec-4ba5-b710-fefc1bd60284,1,0,0a8a6bb9-8b6a-43cf-9d46-b18a8a9591d8,0a8a6bb9-8b6a-43cf-9d46-b18a8a9591d8,1,0,75eca481-002b-4046-898d-dfac9357611f,75eca481-002b-4046-898d-dfac9357611f,1,0,0110decc-d06e-43cf-9d01-30d412edcdd7,0110decc-d06e-43cf-9d01-30d412edcdd7,1,0,3ea32a24-d37b-4fad-937a-9d1357d649a9,3ea32a24-d37b-4fad-937a-9d1357d649a9,1,0,2856ee9a-0fea-4684-b7b8-4844773eae07,2856ee9a-0fea-4684-b7b8-4844773eae07,1,0,84e09840-8d67-416f-87a2-7f03c04180c9,84e09840-8d67-416f-87a2-7f03c04180c9,1,0,0388f22d-f91d-45c9-a8ae-900a24cbfe67,0388f22d-f91d-45c9-a8ae-900a24cbfe67,1,0,60fa2562-4914-46d6-a00a-1bb6e2803263,60fa2562-4914-46d6-a00a-1bb6e2803263,1,0,0d61a8d4-2dc8-435e-a238-416d7640576f,0d61a8d4-2dc8-435e-a238-416d7640576f,1,0,5ea899d4-e076-4a1c-838c-e369abc4705f,5ea899d4-e076-4a1c-838c-e369abc4705f,1,0,f2bf5f4a-e53b-4300-bbc7-97ac2e06f3c2,f2bf5f4a-e53b-4300-bbc7-97ac2e06f3c2,1,0,ab2e75f0-8da7-4b38-8f30-537424b719db,ab2e75f0-8da7-4b38-8f30-537424b719db,1,0,db344a42-61b8-4544-9aa1-8840ab8a70f0,db344a42-61b8-4544-9aa1-8840ab8a70f0,1,0,bd029e3f-a6bd-4be9-81f3-f3ea84f424ce,bd029e3f-a6bd-4be9-81f3-f3ea84f424ce,1,0,043bd776-5a7b-45ff-8b4a-5eed2bba0054,043bd776-5a7b-45ff-8b4a-5eed2bba0054,1,0,6a708860-e3b6-46ea-bea5-0d3e426c72f6,6a708860-e3b6-46ea-bea5-0d3e426c72f6,1,0,7c9e30d0-4a25-4d1d-a5ad-c48b231f453c,7c9e30d0-4a25-4d1d-a5ad-c48b231f453c,1,0,78058cd3-eb56-483c-96f5-1bf8883abc76,78058cd3-eb56-483c-96f5-1bf8883abc76,1,0,cd1fbfdd-d05e-4c22-aa04-83e9d36fb557,cd1fbfdd-d05e-4c22-aa04-83e9d36fb557,1,0,fae4675c-dcdc-42fc-911d-07c3c577b8b8,fae4675c-dcdc-42fc-911d-07c3c577b8b8,1,0,f1050611-4f82-411b-97f2-bcd8a5c914bf,f1050611-4f82-411b-97f2-bcd8a5c914bf,1,0,efacf22d-b474-4d49-af8b-6d3784aa5cf2,efacf22d-b474-4d49-af8b-6d3784aa5cf2,1,0,f818b937-9ac3-4a0c-ba50-26c060984f09,f818b937-9ac3-4a0c-ba50-26c060984f09,1,0,f385778d-96cb-4e09-884d-533739b393b1,f385778d-96cb-4e09-884d-533739b393b1,1,0,5bdaa783-e965-4d59-b7b7-a1e86ddb89f7,5bdaa783-e965-4d59-b7b7-a1e86ddb89f7,1,0,b8fe43d1-b9a7-4ec1-94bd-1e7fad424f8d,b8fe43d1-b9a7-4ec1-94bd-1e7fad424f8d,1,0,f64089ee-72dd-4fcf-8926-31e95c6fcf77,f64089ee-72dd-4fcf-8926-31e95c6fcf77,1,0,5d93aea8-3f41-4e77-bed5-4b2377cbfe0e,5d93aea8-3f41-4e77-bed5-4b2377cbfe0e,1,0,e1e151cc-7b8a-4125-804f-c902a522ed81,e1e151cc-7b8a-4125-804f-c902a522ed81,1,0,f475494e-fe94-4902-b2da-3ade01eba5bb,f475494e-fe94-4902-b2da-3ade01eba5bb,1,0,fbb814b2-cb2f-474d-9c96-5571cef3030e,fbb814b2-cb2f-474d-9c96-5571cef3030e,1,0,7bf36370-3761-4fd5-bea5-90fa142a9d57,7bf36370-3761-4fd5-bea5-90fa142a9d57,1,0,3b81427f-cf64-4a5e-adb3-5415d515fecd,3b81427f-cf64-4a5e-adb3-5415d515fecd,1,0,e9f2b604-7181-476d-8b34-3a544cbb353d,e9f2b604-7181-476d-8b34-3a544cbb353d,1,0,73773919-d01c-41dd-bb31-9c66648ac0ff,73773919-d01c-41dd-bb31-9c66648ac0ff,1,0,5d1afad0-3d7e-4214-b52a-72c184490084,5d1afad0-3d7e-4214-b52a-72c184490084,1,0,5f7901a1-f992-42fa-9ddb-d63574da3b56,5f7901a1-f992-42fa-9ddb-d63574da3b56,1,0,26abd45a-12b3-4312-88fb-53c90a6e6679,26abd45a-12b3-4312-88fb-53c90a6e6679,1,0,1541ad74-3e73-4699-bccf-c13313fbedfe,1541ad74-3e73-4699-bccf-c13313fbedfe,1,0,1037ecb7-6819-4ba2-8c93-eccbbdf825be,1037ecb7-6819-4ba2-8c93-eccbbdf825be,1,0,0b2356a4-5571-4ba0-9095-265106f2b3b3,0b2356a4-5571-4ba0-9095-265106f2b3b3,1,0,a2581834-dde8-439a-8204-6712c829738e,a2581834-dde8-439a-8204-6712c829738e,1,0,222985c4-fe09-44d1-a1c5-5a3e3cedd9b2,222985c4-fe09-44d1-a1c5-5a3e3cedd9b2,1,0,c746a268-815b-4917-8b06-af745ba9db04,c746a268-815b-4917-8b06-af745ba9db04,1,0,5cc01f13-0faa-4c3c-8e5e-156656f71efd,5cc01f13-0faa-4c3c-8e5e-156656f71efd,1,0,7c3463c8-ea36-415a-8e9d-dc7bd927b9d1,7c3463c8-ea36-415a-8e9d-dc7bd927b9d1,1,0,260f4fb1-02cb-4c32-ba4b-5aa202cd0311,260f4fb1-02cb-4c32-ba4b-5aa202cd0311,1,0,be2b4dba-e77e-4947-bd2f-0710b357ca2a,be2b4dba-e77e-4947-bd2f-0710b357ca2a,1,0,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,20d655a7-788c-48bc-83ae-25003106bedb,20d655a7-788c-48bc-83ae-25003106bedb,1,0,7bfb78de-899f-4a4d-a8b2-ebadeccf3921,7bfb78de-899f-4a4d-a8b2-ebadeccf3921,1,0,68a72014-4b2e-4347-aaa7-54d95b8eb919,68a72014-4b2e-4347-aaa7-54d95b8eb919,1,0,379c9295-d0d5-418d-82f3-5ae19985cc53,379c9295-d0d5-418d-82f3-5ae19985cc53,1,0,25830f5b-27e2-4eff-9728-b21eb498727d,25830f5b-27e2-4eff-9728-b21eb498727d,1,0,af02f534-8508-4f9f-bcc1-0c6f3d696971,af02f534-8508-4f9f-bcc1-0c6f3d696971,1,0,dd345cfb-ea0c-4ea8-9b35-22547b000275,dd345cfb-ea0c-4ea8-9b35-22547b000275,1,0,a71d9c41-7510-4d38-90df-1034977b8f45,a71d9c41-7510-4d38-90df-1034977b8f45,1,0,86a871da-3725-43a1-a7c3-98acd187011b,86a871da-3725-43a1-a7c3-98acd187011b,1,0,2447cfeb-d877-4222-8ac2-b0026b85f932,2447cfeb-d877-4222-8ac2-b0026b85f932,1,0,fb94e9cb-1f27-42a6-a701-18bbe5888e70,fb94e9cb-1f27-42a6-a701-18bbe5888e70,1,0,2e26e32e-a0c6-4460-99de-865622202166,2e26e32e-a0c6-4460-99de-865622202166,1,0,c9489a6e-45af-4877-9788-158071571a0a,c9489a6e-45af-4877-9788-158071571a0a,1,0,23959912-f8fc-42bc-9ec2-1d520ebc5dad,23959912-f8fc-42bc-9ec2-1d520ebc5dad,1,0,4770398f-8013-4d43-93ce-ec1165e40c4e,4770398f-8013-4d43-93ce-ec1165e40c4e,1,0,9a706997-90cb-430d-972c-d2bad87c4a79,9a706997-90cb-430d-972c-d2bad87c4a79,1,0,6f661660-b9c4-41d4-99a8-e08006cfe9c8,6f661660-b9c4-41d4-99a8-e08006cfe9c8,1,0,199e79fa-54d6-4748-aaaa-9c55283582a3,199e79fa-54d6-4748-aaaa-9c55283582a3,1,0,5ef026c2-2ef4-45d6-9792-5ba0d298714b,5ef026c2-2ef4-45d6-9792-5ba0d298714b,1,0,45d61391-4cf7-4f45-8775-ada582c42400,45d61391-4cf7-4f45-8775-ada582c42400,1,0,78b2a913-2ab9-455d-85a3-504f0f468468,78b2a913-2ab9-455d-85a3-504f0f468468,1,0,8c7e1080-fbb2-4a9c-b740-b3e9eb996565,8c7e1080-fbb2-4a9c-b740-b3e9eb996565,1,0,560b5b12-4dee-4c69-ab6b-7680757a2797,560b5b12-4dee-4c69-ab6b-7680757a2797,1,0,3cfb1ce0-de42-4914-85c0-807d0c10f77e,3cfb1ce0-de42-4914-85c0-807d0c10f77e,1,0,aa89881f-f111-4384-911c-847b04bb56dd,aa89881f-f111-4384-911c-847b04bb56dd,1,0,444d9e3b-c702-4ad6-a929-a220eff0f6e7,444d9e3b-c702-4ad6-a929-a220eff0f6e7,1,0,022c4519-1cdb-45b6-a699-89fd6688999c,022c4519-1cdb-45b6-a699-89fd6688999c,1,0,fb5b79a2-caec-4c6e-a112-27e78a184d5e,fb5b79a2-caec-4c6e-a112-27e78a184d5e,1,0,fa523958-ce1e-42e1-ae00-2dcb401b7eda,fa523958-ce1e-42e1-ae00-2dcb401b7eda,1,0,1518bca2-a004-4566-8991-7c60e6745a49,1518bca2-a004-4566-8991-7c60e6745a49,1,0,ed8618e2-3ce6-4956-856a-9f40279b4da6,ed8618e2-3ce6-4956-856a-9f40279b4da6,1,0,733f6bc2-544d-4fac-bca8-11b981b95a03,733f6bc2-544d-4fac-bca8-11b981b95a03,1,0,0333cd9e-392d-40b2-869d-ad47119e0384,0333cd9e-392d-40b2-869d-ad47119e0384,1,0,82cc8820-0b92-4bb7-b097-7ac79e922f01,82cc8820-0b92-4bb7-b097-7ac79e922f01,1,0,25451a36-c842-44a5-94f4-7e540050b825,25451a36-c842-44a5-94f4-7e540050b825,1,0,8e0340c9-6469-4fc9-b19a-4be4e0e6ee82,8e0340c9-6469-4fc9-b19a-4be4e0e6ee82,1,0,f2267d6c-6972-4621-b677-87798056363b,f2267d6c-6972-4621-b677-87798056363b,1,0,243d201b-3714-4700-b410-c74c9093e6f6,243d201b-3714-4700-b410-c74c9093e6f6,1,0,e1e9862e-c87b-400f-bca1-b1380cb98ddc,e1e9862e-c87b-400f-bca1-b1380cb98ddc,1,0,de3cb50c-ef99-419e-b922-c6a453da6a5b,de3cb50c-ef99-419e-b922-c6a453da6a5b,1,0,d4ca4802-756a-494c-bab3-e77e0777a3fa,d4ca4802-756a-494c-bab3-e77e0777a3fa,1,0,134c1054-8d65-405f-ba3b-5beeca803a72,134c1054-8d65-405f-ba3b-5beeca803a72,1,0,cfa1669b-5310-4171-83fd-4dff3c6ac345,cfa1669b-5310-4171-83fd-4dff3c6ac345,1,0,9ec26d14-b09d-4fd7-9c43-062c0120cf3d,9ec26d14-b09d-4fd7-9c43-062c0120cf3d,1,0,0db78226-37d0-4016-b4c9-5134af1aabc7,0db78226-37d0-4016-b4c9-5134af1aabc7,1,0,8d6b4d23-a260-4352-9975-c13ce3e05220,8d6b4d23-a260-4352-9975-c13ce3e05220,1,0,e0be0bc7-def6-4ae9-9a33-9689aa829b5e,e0be0bc7-def6-4ae9-9a33-9689aa829b5e,1,0,97d4ffd0-07ef-4dc2-8fbc-449c3c8453ef,97d4ffd0-07ef-4dc2-8fbc-449c3c8453ef,1,0,6f5ac40b-ea22-47cf-acf2-614406669a72,6f5ac40b-ea22-47cf-acf2-614406669a72,1,0,b6caaa9e-a9d1-4519-a61f-7fa0ab0ff201,b6caaa9e-a9d1-4519-a61f-7fa0ab0ff201,1,0,488d2644-6fef-488a-af38-40f59c0e0d8c,488d2644-6fef-488a-af38-40f59c0e0d8c,1,0,5d76a28c-5d6c-49cb-8b91-2527e8d06aba,5d76a28c-5d6c-49cb-8b91-2527e8d06aba,1,0,688d86cd-1044-4b77-bb63-2c05aaafbcd0,688d86cd-1044-4b77-bb63-2c05aaafbcd0,1,0,f1efef30-8651-4728-becd-abe3f9026a43,f1efef30-8651-4728-becd-abe3f9026a43,1,0,c2612e22-4f0d-4713-b4eb-decd9780d088,c2612e22-4f0d-4713-b4eb-decd9780d088,1,0,11b1410f-8e14-4b2f-8890-177f4875020e,11b1410f-8e14-4b2f-8890-177f4875020e,1,0,2276b2b0-1705-4014-956f-5087e9dd5c1e,2276b2b0-1705-4014-956f-5087e9dd5c1e,1,0,f72b9d4b-7196-45a3-9349-e32fc91e875a,f72b9d4b-7196-45a3-9349-e32fc91e875a,1,0,6c509dcc-4529-4ac3-86fe-26f807991b1c,6c509dcc-4529-4ac3-86fe-26f807991b1c,1,0,529c8887-f691-4ba8-aeaf-937858d61c30,529c8887-f691-4ba8-aeaf-937858d61c30,1,0,43435d30-8c25-4757-9a29-9173415959ff,43435d30-8c25-4757-9a29-9173415959ff,1,0,4aef5419-7cf5-4443-b773-9273c983844f,4aef5419-7cf5-4443-b773-9273c983844f,1,0,b090cfa5-1bd8-43aa-84d6-6e04375c4b57,b090cfa5-1bd8-43aa-84d6-6e04375c4b57,1,0,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,5808331f-9ab4-4a23-a592-1f65087f3214,5808331f-9ab4-4a23-a592-1f65087f3214,1,0,9316738d-3d38-4068-818e-a001355b19fb,9316738d-3d38-4068-818e-a001355b19fb,1,0,d86d766f-021a-4c11-b9e8-403af08918cc,d86d766f-021a-4c11-b9e8-403af08918cc,1,0,2cedfef0-5d93-475a-b2dd-ee36e553e6e1,2cedfef0-5d93-475a-b2dd-ee36e553e6e1,1,0,29200d04-d7da-435a-89e6-858c11a1a98c,29200d04-d7da-435a-89e6-858c11a1a98c,1,0,8e5f6c70-04b3-46a1-94ef-82c9f6019f8f,8e5f6c70-04b3-46a1-94ef-82c9f6019f8f,1,0,6c119ef2-d24b-4c3d-ad07-611bed89cab1,6c119ef2-d24b-4c3d-ad07-611bed89cab1,1,0,13b1cb1f-88df-4ff8-b4cc-0473e4f96005,13b1cb1f-88df-4ff8-b4cc-0473e4f96005,1,0,0e861ad8-6fa3-4b0f-a9b0-6c91df1dfc6b,0e861ad8-6fa3-4b0f-a9b0-6c91df1dfc6b,1,0,27df6c22-85d7-4cb6-be19-82af76c84bf9,27df6c22-85d7-4cb6-be19-82af76c84bf9,1,0,77bd95d6-3cd5-4b67-a0b6-72d24243fbc2,77bd95d6-3cd5-4b67-a0b6-72d24243fbc2,1,0,0be7f905-53b8-4bb1-8e37-dcc142e508c5,0be7f905-53b8-4bb1-8e37-dcc142e508c5,1,0,422155c7-1640-48c4-bb21-36595b405c66,422155c7-1640-48c4-bb21-36595b405c66,1,0,16d37b5a-88db-4787-b2de-fb50da0ca94b,16d37b5a-88db-4787-b2de-fb50da0ca94b,1,0,f653bcbf-5659-4605-9bb9-3737f19e79dd,f653bcbf-5659-4605-9bb9-3737f19e79dd,1,0,8b980868-fe63-49ff-ba3d-4c29732e1b90,8b980868-fe63-49ff-ba3d-4c29732e1b90,1,0,54668731-4963-4ec3-b188-9feacaefa182,54668731-4963-4ec3-b188-9feacaefa182,1,0,3702135e-5380-4ca6-82f5-63eff1b043e9,3702135e-5380-4ca6-82f5-63eff1b043e9,1,0,29b2104b-fd02-4d51-951f-51ea213b8ebd,29b2104b-fd02-4d51-951f-51ea213b8ebd,1,0,ba5c945e-554f-45a2-a2de-3157b2d7e931,ba5c945e-554f-45a2-a2de-3157b2d7e931,1,0,f7085f33-f122-4443-a3f5-4e765300175e,f7085f33-f122-4443-a3f5-4e765300175e,1,0,b7e4c512-b856-4679-a025-5f0f28918593,b7e4c512-b856-4679-a025-5f0f28918593,1,0,bba56b8f-a3f3-4d3f-9804-f9569bb1f6f3,bba56b8f-a3f3-4d3f-9804-f9569bb1f6f3,1,0,cff7ba79-9418-43a4-badc-3e3cc2f6bd5b,cff7ba79-9418-43a4-badc-3e3cc2f6bd5b,1,0,a9362ac4-85ee-4214-80c1-048fab769885,a9362ac4-85ee-4214-80c1-048fab769885,1,0,4ec242e0-75d1-4bf7-be18-783e7aa4f236,4ec242e0-75d1-4bf7-be18-783e7aa4f236,1,0,e02b1366-9d7a-462f-86a1-436bbf4532ff,e02b1366-9d7a-462f-86a1-436bbf4532ff,1,0,40ee729c-c317-4a1c-b985-5f7e4e1e20fb,40ee729c-c317-4a1c-b985-5f7e4e1e20fb,1,0,2feb35c0-b046-4086-a2ce-ccc462fc6e9c,2feb35c0-b046-4086-a2ce-ccc462fc6e9c,1,0,8811cc64-99d9-4f13-8309-c29965783f5a,8811cc64-99d9-4f13-8309-c29965783f5a,1,0,7c737071-e850-4a3f-8942-697ef52a8ecc,7c737071-e850-4a3f-8942-697ef52a8ecc,1,0,62eff222-7b74-4cab-9138-880db1f05147,62eff222-7b74-4cab-9138-880db1f05147,1,0,39c6c277-cfc6-4e8a-8e7f-afcff55f0511,39c6c277-cfc6-4e8a-8e7f-afcff55f0511,1,0,860f8893-22fe-4b13-adb1-24e1ea8c6544,860f8893-22fe-4b13-adb1-24e1ea8c6544,1,0,95266e9f-073f-4de3-83c6-cc0d9ee9334f,95266e9f-073f-4de3-83c6-cc0d9ee9334f,1,0,21b8ac8d-75ca-481c-8e85-01bc2029f0c0,21b8ac8d-75ca-481c-8e85-01bc2029f0c0,1,0,d5012e69-89bc-40af-8e4f-377a042854ee,d5012e69-89bc-40af-8e4f-377a042854ee,1,0,02f79fd8-5315-4c90-b520-db67dcb6e371,02f79fd8-5315-4c90-b520-db67dcb6e371,1,0,9bb52788-4a3a-48b5-a551-5ca753b6c059,9bb52788-4a3a-48b5-a551-5ca753b6c059,1,0,4fb5004f-3cd9-44c4-a44b-d235cccf9e9c,4fb5004f-3cd9-44c4-a44b-d235cccf9e9c,1,0,872a0c47-fab5-4a54-8ab9-23940bbdefbb,872a0c47-fab5-4a54-8ab9-23940bbdefbb,1,0,7428a626-3fbc-4f2c-a3dd-f14e8d90c00b,7428a626-3fbc-4f2c-a3dd-f14e8d90c00b,1,0,2f20bff4-9201-4f36-9e74-eba4d9b3c59a,2f20bff4-9201-4f36-9e74-eba4d9b3c59a,1,0,b6c94efd-5994-4c4c-a641-b062ecc38b65,b6c94efd-5994-4c4c-a641-b062ecc38b65,1,0,98501228-7f0e-45a3-b58f-4c654f393f80,98501228-7f0e-45a3-b58f-4c654f393f80,1,0,502384c9-edb7-451a-b7ea-de006f657a6e,502384c9-edb7-451a-b7ea-de006f657a6e,1,0,4e1a4fe0-dca4-40ba-9369-73be303a4aef,4e1a4fe0-dca4-40ba-9369-73be303a4aef,1,0,329906a0-0b61-4f3f-8cd0-f06a78e8fe5f,329906a0-0b61-4f3f-8cd0-f06a78e8fe5f,1,0,840e0b1b-a599-4c5f-8eaa-7f7e4f2e55a4,840e0b1b-a599-4c5f-8eaa-7f7e4f2e55a4,1,0,1d06a9e4-e637-4219-a81c-64f8ec1b91a4,1d06a9e4-e637-4219-a81c-64f8ec1b91a4,1,0,50968921-76f3-4108-835a-96b153671c8d,50968921-76f3-4108-835a-96b153671c8d,1,0,b773f510-1485-4886-9071-afcbf49ff856,b773f510-1485-4886-9071-afcbf49ff856,1,0,964403f2-0a87-49e1-b183-dbe3624e3805,964403f2-0a87-49e1-b183-dbe3624e3805,1,0,bb264e83-49f4-4b7a-8be2-094712fc0640,bb264e83-49f4-4b7a-8be2-094712fc0640,1,0,07bf650d-e61e-44f3-9643-6ffc95b913fb,07bf650d-e61e-44f3-9643-6ffc95b913fb,1,0,5c68c57a-31d6-4ae9-855f-3fbc57922e39,5c68c57a-31d6-4ae9-855f-3fbc57922e39,1,0,6b90ed05-813c-4324-8a69-02c2268856b2,6b90ed05-813c-4324-8a69-02c2268856b2,1,0,081ed48d-cb87-459d-97d6-9af121edbabb,081ed48d-cb87-459d-97d6-9af121edbabb,1,0,6c4074b2-f631-451d-b412-1c8c096a71b1,6c4074b2-f631-451d-b412-1c8c096a71b1,1,0,f9931a20-8391-4b13-8c6d-1836f2492e53,f9931a20-8391-4b13-8c6d-1836f2492e53,1,0,c6eec20b-13b9-44a0-968f-1325680c399b,c6eec20b-13b9-44a0-968f-1325680c399b,1,0,02fbf083-1bdd-4900-9dc1-62f415b792a4,02fbf083-1bdd-4900-9dc1-62f415b792a4,1,0,35454c2d-7088-487b-abb3-f95f2dfdcffa,35454c2d-7088-487b-abb3-f95f2dfdcffa,1,0,911f8810-e96e-4f02-9377-47e49919f87e,911f8810-e96e-4f02-9377-47e49919f87e,1,0,cde46d6d-9f8a-45b6-98a7-9411030ccd72,cde46d6d-9f8a-45b6-98a7-9411030ccd72,1,0,ff1a4c30-03ff-4bdd-9df2-a2579aeb4157,ff1a4c30-03ff-4bdd-9df2-a2579aeb4157,1,0,224b9439-4b30-4b64-8edf-e7718ee90a7d,224b9439-4b30-4b64-8edf-e7718ee90a7d,1,0,74dc2374-daf1-4a8a-ba10-d3aced96af3b,74dc2374-daf1-4a8a-ba10-d3aced96af3b,1,0,15f1a3a8-5d42-486d-95f9-3d43ff1d5d56,15f1a3a8-5d42-486d-95f9-3d43ff1d5d56,1,0,e28e953f-93b3-4d4d-9ee4-c56df26037eb,e28e953f-93b3-4d4d-9ee4-c56df26037eb,1,0,578e0fd2-997c-437a-befc-33d128097a7e,578e0fd2-997c-437a-befc-33d128097a7e,1,0,14089231-31a8-4471-b85b-064836794ff3,14089231-31a8-4471-b85b-064836794ff3,1,0,014de276-fb2f-4deb-873f-475729be0f66,014de276-fb2f-4deb-873f-475729be0f66,1,0,40a60ff7-96ca-485b-a2d9-640a208a7de6,40a60ff7-96ca-485b-a2d9-640a208a7de6,1,0,03e6caa4-eaa2-43aa-bdd1-768f9cce7848,03e6caa4-eaa2-43aa-bdd1-768f9cce7848,1,0,2c2526c1-bdf8-4115-bdff-3e79d28321cb,2c2526c1-bdf8-4115-bdff-3e79d28321cb,1,0,4f4da2e9-37ab-4505-b3b1-4b3a908f38c2,4f4da2e9-37ab-4505-b3b1-4b3a908f38c2,1,0,95ab774f-27fa-4bd4-a422-0f997f632679,95ab774f-27fa-4bd4-a422-0f997f632679,1,0,ee3ad891-b7d6-439d-892b-de2f3399d147,ee3ad891-b7d6-439d-892b-de2f3399d147,1,0,4af0f1ee-42cb-47bd-99d0-99deb70e9f82,4af0f1ee-42cb-47bd-99d0-99deb70e9f82,1,0,a2ae0338-ed11-422a-8442-f6c4002ddf0d,a2ae0338-ed11-422a-8442-f6c4002ddf0d,1,0,eb59c9c3-6043-401c-87cc-ba7620139d6a,eb59c9c3-6043-401c-87cc-ba7620139d6a,1,0,2b5ce871-8630-4f2f-9ccb-d9f863886420,2b5ce871-8630-4f2f-9ccb-d9f863886420,1,0,86ae353e-7eed-434c-b4ab-cede36e462bc,86ae353e-7eed-434c-b4ab-cede36e462bc,1,0,18e65717-738b-4d39-9c85-676bca15e6b7,18e65717-738b-4d39-9c85-676bca15e6b7,1,0,01579044-5659-4a73-a989-c52cfabaae66,01579044-5659-4a73-a989-c52cfabaae66,1,0,9b8509e8-8262-4e6a-b2f3-a0df8f49e2c5,9b8509e8-8262-4e6a-b2f3-a0df8f49e2c5,1,0,911baaa1-a4de-4558-b00e-51644144a762,911baaa1-a4de-4558-b00e-51644144a762,1,0,8a8ad123-c01a-440a-bd01-1c0da72cf2eb,8a8ad123-c01a-440a-bd01-1c0da72cf2eb,1,0,ca4ef957-36c2-43b9-8ff7-e2b7ee58cde5,ca4ef957-36c2-43b9-8ff7-e2b7ee58cde5,1,0,4e036eff-92a8-4010-89b2-ed949c123311,4e036eff-92a8-4010-89b2-ed949c123311,1,0,38160114-dc22-4d0b-86a5-d650f4756932,38160114-dc22-4d0b-86a5-d650f4756932,1,0,60aaa289-1f07-438c-8f10-81058ac671c3,60aaa289-1f07-438c-8f10-81058ac671c3,1,0,7312a4ab-a269-4d85-a2c2-25bd5c5dc59c,7312a4ab-a269-4d85-a2c2-25bd5c5dc59c,1,0,c44b0868-bd7f-4230-973b-544ff4dd2afe,c44b0868-bd7f-4230-973b-544ff4dd2afe,1,0,fc2675c2-1c9b-41f9-88eb-5c8be365fe41,fc2675c2-1c9b-41f9-88eb-5c8be365fe41,1,0,51e6a6f9-ce9d-4cb0-a40c-384ede074e07,51e6a6f9-ce9d-4cb0-a40c-384ede074e07,1,0,d49411b4-5f6d-48c5-b4f8-fdfbd1b73317,d49411b4-5f6d-48c5-b4f8-fdfbd1b73317,1,0,8b3da21b-ea3f-47cf-af48-15b886b21f20,8b3da21b-ea3f-47cf-af48-15b886b21f20,1,0,32c4750b-0096-4bbc-8dcd-c1f717734233,32c4750b-0096-4bbc-8dcd-c1f717734233,1,0,be6740b1-1f57-4c01-a67a-d48152931dc8,be6740b1-1f57-4c01-a67a-d48152931dc8,1,0,40fd038d-a93a-4be7-9221-d8ae83350ca0,40fd038d-a93a-4be7-9221-d8ae83350ca0,1,0,e9fcabef-5067-477b-8cb0-1bf3ab8161c5,e9fcabef-5067-477b-8cb0-1bf3ab8161c5,1,0,29adc9e5-a994-48ab-a5a1-919d01119c3a,29adc9e5-a994-48ab-a5a1-919d01119c3a,1,0,c47ffce7-c905-4e88-8b1f-156f47047ccd,c47ffce7-c905-4e88-8b1f-156f47047ccd,1,0,e1755eed-88cf-42c1-83e4-f9047f2c30bf,e1755eed-88cf-42c1-83e4-f9047f2c30bf,1,0,c6ec9d48-9131-4735-9cf7-b498705a57e4,c6ec9d48-9131-4735-9cf7-b498705a57e4,1,0,865d76f7-db4a-4fa2-8e1c-3ecbc2d8faf4,865d76f7-db4a-4fa2-8e1c-3ecbc2d8faf4,1,0,706c421a-74ce-4985-9443-b4a2032481f6,706c421a-74ce-4985-9443-b4a2032481f6,1,0,64da4c24-4aaf-42c8-8595-7f60ff3bc344,64da4c24-4aaf-42c8-8595-7f60ff3bc344,1,0,fb9577e1-00d9-4d52-8de9-23914929a683,fb9577e1-00d9-4d52-8de9-23914929a683,1,0,ffd62a16-f2b4-4e3a-8849-15b957a3d1a1,ffd62a16-f2b4-4e3a-8849-15b957a3d1a1,1,0,529253ae-9c92-4426-b150-8444ba622f89,529253ae-9c92-4426-b150-8444ba622f89,1,0,06a1955a-2ef0-4607-9dcb-a480a7951af7,06a1955a-2ef0-4607-9dcb-a480a7951af7,1,0,6f8fcc96-bfed-444a-908d-95c5b1c64972,6f8fcc96-bfed-444a-908d-95c5b1c64972,1,0,97ce4bf2-6580-4f27-8b5d-d60b66a09c9e,97ce4bf2-6580-4f27-8b5d-d60b66a09c9e,1,0,a84c89d9-2cfe-405f-9bb0-5392b3171695,a84c89d9-2cfe-405f-9bb0-5392b3171695,1,0,070ecbfe-88d6-4de8-b236-e7eedbc3ebc6,070ecbfe-88d6-4de8-b236-e7eedbc3ebc6,1,0,91e26e73-027f-4a10-9083-e5182e768723,91e26e73-027f-4a10-9083-e5182e768723,1,0,e55680f4-cb1a-4cdb-88f0-5d82f43c1d05,e55680f4-cb1a-4cdb-88f0-5d82f43c1d05,1,0,54433668-4391-4dea-8baf-43e9aa1d624e,54433668-4391-4dea-8baf-43e9aa1d624e,1,0,fc309616-060a-42c3-8401-dfef0f359bc5,fc309616-060a-42c3-8401-dfef0f359bc5,1,0,b968398d-973d-4643-95a5-16633d7e48bc,b968398d-973d-4643-95a5-16633d7e48bc,1,0,b9507495-2536-4895-b68b-62acd74343f6,b9507495-2536-4895-b68b-62acd74343f6,1,0,e05a14cc-9051-4c38-9725-19856e36d260,e05a14cc-9051-4c38-9725-19856e36d260,1,0,8154aa0f-ecd6-4ab0-9498-56ef25486a55,8154aa0f-ecd6-4ab0-9498-56ef25486a55,1,0,9d6429f7-23da-4596-822a-04818deb3088,9d6429f7-23da-4596-822a-04818deb3088,1,0,a1b67bd2-3220-497d-b2b4-bd0ea62d9111,a1b67bd2-3220-497d-b2b4-bd0ea62d9111,1,0,acb533e7-4610-4f92-b548-1a4ff1a423d4,acb533e7-4610-4f92-b548-1a4ff1a423d4,1,0,8697999d-9cdb-43d8-979b-3f283daffdd3,8697999d-9cdb-43d8-979b-3f283daffdd3,1,0,23378687-249c-4ec6-99b8-b13fb04b8643,23378687-249c-4ec6-99b8-b13fb04b8643,1,0,66315b12-7abf-46e0-a994-894b827b1301,66315b12-7abf-46e0-a994-894b827b1301,1,0,dba174fb-8392-4451-8069-ae8145658e34,dba174fb-8392-4451-8069-ae8145658e34,1,0,ff5dd4f8-8a16-4a41-875d-c4f7c37ae67a,ff5dd4f8-8a16-4a41-875d-c4f7c37ae67a,1,0,4435d99d-a1df-43e6-97ab-5e651017c61d,4435d99d-a1df-43e6-97ab-5e651017c61d,1,0,2398d69d-ecdd-4d34-bdae-34ed5507a61e,2398d69d-ecdd-4d34-bdae-34ed5507a61e,1,0,a707035a-0172-4b55-b589-fa4a8be9b596,a707035a-0172-4b55-b589-fa4a8be9b596,1,0,c4456e94-8c76-49b1-b85a-433e0f65bdb0,c4456e94-8c76-49b1-b85a-433e0f65bdb0,1,0,4a347209-3a07-48ea-b407-6ee37f1d69f2,4a347209-3a07-48ea-b407-6ee37f1d69f2,1,0,d6aed0fd-686c-430d-b884-74494177422e,d6aed0fd-686c-430d-b884-74494177422e,1,0,245ec4aa-ed65-41f7-b0f0-f8085cfc5bef,245ec4aa-ed65-41f7-b0f0-f8085cfc5bef,1,0,3ed64288-8bf0-4049-8d44-1b424f31d40f,3ed64288-8bf0-4049-8d44-1b424f31d40f,1,0,e0a3fab1-3fe9-4927-840e-f983f72bdfc1,e0a3fab1-3fe9-4927-840e-f983f72bdfc1,1,0,df31eee8-387d-40d1-98df-1f7d8176b50e,df31eee8-387d-40d1-98df-1f7d8176b50e,1,0,c8364283-5525-4bef-8e96-abced54c6a4a,c8364283-5525-4bef-8e96-abced54c6a4a,1,0,079ba95c-8293-47e2-b8bd-7acf73c2d880,079ba95c-8293-47e2-b8bd-7acf73c2d880,1,0,fbe1dcf7-c11d-4395-ab3a-c2f986c25419,fbe1dcf7-c11d-4395-ab3a-c2f986c25419,1,0,a5f264a8-a547-4653-abb1-eb1666d527dc,a5f264a8-a547-4653-abb1-eb1666d527dc,1,0,bcc25539-c6ca-40d0-84fd-53c3caf1aec7,bcc25539-c6ca-40d0-84fd-53c3caf1aec7,1,0,577f2671-7d38-4806-b7ff-840d649e6d69,577f2671-7d38-4806-b7ff-840d649e6d69,1,0,4ff9376e-ffa6-48f3-bf26-b55ceb23da09,4ff9376e-ffa6-48f3-bf26-b55ceb23da09,1,0,de4c339a-a3cf-4b30-bcf2-ce86f5c2d3b0,de4c339a-a3cf-4b30-bcf2-ce86f5c2d3b0,1,0,40e2fb30-bb03-4178-a8eb-ddf48337ef23,40e2fb30-bb03-4178-a8eb-ddf48337ef23,1,0,1026fbcb-acd8-40dc-b638-6e02c6378c55,1026fbcb-acd8-40dc-b638-6e02c6378c55,1,0,dc9e2ba6-f4f1-493f-9054-cac633f239dd,dc9e2ba6-f4f1-493f-9054-cac633f239dd,1,0,7b95d0b1-c7b2-43b4-9119-320cb8912032,7b95d0b1-c7b2-43b4-9119-320cb8912032,1,0,004582b7-00aa-405e-8e24-ce76c945edae,004582b7-00aa-405e-8e24-ce76c945edae,1,0,97a9b005-a836-4308-8e63-0e00f6890baa,97a9b005-a836-4308-8e63-0e00f6890baa,1,0,98c34ada-0b78-41db-9183-6d7b9e466bde,98c34ada-0b78-41db-9183-6d7b9e466bde,1,0,fb688339-918e-40a1-8721-a26f3077973e,fb688339-918e-40a1-8721-a26f3077973e,1,0,1f56de63-81eb-4de5-ad20-01cb6f84e5b0,1f56de63-81eb-4de5-ad20-01cb6f84e5b0,1,0,b50f3157-3c3a-4553-a16a-7fcd660e2824,b50f3157-3c3a-4553-a16a-7fcd660e2824,1,0,19858faf-2bc5-4cfb-b258-cb101ab66e87,19858faf-2bc5-4cfb-b258-cb101ab66e87,1,0,f779f4a1-1fab-46d4-8043-ac25c247d361,f779f4a1-1fab-46d4-8043-ac25c247d361,1,0,308358bc-773a-43fa-adff-dcc5884a2bd4,308358bc-773a-43fa-adff-dcc5884a2bd4,1,0,ed541a1c-a842-40a9-b357-612db71ec32c,ed541a1c-a842-40a9-b357-612db71ec32c,1,0,b0e37495-7d9e-41d0-8225-652f9ac328cf,b0e37495-7d9e-41d0-8225-652f9ac328cf,1,0,3bd2e1c8-9ef3-449b-acf6-397b90669c49,3bd2e1c8-9ef3-449b-acf6-397b90669c49,1,0,cb334191-2ff3-439e-bdaf-4b8fe6561c3b,cb334191-2ff3-439e-bdaf-4b8fe6561c3b,1,0,f9865a2a-50e3-4f9c-a509-319be62dc468,f9865a2a-50e3-4f9c-a509-319be62dc468,1,0,5f3a30b0-1ba8-423c-9bc2-f9a87cafe818,5f3a30b0-1ba8-423c-9bc2-f9a87cafe818,1,0,766d8852-3bb4-4a6c-81c0-911722af4e8e,766d8852-3bb4-4a6c-81c0-911722af4e8e,1,0,f6dae699-06eb-41ef-878b-3fdfe1b1f213,f6dae699-06eb-41ef-878b-3fdfe1b1f213,1,0,fe6de86a-54c9-4ae2-9f17-cfce38b7b560,fe6de86a-54c9-4ae2-9f17-cfce38b7b560,1,0,dabae379-6356-497a-aab5-cf102f16a72a,dabae379-6356-497a-aab5-cf102f16a72a,1,0,337370e0-1021-4887-9d38-6c3833c90a5b,337370e0-1021-4887-9d38-6c3833c90a5b,1,0,0ff569eb-d5b8-4ab1-ac77-5e5afd6d44d0,0ff569eb-d5b8-4ab1-ac77-5e5afd6d44d0,1,0,d6f01f1c-801b-4776-ae11-48236103f76a,d6f01f1c-801b-4776-ae11-48236103f76a,1,0,b6fe68cf-657b-40e0-af2e-247607a86519,b6fe68cf-657b-40e0-af2e-247607a86519,1,0,9b0b8191-94b7-428f-be86-e9e4cd24a72f,9b0b8191-94b7-428f-be86-e9e4cd24a72f,1,0,a923dbcb-7146-4445-ad17-f4a32c16a837,a923dbcb-7146-4445-ad17-f4a32c16a837,1,0,41dec792-1d1a-4e06-a54b-a86193b98225,41dec792-1d1a-4e06-a54b-a86193b98225,1,0,52257beb-3e0c-4681-b430-9690398cd13a,52257beb-3e0c-4681-b430-9690398cd13a,1,0,135e637c-c28e-4547-8da2-d897dca54cb2,135e637c-c28e-4547-8da2-d897dca54cb2,1,0,245be006-6d0a-4c9e-97c5-f3c2ddd734f7,245be006-6d0a-4c9e-97c5-f3c2ddd734f7,1,0,56d97df6-9c8b-4fc5-a7a6-52107d38dcd5,56d97df6-9c8b-4fc5-a7a6-52107d38dcd5,1,0,a0be938b-139e-41bd-b067-f5241ff68c90,a0be938b-139e-41bd-b067-f5241ff68c90,1,0,a0b74de9-06b5-416c-9dd0-2f9dc209fe91,a0b74de9-06b5-416c-9dd0-2f9dc209fe91,1,0,5356543a-db9a-4265-b83f-31d45544c8e6,5356543a-db9a-4265-b83f-31d45544c8e6,1,0,857dd311-9c6d-4dba-82d8-283d7b05b09e,857dd311-9c6d-4dba-82d8-283d7b05b09e,1,0,1055d15b-8cb5-4ff0-a526-7fd20a08a96c,1055d15b-8cb5-4ff0-a526-7fd20a08a96c,1,0,8064eb3a-d56c-4517-9db0-b7300149c7c4,8064eb3a-d56c-4517-9db0-b7300149c7c4,1,0,fe926c88-d792-4db3-abcf-3c94dfdcc407,fe926c88-d792-4db3-abcf-3c94dfdcc407,1,0,b1c3a6c1-5245-4a65-8a45-13948be6f6a1,b1c3a6c1-5245-4a65-8a45-13948be6f6a1,1,0,bcbdba9e-0b29-4ea7-a7d5-1de819bf86ec,bcbdba9e-0b29-4ea7-a7d5-1de819bf86ec,1,0,e0c51555-1614-4aa7-a075-c5e1251579ba,e0c51555-1614-4aa7-a075-c5e1251579ba,1,0,c75a1c6d-fa33-4b57-b359-6253aff5f3e7,c75a1c6d-fa33-4b57-b359-6253aff5f3e7,1,0,af88ea84-5742-4c9f-9a02-6d0f25186f72,af88ea84-5742-4c9f-9a02-6d0f25186f72,1,0,51363236-c8eb-4eb7-9692-5c18edc9a5a8,51363236-c8eb-4eb7-9692-5c18edc9a5a8,1,0,cb65fbad-69a0-47d8-b4a9-da49274c3eb7,cb65fbad-69a0-47d8-b4a9-da49274c3eb7,1,0,872521e3-413c-45ac-a6ea-39fe1324bae8,872521e3-413c-45ac-a6ea-39fe1324bae8,1,0,8adebe50-a946-40c2-9258-b17efe787e0e,8adebe50-a946-40c2-9258-b17efe787e0e,1,0,8cad6cfd-91d0-4563-800a-d60c8a1b6a03,8cad6cfd-91d0-4563-800a-d60c8a1b6a03,1,0,81ef02df-498d-4af0-8254-dc6730cbf140,81ef02df-498d-4af0-8254-dc6730cbf140,1,0,79ad09ba-875a-46bd-9cd9-9d084bf4f6ea,79ad09ba-875a-46bd-9cd9-9d084bf4f6ea,1,0,2902460a-ed86-41cf-8e8f-895adab9a72f,2902460a-ed86-41cf-8e8f-895adab9a72f,1,0,c4968b4e-0715-43a5-92ad-c8cd276fbf7b,c4968b4e-0715-43a5-92ad-c8cd276fbf7b,1,0,402f2fe0-4d08-4701-9c8f-0c2bb75815ef,402f2fe0-4d08-4701-9c8f-0c2bb75815ef,1,0,1a4ed7cf-3294-4a5c-9650-75b61d6b2531,1a4ed7cf-3294-4a5c-9650-75b61d6b2531,1,0,d6b72e00-018a-4fdc-b6a4-06dcecf89809,d6b72e00-018a-4fdc-b6a4-06dcecf89809,1,0,9f816562-57f0-473f-8c85-14f7521ffd7f,9f816562-57f0-473f-8c85-14f7521ffd7f,1,0,917b0acc-88fe-4afc-b19b-6da69e060393,917b0acc-88fe-4afc-b19b-6da69e060393,1,0,a091b76e-8ba4-4534-bbb0-9990e69b8603,a091b76e-8ba4-4534-bbb0-9990e69b8603,1,0,867ee5d2-7566-4052-a311-b56e7e46b90d,867ee5d2-7566-4052-a311-b56e7e46b90d,1,0,f82d5bd6-4c74-4c23-978c-565aae3d752a,f82d5bd6-4c74-4c23-978c-565aae3d752a,1,0,7fba41a5-4faa-412b-b367-b30ced0314c0,7fba41a5-4faa-412b-b367-b30ced0314c0,1,0,98422d20-9a71-40e4-966e-6958d44eaefb,98422d20-9a71-40e4-966e-6958d44eaefb,1,0,37333d0b-3589-4b8b-bf6c-e605e0287b66,37333d0b-3589-4b8b-bf6c-e605e0287b66,1,0,1813c469-da20-46a6-8947-6815b66f64c1,1813c469-da20-46a6-8947-6815b66f64c1,1,0,64e702e9-8934-4356-a1b2-be0e8b390630,64e702e9-8934-4356-a1b2-be0e8b390630,1,0,74880ac4-bdd3-48e6-82a0-a2103da42723,74880ac4-bdd3-48e6-82a0-a2103da42723,1,0,ad083c26-7461-4e94-b524-0174242fbd91,ad083c26-7461-4e94-b524-0174242fbd91,1,0,5ce39370-f918-493f-bb24-53346b6fd836,5ce39370-f918-493f-bb24-53346b6fd836,1,0,84f22fd2-e0d0-42ce-8628-1b13c021a4cb,84f22fd2-e0d0-42ce-8628-1b13c021a4cb,1,0,0e3d2750-bb4c-42b9-9829-60f1480ced9c,0e3d2750-bb4c-42b9-9829-60f1480ced9c,1,0,ddc6761c-a32a-41e1-b110-fdc39ad440d3,ddc6761c-a32a-41e1-b110-fdc39ad440d3,1,0,0b322ee2-b018-4d00-8f05-62ee16e519ff,0b322ee2-b018-4d00-8f05-62ee16e519ff,1,0,0866e282-055a-49bb-9aa5-b1af7c74c344,0866e282-055a-49bb-9aa5-b1af7c74c344,1,0,d1b6c5e8-7625-43aa-bb11-943c9bfa01b7,d1b6c5e8-7625-43aa-bb11-943c9bfa01b7,1,0,dad11c2e-08fc-4a6b-8829-8be6c64c15fc,dad11c2e-08fc-4a6b-8829-8be6c64c15fc,1,0,a76b1fd1-ba00-40e6-8756-f17fee449818,a76b1fd1-ba00-40e6-8756-f17fee449818,1,0,5c913626-48d1-4e0a-a423-64078ce59c7b,5c913626-48d1-4e0a-a423-64078ce59c7b,1,0,0a4e6b7a-b380-4547-bc3c-5d6895a5d19a,0a4e6b7a-b380-4547-bc3c-5d6895a5d19a,1,0,7b0ec304-1904-413e-a9c6-ff62e87107dd,7b0ec304-1904-413e-a9c6-ff62e87107dd,1,0,d4dd8c96-914d-496f-b735-ef85ec473605,d4dd8c96-914d-496f-b735-ef85ec473605,1,0,62517db4-59e6-4945-bcd6-b3f1845572bf,62517db4-59e6-4945-bcd6-b3f1845572bf,1,0,a6a9dd40-24cd-4d40-a12d-44f94f8c05a7,a6a9dd40-24cd-4d40-a12d-44f94f8c05a7,1,0,f0f72149-0e7f-441a-b70d-8f47d4977927,f0f72149-0e7f-441a-b70d-8f47d4977927,1,0,776efc3e-ac27-4550-bafd-6e91aa987af2,776efc3e-ac27-4550-bafd-6e91aa987af2,1,0,9f478c85-b72c-40ae-aa08-7ddf73b5b15c,9f478c85-b72c-40ae-aa08-7ddf73b5b15c,1,0,cc438366-85ea-48be-8b74-d05cddb1fc51,cc438366-85ea-48be-8b74-d05cddb1fc51,1,0,4688fd3b-4a92-4ed8-b111-0cf22a729b1c,4688fd3b-4a92-4ed8-b111-0cf22a729b1c,1,0,92029d1f-0472-4aaa-8fd6-9fb3c3cf414e,92029d1f-0472-4aaa-8fd6-9fb3c3cf414e,1,0,3271b800-1825-422f-97bb-757baf403e90,3271b800-1825-422f-97bb-757baf403e90,1,0,6fd6efc1-facc-4ece-a5b3-3dce6acca81d,6fd6efc1-facc-4ece-a5b3-3dce6acca81d,1,0,4ee82868-7a20-4c3a-91f9-42a6bf53ac37,4ee82868-7a20-4c3a-91f9-42a6bf53ac37,1,0,a040c756-4687-4bfd-a690-b122d3c490e5,a040c756-4687-4bfd-a690-b122d3c490e5,1,0,bd5940d5-13fd-4f59-bb6c-614f93f9c8e4,bd5940d5-13fd-4f59-bb6c-614f93f9c8e4,1,0,961a9801-3956-4ea0-b0d3-908f09bf4929,961a9801-3956-4ea0-b0d3-908f09bf4929,1,0,6fac5c14-e126-4342-9078-edf1d0efcbf2,6fac5c14-e126-4342-9078-edf1d0efcbf2,1,0,0a3325a1-21c4-4997-882f-4ac2edc175f0,0a3325a1-21c4-4997-882f-4ac2edc175f0,1,0,71102d3f-f020-4d6f-9582-9a7eefb4e797,71102d3f-f020-4d6f-9582-9a7eefb4e797,1,0,53ef6849-a3f3-4171-9167-f349f2d6a736,53ef6849-a3f3-4171-9167-f349f2d6a736,1,0,3f588bd3-d461-42b7-8ab1-386af6399d56,3f588bd3-d461-42b7-8ab1-386af6399d56,1,0,c04ff85e-b4af-4a9f-b0e9-c5c65e3d10a1,c04ff85e-b4af-4a9f-b0e9-c5c65e3d10a1,1,0,8c576405-29c1-46b1-ab2e-40e52c21cab0,8c576405-29c1-46b1-ab2e-40e52c21cab0,1,0,b33a89da-8589-4902-83fa-6545e5fce23e,b33a89da-8589-4902-83fa-6545e5fce23e,1,0,f0620d5a-e1fe-419f-af37-e0f462f97e8d,f0620d5a-e1fe-419f-af37-e0f462f97e8d,1,0,3e2f2ae1-c809-43fc-8276-b0a16a92858c,3e2f2ae1-c809-43fc-8276-b0a16a92858c,1,0,b58942ca-1367-4e1d-b5b4-7d973d0fecd8,b58942ca-1367-4e1d-b5b4-7d973d0fecd8,1,0,1a7c7427-bead-4655-9dd6-df6e722663c5,1a7c7427-bead-4655-9dd6-df6e722663c5,1,0,3ad08f4a-6202-4099-b6cc-bc116e6731a0,3ad08f4a-6202-4099-b6cc-bc116e6731a0,1,0,fd96c8ab-602a-4735-b168-52b501e80351,fd96c8ab-602a-4735-b168-52b501e80351,1,0,b1dc619d-8d91-4f7a-aa50-1d07ff9aebdc,b1dc619d-8d91-4f7a-aa50-1d07ff9aebdc,1,0,370f0c75-d2c5-4be5-a633-4bcc77998ece,370f0c75-d2c5-4be5-a633-4bcc77998ece,1,0,f80b505f-b4ff-45fb-bd88-74b274ae9d2b,f80b505f-b4ff-45fb-bd88-74b274ae9d2b,1,0,2139532c-f6cb-4393-936e-cc912e5adca9,2139532c-f6cb-4393-936e-cc912e5adca9,1,0,755c3eca-4956-4a44-9b38-c11dae00b87f,755c3eca-4956-4a44-9b38-c11dae00b87f,1,0,f57c558c-2c94-4b9d-8697-448d0548ab1a,f57c558c-2c94-4b9d-8697-448d0548ab1a,1,0,a310c09f-4d3a-4d3a-9ad5-7a5735a33a1d,a310c09f-4d3a-4d3a-9ad5-7a5735a33a1d,1,0,c32db021-eca1-4b67-aa85-3d6e28c51b53,c32db021-eca1-4b67-aa85-3d6e28c51b53,1,0,e9ed0ee4-3fbe-4093-9078-cb265ed6842c,e9ed0ee4-3fbe-4093-9078-cb265ed6842c,1,0,02466dcf-02a1-4853-814f-a913a9baba45,02466dcf-02a1-4853-814f-a913a9baba45,1,0,c4a40dc9-b619-4219-9d9a-e11f49a14fb1,c4a40dc9-b619-4219-9d9a-e11f49a14fb1,1,0,62b75eb2-42e1-4484-a77f-b676dd36f3d4,62b75eb2-42e1-4484-a77f-b676dd36f3d4,1,0,5e28e22a-dd6e-4703-92bd-13f5cb0dc023,5e28e22a-dd6e-4703-92bd-13f5cb0dc023,1,0,856510ee-74f5-44e9-a3c0-1c60cfb7a787,856510ee-74f5-44e9-a3c0-1c60cfb7a787,1,0,28b761c6-c286-4125-a4ed-da602e49950f,28b761c6-c286-4125-a4ed-da602e49950f,1,0,4ac66a22-c736-4e06-a8aa-ef4a71788c65,4ac66a22-c736-4e06-a8aa-ef4a71788c65,1,0,9cfe9281-8840-4077-824d-a2c9cbb0b730,9cfe9281-8840-4077-824d-a2c9cbb0b730,1,0,76389fa9-b9e0-492e-9c93-24b5f3bf094c,76389fa9-b9e0-492e-9c93-24b5f3bf094c,1,0,23e3de37-9315-45e6-bbfd-60aae28c25ae,23e3de37-9315-45e6-bbfd-60aae28c25ae,1,0,a9957f43-8b6f-4d98-a2d8-77b78047494c,a9957f43-8b6f-4d98-a2d8-77b78047494c,1,0,e470e15d-1b06-43cb-a9f9-ba489e2f596f,e470e15d-1b06-43cb-a9f9-ba489e2f596f,1,0,0408002c-9255-43a2-8022-82f02ee0e8f4,0408002c-9255-43a2-8022-82f02ee0e8f4,1,0,88f44c9b-216d-4d7e-bc88-1e6b253ed01e,88f44c9b-216d-4d7e-bc88-1e6b253ed01e,1,0,1851afd4-5324-45c1-b754-54e65943f945,1851afd4-5324-45c1-b754-54e65943f945,1,0,bc5eca9b-32d8-44e0-a127-8ad1f47d7957,bc5eca9b-32d8-44e0-a127-8ad1f47d7957,1,0,6e5307ea-8fbf-4177-bcc8-f163a6ce1b40,6e5307ea-8fbf-4177-bcc8-f163a6ce1b40,1,0,0fa77ef7-a836-4459-9bca-6010d0bdfc7f,0fa77ef7-a836-4459-9bca-6010d0bdfc7f,1,0,c322dc4a-30f3-4d23-9824-4a01c496408d,c322dc4a-30f3-4d23-9824-4a01c496408d,1,0,dcff004c-1b61-4a19-b977-ea21bf688614,dcff004c-1b61-4a19-b977-ea21bf688614,0,0,0,1,0,0,0,1,0,1,0,1,1,1,1} \ No newline at end of file +{6,1,1,8b825cb1-68ce-4552-bd34-3bd90c60cfa4,1,b9af0789-7e20-49cd-92b0-ac4234aefd09,"3.0.1.204","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",5841,1,0,bd0c51e5-5615-4d2d-a0e6-616b9e2b269c,bd0c51e5-5615-4d2d-a0e6-616b9e2b269c,1,0,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,1,0,9233322b-dfdb-4c66-91fe-1299292d40a5,9233322b-dfdb-4c66-91fe-1299292d40a5,1,0,7795348b-2f52-47f7-bf00-e11e5e795a43,7795348b-2f52-47f7-bf00-e11e5e795a43,1,0,0421b67e-ed26-491d-ab98-ec59002ed4ce,0421b67e-ed26-491d-ab98-ec59002ed4ce,1,0,bb47ced2-31f9-4870-8633-20b986e53ccc,bb47ced2-31f9-4870-8633-20b986e53ccc,1,0,7d8acec9-f5a9-411e-921c-446ed0dd3332,7d8acec9-f5a9-411e-921c-446ed0dd3332,1,0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,1,0,cdbd26b1-9583-46e8-adf7-8cc705639892,cdbd26b1-9583-46e8-adf7-8cc705639892,1,0,c0e38c3e-7088-4e35-9d84-2d0ab9655402,c0e38c3e-7088-4e35-9d84-2d0ab9655402,1,0,1098786f-dd24-4cce-b212-be0cb5f01735,1098786f-dd24-4cce-b212-be0cb5f01735,1,0,3c0037f3-4422-4836-b116-8c72e32bdd55,3c0037f3-4422-4836-b116-8c72e32bdd55,1,0,6f7c6c31-206b-4010-bdad-1ad2e304f154,6f7c6c31-206b-4010-bdad-1ad2e304f154,1,0,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,1,0,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,1,0,5b68d479-7880-44de-84e3-7f578b43f0dc,5b68d479-7880-44de-84e3-7f578b43f0dc,1,0,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,1,0,b4629308-42de-4ce8-8591-cf0c2399a9a2,b4629308-42de-4ce8-8591-cf0c2399a9a2,1,0,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,1,0,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,1,0,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,1,0,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1,0,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,1,0,b93b8760-6200-40ee-8bdc-875ba80a6155,b93b8760-6200-40ee-8bdc-875ba80a6155,1,0,c27472ee-879a-4746-9d21-122738ec80b7,c27472ee-879a-4746-9d21-122738ec80b7,1,0,e8b248d9-9049-456a-9c7d-7a0462cc67ab,e8b248d9-9049-456a-9c7d-7a0462cc67ab,1,0,d4562287-440d-4462-9de2-7097ccbf3764,d4562287-440d-4462-9de2-7097ccbf3764,1,0,ec797c75-02c5-4cf5-9dd4-26cd46c99519,ec797c75-02c5-4cf5-9dd4-26cd46c99519,1,0,6fccdf59-fc99-4a2b-a144-fffe438a147c,6fccdf59-fc99-4a2b-a144-fffe438a147c,1,0,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,1,0,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,83192b3e-e7a9-4595-8887-24cda84457a9,83192b3e-e7a9-4595-8887-24cda84457a9,1,0,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,1,0,c8a4c5da-bc88-4f6e-9787-1c22c2f41be7,c8a4c5da-bc88-4f6e-9787-1c22c2f41be7,1,0,08eeb8f1-944f-4450-83f6-ef20aaab7d86,08eeb8f1-944f-4450-83f6-ef20aaab7d86,1,0,d8c58e53-b7b9-4426-bdfa-d0816adf8cc1,d8c58e53-b7b9-4426-bdfa-d0816adf8cc1,1,0,8d77dd4a-e646-4105-8dcf-8ce8fc3da0b4,8d77dd4a-e646-4105-8dcf-8ce8fc3da0b4,1,0,2fd12dba-5311-4f31-949c-f6b15decc0cc,2fd12dba-5311-4f31-949c-f6b15decc0cc,1,0,d7cf3981-cf63-4a21-868b-8175a7704a8f,d7cf3981-cf63-4a21-868b-8175a7704a8f,1,0,35895e12-52b6-49a1-acdf-6d828a948af0,35895e12-52b6-49a1-acdf-6d828a948af0,1,0,0ae93712-74e8-41c7-8f2d-4dfc8983697d,0ae93712-74e8-41c7-8f2d-4dfc8983697d,1,0,060b6f18-538c-4ea1-9748-00efe0b1ab57,060b6f18-538c-4ea1-9748-00efe0b1ab57,1,0,307b6821-fd82-4a1c-9fdb-a26293d4f713,307b6821-fd82-4a1c-9fdb-a26293d4f713,1,0,a952960b-be1b-4ec4-bd76-80915065a60b,a952960b-be1b-4ec4-bd76-80915065a60b,1,0,64f548c8-c1fc-434e-b3ee-5be367ead1db,64f548c8-c1fc-434e-b3ee-5be367ead1db,1,0,9e4dfdfa-ec05-4c9e-89bd-fc24f60f2678,9e4dfdfa-ec05-4c9e-89bd-fc24f60f2678,1,0,cd592a5d-b184-4558-8a28-7079ccf28b89,cd592a5d-b184-4558-8a28-7079ccf28b89,1,0,2009c673-c1a5-45fc-8da2-a36c435085a6,2009c673-c1a5-45fc-8da2-a36c435085a6,1,0,ab7e5f9a-1dfe-4165-a540-21f45ae1d94d,ab7e5f9a-1dfe-4165-a540-21f45ae1d94d,1,0,5d16e042-3889-4851-86f1-bc43bf06ee88,5d16e042-3889-4851-86f1-bc43bf06ee88,1,0,e5a0e7c2-6186-43a3-a1c5-1f16990602a4,e5a0e7c2-6186-43a3-a1c5-1f16990602a4,1,0,3d47838b-e1aa-4acb-96bf-6de2f9be8bdb,3d47838b-e1aa-4acb-96bf-6de2f9be8bdb,1,0,e0d3efe0-a321-4790-ba5d-e549a91a3ec6,e0d3efe0-a321-4790-ba5d-e549a91a3ec6,1,0,e39ecc8a-ce81-483d-85de-b0488c8b7749,e39ecc8a-ce81-483d-85de-b0488c8b7749,1,0,8f3b124f-bf85-4307-8f0c-47be1fb5c8b0,8f3b124f-bf85-4307-8f0c-47be1fb5c8b0,1,0,e15c3525-3453-4b62-834e-7c69f9efea51,e15c3525-3453-4b62-834e-7c69f9efea51,1,0,1514eaff-faea-4d82-9465-d0d5292bb31d,1514eaff-faea-4d82-9465-d0d5292bb31d,1,0,6d39c6df-8cd4-47ad-9125-252b37d94575,6d39c6df-8cd4-47ad-9125-252b37d94575,1,0,ad73f3a3-1dad-4920-af41-bda2b947a2f7,ad73f3a3-1dad-4920-af41-bda2b947a2f7,1,0,98b67b5a-3550-4a64-9e07-07fcc9154c73,98b67b5a-3550-4a64-9e07-07fcc9154c73,1,0,ad7c6165-2e44-4808-a77a-526882cf5dea,ad7c6165-2e44-4808-a77a-526882cf5dea,1,0,b7e435a9-6107-4d02-a949-cff793462e31,b7e435a9-6107-4d02-a949-cff793462e31,1,0,f0cda8f5-56f5-423b-8c1c-7113433ebf25,f0cda8f5-56f5-423b-8c1c-7113433ebf25,1,0,1a220e88-428b-4d85-926d-e572bf19997c,1a220e88-428b-4d85-926d-e572bf19997c,1,0,ca0d938b-244e-421f-9fa4-320784b9f416,ca0d938b-244e-421f-9fa4-320784b9f416,1,0,a108b11d-a489-4684-84ea-d5377c7394de,a108b11d-a489-4684-84ea-d5377c7394de,1,0,289a2d84-2477-4177-a6ef-507e2cadeea2,289a2d84-2477-4177-a6ef-507e2cadeea2,1,0,61cd6eab-6bab-4382-986e-4c7fc44f369b,61cd6eab-6bab-4382-986e-4c7fc44f369b,1,0,757b547b-b79c-459a-a64a-eef19a09a38f,757b547b-b79c-459a-a64a-eef19a09a38f,1,0,950f8fd5-fefa-4bfb-97a0-38d77ae830dc,950f8fd5-fefa-4bfb-97a0-38d77ae830dc,1,0,cbbe7903-842c-470e-a2d6-7928df8f13e9,cbbe7903-842c-470e-a2d6-7928df8f13e9,1,0,e02597c4-bf45-4bb6-931d-62d2244f6c58,e02597c4-bf45-4bb6-931d-62d2244f6c58,1,0,42544966-445d-41b8-b6a0-a52c64758232,42544966-445d-41b8-b6a0-a52c64758232,1,0,a92d8a5c-b595-4c6c-9f1d-5e85b1c996b4,a92d8a5c-b595-4c6c-9f1d-5e85b1c996b4,1,0,bd68dd13-66bb-40ed-8f4b-0767b7063ffd,bd68dd13-66bb-40ed-8f4b-0767b7063ffd,1,0,9eea8645-1ba7-4faf-9c29-868bf99964dd,9eea8645-1ba7-4faf-9c29-868bf99964dd,1,0,e07ac651-07b9-4664-95e8-f3f5a51ea6c8,e07ac651-07b9-4664-95e8-f3f5a51ea6c8,1,0,0c44fdea-7b81-45be-87f5-d64456a9d379,0c44fdea-7b81-45be-87f5-d64456a9d379,1,0,d09d6f21-cdd0-485e-bd2c-92092a1aefef,d09d6f21-cdd0-485e-bd2c-92092a1aefef,1,0,2fc92784-d7b0-4209-ba06-e54bed2f160f,2fc92784-d7b0-4209-ba06-e54bed2f160f,1,0,d5a5f53b-9cd5-4036-a379-31680cec3c24,d5a5f53b-9cd5-4036-a379-31680cec3c24,1,0,e5b8ea5c-1d08-4f0a-a8f6-358b41e2e9f2,e5b8ea5c-1d08-4f0a-a8f6-358b41e2e9f2,1,0,a4e4c91c-fd95-4369-98e3-51ffba79937b,a4e4c91c-fd95-4369-98e3-51ffba79937b,1,0,d343d4e4-d07f-48c3-9db1-774b0d6c1134,d343d4e4-d07f-48c3-9db1-774b0d6c1134,1,0,14ef2331-6d9b-4cf1-90f3-7d4ac410439d,14ef2331-6d9b-4cf1-90f3-7d4ac410439d,1,0,04ab13b1-ffc2-47f5-aa0d-5850dcbd4a62,04ab13b1-ffc2-47f5-aa0d-5850dcbd4a62,1,0,968588bb-ee60-4399-955a-3ec4228d3c40,968588bb-ee60-4399-955a-3ec4228d3c40,1,0,23dbb528-7ea8-44ae-a1f2-b7608118666e,23dbb528-7ea8-44ae-a1f2-b7608118666e,1,0,b9627855-6773-4a59-b7d3-f9e2e565cd9e,b9627855-6773-4a59-b7d3-f9e2e565cd9e,1,0,ad87bd29-0ad1-4da4-ac62-38e714e0cb9f,ad87bd29-0ad1-4da4-ac62-38e714e0cb9f,1,0,283ce432-3553-4de9-94a2-ca9a590437f5,283ce432-3553-4de9-94a2-ca9a590437f5,1,0,0da019ca-1fc7-4aff-8998-3ddcccf10872,0da019ca-1fc7-4aff-8998-3ddcccf10872,1,0,7102d4fa-92f2-4fba-ad09-a33dbc71bef2,7102d4fa-92f2-4fba-ad09-a33dbc71bef2,1,0,34b0e268-497d-44d4-b822-84909d0685aa,34b0e268-497d-44d4-b822-84909d0685aa,1,0,8961a859-2203-4678-ae1f-63e2474a787a,8961a859-2203-4678-ae1f-63e2474a787a,1,0,fe63db47-3ece-4518-b6a2-0b6499f60a61,fe63db47-3ece-4518-b6a2-0b6499f60a61,1,0,654523be-93d9-4faa-9a35-ce2fede13820,654523be-93d9-4faa-9a35-ce2fede13820,1,0,671afc3e-7589-49d8-95a5-1cf195c3b2f8,671afc3e-7589-49d8-95a5-1cf195c3b2f8,1,0,47accdc7-8fa0-4996-9305-c42b6ca12df9,47accdc7-8fa0-4996-9305-c42b6ca12df9,1,0,5abc496c-5745-4220-9fdc-bac092717871,5abc496c-5745-4220-9fdc-bac092717871,1,0,6b29b4b3-df0a-42f7-b89f-809ffbdacf02,6b29b4b3-df0a-42f7-b89f-809ffbdacf02,1,0,43d8dd53-df3e-407e-a3c1-5b893cc1976c,43d8dd53-df3e-407e-a3c1-5b893cc1976c,1,0,b8c4aff0-a36d-4be9-9a5e-b0873d83ff15,b8c4aff0-a36d-4be9-9a5e-b0873d83ff15,1,0,5a88f624-7b7e-43fe-8bc4-ae85d832a855,5a88f624-7b7e-43fe-8bc4-ae85d832a855,1,0,42e39ef7-268f-4053-b4e5-4bceab17d3e4,42e39ef7-268f-4053-b4e5-4bceab17d3e4,1,0,7df36398-7752-4f51-9978-1bcb4bcdd062,7df36398-7752-4f51-9978-1bcb4bcdd062,1,0,9fd55b7f-209b-4b74-99d6-965b8f6f2df9,9fd55b7f-209b-4b74-99d6-965b8f6f2df9,1,0,f818fde9-1b06-4507-a69f-4dcb0ce8cd7a,f818fde9-1b06-4507-a69f-4dcb0ce8cd7a,1,0,a6690ef1-b16a-4d58-bc31-a8089b2c00d8,a6690ef1-b16a-4d58-bc31-a8089b2c00d8,1,0,fce03f58-7f68-4d7c-a999-687667c1f03d,fce03f58-7f68-4d7c-a999-687667c1f03d,1,0,316f94ec-81ed-4b5c-aa9d-98d2cfe1c641,316f94ec-81ed-4b5c-aa9d-98d2cfe1c641,1,0,f4885af5-6ed6-40e8-81a5-0e9537f943d7,f4885af5-6ed6-40e8-81a5-0e9537f943d7,1,0,87472d14-0d8c-4813-8a3e-2721bbb26811,87472d14-0d8c-4813-8a3e-2721bbb26811,1,0,44cf6d0a-0a5b-4ca1-b91e-af61f40fb825,44cf6d0a-0a5b-4ca1-b91e-af61f40fb825,1,0,dcdf2b25-b024-4a89-b2c4-0a2ee43ef623,dcdf2b25-b024-4a89-b2c4-0a2ee43ef623,1,0,9200527c-b6b9-4962-9440-10449583e1e3,9200527c-b6b9-4962-9440-10449583e1e3,1,0,e8faa1a9-807a-4916-b3c5-76ba2199754c,e8faa1a9-807a-4916-b3c5-76ba2199754c,1,0,99b5c632-61fe-41f5-ac00-ea530633bf28,99b5c632-61fe-41f5-ac00-ea530633bf28,1,0,a3c9c4e7-d36a-4db1-bd95-a50886c4be60,a3c9c4e7-d36a-4db1-bd95-a50886c4be60,1,0,4c53f94e-d7e8-457c-b337-59d3b3c5bf24,4c53f94e-d7e8-457c-b337-59d3b3c5bf24,1,0,bd6d7dcd-421c-402e-b6b8-f6ce6b18c140,bd6d7dcd-421c-402e-b6b8-f6ce6b18c140,1,0,485911f7-a964-450d-82da-cab020836eb2,485911f7-a964-450d-82da-cab020836eb2,1,0,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,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,c2049ace-3095-4dd7-9cc0-7721118451ad,c2049ace-3095-4dd7-9cc0-7721118451ad,1,0,dc17d8b6-d277-43eb-8823-71d440ae1e90,dc17d8b6-d277-43eb-8823-71d440ae1e90,1,0,c5b8bf21-5c8f-4e5b-8b85-bfac387ce99a,c5b8bf21-5c8f-4e5b-8b85-bfac387ce99a,1,0,2465986e-7519-4638-9f62-5f692bebeeac,2465986e-7519-4638-9f62-5f692bebeeac,1,0,d9a6706e-3dcd-4aec-b9d1-542330ba6e2e,d9a6706e-3dcd-4aec-b9d1-542330ba6e2e,1,0,7cbf0398-2bc7-4f40-9a9e-af4135c6a2d2,7cbf0398-2bc7-4f40-9a9e-af4135c6a2d2,1,0,022f99dd-e1b7-42a7-8141-a8c2e8628901,022f99dd-e1b7-42a7-8141-a8c2e8628901,1,0,cc770616-f6f6-4054-876c-f319b1f8c6cf,cc770616-f6f6-4054-876c-f319b1f8c6cf,1,0,3baffdec-a2cb-48c9-9c21-4fc469e81e3b,3baffdec-a2cb-48c9-9c21-4fc469e81e3b,1,0,8486e623-1a54-4ad9-ab44-591b6a559bc3,8486e623-1a54-4ad9-ab44-591b6a559bc3,1,0,dce82d28-9a7b-4d4c-af13-90f459cf4af2,dce82d28-9a7b-4d4c-af13-90f459cf4af2,1,0,cb9f2231-49bb-4b14-a124-8996628afead,cb9f2231-49bb-4b14-a124-8996628afead,1,0,6fe9a455-7fef-4a1b-8109-57eafc17e2b6,6fe9a455-7fef-4a1b-8109-57eafc17e2b6,1,0,dc1b8bce-49c5-4fd2-a597-27f1fbc98648,dc1b8bce-49c5-4fd2-a597-27f1fbc98648,1,0,ac4c6275-3c23-4a1f-b19e-c674fd685e8f,ac4c6275-3c23-4a1f-b19e-c674fd685e8f,1,0,896de79f-3c34-4436-a4e2-4dd4f45c3e20,896de79f-3c34-4436-a4e2-4dd4f45c3e20,1,0,25d118f0-bfb7-4f08-84b1-0511b0fc92e8,25d118f0-bfb7-4f08-84b1-0511b0fc92e8,1,0,e6c42b5d-57fd-42ce-a968-653620e797f6,e6c42b5d-57fd-42ce-a968-653620e797f6,1,0,724fb328-fec6-4afe-bc99-0ff0951b184b,724fb328-fec6-4afe-bc99-0ff0951b184b,1,0,7a0cdc94-9e53-4fcc-ac2f-97ad2ad939f5,7a0cdc94-9e53-4fcc-ac2f-97ad2ad939f5,1,0,f6259a3b-98f5-4649-8fd0-da0a0285f375,f6259a3b-98f5-4649-8fd0-da0a0285f375,1,0,c565bf25-c55e-4324-851a-cec497f5114a,c565bf25-c55e-4324-851a-cec497f5114a,1,0,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,92f35bea-50b8-4a1c-8fb2-a8c7df7a50db,92f35bea-50b8-4a1c-8fb2-a8c7df7a50db,1,0,82ba8c13-6567-4f0c-be0e-0884ce19bbcc,82ba8c13-6567-4f0c-be0e-0884ce19bbcc,1,0,4bdc1a18-f184-4f95-bda4-8f5c4b7c3aa1,4bdc1a18-f184-4f95-bda4-8f5c4b7c3aa1,1,0,697bd1de-bbef-4362-aa39-71f6008f4bd7,697bd1de-bbef-4362-aa39-71f6008f4bd7,1,0,a3e9afe9-1587-47c7-8e7b-b8df6b3a2664,a3e9afe9-1587-47c7-8e7b-b8df6b3a2664,1,0,0e31d69a-8d2c-4ad0-b3ac-93ba5afcefdf,0e31d69a-8d2c-4ad0-b3ac-93ba5afcefdf,1,0,3de28e34-3c1e-4e7f-a720-3418c8c9c496,3de28e34-3c1e-4e7f-a720-3418c8c9c496,1,0,7f2d69b4-2f87-40f4-a78c-fe4cabc2a502,7f2d69b4-2f87-40f4-a78c-fe4cabc2a502,1,0,dacb236e-42a5-47e5-b239-ff18ae48e21e,dacb236e-42a5-47e5-b239-ff18ae48e21e,1,0,5cdb6e71-fd20-461a-83db-d59ccdb5b366,5cdb6e71-fd20-461a-83db-d59ccdb5b366,1,0,388b8576-9ba4-460f-b71b-3d644663656a,388b8576-9ba4-460f-b71b-3d644663656a,1,0,d4d38827-fce6-4c39-a4b4-51c7d7edc475,d4d38827-fce6-4c39-a4b4-51c7d7edc475,1,0,2d40609d-b56f-4082-9a6f-8216817ebd24,2d40609d-b56f-4082-9a6f-8216817ebd24,1,0,b238b4b2-beaf-4b5d-a728-8aebac3bacb5,b238b4b2-beaf-4b5d-a728-8aebac3bacb5,1,0,732b19c8-4f22-4748-a796-71538e46fc2f,732b19c8-4f22-4748-a796-71538e46fc2f,1,0,9fb2169b-fc77-4a3f-a1d8-b939079d9d9d,9fb2169b-fc77-4a3f-a1d8-b939079d9d9d,1,0,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,7fa6a20a-26e2-41ad-be66-a43b50d0bbcd,7fa6a20a-26e2-41ad-be66-a43b50d0bbcd,1,0,ab5b0155-a4b1-47a1-ad87-12365dde20c1,ab5b0155-a4b1-47a1-ad87-12365dde20c1,1,0,f551f78a-2f05-4932-ac33-cfa1b077f46f,f551f78a-2f05-4932-ac33-cfa1b077f46f,1,0,a96091a7-d3a5-4893-8440-f360231bf468,a96091a7-d3a5-4893-8440-f360231bf468,1,0,9ce6eef0-5280-4374-9714-474ac571e4e2,9ce6eef0-5280-4374-9714-474ac571e4e2,1,0,6f21c34c-26aa-493d-aa08-2d4366b4064a,6f21c34c-26aa-493d-aa08-2d4366b4064a,1,0,0f55650a-2422-42a9-8258-61df4c17f1ef,0f55650a-2422-42a9-8258-61df4c17f1ef,1,0,2ef4ea1d-fd86-4ef3-a7e0-73abba89474d,2ef4ea1d-fd86-4ef3-a7e0-73abba89474d,1,0,3eaece9d-c9be-4b0b-a6f6-a3932274b806,3eaece9d-c9be-4b0b-a6f6-a3932274b806,1,0,5d9427ec-981d-4fb5-878b-8dba0d3a5536,5d9427ec-981d-4fb5-878b-8dba0d3a5536,1,0,c5dd6184-96e5-4abc-8c1e-5270e6547ee5,c5dd6184-96e5-4abc-8c1e-5270e6547ee5,1,0,a0047712-5769-495d-97af-20d06751a5b4,a0047712-5769-495d-97af-20d06751a5b4,1,0,e729c3c6-16e5-405b-99b1-a88022300c6d,e729c3c6-16e5-405b-99b1-a88022300c6d,1,0,9c089520-8233-42f6-8eee-9839ac708c6f,9c089520-8233-42f6-8eee-9839ac708c6f,1,0,24f2cfc7-6dc0-400c-8eb2-106ca2ea7034,24f2cfc7-6dc0-400c-8eb2-106ca2ea7034,1,0,5f3ffa44-49be-4da5-ab2a-a35c9bd76dee,5f3ffa44-49be-4da5-ab2a-a35c9bd76dee,1,0,89055896-49dd-4cfd-ab78-8ac3698e12d5,89055896-49dd-4cfd-ab78-8ac3698e12d5,1,0,aeb54e92-a1d0-46a1-b4cb-87d3c29fa30b,aeb54e92-a1d0-46a1-b4cb-87d3c29fa30b,1,0,8395bfb2-3cf4-4bec-b19b-eb6dd3aa7a39,8395bfb2-3cf4-4bec-b19b-eb6dd3aa7a39,1,0,672c4741-6d7b-4d3e-baa7-389bef0625d7,672c4741-6d7b-4d3e-baa7-389bef0625d7,1,0,04398ec0-1c13-43f8-8f5d-7b7619592a4d,04398ec0-1c13-43f8-8f5d-7b7619592a4d,1,0,ce463861-92df-47f2-bd0f-4a2dbf72aacc,ce463861-92df-47f2-bd0f-4a2dbf72aacc,1,0,eca79a64-3d00-4178-b4eb-cf5468622c96,eca79a64-3d00-4178-b4eb-cf5468622c96,1,0,1487d68c-7a2f-48cf-8c80-4074072ed52c,1487d68c-7a2f-48cf-8c80-4074072ed52c,1,0,6ed8c74c-6b6e-4ed1-95ff-a733f618b213,6ed8c74c-6b6e-4ed1-95ff-a733f618b213,1,0,d97c6536-fd62-4c9a-b83e-490a29a0721b,d97c6536-fd62-4c9a-b83e-490a29a0721b,1,0,60cd8bc4-6a5d-4d36-83d0-76a8477eda6a,60cd8bc4-6a5d-4d36-83d0-76a8477eda6a,1,0,6dc4c216-e49f-4833-b45f-6060b67995ef,6dc4c216-e49f-4833-b45f-6060b67995ef,1,0,4655fa12-9169-4d08-bdab-9b3174d0b223,4655fa12-9169-4d08-bdab-9b3174d0b223,1,0,6c07ddfb-8823-4953-9905-9550b847dc3f,6c07ddfb-8823-4953-9905-9550b847dc3f,1,0,2362a8d5-dca2-4527-acc0-63782377f28a,2362a8d5-dca2-4527-acc0-63782377f28a,1,0,dfd6d85c-a734-4458-83b0-87b5949f9c68,dfd6d85c-a734-4458-83b0-87b5949f9c68,1,0,4e3b0b9f-45b7-48a8-86c6-cc14a921aa78,4e3b0b9f-45b7-48a8-86c6-cc14a921aa78,1,0,79b6ecf5-8a6b-44a4-9587-5f8764463228,79b6ecf5-8a6b-44a4-9587-5f8764463228,1,0,cd49148c-e385-4b75-a758-a93196e73dba,cd49148c-e385-4b75-a758-a93196e73dba,1,0,ece15c4e-4a4b-421b-9f00-10f698da476b,ece15c4e-4a4b-421b-9f00-10f698da476b,1,0,6cb136cd-dc5c-4d85-8a0d-70b9f8bf70d5,6cb136cd-dc5c-4d85-8a0d-70b9f8bf70d5,1,0,300ecdd6-144f-48c8-9fd4-6166f1de1047,300ecdd6-144f-48c8-9fd4-6166f1de1047,1,0,b6bbfb59-8249-47af-9394-be262f118811,b6bbfb59-8249-47af-9394-be262f118811,1,0,15dab650-f7ed-42bc-8ca3-c104c3e68ce4,15dab650-f7ed-42bc-8ca3-c104c3e68ce4,1,0,fb63d488-fb91-4d08-8f8c-f4836538216f,fb63d488-fb91-4d08-8f8c-f4836538216f,1,0,b8be6c09-6880-45d3-a2d1-06ad72d069c9,b8be6c09-6880-45d3-a2d1-06ad72d069c9,1,0,3c1b10c7-3667-43f0-ac03-8cdaa84cb177,3c1b10c7-3667-43f0-ac03-8cdaa84cb177,1,0,148dd521-8754-451b-803b-cbee7c3d3965,148dd521-8754-451b-803b-cbee7c3d3965,1,0,38bc48c7-3938-47be-be3f-844f19561301,38bc48c7-3938-47be-be3f-844f19561301,1,0,4bdd09d5-6bc9-421f-99f0-ae905340f0d4,4bdd09d5-6bc9-421f-99f0-ae905340f0d4,1,0,147038fb-6154-41f3-aad6-547db27d1e43,147038fb-6154-41f3-aad6-547db27d1e43,1,0,832fa9d3-deab-4c57-b6e2-dee5d24d6100,832fa9d3-deab-4c57-b6e2-dee5d24d6100,1,0,dd4270ef-6b4c-491e-8871-959dbec14c53,dd4270ef-6b4c-491e-8871-959dbec14c53,1,0,c2b115d3-04f8-43c8-aed9-c61280b8cc3b,c2b115d3-04f8-43c8-aed9-c61280b8cc3b,1,0,8ccd9be8-ef26-49b9-8cee-03ae4e500386,8ccd9be8-ef26-49b9-8cee-03ae4e500386,1,0,ddca925c-fdcd-40ce-a504-4fca1758de3f,ddca925c-fdcd-40ce-a504-4fca1758de3f,1,0,f64de21f-5a7c-4a1a-a929-07fc53049f6c,f64de21f-5a7c-4a1a-a929-07fc53049f6c,1,0,470cdf43-07f4-46d5-aab2-d41f1e5da3cd,470cdf43-07f4-46d5-aab2-d41f1e5da3cd,1,0,ea653eca-f96a-447d-8b09-7a7cb6929ed6,ea653eca-f96a-447d-8b09-7a7cb6929ed6,1,0,ea07cd11-418c-4e4f-be9f-c160ee8a64e8,ea07cd11-418c-4e4f-be9f-c160ee8a64e8,1,0,5efc4bc4-b711-4620-8d2e-9d947c6cc141,5efc4bc4-b711-4620-8d2e-9d947c6cc141,1,0,1d8d0eed-caaa-494c-aeea-0df5846fc97a,1d8d0eed-caaa-494c-aeea-0df5846fc97a,1,0,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,bd727741-ba99-484d-9d7d-2c2ad7ddd1a5,bd727741-ba99-484d-9d7d-2c2ad7ddd1a5,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,933cbafc-5667-4a91-8b1d-dca3d7662522,933cbafc-5667-4a91-8b1d-dca3d7662522,1,0,59acaca9-ed29-4927-bee6-287c91934690,59acaca9-ed29-4927-bee6-287c91934690,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,fd317d96-380e-4ee7-a25b-401e8521cc7a,fd317d96-380e-4ee7-a25b-401e8521cc7a,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,77de81f0-97c5-4751-9f38-f5785c7c45e0,77de81f0-97c5-4751-9f38-f5785c7c45e0,1,0,64837ad8-3055-4da3-a39c-0e7db38b6084,64837ad8-3055-4da3-a39c-0e7db38b6084,1,0,31ba33d4-5941-4b11-ae99-b15188bfef76,31ba33d4-5941-4b11-ae99-b15188bfef76,1,0,10620b9b-283c-4252-b839-5b71ce6e804b,10620b9b-283c-4252-b839-5b71ce6e804b,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,7309e58d-b0d4-4e0f-a74d-68cab03fea8e,7309e58d-b0d4-4e0f-a74d-68cab03fea8e,1,0,bbec9c3d-31dd-484e-ab32-41ef845f1370,bbec9c3d-31dd-484e-ab32-41ef845f1370,1,0,8692ba41-d91d-4af0-8aba-69dd5409d593,8692ba41-d91d-4af0-8aba-69dd5409d593,1,0,5cc3a29d-aa98-42bf-9800-f584229c8e46,5cc3a29d-aa98-42bf-9800-f584229c8e46,1,0,a95b564a-c895-40f2-b947-ea08462bb2a0,a95b564a-c895-40f2-b947-ea08462bb2a0,1,0,1e015740-5b45-4729-9732-57359a7c602f,1e015740-5b45-4729-9732-57359a7c602f,1,0,db82191f-77bd-44da-8b33-86f01018e25a,db82191f-77bd-44da-8b33-86f01018e25a,1,0,ca63ca2f-703d-4317-8c5d-0650ea638f3f,ca63ca2f-703d-4317-8c5d-0650ea638f3f,1,0,aa2256c7-9847-40a5-9e49-11c508e0d45b,aa2256c7-9847-40a5-9e49-11c508e0d45b,1,0,a04493f4-508c-4047-b0e3-b7d4bde6427b,a04493f4-508c-4047-b0e3-b7d4bde6427b,1,0,418982cd-d403-47cf-a7ef-993a36104947,418982cd-d403-47cf-a7ef-993a36104947,1,0,485ebc6a-0e3e-4278-8ef1-c6194d6d5015,485ebc6a-0e3e-4278-8ef1-c6194d6d5015,1,0,816c8143-8b02-4f4a-8eb1-44c7fb36afcc,816c8143-8b02-4f4a-8eb1-44c7fb36afcc,1,0,35eea3b8-d017-442a-b5a0-a1571165b9a9,35eea3b8-d017-442a-b5a0-a1571165b9a9,1,0,7e84901c-cb7f-437c-a135-0902cd47acb6,7e84901c-cb7f-437c-a135-0902cd47acb6,1,0,da2b47f5-4109-4f72-a4a5-70be24a6881f,da2b47f5-4109-4f72-a4a5-70be24a6881f,1,0,849f034e-85dc-4515-aae6-240c1e0d46d9,849f034e-85dc-4515-aae6-240c1e0d46d9,1,0,5fbea8c7-48e3-4ed0-a8d0-cf942b37a166,5fbea8c7-48e3-4ed0-a8d0-cf942b37a166,1,0,d85ba2d1-63e9-4680-bd88-6c0c4dba5d0f,d85ba2d1-63e9-4680-bd88-6c0c4dba5d0f,1,0,acfa1919-07ce-4464-8552-6b104e284dca,acfa1919-07ce-4464-8552-6b104e284dca,1,0,cd74d617-8ebe-4a7d-b011-38c98d856d8c,cd74d617-8ebe-4a7d-b011-38c98d856d8c,1,0,f4cff4ff-68e9-4072-971e-1b359d3aa980,f4cff4ff-68e9-4072-971e-1b359d3aa980,1,0,f9a5bd40-7c56-4ced-bddb-a66c1fc31b81,f9a5bd40-7c56-4ced-bddb-a66c1fc31b81,1,0,fdb012c9-583a-42af-95da-070e75a58078,fdb012c9-583a-42af-95da-070e75a58078,1,0,7d069b11-cddd-463d-97be-3cbeaaf0954c,7d069b11-cddd-463d-97be-3cbeaaf0954c,1,0,8c5fae4c-b5b6-4e05-9453-4ac5de07c54c,8c5fae4c-b5b6-4e05-9453-4ac5de07c54c,1,0,8242daae-181a-47df-b28e-c1de3fce0359,8242daae-181a-47df-b28e-c1de3fce0359,1,0,8de2c020-0ebe-4374-93d7-d2e19ed82470,8de2c020-0ebe-4374-93d7-d2e19ed82470,1,0,d1b950b0-dd66-49f9-998e-3ae5e820ae7f,d1b950b0-dd66-49f9-998e-3ae5e820ae7f,1,0,57e39881-cbf9-4cac-9ed0-bf4a6ea667ee,57e39881-cbf9-4cac-9ed0-bf4a6ea667ee,1,0,b9004626-915c-44c8-9cb7-25e5b627ee83,b9004626-915c-44c8-9cb7-25e5b627ee83,1,0,63c6cfad-124d-491a-829d-b298463c95e6,63c6cfad-124d-491a-829d-b298463c95e6,1,0,737404de-5b9d-4445-81c5-2c5b50b36846,737404de-5b9d-4445-81c5-2c5b50b36846,1,0,1e020429-ac68-46f4-b34c-c2c4a2b494f6,1e020429-ac68-46f4-b34c-c2c4a2b494f6,1,0,1c1a5bf8-bbe6-4a69-973e-11445175dac2,1c1a5bf8-bbe6-4a69-973e-11445175dac2,1,0,f11ffcfd-3588-4785-b222-cebe80455303,f11ffcfd-3588-4785-b222-cebe80455303,1,0,789a2027-8601-434c-bf47-37696a3966ad,789a2027-8601-434c-bf47-37696a3966ad,1,0,1c7e9baa-7728-4afd-829a-806cee13ecdb,1c7e9baa-7728-4afd-829a-806cee13ecdb,1,0,5d216c28-0724-4e7d-86cf-b6f75e7e28b7,5d216c28-0724-4e7d-86cf-b6f75e7e28b7,1,0,bfdc6346-db5b-427f-acca-9b48db8fefd0,bfdc6346-db5b-427f-acca-9b48db8fefd0,1,0,1c3f258c-345e-47f6-9e29-98b1222fb348,1c3f258c-345e-47f6-9e29-98b1222fb348,1,0,dfafcdf3-cdeb-4822-9f41-a730d9d3fb24,dfafcdf3-cdeb-4822-9f41-a730d9d3fb24,1,0,4c3085e1-2f86-4af4-a392-ab45e30a7152,4c3085e1-2f86-4af4-a392-ab45e30a7152,1,0,35c938f4-065f-47f5-a75b-637ed0080725,35c938f4-065f-47f5-a75b-637ed0080725,1,0,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,6f3c5b90-b030-4267-a973-33d12c2c7680,6f3c5b90-b030-4267-a973-33d12c2c7680,1,0,1ff8210b-26c5-4429-b580-7c6ec7c9b63a,1ff8210b-26c5-4429-b580-7c6ec7c9b63a,1,0,c6af8b0f-3767-4198-88e2-f5763cb0294a,c6af8b0f-3767-4198-88e2-f5763cb0294a,1,0,b107a4a8-0db8-44f4-93f7-9f231e850398,b107a4a8-0db8-44f4-93f7-9f231e850398,1,0,88b879b7-1bb3-4478-b569-35bdb5c56939,88b879b7-1bb3-4478-b569-35bdb5c56939,1,0,7a62d031-c340-4b1e-90af-fff697a2e979,7a62d031-c340-4b1e-90af-fff697a2e979,1,0,18bf6916-83cc-41e5-a35b-1489450ae632,18bf6916-83cc-41e5-a35b-1489450ae632,1,0,ebab97cf-5335-4648-9845-8ca41f79fb49,ebab97cf-5335-4648-9845-8ca41f79fb49,1,0,bb29fa44-6772-4426-a0b8-422115e14288,bb29fa44-6772-4426-a0b8-422115e14288,1,0,904e1209-91d8-49b1-b291-364ef728cbbf,904e1209-91d8-49b1-b291-364ef728cbbf,1,0,1198f2ee-b8a8-456d-9461-61bc5d42c7a1,1198f2ee-b8a8-456d-9461-61bc5d42c7a1,1,0,b8ecb7f0-ef40-4d31-9ec2-a731439d3200,b8ecb7f0-ef40-4d31-9ec2-a731439d3200,1,0,e4da2959-0fb0-48fb-a5aa-e7a5589d69c3,e4da2959-0fb0-48fb-a5aa-e7a5589d69c3,1,0,b5365cb6-a4e7-479b-82f4-f4ad80fcd7c9,b5365cb6-a4e7-479b-82f4-f4ad80fcd7c9,1,0,e51ae56c-d311-46b7-8d4c-19a432f4cd16,e51ae56c-d311-46b7-8d4c-19a432f4cd16,1,0,e000d04e-37eb-4d95-a833-b0a9b10ee0b9,e000d04e-37eb-4d95-a833-b0a9b10ee0b9,1,0,40d3ed07-3b56-4c9f-8b96-d94455202ef0,40d3ed07-3b56-4c9f-8b96-d94455202ef0,1,0,23314bcd-2dd4-43f1-9fdb-ae182a48c886,23314bcd-2dd4-43f1-9fdb-ae182a48c886,1,0,c5f86fa3-4a36-4e22-8b57-7088dd250cd3,c5f86fa3-4a36-4e22-8b57-7088dd250cd3,1,0,9440a132-366f-4fc9-bd72-2544ba2b072a,9440a132-366f-4fc9-bd72-2544ba2b072a,1,0,84282afa-21f5-40db-9386-e6f741c9a06c,84282afa-21f5-40db-9386-e6f741c9a06c,1,0,5b3b3da9-8619-4fbd-b140-3528875cd179,5b3b3da9-8619-4fbd-b140-3528875cd179,1,0,99e5e866-7ac6-4916-ab66-3e2909822c56,99e5e866-7ac6-4916-ab66-3e2909822c56,1,0,03363877-2752-4a03-95f2-d73b732e0bfd,03363877-2752-4a03-95f2-d73b732e0bfd,1,0,8d9d2284-e592-44c5-93bb-247037ab6b95,8d9d2284-e592-44c5-93bb-247037ab6b95,1,0,0b0d2b7c-d52e-4163-83cf-a7e86bb47c47,0b0d2b7c-d52e-4163-83cf-a7e86bb47c47,1,0,78051e10-74ab-44be-adca-e4c93824a386,78051e10-74ab-44be-adca-e4c93824a386,1,0,73629419-83d8-4727-88a9-76c851d104c9,73629419-83d8-4727-88a9-76c851d104c9,1,0,cadb54f0-dcff-4f96-983e-a309fd72f330,cadb54f0-dcff-4f96-983e-a309fd72f330,1,0,a9c3065b-db68-4f59-9235-33f9fbfdaafd,a9c3065b-db68-4f59-9235-33f9fbfdaafd,1,0,3715cf3d-0abc-4711-8ac9-d41f0be7878f,3715cf3d-0abc-4711-8ac9-d41f0be7878f,1,0,8e8d8078-8b32-4c24-b26e-89a92bf60160,8e8d8078-8b32-4c24-b26e-89a92bf60160,1,0,f96cbb27-7619-41e0-8577-e623ef02dc58,f96cbb27-7619-41e0-8577-e623ef02dc58,1,0,ed5ff5b0-f980-4b9a-9299-eef68e3b42d5,ed5ff5b0-f980-4b9a-9299-eef68e3b42d5,1,0,d74dfd31-2016-435b-8652-15fdbca59490,d74dfd31-2016-435b-8652-15fdbca59490,1,0,ba8111a9-1d33-4615-ad0b-b3e923b2f3bd,ba8111a9-1d33-4615-ad0b-b3e923b2f3bd,1,0,27651e0e-d560-434b-a49c-f473a5b20c4d,27651e0e-d560-434b-a49c-f473a5b20c4d,1,0,dab1491b-0685-442d-b945-2bfde3f37933,dab1491b-0685-442d-b945-2bfde3f37933,1,0,ce85554b-81ba-4149-a951-d09bdc14fa16,ce85554b-81ba-4149-a951-d09bdc14fa16,1,0,23a1ef35-1469-44ea-8535-fa9c7f535cae,23a1ef35-1469-44ea-8535-fa9c7f535cae,1,0,9ff1c73e-71be-4ea6-97fb-e710d995ee62,9ff1c73e-71be-4ea6-97fb-e710d995ee62,1,0,8c7d74bf-2865-47d9-8a16-5b0db1104a3a,8c7d74bf-2865-47d9-8a16-5b0db1104a3a,1,0,2558d812-ac0a-49ba-87db-3f661209a3c4,2558d812-ac0a-49ba-87db-3f661209a3c4,1,0,20d712ef-77c1-4374-92e1-f20a3ebc7eab,20d712ef-77c1-4374-92e1-f20a3ebc7eab,1,0,65d23ce8-e326-45ee-86b0-6dcf35797201,65d23ce8-e326-45ee-86b0-6dcf35797201,1,0,a2683c3f-1b21-47d8-951d-7d30cde51efc,a2683c3f-1b21-47d8-951d-7d30cde51efc,1,0,54c77053-1728-4914-a354-73fe8853a0e1,54c77053-1728-4914-a354-73fe8853a0e1,1,0,21136691-078f-4bf7-bddd-f41416a76d86,21136691-078f-4bf7-bddd-f41416a76d86,1,0,9d669d30-a0af-4095-852a-96b4224ee933,9d669d30-a0af-4095-852a-96b4224ee933,1,0,30a121c7-c4f5-45c4-9504-9778ed85d9e3,30a121c7-c4f5-45c4-9504-9778ed85d9e3,1,0,c68e2157-2541-4f80-966a-d68ce603f131,c68e2157-2541-4f80-966a-d68ce603f131,1,0,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,c0e01a15-6937-4331-bdd7-2f5a68d0d3dd,c0e01a15-6937-4331-bdd7-2f5a68d0d3dd,1,0,d065c02e-9991-468a-ae32-b8c29d078d03,d065c02e-9991-468a-ae32-b8c29d078d03,1,0,c509683e-eb13-4e1a-91ed-cd6982ec5001,c509683e-eb13-4e1a-91ed-cd6982ec5001,1,0,88bf6f58-7943-42c4-bc0f-56b991590026,88bf6f58-7943-42c4-bc0f-56b991590026,1,0,68500931-89e0-491e-aba8-b013c9e6f8c3,68500931-89e0-491e-aba8-b013c9e6f8c3,1,0,70b79e56-bb71-4f38-93cf-94dda79d9b4c,70b79e56-bb71-4f38-93cf-94dda79d9b4c,1,0,5c4c9931-3fb0-47a8-9e4f-d552de12b355,5c4c9931-3fb0-47a8-9e4f-d552de12b355,1,0,dc1d0f97-e2f3-4e1d-b21c-411b46e39848,dc1d0f97-e2f3-4e1d-b21c-411b46e39848,1,0,2a498baf-ec2e-4dda-b568-801bb60db225,2a498baf-ec2e-4dda-b568-801bb60db225,1,0,8a32af97-cdb5-46b4-ab7b-e1509e26ecc3,8a32af97-cdb5-46b4-ab7b-e1509e26ecc3,1,0,9f59f8cd-8d61-4fbc-ae6e-32f28ce0035a,9f59f8cd-8d61-4fbc-ae6e-32f28ce0035a,1,0,70f156d8-9cb4-442d-a36b-7a43d03bcd12,70f156d8-9cb4-442d-a36b-7a43d03bcd12,1,0,35989876-16b1-4b02-9381-444a06a7a21d,35989876-16b1-4b02-9381-444a06a7a21d,1,0,f7608000-1e8a-4ca4-afb7-e04ef547b70a,f7608000-1e8a-4ca4-afb7-e04ef547b70a,1,0,f0a6de82-45ab-4153-bccf-df82fc960aa1,f0a6de82-45ab-4153-bccf-df82fc960aa1,1,0,77adf47b-6015-46fc-9e29-f1c025ea0d81,77adf47b-6015-46fc-9e29-f1c025ea0d81,1,0,26cea519-19d0-4707-be0a-1a43fde6e563,26cea519-19d0-4707-be0a-1a43fde6e563,1,0,9fb3e902-3154-4bab-9bfe-9a266dc49fa5,9fb3e902-3154-4bab-9bfe-9a266dc49fa5,1,0,af8d4bc9-2f0f-44d3-89ce-2593877055c8,af8d4bc9-2f0f-44d3-89ce-2593877055c8,1,0,344fb829-a1cc-4b17-8f98-2d4f93bfcd6a,344fb829-a1cc-4b17-8f98-2d4f93bfcd6a,1,0,eb35bff2-8467-48fe-bf93-ece2aa40f506,eb35bff2-8467-48fe-bf93-ece2aa40f506,1,0,68cf55da-b29e-4a65-815b-c9cdc8e5888e,68cf55da-b29e-4a65-815b-c9cdc8e5888e,1,0,a9f927ef-22a2-4d77-8648-4bb25eeaccf2,a9f927ef-22a2-4d77-8648-4bb25eeaccf2,1,0,1041ed81-c1f7-43b2-9087-914865a3076e,1041ed81-c1f7-43b2-9087-914865a3076e,1,0,5d7174d2-42b3-4e12-b705-4209dd73b53b,5d7174d2-42b3-4e12-b705-4209dd73b53b,1,0,b1b5bf08-1c57-4875-87bb-ad1fa1a3251f,b1b5bf08-1c57-4875-87bb-ad1fa1a3251f,1,0,e00dcab4-5e92-44e3-bcdf-a31dd32a195f,e00dcab4-5e92-44e3-bcdf-a31dd32a195f,1,0,5a4c6511-f8ed-40e4-a251-e28f62629cf2,5a4c6511-f8ed-40e4-a251-e28f62629cf2,1,0,cfe59dfd-a509-4f83-b926-b3ff94234a43,cfe59dfd-a509-4f83-b926-b3ff94234a43,1,0,17df1591-61b0-4204-8379-8d1f58445968,17df1591-61b0-4204-8379-8d1f58445968,1,0,9020fa9d-e7de-4574-ab65-db6651b5b610,9020fa9d-e7de-4574-ab65-db6651b5b610,1,0,fd5e72f7-3078-48eb-b01b-1800ffbd86d3,fd5e72f7-3078-48eb-b01b-1800ffbd86d3,1,0,e83ad33d-27df-4181-afd2-b7f416e6e705,e83ad33d-27df-4181-afd2-b7f416e6e705,1,0,ddeec7f4-8bd3-40af-bcac-00d18c0e6d6a,ddeec7f4-8bd3-40af-bcac-00d18c0e6d6a,1,0,f0438b0a-7916-4de4-a3a8-d43407c3295f,f0438b0a-7916-4de4-a3a8-d43407c3295f,1,0,3309648c-aae6-4684-ae8d-7ed636bc3468,3309648c-aae6-4684-ae8d-7ed636bc3468,1,0,f9aa933e-6684-48de-b802-96c8e61b1fe6,f9aa933e-6684-48de-b802-96c8e61b1fe6,1,0,f41e5a5b-394b-423a-bee5-ed4d1da0be71,f41e5a5b-394b-423a-bee5-ed4d1da0be71,1,0,23db175f-ddfb-4af7-9c0c-232b6adb7daf,23db175f-ddfb-4af7-9c0c-232b6adb7daf,1,0,9de4d430-95ec-4435-b3e8-4fc85778d517,9de4d430-95ec-4435-b3e8-4fc85778d517,1,0,205b8908-fa21-42bd-bff0-fb95e6787f15,205b8908-fa21-42bd-bff0-fb95e6787f15,1,0,4e309f26-35e8-49d9-bbd1-c7884e666dca,4e309f26-35e8-49d9-bbd1-c7884e666dca,1,0,84f05fe4-51d3-49a8-83e7-1cae2028147e,84f05fe4-51d3-49a8-83e7-1cae2028147e,1,0,8a9ab11b-5bb5-4da9-9053-8f9e8198d019,8a9ab11b-5bb5-4da9-9053-8f9e8198d019,1,0,5320abf1-b09b-4de0-9adf-4cb1da31df6f,5320abf1-b09b-4de0-9adf-4cb1da31df6f,1,0,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,f135b60e-6d28-4ba1-acd7-76090f14855d,f135b60e-6d28-4ba1-acd7-76090f14855d,1,0,5b105084-c4ba-4ff6-9196-8b3e3a9991e2,5b105084-c4ba-4ff6-9196-8b3e3a9991e2,1,0,c6267c5a-3878-4d0c-8674-4d4dd672b99c,c6267c5a-3878-4d0c-8674-4d4dd672b99c,1,0,44c9e8a9-8efd-4391-a1b2-4ef278376b4d,44c9e8a9-8efd-4391-a1b2-4ef278376b4d,1,0,96d66cdd-d40c-43a3-92ce-40aef2101b64,96d66cdd-d40c-43a3-92ce-40aef2101b64,1,0,9daa8270-4782-4d83-af03-c8d2b11057ff,9daa8270-4782-4d83-af03-c8d2b11057ff,1,0,4b8927df-e124-4bf6-9d70-6e91b4796d90,4b8927df-e124-4bf6-9d70-6e91b4796d90,1,0,871b63a2-c7a6-4343-8d8b-7dda1b0def87,871b63a2-c7a6-4343-8d8b-7dda1b0def87,1,0,52b45b3d-b01b-4aac-8a1e-e256957c39c3,52b45b3d-b01b-4aac-8a1e-e256957c39c3,1,0,fc78d8df-ab27-4544-a65c-73908b9c5425,fc78d8df-ab27-4544-a65c-73908b9c5425,1,0,45552b2f-0878-499e-8a27-4fcce93e5459,45552b2f-0878-499e-8a27-4fcce93e5459,1,0,f8a090d2-b2d1-4ead-a8bf-6325a7552743,f8a090d2-b2d1-4ead-a8bf-6325a7552743,1,0,84f935da-9fe5-44ea-845b-b447b8b0a6f5,84f935da-9fe5-44ea-845b-b447b8b0a6f5,1,0,d0b49fd9-4054-409f-97a0-a0811ba6c1ab,d0b49fd9-4054-409f-97a0-a0811ba6c1ab,1,0,8ca63a1d-4593-4f52-8b5e-4feb9f8487ca,8ca63a1d-4593-4f52-8b5e-4feb9f8487ca,1,0,1e4cc0d6-6e5e-4d16-ba44-060912ec292f,1e4cc0d6-6e5e-4d16-ba44-060912ec292f,1,0,e9311a22-56b5-4607-8eaa-52382ed040c3,e9311a22-56b5-4607-8eaa-52382ed040c3,1,0,dc7b8596-b2c0-415f-95d9-c0aaa96c5675,dc7b8596-b2c0-415f-95d9-c0aaa96c5675,1,0,87e6e315-01e0-41eb-8373-0a60635f2f7a,87e6e315-01e0-41eb-8373-0a60635f2f7a,1,0,c4fe10b6-d025-4736-be23-3113bd7fe7b4,c4fe10b6-d025-4736-be23-3113bd7fe7b4,1,0,8fdfef8d-502e-4d27-a539-e833048fa1eb,8fdfef8d-502e-4d27-a539-e833048fa1eb,1,0,65530aca-7cf2-4a52-b5be-5dcbc15a049e,65530aca-7cf2-4a52-b5be-5dcbc15a049e,1,0,15eb2c2d-305d-42c0-9aec-936b82114bdb,15eb2c2d-305d-42c0-9aec-936b82114bdb,1,0,bb99bc44-f83e-48bb-93fd-7b07ca7da6a7,bb99bc44-f83e-48bb-93fd-7b07ca7da6a7,1,0,cbca7272-2aae-4e21-b3f5-12786f085648,cbca7272-2aae-4e21-b3f5-12786f085648,1,0,7718bd0b-7b8a-4ffc-b228-f05683b5531a,7718bd0b-7b8a-4ffc-b228-f05683b5531a,1,0,38aeb32b-9e3b-4b4a-9a61-97da63cdea48,38aeb32b-9e3b-4b4a-9a61-97da63cdea48,1,0,0b303d25-e141-431f-828c-1778d3c247f6,0b303d25-e141-431f-828c-1778d3c247f6,1,0,881f53bc-a52e-4312-b09d-3d3f53ddf84b,881f53bc-a52e-4312-b09d-3d3f53ddf84b,1,0,2e36a7b3-5331-4fab-a0a3-31b42a8387fe,2e36a7b3-5331-4fab-a0a3-31b42a8387fe,1,0,945ae8d2-b74a-41e9-b740-c82acdd40d04,945ae8d2-b74a-41e9-b740-c82acdd40d04,1,0,976533bf-f162-42a1-a47e-6d681ee67b82,976533bf-f162-42a1-a47e-6d681ee67b82,1,0,19bc0dd8-9e6b-4855-bc42-b4e98443163f,19bc0dd8-9e6b-4855-bc42-b4e98443163f,1,0,a61e10af-eaba-4e7a-a641-65d77453a559,a61e10af-eaba-4e7a-a641-65d77453a559,1,0,edf81bbb-905a-474d-959a-db5629a8e104,edf81bbb-905a-474d-959a-db5629a8e104,1,0,4c8eb34e-0bb6-487a-a2ae-24083b1f6d2e,4c8eb34e-0bb6-487a-a2ae-24083b1f6d2e,1,0,276c42ca-f5e0-4bb4-9b89-a925def35cb1,276c42ca-f5e0-4bb4-9b89-a925def35cb1,1,0,41a9cabc-5667-4ca0-a798-ba0b22bd1aa0,41a9cabc-5667-4ca0-a798-ba0b22bd1aa0,1,0,1bf44c42-87c0-4f2e-846c-b04d0b7e8d7d,1bf44c42-87c0-4f2e-846c-b04d0b7e8d7d,1,0,8811ea1a-1221-47b7-9574-3f36ff15a3cf,8811ea1a-1221-47b7-9574-3f36ff15a3cf,1,0,1d715463-691b-4c01-ae39-57c261f2a6ad,1d715463-691b-4c01-ae39-57c261f2a6ad,1,0,4c3d007f-a62c-4fd9-beda-58dbf08ad188,4c3d007f-a62c-4fd9-beda-58dbf08ad188,1,0,c35373a9-f0b0-4ddb-a985-409ac9c64609,c35373a9-f0b0-4ddb-a985-409ac9c64609,1,0,c5b4d6e4-4c99-46cb-98cf-9a0024215a12,c5b4d6e4-4c99-46cb-98cf-9a0024215a12,1,0,c1c40916-fee5-46e3-90fc-10e7595866c9,c1c40916-fee5-46e3-90fc-10e7595866c9,1,0,19a307b1-9ef0-4fc6-bf4f-7636e9118399,19a307b1-9ef0-4fc6-bf4f-7636e9118399,1,0,666244a4-5636-4405-89dd-bbd8f4278071,666244a4-5636-4405-89dd-bbd8f4278071,1,0,8b79f0e3-9024-4073-aa6b-a42beed9b0c6,8b79f0e3-9024-4073-aa6b-a42beed9b0c6,1,0,29a627a9-debc-4074-88d0-ec3561e1ef9c,29a627a9-debc-4074-88d0-ec3561e1ef9c,1,0,5a01a002-8833-4c89-b8d6-9b63fc49d3b6,5a01a002-8833-4c89-b8d6-9b63fc49d3b6,1,0,39f5e272-9a10-40b0-8a10-92037828b206,39f5e272-9a10-40b0-8a10-92037828b206,1,0,87dad256-122b-4d7e-b249-a2c313a9cf33,87dad256-122b-4d7e-b249-a2c313a9cf33,1,0,57a030fb-ed57-4ffc-a462-c7bbd2435c3d,57a030fb-ed57-4ffc-a462-c7bbd2435c3d,1,0,f20a04a7-84fa-48e3-8ac5-28176c1fcada,f20a04a7-84fa-48e3-8ac5-28176c1fcada,1,0,b722d6e1-fd6f-4bb4-923d-01764393722d,b722d6e1-fd6f-4bb4-923d-01764393722d,1,0,ac5f945e-2d03-44fb-a8cf-5d786194cefd,ac5f945e-2d03-44fb-a8cf-5d786194cefd,1,0,698ec00f-bf75-420e-81ab-a98808daf3f7,698ec00f-bf75-420e-81ab-a98808daf3f7,1,0,f441907c-d02e-431e-baf4-1854e48a1f50,f441907c-d02e-431e-baf4-1854e48a1f50,1,0,4ad722ca-10fc-4a83-91c9-ef0012685f89,4ad722ca-10fc-4a83-91c9-ef0012685f89,1,0,783dd4ba-a597-45ba-8989-2ed5224d62bc,783dd4ba-a597-45ba-8989-2ed5224d62bc,1,0,3b033d29-0de7-49dd-90bc-f414b28426d7,3b033d29-0de7-49dd-90bc-f414b28426d7,1,0,97aaede5-d32f-4eba-b0e0-5ae5f094a8b7,97aaede5-d32f-4eba-b0e0-5ae5f094a8b7,1,0,dad9710a-73ca-4e0d-b98b-75f955d0822d,dad9710a-73ca-4e0d-b98b-75f955d0822d,1,0,d01beeab-7c42-4d5e-a2f6-f190b9f703a5,d01beeab-7c42-4d5e-a2f6-f190b9f703a5,1,0,2191939f-6f71-47c9-a3d2-57acbf7f411e,2191939f-6f71-47c9-a3d2-57acbf7f411e,1,0,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,cafc86e1-d7f1-4cd2-ac20-04fa0917556a,cafc86e1-d7f1-4cd2-ac20-04fa0917556a,1,0,514e95b8-2fdd-46f7-89bf-7d1a3d9d6e1b,514e95b8-2fdd-46f7-89bf-7d1a3d9d6e1b,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,642154b8-97da-4c4f-bf34-c1124215077d,642154b8-97da-4c4f-bf34-c1124215077d,1,0,abc10867-39ae-46bf-8bd7-90f645919235,abc10867-39ae-46bf-8bd7-90f645919235,1,0,b3396504-8ccb-43d6-9a0f-ab259ba0a542,b3396504-8ccb-43d6-9a0f-ab259ba0a542,1,0,f59f91c5-026a-4dc5-996e-0d59814a9604,f59f91c5-026a-4dc5-996e-0d59814a9604,1,0,aac9966f-e9ea-4106-97bb-6b9822939bc7,aac9966f-e9ea-4106-97bb-6b9822939bc7,1,0,cf7bc2ca-fb57-4b1a-98cf-f2caa7e611f5,cf7bc2ca-fb57-4b1a-98cf-f2caa7e611f5,1,0,486083d8-33b1-453f-9f05-5ff867e2f4ba,486083d8-33b1-453f-9f05-5ff867e2f4ba,1,0,e4f9d9f6-38d7-4056-a95a-987ad2da2211,e4f9d9f6-38d7-4056-a95a-987ad2da2211,1,0,22c21c2b-4297-43b2-88f0-9555d22f7a14,22c21c2b-4297-43b2-88f0-9555d22f7a14,1,0,734f61c4-5429-4a09-8697-8949ac5e6bd1,734f61c4-5429-4a09-8697-8949ac5e6bd1,1,0,d04e0e2d-0a5f-4866-b0b3-b582915db899,d04e0e2d-0a5f-4866-b0b3-b582915db899,1,0,19649d3f-52aa-4054-bb84-a6a11d212495,19649d3f-52aa-4054-bb84-a6a11d212495,1,0,640d7486-8abd-40aa-a244-2ed899b7225a,640d7486-8abd-40aa-a244-2ed899b7225a,1,0,58321939-f25a-456d-8dee-97e64743dc2e,58321939-f25a-456d-8dee-97e64743dc2e,1,0,416fba62-70c4-4f8c-b10b-56d47b27ca35,416fba62-70c4-4f8c-b10b-56d47b27ca35,1,0,ec48a164-bc30-4e36-a40a-a3cca07aea0d,ec48a164-bc30-4e36-a40a-a3cca07aea0d,1,0,3174d57f-c6a8-44dc-adc1-47e9a54c844d,3174d57f-c6a8-44dc-adc1-47e9a54c844d,1,0,c05f87b4-ec5f-4d14-981f-02ca8ba89863,c05f87b4-ec5f-4d14-981f-02ca8ba89863,1,0,b7736108-89bd-44eb-89c1-8a5a774058f1,b7736108-89bd-44eb-89c1-8a5a774058f1,1,0,560a5f44-e4e6-46d9-a9fe-3609842d0e3e,560a5f44-e4e6-46d9-a9fe-3609842d0e3e,1,0,98f68a75-ebf9-4c59-b6a8-b3634089ca6b,98f68a75-ebf9-4c59-b6a8-b3634089ca6b,1,0,875d1fc1-8172-4e48-8192-035882e1665d,875d1fc1-8172-4e48-8192-035882e1665d,1,0,26132b28-98cc-4690-92ad-139f91839ba2,26132b28-98cc-4690-92ad-139f91839ba2,1,0,0bd85b79-cc32-4c1d-b629-567a1bdfac56,0bd85b79-cc32-4c1d-b629-567a1bdfac56,1,0,b87ce4f9-aaa6-4a4c-af80-0bd9adc83506,b87ce4f9-aaa6-4a4c-af80-0bd9adc83506,1,0,ca81e0ea-c428-47f9-aedb-078214104a2f,ca81e0ea-c428-47f9-aedb-078214104a2f,1,0,9518d09c-6996-4439-9278-3c71d5ae8fce,9518d09c-6996-4439-9278-3c71d5ae8fce,1,0,9dd6e7d6-cd98-4928-b50c-38bdbc61c211,9dd6e7d6-cd98-4928-b50c-38bdbc61c211,1,0,5fbd9a13-012d-4c36-b72c-da3bc4157cff,5fbd9a13-012d-4c36-b72c-da3bc4157cff,1,0,6ae6e515-5cd4-4eca-8602-c6abe6d66276,6ae6e515-5cd4-4eca-8602-c6abe6d66276,1,0,44b8472b-0f70-49cc-8f71-9c9d3e9cfbcc,44b8472b-0f70-49cc-8f71-9c9d3e9cfbcc,1,0,b071a44e-9a34-4af3-a59a-35aa5f3a74b4,b071a44e-9a34-4af3-a59a-35aa5f3a74b4,1,0,35a28677-0653-47f9-82e1-02c4b9266fee,35a28677-0653-47f9-82e1-02c4b9266fee,1,0,2e17464f-9cef-4812-865f-4eb77ff16b6a,2e17464f-9cef-4812-865f-4eb77ff16b6a,1,0,e5ecbb1f-981d-4928-9335-22216879f7e2,e5ecbb1f-981d-4928-9335-22216879f7e2,1,0,461be12a-9f16-4826-978a-436608ca8733,461be12a-9f16-4826-978a-436608ca8733,1,0,9b143299-d300-4b6c-b667-5552fb3bdcde,9b143299-d300-4b6c-b667-5552fb3bdcde,1,0,0de070f4-d8b7-48bb-bfc9-027dd727a4ad,0de070f4-d8b7-48bb-bfc9-027dd727a4ad,1,0,74973d06-f57d-403e-945c-5cd2f4fc4869,74973d06-f57d-403e-945c-5cd2f4fc4869,1,0,259564b8-172e-4eed-9360-d561ec6dad69,259564b8-172e-4eed-9360-d561ec6dad69,1,0,91c799d7-2b3d-4d1a-87ff-221057a428c6,91c799d7-2b3d-4d1a-87ff-221057a428c6,1,0,a50fcacc-6d2d-496c-bea0-9c73cd153437,a50fcacc-6d2d-496c-bea0-9c73cd153437,1,0,a6846c5a-7cf6-4df2-a159-2fd33d18d18f,a6846c5a-7cf6-4df2-a159-2fd33d18d18f,1,0,0fb72f4b-e6f6-4b70-8ec7-fdb6d4ad928e,0fb72f4b-e6f6-4b70-8ec7-fdb6d4ad928e,1,0,5a2d5d8a-afd9-4954-9868-7c82bad00426,5a2d5d8a-afd9-4954-9868-7c82bad00426,1,0,26aea96b-20f8-4e35-b55f-4fe3602e6597,26aea96b-20f8-4e35-b55f-4fe3602e6597,1,0,a3a3a211-e361-4e41-a6f8-d731a366c163,a3a3a211-e361-4e41-a6f8-d731a366c163,1,0,c40d6fde-4d9a-4d9e-af86-42b7916e2abe,c40d6fde-4d9a-4d9e-af86-42b7916e2abe,1,0,4d5204ae-711d-4c31-8a18-280dbc9d2bf5,4d5204ae-711d-4c31-8a18-280dbc9d2bf5,1,0,ca01417c-0ffd-4e00-91e8-93cd305be82d,ca01417c-0ffd-4e00-91e8-93cd305be82d,1,0,14fcf5e5-5856-4b5f-8c3f-75eaba0f7268,14fcf5e5-5856-4b5f-8c3f-75eaba0f7268,1,0,0a0af8bf-0caa-40df-9a69-71f98ca9ff89,0a0af8bf-0caa-40df-9a69-71f98ca9ff89,1,0,6ac7db0c-18ed-4d3b-956a-5985214db474,6ac7db0c-18ed-4d3b-956a-5985214db474,1,0,267103e0-6703-4a74-bb4f-af610d7ef332,267103e0-6703-4a74-bb4f-af610d7ef332,1,0,e1823be2-b646-4a1a-a9a9-c925a12c0586,e1823be2-b646-4a1a-a9a9-c925a12c0586,1,0,e613a6aa-82cb-40fd-8f28-0a74fe21e6a6,e613a6aa-82cb-40fd-8f28-0a74fe21e6a6,1,0,b98ca634-25a5-4366-af04-815ba34c8bb2,b98ca634-25a5-4366-af04-815ba34c8bb2,1,0,14d69108-4d26-401a-b7ae-2c86dadf831c,14d69108-4d26-401a-b7ae-2c86dadf831c,1,0,d6251f65-d366-4bc9-a5db-42063fe03594,d6251f65-d366-4bc9-a5db-42063fe03594,1,0,22c60cbc-429f-40d9-bf8b-681b7786c41d,22c60cbc-429f-40d9-bf8b-681b7786c41d,1,0,31dd320b-06aa-4314-9914-2c2420f572a1,31dd320b-06aa-4314-9914-2c2420f572a1,1,0,56730848-3bef-4b8c-b449-fe9d09c9c374,56730848-3bef-4b8c-b449-fe9d09c9c374,1,0,43c477d2-1234-4c4a-a18a-022c0ddf2fd5,43c477d2-1234-4c4a-a18a-022c0ddf2fd5,1,0,91d8c5e4-eaec-4951-9224-16882fda08f6,91d8c5e4-eaec-4951-9224-16882fda08f6,1,0,4304ffb9-7ede-4c59-bef8-26fe3e8f0103,4304ffb9-7ede-4c59-bef8-26fe3e8f0103,1,0,4654d192-74bf-430f-abee-6f4dc431b182,4654d192-74bf-430f-abee-6f4dc431b182,1,0,1ea750ae-5ec4-43c5-b34f-fd28999d41d7,1ea750ae-5ec4-43c5-b34f-fd28999d41d7,1,0,4678c704-933a-45ef-9d41-89b8f39016bb,4678c704-933a-45ef-9d41-89b8f39016bb,1,0,8ceea1e8-42ce-469f-823a-ceffdbd6b112,8ceea1e8-42ce-469f-823a-ceffdbd6b112,1,0,80eb2a49-8c0e-4f92-b99c-7fdadca03e7b,80eb2a49-8c0e-4f92-b99c-7fdadca03e7b,1,0,3f7ee937-d853-47b7-a1f5-d821208e3531,3f7ee937-d853-47b7-a1f5-d821208e3531,1,0,086d69d6-e2fa-45cb-84b6-f8f3e2919160,086d69d6-e2fa-45cb-84b6-f8f3e2919160,1,0,6995ee71-5901-46d9-a5c1-b35d795bda20,6995ee71-5901-46d9-a5c1-b35d795bda20,1,0,e93a4293-0497-4f11-b8b9-40300104fb96,e93a4293-0497-4f11-b8b9-40300104fb96,1,0,93531e5d-5dfc-42e8-be52-2e83f37262b0,93531e5d-5dfc-42e8-be52-2e83f37262b0,1,0,61bf78c0-7004-4a74-b362-e979c7316e05,61bf78c0-7004-4a74-b362-e979c7316e05,1,0,c4351896-eff1-4e4d-8823-028d63a9d6bf,c4351896-eff1-4e4d-8823-028d63a9d6bf,1,0,475f83a2-ba5a-4072-94f8-1324b1f198a4,475f83a2-ba5a-4072-94f8-1324b1f198a4,1,0,cd7c15c1-c573-46c9-b109-339b8b54c3ee,cd7c15c1-c573-46c9-b109-339b8b54c3ee,1,0,efd89929-4db9-4c58-b3cb-a8d9a41a1df2,efd89929-4db9-4c58-b3cb-a8d9a41a1df2,1,0,deee8bde-381f-4094-8794-7a06248860dd,deee8bde-381f-4094-8794-7a06248860dd,1,0,8c2a0f6b-492c-4c5a-97c5-da0d07f9d781,8c2a0f6b-492c-4c5a-97c5-da0d07f9d781,1,0,d92cb614-ed09-47db-b70b-d3e533c44c6a,d92cb614-ed09-47db-b70b-d3e533c44c6a,1,0,2757ee75-4b36-4901-bff1-044708754edb,2757ee75-4b36-4901-bff1-044708754edb,1,0,0e6bab27-bf94-4732-8549-dbd9b8a5f4e9,0e6bab27-bf94-4732-8549-dbd9b8a5f4e9,1,0,774c92d6-9b9b-422a-83d7-8d42ae2a9f60,774c92d6-9b9b-422a-83d7-8d42ae2a9f60,1,0,90032ffa-f117-4a34-82f8-cc7e5a22a542,90032ffa-f117-4a34-82f8-cc7e5a22a542,1,0,71144539-6472-4727-8887-0139f6221370,71144539-6472-4727-8887-0139f6221370,1,0,bff07da4-ae19-48a9-806b-14b285d42485,bff07da4-ae19-48a9-806b-14b285d42485,1,0,659cd4f6-d18c-4d75-a7e6-7c124a63ab9a,659cd4f6-d18c-4d75-a7e6-7c124a63ab9a,1,0,b0ccc05d-8d39-4f57-8e87-6846014f92ea,b0ccc05d-8d39-4f57-8e87-6846014f92ea,1,0,49e787c9-753a-468a-b8dd-2e970d9a1fed,49e787c9-753a-468a-b8dd-2e970d9a1fed,1,0,e871dea7-1953-4511-90b0-e0957afac4c0,e871dea7-1953-4511-90b0-e0957afac4c0,1,0,64fbfed7-9dda-481b-a4f7-fe440f24ba7e,64fbfed7-9dda-481b-a4f7-fe440f24ba7e,1,0,b2835a5b-5c91-448c-9eb1-1bb1c9a5e727,b2835a5b-5c91-448c-9eb1-1bb1c9a5e727,1,0,447fb310-0588-4e0d-8f6d-5fc1f3bb1180,447fb310-0588-4e0d-8f6d-5fc1f3bb1180,1,0,d91441cf-d793-4dfa-9225-f0c16818edde,d91441cf-d793-4dfa-9225-f0c16818edde,1,0,8986c155-54be-4b1b-b31a-5c00b88bc40d,8986c155-54be-4b1b-b31a-5c00b88bc40d,1,0,40ae107d-67a8-404c-adf9-1a760bba94ff,40ae107d-67a8-404c-adf9-1a760bba94ff,1,0,42a39785-144c-4d2d-92c6-fd8b345f687b,42a39785-144c-4d2d-92c6-fd8b345f687b,1,0,f3bd841b-fb36-4462-9627-b51801e563cd,f3bd841b-fb36-4462-9627-b51801e563cd,1,0,0a23f273-5589-4a48-be3a-eee7565749aa,0a23f273-5589-4a48-be3a-eee7565749aa,1,0,494eb9d9-4a10-4e85-b511-375408f21bbe,494eb9d9-4a10-4e85-b511-375408f21bbe,1,0,3fbbca3f-d4fa-4d65-a08f-0a348b9030c6,3fbbca3f-d4fa-4d65-a08f-0a348b9030c6,1,0,a161dd07-4a6e-4d0f-b72c-702d0d3a83a3,a161dd07-4a6e-4d0f-b72c-702d0d3a83a3,1,0,7172bed5-b12b-4e83-b15d-1d95b63a6272,7172bed5-b12b-4e83-b15d-1d95b63a6272,1,0,25d75a3c-b801-4b1e-aed8-90e667f36c67,25d75a3c-b801-4b1e-aed8-90e667f36c67,1,0,addb3aa1-a9d6-4d30-b5db-7f3ce46bc1b2,addb3aa1-a9d6-4d30-b5db-7f3ce46bc1b2,1,0,63ebf7fd-d514-4fce-abc1-fb3f253d01cd,63ebf7fd-d514-4fce-abc1-fb3f253d01cd,1,0,a275802f-937a-49f4-92da-fcdd185a036d,a275802f-937a-49f4-92da-fcdd185a036d,1,0,ec6ed9cb-85a2-4303-9906-cfb4ce6500bf,ec6ed9cb-85a2-4303-9906-cfb4ce6500bf,1,0,f2dc9319-ba60-421a-8340-be3e3a291393,f2dc9319-ba60-421a-8340-be3e3a291393,1,0,bf4eb62a-bc74-4845-bad2-58a2a8302a65,bf4eb62a-bc74-4845-bad2-58a2a8302a65,1,0,b66eb190-1c16-4f20-a94f-954bcdf313b8,b66eb190-1c16-4f20-a94f-954bcdf313b8,1,0,49e21b87-beae-4640-a497-ef468da0cbbc,49e21b87-beae-4640-a497-ef468da0cbbc,1,0,bbdfeebd-cda0-4911-8f31-553d751340a7,bbdfeebd-cda0-4911-8f31-553d751340a7,1,0,dc7adfb7-41e7-4019-a18d-5d9f5d227b71,dc7adfb7-41e7-4019-a18d-5d9f5d227b71,1,0,20aad006-5b1e-4cc2-94ef-668dd002667b,20aad006-5b1e-4cc2-94ef-668dd002667b,1,0,af6af7ae-d68a-4e12-ba2c-a360ce2920a7,af6af7ae-d68a-4e12-ba2c-a360ce2920a7,1,0,b0f5bce4-2ad3-416e-9b1e-3fb23deaa040,b0f5bce4-2ad3-416e-9b1e-3fb23deaa040,1,0,2befb2e3-7354-4a01-83d6-b24262704a5e,2befb2e3-7354-4a01-83d6-b24262704a5e,1,0,5b93975e-b2a4-4102-a060-2667f5813c94,5b93975e-b2a4-4102-a060-2667f5813c94,1,0,dcdc9c65-c2d5-4531-a325-f64b3861cbab,dcdc9c65-c2d5-4531-a325-f64b3861cbab,1,0,8d2bfd40-f185-4eab-b374-872d49310eb2,8d2bfd40-f185-4eab-b374-872d49310eb2,1,0,523de426-e5a6-49e0-8144-c637f80d8ddd,523de426-e5a6-49e0-8144-c637f80d8ddd,1,0,09256328-6205-4b04-b908-3287ae8ded75,09256328-6205-4b04-b908-3287ae8ded75,1,0,05a6e161-9791-4c5b-8753-bd6370cc4cc9,05a6e161-9791-4c5b-8753-bd6370cc4cc9,1,0,662c5b48-62e1-451e-b37f-20f3f2bb0347,662c5b48-62e1-451e-b37f-20f3f2bb0347,1,0,08dbba81-68fb-49ef-8aac-9631fcfa87c6,08dbba81-68fb-49ef-8aac-9631fcfa87c6,1,0,dd7191b6-cbc0-4b0b-a51a-c27a1e1720fa,dd7191b6-cbc0-4b0b-a51a-c27a1e1720fa,1,0,8170a27d-45e9-48b1-860b-c2d9cc5961cd,8170a27d-45e9-48b1-860b-c2d9cc5961cd,1,0,f1c08fed-f3db-4f72-8a8e-7c626b8cc130,f1c08fed-f3db-4f72-8a8e-7c626b8cc130,1,0,e8c3b796-bfd8-4108-ab5f-d0f21b7bd9a6,e8c3b796-bfd8-4108-ab5f-d0f21b7bd9a6,1,0,f41d01ec-983a-4b39-9c11-a6d25d08df4f,f41d01ec-983a-4b39-9c11-a6d25d08df4f,1,0,3247e64e-b57e-4c33-8086-7ab93c5b6371,3247e64e-b57e-4c33-8086-7ab93c5b6371,1,0,e5dca369-dc9a-4332-a509-f734b8787e13,e5dca369-dc9a-4332-a509-f734b8787e13,1,0,722af623-156c-4e63-8b2a-93da760f1559,722af623-156c-4e63-8b2a-93da760f1559,1,0,393074c4-0afc-4232-8101-11a4ea6ed28a,393074c4-0afc-4232-8101-11a4ea6ed28a,1,0,5ff23123-450c-40ae-9b79-c540da53e2a0,5ff23123-450c-40ae-9b79-c540da53e2a0,1,0,639339a1-7de5-4b05-adf3-f60e7edd922c,639339a1-7de5-4b05-adf3-f60e7edd922c,1,0,dea9af9d-13c0-40d4-a9b0-1908e0a58795,dea9af9d-13c0-40d4-a9b0-1908e0a58795,1,0,9e9b8c05-787a-43c0-891d-3d9ad7e4976f,9e9b8c05-787a-43c0-891d-3d9ad7e4976f,1,0,1abeb10b-0558-4478-8f51-d0964ba3c274,1abeb10b-0558-4478-8f51-d0964ba3c274,1,0,38325a66-588a-4db0-8e0c-21d239408369,38325a66-588a-4db0-8e0c-21d239408369,1,0,7c27e885-33fd-4da2-a60d-50336c0189b0,7c27e885-33fd-4da2-a60d-50336c0189b0,1,0,0e1a45b0-d95d-415f-b954-5689610aa393,0e1a45b0-d95d-415f-b954-5689610aa393,1,0,4736b3d3-f696-4bdd-b0e3-0884ea88f623,4736b3d3-f696-4bdd-b0e3-0884ea88f623,1,0,f6939587-ff87-4eca-ae52-10e1bd2abfce,f6939587-ff87-4eca-ae52-10e1bd2abfce,1,0,a8e4d97f-e2da-4aa8-a221-3cbcc135f403,a8e4d97f-e2da-4aa8-a221-3cbcc135f403,1,0,f2b0eab2-e34b-42f8-9b24-5596b4c17d7f,f2b0eab2-e34b-42f8-9b24-5596b4c17d7f,1,0,3cb575a9-dc82-45e0-81f0-d651e12246da,3cb575a9-dc82-45e0-81f0-d651e12246da,1,0,01a73950-3e8f-4f56-903f-af0d9574e72e,01a73950-3e8f-4f56-903f-af0d9574e72e,1,0,14bd0844-c829-4325-aa7f-0f417bf955dc,14bd0844-c829-4325-aa7f-0f417bf955dc,1,0,7f1cd658-ca10-49c6-80ef-b8956f3269ea,7f1cd658-ca10-49c6-80ef-b8956f3269ea,1,0,b0d9086f-cef7-47a8-ad62-d85fea28ebda,b0d9086f-cef7-47a8-ad62-d85fea28ebda,1,0,49c010fc-f5cc-45f4-ba46-132e7661c3dd,49c010fc-f5cc-45f4-ba46-132e7661c3dd,1,0,3f3b592d-ca61-40c7-be1f-e5d3224a1eb3,3f3b592d-ca61-40c7-be1f-e5d3224a1eb3,1,0,2c02a558-8d12-44cf-be6b-9c399b9032e5,2c02a558-8d12-44cf-be6b-9c399b9032e5,1,0,d94d4931-7c81-4ee8-93ea-b2c54b152fa5,d94d4931-7c81-4ee8-93ea-b2c54b152fa5,1,0,c770bdd5-c7c0-4751-b31d-46c0ea1f49b7,c770bdd5-c7c0-4751-b31d-46c0ea1f49b7,1,0,6afcc089-7f15-42e8-97b5-6aad6cf2e6f9,6afcc089-7f15-42e8-97b5-6aad6cf2e6f9,1,0,cce4c615-dc29-42b3-9d3d-b277dde4a2e4,cce4c615-dc29-42b3-9d3d-b277dde4a2e4,1,0,9c267aa6-5f23-49f6-868a-3324ef2845ff,9c267aa6-5f23-49f6-868a-3324ef2845ff,1,0,495eeeee-d7bf-4063-99e2-86daa066451a,495eeeee-d7bf-4063-99e2-86daa066451a,1,0,b6184698-79e4-4c19-9440-092ccd9dabf8,b6184698-79e4-4c19-9440-092ccd9dabf8,1,0,7d01fc0c-378e-421d-ab70-6a418eed5941,7d01fc0c-378e-421d-ab70-6a418eed5941,1,0,6eeb4867-bf9d-48dc-b96b-934a0c293010,6eeb4867-bf9d-48dc-b96b-934a0c293010,1,0,1d49b1bb-5f90-46e4-adcf-55ad46442648,1d49b1bb-5f90-46e4-adcf-55ad46442648,1,0,e1803e54-ec5e-4a82-8097-5e2331820991,e1803e54-ec5e-4a82-8097-5e2331820991,1,0,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,6686d828-3129-4d44-a8a2-a64657d424cb,6686d828-3129-4d44-a8a2-a64657d424cb,1,0,90433152-f389-4d45-8ccc-3eb6c7a7e1f0,90433152-f389-4d45-8ccc-3eb6c7a7e1f0,1,0,ce235ab9-1dec-459a-9fec-498c262ece56,ce235ab9-1dec-459a-9fec-498c262ece56,1,0,9ec53d1a-ed7a-41e8-b5d0-6c2181fd63a5,9ec53d1a-ed7a-41e8-b5d0-6c2181fd63a5,1,0,97edd94a-4bf2-4ed7-b98f-677f869b0715,97edd94a-4bf2-4ed7-b98f-677f869b0715,1,0,a9ae364f-b668-4fb4-b976-f227951ffb6b,a9ae364f-b668-4fb4-b976-f227951ffb6b,1,0,e660c8bf-af5f-4525-a56e-68925d2b96fa,e660c8bf-af5f-4525-a56e-68925d2b96fa,1,0,2fad50a6-6a3e-4f87-ab84-907364427a63,2fad50a6-6a3e-4f87-ab84-907364427a63,1,0,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,38637f61-399a-4966-9e64-4751aecffa31,38637f61-399a-4966-9e64-4751aecffa31,1,0,0f38a18b-a36c-45fe-86c1-396634aaa5df,0f38a18b-a36c-45fe-86c1-396634aaa5df,1,0,f2b7b8d0-c0f7-46ba-907a-f8dfa76fc2da,f2b7b8d0-c0f7-46ba-907a-f8dfa76fc2da,1,0,a81c783d-2dea-4dde-9ca1-7b23d609eb22,a81c783d-2dea-4dde-9ca1-7b23d609eb22,1,0,137ec4ee-5053-47a7-8f5d-f6e63174608f,137ec4ee-5053-47a7-8f5d-f6e63174608f,1,0,820bb4b4-895b-4ccf-a350-2545bf8a2f7e,820bb4b4-895b-4ccf-a350-2545bf8a2f7e,1,0,530a3164-4ef1-4b3b-8269-13764ef4bf15,530a3164-4ef1-4b3b-8269-13764ef4bf15,1,0,6df2bb92-558c-4453-9de4-e4176e8f93dc,6df2bb92-558c-4453-9de4-e4176e8f93dc,1,0,0ce4c8a4-b20b-4550-bee3-f677e9ec64e9,0ce4c8a4-b20b-4550-bee3-f677e9ec64e9,1,0,30d5c2a6-b3cf-4ed5-ba75-850bcae932d1,30d5c2a6-b3cf-4ed5-ba75-850bcae932d1,1,0,0bf5e9c1-905a-4202-8b96-ed831b41be4b,0bf5e9c1-905a-4202-8b96-ed831b41be4b,1,0,e92ae368-0d7c-4fb7-b6d0-5ab63dc95a6a,e92ae368-0d7c-4fb7-b6d0-5ab63dc95a6a,1,0,f30c9c4b-aa6c-4b15-9ac7-888c0c0cabd9,f30c9c4b-aa6c-4b15-9ac7-888c0c0cabd9,1,0,be15e947-f671-4848-ada1-51239af73615,be15e947-f671-4848-ada1-51239af73615,1,0,3fc019d1-aec8-4835-96c5-3bbf43da0b94,3fc019d1-aec8-4835-96c5-3bbf43da0b94,1,0,5371672a-c8e0-4c12-834e-f23dd885b49a,5371672a-c8e0-4c12-834e-f23dd885b49a,1,0,d3e0dd8f-886a-4441-8f05-fd629da80f07,d3e0dd8f-886a-4441-8f05-fd629da80f07,1,0,6417d7c8-6436-4907-98eb-44cd7638f3f1,6417d7c8-6436-4907-98eb-44cd7638f3f1,1,0,1f927f76-5523-4880-9d26-d69a059f2b67,1f927f76-5523-4880-9d26-d69a059f2b67,1,0,27a9c1de-90a9-49f8-8b16-f7ef041ae1de,27a9c1de-90a9-49f8-8b16-f7ef041ae1de,1,0,ba49877b-6e30-4177-a67c-00e65aa498fb,ba49877b-6e30-4177-a67c-00e65aa498fb,1,0,25b39aeb-94c3-4199-9d56-5bd87e325bf2,25b39aeb-94c3-4199-9d56-5bd87e325bf2,1,0,b0b63551-4e83-4201-af9a-b4ab150c43a5,b0b63551-4e83-4201-af9a-b4ab150c43a5,1,0,ca85912b-87b4-481e-9184-017364b4603d,ca85912b-87b4-481e-9184-017364b4603d,1,0,2bd80198-4739-4e8f-9af1-40addc91a05b,2bd80198-4739-4e8f-9af1-40addc91a05b,1,0,2650db63-ca98-4a8a-8c36-165548aa5279,2650db63-ca98-4a8a-8c36-165548aa5279,1,0,6a8fdf0a-5dff-49e4-a423-fc80aceeee27,6a8fdf0a-5dff-49e4-a423-fc80aceeee27,1,0,4b9320f1-c7b1-4c08-a832-64ef108d0d6d,4b9320f1-c7b1-4c08-a832-64ef108d0d6d,1,0,e8c5c961-0633-438d-ba50-d2a774f6b167,e8c5c961-0633-438d-ba50-d2a774f6b167,1,0,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,33c66a15-e48e-406a-a77c-02af72ae96d5,33c66a15-e48e-406a-a77c-02af72ae96d5,1,0,e57f4619-b5ed-44de-a186-a13a3897731b,e57f4619-b5ed-44de-a186-a13a3897731b,1,0,3b78a9d0-7382-4115-a7dc-d06c9a1962d1,3b78a9d0-7382-4115-a7dc-d06c9a1962d1,1,0,9935d602-668e-4df9-a338-0f542def878b,9935d602-668e-4df9-a338-0f542def878b,1,0,459ed297-0c0d-4bdb-90a3-da387868f040,459ed297-0c0d-4bdb-90a3-da387868f040,1,0,ccb5b9a7-1a10-4803-b455-0350afe4b584,ccb5b9a7-1a10-4803-b455-0350afe4b584,1,0,c86aa97a-5898-4cb2-ae62-598bddf8e99f,c86aa97a-5898-4cb2-ae62-598bddf8e99f,1,0,d3c9b925-6b74-42db-8b21-ab21d24797d1,d3c9b925-6b74-42db-8b21-ab21d24797d1,1,0,c5033dd2-0911-4124-8688-dc9dabf3155f,c5033dd2-0911-4124-8688-dc9dabf3155f,1,0,274357df-cb5c-407d-ae72-58046c310db2,274357df-cb5c-407d-ae72-58046c310db2,1,0,5467001e-d025-4669-b16e-26381ac4403f,5467001e-d025-4669-b16e-26381ac4403f,1,0,cb3a5c5b-7bdc-4e12-96f1-11b1213b6853,cb3a5c5b-7bdc-4e12-96f1-11b1213b6853,1,0,e6fe7103-4dfa-4302-a58e-ccd7fac19c9d,e6fe7103-4dfa-4302-a58e-ccd7fac19c9d,1,0,bb3a9973-67ce-479e-8668-c2f3bb20301e,bb3a9973-67ce-479e-8668-c2f3bb20301e,1,0,e5250dfe-dda2-4547-9b9e-2470ea1be1ab,e5250dfe-dda2-4547-9b9e-2470ea1be1ab,1,0,2c3fccc6-c4c0-49ec-bfc2-05ce05f27ea9,2c3fccc6-c4c0-49ec-bfc2-05ce05f27ea9,1,0,37169451-1464-4f24-8ca6-802963ffb636,37169451-1464-4f24-8ca6-802963ffb636,1,0,c3a958b1-590f-4418-a74f-5982b478cf52,c3a958b1-590f-4418-a74f-5982b478cf52,1,0,ef0e618d-0942-460a-ac65-9aca2fed976e,ef0e618d-0942-460a-ac65-9aca2fed976e,1,0,fd1ed7ec-d848-41cd-8ce3-2e5a682abcf0,fd1ed7ec-d848-41cd-8ce3-2e5a682abcf0,1,0,2ac8bd69-9fbf-4f15-b58d-397d9e903532,2ac8bd69-9fbf-4f15-b58d-397d9e903532,1,0,2ff35814-7eaa-4ae5-bbac-f46bebb36c9d,2ff35814-7eaa-4ae5-bbac-f46bebb36c9d,1,0,5b460b92-2c74-4f59-88b2-18d9aac42c04,5b460b92-2c74-4f59-88b2-18d9aac42c04,1,0,db05d35b-5f53-4c27-ba80-b477b9a98299,db05d35b-5f53-4c27-ba80-b477b9a98299,1,0,fa872ae1-b699-46fe-9d6a-e42e1388752b,fa872ae1-b699-46fe-9d6a-e42e1388752b,1,0,1acf34e6-c428-4130-82f0-5160dfcc0858,1acf34e6-c428-4130-82f0-5160dfcc0858,1,0,57046262-b9ce-4670-9cf5-6db9e58dd0d5,57046262-b9ce-4670-9cf5-6db9e58dd0d5,1,0,a9824176-36d5-4be5-9984-f4312ff48515,a9824176-36d5-4be5-9984-f4312ff48515,1,0,8e980ca0-1627-45e8-bd27-5dd1ac199459,8e980ca0-1627-45e8-bd27-5dd1ac199459,1,0,8b653beb-af9f-4f39-b691-ae14f80b7cd6,8b653beb-af9f-4f39-b691-ae14f80b7cd6,1,0,77559c11-713f-454d-aff4-56649e1350e9,77559c11-713f-454d-aff4-56649e1350e9,1,0,0c965703-c1d0-48b7-80f9-b8d869ff98f5,0c965703-c1d0-48b7-80f9-b8d869ff98f5,1,0,51f8d5ff-aec5-4c0a-ad02-df8c6cb1b4ad,51f8d5ff-aec5-4c0a-ad02-df8c6cb1b4ad,1,0,7ba42162-557b-4e34-8aca-0cdee8cb2452,7ba42162-557b-4e34-8aca-0cdee8cb2452,1,0,eee99b8e-29b6-4b7a-81f1-3d91d740c0d7,eee99b8e-29b6-4b7a-81f1-3d91d740c0d7,1,0,ad4f2d1f-1e6f-4f6a-8061-202c0e42a8e4,ad4f2d1f-1e6f-4f6a-8061-202c0e42a8e4,1,0,dd577924-c6cb-4aa9-9db5-366d8958d00f,dd577924-c6cb-4aa9-9db5-366d8958d00f,1,0,8ed8f72e-404a-4be4-a44d-ddebbad5f411,8ed8f72e-404a-4be4-a44d-ddebbad5f411,1,0,e919bc4c-86e6-44f6-be27-5a729b63d042,e919bc4c-86e6-44f6-be27-5a729b63d042,1,0,ec580e4f-1518-4923-a10e-bc1da8688b37,ec580e4f-1518-4923-a10e-bc1da8688b37,1,0,91c3902a-314f-4d40-8bcc-8dd131fed2f4,91c3902a-314f-4d40-8bcc-8dd131fed2f4,1,0,ae2b21c5-9349-49e8-9627-26f05c21f43a,ae2b21c5-9349-49e8-9627-26f05c21f43a,1,0,7e4c0b74-e807-4aa9-ad69-3c85b147bb61,7e4c0b74-e807-4aa9-ad69-3c85b147bb61,1,0,917a19d7-73db-4247-b892-397598d67879,917a19d7-73db-4247-b892-397598d67879,1,0,1f866dc3-a4bc-4e8d-96a3-a26ee073926f,1f866dc3-a4bc-4e8d-96a3-a26ee073926f,1,0,d8066600-c669-449d-a187-fdd3af8f7afa,d8066600-c669-449d-a187-fdd3af8f7afa,1,0,dadf86a6-c118-4827-b1b9-6cfee731242f,dadf86a6-c118-4827-b1b9-6cfee731242f,1,0,45bf7b20-f048-491a-a989-e50bea13d028,45bf7b20-f048-491a-a989-e50bea13d028,1,0,9ad3b432-5b49-44ee-9d8d-83c36458d927,9ad3b432-5b49-44ee-9d8d-83c36458d927,1,0,a9967bff-53b9-4295-a253-3647d956d3cb,a9967bff-53b9-4295-a253-3647d956d3cb,1,0,75f0fd5b-c594-4f3a-8ff2-3fdadf1dc96d,75f0fd5b-c594-4f3a-8ff2-3fdadf1dc96d,1,0,b8a31397-8974-44ec-92b0-7cbdc481cf7e,b8a31397-8974-44ec-92b0-7cbdc481cf7e,1,0,b29c7c0d-03eb-422b-a899-ba9a7eba99f6,b29c7c0d-03eb-422b-a899-ba9a7eba99f6,1,0,fb16c4d5-854c-4525-92be-b21fa2df5b0d,fb16c4d5-854c-4525-92be-b21fa2df5b0d,1,0,5771de21-2086-432b-ad91-de14a39bd5bc,5771de21-2086-432b-ad91-de14a39bd5bc,1,0,b15bcf3b-0228-4d02-8f20-cd6ba82f7585,b15bcf3b-0228-4d02-8f20-cd6ba82f7585,1,0,ed96fbfa-bda7-405c-9073-d0b6feffedad,ed96fbfa-bda7-405c-9073-d0b6feffedad,1,0,50c724cb-dde1-4313-9492-b1750bd0afc1,50c724cb-dde1-4313-9492-b1750bd0afc1,1,0,12901981-6106-4471-ab3a-e127c2bb4ebd,12901981-6106-4471-ab3a-e127c2bb4ebd,1,0,17ad1497-fa0e-469f-b2e2-b94a6f848ec5,17ad1497-fa0e-469f-b2e2-b94a6f848ec5,1,0,d5ea5dea-233d-4106-b9ba-f030d4f762ef,d5ea5dea-233d-4106-b9ba-f030d4f762ef,1,0,903af05e-5ac5-46aa-843b-d74f9e417c1d,903af05e-5ac5-46aa-843b-d74f9e417c1d,1,0,4dc4862e-74c3-469d-863b-09fdbe0d6be0,4dc4862e-74c3-469d-863b-09fdbe0d6be0,1,0,a344290a-c9be-47a7-95ad-ced1b52a0995,a344290a-c9be-47a7-95ad-ced1b52a0995,1,0,a4e56049-4de9-40a3-8197-a5c84a11f516,a4e56049-4de9-40a3-8197-a5c84a11f516,1,0,339c9220-fd5b-45d3-b300-cdcc8788f87e,339c9220-fd5b-45d3-b300-cdcc8788f87e,1,0,02d7d401-3c0c-4fd0-b096-1f73b6ec14c3,02d7d401-3c0c-4fd0-b096-1f73b6ec14c3,1,0,9042a6de-5048-432d-a448-7e21f2d1d24a,9042a6de-5048-432d-a448-7e21f2d1d24a,1,0,350d46bf-114e-48e7-90c6-6708d949f20d,350d46bf-114e-48e7-90c6-6708d949f20d,1,0,d047caa8-7bcf-41ac-a18e-97877d6e0a2a,d047caa8-7bcf-41ac-a18e-97877d6e0a2a,1,0,aac20ff3-5873-432e-b763-14411e623d41,aac20ff3-5873-432e-b763-14411e623d41,1,0,fbc4df3e-c235-4197-8c1f-a5e39ac63a8c,fbc4df3e-c235-4197-8c1f-a5e39ac63a8c,1,0,6df44466-8750-481a-9baf-c924f0d45353,6df44466-8750-481a-9baf-c924f0d45353,1,0,110121eb-a0eb-4662-8911-3dcc3d341a73,110121eb-a0eb-4662-8911-3dcc3d341a73,1,0,f8980c18-6b9c-4e45-919a-22e976d2a846,f8980c18-6b9c-4e45-919a-22e976d2a846,1,0,c946efb7-c67e-49c1-bf56-d3c2d7220acd,c946efb7-c67e-49c1-bf56-d3c2d7220acd,1,0,7ed6bd83-b61d-4db4-8549-acacbdda6ca2,7ed6bd83-b61d-4db4-8549-acacbdda6ca2,1,0,6b7c9f74-f2b6-463e-acb9-9f82901986cf,6b7c9f74-f2b6-463e-acb9-9f82901986cf,1,0,fc4c1d64-132b-4687-a37d-05000fdb4ba5,fc4c1d64-132b-4687-a37d-05000fdb4ba5,1,0,528777cd-090b-4b70-82f5-56def98c5893,528777cd-090b-4b70-82f5-56def98c5893,1,0,49dbe467-8832-4ede-9a05-494248619aeb,49dbe467-8832-4ede-9a05-494248619aeb,1,0,460ed9ca-10c2-491c-a641-b92ffc2a8e7c,460ed9ca-10c2-491c-a641-b92ffc2a8e7c,1,0,bd5fadd3-9264-4c3b-9bd5-51e91847a6fb,bd5fadd3-9264-4c3b-9bd5-51e91847a6fb,1,0,09c73108-8528-4970-9b7f-fff9eda7816a,09c73108-8528-4970-9b7f-fff9eda7816a,1,0,40aa936e-cb1c-4ae9-85f1-6d930a5815cc,40aa936e-cb1c-4ae9-85f1-6d930a5815cc,1,0,f568245a-d158-45dc-af92-2d411f12db7b,f568245a-d158-45dc-af92-2d411f12db7b,1,0,0f17cdac-aa17-45e6-b3d0-220b13345390,0f17cdac-aa17-45e6-b3d0-220b13345390,1,0,c675db75-d0c3-4026-b97c-6b23ecbb336a,c675db75-d0c3-4026-b97c-6b23ecbb336a,1,0,469f67fa-98b0-44b0-abd4-cae136c02834,469f67fa-98b0-44b0-abd4-cae136c02834,1,0,16a18458-999c-420e-80df-8fc10855746c,16a18458-999c-420e-80df-8fc10855746c,1,0,b794f222-0fde-439f-97a3-0da74075b415,b794f222-0fde-439f-97a3-0da74075b415,1,0,3a716aad-9b2c-48a7-b802-80732066391b,3a716aad-9b2c-48a7-b802-80732066391b,1,0,480d959f-aac8-4241-875f-78e1c1f32621,480d959f-aac8-4241-875f-78e1c1f32621,1,0,496e5de8-d75c-4536-9993-75374f070b40,496e5de8-d75c-4536-9993-75374f070b40,1,0,b4e610ba-c9c8-4b25-903b-e567dcbc2556,b4e610ba-c9c8-4b25-903b-e567dcbc2556,1,0,48febdbd-a085-4113-8511-ed7ff6be7d3c,48febdbd-a085-4113-8511-ed7ff6be7d3c,1,0,49413232-c0c3-4983-9d10-291a0399281b,49413232-c0c3-4983-9d10-291a0399281b,1,0,032bb782-96a7-4c1b-8b8f-eb4e18b555b7,032bb782-96a7-4c1b-8b8f-eb4e18b555b7,1,0,b9b076bb-38ab-4a94-8226-41a4d4d7432c,b9b076bb-38ab-4a94-8226-41a4d4d7432c,1,0,e12da8db-4037-473e-ba2b-d0ceb4534dcb,e12da8db-4037-473e-ba2b-d0ceb4534dcb,1,0,789514e5-8ea3-4a5e-88c5-ed89c4135866,789514e5-8ea3-4a5e-88c5-ed89c4135866,1,0,a16768ff-6137-43d8-8784-4805ed83632a,a16768ff-6137-43d8-8784-4805ed83632a,1,0,61971286-9f94-4a27-aa34-e10848adb70a,61971286-9f94-4a27-aa34-e10848adb70a,1,0,1e75d143-3452-496e-a137-6d7f4c4ed019,1e75d143-3452-496e-a137-6d7f4c4ed019,1,0,e0619d14-c658-4eb5-841a-3a029de28be4,e0619d14-c658-4eb5-841a-3a029de28be4,1,0,99a3b660-7875-47f7-9c6c-c552e5673deb,99a3b660-7875-47f7-9c6c-c552e5673deb,1,0,2bdcf3a5-c8e1-492c-afee-f9db68e2fbb6,2bdcf3a5-c8e1-492c-afee-f9db68e2fbb6,1,0,41cbf934-ea54-41df-abf0-09f319d2e67a,41cbf934-ea54-41df-abf0-09f319d2e67a,1,0,47246084-a5f8-4d0f-b4e2-204c1b97483a,47246084-a5f8-4d0f-b4e2-204c1b97483a,1,0,e58233ec-6cfc-4a8b-9929-689fa69cdb07,e58233ec-6cfc-4a8b-9929-689fa69cdb07,1,0,3291a891-a47c-43ca-b088-aecd3867d38c,3291a891-a47c-43ca-b088-aecd3867d38c,1,0,56cde2b4-00f2-49ba-b407-16e241c17fd2,56cde2b4-00f2-49ba-b407-16e241c17fd2,1,0,bd84fb2b-4c52-4e2f-a8c5-f289b8336145,bd84fb2b-4c52-4e2f-a8c5-f289b8336145,1,0,219ed110-f2a0-41c1-ac5a-02301b248c54,219ed110-f2a0-41c1-ac5a-02301b248c54,1,0,1c722dfd-2b07-4985-9188-17353de24771,1c722dfd-2b07-4985-9188-17353de24771,1,0,1a630496-2cdd-4c89-a1aa-ed20545ad133,1a630496-2cdd-4c89-a1aa-ed20545ad133,1,0,b0dd02ee-ea6a-43f2-baa2-abac0a1ab4bb,b0dd02ee-ea6a-43f2-baa2-abac0a1ab4bb,1,0,b19cea0e-e57a-4969-8daf-f48d3d16705f,b19cea0e-e57a-4969-8daf-f48d3d16705f,1,0,d4059340-3361-4baa-ae48-ecbfb9800a2e,d4059340-3361-4baa-ae48-ecbfb9800a2e,1,0,f78f6c43-dd90-4117-acf7-ed5b951cb964,f78f6c43-dd90-4117-acf7-ed5b951cb964,1,0,8eebd519-4989-4784-82b8-39d77eebfb17,8eebd519-4989-4784-82b8-39d77eebfb17,1,0,0a2cb6e3-d9fa-4881-b136-7b6db9efca07,0a2cb6e3-d9fa-4881-b136-7b6db9efca07,1,0,c1561ed9-2fbf-4c12-a484-07f8adbe8fa3,c1561ed9-2fbf-4c12-a484-07f8adbe8fa3,1,0,4527877b-5723-4aa5-8705-98174ac9c337,4527877b-5723-4aa5-8705-98174ac9c337,1,0,d6b21e7b-df57-4280-8c95-c269b5316018,d6b21e7b-df57-4280-8c95-c269b5316018,1,0,808c468b-6322-428d-ac6a-ccf2228b05b6,808c468b-6322-428d-ac6a-ccf2228b05b6,1,0,13664bb2-738f-4d18-b382-a7bcf8105a5a,13664bb2-738f-4d18-b382-a7bcf8105a5a,1,0,f3f56abe-9248-4555-bf99-29560eb4f9ee,f3f56abe-9248-4555-bf99-29560eb4f9ee,1,0,0dbd5d55-a85f-4c7e-ac31-7ba4ab7cc371,0dbd5d55-a85f-4c7e-ac31-7ba4ab7cc371,1,0,dd9d09ef-3b4b-4bb5-9408-9c4080049bb3,dd9d09ef-3b4b-4bb5-9408-9c4080049bb3,1,0,3eb43a06-b32d-4904-8489-6264d0207623,3eb43a06-b32d-4904-8489-6264d0207623,1,0,a18098cf-5a61-46b5-bd55-cc61d15aa6bc,a18098cf-5a61-46b5-bd55-cc61d15aa6bc,1,0,18615fe1-cfee-4888-9c09-88d1c5db39eb,18615fe1-cfee-4888-9c09-88d1c5db39eb,1,0,63e363fa-8b0c-4d48-ab1b-9c953c5ed4c0,63e363fa-8b0c-4d48-ab1b-9c953c5ed4c0,1,0,087c83c0-75e7-476b-b7c6-5be55498a190,087c83c0-75e7-476b-b7c6-5be55498a190,1,0,ec5e5413-9e77-4929-83b8-6fee70688b28,ec5e5413-9e77-4929-83b8-6fee70688b28,1,0,59cd8e3f-ecf3-4e1d-bd98-41551d5d6f68,59cd8e3f-ecf3-4e1d-bd98-41551d5d6f68,1,0,8390c864-2b84-4c45-8583-cb4a4ab49168,8390c864-2b84-4c45-8583-cb4a4ab49168,1,0,1b2fefca-fef5-4319-90cc-325444cb63a6,1b2fefca-fef5-4319-90cc-325444cb63a6,1,0,34a128be-8fbb-4dd8-ac23-9f35041feb63,34a128be-8fbb-4dd8-ac23-9f35041feb63,1,0,baa31006-e0d6-496e-a60e-27b3dfd19397,baa31006-e0d6-496e-a60e-27b3dfd19397,1,0,3007d8ff-3942-45ed-bac5-8a6c40ca060c,3007d8ff-3942-45ed-bac5-8a6c40ca060c,1,0,8bfe1474-fd12-4744-a9ab-3383bfe766b3,8bfe1474-fd12-4744-a9ab-3383bfe766b3,1,0,3af97375-f776-4129-9521-b8d65d795db6,3af97375-f776-4129-9521-b8d65d795db6,1,0,0e98801b-a45b-44cb-a341-7e43d723f6ed,0e98801b-a45b-44cb-a341-7e43d723f6ed,1,0,5b71cd3b-d5b8-4632-9678-0ab1e1d2ea91,5b71cd3b-d5b8-4632-9678-0ab1e1d2ea91,1,0,103ac72d-c386-40ea-89d4-35798d064f1a,103ac72d-c386-40ea-89d4-35798d064f1a,1,0,645ceb40-1e9f-4a67-aa7f-b9002fa066b3,645ceb40-1e9f-4a67-aa7f-b9002fa066b3,1,0,d1fe15e9-8e5c-4819-85cd-24ab31409437,d1fe15e9-8e5c-4819-85cd-24ab31409437,1,0,c8c5bfe9-ead5-4e79-9fd5-60ad275faa1e,c8c5bfe9-ead5-4e79-9fd5-60ad275faa1e,1,0,8f9826b6-890e-4ba3-a1f2-bc9ebb3238dd,8f9826b6-890e-4ba3-a1f2-bc9ebb3238dd,1,0,74f68bda-17b1-4b3c-aa64-b1014300f9b5,74f68bda-17b1-4b3c-aa64-b1014300f9b5,1,0,90a195b0-7f64-4ccb-986e-8c8c2cf12ccd,90a195b0-7f64-4ccb-986e-8c8c2cf12ccd,1,0,9f9d1f8c-7ff9-420f-a426-48f33493d9f2,9f9d1f8c-7ff9-420f-a426-48f33493d9f2,1,0,ab7bc0bc-b4b8-4a4a-aecc-1cbe14fd4975,ab7bc0bc-b4b8-4a4a-aecc-1cbe14fd4975,1,0,9f8d9594-674f-49ef-9fb8-bb64d5c40a37,9f8d9594-674f-49ef-9fb8-bb64d5c40a37,1,0,47ee7d38-9fa9-458d-abee-e11270f79494,47ee7d38-9fa9-458d-abee-e11270f79494,1,0,bb6b83ff-81f4-4c39-ad8e-8cda9ccd9cb9,bb6b83ff-81f4-4c39-ad8e-8cda9ccd9cb9,1,0,076daecf-8fcb-496b-9f13-c4faa3a8a722,076daecf-8fcb-496b-9f13-c4faa3a8a722,1,0,f1a8357b-7083-42b3-ab5d-36223a3dd2a4,f1a8357b-7083-42b3-ab5d-36223a3dd2a4,1,0,296d7725-bdd3-4210-9db9-31de5711ea9b,296d7725-bdd3-4210-9db9-31de5711ea9b,1,0,6ecc5bc2-20b3-46f3-8019-ae1e1f3de319,6ecc5bc2-20b3-46f3-8019-ae1e1f3de319,1,0,1d05f89a-23dd-4d30-8786-abe8a9a39a40,1d05f89a-23dd-4d30-8786-abe8a9a39a40,1,0,245c2c6c-7b7f-4381-9304-1d7287a215fa,245c2c6c-7b7f-4381-9304-1d7287a215fa,1,0,fd17bbe4-34d9-4832-8eea-8eeb82194e4c,fd17bbe4-34d9-4832-8eea-8eeb82194e4c,1,0,d4c72d7f-7e1f-473c-9a2b-fa675fc78731,d4c72d7f-7e1f-473c-9a2b-fa675fc78731,1,0,8bb5be12-98df-4a38-bffe-432fb13d8101,8bb5be12-98df-4a38-bffe-432fb13d8101,1,0,94209023-ce88-401c-9aff-526fb7e43709,94209023-ce88-401c-9aff-526fb7e43709,1,0,22b99094-b52a-4244-ae91-53848d82560b,22b99094-b52a-4244-ae91-53848d82560b,1,0,22c9e2fa-c1f0-41ec-b6f2-9d7357dd3479,22c9e2fa-c1f0-41ec-b6f2-9d7357dd3479,1,0,b0002134-d5c9-4508-9f0e-97f92461b590,b0002134-d5c9-4508-9f0e-97f92461b590,1,0,1506ec71-cb38-4831-a29d-dac2c4deddda,1506ec71-cb38-4831-a29d-dac2c4deddda,1,0,e05fd82b-b77b-4b7f-b300-43653017f341,e05fd82b-b77b-4b7f-b300-43653017f341,1,0,d3b5e5ee-2317-43b4-b669-3af2ce635cf3,d3b5e5ee-2317-43b4-b669-3af2ce635cf3,1,0,f15a0526-c207-42fe-aed9-438ae0c4a4b8,f15a0526-c207-42fe-aed9-438ae0c4a4b8,1,0,9d444a41-7190-48fb-9a4a-08f8e7bc32a3,9d444a41-7190-48fb-9a4a-08f8e7bc32a3,1,0,8583cab0-0620-4346-96e0-bcac40981b8a,8583cab0-0620-4346-96e0-bcac40981b8a,1,0,e1dfba26-c682-42a2-8e15-fe6f535c9ce1,e1dfba26-c682-42a2-8e15-fe6f535c9ce1,1,0,095990b1-187b-400c-941a-275f272239ca,095990b1-187b-400c-941a-275f272239ca,1,0,ba108470-350d-40c3-bb44-9852c2aa8c97,ba108470-350d-40c3-bb44-9852c2aa8c97,1,0,a37c33fa-64b0-4a1b-846a-0a236bad44f8,a37c33fa-64b0-4a1b-846a-0a236bad44f8,1,0,d8481ce1-7f64-47b0-8fc0-6642ae93aca1,d8481ce1-7f64-47b0-8fc0-6642ae93aca1,1,0,a50f4324-da44-449b-b500-74228b2aa7e0,a50f4324-da44-449b-b500-74228b2aa7e0,1,0,04236716-9c36-4a1d-b4fb-4b8c65644ab4,04236716-9c36-4a1d-b4fb-4b8c65644ab4,1,0,97276702-6686-4ac4-8360-d85369a08b20,97276702-6686-4ac4-8360-d85369a08b20,1,0,e5450ee7-e891-4f58-9a01-d2d81d5ddd6d,e5450ee7-e891-4f58-9a01-d2d81d5ddd6d,1,0,068883fe-d7ae-40e7-ad82-864867916daa,068883fe-d7ae-40e7-ad82-864867916daa,1,0,c1b02568-2095-4f83-8543-2402f67dbe3d,c1b02568-2095-4f83-8543-2402f67dbe3d,1,0,8b749b7a-5e68-4523-adc2-8b3c5ce9701c,8b749b7a-5e68-4523-adc2-8b3c5ce9701c,1,0,bf3c7edc-0791-459e-a7ac-b7e8d7ed97fe,bf3c7edc-0791-459e-a7ac-b7e8d7ed97fe,1,0,7dc6d13e-4edf-4e6a-9ee9-4b32ad889ecf,7dc6d13e-4edf-4e6a-9ee9-4b32ad889ecf,1,0,aecbd726-6952-49e6-b544-4c5cc764c24c,aecbd726-6952-49e6-b544-4c5cc764c24c,1,0,d335cfbf-bc78-4274-a178-10f60372474a,d335cfbf-bc78-4274-a178-10f60372474a,1,0,0f4411b3-addf-4fcf-8da8-c5140dea356c,0f4411b3-addf-4fcf-8da8-c5140dea356c,1,0,c501f9ab-d01b-4137-8cd0-e66103117c84,c501f9ab-d01b-4137-8cd0-e66103117c84,1,0,8d5d4e0f-b7b5-4cdc-aedc-571517fa101f,8d5d4e0f-b7b5-4cdc-aedc-571517fa101f,1,0,66e65355-1424-4c74-801c-faf5357257aa,66e65355-1424-4c74-801c-faf5357257aa,1,0,0a93187b-7ae4-4985-8089-3099dfec2b48,0a93187b-7ae4-4985-8089-3099dfec2b48,1,0,044458f3-ed9b-4afb-ae73-8f9162c032bf,044458f3-ed9b-4afb-ae73-8f9162c032bf,1,0,578f618e-5f4a-4e86-959d-39b59e973936,578f618e-5f4a-4e86-959d-39b59e973936,1,0,f74ede2e-2d28-4224-ba44-773eda7760a4,f74ede2e-2d28-4224-ba44-773eda7760a4,1,0,217df06a-1bdf-4394-b617-ed756ff17bc6,217df06a-1bdf-4394-b617-ed756ff17bc6,1,0,a1572e97-a487-497a-9062-49315e237e0f,a1572e97-a487-497a-9062-49315e237e0f,1,0,969cdcb8-0f2a-427f-93a0-e7ae38f465e8,969cdcb8-0f2a-427f-93a0-e7ae38f465e8,1,0,3c5d87a0-cfce-464a-b946-64c5a589a376,3c5d87a0-cfce-464a-b946-64c5a589a376,1,0,2d22c67d-4795-4a6b-bc81-a3ed1eb28367,2d22c67d-4795-4a6b-bc81-a3ed1eb28367,1,0,763de8d1-7f53-41b6-8d97-7da724e9f763,763de8d1-7f53-41b6-8d97-7da724e9f763,1,0,75592ed4-2aab-4dfc-ae7b-d93e2a98370f,75592ed4-2aab-4dfc-ae7b-d93e2a98370f,1,0,4ad59c75-cca4-4968-82e6-babd72d8b318,4ad59c75-cca4-4968-82e6-babd72d8b318,1,0,c248de15-63a2-48ec-8695-7a5213d4fc9b,c248de15-63a2-48ec-8695-7a5213d4fc9b,1,0,272ff0f9-7266-4c22-be12-fe62682b56a5,272ff0f9-7266-4c22-be12-fe62682b56a5,1,0,9f141dd5-d866-4c25-b58a-a7766a08b4e7,9f141dd5-d866-4c25-b58a-a7766a08b4e7,1,0,0570d846-889d-4cfc-98fb-a1ad0181597f,0570d846-889d-4cfc-98fb-a1ad0181597f,1,0,19e17c58-953f-4917-8b6a-c88808fcca36,19e17c58-953f-4917-8b6a-c88808fcca36,1,0,4804316d-3765-4a83-8438-10e8e82656db,4804316d-3765-4a83-8438-10e8e82656db,1,0,59458556-e343-4215-8e6c-69f924ec4183,59458556-e343-4215-8e6c-69f924ec4183,1,0,dd553dca-7eba-41bf-8939-2c61e170ff65,dd553dca-7eba-41bf-8939-2c61e170ff65,1,0,b4ecf3dc-a2aa-406e-a593-1700ea8746bc,b4ecf3dc-a2aa-406e-a593-1700ea8746bc,1,0,933d7ce7-ea82-4b26-8d1b-dc92cb5ac92d,933d7ce7-ea82-4b26-8d1b-dc92cb5ac92d,1,0,8099e978-28cc-4ade-ac5a-3785f3a45f70,8099e978-28cc-4ade-ac5a-3785f3a45f70,1,0,11eff613-8077-41fa-8cb8-5e8dc27d0e4f,11eff613-8077-41fa-8cb8-5e8dc27d0e4f,1,0,fe023ca5-f11a-4b98-99c1-363508e4ea4a,fe023ca5-f11a-4b98-99c1-363508e4ea4a,1,0,6f8d515e-13d9-45f8-9793-3757f5b85f81,6f8d515e-13d9-45f8-9793-3757f5b85f81,1,0,25ec541c-c437-4318-b2a8-5146df6ae080,25ec541c-c437-4318-b2a8-5146df6ae080,1,0,148754ed-3063-40a7-a3c3-8ad105552370,148754ed-3063-40a7-a3c3-8ad105552370,1,0,ab3f0862-c355-4fd7-a2a7-4eb8278de510,ab3f0862-c355-4fd7-a2a7-4eb8278de510,1,0,85bbfe20-a6a4-49ca-8f20-342f4cbe8258,85bbfe20-a6a4-49ca-8f20-342f4cbe8258,1,0,c12c3f3b-3a96-4e70-b131-8d7bd765095f,c12c3f3b-3a96-4e70-b131-8d7bd765095f,1,0,70ee4b32-80d1-4b79-a322-0433f1b8c7f1,70ee4b32-80d1-4b79-a322-0433f1b8c7f1,1,0,c563588c-346e-499e-ae33-9ff3cb62e658,c563588c-346e-499e-ae33-9ff3cb62e658,1,0,40dbc001-97b6-4188-8de9-3adac670bac4,40dbc001-97b6-4188-8de9-3adac670bac4,1,0,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,030c6a22-a3d5-4cf2-9f7b-dc4fe3732f83,030c6a22-a3d5-4cf2-9f7b-dc4fe3732f83,1,0,b19f1223-5ebe-4446-bacc-bc7d53486f2e,b19f1223-5ebe-4446-bacc-bc7d53486f2e,1,0,6ea7e8e9-0faa-43fd-b9c8-1a7b8f899d6d,6ea7e8e9-0faa-43fd-b9c8-1a7b8f899d6d,1,0,7be1decf-feb1-422b-a3f2-f60d08fdb0e6,7be1decf-feb1-422b-a3f2-f60d08fdb0e6,1,0,bf3167d6-3047-482a-b280-184f446ae7a3,bf3167d6-3047-482a-b280-184f446ae7a3,1,0,50c47c0a-a199-4020-9df4-91b17c159454,50c47c0a-a199-4020-9df4-91b17c159454,1,0,c1d449af-8a6e-4cb0-b2c9-50ea5405c44c,c1d449af-8a6e-4cb0-b2c9-50ea5405c44c,1,0,faecdc33-fed8-4b44-96f4-4215c26959b6,faecdc33-fed8-4b44-96f4-4215c26959b6,1,0,09c29992-47a8-4fca-bd95-e7dbc53e8c4c,09c29992-47a8-4fca-bd95-e7dbc53e8c4c,1,0,f07cf7bd-6f3f-426a-8b71-ba1dcb827654,f07cf7bd-6f3f-426a-8b71-ba1dcb827654,1,0,9df3792e-a4ee-4a2c-9296-c1384925521e,9df3792e-a4ee-4a2c-9296-c1384925521e,1,0,03d423db-f98a-468f-9040-5b76454e5a98,03d423db-f98a-468f-9040-5b76454e5a98,1,0,08f394f9-d254-4fe5-8651-a69c96de7a62,08f394f9-d254-4fe5-8651-a69c96de7a62,1,0,e90ec54b-8b86-43df-8c3c-18c6676bf3f1,e90ec54b-8b86-43df-8c3c-18c6676bf3f1,1,0,6aff6b2f-660b-4d75-9064-fed7a6b0feac,6aff6b2f-660b-4d75-9064-fed7a6b0feac,1,0,53502127-9f47-4e2e-b3ed-eb3c3aae1c50,53502127-9f47-4e2e-b3ed-eb3c3aae1c50,1,0,2fcdd0b5-b738-4e19-8bbf-13a72d7014ec,2fcdd0b5-b738-4e19-8bbf-13a72d7014ec,1,0,59dc7e8d-6f5c-4e1b-816e-5fc15c0e96e0,59dc7e8d-6f5c-4e1b-816e-5fc15c0e96e0,1,0,e60a9221-7676-456f-8a01-b317b03a278b,e60a9221-7676-456f-8a01-b317b03a278b,1,0,4e81ec90-f668-49ca-9193-22337bafb01b,4e81ec90-f668-49ca-9193-22337bafb01b,1,0,104c7c31-5bbd-4242-b29a-2c0d8b69a1b9,104c7c31-5bbd-4242-b29a-2c0d8b69a1b9,1,0,cd60adec-52d6-4fa8-85ca-26551196432c,cd60adec-52d6-4fa8-85ca-26551196432c,1,0,4dfbabd7-d5e5-4b2a-b8d1-752e416629a0,4dfbabd7-d5e5-4b2a-b8d1-752e416629a0,1,0,b71ddbdb-08bb-46be-a79d-319c4a557e76,b71ddbdb-08bb-46be-a79d-319c4a557e76,1,0,d3dfa867-3d52-4872-a69e-f27636abe1bd,d3dfa867-3d52-4872-a69e-f27636abe1bd,1,0,6952d1aa-7132-4e40-8542-f64a4dc1e029,6952d1aa-7132-4e40-8542-f64a4dc1e029,1,0,51a1bc4c-9139-42a4-92c3-f45c837cbdb9,51a1bc4c-9139-42a4-92c3-f45c837cbdb9,1,0,1621811b-dfd3-4c58-8e15-ced16690147a,1621811b-dfd3-4c58-8e15-ced16690147a,1,0,3f266e51-0476-4b7f-8d61-6f9f4456049d,3f266e51-0476-4b7f-8d61-6f9f4456049d,1,0,2b9ce591-ff13-4c2d-85c4-632a2609a211,2b9ce591-ff13-4c2d-85c4-632a2609a211,1,0,689ca0ec-61ce-4590-b73b-ac81e8f1d459,689ca0ec-61ce-4590-b73b-ac81e8f1d459,1,0,3ea1895f-66d0-4bbb-a66b-0c9d411a7c55,3ea1895f-66d0-4bbb-a66b-0c9d411a7c55,1,0,55ad36d7-399e-4b82-8d1c-d45bd890abfe,55ad36d7-399e-4b82-8d1c-d45bd890abfe,1,0,0f3b9012-7bf6-4451-b0c3-139d98d9c2c1,0f3b9012-7bf6-4451-b0c3-139d98d9c2c1,1,0,1b39a65f-5425-4bcb-85bd-1425274af8a8,1b39a65f-5425-4bcb-85bd-1425274af8a8,1,0,392a0618-a41a-4713-a561-f3a80b85abd8,392a0618-a41a-4713-a561-f3a80b85abd8,1,0,a453384d-658d-40f1-ac69-578aa3a24e39,a453384d-658d-40f1-ac69-578aa3a24e39,1,0,2215a441-b9b1-4e5c-8df3-e6cee9226c43,2215a441-b9b1-4e5c-8df3-e6cee9226c43,1,0,2a8d4908-ea0d-4837-be3f-bd78f6b61254,2a8d4908-ea0d-4837-be3f-bd78f6b61254,1,0,ec1deb79-7369-4b26-8e91-f51399e8052a,ec1deb79-7369-4b26-8e91-f51399e8052a,1,0,75dde4fb-3a1a-450c-95c2-c1f95a781db9,75dde4fb-3a1a-450c-95c2-c1f95a781db9,1,0,0ae3ac56-160a-417e-9952-719d02e7f089,0ae3ac56-160a-417e-9952-719d02e7f089,1,0,f5b3983d-d22d-44a8-9069-0a60d8b858bf,f5b3983d-d22d-44a8-9069-0a60d8b858bf,1,0,a64b15fa-fc34-43fe-a366-d27c0f1c3df2,a64b15fa-fc34-43fe-a366-d27c0f1c3df2,1,0,8b13e848-8fd3-4326-bd18-5a5b12ed3dc5,8b13e848-8fd3-4326-bd18-5a5b12ed3dc5,1,0,b9a6b053-2b93-4946-9531-040d3131dcc5,b9a6b053-2b93-4946-9531-040d3131dcc5,1,0,9f36d26e-aa71-44d5-ac27-9aaa643555c3,9f36d26e-aa71-44d5-ac27-9aaa643555c3,1,0,87b8b5d7-d3d6-450a-adb1-5c875257ec80,87b8b5d7-d3d6-450a-adb1-5c875257ec80,1,0,e3640efe-e46c-4588-b251-dda23bf0641d,e3640efe-e46c-4588-b251-dda23bf0641d,1,0,b46b5090-5eb1-4950-9031-8b43f611fa9c,b46b5090-5eb1-4950-9031-8b43f611fa9c,1,0,522a4bff-34d3-46b2-8c66-0b30d881a86e,522a4bff-34d3-46b2-8c66-0b30d881a86e,1,0,3d7908b1-bd82-475e-8488-fafcbe3458ee,3d7908b1-bd82-475e-8488-fafcbe3458ee,1,0,1bac040b-83e4-402f-a9bf-d6a7b10c91e0,1bac040b-83e4-402f-a9bf-d6a7b10c91e0,1,0,e9c632b0-7977-4e44-ac56-882617ad7cdc,e9c632b0-7977-4e44-ac56-882617ad7cdc,1,0,e84acba7-7e0f-43e8-a545-6e53d529d5d4,e84acba7-7e0f-43e8-a545-6e53d529d5d4,1,0,3b089d90-7ece-4b74-a4dc-e436d9d31b3b,3b089d90-7ece-4b74-a4dc-e436d9d31b3b,1,0,0f9c08c2-e7fa-4ea0-a935-f927feb01131,0f9c08c2-e7fa-4ea0-a935-f927feb01131,1,0,6086d53f-f1b2-4126-ab46-64705fe63b87,6086d53f-f1b2-4126-ab46-64705fe63b87,1,0,62a6b1c9-8288-4fa1-a17d-241b85a5e4b0,62a6b1c9-8288-4fa1-a17d-241b85a5e4b0,1,0,57069b56-f732-41c0-9a75-cbdb1e88556c,57069b56-f732-41c0-9a75-cbdb1e88556c,1,0,6d042890-27b2-4efc-935e-8190bb57c037,6d042890-27b2-4efc-935e-8190bb57c037,1,0,23e79add-7f1c-422a-9df1-8f76ebf805df,23e79add-7f1c-422a-9df1-8f76ebf805df,1,0,9295d88f-0865-440c-a98a-4710c50211be,9295d88f-0865-440c-a98a-4710c50211be,1,0,90aa51ae-434d-48f4-bfe3-0e1dd3aeea6f,90aa51ae-434d-48f4-bfe3-0e1dd3aeea6f,1,0,38ac9a13-665a-4201-b5cc-687fe4a01130,38ac9a13-665a-4201-b5cc-687fe4a01130,1,0,97c59096-b2dc-45d0-a580-b3018a04f9af,97c59096-b2dc-45d0-a580-b3018a04f9af,1,0,5dcd8e28-b058-405a-bac4-defab7d4b789,5dcd8e28-b058-405a-bac4-defab7d4b789,1,0,6fbf63b7-1692-495e-a8ec-bdda182997a3,6fbf63b7-1692-495e-a8ec-bdda182997a3,1,0,077af11c-fd3c-4e87-b169-5f3137464f77,077af11c-fd3c-4e87-b169-5f3137464f77,1,0,8172256e-f51e-4de0-bd07-3668785f4cb9,8172256e-f51e-4de0-bd07-3668785f4cb9,1,0,ccb54dc9-3d12-43d0-af6a-138d3526f5d5,ccb54dc9-3d12-43d0-af6a-138d3526f5d5,1,0,da8f7f30-eb80-44db-a451-348306c90cd8,da8f7f30-eb80-44db-a451-348306c90cd8,1,0,b82bcff8-49c9-44a9-8a9f-4428b0cc54a5,b82bcff8-49c9-44a9-8a9f-4428b0cc54a5,1,0,870b4d6d-0b89-4eda-a2b3-5c6db7dbe864,870b4d6d-0b89-4eda-a2b3-5c6db7dbe864,1,0,c172aeaf-b444-47c0-baee-80ccd91fe934,c172aeaf-b444-47c0-baee-80ccd91fe934,1,0,757ea742-8c14-4e0a-a867-432eee5cfc64,757ea742-8c14-4e0a-a867-432eee5cfc64,1,0,b8c36d5a-7966-4978-9225-67502b9c60a4,b8c36d5a-7966-4978-9225-67502b9c60a4,1,0,37ea0c64-2fec-4c2e-922b-d3a2f01f3e22,37ea0c64-2fec-4c2e-922b-d3a2f01f3e22,1,0,9847676d-f44d-46a0-83e2-4a43a835caf8,9847676d-f44d-46a0-83e2-4a43a835caf8,1,0,43c18cae-21a9-413b-a350-d5cf826980f0,43c18cae-21a9-413b-a350-d5cf826980f0,1,0,16773cdb-b979-42d5-a2a5-d4b79e8737bd,16773cdb-b979-42d5-a2a5-d4b79e8737bd,1,0,c28a190a-f487-4e99-b8f8-6928268086f8,c28a190a-f487-4e99-b8f8-6928268086f8,1,0,94e02f76-8656-4999-9470-dd996118400c,94e02f76-8656-4999-9470-dd996118400c,1,0,9effd265-3783-44e2-8698-80dd82137546,9effd265-3783-44e2-8698-80dd82137546,1,0,bef52020-98f8-465b-8981-e5f8eed62308,bef52020-98f8-465b-8981-e5f8eed62308,1,0,19897ad0-bdb5-439c-b4a2-a773c0ce5cf5,19897ad0-bdb5-439c-b4a2-a773c0ce5cf5,1,0,e731dab7-df9e-48ae-8542-4c0c30666ae9,e731dab7-df9e-48ae-8542-4c0c30666ae9,1,0,f321e378-6d50-4567-8434-813f367d3a65,f321e378-6d50-4567-8434-813f367d3a65,1,0,27246fd8-a8a3-4244-b49a-c0372a812167,27246fd8-a8a3-4244-b49a-c0372a812167,1,0,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,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,4d6683a3-1edd-4d04-8e02-0be002e4e5a4,4d6683a3-1edd-4d04-8e02-0be002e4e5a4,1,0,c7ffd8ab-15e9-4cf1-a7fd-d05534dff000,c7ffd8ab-15e9-4cf1-a7fd-d05534dff000,1,0,53caada5-1d53-45dc-9432-90075ddca890,53caada5-1d53-45dc-9432-90075ddca890,1,0,d1472d23-954b-4069-b2d6-df08c6ec0be1,d1472d23-954b-4069-b2d6-df08c6ec0be1,1,0,93fe2ce6-7193-42bc-a966-4653b7989eaa,93fe2ce6-7193-42bc-a966-4653b7989eaa,1,0,6a2add61-edb7-4561-bae9-06b3741e7726,6a2add61-edb7-4561-bae9-06b3741e7726,1,0,a7fe0aa5-722c-4a09-889b-ee422421addc,a7fe0aa5-722c-4a09-889b-ee422421addc,1,0,798bd34c-d0ee-4590-9b1d-8bc47e42ca8c,798bd34c-d0ee-4590-9b1d-8bc47e42ca8c,1,0,b572b1d0-4404-421c-9950-1cc1342ca5f3,b572b1d0-4404-421c-9950-1cc1342ca5f3,1,0,0c838a31-2b08-447c-b39a-a613cfba526c,0c838a31-2b08-447c-b39a-a613cfba526c,1,0,b25083c5-9b97-49a4-b6c3-bbf8d7f91cd3,b25083c5-9b97-49a4-b6c3-bbf8d7f91cd3,1,0,86c679c0-3531-4622-9a1f-3d9d6ccdd431,86c679c0-3531-4622-9a1f-3d9d6ccdd431,1,0,3bc2ca38-4a10-4ebd-a5dc-3418db494f0c,3bc2ca38-4a10-4ebd-a5dc-3418db494f0c,1,0,670c62c1-1a33-4dec-9540-5b4c1fe29074,670c62c1-1a33-4dec-9540-5b4c1fe29074,1,0,cc664d81-d0af-4d25-ae29-64f422e51bf2,cc664d81-d0af-4d25-ae29-64f422e51bf2,1,0,e1314cd1-e662-4c29-ad51-492cb0029883,e1314cd1-e662-4c29-ad51-492cb0029883,1,0,ae3876e2-bd06-415b-9d9a-b77d787be09e,ae3876e2-bd06-415b-9d9a-b77d787be09e,1,0,0cf49621-afc5-4c8d-a1b5-f8c30db9f415,0cf49621-afc5-4c8d-a1b5-f8c30db9f415,1,0,4718392b-477c-496b-9d28-ddbdaa7a04f2,4718392b-477c-496b-9d28-ddbdaa7a04f2,1,0,879844f0-30b4-47f5-8d2e-5fea29910368,879844f0-30b4-47f5-8d2e-5fea29910368,1,0,303334ba-2785-47fe-a094-84f9dea33be2,303334ba-2785-47fe-a094-84f9dea33be2,1,0,9690842c-7a2c-4b5d-a238-f730afc49a7b,9690842c-7a2c-4b5d-a238-f730afc49a7b,1,0,04424730-6992-4a5b-838b-7a7c16dedbd0,04424730-6992-4a5b-838b-7a7c16dedbd0,1,0,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,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,72d41d01-9c9d-4fbe-8a39-932d82d171ef,72d41d01-9c9d-4fbe-8a39-932d82d171ef,1,0,697d5715-dd04-40be-9b28-539734725158,697d5715-dd04-40be-9b28-539734725158,1,0,d831a8ac-88a4-4191-ab0b-7538dfb3e7d7,d831a8ac-88a4-4191-ab0b-7538dfb3e7d7,1,0,d95fcb37-fc65-466d-93e2-489f41683276,d95fcb37-fc65-466d-93e2-489f41683276,1,0,c6b0d31e-7b68-4c7f-a565-0ac8a7c11143,c6b0d31e-7b68-4c7f-a565-0ac8a7c11143,1,0,a27a9296-46bb-49a1-8308-db675baa81d0,a27a9296-46bb-49a1-8308-db675baa81d0,1,0,1456f317-360c-4190-b2d1-1be7484369a5,1456f317-360c-4190-b2d1-1be7484369a5,1,0,5ac74bb3-a4df-47db-ad87-6cb95b85c51f,5ac74bb3-a4df-47db-ad87-6cb95b85c51f,1,0,4867948f-b027-44ae-b78c-a94e00eed52b,4867948f-b027-44ae-b78c-a94e00eed52b,1,0,aa0c32ae-da52-4df9-8b77-99ea31f8df81,aa0c32ae-da52-4df9-8b77-99ea31f8df81,1,0,d7dcd391-3a0e-4aa9-9b53-467a1de67593,d7dcd391-3a0e-4aa9-9b53-467a1de67593,1,0,3d4cb11a-7ce7-4c46-a427-99d6f41f08bf,3d4cb11a-7ce7-4c46-a427-99d6f41f08bf,1,0,ef044879-e731-418a-b917-6a685f27c5f4,ef044879-e731-418a-b917-6a685f27c5f4,1,0,618d13d5-fd1f-4b70-ad45-dd6a17a50730,618d13d5-fd1f-4b70-ad45-dd6a17a50730,1,0,58037b76-b548-4f07-bd67-67e552a5c6e5,58037b76-b548-4f07-bd67-67e552a5c6e5,1,0,68f19104-5fa3-4f28-a84b-bf68c3bed49b,68f19104-5fa3-4f28-a84b-bf68c3bed49b,1,0,f88ccd7a-8d15-4b24-addf-da522a0b4a43,f88ccd7a-8d15-4b24-addf-da522a0b4a43,1,0,0f8e87d4-ffb7-4cff-a2d3-6d5c5219ff0b,0f8e87d4-ffb7-4cff-a2d3-6d5c5219ff0b,1,0,1511c2e3-aeb4-422a-b6ae-03412b714c93,1511c2e3-aeb4-422a-b6ae-03412b714c93,1,0,00e48a23-eb5b-4a29-b36c-218ab9760f23,00e48a23-eb5b-4a29-b36c-218ab9760f23,1,0,331db120-ba88-4eb3-a8ec-10691be82e2d,331db120-ba88-4eb3-a8ec-10691be82e2d,1,0,349378d1-abe3-44de-84a4-d525b08e0474,349378d1-abe3-44de-84a4-d525b08e0474,1,0,1526b18d-7fab-414e-a5b2-377b67ac0b55,1526b18d-7fab-414e-a5b2-377b67ac0b55,1,0,c561fe6b-53ea-435b-a230-1850e2dc1ff5,c561fe6b-53ea-435b-a230-1850e2dc1ff5,1,0,aba7605f-6baf-42a8-b5ad-8f71c780b81f,aba7605f-6baf-42a8-b5ad-8f71c780b81f,1,0,8fc19eca-1a15-4758-af4b-79637e51edfb,8fc19eca-1a15-4758-af4b-79637e51edfb,1,0,be9144ce-5560-47bb-8c5e-9beefd15bfc3,be9144ce-5560-47bb-8c5e-9beefd15bfc3,1,0,ad09d1e6-5982-4e1c-864e-452ac5b2915a,ad09d1e6-5982-4e1c-864e-452ac5b2915a,1,0,c0bc4cc4-b5ca-47c2-b589-c0d25bb63f1e,c0bc4cc4-b5ca-47c2-b589-c0d25bb63f1e,1,0,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,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,3cda70d0-3116-4508-82ea-5ea0f0921262,3cda70d0-3116-4508-82ea-5ea0f0921262,1,0,d5588c0d-3e94-485b-a7e9-45f5cf74df9e,d5588c0d-3e94-485b-a7e9-45f5cf74df9e,1,0,f415296e-fceb-4835-abe9-17bb17a5d5e5,f415296e-fceb-4835-abe9-17bb17a5d5e5,1,0,0e805e1f-3797-4ef9-94d3-0ec58ac1b605,0e805e1f-3797-4ef9-94d3-0ec58ac1b605,1,0,8677bd53-5569-4d44-b7ce-d1b3fe12c78d,8677bd53-5569-4d44-b7ce-d1b3fe12c78d,1,0,19056365-9ff1-4733-876e-a7ebdbbe0557,19056365-9ff1-4733-876e-a7ebdbbe0557,1,0,c8679d82-075c-4556-8231-c004d144fe61,c8679d82-075c-4556-8231-c004d144fe61,1,0,5e09dc5e-bbb7-4c38-b609-940c24f63c84,5e09dc5e-bbb7-4c38-b609-940c24f63c84,1,0,017b28eb-8ba9-465e-a748-20eadbeb4ea2,017b28eb-8ba9-465e-a748-20eadbeb4ea2,1,0,c0bb2d66-94c9-4bc6-afd5-534075e8395b,c0bb2d66-94c9-4bc6-afd5-534075e8395b,1,0,db7cc693-1645-4416-a9d9-5a7584cd3bbc,db7cc693-1645-4416-a9d9-5a7584cd3bbc,1,0,c849fb09-7833-49c8-9461-98426dc6c0af,c849fb09-7833-49c8-9461-98426dc6c0af,1,0,6c58fc3a-37f8-44b7-b076-2c10ce09b554,6c58fc3a-37f8-44b7-b076-2c10ce09b554,1,0,245c07a9-98b0-452b-b899-dc8751ab7ce0,245c07a9-98b0-452b-b899-dc8751ab7ce0,1,0,b0ca1b85-e1de-4b7c-8261-7f9e8a6a72eb,b0ca1b85-e1de-4b7c-8261-7f9e8a6a72eb,1,0,ae67dfe5-bb36-4400-81f5-8dab1fd0ca6e,ae67dfe5-bb36-4400-81f5-8dab1fd0ca6e,1,0,91d7687b-7627-473f-a08d-433f9d385107,91d7687b-7627-473f-a08d-433f9d385107,1,0,83db1b00-e9e3-41da-8a59-47589dcfd618,83db1b00-e9e3-41da-8a59-47589dcfd618,1,0,91d2d798-1498-4c52-aa7b-99db4b992876,91d2d798-1498-4c52-aa7b-99db4b992876,1,0,e85a03d3-e7c7-4058-992a-515a557d9e52,e85a03d3-e7c7-4058-992a-515a557d9e52,1,0,d3a1d247-8f4a-45af-9861-7e313a100209,d3a1d247-8f4a-45af-9861-7e313a100209,1,0,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,00579e31-e97d-4d79-ba25-b8d500a17e7f,00579e31-e97d-4d79-ba25-b8d500a17e7f,1,0,5001bea4-c8f9-4950-9eda-d33125e3bb46,5001bea4-c8f9-4950-9eda-d33125e3bb46,1,0,4ac6d0dd-0007-46b8-bfcc-93c0f85b6b85,4ac6d0dd-0007-46b8-bfcc-93c0f85b6b85,1,0,e815010d-e03d-46e4-b482-c1556902cc26,e815010d-e03d-46e4-b482-c1556902cc26,1,0,d4ab930a-ddaa-4552-afed-2618af822365,d4ab930a-ddaa-4552-afed-2618af822365,1,0,dd03e170-4186-495b-ae1c-fc66385d7ccf,dd03e170-4186-495b-ae1c-fc66385d7ccf,1,0,81fbb02e-76b2-4bca-bb3b-871e4e969a3c,81fbb02e-76b2-4bca-bb3b-871e4e969a3c,1,0,cdef5df6-f3a1-4950-b197-4f375914f885,cdef5df6-f3a1-4950-b197-4f375914f885,1,0,c1caff49-dc4b-4b3e-be47-122ea8b70416,c1caff49-dc4b-4b3e-be47-122ea8b70416,1,0,a1185a4c-7351-48b0-b662-61f61a1ad715,a1185a4c-7351-48b0-b662-61f61a1ad715,1,0,4ee0c7a4-cc26-438d-8908-f6a900c99d8b,4ee0c7a4-cc26-438d-8908-f6a900c99d8b,1,0,71d03545-df45-4c70-aa0d-3b916f2a9041,71d03545-df45-4c70-aa0d-3b916f2a9041,1,0,da9b0d3d-27dd-4a85-b0df-ec2f54d884f6,da9b0d3d-27dd-4a85-b0df-ec2f54d884f6,1,0,28a25822-2306-409a-a7c8-6f7e42bf25e8,28a25822-2306-409a-a7c8-6f7e42bf25e8,1,0,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,52e0ede7-de57-4640-b432-96e56131f277,52e0ede7-de57-4640-b432-96e56131f277,1,0,89888993-3b05-475e-ac76-3cd7ced93250,89888993-3b05-475e-ac76-3cd7ced93250,1,0,129f704b-cc63-4a4e-b6a7-9e53de4537a2,129f704b-cc63-4a4e-b6a7-9e53de4537a2,1,0,ea97b67e-1182-49c3-b95a-8fcce4cd3d09,ea97b67e-1182-49c3-b95a-8fcce4cd3d09,1,0,592f55e1-b004-44ef-878a-6c2016ccbeb0,592f55e1-b004-44ef-878a-6c2016ccbeb0,1,0,19add2bd-eede-4a05-901b-cf8ce49a638f,19add2bd-eede-4a05-901b-cf8ce49a638f,1,0,becf53b6-3fbc-4c70-822f-4a70b0434353,becf53b6-3fbc-4c70-822f-4a70b0434353,1,0,7dc0429d-146a-4c4f-b122-5d5c053bd4ed,7dc0429d-146a-4c4f-b122-5d5c053bd4ed,1,0,f8dc2485-685b-4e41-834a-a2cbbbe4d53b,f8dc2485-685b-4e41-834a-a2cbbbe4d53b,1,0,c38d8135-e11f-4860-b370-84ff279b7fbd,c38d8135-e11f-4860-b370-84ff279b7fbd,1,0,ee0798f5-47a8-4118-a25c-cfd3473007c1,ee0798f5-47a8-4118-a25c-cfd3473007c1,1,0,652ee894-047b-4a5a-a500-2d61b4c4a473,652ee894-047b-4a5a-a500-2d61b4c4a473,1,0,8a95d199-9bd1-4cbb-9d1a-941e80fa2105,8a95d199-9bd1-4cbb-9d1a-941e80fa2105,1,0,33f8cd94-71e7-4703-92c3-22690fbd871a,33f8cd94-71e7-4703-92c3-22690fbd871a,1,0,b6e5de4d-0156-4342-b646-6e6920a4bd3a,b6e5de4d-0156-4342-b646-6e6920a4bd3a,1,0,c03f9972-5a1f-449b-b170-5a958c2b5846,c03f9972-5a1f-449b-b170-5a958c2b5846,1,0,25896075-2484-4879-8310-7f5680d80b48,25896075-2484-4879-8310-7f5680d80b48,1,0,1e3c444d-6f73-4eb0-a12d-7106daf36b14,1e3c444d-6f73-4eb0-a12d-7106daf36b14,1,0,1e63c656-a0e7-4b33-8bac-2a196e028ffa,1e63c656-a0e7-4b33-8bac-2a196e028ffa,1,0,e417e2ab-5e25-40a9-8dc2-9552a4fe1a38,e417e2ab-5e25-40a9-8dc2-9552a4fe1a38,1,0,085cbea9-1df1-4ee9-afb7-da2bf313697e,085cbea9-1df1-4ee9-afb7-da2bf313697e,1,0,09858042-6284-4499-8055-c1b5b783ce5f,09858042-6284-4499-8055-c1b5b783ce5f,1,0,d33f4859-b68d-4d72-8f4c-a38cf47edb01,d33f4859-b68d-4d72-8f4c-a38cf47edb01,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,b3152292-5546-4896-ad24-cb41057698d8,b3152292-5546-4896-ad24-cb41057698d8,1,0,5f3d5a05-a581-462d-96a2-2750ba0e0481,5f3d5a05-a581-462d-96a2-2750ba0e0481,1,0,477ab478-b336-4bac-898f-e20e3a4039b5,477ab478-b336-4bac-898f-e20e3a4039b5,1,0,a4d767a1-d2e6-4e0a-ab35-9207eef54998,a4d767a1-d2e6-4e0a-ab35-9207eef54998,1,0,e50cb13a-151b-45d2-a7b7-d23440ddfa24,e50cb13a-151b-45d2-a7b7-d23440ddfa24,1,0,cc3a7f15-4db6-445e-b282-f44d0460b7d3,cc3a7f15-4db6-445e-b282-f44d0460b7d3,1,0,0b8bfb71-d430-4bdf-8391-a534b3a15fc3,0b8bfb71-d430-4bdf-8391-a534b3a15fc3,1,0,0d8770aa-fa6e-471c-92c8-b96576927ef0,0d8770aa-fa6e-471c-92c8-b96576927ef0,1,0,4f86b052-b81e-49b8-9fa8-82b2ecbc8e01,4f86b052-b81e-49b8-9fa8-82b2ecbc8e01,1,0,e25b2b10-bf08-42db-9642-861efc5e583b,e25b2b10-bf08-42db-9642-861efc5e583b,1,0,b8a32c33-4e15-4c21-baab-64a86d44321b,b8a32c33-4e15-4c21-baab-64a86d44321b,1,0,d7dd9a03-6818-4987-8f39-58e1c906569f,d7dd9a03-6818-4987-8f39-58e1c906569f,1,0,e4216976-2747-4078-81d4-8ffab668c1f7,e4216976-2747-4078-81d4-8ffab668c1f7,1,0,fce028b8-b530-49f0-b6ad-a28d03e19b0f,fce028b8-b530-49f0-b6ad-a28d03e19b0f,1,0,301eea20-0e7f-441e-a531-28b4627dfd93,301eea20-0e7f-441e-a531-28b4627dfd93,1,0,3b9c03bc-8517-498f-8052-e53854fb0753,3b9c03bc-8517-498f-8052-e53854fb0753,1,0,47da49ee-b243-4e78-9c8f-bb26c60e6136,47da49ee-b243-4e78-9c8f-bb26c60e6136,1,0,39bee714-cacd-4d48-97a5-c838660e049a,39bee714-cacd-4d48-97a5-c838660e049a,1,0,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,68e82adf-bc03-4f23-9ec4-749ed42241da,68e82adf-bc03-4f23-9ec4-749ed42241da,1,0,7ae5d177-a3e6-4989-b10c-8e0a605c26d9,7ae5d177-a3e6-4989-b10c-8e0a605c26d9,1,0,41f87891-ddd5-4e0f-a4f2-8039fb71981b,41f87891-ddd5-4e0f-a4f2-8039fb71981b,1,0,29f2094a-d0d1-425c-8161-45a9ba186e19,29f2094a-d0d1-425c-8161-45a9ba186e19,1,0,a57f6dc1-59d7-4311-8acd-65ce57a9f386,a57f6dc1-59d7-4311-8acd-65ce57a9f386,1,0,893b2dd9-a939-4799-9b78-50d788a5f3ba,893b2dd9-a939-4799-9b78-50d788a5f3ba,1,0,68229ecd-7ecc-4194-a3e5-f8df39b55d6a,68229ecd-7ecc-4194-a3e5-f8df39b55d6a,1,0,e4842271-4fc0-4e15-afef-876f05af78c0,e4842271-4fc0-4e15-afef-876f05af78c0,1,0,31ee6430-b65d-42fa-859b-c4f1c40686ae,31ee6430-b65d-42fa-859b-c4f1c40686ae,1,0,c59e11f3-6bcb-404a-9d76-1416c12be354,c59e11f3-6bcb-404a-9d76-1416c12be354,1,0,c1a1f12b-3978-4047-956e-a5c7de8371a0,c1a1f12b-3978-4047-956e-a5c7de8371a0,1,0,ac39b903-0c60-417e-a50f-49ed375424f5,ac39b903-0c60-417e-a50f-49ed375424f5,1,0,135d57fe-d420-4bb0-9120-e43fd9b55c16,135d57fe-d420-4bb0-9120-e43fd9b55c16,1,0,9893e2d6-f3f8-4d73-bb06-19bf26d216ab,9893e2d6-f3f8-4d73-bb06-19bf26d216ab,1,0,16392cf6-dd83-4df0-a54b-6efc29778a89,16392cf6-dd83-4df0-a54b-6efc29778a89,1,0,e693cdd0-8ead-4ba5-adec-86bab74ee7cd,e693cdd0-8ead-4ba5-adec-86bab74ee7cd,1,0,a4ec7d3d-2d01-436c-98ec-ec42733ee5c6,a4ec7d3d-2d01-436c-98ec-ec42733ee5c6,1,0,10db9f99-c7d1-4b16-9ea2-9bfc2aa4ddb5,10db9f99-c7d1-4b16-9ea2-9bfc2aa4ddb5,1,0,230722e6-942f-4594-be89-eff59c6572bf,230722e6-942f-4594-be89-eff59c6572bf,1,0,eaf6045f-9ac0-43ef-b165-a45be75a4d44,eaf6045f-9ac0-43ef-b165-a45be75a4d44,1,0,237dab99-ed72-432c-ad01-c6045d74f000,237dab99-ed72-432c-ad01-c6045d74f000,1,0,a1130128-cc48-4555-93a2-99e7f74f77dc,a1130128-cc48-4555-93a2-99e7f74f77dc,1,0,9b4b7424-1af7-4d80-8404-8819fcfeae75,9b4b7424-1af7-4d80-8404-8819fcfeae75,1,0,94e08dcf-3885-4a73-82ab-cb291f1cf95f,94e08dcf-3885-4a73-82ab-cb291f1cf95f,1,0,405c52c4-25fe-45ff-abab-bf01041e768d,405c52c4-25fe-45ff-abab-bf01041e768d,1,0,55ce840b-5838-4107-886d-f935b9907bd8,55ce840b-5838-4107-886d-f935b9907bd8,1,0,0b3088c9-7fb9-4979-acce-16d7ae7ba6b7,0b3088c9-7fb9-4979-acce-16d7ae7ba6b7,1,0,f1753bda-16db-4b00-a16a-37ddade8403f,f1753bda-16db-4b00-a16a-37ddade8403f,1,0,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,133f181a-fade-4182-826d-904fac780326,133f181a-fade-4182-826d-904fac780326,1,0,f60cb71a-f451-426a-aa3a-aa266b8da149,f60cb71a-f451-426a-aa3a-aa266b8da149,1,0,641ebe22-7135-4adb-bbd6-e0c37d246a2d,641ebe22-7135-4adb-bbd6-e0c37d246a2d,1,0,f71ba01e-9f6b-4241-8048-4368c8888756,f71ba01e-9f6b-4241-8048-4368c8888756,1,0,23abf9ba-63f9-4173-a9ce-3cbdf1ec3a52,23abf9ba-63f9-4173-a9ce-3cbdf1ec3a52,1,0,973609a2-5b5d-45c4-9606-a13d0de1a09b,973609a2-5b5d-45c4-9606-a13d0de1a09b,1,0,6aa814fa-417e-428c-951e-6efd9d0775da,6aa814fa-417e-428c-951e-6efd9d0775da,1,0,a247efe1-8608-4780-9cc8-54e29944475b,a247efe1-8608-4780-9cc8-54e29944475b,1,0,4b8c3c82-6e8f-469e-8a80-144361d1d0b2,4b8c3c82-6e8f-469e-8a80-144361d1d0b2,1,0,a8f162e9-3f59-41a5-b82f-da20928213c7,a8f162e9-3f59-41a5-b82f-da20928213c7,1,0,ade68dfd-5037-4fd7-b043-9514e3fe6342,ade68dfd-5037-4fd7-b043-9514e3fe6342,1,0,7b008aad-9d05-43e1-8295-62ae58cfff42,7b008aad-9d05-43e1-8295-62ae58cfff42,1,0,fdaf9255-d621-4a98-9530-f618ed440795,fdaf9255-d621-4a98-9530-f618ed440795,1,0,48cefa96-46c7-4870-a096-951dcbae479a,48cefa96-46c7-4870-a096-951dcbae479a,1,0,d74e01cc-941b-4974-8771-0bd2e0d86724,d74e01cc-941b-4974-8771-0bd2e0d86724,1,0,0daac965-2026-4acc-8ba1-3c1f01779257,0daac965-2026-4acc-8ba1-3c1f01779257,1,0,65a331c0-7501-49f6-8027-35b703d11834,65a331c0-7501-49f6-8027-35b703d11834,1,0,c67fab0a-704f-43ae-bd03-4b5b1a880b24,c67fab0a-704f-43ae-bd03-4b5b1a880b24,1,0,c1703a14-61a0-4461-8ad8-7173e2c431fe,c1703a14-61a0-4461-8ad8-7173e2c431fe,1,0,aecf5653-3005-43f2-ab49-40977e70f02b,aecf5653-3005-43f2-ab49-40977e70f02b,1,0,4093fe34-7557-4f15-831b-d654b94b8010,4093fe34-7557-4f15-831b-d654b94b8010,1,0,ee10023f-5c63-4cb3-8e6c-db566c788c9d,ee10023f-5c63-4cb3-8e6c-db566c788c9d,1,0,aae09896-3b22-4d7d-9059-e47660f8b88b,aae09896-3b22-4d7d-9059-e47660f8b88b,1,0,845530cd-36fb-44c3-b30a-730985c9ca2d,845530cd-36fb-44c3-b30a-730985c9ca2d,1,0,475f8577-a141-496b-94e1-53215c0dd017,475f8577-a141-496b-94e1-53215c0dd017,1,0,97638762-c01e-4c8f-88e2-b356e517e18f,97638762-c01e-4c8f-88e2-b356e517e18f,1,0,074e34f2-e9be-4bd3-beca-8b916772e2be,074e34f2-e9be-4bd3-beca-8b916772e2be,1,0,28fecf1b-7cab-4087-b66e-2052edb8ce3a,28fecf1b-7cab-4087-b66e-2052edb8ce3a,1,0,d85b00b7-b0d8-4b91-8d7f-0c2da524d446,d85b00b7-b0d8-4b91-8d7f-0c2da524d446,1,0,cc906f05-5ea6-43cb-a084-c4ee51ca4bd5,cc906f05-5ea6-43cb-a084-c4ee51ca4bd5,1,0,ce5549bd-ba99-4259-86a3-36521bad59f5,ce5549bd-ba99-4259-86a3-36521bad59f5,1,0,f5417147-4d2a-4e49-911b-2bb5eccb8441,f5417147-4d2a-4e49-911b-2bb5eccb8441,1,0,20fbed2b-4393-4de0-a71d-017a336bdac0,20fbed2b-4393-4de0-a71d-017a336bdac0,1,0,2ca4fc58-798b-4fc3-8673-27688ce7a1f2,2ca4fc58-798b-4fc3-8673-27688ce7a1f2,1,0,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,44b28019-01c0-468d-9b60-e050ff8b71ac,44b28019-01c0-468d-9b60-e050ff8b71ac,1,0,69f6173c-a570-41ff-b07f-5b85f7187515,69f6173c-a570-41ff-b07f-5b85f7187515,1,0,9c443dd3-4acb-4c5a-9c4b-af8b0c87e861,9c443dd3-4acb-4c5a-9c4b-af8b0c87e861,1,0,98153b59-8cc6-4dc7-b945-99c1146d07da,98153b59-8cc6-4dc7-b945-99c1146d07da,1,0,3e2828b4-2b55-471e-ac69-55119c2480f8,3e2828b4-2b55-471e-ac69-55119c2480f8,1,0,657b8663-713c-4a80-81e1-8c0166742a35,657b8663-713c-4a80-81e1-8c0166742a35,1,0,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,08baf3ee-b8ca-4f29-89fc-c15344064ad3,08baf3ee-b8ca-4f29-89fc-c15344064ad3,1,0,01b85e3a-9920-425a-9de5-5079fffeef93,01b85e3a-9920-425a-9de5-5079fffeef93,1,0,82e12316-cc64-4d2f-83fa-054b5a738f02,82e12316-cc64-4d2f-83fa-054b5a738f02,1,0,6b70f7e1-8bdb-4fc4-9b95-0e045bfa288c,6b70f7e1-8bdb-4fc4-9b95-0e045bfa288c,1,0,a890be6b-f050-4ea4-a388-570948ffd22b,a890be6b-f050-4ea4-a388-570948ffd22b,1,0,b00c31d6-4fc6-4189-9f72-f91742ec705f,b00c31d6-4fc6-4189-9f72-f91742ec705f,1,0,1333101b-82e8-41a9-a793-5af5dcd6f68a,1333101b-82e8-41a9-a793-5af5dcd6f68a,1,0,766c9bee-b0fc-4a7f-b88e-cd8c4aad73b8,766c9bee-b0fc-4a7f-b88e-cd8c4aad73b8,1,0,0f25646a-90f9-4747-a778-7efdaabc284c,0f25646a-90f9-4747-a778-7efdaabc284c,1,0,9b9cd161-5bee-4433-a0ec-b67deb099b5e,9b9cd161-5bee-4433-a0ec-b67deb099b5e,1,0,ca179cb5-65e1-4a55-bf12-096b926accb0,ca179cb5-65e1-4a55-bf12-096b926accb0,1,0,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,0f0456a8-ca04-4de4-9d9b-e8b0fdb8b860,0f0456a8-ca04-4de4-9d9b-e8b0fdb8b860,1,0,ed297409-6215-4fd4-b47d-a2247e0343da,ed297409-6215-4fd4-b47d-a2247e0343da,1,0,5ae2a1de-6380-45cc-9c8f-5612cd5ba627,5ae2a1de-6380-45cc-9c8f-5612cd5ba627,1,0,e7a63151-fc1a-4563-8768-26d854ab012b,e7a63151-fc1a-4563-8768-26d854ab012b,1,0,e8aa2ba2-7dfa-47e3-bc18-6156f700ceed,e8aa2ba2-7dfa-47e3-bc18-6156f700ceed,1,0,8c472f51-47ec-43c4-9858-fd19ac3e17f3,8c472f51-47ec-43c4-9858-fd19ac3e17f3,1,0,c54f31ce-114b-46d3-b4c6-12c8f07727ca,c54f31ce-114b-46d3-b4c6-12c8f07727ca,1,0,5a9c82c1-d0cd-48ff-b91c-38b950591e4c,5a9c82c1-d0cd-48ff-b91c-38b950591e4c,1,0,59855d19-29cd-4efd-a453-b19e574113ef,59855d19-29cd-4efd-a453-b19e574113ef,1,0,249b6436-bd44-4950-b118-7f40f7aaf794,249b6436-bd44-4950-b118-7f40f7aaf794,1,0,c1508d67-ac6d-41e3-884d-b3bdd54659f8,c1508d67-ac6d-41e3-884d-b3bdd54659f8,1,0,3436b16e-ef5b-4abb-9aad-c70a7c8560ed,3436b16e-ef5b-4abb-9aad-c70a7c8560ed,1,0,9dd57f32-90a1-4a1d-bc2a-c1b12461d963,9dd57f32-90a1-4a1d-bc2a-c1b12461d963,1,0,ce6d1259-af90-482b-b19a-405512321bd9,ce6d1259-af90-482b-b19a-405512321bd9,1,0,eb276904-cad7-4401-bb78-2d13946291f1,eb276904-cad7-4401-bb78-2d13946291f1,1,0,79ff04ac-4625-469b-916e-938f04de4dd2,79ff04ac-4625-469b-916e-938f04de4dd2,1,0,35103a27-230c-45c0-a8c9-24bd46608bbb,35103a27-230c-45c0-a8c9-24bd46608bbb,1,0,c5e9f987-4466-4161-8e36-278b0b3ce056,c5e9f987-4466-4161-8e36-278b0b3ce056,1,0,b6566d54-e821-4a2a-a447-0f533f35de91,b6566d54-e821-4a2a-a447-0f533f35de91,1,0,46568b9a-a765-4037-8a86-b184a570ab37,46568b9a-a765-4037-8a86-b184a570ab37,1,0,4fcc7278-2fec-49ee-b0ef-c7d5f5f698a4,4fcc7278-2fec-49ee-b0ef-c7d5f5f698a4,1,0,547a6dec-6fe8-439d-a8d9-ac2612af20d2,547a6dec-6fe8-439d-a8d9-ac2612af20d2,1,0,2bc2c4b7-dacb-4cb3-b5b2-712b19bebcd7,2bc2c4b7-dacb-4cb3-b5b2-712b19bebcd7,1,0,84395058-d46a-428c-b782-a9fa89fea14a,84395058-d46a-428c-b782-a9fa89fea14a,1,0,64f667e5-6a8f-448f-aed5-a4d461232845,64f667e5-6a8f-448f-aed5-a4d461232845,1,0,a148cdff-0e67-48e6-9cc5-e8a6f5aa1ae8,a148cdff-0e67-48e6-9cc5-e8a6f5aa1ae8,1,0,037842ca-aeaf-4e27-9a0e-e929438b6f40,037842ca-aeaf-4e27-9a0e-e929438b6f40,1,0,b43abcf7-1f1d-4a59-b0d1-0a493c3a4785,b43abcf7-1f1d-4a59-b0d1-0a493c3a4785,1,0,ab6fdd75-2ea6-4408-8c03-0cfab775a7a0,ab6fdd75-2ea6-4408-8c03-0cfab775a7a0,1,0,9da32b56-ff89-4739-bb99-615074b72298,9da32b56-ff89-4739-bb99-615074b72298,1,0,2c8ab5a6-66d5-4b6f-94ae-4292724ded7f,2c8ab5a6-66d5-4b6f-94ae-4292724ded7f,1,0,4766c40e-6330-4c1d-a64f-0c8c672886a4,4766c40e-6330-4c1d-a64f-0c8c672886a4,1,0,de25a90c-4b46-4340-b649-93e16dde33de,de25a90c-4b46-4340-b649-93e16dde33de,1,0,4f2d0398-49f4-410c-a451-436cbf96a262,4f2d0398-49f4-410c-a451-436cbf96a262,1,0,b2c8bd74-21c9-4495-93e2-ca5355698350,b2c8bd74-21c9-4495-93e2-ca5355698350,1,0,39bc2bc6-2a4f-4e26-b1b9-fb8473234f09,39bc2bc6-2a4f-4e26-b1b9-fb8473234f09,1,0,cc9679a5-1ed2-4290-8c9b-8a2f6614d053,cc9679a5-1ed2-4290-8c9b-8a2f6614d053,1,0,93016393-c637-4d81-8675-aa5e51e678e0,93016393-c637-4d81-8675-aa5e51e678e0,1,0,d8621f68-106e-4058-963f-56010491ae2e,d8621f68-106e-4058-963f-56010491ae2e,1,0,f2e2df50-52fc-4e95-909b-80fc91a68f62,f2e2df50-52fc-4e95-909b-80fc91a68f62,1,0,1a1d8dd0-1559-426c-ad3c-baa6eb3a53db,1a1d8dd0-1559-426c-ad3c-baa6eb3a53db,1,0,7a944c45-9b3d-411f-b2ef-de3c896092bb,7a944c45-9b3d-411f-b2ef-de3c896092bb,1,0,d2762764-b5c0-4aeb-8e89-3371972f22d8,d2762764-b5c0-4aeb-8e89-3371972f22d8,1,0,573f1753-9194-4aaf-9217-5cac70ff108f,573f1753-9194-4aaf-9217-5cac70ff108f,1,0,323997ca-488d-4d84-aa44-da60b6b4d414,323997ca-488d-4d84-aa44-da60b6b4d414,1,0,50d3e00e-1a83-4bd5-91db-0561560caf42,50d3e00e-1a83-4bd5-91db-0561560caf42,1,0,1f7ec25a-05b1-468b-8857-2bb1aed3678a,1f7ec25a-05b1-468b-8857-2bb1aed3678a,1,0,c121b8bc-ecbf-4775-b210-3c1e3502a6ac,c121b8bc-ecbf-4775-b210-3c1e3502a6ac,1,0,9f4d5fe5-9bda-4ba9-a313-db1ab0ea14d1,9f4d5fe5-9bda-4ba9-a313-db1ab0ea14d1,1,0,4a1e6d25-89e7-468a-aef1-6ded0154dca2,4a1e6d25-89e7-468a-aef1-6ded0154dca2,1,0,44afff59-0590-4929-93b8-7b49735f21b5,44afff59-0590-4929-93b8-7b49735f21b5,1,0,905624ea-b253-413f-b651-1eb2c5a7d52a,905624ea-b253-413f-b651-1eb2c5a7d52a,1,0,b639ed30-3e37-4c65-a39f-00fe735950eb,b639ed30-3e37-4c65-a39f-00fe735950eb,1,0,76ef7f67-0ce8-4ee2-9134-e793c41b8de3,76ef7f67-0ce8-4ee2-9134-e793c41b8de3,1,0,f137eb0f-bde7-412d-9229-d7a4f9456e6c,f137eb0f-bde7-412d-9229-d7a4f9456e6c,1,0,90880131-8065-4a7e-a0fa-ecff9e27363c,90880131-8065-4a7e-a0fa-ecff9e27363c,1,0,57e9fcea-342c-4089-bd10-befb3faf0dbd,57e9fcea-342c-4089-bd10-befb3faf0dbd,1,0,f85ff11a-163e-4d18-98bc-b0ebe83d34e4,f85ff11a-163e-4d18-98bc-b0ebe83d34e4,1,0,51a0444d-13c8-45a8-97f6-f3f976964bf8,51a0444d-13c8-45a8-97f6-f3f976964bf8,1,0,9892f922-8745-4164-a200-94b5edc1ea0a,9892f922-8745-4164-a200-94b5edc1ea0a,1,0,38eb3fd1-57be-4dc2-bed4-d8107086bf2a,38eb3fd1-57be-4dc2-bed4-d8107086bf2a,1,0,6b6d541b-5dc1-4150-b8d1-5844a694ac6a,6b6d541b-5dc1-4150-b8d1-5844a694ac6a,1,0,2b1619a6-c841-4963-8c51-c1d8d6ba3746,2b1619a6-c841-4963-8c51-c1d8d6ba3746,1,0,eab50f82-4612-47fd-a5c2-9678016a1937,eab50f82-4612-47fd-a5c2-9678016a1937,1,0,2609ba3c-e4de-45b3-86e0-93db39a21eee,2609ba3c-e4de-45b3-86e0-93db39a21eee,1,0,00dcfeab-7ba1-4a50-996e-4fd693dd0514,00dcfeab-7ba1-4a50-996e-4fd693dd0514,1,0,d21971c9-9aa6-448a-ab37-49ad0b0547ec,d21971c9-9aa6-448a-ab37-49ad0b0547ec,1,0,627438b8-c738-4e02-a0e7-cfd7fbf8eca1,627438b8-c738-4e02-a0e7-cfd7fbf8eca1,1,0,00418e6c-77b2-4753-b9ff-3a8013436f8a,00418e6c-77b2-4753-b9ff-3a8013436f8a,1,0,8deaa3d0-b36b-4f20-a9a8-11d829f5ef9d,8deaa3d0-b36b-4f20-a9a8-11d829f5ef9d,1,0,26986f8d-d56d-4641-9184-2632d0881cca,26986f8d-d56d-4641-9184-2632d0881cca,1,0,144676de-f369-49f1-bb21-d60e073936df,144676de-f369-49f1-bb21-d60e073936df,1,0,d5537afb-df5f-4edf-a3d3-ff6b2a908ad9,d5537afb-df5f-4edf-a3d3-ff6b2a908ad9,1,0,d9f1f56b-75c8-43e9-8043-89076c225f78,d9f1f56b-75c8-43e9-8043-89076c225f78,1,0,4d660fec-4a76-470e-bba9-3d031941b289,4d660fec-4a76-470e-bba9-3d031941b289,1,0,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,6ff5b3cb-efff-430d-bf0a-957405f116ca,6ff5b3cb-efff-430d-bf0a-957405f116ca,1,0,d06e845a-9f54-40dd-b0df-6988def62017,d06e845a-9f54-40dd-b0df-6988def62017,1,0,7badb97b-c359-42af-9066-6bbfc0650cf9,7badb97b-c359-42af-9066-6bbfc0650cf9,1,0,63223883-06cf-4d01-be95-5e410cc58a22,63223883-06cf-4d01-be95-5e410cc58a22,1,0,1929139f-dabb-4c40-9423-158093360889,1929139f-dabb-4c40-9423-158093360889,1,0,dad92df4-685b-4260-b35f-4d031262dfea,dad92df4-685b-4260-b35f-4d031262dfea,1,0,4399c19a-ddba-42e9-88b4-c5c28abad237,4399c19a-ddba-42e9-88b4-c5c28abad237,1,0,982315ba-df74-4a31-8929-71d1e5e6f147,982315ba-df74-4a31-8929-71d1e5e6f147,1,0,8d1c01a9-9806-4e5d-bafb-ce6af11d5650,8d1c01a9-9806-4e5d-bafb-ce6af11d5650,1,0,b8b267e3-75af-4140-b515-d99e8e748e84,b8b267e3-75af-4140-b515-d99e8e748e84,1,0,fd3a6a7e-203d-447a-aebd-7626579387fb,fd3a6a7e-203d-447a-aebd-7626579387fb,1,0,8014684f-e1f1-4163-9083-459a009c0aac,8014684f-e1f1-4163-9083-459a009c0aac,1,0,ad6384d5-278b-44d3-993a-d5a39e7c98ca,ad6384d5-278b-44d3-993a-d5a39e7c98ca,1,0,ff976027-75e8-475c-abfa-876d36733c13,ff976027-75e8-475c-abfa-876d36733c13,1,0,7452d9c0-cb03-4d1b-afd4-8855950f2ad8,7452d9c0-cb03-4d1b-afd4-8855950f2ad8,1,0,32d4a42d-6e4d-49db-b5bc-1ea6dbe9fe4d,32d4a42d-6e4d-49db-b5bc-1ea6dbe9fe4d,1,0,40c8b547-35d0-4dbd-8fa1-ba108c3022b1,40c8b547-35d0-4dbd-8fa1-ba108c3022b1,1,0,3f823f5b-e5a8-40af-8fc3-e4c6ffb18fa3,3f823f5b-e5a8-40af-8fc3-e4c6ffb18fa3,1,0,e55d259f-cfaa-46f9-92c4-687e1ff3b89d,e55d259f-cfaa-46f9-92c4-687e1ff3b89d,1,0,cf13e2d9-72a0-47c0-bae2-f674024bbdb2,cf13e2d9-72a0-47c0-bae2-f674024bbdb2,1,0,540be4e1-6eae-48e2-a645-8bd0a1259c65,540be4e1-6eae-48e2-a645-8bd0a1259c65,1,0,f772abd3-8ea0-41e9-aaca-c5375778941a,f772abd3-8ea0-41e9-aaca-c5375778941a,1,0,a1e494f8-96a4-41bd-9234-b87e8d8742c5,a1e494f8-96a4-41bd-9234-b87e8d8742c5,1,0,5c6b9fb5-7d29-4161-a81b-7c618ca07a47,5c6b9fb5-7d29-4161-a81b-7c618ca07a47,1,0,b322b047-16eb-4500-826a-6dfebb7d997a,b322b047-16eb-4500-826a-6dfebb7d997a,1,0,bbbc2d1f-2f78-4b7e-b5fb-ca7c74051221,bbbc2d1f-2f78-4b7e-b5fb-ca7c74051221,1,0,83ead93b-4ff6-487d-934e-25088944fccc,83ead93b-4ff6-487d-934e-25088944fccc,1,0,764c76cc-0473-4633-868d-02f96aa43c10,764c76cc-0473-4633-868d-02f96aa43c10,1,0,c8da922f-e31e-49b0-b90e-1c060424bde5,c8da922f-e31e-49b0-b90e-1c060424bde5,1,0,41462827-fd8b-4ee6-a739-a884d704bba5,41462827-fd8b-4ee6-a739-a884d704bba5,1,0,7b01236c-5ab7-43fa-aa0e-1ae55c8a4efe,7b01236c-5ab7-43fa-aa0e-1ae55c8a4efe,1,0,eca025d2-4fe9-4542-b9f5-46ae2631256e,eca025d2-4fe9-4542-b9f5-46ae2631256e,1,0,9416a741-5106-454e-b953-81f3d99d5e71,9416a741-5106-454e-b953-81f3d99d5e71,1,0,35bc58df-8aff-48dd-83a9-b60b0461f94d,35bc58df-8aff-48dd-83a9-b60b0461f94d,1,0,0f46ae6b-9fe8-471a-a59f-af5e66cb9e00,0f46ae6b-9fe8-471a-a59f-af5e66cb9e00,1,0,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,06afe397-1c7e-400e-bb24-f8e611d114e8,06afe397-1c7e-400e-bb24-f8e611d114e8,1,0,f0105e51-9510-426a-8aa0-af827d93ffd9,f0105e51-9510-426a-8aa0-af827d93ffd9,1,0,ca797560-8802-4bdc-b21f-7a7fd795beae,ca797560-8802-4bdc-b21f-7a7fd795beae,1,0,3df19dbf-efe7-4e31-99ad-fafb59ec1329,3df19dbf-efe7-4e31-99ad-fafb59ec1329,1,0,baf12d47-fbfe-4563-aa23-26d9f7e83169,baf12d47-fbfe-4563-aa23-26d9f7e83169,1,0,e2046f49-6fea-4bf4-92b0-92f3c8357bcf,e2046f49-6fea-4bf4-92b0-92f3c8357bcf,1,0,0ba11486-1972-4434-ab1a-5bb75cc05e9f,0ba11486-1972-4434-ab1a-5bb75cc05e9f,1,0,4ed9c555-7dd0-4577-bf62-152b4c5ec9f2,4ed9c555-7dd0-4577-bf62-152b4c5ec9f2,1,0,11fe3a42-98c4-49ba-b697-86ffb172f16f,11fe3a42-98c4-49ba-b697-86ffb172f16f,1,0,07b53818-7318-4400-8af5-457fac012755,07b53818-7318-4400-8af5-457fac012755,1,0,292b47e7-5cf3-462d-a466-dac6253a7f03,292b47e7-5cf3-462d-a466-dac6253a7f03,1,0,8ecc070f-f6fb-46b1-9636-b77aa80f8804,8ecc070f-f6fb-46b1-9636-b77aa80f8804,1,0,8405be9d-465b-4744-b04f-03933b52f02e,8405be9d-465b-4744-b04f-03933b52f02e,1,0,a8021ff9-f0ae-49ab-b8ac-5e3d8fe90d82,a8021ff9-f0ae-49ab-b8ac-5e3d8fe90d82,1,0,f09b09ce-9e3c-406a-8508-b6e7e6ec966e,f09b09ce-9e3c-406a-8508-b6e7e6ec966e,1,0,9bf55587-1ffe-42bc-b8e8-3f956956f689,9bf55587-1ffe-42bc-b8e8-3f956956f689,1,0,2f67931e-543f-457e-80fd-78ca754e2e9c,2f67931e-543f-457e-80fd-78ca754e2e9c,1,0,595e5752-36a7-4bba-8a40-26920acae01d,595e5752-36a7-4bba-8a40-26920acae01d,1,0,28801fba-c429-4afa-bdcd-b3ec3ec22fda,28801fba-c429-4afa-bdcd-b3ec3ec22fda,1,0,d1a873ae-d45b-4600-9419-e701dce3da02,d1a873ae-d45b-4600-9419-e701dce3da02,1,0,e3a31f0d-a98f-43c6-bc39-087095ae8c39,e3a31f0d-a98f-43c6-bc39-087095ae8c39,1,0,e39d8ff3-52db-4ba4-b4ea-42d5ee787076,e39d8ff3-52db-4ba4-b4ea-42d5ee787076,1,0,b1c1c2eb-f9cd-468a-8398-b0b7f611f832,b1c1c2eb-f9cd-468a-8398-b0b7f611f832,1,0,4bb0f7c3-62f3-4352-9bc8-e243dd18fe4a,4bb0f7c3-62f3-4352-9bc8-e243dd18fe4a,1,0,bc106ef9-3eeb-40d4-aa59-ae1855ba1744,bc106ef9-3eeb-40d4-aa59-ae1855ba1744,1,0,73d8b319-9bea-4638-a602-23c12f37c227,73d8b319-9bea-4638-a602-23c12f37c227,1,0,cef55e64-d4ad-42dc-aa5a-ea65a3af7cfa,cef55e64-d4ad-42dc-aa5a-ea65a3af7cfa,1,0,a43e9de0-2921-4c58-a5f8-7446258be967,a43e9de0-2921-4c58-a5f8-7446258be967,1,0,307656e3-df7f-46e7-946c-bbd439265c95,307656e3-df7f-46e7-946c-bbd439265c95,1,0,eb3dfdc7-58b8-4b1f-b079-368c262364c9,eb3dfdc7-58b8-4b1f-b079-368c262364c9,1,0,5030a318-f8f7-4ec7-80d6-6eee0772562f,5030a318-f8f7-4ec7-80d6-6eee0772562f,1,0,242e911d-e49c-4b8a-8543-cc2e079220fd,242e911d-e49c-4b8a-8543-cc2e079220fd,1,0,9ea39d31-3775-4fb8-a3f3-202e54354d49,9ea39d31-3775-4fb8-a3f3-202e54354d49,1,0,73044e20-148c-46e9-b5b5-973c91de0d61,73044e20-148c-46e9-b5b5-973c91de0d61,1,0,f8ab477c-8e78-48c0-9f99-27748b109706,f8ab477c-8e78-48c0-9f99-27748b109706,1,0,24cff6c8-6c20-4383-b97c-6afa52738960,24cff6c8-6c20-4383-b97c-6afa52738960,1,0,462e2694-750d-49ef-93ac-17a7779be68d,462e2694-750d-49ef-93ac-17a7779be68d,1,0,c24ff02e-5afc-45df-81cf-64ea2b261c2d,c24ff02e-5afc-45df-81cf-64ea2b261c2d,1,0,2d51aae9-650d-4719-a94d-2609b69a2d36,2d51aae9-650d-4719-a94d-2609b69a2d36,1,0,6025f5b5-6dc7-46b8-96e6-02823c5b4de7,6025f5b5-6dc7-46b8-96e6-02823c5b4de7,1,0,5d9d88ea-b2e4-425c-bb4d-a005e867d56c,5d9d88ea-b2e4-425c-bb4d-a005e867d56c,1,0,b76d342c-0f9d-4eb0-b49e-a9f472a4dd0d,b76d342c-0f9d-4eb0-b49e-a9f472a4dd0d,1,0,85639a53-b367-49ce-84f2-4e21d81c489b,85639a53-b367-49ce-84f2-4e21d81c489b,1,0,24b59586-178e-4efc-90ae-529553f3bb6c,24b59586-178e-4efc-90ae-529553f3bb6c,1,0,20e75dd5-222a-4100-aa43-3684991e3f21,20e75dd5-222a-4100-aa43-3684991e3f21,1,0,3c611832-4bc2-4229-a27d-d5dc82f3a498,3c611832-4bc2-4229-a27d-d5dc82f3a498,1,0,50e9eb52-02e3-44ff-9c9e-e76dbe38da63,50e9eb52-02e3-44ff-9c9e-e76dbe38da63,1,0,5dadc422-1fbd-4918-9db3-09ec72c3404e,5dadc422-1fbd-4918-9db3-09ec72c3404e,1,0,ffdaf8a0-7a8f-4756-bdfc-a0c6ae6c3869,ffdaf8a0-7a8f-4756-bdfc-a0c6ae6c3869,1,0,ab1bcabf-ffb0-4914-8ad0-b94b5aaeab1d,ab1bcabf-ffb0-4914-8ad0-b94b5aaeab1d,1,0,c5478d09-c8d3-4cc6-878e-27656ecc8409,c5478d09-c8d3-4cc6-878e-27656ecc8409,1,0,01b97d2f-40b9-4f12-8bc5-ab75fd160b7c,01b97d2f-40b9-4f12-8bc5-ab75fd160b7c,1,0,75974146-5b1a-412c-b7d5-1575704bbdab,75974146-5b1a-412c-b7d5-1575704bbdab,1,0,949f87cb-258c-4b6b-95ee-8a7491a4b64e,949f87cb-258c-4b6b-95ee-8a7491a4b64e,1,0,8a348012-99dc-4dc9-8bec-0df3caf4cdc5,8a348012-99dc-4dc9-8bec-0df3caf4cdc5,1,0,5c089988-5381-41ed-9f05-f85db46b8d94,5c089988-5381-41ed-9f05-f85db46b8d94,1,0,85a36352-1569-4ce4-aeba-477db524c36d,85a36352-1569-4ce4-aeba-477db524c36d,1,0,ebfb6f80-88f5-4046-8ae7-e11a7b0c1beb,ebfb6f80-88f5-4046-8ae7-e11a7b0c1beb,1,0,d99991b8-3a81-4e18-b0ad-05fc3e3a199b,d99991b8-3a81-4e18-b0ad-05fc3e3a199b,1,0,dd383422-dddb-4a81-9326-015fd345b5c1,dd383422-dddb-4a81-9326-015fd345b5c1,1,0,b2e656c1-f4ff-4d95-b066-4ee11ce4dea8,b2e656c1-f4ff-4d95-b066-4ee11ce4dea8,1,0,2d86d1fc-5367-47b8-804e-7f9c5fc8f3b1,2d86d1fc-5367-47b8-804e-7f9c5fc8f3b1,1,0,782cb93d-36e6-4923-b2b6-75caa3459cd6,782cb93d-36e6-4923-b2b6-75caa3459cd6,1,0,0eea37cc-47f8-4819-85da-d4991f4e58ed,0eea37cc-47f8-4819-85da-d4991f4e58ed,1,0,0f314b6b-5ed1-46ed-bdfd-cf53330c2783,0f314b6b-5ed1-46ed-bdfd-cf53330c2783,1,0,b51eaf45-baa1-4d1c-bcb7-a89bb8bcc26a,b51eaf45-baa1-4d1c-bcb7-a89bb8bcc26a,1,0,5ea29362-0ab7-4ca3-865e-bf93db5ca24b,5ea29362-0ab7-4ca3-865e-bf93db5ca24b,1,0,64ff6058-c6f3-4682-b9a1-11ec438fa447,64ff6058-c6f3-4682-b9a1-11ec438fa447,1,0,ced01234-9417-49ce-adf0-8cdd15e6dd7d,ced01234-9417-49ce-adf0-8cdd15e6dd7d,1,0,c1272bfc-196a-4f99-935f-e2516bc138d2,c1272bfc-196a-4f99-935f-e2516bc138d2,1,0,313e0688-745a-4385-b040-7ef8317a0eb7,313e0688-745a-4385-b040-7ef8317a0eb7,1,0,7fe61c5d-30bc-440d-9e40-12ff3b296616,7fe61c5d-30bc-440d-9e40-12ff3b296616,1,0,37c37f15-f84b-456b-aab6-729562dc0908,37c37f15-f84b-456b-aab6-729562dc0908,1,0,45a2569e-820c-4d7d-ba74-4a781d26bb2b,45a2569e-820c-4d7d-ba74-4a781d26bb2b,1,0,996c7873-1cc9-44f6-915b-5c6ed7ef2370,996c7873-1cc9-44f6-915b-5c6ed7ef2370,1,0,8dc08932-0988-4e82-8a5f-385c0694f9ff,8dc08932-0988-4e82-8a5f-385c0694f9ff,1,0,13dee5d8-f165-48de-9ccb-3ef0239f4b27,13dee5d8-f165-48de-9ccb-3ef0239f4b27,1,0,2767473e-79fb-4c7c-a7d1-a83a8f2df71d,2767473e-79fb-4c7c-a7d1-a83a8f2df71d,1,0,9395eb9d-6aff-4af5-a6f1-5c39014ba67b,9395eb9d-6aff-4af5-a6f1-5c39014ba67b,1,0,8a13c899-1659-48cf-9aa2-07ca99547b7b,8a13c899-1659-48cf-9aa2-07ca99547b7b,1,0,eb3f959c-94a4-4e77-b9f9-e81954254079,eb3f959c-94a4-4e77-b9f9-e81954254079,1,0,71dfde27-3762-4dd0-9252-6e703ce1b101,71dfde27-3762-4dd0-9252-6e703ce1b101,1,0,f5ef3f75-7d12-4284-844f-54d19d1f7e2f,f5ef3f75-7d12-4284-844f-54d19d1f7e2f,1,0,7974e41d-5af3-4636-b405-c9405d89fb53,7974e41d-5af3-4636-b405-c9405d89fb53,1,0,21fad9b6-44df-417c-ba18-de4b8af98a34,21fad9b6-44df-417c-ba18-de4b8af98a34,1,0,11c086b0-c646-4701-983d-c38758286354,11c086b0-c646-4701-983d-c38758286354,1,0,36d6b0e1-5e10-408a-8eb1-09839e57690f,36d6b0e1-5e10-408a-8eb1-09839e57690f,1,0,6423b849-7ca4-4501-8856-445157d7e5df,6423b849-7ca4-4501-8856-445157d7e5df,1,0,0819e2b0-1eb0-41b3-ab89-0974bd926fb6,0819e2b0-1eb0-41b3-ab89-0974bd926fb6,1,0,e814287f-1c13-4f74-9507-d22a62394fd2,e814287f-1c13-4f74-9507-d22a62394fd2,1,0,417ac987-7369-45af-b670-fdffb048f33d,417ac987-7369-45af-b670-fdffb048f33d,1,0,640a5d72-dbc7-421b-afdb-cc3a4622ae04,640a5d72-dbc7-421b-afdb-cc3a4622ae04,1,0,79da84c1-5ac2-4472-8eb9-f0484b9582c2,79da84c1-5ac2-4472-8eb9-f0484b9582c2,1,0,2d0b161b-7d69-4ec4-a483-79bd458cb62c,2d0b161b-7d69-4ec4-a483-79bd458cb62c,1,0,f178bc1b-ebea-4fa9-8861-fe0d91f103e4,f178bc1b-ebea-4fa9-8861-fe0d91f103e4,1,0,e33a9c94-7e98-4b38-ba20-4546a90b2937,e33a9c94-7e98-4b38-ba20-4546a90b2937,1,0,1610e73c-58df-41cc-8349-51b920806821,1610e73c-58df-41cc-8349-51b920806821,1,0,ae37f465-1ee5-4f06-a834-deea9e9e0eb3,ae37f465-1ee5-4f06-a834-deea9e9e0eb3,1,0,c6ccf82f-f130-4037-9e89-1e0365b996a4,c6ccf82f-f130-4037-9e89-1e0365b996a4,1,0,c532963e-0d92-44b9-9cfc-43ed2744ccf9,c532963e-0d92-44b9-9cfc-43ed2744ccf9,1,0,6aff2855-24d4-4f90-b617-53326efdd1bd,6aff2855-24d4-4f90-b617-53326efdd1bd,1,0,0107a9c7-4c85-49c4-918a-925d85d57a0b,0107a9c7-4c85-49c4-918a-925d85d57a0b,1,0,6e1efa55-969b-4c2b-8af2-b11d672db5f0,6e1efa55-969b-4c2b-8af2-b11d672db5f0,1,0,e5b578a1-e33b-4d49-8064-427aa928a844,e5b578a1-e33b-4d49-8064-427aa928a844,1,0,f74e97ad-fef6-4122-a056-86f2d59dfdaf,f74e97ad-fef6-4122-a056-86f2d59dfdaf,1,0,df1ef691-1e86-4a80-8671-53b3d4504bfb,df1ef691-1e86-4a80-8671-53b3d4504bfb,1,0,474b9918-23da-4289-91a9-9115526c9b5d,474b9918-23da-4289-91a9-9115526c9b5d,1,0,1cf7be60-fd84-430d-b1b5-5619c51b8b3f,1cf7be60-fd84-430d-b1b5-5619c51b8b3f,1,0,60aa9d44-5986-490e-8093-f65e194b3607,60aa9d44-5986-490e-8093-f65e194b3607,1,0,a36dee5e-7184-4caf-bf46-3977b165093b,a36dee5e-7184-4caf-bf46-3977b165093b,1,0,aa3c61a7-c905-4b5a-a44d-e2ac5d79158a,aa3c61a7-c905-4b5a-a44d-e2ac5d79158a,1,0,182916b2-972b-4e39-93ba-d45aa7a195f5,182916b2-972b-4e39-93ba-d45aa7a195f5,1,0,2b654a53-7ce8-421f-aaf5-aa1451d91415,2b654a53-7ce8-421f-aaf5-aa1451d91415,1,0,30e55306-ea5c-4ef4-9903-ea030afa3d85,30e55306-ea5c-4ef4-9903-ea030afa3d85,1,0,234c1a72-8349-472a-8373-2a25ce6252f2,234c1a72-8349-472a-8373-2a25ce6252f2,1,0,b1ccb9f7-11ff-4ad2-8806-d64de84662f0,b1ccb9f7-11ff-4ad2-8806-d64de84662f0,1,0,539e0db9-be24-4086-9632-af20553ee50f,539e0db9-be24-4086-9632-af20553ee50f,1,0,b9adeb51-a009-4e83-85f8-bfa1547429d6,b9adeb51-a009-4e83-85f8-bfa1547429d6,1,0,ac9f4c2e-316b-4f96-8fe6-fb5a5a7e48ed,ac9f4c2e-316b-4f96-8fe6-fb5a5a7e48ed,1,0,da808c0e-b1b0-4d46-8c63-2bbe7d0dca9d,da808c0e-b1b0-4d46-8c63-2bbe7d0dca9d,1,0,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,bbfd9834-12b4-49ca-bdae-5c94efa80482,bbfd9834-12b4-49ca-bdae-5c94efa80482,1,0,9292034c-24e8-49a7-9b77-7974e117847d,9292034c-24e8-49a7-9b77-7974e117847d,1,0,3327b7d4-62fc-44cc-83b4-c449bfa4e706,3327b7d4-62fc-44cc-83b4-c449bfa4e706,1,0,43ecee25-68eb-48cf-bbaa-aee71052438f,43ecee25-68eb-48cf-bbaa-aee71052438f,1,0,93799f8b-0188-4546-8815-35e733bcc2b1,93799f8b-0188-4546-8815-35e733bcc2b1,1,0,9dc3a563-11bb-40a7-8431-c1d4367ccbaf,9dc3a563-11bb-40a7-8431-c1d4367ccbaf,1,0,c9ea4e72-5f01-42ae-88e3-52e49757b26f,c9ea4e72-5f01-42ae-88e3-52e49757b26f,1,0,38d92d75-c8b8-42d6-9e0a-6dc0811a8652,38d92d75-c8b8-42d6-9e0a-6dc0811a8652,1,0,0f564dbe-6a6e-48df-9718-5cea5d608ee6,0f564dbe-6a6e-48df-9718-5cea5d608ee6,1,0,a623fef1-96eb-41ba-93fe-09162698f419,a623fef1-96eb-41ba-93fe-09162698f419,1,0,45a8d7cb-c927-4a4e-a653-13fd9b1eda10,45a8d7cb-c927-4a4e-a653-13fd9b1eda10,1,0,d8e1f92f-9efa-422d-bb21-43bd1a363cec,d8e1f92f-9efa-422d-bb21-43bd1a363cec,1,0,c1416383-bd7e-4dc4-ad88-d98ac87157fd,c1416383-bd7e-4dc4-ad88-d98ac87157fd,1,0,5e8bddc7-7836-4ec8-b6e1-0c15d228f47e,5e8bddc7-7836-4ec8-b6e1-0c15d228f47e,1,0,d5d9976a-4cc0-43f7-afd6-d43cebb07940,d5d9976a-4cc0-43f7-afd6-d43cebb07940,1,0,899f1526-d6bc-42ef-852e-7297a06db9e3,899f1526-d6bc-42ef-852e-7297a06db9e3,1,0,1b4feda1-e555-4b85-b236-b21153a7246f,1b4feda1-e555-4b85-b236-b21153a7246f,1,0,61d3cef4-2c42-417d-a762-a2d2f5a28924,61d3cef4-2c42-417d-a762-a2d2f5a28924,1,0,c694c132-1ddb-4273-818a-d3cca88c082a,c694c132-1ddb-4273-818a-d3cca88c082a,1,0,cd4da06e-c06b-4233-befc-1bc4c4db58e3,cd4da06e-c06b-4233-befc-1bc4c4db58e3,1,0,918a01fe-f753-4a4a-9200-55bbd6edaf5f,918a01fe-f753-4a4a-9200-55bbd6edaf5f,1,0,51a8a209-2a9d-419f-9fda-f7aeac68bdbe,51a8a209-2a9d-419f-9fda-f7aeac68bdbe,1,0,ef43961f-8cac-4f3f-bcee-c6bc51c4148c,ef43961f-8cac-4f3f-bcee-c6bc51c4148c,1,0,7ab6acda-6732-4582-8092-d43f9a98a28d,7ab6acda-6732-4582-8092-d43f9a98a28d,1,0,5ab1d405-bfc3-4440-8cdd-3a63013b064d,5ab1d405-bfc3-4440-8cdd-3a63013b064d,1,0,d6704410-6297-481e-a6cb-6d6aa566b4f8,d6704410-6297-481e-a6cb-6d6aa566b4f8,1,0,398937ca-b035-43bd-b0da-8c5153a87cb8,398937ca-b035-43bd-b0da-8c5153a87cb8,1,0,5b441321-bd1e-4c56-8f09-365b05985eed,5b441321-bd1e-4c56-8f09-365b05985eed,1,0,6bcba052-4d81-409d-b1a2-eed6be6fb024,6bcba052-4d81-409d-b1a2-eed6be6fb024,1,0,559f1e66-e8da-437a-aa27-d0e1be6619b6,559f1e66-e8da-437a-aa27-d0e1be6619b6,1,0,704d69cd-d921-4957-a004-43bd7eb4d979,704d69cd-d921-4957-a004-43bd7eb4d979,1,0,f1594682-16ac-408c-8307-a7a8db79b09f,f1594682-16ac-408c-8307-a7a8db79b09f,1,0,863aebd2-ce32-4f1f-bb3d-d6062ab187fd,863aebd2-ce32-4f1f-bb3d-d6062ab187fd,1,0,4cb814d8-cb1b-4366-b500-e820ad526b0c,4cb814d8-cb1b-4366-b500-e820ad526b0c,1,0,7da5f3b4-6330-4112-9d3a-7bb42996aa4a,7da5f3b4-6330-4112-9d3a-7bb42996aa4a,1,0,6c43df9f-ca36-415b-afec-302807820d73,6c43df9f-ca36-415b-afec-302807820d73,1,0,c7fb7551-806a-40b2-8879-14cd897b60d8,c7fb7551-806a-40b2-8879-14cd897b60d8,1,0,68337023-d573-4d04-95b6-44f73258c2a4,68337023-d573-4d04-95b6-44f73258c2a4,1,0,7cf39337-b722-486f-8e37-a62239d0ccd2,7cf39337-b722-486f-8e37-a62239d0ccd2,1,0,2571cfaf-d876-4385-a60a-1488aacf7080,2571cfaf-d876-4385-a60a-1488aacf7080,1,0,4ea1dd0a-6eab-48e4-a6a7-314d0e211d6c,4ea1dd0a-6eab-48e4-a6a7-314d0e211d6c,1,0,44398566-3189-4584-8f8a-9deb1d07ce41,44398566-3189-4584-8f8a-9deb1d07ce41,1,0,6f4e3082-9c8c-4289-8cc2-704c8d2763ce,6f4e3082-9c8c-4289-8cc2-704c8d2763ce,1,0,accfa63a-479d-4996-95bc-cdf5acdf203c,accfa63a-479d-4996-95bc-cdf5acdf203c,1,0,351998e0-8939-4dd4-a833-f4756bcc53b8,351998e0-8939-4dd4-a833-f4756bcc53b8,1,0,093332f5-3eb4-478c-ac95-59dcdc96765a,093332f5-3eb4-478c-ac95-59dcdc96765a,1,0,cd69bad8-524e-4be4-88cc-7732a88b38b8,cd69bad8-524e-4be4-88cc-7732a88b38b8,1,0,0a32248c-6994-4988-90d1-30882bc9da6b,0a32248c-6994-4988-90d1-30882bc9da6b,1,0,b57b53cb-6972-4bda-ae46-96571be1ebec,b57b53cb-6972-4bda-ae46-96571be1ebec,1,0,1a1a9636-fb72-4e4a-af96-5858442b1e61,1a1a9636-fb72-4e4a-af96-5858442b1e61,1,0,bca9cf34-9e11-4014-976a-28c4330b136e,bca9cf34-9e11-4014-976a-28c4330b136e,1,0,65fffe1a-6f36-4f50-975f-4471ad29d3ec,65fffe1a-6f36-4f50-975f-4471ad29d3ec,1,0,8fe5dad5-686a-4631-ae05-2917c33f7d83,8fe5dad5-686a-4631-ae05-2917c33f7d83,1,0,edef86c6-73bf-4e47-b62d-b2b548a732cd,edef86c6-73bf-4e47-b62d-b2b548a732cd,1,0,a1715044-d76f-4238-ba3e-989d04078d83,a1715044-d76f-4238-ba3e-989d04078d83,1,0,e72e59c0-391d-497e-9407-063e0edf573e,e72e59c0-391d-497e-9407-063e0edf573e,1,0,ae8a1e69-ee1c-4efa-8d63-0279b18617f6,ae8a1e69-ee1c-4efa-8d63-0279b18617f6,1,0,a7ec91a5-2ed4-4ecd-b794-fcd3bb5ea4a2,a7ec91a5-2ed4-4ecd-b794-fcd3bb5ea4a2,1,0,299c47a7-0b30-4f62-8f5c-f087ad6411fb,299c47a7-0b30-4f62-8f5c-f087ad6411fb,1,0,4d4724df-24fb-4c59-9d04-3f984906214a,4d4724df-24fb-4c59-9d04-3f984906214a,1,0,95b10bc8-39ef-43f5-b74e-f36cfa9bc806,95b10bc8-39ef-43f5-b74e-f36cfa9bc806,1,0,cb9b73ee-8531-48d9-9266-9aaa4336a612,cb9b73ee-8531-48d9-9266-9aaa4336a612,1,0,b7b80237-d642-4c21-a9ee-64fc4ed20d2f,b7b80237-d642-4c21-a9ee-64fc4ed20d2f,1,0,aeee2eea-1bb9-4e8a-ac5c-c940eaa86511,aeee2eea-1bb9-4e8a-ac5c-c940eaa86511,1,0,d042687f-0725-4611-a868-f5b4f6a3a3a8,d042687f-0725-4611-a868-f5b4f6a3a3a8,1,0,bb143340-7fff-49ef-b121-355c96613f78,bb143340-7fff-49ef-b121-355c96613f78,1,0,cd5fbbcb-19b8-4c0b-93c7-ebdf642826db,cd5fbbcb-19b8-4c0b-93c7-ebdf642826db,1,0,f2f69644-80dc-4b5e-a208-ed1de131e25e,f2f69644-80dc-4b5e-a208-ed1de131e25e,1,0,73060f72-6d08-47da-aac8-d4d2ed8f871c,73060f72-6d08-47da-aac8-d4d2ed8f871c,1,0,f3a6219e-bff5-4d36-9baa-bb214cebc2ed,f3a6219e-bff5-4d36-9baa-bb214cebc2ed,1,0,82e8ac21-c2aa-47de-89ae-ea6cc10cc862,82e8ac21-c2aa-47de-89ae-ea6cc10cc862,1,0,13b27ec3-2be9-4959-92e5-94ba7bb64f03,13b27ec3-2be9-4959-92e5-94ba7bb64f03,1,0,9f832f4b-ae60-4d81-9ffd-6e00f7e02560,9f832f4b-ae60-4d81-9ffd-6e00f7e02560,1,0,6f6ef6ac-5bb7-41e4-b6d5-0f068e8cb176,6f6ef6ac-5bb7-41e4-b6d5-0f068e8cb176,1,0,821225ea-1bad-49a6-a422-80d8a09baf13,821225ea-1bad-49a6-a422-80d8a09baf13,1,0,d0106f3a-8490-4277-a278-75c318ec252c,d0106f3a-8490-4277-a278-75c318ec252c,1,0,5035aa55-d557-419a-89e2-10ed0f8d109b,5035aa55-d557-419a-89e2-10ed0f8d109b,1,0,5f93d2af-64ff-41cc-8403-4a0e83160fea,5f93d2af-64ff-41cc-8403-4a0e83160fea,1,0,c12c90e4-7c40-489b-b14b-6b9442016e0f,c12c90e4-7c40-489b-b14b-6b9442016e0f,1,0,6371e288-3502-4d66-9006-b5a36107c0b7,6371e288-3502-4d66-9006-b5a36107c0b7,1,0,245814f7-028c-4c13-98eb-15412e851f81,245814f7-028c-4c13-98eb-15412e851f81,1,0,0132e564-2cd3-4930-8962-1068532f4be4,0132e564-2cd3-4930-8962-1068532f4be4,1,0,57d0f9b0-18d0-48ba-9f3c-d106f66ac602,57d0f9b0-18d0-48ba-9f3c-d106f66ac602,1,0,3a7cfd4c-c943-43c2-a8d5-6d8ab3a10fc9,3a7cfd4c-c943-43c2-a8d5-6d8ab3a10fc9,1,0,36b8b08f-0da3-4dbd-9aa8-73220ca9101d,36b8b08f-0da3-4dbd-9aa8-73220ca9101d,1,0,7021fca5-d612-43e1-927b-7f822153cf75,7021fca5-d612-43e1-927b-7f822153cf75,1,0,9fd16d51-91bb-4973-a7c4-cf4db87da8bf,9fd16d51-91bb-4973-a7c4-cf4db87da8bf,1,0,ee0a8d23-660a-492b-a813-b57394acee05,ee0a8d23-660a-492b-a813-b57394acee05,1,0,d1eda8f4-ffdd-445a-882c-6124d9f7fcf2,d1eda8f4-ffdd-445a-882c-6124d9f7fcf2,1,0,ade21e2e-349f-414b-8f35-6ae3b6a4064d,ade21e2e-349f-414b-8f35-6ae3b6a4064d,1,0,cce823c6-3bd5-4e46-91f6-8715cb72b1d5,cce823c6-3bd5-4e46-91f6-8715cb72b1d5,1,0,f3a8dd22-4469-4a3b-a7dd-78a5624b7bf0,f3a8dd22-4469-4a3b-a7dd-78a5624b7bf0,1,0,83f51efe-e2af-459a-b59f-2c036124ac23,83f51efe-e2af-459a-b59f-2c036124ac23,1,0,6ed466d7-e016-4d9c-9c0e-8deed48cbd70,6ed466d7-e016-4d9c-9c0e-8deed48cbd70,1,0,b03829e9-ba22-4584-85f0-c36d63f48242,b03829e9-ba22-4584-85f0-c36d63f48242,1,0,084a7c95-a59b-4861-b8b3-b5710a57ac60,084a7c95-a59b-4861-b8b3-b5710a57ac60,1,0,efcea6da-6746-4e00-913a-14cab38b5d84,efcea6da-6746-4e00-913a-14cab38b5d84,1,0,aff367fb-7fca-44d0-adf9-3731f14834f6,aff367fb-7fca-44d0-adf9-3731f14834f6,1,0,a2782760-dd4c-44d2-a785-814d6f610455,a2782760-dd4c-44d2-a785-814d6f610455,1,0,245162d8-6ae1-47e5-a0c9-0d5f2e5d8ea8,245162d8-6ae1-47e5-a0c9-0d5f2e5d8ea8,1,0,6581ac1f-11ef-42b8-9f3b-590bb7546e63,6581ac1f-11ef-42b8-9f3b-590bb7546e63,1,0,ce952e88-35b7-4506-81ac-d7081e50a650,ce952e88-35b7-4506-81ac-d7081e50a650,1,0,5d7a53fa-1a89-4e6e-868c-4077bd84c0ce,5d7a53fa-1a89-4e6e-868c-4077bd84c0ce,1,0,3bf1281f-7570-4633-86b9-3e953a7e6647,3bf1281f-7570-4633-86b9-3e953a7e6647,1,0,715dc289-5b14-4ee0-8716-9c15958b9069,715dc289-5b14-4ee0-8716-9c15958b9069,1,0,92707138-5004-4378-8477-f909166d319d,92707138-5004-4378-8477-f909166d319d,1,0,43661775-43bb-4d9e-bfbb-c46e7d194ca3,43661775-43bb-4d9e-bfbb-c46e7d194ca3,1,0,532637ef-be0d-4f42-9747-a88e17eb3def,532637ef-be0d-4f42-9747-a88e17eb3def,1,0,61127152-3e24-40b4-8a23-5eb6cae568ff,61127152-3e24-40b4-8a23-5eb6cae568ff,1,0,ffd987e3-e8af-4d46-881e-1e312e74dbac,ffd987e3-e8af-4d46-881e-1e312e74dbac,1,0,ad1142ed-183d-47a3-800c-997a3770e11e,ad1142ed-183d-47a3-800c-997a3770e11e,1,0,ebef37c6-4808-4683-93be-036ce19cafd5,ebef37c6-4808-4683-93be-036ce19cafd5,1,0,66364cd4-aaa5-421d-96d6-3c283c14650d,66364cd4-aaa5-421d-96d6-3c283c14650d,1,0,fdbbbf8b-dacf-436e-8d8b-1e2b8e854b17,fdbbbf8b-dacf-436e-8d8b-1e2b8e854b17,1,0,3c54d440-e908-43d6-a5cc-bb64620c82d7,3c54d440-e908-43d6-a5cc-bb64620c82d7,1,0,23a240a2-52ee-46ab-89d9-50dcee2cc8d2,23a240a2-52ee-46ab-89d9-50dcee2cc8d2,1,0,bf1dd911-8ee1-407b-acae-10c85b74baf3,bf1dd911-8ee1-407b-acae-10c85b74baf3,1,0,e924058f-25c3-4744-a565-836b824991b7,e924058f-25c3-4744-a565-836b824991b7,1,0,bc6a47a1-a3f3-4d7e-9dad-099bd3dba751,bc6a47a1-a3f3-4d7e-9dad-099bd3dba751,1,0,518dcd70-4ccf-4866-a94f-7ceec7dd2801,518dcd70-4ccf-4866-a94f-7ceec7dd2801,1,0,f9950ab5-1077-4033-bbbf-53899a1bcf33,f9950ab5-1077-4033-bbbf-53899a1bcf33,1,0,8f16763b-86f0-4ad0-b786-cce7dcb3460e,8f16763b-86f0-4ad0-b786-cce7dcb3460e,1,0,0481bc65-6a32-46b9-ae87-993ba52a29a5,0481bc65-6a32-46b9-ae87-993ba52a29a5,1,0,36ebebbb-dff1-4dbd-870b-58bd4a71fa1f,36ebebbb-dff1-4dbd-870b-58bd4a71fa1f,1,0,dbc5f419-63b0-4cbe-90ff-c0101105e46c,dbc5f419-63b0-4cbe-90ff-c0101105e46c,1,0,c708f6e9-b7a0-4046-90f3-83527da7b872,c708f6e9-b7a0-4046-90f3-83527da7b872,1,0,0006b44a-3a0c-4be4-8dd0-bd0db9ddcc4d,0006b44a-3a0c-4be4-8dd0-bd0db9ddcc4d,1,0,14256e0a-a947-42a3-8e36-47bfbb052a0c,14256e0a-a947-42a3-8e36-47bfbb052a0c,1,0,1b1aa77a-d14b-4751-a7da-0b5bac4db461,1b1aa77a-d14b-4751-a7da-0b5bac4db461,1,0,c0dcdb22-6719-4597-a781-bca1370909e5,c0dcdb22-6719-4597-a781-bca1370909e5,1,0,7ebf99c3-33d2-4e4c-ac45-ca4ed0c3c100,7ebf99c3-33d2-4e4c-ac45-ca4ed0c3c100,1,0,7a34f723-cd14-4949-a40f-7ce579bf0449,7a34f723-cd14-4949-a40f-7ce579bf0449,1,0,5cdc9ac7-bba9-4ed1-845a-607976fc4679,5cdc9ac7-bba9-4ed1-845a-607976fc4679,1,0,295f3692-0721-4c41-a69b-171ef20a5018,295f3692-0721-4c41-a69b-171ef20a5018,1,0,86c22871-6d1c-44e0-8ade-ce4bdeb23321,86c22871-6d1c-44e0-8ade-ce4bdeb23321,1,0,da51de81-4d4f-46b5-a308-7b50db6c45a7,da51de81-4d4f-46b5-a308-7b50db6c45a7,1,0,8d31ce6a-4d44-46c6-a11c-47fb33e88691,8d31ce6a-4d44-46c6-a11c-47fb33e88691,1,0,c2a8c2d3-ff13-4a13-acd4-797118c4e767,c2a8c2d3-ff13-4a13-acd4-797118c4e767,1,0,bc6adf75-8666-49f3-9703-b0014dfee123,bc6adf75-8666-49f3-9703-b0014dfee123,1,0,30632f54-b779-4857-a5cc-c53fe8887ee5,30632f54-b779-4857-a5cc-c53fe8887ee5,1,0,087480bb-8c89-4b00-a29b-b7e29926478d,087480bb-8c89-4b00-a29b-b7e29926478d,1,0,685373b7-638a-439a-8cba-703d56e4e404,685373b7-638a-439a-8cba-703d56e4e404,1,0,eafaec9c-030b-4e5f-8fa8-e17dad2feec9,eafaec9c-030b-4e5f-8fa8-e17dad2feec9,1,0,df22b227-b2c3-4e65-9706-7582f99fe59c,df22b227-b2c3-4e65-9706-7582f99fe59c,1,0,35828c88-f1ec-42e7-b189-78748931ee4a,35828c88-f1ec-42e7-b189-78748931ee4a,1,0,8a41b8f1-93fc-44e6-bf45-0d1fa9d24f4a,8a41b8f1-93fc-44e6-bf45-0d1fa9d24f4a,1,0,1cfba08f-d5e5-4833-b494-a25d0477e9c3,1cfba08f-d5e5-4833-b494-a25d0477e9c3,1,0,ae22743b-6d21-4fbb-bb4c-fee53e2b87cb,ae22743b-6d21-4fbb-bb4c-fee53e2b87cb,1,0,921a0a14-8c06-4894-95ce-423000769364,921a0a14-8c06-4894-95ce-423000769364,1,0,3805ee39-a48a-499a-9ef8-9c2a5985404f,3805ee39-a48a-499a-9ef8-9c2a5985404f,1,0,07ccfe87-e1ab-4da7-92cb-a612e0972b0b,07ccfe87-e1ab-4da7-92cb-a612e0972b0b,1,0,08c2f92c-eb05-49e7-bfc9-4a89607b9864,08c2f92c-eb05-49e7-bfc9-4a89607b9864,1,0,6d751379-89a7-49b5-93e5-578329c63d9c,6d751379-89a7-49b5-93e5-578329c63d9c,1,0,c3f156ef-947e-4ebb-883f-4f099a116063,c3f156ef-947e-4ebb-883f-4f099a116063,1,0,5e3ab0a3-c0a6-4f41-85d3-2eede4abb555,5e3ab0a3-c0a6-4f41-85d3-2eede4abb555,1,0,a065ffc3-f50b-4a78-9b84-bfc4e5515a4b,a065ffc3-f50b-4a78-9b84-bfc4e5515a4b,1,0,4cba5a06-1484-4dd1-8e35-2d702c7d96d0,4cba5a06-1484-4dd1-8e35-2d702c7d96d0,1,0,e98e9e56-2995-430c-bd3b-f1070aec15a5,e98e9e56-2995-430c-bd3b-f1070aec15a5,1,0,d35c51b0-4cb7-4f9c-8aac-6a25a1b49adf,d35c51b0-4cb7-4f9c-8aac-6a25a1b49adf,1,0,8a7546f4-bfc9-4732-bf60-43a41e2c8753,8a7546f4-bfc9-4732-bf60-43a41e2c8753,1,0,16244165-d5a4-4012-8bb5-7f5fee1111af,16244165-d5a4-4012-8bb5-7f5fee1111af,1,0,290b72ad-004f-46ab-be5e-47557543b965,290b72ad-004f-46ab-be5e-47557543b965,1,0,e1b2ccf9-5a8f-4008-86f3-d2c7cf5581d1,e1b2ccf9-5a8f-4008-86f3-d2c7cf5581d1,1,0,fa0e0792-bffb-47ce-866f-9e8dbdab17a4,fa0e0792-bffb-47ce-866f-9e8dbdab17a4,1,0,263bcd20-9878-48d4-aac4-b371ec49d8d6,263bcd20-9878-48d4-aac4-b371ec49d8d6,1,0,da1d8660-2757-4cea-bae0-c2210b9406ae,da1d8660-2757-4cea-bae0-c2210b9406ae,1,0,d60329c6-8f48-481d-82e7-18da355cb09c,d60329c6-8f48-481d-82e7-18da355cb09c,1,0,67a04d72-afea-487a-b629-e4b7dfc1df32,67a04d72-afea-487a-b629-e4b7dfc1df32,1,0,c4b14162-b25b-4099-9ec3-7251848ef08a,c4b14162-b25b-4099-9ec3-7251848ef08a,1,0,8eb5ba97-eb38-4357-8bfc-e9618280800d,8eb5ba97-eb38-4357-8bfc-e9618280800d,1,0,b72f73d5-e274-472b-871b-16af72dab603,b72f73d5-e274-472b-871b-16af72dab603,1,0,b008d184-0b61-460d-9490-89ecc1cd58ba,b008d184-0b61-460d-9490-89ecc1cd58ba,1,0,c8340e2f-6958-4bcd-8e17-499c4adfe60b,c8340e2f-6958-4bcd-8e17-499c4adfe60b,1,0,c72831cd-d064-4fe8-9603-64e6d7b8ac4d,c72831cd-d064-4fe8-9603-64e6d7b8ac4d,1,0,03f68d82-752c-45d1-bf9a-60ecd21a2c81,03f68d82-752c-45d1-bf9a-60ecd21a2c81,1,0,307e8938-e347-4eff-b2fb-fd0b8f4aa27f,307e8938-e347-4eff-b2fb-fd0b8f4aa27f,1,0,d4fffc79-2841-49a9-a382-e9e4138984df,d4fffc79-2841-49a9-a382-e9e4138984df,1,0,84e4c572-5b32-46e0-82a0-0c76d4ef5d73,84e4c572-5b32-46e0-82a0-0c76d4ef5d73,1,0,9f41f903-d316-4189-8dc0-603ea9036c1c,9f41f903-d316-4189-8dc0-603ea9036c1c,1,0,e19e70d6-8707-4dde-ae69-7bd97035ca03,e19e70d6-8707-4dde-ae69-7bd97035ca03,1,0,425b5272-1130-457d-8a05-aee8fad681d9,425b5272-1130-457d-8a05-aee8fad681d9,1,0,8d583436-f2a6-4a33-8137-1376f5754643,8d583436-f2a6-4a33-8137-1376f5754643,1,0,4a864e74-41ce-4673-a080-bc3c2ba1b8ee,4a864e74-41ce-4673-a080-bc3c2ba1b8ee,1,0,d279958e-6dd4-4bb0-a65f-c8768b4c4d96,d279958e-6dd4-4bb0-a65f-c8768b4c4d96,1,0,8f09cbed-6f24-461f-9b35-31c64310e74a,8f09cbed-6f24-461f-9b35-31c64310e74a,1,0,2d66502d-77ab-4cc9-9ccf-5433458fae9f,2d66502d-77ab-4cc9-9ccf-5433458fae9f,1,0,cff48da7-3c46-4602-83e8-90c9ea53e107,cff48da7-3c46-4602-83e8-90c9ea53e107,1,0,7155472d-c791-402c-96e1-d25612024c88,7155472d-c791-402c-96e1-d25612024c88,1,0,fb90c261-24a7-4cef-8a2c-85c0e4fdd64a,fb90c261-24a7-4cef-8a2c-85c0e4fdd64a,1,0,9005911d-ea81-48b6-bf50-1a328ff4d7be,9005911d-ea81-48b6-bf50-1a328ff4d7be,1,0,7df12006-c0c0-42a6-b852-bdced72c62e3,7df12006-c0c0-42a6-b852-bdced72c62e3,1,0,9c00987d-3c55-40eb-bae8-f36e71e4ef87,9c00987d-3c55-40eb-bae8-f36e71e4ef87,1,0,29273130-5142-48c9-8399-00e5ab4b6203,29273130-5142-48c9-8399-00e5ab4b6203,1,0,9e14cd7e-1293-4008-baf8-88df6a98abf7,9e14cd7e-1293-4008-baf8-88df6a98abf7,1,0,211d226f-dac6-43d5-8720-952da4339e35,211d226f-dac6-43d5-8720-952da4339e35,1,0,df67cdcd-20ff-46d4-902b-dc4d81ee46bd,df67cdcd-20ff-46d4-902b-dc4d81ee46bd,1,0,98e3aace-52a6-4911-8205-92165adca6de,98e3aace-52a6-4911-8205-92165adca6de,1,0,91f4dbf9-d539-4239-a95d-c1d9e14e50f8,91f4dbf9-d539-4239-a95d-c1d9e14e50f8,1,0,577e5fea-b792-4c8b-b3b3-a03a14b64b04,577e5fea-b792-4c8b-b3b3-a03a14b64b04,1,0,ba5ec2d6-1791-42b5-8e6f-04d1d18e9469,ba5ec2d6-1791-42b5-8e6f-04d1d18e9469,1,0,b18d312b-f9c3-4f37-ac77-d499e949f154,b18d312b-f9c3-4f37-ac77-d499e949f154,1,0,ace2beea-d393-412f-8b71-b845b665e2c4,ace2beea-d393-412f-8b71-b845b665e2c4,1,0,463b8966-a5f9-4a80-82b9-1608a1622e13,463b8966-a5f9-4a80-82b9-1608a1622e13,1,0,3fd4bc77-2a1b-4750-a54a-4171c8d40027,3fd4bc77-2a1b-4750-a54a-4171c8d40027,1,0,5b27fde9-fa80-48b1-aea1-73e132b9a944,5b27fde9-fa80-48b1-aea1-73e132b9a944,1,0,00bf04d6-6a8e-4b13-94cf-36c1c6090cd8,00bf04d6-6a8e-4b13-94cf-36c1c6090cd8,1,0,a747ec6b-f230-49b4-a929-7ed1ba87b078,a747ec6b-f230-49b4-a929-7ed1ba87b078,1,0,796f8fb4-d9cd-40ae-936b-8a70d2eb1121,796f8fb4-d9cd-40ae-936b-8a70d2eb1121,1,0,01cb357c-af28-4855-afae-45b6df19b344,01cb357c-af28-4855-afae-45b6df19b344,1,0,4802e016-a9e9-47d0-916b-b42194a1f388,4802e016-a9e9-47d0-916b-b42194a1f388,1,0,a1740d1f-1b8f-4db5-be5e-0eac44e934b8,a1740d1f-1b8f-4db5-be5e-0eac44e934b8,1,0,4062674a-4a81-494d-82bc-4984cd7c7903,4062674a-4a81-494d-82bc-4984cd7c7903,1,0,782a8801-06ca-4d63-bf8b-63d2320766d8,782a8801-06ca-4d63-bf8b-63d2320766d8,1,0,93a73123-d98c-4286-9269-7bfcedd115e8,93a73123-d98c-4286-9269-7bfcedd115e8,1,0,c5985c02-1824-4ce9-b415-1621dd2ee864,c5985c02-1824-4ce9-b415-1621dd2ee864,1,0,993ce747-cdc9-445f-ad7d-daf53cd5f7e9,993ce747-cdc9-445f-ad7d-daf53cd5f7e9,1,0,e819aaf6-3dfb-492a-8a4a-50a7c6854790,e819aaf6-3dfb-492a-8a4a-50a7c6854790,1,0,62b95ba1-f213-42fb-90f3-a03e8094bc9e,62b95ba1-f213-42fb-90f3-a03e8094bc9e,1,0,619b534d-5605-40d3-9b8c-4443a21d7795,619b534d-5605-40d3-9b8c-4443a21d7795,1,0,a010bbf4-d547-4576-9797-28e3096ffed3,a010bbf4-d547-4576-9797-28e3096ffed3,1,0,a44c3eb2-1054-41ca-82e8-fc35336e7009,a44c3eb2-1054-41ca-82e8-fc35336e7009,1,0,01f67911-4ca7-4668-b970-62c299b98e56,01f67911-4ca7-4668-b970-62c299b98e56,1,0,20c89c94-f77f-4e14-8c97-2a70c1419ce3,20c89c94-f77f-4e14-8c97-2a70c1419ce3,1,0,aa509aa3-dd45-41f3-82c7-59662c2e2c47,aa509aa3-dd45-41f3-82c7-59662c2e2c47,1,0,c4552529-e69e-4c5c-bd66-04b2f7dac281,c4552529-e69e-4c5c-bd66-04b2f7dac281,1,0,381b49ba-793a-4418-9fd4-598844fb72a6,381b49ba-793a-4418-9fd4-598844fb72a6,1,0,1aee302d-df31-49ea-b542-436dc1d79ae1,1aee302d-df31-49ea-b542-436dc1d79ae1,1,0,593509da-d33c-49ff-a62c-a28cbc4651c1,593509da-d33c-49ff-a62c-a28cbc4651c1,1,0,5e346a0b-a322-4565-adb9-70131fb05fa3,5e346a0b-a322-4565-adb9-70131fb05fa3,1,0,9a69c559-194b-4f74-9879-82740260f5f6,9a69c559-194b-4f74-9879-82740260f5f6,1,0,93bf1dcf-670d-4c8b-bdbf-e43c2edf8056,93bf1dcf-670d-4c8b-bdbf-e43c2edf8056,1,0,8a06f980-78f3-42f4-9d96-da2e0f0f36a7,8a06f980-78f3-42f4-9d96-da2e0f0f36a7,1,0,fee2aa74-7a81-4ab2-a457-2edf8ac1aa2d,fee2aa74-7a81-4ab2-a457-2edf8ac1aa2d,1,0,2e19fb7b-270f-4181-b4a1-640280bbbc5c,2e19fb7b-270f-4181-b4a1-640280bbbc5c,1,0,cf69b045-665d-4f6c-827f-5044beacd125,cf69b045-665d-4f6c-827f-5044beacd125,1,0,aa773eef-0c4a-49be-9f5e-9131bc041415,aa773eef-0c4a-49be-9f5e-9131bc041415,1,0,9b31e474-01d4-4c3b-a633-3a2ff3917d62,9b31e474-01d4-4c3b-a633-3a2ff3917d62,1,0,1c09bf33-9b54-4bfd-bc92-e7324025fab0,1c09bf33-9b54-4bfd-bc92-e7324025fab0,1,0,8d7750e9-899f-4434-8702-44cd02681779,8d7750e9-899f-4434-8702-44cd02681779,1,0,d85244dc-c417-4e69-9aa7-7ad313ecb940,d85244dc-c417-4e69-9aa7-7ad313ecb940,1,0,3bebf5e9-68bb-48dc-a39d-cbdca2dbecb1,3bebf5e9-68bb-48dc-a39d-cbdca2dbecb1,1,0,cd392ef0-dedb-4f83-9a2c-a24190ee0dc0,cd392ef0-dedb-4f83-9a2c-a24190ee0dc0,1,0,bb2f0c1c-3cfb-4a26-b6de-5bbeb5614587,bb2f0c1c-3cfb-4a26-b6de-5bbeb5614587,1,0,0713de12-87d5-4877-bd8a-2b6466df67df,0713de12-87d5-4877-bd8a-2b6466df67df,1,0,b848aafc-44fb-4dfe-8eec-233dc08fbbb6,b848aafc-44fb-4dfe-8eec-233dc08fbbb6,1,0,c4d7c569-4649-4f98-a048-45f3c5933670,c4d7c569-4649-4f98-a048-45f3c5933670,1,0,6dc05d69-bd54-4e8a-8985-c2ddfa0aaffb,6dc05d69-bd54-4e8a-8985-c2ddfa0aaffb,1,0,426cbebb-880b-49c5-b046-83c5e071273e,426cbebb-880b-49c5-b046-83c5e071273e,1,0,ad08b104-01f8-4900-a06c-baa1d55eba84,ad08b104-01f8-4900-a06c-baa1d55eba84,1,0,9352d10d-188f-4074-8dd1-7be5c11525e3,9352d10d-188f-4074-8dd1-7be5c11525e3,1,0,1933634a-6f10-48e7-99f0-60ac338f7832,1933634a-6f10-48e7-99f0-60ac338f7832,1,0,655deec5-c079-4748-8521-b3f10c243394,655deec5-c079-4748-8521-b3f10c243394,1,0,f6d4d818-d54c-4337-82cf-abd5e6dbe770,f6d4d818-d54c-4337-82cf-abd5e6dbe770,1,0,656c447b-291f-4e62-81ac-1c004841aa72,656c447b-291f-4e62-81ac-1c004841aa72,1,0,c9a06c8d-2f6d-4e03-bc62-a1a19f17faf3,c9a06c8d-2f6d-4e03-bc62-a1a19f17faf3,1,0,5ba93404-58ad-4321-9a62-27db828f75f6,5ba93404-58ad-4321-9a62-27db828f75f6,1,0,3da20e86-1d83-4935-b425-a91392dc8f35,3da20e86-1d83-4935-b425-a91392dc8f35,1,0,b56f25d2-72a9-4d80-8998-77ac3097c873,b56f25d2-72a9-4d80-8998-77ac3097c873,1,0,03bd775a-e0a1-4205-82ce-6068e73ad134,03bd775a-e0a1-4205-82ce-6068e73ad134,1,0,40bed47b-7754-4a70-b51a-47385fd46e83,40bed47b-7754-4a70-b51a-47385fd46e83,1,0,773ef914-5e7e-4ec1-bcdb-b2d111b560e6,773ef914-5e7e-4ec1-bcdb-b2d111b560e6,1,0,1e5a4f93-1ab9-4775-9538-2a1772215d89,1e5a4f93-1ab9-4775-9538-2a1772215d89,1,0,c25db165-0734-4fef-b161-e5164954a616,c25db165-0734-4fef-b161-e5164954a616,1,0,37e3d914-643e-4963-b4a0-7bc6727c0c9b,37e3d914-643e-4963-b4a0-7bc6727c0c9b,1,0,b6902500-3e03-4e83-a077-00500abc00b6,b6902500-3e03-4e83-a077-00500abc00b6,1,0,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,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,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,0a136ad9-22ad-4ba7-a31a-40a193b49d26,0a136ad9-22ad-4ba7-a31a-40a193b49d26,1,0,208c7b8c-3df9-4441-8ebf-34ffa81572a2,208c7b8c-3df9-4441-8ebf-34ffa81572a2,1,0,8c17fd7c-74d7-496a-a843-42022afb0707,8c17fd7c-74d7-496a-a843-42022afb0707,1,0,091ccac1-9a63-4a89-bb0c-333b274b0c70,091ccac1-9a63-4a89-bb0c-333b274b0c70,1,0,b456d820-8034-4381-960d-66d9f86b0a4b,b456d820-8034-4381-960d-66d9f86b0a4b,1,0,bd55fd03-cf67-4333-a554-98e03d18f780,bd55fd03-cf67-4333-a554-98e03d18f780,1,0,6eac5f7b-0952-4c94-9028-529b14ffcd4f,6eac5f7b-0952-4c94-9028-529b14ffcd4f,1,0,1a7c774d-5b86-4051-b797-3081e19fa30a,1a7c774d-5b86-4051-b797-3081e19fa30a,1,0,00949768-5833-4fe2-8752-b009d1bceef8,00949768-5833-4fe2-8752-b009d1bceef8,1,0,167455d1-6658-409f-834c-f6ccfe7b25de,167455d1-6658-409f-834c-f6ccfe7b25de,1,0,c5b3ca21-8f7b-4933-853c-7d95b17b5631,c5b3ca21-8f7b-4933-853c-7d95b17b5631,1,0,8b0faa1e-09da-4ba4-894e-e86abc5d39df,8b0faa1e-09da-4ba4-894e-e86abc5d39df,1,0,cb50b309-1b6c-400c-9e9e-67204dcccaae,cb50b309-1b6c-400c-9e9e-67204dcccaae,1,0,e2b482cb-6954-4e6a-abe9-d0a01f64b73a,e2b482cb-6954-4e6a-abe9-d0a01f64b73a,1,0,2a6e1f2b-7378-456b-9657-9e971eaff716,2a6e1f2b-7378-456b-9657-9e971eaff716,1,0,c3cdea20-3055-4b4e-a531-a02d4f3ed294,c3cdea20-3055-4b4e-a531-a02d4f3ed294,1,0,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,86755cbc-efd8-43e7-bba8-975c0a51f38f,86755cbc-efd8-43e7-bba8-975c0a51f38f,1,0,7183d525-212a-42f3-a7e5-eb9deaeaa4a3,7183d525-212a-42f3-a7e5-eb9deaeaa4a3,1,0,b82b27cc-e81c-4b7c-9833-ea4f2ce21edb,b82b27cc-e81c-4b7c-9833-ea4f2ce21edb,1,0,4347f77e-bad9-4525-90a0-794787f03585,4347f77e-bad9-4525-90a0-794787f03585,1,0,cfde3330-2bed-4273-8d69-c213ebdde247,cfde3330-2bed-4273-8d69-c213ebdde247,1,0,2d6ca049-89a5-437e-971c-b8e42f61b460,2d6ca049-89a5-437e-971c-b8e42f61b460,1,0,c450ebe1-4223-4a7a-b9fa-374d5c13dc8c,c450ebe1-4223-4a7a-b9fa-374d5c13dc8c,1,0,271d58d0-4449-40cc-bae9-cc4c50eebd9b,271d58d0-4449-40cc-bae9-cc4c50eebd9b,1,0,58df9322-c786-4dd1-af49-7cd164b378da,58df9322-c786-4dd1-af49-7cd164b378da,1,0,8d48de7f-61d6-4462-9c14-f728206a482c,8d48de7f-61d6-4462-9c14-f728206a482c,1,0,a87e890a-8924-4f56-9e37-04579b95297a,a87e890a-8924-4f56-9e37-04579b95297a,1,0,c71d4fa4-86b0-41e2-8b6a-cfb91e131eaf,c71d4fa4-86b0-41e2-8b6a-cfb91e131eaf,1,0,4c1f2581-ee42-4df5-9169-20205a18a9be,4c1f2581-ee42-4df5-9169-20205a18a9be,1,0,bb3d9ea3-8895-4950-9ee9-4249ca983d48,bb3d9ea3-8895-4950-9ee9-4249ca983d48,1,0,86ea21fa-5ecc-4d81-b6ad-d71e7ed39009,86ea21fa-5ecc-4d81-b6ad-d71e7ed39009,1,0,b806d2b6-bbd1-4abd-9471-7791603a2fcf,b806d2b6-bbd1-4abd-9471-7791603a2fcf,1,0,d7aa519b-9a2e-4946-bd06-9ac22bb7c1e4,d7aa519b-9a2e-4946-bd06-9ac22bb7c1e4,1,0,ecee1ec8-aa1f-4b90-a1b3-2538a53c0dd7,ecee1ec8-aa1f-4b90-a1b3-2538a53c0dd7,1,0,34f50dd9-de16-4013-a2ef-6595d9c28930,34f50dd9-de16-4013-a2ef-6595d9c28930,1,0,56fcca65-3429-4409-bce7-f434f6530a74,56fcca65-3429-4409-bce7-f434f6530a74,1,0,5236ca8d-a4a6-4df8-a6a3-5cfe02c49aeb,5236ca8d-a4a6-4df8-a6a3-5cfe02c49aeb,1,0,bcfabf25-ae2f-4f73-836c-2cab3617a0b6,bcfabf25-ae2f-4f73-836c-2cab3617a0b6,1,0,b286f047-a4d0-4808-b1b4-27997ead6d49,b286f047-a4d0-4808-b1b4-27997ead6d49,1,0,49da2d3a-657a-4cfd-8e37-422b96d2cda5,49da2d3a-657a-4cfd-8e37-422b96d2cda5,1,0,fced16ae-abee-4fbe-9582-dfd368d5610a,fced16ae-abee-4fbe-9582-dfd368d5610a,1,0,afe60bad-1585-487f-9a39-9b9e031f9576,afe60bad-1585-487f-9a39-9b9e031f9576,1,0,4c4f0475-bd11-40c8-af0d-8affec6f838d,4c4f0475-bd11-40c8-af0d-8affec6f838d,1,0,7aee36ac-bbd1-4b06-8266-b7325fb9ce3c,7aee36ac-bbd1-4b06-8266-b7325fb9ce3c,1,0,855439d7-a621-48f5-b6d9-bc2bbd11ad90,855439d7-a621-48f5-b6d9-bc2bbd11ad90,1,0,4e0ec0f0-eb44-41b0-b950-88fdb6ac0db2,4e0ec0f0-eb44-41b0-b950-88fdb6ac0db2,1,0,2f25e742-555b-4db8-bff2-2d345ce2a93a,2f25e742-555b-4db8-bff2-2d345ce2a93a,1,0,303d8c17-4303-4f1d-8bed-51cd7ea0a4b2,303d8c17-4303-4f1d-8bed-51cd7ea0a4b2,1,0,46affd3a-f31c-4432-bd58-2f2b1ed9bc4e,46affd3a-f31c-4432-bd58-2f2b1ed9bc4e,1,0,a7fee9d3-569d-4b5b-bd47-44790e0095f5,a7fee9d3-569d-4b5b-bd47-44790e0095f5,1,0,a258fe12-7e55-4f89-86fa-962b1d2947ac,a258fe12-7e55-4f89-86fa-962b1d2947ac,1,0,93701593-5ac8-4266-b471-7e9ed35a9c3e,93701593-5ac8-4266-b471-7e9ed35a9c3e,1,0,0fdb864e-ede9-4777-835c-0804968ee544,0fdb864e-ede9-4777-835c-0804968ee544,1,0,04c45a51-4a8e-48fa-a39c-f67ce2079fc4,04c45a51-4a8e-48fa-a39c-f67ce2079fc4,1,0,b46546fe-3d6b-473f-a7cb-ff3b3ae0bafe,b46546fe-3d6b-473f-a7cb-ff3b3ae0bafe,1,0,e7b1810c-8e6c-4759-9e6f-c754b5a1ac77,e7b1810c-8e6c-4759-9e6f-c754b5a1ac77,1,0,5dee9814-fe38-4631-8148-8d6c87ef6f47,5dee9814-fe38-4631-8148-8d6c87ef6f47,1,0,37d17053-5c2b-4972-b6a5-a589f2ddbde6,37d17053-5c2b-4972-b6a5-a589f2ddbde6,1,0,c349968a-3f87-425b-8efb-d847934dee4b,c349968a-3f87-425b-8efb-d847934dee4b,1,0,3bb8dc33-970c-4c58-9036-ce716d963847,3bb8dc33-970c-4c58-9036-ce716d963847,1,0,fae0d2e0-1bcd-4a77-86d6-407ca05c1c95,fae0d2e0-1bcd-4a77-86d6-407ca05c1c95,1,0,b3ff39fa-f665-4d01-9a2a-69722e6b1071,b3ff39fa-f665-4d01-9a2a-69722e6b1071,1,0,0abacb0a-ce00-474e-8aec-35685c51ddef,0abacb0a-ce00-474e-8aec-35685c51ddef,1,0,ae407b17-03aa-4268-8603-58d6714dae89,ae407b17-03aa-4268-8603-58d6714dae89,1,0,5c0ce79b-97a9-4917-9b02-a4548a97d5a1,5c0ce79b-97a9-4917-9b02-a4548a97d5a1,1,0,c552cfac-d3ef-4b63-a0b9-7c79261ff9f3,c552cfac-d3ef-4b63-a0b9-7c79261ff9f3,1,0,5bb6e52c-ac26-4143-8e90-f04f703f823b,5bb6e52c-ac26-4143-8e90-f04f703f823b,1,0,579baaa4-6493-4d99-8744-6399757295c7,579baaa4-6493-4d99-8744-6399757295c7,1,0,ae6d0e12-8857-476c-b4b2-f03295cbed3e,ae6d0e12-8857-476c-b4b2-f03295cbed3e,1,0,cc8e3172-491d-45d8-a7eb-fc6c400845cb,cc8e3172-491d-45d8-a7eb-fc6c400845cb,1,0,d7cfc87f-ac09-44aa-91d9-6511c408c5cb,d7cfc87f-ac09-44aa-91d9-6511c408c5cb,1,0,7ee1e0d0-9735-45da-bd24-c0dbabfd5b1e,7ee1e0d0-9735-45da-bd24-c0dbabfd5b1e,1,0,bd0e3bd4-1207-41ea-8dfc-afa8f7d08cc2,bd0e3bd4-1207-41ea-8dfc-afa8f7d08cc2,1,0,51d83895-5692-4479-9612-07c790d19dff,51d83895-5692-4479-9612-07c790d19dff,1,0,9c1325af-7492-42be-b3af-51b692534510,9c1325af-7492-42be-b3af-51b692534510,1,0,dface15c-cd65-4fb1-b4dd-b513086d3f8e,dface15c-cd65-4fb1-b4dd-b513086d3f8e,1,0,d854b528-8456-4453-9c2d-4f96caf10481,d854b528-8456-4453-9c2d-4f96caf10481,1,0,245f870e-a53a-4d86-aa0a-c0c7709b8acb,245f870e-a53a-4d86-aa0a-c0c7709b8acb,1,0,476f6bfa-b10c-4e0f-8499-23c652715b3f,476f6bfa-b10c-4e0f-8499-23c652715b3f,1,0,65c9754b-53f6-4616-a9d4-74826f7b0ced,65c9754b-53f6-4616-a9d4-74826f7b0ced,1,0,eca2b076-d218-4d1c-948b-7894edf9fa49,eca2b076-d218-4d1c-948b-7894edf9fa49,1,0,d6969c1e-e13c-4542-abb7-9cf6bb50b8e2,d6969c1e-e13c-4542-abb7-9cf6bb50b8e2,1,0,ccd91f94-d3f1-4aa3-90cf-081d72c4cab1,ccd91f94-d3f1-4aa3-90cf-081d72c4cab1,1,0,aa7d5ca4-3c02-4ca1-a790-2435ee9f9f02,aa7d5ca4-3c02-4ca1-a790-2435ee9f9f02,1,0,b7e85f5c-4312-44c6-895a-3f636a8c78d8,b7e85f5c-4312-44c6-895a-3f636a8c78d8,1,0,3b6e7ee6-0ef5-464a-a01a-6143479c7a61,3b6e7ee6-0ef5-464a-a01a-6143479c7a61,1,0,1969e8d1-0a82-44cb-a0d4-e5badb1d28d4,1969e8d1-0a82-44cb-a0d4-e5badb1d28d4,1,0,a1afacc5-f49a-4df2-a44d-479594d50179,a1afacc5-f49a-4df2-a44d-479594d50179,1,0,fe70eba3-7477-4a38-a511-d69960abb928,fe70eba3-7477-4a38-a511-d69960abb928,1,0,6534ea96-2145-49e6-9739-f59459dc7f6b,6534ea96-2145-49e6-9739-f59459dc7f6b,1,0,f49bffa0-cad6-4801-b82e-21aa580e72e6,f49bffa0-cad6-4801-b82e-21aa580e72e6,1,0,bbbfb817-8db3-4415-86c3-af028276d6e9,bbbfb817-8db3-4415-86c3-af028276d6e9,1,0,6a91112c-f6cc-47a0-9d26-a36c7702af7d,6a91112c-f6cc-47a0-9d26-a36c7702af7d,1,0,40a59681-f31d-4fb9-9301-67c1430590e0,40a59681-f31d-4fb9-9301-67c1430590e0,1,0,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,f8f0857f-2c75-471a-ae0b-a3a265e1eb25,f8f0857f-2c75-471a-ae0b-a3a265e1eb25,1,0,a23f97fb-7ac9-4941-a2c6-bbff6c36ac12,a23f97fb-7ac9-4941-a2c6-bbff6c36ac12,1,0,80cf54ed-8677-4c89-a378-0abef6c64010,80cf54ed-8677-4c89-a378-0abef6c64010,1,0,f0dec7b3-2d6a-44ce-a1da-9c71ccd37539,f0dec7b3-2d6a-44ce-a1da-9c71ccd37539,1,0,56ee3afd-5ae6-421e-b9f3-26505e40f100,56ee3afd-5ae6-421e-b9f3-26505e40f100,1,0,63c9a839-78b2-4706-b380-5aedf6914930,63c9a839-78b2-4706-b380-5aedf6914930,1,0,40f5c1cb-2654-4738-bb44-6734b0e3490b,40f5c1cb-2654-4738-bb44-6734b0e3490b,1,0,2ec484b1-95eb-43a7-9430-1c1ef49f05af,2ec484b1-95eb-43a7-9430-1c1ef49f05af,1,0,1a314ce2-03bc-4267-89a9-bb5bb866f552,1a314ce2-03bc-4267-89a9-bb5bb866f552,1,0,e3b783a6-5ea2-4cd4-955b-df63d93c1f25,e3b783a6-5ea2-4cd4-955b-df63d93c1f25,1,0,f8ab62ad-7776-49ae-b1bb-51bea9a9992b,f8ab62ad-7776-49ae-b1bb-51bea9a9992b,1,0,e859dd18-8baf-49c0-b7a0-1205b6c125d3,e859dd18-8baf-49c0-b7a0-1205b6c125d3,1,0,da59378e-0a97-4cff-977b-cc51967068ee,da59378e-0a97-4cff-977b-cc51967068ee,1,0,bbaad46d-f60d-49e6-a077-075366bca47e,bbaad46d-f60d-49e6-a077-075366bca47e,1,0,0d9f5703-91e4-4769-bedd-5bd974f2f617,0d9f5703-91e4-4769-bedd-5bd974f2f617,1,0,926cdf17-1929-43d6-8205-858aab558ad9,926cdf17-1929-43d6-8205-858aab558ad9,1,0,5ec6838f-2d70-4f91-b41b-16adfe8ed587,5ec6838f-2d70-4f91-b41b-16adfe8ed587,1,0,6420ad7e-61ca-4af9-9715-f2b0c3e2c58f,6420ad7e-61ca-4af9-9715-f2b0c3e2c58f,1,0,bee8b8a0-f058-44cb-822c-620351567627,bee8b8a0-f058-44cb-822c-620351567627,1,0,26365e29-903b-47fd-ad96-e0d87f5d6e87,26365e29-903b-47fd-ad96-e0d87f5d6e87,1,0,569180cb-ce54-4267-94b9-332e35e3c17d,569180cb-ce54-4267-94b9-332e35e3c17d,1,0,55bce105-51c0-452e-9eec-b960fe740db2,55bce105-51c0-452e-9eec-b960fe740db2,1,0,776c171d-5dd5-4965-94dc-c2fe6792d5f2,776c171d-5dd5-4965-94dc-c2fe6792d5f2,1,0,86bb1105-702a-47be-906a-1821a69b1b6c,86bb1105-702a-47be-906a-1821a69b1b6c,1,0,40653767-9542-44e9-a84b-ffee75584638,40653767-9542-44e9-a84b-ffee75584638,1,0,49bd152e-479a-46fe-b3af-26ed9181dc34,49bd152e-479a-46fe-b3af-26ed9181dc34,1,0,0a742dd2-1ff4-42de-b303-f2bb01b36fe2,0a742dd2-1ff4-42de-b303-f2bb01b36fe2,1,0,69e13959-51ad-4ac2-9cfc-17ac28b78c78,69e13959-51ad-4ac2-9cfc-17ac28b78c78,1,0,f890ca1b-f2c2-4630-9002-301b759ca6d9,f890ca1b-f2c2-4630-9002-301b759ca6d9,1,0,08c8a9bf-7b89-4d0e-a496-4c7efeca0577,08c8a9bf-7b89-4d0e-a496-4c7efeca0577,1,0,f6c2b015-9cfc-40d2-a93f-b0e88db4a23f,f6c2b015-9cfc-40d2-a93f-b0e88db4a23f,1,0,103f3d8f-e47a-4772-bdd7-dd5f8508d22b,103f3d8f-e47a-4772-bdd7-dd5f8508d22b,1,0,ba8ea271-8716-49ef-8b10-f4b5798c1f62,ba8ea271-8716-49ef-8b10-f4b5798c1f62,1,0,3633c30c-9479-4801-89cc-a5734a41e465,3633c30c-9479-4801-89cc-a5734a41e465,1,0,f295c68d-7e29-48b8-a95a-56e96d9843c1,f295c68d-7e29-48b8-a95a-56e96d9843c1,1,0,7ebe16ee-8e5d-4b05-89b5-9539f73be90c,7ebe16ee-8e5d-4b05-89b5-9539f73be90c,1,0,ea5d0221-fb1e-4626-862a-9c1209365d8f,ea5d0221-fb1e-4626-862a-9c1209365d8f,1,0,12bce69b-933c-4ce4-9d29-a47f3db0226e,12bce69b-933c-4ce4-9d29-a47f3db0226e,1,0,82dcd6a3-c35b-421c-a8f9-77855ad2abca,82dcd6a3-c35b-421c-a8f9-77855ad2abca,1,0,ad0b1720-282e-49d4-af80-324a887963c3,ad0b1720-282e-49d4-af80-324a887963c3,1,0,9ec6fc35-e84e-4f82-b616-5c02e945cc8f,9ec6fc35-e84e-4f82-b616-5c02e945cc8f,1,0,a2c42946-1cdb-457a-a45b-97781cfb4a15,a2c42946-1cdb-457a-a45b-97781cfb4a15,1,0,20adf54c-044c-4bea-8028-b6d20917a030,20adf54c-044c-4bea-8028-b6d20917a030,1,0,dea6b05f-d3e1-4ff4-8f71-6a0c18134e94,dea6b05f-d3e1-4ff4-8f71-6a0c18134e94,1,0,fcb97a46-d5fd-4bb5-b899-17723a9fe346,fcb97a46-d5fd-4bb5-b899-17723a9fe346,1,0,a666af62-aa5d-4b2b-b9e5-017d1c93ae6a,a666af62-aa5d-4b2b-b9e5-017d1c93ae6a,1,0,7604b15a-8c5e-4515-84b9-c1d36f9efd0a,7604b15a-8c5e-4515-84b9-c1d36f9efd0a,1,0,a1a44832-6026-47ae-affd-5b6d52e84307,a1a44832-6026-47ae-affd-5b6d52e84307,1,0,d2fd8650-d13a-411d-8206-61b16016bd82,d2fd8650-d13a-411d-8206-61b16016bd82,1,0,f98bcdb8-6eed-4b4f-b3da-d80b5e8bed44,f98bcdb8-6eed-4b4f-b3da-d80b5e8bed44,1,0,fbaa5b0a-56dc-4bf1-b1b2-e48073f63d13,fbaa5b0a-56dc-4bf1-b1b2-e48073f63d13,1,0,a92acf0e-9132-4456-9a82-1543d98ca453,a92acf0e-9132-4456-9a82-1543d98ca453,1,0,4033eb31-8281-402a-afff-431fa36e589e,4033eb31-8281-402a-afff-431fa36e589e,1,0,5a1e1da5-7307-4f48-bb1c-2977fc4d7cef,5a1e1da5-7307-4f48-bb1c-2977fc4d7cef,1,0,f59488c7-4643-4988-8043-5c9724e04279,f59488c7-4643-4988-8043-5c9724e04279,1,0,cfe022b5-7647-4b5c-a2bd-f5d313f4a9db,cfe022b5-7647-4b5c-a2bd-f5d313f4a9db,1,0,3c0a9c45-8e57-43fa-8ae3-26b15571f2cd,3c0a9c45-8e57-43fa-8ae3-26b15571f2cd,1,0,85223d37-2503-4783-94dc-fe6265e718d5,85223d37-2503-4783-94dc-fe6265e718d5,1,0,0918cd76-56e5-4314-8a1c-c21d023ba6f8,0918cd76-56e5-4314-8a1c-c21d023ba6f8,1,0,9db21c2e-79fa-44e4-902e-416abfccb54a,9db21c2e-79fa-44e4-902e-416abfccb54a,1,0,fb082db3-197b-4d1e-b9ea-362624d547ee,fb082db3-197b-4d1e-b9ea-362624d547ee,1,0,c09dcf00-a45a-4487-99c5-d3a37956ec88,c09dcf00-a45a-4487-99c5-d3a37956ec88,1,0,531a5a0c-6ac9-4e93-8caa-42d9aad0bc82,531a5a0c-6ac9-4e93-8caa-42d9aad0bc82,1,0,2714e1b6-6b02-43a1-bc94-2934b429ed35,2714e1b6-6b02-43a1-bc94-2934b429ed35,1,0,e33c73b2-ef0b-49b7-a65f-ab2c814ad256,e33c73b2-ef0b-49b7-a65f-ab2c814ad256,1,0,4c7016da-9991-4917-8eaa-e760cc9e29d1,4c7016da-9991-4917-8eaa-e760cc9e29d1,1,0,febb3770-5c11-4ada-9e49-a27950bdaddf,febb3770-5c11-4ada-9e49-a27950bdaddf,1,0,d7b57669-e538-4e54-ab1b-8428f0586466,d7b57669-e538-4e54-ab1b-8428f0586466,1,0,9c484a15-039e-416d-af97-4c2bd90fd873,9c484a15-039e-416d-af97-4c2bd90fd873,1,0,534855e3-4cf2-471c-b982-7138917050c9,534855e3-4cf2-471c-b982-7138917050c9,1,0,4c72b944-d000-4920-aec8-54029f88ddf4,4c72b944-d000-4920-aec8-54029f88ddf4,1,0,b4033d05-05c2-4617-80d9-abfa389c47f4,b4033d05-05c2-4617-80d9-abfa389c47f4,1,0,aa29e1be-4e99-4136-8dc1-0124908979ad,aa29e1be-4e99-4136-8dc1-0124908979ad,1,0,0d76799d-7fc7-446b-88fb-dca839de00a5,0d76799d-7fc7-446b-88fb-dca839de00a5,1,0,cb5674c3-0d91-4948-bafd-d9ef44a2a69d,cb5674c3-0d91-4948-bafd-d9ef44a2a69d,1,0,ea4a869c-861c-412c-a3be-de1c57d1a251,ea4a869c-861c-412c-a3be-de1c57d1a251,1,0,eeafcc8c-fbe2-4bb4-8b8a-cf663208258d,eeafcc8c-fbe2-4bb4-8b8a-cf663208258d,1,0,6a3bd39a-59cb-4763-b49f-7ab67167a8b7,6a3bd39a-59cb-4763-b49f-7ab67167a8b7,1,0,6c1d8f6c-db33-46dc-8824-aceacb4bf9c1,6c1d8f6c-db33-46dc-8824-aceacb4bf9c1,1,0,50ac390d-324f-40bd-b3df-0468a63b94b6,50ac390d-324f-40bd-b3df-0468a63b94b6,1,0,80337710-2c60-45c4-ae1f-bb42731fb611,80337710-2c60-45c4-ae1f-bb42731fb611,1,0,9dcf467e-7701-4c7b-b747-95f4d9b9295c,9dcf467e-7701-4c7b-b747-95f4d9b9295c,1,0,dd07b255-25af-466e-a224-c561a8ca567b,dd07b255-25af-466e-a224-c561a8ca567b,1,0,77149f7a-8a76-4569-9487-991c41e132ef,77149f7a-8a76-4569-9487-991c41e132ef,1,0,1e9e115a-e65b-4346-b0d3-47cf1dbe75f2,1e9e115a-e65b-4346-b0d3-47cf1dbe75f2,1,0,9e1be65e-986f-4d21-91f0-15c66db0c947,9e1be65e-986f-4d21-91f0-15c66db0c947,1,0,67993b79-6aca-4641-b2e2-0a15f44e47d5,67993b79-6aca-4641-b2e2-0a15f44e47d5,1,0,d2fe4578-a1f8-4586-b052-fa71d25365c9,d2fe4578-a1f8-4586-b052-fa71d25365c9,1,0,f31f3dab-5796-47ac-a54d-3081f8cad817,f31f3dab-5796-47ac-a54d-3081f8cad817,1,0,cd59707e-b9e4-4038-8203-ae22a8060e8d,cd59707e-b9e4-4038-8203-ae22a8060e8d,1,0,db497857-33d3-49a1-b328-dfc62c973ecb,db497857-33d3-49a1-b328-dfc62c973ecb,1,0,139c001c-7b07-465a-9187-399ad32d294f,139c001c-7b07-465a-9187-399ad32d294f,1,0,5d228ce4-069e-4f98-beed-b8e1de17c3d9,5d228ce4-069e-4f98-beed-b8e1de17c3d9,1,0,9770fc09-87bf-4fce-9b0d-410efd30edae,9770fc09-87bf-4fce-9b0d-410efd30edae,1,0,f3d8590a-dcfa-4d41-8d03-642b99ffa040,f3d8590a-dcfa-4d41-8d03-642b99ffa040,1,0,3d73d5ff-995e-40ed-a401-cec2a3d12c8f,3d73d5ff-995e-40ed-a401-cec2a3d12c8f,1,0,20156709-1481-4007-8e89-9ce79fc589fc,20156709-1481-4007-8e89-9ce79fc589fc,1,0,fbcda361-0ef2-47b4-ba1c-1d1952898bd3,fbcda361-0ef2-47b4-ba1c-1d1952898bd3,1,0,7e7c5abd-b645-4de5-a40e-5805ec4456e2,7e7c5abd-b645-4de5-a40e-5805ec4456e2,1,0,763a16c3-a728-4b65-a485-705990310b4a,763a16c3-a728-4b65-a485-705990310b4a,1,0,65338920-c744-4d1e-b351-848b90a3feda,65338920-c744-4d1e-b351-848b90a3feda,1,0,2aedb1ac-caf1-45c7-913e-82a36637d5d4,2aedb1ac-caf1-45c7-913e-82a36637d5d4,1,0,e177e258-7d0c-4fe1-80e5-3b89de9e23d9,e177e258-7d0c-4fe1-80e5-3b89de9e23d9,1,0,3f25ac9f-c6b4-4ccc-bec4-a90c99403823,3f25ac9f-c6b4-4ccc-bec4-a90c99403823,1,0,56177464-5e9f-4598-96bc-eb311993c503,56177464-5e9f-4598-96bc-eb311993c503,1,0,c2308e60-2844-4bd8-bc8a-c9c20e5fc62d,c2308e60-2844-4bd8-bc8a-c9c20e5fc62d,1,0,bdfe65f4-4174-4e66-915c-943137981cf0,bdfe65f4-4174-4e66-915c-943137981cf0,1,0,5271de2d-d3a0-4128-90e0-cd8e1ea2ad30,5271de2d-d3a0-4128-90e0-cd8e1ea2ad30,1,0,c895d58a-5be1-4157-81af-f4f6db9b4b9e,c895d58a-5be1-4157-81af-f4f6db9b4b9e,1,0,0d89036c-af6e-4709-847c-0dab74a33d72,0d89036c-af6e-4709-847c-0dab74a33d72,1,0,7d223aab-d4f6-41d5-a701-6fe03517cf50,7d223aab-d4f6-41d5-a701-6fe03517cf50,1,0,631cdd15-eb1f-4903-9073-4de3911ba2e6,631cdd15-eb1f-4903-9073-4de3911ba2e6,1,0,6b10ab0a-8d4e-4847-9ce7-663fb4770c35,6b10ab0a-8d4e-4847-9ce7-663fb4770c35,1,0,42630eee-ce93-40a8-b96e-3eb759f48976,42630eee-ce93-40a8-b96e-3eb759f48976,1,0,174e0187-cf34-4949-8dc2-a1f9aece78dc,174e0187-cf34-4949-8dc2-a1f9aece78dc,1,0,5d9f2db6-704d-45cb-96c3-e59e47ad4fea,5d9f2db6-704d-45cb-96c3-e59e47ad4fea,1,0,e4dbeb50-292f-452f-a0da-a55e5ea936e4,e4dbeb50-292f-452f-a0da-a55e5ea936e4,1,0,8ce6cc1a-8570-4704-b9a3-44e815b2e753,8ce6cc1a-8570-4704-b9a3-44e815b2e753,1,0,71aa2bf7-85c9-40f3-a9b0-f6d666eddd28,71aa2bf7-85c9-40f3-a9b0-f6d666eddd28,1,0,497cbe4d-586d-48a2-8e98-d20e3e09ed42,497cbe4d-586d-48a2-8e98-d20e3e09ed42,1,0,38b7679d-3739-4572-baf2-d8c7b2a94f0a,38b7679d-3739-4572-baf2-d8c7b2a94f0a,1,0,1470f052-f032-46bc-b1ee-54555e725dfd,1470f052-f032-46bc-b1ee-54555e725dfd,1,0,4019a5e9-1f50-44b9-98ba-87c07a0ce4e5,4019a5e9-1f50-44b9-98ba-87c07a0ce4e5,1,0,7d336fdd-5cbf-4c92-a783-f451f7590502,7d336fdd-5cbf-4c92-a783-f451f7590502,1,0,ee8af8ee-e49a-4511-9a91-48814ab99d23,ee8af8ee-e49a-4511-9a91-48814ab99d23,1,0,3a7d9d49-b5e5-4c5c-958e-a4c6afda8b9d,3a7d9d49-b5e5-4c5c-958e-a4c6afda8b9d,1,0,bc10ad8f-383c-469a-8c0e-60805161055b,bc10ad8f-383c-469a-8c0e-60805161055b,1,0,86760ecb-2ddd-40ce-bc4f-94c23027a55e,86760ecb-2ddd-40ce-bc4f-94c23027a55e,1,0,6fbf844e-ee8d-490f-9177-6392d262312f,6fbf844e-ee8d-490f-9177-6392d262312f,1,0,703a3e8a-0204-4e8f-8fa0-a2ed1aeb7662,703a3e8a-0204-4e8f-8fa0-a2ed1aeb7662,1,0,f5d90a5a-1adb-49d6-8640-2e4054bdb99f,f5d90a5a-1adb-49d6-8640-2e4054bdb99f,1,0,37722a34-1148-4cc8-95e6-4645ae9cca98,37722a34-1148-4cc8-95e6-4645ae9cca98,1,0,11f32e0f-7d16-4ebd-9cef-fffd2d64e70a,11f32e0f-7d16-4ebd-9cef-fffd2d64e70a,1,0,cc34bd23-de0a-4b09-8333-e4693576b9f4,cc34bd23-de0a-4b09-8333-e4693576b9f4,1,0,b16d5e79-9d7e-4d3e-9be8-3b2a932abf78,b16d5e79-9d7e-4d3e-9be8-3b2a932abf78,1,0,903af13a-1f73-4145-a3d0-971c3be5fbe6,903af13a-1f73-4145-a3d0-971c3be5fbe6,1,0,fb42ad06-d5a4-40ea-817c-fa7ff385d8db,fb42ad06-d5a4-40ea-817c-fa7ff385d8db,1,0,bc110a6a-26fa-4aa1-a2ef-bdaeaa0a33af,bc110a6a-26fa-4aa1-a2ef-bdaeaa0a33af,1,0,953dbad6-4f5c-4319-874a-db358a77d001,953dbad6-4f5c-4319-874a-db358a77d001,1,0,05243f56-7e9b-4a61-8efb-1b5e525fff21,05243f56-7e9b-4a61-8efb-1b5e525fff21,1,0,7aa86a2d-2b47-447e-8901-806411011279,7aa86a2d-2b47-447e-8901-806411011279,1,0,fca0dfad-f853-4694-9ce9-53a3a10f59b7,fca0dfad-f853-4694-9ce9-53a3a10f59b7,1,0,934b8380-c6e0-49f8-a6c2-91c0ddb2f95e,934b8380-c6e0-49f8-a6c2-91c0ddb2f95e,1,0,57f4ee70-185e-4f2a-91a6-6c0bf93c1000,57f4ee70-185e-4f2a-91a6-6c0bf93c1000,1,0,b4cb92fb-ad82-44ed-9203-397b412b3453,b4cb92fb-ad82-44ed-9203-397b412b3453,1,0,69ceac29-06d3-45f2-b914-7966465cd0d3,69ceac29-06d3-45f2-b914-7966465cd0d3,1,0,b690721d-960b-4374-8d2c-feed3a2b354b,b690721d-960b-4374-8d2c-feed3a2b354b,1,0,271243d3-1871-4a0a-bf7f-63bacacf0a59,271243d3-1871-4a0a-bf7f-63bacacf0a59,1,0,b1ed134b-f2aa-4b06-b7a2-0e524ead04df,b1ed134b-f2aa-4b06-b7a2-0e524ead04df,1,0,5b379a72-8605-4e88-84cb-14272a3b8f5f,5b379a72-8605-4e88-84cb-14272a3b8f5f,1,0,150c9d05-4ccc-4cb7-879d-b1d9c3534343,150c9d05-4ccc-4cb7-879d-b1d9c3534343,1,0,65000437-bd07-4841-a458-679d44768c46,65000437-bd07-4841-a458-679d44768c46,1,0,1281fe19-bbca-4a4f-84d8-14187e62000f,1281fe19-bbca-4a4f-84d8-14187e62000f,1,0,9b7051d5-abc4-416c-a0e6-515d120d78e4,9b7051d5-abc4-416c-a0e6-515d120d78e4,1,0,86d1bc4e-f08d-48c7-8b3a-3c5feb0c843c,86d1bc4e-f08d-48c7-8b3a-3c5feb0c843c,1,0,869938e6-6310-4326-bd15-5b91fe2e0911,869938e6-6310-4326-bd15-5b91fe2e0911,1,0,8ed7254b-bbf8-49d9-8a73-9a91316fd02d,8ed7254b-bbf8-49d9-8a73-9a91316fd02d,1,0,a156521a-ece1-49d3-8056-1c3508273c45,a156521a-ece1-49d3-8056-1c3508273c45,1,0,075d39e0-a77a-4d0b-9260-7524fb5b2d0c,075d39e0-a77a-4d0b-9260-7524fb5b2d0c,1,0,10018f80-3138-4089-bf9a-a5f178f1e295,10018f80-3138-4089-bf9a-a5f178f1e295,1,0,43aba109-4b7f-45ef-9c30-8b754e81911b,43aba109-4b7f-45ef-9c30-8b754e81911b,1,0,4ccd72e1-7fd7-4a3b-8428-71b44992937e,4ccd72e1-7fd7-4a3b-8428-71b44992937e,1,0,46077650-2b2c-4319-8279-41f277971669,46077650-2b2c-4319-8279-41f277971669,1,0,4afe733d-64a0-4ea5-9d12-6e2c86eb91e4,4afe733d-64a0-4ea5-9d12-6e2c86eb91e4,1,0,612f3b95-d7db-4b33-92b5-4873205b424b,612f3b95-d7db-4b33-92b5-4873205b424b,1,0,d0b79c3d-b0c5-4eb3-9971-1def1c88698f,d0b79c3d-b0c5-4eb3-9971-1def1c88698f,1,0,e82ebd72-7b5a-4f45-b853-1001bf680a05,e82ebd72-7b5a-4f45-b853-1001bf680a05,1,0,a74879b8-c080-4cc0-b44f-2b7c4dae87fe,a74879b8-c080-4cc0-b44f-2b7c4dae87fe,1,0,e9e9b733-e97a-430d-95ce-45ea27751f64,e9e9b733-e97a-430d-95ce-45ea27751f64,1,0,86ffe9a7-9b3e-49ab-bd88-20269fec56bc,86ffe9a7-9b3e-49ab-bd88-20269fec56bc,1,0,3dd50c66-27f7-4f1e-86e9-c709995c8609,3dd50c66-27f7-4f1e-86e9-c709995c8609,1,0,45c0003f-0ed7-4582-b84e-217fdc4ddeaf,45c0003f-0ed7-4582-b84e-217fdc4ddeaf,1,0,ed1369c5-c274-45bd-ae91-7648565ae09f,ed1369c5-c274-45bd-ae91-7648565ae09f,1,0,8d0fce61-a22f-4033-9e03-3f00c4a21722,8d0fce61-a22f-4033-9e03-3f00c4a21722,1,0,bfb3f026-e940-49c3-ac30-408186f9e11e,bfb3f026-e940-49c3-ac30-408186f9e11e,1,0,e1dc83eb-a8cd-454b-8de8-cff2049be78c,e1dc83eb-a8cd-454b-8de8-cff2049be78c,1,0,9edd9288-1463-4d67-b9f0-40f351d978e9,9edd9288-1463-4d67-b9f0-40f351d978e9,1,0,c9db6c68-965f-4567-b26e-5d497a389de1,c9db6c68-965f-4567-b26e-5d497a389de1,1,0,4da2f65d-56bd-4140-9b31-e5ccac4a800a,4da2f65d-56bd-4140-9b31-e5ccac4a800a,1,0,eb163bba-b94c-4a78-9c2d-7b519325e3d4,eb163bba-b94c-4a78-9c2d-7b519325e3d4,1,0,58cdbd20-a7f4-4c4c-8a4e-638714cc2699,58cdbd20-a7f4-4c4c-8a4e-638714cc2699,1,0,616cd2cc-eaf4-4586-bca1-c044429b491a,616cd2cc-eaf4-4586-bca1-c044429b491a,1,0,939bdb9a-294b-4b42-a56f-030f69bc29c4,939bdb9a-294b-4b42-a56f-030f69bc29c4,1,0,ee7a763b-bcbf-4ff3-89af-eb7965b33515,ee7a763b-bcbf-4ff3-89af-eb7965b33515,1,0,e72b3ae6-00e9-45d7-a4f3-bc8a5a2f5ae4,e72b3ae6-00e9-45d7-a4f3-bc8a5a2f5ae4,1,0,81d900be-ddc1-417f-ae2c-1aacf040de9a,81d900be-ddc1-417f-ae2c-1aacf040de9a,1,0,c65f69ce-be78-4e8d-b91d-293c4108ce77,c65f69ce-be78-4e8d-b91d-293c4108ce77,1,0,521a5717-0b38-401d-bd72-30cee219bd14,521a5717-0b38-401d-bd72-30cee219bd14,1,0,977c30dc-6f27-4931-9fd5-d12ed147e3ec,977c30dc-6f27-4931-9fd5-d12ed147e3ec,1,0,eea4f72e-dd1b-46c7-b270-876a482236b3,eea4f72e-dd1b-46c7-b270-876a482236b3,1,0,25e8d286-dfbb-4fdf-974b-fe3f6f76eac0,25e8d286-dfbb-4fdf-974b-fe3f6f76eac0,1,0,2d249dad-8b4f-462b-ab13-892639a6e071,2d249dad-8b4f-462b-ab13-892639a6e071,1,0,f6249bf4-d2e7-48f3-808f-d776915d14cb,f6249bf4-d2e7-48f3-808f-d776915d14cb,1,0,75f11ecd-c87a-4a14-a7ca-c755f63d7cf8,75f11ecd-c87a-4a14-a7ca-c755f63d7cf8,1,0,883cdeb0-e747-4157-bbe7-0ebc423a82af,883cdeb0-e747-4157-bbe7-0ebc423a82af,1,0,ba62ac73-91da-4dad-abc7-3cf8acf7e315,ba62ac73-91da-4dad-abc7-3cf8acf7e315,1,0,6a71416d-dba1-4883-9264-597ecf9d6270,6a71416d-dba1-4883-9264-597ecf9d6270,1,0,ce3fc202-7893-4d1b-9c8f-1b3349a5c147,ce3fc202-7893-4d1b-9c8f-1b3349a5c147,1,0,6593baab-fce0-49ed-867e-be242bfc08d7,6593baab-fce0-49ed-867e-be242bfc08d7,1,0,403390cf-d3f8-4dfa-b83d-e2fca4ee0dff,403390cf-d3f8-4dfa-b83d-e2fca4ee0dff,1,0,57aed64d-da61-4c18-af21-dab3afdc5c03,57aed64d-da61-4c18-af21-dab3afdc5c03,1,0,452822b4-a590-44db-ab77-d8c01f7300e7,452822b4-a590-44db-ab77-d8c01f7300e7,1,0,62a71ba7-3226-4d10-8cc9-ac9908a00ae7,62a71ba7-3226-4d10-8cc9-ac9908a00ae7,1,0,6ce1d71d-7548-4ee7-be78-21ae23d5a08d,6ce1d71d-7548-4ee7-be78-21ae23d5a08d,1,0,f5ad6743-b19b-44c4-b3d1-2e39d74a4abd,f5ad6743-b19b-44c4-b3d1-2e39d74a4abd,1,0,4b89b7fb-31d9-43c7-9f7e-b0c31fa3331d,4b89b7fb-31d9-43c7-9f7e-b0c31fa3331d,1,0,19b29d30-e395-42f2-b700-7474bb2cdcb7,19b29d30-e395-42f2-b700-7474bb2cdcb7,1,0,b0deb957-624b-4bcb-824c-76aedf1affe9,b0deb957-624b-4bcb-824c-76aedf1affe9,1,0,9934e608-593d-45d0-9df3-539f0c8fc385,9934e608-593d-45d0-9df3-539f0c8fc385,1,0,80da4126-4319-425f-8427-7d60652cf754,80da4126-4319-425f-8427-7d60652cf754,1,0,05236ace-bcdd-4eb8-a1fb-5843ee311d10,05236ace-bcdd-4eb8-a1fb-5843ee311d10,1,0,0f1b284c-6c9e-4799-bc47-3326c4b7bec2,0f1b284c-6c9e-4799-bc47-3326c4b7bec2,1,0,449060fd-4711-4b9e-93e0-11b35c314fb3,449060fd-4711-4b9e-93e0-11b35c314fb3,1,0,e7efa9d5-ea93-4070-87bb-a4d95116d1b4,e7efa9d5-ea93-4070-87bb-a4d95116d1b4,1,0,0614d340-6524-4715-978d-87ab21377e72,0614d340-6524-4715-978d-87ab21377e72,1,0,d47daac5-ec3b-4d4e-8b01-045a37f7074d,d47daac5-ec3b-4d4e-8b01-045a37f7074d,1,0,9d6ed3b9-35cd-47c0-9dfc-732e5066a071,9d6ed3b9-35cd-47c0-9dfc-732e5066a071,1,0,912cbd30-1ed5-4888-a4b6-98e9215b28e9,912cbd30-1ed5-4888-a4b6-98e9215b28e9,1,0,abf093ce-be63-487d-8be4-be282aa475be,abf093ce-be63-487d-8be4-be282aa475be,1,0,7a910ad6-b922-4716-8140-1540d76296b2,7a910ad6-b922-4716-8140-1540d76296b2,1,0,5189beb9-b939-4f97-aca0-c2f3492ac8b9,5189beb9-b939-4f97-aca0-c2f3492ac8b9,1,0,0b139d7a-b583-4082-b9f2-8f3fb444bd51,0b139d7a-b583-4082-b9f2-8f3fb444bd51,1,0,b8931f98-c1d7-4e9b-be43-065064e7ba95,b8931f98-c1d7-4e9b-be43-065064e7ba95,1,0,ab2b472d-97d5-4c33-86fd-e2cdaedf3f3d,ab2b472d-97d5-4c33-86fd-e2cdaedf3f3d,1,0,60848308-931c-4da3-aa4b-37f6fb4b194f,60848308-931c-4da3-aa4b-37f6fb4b194f,1,0,0761c32c-1de6-4c40-9178-64aeb46b6622,0761c32c-1de6-4c40-9178-64aeb46b6622,1,0,08af8da8-d44b-46f0-a8d3-60421e7b5a1a,08af8da8-d44b-46f0-a8d3-60421e7b5a1a,1,0,54b14504-503b-45f6-9b5d-785b49829425,54b14504-503b-45f6-9b5d-785b49829425,1,0,80d3ee33-1cdc-4af6-85c2-787094526592,80d3ee33-1cdc-4af6-85c2-787094526592,1,0,c8b28660-6cb0-4ef5-85c2-a75da863ba96,c8b28660-6cb0-4ef5-85c2-a75da863ba96,1,0,1cd607b4-49fc-460e-a014-6afe50083b47,1cd607b4-49fc-460e-a014-6afe50083b47,1,0,a215e767-36e9-4408-9d18-7b4be757022a,a215e767-36e9-4408-9d18-7b4be757022a,1,0,a3e262bc-9f0d-480d-a1d1-c2326105d22d,a3e262bc-9f0d-480d-a1d1-c2326105d22d,1,0,8eae0c79-288b-4773-90bb-49299ad45628,8eae0c79-288b-4773-90bb-49299ad45628,1,0,2faa5594-f1b4-4312-b674-82fdf9623105,2faa5594-f1b4-4312-b674-82fdf9623105,1,0,185c1ad3-b5db-49b6-9342-d08e1bf64903,185c1ad3-b5db-49b6-9342-d08e1bf64903,1,0,3c69a4ad-001d-4421-88f6-412e15d710d6,3c69a4ad-001d-4421-88f6-412e15d710d6,1,0,d0373603-5abb-4f7b-8d2f-9f7fb52615aa,d0373603-5abb-4f7b-8d2f-9f7fb52615aa,1,0,f20a35fe-6029-4dc8-b6b4-b098dbce12e8,f20a35fe-6029-4dc8-b6b4-b098dbce12e8,1,0,6a68a08a-ea37-4573-ab9f-ec822f6d250b,6a68a08a-ea37-4573-ab9f-ec822f6d250b,1,0,00e87d04-8104-420b-b2c6-7304889a75b2,00e87d04-8104-420b-b2c6-7304889a75b2,1,0,bde86820-f7bb-463b-97d0-bfa5f8323af0,bde86820-f7bb-463b-97d0-bfa5f8323af0,1,0,b9b24093-810c-4158-846d-e2c7aea54d36,b9b24093-810c-4158-846d-e2c7aea54d36,1,0,289a6aac-dc4e-4fae-8815-853e78d450bb,289a6aac-dc4e-4fae-8815-853e78d450bb,1,0,557e7d89-83ed-45d0-86cc-6e355f14025d,557e7d89-83ed-45d0-86cc-6e355f14025d,1,0,d681b26b-dd8d-46d7-986e-10f05c37a1e4,d681b26b-dd8d-46d7-986e-10f05c37a1e4,1,0,4d3c216e-c04f-4884-8681-1c861c50ce7d,4d3c216e-c04f-4884-8681-1c861c50ce7d,1,0,4a41eee0-c973-4824-a07c-9fcf731f055e,4a41eee0-c973-4824-a07c-9fcf731f055e,1,0,ee756c33-f408-4449-a6bb-3186a0421362,ee756c33-f408-4449-a6bb-3186a0421362,1,0,fbfa8f64-52e4-48f6-b0fb-fd06976dd93d,fbfa8f64-52e4-48f6-b0fb-fd06976dd93d,1,0,6ff66622-4d20-4696-9fe9-4b4faeb21d96,6ff66622-4d20-4696-9fe9-4b4faeb21d96,1,0,46237eec-c206-4d21-883c-27599b9ed38c,46237eec-c206-4d21-883c-27599b9ed38c,1,0,92cbfe14-35c5-440b-9a13-ef8c8ab0630a,92cbfe14-35c5-440b-9a13-ef8c8ab0630a,1,0,8ce759ff-f579-461c-bb1e-9ac2b01e88df,8ce759ff-f579-461c-bb1e-9ac2b01e88df,1,0,8b451909-2c15-48f2-b869-65e7031cc542,8b451909-2c15-48f2-b869-65e7031cc542,1,0,ab6ff81a-56aa-4742-afe4-d7a652e9d2de,ab6ff81a-56aa-4742-afe4-d7a652e9d2de,1,0,7b377fca-4466-476f-9eb2-0b00141103d6,7b377fca-4466-476f-9eb2-0b00141103d6,1,0,9ce5eceb-f366-4035-956e-62721358b154,9ce5eceb-f366-4035-956e-62721358b154,1,0,1685c406-d0cb-4e0a-a3b0-036c8c22942a,1685c406-d0cb-4e0a-a3b0-036c8c22942a,1,0,892dc4c4-a72b-4dbf-af62-9f9ae0e05aa1,892dc4c4-a72b-4dbf-af62-9f9ae0e05aa1,1,0,81db41a6-2580-4a69-b1fd-57cfd48a7efa,81db41a6-2580-4a69-b1fd-57cfd48a7efa,1,0,0db8b3b2-bf24-4006-9897-797084c241ef,0db8b3b2-bf24-4006-9897-797084c241ef,1,0,fd9d34d9-9c9c-4c05-9c08-b93d4b237adf,fd9d34d9-9c9c-4c05-9c08-b93d4b237adf,1,0,381b7dae-6b34-42a7-9fee-2a4af8a1cc18,381b7dae-6b34-42a7-9fee-2a4af8a1cc18,1,0,31e9ca0d-9ae1-4740-a0a6-2739aa29c99f,31e9ca0d-9ae1-4740-a0a6-2739aa29c99f,1,0,20091427-d173-40ca-b2c4-53ee99b0b5ae,20091427-d173-40ca-b2c4-53ee99b0b5ae,1,0,14cbde39-a39a-48e5-9b72-b798a0bcea3f,14cbde39-a39a-48e5-9b72-b798a0bcea3f,1,0,56871c10-e3af-4679-afad-3baa910d73bb,56871c10-e3af-4679-afad-3baa910d73bb,1,0,f81b51c5-57e4-41f8-9ad5-3d2717351b95,f81b51c5-57e4-41f8-9ad5-3d2717351b95,1,0,3c09f0cd-fbec-46ae-95b0-a00cc53c07ef,3c09f0cd-fbec-46ae-95b0-a00cc53c07ef,1,0,de0a39e0-d37d-47c6-a019-e44836edc8d1,de0a39e0-d37d-47c6-a019-e44836edc8d1,1,0,1fdcc1e7-ad53-409e-ba13-84c6429740cd,1fdcc1e7-ad53-409e-ba13-84c6429740cd,1,0,71d544bf-15c1-4581-8baa-ac126308425c,71d544bf-15c1-4581-8baa-ac126308425c,1,0,1bd0b688-d0fb-4ca2-85aa-4bd82b72ccc2,1bd0b688-d0fb-4ca2-85aa-4bd82b72ccc2,1,0,7acfe30e-73cb-465a-88f2-92b7275dc49b,7acfe30e-73cb-465a-88f2-92b7275dc49b,1,0,8e387dac-5029-49da-a013-355df0a51a44,8e387dac-5029-49da-a013-355df0a51a44,1,0,13859664-8307-40e8-855b-557b9cf2f1ec,13859664-8307-40e8-855b-557b9cf2f1ec,1,0,e4397fba-507f-497c-9414-7d08ccd4d799,e4397fba-507f-497c-9414-7d08ccd4d799,1,0,794f5fb5-3b8f-4f45-9250-7a3b9d1db383,794f5fb5-3b8f-4f45-9250-7a3b9d1db383,1,0,f7a89bfc-e3c9-4894-a2df-6c229b4e0fd8,f7a89bfc-e3c9-4894-a2df-6c229b4e0fd8,1,0,1e8b70ce-27fc-418f-b3f3-e6efbce9f7a2,1e8b70ce-27fc-418f-b3f3-e6efbce9f7a2,1,0,d915d338-3e4c-45c3-aef5-a07cf41b05f6,d915d338-3e4c-45c3-aef5-a07cf41b05f6,1,0,28080e64-cd09-410d-9e3e-3ffdb43d3ace,28080e64-cd09-410d-9e3e-3ffdb43d3ace,1,0,978640a2-5c4b-4e21-857e-34f00840fba8,978640a2-5c4b-4e21-857e-34f00840fba8,1,0,da2913e3-a29b-423f-9aae-08fed56a7d90,da2913e3-a29b-423f-9aae-08fed56a7d90,1,0,149e72b8-cc03-4b4f-8ca4-07987600c34d,149e72b8-cc03-4b4f-8ca4-07987600c34d,1,0,7649bd7b-fe8c-4338-80fc-153160a5e538,7649bd7b-fe8c-4338-80fc-153160a5e538,1,0,7779cd6d-8fa1-49cb-9bbc-9dfd0979f3f4,7779cd6d-8fa1-49cb-9bbc-9dfd0979f3f4,1,0,3dec1ae7-90bb-45ab-aa04-48cfbc14742e,3dec1ae7-90bb-45ab-aa04-48cfbc14742e,1,0,6137605e-4850-44ec-b4ee-048bd8e0ec3a,6137605e-4850-44ec-b4ee-048bd8e0ec3a,1,0,ee28aa9b-0f31-4d8b-8444-43b8bc88bd23,ee28aa9b-0f31-4d8b-8444-43b8bc88bd23,1,0,0e6e9372-beb4-478e-9428-71b19a60739b,0e6e9372-beb4-478e-9428-71b19a60739b,1,0,32b11498-542f-46b2-829f-1525936ab7fa,32b11498-542f-46b2-829f-1525936ab7fa,1,0,64afa916-4750-4008-8c6c-2a470fb11283,64afa916-4750-4008-8c6c-2a470fb11283,1,0,f4a85bfb-40c7-4f81-af32-d07b96c53ad0,f4a85bfb-40c7-4f81-af32-d07b96c53ad0,1,0,35354abc-9a76-4ee8-8796-c24b37365ea0,35354abc-9a76-4ee8-8796-c24b37365ea0,1,0,7078977f-31bf-427e-ac37-e309d81fe999,7078977f-31bf-427e-ac37-e309d81fe999,1,0,bb39ae51-be82-4bb5-a30e-2bf2b53be59e,bb39ae51-be82-4bb5-a30e-2bf2b53be59e,1,0,d8854555-9e15-4d82-a1fd-656a848a8e8a,d8854555-9e15-4d82-a1fd-656a848a8e8a,1,0,53191842-ea05-4491-84d7-071cd201992d,53191842-ea05-4491-84d7-071cd201992d,1,0,86c70449-4cf7-4baf-9742-b82b134ed929,86c70449-4cf7-4baf-9742-b82b134ed929,1,0,af3b1881-163a-4c07-a1d9-77ceadf59c77,af3b1881-163a-4c07-a1d9-77ceadf59c77,1,0,d3443b92-32f5-4ac0-8356-062647efe3d8,d3443b92-32f5-4ac0-8356-062647efe3d8,1,0,b78be6fb-7db8-48c8-ba7b-aab1fea34890,b78be6fb-7db8-48c8-ba7b-aab1fea34890,1,0,bd27276a-e80c-4135-b341-f99a816ffe86,bd27276a-e80c-4135-b341-f99a816ffe86,1,0,35306678-147c-4ad1-a3c6-c80a11afa22f,35306678-147c-4ad1-a3c6-c80a11afa22f,1,0,0da75726-ae71-4d83-a696-a774c787a8a2,0da75726-ae71-4d83-a696-a774c787a8a2,1,0,5b30b0e9-f986-49b8-8668-5bb0e09f0cfe,5b30b0e9-f986-49b8-8668-5bb0e09f0cfe,1,0,896a7267-0198-4cbb-b6e6-7aa157c0cc61,896a7267-0198-4cbb-b6e6-7aa157c0cc61,1,0,2005bf54-219b-4111-bff1-e12e2c6dca3e,2005bf54-219b-4111-bff1-e12e2c6dca3e,1,0,abab8f73-d705-4350-b44d-f912649a2190,abab8f73-d705-4350-b44d-f912649a2190,1,0,20c9c25c-f8c9-429f-84bd-543cb809abef,20c9c25c-f8c9-429f-84bd-543cb809abef,1,0,dc5f451e-3275-43a8-9f48-45b83220d461,dc5f451e-3275-43a8-9f48-45b83220d461,1,0,028f5e81-61df-4d13-876d-781c5fd18ee6,028f5e81-61df-4d13-876d-781c5fd18ee6,1,0,3cbb59ef-7f64-4590-8a54-ba01e78283c3,3cbb59ef-7f64-4590-8a54-ba01e78283c3,1,0,a5b83672-2ead-4d0a-a4e5-ddd991f1addc,a5b83672-2ead-4d0a-a4e5-ddd991f1addc,1,0,388eb513-fadb-40cd-8a7b-33b904dd758e,388eb513-fadb-40cd-8a7b-33b904dd758e,1,0,0613c6aa-e1fe-4632-a396-a17ec773158f,0613c6aa-e1fe-4632-a396-a17ec773158f,1,0,1a330987-4c79-4ab7-b250-db8d32c78751,1a330987-4c79-4ab7-b250-db8d32c78751,1,0,b7295e8e-0aa4-4a49-81ea-0594a358e9ca,b7295e8e-0aa4-4a49-81ea-0594a358e9ca,1,0,555062ed-9a04-41d8-877f-0a667e9a08cd,555062ed-9a04-41d8-877f-0a667e9a08cd,1,0,5b1db523-b5cb-4ff8-8662-5feeb4282b4a,5b1db523-b5cb-4ff8-8662-5feeb4282b4a,1,0,ac160e1c-fef7-4625-84e0-964b397f6bdb,ac160e1c-fef7-4625-84e0-964b397f6bdb,1,0,b8946d9c-dda8-4b94-8cbf-db62b647c53e,b8946d9c-dda8-4b94-8cbf-db62b647c53e,1,0,24215916-7732-4030-9f88-163f644e94f7,24215916-7732-4030-9f88-163f644e94f7,1,0,69697945-9748-4cea-a20f-e244b46de2e8,69697945-9748-4cea-a20f-e244b46de2e8,1,0,68538fd1-262c-43ea-b09f-8a66643a0062,68538fd1-262c-43ea-b09f-8a66643a0062,1,0,d042a8e1-a7b9-4f26-abc4-d618bc73e9f5,d042a8e1-a7b9-4f26-abc4-d618bc73e9f5,1,0,82ad24cc-d9f8-440b-a720-e204101d85da,82ad24cc-d9f8-440b-a720-e204101d85da,1,0,aa63c001-c3da-4179-8fd8-fe2ff510511e,aa63c001-c3da-4179-8fd8-fe2ff510511e,1,0,b2e894b0-6443-4a52-95b6-6b564f809680,b2e894b0-6443-4a52-95b6-6b564f809680,1,0,8010065f-aec8-4768-85ec-9eb7b2b01e7e,8010065f-aec8-4768-85ec-9eb7b2b01e7e,1,0,a44348cb-e20c-4afd-8483-3b9c735b352c,a44348cb-e20c-4afd-8483-3b9c735b352c,1,0,ebfe4c74-6e16-4b64-8a52-cea95c446903,ebfe4c74-6e16-4b64-8a52-cea95c446903,1,0,ea9ed37c-7f58-43a8-990c-f1feb5d2d275,ea9ed37c-7f58-43a8-990c-f1feb5d2d275,1,0,d912e472-9553-4b96-8b16-7aaff6c14239,d912e472-9553-4b96-8b16-7aaff6c14239,1,0,b04018b5-a74d-43c9-8519-6cc8aa23fe09,b04018b5-a74d-43c9-8519-6cc8aa23fe09,1,0,8f5af22e-3e73-4a4f-b91e-eccd0f5084fd,8f5af22e-3e73-4a4f-b91e-eccd0f5084fd,1,0,9283277f-2b75-4c3a-810a-8d4071b3afcc,9283277f-2b75-4c3a-810a-8d4071b3afcc,1,0,d03d5b18-57a2-43c0-99ea-8ad9d5788179,d03d5b18-57a2-43c0-99ea-8ad9d5788179,1,0,c491a7fc-14f9-498a-b7dd-575dfc66878e,c491a7fc-14f9-498a-b7dd-575dfc66878e,1,0,db15f8eb-4736-4b47-9cee-3e6883f0888c,db15f8eb-4736-4b47-9cee-3e6883f0888c,1,0,59064eb2-2770-4f1c-96bd-801926fe68ef,59064eb2-2770-4f1c-96bd-801926fe68ef,1,0,df81cc63-26f2-4e66-bf0b-fd083a6a7d7b,df81cc63-26f2-4e66-bf0b-fd083a6a7d7b,1,0,8a8848b8-345a-452d-bf95-28f9c91c7e95,8a8848b8-345a-452d-bf95-28f9c91c7e95,1,0,a9441693-87ca-4157-98e1-63375852755c,a9441693-87ca-4157-98e1-63375852755c,1,0,6303ea55-e8ed-4acc-9717-941eefafc2a9,6303ea55-e8ed-4acc-9717-941eefafc2a9,1,0,5b4e1b83-fc10-4acc-bef7-81c73dbbc453,5b4e1b83-fc10-4acc-bef7-81c73dbbc453,1,0,d0b17206-3949-4513-a47f-02e1a8ba369a,d0b17206-3949-4513-a47f-02e1a8ba369a,1,0,cb4f20d4-13e6-4c27-b491-da7931f4bf05,cb4f20d4-13e6-4c27-b491-da7931f4bf05,1,0,6b2340d7-687f-43a3-8eb8-8ddb86712466,6b2340d7-687f-43a3-8eb8-8ddb86712466,1,0,40b08a20-51a3-438b-ba54-466917ea809f,40b08a20-51a3-438b-ba54-466917ea809f,1,0,9846e2f6-d82a-42a6-bf50-2a9cdf750a8f,9846e2f6-d82a-42a6-bf50-2a9cdf750a8f,1,0,9328da5c-4689-4a60-8136-ae9eac46ab38,9328da5c-4689-4a60-8136-ae9eac46ab38,1,0,ca5d586f-81bb-40ee-b3bd-de854857c984,ca5d586f-81bb-40ee-b3bd-de854857c984,1,0,af22406b-daac-475d-b6a9-577452502b84,af22406b-daac-475d-b6a9-577452502b84,1,0,7a925960-a579-4b06-90e0-5121dc774024,7a925960-a579-4b06-90e0-5121dc774024,1,0,32c10512-7bb8-423b-9503-ab2fa41386a4,32c10512-7bb8-423b-9503-ab2fa41386a4,1,0,888edfc4-8140-4675-b267-c32bf1d8d29d,888edfc4-8140-4675-b267-c32bf1d8d29d,1,0,2abbd53a-0ead-42af-8df6-fde663aea300,2abbd53a-0ead-42af-8df6-fde663aea300,1,0,24611bf9-5492-443a-935c-a0058e86493f,24611bf9-5492-443a-935c-a0058e86493f,1,0,42641296-64da-46e0-a407-de2d492f9c90,42641296-64da-46e0-a407-de2d492f9c90,1,0,b834af0b-086c-445d-a271-7e178c324551,b834af0b-086c-445d-a271-7e178c324551,1,0,ec34befe-3c0b-4a75-b943-840c52e7dda5,ec34befe-3c0b-4a75-b943-840c52e7dda5,1,0,7f18eb86-e9ac-4cb8-a9aa-389f61dff582,7f18eb86-e9ac-4cb8-a9aa-389f61dff582,1,0,b5e81952-e469-4f26-b8d2-90e7d9e7bc1d,b5e81952-e469-4f26-b8d2-90e7d9e7bc1d,1,0,6733f1bd-7878-4a33-8995-c07526e87c1a,6733f1bd-7878-4a33-8995-c07526e87c1a,1,0,f7e73257-fae1-465a-ae74-faaa0273a416,f7e73257-fae1-465a-ae74-faaa0273a416,1,0,73f89524-dbe8-426f-8ee6-1277eb1967cc,73f89524-dbe8-426f-8ee6-1277eb1967cc,1,0,ee7d970c-cef7-4740-a357-1fe78f88a6e6,ee7d970c-cef7-4740-a357-1fe78f88a6e6,1,0,ff18803b-4c3a-4720-a718-7547f04c6e2f,ff18803b-4c3a-4720-a718-7547f04c6e2f,1,0,0e0670d6-d8f7-4728-bd1b-f016fffa0570,0e0670d6-d8f7-4728-bd1b-f016fffa0570,1,0,13beb01d-dd08-4a6d-863b-651e70bbf51f,13beb01d-dd08-4a6d-863b-651e70bbf51f,1,0,a53f6e85-fbf7-4fb1-9301-d63e812fe16c,a53f6e85-fbf7-4fb1-9301-d63e812fe16c,1,0,57a0f5f3-6573-4b35-af25-cea3a25641f1,57a0f5f3-6573-4b35-af25-cea3a25641f1,1,0,0b7c4cb7-5126-4b5e-8941-cd56eaef76a0,0b7c4cb7-5126-4b5e-8941-cd56eaef76a0,1,0,144d5498-bb61-4bec-bef3-85a5a4aec3d5,144d5498-bb61-4bec-bef3-85a5a4aec3d5,1,0,94bc76ae-72a0-418f-98c4-ae0a0326a2da,94bc76ae-72a0-418f-98c4-ae0a0326a2da,1,0,784475ff-eec5-462a-a511-ba31f8374c2e,784475ff-eec5-462a-a511-ba31f8374c2e,1,0,ecaa0af8-549c-4c07-82ff-1c4e02ff15b8,ecaa0af8-549c-4c07-82ff-1c4e02ff15b8,1,0,45a8c780-c067-40d7-bbe9-81f854aacf7a,45a8c780-c067-40d7-bbe9-81f854aacf7a,1,0,57885cac-059a-4a08-aa2c-43b116d2c777,57885cac-059a-4a08-aa2c-43b116d2c777,1,0,c0403df4-b1f2-4d7e-adb5-9ed881c1359b,c0403df4-b1f2-4d7e-adb5-9ed881c1359b,1,0,27e0b5d9-1a4c-45b8-8969-d1d1c39129c1,27e0b5d9-1a4c-45b8-8969-d1d1c39129c1,1,0,56b570b1-93b0-468a-9672-9c71113753f3,56b570b1-93b0-468a-9672-9c71113753f3,1,0,e7b0ae70-0192-456c-9dc5-e66049fa9df2,e7b0ae70-0192-456c-9dc5-e66049fa9df2,1,0,68944d09-618e-4fa3-a7af-8c84218e0ac7,68944d09-618e-4fa3-a7af-8c84218e0ac7,1,0,91b12ce3-e8ba-4c9d-9daa-1d5532500314,91b12ce3-e8ba-4c9d-9daa-1d5532500314,1,0,733dc291-0bef-4fe8-ac9f-63440f0c2ad0,733dc291-0bef-4fe8-ac9f-63440f0c2ad0,1,0,356a8091-4c0b-41d0-b8d2-963b3a807469,356a8091-4c0b-41d0-b8d2-963b3a807469,1,0,5b7b7dc3-dbef-4854-9395-30a3ae4d751c,5b7b7dc3-dbef-4854-9395-30a3ae4d751c,1,0,cb57aabc-eeef-42b4-9bc2-873cebd9618c,cb57aabc-eeef-42b4-9bc2-873cebd9618c,1,0,2fcd2c85-6778-42fa-9bdd-a6ba47497ec0,2fcd2c85-6778-42fa-9bdd-a6ba47497ec0,1,0,52f30ed7-aa16-4ce2-9684-e50229ab0015,52f30ed7-aa16-4ce2-9684-e50229ab0015,1,0,79c2e2bd-f923-42ec-8bdc-3e517e08ee7c,79c2e2bd-f923-42ec-8bdc-3e517e08ee7c,1,0,0526492c-be48-4c84-8d68-19fa1c7e9d6e,0526492c-be48-4c84-8d68-19fa1c7e9d6e,1,0,54ecaf7b-9bc5-483c-96e1-270bcd323590,54ecaf7b-9bc5-483c-96e1-270bcd323590,1,0,2a1f77ba-fa2e-4281-8e68-7ec4ca0261b7,2a1f77ba-fa2e-4281-8e68-7ec4ca0261b7,1,0,58f6f8fa-7473-40f5-973a-6279335d8f33,58f6f8fa-7473-40f5-973a-6279335d8f33,1,0,ec0c3187-de61-4bc8-a52a-7617f47ffb6d,ec0c3187-de61-4bc8-a52a-7617f47ffb6d,1,0,1e71ec59-55a4-45e8-a8c9-f70c2cb56589,1e71ec59-55a4-45e8-a8c9-f70c2cb56589,1,0,fa3632fe-185b-49aa-85ae-dfb721835d40,fa3632fe-185b-49aa-85ae-dfb721835d40,1,0,a4f15108-477c-465e-aaea-cb495ef52cf5,a4f15108-477c-465e-aaea-cb495ef52cf5,1,0,9cda5c2c-f401-4f63-b445-cef160296e48,9cda5c2c-f401-4f63-b445-cef160296e48,1,0,e8ae4a26-3127-43ae-af7a-c2e278d2611d,e8ae4a26-3127-43ae-af7a-c2e278d2611d,1,0,b923c78f-d074-41b4-b832-086686258f19,b923c78f-d074-41b4-b832-086686258f19,1,0,8ff96413-6fdd-4b8d-a181-ea0d8633defc,8ff96413-6fdd-4b8d-a181-ea0d8633defc,1,0,54604ed2-766b-4308-b99e-447817d82799,54604ed2-766b-4308-b99e-447817d82799,1,0,7abdb07b-edbc-4c3b-aa53-afaa92dc9071,7abdb07b-edbc-4c3b-aa53-afaa92dc9071,1,0,ee008096-1ae8-4a64-9d3d-14cb15c8be70,ee008096-1ae8-4a64-9d3d-14cb15c8be70,1,0,a0a85b22-63ee-4a05-8b0d-1feb9ee07b0a,a0a85b22-63ee-4a05-8b0d-1feb9ee07b0a,1,0,a4754a7b-971f-4517-963e-b7cb9d57f86d,a4754a7b-971f-4517-963e-b7cb9d57f86d,1,0,f48b4475-2cd9-41df-962a-6529f84985ca,f48b4475-2cd9-41df-962a-6529f84985ca,1,0,2fbfe405-48e6-4abf-99c2-7f1f66a62b48,2fbfe405-48e6-4abf-99c2-7f1f66a62b48,1,0,5e6637c7-19b5-4ac2-a8e9-d119e49f444e,5e6637c7-19b5-4ac2-a8e9-d119e49f444e,1,0,bf94feb9-edf7-4df8-b5f5-805613663a0a,bf94feb9-edf7-4df8-b5f5-805613663a0a,1,0,6d852a13-c85e-4e84-8396-f91c1ed0596e,6d852a13-c85e-4e84-8396-f91c1ed0596e,1,0,9c2d5313-a4fd-417e-a340-ad4980d0028b,9c2d5313-a4fd-417e-a340-ad4980d0028b,1,0,4fb4a280-9426-4c41-a9ba-11f9d01a0740,4fb4a280-9426-4c41-a9ba-11f9d01a0740,1,0,1591ee7e-870c-4bf7-9450-be84f1b2506f,1591ee7e-870c-4bf7-9450-be84f1b2506f,1,0,7e32c295-a769-4cff-a3eb-992f7031475f,7e32c295-a769-4cff-a3eb-992f7031475f,1,0,5a398637-a06c-4442-9093-a864fa7f049f,5a398637-a06c-4442-9093-a864fa7f049f,1,0,fe4aa694-76c4-49c9-96ce-a2476f4ff58b,fe4aa694-76c4-49c9-96ce-a2476f4ff58b,1,0,115a6019-ef87-4126-8ebf-070c1e882940,115a6019-ef87-4126-8ebf-070c1e882940,1,0,162ce023-b2e1-41dc-bcaf-b8e30caccce0,162ce023-b2e1-41dc-bcaf-b8e30caccce0,1,0,526c688e-a4d4-45f7-8bba-b8ceff38fe27,526c688e-a4d4-45f7-8bba-b8ceff38fe27,1,0,67efa786-312f-4c9c-b970-0320e92069af,67efa786-312f-4c9c-b970-0320e92069af,1,0,5b952e35-1037-4447-8293-6d8889692c8b,5b952e35-1037-4447-8293-6d8889692c8b,1,0,05bc8b4e-8c90-4502-8b16-7b1e7625d569,05bc8b4e-8c90-4502-8b16-7b1e7625d569,1,0,ce34d88d-3017-4197-a962-ea23a6a96d32,ce34d88d-3017-4197-a962-ea23a6a96d32,1,0,2cbc16da-aa67-4ad6-82f8-fa6922447be6,2cbc16da-aa67-4ad6-82f8-fa6922447be6,1,0,19d7a1ba-c343-4575-95da-53dac6d4b2cb,19d7a1ba-c343-4575-95da-53dac6d4b2cb,1,0,6cc8b3a0-3377-4b39-b6b0-69c862a15465,6cc8b3a0-3377-4b39-b6b0-69c862a15465,1,0,acb193f4-52e5-4572-a79b-b825a2f6525f,acb193f4-52e5-4572-a79b-b825a2f6525f,1,0,5d46f719-e468-48e2-b4ec-acb85c710451,5d46f719-e468-48e2-b4ec-acb85c710451,1,0,9fb13bfe-80c7-43c3-b0da-9185ab197ce2,9fb13bfe-80c7-43c3-b0da-9185ab197ce2,1,0,cd80a520-1d1c-4d80-8a4a-360ac1ca98d8,cd80a520-1d1c-4d80-8a4a-360ac1ca98d8,1,0,e9aef0c8-9dc4-4c4a-8288-8b2d9860624d,e9aef0c8-9dc4-4c4a-8288-8b2d9860624d,1,0,733d4494-01e2-46f5-a49b-f289267a90c9,733d4494-01e2-46f5-a49b-f289267a90c9,1,0,5422610d-b92c-4213-a58c-8db067d93b66,5422610d-b92c-4213-a58c-8db067d93b66,1,0,8f59a635-9e0e-470d-8fda-a47a262a59c2,8f59a635-9e0e-470d-8fda-a47a262a59c2,1,0,ffb50eb9-149a-46ec-9472-d8f20ad09810,ffb50eb9-149a-46ec-9472-d8f20ad09810,1,0,5ae3bba3-dc98-4470-a73d-3bd951c0a3f2,5ae3bba3-dc98-4470-a73d-3bd951c0a3f2,1,0,7a6449e2-e90a-4720-a769-192284ef69c1,7a6449e2-e90a-4720-a769-192284ef69c1,1,0,02118b98-2349-46b1-a328-d6e2b5781f7e,02118b98-2349-46b1-a328-d6e2b5781f7e,1,0,67de9cbb-5c80-4cff-bfbe-269a958e08e6,67de9cbb-5c80-4cff-bfbe-269a958e08e6,1,0,2228a457-6805-41ee-85af-5ebca9568bf4,2228a457-6805-41ee-85af-5ebca9568bf4,1,0,96b71795-e230-4ecb-b98d-4feb3f8b9662,96b71795-e230-4ecb-b98d-4feb3f8b9662,1,0,1e14d062-1d5a-4939-8ce6-4d9514990376,1e14d062-1d5a-4939-8ce6-4d9514990376,1,0,f86f24d2-9a83-47ae-9d95-b49a0a295770,f86f24d2-9a83-47ae-9d95-b49a0a295770,1,0,8368e1fa-da0c-4a9b-9d50-a122933c7899,8368e1fa-da0c-4a9b-9d50-a122933c7899,1,0,37986729-a275-4e86-8613-faee9a4f2525,37986729-a275-4e86-8613-faee9a4f2525,1,0,5814cb3a-8f7c-45b4-a590-b69d4912120f,5814cb3a-8f7c-45b4-a590-b69d4912120f,1,0,f06c8396-65ec-4ece-aed0-d45b2d8969b5,f06c8396-65ec-4ece-aed0-d45b2d8969b5,1,0,1faeab7f-7bd7-496d-8882-4aab6c425854,1faeab7f-7bd7-496d-8882-4aab6c425854,1,0,af922fb8-a99c-4154-89fe-d30a4d13024a,af922fb8-a99c-4154-89fe-d30a4d13024a,1,0,24c2f463-2bbb-471f-a409-507afad52caf,24c2f463-2bbb-471f-a409-507afad52caf,1,0,cbb07013-9ae1-43ec-8142-a724d788cb67,cbb07013-9ae1-43ec-8142-a724d788cb67,1,0,2403ac84-b513-4aa0-9a68-8d1ad705ce24,2403ac84-b513-4aa0-9a68-8d1ad705ce24,1,0,952b49e0-e1a1-4130-8fb2-083e3988255c,952b49e0-e1a1-4130-8fb2-083e3988255c,1,0,367b227f-f66e-4cec-9fc3-850bca8bc6c8,367b227f-f66e-4cec-9fc3-850bca8bc6c8,1,0,1a3a8a3a-dc34-4491-883d-57c3fb69840a,1a3a8a3a-dc34-4491-883d-57c3fb69840a,1,0,7fcb9d79-1144-4099-8d7f-309d3bf045a5,7fcb9d79-1144-4099-8d7f-309d3bf045a5,1,0,db418313-8583-48a9-9fec-e2c5de4fdf76,db418313-8583-48a9-9fec-e2c5de4fdf76,1,0,6277a3b5-b158-4b58-a92b-5efdf2dabac0,6277a3b5-b158-4b58-a92b-5efdf2dabac0,1,0,2f26970e-b964-43e2-8d6d-999bbc577689,2f26970e-b964-43e2-8d6d-999bbc577689,1,0,65a50026-88e7-45dd-bb0c-f212218ca093,65a50026-88e7-45dd-bb0c-f212218ca093,1,0,ed9e5fbe-1db8-4fb9-a9fa-bb1927cae196,ed9e5fbe-1db8-4fb9-a9fa-bb1927cae196,1,0,1dd2b2c4-00aa-4029-ba32-fe82aa5c6cbe,1dd2b2c4-00aa-4029-ba32-fe82aa5c6cbe,1,0,2f4ea53a-c84d-4d5f-ae7a-817a20ccd96a,2f4ea53a-c84d-4d5f-ae7a-817a20ccd96a,1,0,b2a39c8a-d884-4dfe-a593-e6788dabbd6b,b2a39c8a-d884-4dfe-a593-e6788dabbd6b,1,0,3d0afdb2-ab8f-43c0-920a-88ed85545b2f,3d0afdb2-ab8f-43c0-920a-88ed85545b2f,1,0,17477f72-0622-445c-9cb7-2c5a5a65bbe0,17477f72-0622-445c-9cb7-2c5a5a65bbe0,1,0,01a1fd57-6c09-4a5b-9f75-da4366159423,01a1fd57-6c09-4a5b-9f75-da4366159423,1,0,71d79b25-3682-4f2c-b6b2-a307e3e72844,71d79b25-3682-4f2c-b6b2-a307e3e72844,1,0,45c1ed0d-202e-4289-820f-e1de0f544386,45c1ed0d-202e-4289-820f-e1de0f544386,1,0,e889e80f-97c9-43c6-8268-d652764fcafb,e889e80f-97c9-43c6-8268-d652764fcafb,1,0,4eb48d3a-e2d5-4db5-b08b-4b6ccc701f77,4eb48d3a-e2d5-4db5-b08b-4b6ccc701f77,1,0,95ccaaf2-f6ca-4540-8a39-3c90121c4236,95ccaaf2-f6ca-4540-8a39-3c90121c4236,1,0,7c920b8b-1dbf-4f7e-99af-1ca784a59a64,7c920b8b-1dbf-4f7e-99af-1ca784a59a64,1,0,f47a9bec-2a9f-4955-a432-acb63a5b0e46,f47a9bec-2a9f-4955-a432-acb63a5b0e46,1,0,1ba73b6b-cb72-4370-a268-279dcd7a54b9,1ba73b6b-cb72-4370-a268-279dcd7a54b9,1,0,49de6b63-a845-4b5a-9818-18a3e0bb6fe8,49de6b63-a845-4b5a-9818-18a3e0bb6fe8,1,0,b787818e-5572-4ef2-ba54-1e9b69569824,b787818e-5572-4ef2-ba54-1e9b69569824,1,0,1e13bd37-61b5-4901-a607-e00e5d1900a8,1e13bd37-61b5-4901-a607-e00e5d1900a8,1,0,395b43e4-c18b-4f68-b99c-aed8d4b8cac9,395b43e4-c18b-4f68-b99c-aed8d4b8cac9,1,0,231d7b21-c00c-4782-b610-d56593be436f,231d7b21-c00c-4782-b610-d56593be436f,1,0,79250d1a-77ff-4015-a5b5-83460b1611e2,79250d1a-77ff-4015-a5b5-83460b1611e2,1,0,60018ee0-71ec-4975-a95d-f6f188748ff2,60018ee0-71ec-4975-a95d-f6f188748ff2,1,0,68d35468-279a-43ef-9d71-fed44a792177,68d35468-279a-43ef-9d71-fed44a792177,1,0,77bec3d8-582a-4156-861b-4902008f014c,77bec3d8-582a-4156-861b-4902008f014c,1,0,bf3304c0-5078-478f-bbf8-6178264c5f26,bf3304c0-5078-478f-bbf8-6178264c5f26,1,0,2ad1caba-7a89-4389-934f-419970260961,2ad1caba-7a89-4389-934f-419970260961,1,0,bfc1a708-662d-4dc1-82b4-7b09bb1b0751,bfc1a708-662d-4dc1-82b4-7b09bb1b0751,1,0,f88c4a72-368c-4f45-bb2c-d18f214a5079,f88c4a72-368c-4f45-bb2c-d18f214a5079,1,0,611876ba-7e6e-40c3-89a9-bb9b19cd1bfb,611876ba-7e6e-40c3-89a9-bb9b19cd1bfb,1,0,9dc2e313-c086-4fd9-83e8-911859ef480d,9dc2e313-c086-4fd9-83e8-911859ef480d,1,0,8a14ced0-9e45-4b3a-a135-11413c3a33c2,8a14ced0-9e45-4b3a-a135-11413c3a33c2,1,0,af7377db-0b27-42f7-a639-e2feb4015412,af7377db-0b27-42f7-a639-e2feb4015412,1,0,e1a200e2-64f3-434c-ae0d-5f24b9d65c9b,e1a200e2-64f3-434c-ae0d-5f24b9d65c9b,1,0,ab7db146-f26a-418a-8c45-e2513bf84e08,ab7db146-f26a-418a-8c45-e2513bf84e08,1,0,ece3bd8d-6616-44d5-9c14-6b3557738872,ece3bd8d-6616-44d5-9c14-6b3557738872,1,0,663a80ba-b97e-4265-a627-4a7d273f9472,663a80ba-b97e-4265-a627-4a7d273f9472,1,0,fbf754c3-ab89-4704-b01a-67f8bcea0c7c,fbf754c3-ab89-4704-b01a-67f8bcea0c7c,1,0,3b0afd55-f08d-4d59-b6df-d7c4d1c52446,3b0afd55-f08d-4d59-b6df-d7c4d1c52446,1,0,4893ad50-df19-4d86-9469-40491ba733c9,4893ad50-df19-4d86-9469-40491ba733c9,1,0,25a65c1e-8e67-4135-843d-1e0da72dfd64,25a65c1e-8e67-4135-843d-1e0da72dfd64,1,0,5724fbd5-4d91-4e6d-ae24-8925a4d83c83,5724fbd5-4d91-4e6d-ae24-8925a4d83c83,1,0,29a6416e-b0f5-4111-8f86-1ba80244e73a,29a6416e-b0f5-4111-8f86-1ba80244e73a,1,0,0f49085a-9b83-4256-be60-f341b2ef132e,0f49085a-9b83-4256-be60-f341b2ef132e,1,0,f44c66d6-cfe2-482f-a921-de3db3cd09ea,f44c66d6-cfe2-482f-a921-de3db3cd09ea,1,0,5ec1b7af-f4bc-4ec1-8f43-85c4f9d146a0,5ec1b7af-f4bc-4ec1-8f43-85c4f9d146a0,1,0,c521bd61-386e-41c8-bcc3-29d54b63cc32,c521bd61-386e-41c8-bcc3-29d54b63cc32,1,0,d46e3424-6d30-4229-9a56-ab256517534a,d46e3424-6d30-4229-9a56-ab256517534a,1,0,09d3633d-8e8c-47f3-8f34-d70eb94577e1,09d3633d-8e8c-47f3-8f34-d70eb94577e1,1,0,fe868143-363b-4da1-889b-98d4dd10a1fd,fe868143-363b-4da1-889b-98d4dd10a1fd,1,0,b791a549-ae94-46f2-8f04-771fdeb4cc54,b791a549-ae94-46f2-8f04-771fdeb4cc54,1,0,4681cb63-c581-4c08-b18c-016d9b478ef2,4681cb63-c581-4c08-b18c-016d9b478ef2,1,0,04055821-03ce-4049-af2c-8670c80517f6,04055821-03ce-4049-af2c-8670c80517f6,1,0,0101305d-62eb-4802-9cd4-d615a518d842,0101305d-62eb-4802-9cd4-d615a518d842,1,0,898d2ba7-631a-4e7a-9bdf-cd2ef411e57a,898d2ba7-631a-4e7a-9bdf-cd2ef411e57a,1,0,1d429511-9446-4102-95f4-df676125e14c,1d429511-9446-4102-95f4-df676125e14c,1,0,bf1fc624-60d7-4a04-bb3a-b6e2882bebfe,bf1fc624-60d7-4a04-bb3a-b6e2882bebfe,1,0,7c424424-9660-462d-9cf2-4c1e6bd284fa,7c424424-9660-462d-9cf2-4c1e6bd284fa,1,0,e118f957-ab2c-473b-ab64-37032f727416,e118f957-ab2c-473b-ab64-37032f727416,1,0,e770e26e-a3a4-487d-b3bb-aeb63d8b7323,e770e26e-a3a4-487d-b3bb-aeb63d8b7323,1,0,21f64e5f-dc94-4ce9-b836-e75646ae3325,21f64e5f-dc94-4ce9-b836-e75646ae3325,1,0,82e8a180-f2e1-406c-9609-89d33504aff2,82e8a180-f2e1-406c-9609-89d33504aff2,1,0,e7437c81-3d5b-466e-880c-8febe4a68e88,e7437c81-3d5b-466e-880c-8febe4a68e88,1,0,99bc26f9-ba56-4c63-9fd1-c2f3d630b93c,99bc26f9-ba56-4c63-9fd1-c2f3d630b93c,1,0,307771e6-bcf7-4016-b369-e1655bbe9e94,307771e6-bcf7-4016-b369-e1655bbe9e94,1,0,bf8c60f7-7dea-4a2c-8ce2-7001a6a37bfa,bf8c60f7-7dea-4a2c-8ce2-7001a6a37bfa,1,0,38fc6a54-846c-40b0-9254-3261f540bf18,38fc6a54-846c-40b0-9254-3261f540bf18,1,0,d9134d0c-56cd-4b8f-ab11-ae37fc306801,d9134d0c-56cd-4b8f-ab11-ae37fc306801,1,0,9408d0ee-bd61-4b95-ac7c-98de139b5f9e,9408d0ee-bd61-4b95-ac7c-98de139b5f9e,1,0,8f2af24b-f5fa-4f6d-831e-28453bdedefc,8f2af24b-f5fa-4f6d-831e-28453bdedefc,1,0,d119e21d-0087-4f22-b3bd-b14707b65330,d119e21d-0087-4f22-b3bd-b14707b65330,1,0,dc9b4072-11de-40fe-bf2a-f7b15af0a250,dc9b4072-11de-40fe-bf2a-f7b15af0a250,1,0,e2cf5ca9-c2a0-4506-89e6-318cad0a48a3,e2cf5ca9-c2a0-4506-89e6-318cad0a48a3,1,0,aa0e290d-21ab-4197-b8f3-cf1f97ab1b98,aa0e290d-21ab-4197-b8f3-cf1f97ab1b98,1,0,eefa9859-4168-4a10-923f-e4a713c99a3b,eefa9859-4168-4a10-923f-e4a713c99a3b,1,0,5aecdfd1-1cd7-4523-be23-7e32fcb01a94,5aecdfd1-1cd7-4523-be23-7e32fcb01a94,1,0,932b1c1a-72eb-49cd-8218-d0ced9c454d8,932b1c1a-72eb-49cd-8218-d0ced9c454d8,1,0,96d70dc4-02bd-47ad-9465-81de6ff5bdc9,96d70dc4-02bd-47ad-9465-81de6ff5bdc9,1,0,38acaf7a-5a77-40bf-ba2a-17b31cccd37d,38acaf7a-5a77-40bf-ba2a-17b31cccd37d,1,0,cb604857-8e49-4f2f-b5c8-2a7d8a3cf8e4,cb604857-8e49-4f2f-b5c8-2a7d8a3cf8e4,1,0,f33e9c76-e523-4f4e-ab4b-3fc1b256d8dd,f33e9c76-e523-4f4e-ab4b-3fc1b256d8dd,1,0,5dd336c4-88c5-4f53-acf0-5f86a658c528,5dd336c4-88c5-4f53-acf0-5f86a658c528,1,0,c723112b-286d-46f1-989d-81252062a025,c723112b-286d-46f1-989d-81252062a025,1,0,67e8b47e-4bad-4b2f-b196-8a9708893051,67e8b47e-4bad-4b2f-b196-8a9708893051,1,0,39bddcde-697c-4e77-adfd-e4a77529ea97,39bddcde-697c-4e77-adfd-e4a77529ea97,1,0,a3b15381-bf9b-4b26-96eb-392fa2cc8223,a3b15381-bf9b-4b26-96eb-392fa2cc8223,1,0,a583e53a-3f3c-48c7-8928-37ce40b2bafe,a583e53a-3f3c-48c7-8928-37ce40b2bafe,1,0,a844dd4a-274a-4894-9446-031dbe006084,a844dd4a-274a-4894-9446-031dbe006084,1,0,9a740f81-5437-47af-8ed9-ea62edcb2ea1,9a740f81-5437-47af-8ed9-ea62edcb2ea1,1,0,cdf54c86-0a1c-4f74-93ee-6d8d8db0a778,cdf54c86-0a1c-4f74-93ee-6d8d8db0a778,1,0,77bdd30f-4933-4bda-9c7a-b0a097da0910,77bdd30f-4933-4bda-9c7a-b0a097da0910,1,0,a8d52851-4293-4fe4-b2cb-f9c8c166ed97,a8d52851-4293-4fe4-b2cb-f9c8c166ed97,1,0,d4879ecc-8f1a-4183-99a8-d6dfc1eed3f8,d4879ecc-8f1a-4183-99a8-d6dfc1eed3f8,1,0,8e9eb604-5f15-4ef5-8906-5bcd57b3d099,8e9eb604-5f15-4ef5-8906-5bcd57b3d099,1,0,a682e9e1-284f-4e32-86b2-6736f159f585,a682e9e1-284f-4e32-86b2-6736f159f585,1,0,84f0bd89-9b86-440f-b942-9b685e22233e,84f0bd89-9b86-440f-b942-9b685e22233e,1,0,f2d508b3-9425-4ce6-86d8-5893ca4a8cd6,f2d508b3-9425-4ce6-86d8-5893ca4a8cd6,1,0,ce61612f-bcbb-4a02-bca0-d88e0ee42bd7,ce61612f-bcbb-4a02-bca0-d88e0ee42bd7,1,0,c1c35035-44cc-4aa1-ae8e-db3513ddc5f3,c1c35035-44cc-4aa1-ae8e-db3513ddc5f3,1,0,ac52baa1-02cb-4ce8-8f4f-1f9441b1cda0,ac52baa1-02cb-4ce8-8f4f-1f9441b1cda0,1,0,fabf8a0b-366f-4f23-9377-315534bb854b,fabf8a0b-366f-4f23-9377-315534bb854b,1,0,7aac6439-64c9-4492-b866-bf91dda82d06,7aac6439-64c9-4492-b866-bf91dda82d06,1,0,6ffe3723-c6df-497b-a3ff-d817fbabfd8c,6ffe3723-c6df-497b-a3ff-d817fbabfd8c,1,0,528a82b7-ef06-4d90-bb32-bd6d76ed6c74,528a82b7-ef06-4d90-bb32-bd6d76ed6c74,1,0,08b86f29-64ef-467a-af1a-d27ffdf621ba,08b86f29-64ef-467a-af1a-d27ffdf621ba,1,0,6483d1ab-c53d-4985-ad7e-b799adbcd9da,6483d1ab-c53d-4985-ad7e-b799adbcd9da,1,0,82f66233-ed13-49ae-ab72-7cf91c88c760,82f66233-ed13-49ae-ab72-7cf91c88c760,1,0,75cddbcd-e960-4164-81d8-ac0a2a36e95b,75cddbcd-e960-4164-81d8-ac0a2a36e95b,1,0,e14d57f4-ae4a-4644-9ec1-a6af1b3e4c41,e14d57f4-ae4a-4644-9ec1-a6af1b3e4c41,1,0,314f8451-ba96-46cd-bf9f-3a87df7d2a5b,314f8451-ba96-46cd-bf9f-3a87df7d2a5b,1,0,d9151001-a911-45c1-a8e6-dcf0da623ed3,d9151001-a911-45c1-a8e6-dcf0da623ed3,1,0,42f4ad3c-3724-4032-82f0-10c8dbe6cc9f,42f4ad3c-3724-4032-82f0-10c8dbe6cc9f,1,0,bbd8b83d-413a-4ffc-8351-e0ec4f4ae619,bbd8b83d-413a-4ffc-8351-e0ec4f4ae619,1,0,c49cef0d-3b71-4e66-9e35-72b94920dae5,c49cef0d-3b71-4e66-9e35-72b94920dae5,1,0,30e06f80-b6d0-4fa9-a346-8e17dbe2fb68,30e06f80-b6d0-4fa9-a346-8e17dbe2fb68,1,0,e589a693-ff50-4c36-ae26-a8fcae966d57,e589a693-ff50-4c36-ae26-a8fcae966d57,1,0,8bacb87e-c2e9-41f5-bae1-c3a6b0e8179f,8bacb87e-c2e9-41f5-bae1-c3a6b0e8179f,1,0,90f023f5-5b48-4f98-bfc6-b704277a355d,90f023f5-5b48-4f98-bfc6-b704277a355d,1,0,99485603-706d-4301-be25-82b1c0ee8f4d,99485603-706d-4301-be25-82b1c0ee8f4d,1,0,e7a28021-c75e-41b2-9974-cf4beee34d28,e7a28021-c75e-41b2-9974-cf4beee34d28,1,0,21e3bdf3-7cec-42de-8ef3-5815b9a1b747,21e3bdf3-7cec-42de-8ef3-5815b9a1b747,1,0,2a603c61-4cbf-4c6d-a0b2-40c835d36737,2a603c61-4cbf-4c6d-a0b2-40c835d36737,1,0,a8d7f071-401b-499e-957c-d077d8002e54,a8d7f071-401b-499e-957c-d077d8002e54,1,0,b6206c73-cf17-4e74-a14d-f2a2ef2b2cc1,b6206c73-cf17-4e74-a14d-f2a2ef2b2cc1,1,0,b363f72f-3629-453c-9f7d-9828ef6de733,b363f72f-3629-453c-9f7d-9828ef6de733,1,0,211a539b-4be9-4816-98f6-f756e65eafd8,211a539b-4be9-4816-98f6-f756e65eafd8,1,0,e2d8167d-3ebf-4771-b9e0-e6382d68cc18,e2d8167d-3ebf-4771-b9e0-e6382d68cc18,1,0,e9b9da80-7806-4c9c-a002-01cfa3109169,e9b9da80-7806-4c9c-a002-01cfa3109169,1,0,a271041d-0203-4ecd-bb39-70256c50192e,a271041d-0203-4ecd-bb39-70256c50192e,1,0,73eff626-a363-4a5a-879e-61ef6ce0726f,73eff626-a363-4a5a-879e-61ef6ce0726f,1,0,acf15b79-a6c4-4c46-8013-50d3b223baf6,acf15b79-a6c4-4c46-8013-50d3b223baf6,1,0,f6a29b80-e4c3-4c4f-8e2c-d4dda851d813,f6a29b80-e4c3-4c4f-8e2c-d4dda851d813,1,0,2d8d5d74-2bc0-4282-af66-e4a37694c147,2d8d5d74-2bc0-4282-af66-e4a37694c147,1,0,cfd31341-287b-4684-9ac0-b28b4e066f15,cfd31341-287b-4684-9ac0-b28b4e066f15,1,0,81de1b0b-7f2d-4098-ae99-061c6a90dc29,81de1b0b-7f2d-4098-ae99-061c6a90dc29,1,0,77c8a065-a8aa-4f39-93b6-c88f4c38ec66,77c8a065-a8aa-4f39-93b6-c88f4c38ec66,1,0,366fa6da-d3bf-4bb0-9a55-a307f9edee6a,366fa6da-d3bf-4bb0-9a55-a307f9edee6a,1,0,dd0610c8-cd87-4fe2-8a1f-70157132785b,dd0610c8-cd87-4fe2-8a1f-70157132785b,1,0,f829e2a9-5bdb-4171-8b32-8d10d5968813,f829e2a9-5bdb-4171-8b32-8d10d5968813,1,0,647ba8f8-57f7-4c19-af59-525517c1e392,647ba8f8-57f7-4c19-af59-525517c1e392,1,0,39062cb3-4ae8-4c0d-889b-038a55179946,39062cb3-4ae8-4c0d-889b-038a55179946,1,0,c62d4212-36ca-4afb-bac9-269b6f64ca51,c62d4212-36ca-4afb-bac9-269b6f64ca51,1,0,5cec5e16-46ad-4f8c-b869-f5b1cc487884,5cec5e16-46ad-4f8c-b869-f5b1cc487884,1,0,ca0363bb-81c2-4fce-b2f0-e8f42d118a74,ca0363bb-81c2-4fce-b2f0-e8f42d118a74,1,0,7aacdf81-49fd-47a3-a36a-c483f1b05872,7aacdf81-49fd-47a3-a36a-c483f1b05872,1,0,857015e2-afb2-403d-bfb7-7acb5080797b,857015e2-afb2-403d-bfb7-7acb5080797b,1,0,5657286b-114b-41de-ab7d-45d0f0d95e2d,5657286b-114b-41de-ab7d-45d0f0d95e2d,1,0,42a0271e-6783-44db-95c1-09805ae01f58,42a0271e-6783-44db-95c1-09805ae01f58,1,0,8628783e-4fad-4dff-8220-9e0ddc8580f8,8628783e-4fad-4dff-8220-9e0ddc8580f8,1,0,356fc245-3034-42d1-84d0-632c6dc7a3d5,356fc245-3034-42d1-84d0-632c6dc7a3d5,1,0,07462664-6b58-4f5a-9b3f-2e5c376f17df,07462664-6b58-4f5a-9b3f-2e5c376f17df,1,0,6f23e946-f700-424b-b9bf-3a9c8846908d,6f23e946-f700-424b-b9bf-3a9c8846908d,1,0,f3ef5989-a848-4a7f-8ac5-0eca882a6aa1,f3ef5989-a848-4a7f-8ac5-0eca882a6aa1,1,0,4f5087ab-cc60-4d1e-ba83-a319536bf8ba,4f5087ab-cc60-4d1e-ba83-a319536bf8ba,1,0,07d0d6e9-e0a7-4543-9668-3850c1e0a15c,07d0d6e9-e0a7-4543-9668-3850c1e0a15c,1,0,c656771c-dcb7-4c78-9a16-e62806d5bb5a,c656771c-dcb7-4c78-9a16-e62806d5bb5a,1,0,ec42c45c-18ca-44b0-9c59-1cb204552a43,ec42c45c-18ca-44b0-9c59-1cb204552a43,1,0,2aafb1a1-4321-47e9-9783-03ab616a2873,2aafb1a1-4321-47e9-9783-03ab616a2873,1,0,71109997-6da0-4eaf-bbf2-f94fa24f37cc,71109997-6da0-4eaf-bbf2-f94fa24f37cc,1,0,a3deeef2-f8a2-462f-a57f-87d89e4ec12a,a3deeef2-f8a2-462f-a57f-87d89e4ec12a,1,0,d601281c-379d-4a9d-843e-478fd6567415,d601281c-379d-4a9d-843e-478fd6567415,1,0,fd9b3f7d-d25d-4ecb-8b87-218d5ccf1f7b,fd9b3f7d-d25d-4ecb-8b87-218d5ccf1f7b,1,0,427e6f15-334e-42be-9554-895d8f7ebfc6,427e6f15-334e-42be-9554-895d8f7ebfc6,1,0,02abb5e3-9d4e-4c45-af19-71796966ed19,02abb5e3-9d4e-4c45-af19-71796966ed19,1,0,e85a4314-7b63-4294-9bd0-ff77e3ae7c1e,e85a4314-7b63-4294-9bd0-ff77e3ae7c1e,1,0,36bc8523-41a5-48ff-9bd0-758d078c4408,36bc8523-41a5-48ff-9bd0-758d078c4408,1,0,94ca1b45-3cf0-4857-8299-999c93f4fb56,94ca1b45-3cf0-4857-8299-999c93f4fb56,1,0,ee8419c6-79ca-4546-9a66-bacaa08d2a73,ee8419c6-79ca-4546-9a66-bacaa08d2a73,1,0,e36ddb60-2f21-4c5f-b96c-947bcf2af42a,e36ddb60-2f21-4c5f-b96c-947bcf2af42a,1,0,d4a0ca3b-3985-4ba2-9e96-1c5baed28b46,d4a0ca3b-3985-4ba2-9e96-1c5baed28b46,1,0,ada11ea2-94d5-4172-a383-a51774599568,ada11ea2-94d5-4172-a383-a51774599568,1,0,50515bbc-43ee-4b00-bfc5-105b7981bd8f,50515bbc-43ee-4b00-bfc5-105b7981bd8f,1,0,1ea080b0-0a11-4152-b8bb-4918bc142a23,1ea080b0-0a11-4152-b8bb-4918bc142a23,1,0,a21cd1c1-4649-4dc2-9dbd-a913f2d6ca75,a21cd1c1-4649-4dc2-9dbd-a913f2d6ca75,1,0,6930e471-7935-4d68-a980-2acde93ba801,6930e471-7935-4d68-a980-2acde93ba801,1,0,2c425fa5-b10b-4a6f-926a-5cb4c1f2d491,2c425fa5-b10b-4a6f-926a-5cb4c1f2d491,1,0,5135cc48-c749-4acb-a225-d110f386f482,5135cc48-c749-4acb-a225-d110f386f482,1,0,15e6f31b-556a-4f47-9f40-2f69ac7fcb43,15e6f31b-556a-4f47-9f40-2f69ac7fcb43,1,0,53c4c3b2-9257-4d02-8df8-6b55fe9abdae,53c4c3b2-9257-4d02-8df8-6b55fe9abdae,1,0,d2dba2ae-e987-4c9d-a289-3dc19afa87cd,d2dba2ae-e987-4c9d-a289-3dc19afa87cd,1,0,2e9fa546-96fb-4ecb-b933-7921e131e89b,2e9fa546-96fb-4ecb-b933-7921e131e89b,1,0,4645b1ad-eb8f-484c-b29c-2093d9ef9dba,4645b1ad-eb8f-484c-b29c-2093d9ef9dba,1,0,637a132b-1a88-44ba-b45f-ed4ed1ac1001,637a132b-1a88-44ba-b45f-ed4ed1ac1001,1,0,699f734b-43d2-4351-bff8-e0e21e164a42,699f734b-43d2-4351-bff8-e0e21e164a42,1,0,95f0792a-7ac4-450a-b05c-219741e61abd,95f0792a-7ac4-450a-b05c-219741e61abd,1,0,742a2e8c-496e-4e02-931d-d33f7afe07a5,742a2e8c-496e-4e02-931d-d33f7afe07a5,1,0,c3efa853-cd29-4618-929f-e3bec33dfd65,c3efa853-cd29-4618-929f-e3bec33dfd65,1,0,62185c28-3d24-487a-9441-b309dcf11e31,62185c28-3d24-487a-9441-b309dcf11e31,1,0,9f264aeb-664d-4724-8248-11873d63ef3b,9f264aeb-664d-4724-8248-11873d63ef3b,1,0,b926d058-53a9-4eea-b4f9-98e77f798dd9,b926d058-53a9-4eea-b4f9-98e77f798dd9,1,0,495e2c77-4868-4191-ac18-f94e55a5982e,495e2c77-4868-4191-ac18-f94e55a5982e,1,0,20191a65-322c-457d-85f5-ed1258b6fe8e,20191a65-322c-457d-85f5-ed1258b6fe8e,1,0,d71ca3bc-e41a-44d9-afe4-c68f1211b3a1,d71ca3bc-e41a-44d9-afe4-c68f1211b3a1,1,0,23b46ecd-14dc-4cc5-8ff0-c676a8337aee,23b46ecd-14dc-4cc5-8ff0-c676a8337aee,1,0,769c60aa-44f4-4c98-a461-d3f5c2b67f61,769c60aa-44f4-4c98-a461-d3f5c2b67f61,1,0,f9809c99-0eaa-4249-967c-a4bef4763277,f9809c99-0eaa-4249-967c-a4bef4763277,1,0,37fa88a0-f2c1-455f-a28d-74165e8b933d,37fa88a0-f2c1-455f-a28d-74165e8b933d,1,0,e4476f09-909b-49f7-8e01-72eea8ceaca6,e4476f09-909b-49f7-8e01-72eea8ceaca6,1,0,2861412c-46f0-454e-b81d-fe081afb5c7a,2861412c-46f0-454e-b81d-fe081afb5c7a,1,0,2b4ece05-b694-42e9-8239-55722fd84294,2b4ece05-b694-42e9-8239-55722fd84294,1,0,6564ce89-134f-4726-8693-fd93aad46180,6564ce89-134f-4726-8693-fd93aad46180,1,0,0d743731-da5d-4c99-b19f-e93c69b77e14,0d743731-da5d-4c99-b19f-e93c69b77e14,1,0,d6f15367-23e2-4766-bc7c-8acd0063aa0c,d6f15367-23e2-4766-bc7c-8acd0063aa0c,1,0,966b1bde-5b0c-446d-b38b-dc037e2ff7ad,966b1bde-5b0c-446d-b38b-dc037e2ff7ad,1,0,fa4c5665-4d73-4db2-a055-8c1c8a302f82,fa4c5665-4d73-4db2-a055-8c1c8a302f82,1,0,e3e0caa1-6d3f-45a6-9043-d58a34f35b8f,e3e0caa1-6d3f-45a6-9043-d58a34f35b8f,1,0,9100b286-8ae9-4de3-b116-5ce0fa95b80c,9100b286-8ae9-4de3-b116-5ce0fa95b80c,1,0,3d315df6-e000-4cbd-810d-0b26c0d1bc54,3d315df6-e000-4cbd-810d-0b26c0d1bc54,1,0,fa429302-ccaf-4c89-8a11-3a1d30817c00,fa429302-ccaf-4c89-8a11-3a1d30817c00,1,0,9b4c49ce-93da-439a-8d67-f3774e92800a,9b4c49ce-93da-439a-8d67-f3774e92800a,1,0,5f8fa827-7017-4b45-b458-3571b8b611f5,5f8fa827-7017-4b45-b458-3571b8b611f5,1,0,79749167-2912-4e06-9deb-7915a1b4390d,79749167-2912-4e06-9deb-7915a1b4390d,1,0,1c93fcd3-53a1-403f-a30b-454fbc941d55,1c93fcd3-53a1-403f-a30b-454fbc941d55,1,0,0fc54be4-2e19-45cf-b62f-7cbc70a70d5f,0fc54be4-2e19-45cf-b62f-7cbc70a70d5f,1,0,adec3963-b22f-4463-a3f4-c9ec27d187a8,adec3963-b22f-4463-a3f4-c9ec27d187a8,1,0,d8dae0c8-8e11-44bf-bf60-d316220f3e82,d8dae0c8-8e11-44bf-bf60-d316220f3e82,1,0,12afec4d-1728-4aa8-86e5-23cd2f1572b3,12afec4d-1728-4aa8-86e5-23cd2f1572b3,1,0,16bc197b-5a2f-43f4-8ba0-ffabd9289f5c,16bc197b-5a2f-43f4-8ba0-ffabd9289f5c,1,0,ee0c3960-d1bf-411f-a51f-e6e27dabea87,ee0c3960-d1bf-411f-a51f-e6e27dabea87,1,0,d7fb9441-1aef-4257-af3f-7f16340ac85e,d7fb9441-1aef-4257-af3f-7f16340ac85e,1,0,d07c094c-2795-4e0c-b030-bdb82be7ba6d,d07c094c-2795-4e0c-b030-bdb82be7ba6d,1,0,62637860-2013-4f9d-9aed-7cbb0dce8983,62637860-2013-4f9d-9aed-7cbb0dce8983,1,0,331217f6-7ec2-425d-93bd-f2979c5f2e05,331217f6-7ec2-425d-93bd-f2979c5f2e05,1,0,7d5b2b73-27e6-4a61-9558-eb2410eb9f2f,7d5b2b73-27e6-4a61-9558-eb2410eb9f2f,1,0,d754ed75-2a32-4b86-a153-7b50c39f9836,d754ed75-2a32-4b86-a153-7b50c39f9836,1,0,b81f3ee1-66f7-4626-a35b-ef85388c678e,b81f3ee1-66f7-4626-a35b-ef85388c678e,1,0,2ad04793-c162-4915-a260-ca4da535cdac,2ad04793-c162-4915-a260-ca4da535cdac,1,0,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,cfa55ab3-1335-4712-8352-03c2f0277708,cfa55ab3-1335-4712-8352-03c2f0277708,1,0,fb176f8b-edb9-4e4b-926d-dabe9552bfa1,fb176f8b-edb9-4e4b-926d-dabe9552bfa1,1,0,cd5c52d4-f832-4a3b-b4c7-b4f3e0c98222,cd5c52d4-f832-4a3b-b4c7-b4f3e0c98222,1,0,e268a337-f576-4ec2-8a22-0500b79b2441,e268a337-f576-4ec2-8a22-0500b79b2441,1,0,eb33a8fa-75a6-4926-a025-05bc0abe4374,eb33a8fa-75a6-4926-a025-05bc0abe4374,1,0,c352da94-ea64-44b1-b2df-2c4ed9e2efc5,c352da94-ea64-44b1-b2df-2c4ed9e2efc5,1,0,6babd40a-8b8f-454b-b4a4-7cf2854f49a2,6babd40a-8b8f-454b-b4a4-7cf2854f49a2,1,0,bf480259-6e72-4ad1-ac41-0b0d41a75387,bf480259-6e72-4ad1-ac41-0b0d41a75387,1,0,a41f060a-f0f6-4940-960b-5056082b2c45,a41f060a-f0f6-4940-960b-5056082b2c45,1,0,5d45a926-513f-4bbc-a002-54a2db94b297,5d45a926-513f-4bbc-a002-54a2db94b297,1,0,73f5ce9e-d5a7-45c0-965a-8af1d776a98a,73f5ce9e-d5a7-45c0-965a-8af1d776a98a,1,0,073e14d4-5d43-428b-a9a7-985d173e94c7,073e14d4-5d43-428b-a9a7-985d173e94c7,1,0,61dc318a-c17d-402e-bf64-a0c0a63a1c93,61dc318a-c17d-402e-bf64-a0c0a63a1c93,1,0,c4b0c101-8cd9-441c-b94c-9dfa1ad58d45,c4b0c101-8cd9-441c-b94c-9dfa1ad58d45,1,0,2394775b-8910-4667-9c74-e1606e0b13bc,2394775b-8910-4667-9c74-e1606e0b13bc,1,0,43c88ffd-a036-4563-890b-bdc60180e841,43c88ffd-a036-4563-890b-bdc60180e841,1,0,af6e5e8e-6482-4820-a810-9e275ae039bf,af6e5e8e-6482-4820-a810-9e275ae039bf,1,0,fe3ccb8b-fee7-4825-a7bc-4b0fd432d382,fe3ccb8b-fee7-4825-a7bc-4b0fd432d382,1,0,7690620b-21d9-463a-8c22-60844927b4a0,7690620b-21d9-463a-8c22-60844927b4a0,1,0,e7f96a15-9f62-4a7f-85f3-06ba5d30b130,e7f96a15-9f62-4a7f-85f3-06ba5d30b130,1,0,b1db3255-38da-4684-b44e-4e2e9ee1dc35,b1db3255-38da-4684-b44e-4e2e9ee1dc35,1,0,4761f89b-7894-4dca-83b0-3be2d0828781,4761f89b-7894-4dca-83b0-3be2d0828781,1,0,573ff1f2-0ef5-4962-a0f6-eb84d430fe03,573ff1f2-0ef5-4962-a0f6-eb84d430fe03,1,0,7236d52f-9068-45ad-8b92-a7319e737e08,7236d52f-9068-45ad-8b92-a7319e737e08,1,0,3b0b708f-1b6c-4eb2-a2ad-86c088d9f1bf,3b0b708f-1b6c-4eb2-a2ad-86c088d9f1bf,1,0,9db23e96-d13a-4847-941a-462f64d0619d,9db23e96-d13a-4847-941a-462f64d0619d,1,0,7575fd54-c91b-4220-a2ef-2cf533f60426,7575fd54-c91b-4220-a2ef-2cf533f60426,1,0,1b751f19-bb0c-40c2-a5d1-068544c36c6b,1b751f19-bb0c-40c2-a5d1-068544c36c6b,1,0,26e2c83b-8873-4ad3-9c50-e94421473a43,26e2c83b-8873-4ad3-9c50-e94421473a43,1,0,f0b2ec05-8e01-4ccf-b927-671329a9013b,f0b2ec05-8e01-4ccf-b927-671329a9013b,1,0,ab442b11-2482-4f80-ac82-01966e0657ec,ab442b11-2482-4f80-ac82-01966e0657ec,1,0,14fe4d39-81a1-470e-9724-6642ce34ad89,14fe4d39-81a1-470e-9724-6642ce34ad89,1,0,457578ab-dfe2-4419-8d8a-64283b341f42,457578ab-dfe2-4419-8d8a-64283b341f42,1,0,67ef6671-f537-46bf-88e6-f5bcf34a17a4,67ef6671-f537-46bf-88e6-f5bcf34a17a4,1,0,de778ca7-feaf-4531-80ae-11a534c56928,de778ca7-feaf-4531-80ae-11a534c56928,1,0,0dfbe7a9-9c2e-4cbd-ac53-3b547fd73e91,0dfbe7a9-9c2e-4cbd-ac53-3b547fd73e91,1,0,0a76a84d-e883-477e-8b87-7bf984cdc1cf,0a76a84d-e883-477e-8b87-7bf984cdc1cf,1,0,2b6c4184-6d7d-48e5-bd4e-ad31e63398d6,2b6c4184-6d7d-48e5-bd4e-ad31e63398d6,1,0,86df8648-e195-4661-99ee-6052788eb276,86df8648-e195-4661-99ee-6052788eb276,1,0,a22cf6e9-1157-4be5-8d30-aa9bbf2b5e6e,a22cf6e9-1157-4be5-8d30-aa9bbf2b5e6e,1,0,35133725-9647-42dc-a76a-2e62b2918ac4,35133725-9647-42dc-a76a-2e62b2918ac4,1,0,fa9572ee-0303-4421-9125-70cf3dd5a8c7,fa9572ee-0303-4421-9125-70cf3dd5a8c7,1,0,4cdd7920-0c49-4950-b92f-fdf6e34578b2,4cdd7920-0c49-4950-b92f-fdf6e34578b2,1,0,0af48650-5fef-4a5b-8ac8-38a9ded23bd4,0af48650-5fef-4a5b-8ac8-38a9ded23bd4,1,0,c7b883dc-6c26-4eb5-bc19-7919ad57da27,c7b883dc-6c26-4eb5-bc19-7919ad57da27,1,0,7fc37008-c378-4a70-a9a9-07543c7248a6,7fc37008-c378-4a70-a9a9-07543c7248a6,1,0,6410853e-a17e-44db-b8cc-bfefd7c4d239,6410853e-a17e-44db-b8cc-bfefd7c4d239,1,0,df042e4e-01a6-4480-a9c5-c0d7a454bb41,df042e4e-01a6-4480-a9c5-c0d7a454bb41,1,0,5a4abb96-8a18-4249-9fbb-7270fe2ba25b,5a4abb96-8a18-4249-9fbb-7270fe2ba25b,1,0,6852c584-d989-418d-8d18-255492891ef0,6852c584-d989-418d-8d18-255492891ef0,1,0,6a4972f1-012c-438b-b1d3-81e7f6da3ddd,6a4972f1-012c-438b-b1d3-81e7f6da3ddd,1,0,ff7cfd75-e0ba-49a3-92e1-33ea26df46e2,ff7cfd75-e0ba-49a3-92e1-33ea26df46e2,1,0,bc37fc81-6a86-4e72-b75a-abb75bddc4b3,bc37fc81-6a86-4e72-b75a-abb75bddc4b3,1,0,ff830967-faa9-415f-aa6e-8d27779f91f8,ff830967-faa9-415f-aa6e-8d27779f91f8,1,0,34dd0dd6-880c-4a90-9b9c-0503c8dc4ef3,34dd0dd6-880c-4a90-9b9c-0503c8dc4ef3,1,0,88618d0f-97af-4055-a490-561d4b8065a7,88618d0f-97af-4055-a490-561d4b8065a7,1,0,faffa228-4f4f-43f6-99b9-ed8c93af85c0,faffa228-4f4f-43f6-99b9-ed8c93af85c0,1,0,7b816ca0-ba60-4637-8348-23b26ad23e3f,7b816ca0-ba60-4637-8348-23b26ad23e3f,1,0,814a6db4-a43c-44e6-ac44-11983642c5ad,814a6db4-a43c-44e6-ac44-11983642c5ad,1,0,0bd74786-e018-4a66-b994-cdb439c57657,0bd74786-e018-4a66-b994-cdb439c57657,1,0,f50fcf2b-90bb-4d73-9fda-f4575e7682fa,f50fcf2b-90bb-4d73-9fda-f4575e7682fa,1,0,a01b8078-a6cd-4184-9317-2f1e0bcefb3a,a01b8078-a6cd-4184-9317-2f1e0bcefb3a,1,0,54a279b1-9e6a-49b0-8fda-e2807cf3a2a3,54a279b1-9e6a-49b0-8fda-e2807cf3a2a3,1,0,09502176-c53d-4525-b8ed-32d0a2e21a5d,09502176-c53d-4525-b8ed-32d0a2e21a5d,1,0,75ad984e-d41f-4591-b207-e8a4b05757a7,75ad984e-d41f-4591-b207-e8a4b05757a7,1,0,3f020f90-7aeb-4b21-ad71-4572ac796d4c,3f020f90-7aeb-4b21-ad71-4572ac796d4c,1,0,759e2ba0-2941-4cc1-8409-50b8a3620058,759e2ba0-2941-4cc1-8409-50b8a3620058,1,0,491cf25d-091e-4e09-b145-92d7073326cf,491cf25d-091e-4e09-b145-92d7073326cf,1,0,9b9d4d10-a4f2-4b0d-a63a-15d55f30fb26,9b9d4d10-a4f2-4b0d-a63a-15d55f30fb26,1,0,579f18ce-a7ce-4eb8-a4e3-a134a9a27bc1,579f18ce-a7ce-4eb8-a4e3-a134a9a27bc1,1,0,e7d05eca-2fdd-4cbb-8e2c-537525326ffe,e7d05eca-2fdd-4cbb-8e2c-537525326ffe,1,0,900bc96e-fbcc-473e-970c-96f561420f8e,900bc96e-fbcc-473e-970c-96f561420f8e,1,0,c3bb7b85-1e90-45c4-9bc1-39bbd253d498,c3bb7b85-1e90-45c4-9bc1-39bbd253d498,1,0,21d5a0b0-9a2b-4989-a50a-781645513179,21d5a0b0-9a2b-4989-a50a-781645513179,1,0,22df0fa4-cb1c-45a2-bcce-d32ed44e462a,22df0fa4-cb1c-45a2-bcce-d32ed44e462a,1,0,d97c6204-3656-4591-aea9-6ebedffe1247,d97c6204-3656-4591-aea9-6ebedffe1247,1,0,7caabe33-184f-45db-bef4-59d4e9cd2394,7caabe33-184f-45db-bef4-59d4e9cd2394,1,0,3255033a-e922-412e-a825-a3e8bd284703,3255033a-e922-412e-a825-a3e8bd284703,1,0,1aa65c35-e8a0-4c8a-90a3-48b62314cb19,1aa65c35-e8a0-4c8a-90a3-48b62314cb19,1,0,f250f992-ad5a-4dab-ad38-240604adb0c4,f250f992-ad5a-4dab-ad38-240604adb0c4,1,0,c4a7efca-f27d-4fdd-86ab-cc22a2a96fb2,c4a7efca-f27d-4fdd-86ab-cc22a2a96fb2,1,0,e63671f6-c96d-4ea4-8300-af7dbd0d016f,e63671f6-c96d-4ea4-8300-af7dbd0d016f,1,0,2c511469-0df6-470f-a808-decb275e8b1a,2c511469-0df6-470f-a808-decb275e8b1a,1,0,1bbb289c-a78a-47d0-b082-c2225ae1dc83,1bbb289c-a78a-47d0-b082-c2225ae1dc83,1,0,99b40f9f-f8f1-4779-8afc-59d30612f3d6,99b40f9f-f8f1-4779-8afc-59d30612f3d6,1,0,6131e875-3254-4281-9343-9118564c5451,6131e875-3254-4281-9343-9118564c5451,1,0,69622ff8-8a23-42fc-b63d-5097e3f636ac,69622ff8-8a23-42fc-b63d-5097e3f636ac,1,0,b88450cc-0dd4-4881-b3d9-a9e4e07e08f5,b88450cc-0dd4-4881-b3d9-a9e4e07e08f5,1,0,ef326bd8-1570-455e-ae8c-063b5578ad15,ef326bd8-1570-455e-ae8c-063b5578ad15,1,0,3713c76d-6ff7-4d45-9f15-d061bdf7dee2,3713c76d-6ff7-4d45-9f15-d061bdf7dee2,1,0,cb6d4979-2d70-4ceb-af08-deb2b19daf14,cb6d4979-2d70-4ceb-af08-deb2b19daf14,1,0,bf30b754-84fb-4104-b52b-a4f7df6fba12,bf30b754-84fb-4104-b52b-a4f7df6fba12,1,0,7bbd0835-b3e9-40cb-a424-670828b60bbb,7bbd0835-b3e9-40cb-a424-670828b60bbb,1,0,3e2138ea-48f9-4a60-8f22-53933bea49db,3e2138ea-48f9-4a60-8f22-53933bea49db,1,0,16bda2eb-eab8-4230-b89f-517fb943e009,16bda2eb-eab8-4230-b89f-517fb943e009,1,0,00964512-297f-4b8b-8def-8e4fc0eba991,00964512-297f-4b8b-8def-8e4fc0eba991,1,0,4185fea3-baba-4ba5-8019-9023b3011d4d,4185fea3-baba-4ba5-8019-9023b3011d4d,1,0,ea790035-92d6-445e-9fa3-08e565634d2b,ea790035-92d6-445e-9fa3-08e565634d2b,1,0,cce8900a-51eb-487d-b380-227d1b9d3943,cce8900a-51eb-487d-b380-227d1b9d3943,1,0,c043c36c-90c6-483b-bc20-7c2d85109b90,c043c36c-90c6-483b-bc20-7c2d85109b90,1,0,a1e619a6-3bb2-468d-a225-c88ccc3b71f5,a1e619a6-3bb2-468d-a225-c88ccc3b71f5,1,0,91d2d40a-c271-412c-b344-1fc98b94ba21,91d2d40a-c271-412c-b344-1fc98b94ba21,1,0,7ce47046-aee8-4809-bac9-a98930a844e1,7ce47046-aee8-4809-bac9-a98930a844e1,1,0,f480b8b9-ecec-4207-a0aa-12c5be4c2250,f480b8b9-ecec-4207-a0aa-12c5be4c2250,1,0,32717d25-6644-4903-8950-03e4c9b1a8fe,32717d25-6644-4903-8950-03e4c9b1a8fe,1,0,3644d8f3-db88-4fce-a851-39c115acfe03,3644d8f3-db88-4fce-a851-39c115acfe03,1,0,4653da74-34b2-47b9-ad88-efd761d6f1e9,4653da74-34b2-47b9-ad88-efd761d6f1e9,1,0,abf8a23d-45c3-4feb-8df2-279b709d7722,abf8a23d-45c3-4feb-8df2-279b709d7722,1,0,b0cd056f-c601-4d07-89c4-f7137b88bab6,b0cd056f-c601-4d07-89c4-f7137b88bab6,1,0,5cc3ebef-8f09-443c-b131-e5c3a9f7d260,5cc3ebef-8f09-443c-b131-e5c3a9f7d260,1,0,b9a21b8f-8a95-4c86-9ab2-ee6c90164e18,b9a21b8f-8a95-4c86-9ab2-ee6c90164e18,1,0,96ed4d39-3bdc-480f-af86-218f22000514,96ed4d39-3bdc-480f-af86-218f22000514,1,0,c9f72e74-22ac-4dc0-8462-0aa7819a9342,c9f72e74-22ac-4dc0-8462-0aa7819a9342,1,0,ca650484-293f-403a-b916-5ec7c3a8969e,ca650484-293f-403a-b916-5ec7c3a8969e,1,0,b71e706d-623e-4039-9bf0-24f151d861d8,b71e706d-623e-4039-9bf0-24f151d861d8,1,0,528f4823-33d8-49bd-a8fe-756a08a107c2,528f4823-33d8-49bd-a8fe-756a08a107c2,1,0,4869095b-b76e-45ca-b77d-0e74f59673f0,4869095b-b76e-45ca-b77d-0e74f59673f0,1,0,bcca2442-448b-4760-923b-cc9621ecb441,bcca2442-448b-4760-923b-cc9621ecb441,1,0,ba7657df-429a-4737-b787-19ef09fdebb2,ba7657df-429a-4737-b787-19ef09fdebb2,1,0,867d72be-f406-45a5-a511-b90459683f11,867d72be-f406-45a5-a511-b90459683f11,1,0,88b22e62-c144-401f-9635-3fb4d914772e,88b22e62-c144-401f-9635-3fb4d914772e,1,0,efeb2914-6604-403a-a11e-5cb995ab2bc9,efeb2914-6604-403a-a11e-5cb995ab2bc9,1,0,4c2dd77f-adc7-4f11-8e8f-1f8e41e6c84b,4c2dd77f-adc7-4f11-8e8f-1f8e41e6c84b,1,0,8f2b8a8e-4cd3-45e3-89ae-1cc4bd0ff30a,8f2b8a8e-4cd3-45e3-89ae-1cc4bd0ff30a,1,0,24b3aecc-f92f-475b-862e-83dd6d6aa2b9,24b3aecc-f92f-475b-862e-83dd6d6aa2b9,1,0,8525d945-08aa-4928-8dca-4e172ea94328,8525d945-08aa-4928-8dca-4e172ea94328,1,0,de506523-241a-4845-9259-37066afbf16a,de506523-241a-4845-9259-37066afbf16a,1,0,0510206f-eef0-4a5e-aeb7-d53c26d34adb,0510206f-eef0-4a5e-aeb7-d53c26d34adb,1,0,e616e007-43e7-4740-a083-b85f5435718a,e616e007-43e7-4740-a083-b85f5435718a,1,0,82be906c-bb06-40ea-b908-54574b0b4848,82be906c-bb06-40ea-b908-54574b0b4848,1,0,727da5b1-e054-4832-8e44-f5d5e56f52e5,727da5b1-e054-4832-8e44-f5d5e56f52e5,1,0,6135ffd5-1510-4aa8-8bf5-d7c0ca624414,6135ffd5-1510-4aa8-8bf5-d7c0ca624414,1,0,1f8cb390-2cbb-4a88-96ee-b31695b73d78,1f8cb390-2cbb-4a88-96ee-b31695b73d78,1,0,6feaad7c-9680-4341-b215-14581e2e2b37,6feaad7c-9680-4341-b215-14581e2e2b37,1,0,d5656a92-adfb-4733-830d-2b1565798b1f,d5656a92-adfb-4733-830d-2b1565798b1f,1,0,2ee0d56b-cd7c-42db-8fb6-c1567fe1967d,2ee0d56b-cd7c-42db-8fb6-c1567fe1967d,1,0,b0f6ea83-2849-4151-930d-692866919db3,b0f6ea83-2849-4151-930d-692866919db3,1,0,05558ce4-8568-4009-b1d7-307d54967515,05558ce4-8568-4009-b1d7-307d54967515,1,0,74380324-9b7b-49f6-9458-88deb9405f98,74380324-9b7b-49f6-9458-88deb9405f98,1,0,5286ceb2-0f16-4d70-ad89-dc15a308bb8d,5286ceb2-0f16-4d70-ad89-dc15a308bb8d,1,0,0abf70e0-0d81-4d85-a288-a2134da5fbf1,0abf70e0-0d81-4d85-a288-a2134da5fbf1,1,0,392fc734-4251-4d28-bfd1-d6f2f33ec0e5,392fc734-4251-4d28-bfd1-d6f2f33ec0e5,1,0,f66cb2da-3b3c-481f-823a-506f8290f619,f66cb2da-3b3c-481f-823a-506f8290f619,1,0,b80ddaf8-c5c3-4bde-98ed-74a1a0446f38,b80ddaf8-c5c3-4bde-98ed-74a1a0446f38,1,0,e4f16dbf-609d-4a34-a0bf-b20e5925c1ba,e4f16dbf-609d-4a34-a0bf-b20e5925c1ba,1,0,0bdcf045-5132-4a68-839c-a30515dc569e,0bdcf045-5132-4a68-839c-a30515dc569e,1,0,683861f9-9a5f-47db-8b03-959f839d5a3a,683861f9-9a5f-47db-8b03-959f839d5a3a,1,0,56fda0b0-c0ae-4ea2-8f77-df22a9ca3e87,56fda0b0-c0ae-4ea2-8f77-df22a9ca3e87,1,0,125be5bf-f410-451d-aa96-22fabc6a4d8a,125be5bf-f410-451d-aa96-22fabc6a4d8a,1,0,e5017fd0-ecea-48ae-99c8-7fc8c4f1d72b,e5017fd0-ecea-48ae-99c8-7fc8c4f1d72b,1,0,0a46166a-4562-4a50-b139-39dbe8a1fc84,0a46166a-4562-4a50-b139-39dbe8a1fc84,1,0,9aa6d1d1-75ad-40e4-b01f-274826c0c9da,9aa6d1d1-75ad-40e4-b01f-274826c0c9da,1,0,6ce64d65-f710-4d3f-a85f-26ce6915451e,6ce64d65-f710-4d3f-a85f-26ce6915451e,1,0,33eb9806-e34f-42a0-9825-3ff2de92c503,33eb9806-e34f-42a0-9825-3ff2de92c503,1,0,4905fcc5-9bd7-4b1b-b51d-882b11ee3d74,4905fcc5-9bd7-4b1b-b51d-882b11ee3d74,1,0,bcb58235-7cd7-4c15-a1eb-194ee38259e6,bcb58235-7cd7-4c15-a1eb-194ee38259e6,1,0,e19aefe7-634d-4218-8d40-75802d1691e0,e19aefe7-634d-4218-8d40-75802d1691e0,1,0,b885dbb2-6e18-46a6-929c-3d6d392343ad,b885dbb2-6e18-46a6-929c-3d6d392343ad,1,0,d31e24cf-7493-45dc-ba81-3a00618e53bc,d31e24cf-7493-45dc-ba81-3a00618e53bc,1,0,03f32b08-1b71-47cb-ba1d-965037df4d64,03f32b08-1b71-47cb-ba1d-965037df4d64,1,0,ce2a8ff8-94fd-4ce2-9caa-4711e9b79ee9,ce2a8ff8-94fd-4ce2-9caa-4711e9b79ee9,1,0,f942d212-9be0-4d80-84b6-5b63070e33e4,f942d212-9be0-4d80-84b6-5b63070e33e4,1,0,bea6bbc1-c1e4-4306-a0ca-efd47b9a8b23,bea6bbc1-c1e4-4306-a0ca-efd47b9a8b23,1,0,19a0b881-302e-4d0e-ace0-29a9d8379a48,19a0b881-302e-4d0e-ace0-29a9d8379a48,1,0,64c91eaa-084f-4801-8dbf-4e075c689c2b,64c91eaa-084f-4801-8dbf-4e075c689c2b,1,0,c01bb4de-06f7-4c3d-8ea3-d861f89948c0,c01bb4de-06f7-4c3d-8ea3-d861f89948c0,1,0,3c8c4f7b-d267-422c-becd-b6e8a9d6fe49,3c8c4f7b-d267-422c-becd-b6e8a9d6fe49,1,0,3aa12805-823a-439b-b039-fb9940aee312,3aa12805-823a-439b-b039-fb9940aee312,1,0,87d53573-f266-4b74-94af-041ae4b6518f,87d53573-f266-4b74-94af-041ae4b6518f,1,0,65a8545a-e73c-4c6a-8f87-7734d7ff5c03,65a8545a-e73c-4c6a-8f87-7734d7ff5c03,1,0,801cf1f7-2c65-4126-a3e9-b66abfdde67a,801cf1f7-2c65-4126-a3e9-b66abfdde67a,1,0,b991eefb-0d97-48a1-89c8-3d83b3b8d97a,b991eefb-0d97-48a1-89c8-3d83b3b8d97a,1,0,29c2bc01-8838-4459-8ac2-79862aa1dbc9,29c2bc01-8838-4459-8ac2-79862aa1dbc9,1,0,ad556c33-6811-48b4-ae90-57700a4d3fd6,ad556c33-6811-48b4-ae90-57700a4d3fd6,1,0,6e0833f4-3b57-4a5f-810f-9e2a492335df,6e0833f4-3b57-4a5f-810f-9e2a492335df,1,0,78ccdf33-9c2b-4931-afa3-5d652f2bcbc5,78ccdf33-9c2b-4931-afa3-5d652f2bcbc5,1,0,977bc9d8-9843-4343-85af-11a3d91f9966,977bc9d8-9843-4343-85af-11a3d91f9966,1,0,02ff9ef0-1057-4bc2-b745-1c2ae41835e3,02ff9ef0-1057-4bc2-b745-1c2ae41835e3,1,0,5a86abe7-db6c-43a3-9bcd-9b3647519c6b,5a86abe7-db6c-43a3-9bcd-9b3647519c6b,1,0,a6582448-734d-4a4c-a32c-c4755ca1bc93,a6582448-734d-4a4c-a32c-c4755ca1bc93,1,0,6a0b9a91-51a0-4ef4-b630-4f1b5a1da2b7,6a0b9a91-51a0-4ef4-b630-4f1b5a1da2b7,1,0,53327cc4-22b0-40f9-bae7-db483f85901c,53327cc4-22b0-40f9-bae7-db483f85901c,1,0,098d904d-95c9-459e-86d0-357ba9a40191,098d904d-95c9-459e-86d0-357ba9a40191,1,0,e9ab9d00-6e42-439b-8efc-fcacf727016d,e9ab9d00-6e42-439b-8efc-fcacf727016d,1,0,2d58033f-e15d-4a91-8165-dd311025c7c4,2d58033f-e15d-4a91-8165-dd311025c7c4,1,0,49cb3a36-90b3-4154-b571-265fc5cee21e,49cb3a36-90b3-4154-b571-265fc5cee21e,1,0,10472d2c-18ca-49b0-bd9d-c750db8498c5,10472d2c-18ca-49b0-bd9d-c750db8498c5,1,0,8efe5daf-272d-4255-b5c4-66dca7463b50,8efe5daf-272d-4255-b5c4-66dca7463b50,1,0,65af25a6-f699-4c40-b13e-3b7dff3f16fe,65af25a6-f699-4c40-b13e-3b7dff3f16fe,1,0,c4d2486d-289c-4812-b223-5ccfcd7f29e3,c4d2486d-289c-4812-b223-5ccfcd7f29e3,1,0,f9229c3e-4a47-49a4-8b14-908218012ff7,f9229c3e-4a47-49a4-8b14-908218012ff7,1,0,7c8b9203-2808-4a78-a2b1-b7a71b4f13f6,7c8b9203-2808-4a78-a2b1-b7a71b4f13f6,1,0,b9743978-ba6d-4892-bb32-f24d4a47dd50,b9743978-ba6d-4892-bb32-f24d4a47dd50,1,0,c43accb9-f33d-437f-b305-0595f8fe3032,c43accb9-f33d-437f-b305-0595f8fe3032,1,0,084a398b-836e-424c-af93-22aa39d5a15a,084a398b-836e-424c-af93-22aa39d5a15a,1,0,7da57c89-af2c-445a-96f7-39250f70306f,7da57c89-af2c-445a-96f7-39250f70306f,1,0,b5b94d94-25f7-4cfa-b1e9-6009fb848763,b5b94d94-25f7-4cfa-b1e9-6009fb848763,1,0,a2accf54-5966-42e8-ab2e-e56e415963ee,a2accf54-5966-42e8-ab2e-e56e415963ee,1,0,d8eb5329-5900-4b5d-b45e-458513dddfef,d8eb5329-5900-4b5d-b45e-458513dddfef,1,0,6d521e58-24a3-4f19-b4b0-dff84f7ca86b,6d521e58-24a3-4f19-b4b0-dff84f7ca86b,1,0,d5afea8a-1b7a-4b23-8ae0-cefa0b937b17,d5afea8a-1b7a-4b23-8ae0-cefa0b937b17,1,0,6ffd2da8-db97-46fc-9a53-8e665a598e3c,6ffd2da8-db97-46fc-9a53-8e665a598e3c,1,0,8c413fa5-9e24-4b81-aa55-0e78c5e3e20f,8c413fa5-9e24-4b81-aa55-0e78c5e3e20f,1,0,a4322f22-7de0-4018-8e06-9f1aa7cf0c07,a4322f22-7de0-4018-8e06-9f1aa7cf0c07,1,0,eaaed107-69d4-4963-be83-74519e331715,eaaed107-69d4-4963-be83-74519e331715,1,0,38cddf96-8703-4396-8c73-47fb22828a48,38cddf96-8703-4396-8c73-47fb22828a48,1,0,2c2cb793-0177-4983-91ca-9c292c5b10f1,2c2cb793-0177-4983-91ca-9c292c5b10f1,1,0,2a2e7f51-a4e5-48ec-b969-b1fca18ba9b5,2a2e7f51-a4e5-48ec-b969-b1fca18ba9b5,1,0,221fa473-3327-44e6-a033-6fdfd2be713c,221fa473-3327-44e6-a033-6fdfd2be713c,1,0,7a5973f0-7e29-44af-8e7b-70af71f704a4,7a5973f0-7e29-44af-8e7b-70af71f704a4,1,0,2b2bf0f7-0946-4492-bba0-27f007a70e64,2b2bf0f7-0946-4492-bba0-27f007a70e64,1,0,22c9a703-5ed3-4156-8fa6-476b1c1452f1,22c9a703-5ed3-4156-8fa6-476b1c1452f1,1,0,8be10d88-8c37-4444-9c89-6cbbe9913bda,8be10d88-8c37-4444-9c89-6cbbe9913bda,1,0,27089e8e-2c75-431c-b808-5d4dcba3cdca,27089e8e-2c75-431c-b808-5d4dcba3cdca,1,0,9ab3980e-a480-4f90-a8cc-bde99d5ace35,9ab3980e-a480-4f90-a8cc-bde99d5ace35,1,0,ec928563-6e35-4b84-b477-90d2481cec1c,ec928563-6e35-4b84-b477-90d2481cec1c,1,0,5d3e9678-20fe-4128-867a-3f7addaa7831,5d3e9678-20fe-4128-867a-3f7addaa7831,1,0,bb878f73-8a0f-459a-9076-ce57fe7957dc,bb878f73-8a0f-459a-9076-ce57fe7957dc,1,0,cb1d4a41-20a9-4d76-8798-d47d8858bff1,cb1d4a41-20a9-4d76-8798-d47d8858bff1,1,0,a2b4110b-4d9c-40fd-ab46-bfa08d2eb993,a2b4110b-4d9c-40fd-ab46-bfa08d2eb993,1,0,4f262b7f-927e-45f2-ad90-9d5e1b3155d1,4f262b7f-927e-45f2-ad90-9d5e1b3155d1,1,0,9f4b8e36-83ff-4694-8540-b5f47b18395f,9f4b8e36-83ff-4694-8540-b5f47b18395f,1,0,b4c026eb-4271-4366-b529-1cdfe2874563,b4c026eb-4271-4366-b529-1cdfe2874563,1,0,314b0da2-24d3-48cc-8532-d36c45eb3bf8,314b0da2-24d3-48cc-8532-d36c45eb3bf8,1,0,2e3ac3fb-9f0e-463f-95c2-9f661ce2e015,2e3ac3fb-9f0e-463f-95c2-9f661ce2e015,1,0,4077e700-ec20-4afa-8155-bf7e516a70cb,4077e700-ec20-4afa-8155-bf7e516a70cb,1,0,5198c6db-2100-4902-82c8-85c8ea555e78,5198c6db-2100-4902-82c8-85c8ea555e78,1,0,b99f2a63-54e8-490b-a0a4-1941fbc38b3f,b99f2a63-54e8-490b-a0a4-1941fbc38b3f,1,0,f0b1e9f4-2e07-44e6-88d2-c11457135781,f0b1e9f4-2e07-44e6-88d2-c11457135781,1,0,e010c0f9-f770-4fdc-8607-50838c0262ef,e010c0f9-f770-4fdc-8607-50838c0262ef,1,0,f935399f-3554-4c08-b0a6-eba13074e1b7,f935399f-3554-4c08-b0a6-eba13074e1b7,1,0,10008125-3aeb-4912-8ad6-d92d283ea09a,10008125-3aeb-4912-8ad6-d92d283ea09a,1,0,765f9584-fefa-4695-b130-dd54c3b0d79d,765f9584-fefa-4695-b130-dd54c3b0d79d,1,0,dd050ca0-8335-4654-ab5c-7babcb4824ef,dd050ca0-8335-4654-ab5c-7babcb4824ef,1,0,706cbf55-626d-4cab-b589-a2464368f6c1,706cbf55-626d-4cab-b589-a2464368f6c1,1,0,d22a0a50-220d-459e-a23a-39730a1e67c4,d22a0a50-220d-459e-a23a-39730a1e67c4,1,0,2c1c9284-ba8b-4282-a89c-429f02ea41f6,2c1c9284-ba8b-4282-a89c-429f02ea41f6,1,0,8c241467-76f7-4161-a8a1-5da4a6576b75,8c241467-76f7-4161-a8a1-5da4a6576b75,1,0,1d3b9eff-5d0b-437b-932f-0ec466e092b2,1d3b9eff-5d0b-437b-932f-0ec466e092b2,1,0,fd7e5257-024c-46de-9ff3-edd302fadba5,fd7e5257-024c-46de-9ff3-edd302fadba5,1,0,a4168057-d99f-4b55-b762-214f95ae3a30,a4168057-d99f-4b55-b762-214f95ae3a30,1,0,ab4fe549-1c07-42d9-b412-8b89ed115591,ab4fe549-1c07-42d9-b412-8b89ed115591,1,0,0335804e-efe5-4fb9-9ae9-2ddca73d77f3,0335804e-efe5-4fb9-9ae9-2ddca73d77f3,1,0,b49c589d-b45d-4aff-8899-72cfe433e9a6,b49c589d-b45d-4aff-8899-72cfe433e9a6,1,0,f71a8d47-6a6c-4b7e-90b3-5b7a3be3ccd3,f71a8d47-6a6c-4b7e-90b3-5b7a3be3ccd3,1,0,273ad3f7-c645-434d-93b0-e832134f3043,273ad3f7-c645-434d-93b0-e832134f3043,1,0,d320803b-1de4-4e66-b455-0afe39be5c41,d320803b-1de4-4e66-b455-0afe39be5c41,1,0,67e85b9a-a138-49ea-b474-04475f0f8c90,67e85b9a-a138-49ea-b474-04475f0f8c90,1,0,364218e0-87ba-4008-a3e3-e2351a5e04b8,364218e0-87ba-4008-a3e3-e2351a5e04b8,1,0,788a98e0-194f-466c-b4fa-bafd527aae26,788a98e0-194f-466c-b4fa-bafd527aae26,1,0,5d990585-02dd-4a13-8dfa-920df7d1dbb0,5d990585-02dd-4a13-8dfa-920df7d1dbb0,1,0,143f6db9-a4dc-4039-90d0-6161394a3e2f,143f6db9-a4dc-4039-90d0-6161394a3e2f,1,0,07820e9e-9d6b-4c37-909e-90dbd33e30c0,07820e9e-9d6b-4c37-909e-90dbd33e30c0,1,0,483dfce4-9c66-4739-94d4-17a005d64f5b,483dfce4-9c66-4739-94d4-17a005d64f5b,1,0,19506116-43ef-433c-822c-ef8717b0da6b,19506116-43ef-433c-822c-ef8717b0da6b,1,0,464b92cc-b577-4350-ae9f-e697390248d7,464b92cc-b577-4350-ae9f-e697390248d7,1,0,5a1242c8-3817-4d2c-9bfd-f62a6b80730c,5a1242c8-3817-4d2c-9bfd-f62a6b80730c,1,0,b9be6caf-e5e0-45a9-8cc8-3c83721632a2,b9be6caf-e5e0-45a9-8cc8-3c83721632a2,1,0,97e853dc-065f-4c6d-84cb-3d3aff367b22,97e853dc-065f-4c6d-84cb-3d3aff367b22,1,0,2f1fdf47-2627-496f-9e1f-77019abb2104,2f1fdf47-2627-496f-9e1f-77019abb2104,1,0,c996532a-8795-4136-8a40-9bb4b263277c,c996532a-8795-4136-8a40-9bb4b263277c,1,0,64c77788-fc49-4979-8163-949a891bd8b7,64c77788-fc49-4979-8163-949a891bd8b7,1,0,c39750ca-e33f-40c2-b830-119423d9a2ae,c39750ca-e33f-40c2-b830-119423d9a2ae,1,0,9372ff6b-27b6-48f3-a2a2-762e7c485766,9372ff6b-27b6-48f3-a2a2-762e7c485766,1,0,f454595a-4a3d-451b-8e8b-b17aa8314591,f454595a-4a3d-451b-8e8b-b17aa8314591,1,0,d3b7f89e-eb04-404e-bcc1-1d3557fb8d1a,d3b7f89e-eb04-404e-bcc1-1d3557fb8d1a,1,0,442f9d7b-ae8f-4074-8ece-d5aa1c66e35c,442f9d7b-ae8f-4074-8ece-d5aa1c66e35c,1,0,bc708da8-7fc6-4da1-8129-9ef6a86667af,bc708da8-7fc6-4da1-8129-9ef6a86667af,1,0,061842fe-4077-4d6e-aefe-de79409da730,061842fe-4077-4d6e-aefe-de79409da730,1,0,86249619-8981-4fc4-85fc-ce30e4b9d542,86249619-8981-4fc4-85fc-ce30e4b9d542,1,0,da6e4bff-9835-4b92-b62b-291a5d6c86fe,da6e4bff-9835-4b92-b62b-291a5d6c86fe,1,0,98aa8a80-29fa-4a54-8d0e-90d413d63da1,98aa8a80-29fa-4a54-8d0e-90d413d63da1,1,0,60af0c11-852e-4b45-afb7-251d75a87150,60af0c11-852e-4b45-afb7-251d75a87150,1,0,37e81463-a558-4b03-b0e4-82ac0e99c80c,37e81463-a558-4b03-b0e4-82ac0e99c80c,1,0,8be35c43-32e6-418d-b3d6-e53ef56babb7,8be35c43-32e6-418d-b3d6-e53ef56babb7,1,0,3e4f5fd0-af15-41ae-896e-458ce9fb7e4d,3e4f5fd0-af15-41ae-896e-458ce9fb7e4d,1,0,935d01e1-232b-480e-a6bf-c21c617c6348,935d01e1-232b-480e-a6bf-c21c617c6348,1,0,9bc7cc99-1237-4f9c-8a4e-f3ab459186ef,9bc7cc99-1237-4f9c-8a4e-f3ab459186ef,1,0,05c702a1-2c74-45d5-b2ee-fdd795b0945a,05c702a1-2c74-45d5-b2ee-fdd795b0945a,1,0,3fadaeb7-2c41-42a4-bfa8-c585602b1028,3fadaeb7-2c41-42a4-bfa8-c585602b1028,1,0,171a0dfc-032e-4eaf-81a2-e5e0dfde8d56,171a0dfc-032e-4eaf-81a2-e5e0dfde8d56,1,0,083c709b-ed8c-47e4-a190-421e14259e73,083c709b-ed8c-47e4-a190-421e14259e73,1,0,b98dacc7-29e1-426b-a664-0a988f18186c,b98dacc7-29e1-426b-a664-0a988f18186c,1,0,d678856d-6e7c-443f-a6e3-350bbe8af659,d678856d-6e7c-443f-a6e3-350bbe8af659,1,0,d0979762-22ce-41be-b7a4-5e9ac149d94b,d0979762-22ce-41be-b7a4-5e9ac149d94b,1,0,ae23e70c-479e-47ad-9bfa-58560a903410,ae23e70c-479e-47ad-9bfa-58560a903410,1,0,c0d83781-bbda-43f7-bf0e-5defa3d47143,c0d83781-bbda-43f7-bf0e-5defa3d47143,1,0,21fa5fdd-acbc-403b-9acb-bbf95284bd20,21fa5fdd-acbc-403b-9acb-bbf95284bd20,1,0,576a01e3-4d6d-4241-a3c4-7661ba129bcb,576a01e3-4d6d-4241-a3c4-7661ba129bcb,1,0,9f7290dd-19f4-4163-9795-fe562e84f06d,9f7290dd-19f4-4163-9795-fe562e84f06d,1,0,c3b5c81f-b787-4f63-8cba-79def0921477,c3b5c81f-b787-4f63-8cba-79def0921477,1,0,1f0cb3d4-1344-451b-a257-be3cd854acfd,1f0cb3d4-1344-451b-a257-be3cd854acfd,1,0,0131fe59-ce47-48b7-8f7e-1544bf0fa031,0131fe59-ce47-48b7-8f7e-1544bf0fa031,1,0,c8b0a1be-97c6-4a16-b1dd-31901ac61cdc,c8b0a1be-97c6-4a16-b1dd-31901ac61cdc,1,0,372150e2-526e-4424-8c54-e4b16bdd25b5,372150e2-526e-4424-8c54-e4b16bdd25b5,1,0,2f9c347d-ee82-49f2-a5eb-97f55374856f,2f9c347d-ee82-49f2-a5eb-97f55374856f,1,0,752dc569-cf84-42d7-911d-49d455f7214e,752dc569-cf84-42d7-911d-49d455f7214e,1,0,fecab2b9-27e1-44d6-9082-79c3569b7477,fecab2b9-27e1-44d6-9082-79c3569b7477,1,0,07ae092f-8517-47b7-b54c-5dbcb6506929,07ae092f-8517-47b7-b54c-5dbcb6506929,1,0,db4c25bb-d199-43ec-833d-82972de04a41,db4c25bb-d199-43ec-833d-82972de04a41,1,0,43d19685-0794-41f2-9171-bf565133718d,43d19685-0794-41f2-9171-bf565133718d,1,0,b68c15c4-4966-4f13-8912-2d479b65089a,b68c15c4-4966-4f13-8912-2d479b65089a,1,0,8f6770c2-654c-4cc7-8ed5-15b5b2e3109a,8f6770c2-654c-4cc7-8ed5-15b5b2e3109a,1,0,a89ee622-6942-411a-8566-f03d139c9e5b,a89ee622-6942-411a-8566-f03d139c9e5b,1,0,f87e3935-dae1-4192-b6a7-05e3c700c590,f87e3935-dae1-4192-b6a7-05e3c700c590,1,0,ee635706-6ee2-4956-8d58-a235f64687f6,ee635706-6ee2-4956-8d58-a235f64687f6,1,0,a5a40ca7-d665-420b-a516-1355019d6901,a5a40ca7-d665-420b-a516-1355019d6901,1,0,198ea989-5001-47ac-86b8-aa2585a5f7d7,198ea989-5001-47ac-86b8-aa2585a5f7d7,1,0,4abe448b-a225-4ac2-8cc9-c3c6c0e9b1ac,4abe448b-a225-4ac2-8cc9-c3c6c0e9b1ac,1,0,fb84c5f7-11da-4b17-979e-41e27a74e789,fb84c5f7-11da-4b17-979e-41e27a74e789,1,0,adf9304c-ccf8-492e-95b1-0754764586a2,adf9304c-ccf8-492e-95b1-0754764586a2,1,0,fd175112-ec8f-4088-9b21-d8135056f0c5,fd175112-ec8f-4088-9b21-d8135056f0c5,1,0,ddd82a66-1eda-409f-b6c0-e22c4bd2c1b7,ddd82a66-1eda-409f-b6c0-e22c4bd2c1b7,1,0,df76a1b7-312a-4e77-bac1-79befadb4495,df76a1b7-312a-4e77-bac1-79befadb4495,1,0,ab39fad8-1039-491e-982a-c49637770ec0,ab39fad8-1039-491e-982a-c49637770ec0,1,0,7d93a6ba-3ca7-45ab-a540-743c79587535,7d93a6ba-3ca7-45ab-a540-743c79587535,1,0,76b58810-0527-4dfc-8858-bac68e7e65f3,76b58810-0527-4dfc-8858-bac68e7e65f3,1,0,aba97fd9-f05e-45cd-8404-ed702070e17a,aba97fd9-f05e-45cd-8404-ed702070e17a,1,0,f5c415cd-429b-469f-9332-c43ab5d1c8d6,f5c415cd-429b-469f-9332-c43ab5d1c8d6,1,0,6de34ed8-5d6c-4bb6-af94-328e692b862e,6de34ed8-5d6c-4bb6-af94-328e692b862e,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,3807f865-dd2c-44f7-9238-3db191f0a186,3807f865-dd2c-44f7-9238-3db191f0a186,1,0,e6a53f32-0b7d-499d-844e-fb8df13a3519,e6a53f32-0b7d-499d-844e-fb8df13a3519,1,0,4a55351b-77e2-4c7c-a7d7-aac213d3c2a7,4a55351b-77e2-4c7c-a7d7-aac213d3c2a7,1,0,f79ac41b-6ab2-4afc-aa98-b70b72d78bb4,f79ac41b-6ab2-4afc-aa98-b70b72d78bb4,1,0,2c5a56d3-386e-45df-adc2-4471f52f9bdc,2c5a56d3-386e-45df-adc2-4471f52f9bdc,1,0,8f184df5-bfe8-4df3-bc7c-18218cef7650,8f184df5-bfe8-4df3-bc7c-18218cef7650,1,0,387e273a-889f-454b-8b43-feaa12025fde,387e273a-889f-454b-8b43-feaa12025fde,1,0,22474ca3-565b-4b67-a5b4-b0b959306d10,22474ca3-565b-4b67-a5b4-b0b959306d10,1,0,1c38ad75-b294-4c05-89ce-69ce4d9a291f,1c38ad75-b294-4c05-89ce-69ce4d9a291f,1,0,078d1e8f-6d27-4761-9532-b1e7a60e4c13,078d1e8f-6d27-4761-9532-b1e7a60e4c13,1,0,4262193c-58ad-47c6-8088-735d8cd037ea,4262193c-58ad-47c6-8088-735d8cd037ea,1,0,36a2b5f9-ded5-4fc3-a7bd-e12b37cd6bab,36a2b5f9-ded5-4fc3-a7bd-e12b37cd6bab,1,0,de6d1aad-39eb-46ce-87aa-d29812bb37bf,de6d1aad-39eb-46ce-87aa-d29812bb37bf,1,0,4ad859ec-cc75-4bac-9e89-397798450e48,4ad859ec-cc75-4bac-9e89-397798450e48,1,0,d93ab94c-0f55-4b80-b226-41b44c73b3ea,d93ab94c-0f55-4b80-b226-41b44c73b3ea,1,0,94cbed80-5a35-471f-b354-439a11629210,94cbed80-5a35-471f-b354-439a11629210,1,0,1162cc0a-42e5-47cb-9507-68459579f110,1162cc0a-42e5-47cb-9507-68459579f110,1,0,17f9f188-d3fd-4fe1-a00c-b0dde64a0f9e,17f9f188-d3fd-4fe1-a00c-b0dde64a0f9e,1,0,bb49dc80-4934-4f44-8f27-9a363dca8dc4,bb49dc80-4934-4f44-8f27-9a363dca8dc4,1,0,7338e497-03a7-4ed4-85a2-ca802c065a9f,7338e497-03a7-4ed4-85a2-ca802c065a9f,1,0,49fe879c-8972-4c9a-bb08-e3e5b2e5ff84,49fe879c-8972-4c9a-bb08-e3e5b2e5ff84,1,0,5249687b-9ff4-46f5-be15-dbb5d5047fd1,5249687b-9ff4-46f5-be15-dbb5d5047fd1,1,0,d33df51c-3dcd-496c-90f2-7ee05582bdf7,d33df51c-3dcd-496c-90f2-7ee05582bdf7,1,0,24b39ebd-2424-4939-8e3e-d09eb674d409,24b39ebd-2424-4939-8e3e-d09eb674d409,1,0,08c751bb-9e57-4536-901e-bb316c8e96d7,08c751bb-9e57-4536-901e-bb316c8e96d7,1,0,de0afa6f-07c6-441c-a4ca-e7ed709a8da5,de0afa6f-07c6-441c-a4ca-e7ed709a8da5,1,0,034cdcef-08e5-4751-9885-400aa69e0b94,034cdcef-08e5-4751-9885-400aa69e0b94,1,0,3e44d463-f253-4a64-8d68-631fcb66935c,3e44d463-f253-4a64-8d68-631fcb66935c,1,0,653d6483-029b-4453-a7d0-3a3c6d9d0b05,653d6483-029b-4453-a7d0-3a3c6d9d0b05,1,0,ac507771-50bd-4f8b-b72f-5954562c9131,ac507771-50bd-4f8b-b72f-5954562c9131,1,0,efefebea-2032-4006-b9ca-50a23b7da1ef,efefebea-2032-4006-b9ca-50a23b7da1ef,1,0,4c794d37-3352-4acb-a939-5e90fb682db8,4c794d37-3352-4acb-a939-5e90fb682db8,1,0,5f3fea83-6ca8-481b-9e2b-789a6fd01e2e,5f3fea83-6ca8-481b-9e2b-789a6fd01e2e,1,0,008f5068-da9c-4dac-9c0a-a50366d27cbb,008f5068-da9c-4dac-9c0a-a50366d27cbb,1,0,950b3ee3-070f-4946-8b9b-0aa2058de986,950b3ee3-070f-4946-8b9b-0aa2058de986,1,0,bd04a870-0943-4bdb-9e30-50a69daa8a13,bd04a870-0943-4bdb-9e30-50a69daa8a13,1,0,a23e6c77-8c12-4f99-ae2d-68a12274be38,a23e6c77-8c12-4f99-ae2d-68a12274be38,1,0,3c4454cd-31e9-42a5-9127-fb66a628f0e1,3c4454cd-31e9-42a5-9127-fb66a628f0e1,1,0,c02c5cbf-b25a-4956-8aa7-74cfeb66d508,c02c5cbf-b25a-4956-8aa7-74cfeb66d508,1,0,31cac1e9-eb16-489c-9322-30d1e27a80b3,31cac1e9-eb16-489c-9322-30d1e27a80b3,1,0,0d100e33-7941-41c1-962d-7672c874e9c5,0d100e33-7941-41c1-962d-7672c874e9c5,1,0,c5ac53c9-c9b2-4b90-a21e-10f1daa756c5,c5ac53c9-c9b2-4b90-a21e-10f1daa756c5,1,0,6e61d717-de36-4dce-8af9-b6c14ed76acb,6e61d717-de36-4dce-8af9-b6c14ed76acb,1,0,474518fe-9cb5-4a12-9388-bc7a64511617,474518fe-9cb5-4a12-9388-bc7a64511617,1,0,64337614-b1c9-4931-b576-448721fa4602,64337614-b1c9-4931-b576-448721fa4602,1,0,1d73b59c-0594-4ed3-b584-cf1261941e1d,1d73b59c-0594-4ed3-b584-cf1261941e1d,1,0,8ff2547f-d596-4fa1-9e12-079e1cc4c057,8ff2547f-d596-4fa1-9e12-079e1cc4c057,1,0,1ab0c8f8-b908-4618-ae88-af37b8f1224e,1ab0c8f8-b908-4618-ae88-af37b8f1224e,1,0,bd3ec5a9-161d-487e-ab1d-e5e15a6e3a7b,bd3ec5a9-161d-487e-ab1d-e5e15a6e3a7b,1,0,b85b3a58-95e4-4698-b1ae-037901ecc1b1,b85b3a58-95e4-4698-b1ae-037901ecc1b1,1,0,b77d748a-d180-432d-91c3-774e6ccf7efa,b77d748a-d180-432d-91c3-774e6ccf7efa,1,0,e5b9c1b0-4690-442c-b160-e6c587e42e57,e5b9c1b0-4690-442c-b160-e6c587e42e57,1,0,e3adb576-6b33-475b-976b-7a6783de3184,e3adb576-6b33-475b-976b-7a6783de3184,1,0,c6cef8db-0689-42a6-9f43-c86b7c3cf0e9,c6cef8db-0689-42a6-9f43-c86b7c3cf0e9,1,0,78f5a205-dffb-4009-897a-e8f36372f33c,78f5a205-dffb-4009-897a-e8f36372f33c,1,0,f7597041-f182-42fb-803a-2521c70d627d,f7597041-f182-42fb-803a-2521c70d627d,1,0,ce988b8a-d0c1-400a-9466-aa757501bb58,ce988b8a-d0c1-400a-9466-aa757501bb58,1,0,ab98d665-8da8-406e-9e0e-3e130ab393ef,ab98d665-8da8-406e-9e0e-3e130ab393ef,1,0,9e823bb6-b0c0-439e-81e4-ebd46b79b99c,9e823bb6-b0c0-439e-81e4-ebd46b79b99c,1,0,118a0e62-c0bb-435b-9e3e-c64563efa602,118a0e62-c0bb-435b-9e3e-c64563efa602,1,0,b57bc8a9-8a59-4192-a442-2e1982e83179,b57bc8a9-8a59-4192-a442-2e1982e83179,1,0,5b06ccda-2a70-4621-8273-78408cbe72a9,5b06ccda-2a70-4621-8273-78408cbe72a9,1,0,89753385-64fd-4e76-9857-bfd5d7c23f71,89753385-64fd-4e76-9857-bfd5d7c23f71,1,0,1b3113f3-e7d4-4e6f-b6ed-08f5fd78c68e,1b3113f3-e7d4-4e6f-b6ed-08f5fd78c68e,1,0,53e72cf2-e2a5-4b59-b5b1-a1fc28fda5bf,53e72cf2-e2a5-4b59-b5b1-a1fc28fda5bf,1,0,e20bcb57-2f68-4709-8a11-105d561a2dda,e20bcb57-2f68-4709-8a11-105d561a2dda,1,0,3df3f61a-2c17-4278-8d82-91089f793e6a,3df3f61a-2c17-4278-8d82-91089f793e6a,1,0,ea8beea1-7d80-4613-b2f9-79ee612e977a,ea8beea1-7d80-4613-b2f9-79ee612e977a,1,0,afd62a32-fdbb-429a-9a64-89c61a07e018,afd62a32-fdbb-429a-9a64-89c61a07e018,1,0,027cef43-99bd-48d3-a1a3-2102ac003742,027cef43-99bd-48d3-a1a3-2102ac003742,1,0,00197ea9-de76-4e2a-97bc-93e44053e35e,00197ea9-de76-4e2a-97bc-93e44053e35e,1,0,540a47b8-f6d4-4531-ac87-3f7cfbef4c8c,540a47b8-f6d4-4531-ac87-3f7cfbef4c8c,1,0,a51f7c6f-2631-4d23-becc-c0e8b711fddd,a51f7c6f-2631-4d23-becc-c0e8b711fddd,1,0,37806357-d92c-4bea-a5ef-77f138578fda,37806357-d92c-4bea-a5ef-77f138578fda,1,0,91b100e6-fbbe-4bb0-8d51-d12595a2a3e8,91b100e6-fbbe-4bb0-8d51-d12595a2a3e8,1,0,0a880538-f97f-448e-a4a9-82b0194dbe28,0a880538-f97f-448e-a4a9-82b0194dbe28,1,0,179868b7-d342-4df0-9386-c114d75faf3a,179868b7-d342-4df0-9386-c114d75faf3a,1,0,bbc4cc8c-31c2-4fcf-b86c-9ec65b2772b0,bbc4cc8c-31c2-4fcf-b86c-9ec65b2772b0,1,0,4d72bd30-8d60-4f84-9ad8-83489d9cb3fb,4d72bd30-8d60-4f84-9ad8-83489d9cb3fb,1,0,7e4afed8-5c56-4765-bcd0-a40e6121ba22,7e4afed8-5c56-4765-bcd0-a40e6121ba22,1,0,155660a1-8a63-4562-a715-d75a8af7176b,155660a1-8a63-4562-a715-d75a8af7176b,1,0,878fe826-fa99-44ad-9891-5eada9744017,878fe826-fa99-44ad-9891-5eada9744017,1,0,0d61712a-dfaf-46f1-b728-62993dd94fbe,0d61712a-dfaf-46f1-b728-62993dd94fbe,1,0,3a6cf496-09b9-4947-9df5-06d23b474558,3a6cf496-09b9-4947-9df5-06d23b474558,1,0,625b498a-33d1-4162-9525-fb7790cbb6a8,625b498a-33d1-4162-9525-fb7790cbb6a8,1,0,28223f7b-d15a-4f12-b57c-1f6d08a902f9,28223f7b-d15a-4f12-b57c-1f6d08a902f9,1,0,dd9eb5b7-5aed-4e51-9939-9ff14492d240,dd9eb5b7-5aed-4e51-9939-9ff14492d240,1,0,b2a14899-d589-4990-b85e-7bffb427e8af,b2a14899-d589-4990-b85e-7bffb427e8af,1,0,0981d114-05bd-4ee1-a8fd-398fa6620d0b,0981d114-05bd-4ee1-a8fd-398fa6620d0b,1,0,3210ba40-382e-4917-ad0f-9bd88d23dc25,3210ba40-382e-4917-ad0f-9bd88d23dc25,1,0,835e3ead-d01f-410b-937a-902dd5e66aec,835e3ead-d01f-410b-937a-902dd5e66aec,1,0,40141982-d1d6-416f-844e-19143a407ff9,40141982-d1d6-416f-844e-19143a407ff9,1,0,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,fc65918a-2ad1-47b1-980d-5afe63579964,fc65918a-2ad1-47b1-980d-5afe63579964,1,0,7ece6efe-16a1-4294-8c28-3fa6427ba9f0,7ece6efe-16a1-4294-8c28-3fa6427ba9f0,1,0,61094d92-b1e6-45b9-9258-38a7bb1d6469,61094d92-b1e6-45b9-9258-38a7bb1d6469,1,0,4791b5d4-3568-4420-8c25-89ecce7c6353,4791b5d4-3568-4420-8c25-89ecce7c6353,1,0,66ec2482-c1f3-45d3-9257-e0b9f5ae772a,66ec2482-c1f3-45d3-9257-e0b9f5ae772a,1,0,d3211832-c8ca-437a-8810-82e06cbb48de,d3211832-c8ca-437a-8810-82e06cbb48de,1,0,8131d701-1014-4196-9b67-914e451f8a3a,8131d701-1014-4196-9b67-914e451f8a3a,1,0,2b102933-c660-4e74-ae9a-5061a88ed672,2b102933-c660-4e74-ae9a-5061a88ed672,1,0,56c897b7-d34e-4d7d-9a3b-d0779be5c189,56c897b7-d34e-4d7d-9a3b-d0779be5c189,1,0,3ac81c80-56bd-4750-b135-07ab522e3eab,3ac81c80-56bd-4750-b135-07ab522e3eab,1,0,5657872f-c7d5-446f-bcc3-d0b86ad63a42,5657872f-c7d5-446f-bcc3-d0b86ad63a42,1,0,d5214cb9-67e2-469f-989f-3f2b662ae830,d5214cb9-67e2-469f-989f-3f2b662ae830,1,0,69679e88-4f2b-4dd6-8cb2-b88293d07b55,69679e88-4f2b-4dd6-8cb2-b88293d07b55,1,0,68679208-9972-4854-8649-49bdf6212255,68679208-9972-4854-8649-49bdf6212255,1,0,98393093-7ba6-4b4d-86be-ee5826cd8cd5,98393093-7ba6-4b4d-86be-ee5826cd8cd5,1,0,87de486d-3f35-4432-a7cd-9d3832db63cf,87de486d-3f35-4432-a7cd-9d3832db63cf,1,0,246f17a0-93a7-4e2c-8fa6-f57405f0abeb,246f17a0-93a7-4e2c-8fa6-f57405f0abeb,1,0,ea6c4830-a34d-4026-a0ca-5cf7e44f089d,ea6c4830-a34d-4026-a0ca-5cf7e44f089d,1,0,bb7ce04a-8143-4c0b-a196-1b57f1640142,bb7ce04a-8143-4c0b-a196-1b57f1640142,1,0,4872f12c-705c-4dd3-802f-d27496a0d634,4872f12c-705c-4dd3-802f-d27496a0d634,1,0,3bacfd93-dfc7-4154-9d3f-b61ddc5c6721,3bacfd93-dfc7-4154-9d3f-b61ddc5c6721,1,0,0c0bbfba-c1c4-4bb5-a813-10da4bef7911,0c0bbfba-c1c4-4bb5-a813-10da4bef7911,1,0,f9ada91a-e673-4821-9bce-cb0dd75ca28b,f9ada91a-e673-4821-9bce-cb0dd75ca28b,1,0,9fcf68bb-43e2-4cd1-89ec-8797ad9c0e8b,9fcf68bb-43e2-4cd1-89ec-8797ad9c0e8b,1,0,90ce635a-0277-4056-980d-d1a16d91cb30,90ce635a-0277-4056-980d-d1a16d91cb30,1,0,e61a8360-a0f8-4d86-b91a-2ae9b8552bf0,e61a8360-a0f8-4d86-b91a-2ae9b8552bf0,1,0,1e77e873-632c-482b-8f46-8f8cc3cc8cef,1e77e873-632c-482b-8f46-8f8cc3cc8cef,1,0,00605607-03ab-43fc-ba08-9fc32f582d0a,00605607-03ab-43fc-ba08-9fc32f582d0a,1,0,5ab0a910-74ab-4af0-b5a3-40845a789fde,5ab0a910-74ab-4af0-b5a3-40845a789fde,1,0,bb659006-c11e-4427-8d86-229ba43ef679,bb659006-c11e-4427-8d86-229ba43ef679,1,0,766208a3-2780-427b-a7d3-93abe99d236b,766208a3-2780-427b-a7d3-93abe99d236b,1,0,63ce4c3c-5bad-409c-904f-18f34cf1da78,63ce4c3c-5bad-409c-904f-18f34cf1da78,1,0,62bddcee-bef6-42cc-9ba3-e99b8160dcc2,62bddcee-bef6-42cc-9ba3-e99b8160dcc2,1,0,26ac22f9-0bbb-4671-b446-626e345e2461,26ac22f9-0bbb-4671-b446-626e345e2461,1,0,0d63ee6d-e17f-4a86-b384-adf9793f3331,0d63ee6d-e17f-4a86-b384-adf9793f3331,1,0,f152945b-2a7b-449e-a915-176166af7bac,f152945b-2a7b-449e-a915-176166af7bac,1,0,77f5d86a-7fae-4490-9740-0e31102dab5c,77f5d86a-7fae-4490-9740-0e31102dab5c,1,0,5a54bc1a-d178-412c-bf4a-cf92d7f141aa,5a54bc1a-d178-412c-bf4a-cf92d7f141aa,1,0,24be43ec-d39e-46aa-9c11-2536b835e515,24be43ec-d39e-46aa-9c11-2536b835e515,1,0,c9ca80ef-c7b7-4425-b5c0-3d13af82f291,c9ca80ef-c7b7-4425-b5c0-3d13af82f291,1,0,df9af3ee-6a69-4a03-8ff5-0735e9a38013,df9af3ee-6a69-4a03-8ff5-0735e9a38013,1,0,1b27eb77-d535-43a5-8ae1-fa2fec15d92c,1b27eb77-d535-43a5-8ae1-fa2fec15d92c,1,0,7743fe24-b941-4dad-bc76-05fb6b26b1d7,7743fe24-b941-4dad-bc76-05fb6b26b1d7,1,0,5bf2da0d-f318-4036-9234-8a3a6eca88b2,5bf2da0d-f318-4036-9234-8a3a6eca88b2,1,0,288525fc-d3fa-4c8e-a1d7-d2d1ef4cd0ef,288525fc-d3fa-4c8e-a1d7-d2d1ef4cd0ef,1,0,c3634571-6fe5-45ab-9362-161305eef661,c3634571-6fe5-45ab-9362-161305eef661,1,0,ec11342f-594f-416f-a10f-bd1bfa695c08,ec11342f-594f-416f-a10f-bd1bfa695c08,1,0,31c3ac44-204e-43fd-bca3-fd18fa091c58,31c3ac44-204e-43fd-bca3-fd18fa091c58,1,0,74f03c35-5da0-406e-a938-e8e5d49975ef,74f03c35-5da0-406e-a938-e8e5d49975ef,1,0,c9ab3890-6d16-431f-ab2b-b5058e6202a4,c9ab3890-6d16-431f-ab2b-b5058e6202a4,1,0,5ee9eed7-3c6c-4264-ab9a-6f24f9c80598,5ee9eed7-3c6c-4264-ab9a-6f24f9c80598,1,0,3c33adc7-abea-4e0f-9e5d-d8f10abb63df,3c33adc7-abea-4e0f-9e5d-d8f10abb63df,1,0,4090c6f7-1d25-4b17-9baa-18daa0640b0f,4090c6f7-1d25-4b17-9baa-18daa0640b0f,1,0,26125e58-dfc8-4bbb-a3a4-80616471746e,26125e58-dfc8-4bbb-a3a4-80616471746e,1,0,b1c699cd-efdc-461c-ad37-10bfd4bc9674,b1c699cd-efdc-461c-ad37-10bfd4bc9674,1,0,6add1920-5073-4b1e-b7e0-13bf1e65e4c3,6add1920-5073-4b1e-b7e0-13bf1e65e4c3,1,0,f12c946c-98e4-4da6-8a88-c555e9dc3bdd,f12c946c-98e4-4da6-8a88-c555e9dc3bdd,1,0,ec5718b7-1c4d-4bdc-9426-40a339bb29cf,ec5718b7-1c4d-4bdc-9426-40a339bb29cf,1,0,ecd8772d-e33f-426f-a87a-e28bd94d5fdf,ecd8772d-e33f-426f-a87a-e28bd94d5fdf,1,0,96661303-1286-4f84-93b7-0e6da2bd7893,96661303-1286-4f84-93b7-0e6da2bd7893,1,0,68076431-36e6-46dc-92cb-e0d8e605bf66,68076431-36e6-46dc-92cb-e0d8e605bf66,1,0,239fa55a-6572-4e5c-9918-c2e14063c76d,239fa55a-6572-4e5c-9918-c2e14063c76d,1,0,8211a1b6-c3b1-466b-8d11-22603fb50c7a,8211a1b6-c3b1-466b-8d11-22603fb50c7a,1,0,7e7dfcb5-04eb-40f4-8f4c-f29644e81473,7e7dfcb5-04eb-40f4-8f4c-f29644e81473,1,0,daef68a3-c6c3-450d-b8fd-7af2a2f5572e,daef68a3-c6c3-450d-b8fd-7af2a2f5572e,1,0,a83cb338-5707-42c9-9e88-11f6c68fcc32,a83cb338-5707-42c9-9e88-11f6c68fcc32,1,0,985106b7-7476-4b48-90ac-ad86876395b5,985106b7-7476-4b48-90ac-ad86876395b5,1,0,0d8db0c9-adbc-478d-997c-3d7feccac99b,0d8db0c9-adbc-478d-997c-3d7feccac99b,1,0,3fd2ef04-c178-47bf-ab62-7baf83236d99,3fd2ef04-c178-47bf-ab62-7baf83236d99,1,0,b4cd1b51-dbc0-4bb0-879e-5ac0d58e78c1,b4cd1b51-dbc0-4bb0-879e-5ac0d58e78c1,1,0,320bf2e6-a3a8-490b-8aa0-21369ffb121b,320bf2e6-a3a8-490b-8aa0-21369ffb121b,1,0,a3bafc54-8fe4-4841-acc6-74a87baf9caf,a3bafc54-8fe4-4841-acc6-74a87baf9caf,1,0,f93741c9-ab94-464b-b0d4-4af99c9f92d5,f93741c9-ab94-464b-b0d4-4af99c9f92d5,1,0,0fddbd8d-12dd-4af1-9e34-feebf4bc38b1,0fddbd8d-12dd-4af1-9e34-feebf4bc38b1,1,0,2e9548a6-1fd8-4430-8864-91bde0d2a7a1,2e9548a6-1fd8-4430-8864-91bde0d2a7a1,1,0,c59fd3f8-c734-49d3-90ba-e608a22ac981,c59fd3f8-c734-49d3-90ba-e608a22ac981,1,0,b26235ed-374c-44ab-8b3c-01d7c4d82d4c,b26235ed-374c-44ab-8b3c-01d7c4d82d4c,1,0,5056db9f-9ebe-4cca-98f0-5f4817a1cba4,5056db9f-9ebe-4cca-98f0-5f4817a1cba4,1,0,475f76ea-f494-41f1-9b65-f39907e5a427,475f76ea-f494-41f1-9b65-f39907e5a427,1,0,986280d1-41bb-4b15-a5ae-516d6a04c1f4,986280d1-41bb-4b15-a5ae-516d6a04c1f4,1,0,43bfd29a-d254-4c33-8639-200b483578c1,43bfd29a-d254-4c33-8639-200b483578c1,1,0,6a274167-7f80-4613-9890-259ffd8ccfc4,6a274167-7f80-4613-9890-259ffd8ccfc4,1,0,00696255-ea14-4fee-8633-0962f3c441d1,00696255-ea14-4fee-8633-0962f3c441d1,1,0,4e90e1ab-b1ec-4795-ad45-1db151a5492c,4e90e1ab-b1ec-4795-ad45-1db151a5492c,1,0,91791e56-ca80-4d90-b8a8-16145f6a9721,91791e56-ca80-4d90-b8a8-16145f6a9721,1,0,b242c6a2-5ac9-4edb-b5dd-24eda8162151,b242c6a2-5ac9-4edb-b5dd-24eda8162151,1,0,8d080f3c-06ed-48bf-9709-eea73d676741,8d080f3c-06ed-48bf-9709-eea73d676741,1,0,57b31a5d-9fdc-43d2-ae81-67157822c4b6,57b31a5d-9fdc-43d2-ae81-67157822c4b6,1,0,d4e2da66-9a70-459f-a873-cb4ad71d17b2,d4e2da66-9a70-459f-a873-cb4ad71d17b2,1,0,a84a91d2-d326-4bf4-82e6-d573ee35d090,a84a91d2-d326-4bf4-82e6-d573ee35d090,1,0,fef27478-ddfd-4ad9-8161-148761f29698,fef27478-ddfd-4ad9-8161-148761f29698,1,0,39cbda23-db3f-4ddd-8981-8540247406db,39cbda23-db3f-4ddd-8981-8540247406db,1,0,c8a18d99-62ff-45a4-acb5-48e3310c1b53,c8a18d99-62ff-45a4-acb5-48e3310c1b53,1,0,a6eb0cb1-80f0-4390-80ff-7af53f8e63c3,a6eb0cb1-80f0-4390-80ff-7af53f8e63c3,1,0,3500c6fa-813a-49dd-a4bf-163500db5b7f,3500c6fa-813a-49dd-a4bf-163500db5b7f,1,0,1d02493a-dd89-4a51-b75e-9c49f9818b95,1d02493a-dd89-4a51-b75e-9c49f9818b95,1,0,2845c5d1-e836-4499-bcae-f3c8fdae75ee,2845c5d1-e836-4499-bcae-f3c8fdae75ee,1,0,fe4e8e4e-9471-4583-b9b3-576007db08ee,fe4e8e4e-9471-4583-b9b3-576007db08ee,1,0,49deaaa8-6d50-4b25-8153-6712d88fb0fb,49deaaa8-6d50-4b25-8153-6712d88fb0fb,1,0,1eeb7634-e924-4ad8-92e0-1c54c22b1ba6,1eeb7634-e924-4ad8-92e0-1c54c22b1ba6,1,0,46a06de8-06fd-4b49-835f-4f24b832b3c4,46a06de8-06fd-4b49-835f-4f24b832b3c4,1,0,3845a567-4375-4c3a-af61-5b82674060ab,3845a567-4375-4c3a-af61-5b82674060ab,1,0,ab210fb8-4fc4-47f8-b8ef-3a00eeb0ab8b,ab210fb8-4fc4-47f8-b8ef-3a00eeb0ab8b,1,0,a835a3a7-989b-4247-b836-d23bba2f391a,a835a3a7-989b-4247-b836-d23bba2f391a,1,0,58f5c354-8f1d-4064-ba35-527ea3d2f4a9,58f5c354-8f1d-4064-ba35-527ea3d2f4a9,1,0,9b149c20-9328-4e2d-a34b-95c883ae4dcc,9b149c20-9328-4e2d-a34b-95c883ae4dcc,1,0,dd6fdc0d-49bb-4fa1-aa17-bd9dc38a0992,dd6fdc0d-49bb-4fa1-aa17-bd9dc38a0992,1,0,f8dbf226-ea56-4b15-baf1-a41fceba2a32,f8dbf226-ea56-4b15-baf1-a41fceba2a32,1,0,fc1476f7-26e6-4374-b99b-e515d86c050a,fc1476f7-26e6-4374-b99b-e515d86c050a,1,0,e0eb7b4a-9a13-4752-9327-e13d2abc4fc5,e0eb7b4a-9a13-4752-9327-e13d2abc4fc5,1,0,c4753515-a483-453e-a48b-b12d8ef48fd9,c4753515-a483-453e-a48b-b12d8ef48fd9,1,0,2d9048eb-abdf-4980-96ed-788fbb0f4ea7,2d9048eb-abdf-4980-96ed-788fbb0f4ea7,1,0,98c3bc52-2351-460c-8b8e-0d3f45ca3131,98c3bc52-2351-460c-8b8e-0d3f45ca3131,1,0,b1ff31b9-c9f2-4be4-ac9a-62faa1d1eb81,b1ff31b9-c9f2-4be4-ac9a-62faa1d1eb81,1,0,c14ea7a0-1fb6-4d54-82d6-7f12f11b0c0b,c14ea7a0-1fb6-4d54-82d6-7f12f11b0c0b,1,0,29645810-44aa-402c-9561-7819d6f4a7ab,29645810-44aa-402c-9561-7819d6f4a7ab,1,0,46bf4911-5200-44ac-9b4d-eb0089c12e34,46bf4911-5200-44ac-9b4d-eb0089c12e34,1,0,6e1685bd-7269-401c-b36e-def6a36b41d5,6e1685bd-7269-401c-b36e-def6a36b41d5,1,0,9d77103a-9921-4f6c-98fc-d7f42f0f2d8d,9d77103a-9921-4f6c-98fc-d7f42f0f2d8d,1,0,e03b6592-b597-4795-a78e-775d4f2258db,e03b6592-b597-4795-a78e-775d4f2258db,1,0,6ae9e86a-a42f-4de0-a891-6abe1ed16cdd,6ae9e86a-a42f-4de0-a891-6abe1ed16cdd,1,0,3b207d5f-6584-4cf2-9173-20235484f9f4,3b207d5f-6584-4cf2-9173-20235484f9f4,1,0,878d9efe-b0e7-487f-b8f7-83470c131e09,878d9efe-b0e7-487f-b8f7-83470c131e09,1,0,8270573d-8ed6-449d-853b-462d2dabaaa9,8270573d-8ed6-449d-853b-462d2dabaaa9,1,0,baeec6cd-b220-4240-95f2-3a0c1ee06c2e,baeec6cd-b220-4240-95f2-3a0c1ee06c2e,1,0,f2502463-67e4-4bfe-8ad5-fb80aa73975a,f2502463-67e4-4bfe-8ad5-fb80aa73975a,1,0,59e885e6-d978-40c2-95b6-35fc61074fb4,59e885e6-d978-40c2-95b6-35fc61074fb4,1,0,267dc512-9ee1-4bc1-9034-3effb7fb2949,267dc512-9ee1-4bc1-9034-3effb7fb2949,1,0,0f211e73-5be9-4015-93e7-ccf63e793cb6,0f211e73-5be9-4015-93e7-ccf63e793cb6,1,0,6574d8f4-fb97-4a26-b166-711fad63aa07,6574d8f4-fb97-4a26-b166-711fad63aa07,1,0,fb3eddaf-3241-4d59-8314-97a5ae9258c4,fb3eddaf-3241-4d59-8314-97a5ae9258c4,1,0,6528bd7a-bac1-4c8b-9b00-6be01c0121b1,6528bd7a-bac1-4c8b-9b00-6be01c0121b1,1,0,d8601e95-af94-4805-974a-99c539725d74,d8601e95-af94-4805-974a-99c539725d74,1,0,6d98f877-f3bb-4795-9025-2631468a331f,6d98f877-f3bb-4795-9025-2631468a331f,1,0,89b9379d-ace9-48cc-b979-a66fd45aeb1d,89b9379d-ace9-48cc-b979-a66fd45aeb1d,1,0,c4a5c44d-329d-41b5-9a6c-bddbc15f6249,c4a5c44d-329d-41b5-9a6c-bddbc15f6249,1,0,9767a113-5a42-4749-bf40-0f349e85615d,9767a113-5a42-4749-bf40-0f349e85615d,1,0,a3b0494c-f436-45ea-9577-4c0c86b057c9,a3b0494c-f436-45ea-9577-4c0c86b057c9,1,0,5101c142-b25c-4bef-80e7-7407f2c15c90,5101c142-b25c-4bef-80e7-7407f2c15c90,1,0,6d7872f1-fd54-41c4-8253-5f2b125f31ae,6d7872f1-fd54-41c4-8253-5f2b125f31ae,1,0,0c218200-27a8-4f71-9b09-3632dd453644,0c218200-27a8-4f71-9b09-3632dd453644,1,0,2d8a74e5-eb29-448b-b4c0-1f41fa171b5e,2d8a74e5-eb29-448b-b4c0-1f41fa171b5e,1,0,b5d30250-18ab-4af1-b99a-ff5dba334d1f,b5d30250-18ab-4af1-b99a-ff5dba334d1f,1,0,936f1aa5-7516-444b-b451-1162fa5d705f,936f1aa5-7516-444b-b451-1162fa5d705f,1,0,e8d5533e-2669-44f6-9eed-eaedab666d42,e8d5533e-2669-44f6-9eed-eaedab666d42,1,0,dd8e0f41-51a3-4bf2-a32e-084f9ad09be7,dd8e0f41-51a3-4bf2-a32e-084f9ad09be7,1,0,9e323b0d-4e3b-45d4-9705-aa30e63014f5,9e323b0d-4e3b-45d4-9705-aa30e63014f5,1,0,5afa798a-958e-4e0c-a380-0104f4c037a7,5afa798a-958e-4e0c-a380-0104f4c037a7,1,0,c0295fd9-c749-41b3-8d0d-6af16f484b1f,c0295fd9-c749-41b3-8d0d-6af16f484b1f,1,0,bd32a863-3090-432d-89c4-356ba86a0bdc,bd32a863-3090-432d-89c4-356ba86a0bdc,1,0,4621bf5a-46b5-4b82-8ae4-cc8e11e81ba0,4621bf5a-46b5-4b82-8ae4-cc8e11e81ba0,1,0,ed5465b4-a556-4078-ab18-49fef2afba2e,ed5465b4-a556-4078-ab18-49fef2afba2e,1,0,7368ab8f-59d5-4270-a43b-0f3e422169ed,7368ab8f-59d5-4270-a43b-0f3e422169ed,1,0,eeb0571b-1b74-4889-b8b5-f94186d692d7,eeb0571b-1b74-4889-b8b5-f94186d692d7,1,0,9ef3b72c-caa3-486b-9917-04c00f6689c1,9ef3b72c-caa3-486b-9917-04c00f6689c1,1,0,cb3039d8-4b11-4d03-b0ca-eae5dfc01b0a,cb3039d8-4b11-4d03-b0ca-eae5dfc01b0a,1,0,9245417f-f247-47ba-a1b4-a17ec2e8776c,9245417f-f247-47ba-a1b4-a17ec2e8776c,1,0,a4b721d7-b119-47eb-80e0-7db34c83964f,a4b721d7-b119-47eb-80e0-7db34c83964f,1,0,512629d1-e8b7-4f66-b613-b8c0cb9c250b,512629d1-e8b7-4f66-b613-b8c0cb9c250b,1,0,b7cf4684-4432-4658-9c06-b315d470a3a6,b7cf4684-4432-4658-9c06-b315d470a3a6,1,0,d3bc8211-54d8-47dd-aecf-5da72b65195f,d3bc8211-54d8-47dd-aecf-5da72b65195f,1,0,33f11da8-f670-4ec3-9d40-96fce031c60f,33f11da8-f670-4ec3-9d40-96fce031c60f,1,0,97cbd5b5-5a39-418c-93b5-f9934fa1ba4e,97cbd5b5-5a39-418c-93b5-f9934fa1ba4e,1,0,f74c2d41-2433-4bed-8aef-adfeed198252,f74c2d41-2433-4bed-8aef-adfeed198252,1,0,3c2b8a8a-bfe7-4e37-9d83-55a695a06605,3c2b8a8a-bfe7-4e37-9d83-55a695a06605,1,0,56c9703a-751a-4e6c-81f4-a8756fb040e3,56c9703a-751a-4e6c-81f4-a8756fb040e3,1,0,c3a86eec-1ff5-4392-9904-91a12a2e253a,c3a86eec-1ff5-4392-9904-91a12a2e253a,1,0,f5df72a3-c71c-412b-8c3e-6329f1d3a7da,f5df72a3-c71c-412b-8c3e-6329f1d3a7da,1,0,f02b7246-dae9-4e15-b4cd-b06133664d34,f02b7246-dae9-4e15-b4cd-b06133664d34,1,0,77f20022-17ce-4e00-8a84-015238bce6f3,77f20022-17ce-4e00-8a84-015238bce6f3,1,0,3734619b-7059-4547-8b97-0b3393389d4d,3734619b-7059-4547-8b97-0b3393389d4d,1,0,a30bf95f-aabd-4da0-8287-61e08f9362fb,a30bf95f-aabd-4da0-8287-61e08f9362fb,1,0,f5a7df18-2ddb-4053-9aeb-57fc37ae557e,f5a7df18-2ddb-4053-9aeb-57fc37ae557e,1,0,4078867c-2972-47f9-bebd-935a6f1cc667,4078867c-2972-47f9-bebd-935a6f1cc667,1,0,8502fe39-c241-4be5-a313-fd887bbbdfa1,8502fe39-c241-4be5-a313-fd887bbbdfa1,1,0,67a71201-13e5-42a3-902f-fb3a59710dfb,67a71201-13e5-42a3-902f-fb3a59710dfb,1,0,3a79a951-a997-4596-ab62-ba376d67725d,3a79a951-a997-4596-ab62-ba376d67725d,1,0,dd4fe688-c113-4ac5-8114-b89cf1b0eb55,dd4fe688-c113-4ac5-8114-b89cf1b0eb55,1,0,884c28de-434f-440a-8c63-67e659c097ad,884c28de-434f-440a-8c63-67e659c097ad,1,0,92ead3b5-8c55-4e4d-bd47-009e025b22f8,92ead3b5-8c55-4e4d-bd47-009e025b22f8,1,0,50d8e365-aa58-4b60-8992-01943379d485,50d8e365-aa58-4b60-8992-01943379d485,1,0,9bb58c7c-d87d-435b-adf6-09c8f75d47b2,9bb58c7c-d87d-435b-adf6-09c8f75d47b2,1,0,b3f7f763-bea9-4f59-9450-df95e5c3d89d,b3f7f763-bea9-4f59-9450-df95e5c3d89d,1,0,9111e28e-c1c7-414b-9288-61bd06a04d04,9111e28e-c1c7-414b-9288-61bd06a04d04,1,0,bcd705ba-c9ac-4e73-94b1-7632c0f06c04,bcd705ba-c9ac-4e73-94b1-7632c0f06c04,1,0,fec102ea-a3f6-49b5-b4b8-6884b0654129,fec102ea-a3f6-49b5-b4b8-6884b0654129,1,0,246571fb-38c7-4da6-929d-d8b44bc3437c,246571fb-38c7-4da6-929d-d8b44bc3437c,1,0,047fd6d7-5e30-4184-a09a-6525de526cc7,047fd6d7-5e30-4184-a09a-6525de526cc7,1,0,beb44b02-5d5e-4127-aee7-e184a43a4210,beb44b02-5d5e-4127-aee7-e184a43a4210,1,0,1dedfbc2-9250-4229-a6ea-5e085f33e7c3,1dedfbc2-9250-4229-a6ea-5e085f33e7c3,1,0,e24641ed-3e92-46d7-852b-9958ab7bc520,e24641ed-3e92-46d7-852b-9958ab7bc520,1,0,bc2aa3f9-ef2c-49a5-8cd9-ddd8a8cbe19d,bc2aa3f9-ef2c-49a5-8cd9-ddd8a8cbe19d,1,0,b6ac4cd6-c68f-4464-88e9-a8d335d581c6,b6ac4cd6-c68f-4464-88e9-a8d335d581c6,1,0,2c61114f-abd7-4415-8cdf-4fe95d9fe354,2c61114f-abd7-4415-8cdf-4fe95d9fe354,1,0,abd7a766-5cc1-48db-8d29-797e9d666a78,abd7a766-5cc1-48db-8d29-797e9d666a78,1,0,1704b5e3-8e77-4df6-9223-e6e5c41a280d,1704b5e3-8e77-4df6-9223-e6e5c41a280d,1,0,62eca88f-025d-44de-b92c-46cd8bc7e4a1,62eca88f-025d-44de-b92c-46cd8bc7e4a1,1,0,b0dde395-8498-4469-9507-d290798117d7,b0dde395-8498-4469-9507-d290798117d7,1,0,999616ea-0faa-4ae2-9841-6a6997ea6694,999616ea-0faa-4ae2-9841-6a6997ea6694,1,0,c5f91669-13d8-4f0a-a054-2701078da38a,c5f91669-13d8-4f0a-a054-2701078da38a,1,0,34f9872b-e02e-4093-ba06-3cb5b8995850,34f9872b-e02e-4093-ba06-3cb5b8995850,1,0,18515c19-c9ef-4c9f-8d12-4f58ffa251e8,18515c19-c9ef-4c9f-8d12-4f58ffa251e8,1,0,3afe11f6-7424-4b41-a42f-91db33756fa3,3afe11f6-7424-4b41-a42f-91db33756fa3,1,0,94e68502-adf1-476e-be2f-8418385959fa,94e68502-adf1-476e-be2f-8418385959fa,1,0,bf80ccc5-f907-4e7f-a007-6030c7ba682e,bf80ccc5-f907-4e7f-a007-6030c7ba682e,1,0,134bbd7c-cadd-4395-b7a4-0249dfe7d0b1,134bbd7c-cadd-4395-b7a4-0249dfe7d0b1,1,0,05f1f184-50cb-47c5-b3a8-62be6a9780c1,05f1f184-50cb-47c5-b3a8-62be6a9780c1,1,0,f908b81e-f5ba-46ca-b7c0-8cb43ab23901,f908b81e-f5ba-46ca-b7c0-8cb43ab23901,1,0,3c305f89-e453-46c7-987b-f01dc964efdb,3c305f89-e453-46c7-987b-f01dc964efdb,1,0,1809ff43-2af2-44d1-ac7b-91d5bbe4f0ce,1809ff43-2af2-44d1-ac7b-91d5bbe4f0ce,1,0,58c3936c-4db0-45c8-a22e-b5dd49a61497,58c3936c-4db0-45c8-a22e-b5dd49a61497,1,0,9aa607bc-5870-436a-bbe1-296560393e3b,9aa607bc-5870-436a-bbe1-296560393e3b,1,0,1635be16-4861-4a7d-babc-4caff448a7f7,1635be16-4861-4a7d-babc-4caff448a7f7,1,0,9e399087-c957-4a7a-ab9d-2b689736caab,9e399087-c957-4a7a-ab9d-2b689736caab,1,0,e7542e37-a2f0-43b5-852e-4e2b24b1b71f,e7542e37-a2f0-43b5-852e-4e2b24b1b71f,1,0,3e94649c-7d69-4fb4-ada1-ae00eabf02b6,3e94649c-7d69-4fb4-ada1-ae00eabf02b6,1,0,2b7372be-af0d-464e-8d09-8172229790af,2b7372be-af0d-464e-8d09-8172229790af,1,0,d85346db-be25-4dab-a2db-647c3d40dd17,d85346db-be25-4dab-a2db-647c3d40dd17,1,0,c7bafd34-5b15-42ec-b329-0be3002775ad,c7bafd34-5b15-42ec-b329-0be3002775ad,1,0,6feb2278-9149-47f8-a0ec-eb4bd9f44716,6feb2278-9149-47f8-a0ec-eb4bd9f44716,1,0,c960082b-8c16-4d7b-b7fd-b1f2bfe07e0b,c960082b-8c16-4d7b-b7fd-b1f2bfe07e0b,1,0,cd6770d5-cd3c-47af-bc46-c865993adf63,cd6770d5-cd3c-47af-bc46-c865993adf63,1,0,97ec899d-a2a0-4691-83ff-25b78dd49ef6,97ec899d-a2a0-4691-83ff-25b78dd49ef6,1,0,411db885-f761-44e5-bdd1-9fdf9e741ac1,411db885-f761-44e5-bdd1-9fdf9e741ac1,1,0,269ada84-71a9-4b4b-9604-caa40c5b7067,269ada84-71a9-4b4b-9604-caa40c5b7067,1,0,ea13607a-3e05-4468-9932-41b6d51cfedf,ea13607a-3e05-4468-9932-41b6d51cfedf,1,0,9f9936fc-54a0-4812-b12d-2f8f91551440,9f9936fc-54a0-4812-b12d-2f8f91551440,1,0,a5667633-9264-4dfa-9e26-c45e96e61ae3,a5667633-9264-4dfa-9e26-c45e96e61ae3,1,0,2eeea138-481c-4fde-9e8a-709d751cc469,2eeea138-481c-4fde-9e8a-709d751cc469,1,0,43e37533-ed38-4000-a387-5749f8d9aaf3,43e37533-ed38-4000-a387-5749f8d9aaf3,1,0,e93bdb44-64b3-43d8-b15a-c561dbb91974,e93bdb44-64b3-43d8-b15a-c561dbb91974,1,0,a7c7c835-5402-4bdd-a0e3-d21746174d5a,a7c7c835-5402-4bdd-a0e3-d21746174d5a,1,0,07e81872-afac-4720-86b4-91e7bf4a2881,07e81872-afac-4720-86b4-91e7bf4a2881,1,0,02c5f3b2-d691-4eaf-84fd-763770e4b1cb,02c5f3b2-d691-4eaf-84fd-763770e4b1cb,1,0,845262f8-8208-4c90-98ec-c85dd5734cf0,845262f8-8208-4c90-98ec-c85dd5734cf0,1,0,532dfa48-39b0-4d0f-9f8c-b51ca27e47a9,532dfa48-39b0-4d0f-9f8c-b51ca27e47a9,1,0,17bc0f34-c35b-4beb-be5f-8e8d8f06c053,17bc0f34-c35b-4beb-be5f-8e8d8f06c053,1,0,f91813e6-b75c-43fb-8da3-a0d958dc6fa0,f91813e6-b75c-43fb-8da3-a0d958dc6fa0,1,0,ad066c0d-4f4c-48af-9cc8-bb835372150a,ad066c0d-4f4c-48af-9cc8-bb835372150a,1,0,a2145e81-239e-4267-8a43-ea3f7babe878,a2145e81-239e-4267-8a43-ea3f7babe878,1,0,39598414-9c1d-46ec-a534-8bd43e622e45,39598414-9c1d-46ec-a534-8bd43e622e45,1,0,b552c510-4fd4-4c16-9022-dc5babcafc52,b552c510-4fd4-4c16-9022-dc5babcafc52,1,0,3892c06d-28f1-4238-a929-201316cac1ed,3892c06d-28f1-4238-a929-201316cac1ed,1,0,c13dea2e-17fa-4a5f-a70f-96e623db8a6b,c13dea2e-17fa-4a5f-a70f-96e623db8a6b,1,0,339e8cba-a92e-42f6-8d00-3b8b56ce3b0f,339e8cba-a92e-42f6-8d00-3b8b56ce3b0f,1,0,1f587ff1-95a4-4f45-85b4-22bb97011177,1f587ff1-95a4-4f45-85b4-22bb97011177,1,0,567c68fd-74c7-4b6e-9119-56ac8d78073c,567c68fd-74c7-4b6e-9119-56ac8d78073c,1,0,3326bbcb-b277-44db-a252-2448119e8146,3326bbcb-b277-44db-a252-2448119e8146,1,0,61cac5f7-320c-4098-9078-44fadcdeb219,61cac5f7-320c-4098-9078-44fadcdeb219,1,0,304304b1-36a4-42bb-8ab9-b23b59795001,304304b1-36a4-42bb-8ab9-b23b59795001,1,0,a22d1a4f-cb7c-4bcc-b258-ecca282fb071,a22d1a4f-cb7c-4bcc-b258-ecca282fb071,1,0,e5beda2c-f4e2-4a6b-a1d0-a877eb0c9f5b,e5beda2c-f4e2-4a6b-a1d0-a877eb0c9f5b,1,0,cd454738-62dd-4f95-af33-b52750678428,cd454738-62dd-4f95-af33-b52750678428,1,0,2a479b8f-7569-43d0-8ca3-9001d6ec57f0,2a479b8f-7569-43d0-8ca3-9001d6ec57f0,1,0,e4abafc6-f859-4d96-9818-5b9bf8d66d69,e4abafc6-f859-4d96-9818-5b9bf8d66d69,1,0,535acd2c-26d2-4f32-9ae6-cc1956317c59,535acd2c-26d2-4f32-9ae6-cc1956317c59,1,0,801adeeb-8a7f-44c1-b649-a7dfffc7b65d,801adeeb-8a7f-44c1-b649-a7dfffc7b65d,1,0,ac4e0868-ba49-46b4-8872-d42483a5591f,ac4e0868-ba49-46b4-8872-d42483a5591f,1,0,45e6c4a6-1d63-4b94-a7d2-fbd3fb68061b,45e6c4a6-1d63-4b94-a7d2-fbd3fb68061b,1,0,0493dcf1-5f94-41f9-a4c7-a52e12a29068,0493dcf1-5f94-41f9-a4c7-a52e12a29068,1,0,ca4c0299-625a-4b03-be0e-36ffb45c6d08,ca4c0299-625a-4b03-be0e-36ffb45c6d08,1,0,7fa1119b-4321-4b8f-a879-1d940084145a,7fa1119b-4321-4b8f-a879-1d940084145a,1,0,5d9c0841-6ea6-48dc-a53b-9f19894750f8,5d9c0841-6ea6-48dc-a53b-9f19894750f8,1,0,86b5303b-d967-4bc6-b2da-066c5a58613f,86b5303b-d967-4bc6-b2da-066c5a58613f,1,0,853b824d-9377-475f-913e-d02bd60f5f64,853b824d-9377-475f-913e-d02bd60f5f64,1,0,d5a73869-381e-4878-8db7-596643937202,d5a73869-381e-4878-8db7-596643937202,1,0,3a93f1d2-3e9c-41a9-9d53-314538a96bb2,3a93f1d2-3e9c-41a9-9d53-314538a96bb2,1,0,8bc4bece-027f-460c-ade0-d7c7d3d9a6b7,8bc4bece-027f-460c-ade0-d7c7d3d9a6b7,1,0,dd73a8d8-a6db-4d3c-a808-d82bad8876b9,dd73a8d8-a6db-4d3c-a808-d82bad8876b9,1,0,11a93e3a-3c5b-4242-913c-02474a383344,11a93e3a-3c5b-4242-913c-02474a383344,1,0,ddd2861c-592b-4879-b9de-4b05a22c0b43,ddd2861c-592b-4879-b9de-4b05a22c0b43,1,0,5b383021-a800-4f0b-b8a3-d344389bff6c,5b383021-a800-4f0b-b8a3-d344389bff6c,1,0,8fe71bce-a61a-4a2e-bd18-81c7a7bb4456,8fe71bce-a61a-4a2e-bd18-81c7a7bb4456,1,0,11e708d8-82f4-4d45-a77d-7b9d23c0ef54,11e708d8-82f4-4d45-a77d-7b9d23c0ef54,1,0,8a57d427-a34e-4121-84e6-1a86a9f9092d,8a57d427-a34e-4121-84e6-1a86a9f9092d,1,0,dbc1bf11-e92a-4f4e-90d4-6a3ccdaec7e5,dbc1bf11-e92a-4f4e-90d4-6a3ccdaec7e5,1,0,29ec9423-25ef-4cf2-ad6a-58f854c3e22b,29ec9423-25ef-4cf2-ad6a-58f854c3e22b,1,0,2607e4d1-4fc0-4270-ad45-2c95d4aa04da,2607e4d1-4fc0-4270-ad45-2c95d4aa04da,1,0,b4b4bd5d-a860-4994-90b7-0c60ab680c4e,b4b4bd5d-a860-4994-90b7-0c60ab680c4e,1,0,68447105-a784-4803-8eb8-3701b0fc819d,68447105-a784-4803-8eb8-3701b0fc819d,1,0,5fb5320c-cd7c-4f28-ad6a-8670a60a9e11,5fb5320c-cd7c-4f28-ad6a-8670a60a9e11,1,0,59dee70d-aeca-470a-b3c4-e43bb16c5753,59dee70d-aeca-470a-b3c4-e43bb16c5753,1,0,82777e92-0681-44bf-b51e-4d98fcd5d5bd,82777e92-0681-44bf-b51e-4d98fcd5d5bd,1,0,2e0b331d-92d4-4250-94c6-9ced8cdcb1e4,2e0b331d-92d4-4250-94c6-9ced8cdcb1e4,1,0,4599ef83-5f1e-44af-ae0c-67988656a99e,4599ef83-5f1e-44af-ae0c-67988656a99e,1,0,acb0d7eb-2ed9-4419-b79d-7dc661d70c30,acb0d7eb-2ed9-4419-b79d-7dc661d70c30,1,0,e1b94dcf-ec37-4b2d-a7af-120eeee40944,e1b94dcf-ec37-4b2d-a7af-120eeee40944,1,0,7d2a37b1-a1a0-435a-846a-95e255655044,7d2a37b1-a1a0-435a-846a-95e255655044,1,0,109db64c-00dc-490e-99a5-4430d9344e99,109db64c-00dc-490e-99a5-4430d9344e99,1,0,85837a55-fed5-4b7b-a622-30d728b9a677,85837a55-fed5-4b7b-a622-30d728b9a677,1,0,0fd79cdb-dc7a-40ca-a3bc-2c7a7b4691bb,0fd79cdb-dc7a-40ca-a3bc-2c7a7b4691bb,1,0,6ede8b5c-7df0-44a5-9136-8109bbd8b5a9,6ede8b5c-7df0-44a5-9136-8109bbd8b5a9,1,0,325bacdd-793f-47d8-b987-57e9d5f2782b,325bacdd-793f-47d8-b987-57e9d5f2782b,1,0,80395d47-70d7-4d8d-9b18-93283fba80c2,80395d47-70d7-4d8d-9b18-93283fba80c2,1,0,8b621ec9-24c9-4166-90ce-29c5ad30f78b,8b621ec9-24c9-4166-90ce-29c5ad30f78b,1,0,cc98670a-7b18-4973-b211-90261c5c8c10,cc98670a-7b18-4973-b211-90261c5c8c10,1,0,da9821c3-4b16-48b7-9088-d3cf8ac536a6,da9821c3-4b16-48b7-9088-d3cf8ac536a6,1,0,fb36c775-1124-4ba6-8af8-133bf66fcb54,fb36c775-1124-4ba6-8af8-133bf66fcb54,1,0,51f9aff4-71da-4b1b-b48b-04122a17d855,51f9aff4-71da-4b1b-b48b-04122a17d855,1,0,d5142574-a040-4dd0-a482-cdc61c1d86ab,d5142574-a040-4dd0-a482-cdc61c1d86ab,1,0,62957889-503f-4923-a372-29776dc3b5e5,62957889-503f-4923-a372-29776dc3b5e5,1,0,778e79ee-eb1a-4d52-8a31-58e781c78fe4,778e79ee-eb1a-4d52-8a31-58e781c78fe4,1,0,90385850-d37b-4b2e-ac87-95c17f32197c,90385850-d37b-4b2e-ac87-95c17f32197c,1,0,b9e5bb39-ed0a-4e12-b7e4-2d9b5015bf9c,b9e5bb39-ed0a-4e12-b7e4-2d9b5015bf9c,1,0,dbced4aa-6432-4f0c-a99a-5a3e7b0f6755,dbced4aa-6432-4f0c-a99a-5a3e7b0f6755,1,0,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,b7fae67e-bdbb-4cdf-a6fd-26265e48fddb,b7fae67e-bdbb-4cdf-a6fd-26265e48fddb,1,0,398bf9d1-c353-461e-a1be-683047dcbe41,398bf9d1-c353-461e-a1be-683047dcbe41,1,0,f36150de-33af-4410-8a4c-8c9f4b545793,f36150de-33af-4410-8a4c-8c9f4b545793,1,0,62f97480-7d4a-48f3-9d1d-612909b242c9,62f97480-7d4a-48f3-9d1d-612909b242c9,1,0,2b4f6e2f-6cc4-4c7c-98a6-786f3793366b,2b4f6e2f-6cc4-4c7c-98a6-786f3793366b,1,0,3068be84-a401-4701-8ac9-411fae130f84,3068be84-a401-4701-8ac9-411fae130f84,1,0,957394a7-e5b8-47fc-8680-1e71efe2be7d,957394a7-e5b8-47fc-8680-1e71efe2be7d,1,0,ba49a9e4-6ec1-43ff-92cd-9dbf221bbf09,ba49a9e4-6ec1-43ff-92cd-9dbf221bbf09,1,0,4f25ef45-c8d9-401d-b0e8-2217ac310f04,4f25ef45-c8d9-401d-b0e8-2217ac310f04,1,0,504ca240-b5ae-433e-ae5f-d818263eea23,504ca240-b5ae-433e-ae5f-d818263eea23,1,0,32461819-9437-417d-8d1e-851c9a2dcee2,32461819-9437-417d-8d1e-851c9a2dcee2,1,0,74228950-8a4b-4dd6-a053-8650de202521,74228950-8a4b-4dd6-a053-8650de202521,1,0,6b9ce91e-08b9-4972-9878-1724c67b68ec,6b9ce91e-08b9-4972-9878-1724c67b68ec,1,0,640814f2-6082-475e-8006-25fd5b24afdb,640814f2-6082-475e-8006-25fd5b24afdb,1,0,6fcd2a3a-4d66-40e3-bde0-5c274b43783f,6fcd2a3a-4d66-40e3-bde0-5c274b43783f,1,0,569047c2-0879-4fba-a814-44812d21043b,569047c2-0879-4fba-a814-44812d21043b,1,0,0c3c4494-c037-431e-9eeb-9b6cfd7372c3,0c3c4494-c037-431e-9eeb-9b6cfd7372c3,1,0,80512d95-5458-4934-98ae-a7b58099196b,80512d95-5458-4934-98ae-a7b58099196b,1,0,6f2354cd-4a34-4921-96bb-b786486f85cf,6f2354cd-4a34-4921-96bb-b786486f85cf,1,0,f1b66ea8-262d-4b38-a039-b83a843f6ee8,f1b66ea8-262d-4b38-a039-b83a843f6ee8,1,0,bcae6e05-f1fd-413e-9eef-2e1cee42a962,bcae6e05-f1fd-413e-9eef-2e1cee42a962,1,0,40da1bca-ebb3-4c64-bf54-1f37b71d47b6,40da1bca-ebb3-4c64-bf54-1f37b71d47b6,1,0,778b4c8f-7a1e-4b4b-9f68-12cbf52bf195,778b4c8f-7a1e-4b4b-9f68-12cbf52bf195,1,0,91562fe8-e630-4bcb-a14e-c0e1e129141a,91562fe8-e630-4bcb-a14e-c0e1e129141a,1,0,c261abfd-3828-47b5-aa32-dfdd3a1636ad,c261abfd-3828-47b5-aa32-dfdd3a1636ad,1,0,e9aa6dab-0d96-42ce-9bd6-b8b10d755f8c,e9aa6dab-0d96-42ce-9bd6-b8b10d755f8c,1,0,1db1cb24-f364-4b91-bc96-c216764207a0,1db1cb24-f364-4b91-bc96-c216764207a0,1,0,64d7c8a7-1c15-4afb-ad97-abf8729c604e,64d7c8a7-1c15-4afb-ad97-abf8729c604e,1,0,a3cbbc8a-4afd-48c5-91d4-4849d18905c1,a3cbbc8a-4afd-48c5-91d4-4849d18905c1,1,0,5d6b29dc-38af-4dce-b79c-ce8f23afb3b1,5d6b29dc-38af-4dce-b79c-ce8f23afb3b1,1,0,c04b685a-0d2d-404c-a74a-775ffab298ce,c04b685a-0d2d-404c-a74a-775ffab298ce,1,0,5fe6967d-e333-464b-a89e-8c868c0ce37d,5fe6967d-e333-464b-a89e-8c868c0ce37d,1,0,5aef2892-7a87-4d3b-bb46-8340a7fb97a8,5aef2892-7a87-4d3b-bb46-8340a7fb97a8,1,0,84da1ef8-1784-4dfc-b17a-7728aa7ff62a,84da1ef8-1784-4dfc-b17a-7728aa7ff62a,1,0,9155c95b-6afb-41bb-bd0b-d37e503fc163,9155c95b-6afb-41bb-bd0b-d37e503fc163,1,0,d917c19e-be15-41cc-9c8a-a97c8de85309,d917c19e-be15-41cc-9c8a-a97c8de85309,1,0,54b5b44c-5f24-4b2a-982c-4489b18db7f0,54b5b44c-5f24-4b2a-982c-4489b18db7f0,1,0,5bc04a9a-6a0a-4607-b8eb-743b87143ae7,5bc04a9a-6a0a-4607-b8eb-743b87143ae7,1,0,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,e33df42d-4c64-4475-8294-6b05ecdb4e02,e33df42d-4c64-4475-8294-6b05ecdb4e02,1,0,6094a0ed-2051-4649-ad75-dfeb389d3cbb,6094a0ed-2051-4649-ad75-dfeb389d3cbb,1,0,6944a7e2-b9a1-492f-a6f2-9bf31d97ec78,6944a7e2-b9a1-492f-a6f2-9bf31d97ec78,1,0,f3750ea4-5f9e-4ab3-9495-3f182ecff407,f3750ea4-5f9e-4ab3-9495-3f182ecff407,1,0,14002d51-87d4-4647-92ef-a9b1935cb666,14002d51-87d4-4647-92ef-a9b1935cb666,1,0,e941a39d-1f3c-4e6e-af17-75f92a15dd40,e941a39d-1f3c-4e6e-af17-75f92a15dd40,1,0,d9bbedcb-4872-4183-83c2-6c2aae9634b0,d9bbedcb-4872-4183-83c2-6c2aae9634b0,1,0,72c695c3-66f6-4aa8-8a39-737ec6967a1d,72c695c3-66f6-4aa8-8a39-737ec6967a1d,1,0,2beef1e0-7a59-407e-b454-ee2ec38ca4b3,2beef1e0-7a59-407e-b454-ee2ec38ca4b3,1,0,b57a1d6f-8375-4d57-a2c1-f53e25318ddb,b57a1d6f-8375-4d57-a2c1-f53e25318ddb,1,0,d5d11480-d5c7-4569-80c1-f872655ff084,d5d11480-d5c7-4569-80c1-f872655ff084,1,0,b1e45d36-08e9-430e-976b-03e6e3320c6a,b1e45d36-08e9-430e-976b-03e6e3320c6a,1,0,b5384eb7-40e4-4437-b96b-eab9b7b5b8f2,b5384eb7-40e4-4437-b96b-eab9b7b5b8f2,1,0,8e21374f-5a65-406c-856d-2040607da4bc,8e21374f-5a65-406c-856d-2040607da4bc,1,0,7904d64a-2c30-4434-8924-b4817b727db9,7904d64a-2c30-4434-8924-b4817b727db9,1,0,c550a43a-1240-4f29-9045-a262f37f703a,c550a43a-1240-4f29-9045-a262f37f703a,1,0,86b1feed-ed65-4672-a49a-c52282b40be3,86b1feed-ed65-4672-a49a-c52282b40be3,1,0,85ac42d7-400a-4469-8fcd-e6a14f258792,85ac42d7-400a-4469-8fcd-e6a14f258792,1,0,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,e0227e4b-be22-4614-8980-5d573fae705d,e0227e4b-be22-4614-8980-5d573fae705d,1,0,7a7b7882-a4c1-40c8-a807-cb2d71d054cc,7a7b7882-a4c1-40c8-a807-cb2d71d054cc,1,0,6f36007b-04dc-4007-abf7-e20fbd126b97,6f36007b-04dc-4007-abf7-e20fbd126b97,1,0,66ef1631-277b-4c22-99d7-1434b4dbbb3f,66ef1631-277b-4c22-99d7-1434b4dbbb3f,1,0,aa6444a8-6c17-4207-a623-9b734e08e30e,aa6444a8-6c17-4207-a623-9b734e08e30e,1,0,898535ff-50cd-464a-aadc-5e4f9de15b04,898535ff-50cd-464a-aadc-5e4f9de15b04,1,0,385e209d-65aa-43b1-8591-f92544882740,385e209d-65aa-43b1-8591-f92544882740,1,0,7cfa5a37-b9f8-43e4-ae33-e3a7251dd052,7cfa5a37-b9f8-43e4-ae33-e3a7251dd052,1,0,2f8a5b9d-ab86-492b-85d1-5a28535b2ebc,2f8a5b9d-ab86-492b-85d1-5a28535b2ebc,1,0,737f6f1b-9ffc-4916-b378-7321eab1f886,737f6f1b-9ffc-4916-b378-7321eab1f886,1,0,8381bc76-0e0f-4196-9911-ec05730cb1c9,8381bc76-0e0f-4196-9911-ec05730cb1c9,1,0,01dedf5b-2cce-4d24-81ea-2e3af82f5794,01dedf5b-2cce-4d24-81ea-2e3af82f5794,1,0,771a1900-46be-49fe-a02d-584780de8363,771a1900-46be-49fe-a02d-584780de8363,1,0,f81b1f2d-6fde-4861-8fee-1dbe6acf3985,f81b1f2d-6fde-4861-8fee-1dbe6acf3985,1,0,b62eecf6-6ee3-4a70-a4d6-3f064ae35c43,b62eecf6-6ee3-4a70-a4d6-3f064ae35c43,1,0,9bf2525c-e8fc-44e6-ac14-7df3208dbb0f,9bf2525c-e8fc-44e6-ac14-7df3208dbb0f,1,0,a2faa3f8-5064-4fbf-a90e-26d15c021cd3,a2faa3f8-5064-4fbf-a90e-26d15c021cd3,1,0,527ea8ca-e723-454a-8e9e-f2e7a38e62ee,527ea8ca-e723-454a-8e9e-f2e7a38e62ee,1,0,ef257b20-da10-4cda-8b9d-7de2d68a2f71,ef257b20-da10-4cda-8b9d-7de2d68a2f71,1,0,de0d41b7-acc0-4ebc-8933-d6b5ad351860,de0d41b7-acc0-4ebc-8933-d6b5ad351860,1,0,acd30e63-68dc-4ab2-a6fe-16eb69d09271,acd30e63-68dc-4ab2-a6fe-16eb69d09271,1,0,9ef5dd5e-1f26-4187-90a0-a3ac7aaabc1d,9ef5dd5e-1f26-4187-90a0-a3ac7aaabc1d,1,0,1a354069-07ea-40e0-bbac-e1b6232750c2,1a354069-07ea-40e0-bbac-e1b6232750c2,1,0,df31548b-0b8e-412b-999a-761970ae3c23,df31548b-0b8e-412b-999a-761970ae3c23,1,0,05135747-43e7-4b61-bc30-57b3289ea923,05135747-43e7-4b61-bc30-57b3289ea923,1,0,6d63728d-3384-4131-b890-1b82d14a04b7,6d63728d-3384-4131-b890-1b82d14a04b7,1,0,13b3c973-6be3-4898-89d5-20852cd14e46,13b3c973-6be3-4898-89d5-20852cd14e46,1,0,d978d078-4fd8-40b9-90c2-047cdaf94cba,d978d078-4fd8-40b9-90c2-047cdaf94cba,1,0,f38bb317-8a59-4786-be76-e1d4e534628d,f38bb317-8a59-4786-be76-e1d4e534628d,1,0,f4554046-493e-4960-94df-0a8b9d02f474,f4554046-493e-4960-94df-0a8b9d02f474,1,0,06abad33-2d69-4e8b-a16c-8aa0d4422d5a,06abad33-2d69-4e8b-a16c-8aa0d4422d5a,1,0,9222a6c0-b785-4811-bfb6-44ac44a55925,9222a6c0-b785-4811-bfb6-44ac44a55925,1,0,ea84021d-2431-44ad-a446-f1fb979c9e96,ea84021d-2431-44ad-a446-f1fb979c9e96,1,0,d86acdeb-fa70-4d1c-bd0c-1b4ea30c03dd,d86acdeb-fa70-4d1c-bd0c-1b4ea30c03dd,1,0,8fa21575-177f-4b7c-94b5-dfeefe737cb4,8fa21575-177f-4b7c-94b5-dfeefe737cb4,1,0,6da034af-0481-4a3c-aff9-c50ced6f21d4,6da034af-0481-4a3c-aff9-c50ced6f21d4,1,0,d07016c8-7d97-42cd-865b-85b49075adfb,d07016c8-7d97-42cd-865b-85b49075adfb,1,0,491a2337-1bf9-45c1-8ae6-95605ef41992,491a2337-1bf9-45c1-8ae6-95605ef41992,1,0,c3f2a760-610a-40e0-945b-1f9f6369444d,c3f2a760-610a-40e0-945b-1f9f6369444d,1,0,9202335d-50bb-4282-9438-24c7fb9cf637,9202335d-50bb-4282-9438-24c7fb9cf637,1,0,a62906e5-27f8-4e72-8769-9a3eed6997d7,a62906e5-27f8-4e72-8769-9a3eed6997d7,1,0,6c5d0ac3-6086-434c-812b-1c1158ecc574,6c5d0ac3-6086-434c-812b-1c1158ecc574,1,0,783536d7-c0db-44c9-96e8-58b57804d7c8,783536d7-c0db-44c9-96e8-58b57804d7c8,1,0,a8295435-c2c4-4aff-874b-7412556aa76d,a8295435-c2c4-4aff-874b-7412556aa76d,1,0,f6c4e24b-172b-4ba3-8e3e-988306ade660,f6c4e24b-172b-4ba3-8e3e-988306ade660,1,0,9baab24c-a5a3-46f4-ad17-a28d4a49f851,9baab24c-a5a3-46f4-ad17-a28d4a49f851,1,0,d1952319-0e42-4684-a386-fbe7c24526c2,d1952319-0e42-4684-a386-fbe7c24526c2,1,0,01cd59fc-8577-4b3c-9d69-6db75e81e7c4,01cd59fc-8577-4b3c-9d69-6db75e81e7c4,1,0,83b47a9d-d44b-4c40-becd-df74f9cb2e91,83b47a9d-d44b-4c40-becd-df74f9cb2e91,1,0,d03e636e-ff88-4e96-bf3c-d795d10cbcb0,d03e636e-ff88-4e96-bf3c-d795d10cbcb0,1,0,86e2a2eb-160f-4e93-a449-b2f726286d1b,86e2a2eb-160f-4e93-a449-b2f726286d1b,1,0,8e6e1f24-83bf-42c2-9eda-b3874c7910c3,8e6e1f24-83bf-42c2-9eda-b3874c7910c3,1,0,364184c2-ec71-44be-b40c-ba719b4ab0e1,364184c2-ec71-44be-b40c-ba719b4ab0e1,1,0,7ef46c54-ec0c-4211-a750-e5949956b593,7ef46c54-ec0c-4211-a750-e5949956b593,1,0,04823681-875e-459a-b3cf-051c89527f38,04823681-875e-459a-b3cf-051c89527f38,1,0,8e115a0c-a17c-4d7e-bd2c-305fb53d09ca,8e115a0c-a17c-4d7e-bd2c-305fb53d09ca,1,0,38265f08-3301-40d1-b630-a319c983e826,38265f08-3301-40d1-b630-a319c983e826,1,0,5175c496-bac7-4c57-9628-793b727aecd0,5175c496-bac7-4c57-9628-793b727aecd0,1,0,1453309e-77d0-444d-ac3f-fd7c2cb65c0c,1453309e-77d0-444d-ac3f-fd7c2cb65c0c,1,0,fc42df4a-93f0-461f-acfe-fea09158030f,fc42df4a-93f0-461f-acfe-fea09158030f,1,0,9f0a7909-0b97-48a7-964f-a52cb3c19c4e,9f0a7909-0b97-48a7-964f-a52cb3c19c4e,1,0,6d002aef-00c9-4069-80df-153151218831,6d002aef-00c9-4069-80df-153151218831,1,0,4fec3a6c-5a99-4763-aa07-d5de8712559e,4fec3a6c-5a99-4763-aa07-d5de8712559e,1,0,968a1202-d271-43e0-bfd4-d38e49ceadd4,968a1202-d271-43e0-bfd4-d38e49ceadd4,1,0,c80e2ef7-93b6-4cef-806a-2dfcf2fd80e6,c80e2ef7-93b6-4cef-806a-2dfcf2fd80e6,1,0,b3b4fbf1-cbf0-4ee2-a490-4d657693479b,b3b4fbf1-cbf0-4ee2-a490-4d657693479b,1,0,ea61e442-273e-4ce4-a806-8090893729ba,ea61e442-273e-4ce4-a806-8090893729ba,1,0,aef03c0b-2846-43b7-b382-9a51ec783e85,aef03c0b-2846-43b7-b382-9a51ec783e85,1,0,e7100f2b-d169-4635-ab87-7a2225ff12ee,e7100f2b-d169-4635-ab87-7a2225ff12ee,1,0,1e2d790c-0076-413a-b5fb-f25c01ab6ad5,1e2d790c-0076-413a-b5fb-f25c01ab6ad5,1,0,0dcc537b-76b3-4e73-b060-6cbdcf6345db,0dcc537b-76b3-4e73-b060-6cbdcf6345db,1,0,ae662b53-e11e-4b59-be52-b9d4ab00c4a4,ae662b53-e11e-4b59-be52-b9d4ab00c4a4,1,0,ce55df94-71e4-46ac-9b3b-bdae5d336b0a,ce55df94-71e4-46ac-9b3b-bdae5d336b0a,1,0,7601fa7e-079a-4347-abea-e161b2d00783,7601fa7e-079a-4347-abea-e161b2d00783,1,0,ee84cb40-f82d-4558-91be-229d68ad9f4a,ee84cb40-f82d-4558-91be-229d68ad9f4a,1,0,101a7eff-9556-4165-879a-a7c8a852e236,101a7eff-9556-4165-879a-a7c8a852e236,1,0,01775932-3603-4efc-9235-abdb97490dea,01775932-3603-4efc-9235-abdb97490dea,1,0,7637844b-4059-4f8a-8436-b4f4e8cb4f74,7637844b-4059-4f8a-8436-b4f4e8cb4f74,1,0,b6bb4cbe-b6fa-4d28-b372-0b959951ad4d,b6bb4cbe-b6fa-4d28-b372-0b959951ad4d,1,0,0ee5b788-61dc-464b-86da-f985df7704b6,0ee5b788-61dc-464b-86da-f985df7704b6,1,0,1c2da2ac-e797-11e6-0489-a8667f21fde4,1c2da2ac-e797-11e6-0489-a8667f21fde4,1,0,2375c6a8-9799-4b7c-a48d-091a90c67693,2375c6a8-9799-4b7c-a48d-091a90c67693,1,0,3d3c3360-4502-4ad4-bbe9-35d4ba9b54b3,3d3c3360-4502-4ad4-bbe9-35d4ba9b54b3,1,0,df7892fe-e796-11e6-0489-a8667f21fde4,df7892fe-e796-11e6-0489-a8667f21fde4,1,0,9b0671c6-6e92-42e6-9cf4-13d4be11f27d,9b0671c6-6e92-42e6-9cf4-13d4be11f27d,1,0,63c6522f-be04-422a-b4f4-0f55f58b09a8,63c6522f-be04-422a-b4f4-0f55f58b09a8,1,0,be919dc1-a377-43e1-82e6-ce946cabdd55,be919dc1-a377-43e1-82e6-ce946cabdd55,1,0,6b17a0fc-4d6f-4189-9067-c58a95f04dd7,6b17a0fc-4d6f-4189-9067-c58a95f04dd7,1,0,9ded532e-9e60-4895-a4c5-4ea6697aa83c,9ded532e-9e60-4895-a4c5-4ea6697aa83c,1,0,106c5159-ffc7-4059-b3e3-acf74326a44f,106c5159-ffc7-4059-b3e3-acf74326a44f,1,0,d39fd717-1a69-4fd3-889e-4fa9abefea1c,d39fd717-1a69-4fd3-889e-4fa9abefea1c,1,0,fae8b26c-e796-11e6-0489-a8667f21fde4,fae8b26c-e796-11e6-0489-a8667f21fde4,1,0,5b85e6df-7493-4201-97ad-2aea14de6006,5b85e6df-7493-4201-97ad-2aea14de6006,1,0,061e6c0f-ba52-40ec-96ad-2eba3eee3097,061e6c0f-ba52-40ec-96ad-2eba3eee3097,1,0,d77e3c65-e9fd-4ba7-885f-a8a2f4c827d2,d77e3c65-e9fd-4ba7-885f-a8a2f4c827d2,1,0,4fb86bf3-02ad-4f0e-85a9-98be6c350a06,4fb86bf3-02ad-4f0e-85a9-98be6c350a06,1,0,4840753b-e2e1-4e67-b35f-2f5eab7754f5,4840753b-e2e1-4e67-b35f-2f5eab7754f5,1,0,4095c9e7-83ab-4db9-a2d0-a9f4ef9ee53e,4095c9e7-83ab-4db9-a2d0-a9f4ef9ee53e,1,0,6ffd9c17-d90b-4d19-b337-0fbc2c717557,6ffd9c17-d90b-4d19-b337-0fbc2c717557,1,0,9a11a6bd-0c13-4be2-9e34-b12b7554f3c9,9a11a6bd-0c13-4be2-9e34-b12b7554f3c9,1,0,3bb83275-7a0e-420f-8c6b-028038f11a8c,3bb83275-7a0e-420f-8c6b-028038f11a8c,1,0,e1950a23-f6e7-48af-b78a-77aa61f08ece,e1950a23-f6e7-48af-b78a-77aa61f08ece,1,0,1cc3d7c4-9178-4a40-86ea-2bbc1f5aa69f,1cc3d7c4-9178-4a40-86ea-2bbc1f5aa69f,1,0,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,e1cfcfa0-5cfb-47d9-af54-717d2c745c8a,e1cfcfa0-5cfb-47d9-af54-717d2c745c8a,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,c73da415-6fc3-449a-a784-b25aed54eccd,c73da415-6fc3-449a-a784-b25aed54eccd,1,0,8deb4f57-18fc-4db0-ad0f-82d60af3d80b,8deb4f57-18fc-4db0-ad0f-82d60af3d80b,1,0,2f484aa4-452a-46af-a707-a5a6917bc0db,2f484aa4-452a-46af-a707-a5a6917bc0db,1,0,fd6ff934-6f11-4182-b0cb-6926902d33c0,fd6ff934-6f11-4182-b0cb-6926902d33c0,1,0,315af891-2075-4833-a404-6c0f2004ee53,315af891-2075-4833-a404-6c0f2004ee53,1,0,5725db77-bfbf-4d85-9565-163b309a53ee,5725db77-bfbf-4d85-9565-163b309a53ee,1,0,99a7142c-b3c7-4221-abf8-6831a3cbc16e,99a7142c-b3c7-4221-abf8-6831a3cbc16e,1,0,d367a1a1-5a54-4bf9-96c7-d55667e2fb16,d367a1a1-5a54-4bf9-96c7-d55667e2fb16,1,0,2e09abe1-0934-42ae-970f-5e001c35c31a,2e09abe1-0934-42ae-970f-5e001c35c31a,1,0,587d48a3-5627-4481-b13e-c22740b57d8a,587d48a3-5627-4481-b13e-c22740b57d8a,1,0,1f3e3089-1e04-4147-8ece-aa96a76467dd,1f3e3089-1e04-4147-8ece-aa96a76467dd,1,0,22a213b5-ed72-4181-8ff8-89f860c87aa1,22a213b5-ed72-4181-8ff8-89f860c87aa1,1,0,4c56cbff-653e-4f16-b702-c77190d7eb7f,4c56cbff-653e-4f16-b702-c77190d7eb7f,1,0,172ff335-c7ae-4905-b705-2a1475b95713,172ff335-c7ae-4905-b705-2a1475b95713,1,0,db4c311d-ee62-4d47-ac31-5a20cadb7ed1,db4c311d-ee62-4d47-ac31-5a20cadb7ed1,1,0,cf896f41-7cea-4083-a9f8-96ad881ce641,cf896f41-7cea-4083-a9f8-96ad881ce641,1,0,1d852dc0-90c9-4568-84f9-b1d822573b6b,1d852dc0-90c9-4568-84f9-b1d822573b6b,1,0,24f85dbd-59be-4b8d-bea8-7ff8ddb7486a,24f85dbd-59be-4b8d-bea8-7ff8ddb7486a,1,0,c997f56c-ef9c-434e-bc4e-7fc5f885aaba,c997f56c-ef9c-434e-bc4e-7fc5f885aaba,1,0,37c8f5e1-3513-47f8-896d-a54d11b83dcd,37c8f5e1-3513-47f8-896d-a54d11b83dcd,1,0,9e07733c-39f0-491b-91e1-bf2782d957dd,9e07733c-39f0-491b-91e1-bf2782d957dd,1,0,cc584a1d-dc91-4693-a5c9-6e8c6607e9d8,cc584a1d-dc91-4693-a5c9-6e8c6607e9d8,1,0,5902d979-1235-4d5a-ace7-93261bdeb725,5902d979-1235-4d5a-ace7-93261bdeb725,1,0,5a090286-7969-44c9-815b-fc58aeb5d8d3,5a090286-7969-44c9-815b-fc58aeb5d8d3,1,0,8e87cf35-af54-4fa2-9428-460b765b282b,8e87cf35-af54-4fa2-9428-460b765b282b,1,0,73380bb1-bee3-4b73-a3df-1dbea99011d2,73380bb1-bee3-4b73-a3df-1dbea99011d2,1,0,8be29533-38de-413d-b420-7dac2e80af6c,8be29533-38de-413d-b420-7dac2e80af6c,1,0,82a77018-8e38-41dd-9d1f-3130bc29a707,82a77018-8e38-41dd-9d1f-3130bc29a707,1,0,4d75aaef-532e-4ed3-8153-083f04f05cc1,4d75aaef-532e-4ed3-8153-083f04f05cc1,1,0,3854a0ba-e156-4ba3-a301-b1a41ac386c4,3854a0ba-e156-4ba3-a301-b1a41ac386c4,1,0,f8136f59-ef0c-4c0f-8207-f7a4000e4f0c,f8136f59-ef0c-4c0f-8207-f7a4000e4f0c,1,0,c2321963-cd86-45ec-b323-3fdb5932da3a,c2321963-cd86-45ec-b323-3fdb5932da3a,1,0,d5af38bf-6261-4177-8f74-998a85f0ef39,d5af38bf-6261-4177-8f74-998a85f0ef39,1,0,42bbd9f7-ef72-440f-9eb1-fcb3bdc1d91e,42bbd9f7-ef72-440f-9eb1-fcb3bdc1d91e,1,0,4b714d9c-26f4-46e8-ac79-471522b3853b,4b714d9c-26f4-46e8-ac79-471522b3853b,1,0,411489de-f907-4d60-a776-64bb0aa12a0e,411489de-f907-4d60-a776-64bb0aa12a0e,1,0,58d9ba60-a0c7-405d-a76e-0b0a796daaf3,58d9ba60-a0c7-405d-a76e-0b0a796daaf3,1,0,9c47670e-9eb9-49ec-876c-cd545aaa093c,9c47670e-9eb9-49ec-876c-cd545aaa093c,1,0,f57e74e6-75e8-4136-911e-86793036a077,f57e74e6-75e8-4136-911e-86793036a077,1,0,8492ee20-3f15-45d8-b70d-19b5cd6f1ae3,8492ee20-3f15-45d8-b70d-19b5cd6f1ae3,1,0,3ba8c378-ef3d-4646-90b3-6d8078aa623e,3ba8c378-ef3d-4646-90b3-6d8078aa623e,1,0,b96b2e45-8fb3-4d48-ab53-d3bbf6ef0284,b96b2e45-8fb3-4d48-ab53-d3bbf6ef0284,1,0,5ac38b5a-92e5-47eb-b956-24d9f010cb9f,5ac38b5a-92e5-47eb-b956-24d9f010cb9f,1,0,d61ca454-505b-4fd6-be15-d7ed948a5ff6,d61ca454-505b-4fd6-be15-d7ed948a5ff6,1,0,2dd7eb87-8130-425a-be13-85235508cde6,2dd7eb87-8130-425a-be13-85235508cde6,1,0,8a62c997-4fda-4464-90bd-ab719161949f,8a62c997-4fda-4464-90bd-ab719161949f,1,0,28af52dd-3144-428b-956d-b6f27863ec4a,28af52dd-3144-428b-956d-b6f27863ec4a,1,0,8ac94328-2300-4681-9c35-fd7e2f830310,8ac94328-2300-4681-9c35-fd7e2f830310,1,0,da0ee165-1917-466b-ac5c-16c28e2318bb,da0ee165-1917-466b-ac5c-16c28e2318bb,1,0,4868cb2e-0892-42bc-9de1-73cb8a15a96f,4868cb2e-0892-42bc-9de1-73cb8a15a96f,1,0,e8b80879-33b3-4c45-ad68-1acabcf91faf,e8b80879-33b3-4c45-ad68-1acabcf91faf,1,0,4a87fafc-7ca7-478e-bb31-358c2b85fa92,4a87fafc-7ca7-478e-bb31-358c2b85fa92,1,0,239601eb-e8de-4d58-a32a-01ee52f6e698,239601eb-e8de-4d58-a32a-01ee52f6e698,1,0,11370667-bec5-4a2d-8aa1-97f4d795718f,11370667-bec5-4a2d-8aa1-97f4d795718f,1,0,2032162d-fbb5-4e6a-be72-cda79869b9ff,2032162d-fbb5-4e6a-be72-cda79869b9ff,1,0,95a8e790-25ef-4ef3-a44a-f150bf1ceb1f,95a8e790-25ef-4ef3-a44a-f150bf1ceb1f,1,0,10543f9a-4e3f-427a-b36a-9c66709dd6fb,10543f9a-4e3f-427a-b36a-9c66709dd6fb,1,0,973967e5-1702-4fb8-ba36-70fd5b3b7e7c,973967e5-1702-4fb8-ba36-70fd5b3b7e7c,1,0,96ab5424-7be1-416d-b74d-d0c815726b1f,96ab5424-7be1-416d-b74d-d0c815726b1f,1,0,3714e794-ddef-4ad9-a933-6130bbc84545,3714e794-ddef-4ad9-a933-6130bbc84545,1,0,282b089c-7411-40d6-9a0a-ceaf6abb5586,282b089c-7411-40d6-9a0a-ceaf6abb5586,1,0,678188aa-76e7-49bc-a4be-1c55ccd625b1,678188aa-76e7-49bc-a4be-1c55ccd625b1,1,0,6c27eece-2f8e-48eb-b9c7-f9c414ee15bd,6c27eece-2f8e-48eb-b9c7-f9c414ee15bd,1,0,b3415b4a-d8de-4536-aa4b-82e75fd986ee,b3415b4a-d8de-4536-aa4b-82e75fd986ee,1,0,acc996ab-672a-4602-b7ad-8eee83557e61,acc996ab-672a-4602-b7ad-8eee83557e61,1,0,bf9e9c2f-e5dc-4f82-8e9a-7f35e3ad9a0b,bf9e9c2f-e5dc-4f82-8e9a-7f35e3ad9a0b,1,0,371361b6-15fd-4e62-9f60-cc8ee3fbacf0,371361b6-15fd-4e62-9f60-cc8ee3fbacf0,1,0,97745768-ed35-44f1-beba-abb8b28a29ae,97745768-ed35-44f1-beba-abb8b28a29ae,1,0,69364942-bcd1-4b06-9b57-fa59b4e7c552,69364942-bcd1-4b06-9b57-fa59b4e7c552,1,0,ab201c5f-4134-42cf-a528-c1c4df02f2d7,ab201c5f-4134-42cf-a528-c1c4df02f2d7,1,0,303fb7b5-6a23-40ea-ae12-b54f4ebae026,303fb7b5-6a23-40ea-ae12-b54f4ebae026,1,0,634cd26b-78f1-4446-8aad-b96ed16e5329,634cd26b-78f1-4446-8aad-b96ed16e5329,1,0,d8e62f1a-92ca-4971-9609-e79da798c083,d8e62f1a-92ca-4971-9609-e79da798c083,1,0,61892a62-9381-401d-af31-9073ef2509fb,61892a62-9381-401d-af31-9073ef2509fb,1,0,eb74ebf0-a9c6-4c4c-b279-5a46f40ea0d3,eb74ebf0-a9c6-4c4c-b279-5a46f40ea0d3,1,0,d5e1806b-9827-40ab-9cfa-23c22456d137,d5e1806b-9827-40ab-9cfa-23c22456d137,1,0,b57b186a-ec1e-46a2-87ae-6ba27793ebf6,b57b186a-ec1e-46a2-87ae-6ba27793ebf6,1,0,d24170d7-5477-4ec8-acd2-0de8bd2067d6,d24170d7-5477-4ec8-acd2-0de8bd2067d6,1,0,f047da82-7574-4da4-b54e-480195280a11,f047da82-7574-4da4-b54e-480195280a11,1,0,a469f018-da26-485f-87c3-f580321a34f0,a469f018-da26-485f-87c3-f580321a34f0,1,0,adcb0dca-d810-461e-8f45-1d3cd6ffad4d,adcb0dca-d810-461e-8f45-1d3cd6ffad4d,1,0,9e16edb6-d841-48fa-bfe1-f9aabdcf9e46,9e16edb6-d841-48fa-bfe1-f9aabdcf9e46,1,0,628de771-c19c-4474-989f-8fb6cd7756a2,628de771-c19c-4474-989f-8fb6cd7756a2,1,0,6b0ddefa-ee70-4b27-989f-e23c734ab943,6b0ddefa-ee70-4b27-989f-e23c734ab943,1,0,ee873280-28ea-41fb-af52-c10c2018cbe4,ee873280-28ea-41fb-af52-c10c2018cbe4,1,0,6789e57b-1293-442c-97d0-b8007367602e,6789e57b-1293-442c-97d0-b8007367602e,1,0,0f193c89-b664-448e-bed3-2147430367f7,0f193c89-b664-448e-bed3-2147430367f7,1,0,4c9b2506-75a8-47d3-a5d5-d946088ba14a,4c9b2506-75a8-47d3-a5d5-d946088ba14a,1,0,36eacaa1-2efd-49c0-82de-2f8972535bf2,36eacaa1-2efd-49c0-82de-2f8972535bf2,1,0,c35a643d-fe3a-4293-93c0-074fa68a31e3,c35a643d-fe3a-4293-93c0-074fa68a31e3,1,0,9f7b9fd8-4bdd-4492-abf7-09b3f7f23e16,9f7b9fd8-4bdd-4492-abf7-09b3f7f23e16,1,0,72ee9a03-a320-4e60-be04-0ee813ea567f,72ee9a03-a320-4e60-be04-0ee813ea567f,1,0,f6f52cc8-23a3-4402-b1eb-0e41584c802a,f6f52cc8-23a3-4402-b1eb-0e41584c802a,1,0,8398e065-8b4b-4901-b057-2a048776bafe,8398e065-8b4b-4901-b057-2a048776bafe,1,0,073c56ca-bf45-422d-957a-f9c57aeee4d0,073c56ca-bf45-422d-957a-f9c57aeee4d0,1,0,d73e084f-9201-40c8-8ad4-f61b6cbb47c9,d73e084f-9201-40c8-8ad4-f61b6cbb47c9,1,0,68598d98-0c59-4cda-b0b2-6901d3aff88b,68598d98-0c59-4cda-b0b2-6901d3aff88b,1,0,219c1375-f26e-4698-aa82-4b9d735df783,219c1375-f26e-4698-aa82-4b9d735df783,1,0,ff5121c1-7f11-48cd-a9df-3588cf9f6d21,ff5121c1-7f11-48cd-a9df-3588cf9f6d21,1,0,32012b27-1b43-49be-b9af-df0c877e7a4c,32012b27-1b43-49be-b9af-df0c877e7a4c,1,0,e97d5152-9e58-4a91-a691-b4d358f1c89d,e97d5152-9e58-4a91-a691-b4d358f1c89d,1,0,1de4d7ee-7ddd-44db-bf7f-1b99b653652c,1de4d7ee-7ddd-44db-bf7f-1b99b653652c,1,0,dfe624ac-9f49-46dd-b821-1f1f5b5e0d15,dfe624ac-9f49-46dd-b821-1f1f5b5e0d15,1,0,296c478b-4103-46cb-9d14-97f59034ffd4,296c478b-4103-46cb-9d14-97f59034ffd4,1,0,fb918a68-f86d-46c0-9078-61d2b32b5aef,fb918a68-f86d-46c0-9078-61d2b32b5aef,1,0,9ca4d0c4-f5d3-4748-bf73-f3cd1bc4ac46,9ca4d0c4-f5d3-4748-bf73-f3cd1bc4ac46,1,0,1ddfc773-4f3c-4764-978e-585aab4666de,1ddfc773-4f3c-4764-978e-585aab4666de,1,0,e424d122-1dbb-4545-975c-177997129f2e,e424d122-1dbb-4545-975c-177997129f2e,1,0,c83bc626-dfdd-4451-92b0-b53eed40f534,c83bc626-dfdd-4451-92b0-b53eed40f534,1,0,7b9b1d11-4f78-4113-8fca-1a3a30953aef,7b9b1d11-4f78-4113-8fca-1a3a30953aef,1,0,7f84cb85-c3e4-4b53-b829-3b1e216f978a,7f84cb85-c3e4-4b53-b829-3b1e216f978a,1,0,7e621ecc-7d2b-42bf-a502-f8e59de56b63,7e621ecc-7d2b-42bf-a502-f8e59de56b63,1,0,798fd445-d02e-4e97-890a-0283f33317cf,798fd445-d02e-4e97-890a-0283f33317cf,1,0,095583ca-010d-43ad-8c7a-8938fa4cb761,095583ca-010d-43ad-8c7a-8938fa4cb761,1,0,178d210c-e847-4805-a8d4-31acdf4983af,178d210c-e847-4805-a8d4-31acdf4983af,1,0,aa214d9f-23b1-4996-8a43-9010dceeb53d,aa214d9f-23b1-4996-8a43-9010dceeb53d,1,0,26a5527e-dc2b-45a4-a51c-b1dfb31fa8a2,26a5527e-dc2b-45a4-a51c-b1dfb31fa8a2,1,0,aefc3149-90ee-4ccc-8fb6-b1f6096237f6,aefc3149-90ee-4ccc-8fb6-b1f6096237f6,1,0,d9d103bd-1dd6-48a9-8869-6c8485705393,d9d103bd-1dd6-48a9-8869-6c8485705393,1,0,cf2f7e1f-9b0b-4ae9-9c94-99d80bf95eae,cf2f7e1f-9b0b-4ae9-9c94-99d80bf95eae,1,0,ff0e8487-bdbf-4b21-877e-00008c81bc09,ff0e8487-bdbf-4b21-877e-00008c81bc09,1,0,39c9f8ac-56a0-4057-8359-7228bf97184a,39c9f8ac-56a0-4057-8359-7228bf97184a,1,0,763fbb4c-cab2-4c71-ba16-7e2ce8c3dc97,763fbb4c-cab2-4c71-ba16-7e2ce8c3dc97,1,0,2c0dd892-1d3e-4497-850b-080bdb9c59d8,2c0dd892-1d3e-4497-850b-080bdb9c59d8,1,0,3b727d49-c9ed-4d9e-af61-c13b9a170c75,3b727d49-c9ed-4d9e-af61-c13b9a170c75,1,0,1b264744-bdcd-4c5c-932b-0ac4b990dd78,1b264744-bdcd-4c5c-932b-0ac4b990dd78,1,0,a2dbf20e-1fe9-463d-8fd4-76ce2e4854d1,a2dbf20e-1fe9-463d-8fd4-76ce2e4854d1,1,0,37bde288-8e02-4127-bd80-de8ae7590a14,37bde288-8e02-4127-bd80-de8ae7590a14,1,0,a9b8e517-78cd-4428-b2fc-9e16af0069d7,a9b8e517-78cd-4428-b2fc-9e16af0069d7,1,0,5c592024-c009-4674-bbb8-283669e673ef,5c592024-c009-4674-bbb8-283669e673ef,1,0,e76f16b9-77a0-4033-90d0-6e04e4494747,e76f16b9-77a0-4033-90d0-6e04e4494747,1,0,cfb221fc-8639-4e15-9a78-f7837d657a99,cfb221fc-8639-4e15-9a78-f7837d657a99,1,0,4e61c8c3-756e-4937-adf6-6a1e9a89fc6a,4e61c8c3-756e-4937-adf6-6a1e9a89fc6a,1,0,022147c1-1ebe-4c8d-b367-4c47115b101d,022147c1-1ebe-4c8d-b367-4c47115b101d,1,0,2975d4c8-90d8-4791-8bc2-4adaa328ddc0,2975d4c8-90d8-4791-8bc2-4adaa328ddc0,1,0,fca6b230-a38e-4791-9cc5-3d215f79dc6f,fca6b230-a38e-4791-9cc5-3d215f79dc6f,1,0,04e87de4-940a-4533-8c81-8f145b201dc0,04e87de4-940a-4533-8c81-8f145b201dc0,1,0,573ef4f4-e9e6-4b7c-944d-30808a6a00b7,573ef4f4-e9e6-4b7c-944d-30808a6a00b7,1,0,fa488af9-a5ec-47d8-8661-fa5058a60a6b,fa488af9-a5ec-47d8-8661-fa5058a60a6b,1,0,97cc84c6-3565-474c-a028-83acb5390446,97cc84c6-3565-474c-a028-83acb5390446,1,0,9bf07c3e-7fdf-4a4f-ab00-98c7668349bd,9bf07c3e-7fdf-4a4f-ab00-98c7668349bd,1,0,ebbf6957-6ff6-4dc2-9e20-23d1da091f05,ebbf6957-6ff6-4dc2-9e20-23d1da091f05,1,0,9b80acf6-6bf0-42c4-abb3-2fa2fcf4088c,9b80acf6-6bf0-42c4-abb3-2fa2fcf4088c,1,0,1dcec107-9d5f-4b69-ad65-cc4cb1f27a9c,1dcec107-9d5f-4b69-ad65-cc4cb1f27a9c,1,0,b366d7eb-626c-4c0c-b4cc-c392763e6e94,b366d7eb-626c-4c0c-b4cc-c392763e6e94,1,0,4c7e24aa-726a-4595-82ad-ef1e525b14fa,4c7e24aa-726a-4595-82ad-ef1e525b14fa,1,0,aed2ceeb-cc0f-4bdc-bb94-2e15cd68aa96,aed2ceeb-cc0f-4bdc-bb94-2e15cd68aa96,1,0,04b5ae71-7fa4-4a64-b406-59dc603b80c5,04b5ae71-7fa4-4a64-b406-59dc603b80c5,1,0,f23a2023-f776-40db-8689-1fc3f7ebc482,f23a2023-f776-40db-8689-1fc3f7ebc482,1,0,1e7684f0-1b3b-4a32-8602-dd0672c5a800,1e7684f0-1b3b-4a32-8602-dd0672c5a800,1,0,ab178a93-8570-43b6-ae42-f34a7cc4f359,ab178a93-8570-43b6-ae42-f34a7cc4f359,1,0,4c82f31d-7a98-47dd-89dc-1846cb15bf3b,4c82f31d-7a98-47dd-89dc-1846cb15bf3b,1,0,168e3189-2676-4cdb-bc9d-78d85df51faf,168e3189-2676-4cdb-bc9d-78d85df51faf,1,0,ecf1a87f-4ca4-4efb-a84c-b2db1b0e8829,ecf1a87f-4ca4-4efb-a84c-b2db1b0e8829,1,0,470bbff8-20d0-475c-a61a-1a09ac14c2db,470bbff8-20d0-475c-a61a-1a09ac14c2db,1,0,6ea25680-c4db-4717-9498-62420ca16970,6ea25680-c4db-4717-9498-62420ca16970,1,0,14e20d48-635e-4c52-9099-e743323fc190,14e20d48-635e-4c52-9099-e743323fc190,1,0,c37a660e-16c5-495e-9486-e61bcb693fa0,c37a660e-16c5-495e-9486-e61bcb693fa0,1,0,8f44ebad-1160-474e-a566-fb9da55ffcba,8f44ebad-1160-474e-a566-fb9da55ffcba,1,0,11cf336e-7890-4972-bf71-32d7416ff647,11cf336e-7890-4972-bf71-32d7416ff647,1,0,4c4d61a6-6bb6-4a15-9a81-25fdcf96ec4b,4c4d61a6-6bb6-4a15-9a81-25fdcf96ec4b,1,0,14bd3392-36cd-4ed0-8847-44375d6fb861,14bd3392-36cd-4ed0-8847-44375d6fb861,1,0,759ede7a-e832-44e6-9b11-5bfb3c507820,759ede7a-e832-44e6-9b11-5bfb3c507820,1,0,64484611-b32c-4155-a063-7df5a3f924dd,64484611-b32c-4155-a063-7df5a3f924dd,1,0,2f2ac0db-db86-4ed2-a55a-b245b4d00d70,2f2ac0db-db86-4ed2-a55a-b245b4d00d70,1,0,821b93bd-f0dd-4468-972a-d9b2b4de72f1,821b93bd-f0dd-4468-972a-d9b2b4de72f1,1,0,56900066-90e3-40c0-b64a-8f7964a4dfc1,56900066-90e3-40c0-b64a-8f7964a4dfc1,1,0,56f0c4d6-9b13-486a-9586-05e657dca8be,56f0c4d6-9b13-486a-9586-05e657dca8be,1,0,c795c0d3-6a0d-4311-9821-df320663727e,c795c0d3-6a0d-4311-9821-df320663727e,1,0,512b8d89-8798-4549-9e79-b9c3f7d9098f,512b8d89-8798-4549-9e79-b9c3f7d9098f,1,0,e1fe71f8-f37c-4705-aca1-c25e2bdc5db6,e1fe71f8-f37c-4705-aca1-c25e2bdc5db6,1,0,7f356abf-9045-4a76-89f3-8b52d467122a,7f356abf-9045-4a76-89f3-8b52d467122a,1,0,625a61ac-4ad0-4b31-aa67-9f864154b9c4,625a61ac-4ad0-4b31-aa67-9f864154b9c4,1,0,51fa8d01-44a1-4e75-9b04-6a2504972f08,51fa8d01-44a1-4e75-9b04-6a2504972f08,1,0,73dae482-a1ee-4c57-8859-2dd8e8635a49,73dae482-a1ee-4c57-8859-2dd8e8635a49,1,0,e4ea640f-e3a4-44ad-b17d-51f32136372e,e4ea640f-e3a4-44ad-b17d-51f32136372e,1,0,7dca913d-e37a-4740-8e3d-677d379605ee,7dca913d-e37a-4740-8e3d-677d379605ee,1,0,bd1cf7ef-f3e2-4441-836b-16f2cc227aa9,bd1cf7ef-f3e2-4441-836b-16f2cc227aa9,1,0,e62e60ea-9f0c-4a7e-869f-4639f31f826c,e62e60ea-9f0c-4a7e-869f-4639f31f826c,1,0,c9035b0f-cfc4-4761-9ba0-a8aacfaa9c72,c9035b0f-cfc4-4761-9ba0-a8aacfaa9c72,1,0,7efb0bf4-d40c-417b-b9bc-f4a5af66ec09,7efb0bf4-d40c-417b-b9bc-f4a5af66ec09,1,0,4cd4694f-17f8-43ba-8940-07628bd937fe,4cd4694f-17f8-43ba-8940-07628bd937fe,1,0,9b9e81f9-e23f-4c77-bf6f-edbce8ebabfa,9b9e81f9-e23f-4c77-bf6f-edbce8ebabfa,1,0,fb5e93bb-e1ff-47a6-a362-ea94e6cbac65,fb5e93bb-e1ff-47a6-a362-ea94e6cbac65,1,0,7df6c94b-3cfe-4764-988e-858d733e35d9,7df6c94b-3cfe-4764-988e-858d733e35d9,1,0,8b251c7d-2d55-4734-a1da-7f1115d95080,8b251c7d-2d55-4734-a1da-7f1115d95080,1,0,87b3153d-bef0-4441-8b1c-a5fc7ba4c36a,87b3153d-bef0-4441-8b1c-a5fc7ba4c36a,1,0,5a8c3621-595a-4168-8bba-a7f8d499e47e,5a8c3621-595a-4168-8bba-a7f8d499e47e,1,0,fc4cfed6-e492-4420-b357-8143a8c2a41a,fc4cfed6-e492-4420-b357-8143a8c2a41a,1,0,4311a250-64af-443e-a711-93b7c41175cf,4311a250-64af-443e-a711-93b7c41175cf,1,0,804b6c57-1d7b-4927-be5b-84b7959fe55e,804b6c57-1d7b-4927-be5b-84b7959fe55e,1,0,f2655d85-79ea-4736-8f41-94a4f9b2b998,f2655d85-79ea-4736-8f41-94a4f9b2b998,1,0,21258174-3a95-4c10-bb8f-4d6db0c5ae0e,21258174-3a95-4c10-bb8f-4d6db0c5ae0e,1,0,a8eb5ed9-df99-405b-afad-eeaa98956eee,a8eb5ed9-df99-405b-afad-eeaa98956eee,1,0,a64d4b1b-fae4-43ae-ae98-bdc4e59a94c1,a64d4b1b-fae4-43ae-ae98-bdc4e59a94c1,1,0,26a1279f-91f0-4632-ad7c-21cf2f524208,26a1279f-91f0-4632-ad7c-21cf2f524208,1,0,bf751ed0-ee47-4eaf-81bd-f0da00bef343,bf751ed0-ee47-4eaf-81bd-f0da00bef343,1,0,14b65111-4c0e-4521-9fcd-2a8d4aaa6b4b,14b65111-4c0e-4521-9fcd-2a8d4aaa6b4b,1,0,1f1def7c-e0ee-4963-afea-1751bf1b812c,1f1def7c-e0ee-4963-afea-1751bf1b812c,1,0,9a4c0898-ab56-425c-8191-5ab90f4e12bf,9a4c0898-ab56-425c-8191-5ab90f4e12bf,1,0,6841ec47-7a84-441a-b975-69d089072ce7,6841ec47-7a84-441a-b975-69d089072ce7,1,0,ead4001a-0d8a-4b95-8212-2a40e5aa6659,ead4001a-0d8a-4b95-8212-2a40e5aa6659,1,0,22165c8a-2179-4cd5-b195-bd2721e9e232,22165c8a-2179-4cd5-b195-bd2721e9e232,1,0,b28c3a8f-8cad-45eb-90d3-6d90a0b3f881,b28c3a8f-8cad-45eb-90d3-6d90a0b3f881,1,0,3c5974ec-f76d-401c-a8e4-d51c7cd4c4fb,3c5974ec-f76d-401c-a8e4-d51c7cd4c4fb,1,0,609a9bc9-4225-4fe1-91fa-90c9c2e5cfba,609a9bc9-4225-4fe1-91fa-90c9c2e5cfba,1,0,d22ed498-c7df-45bb-869f-f16d3aa2d3d3,d22ed498-c7df-45bb-869f-f16d3aa2d3d3,1,0,4a966f6e-87dd-4dae-9cc0-dbabee9424dc,4a966f6e-87dd-4dae-9cc0-dbabee9424dc,1,0,9d9debfd-4a10-4f09-9d09-2aa5e058b525,9d9debfd-4a10-4f09-9d09-2aa5e058b525,1,0,fc19586c-d89c-495c-b473-6f85967ed48e,fc19586c-d89c-495c-b473-6f85967ed48e,1,0,2ac7c701-a281-4e77-a5f8-294526021e2d,2ac7c701-a281-4e77-a5f8-294526021e2d,1,0,979df549-889d-496a-b6ce-c56d54c771b5,979df549-889d-496a-b6ce-c56d54c771b5,1,0,91b320d8-3426-44d3-97d7-c200287d7343,91b320d8-3426-44d3-97d7-c200287d7343,1,0,b9297f72-b40a-4adb-9975-bb693d4834a4,b9297f72-b40a-4adb-9975-bb693d4834a4,1,0,41cf3916-216f-4c4e-a587-82777f4263e0,41cf3916-216f-4c4e-a587-82777f4263e0,1,0,2ce3a350-86f1-4275-8299-3c3693ca11fa,2ce3a350-86f1-4275-8299-3c3693ca11fa,1,0,59f0ed15-c84c-4f41-bdd4-26317e4e914d,59f0ed15-c84c-4f41-bdd4-26317e4e914d,1,0,4b5ff142-47b8-4548-b6f9-56ebcbd40e35,4b5ff142-47b8-4548-b6f9-56ebcbd40e35,1,0,8fef790c-a3f4-460c-9093-5065cbdba196,8fef790c-a3f4-460c-9093-5065cbdba196,1,0,79bd24d0-61a9-4558-90ac-4e726066789c,79bd24d0-61a9-4558-90ac-4e726066789c,1,0,d843cbd7-e2b5-4c50-8ed2-7cb0baac8ecc,d843cbd7-e2b5-4c50-8ed2-7cb0baac8ecc,1,0,ef356548-51a4-4b09-b37d-ede5b8f3edb6,ef356548-51a4-4b09-b37d-ede5b8f3edb6,1,0,53c0d900-5e96-4381-a1ed-4424a5799608,53c0d900-5e96-4381-a1ed-4424a5799608,1,0,64fe317a-7d0e-4758-b5cf-0d871d2bf4ad,64fe317a-7d0e-4758-b5cf-0d871d2bf4ad,1,0,abfb7ac3-ebfa-4275-a039-a6b94bb9a76f,abfb7ac3-ebfa-4275-a039-a6b94bb9a76f,1,0,45ca9e20-1246-4400-a019-ffb521af6ea7,45ca9e20-1246-4400-a019-ffb521af6ea7,1,0,73eed854-5c3a-4a10-9bfa-793fd517f303,73eed854-5c3a-4a10-9bfa-793fd517f303,1,0,c3eb2836-ea4d-48cc-a03f-3a0c30f67e7f,c3eb2836-ea4d-48cc-a03f-3a0c30f67e7f,1,0,9134dc40-a8f1-4c60-9431-27cb98be5ecd,9134dc40-a8f1-4c60-9431-27cb98be5ecd,1,0,16c4622a-33af-4a95-b44e-0861a6df21d2,16c4622a-33af-4a95-b44e-0861a6df21d2,1,0,d8cac67b-cce2-4a00-a8df-c6570c50153f,d8cac67b-cce2-4a00-a8df-c6570c50153f,1,0,37213c65-bf26-4e50-a2fa-58eb45439b58,37213c65-bf26-4e50-a2fa-58eb45439b58,1,0,e43c08a9-6496-4c8e-bfe2-9d728e31d63d,e43c08a9-6496-4c8e-bfe2-9d728e31d63d,1,0,b6b31892-73ee-4c9b-92b0-2735536c4938,b6b31892-73ee-4c9b-92b0-2735536c4938,1,0,deb8b883-142e-47d0-a722-7c734a0cf9b3,deb8b883-142e-47d0-a722-7c734a0cf9b3,1,0,a6794f74-08a4-4b73-add7-e6d0d1b6e7a3,a6794f74-08a4-4b73-add7-e6d0d1b6e7a3,1,0,29233058-ccb1-4110-a9bc-cdb4c531f35a,29233058-ccb1-4110-a9bc-cdb4c531f35a,1,0,cf3729b2-9ee6-437c-81df-83966793be50,cf3729b2-9ee6-437c-81df-83966793be50,1,0,429d08b7-0b98-4f9b-a053-d04dd84a7026,429d08b7-0b98-4f9b-a053-d04dd84a7026,1,0,b64fd964-cee8-4619-872f-82d2fdc14240,b64fd964-cee8-4619-872f-82d2fdc14240,1,0,5ce7846d-9806-40f5-8631-4e14deb8bc95,5ce7846d-9806-40f5-8631-4e14deb8bc95,1,0,79528a0e-1e48-4d14-bd28-756fd5db57b9,79528a0e-1e48-4d14-bd28-756fd5db57b9,1,0,4eeab8c2-d901-4b95-adea-4a08f79d0fa2,4eeab8c2-d901-4b95-adea-4a08f79d0fa2,1,0,d9426219-4b37-4776-8d5d-acab5825e789,d9426219-4b37-4776-8d5d-acab5825e789,1,0,7ce1f9eb-ac51-46fd-adc5-c8b9bfb32e44,7ce1f9eb-ac51-46fd-adc5-c8b9bfb32e44,1,0,4fef5026-1cba-4c33-ae75-5f9570a8e6b6,4fef5026-1cba-4c33-ae75-5f9570a8e6b6,1,0,243ee3d4-4130-41ea-a37c-c7b39a5e73fa,243ee3d4-4130-41ea-a37c-c7b39a5e73fa,1,0,29e7299a-ce80-497a-8102-615d0a001ea8,29e7299a-ce80-497a-8102-615d0a001ea8,1,0,f9e48170-62eb-4d6b-b861-c7af1b4a38c3,f9e48170-62eb-4d6b-b861-c7af1b4a38c3,1,0,9bcc8f9a-ec12-45f2-8a32-6946d556f57a,9bcc8f9a-ec12-45f2-8a32-6946d556f57a,1,0,adc2cc11-b647-453f-a98e-8a73b7c368c7,adc2cc11-b647-453f-a98e-8a73b7c368c7,1,0,4522c564-61da-40da-a749-5312121a331d,4522c564-61da-40da-a749-5312121a331d,1,0,9394c709-6cbe-4ef6-bc8c-cba8af65821e,9394c709-6cbe-4ef6-bc8c-cba8af65821e,1,0,2943b572-7411-4f92-a6cc-7ee552b85223,2943b572-7411-4f92-a6cc-7ee552b85223,1,0,28478e7a-e8aa-40aa-866c-a3624f903141,28478e7a-e8aa-40aa-866c-a3624f903141,1,0,f692ab21-a8de-4feb-914f-4beef350543a,f692ab21-a8de-4feb-914f-4beef350543a,1,0,0ec0b1a0-5f0d-4a14-9a84-49098befa0af,0ec0b1a0-5f0d-4a14-9a84-49098befa0af,1,0,c644ab9b-7bcb-4bfa-b8ba-4c5f7689c91c,c644ab9b-7bcb-4bfa-b8ba-4c5f7689c91c,1,0,dabb3395-6100-4f53-913d-e0230e81b494,dabb3395-6100-4f53-913d-e0230e81b494,1,0,e0a3fae1-1582-4c7a-acd8-870b558acec4,e0a3fae1-1582-4c7a-acd8-870b558acec4,1,0,4a749e8c-cb35-4bc4-9b31-fb5bc0eab474,4a749e8c-cb35-4bc4-9b31-fb5bc0eab474,1,0,da4a0c05-2285-434b-b7f8-83b2a0d7f23d,da4a0c05-2285-434b-b7f8-83b2a0d7f23d,1,0,8afa9a0e-04c1-4cac-82bb-6767cc0594d9,8afa9a0e-04c1-4cac-82bb-6767cc0594d9,1,0,ecbe625a-55eb-437a-8dee-33fb034d4c0d,ecbe625a-55eb-437a-8dee-33fb034d4c0d,1,0,5d4cefac-5dc4-4d73-8b4b-900a8464fbb2,5d4cefac-5dc4-4d73-8b4b-900a8464fbb2,1,0,948b10b3-0d7c-4dca-8816-75eb86e7881b,948b10b3-0d7c-4dca-8816-75eb86e7881b,1,0,9de91b5a-98e4-414b-b650-b669b0159b49,9de91b5a-98e4-414b-b650-b669b0159b49,1,0,3de3948d-40ff-4e0d-8445-9bf49c916161,3de3948d-40ff-4e0d-8445-9bf49c916161,1,0,73a093ea-1927-483b-b6f5-8f0cbd253753,73a093ea-1927-483b-b6f5-8f0cbd253753,1,0,345f04c0-0274-4e79-b523-f1fa3cf0d92a,345f04c0-0274-4e79-b523-f1fa3cf0d92a,1,0,f3a14787-de1b-4b65-8cb1-bc33a785821c,f3a14787-de1b-4b65-8cb1-bc33a785821c,1,0,ec61075e-fbcb-494a-b790-81548a212d2b,ec61075e-fbcb-494a-b790-81548a212d2b,1,0,0c444045-302b-4dbd-a9a3-81fd40004948,0c444045-302b-4dbd-a9a3-81fd40004948,1,0,1528b799-1c0f-4244-85e8-e738b827934a,1528b799-1c0f-4244-85e8-e738b827934a,1,0,45d79e4d-8c2a-432b-abb8-fb9046abea40,45d79e4d-8c2a-432b-abb8-fb9046abea40,1,0,8f4d2fa9-c6ed-4f85-b3ef-f9214468ffc4,8f4d2fa9-c6ed-4f85-b3ef-f9214468ffc4,1,0,cb73c8c2-3b09-42e9-ac26-1bd51854efb6,cb73c8c2-3b09-42e9-ac26-1bd51854efb6,1,0,bd0f9ec3-156a-4a6f-a52b-1213ec825bc0,bd0f9ec3-156a-4a6f-a52b-1213ec825bc0,1,0,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,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,cc815221-3d2a-4ea3-b1e6-6cb9fb410bd9,cc815221-3d2a-4ea3-b1e6-6cb9fb410bd9,1,0,b9ef62f6-9b1d-4d13-8016-73ed531d195a,b9ef62f6-9b1d-4d13-8016-73ed531d195a,1,0,742ed6d8-0f8d-4569-b30f-9ff3804cc3b7,742ed6d8-0f8d-4569-b30f-9ff3804cc3b7,1,0,229fe764-87f5-4d19-b042-c31fef5cddd6,229fe764-87f5-4d19-b042-c31fef5cddd6,1,0,74cd7504-d34f-42ff-90ff-7abcd54e8b6c,74cd7504-d34f-42ff-90ff-7abcd54e8b6c,1,0,e932800c-fd81-417d-a601-c774b888d66a,e932800c-fd81-417d-a601-c774b888d66a,1,0,a2335b6f-1dbb-4722-979b-8bed83aa8c94,a2335b6f-1dbb-4722-979b-8bed83aa8c94,1,0,211cf921-d880-4f74-b8ee-5312dea28613,211cf921-d880-4f74-b8ee-5312dea28613,1,0,2fd3a396-b8ae-409e-9373-02a039393a80,2fd3a396-b8ae-409e-9373-02a039393a80,1,0,61ae74be-64b2-4bf2-aa63-8fe3dc7ed47d,61ae74be-64b2-4bf2-aa63-8fe3dc7ed47d,1,0,346ef414-b20b-4095-86fe-18ca21c9887f,346ef414-b20b-4095-86fe-18ca21c9887f,1,0,c01ab97b-4964-4f7d-b749-56c0b94feb93,c01ab97b-4964-4f7d-b749-56c0b94feb93,1,0,0cc63813-cf16-4a99-b3bd-18a773091230,0cc63813-cf16-4a99-b3bd-18a773091230,1,0,4fc00971-c980-468a-9690-5cd520d12eb0,4fc00971-c980-468a-9690-5cd520d12eb0,1,0,85972c27-4f39-4982-9307-7877e87ef87b,85972c27-4f39-4982-9307-7877e87ef87b,1,0,96afdffb-7595-4c49-9e86-8296f50bd2f5,96afdffb-7595-4c49-9e86-8296f50bd2f5,1,0,823d5b5e-e9bf-40f0-9dcd-579bb53847bb,823d5b5e-e9bf-40f0-9dcd-579bb53847bb,1,0,e125d3e0-950f-42ee-8904-bd26091afa55,e125d3e0-950f-42ee-8904-bd26091afa55,1,0,2b4797a5-074a-4a01-b99f-1c5590cfde40,2b4797a5-074a-4a01-b99f-1c5590cfde40,1,0,718e53d2-24ec-40fb-9def-825441ada46c,718e53d2-24ec-40fb-9def-825441ada46c,1,0,4c0a7fd6-8f09-41d6-949f-65ce708c1256,4c0a7fd6-8f09-41d6-949f-65ce708c1256,1,0,792abc06-b52a-4691-ba92-96ed73ca702a,792abc06-b52a-4691-ba92-96ed73ca702a,1,0,148dbe44-86d1-4362-b9db-8ff68cd2b34d,148dbe44-86d1-4362-b9db-8ff68cd2b34d,1,0,1fbc893e-3000-4fac-88f5-c82251835d65,1fbc893e-3000-4fac-88f5-c82251835d65,1,0,05852816-63ec-4179-abca-66372bbfb04c,05852816-63ec-4179-abca-66372bbfb04c,1,0,0165f721-b011-4524-bfd5-81e35092f2be,0165f721-b011-4524-bfd5-81e35092f2be,1,0,e74925d4-1979-4600-8560-0932d26450ad,e74925d4-1979-4600-8560-0932d26450ad,1,0,aa108131-151d-4356-8a24-345e4ec74281,aa108131-151d-4356-8a24-345e4ec74281,1,0,284b77a8-d9f4-44c4-a2dc-91c1f8bd5808,284b77a8-d9f4-44c4-a2dc-91c1f8bd5808,1,0,e3251f1a-3c80-4c86-9960-270920bd512f,e3251f1a-3c80-4c86-9960-270920bd512f,1,0,3c3d5474-977b-4df9-88de-042e997bd10d,3c3d5474-977b-4df9-88de-042e997bd10d,1,0,4b88d172-5a44-4011-bb38-e94bf7a9c879,4b88d172-5a44-4011-bb38-e94bf7a9c879,1,0,3bced2d4-e3d7-4489-a26d-f84620b096f4,3bced2d4-e3d7-4489-a26d-f84620b096f4,1,0,e8c048fc-0f39-4778-aaf3-d6bff5acb06a,e8c048fc-0f39-4778-aaf3-d6bff5acb06a,1,0,c7efb89b-f9e5-4b58-b7a0-502cea8cf1d4,c7efb89b-f9e5-4b58-b7a0-502cea8cf1d4,1,0,cd133f15-aa45-4ec9-93c2-2f0f66baf3f3,cd133f15-aa45-4ec9-93c2-2f0f66baf3f3,1,0,18436045-1008-4114-8032-274fea0f4627,18436045-1008-4114-8032-274fea0f4627,1,0,cad93727-cffb-44a6-aaee-be73a078e802,cad93727-cffb-44a6-aaee-be73a078e802,1,0,c034f410-ff8e-45d7-925f-94448f88a7af,c034f410-ff8e-45d7-925f-94448f88a7af,1,0,0027727b-3917-4010-9953-1649266e8ed7,0027727b-3917-4010-9953-1649266e8ed7,1,0,b088786a-046f-458c-8e7a-5bebf8df8b34,b088786a-046f-458c-8e7a-5bebf8df8b34,1,0,6d015113-1e32-4f5e-aacd-8134d7307125,6d015113-1e32-4f5e-aacd-8134d7307125,1,0,58230238-d2f2-422e-90cb-de355996eb19,58230238-d2f2-422e-90cb-de355996eb19,1,0,3d907678-628d-4fb2-85c2-149839024c08,3d907678-628d-4fb2-85c2-149839024c08,1,0,71384d10-6acf-4139-b766-cb8b5796f1a7,71384d10-6acf-4139-b766-cb8b5796f1a7,1,0,a8f149d7-e9bc-4695-b4f4-88434e31aafb,a8f149d7-e9bc-4695-b4f4-88434e31aafb,1,0,10dcbcc6-7793-4da7-a9a5-e4f124209d3e,10dcbcc6-7793-4da7-a9a5-e4f124209d3e,1,0,11ba510f-cb57-43d0-9897-c49e10b67ccd,11ba510f-cb57-43d0-9897-c49e10b67ccd,1,0,9d92af67-c88d-4429-9e85-0b5bf04c4b79,9d92af67-c88d-4429-9e85-0b5bf04c4b79,1,0,b009bc99-ea12-46db-a7f8-cb3e285b20d0,b009bc99-ea12-46db-a7f8-cb3e285b20d0,1,0,43523bbb-c923-4a20-bcb5-50d30cc826ee,43523bbb-c923-4a20-bcb5-50d30cc826ee,1,0,c89d9aad-3364-45df-88b5-b23ae76edbba,c89d9aad-3364-45df-88b5-b23ae76edbba,1,0,9a2f2cd1-4c9f-460b-b3b7-64706a0164ab,9a2f2cd1-4c9f-460b-b3b7-64706a0164ab,1,0,7e4b9dce-e332-4d35-8b5f-d3f88918989d,7e4b9dce-e332-4d35-8b5f-d3f88918989d,1,0,96fe619a-b819-4f96-9788-e1f4ef57833a,96fe619a-b819-4f96-9788-e1f4ef57833a,1,0,94dff2da-f721-411a-9fc0-5d013b685dcc,94dff2da-f721-411a-9fc0-5d013b685dcc,1,0,9343fc5f-7b08-4be5-8cd5-dbed635b819d,9343fc5f-7b08-4be5-8cd5-dbed635b819d,1,0,99e87e66-1b07-451b-a476-f5213cbd7150,99e87e66-1b07-451b-a476-f5213cbd7150,1,0,c3317f75-f6ad-41f6-97f1-77074c3ff62a,c3317f75-f6ad-41f6-97f1-77074c3ff62a,1,0,8800dec9-84f8-4643-8742-1d76fe575f58,8800dec9-84f8-4643-8742-1d76fe575f58,1,0,62903794-3b41-4d21-b800-1c26dbeda3ce,62903794-3b41-4d21-b800-1c26dbeda3ce,1,0,9bda4a0b-e8a7-4acf-9f07-4033b3a84ebc,9bda4a0b-e8a7-4acf-9f07-4033b3a84ebc,1,0,4ba2e55e-29bc-4fbe-83e8-8bfa36abfdab,4ba2e55e-29bc-4fbe-83e8-8bfa36abfdab,1,0,93de88de-0069-4aa8-96b2-d5709e4def2f,93de88de-0069-4aa8-96b2-d5709e4def2f,1,0,9f94fadf-ac9d-4e57-9fe4-41ce8cfbec6a,9f94fadf-ac9d-4e57-9fe4-41ce8cfbec6a,1,0,12d4ffc8-592e-42a7-b8c6-20bd58f6da90,12d4ffc8-592e-42a7-b8c6-20bd58f6da90,1,0,3a8d9010-8785-4d8d-b908-b821d7d681c9,3a8d9010-8785-4d8d-b908-b821d7d681c9,1,0,2568a935-ea49-4b99-aa9c-de27de6a0e81,2568a935-ea49-4b99-aa9c-de27de6a0e81,1,0,de2bdd4f-93f2-4341-86d6-7082fc286a5c,de2bdd4f-93f2-4341-86d6-7082fc286a5c,1,0,ba96ec0e-931e-45be-a782-e68ba4fedddb,ba96ec0e-931e-45be-a782-e68ba4fedddb,1,0,9af5882f-3a42-4fae-83df-6aa8de577112,9af5882f-3a42-4fae-83df-6aa8de577112,1,0,79bc5e39-3017-48bf-8e42-fa34e8b581ef,79bc5e39-3017-48bf-8e42-fa34e8b581ef,1,0,fe6e207f-d306-4470-8441-ffd3f3710d31,fe6e207f-d306-4470-8441-ffd3f3710d31,1,0,7451af80-7387-4e8d-a3da-2ae0540c3fd4,7451af80-7387-4e8d-a3da-2ae0540c3fd4,1,0,1c1e01f2-b2b3-480d-ae51-2db27b82dedd,1c1e01f2-b2b3-480d-ae51-2db27b82dedd,1,0,df459525-4e4d-4819-b996-5a6379b22a88,df459525-4e4d-4819-b996-5a6379b22a88,1,0,ed1d69f4-b09f-430a-bb2e-a23fe4dedf6b,ed1d69f4-b09f-430a-bb2e-a23fe4dedf6b,1,0,e67b4a32-4bac-450e-be6d-88c262383f31,e67b4a32-4bac-450e-be6d-88c262383f31,1,0,8b83bb54-4c23-4bd8-bd00-374a7a101cfa,8b83bb54-4c23-4bd8-bd00-374a7a101cfa,1,0,6c4c3eca-8b02-451b-af52-93073c3da146,6c4c3eca-8b02-451b-af52-93073c3da146,1,0,095c281c-3903-465d-baea-af1e6abf8019,095c281c-3903-465d-baea-af1e6abf8019,1,0,440d115d-a769-427e-891a-88d65fba2057,440d115d-a769-427e-891a-88d65fba2057,1,0,f7932210-027e-4fad-b7f7-3530789ce803,f7932210-027e-4fad-b7f7-3530789ce803,1,0,7bbfd95e-39a1-485b-930f-c9210c18dcd0,7bbfd95e-39a1-485b-930f-c9210c18dcd0,1,0,4975d3d6-b5a2-41c6-973b-6817013a388d,4975d3d6-b5a2-41c6-973b-6817013a388d,1,0,18ebc799-9724-4ffb-855e-b09a0723869e,18ebc799-9724-4ffb-855e-b09a0723869e,1,0,a06b8ef5-83e6-4fc6-91e1-256004134d69,a06b8ef5-83e6-4fc6-91e1-256004134d69,1,0,1d6a68ec-917f-4c3b-b970-797a6921cbc9,1d6a68ec-917f-4c3b-b970-797a6921cbc9,1,0,ae29eb40-5c8f-4ab4-8556-f98d45e8effe,ae29eb40-5c8f-4ab4-8556-f98d45e8effe,1,0,5b663988-3599-46dc-8d59-4c82ceac537c,5b663988-3599-46dc-8d59-4c82ceac537c,1,0,0f5f136c-688b-491e-a72b-3d9c2e609f0e,0f5f136c-688b-491e-a72b-3d9c2e609f0e,1,0,5573b405-6ac4-4632-b8d6-5d1cbdb63b97,5573b405-6ac4-4632-b8d6-5d1cbdb63b97,1,0,679cc0df-df5c-4c33-8c64-c0b6cee39116,679cc0df-df5c-4c33-8c64-c0b6cee39116,1,0,b156752b-f25c-4f35-9474-8ac3636597f5,b156752b-f25c-4f35-9474-8ac3636597f5,1,0,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,538a5527-d45d-43db-860f-ef9a3f00160e,538a5527-d45d-43db-860f-ef9a3f00160e,1,0,b4331bbb-fd69-4822-8490-18240cc0f177,b4331bbb-fd69-4822-8490-18240cc0f177,1,0,a991077a-9022-44b3-a7d2-8a252e74ee74,a991077a-9022-44b3-a7d2-8a252e74ee74,1,0,d871e5a7-3c0e-42ac-b63d-8f0c697981b9,d871e5a7-3c0e-42ac-b63d-8f0c697981b9,1,0,98baf0ec-4c7c-4d57-a49a-2023b02a1e14,98baf0ec-4c7c-4d57-a49a-2023b02a1e14,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,b9b6ff35-8e19-4408-ac18-83a2e5bc7cae,b9b6ff35-8e19-4408-ac18-83a2e5bc7cae,1,0,c8d11cfb-0741-4db9-b780-13f947f3773f,c8d11cfb-0741-4db9-b780-13f947f3773f,1,0,3dec7ed6-2615-4eda-8696-242510beee34,3dec7ed6-2615-4eda-8696-242510beee34,1,0,fdb3a5f0-c8f7-490e-b02f-3734bda27f5e,fdb3a5f0-c8f7-490e-b02f-3734bda27f5e,1,0,7172e496-ef41-4698-b50c-85b15503df72,7172e496-ef41-4698-b50c-85b15503df72,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,6a675752-fd31-46a5-8a62-2a1ede437c68,6a675752-fd31-46a5-8a62-2a1ede437c68,1,0,060b2bb4-ca03-4da9-930f-7f91f6299a35,060b2bb4-ca03-4da9-930f-7f91f6299a35,1,0,394b1a1c-a7ae-41b7-a346-4bac99fa567d,394b1a1c-a7ae-41b7-a346-4bac99fa567d,1,0,9a5fa511-59e8-4a1b-a101-f276f0b7b261,9a5fa511-59e8-4a1b-a101-f276f0b7b261,1,0,ccfe4e36-80b6-419f-8bb3-c1046203d023,ccfe4e36-80b6-419f-8bb3-c1046203d023,1,0,94b2e060-53b7-4b40-af05-30bea3520330,94b2e060-53b7-4b40-af05-30bea3520330,1,0,0f634f7e-7d6b-43e4-8e5e-a31ed05898ea,0f634f7e-7d6b-43e4-8e5e-a31ed05898ea,1,0,41b0dabd-85a3-4819-84dd-371eaf4f996e,41b0dabd-85a3-4819-84dd-371eaf4f996e,1,0,86a5ba4d-0681-4ddc-a505-0f537528e1a3,86a5ba4d-0681-4ddc-a505-0f537528e1a3,1,0,12d936f5-932b-4561-b934-c8444808a450,12d936f5-932b-4561-b934-c8444808a450,1,0,2ccb06ca-9bb7-4b74-9a96-c109bb117984,2ccb06ca-9bb7-4b74-9a96-c109bb117984,1,0,ac1a661d-db18-4576-80a9-a19d4140c05e,ac1a661d-db18-4576-80a9-a19d4140c05e,1,0,acd89f6c-a25f-47b9-ac21-036bfafcc0fc,acd89f6c-a25f-47b9-ac21-036bfafcc0fc,1,0,aa114d56-2faf-4925-8319-f0aa3993e9ee,aa114d56-2faf-4925-8319-f0aa3993e9ee,1,0,c3ffeb09-121b-4d77-9c15-def4648b4f3c,c3ffeb09-121b-4d77-9c15-def4648b4f3c,1,0,c2de0724-04c1-4adb-b62a-b7ba727dbe67,c2de0724-04c1-4adb-b62a-b7ba727dbe67,1,0,4ae26777-69ff-4a55-942b-0bad8ab7a70a,4ae26777-69ff-4a55-942b-0bad8ab7a70a,1,0,a0d8fb0a-0e90-4140-8687-e249b153dc66,a0d8fb0a-0e90-4140-8687-e249b153dc66,1,0,917c6f60-2a07-4587-9496-d393aff93953,917c6f60-2a07-4587-9496-d393aff93953,1,0,4bac50a2-762a-44e6-b8c5-3b09ef1a3f5e,4bac50a2-762a-44e6-b8c5-3b09ef1a3f5e,1,0,9fe72d73-4c95-47e0-bf92-dcb714d747c6,9fe72d73-4c95-47e0-bf92-dcb714d747c6,1,0,fe00e64f-2fa9-44a7-9bd7-854ebb6c0185,fe00e64f-2fa9-44a7-9bd7-854ebb6c0185,1,0,4d84bb11-e06e-4ed9-915b-76ee0e385a8b,4d84bb11-e06e-4ed9-915b-76ee0e385a8b,1,0,2b94076d-39ee-45ad-9ba5-435115cf5d4f,2b94076d-39ee-45ad-9ba5-435115cf5d4f,1,0,72ace16c-e90a-4d05-bc23-4351d4c87683,72ace16c-e90a-4d05-bc23-4351d4c87683,1,0,bd86e378-84bb-486a-be7b-319a3fe3b70b,bd86e378-84bb-486a-be7b-319a3fe3b70b,1,0,ef3bc279-6721-4949-8dc0-f96141f7f05c,ef3bc279-6721-4949-8dc0-f96141f7f05c,1,0,f81c7e21-48ad-4b64-975d-e62d34c7235a,f81c7e21-48ad-4b64-975d-e62d34c7235a,1,0,d0523c14-585e-45d3-9735-891235631004,d0523c14-585e-45d3-9735-891235631004,1,0,b6f8bc3e-f0cd-43ef-b060-d701cd446197,b6f8bc3e-f0cd-43ef-b060-d701cd446197,1,0,4f10e5f9-6cfd-4fa9-9c72-d19a484a796c,4f10e5f9-6cfd-4fa9-9c72-d19a484a796c,1,0,b94e805f-e1ab-4870-b855-98aa401864b2,b94e805f-e1ab-4870-b855-98aa401864b2,1,0,ff8eedeb-fc3e-4bee-852b-6da6d59ff38c,ff8eedeb-fc3e-4bee-852b-6da6d59ff38c,1,0,a98bd18f-ccda-41a2-a1b2-8b37cc1f6c36,a98bd18f-ccda-41a2-a1b2-8b37cc1f6c36,1,0,62f9fe19-3d64-4506-a0bc-dbfe47b4df64,62f9fe19-3d64-4506-a0bc-dbfe47b4df64,1,0,45af8f5d-d505-466b-a798-19f2219a180c,45af8f5d-d505-466b-a798-19f2219a180c,1,0,8a8229bc-f70a-4434-bacc-8a81fc58154b,8a8229bc-f70a-4434-bacc-8a81fc58154b,1,0,6324ad14-82ca-467b-b6b7-8d5f6049ca65,6324ad14-82ca-467b-b6b7-8d5f6049ca65,1,0,273446f0-f28b-4ce2-874c-3c6a57299b71,273446f0-f28b-4ce2-874c-3c6a57299b71,1,0,eb2f7449-ee42-43ec-b59c-3e07a6e3c139,eb2f7449-ee42-43ec-b59c-3e07a6e3c139,1,0,f8a7913a-2c64-47e1-8ae9-622fc6e9477e,f8a7913a-2c64-47e1-8ae9-622fc6e9477e,1,0,9b46a2b4-223d-4527-a94e-37ecd4fe72d7,9b46a2b4-223d-4527-a94e-37ecd4fe72d7,1,0,7a4e17bf-3649-4982-a9c6-5982390f1f1d,7a4e17bf-3649-4982-a9c6-5982390f1f1d,1,0,722be6e0-2698-431b-9206-777a36e6742f,722be6e0-2698-431b-9206-777a36e6742f,1,0,75bb0122-26bd-40be-8de8-7a57680c85ae,75bb0122-26bd-40be-8de8-7a57680c85ae,1,0,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,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,5e22429f-9ec0-4943-bf80-1becc4b8e5cb,5e22429f-9ec0-4943-bf80-1becc4b8e5cb,1,0,0153e60e-daca-48ac-b1c6-adecc89f579e,0153e60e-daca-48ac-b1c6-adecc89f579e,1,0,1ed4cf25-19f0-49f5-96a0-0ffe13adfe35,1ed4cf25-19f0-49f5-96a0-0ffe13adfe35,1,0,a896bc34-30a6-48b6-acfc-786c24c186bd,a896bc34-30a6-48b6-acfc-786c24c186bd,1,0,3867f4cb-bf54-42fb-8ea6-ca51d7cd6c91,3867f4cb-bf54-42fb-8ea6-ca51d7cd6c91,1,0,da8ae00a-7207-4ceb-b739-9114888c5b27,da8ae00a-7207-4ceb-b739-9114888c5b27,1,0,a6be80f7-d6aa-4371-a180-3d355080d849,a6be80f7-d6aa-4371-a180-3d355080d849,1,0,b37722c3-e29f-4a40-b4eb-0317919fc7a5,b37722c3-e29f-4a40-b4eb-0317919fc7a5,1,0,b1b1cd90-094d-428b-a6bc-156521c1c54d,b1b1cd90-094d-428b-a6bc-156521c1c54d,1,0,4f79ef7c-79be-4a69-acc0-bd591c712d03,4f79ef7c-79be-4a69-acc0-bd591c712d03,1,0,a0dd2129-d3a1-4bca-b555-72b065be1c13,a0dd2129-d3a1-4bca-b555-72b065be1c13,1,0,dc5e8229-e301-477c-846e-2e7078e3ee5f,dc5e8229-e301-477c-846e-2e7078e3ee5f,1,0,24836e44-8fdd-44bd-91d8-4ddab2caf485,24836e44-8fdd-44bd-91d8-4ddab2caf485,1,0,3727bcfe-4d75-4270-86e7-4a66ab14866c,3727bcfe-4d75-4270-86e7-4a66ab14866c,1,0,870a4708-0b5a-4fa3-9978-d94b161d289a,870a4708-0b5a-4fa3-9978-d94b161d289a,1,0,30e9f89d-7b94-488e-9963-886c271b1af7,30e9f89d-7b94-488e-9963-886c271b1af7,1,0,91af7a52-0825-4af5-94df-cc501e0123cd,91af7a52-0825-4af5-94df-cc501e0123cd,1,0,1c2cc78a-2ae6-4996-a743-7b55aecbe84c,1c2cc78a-2ae6-4996-a743-7b55aecbe84c,1,0,9292bf81-5668-4d52-a4ec-a93bc4b0ad3b,9292bf81-5668-4d52-a4ec-a93bc4b0ad3b,1,0,9693cc78-852e-445b-a7d2-f1689fa9eeec,9693cc78-852e-445b-a7d2-f1689fa9eeec,1,0,eb33e555-db41-462a-a45d-c7e0945cece8,eb33e555-db41-462a-a45d-c7e0945cece8,1,0,9cfd517c-1008-483a-9f65-7d15feb2cefc,9cfd517c-1008-483a-9f65-7d15feb2cefc,1,0,d66adc5e-25a3-472e-b0a4-5f22f88d7a0f,d66adc5e-25a3-472e-b0a4-5f22f88d7a0f,1,0,ae48d48f-cd39-4821-a4b7-9394b2a77ef6,ae48d48f-cd39-4821-a4b7-9394b2a77ef6,1,0,f34d3a69-533e-49df-b91d-f7f7f49c5fb1,f34d3a69-533e-49df-b91d-f7f7f49c5fb1,1,0,1d76f613-f4f6-4772-8c16-d97b3104a553,1d76f613-f4f6-4772-8c16-d97b3104a553,1,0,3e58d607-b906-449f-b044-9c130a487b86,3e58d607-b906-449f-b044-9c130a487b86,1,0,7a911212-7fde-4ea8-a1fa-229116b60895,7a911212-7fde-4ea8-a1fa-229116b60895,1,0,f4580043-5bc2-4295-8523-909302009b44,f4580043-5bc2-4295-8523-909302009b44,1,0,dc8af632-a5a4-4270-ba5f-2d3ba506f7e3,dc8af632-a5a4-4270-ba5f-2d3ba506f7e3,1,0,81936ac2-32fe-4e14-897b-0aba92b90c05,81936ac2-32fe-4e14-897b-0aba92b90c05,1,0,9f88e355-3f8f-4fcd-b45f-39c3d45490f5,9f88e355-3f8f-4fcd-b45f-39c3d45490f5,1,0,2e233e3c-687c-4516-87c6-5d6c5f9f04a2,2e233e3c-687c-4516-87c6-5d6c5f9f04a2,1,0,2afdcde7-46ef-4624-8b84-c6381ff2f3a4,2afdcde7-46ef-4624-8b84-c6381ff2f3a4,1,0,2d279d24-1953-4a2f-8206-77481d2fd718,2d279d24-1953-4a2f-8206-77481d2fd718,1,0,aa6abffe-1b09-48f9-9aee-4f234db6b2a2,aa6abffe-1b09-48f9-9aee-4f234db6b2a2,1,0,0a920200-77d0-42ea-abf6-0d40d63289b0,0a920200-77d0-42ea-abf6-0d40d63289b0,1,0,c850bafc-4073-44ef-b148-194f87c46f0e,c850bafc-4073-44ef-b148-194f87c46f0e,1,0,6d1dd726-815d-476e-b668-95cff4182e54,6d1dd726-815d-476e-b668-95cff4182e54,1,0,12f4a0ed-4798-4467-8834-de3eb385e22d,12f4a0ed-4798-4467-8834-de3eb385e22d,1,0,5710809e-4c41-42ab-952f-f7778fe9be0f,5710809e-4c41-42ab-952f-f7778fe9be0f,1,0,0811f6c2-6bb3-43b8-9944-910adc4c6f23,0811f6c2-6bb3-43b8-9944-910adc4c6f23,1,0,c1646df4-9fce-44f0-9cc3-a5dab0bbef2e,c1646df4-9fce-44f0-9cc3-a5dab0bbef2e,1,0,c86b02ab-3532-4f4c-b993-e237ed0d4d12,c86b02ab-3532-4f4c-b993-e237ed0d4d12,1,0,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,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,477ca2ac-ae7e-4091-bea3-9ed2d3eae788,477ca2ac-ae7e-4091-bea3-9ed2d3eae788,1,0,c9d0f1dd-bb93-4dbe-85f3-30c791a3c59e,c9d0f1dd-bb93-4dbe-85f3-30c791a3c59e,1,0,d023d15a-0f3f-46c3-8dea-43770f0a53b3,d023d15a-0f3f-46c3-8dea-43770f0a53b3,1,0,daf12fe4-79fb-43b9-9f7a-8da311449193,daf12fe4-79fb-43b9-9f7a-8da311449193,1,0,d0ad91a1-62aa-4e97-9868-82c5b8a46f22,d0ad91a1-62aa-4e97-9868-82c5b8a46f22,1,0,1731708f-53cb-4b00-b90e-f581b4baa845,1731708f-53cb-4b00-b90e-f581b4baa845,1,0,d4b0feca-c00a-4d48-9f23-d92277ea6483,d4b0feca-c00a-4d48-9f23-d92277ea6483,1,0,00b2a0b3-6af8-4ea4-aa38-d1e078d5cbff,00b2a0b3-6af8-4ea4-aa38-d1e078d5cbff,1,0,20f7fdd2-30f6-4a52-a63b-7d2c326c0e83,20f7fdd2-30f6-4a52-a63b-7d2c326c0e83,1,0,23cb5bc2-9638-4d1c-b4bc-d5297e271570,23cb5bc2-9638-4d1c-b4bc-d5297e271570,1,0,6e547ccb-6d5a-4f7c-aaf0-568c22d2c276,6e547ccb-6d5a-4f7c-aaf0-568c22d2c276,1,0,04b7389d-697d-4b0d-a239-ac8c674cc46f,04b7389d-697d-4b0d-a239-ac8c674cc46f,1,0,a1cf5173-2e86-4ed7-9a0b-1bd5e578326a,a1cf5173-2e86-4ed7-9a0b-1bd5e578326a,1,0,864cad61-8280-415d-8fe1-bcb39d56670a,864cad61-8280-415d-8fe1-bcb39d56670a,1,0,b106bd29-5dc7-44d7-94d0-00f61499392e,b106bd29-5dc7-44d7-94d0-00f61499392e,1,0,a4febff8-0566-4977-bf55-1d574568fe9f,a4febff8-0566-4977-bf55-1d574568fe9f,1,0,5199cc65-bed1-40b9-96fe-cf6d855a8b91,5199cc65-bed1-40b9-96fe-cf6d855a8b91,1,0,f518add9-5c26-4dac-ab2e-b30fe3fbd347,f518add9-5c26-4dac-ab2e-b30fe3fbd347,1,0,23f53317-7aa8-4816-8a69-3d39d5e76da0,23f53317-7aa8-4816-8a69-3d39d5e76da0,1,0,9ade5155-fa6d-4999-b019-a5e7e235a158,9ade5155-fa6d-4999-b019-a5e7e235a158,1,0,8b302c5e-b255-4cb5-94d9-0dfef4250097,8b302c5e-b255-4cb5-94d9-0dfef4250097,1,0,08eb74b6-1e1c-4004-a0f8-b6f1fdfc68ef,08eb74b6-1e1c-4004-a0f8-b6f1fdfc68ef,1,0,49d713b8-6a61-4bd1-9650-0de1869967d2,49d713b8-6a61-4bd1-9650-0de1869967d2,1,0,4738ffd0-3c3b-4e5f-8773-0c9a80efdfbf,4738ffd0-3c3b-4e5f-8773-0c9a80efdfbf,1,0,bd0e4aeb-19f9-48fc-b838-38d785004360,bd0e4aeb-19f9-48fc-b838-38d785004360,1,0,3d1bae2a-4dfd-48e5-bfe9-b7e30c8475f6,3d1bae2a-4dfd-48e5-bfe9-b7e30c8475f6,1,0,0f2ec7ac-6d3f-4fcf-af3d-b0bfaa187a4b,0f2ec7ac-6d3f-4fcf-af3d-b0bfaa187a4b,1,0,6d351276-2c04-4198-a3e4-865881c12f5c,6d351276-2c04-4198-a3e4-865881c12f5c,1,0,73b1d2e2-0eeb-45dc-8ca3-3bda594d6823,73b1d2e2-0eeb-45dc-8ca3-3bda594d6823,1,0,5c4abd61-2f29-499e-a2ca-d133e9eeeaea,5c4abd61-2f29-499e-a2ca-d133e9eeeaea,1,0,0ddeed48-b98a-47c3-84a2-2eac065be06c,0ddeed48-b98a-47c3-84a2-2eac065be06c,1,0,7987fe2c-d7cc-4fd2-ac4e-610bfb1ab6d2,7987fe2c-d7cc-4fd2-ac4e-610bfb1ab6d2,1,0,fc18d95e-a51d-45c0-83b0-09aeb2b5b03a,fc18d95e-a51d-45c0-83b0-09aeb2b5b03a,1,0,61b947a5-edca-43ca-82c4-5a7b529d8f82,61b947a5-edca-43ca-82c4-5a7b529d8f82,1,0,59eb6a7a-1d96-4985-8d8e-575162759415,59eb6a7a-1d96-4985-8d8e-575162759415,1,0,68564573-ed49-4519-a8b3-997865fe70a6,68564573-ed49-4519-a8b3-997865fe70a6,1,0,6c789969-d066-489d-ad88-92e2a5a6ec69,6c789969-d066-489d-ad88-92e2a5a6ec69,1,0,2a07d696-75d6-4a12-a310-30d6598b4a4c,2a07d696-75d6-4a12-a310-30d6598b4a4c,1,0,dde88f56-417c-4559-a893-85dc91e7e623,dde88f56-417c-4559-a893-85dc91e7e623,1,0,963eedab-6976-4a98-b9ad-b81f89239661,963eedab-6976-4a98-b9ad-b81f89239661,1,0,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,36baa776-83c4-413d-b70c-cbbc45e25662,36baa776-83c4-413d-b70c-cbbc45e25662,1,0,b65f9165-c20d-4053-8a0b-cff3f693b762,b65f9165-c20d-4053-8a0b-cff3f693b762,1,0,51af096b-687f-44f4-a0d8-306f670fc5ce,51af096b-687f-44f4-a0d8-306f670fc5ce,1,0,75972f88-aedd-4338-a3b5-320cd632a2e6,75972f88-aedd-4338-a3b5-320cd632a2e6,1,0,1d66cd80-fd61-4bf2-a7f9-34b33443e1ea,1d66cd80-fd61-4bf2-a7f9-34b33443e1ea,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,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,36951804-70a4-45fa-9fad-1c37fd3ce7b7,36951804-70a4-45fa-9fad-1c37fd3ce7b7,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,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,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,190bc52e-0d51-4dfc-9f16-99ed71ebfa75,190bc52e-0d51-4dfc-9f16-99ed71ebfa75,1,0,0c24858a-7e64-426f-9b59-392449aecaf5,0c24858a-7e64-426f-9b59-392449aecaf5,1,0,b1d61e28-f3dc-418b-b5df-f75622a4b980,b1d61e28-f3dc-418b-b5df-f75622a4b980,1,0,bec4c82f-4e76-4d16-bb4d-b6d9fa404c5d,bec4c82f-4e76-4d16-bb4d-b6d9fa404c5d,1,0,4033f86b-d250-475a-8837-071bf31664b0,4033f86b-d250-475a-8837-071bf31664b0,1,0,876e31ff-ab7b-4ea4-b491-161963727dd1,876e31ff-ab7b-4ea4-b491-161963727dd1,1,0,bb43995b-68b4-41a1-8458-e10a2d8925f1,bb43995b-68b4-41a1-8458-e10a2d8925f1,1,0,61730dd9-fed7-43ce-8f38-724cac8f3d08,61730dd9-fed7-43ce-8f38-724cac8f3d08,1,0,e6a494b8-27e7-46a6-9435-7be6e150a69e,e6a494b8-27e7-46a6-9435-7be6e150a69e,1,0,133dc852-59d3-4351-934d-8845f8a38431,133dc852-59d3-4351-934d-8845f8a38431,1,0,55dbaaf1-554d-46e2-b42a-ce6a8bf20dfb,55dbaaf1-554d-46e2-b42a-ce6a8bf20dfb,1,0,b67914a8-d483-4bed-bd4d-a4aadd4998a4,b67914a8-d483-4bed-bd4d-a4aadd4998a4,1,0,707a8a49-fec5-454c-9e80-c3da829d395c,707a8a49-fec5-454c-9e80-c3da829d395c,1,0,b5ea4aff-11be-4232-94a2-cb92801b6c49,b5ea4aff-11be-4232-94a2-cb92801b6c49,1,0,6f630213-c16c-421c-a160-09e3c729ab26,6f630213-c16c-421c-a160-09e3c729ab26,1,0,878c638c-7c84-4914-896a-d4fdf0d759ef,878c638c-7c84-4914-896a-d4fdf0d759ef,1,0,6065653e-b7a9-4033-9617-f64430c57d89,6065653e-b7a9-4033-9617-f64430c57d89,1,0,9ec63da6-1f53-417f-9c7d-6879eaa56a7e,9ec63da6-1f53-417f-9c7d-6879eaa56a7e,1,0,00d1d85b-c258-4f10-9d13-a99375a29fc1,00d1d85b-c258-4f10-9d13-a99375a29fc1,1,0,0544376f-461c-42c3-a102-e0ae65e3c0c6,0544376f-461c-42c3-a102-e0ae65e3c0c6,1,0,6df8d316-6ac3-4626-8951-1ad36d7049ed,6df8d316-6ac3-4626-8951-1ad36d7049ed,1,0,f211b418-899d-4220-a14b-4a7302183e46,f211b418-899d-4220-a14b-4a7302183e46,1,0,e499629a-69ed-46b4-be5d-7b1f2f6a11d4,e499629a-69ed-46b4-be5d-7b1f2f6a11d4,1,0,52ab6aea-e6a0-43f0-9cc8-f7c9126635cc,52ab6aea-e6a0-43f0-9cc8-f7c9126635cc,1,0,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,bac41d45-249f-40b4-a013-008e261369c8,bac41d45-249f-40b4-a013-008e261369c8,1,0,84e34b4a-02e8-4676-8b81-771ddf3c2931,84e34b4a-02e8-4676-8b81-771ddf3c2931,1,0,0aa6a024-66ae-4592-87d6-f7cb2a59f906,0aa6a024-66ae-4592-87d6-f7cb2a59f906,1,0,734b4dc5-dc91-4945-a2d7-cefe56a6e0a6,734b4dc5-dc91-4945-a2d7-cefe56a6e0a6,1,0,bb2dcb37-410d-4a6c-9ace-1f04177d6e88,bb2dcb37-410d-4a6c-9ace-1f04177d6e88,1,0,cb6ecc18-a14f-4c3c-a39d-2cd2d1ab4e03,cb6ecc18-a14f-4c3c-a39d-2cd2d1ab4e03,1,0,f71ac535-74a5-4001-a613-455a9e1bf734,f71ac535-74a5-4001-a613-455a9e1bf734,1,0,55a42b83-b6d2-409b-a8ff-7849b08e07ed,55a42b83-b6d2-409b-a8ff-7849b08e07ed,1,0,61889399-ecc2-442c-a790-a8b27a7a540c,61889399-ecc2-442c-a790-a8b27a7a540c,1,0,ecd3a928-3e59-439c-8f58-ba360f2a8b3c,ecd3a928-3e59-439c-8f58-ba360f2a8b3c,1,0,4ee2efbc-bc4a-4b47-bfdb-bb83f108c5bb,4ee2efbc-bc4a-4b47-bfdb-bb83f108c5bb,1,0,fb9c08ee-92e9-4bd9-8794-ef0f221eee99,fb9c08ee-92e9-4bd9-8794-ef0f221eee99,1,0,e4cd44e6-1255-490f-96d9-f805ac92cf67,e4cd44e6-1255-490f-96d9-f805ac92cf67,1,0,8ae9be37-cda5-4b66-8a97-5e77d2a2c75f,8ae9be37-cda5-4b66-8a97-5e77d2a2c75f,1,0,5a9011fc-c023-47fb-a999-2c6ca33a04b9,5a9011fc-c023-47fb-a999-2c6ca33a04b9,1,0,ab574fa5-0730-4456-b741-111e5ea8a896,ab574fa5-0730-4456-b741-111e5ea8a896,1,0,b8d5adf0-dc2f-4041-bc97-cb2442f00054,b8d5adf0-dc2f-4041-bc97-cb2442f00054,1,0,398199c4-4830-48e9-89c5-45c2c5a30ee6,398199c4-4830-48e9-89c5-45c2c5a30ee6,1,0,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,2d942a50-b239-4b8c-812a-5a634f5dcaef,2d942a50-b239-4b8c-812a-5a634f5dcaef,1,0,8ab0c61d-85b4-47e3-aca1-1890e4c6ec8d,8ab0c61d-85b4-47e3-aca1-1890e4c6ec8d,1,0,a21cf522-d657-49ba-a198-01ff1de5e3f0,a21cf522-d657-49ba-a198-01ff1de5e3f0,1,0,4dc698da-8471-4b3f-816d-f1467cd2e5f1,4dc698da-8471-4b3f-816d-f1467cd2e5f1,1,0,7ceb2f18-4dae-4b13-a5be-e949be165b4e,7ceb2f18-4dae-4b13-a5be-e949be165b4e,1,0,c4f94f6d-e33f-4226-bf47-c4b544098082,c4f94f6d-e33f-4226-bf47-c4b544098082,1,0,0abca5b8-4974-48aa-bf5d-dbbe2c2ea0e6,0abca5b8-4974-48aa-bf5d-dbbe2c2ea0e6,1,0,fc67b510-3fb4-4305-92d2-c252bc718f03,fc67b510-3fb4-4305-92d2-c252bc718f03,1,0,ed98a7b2-ad31-401f-a65e-dfbcc8e5a4a8,ed98a7b2-ad31-401f-a65e-dfbcc8e5a4a8,1,0,9a5e3d2c-ab69-4f9d-a56f-20bb5f0be1e2,9a5e3d2c-ab69-4f9d-a56f-20bb5f0be1e2,1,0,cf1f7915-94ad-47e7-8676-73271d0cf71e,cf1f7915-94ad-47e7-8676-73271d0cf71e,1,0,fceb6e4a-bd51-4193-a542-70d2317af669,fceb6e4a-bd51-4193-a542-70d2317af669,1,0,f9f991a6-ddf3-4953-8a1f-e6c0e1a7f4e9,f9f991a6-ddf3-4953-8a1f-e6c0e1a7f4e9,1,0,80847d57-1795-46c7-a106-926e1f43ac1e,80847d57-1795-46c7-a106-926e1f43ac1e,1,0,38685415-dc87-48b4-8cc4-f85b438f2ec2,38685415-dc87-48b4-8cc4-f85b438f2ec2,1,0,110eff8b-aeec-4ba5-b710-fefc1bd60284,110eff8b-aeec-4ba5-b710-fefc1bd60284,1,0,0a8a6bb9-8b6a-43cf-9d46-b18a8a9591d8,0a8a6bb9-8b6a-43cf-9d46-b18a8a9591d8,1,0,75eca481-002b-4046-898d-dfac9357611f,75eca481-002b-4046-898d-dfac9357611f,1,0,0110decc-d06e-43cf-9d01-30d412edcdd7,0110decc-d06e-43cf-9d01-30d412edcdd7,1,0,3ea32a24-d37b-4fad-937a-9d1357d649a9,3ea32a24-d37b-4fad-937a-9d1357d649a9,1,0,2856ee9a-0fea-4684-b7b8-4844773eae07,2856ee9a-0fea-4684-b7b8-4844773eae07,1,0,84e09840-8d67-416f-87a2-7f03c04180c9,84e09840-8d67-416f-87a2-7f03c04180c9,1,0,0388f22d-f91d-45c9-a8ae-900a24cbfe67,0388f22d-f91d-45c9-a8ae-900a24cbfe67,1,0,60fa2562-4914-46d6-a00a-1bb6e2803263,60fa2562-4914-46d6-a00a-1bb6e2803263,1,0,0d61a8d4-2dc8-435e-a238-416d7640576f,0d61a8d4-2dc8-435e-a238-416d7640576f,1,0,5ea899d4-e076-4a1c-838c-e369abc4705f,5ea899d4-e076-4a1c-838c-e369abc4705f,1,0,f2bf5f4a-e53b-4300-bbc7-97ac2e06f3c2,f2bf5f4a-e53b-4300-bbc7-97ac2e06f3c2,1,0,ab2e75f0-8da7-4b38-8f30-537424b719db,ab2e75f0-8da7-4b38-8f30-537424b719db,1,0,db344a42-61b8-4544-9aa1-8840ab8a70f0,db344a42-61b8-4544-9aa1-8840ab8a70f0,1,0,bd029e3f-a6bd-4be9-81f3-f3ea84f424ce,bd029e3f-a6bd-4be9-81f3-f3ea84f424ce,1,0,043bd776-5a7b-45ff-8b4a-5eed2bba0054,043bd776-5a7b-45ff-8b4a-5eed2bba0054,1,0,6a708860-e3b6-46ea-bea5-0d3e426c72f6,6a708860-e3b6-46ea-bea5-0d3e426c72f6,1,0,7c9e30d0-4a25-4d1d-a5ad-c48b231f453c,7c9e30d0-4a25-4d1d-a5ad-c48b231f453c,1,0,78058cd3-eb56-483c-96f5-1bf8883abc76,78058cd3-eb56-483c-96f5-1bf8883abc76,1,0,cd1fbfdd-d05e-4c22-aa04-83e9d36fb557,cd1fbfdd-d05e-4c22-aa04-83e9d36fb557,1,0,fae4675c-dcdc-42fc-911d-07c3c577b8b8,fae4675c-dcdc-42fc-911d-07c3c577b8b8,1,0,f1050611-4f82-411b-97f2-bcd8a5c914bf,f1050611-4f82-411b-97f2-bcd8a5c914bf,1,0,efacf22d-b474-4d49-af8b-6d3784aa5cf2,efacf22d-b474-4d49-af8b-6d3784aa5cf2,1,0,f818b937-9ac3-4a0c-ba50-26c060984f09,f818b937-9ac3-4a0c-ba50-26c060984f09,1,0,f385778d-96cb-4e09-884d-533739b393b1,f385778d-96cb-4e09-884d-533739b393b1,1,0,5bdaa783-e965-4d59-b7b7-a1e86ddb89f7,5bdaa783-e965-4d59-b7b7-a1e86ddb89f7,1,0,b8fe43d1-b9a7-4ec1-94bd-1e7fad424f8d,b8fe43d1-b9a7-4ec1-94bd-1e7fad424f8d,1,0,f64089ee-72dd-4fcf-8926-31e95c6fcf77,f64089ee-72dd-4fcf-8926-31e95c6fcf77,1,0,5d93aea8-3f41-4e77-bed5-4b2377cbfe0e,5d93aea8-3f41-4e77-bed5-4b2377cbfe0e,1,0,e1e151cc-7b8a-4125-804f-c902a522ed81,e1e151cc-7b8a-4125-804f-c902a522ed81,1,0,f475494e-fe94-4902-b2da-3ade01eba5bb,f475494e-fe94-4902-b2da-3ade01eba5bb,1,0,fbb814b2-cb2f-474d-9c96-5571cef3030e,fbb814b2-cb2f-474d-9c96-5571cef3030e,1,0,7bf36370-3761-4fd5-bea5-90fa142a9d57,7bf36370-3761-4fd5-bea5-90fa142a9d57,1,0,3b81427f-cf64-4a5e-adb3-5415d515fecd,3b81427f-cf64-4a5e-adb3-5415d515fecd,1,0,e9f2b604-7181-476d-8b34-3a544cbb353d,e9f2b604-7181-476d-8b34-3a544cbb353d,1,0,73773919-d01c-41dd-bb31-9c66648ac0ff,73773919-d01c-41dd-bb31-9c66648ac0ff,1,0,5d1afad0-3d7e-4214-b52a-72c184490084,5d1afad0-3d7e-4214-b52a-72c184490084,1,0,5f7901a1-f992-42fa-9ddb-d63574da3b56,5f7901a1-f992-42fa-9ddb-d63574da3b56,1,0,26abd45a-12b3-4312-88fb-53c90a6e6679,26abd45a-12b3-4312-88fb-53c90a6e6679,1,0,1541ad74-3e73-4699-bccf-c13313fbedfe,1541ad74-3e73-4699-bccf-c13313fbedfe,1,0,1037ecb7-6819-4ba2-8c93-eccbbdf825be,1037ecb7-6819-4ba2-8c93-eccbbdf825be,1,0,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,20d655a7-788c-48bc-83ae-25003106bedb,20d655a7-788c-48bc-83ae-25003106bedb,1,0,7bfb78de-899f-4a4d-a8b2-ebadeccf3921,7bfb78de-899f-4a4d-a8b2-ebadeccf3921,1,0,68a72014-4b2e-4347-aaa7-54d95b8eb919,68a72014-4b2e-4347-aaa7-54d95b8eb919,1,0,379c9295-d0d5-418d-82f3-5ae19985cc53,379c9295-d0d5-418d-82f3-5ae19985cc53,1,0,25830f5b-27e2-4eff-9728-b21eb498727d,25830f5b-27e2-4eff-9728-b21eb498727d,1,0,af02f534-8508-4f9f-bcc1-0c6f3d696971,af02f534-8508-4f9f-bcc1-0c6f3d696971,1,0,dd345cfb-ea0c-4ea8-9b35-22547b000275,dd345cfb-ea0c-4ea8-9b35-22547b000275,1,0,a71d9c41-7510-4d38-90df-1034977b8f45,a71d9c41-7510-4d38-90df-1034977b8f45,1,0,86a871da-3725-43a1-a7c3-98acd187011b,86a871da-3725-43a1-a7c3-98acd187011b,1,0,2447cfeb-d877-4222-8ac2-b0026b85f932,2447cfeb-d877-4222-8ac2-b0026b85f932,1,0,fb94e9cb-1f27-42a6-a701-18bbe5888e70,fb94e9cb-1f27-42a6-a701-18bbe5888e70,1,0,2e26e32e-a0c6-4460-99de-865622202166,2e26e32e-a0c6-4460-99de-865622202166,1,0,c9489a6e-45af-4877-9788-158071571a0a,c9489a6e-45af-4877-9788-158071571a0a,1,0,23959912-f8fc-42bc-9ec2-1d520ebc5dad,23959912-f8fc-42bc-9ec2-1d520ebc5dad,1,0,4770398f-8013-4d43-93ce-ec1165e40c4e,4770398f-8013-4d43-93ce-ec1165e40c4e,1,0,9a706997-90cb-430d-972c-d2bad87c4a79,9a706997-90cb-430d-972c-d2bad87c4a79,1,0,6f661660-b9c4-41d4-99a8-e08006cfe9c8,6f661660-b9c4-41d4-99a8-e08006cfe9c8,1,0,199e79fa-54d6-4748-aaaa-9c55283582a3,199e79fa-54d6-4748-aaaa-9c55283582a3,1,0,5ef026c2-2ef4-45d6-9792-5ba0d298714b,5ef026c2-2ef4-45d6-9792-5ba0d298714b,1,0,45d61391-4cf7-4f45-8775-ada582c42400,45d61391-4cf7-4f45-8775-ada582c42400,1,0,78b2a913-2ab9-455d-85a3-504f0f468468,78b2a913-2ab9-455d-85a3-504f0f468468,1,0,8c7e1080-fbb2-4a9c-b740-b3e9eb996565,8c7e1080-fbb2-4a9c-b740-b3e9eb996565,1,0,560b5b12-4dee-4c69-ab6b-7680757a2797,560b5b12-4dee-4c69-ab6b-7680757a2797,1,0,3cfb1ce0-de42-4914-85c0-807d0c10f77e,3cfb1ce0-de42-4914-85c0-807d0c10f77e,1,0,aa89881f-f111-4384-911c-847b04bb56dd,aa89881f-f111-4384-911c-847b04bb56dd,1,0,444d9e3b-c702-4ad6-a929-a220eff0f6e7,444d9e3b-c702-4ad6-a929-a220eff0f6e7,1,0,022c4519-1cdb-45b6-a699-89fd6688999c,022c4519-1cdb-45b6-a699-89fd6688999c,1,0,fb5b79a2-caec-4c6e-a112-27e78a184d5e,fb5b79a2-caec-4c6e-a112-27e78a184d5e,1,0,fa523958-ce1e-42e1-ae00-2dcb401b7eda,fa523958-ce1e-42e1-ae00-2dcb401b7eda,1,0,1518bca2-a004-4566-8991-7c60e6745a49,1518bca2-a004-4566-8991-7c60e6745a49,1,0,ed8618e2-3ce6-4956-856a-9f40279b4da6,ed8618e2-3ce6-4956-856a-9f40279b4da6,1,0,733f6bc2-544d-4fac-bca8-11b981b95a03,733f6bc2-544d-4fac-bca8-11b981b95a03,1,0,0333cd9e-392d-40b2-869d-ad47119e0384,0333cd9e-392d-40b2-869d-ad47119e0384,1,0,82cc8820-0b92-4bb7-b097-7ac79e922f01,82cc8820-0b92-4bb7-b097-7ac79e922f01,1,0,25451a36-c842-44a5-94f4-7e540050b825,25451a36-c842-44a5-94f4-7e540050b825,1,0,8e0340c9-6469-4fc9-b19a-4be4e0e6ee82,8e0340c9-6469-4fc9-b19a-4be4e0e6ee82,1,0,f2267d6c-6972-4621-b677-87798056363b,f2267d6c-6972-4621-b677-87798056363b,1,0,243d201b-3714-4700-b410-c74c9093e6f6,243d201b-3714-4700-b410-c74c9093e6f6,1,0,e1e9862e-c87b-400f-bca1-b1380cb98ddc,e1e9862e-c87b-400f-bca1-b1380cb98ddc,1,0,de3cb50c-ef99-419e-b922-c6a453da6a5b,de3cb50c-ef99-419e-b922-c6a453da6a5b,1,0,d4ca4802-756a-494c-bab3-e77e0777a3fa,d4ca4802-756a-494c-bab3-e77e0777a3fa,1,0,134c1054-8d65-405f-ba3b-5beeca803a72,134c1054-8d65-405f-ba3b-5beeca803a72,1,0,cfa1669b-5310-4171-83fd-4dff3c6ac345,cfa1669b-5310-4171-83fd-4dff3c6ac345,1,0,9ec26d14-b09d-4fd7-9c43-062c0120cf3d,9ec26d14-b09d-4fd7-9c43-062c0120cf3d,1,0,0db78226-37d0-4016-b4c9-5134af1aabc7,0db78226-37d0-4016-b4c9-5134af1aabc7,1,0,8d6b4d23-a260-4352-9975-c13ce3e05220,8d6b4d23-a260-4352-9975-c13ce3e05220,1,0,e0be0bc7-def6-4ae9-9a33-9689aa829b5e,e0be0bc7-def6-4ae9-9a33-9689aa829b5e,1,0,97d4ffd0-07ef-4dc2-8fbc-449c3c8453ef,97d4ffd0-07ef-4dc2-8fbc-449c3c8453ef,1,0,6f5ac40b-ea22-47cf-acf2-614406669a72,6f5ac40b-ea22-47cf-acf2-614406669a72,1,0,b6caaa9e-a9d1-4519-a61f-7fa0ab0ff201,b6caaa9e-a9d1-4519-a61f-7fa0ab0ff201,1,0,488d2644-6fef-488a-af38-40f59c0e0d8c,488d2644-6fef-488a-af38-40f59c0e0d8c,1,0,5d76a28c-5d6c-49cb-8b91-2527e8d06aba,5d76a28c-5d6c-49cb-8b91-2527e8d06aba,1,0,688d86cd-1044-4b77-bb63-2c05aaafbcd0,688d86cd-1044-4b77-bb63-2c05aaafbcd0,1,0,f1efef30-8651-4728-becd-abe3f9026a43,f1efef30-8651-4728-becd-abe3f9026a43,1,0,c2612e22-4f0d-4713-b4eb-decd9780d088,c2612e22-4f0d-4713-b4eb-decd9780d088,1,0,11b1410f-8e14-4b2f-8890-177f4875020e,11b1410f-8e14-4b2f-8890-177f4875020e,1,0,2276b2b0-1705-4014-956f-5087e9dd5c1e,2276b2b0-1705-4014-956f-5087e9dd5c1e,1,0,f72b9d4b-7196-45a3-9349-e32fc91e875a,f72b9d4b-7196-45a3-9349-e32fc91e875a,1,0,6c509dcc-4529-4ac3-86fe-26f807991b1c,6c509dcc-4529-4ac3-86fe-26f807991b1c,1,0,529c8887-f691-4ba8-aeaf-937858d61c30,529c8887-f691-4ba8-aeaf-937858d61c30,1,0,43435d30-8c25-4757-9a29-9173415959ff,43435d30-8c25-4757-9a29-9173415959ff,1,0,4aef5419-7cf5-4443-b773-9273c983844f,4aef5419-7cf5-4443-b773-9273c983844f,1,0,b090cfa5-1bd8-43aa-84d6-6e04375c4b57,b090cfa5-1bd8-43aa-84d6-6e04375c4b57,1,0,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,77bd95d6-3cd5-4b67-a0b6-72d24243fbc2,77bd95d6-3cd5-4b67-a0b6-72d24243fbc2,1,0,0be7f905-53b8-4bb1-8e37-dcc142e508c5,0be7f905-53b8-4bb1-8e37-dcc142e508c5,1,0,4ec242e0-75d1-4bf7-be18-783e7aa4f236,4ec242e0-75d1-4bf7-be18-783e7aa4f236,1,0,e02b1366-9d7a-462f-86a1-436bbf4532ff,e02b1366-9d7a-462f-86a1-436bbf4532ff,1,0,40ee729c-c317-4a1c-b985-5f7e4e1e20fb,40ee729c-c317-4a1c-b985-5f7e4e1e20fb,1,0,2feb35c0-b046-4086-a2ce-ccc462fc6e9c,2feb35c0-b046-4086-a2ce-ccc462fc6e9c,1,0,8811cc64-99d9-4f13-8309-c29965783f5a,8811cc64-99d9-4f13-8309-c29965783f5a,1,0,7c737071-e850-4a3f-8942-697ef52a8ecc,7c737071-e850-4a3f-8942-697ef52a8ecc,1,0,62eff222-7b74-4cab-9138-880db1f05147,62eff222-7b74-4cab-9138-880db1f05147,1,0,39c6c277-cfc6-4e8a-8e7f-afcff55f0511,39c6c277-cfc6-4e8a-8e7f-afcff55f0511,1,0,860f8893-22fe-4b13-adb1-24e1ea8c6544,860f8893-22fe-4b13-adb1-24e1ea8c6544,1,0,95266e9f-073f-4de3-83c6-cc0d9ee9334f,95266e9f-073f-4de3-83c6-cc0d9ee9334f,1,0,21b8ac8d-75ca-481c-8e85-01bc2029f0c0,21b8ac8d-75ca-481c-8e85-01bc2029f0c0,1,0,d5012e69-89bc-40af-8e4f-377a042854ee,d5012e69-89bc-40af-8e4f-377a042854ee,1,0,02f79fd8-5315-4c90-b520-db67dcb6e371,02f79fd8-5315-4c90-b520-db67dcb6e371,1,0,9bb52788-4a3a-48b5-a551-5ca753b6c059,9bb52788-4a3a-48b5-a551-5ca753b6c059,1,0,4fb5004f-3cd9-44c4-a44b-d235cccf9e9c,4fb5004f-3cd9-44c4-a44b-d235cccf9e9c,1,0,872a0c47-fab5-4a54-8ab9-23940bbdefbb,872a0c47-fab5-4a54-8ab9-23940bbdefbb,1,0,7428a626-3fbc-4f2c-a3dd-f14e8d90c00b,7428a626-3fbc-4f2c-a3dd-f14e8d90c00b,1,0,2f20bff4-9201-4f36-9e74-eba4d9b3c59a,2f20bff4-9201-4f36-9e74-eba4d9b3c59a,1,0,b6c94efd-5994-4c4c-a641-b062ecc38b65,b6c94efd-5994-4c4c-a641-b062ecc38b65,1,0,98501228-7f0e-45a3-b58f-4c654f393f80,98501228-7f0e-45a3-b58f-4c654f393f80,1,0,502384c9-edb7-451a-b7ea-de006f657a6e,502384c9-edb7-451a-b7ea-de006f657a6e,1,0,4e1a4fe0-dca4-40ba-9369-73be303a4aef,4e1a4fe0-dca4-40ba-9369-73be303a4aef,1,0,329906a0-0b61-4f3f-8cd0-f06a78e8fe5f,329906a0-0b61-4f3f-8cd0-f06a78e8fe5f,1,0,840e0b1b-a599-4c5f-8eaa-7f7e4f2e55a4,840e0b1b-a599-4c5f-8eaa-7f7e4f2e55a4,1,0,1d06a9e4-e637-4219-a81c-64f8ec1b91a4,1d06a9e4-e637-4219-a81c-64f8ec1b91a4,1,0,50968921-76f3-4108-835a-96b153671c8d,50968921-76f3-4108-835a-96b153671c8d,1,0,b773f510-1485-4886-9071-afcbf49ff856,b773f510-1485-4886-9071-afcbf49ff856,1,0,964403f2-0a87-49e1-b183-dbe3624e3805,964403f2-0a87-49e1-b183-dbe3624e3805,1,0,bb264e83-49f4-4b7a-8be2-094712fc0640,bb264e83-49f4-4b7a-8be2-094712fc0640,1,0,07bf650d-e61e-44f3-9643-6ffc95b913fb,07bf650d-e61e-44f3-9643-6ffc95b913fb,1,0,5c68c57a-31d6-4ae9-855f-3fbc57922e39,5c68c57a-31d6-4ae9-855f-3fbc57922e39,1,0,6b90ed05-813c-4324-8a69-02c2268856b2,6b90ed05-813c-4324-8a69-02c2268856b2,1,0,081ed48d-cb87-459d-97d6-9af121edbabb,081ed48d-cb87-459d-97d6-9af121edbabb,1,0,6c4074b2-f631-451d-b412-1c8c096a71b1,6c4074b2-f631-451d-b412-1c8c096a71b1,1,0,f9931a20-8391-4b13-8c6d-1836f2492e53,f9931a20-8391-4b13-8c6d-1836f2492e53,1,0,c6eec20b-13b9-44a0-968f-1325680c399b,c6eec20b-13b9-44a0-968f-1325680c399b,1,0,02fbf083-1bdd-4900-9dc1-62f415b792a4,02fbf083-1bdd-4900-9dc1-62f415b792a4,1,0,35454c2d-7088-487b-abb3-f95f2dfdcffa,35454c2d-7088-487b-abb3-f95f2dfdcffa,1,0,911f8810-e96e-4f02-9377-47e49919f87e,911f8810-e96e-4f02-9377-47e49919f87e,1,0,cde46d6d-9f8a-45b6-98a7-9411030ccd72,cde46d6d-9f8a-45b6-98a7-9411030ccd72,1,0,ff1a4c30-03ff-4bdd-9df2-a2579aeb4157,ff1a4c30-03ff-4bdd-9df2-a2579aeb4157,1,0,224b9439-4b30-4b64-8edf-e7718ee90a7d,224b9439-4b30-4b64-8edf-e7718ee90a7d,1,0,74dc2374-daf1-4a8a-ba10-d3aced96af3b,74dc2374-daf1-4a8a-ba10-d3aced96af3b,1,0,15f1a3a8-5d42-486d-95f9-3d43ff1d5d56,15f1a3a8-5d42-486d-95f9-3d43ff1d5d56,1,0,e28e953f-93b3-4d4d-9ee4-c56df26037eb,e28e953f-93b3-4d4d-9ee4-c56df26037eb,1,0,578e0fd2-997c-437a-befc-33d128097a7e,578e0fd2-997c-437a-befc-33d128097a7e,1,0,14089231-31a8-4471-b85b-064836794ff3,14089231-31a8-4471-b85b-064836794ff3,1,0,014de276-fb2f-4deb-873f-475729be0f66,014de276-fb2f-4deb-873f-475729be0f66,1,0,40a60ff7-96ca-485b-a2d9-640a208a7de6,40a60ff7-96ca-485b-a2d9-640a208a7de6,1,0,03e6caa4-eaa2-43aa-bdd1-768f9cce7848,03e6caa4-eaa2-43aa-bdd1-768f9cce7848,1,0,2c2526c1-bdf8-4115-bdff-3e79d28321cb,2c2526c1-bdf8-4115-bdff-3e79d28321cb,1,0,4f4da2e9-37ab-4505-b3b1-4b3a908f38c2,4f4da2e9-37ab-4505-b3b1-4b3a908f38c2,1,0,95ab774f-27fa-4bd4-a422-0f997f632679,95ab774f-27fa-4bd4-a422-0f997f632679,1,0,ee3ad891-b7d6-439d-892b-de2f3399d147,ee3ad891-b7d6-439d-892b-de2f3399d147,1,0,4af0f1ee-42cb-47bd-99d0-99deb70e9f82,4af0f1ee-42cb-47bd-99d0-99deb70e9f82,1,0,a2ae0338-ed11-422a-8442-f6c4002ddf0d,a2ae0338-ed11-422a-8442-f6c4002ddf0d,1,0,eb59c9c3-6043-401c-87cc-ba7620139d6a,eb59c9c3-6043-401c-87cc-ba7620139d6a,1,0,2b5ce871-8630-4f2f-9ccb-d9f863886420,2b5ce871-8630-4f2f-9ccb-d9f863886420,1,0,86ae353e-7eed-434c-b4ab-cede36e462bc,86ae353e-7eed-434c-b4ab-cede36e462bc,1,0,18e65717-738b-4d39-9c85-676bca15e6b7,18e65717-738b-4d39-9c85-676bca15e6b7,1,0,01579044-5659-4a73-a989-c52cfabaae66,01579044-5659-4a73-a989-c52cfabaae66,1,0,9b8509e8-8262-4e6a-b2f3-a0df8f49e2c5,9b8509e8-8262-4e6a-b2f3-a0df8f49e2c5,1,0,911baaa1-a4de-4558-b00e-51644144a762,911baaa1-a4de-4558-b00e-51644144a762,1,0,8a8ad123-c01a-440a-bd01-1c0da72cf2eb,8a8ad123-c01a-440a-bd01-1c0da72cf2eb,1,0,ca4ef957-36c2-43b9-8ff7-e2b7ee58cde5,ca4ef957-36c2-43b9-8ff7-e2b7ee58cde5,1,0,4e036eff-92a8-4010-89b2-ed949c123311,4e036eff-92a8-4010-89b2-ed949c123311,1,0,38160114-dc22-4d0b-86a5-d650f4756932,38160114-dc22-4d0b-86a5-d650f4756932,1,0,60aaa289-1f07-438c-8f10-81058ac671c3,60aaa289-1f07-438c-8f10-81058ac671c3,1,0,7312a4ab-a269-4d85-a2c2-25bd5c5dc59c,7312a4ab-a269-4d85-a2c2-25bd5c5dc59c,1,0,c44b0868-bd7f-4230-973b-544ff4dd2afe,c44b0868-bd7f-4230-973b-544ff4dd2afe,1,0,fc2675c2-1c9b-41f9-88eb-5c8be365fe41,fc2675c2-1c9b-41f9-88eb-5c8be365fe41,1,0,51e6a6f9-ce9d-4cb0-a40c-384ede074e07,51e6a6f9-ce9d-4cb0-a40c-384ede074e07,1,0,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,d49411b4-5f6d-48c5-b4f8-fdfbd1b73317,d49411b4-5f6d-48c5-b4f8-fdfbd1b73317,1,0,8b3da21b-ea3f-47cf-af48-15b886b21f20,8b3da21b-ea3f-47cf-af48-15b886b21f20,1,0,32c4750b-0096-4bbc-8dcd-c1f717734233,32c4750b-0096-4bbc-8dcd-c1f717734233,1,0,be6740b1-1f57-4c01-a67a-d48152931dc8,be6740b1-1f57-4c01-a67a-d48152931dc8,1,0,40fd038d-a93a-4be7-9221-d8ae83350ca0,40fd038d-a93a-4be7-9221-d8ae83350ca0,1,0,e9fcabef-5067-477b-8cb0-1bf3ab8161c5,e9fcabef-5067-477b-8cb0-1bf3ab8161c5,1,0,29adc9e5-a994-48ab-a5a1-919d01119c3a,29adc9e5-a994-48ab-a5a1-919d01119c3a,1,0,c47ffce7-c905-4e88-8b1f-156f47047ccd,c47ffce7-c905-4e88-8b1f-156f47047ccd,1,0,e1755eed-88cf-42c1-83e4-f9047f2c30bf,e1755eed-88cf-42c1-83e4-f9047f2c30bf,1,0,c6ec9d48-9131-4735-9cf7-b498705a57e4,c6ec9d48-9131-4735-9cf7-b498705a57e4,1,0,865d76f7-db4a-4fa2-8e1c-3ecbc2d8faf4,865d76f7-db4a-4fa2-8e1c-3ecbc2d8faf4,1,0,706c421a-74ce-4985-9443-b4a2032481f6,706c421a-74ce-4985-9443-b4a2032481f6,1,0,64da4c24-4aaf-42c8-8595-7f60ff3bc344,64da4c24-4aaf-42c8-8595-7f60ff3bc344,1,0,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,fb9577e1-00d9-4d52-8de9-23914929a683,fb9577e1-00d9-4d52-8de9-23914929a683,1,0,ffd62a16-f2b4-4e3a-8849-15b957a3d1a1,ffd62a16-f2b4-4e3a-8849-15b957a3d1a1,1,0,529253ae-9c92-4426-b150-8444ba622f89,529253ae-9c92-4426-b150-8444ba622f89,1,0,06a1955a-2ef0-4607-9dcb-a480a7951af7,06a1955a-2ef0-4607-9dcb-a480a7951af7,1,0,6f8fcc96-bfed-444a-908d-95c5b1c64972,6f8fcc96-bfed-444a-908d-95c5b1c64972,1,0,97ce4bf2-6580-4f27-8b5d-d60b66a09c9e,97ce4bf2-6580-4f27-8b5d-d60b66a09c9e,1,0,a84c89d9-2cfe-405f-9bb0-5392b3171695,a84c89d9-2cfe-405f-9bb0-5392b3171695,1,0,070ecbfe-88d6-4de8-b236-e7eedbc3ebc6,070ecbfe-88d6-4de8-b236-e7eedbc3ebc6,1,0,91e26e73-027f-4a10-9083-e5182e768723,91e26e73-027f-4a10-9083-e5182e768723,1,0,e55680f4-cb1a-4cdb-88f0-5d82f43c1d05,e55680f4-cb1a-4cdb-88f0-5d82f43c1d05,1,0,54433668-4391-4dea-8baf-43e9aa1d624e,54433668-4391-4dea-8baf-43e9aa1d624e,1,0,fc309616-060a-42c3-8401-dfef0f359bc5,fc309616-060a-42c3-8401-dfef0f359bc5,1,0,b968398d-973d-4643-95a5-16633d7e48bc,b968398d-973d-4643-95a5-16633d7e48bc,1,0,b9507495-2536-4895-b68b-62acd74343f6,b9507495-2536-4895-b68b-62acd74343f6,1,0,e05a14cc-9051-4c38-9725-19856e36d260,e05a14cc-9051-4c38-9725-19856e36d260,1,0,8154aa0f-ecd6-4ab0-9498-56ef25486a55,8154aa0f-ecd6-4ab0-9498-56ef25486a55,1,0,9d6429f7-23da-4596-822a-04818deb3088,9d6429f7-23da-4596-822a-04818deb3088,1,0,a1b67bd2-3220-497d-b2b4-bd0ea62d9111,a1b67bd2-3220-497d-b2b4-bd0ea62d9111,1,0,acb533e7-4610-4f92-b548-1a4ff1a423d4,acb533e7-4610-4f92-b548-1a4ff1a423d4,1,0,8697999d-9cdb-43d8-979b-3f283daffdd3,8697999d-9cdb-43d8-979b-3f283daffdd3,1,0,23378687-249c-4ec6-99b8-b13fb04b8643,23378687-249c-4ec6-99b8-b13fb04b8643,1,0,66315b12-7abf-46e0-a994-894b827b1301,66315b12-7abf-46e0-a994-894b827b1301,1,0,dba174fb-8392-4451-8069-ae8145658e34,dba174fb-8392-4451-8069-ae8145658e34,1,0,ff5dd4f8-8a16-4a41-875d-c4f7c37ae67a,ff5dd4f8-8a16-4a41-875d-c4f7c37ae67a,1,0,4435d99d-a1df-43e6-97ab-5e651017c61d,4435d99d-a1df-43e6-97ab-5e651017c61d,1,0,2398d69d-ecdd-4d34-bdae-34ed5507a61e,2398d69d-ecdd-4d34-bdae-34ed5507a61e,1,0,a707035a-0172-4b55-b589-fa4a8be9b596,a707035a-0172-4b55-b589-fa4a8be9b596,1,0,c4456e94-8c76-49b1-b85a-433e0f65bdb0,c4456e94-8c76-49b1-b85a-433e0f65bdb0,1,0,4a347209-3a07-48ea-b407-6ee37f1d69f2,4a347209-3a07-48ea-b407-6ee37f1d69f2,1,0,d6aed0fd-686c-430d-b884-74494177422e,d6aed0fd-686c-430d-b884-74494177422e,1,0,245ec4aa-ed65-41f7-b0f0-f8085cfc5bef,245ec4aa-ed65-41f7-b0f0-f8085cfc5bef,1,0,3ed64288-8bf0-4049-8d44-1b424f31d40f,3ed64288-8bf0-4049-8d44-1b424f31d40f,1,0,e0a3fab1-3fe9-4927-840e-f983f72bdfc1,e0a3fab1-3fe9-4927-840e-f983f72bdfc1,1,0,df31eee8-387d-40d1-98df-1f7d8176b50e,df31eee8-387d-40d1-98df-1f7d8176b50e,1,0,c8364283-5525-4bef-8e96-abced54c6a4a,c8364283-5525-4bef-8e96-abced54c6a4a,1,0,079ba95c-8293-47e2-b8bd-7acf73c2d880,079ba95c-8293-47e2-b8bd-7acf73c2d880,1,0,fbe1dcf7-c11d-4395-ab3a-c2f986c25419,fbe1dcf7-c11d-4395-ab3a-c2f986c25419,1,0,a5f264a8-a547-4653-abb1-eb1666d527dc,a5f264a8-a547-4653-abb1-eb1666d527dc,1,0,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,c4968b4e-0715-43a5-92ad-c8cd276fbf7b,c4968b4e-0715-43a5-92ad-c8cd276fbf7b,1,0,402f2fe0-4d08-4701-9c8f-0c2bb75815ef,402f2fe0-4d08-4701-9c8f-0c2bb75815ef,1,0,1a4ed7cf-3294-4a5c-9650-75b61d6b2531,1a4ed7cf-3294-4a5c-9650-75b61d6b2531,1,0,d6b72e00-018a-4fdc-b6a4-06dcecf89809,d6b72e00-018a-4fdc-b6a4-06dcecf89809,1,0,9f816562-57f0-473f-8c85-14f7521ffd7f,9f816562-57f0-473f-8c85-14f7521ffd7f,1,0,917b0acc-88fe-4afc-b19b-6da69e060393,917b0acc-88fe-4afc-b19b-6da69e060393,1,0,a091b76e-8ba4-4534-bbb0-9990e69b8603,a091b76e-8ba4-4534-bbb0-9990e69b8603,1,0,867ee5d2-7566-4052-a311-b56e7e46b90d,867ee5d2-7566-4052-a311-b56e7e46b90d,1,0,f82d5bd6-4c74-4c23-978c-565aae3d752a,f82d5bd6-4c74-4c23-978c-565aae3d752a,1,0,7fba41a5-4faa-412b-b367-b30ced0314c0,7fba41a5-4faa-412b-b367-b30ced0314c0,1,0,98422d20-9a71-40e4-966e-6958d44eaefb,98422d20-9a71-40e4-966e-6958d44eaefb,1,0,37333d0b-3589-4b8b-bf6c-e605e0287b66,37333d0b-3589-4b8b-bf6c-e605e0287b66,1,0,1813c469-da20-46a6-8947-6815b66f64c1,1813c469-da20-46a6-8947-6815b66f64c1,1,0,64e702e9-8934-4356-a1b2-be0e8b390630,64e702e9-8934-4356-a1b2-be0e8b390630,1,0,74880ac4-bdd3-48e6-82a0-a2103da42723,74880ac4-bdd3-48e6-82a0-a2103da42723,1,0,ad083c26-7461-4e94-b524-0174242fbd91,ad083c26-7461-4e94-b524-0174242fbd91,1,0,5ce39370-f918-493f-bb24-53346b6fd836,5ce39370-f918-493f-bb24-53346b6fd836,1,0,84f22fd2-e0d0-42ce-8628-1b13c021a4cb,84f22fd2-e0d0-42ce-8628-1b13c021a4cb,1,0,0e3d2750-bb4c-42b9-9829-60f1480ced9c,0e3d2750-bb4c-42b9-9829-60f1480ced9c,1,0,ddc6761c-a32a-41e1-b110-fdc39ad440d3,ddc6761c-a32a-41e1-b110-fdc39ad440d3,1,0,0b322ee2-b018-4d00-8f05-62ee16e519ff,0b322ee2-b018-4d00-8f05-62ee16e519ff,1,0,0866e282-055a-49bb-9aa5-b1af7c74c344,0866e282-055a-49bb-9aa5-b1af7c74c344,1,0,d1b6c5e8-7625-43aa-bb11-943c9bfa01b7,d1b6c5e8-7625-43aa-bb11-943c9bfa01b7,1,0,dad11c2e-08fc-4a6b-8829-8be6c64c15fc,dad11c2e-08fc-4a6b-8829-8be6c64c15fc,1,0,a76b1fd1-ba00-40e6-8756-f17fee449818,a76b1fd1-ba00-40e6-8756-f17fee449818,1,0,5c913626-48d1-4e0a-a423-64078ce59c7b,5c913626-48d1-4e0a-a423-64078ce59c7b,1,0,0a4e6b7a-b380-4547-bc3c-5d6895a5d19a,0a4e6b7a-b380-4547-bc3c-5d6895a5d19a,1,0,7b0ec304-1904-413e-a9c6-ff62e87107dd,7b0ec304-1904-413e-a9c6-ff62e87107dd,1,0,d4dd8c96-914d-496f-b735-ef85ec473605,d4dd8c96-914d-496f-b735-ef85ec473605,1,0,62517db4-59e6-4945-bcd6-b3f1845572bf,62517db4-59e6-4945-bcd6-b3f1845572bf,1,0,a6a9dd40-24cd-4d40-a12d-44f94f8c05a7,a6a9dd40-24cd-4d40-a12d-44f94f8c05a7,1,0,f0f72149-0e7f-441a-b70d-8f47d4977927,f0f72149-0e7f-441a-b70d-8f47d4977927,1,0,776efc3e-ac27-4550-bafd-6e91aa987af2,776efc3e-ac27-4550-bafd-6e91aa987af2,1,0,9f478c85-b72c-40ae-aa08-7ddf73b5b15c,9f478c85-b72c-40ae-aa08-7ddf73b5b15c,1,0,cc438366-85ea-48be-8b74-d05cddb1fc51,cc438366-85ea-48be-8b74-d05cddb1fc51,1,0,4688fd3b-4a92-4ed8-b111-0cf22a729b1c,4688fd3b-4a92-4ed8-b111-0cf22a729b1c,1,0,92029d1f-0472-4aaa-8fd6-9fb3c3cf414e,92029d1f-0472-4aaa-8fd6-9fb3c3cf414e,1,0,3271b800-1825-422f-97bb-757baf403e90,3271b800-1825-422f-97bb-757baf403e90,1,0,6fd6efc1-facc-4ece-a5b3-3dce6acca81d,6fd6efc1-facc-4ece-a5b3-3dce6acca81d,1,0,4ee82868-7a20-4c3a-91f9-42a6bf53ac37,4ee82868-7a20-4c3a-91f9-42a6bf53ac37,1,0,a040c756-4687-4bfd-a690-b122d3c490e5,a040c756-4687-4bfd-a690-b122d3c490e5,1,0,bd5940d5-13fd-4f59-bb6c-614f93f9c8e4,bd5940d5-13fd-4f59-bb6c-614f93f9c8e4,1,0,961a9801-3956-4ea0-b0d3-908f09bf4929,961a9801-3956-4ea0-b0d3-908f09bf4929,1,0,6fac5c14-e126-4342-9078-edf1d0efcbf2,6fac5c14-e126-4342-9078-edf1d0efcbf2,1,0,0a3325a1-21c4-4997-882f-4ac2edc175f0,0a3325a1-21c4-4997-882f-4ac2edc175f0,1,0,71102d3f-f020-4d6f-9582-9a7eefb4e797,71102d3f-f020-4d6f-9582-9a7eefb4e797,1,0,53ef6849-a3f3-4171-9167-f349f2d6a736,53ef6849-a3f3-4171-9167-f349f2d6a736,1,0,3f588bd3-d461-42b7-8ab1-386af6399d56,3f588bd3-d461-42b7-8ab1-386af6399d56,1,0,c04ff85e-b4af-4a9f-b0e9-c5c65e3d10a1,c04ff85e-b4af-4a9f-b0e9-c5c65e3d10a1,1,0,8c576405-29c1-46b1-ab2e-40e52c21cab0,8c576405-29c1-46b1-ab2e-40e52c21cab0,1,0,b33a89da-8589-4902-83fa-6545e5fce23e,b33a89da-8589-4902-83fa-6545e5fce23e,1,0,f0620d5a-e1fe-419f-af37-e0f462f97e8d,f0620d5a-e1fe-419f-af37-e0f462f97e8d,1,0,3e2f2ae1-c809-43fc-8276-b0a16a92858c,3e2f2ae1-c809-43fc-8276-b0a16a92858c,1,0,b58942ca-1367-4e1d-b5b4-7d973d0fecd8,b58942ca-1367-4e1d-b5b4-7d973d0fecd8,1,0,1a7c7427-bead-4655-9dd6-df6e722663c5,1a7c7427-bead-4655-9dd6-df6e722663c5,1,0,3ad08f4a-6202-4099-b6cc-bc116e6731a0,3ad08f4a-6202-4099-b6cc-bc116e6731a0,1,0,fd96c8ab-602a-4735-b168-52b501e80351,fd96c8ab-602a-4735-b168-52b501e80351,1,0,b1dc619d-8d91-4f7a-aa50-1d07ff9aebdc,b1dc619d-8d91-4f7a-aa50-1d07ff9aebdc,1,0,370f0c75-d2c5-4be5-a633-4bcc77998ece,370f0c75-d2c5-4be5-a633-4bcc77998ece,1,0,f80b505f-b4ff-45fb-bd88-74b274ae9d2b,f80b505f-b4ff-45fb-bd88-74b274ae9d2b,1,0,2139532c-f6cb-4393-936e-cc912e5adca9,2139532c-f6cb-4393-936e-cc912e5adca9,1,0,755c3eca-4956-4a44-9b38-c11dae00b87f,755c3eca-4956-4a44-9b38-c11dae00b87f,1,0,f57c558c-2c94-4b9d-8697-448d0548ab1a,f57c558c-2c94-4b9d-8697-448d0548ab1a,1,0,a310c09f-4d3a-4d3a-9ad5-7a5735a33a1d,a310c09f-4d3a-4d3a-9ad5-7a5735a33a1d,1,0,c32db021-eca1-4b67-aa85-3d6e28c51b53,c32db021-eca1-4b67-aa85-3d6e28c51b53,1,0,e9ed0ee4-3fbe-4093-9078-cb265ed6842c,e9ed0ee4-3fbe-4093-9078-cb265ed6842c,1,0,02466dcf-02a1-4853-814f-a913a9baba45,02466dcf-02a1-4853-814f-a913a9baba45,1,0,c4a40dc9-b619-4219-9d9a-e11f49a14fb1,c4a40dc9-b619-4219-9d9a-e11f49a14fb1,1,0,62b75eb2-42e1-4484-a77f-b676dd36f3d4,62b75eb2-42e1-4484-a77f-b676dd36f3d4,1,0,5e28e22a-dd6e-4703-92bd-13f5cb0dc023,5e28e22a-dd6e-4703-92bd-13f5cb0dc023,1,0,856510ee-74f5-44e9-a3c0-1c60cfb7a787,856510ee-74f5-44e9-a3c0-1c60cfb7a787,1,0,28b761c6-c286-4125-a4ed-da602e49950f,28b761c6-c286-4125-a4ed-da602e49950f,1,0,4ac66a22-c736-4e06-a8aa-ef4a71788c65,4ac66a22-c736-4e06-a8aa-ef4a71788c65,1,0,9cfe9281-8840-4077-824d-a2c9cbb0b730,9cfe9281-8840-4077-824d-a2c9cbb0b730,1,0,76389fa9-b9e0-492e-9c93-24b5f3bf094c,76389fa9-b9e0-492e-9c93-24b5f3bf094c,1,0,23e3de37-9315-45e6-bbfd-60aae28c25ae,23e3de37-9315-45e6-bbfd-60aae28c25ae,1,0,a9957f43-8b6f-4d98-a2d8-77b78047494c,a9957f43-8b6f-4d98-a2d8-77b78047494c,1,0,e470e15d-1b06-43cb-a9f9-ba489e2f596f,e470e15d-1b06-43cb-a9f9-ba489e2f596f,1,0,0408002c-9255-43a2-8022-82f02ee0e8f4,0408002c-9255-43a2-8022-82f02ee0e8f4,1,0,88f44c9b-216d-4d7e-bc88-1e6b253ed01e,88f44c9b-216d-4d7e-bc88-1e6b253ed01e,1,0,1851afd4-5324-45c1-b754-54e65943f945,1851afd4-5324-45c1-b754-54e65943f945,1,0,bc5eca9b-32d8-44e0-a127-8ad1f47d7957,bc5eca9b-32d8-44e0-a127-8ad1f47d7957,1,0,6e5307ea-8fbf-4177-bcc8-f163a6ce1b40,6e5307ea-8fbf-4177-bcc8-f163a6ce1b40,1,0,0fa77ef7-a836-4459-9bca-6010d0bdfc7f,0fa77ef7-a836-4459-9bca-6010d0bdfc7f,1,0,c322dc4a-30f3-4d23-9824-4a01c496408d,c322dc4a-30f3-4d23-9824-4a01c496408d,1,0,dcff004c-1b61-4a19-b977-ea21bf688614,dcff004c-1b61-4a19-b977-ea21bf688614,0,0,0,1,0,0,0,1,0,1,0,1,1,1,1} \ No newline at end of file diff --git a/SSL/src/Constants/ВыполнятьЗамерыПроизводительности/ValueManagerModule.bsl b/SSL/src/Constants/ВыполнятьЗамерыПроизводительности/ValueManagerModule.bsl index 5c2e46b1a..0aeb57889 100644 --- a/SSL/src/Constants/ВыполнятьЗамерыПроизводительности/ValueManagerModule.bsl +++ b/SSL/src/Constants/ВыполнятьЗамерыПроизводительности/ValueManagerModule.bsl @@ -11,7 +11,7 @@ РегЗадание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ОчисткаЗамеровВремени); Если РегЗадание <> Неопределено Тогда - РегЗадание.Использование = ЭтотОбъект.Значение; + РегЗадание.Использование = Значение; РегЗадание.Записать(); КонецЕсли; diff --git a/SSL/src/Constants/ИспользоватьВнешнихПользователей/ValueManagerModule.bsl b/SSL/src/Constants/ИспользоватьВнешнихПользователей/ValueManagerModule.bsl index cbf609a05..b5a21ba35 100644 --- a/SSL/src/Constants/ИспользоватьВнешнихПользователей/ValueManagerModule.bsl +++ b/SSL/src/Constants/ИспользоватьВнешнихПользователей/ValueManagerModule.bsl @@ -35,6 +35,12 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); МодульУправлениеДоступом.ОбновитьРолиПользователей(Тип("СправочникСсылка.ВнешниеПользователи")); + + МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); + ПараметрыПланирования = МодульУправлениеДоступомСлужебный.ПараметрыПланированияОбновленияДоступа(); + ПараметрыПланирования.ДляПользователей = Ложь; + ПараметрыПланирования.ДляВнешнихПользователей = Истина; + МодульУправлениеДоступомСлужебный.ЗапланироватьОбновлениеДоступа(, ПараметрыПланирования); КонецЕсли; Если Значение Тогда ОчиститьРеквизитПоказыватьВСпискеВыбораУВсехПользователейИБ(); diff --git a/SSL/src/Constants/ИспользоватьДатуИВремяВСрокахЗадач/ValueManagerModule.bsl b/SSL/src/Constants/ИспользоватьДатуИВремяВСрокахЗадач/ValueManagerModule.bsl index 833610389..d127a4958 100644 --- a/SSL/src/Constants/ИспользоватьДатуИВремяВСрокахЗадач/ValueManagerModule.bsl +++ b/SSL/src/Constants/ИспользоватьДатуИВремяВСрокахЗадач/ValueManagerModule.bsl @@ -17,7 +17,7 @@ Если СписокЗаданий.Количество() = 0 Тогда ПараметрыЗадания = Новый Структура("Использование", Использование); ПараметрыЗадания.Вставить("Метаданные", Метаданные.РегламентныеЗадания.СтартОтложенныхПроцессов); - УстановитьРасписание(ЭтотОбъект.Значение, ПараметрыЗадания); + УстановитьРасписание(Значение, ПараметрыЗадания); РегламентныеЗаданияСервер.ДобавитьЗадание(ПараметрыЗадания); Возврат; КонецЕсли; @@ -26,15 +26,15 @@ ПараметрыЗадания = Новый Структура("Использование", Использование); Если Использование Тогда - Если ЭтотОбъект.Значение Тогда + Если Значение Тогда Если Задание.Расписание.ВремяНачала = Дата("00010101070000") ИЛИ Задание.Расписание.ВремяНачала = Дата("00010101000000") Тогда - УстановитьРасписание(ЭтотОбъект.Значение, ПараметрыЗадания); + УстановитьРасписание(Значение, ПараметрыЗадания); КонецЕсли; Иначе Если Задание.Расписание.ПериодПовтораВТечениеДня = 900 ИЛИ Задание.Расписание.ВремяНачала = Дата("00010101000000") Тогда - УстановитьРасписание(ЭтотОбъект.Значение, ПараметрыЗадания); + УстановитьРасписание(Значение, ПараметрыЗадания); КонецЕсли; КонецЕсли; КонецЕсли; diff --git a/SSL/src/Constants/ИспользоватьШаблоныСообщений/ValueManagerModule.bsl b/SSL/src/Constants/ИспользоватьШаблоныСообщений/ValueManagerModule.bsl index 497d56343..5a3c7cb87 100644 --- a/SSL/src/Constants/ИспользоватьШаблоныСообщений/ValueManagerModule.bsl +++ b/SSL/src/Constants/ИспользоватьШаблоныСообщений/ValueManagerModule.bsl @@ -8,7 +8,7 @@ Возврат; КонецЕсли; - Если ЭтотОбъект.Значение Тогда + Если Значение Тогда ДоступнаОтправкаSMS = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОтправкаSMS"); ДоступнаРаботаСПочтовымиСообщениями = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями"); Иначе diff --git a/SSL/src/Constants/КоличествоПотоковОбновленияДоступа/КоличествоПотоковОбновленияДоступа.mdo b/SSL/src/Constants/КоличествоПотоковОбновленияДоступа/КоличествоПотоковОбновленияДоступа.mdo new file mode 100644 index 000000000..2c27c6a3c --- /dev/null +++ b/SSL/src/Constants/КоличествоПотоковОбновленияДоступа/КоличествоПотоковОбновленияДоступа.mdo @@ -0,0 +1,30 @@ + + + + + + + + КоличествоПотоковОбновленияДоступа + + ru + Количество потоков обновления доступа + + + Number + + 5 + true + + + + ru + Максимальное количество фоновых заданий, которые можно запустить параллельно при обновлении доступа. +Рекомендуется делать их не более чем Количество логических процессоров * 2. + + + 0 + + + Managed + diff --git a/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписей/ValueManagerModule.bsl b/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписей/ValueManagerModule.bsl index bdab594fd..e94ac6909 100644 --- a/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписей/ValueManagerModule.bsl +++ b/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписей/ValueManagerModule.bsl @@ -33,9 +33,15 @@ КонецЕсли; Если ОграничениеДоступаНаУровнеЗаписейИзменено Тогда - УправлениеДоступомСлужебный.ПриИзмененииОграниченияДоступаНаУровнеЗаписей( ОграничениеДоступаНаУровнеЗаписейВключено); + + Если ОграничениеДоступаНаУровнеЗаписейВключено + И Константы.ОграничиватьДоступНаУровнеЗаписейУниверсально.Получить() Тогда + + УправлениеДоступомСлужебный.ЗапланироватьОбновлениеДоступа(); + УправлениеДоступомСлужебный.УстановитьОбновлениеДоступа(Истина); + КонецЕсли; КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписейУниверсально/ValueManagerModule.bsl b/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписейУниверсально/ValueManagerModule.bsl new file mode 100644 index 000000000..366610a80 --- /dev/null +++ b/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписейУниверсально/ValueManagerModule.bsl @@ -0,0 +1,60 @@ + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОписаниеПеременных + +Перем СтароеЗначение; + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПередЗаписью(Отказ) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + СтароеЗначение = Константы.ОграничиватьДоступНаУровнеЗаписейУниверсально.Получить(); + +КонецПроцедуры + +Процедура ПриЗаписи(Отказ) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Если Значение <> СтароеЗначение Тогда // Изменено. + // Обновление параметров сеанса. + // Требуется для того, чтобы администратор не выполнял перезапуск. + УстановленныеПараметры = Новый Массив; + УправлениеДоступомСлужебный.УстановкаПараметровСеанса("", УстановленныеПараметры); + КонецЕсли; + + Если Значение И Не СтароеЗначение Тогда // Включено. + Если Не Константы.ОграничиватьДоступНаУровнеЗаписей.Получить() Тогда + ТекстОшибки = + НСтр("ru = 'Чтобы включить константу ""Ограничивать доступ на уровне записей универсально"" + |сначала нужно включить константу ""Ограничивать доступ на уровне записей"".'"); + ВызватьИсключение ТекстОшибки; + КонецЕсли; + МенеджерЗначения = Константы.ПоследнееОбновлениеДоступа.СоздатьМенеджерЗначения(); + МенеджерЗначения.Значение = Новый ХранилищеЗначения(Неопределено); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(МенеджерЗначения); + НаборЗаписей = РегистрыСведений.ПараметрыОграниченияДоступа.СоздатьНаборЗаписей(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборЗаписей); + + УправлениеДоступомСлужебный.ЗапланироватьОбновлениеДоступа(); + УправлениеДоступомСлужебный.УстановитьОбновлениеДоступа(Истина); + КонецЕсли; + + Если Не Значение И СтароеЗначение Тогда // Выключено. + УправлениеДоступомСлужебный.ВключитьЗаполнениеДанныхДляОграниченияДоступа(); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписейУниверсально/ОграничиватьДоступНаУровнеЗаписейУниверсально.mdo b/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписейУниверсально/ОграничиватьДоступНаУровнеЗаписейУниверсально.mdo new file mode 100644 index 000000000..61614b15a --- /dev/null +++ b/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписейУниверсально/ОграничиватьДоступНаУровнеЗаписейУниверсально.mdo @@ -0,0 +1,23 @@ + + + + + + + + ОграничиватьДоступНаУровнеЗаписейУниверсально + + ru + Ограничивать доступ на уровне записей универсально + + + Boolean + + + ru + Переключает механизм ограничения ограничения на уровне записей из режима стандартного ограничения в режим универсального ограничения (высокая производительность). + + + + Managed + diff --git a/SSL/src/Constants/ПоследнееОбновлениеДоступа/ПоследнееОбновлениеДоступа.mdo b/SSL/src/Constants/ПоследнееОбновлениеДоступа/ПоследнееОбновлениеДоступа.mdo new file mode 100644 index 000000000..75a8ab620 --- /dev/null +++ b/SSL/src/Constants/ПоследнееОбновлениеДоступа/ПоследнееОбновлениеДоступа.mdo @@ -0,0 +1,19 @@ + + + + + + + + ПоследнееОбновлениеДоступа + + ru + Последнее обновление доступа + + + ValueStorage + + + + Managed + diff --git a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Form.form b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Form.form index 42fcd041b..99d9fd3d4 100644 --- a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Form.form @@ -108,6 +108,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -256,6 +257,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true diff --git a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl index a1a296569..acf452e84 100644 --- a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl @@ -3,6 +3,7 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; @@ -84,7 +85,7 @@ ПрогнозируемоеВремяНачалаИзвлечения = ОбщегоНазначенияКлиент.ДатаСеанса(); ПодключитьОбработчикОжидания("ИзвлечениеТекстовКлиентОбработчик", ИнтервалВремениВыполнения); -#Если НЕ ВебКлиент Тогда +#Если НЕ ВебКлиент И НЕ МобильныйКлиент Тогда ИзвлечениеТекстовКлиентОбработчик(); #КонецЕсли @@ -101,7 +102,7 @@ &НаКлиенте Процедура ИзвлечьВсе(Команда) - #Если НЕ ВебКлиент Тогда + #Если НЕ ВебКлиент И НЕ МобильныйКлиент Тогда КоличествоФайловСНеизвлеченнымТекстомДоНачалаОперации = КоличествоФайловСНеизвлеченнымТекстом; Статус = ""; РазмерПорции = 0; // извлечь все @@ -279,13 +280,13 @@ &НаКлиенте Процедура ИзвлечениеТекстовКлиентОбработчик() -#Если НЕ ВебКлиент Тогда +#Если НЕ ВебКлиент И НЕ МобильныйКлиент Тогда ИзвлечениеТекстовКлиент(); #КонецЕсли КонецПроцедуры -#Если НЕ ВебКлиент Тогда +#Если НЕ ВебКлиент И НЕ МобильныйКлиент Тогда // Извлекает текст из файлов на диске на клиенте. &НаКлиенте Процедура ИзвлечениеТекстовКлиент(РазмерПорции = Неопределено) @@ -395,7 +396,7 @@ ПолучитьВсеФайлы = (КоличествоФайловВПорции = 0); Запрос = Новый Запрос; - Запрос.Текст = РаботаСФайламиСлужебныйВызовСервера.ТекстЗапросаДляИзвлеченияТекста(ПолучитьВсеФайлы, Истина); + Запрос.Текст = РаботаСФайламиСлужебный.ТекстЗапросаДляИзвлеченияТекста(ПолучитьВсеФайлы, Истина); Выгрузка = Запрос.Выполнить().Выгрузить(); diff --git a/SSL/src/DataProcessors/АктивныеПользователи/Forms/АктивныеПользователи/Form.form b/SSL/src/DataProcessors/АктивныеПользователи/Forms/АктивныеПользователи/Form.form index 54ce7e3bb..20d4c47e8 100644 --- a/SSL/src/DataProcessors/АктивныеПользователи/Forms/АктивныеПользователи/Form.form +++ b/SSL/src/DataProcessors/АктивныеПользователи/Forms/АктивныеПользователи/Form.form @@ -88,6 +88,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/БлокировкаСоединенийСИнформационнойБазой/Form.form b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/БлокировкаСоединенийСИнформационнойБазой/Form.form index 566160337..0b815a997 100644 --- a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/БлокировкаСоединенийСИнформационнойБазой/Form.form +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/БлокировкаСоединенийСИнформационнойБазой/Form.form @@ -92,6 +92,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -317,6 +318,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -782,6 +784,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -841,6 +844,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/ОшибкаУстановкиМонопольногоРежима/Form.form b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/ОшибкаУстановкиМонопольногоРежима/Form.form index d3ed44b33..dff55bc3a 100644 --- a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/ОшибкаУстановкиМонопольногоРежима/Form.form +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/ОшибкаУстановкиМонопольногоРежима/Form.form @@ -235,6 +235,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -433,6 +434,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/ObjectModule.bsl b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/ObjectModule.bsl index 06771c519..5e79b1f64 100644 --- a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/ObjectModule.bsl +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/ObjectModule.bsl @@ -27,17 +27,18 @@ Если Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда ТекущийРежим = ПолучитьБлокировкуСеансов(); КодДляРазблокировки = ТекущийРежим.КодРазрешения; - Иначе + Иначе ТекущийРежим = СоединенияИБ.ПолучитьБлокировкуСеансовОбластиДанных(); КонецЕсли; - ЗапретитьРаботуПользователей = ТекущийРежим.Установлена; + ЗапретитьРаботуПользователей = ТекущийРежим.Установлена + И (Не ЗначениеЗаполнено(ТекущийРежим.Конец) Или ТекущаяДатаСеанса() < ТекущийРежим.Конец); СообщениеДляПользователей = СоединенияИБКлиентСервер.ИзвлечьСообщениеБлокировки(ТекущийРежим.Сообщение); Если ЗапретитьРаботуПользователей Тогда НачалоДействияБлокировки = ТекущийРежим.Начало; ОкончаниеДействияБлокировки = ТекущийРежим.Конец; - Иначе + Иначе // Если блокировка не установлена, можно предположить, что // пользователь открыл форму для установки блокировки. // Поэтому устанавливаем дату блокировки равной текущей дате. diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Form.form b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Form.form index 675000352..c7934bc1e 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Form.form +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Form.form @@ -4,537 +4,29 @@ ru Адрес - - ГруппаИсторическийАдрес - 340 - - ИсторическийАдрес - 342 - true - true - - true - - - ИсторическийАдрес - - None - - ИсторическийАдресРасширеннаяПодсказка - 344 - Label - true - true - - Left - - - - ИсторическийАдресКонтекстноеМеню - 343 - true - - LabelField - Enter - true - Left - true - - true - true - - Style.ToolTipBackColor - - - - true - - true - - - <key>ru</key> - <value>Исторический адрес</value> - - - ГруппаИсторическийАдресРасширеннаяПодсказка - 341 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - СтранаАдреса - 35 - - ГруппаСтраны - 9 - - Страна - 10 - true - true - - true - - - Страна - - - ru - Страна адреса - - - OnChange - СтранаПриИзменении - - - СтранаExtendedTooltip - 107 - Label - true - true - - Left - - - - СтранаКонтекстноеМеню - 11 - true - - InputField - Left - Enter - true - Left - true - - - AutoComplete - СтранаАвтоПодбор - - - Clearing - СтранаОчистка - - - TextEditEnd - СтранаОкончаниеВводаТекста - - - ChoiceProcessing - СтранаОбработкаВыбора - - 15 - true - true - true - false - true - ShowInInputField - false - false - false - false - true - true - - ТолькоДанныеКлассификатора - - - true - - - - - РазрешитьДанныеКлассификатора - - - true - - - - - Style.ФонУправляющегоПоля - - Normal - DontUse - - - - КодСтраны - 103 - true - false - - true - - - КодСтраны - - None - - КодСтраныExtendedTooltip - 108 - Label - true - true - - Left - - - - КодСтраныКонтекстноеМеню - 104 - true - - LabelField - Enter - true - Left - true - - 3 - true - true - false - - System.DefaultGUIFont - true - false - false - false - - - - true - true - - true - - - <key>ru</key> - <value>Страна</value> - - - ГруппаСтраныExtendedTooltip - 106 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страна адреса</value> - - - СтранаАдресаExtendedTooltip - 105 - Label - true - true - - Left - - - UsualGroup - - Auto - NormalSeparation - true - true - Auto - Auto - - - - АдресПредставлениеКомментарий - 225 - - АдресСтраницаПредставление - 227 - - ПредставлениеАдреса - 21 - true - true - - true - - - ПредставлениеАдреса - - None - - OnChange - ПредставлениеИностранногоАдресаПриИзменении - - - ПредставлениеАдресаРасширеннаяПодсказка - 132 - Label - true - true - - Left - - - - ПредставлениеАдресаКонтекстноеМеню - 22 - true - - InputField - Enter - true - Left - true - - 7 - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Адрес</value> - - - АдресСтраницаПредставлениеРасширеннаяПодсказка - 228 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - АдресСтраницаКомментарий - 229 - - Комментарий - 5 - true - true - - true - - - Комментарий - - None - - ru - Дополнительный комментарий, не включаемый в представление адреса - - - OnChange - КомментарийПриИзменении - - - КомментарийExtendedTooltip - 135 - Label - true - true - - Left - - - - КомментарийКонтекстноеМеню - 6 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Комментарий</value> - - - АдресСтраницаКомментарийРасширеннаяПодсказка - 230 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - true - true - - true - - - <key>ru</key> - <value>Адрес представление комментарий</value> - - - АдресПредставлениеКомментарийРасширеннаяПодсказка - 226 - Label - true - true - - Left - - - Pages - - TabsOnTop - Auto - - ПанельКоманд 82 - ПанельКомандФормы - 83 - - ФормаКомандаОК - 56 - true - true - - true - - - ФормаКомандаОКExtendedTooltip - 140 - Label - true - true - - Left - - - Form.Command.КомандаОК - Auto - true - true - true - UserCmds - Auto - - - ФормаОтмена - 57 - true - true - - true - - - ФормаОтменаExtendedTooltip - 141 - Label - true - true - - Left - - - Form.Command.КомандаОтмена - Normal - Auto - true - true - UserCmds - Auto - + ГруппаПроверитьЗаполнения + 86 - ФормаВсеДействия - 231 + ГруппаКомандаДобавить + 167 - ФормаВводАдресаВСвободнойФормеВсеДействия - 233 + ГруппаГруппаДобавлениеКомментария + 406 - ПоказатьИсториюВсеДействия - 324 + ДобавитьКомментарий + 386 true true true - ПоказатьИсториюВсеДействияРасширеннаяПодсказка - 325 + ДобавитьКомментарийРасширеннаяПодсказка + 387 Label true true @@ -542,7 +34,7 @@ Left - Form.Command.ИсторияИзменений + Form.Command.ДобавитьКомментарий Normal Auto true @@ -550,86 +42,6 @@ UserCmds Auto - - ПоказатьАдресНаВсеДействия - 334 - - АдресНаЯндексКарты - 336 - true - true - - true - - - АдресНаЯндексКартыРасширеннаяПодсказка - 337 - Label - true - true - - Left - - - Form.Command.АдресНаЯндексКарты - Normal - Auto - true - true - UserCmds - Auto - - - АдресНаGoogleMaps - 338 - true - true - - true - - - АдресНаGoogleMapsРасширеннаяПодсказка - 339 - Label - true - true - - Left - - - Form.Command.АдресНаGoogleMaps - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Показать адрес на</value> - - - ПоказатьАдресНаВсеДействияРасширеннаяПодсказка - 335 - Label - true - true - - Left - - - Popup - - Auto - Normal - - true true @@ -637,140 +49,11 @@ <key>ru</key> - <value>Форма ввод адреса в свободной форме</value> + <value>Группа добавление комментария</value> - ФормаВводАдресаВСвободнойФормеВсеДействияРасширеннаяПодсказка - 234 - Label - true - true - - Left - - - - - - ФормаИзмененияАдресаВсеДействия - 237 - - ФормаОчиститьАдресВсеДействия - 241 - true - true - - true - - - ФормаОчиститьАдресВсеДействияРасширеннаяПодсказка - 242 - Label - true - true - - Left - - - Form.Command.ОчиститьАдрес - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Форма изменения адреса все действия</value> - - - ФормаИзмененияАдресаВсеДействияРасширеннаяПодсказка - 238 - Label - true - true - - Left - - - - - - ФормаСтандартныеДействия - 243 - - ИзменитьФормуВсеДействия - 245 - true - true - - true - - - ИзменитьФормуВсеДействияРасширеннаяПодсказка - 246 - Label - true - true - - Left - - - Form.StandardCommand.CustomizeForm - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - СправкаВсеДействия - 247 - true - true - - true - - - СправкаВсеДействияРасширеннаяПодсказка - 248 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Форма стандартные действия</value> - - - ФормаСтандартныеДействияExtendedTooltip - 244 + ГруппаГруппаДобавлениеКомментарияРасширеннаяПодсказка + 407 Label true true @@ -787,11 +70,11 @@ <key>ru</key> - <value>Все действия</value> + <value>Добавить</value> - ФормаВсеДействияExtendedTooltip - 232 + ГруппаКомандаДобавитьРасширеннаяПодсказка + 168 Label true true @@ -802,12 +85,40 @@ Popup - CommonPicture.Подменю + StdPicture.CreateListItem - Picture + Auto Normal + true + true + + true + + + <key>ru</key> + <value>Проверить заполнения</value> + + true + + ГруппаПроверитьЗаполненияРасширеннаяПодсказка + 137 + Label + true + true + + Left + + + CommandBar + + Left + + + + ПанельКомандФормы + 83 ФормаВводАдресаПоказать 101 @@ -838,60 +149,6 @@ Auto InAdditionalSubmenu - - АдресНаКартеЯндексКартах - 328 - true - true - - true - - - АдресНаКартеЯндексКартахРасширеннаяПодсказка - 329 - Label - true - true - - Left - - - Form.Command.АдресНаЯндексКарты - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ПоказатьНаКартеGoogle - 330 - true - true - - true - - - ПоказатьНаКартеGoogleРасширеннаяПодсказка - 331 - Label - true - true - - Left - - - Form.Command.АдресНаGoogleMaps - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - true true @@ -916,17 +173,48 @@ ФормаВсеДействияИзмененияАдреса 152 - - ФормаОчиститьАдрес - 90 + + ГруппаДействияСАдресом + 458 + + ФормаОчиститьАдрес + 90 + true + true + + true + + + ФормаОчиститьАдресExtendedTooltip + 143 + Label + true + true + + Left + + + Form.Command.ОчиститьАдрес + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + true true true + + <key>ru</key> + <value>Действия с адресом</value> + - ФормаОчиститьАдресExtendedTooltip - 143 + ГруппаДействияСАдресомРасширеннаяПодсказка + 459 Label true true @@ -934,14 +222,7 @@ Left - Form.Command.ОчиститьАдрес - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu + true true @@ -973,7 +254,7 @@ true - ИзменитьФормуExtendedTooltip + ИзменитьФормуРасширеннаяПодсказка 147 Label true @@ -1016,6 +297,7 @@ true UserCmds Auto + InAdditionalSubmenu true true @@ -1069,6 +351,747 @@ Auto + + ГруппаИсторическийАдрес + 358 + + ТекстАдресНаДату + 360 + + <key>ru</key> + <value>Адрес на</value> + + true + true + + true + + + ТекстАдресНаДатуРасширеннаяПодсказка + 362 + Label + true + true + + Left + + + + ТекстАдресНаДатуКонтекстноеМеню + 361 + true + + Label + true + true + + Left + + + + АдресНаДату + 363 + true + true + + true + + + АдресНаДату + + None + + OnChange + АдресНаДатуПриИзменении + + + АдресНаДатуРасширеннаяПодсказка + 365 + Label + true + true + + Left + + + + АдресНаДатуКонтекстноеМеню + 364 + true + + InputField + Enter + true + Left + true + + + AutoComplete + АдресНаДатуАвтоПодбор + + 10 + true + true + true + true + true + true + Normal + + + + ТекстПроДатуДействия + 366 + + <key>ru</key> + <value>действует по настоящие время.</value> + + true + true + + true + + + ТекстПроДатуДействияРасширеннаяПодсказка + 368 + Label + true + true + + Left + + + + ТекстПроДатуДействияКонтекстноеМеню + 367 + true + + Label + true + true + + Left + + + + ИсторияИзмененийГиперссылка + 369 + + <key>ru</key> + <value>История изменений</value> + + true + true + + true + + + ИсторияИзмененийГиперссылкаРасширеннаяПодсказка + 370 + Label + true + true + + Left + + + Hyperlink + Form.Command.ИсторияИзменений + Normal + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Дата действия адреса</value> + + 2 + + ГруппаИсторическийАдресРасширеннаяПодсказка + 359 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ОсновныеСтраницы + 482 + + СтраницаАдрес + 484 + + АдресПредставлениеКомментарий + 225 + + ВСвободнойФорме + 3 + + ГруппаСтранаСвободнаяФорма + 468 + + ГруппаСтранаСвободнаяФормаЗначение + 472 + + СтранаВСвободнойФорме + 488 + + <key>ru</key> + <value>Страна</value> + + true + true + + true + + + Страна + + + ru + Страна адреса + + + OnChange + СтранаПриИзменении + + + СтранаВСвободнойФормеРасширеннаяПодсказка + 490 + Label + true + true + + Left + + + + СтранаВСвободнойФормеКонтекстноеМеню + 489 + true + + InputField + Left + Enter + true + Left + true + + + AutoComplete + СтранаАвтоПодбор + + + Clearing + СтранаОчистка + + + TextEditEnd + СтранаОкончаниеВводаТекста + + + ChoiceProcessing + СтранаОбработкаВыбора + + 60 + true + 60 + true + true + false + true + ShowInInputField + false + false + false + false + true + true + + ТолькоДанныеКлассификатора + + + true + + + + + РазрешитьДанныеКлассификатора + + + true + + + + Normal + + ru + Введите первые буквы названия страны + + DontUse + + + true + true + + true + + + <key>ru</key> + <value>Страна свободная форма значение</value> + + + ГруппаСтранаСвободнаяФормаЗначениеРасширеннаяПодсказка + 473 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страна свободная форма</value> + + + ГруппаСтранаСвободнаяФормаРасширеннаяПодсказка + 469 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + + + + ПредставлениеИностранногоАдреса + 21 + true + true + + true + + + ПредставлениеАдреса + + None + + OnChange + ПредставлениеИностранногоАдресаПриИзменении + + + ПредставлениеИностранногоАдресаExtendedTooltip + 132 + Label + true + true + + Left + + + + ПредставлениеИностранногоАдресаКонтекстноеМеню + 22 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>В свободной форме</value> + + + ВСвободнойФормеРасширеннаяПодсказка + 131 + Label + true + true + + Left + + + Page + + Vertical + false + + + true + true + + true + + + <key>ru</key> + <value>Адрес представление комментарий</value> + + + АдресПредставлениеКомментарийРасширеннаяПодсказка + 226 + Label + true + true + + Left + + + Pages + + Auto + + + true + true + + true + + + <key>ru</key> + <value>Адрес</value> + + + СтраницаАдресРасширеннаяПодсказка + 485 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаКомментарий + 414 + + Комментарий + 373 + true + true + + true + + + Комментарий + + None + + OnChange + КомментарийПриИзменении + + + КомментарийРасширеннаяПодсказка + 375 + Label + true + true + + Left + + + + КомментарийКонтекстноеМеню + 374 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Комментарий</value> + + + Style.ПоясняющийТекст + + + СтраницаКомментарийРасширеннаяПодсказка + 415 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Основные страницы</value> + + + ОсновныеСтраницыРасширеннаяПодсказка + 483 + Label + true + true + + Left + + + Pages + + TabsOnTop + Auto + + + + ГруппаПанельНиз + 491 + + ТипАдреса + 496 + + Style.ПоясняющийТекст + + true + + true + + + ФорматАдреса + + None + Button + + ТипАдресаРасширеннаяПодсказка + 498 + + <key>ru</key> + <value>Адреса могут быть введены в следующих форматах: + • в историческом формате – по административно-территориальному делению; + • по муниципальному делению с учетом требований Федерального закона от 06.10.1999 № 131-ФЗ «Об общих принципах организации местного самоуправления в Российской Федерации». +</value> + + true + Label + true + true + + Left + + + + ТипАдресаКонтекстноеМеню + 497 + true + + LabelField + Enter + true + Left + true + + true + true + false + + Style.ПоясняющийТекст + + + + + ГруппаОКОтмена + 371 + + ФормаКомандаОК + 56 + true + true + + true + + + ФормаКомандаОКExtendedTooltip + 140 + Label + true + true + + Left + + + Form.Command.КомандаОК + Auto + true + true + true + UserCmds + Auto + + + ФормаОтмена + 57 + true + true + + true + + + ФормаОтменаExtendedTooltip + 141 + Label + true + true + + Left + + + Form.Command.КомандаОтмена + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>ОК отмена</value> + + + ГруппаОКОтменаРасширеннаяПодсказка + 372 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Панель низ</value> + + + ГруппаПанельНизРасширеннаяПодсказка + 492 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + None false @@ -1088,6 +1111,7 @@ OnCreateAtServer ПриСозданииНаСервере + 60 LockOwner Use UseList @@ -1165,7 +1189,7 @@ String - 20 + 6 @@ -1176,6 +1200,44 @@ true + + НаселенныйПункт + + <key>ru</key> + <value>Город, населенный пункт</value> + + 5 + + String + + + + true + + + true + + true + + + Улица + + <key>ru</key> + <value>Улица</value> + + 6 + + String + + + + true + + + true + + true + Объект @@ -1184,7 +1246,8 @@ 7 - DataProcessorObject.ВводКонтактнойИнформации + String + true @@ -1194,6 +1257,42 @@
      true
      + + ИдентификаторНаселенногоПункта + + <key>ru</key> + <value>Идентификатор населенного пункта</value> + + 9 + + UUID + + + true + + + true + + + + ТипДома + + <key>ru</key> + <value>Тип дома</value> + + 11 + + String + + + + true + + + true + + true + Дом @@ -1213,6 +1312,82 @@ </edit> <savedData>true</savedData> </attributes> + <attributes> + <name>ТипСтроения</name> + <title> + <key>ru</key> + <value>Тип строения</value> + + 13 + + String + + + + true + + + true + + true + + + Строение + + <key>ru</key> + <value>Строение</value> + + 14 + + String + + + + true + + + true + + true + + + ТипПомещения + + <key>ru</key> + <value>Тип помещения</value> + + 15 + + String + + + + true + + + true + + true + + + Помещение + + <key>ru</key> + <value>Помещение</value> + + 16 + + String + + + + true + + + true + + true + ОсновнаяСтрана @@ -1230,6 +1405,131 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>ДополнительныеСтроенияИПомещения</name> + <title> + <key>ru</key> + <value>Дополнительные строения и помещения</value> + + 19 + + ValueTable + + + true + + + true + + + Тип + + <key>ru</key> + <value>Тип</value> + + 1 + + String + + + + 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 + + String + + 30 + + + + true + + + true + + + + Идентификатор + + <key>ru</key> + <value>Идентификатор</value> + + 5 + + Number + + 10 + + + + true + + + true + + + + + НаселенныйПунктДетально + + <key>ru</key> + <value>Населенный пункт детально</value> + + 21 + + + true + + + true + + ВидКонтактнойИнформации @@ -1297,6 +1597,19 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>ЕстьПравоЗагружатьКлассификатор</name> + <id>29</id> + <valueType> + <types>Boolean</types> + </valueType> + <view> + <common>true</common> + </view> + <edit> + <common>true</common> + </edit> + </attributes> <attributes> <name>АвтоЦвет</name> <title> @@ -1314,6 +1627,23 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>РазрешитьВводАдресаВСвободнойФорме</name> + <title> + <key>ru</key> + <value>Разрешить ввод адреса в свободной форме</value> + + 24 + + Boolean + + + true + + + true + + ЦветФонаФормы @@ -1436,6 +1766,40 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>ЕстьКлассификатор</name> + <title> + <key>ru</key> + <value>Есть классификатор</value> + + 40 + + Boolean + + + true + + + true + + + + ИдентификаторУлицы + + <key>ru</key> + <value>Идентификатор улицы</value> + + 10 + + UUID + + + true + + + true + + АдресИзменен @@ -1507,6 +1871,44 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>ПодборПоИндексуДоступен</name> + <title> + <key>ru</key> + <value>Подбор по индексу доступен</value> + + 43 + + Boolean + + + true + + + true + + + + ОКТМО + + <key>ru</key> + <value>ОКТМО</value> + + 44 + + String + + 11 + + + + true + + + true + + true + ИсторическийАдрес @@ -1719,6 +2121,133 @@ <common>true</common> </edit> </columns> + <columns> + <name>Значение</name> + <title> + <key>ru</key> + <value>Значение</value> + + 10 + + String + + + + true + + + true + + + + + ЭтоВебСервис + + <key>ru</key> + <value>Это веб сервис</value> + + 48 + + Boolean + + + true + + + true + + + + АдресНаДату + + <key>ru</key> + <value>Адрес на дату</value> + + 49 + + Date + + Date + + + + true + + + true + + + + ВводНовогоАдреса + + <key>ru</key> + <value>Ввод нового адреса</value> + + 50 + + Boolean + + + true + + + true + + + + АдресДействуетС + + <key>ru</key> + <value>Адрес действует С</value> + + 51 + + Date + + Date + + + + true + + + true + + + + ЭтоСтранаУчастникЕАЭС + + <key>ru</key> + <value>Это страна участник ЕАЭС</value> + + 52 + + Boolean + + + true + + + true + + + + ФорматАдреса + + <key>ru</key> + <value>Формат адреса</value> + + 53 + + String + + + + true + + + true + КомандаОК @@ -1797,16 +2326,9 @@ История изменений... 10 - - ru - История изменений - true - - CommonPicture.ИсторияИзменений - ИсторияИзменений @@ -1816,50 +2338,22 @@ Auto - АдресНаЯндексКарты + ДобавитьКомментарий <key>ru</key> - <value>Адрес на Яндекс.Картах</value> + <value>Комментарий</value> - 11 + 27 ru - Адрес на яндекс карты + Добавить комментарий true - - CommonPicture.ЯндексКарты - - АдресНаЯндексКарты - - - DontUse - Auto - - - АдресНаGoogleMaps - - <key>ru</key> - <value>Адрес на Google Maps</value> - - 12 - - ru - Адрес на google maps - - - true - - - CommonPicture.GoogleMaps - - - - АдресНаGoogleMaps + ДобавитьКомментарий DontUse @@ -1893,9 +2387,17 @@ Комментарий + + ДействуетС + + Date + + Date + + + - diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Help/ru.html b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Help/ru.html index 1de650115..fc7c46177 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Help/ru.html +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Help/ru.html @@ -2,13 +2,58 @@ TEXT-INDENT: 3em } -

      Предназначена для ввода адреса.

      -

      История изменений

      +

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

      +

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

      +

      Автоподбор российского адреса

      +
      • Предусмотрен автоподбор всего адреса при вводе (только при использовании веб-сервиса. Наберите в поле Город, населенный пункт поисковое слово или его часть. +
      • Обратите внимание на цветовое различие адресов: +
        • по муниципальному делению - стандартный цвет текста; +
        • по административно-территориальному делению - серый цвет.

      Ввод адреса

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

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

      +
      • Для ввода адреса "Санкт-Петербург, Пискаревский проспект, дом 2, корпус 2, литера Щ, офис 12345" необходимо: +
        • В поле Город, населенный пункт выбрать "Санкт-Петербург г". +
        • В поле Улица выбрать "Пискаревский пр-кт". +
        • В поле Дом написать "2". +
        • В поле Корпус написать "2". +
        • Для ввода литеры необходимо  Добавить поле, выбрать из выпадающего списка значение Литера и проставить в поле значение "Щ". +
        • Вместо поля Квартира выбрать из выпадающего списка поле Офис и ввести значение "12345".
      • Для ввода адреса, содержащего другие значения полей, например "Москва, улица Адмирала Лазарева, домовладение 89, корпус 16, строение 1" необходимо: +
        • В поле Город, населенный пункт выбрать "Москва г". +
        • В поле Улица выбрать "Адмирала Лазарева ул". +
        • Вместо поля Дом выбрать из выпадающего списка поле Домовладение, введите значение "89". +
        • В поле Корпус написать "16". +
        • Нажмите  Добавить, выберите из выпадающего списка поле Строение, проставьте в поле "1".

      Проверка заполнения адреса

      +

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

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

      История изменений

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

      Адрес на Яндекс.Картах, Адрес на Google Maps

      • -
        С помощью этих команд любой адрес, введенный в программе, можно посмотреть на картах.

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

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

      См. также:

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

    Выбор вида территориального деления

    +
    • +
      Перед заполнением адреса с помощью флажка можно выбрать:
      +
      • +
        Муниципальное деление;
        +
      • +
        Административно-территориальное деление.

    Ввод адреса в свободной форме

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

    Заполнение адреса по почтовому индексу

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

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

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

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

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

    См. также:

    \ No newline at end of file diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Module.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Module.bsl index 2c2670360..3613c716a 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Module.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Module.bsl @@ -33,102 +33,42 @@ КонецЕсли; // Настройки формы - ЭтоТакси = КлиентскоеПриложение.ТекущийВариантИнтерфейса() = ВариантИнтерфейсаКлиентскогоПриложения.Такси; // Группа команд "все действия" зависит от интерфейса. - Параметры.Свойство("ВозвращатьСписокЗначений", ВозвращатьСписокЗначений); - // Внутренняя инициализация - ЦветФонаУправляющегоПоля = ЦветаСтиля.ФонУправляющегоПоля; - ЦветФонаФормы = ЦветаСтиля.ЦветФонаФормы; - АвтоЦвет = Новый Цвет; - ОсновнаяСтрана = ОсновнаяСтрана(); - - ВидКонтактнойИнформации = УправлениеКонтактнойИнформациейСлужебный.СтруктураВидаКонтактнойИнформации(Параметры.ВидКонтактнойИнформации); + ОсновнаяСтрана = ОсновнаяСтрана(); + ВидКонтактнойИнформации = УправлениеКонтактнойИнформациейСлужебный.СтруктураВидаКонтактнойИнформации(Параметры.ВидКонтактнойИнформации); + ПриСозданииНаСервереХранитьИсториюИзменений(); - Если ВидКонтактнойИнформации.ХранитьИсториюИзменений Тогда - Если Параметры.Свойство("ДействуетС") И Параметры.Свойство("ДействуетДо") Тогда - ОтобразитьИнформациюОДатахДействияАдреса(Параметры.ДействуетС, Параметры.ДействуетДо); - КонецЕсли; - Если Параметры.Свойство("КонтактнаяИнформацияОписаниеДополнительныхРеквизитов") Тогда - Для каждого СтрокаКИ Из Параметры.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов Цикл - НоваяСтрока = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Добавить(); - ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаКИ); - КонецЦикла; - Иначе - Элементы.ИсторияИзменений.Видимость = Ложь; - Элементы.ПоказатьИсториюВсеДействия.Видимость = Ложь; - КонецЕсли; - Иначе - Элементы.ИсторияИзменений.Видимость = Ложь; - Элементы.ПоказатьИсториюВсеДействия.Видимость = Ложь; - КонецЕсли; - - ВидКонтактнойИнформации.Вставить("Ссылка", Параметры.ВидКонтактнойИнформации); - - Заголовок = ?(ПустаяСтрока(Параметры.Заголовок), - Строка(УправлениеКонтактнойИнформациейСлужебный.ТипВидаКонтактнойИнформации(ВидКонтактнойИнформации)), - Параметры.Заголовок); + Заголовок = ?(ПустаяСтрока(Параметры.Заголовок), ВидКонтактнойИнформации.Наименование, Параметры.Заголовок); СкрыватьНеактуальныеАдреса = ВидКонтактнойИнформации.СкрыватьНеактуальныеАдреса; ТолькоНациональныйАдрес = ВидКонтактнойИнформации.ТолькоНациональныйАдрес; ТипКонтактнойИнформации = ВидКонтактнойИнформации.Тип; // Пытаемся заполнить из параметров. - Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(Параметры.ЗначенияПолей) - И ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда - РезультатыЧтения = Новый Структура; - XDTOКонтактная = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзXML(Параметры.ЗначенияПолей, ТипКонтактнойИнформации, РезультатыЧтения); - Если РезультатыЧтения.Свойство("ТекстОшибки") Тогда - // Распознали с ошибками, сообщим при открытии. - ТекстПредупрежденияПриОткрытии = РезультатыЧтения.ТекстОшибки; - XDTOКонтактная.Представление = Параметры.Представление; - XDTOКонтактная.Состав.Страна = Строка(ОсновнаяСтрана); - КонецЕсли; + ЗначенияПолей = ОпределитьЗначениеАдреса(Параметры); + + Если ПустаяСтрока(ЗначенияПолей) Тогда + НаселенныйПунктДетально = УправлениеКонтактнойИнформацией.ОписаниеНовойКонтактнойИнформации(Перечисления.ТипыКонтактнойИнформации.Адрес); // Новый адрес + НаселенныйПунктДетально.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.АдресВСвободнойФорме(); + ИначеЕсли УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(ЗначенияПолей) Тогда + ДанныеАдреса = УправлениеКонтактнойИнформациейСлужебный.СтрокаJSONВСтруктуру(ЗначенияПолей); + НаселенныйПунктДетально = АккомодацияСтруктурыАдреса(ДанныеАдреса); Иначе - XDTOКонтактная = УправлениеКонтактнойИнформациейСлужебный.АдресXMLВXDTO(Параметры.ЗначенияПолей, Параметры.Представление, ); - Если Параметры.Свойство("Страна") И ЗначениеЗаполнено(Параметры.Страна) Тогда - Если ТипЗнч(Параметры.Страна) = ТипЗнч(Справочники.СтраныМира.ПустаяСсылка()) Тогда - XDTOКонтактная.Состав.Страна = Параметры.Страна.Наименование; - Иначе - XDTOКонтактная.Состав.Страна = Строка(Параметры.Страна); - КонецЕсли; - Иначе - XDTOКонтактная.Состав.Страна = ОсновнаяСтрана.Наименование; - КонецЕсли; + XDTOКонтактная = ИзвлечьСтарыйФорматАдреса(ЗначенияПолей, ТипКонтактнойИнформации); + ДанныеАдреса = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON(XDTOКонтактная, ТипКонтактнойИнформации); + НаселенныйПунктДетально = АккомодацияСтруктурыАдреса(ДанныеАдреса); КонецЕсли; - Если Параметры.Комментарий <> Неопределено Тогда - // Ставим новый комментарий, иначе он придет из информации. - XDTOКонтактная.Комментарий = Параметры.Комментарий; - КонецЕсли; + УстановитьЗначениеРеквизитовПоКонтактнойИнформации(ЭтотОбъект, НаселенныйПунктДетально); - ЗначениеРеквизитовПоКонтактнойИнформации(ЭтотОбъект, XDTOКонтактная); - - Если ЗначениеЗаполнено(Страна) Тогда - КодСтраны = Страна.Код; + Если ЗначениеЗаполнено(НаселенныйПунктДетально.Comment) Тогда + Элементы.ОсновныеСтраницы.ОтображениеСтраниц = ОтображениеСтраницФормы.ЗакладкиСверху; + Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Комментарий); Иначе - Страна = ОсновнаяСтрана; - КодСтраны = ОсновнаяСтрана.Код; + Элементы.ОсновныеСтраницы.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет; КонецЕсли; - Если ТолькоНациональныйАдрес Тогда - Элементы.Страна.Доступность = Ложь; - Элементы.Страна.ЦветФона = АвтоЦвет; - // Проверяем на корректность - Если Страна <> ОсновнаяСтрана Тогда - // Считаем адрес российским - ПредставлениеАдресаИзменено = Истина; - ТекстПредупрежденияПриОткрытии = НСтр("ru = 'Адрес введен некорректно: допускается ввод только национальных адресов. Значение поля ""Страна"" было изменено, необходимо проверить остальные поля.'"); - ПолеПредупрежденияПриОткрытии = "Страна"; - Модифицированность = Истина; - КонецЕсли; - Страна = ОсновнаяСтрана; - КонецЕсли; - - ОпределитьОтображениеЭлементовНаФорме(ЭтоТакси); - - Элементы.АдресСтраницаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Комментарий); - УстановитьКлючИспользованияФормы(); КонецПроцедуры @@ -136,11 +76,12 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) - ОбработкаИзмененияСтраныКлиент(); Если ЗначениеЗаполнено(ТекстПредупрежденияПриОткрытии) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстПредупрежденияПриОткрытии,, ПолеПредупрежденияПриОткрытии); КонецЕсли; + ОтобразитьПоляПоТипуАдреса(); + КонецПроцедуры &НаКлиенте @@ -157,19 +98,9 @@ &НаКлиенте Процедура СтранаПриИзменении(Элемент) - ОбработкаИзмененияСтраныКлиент(); - Контекст = КонтекстФормыКлиент(); - ЗаполнитьПредставлениеАдреса(Контекст); - КонтекстФормыКлиент(Контекст); + ОтобразитьПоляПоТипуАдреса(); -#Если ВебКлиент Тогда - // Обход особенности платформы. - Элемент.ОбновитьТекстРедактирования(); -#КонецЕсли - - // Выводим всегда представление. - Элементы.АдресПредставлениеКомментарий.ТекущаяСтраница = Элементы.АдресСтраницаПредставление; КонецПроцедуры &НаКлиенте @@ -215,19 +146,77 @@ КонецПроцедуры + &НаКлиенте Процедура КомментарийПриИзменении(Элемент) + НаселенныйПунктДетально.Comment = Комментарий; ПодключитьОбработчикОжидания("УстановитьПиктограммуКомментария", 0.1, Истина); КонецПроцедуры &НаКлиенте Процедура ПредставлениеИностранногоАдресаПриИзменении(Элемент) - ПредставлениеАдресаИзменено = Истина; - ПредставлениеАдресаПриИзмененииСервер(); + + НаселенныйПунктДетально.Value = ПредставлениеАдреса; + НаселенныйПунктДетально.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.АдресВСвободнойФорме(); + НаселенныйПунктДетально.Comment = Комментарий; + НаселенныйПунктДетально.Country = Строка(Страна); + КонецПроцедуры +// Дом, помещения + +&НаКлиенте +Процедура АдресНаДатуАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) + Если СтрСравнить(Текст, НСтр("ru='начало учета'")) = 0 Или ПустаяСтрока(Текст) Тогда + Элементы.АдресНаДату.ФорматРедактирования = ""; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура АдресНаДатуПриИзменении(Элемент) + + Если Не ВводНовогоАдреса Тогда + + Отбор = Новый Структура("Вид", ВидКонтактнойИнформации.Ссылка); + НайденныеСтроки = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор); + Результат = ОпределитьДатуДействия(АдресНаДату, НайденныеСтроки); + + Если Результат.ТекущаяСтрока <> Неопределено Тогда + Тип = Результат.ТекущаяСтрока.Тип; + АдресДействуетС = Результат.ДействуетС; + НаселенныйПунктДетально = АдресСИсторией(Результат.ТекущаяСтрока.Значение); + Иначе + Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес"); + АдресДействуетС = АдресНаДату; + НаселенныйПунктДетально = УправлениеКонтактнойИнформациейКлиентСервер.ОписаниеНовойКонтактнойИнформации(Тип); + КонецЕсли; + + + + Если ЗначениеЗаполнено(Результат.ДействуетПо) Тогда + ТекстИсторическийАдрес = " " + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'действует по %1'"), Формат(Результат.ДействуетПо - 10, "ДЛФ=DD")); + Иначе + ТекстИсторическийАдрес = НСтр("ru = 'действует по настоящее время.'"); + КонецЕсли; + Элементы.ТекстПроДатуДействия.Заголовок = ТекстИсторическийАдрес; + Иначе + АдресДействуетС = АдресНаДату; + КонецЕсли; + + ТекстНачалаУчета = НСтр("ru = 'начало учета'"); + Элементы.АдресНаДату.ФорматРедактирования = ?(ЗначениеЗаполнено(АдресНаДату), "", "ДФ='""" + ТекстНачалаУчета + """'"); + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция АдресСИсторией(ЗначенияПолей) + + Возврат УправлениеКонтактнойИнформациейСлужебный.СтрокаJSONВСтруктуру(ЗначенияПолей); + +КонецФункции + #КонецОбласти #Область ОбработчикиКомандФормы @@ -248,20 +237,22 @@ ОчиститьАдресКлиент(); + КонецПроцедуры &НаКлиенте Процедура ИсторияИзменений(Команда) ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("Контекст", КонтекстФормыКлиент()); ОписаниеДополнительныхРеквизитов = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов; - СписокКонтактнойИнформации = ЗаполнитьСписокКонтактнойИнформации(ВидКонтактнойИнформации.Ссылка, ОписаниеДополнительныхРеквизитов, ДополнительныеПараметры.Контекст); + СписокКонтактнойИнформации = ЗаполнитьСписокКонтактнойИнформации(ВидКонтактнойИнформации.Ссылка, ОписаниеДополнительныхРеквизитов); ПараметрыФормы = Новый Структура("СписокКонтактнойИнформации", СписокКонтактнойИнформации); ПараметрыФормы.Вставить("ВидКонтактнойИнформации", ВидКонтактнойИнформации.Ссылка); ПараметрыФормы.Вставить("ТолькоПросмотр", ЭтотОбъект.ТолькоПросмотр); + ПараметрыФормы.Вставить("ИзФормыВводаАдреса", Истина); + ПараметрыФормы.Вставить("ДействуетС", АдресНаДату); ОповещениеОЗакрытие = Новый ОписаниеОповещения("ПослеЗакрытияФормыИстории", ЭтотОбъект, ДополнительныеПараметры); ОткрытьФорму("Обработка.ВводКонтактнойИнформации.Форма.ИсторияКонтактнойИнформации", ПараметрыФормы, ЭтотОбъект,,,, ОповещениеОЗакрытие); @@ -269,13 +260,9 @@ КонецПроцедуры &НаКлиенте -Процедура АдресНаЯндексКарты(Команда) - УправлениеКонтактнойИнформациейКлиент.ПоказатьАдресНаКарте(ПредставлениеАдреса, "Яндекс.Карты"); -КонецПроцедуры - -&НаКлиенте -Процедура АдресНаGoogleMaps(Команда) - УправлениеКонтактнойИнформациейКлиент.ПоказатьАдресНаКарте(ПредставлениеАдреса, "GoogleMaps"); +Процедура ДобавитьКомментарий(Команда) + Элементы.ОсновныеСтраницы.ОтображениеСтраниц = ОтображениеСтраницФормы.ЗакладкиСверху; + Элементы.ОсновныеСтраницы.ТекущаяСтраница = Элементы.СтраницаКомментарий; КонецПроцедуры #КонецОбласти @@ -284,26 +271,25 @@ &НаКлиенте Процедура УстановитьПиктограммуКомментария() - Элементы.АдресСтраницаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Комментарий); + Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Комментарий); КонецПроцедуры &НаКлиенте Процедура ПодтвердитьИЗакрыть(Результат = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт Если Модифицированность Тогда // При немодифицированности работает как "отмена". - Контекст = КонтекстФормыКлиент(); + Контекст = Новый Структура("ВидКонтактнойИнформации, НаселенныйПунктДетально, ОсновнаяСтрана, Страна"); + ЗаполнитьЗначенияСвойств(Контекст, ЭтотОбъект); Результат = РезультатаВыбораПоОбновлениюФлагов(Контекст, ВозвращатьСписокЗначений); // Флаги вида были прочитаны заново. ВидКонтактнойИнформации = Контекст.ВидКонтактнойИнформации; - Если ВидКонтактнойИнформации.ПроверятьКорректность - И Результат.ОшибкиЗаполнения.Количество() > 0 Тогда - СообщитьОбОшибкахЗаполнения(Результат.ОшибкиЗаполнения, Ложь); - Возврат; + Результат = Результат.ДанныеВыбора; + Если ВидКонтактнойИнформации.ХранитьИсториюИзменений Тогда + ОбработатьКонтактнуюИнформациюСИсторией(Результат); КонецЕсли; - Результат = Результат.ДанныеВыбора; Если ТипЗнч(Результат) = Тип("Структура") Тогда Результат.Вставить("КонтактнаяИнформацияОписаниеДополнительныхРеквизитов", КонтактнаяИнформацияОписаниеДополнительныхРеквизитов); КонецЕсли; @@ -347,6 +333,82 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбработатьКонтактнуюИнформациюСИсторией(Результат) + + Результат.Вставить("ДействуетС", ?(ВводНовогоАдреса, АдресНаДату, АдресДействуетС)); + ИмяРеквизита = ""; + Отбор = Новый Структура("Вид", Результат.Вид); + + СтрокаДействующегоАдреса = Неопределено; + ДатаБылаИзменена = Истина; + ТекущаяДатаАдреса = ОбщегоНазначенияКлиент.ДатаСеанса(); + Дельта = АдресНаДату - ТекущаяДатаАдреса; + МинимальнаяДельта = ?(Дельта > 0, Дельта, -Дельта); + НайденныеСтроки = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор); + Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл + Если ЗначениеЗаполнено(НайденнаяСтрока.ИмяРеквизита) Тогда + ИмяРеквизита = НайденнаяСтрока.ИмяРеквизита; + КонецЕсли; + Если НайденнаяСтрока.ДействуетС = АдресНаДату Тогда + ДатаБылаИзменена = Ложь; + СтрокаДействующегоАдреса = НайденнаяСтрока; + Прервать; + КонецЕсли; + + Дельта = ТекущаяДатаАдреса - НайденнаяСтрока.ДействуетС; + Дельта = ?(Дельта > 0, Дельта, -Дельта); + Если Дельта <= МинимальнаяДельта Тогда + МинимальнаяДельта = Дельта; + СтрокаДействующегоАдреса = НайденнаяСтрока; + КонецЕсли; + КонецЦикла; + + Если ДатаБылаИзменена Тогда + + Отбор = Новый Структура("ДействуетС, Вид", АдресДействуетС, Результат.Вид); + СтрокиСАдресом = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор); + + ПредставлениеРедактируемогоАдреса = ?(СтрокиСАдресом.Количество() > 0, СтрокиСАдресом[0].Представление, ""); + Если СтрСравнить(Результат.Представление, ПредставлениеРедактируемогоАдреса) <> 0 Тогда + НоваяКонтактнаяИнформация = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяКонтактнаяИнформация, Результат); + НоваяКонтактнаяИнформация.ЗначенияПолей = Результат.КонтактнаяИнформация; + НоваяКонтактнаяИнформация.Значение = Результат.Значение; + НоваяКонтактнаяИнформация.ДействуетС = АдресНаДату; + НоваяКонтактнаяИнформация.ХранитьИсториюИзменений = Истина; + Если СтрокаДействующегоАдреса = Неопределено Тогда + Отбор = Новый Структура("ЭтоИсторическаяКонтактнаяИнформация, Вид", Ложь, Результат.Вид); + НайденныеСтроки = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор); + Для каждого НайденнаяСтрока Из НайденныеСтроки Цикл + НайденнаяСтрока.ЭтоИсторическаяКонтактнаяИнформация = Истина; + НайденнаяСтрока.ИмяРеквизита = ""; + КонецЦикла; + НоваяКонтактнаяИнформация.ИмяРеквизита = ИмяРеквизита; + НоваяКонтактнаяИнформация.ЭтоИсторическаяКонтактнаяИнформация = Ложь; + Иначе + НоваяКонтактнаяИнформация.ЭтоИсторическаяКонтактнаяИнформация = Истина; + Результат.Представление = СтрокаДействующегоАдреса.Представление; + Результат.КонтактнаяИнформация = СтрокаДействующегоАдреса.ЗначенияПолей; + Результат.Значение = СтрокаДействующегоАдреса.Значение; + КонецЕсли; + ИначеЕсли СтрСравнить(Результат.Комментарий, СтрокаДействующегоАдреса.Комментарий) <> 0 И СтрокиСАдресом.Количество() > 0 Тогда + // Поменяли только комментарий. + СтрокиСАдресом[0].Комментарий = Результат.Комментарий; + КонецЕсли; + Иначе + Если СтрСравнить(Результат.Представление, СтрокаДействующегоАдреса.Представление) <> 0 + ИЛИ СтрСравнить(Результат.Комментарий, СтрокаДействующегоАдреса.Комментарий) <> 0 Тогда + ЗаполнитьЗначенияСвойств(СтрокаДействующегоАдреса, Результат); + СтрокаДействующегоАдреса.ЗначенияПолей = Результат.КонтактнаяИнформация; + СтрокаДействующегоАдреса.Значение = Результат.Значение; + СтрокаДействующегоАдреса.ИмяРеквизита = ИмяРеквизита; + СтрокаДействующегоАдреса.ЭтоИсторическаяКонтактнаяИнформация = Ложь; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ПослеЗакрытияФормыИстории(Результат, ДополнительныеПараметры) Экспорт @@ -354,35 +416,52 @@ Возврат; КонецЕсли; - Отбор = Новый Структура("Вид", ВидКонтактнойИнформации.Ссылка); - НайденныеСтроки = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор); - - ИмяРеквизита = ""; - Для Каждого СтрокаКонтактнойИнформации Из НайденныеСтроки Цикл - Если НЕ СтрокаКонтактнойИнформации.ЭтоИсторическаяКонтактнаяИнформация Тогда - ИмяРеквизита = СтрокаКонтактнойИнформации.ИмяРеквизита; - КонецЕсли; - КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Удалить(СтрокаКонтактнойИнформации); - КонецЦикла; - - ЭтоИсторическаяКонтактнаяИнформация = Ложь; - ПараметрыОбновления = Новый Структура; - Для Каждого СтрокаКонтактнойИнформации Из Результат Цикл - ДанныеСтроки = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Добавить(); - ЗаполнитьЗначенияСвойств(ДанныеСтроки, СтрокаКонтактнойИнформации); - Если НЕ СтрокаКонтактнойИнформации.ЭтоИсторическаяКонтактнаяИнформация Тогда - ДанныеСтроки.ИмяРеквизита = ИмяРеквизита; - Контекст = ДополнительныеПараметры.Контекст; - Если СтрСравнить(Контекст.ПредставлениеАдреса, СтрокаКонтактнойИнформации.Представление) <> 0 Тогда - ПерезаполнитьФормуВводаАдреса(Контекст, СтрокаКонтактнойИнформации.ЗначенияПолей, СтрокаКонтактнойИнформации.Тип); - КонтекстФормыКлиент(Контекст); + ВводНовогоАдреса = ?(Результат.Свойство("ВводНовогоАдреса"), Результат.ВводНовогоАдреса, Ложь); + Если ВводНовогоАдреса Тогда + АдресДействуетС = АдресНаДату; + АдресНаДату = Результат.ТекущийАдрес; + НаселенныйПунктДетально = УправлениеКонтактнойИнформациейКлиентСервер.ОписаниеНовойКонтактнойИнформации(ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес")); + Иначе + Отбор = Новый Структура("Вид", ВидКонтактнойИнформации.Ссылка); + НайденныеСтроки = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор); + + ИмяРеквизита = ""; + Для Каждого СтрокаКонтактнойИнформации Из НайденныеСтроки Цикл + Если НЕ СтрокаКонтактнойИнформации.ЭтоИсторическаяКонтактнаяИнформация Тогда + ИмяРеквизита = СтрокаКонтактнойИнформации.ИмяРеквизита; КонецЕсли; - КонецЕсли; - КонецЦикла; - ЭтотОбъект.Модифицированность = Истина; + КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Удалить(СтрокаКонтактнойИнформации); + КонецЦикла; + + ЭтоИсторическаяКонтактнаяИнформация = Ложь; + ПараметрыОбновления = Новый Структура; + Для Каждого СтрокаКонтактнойИнформации Из Результат.История Цикл + ДанныеСтроки = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Добавить(); + ЗаполнитьЗначенияСвойств(ДанныеСтроки, СтрокаКонтактнойИнформации); + Если НЕ СтрокаКонтактнойИнформации.ЭтоИсторическаяКонтактнаяИнформация Тогда + ДанныеСтроки.ИмяРеквизита = ИмяРеквизита; + КонецЕсли; + Если НачалоДня(Результат.ТекущийАдрес) = НачалоДня(СтрокаКонтактнойИнформации.ДействуетС) Тогда + АдресНаДату = Результат.ТекущийАдрес; + НаселенныйПунктДетально = СтрокаJSONВСтруктуру(СтрокаКонтактнойИнформации.Значение); + + КонецЕсли; + КонецЦикла; + КонецЕсли; + + ОтобразитьИнформациюОДатахДействияАдреса(АдресНаДату); + + Если НЕ ЭтотОбъект.Модифицированность Тогда + ЭтотОбъект.Модифицированность = Результат.Модифицированность; + КонецЕсли; КонецПроцедуры +&НаСервереБезКонтекста +Функция СтрокаJSONВСтруктуру(Значение) + Возврат УправлениеКонтактнойИнформациейСлужебный.СтрокаJSONВСтруктуру(Значение); +КонецФункции + &НаКлиенте Процедура СохранитьСостояниеФормы() УстановитьКлючИспользованияФормы(); @@ -395,29 +474,37 @@ КопияКомментария = Комментарий; КонецПроцедуры +&НаСервереБезКонтекста +Функция РезультатаВыбораПоОбновлениюФлагов(Контекст, ВозвращатьСписокЗначений = Ложь) + // Обновляем некоторые флаги + ЗначениеФлагов = УправлениеКонтактнойИнформациейСлужебный.СтруктураВидаКонтактнойИнформации(Контекст.ВидКонтактнойИнформации.Ссылка); + + Контекст.ВидКонтактнойИнформации.ТолькоНациональныйАдрес = ЗначениеФлагов.ТолькоНациональныйАдрес; + Контекст.ВидКонтактнойИнформации.ПроверятьКорректность = ЗначениеФлагов.ПроверятьКорректность; + + Возврат РезультатВыбора(Контекст, ВозвращатьСписокЗначений); +КонецФункции + &НаСервереБезКонтекста Функция РезультатВыбора(Контекст, ВозвращатьСписокЗначений = Ложь) - XDTOИнформация = КонтактнаяИнформацияПоЗначениюРеквизитов(Контекст); + + НаселенныйПунктДетально = Контекст.НаселенныйПунктДетально; Результат = Новый Структура("ДанныеВыбора, ОшибкиЗаполнения"); - Если ВозвращатьСписокЗначений Тогда - ДанныеВыбора = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтаруюСтруктуру(XDTOИнформация); - ДанныеВыбора = ДанныеВыбора.ЗначенияПолей; - ИначеЕсли Контекст.Страна = Контекст.ОсновнаяСтрана И ПустаяСтрока(XDTOИнформация.Представление) Тогда - ДанныеВыбора = ""; - Иначе - ДанныеВыбора = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOВXML(XDTOИнформация); - КонецЕсли; + ДанныеВыбора = НаселенныйПунктДетально; Результат.ДанныеВыбора = Новый Структура; - Результат.ДанныеВыбора.Вставить("КонтактнаяИнформация", ДанныеВыбора); - Результат.ДанныеВыбора.Вставить("Представление", XDTOИнформация.Представление); - Результат.ДанныеВыбора.Вставить("Комментарий", XDTOИнформация.Комментарий); + Результат.ДанныеВыбора.Вставить("КонтактнаяИнформация", + УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзJSONВXML(ДанныеВыбора, Контекст.ВидКонтактнойИнформации.Тип)); + Результат.ДанныеВыбора.Вставить("Значение", УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(ДанныеВыбора)); + Результат.ДанныеВыбора.Вставить("Представление", НаселенныйПунктДетально.Value); + Результат.ДанныеВыбора.Вставить("Комментарий", НаселенныйПунктДетально.Comment); Результат.ДанныеВыбора.Вставить("ВведеноВСвободнойФорме", - УправлениеКонтактнойИнформациейСлужебный.АдресВведенВСвободнойФорме(XDTOИнформация)); - - Результат.ОшибкиЗаполнения = Новый СписокЗначений; - + УправлениеКонтактнойИнформациейСлужебный.АдресВведенВСвободнойФорме(НаселенныйПунктДетально)); + + // ошибки заполнения + Результат.ОшибкиЗаполнения = Новый Массив; + Если Контекст.ВидКонтактнойИнформации.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес И Контекст.ВидКонтактнойИнформации.РедактированиеТолькоВДиалоге Тогда АдресВВидеГиперссылки = Истина; @@ -435,49 +522,15 @@ КонецФункции &НаСервереБезКонтекста -Функция ПерезаполнитьФормуВводаАдреса(Контекст, ЗначенияПолей, ТипКонтактнойИнформации) - - РезультатыЧтения = ""; - XDTOКонтактная = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзXML(ЗначенияПолей, ТипКонтактнойИнформации, РезультатыЧтения); - ЗначениеРеквизитовПоКонтактнойИнформации(Контекст, XDTOКонтактная); - Возврат РезультатыЧтения; - -КонецФункции - -&НаСервереБезКонтекста -Функция ЗаполнитьСписокКонтактнойИнформации(ВидКонтактнойИнформации, КонтактнаяИнформацияОписаниеДополнительныхРеквизитов, Контекст) +Функция ЗаполнитьСписокКонтактнойИнформации(ВидКонтактнойИнформации, КонтактнаяИнформацияОписаниеДополнительныхРеквизитов) Отбор = Новый Структура("Вид", ВидКонтактнойИнформации); НайденныеСтроки = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор); СписокКонтактнойИнформации = Новый Массив; Для каждого СтрокаКонтактнойИнформации Из НайденныеСтроки Цикл - КонтактнаяИнформация = Новый Структура("Представление, ЗначенияПолей, ДействуетС"); - Если СтрокаКонтактнойИнформации.ЭтоИсторическаяКонтактнаяИнформация Тогда - ЗаполнитьЗначенияСвойств(КонтактнаяИнформация, СтрокаКонтактнойИнформации); - Иначе - XDTOИнформация = КонтактнаяИнформацияПоЗначениюРеквизитов(Контекст); - ЗначенияПолей = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOВXML(XDTOИнформация); - Если СтрСравнить(СтрокаКонтактнойИнформации.ЗначенияПолей, ЗначенияПолей) <> 0 Тогда - Если СтрокаКонтактнойИнформации.ДействуетС < НачалоДня(ТекущаяДатаСеанса()) Тогда - // старое значение - ЗаполнитьЗначенияСвойств(КонтактнаяИнформация, СтрокаКонтактнойИнформации); - СписокКонтактнойИнформации.Добавить(КонтактнаяИнформация); - // новое значение - КонтактнаяИнформация = Новый Структура("Представление, ЗначенияПолей, ДействуетС"); - КонтактнаяИнформация.Представление = Контекст.ПредставлениеАдреса; - КонтактнаяИнформация.ЗначенияПолей = ЗначенияПолей; - КонтактнаяИнформация.ДействуетС = ТекущаяДатаСеанса(); - Иначе - КонтактнаяИнформация.Представление = Контекст.ПредставлениеАдреса; - КонтактнаяИнформация.ЗначенияПолей = ЗначенияПолей; - КонтактнаяИнформация.ДействуетС = ТекущаяДатаСеанса(); - КонецЕсли; - Иначе - ЗаполнитьЗначенияСвойств(КонтактнаяИнформация, СтрокаКонтактнойИнформации); - КонецЕсли; - КонецЕсли; - + КонтактнаяИнформация = Новый Структура("Представление, Значение, ЗначенияПолей, ДействуетС, Комментарий"); + ЗаполнитьЗначенияСвойств(КонтактнаяИнформация, СтрокаКонтактнойИнформации); СписокКонтактнойИнформации.Добавить(КонтактнаяИнформация); КонецЦикла; @@ -514,116 +567,49 @@ КонецФункции &НаКлиенте -Процедура ОбработкаИзмененияСтраныКлиент() +Процедура ОтобразитьПоляПоТипуАдреса() - ЭтоНациональныйАдрес = (Страна = ОсновнаяСтрана); + ЭтоНациональныйАдрес = (Страна = ОсновнаяСтрана); + + НаселенныйПунктДетально.Country = СокрЛП(Страна); + + Если ВидКонтактнойИнформации.ВключатьСтрануВПредставление Тогда + ОбновитьПредставлениеАдреса(); + КонецЕсли; КонецПроцедуры &НаСервере -Процедура ОпределитьОтображениеЭлементовНаФорме(ЭтоТакси) - - // По умолчанию выводим представление. - Элементы.АдресПредставлениеКомментарий.ТекущаяСтраница = Элементы.АдресСтраницаПредставление; - - Если ЭтоТакси Тогда - Элементы.ФормаВсеДействия.Видимость = Ложь; - Иначе - Элементы.ФормаОчиститьАдрес.Видимость = Ложь; - Элементы.ИзменитьФорму.Видимость = Ложь; - Элементы.ФормаВводАдресаПоказать.Видимость = Ложь; - КонецЕсли; -КонецПроцедуры - -&НаСервереБезКонтекста -Процедура ЗаполнитьПредставлениеАдреса(Контекст, XDTOКонтактная = Неопределено) - - // Код страны ставим всегда - Если ТипЗнч(Контекст.Страна) = Тип("СправочникСсылка.СтраныМира") Тогда - Контекст.КодСтраны = Контекст.Страна.Код - Иначе - Контекст.КодСтраны = ""; - КонецЕсли; - -КонецПроцедуры - -&НаСервереБезКонтекста -Процедура ЗначениеРеквизитовПоКонтактнойИнформации(Контекст, РедактируемаяИнформация) - - ДанныеАдреса = РедактируемаяИнформация.Состав; +Процедура УстановитьЗначениеРеквизитовПоКонтактнойИнформации(СведенияОбАдресе, ДанныеАдреса) // Общие реквизиты - Контекст.ПредставлениеАдреса = РедактируемаяИнформация.Представление; - Контекст.Комментарий = РедактируемаяИнформация.Комментарий; + СведенияОбАдресе.ПредставлениеАдреса = ДанныеАдреса.Value; + Если ДанныеАдреса.Свойство("Comment") Тогда + СведенияОбАдресе.Комментарий = ДанныеАдреса.Comment; + КонецЕсли; // Копия комментария для анализа измененности. - Контекст.КопияКомментария = Контекст.Комментарий; + СведенияОбАдресе.КопияКомментария = СведенияОбАдресе.Комментарий; - // Страна по наименованию - НаименованиеСтраны = СокрЛП(ДанныеАдреса.Страна); - Если ПустаяСтрока(НаименованиеСтраны) Тогда - Контекст.Страна = Справочники.СтраныМира.ПустаяСсылка(); - Иначе - - СсылкаНаОсновнуюСтрану = ОсновнаяСтрана(); - - Если ВРЕГ(НаименованиеСтраны) = ВРЕГ(СокрЛП(СсылкаНаОсновнуюСтрану.Наименование)) Тогда - Контекст.Страна = СсылкаНаОсновнуюСтрану; - Контекст.КодСтраны = СсылкаНаОсновнуюСтрану.Код; - Иначе - ДанныеСтраны = Справочники.СтраныМира.ДанныеСтраныМира(, НаименованиеСтраны); - Если ДанныеСтраны = Неопределено Тогда - // Не нашли ни в справочнике, ни в классификаторе. - Контекст.Страна = Неопределено; - Контекст.КодСтраны = Неопределено; - Иначе - Контекст.Страна = ДанныеСтраны.Ссылка; - Контекст.КодСтраны = ДанныеСтраны.Код; - КонецЕсли; - КонецЕсли; + СсылкаНаОсновнуюСтрану = ОсновнаяСтрана(); + ДанныеСтраны = Неопределено; + Если ДанныеАдреса.Свойство("Country") И ЗначениеЗаполнено(ДанныеАдреса.Country) Тогда + ДанныеСтраны = Справочники.СтраныМира.ДанныеСтраныМира(, СокрЛП(ДанныеАдреса.Country)); КонецЕсли; + Если ДанныеСтраны = Неопределено Тогда + // Не нашли ни в справочнике, ни в классификаторе. + СведенияОбАдресе.Страна = СсылкаНаОсновнуюСтрану; + СведенияОбАдресе.КодСтраны = СсылкаНаОсновнуюСтрану.Код; + Иначе + СведенияОбАдресе.Страна = ДанныеСтраны.Ссылка; + СведенияОбАдресе.КодСтраны = ДанныеСтраны.Код; + КонецЕсли; + + СведенияОбАдресе.ПредставлениеАдреса = ДанныеАдреса.Value; + КонецПроцедуры -&НаСервереБезКонтекста -Функция КонтактнаяИнформацияПоЗначениюРеквизитов(Контекст) - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); - - Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); - Результат.Комментарий = Контекст.Комментарий; - - Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Адрес")); - Адрес = Результат.Состав; - - Адрес.Страна = Строка(Контекст.Страна); - Если ВРег(Контекст.Страна) <> ВРег(Контекст.ОсновнаяСтрана.Наименование) Тогда - Результат.Представление = Контекст.ПредставлениеАдреса; - Если Контекст.ВидКонтактнойИнформации.ВключатьСтрануВПредставление - И СтрНачинаетсяС(ВРЕГ(Контекст.ПредставлениеАдреса), ВРег(Контекст.Страна)) Тогда - Адрес.Состав = Сред(Контекст.ПредставлениеАдреса, СтрДлина(Контекст.Страна) + 2); - Иначе - Адрес.Состав = Контекст.ПредставлениеАдреса; - КонецЕсли; - Возврат Результат; - КонецЕсли; - - // Представление и свободный ввод адреса. - Результат.Представление = СокрЛП(Контекст.ПредставлениеАдреса); - - Возврат Результат; -КонецФункции - -&НаСервереБезКонтекста -Функция РезультатаВыбораПоОбновлениюФлагов(Контекст, ВозвращатьСписокЗначений = Ложь) - // Обновляем некоторые флаги - ЗначениеФлагов = УправлениеКонтактнойИнформациейСлужебный.СтруктураВидаКонтактнойИнформации(Контекст.ВидКонтактнойИнформации.Ссылка); - - Контекст.ВидКонтактнойИнформации.ТолькоНациональныйАдрес = ЗначениеФлагов.ТолькоНациональныйАдрес; - Контекст.ВидКонтактнойИнформации.ПроверятьКорректность = ЗначениеФлагов.ПроверятьКорректность; - - Возврат РезультатВыбора(Контекст, ВозвращатьСписокЗначений); -КонецФункции - &НаСервере Процедура УдалитьГруппуЭлементов(Группа) Пока Группа.ПодчиненныеЭлементы.Количество()>0 Цикл @@ -637,146 +623,249 @@ КонецПроцедуры &НаСервере -Процедура ОтобразитьИнформациюОДатахДействияАдреса(ДействуетС, ДействуетДо) +Процедура ОтобразитьИнформациюОДатахДействияАдреса(ДействуетС) - Если ЗначениеЗаполнено(ДействуетДо) И ЗначениеЗаполнено(ДействуетС)Тогда - Если НачалоДня(ДействуетДо - 10) = НачалоДня(ДействуетС) Тогда - ТекстИсторическийАдрес = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Адрес действовал только %1'"), Формат(ДействуетС, "ДЛФ=DD")); - Иначе - ТекстИсторическийАдрес = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Адрес действовал с %1 по %2 (включительно)'"), Формат(ДействуетС, "ДЛФ=DD"), Формат(ДействуетДо - 10, "ДЛФ=DD")); - КонецЕсли; - ИначеЕсли НЕ ЗначениеЗаполнено(ДействуетС) И ЗначениеЗаполнено(ДействуетДо) Тогда - ТекстИсторическийАдрес = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Адрес действовал до %1 (включительно)'"), Формат(ДействуетДо - 10, "ДЛФ=DD")); + Если ВводНовогоАдреса Тогда + ТекстИсторическийАдрес = НСтр("ru = ''"); + АдресНаДату = ДействуетС; + Элементы.ГруппаИсторическийАдрес.Видимость = ЗначениеЗаполнено(ДействуетС); Иначе - ТекстИсторическийАдрес = НСтр("ru = 'Адрес действует в настоящие время'"); + ДействуетДо = Неопределено; + + Отбор = Новый Структура("Вид", ВидКонтактнойИнформации.Ссылка); + НайденныеСтроки = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор); + Если НайденныеСтроки.Количество() = 0 + ИЛИ (НайденныеСтроки.Количество() = 1 И ПустаяСтрока(НайденныеСтроки[0].Представление)) Тогда + АдресНаДату = Дата(1, 1, 1); + Элементы.ГруппаИсторическийАдрес.Видимость = Ложь; + Элементы.ИсторияИзменений.Видимость = Ложь; + Иначе + Результат = ОпределитьДатуДействия(ДействуетС, НайденныеСтроки); + АдресНаДату = Результат.ДействуетС; + АдресДействуетС = Результат.ДействуетС; + + Если НЕ ЗначениеЗаполнено(Результат.ДействуетС) + И ПустаяСтрока(Результат.ТекущаяСтрока.Представление) Тогда + Элементы.ГруппаИсторическийАдрес.Видимость = Ложь; + ИначеЕсли ЗначениеЗаполнено(Результат.ДействуетПо) Тогда + ТекстИсторическийАдрес = " " + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'действует по %1'"), Формат(Результат.ДействуетПо - 10, "ДЛФ=DD")); + Иначе + ТекстИсторическийАдрес = НСтр("ru = 'действует по настоящее время.'"); + КонецЕсли; + ОтобразитьКоличествоЗаписейВИсторииИзменений(); + КонецЕсли; + КонецЕсли; + + Элементы.ТекстПроДатуДействия.Заголовок = ТекстИсторическийАдрес; + Элементы.АдресНаДату.ФорматРедактирования = ?(ЗначениеЗаполнено(АдресНаДату), "", "ДФ='""" + НСтр("ru='начало учета'") + """'"); + +КонецПроцедуры + +&НаСервере +Процедура ОтобразитьКоличествоЗаписейВИсторииИзменений() + + Отбор = Новый Структура("Вид", ВидКонтактнойИнформации.Ссылка); + НайденныеСтроки = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор); + Если НайденныеСтроки.Количество() > 1 Тогда + Элементы.ИсторияИзмененийГиперссылка.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='История изменений (%1)'"), НайденныеСтроки.Количество()); + Элементы.ИсторияИзмененийГиперссылка.Видимость = Истина; + ИначеЕсли НайденныеСтроки.Количество() = 1 И ПустаяСтрока(НайденныеСтроки[0].ЗначенияПолей) Тогда + Элементы.ИсторияИзмененийГиперссылка.Видимость = Ложь; + Иначе + Элементы.ИсторияИзмененийГиперссылка.Заголовок = НСтр("ru='История изменений'"); + Элементы.ИсторияИзмененийГиперссылка.Видимость = Истина; КонецЕсли; - ИсторическийАдрес = ТекстИсторическийАдрес; - Элементы.ПоказатьИсториюВсеДействия.Видимость = Ложь; - Элементы.ИсторияИзменений.Видимость = Ложь; - Элементы.ГруппаИсторическийАдрес.Видимость = Истина; КонецПроцедуры -&НаКлиенте -Процедура СообщитьОбОшибкахЗаполнения(СписокОшибок, ПредупреждатьОбОтсутствии, ТребуетсяОбновление = Ложь) +&НаКлиентеНаСервереБезКонтекста +Функция ОпределитьДатуДействия(ДействуетС, История) - ОчиститьСообщения(); - - КоличествоОшибок = СписокОшибок.Количество(); - Если КоличествоОшибок = 0 И ПредупреждатьОбОтсутствии Тогда - // Нет ошибок - Если ТребуетсяОбновление Тогда - СообщениеОПроверкеАдреса = НСтр("ru='Адрес введен корректно, но адресные сведения, загруженные в программу, - |давно не обновлялись. Рекомендуется выполнить обновление и повторить проверку адреса заново. - |Для обновления адресного классификатора необходимо обратиться к администратору.'"); - ПоказатьПредупреждение(, СообщениеОПроверкеАдреса); - Иначе - ПоказатьПредупреждение(, НСтр("ru='Адрес введен корректно.'")); - КонецЕсли; - - Возврат; + Результат = Новый Структура("ДействуетПо, ДействуетС, ТекущаяСтрока"); + Если История.Количество() = 0 Тогда + Возврат Результат; КонецЕсли; - // Сообщаем список с привязкой к полям. - Для Каждого Элемент Из СписокОшибок Цикл - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Элемент.Представление); + ТекущаяСтрока = Неопределено; + ДействуетПо = Неопределено; + Минимум = -1; + МинимумСравнительный = Неопределено; + + Для каждого СтрокаИстория Из История Цикл + Дельта = СтрокаИстория.ДействуетС - ДействуетС; + Если Дельта <= 0 И (МинимумСравнительный = Неопределено ИЛИ Дельта > МинимумСравнительный) Тогда + ТекущаяСтрока = СтрокаИстория; + МинимумСравнительный = Дельта; + КонецЕсли; + + Если Минимум = -1 Тогда + Минимум = Дельта + 1; + ТекущаяСтрока = СтрокаИстория; + КонецЕсли; + Если Дельта > 0 И МодульЧисла(Дельта) < МодульЧисла(Минимум) Тогда + ДействуетПо = СтрокаИстория.ДействуетС; + Минимум = МодульЧисла(Дельта); + КонецЕсли; КонецЦикла; -КонецПроцедуры + Результат.ДействуетПо = ДействуетПо; + Результат.ДействуетС = ТекущаяСтрока.ДействуетС; + Результат.ТекущаяСтрока = ТекущаяСтрока; + + Возврат Результат; +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция МодульЧисла(Число) + Возврат Макс(Число, -Число); +КонецФункции &НаКлиенте Процедура ОчиститьАдресКлиент() - Контекст = КонтекстФормыКлиент(); - ОчиститьАдресСервер(Контекст); - КонтекстФормыКлиент(Контекст); + Для каждого ЭлементАдреса Из НаселенныйПунктДетально Цикл + + Если ЭлементАдреса.Ключ = "Type" Тогда + Продолжить; + ИначеЕсли ЭлементАдреса.Ключ = "Buildings" ИЛИ ЭлементАдреса.Ключ = "Apartments" Тогда + НаселенныйПунктДетально[ЭлементАдреса.Ключ] = Новый Массив; + Иначе + НаселенныйПунктДетально[ЭлементАдреса.Ключ] = ""; + КонецЕсли; + + КонецЦикла; - Модифицированность = Истина; -КонецПроцедуры - -&НаСервере -Процедура ОчиститьАдресСервер(Контекст) + Если ВидКонтактнойИнформации.ТолькоНациональныйАдрес Тогда + НаселенныйПунктДетально.Country = ОсновнаяСтрана(); + КонецЕсли; - Контекст.ПредставлениеАдреса = ""; - Контекст.Комментарий = ""; - Контекст.Индекс = Неопределено; + НаселенныйПунктДетально.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.АдресВСвободнойФорме(); - XDTOКонтактнаяИнфо = КонтактнаяИнформацияПоЗначениюРеквизитов(Контекст); - ЗаполнитьПредставлениеАдреса(Контекст, XDTOКонтактнаяИнфо); - - // Очищаем непосредственно на форме, в контексте уже очищено. КонецПроцедуры &НаСервере Процедура УстановитьКлючИспользованияФормы() КлючСохраненияПоложенияОкна = Строка(Страна); + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////////////////////////// -// Преобразовываем Реквизиты формы <-> Структура -// -&НаКлиенте -Функция КонтекстФормыКлиент(НовыеДанные = Неопределено) +&НаСервере +Процедура ПриСозданииНаСервереХранитьИсториюИзменений() - СписокРеквизитов = "ВидКонтактнойИнформации, - |Страна, КодСтраны, ОсновнаяСтрана, СкрыватьНеактуальныеАдреса, - |Индекс, ПредставлениеАдреса, Комментарий, КопияКомментария, - | ПредставлениеАдресаИзменено, Модифицированность"; - - Если НовыеДанные = Неопределено Тогда - // Читаем - Результат = Новый Структура(СписокРеквизитов); - ЗаполнитьЗначенияСвойств(Результат, ЭтотОбъект, СписокРеквизитов); - Возврат Результат; + Если ВидКонтактнойИнформации.ХранитьИсториюИзменений Тогда + Если Параметры.Свойство("КонтактнаяИнформацияОписаниеДополнительныхРеквизитов") Тогда + Для каждого СтрокаКИ Из Параметры.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов Цикл + НоваяСтрока = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаКИ); + КонецЦикла; + Иначе + Элементы.ИсторияИзменений.Видимость = Ложь; + КонецЕсли; + Элементы.ИсторияИзмененийГиперссылка.Видимость = НЕ Параметры.Свойство("ИзФормыИстории"); + ВводНовогоАдреса = ?(Параметры.Свойство("ВводНовогоАдреса"), Параметры.ВводНовогоАдреса, Ложь); + Если ВводНовогоАдреса Тогда + ДействуетС = Параметры.ДействуетС; + Иначе + ДействуетС = ?(ЗначениеЗаполнено(Параметры.ДействуетС), Параметры.ДействуетС, ТекущаяДатаСеанса()); + КонецЕсли; + ОтобразитьИнформациюОДатахДействияАдреса(ДействуетС); + Иначе + Элементы.ИсторияИзменений.Видимость = Ложь; + Элементы.ГруппаИсторическийАдрес.Видимость = Ложь; КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция ОпределитьЗначениеАдреса(Параметры) - ЗаполнитьЗначенияСвойств(ЭтотОбъект, НовыеДанные, СписокРеквизитов); - - Возврат НовыеДанные; + Если Параметры.Свойство("Значение") Тогда + Если ПустаяСтрока(Параметры.Значение) И ЗначениеЗаполнено(Параметры.ЗначенияПолей) Тогда + ЗначенияПолей = Параметры.ЗначенияПолей; + Иначе + ЗначенияПолей = Параметры.Значение; + КонецЕсли; + Иначе + ЗначенияПолей = Параметры.ЗначенияПолей; + КонецЕсли; + Возврат ЗначенияПолей; + КонецФункции -// Представление разрешено менять только при вводе в режиме ввода в свободной форме. -// Поэтому необходимо привести остальные поля к измененному представлению. -// Страну не трогаем, режим свободного ввода возможен только в России. -// &НаСервере -Процедура ПредставлениеАдресаПриИзмененииСервер() +Функция ИзвлечьСтарыйФорматАдреса(Знач ЗначенияПолей, Знач ТипКонтактнойИнформации) - Если Страна = ОсновнаяСтрана Тогда - // Пытаемся разобрать заново - XDTOКонтактная = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOПоПредставлению(ПредставлениеАдреса, ВидКонтактнойИнформации); - XDTOКонтактная.Представление = ПредставлениеАдреса; - XDTOКонтактная.Комментарий = Комментарий; - - // И проставляем в реквизиты, кроме страны и представления. - ТекущееПредставление = ПредставлениеАдреса; - ТекущаяСтрана = Страна; - - ОчиститьАдресСервер(ЭтотОбъект); - - // Возможно будет отключен свободного ввода. - ЗначениеРеквизитовПоКонтактнойИнформации(ЭтотОбъект, XDTOКонтактная); - - ПредставлениеАдреса = ТекущееПредставление; - Страна = ТекущаяСтрана; + Перем XDTOКонтактная, РезультатыЧтения; + + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(ЗначенияПолей) + И ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда + РезультатыЧтения = Новый Структура; + XDTOКонтактная = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзXML(ЗначенияПолей, ТипКонтактнойИнформации, РезультатыЧтения); + Если РезультатыЧтения.Свойство("ТекстОшибки") Тогда + // Распознали с ошибками, сообщим при открытии. + ТекстПредупрежденияПриОткрытии = РезультатыЧтения.ТекстОшибки; + XDTOКонтактная.Представление = Параметры.Представление; + XDTOКонтактная.Состав.Страна = Строка(ОсновнаяСтрана); + КонецЕсли; + Иначе + XDTOКонтактная = УправлениеКонтактнойИнформациейСлужебный.АдресXMLВXDTO(ЗначенияПолей, Параметры.Представление, ); + Если Параметры.Свойство("Страна") И ЗначениеЗаполнено(Параметры.Страна) Тогда + Если ТипЗнч(Параметры.Страна) = ТипЗнч(Справочники.СтраныМира.ПустаяСсылка()) Тогда + XDTOКонтактная.Состав.Страна = Параметры.Страна.Наименование; + Иначе + XDTOКонтактная.Состав.Страна = Строка(Параметры.Страна); + КонецЕсли; + Иначе + XDTOКонтактная.Состав.Страна = ОсновнаяСтрана.Наименование; + КонецЕсли; КонецЕсли; - - // Включаем режим свободного ввода принудительно. - РазрешитьВводАдресаВСвободнойФорме = Истина; - Модифицированность = Истина; + Если Параметры.Комментарий <> Неопределено Тогда + // Ставим новый комментарий, иначе он придет из информации. + XDTOКонтактная.Комментарий = Параметры.Комментарий; + КонецЕсли; + Возврат XDTOКонтактная; + +КонецФункции + +&НаКлиенте +Процедура ОбновитьПредставлениеАдреса() + ПредставлениеАдреса = НаселенныйПунктДетально.Value; КонецПроцедуры &НаСервереБезКонтекста Функция ОсновнаяСтрана() - Если Метаданные.ОбщиеМодули.Найти("РаботаСАдресами") <> Неопределено Тогда - МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами"); - Возврат МодульРаботаСАдресами.ОсновнаяСтрана(); + Если Метаданные.ОбщиеМодули.Найти("РаботаСАдресамиКлиентСервер") <> Неопределено Тогда + + МодульРаботаСАдресамиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресамиКлиентСервер"); + Возврат МодульРаботаСАдресамиКлиентСервер.ОсновнаяСтрана(); + КонецЕсли; Возврат Справочники.СтраныМира.ПустаяСсылка(); КонецФункции -#КонецОбласти +&НаСервере +Функция АккомодацияСтруктурыАдреса(Данные) + + НаселенныйПунктДетально = УправлениеКонтактнойИнформациейКлиентСервер.ОписаниеНовойКонтактнойИнформации(ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес")); + ЗаполнитьЗначенияСвойств(НаселенныйПунктДетально, Данные); + + Для каждого ЭлементАдреса Из НаселенныйПунктДетально Цикл + + Если СтрЗаканчиваетсяНа(ЭлементАдреса.Ключ, "ID") + И ТипЗнч(ЭлементАдреса.Значение) = Тип("Строка") + И СтрДлина(ЭлементАдреса.Значение) = 36 Тогда + НаселенныйПунктДетально[ЭлементАдреса.Ключ] = Новый УникальныйИдентификатор(ЭлементАдреса.Значение); + КонецЕсли; + + КонецЦикла; + + Возврат НаселенныйПунктДетально; + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Form.form b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Form.form index 8541d14e5..bdd74cc1e 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Form.form +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Form.form @@ -492,145 +492,6 @@ Auto InCommandBarAndInAdditionalSubmenu
    - - ФормаВсеДействия - 62 - - ОчиститьТелефонВсеДействия - 64 - true - true - - true - - - ОчиститьТелефонВсеДействияРасширеннаяПодсказка - 65 - Label - true - true - - Left - - - Form.Command.ОчиститьТелефон - Normal - Auto - true - true - UserCmds - Auto - - - ГруппаСтандартныеКоманды - 66 - - ИзменитьФормуВсеДействия - 68 - true - true - - true - - - ИзменитьФормуВсеДействияРасширеннаяПодсказка - 69 - Label - true - true - - Left - - - Form.StandardCommand.CustomizeForm - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - СправкаФормыВсеДействия - 70 - true - true - - true - - - СправкаФормыВсеДействияРасширеннаяПодсказка - 71 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Стандартные команды</value> - - - ГруппаСтандартныеКомандыРасширеннаяПодсказка - 67 - Label - true - true - - Left - - - - - true - true - - true - - - <key>ru</key> - <value>Все действия</value> - - - ru - Все действия формы - - - ФормаВсеДействияExtendedTooltip - 63 - Label - true - true - - Left - - - Popup - - - CommonPicture.Подменю - - Picture - Normal - - Right true diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Module.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Module.bsl index f20e0612c..2de07f94b 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Module.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Module.bsl @@ -40,41 +40,42 @@ КонецЕсли; ПроверятьКорректность = ВидКонтактнойИнформации.ПроверятьКорректность; - Заголовок = ?(ПустаяСтрока(Параметры.Заголовок), Строка(ВидКонтактнойИнформации), Параметры.Заголовок); + ЭтоНовый = Ложь; - ЭтоНовый = Истина; - Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(Параметры.ЗначенияПолей) Тогда - ЭтоНовый = Ложь; - РезультатыЧтения = Новый Структура; - XDTOКонтактная = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзXML(Параметры.ЗначенияПолей, ТипКонтактнойИнформации, РезультатыЧтения); - Если РезультатыЧтения.Свойство("ТекстОшибки") Тогда - // Распознали с ошибками, сообщим при открытии. - ТекстПредупрежденияПриОткрытии = РезультатыЧтения.ТекстОшибки; - XDTOКонтактная.Представление = Параметры.Представление; - КонецЕсли; + ЗначенияПолей = ОпределитьЗначениеАдреса(Параметры); + + Если ПустаяСтрока(ЗначенияПолей) Тогда + Данные = УправлениеКонтактнойИнформацией.ОписаниеНовойКонтактнойИнформации(ТипКонтактнойИнформации); + ЭтоНовый = Истина; + ИначеЕсли УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(ЗначенияПолей) Тогда + Данные = УправлениеКонтактнойИнформациейСлужебный.СтрокаJSONВСтруктуру(ЗначенияПолей); Иначе - Если ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда - XDTOКонтактная = УправлениеКонтактнойИнформациейСлужебный.ДесериализацияТелефона(Параметры.ЗначенияПолей, Параметры.Представление, ТипКонтактнойИнформации); + + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(Параметры.ЗначенияПолей) Тогда + РезультатыЧтения = Новый Структура; + КонтактнаяИнформация = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзXML(Параметры.ЗначенияПолей, ТипКонтактнойИнформации, РезультатыЧтения); + Если РезультатыЧтения.Свойство("ТекстОшибки") Тогда + // Распознали с ошибками, сообщим при открытии. + ТекстПредупрежденияПриОткрытии = РезультатыЧтения.ТекстОшибки; + КонтактнаяИнформация.Представление = Параметры.Представление; + КонецЕсли; Иначе - XDTOКонтактная = УправлениеКонтактнойИнформациейСлужебный.ДесериализацияФакса(Параметры.ЗначенияПолей, Параметры.Представление, ТипКонтактнойИнформации); + Если ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда + КонтактнаяИнформация = УправлениеКонтактнойИнформациейСлужебный.ДесериализацияТелефона(Параметры.ЗначенияПолей, Параметры.Представление, ТипКонтактнойИнформации); + Иначе + КонтактнаяИнформация = УправлениеКонтактнойИнформациейСлужебный.ДесериализацияФакса(Параметры.ЗначенияПолей, Параметры.Представление, ТипКонтактнойИнформации); + КонецЕсли; КонецЕсли; + + Данные = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация, ТипКонтактнойИнформации); + КонецЕсли; - Если Параметры.Комментарий <> Неопределено Тогда - УправлениеКонтактнойИнформацией.УстановитьКомментарийКонтактнойИнформации(XDTOКонтактная, Параметры.Комментарий); - КонецЕсли; + ЗначениеРеквизитовПоКонтактнойИнформации(Данные); - ЗначениеРеквизитовПоКонтактнойИнформации(XDTOКонтактная); Элементы.Добавочный.Видимость = ВидКонтактнойИнформации.ТелефонCДобавочнымНомером; - - // Группа команд "все действия" зависит от интерфейса. - Если КлиентскоеПриложение.ТекущийВариантИнтерфейса() = ВариантИнтерфейсаКлиентскогоПриложения.Такси Тогда - Элементы.ФормаВсеДействия.Видимость = Ложь; - Иначе - Элементы.ОчиститьТелефон.Видимость = Ложь; - Элементы.ИзменитьФорму.Видимость = Ложь; - КонецЕсли; + Элементы.ОчиститьТелефон.Видимость = Ложь; Коды = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("Обработка.ВводКонтактнойИнформации.Форма.ВводТелефона", "КодыСтраныИГорода"); Если ТипЗнч(Коды) = Тип("Структура") Тогда @@ -97,6 +98,28 @@ КонецЕсли; КонецЕсли; + Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда + + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Представление", "ПодсказкаВвода", НСтр("ru ='Представление'")); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КомандаОК", "Картинка", БиблиотекаКартинок.ЗаписатьИЗакрыть); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КомандаОК", "Отображение", ОтображениеКнопки.Картинка); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Отмена", "Видимость", Ложь); + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КодСтраны", "ПоложениеЗаголовка", ПоложениеЗаголовкаЭлементаФормы.Лево); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КодГорода", "ПоложениеЗаголовка", ПоложениеЗаголовкаЭлементаФормы.Лево); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "НомерТелефона", "ПоложениеЗаголовка", ПоложениеЗаголовкаЭлементаФормы.Лево); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Добавочный", "ПоложениеЗаголовка", ПоложениеЗаголовкаЭлементаФормы.Лево); + + Если Элементы.КодГорода.СписокВыбора.Количество() < 2 Тогда + + Элементы.КодГорода.КнопкаВыпадающегоСписка = Неопределено; + + КонецЕсли; + + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -243,7 +266,7 @@ &НаСервере Функция РезультатВыбора() - Результат = Новый Структура("КонтактнаяИнформация, Представление, Комментарий, Вид, Тип, КонтактнаяИнформацияОписаниеДополнительныхРеквизитов"); + Результат = Новый Структура(); СписокВыбора = Элементы.КодГорода.СписокВыбора; ЭлементСписка = СписокВыбора.НайтиПоЗначению(КодГорода); @@ -262,21 +285,18 @@ Коды = Новый Структура("КодСтраны, КодГорода, СписокКодовГорода", КодСтраны, КодГорода, СписокВыбора.ВыгрузитьЗначения()); ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("Обработка.ВводКонтактнойИнформации.Форма.ВводТелефона", "КодыСтраныИГорода", Коды, НСтр("ru = 'Коды страны и города'")); - XDTOИнформация = КонтактнаяИнформацияПоЗначениюРеквизитов(); + КонтактнаяИнформация = КонтактнаяИнформацияПоЗначениюРеквизитов(); - Если ВозвращатьСписокЗначений Тогда - ДанныеВыбора = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтаруюСтруктуру(XDTOИнформация); - ДанныеВыбора = ДанныеВыбора.ЗначенияПолей; - Иначе - ДанныеВыбора = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOВXML(XDTOИнформация); - КонецЕсли; + ДанныеВыбора = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(КонтактнаяИнформация); - Результат.Вид = ВидКонтактнойИнформации; - Результат.Тип = ВидКонтактнойИнформации.Тип; - Результат.КонтактнаяИнформация = ДанныеВыбора; - Результат.Представление = XDTOИнформация.Представление; - Результат.Комментарий = XDTOИнформация.Комментарий; - Результат.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов; + Результат.Вставить("Вид", ВидКонтактнойИнформации); + Результат.Вставить("Тип", ТипКонтактнойИнформации); + Результат.Вставить("КонтактнаяИнформация", УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВXML(ДанныеВыбора, КонтактнаяИнформация.Value, ТипКонтактнойИнформации)); + Результат.Вставить("Значение", ДанныеВыбора); + Результат.Вставить("Представление", КонтактнаяИнформация.Value); + Результат.Вставить("Комментарий", КонтактнаяИнформация.Comment); + Результат.Вставить("КонтактнаяИнформацияОписаниеДополнительныхРеквизитов", + КонтактнаяИнформацияОписаниеДополнительныхРеквизитов); Возврат Результат КонецФункции @@ -306,49 +326,35 @@ &НаСервере Процедура ЗначениеРеквизитовПоКонтактнойИнформации(РедактируемаяИнформация) - Телефон = РедактируемаяИнформация.Состав; - // Общие реквизиты - Представление = РедактируемаяИнформация.Представление; - Комментарий = РедактируемаяИнформация.Комментарий; + Представление = РедактируемаяИнформация.Value; + Комментарий = РедактируемаяИнформация.Comment; // Копия комментария для анализа измененности. КопияКомментария = Комментарий; - КодСтраны = Телефон.КодСтраны; - КодГорода = Телефон.КодГорода; - НомерТелефона = Телефон.Номер; - Добавочный = Телефон.Добавочный; + КодСтраны = РедактируемаяИнформация.CountryCode; + КодГорода = РедактируемаяИнформация.AreaCode; + НомерТелефона = РедактируемаяИнформация.Number; + Добавочный = РедактируемаяИнформация.ExtNumber; КонецПроцедуры // Возвращает XTDO объект типа "Контактная информация" по значению реквизитов. &НаСервере Функция КонтактнаяИнформацияПоЗначениюРеквизитов() - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); - Результат = ФабрикаXDTO.Создать( ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация") ); + Результат = УправлениеКонтактнойИнформациейКлиентСервер.ОписаниеНовойКонтактнойИнформации(ТипКонтактнойИнформации); - Если ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда - Данные = ФабрикаXDTO.Создать( ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона") ); - Данные.КодСтраны = КодСтраны; - Данные.КодГорода = КодГорода; - Данные.Номер = НомерТелефона; - Данные.Добавочный = Добавочный; - Результат.Представление = УправлениеКонтактнойИнформациейСлужебный.ПредставлениеТелефона(Данные); - Иначе - Данные = ФабрикаXDTO.Создать( ФабрикаXDTO.Тип(ПространствоИмен, "НомерФакса") ); - Данные.КодСтраны = КодСтраны; - Данные.КодГорода = КодГорода; - Данные.Номер = НомерТелефона; - Данные.Добавочный = Добавочный; - Результат.Представление = УправлениеКонтактнойИнформациейСлужебный.ПредставлениеФакса(Данные); - КонецЕсли; - - Результат.Состав = Данные; - Результат.Комментарий = Комментарий; + Результат.CountryCode = КодСтраны; + Результат.AreaCode = КодГорода; + Результат.Number = НомерТелефона; + Результат.ExtNumber = Добавочный; + Результат.Value = УправлениеКонтактнойИнформациейКлиентСервер.СформироватьПредставлениеТелефона(КодСтраны, КодГорода, НомерТелефона, Добавочный, Комментарий); + Результат.Comment = Комментарий; Возврат Результат; + КонецФункции &НаКлиенте @@ -361,18 +367,10 @@ &НаКлиенте Процедура ЗаполнитьПредставлениеТелефонаСейчас() - ЗаполнитьПредставлениеТелефонаСервер(); + Представление = УправлениеКонтактнойИнформациейКлиентСервер.СформироватьПредставлениеТелефона(КодСтраны, КодГорода, НомерТелефона, Добавочный, Комментарий); КонецПроцедуры -&НаСервере -Процедура ЗаполнитьПредставлениеТелефонаСервер(XDTOКонтактная = Неопределено) - - Инфо = ?(XDTOКонтактная = Неопределено, КонтактнаяИнформацияПоЗначениюРеквизитов(), XDTOКонтактная); - Представление = Инфо.Представление; - -КонецПроцедуры - // Возвращает список ошибок заполнения в виде списка значений: // Представление - описание ошибки. // Значение - XPath для поля. @@ -435,8 +433,8 @@ НомерТелефона = ""; Добавочный = ""; Комментарий = ""; + Представление = ""; - ЗаполнитьПредставлениеТелефонаСервер(); Модифицированность = Истина; КонецПроцедуры @@ -466,5 +464,21 @@ КонецФункции +&НаСервере +Функция ОпределитьЗначениеАдреса(Параметры) + + Если Параметры.Свойство("Значение") Тогда + Если ПустаяСтрока(Параметры.Значение) И ЗначениеЗаполнено(Параметры.ЗначенияПолей) Тогда + ЗначенияПолей = Параметры.ЗначенияПолей; + Иначе + ЗначенияПолей = Параметры.Значение; + КонецЕсли; + Иначе + ЗначенияПолей = Параметры.ЗначенияПолей; + КонецЕсли; + Возврат ЗначенияПолей; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Form.form b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Form.form index 3a17c28a8..228f59034 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Form.form +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Form.form @@ -122,7 +122,6 @@ true true true - true Normal
    @@ -162,7 +161,6 @@ true true true - true Normal
    @@ -915,6 +913,24 @@ true + + Значение + + <key>ru</key> + <value>Значение</value> + + 9 + + String + + + + true + + + true + + ПредыдущаяДата diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Module.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Module.bsl index 18fa06b46..53b3711d4 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Module.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Module.bsl @@ -100,6 +100,7 @@ &НаКлиенте Процедура ИсторияПередНачаломИзменения(Элемент, Отказ) + Если Элемент.ТекущийЭлемент.Имя = "ИсторияДействуетС" Тогда Если ЭтоПерваяДата(Элемент.ТекущиеДанные.ДействуетС) Тогда Отказ = Истина; @@ -108,6 +109,7 @@ Иначе ОткрытьФормуРедактированияАдреса(Элементы.История.ТекущаяСтрока); КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -247,6 +249,7 @@ Иначе ДанныеСтроки = История.НайтиПоИдентификатору(ВыбраннаяСтрока); ПараметрыОткрытия.Вставить("ЗначенияПолей", ДанныеСтроки.ЗначенияПолей); + ПараметрыОткрытия.Вставить("Значение", ДанныеСтроки.Значение); ПараметрыОткрытия.Вставить("Представление", ДанныеСтроки.Представление); ПараметрыОткрытия.Вставить("ДействуетС", ДанныеСтроки.ДействуетС); ПараметрыОткрытия.Вставить("Комментарий", ДанныеСтроки.Комментарий); @@ -260,6 +263,7 @@ &НаКлиенте Процедура ПослеОтветаНаВопросПроУдаление(Результат, ДополнительныеПараметры) Экспорт + Удаление = Ложь; Если Результат = КодВозвратаДиалога.Да Тогда История.Удалить(История.НайтиПоИдентификатору(ДополнительныеПараметры.ИдентификаторСтроки)); КонецЕсли; @@ -322,6 +326,7 @@ Строка.ДействуетС = РезультатЗакрытия.ДействуетС; Строка.ЗначенияПолей = РезультатЗакрытия.КонтактнаяИнформация; + Строка.Значение = РезультатЗакрытия.Значение; Строка.Представление = РезультатЗакрытия.Представление; Строка.Комментарий = РезультатЗакрытия.Комментарий; Строка.Вид = РезультатЗакрытия.Вид; @@ -357,7 +362,9 @@ &НаСервере Функция КонтактнаяИнформацияXMLПоПредставлению(Текст, ВидКонтактнойИнформации) - Возврат УправлениеКонтактнойИнформацией.КонтактнаяИнформацияXMLПоПредставлению(Текст, ВидКонтактнойИнформации); + + Возврат УправлениеКонтактнойИнформацией.КонтактнаяИнформацияПоПредставлению(Текст, ВидКонтактнойИнформации); + КонецФункции #КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/ManagerModule.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/ManagerModule.bsl index fd1a0176f..c34d0a57c 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/ManagerModule.bsl @@ -37,7 +37,7 @@ // Функция ИмяФормыВводаКонтактнойИнформации(Знач ВидИнформации) - ТипИнформации = ТипВидаКонтактнойИнформации(ВидИнформации); + ТипИнформации = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ТипВидаКонтактнойИнформации(ВидИнформации); ВсеТипы = "Перечисление.ТипыКонтактнойИнформации."; Если ТипИнформации = ПредопределенноеЗначение(ВсеТипы + "Адрес") Тогда @@ -60,23 +60,6 @@ КонецФункции -Функция ТипВидаКонтактнойИнформации(Знач ВидИнформации) - Результат = Неопределено; - - Тип = ТипЗнч(ВидИнформации); - Если Тип = Тип("ПеречислениеСсылка.ТипыКонтактнойИнформации") Тогда - Результат = ВидИнформации; - ИначеЕсли Тип = Тип("СправочникСсылка.ВидыКонтактнойИнформации") Тогда - Результат = ВидИнформации.Тип; - ИначеЕсли ВидИнформации <> Неопределено Тогда - Данные = Новый Структура("Тип"); - ЗаполнитьЗначенияСвойств(Данные, ВидИнформации); - Результат = Данные.Тип; - КонецЕсли; - - Возврат Результат; -КонецФункции - #КонецОбласти #КонецЕсли diff --git a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/РедактированиеПериодаИОтбора/Form.form b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/РедактированиеПериодаИОтбора/Form.form index 1e758e97b..84bdac977 100644 --- a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/РедактированиеПериодаИОтбора/Form.form +++ b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/РедактированиеПериодаИОтбора/Form.form @@ -82,6 +82,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/Форма/Module.bsl index 7fd60c8ae..1b7859936 100644 --- a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/Форма/Module.bsl @@ -182,10 +182,11 @@ &НаКлиенте Процедура ВыполнитьОперацию(Команда) ИдентификаторЗадания = Неопределено; + Если ВидОперации = "Загрузка" Тогда - ПодключитьОбработчикОжидания("ЗагрузитьСообщение",1,Истина); + ПодключитьОбработчикОжидания("ЗагрузитьСообщение", 0.1, Истина); Иначе - ПодключитьОбработчикОжидания("ВыгрузитьДанные",1,Истина); + ПодключитьОбработчикОжидания("ВыгрузитьДанные", 0.1, Истина); КонецЕсли; КонецПроцедуры @@ -314,7 +315,7 @@ &НаКлиенте Процедура ВыгрузитьДанные() - Элементы.ДекорацияПоясняющийТекстДлительнойОперации.Заголовок = НСтр("ru='Выполняется выгрузка данных...'"); + Элементы.ДекорацияПоясняющийТекстДлительнойОперации.Заголовок = НСтр("ru = 'Выполняется выгрузка данных...'"); Элементы.ВыгрузкаЗагрузка.ТекущаяСтраница = Элементы.Ожидание; УстановитьВидимостьДоступностьКнопок(Ложь); МассивСообщений = Неопределено; diff --git a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/ObjectModule.bsl b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/ObjectModule.bsl index f2c451c9e..52167d0db 100644 --- a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/ObjectModule.bsl @@ -13,7 +13,6 @@ Функция КомпонентыОбмена(НаправлениеОбмена, ВерсияФорматаОбменаПриЗагрузке = "") КомпонентыОбмена = ОбменДаннымиXDTOСервер.ИнициализироватьКомпонентыОбмена(НаправлениеОбмена); - ТекВерсияФормата = ?(НаправлениеОбмена = "Отправка", ВерсияФормата, ВерсияФорматаОбменаПриЗагрузке); Если ЗначениеЗаполнено(УзелОбмена) И НаправлениеОбмена = "Отправка" Тогда КомпонентыОбмена.ЭтоОбменЧерезПланОбмена = Истина; @@ -23,7 +22,6 @@ Иначе КомпонентыОбмена.ЭтоОбменЧерезПланОбмена = Ложь; КонецЕсли; - КомпонентыОбмена.КлючСообщенияЖурналаРегистрации = НСтр("ru = 'Перенос данных через буфер обмена'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); КомпонентыОбмена.ВерсияФорматаОбмена = ТекВерсияФормата; КомпонентыОбмена.XMLСхема = "http://v8.1c.ru/edi/edi_stnd/EnterpriseData/" + ТекВерсияФормата; @@ -71,7 +69,9 @@ // Возвращаемое значение: // Строка - Адрес во временном хранилище, куда помещен результат выгрузки. Функция РезультатВыгрузкиВXML(СтруктураПараметров, АдресДляРазмещенияРезультата = Неопределено) Экспорт + МестоВыгрузки = СтруктураПараметров.МестоВыгрузки; + Если СтруктураПараметров.Свойство("ЭтоФоновоеЗадание") Тогда ЗаполнитьЗначенияСвойств(ЭтотОбъект, СтруктураПараметров); КонецЕсли; @@ -86,8 +86,8 @@ + Символы.ПС + РезультатВыгрузки.ТекстОшибки + Символы.ПС + НСтр("ru = 'Данные могут быть выгружены не полностью."); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); - ИначеЕсли НЕ РезультатВыгрузки.ЕстьВыгруженныеОбъекты Тогда - ТекстСообщения = НСтр("ru='Не найдено ни одного объекта к выгрузке.'"); + ИначеЕсли Не РезультатВыгрузки.ЕстьВыгруженныеОбъекты Тогда + ТекстСообщения = НСтр("ru = 'Не найдено ни одного объекта к выгрузке.'"); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); КонецЕсли; @@ -114,7 +114,9 @@ АдресХранения = АдресДляРазмещенияРезультата; КонецЕсли; КонецЕсли; + Возврат АдресХранения; + КонецФункции // Выгружает объекты по настройкам, указанным в реквизитах обработки и возвращает результат выгрузки. @@ -135,12 +137,15 @@ // Открываем файл обмена. ОбменДаннымиXDTOСервер.ОткрытьФайлВыгрузки(КомпонентыОбмена); - ЕстьВыгруженныеОбъекты = Ложь; + ЕстьВыгруженныеОбъекты = Ложь; + ЕстьОшибкиПередКонвертацией = Ложь; + УстановитьПривилегированныйРежим(Истина); Попытка КомпонентыОбмена.МенеджерОбмена.ПередКонвертацией(КомпонентыОбмена); Исключение + ЕстьОшибкиПередКонвертацией = Истина; ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Событие: %1. |Обработчик: ПередКонвертацией. | @@ -148,11 +153,14 @@ |%2.'"), КомпонентыОбмена.НаправлениеОбмена, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение ТекстОшибки; + ОбменДаннымиXDTOСервер.ЗаписатьВПротоколВыполнения(КомпонентыОбмена, ТекстОшибки); КонецПопытки; - Если ЗначениеЗаполнено(УзелОбмена) Тогда + Если ЗначениеЗаполнено(УзелОбмена) + И Не ЕстьОшибкиПередКонвертацией Тогда + СоставПланаОбмена = УзелОбмена.Метаданные().Состав; + // Внутреннее соединение с основной таблицей необходимо для исключения из выгрузки битых ссылок. ТекстЗапроса = "ВЫБРАТЬ @@ -162,8 +170,12 @@ | ВНУТРЕННЕЕ СОЕДИНЕНИЕ #ПолноеИмя# КАК ОсновнаяТаблица | ПО ОсновнаяТаблица.Ссылка = ТаблицаИзменений.Ссылка |ГДЕ ТаблицаИзменений.Узел = &Узел"; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Узел", УзелОбмена); + Для Каждого ЭлементСостава Из СоставПланаОбмена Цикл - Если НЕ ОбщегоНазначения.ЭтоОбъектСсылочногоТипа(ЭлементСостава.Метаданные) Тогда + Если Не ОбщегоНазначения.ЭтоОбъектСсылочногоТипа(ЭлементСостава.Метаданные) Тогда Продолжить; КонецЕсли; ПолноеИмяОбъекта = ЭлементСостава.Метаданные.ПолноеИмя(); @@ -172,16 +184,16 @@ Продолжить; КонецЕсли; - Запрос = Новый Запрос; Запрос.Текст = СтрЗаменить(ТекстЗапроса, "#ПолноеИмя#", ПолноеИмяОбъекта); - Запрос.УстановитьПараметр("Узел", УзелОбмена); + Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл ОбменДаннымиXDTOСервер.ВыгрузкаОбъектаВыборки(КомпонентыОбмена, Выборка.Ссылка.ПолучитьОбъект(), ПравилоОбработки); - ЕстьВыгруженныеОбъекты = Истина; + ЕстьВыгруженныеОбъекты = ЕстьВыгруженныеОбъекты Или Не КомпонентыОбмена.ФлагОшибки; КонецЦикла; КонецЦикла; КонецЕсли; + Если СписокДополнениеКВыгрузке.Количество() > 0 Тогда Для Каждого ЭлементСписка Из СписокДополнениеКВыгрузке Цикл СсылкаВыгрузки = ЭлементСписка.Значение; @@ -200,30 +212,34 @@ КонецЦикла; КонецЕсли; - Попытка - КомпонентыОбмена.МенеджерОбмена.ПослеКонвертации(КомпонентыОбмена); - Исключение - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Событие: %1. - |Обработчик: ПослеКонвертации. - | - |Ошибка выполнения обработчика. - |%2.'"), - КомпонентыОбмена.НаправлениеОбмена, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение ТекстОшибки; - КонецПопытки; + Если Не ЕстьОшибкиПередКонвертацией Тогда + Попытка + КомпонентыОбмена.МенеджерОбмена.ПослеКонвертации(КомпонентыОбмена); + Исключение + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Событие: %1. + |Обработчик: ПослеКонвертации. + | + |Ошибка выполнения обработчика. + |%2.'"), + КомпонентыОбмена.НаправлениеОбмена, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ОбменДаннымиXDTOСервер.ЗаписатьВПротоколВыполнения(КомпонентыОбмена, ТекстОшибки); + КонецПопытки; + КонецЕсли; УстановитьПривилегированныйРежим(Ложь); + КомпонентыОбмена.ФайлОбмена.ЗаписатьКонецЭлемента(); // Body + КомпонентыОбмена.ФайлОбмена.ЗаписатьКонецЭлемента(); // Message + ТекстВыгрузки = КомпонентыОбмена.ФайлОбмена.Закрыть(); - ТекстВыгрузки = ТекстВыгрузки + Символы.ПС + "" + Символы.ПС + ""; РезультатВыгрузки = Новый Структура; - РезультатВыгрузки.Вставить("ТекстВыгрузки", ТекстВыгрузки); - РезультатВыгрузки.Вставить("ЕстьВыгруженныеОбъекты", ЕстьВыгруженныеОбъекты); - РезультатВыгрузки.Вставить("ЕстьОшибки", КомпонентыОбмена.ФлагОшибки); - РезультатВыгрузки.Вставить("ТекстОшибки", КомпонентыОбмена.СтрокаСообщенияОбОшибке); - РезультатВыгрузки.Вставить("ВыгруженныеОбъекты", КомпонентыОбмена.ВыгруженныеОбъекты); + РезультатВыгрузки.Вставить("ТекстВыгрузки", ТекстВыгрузки); + РезультатВыгрузки.Вставить("ЕстьВыгруженныеОбъекты", ЕстьВыгруженныеОбъекты); + РезультатВыгрузки.Вставить("ЕстьОшибки", КомпонентыОбмена.ФлагОшибки); + РезультатВыгрузки.Вставить("ТекстОшибки", КомпонентыОбмена.СтрокаСообщенияОбОшибке); + РезультатВыгрузки.Вставить("ВыгруженныеОбъекты", КомпонентыОбмена.ВыгруженныеОбъекты); РезультатВыгрузки.Вставить("ВыгруженныеПоСсылкеОбъекты", КомпонентыОбмена.ВыгруженныеПоСсылкеОбъекты); Возврат РезультатВыгрузки; diff --git a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Form.form b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Form.form index 41fe42ea4..c01c8eec5 100644 --- a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Form.form @@ -98,6 +98,7 @@ Page + HorizontalIfPossible auto false @@ -484,6 +485,7 @@ Page + HorizontalIfPossible auto false @@ -582,6 +584,7 @@ Page + HorizontalIfPossible auto false @@ -738,6 +741,7 @@ Page + HorizontalIfPossible auto false @@ -848,6 +852,7 @@ Page + HorizontalIfPossible auto false @@ -1068,6 +1073,7 @@ Page + HorizontalIfPossible auto false @@ -1156,6 +1162,7 @@ Page + HorizontalIfPossible auto false @@ -1672,6 +1679,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1937,6 +1945,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2866,6 +2875,23 @@ true + + ЕстьСтраницаЗапросаПароля + + <key>ru</key> + <value>Есть страница запроса пароля</value> + + 37 + + Boolean + + + true + + + true + + ПерейтиВЖурналРегистрации diff --git a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Module.bsl index 6701984fe..92726c873 100644 --- a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Module.bsl @@ -60,7 +60,7 @@ НеНапоминатьОДолгойСинхронизации = Истина; КонецЕсли; - ВидТранспортаСообщений = РегистрыСведений.НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); + ВидТранспортаСообщений = РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); // При обмене в распределенной информационной базе через веб-сервис всегда переопределяем параметры аутентификации // (пользователь и пароль), сохраненные в информационной базе. @@ -84,7 +84,7 @@ Иначе // Это не РИБ, читаем данные из настроек транспорта. - НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспортаWS(УзелИнформационнойБазы); + НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспортаWS(УзелИнформационнойБазы); ПарольСинхронизацииЗадан = НастройкиТранспорта.WSЗапомнитьПароль; Если ПарольСинхронизацииЗадан Тогда ПарольСинхронизацииСохранен = Истина; @@ -135,6 +135,8 @@ Иначе + ЕстьСтраницаЗапросаПароля = Истина; + Если ВыполнитьОтправкуДанных Тогда СценарийОбменаЧерезВебСервисСЗапросомПароля_ОтправкаПолучениеОтправка(); Иначе @@ -677,7 +679,7 @@ Новый Структура("ИспользоватьТекущегоПользователя, Пароль", ИспользоватьТекущегоПользователяДляАутентификации, ?(ПарольСинхронизацииЗадан, Неопределено, WSПароль))); - ПараметрыПодключения = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспортаWS(УзелИнформационнойБазы, ПараметрыАутентификации); + ПараметрыПодключения = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспортаWS(УзелИнформационнойБазы, ПараметрыАутентификации); СинхронизацияДанныхОтключена = Ложь; СообщениеОбОшибкеПользователю = ""; @@ -685,10 +687,14 @@ СообщениеОбОшибке = НСтр("ru = 'Не удалось подключиться к приложению в Интернете, по причине ""%1"". |Убедитесь, что: |- введен правильный пароль; - |- приложение доступно по указанному в настройках адресу. + |- указан корректный адрес для подключения; + |- приложение доступно по указанному в настройках адресу; + |- настройка синхронизации не была удалена в приложении в Интернете. |Повторите попытку синхронизации.'"); СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, СообщениеОбОшибкеПользователю); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке); + Если ЕстьСтраницаЗапросаПароля Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке); + КонецЕсли; СинхронизацияДанныхОтключена = Истина; КонецЕсли; @@ -757,16 +763,24 @@ &НаКлиенте Функция Подключаемый_ЗагрузкаДанных_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) - ИнициализироватьПеременныеОбработки(); + + Если СинхронизацияДанныхОтключена Тогда + ПропуститьСтраницу = Истина; + Иначе + ИнициализироватьПеременныеОбработки(); + КонецЕсли; + КонецФункции &НаКлиенте Функция Подключаемый_ЗагрузкаДанных_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) - ПерейтиДалее = Ложь; - ФоновоеЗаданиеВыполняемоеДействие = 1; - - Если Не СинхронизацияДанныхОтключена Тогда + Если СинхронизацияДанныхОтключена Тогда + ПерейтиДалее = Истина; + Иначе + ПерейтиДалее = Ложь; + + ФоновоеЗаданиеВыполняемоеДействие = 1; ФоновоеЗаданиеЗапуститьНаКлиенте(ФоновоеЗаданиеВыполняемоеДействие, "Обработки.ВыполнениеОбменаДанными.ВыполнитьЗапускОбменаДанными", Отказ); @@ -785,18 +799,28 @@ &НаКлиенте Функция Подключаемый_ВыгрузкаДанных_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) - ИнициализироватьПеременныеОбработки(); + + Если СинхронизацияДанныхОтключена Тогда + ПропуститьСтраницу = Истина; + Иначе + ИнициализироватьПеременныеОбработки(); + КонецЕсли; + КонецФункции &НаКлиенте Функция Подключаемый_ВыгрузкаДанных_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) - ПерейтиДалее = Ложь; - ФоновоеЗаданиеВыполняемоеДействие = 2; - - ФоновоеЗаданиеЗапуститьНаКлиенте(ФоновоеЗаданиеВыполняемоеДействие, - "Обработки.ВыполнениеОбменаДанными.ВыполнитьЗапускОбменаДанными", - Отказ); + Если СинхронизацияДанныхОтключена Тогда + ПерейтиДалее = Истина; + Иначе + ПерейтиДалее = Ложь; + + ФоновоеЗаданиеВыполняемоеДействие = 2; + ФоновоеЗаданиеЗапуститьНаКлиенте(ФоновоеЗаданиеВыполняемоеДействие, + "Обработки.ВыполнениеОбменаДанными.ВыполнитьЗапускОбменаДанными", + Отказ); + КонецЕсли; КонецФункции @@ -895,10 +919,11 @@ Функция Подключаемый_ОжиданиеПроверкиПодключения_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) ПроверитьПодключение(); - Если СинхронизацияДанныхОтключена Тогда + Если СинхронизацияДанныхОтключена + И ЕстьСтраницаЗапросаПароля Тогда Отказ = Истина; КонецЕсли; - ПерейтиДалее = НЕ Отказ; + ПерейтиДалее = Не Отказ; КонецФункции @@ -1212,7 +1237,6 @@ Процедура СценарийОбменаЧерезВебСервис() ТаблицаПереходов.Очистить(); - ТаблицаПереходовНоваяСтрока(1, "ОжиданиеСинхронизацииДанных",, Истина, "ОжиданиеПроверкиПодключения_ОбработкаДлительнойОперации"); ТаблицаПереходовНоваяСтрока(2, "ОжиданиеСинхронизацииДанных", "ЗагрузкаДанных_ПриОткрытии", Истина, "ЗагрузкаДанных_ОбработкаДлительнойОперации"); ТаблицаПереходовНоваяСтрока(3, "ОжиданиеСинхронизацииДанных",, Истина, "ЗагрузкаДанных_ОбработкаДлительнойОперации_Окончание"); @@ -1285,4 +1309,4 @@ КонецПроцедуры -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Form.form b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Form.form index 6a02b4a1c..8000547ca 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Form.form +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Form.form @@ -1123,6 +1123,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -1338,6 +1339,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Module.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Module.bsl index 329df3325..6d7ca79f5 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Module.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Module.bsl @@ -12,7 +12,6 @@ Формула = Параметры.Формула; ИсходнаяФормула = Параметры.Формула; - Параметры.Свойство("СтроковаяФормула", СтроковаяФормула); Параметры.Свойство("ИспользуетсяДеревоОперандов", ИспользуетсяДеревоОперандов); Элементы.ГруппаОперандыСтраницы.ТекущаяСтраница = Элементы.СтраницаЧисловыхОперандов; @@ -40,7 +39,7 @@ Ложь); УстановитьВидимость(); - + КонецПроцедуры &НаКлиенте @@ -65,7 +64,7 @@ Ответ = РезультатВопроса; Если Ответ = КодВозвратаДиалога.Да Тогда - Если ПроверитьФормулу(Формула, Операнды(), "Формула", СтроковаяФормула) Тогда + Если ПроверитьФормулу(Формула, Операнды()) Тогда Модифицированность = Ложь; Закрыть(Формула); КонецЕсли; @@ -265,7 +264,7 @@ ОчиститьСообщения(); - Если ПроверитьФормулу(Формула, Операнды(), "Формула", СтроковаяФормула) Тогда + Если ПроверитьФормулу(Формула, Операнды()) Тогда Закрыть(Формула); КонецЕсли; @@ -275,7 +274,7 @@ Процедура Проверить(Команда) ОчиститьСообщения(); - ПроверитьФормулуИнтерактивно(Формула, Операнды(), "Формула", СтроковаяФормула); + ПроверитьФормулуИнтерактивно(Формула, Операнды()); КонецПроцедуры @@ -610,54 +609,33 @@ КонецФункции &НаКлиенте -Функция ПроверитьФормулу(Формула, Операнды, Знач Поле = "", СтроковаяФормула = Ложь) +Функция ПроверитьФормулу(Формула, Операнды) - ПутьКДанным = ""; - Результат = Истина; - - Если ЗначениеЗаполнено(Формула) Тогда - - Если СтроковаяФормула Тогда - ТекстРасчета = """Строка"" + " + Формула; - ЗначениеЗамены = """1"""; - Иначе - ЗначениеЗамены = 1; - ТекстРасчета = Формула; - КонецЕсли; - - Для Каждого Операнд Из Операнды Цикл - ТекстРасчета = СтрЗаменить(ТекстРасчета, ПолучитьТекстОперандаДляВставки(Операнд), ЗначениеЗамены); - КонецЦикла; - - Если СтрНачинаетсяС(ТекстРасчета, "=") Тогда - ТекстРасчета = Сред(ТекстРасчета, 2); - КонецЕсли; - - Попытка - РезультатРасчета = Вычислить(ТекстРасчета); - - Если СтроковаяФормула Тогда - ТекстПроверки = СтрЗаменить(Формула, " ", ""); - ОтсутствиеРазделителей = СтрНайти(ТекстПроверки, "]["); - Если ОтсутствиеРазделителей > 0 Тогда - СообщитьПользователю( - НСтр("ru='В формуле обнаружены ошибки. Между операндами должен присутствовать оператор или разделитель'"), - Поле, - ПутьКДанным); - Результат = Ложь; - КонецЕсли; - КонецЕсли; - Исключение - Результат = Ложь; - СообщитьПользователю( - НСтр("ru='В формуле обнаружены ошибки. Проверьте формулу. Формулы должны составляться по правилам написания выражений на встроенном языке 1С:Предприятия.'"), - Поле, - ПутьКДанным); - КонецПопытки; - + Если Не ЗначениеЗаполнено(Формула) Тогда + Возврат Истина; КонецЕсли; - Возврат Результат; + ЗначениеЗамены = """1"""; + + ТекстРасчета = Формула; + Для Каждого Операнд Из Операнды Цикл + ТекстРасчета = СтрЗаменить(ТекстРасчета, ПолучитьТекстОперандаДляВставки(Операнд), ЗначениеЗамены); + КонецЦикла; + + Если СтрНачинаетсяС(СокрЛ(ТекстРасчета), "=") Тогда + ТекстРасчета = Сред(СокрЛ(ТекстРасчета), 2); + КонецЕсли; + + Попытка + РезультатРасчета = Вычислить(ТекстРасчета); + Исключение + ТекстОшибки = НСтр("ru = 'В формуле обнаружены ошибки. Проверьте формулу. + |Формулы должны составляться по правилам написания выражений на встроенном языке 1С:Предприятия.'"); + СообщитьПользователю(ТекстОшибки, , "Формула"); + Возврат Ложь; + КонецПопытки; + + Возврат Истина; КонецФункции @@ -695,12 +673,11 @@ КонецФункции - &НаКлиенте -Процедура ПроверитьФормулуИнтерактивно(Формула, Операнды, Знач Поле, СтроковаяФормула = Ложь) +Процедура ПроверитьФормулуИнтерактивно(Формула, Операнды) Если ЗначениеЗаполнено(Формула) Тогда - Если ПроверитьФормулу(Формула, Операнды, Поле, СтроковаяФормула) Тогда + Если ПроверитьФормулу(Формула, Операнды) Тогда ПоказатьОповещениеПользователя( НСтр("ru = 'В формуле ошибок не обнаружено'"), , diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Form.form b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Form.form index 2405b912f..fc20b4d8b 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Form.form @@ -121,6 +121,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <representation>WeakSeparation</representation> <showLeftMargin>true</showLeftMargin> @@ -457,6 +458,7 @@ <autoFill>true</autoFill> </contextMenu> <autoMaxWidth>true</autoMaxWidth> + <height>5</height> <autoMaxHeight>true</autoMaxHeight> <autoMaxRowsCount>true</autoMaxRowsCount> <selectionMode>MultiRow</selectionMode> @@ -573,6 +575,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <representation>NormalSeparation</representation> <showLeftMargin>true</showLeftMargin> @@ -745,9 +748,9 @@ <headerHorizontalAlign>Left</headerHorizontalAlign> <showInFooter>true</showInFooter> <extInfo xsi:type="form:TextDocFieldExtInfo"> - <width>50</width> + <width>20</width> <autoMaxWidth>true</autoMaxWidth> - <height>10</height> + <height>5</height> <autoMaxHeight>true</autoMaxHeight> <horizontalStretch>true</horizontalStretch> <verticalStretch>true</verticalStretch> @@ -1102,6 +1105,7 @@ <changeRowSet>true</changeRowSet> <changeRowOrder>true</changeRowOrder> <autoMaxWidth>true</autoMaxWidth> + <height>3</height> <autoMaxHeight>true</autoMaxHeight> <autoMaxRowsCount>true</autoMaxRowsCount> <headerHeight>1</headerHeight> @@ -1179,6 +1183,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>AlwaysHorizontal</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -1234,6 +1239,7 @@ <headerHorizontalAlign>Left</headerHorizontalAlign> <showInFooter>true</showInFooter> <extInfo xsi:type="form:RadioButtonsFieldExtInfo"> + <columnsCount>2</columnsCount> <choiceList> <presentation> <key>ru</key> @@ -1293,6 +1299,7 @@ <headerHorizontalAlign>Left</headerHorizontalAlign> <showInFooter>true</showInFooter> <extInfo xsi:type="form:RadioButtonsFieldExtInfo"> + <columnsCount>2</columnsCount> <choiceList> <presentation> <key>ru</key> @@ -1335,6 +1342,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>AlwaysHorizontal</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -1808,6 +1816,7 @@ <autoMaxHeight>true</autoMaxHeight> <placementArea>UserCmds</placementArea> <representationInContextMenu>Auto</representationInContextMenu> + <locationInCommandBar>InCommandBarAndInAdditionalSubmenu</locationInCommandBar> </items> <horizontalAlign>Left</horizontalAlign> <autoFill>true</autoFill> @@ -1907,6 +1916,7 @@ <autoFill>true</autoFill> </contextMenu> <autoMaxWidth>true</autoMaxWidth> + <height>3</height> <autoMaxHeight>true</autoMaxHeight> <autoMaxRowsCount>true</autoMaxRowsCount> <selectionMode>MultiRow</selectionMode> @@ -2123,6 +2133,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <verticalAlign>Center</verticalAlign> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> @@ -2152,6 +2163,7 @@ </extendedTooltip> <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> + <group>HorizontalIfPossible</group> <showTitle>auto</showTitle> <scrollOnCompress>false</scrollOnCompress> </extInfo> @@ -2249,6 +2261,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <verticalAlign>Center</verticalAlign> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> @@ -2467,6 +2480,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Module.bsl index 7f85705fe..5c2752864 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Module.bsl @@ -244,7 +244,7 @@ КонецЕсли; Если Не ПраваВыполненияКода.ДоступноВыполнениеКодаВНебезопасномРежиме И Объект.РежимВыполнения = 1 Тогда - Объект.РежимВыполнения = 0; // безопасный режим + Объект.РежимВыполнения = 0; // Переключаем на безопасный режим КонецЕсли; КонецЕсли; @@ -800,13 +800,13 @@ &НаСервере Процедура ЗагрузитьНастройкиОбработки() - Объект.ИзменятьВТранзакции = Истина; - Объект.ПрерыватьПриОшибке = Истина; - Объект.ТипОперации = "ВвестиЗначения"; - ТОНастройкаПорции = 1; - ТОПроцентОбъектовВПорции = 100; - ТОЧислоОбъектовВПорции = 1; - ОбрабатыватьРекурсивно = Ложь; + Объект.ИзменятьВТранзакции = Истина; + Объект.ПрерыватьПриОшибке = Истина; + Объект.ТипОперации = "ВвестиЗначения"; + ТОНастройкаПорции = 1; + ТОПроцентОбъектовВПорции = 100; + ТОЧислоОбъектовВПорции = 1; + ОбрабатыватьРекурсивно = Ложь; Объект.ПоказыватьСлужебныеРеквизиты = Ложь; СтруктураНастроек = ХранилищеОбщихНастроекЗагрузить( @@ -827,10 +827,10 @@ ДоступноВыполнениеКода = ДоступноВыполнениеКода(); Элементы.ПроизвольныйАлгоритм.Видимость = ДоступноВыполнениеКода; Элементы.ТипОперации.Видимость = ДоступноВыполнениеКода; - + ДоступноВыполнениеКодаВНебезопасномРежиме = ДоступноВыполнениеКодаВНебезопасномРежиме(); Элементы.РежимВыполнения.Видимость = ДоступноВыполнениеКодаВНебезопасномРежиме; - + КонецПроцедуры // В модели сервиса, базовой конфигурации или без права АдминистраторСистемы нельзя выполнять произвольный алгоритм. @@ -2100,6 +2100,7 @@ ТаблицаФормы.ИзменятьСоставСтрок = Ложь; ТаблицаФормы.КартинкаСтрок = КартинкаВидыОпераций(); ТаблицаФормы.ПутьКДаннымКартинкиСтроки = ИмяРеквизита + ".ВидОперации"; + ТаблицаФормы.Высота = 5; Для Каждого ОписаниеКолонки Из КолонкиТаблиц Цикл Если ОписаниеКолонки.ВидПоля = Неопределено Тогда @@ -3953,11 +3954,9 @@ КонецЕсли; #Иначе Модуль = Вычислить(Имя); -#Если НЕ ВебКлиент Тогда Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда ВызватьИсключение ПодставитьПараметрыВСтроку(НСтр("ru = 'Общий модуль ""%1"" не найден.'"), Имя); КонецЕсли; -#КонецЕсли #КонецЕсли Возврат Модуль; diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Help/ru.html b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Help/ru.html index ff46d0c53..54510214f 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Help/ru.html +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Help/ru.html @@ -44,6 +44,8 @@ <ul><li> <div>После выбора нужных реквизитов с помощью кнопки выберите <strong>Ввести новые значения</strong>, воспользуйтесь <a href="#A1">стандартными командами</a> для их изменения.</div></li></ul><h3>Выполнить произвольный алгоритм</h3> <ul><li> +<div>Эта возможность предоставляется только при работе с программой локально на компьютере, и недоступна при работе в приложении через Интернет.</div> +</li><li> <div>Для исправления записей можно использовать произвольный алгоритм. Это может быть необходимо в следующих случаях:</div> <ul><li> <div>Исправление части некорректных данных объекта по гибкому условию;</div> @@ -66,7 +68,7 @@ <div><strong>Автоматически</strong>;</div> </li><li> <div><strong>В коде алгоритма</strong> - в  этом случае необходимо в алгоритм включить строку, которая отвечает за запись объекта.</div></li></ul></li><li> -<div>С помощью переключателя <strong>Режим выполнения</strong> выберите <strong>Безопасный</strong> или <strong>Небезопасный режим</strong> выполнения. Небезопасный режим выполнения не доступен в приложении в Интернете и базовой версии.</div> +<div>С помощью переключателя <strong>Режим выполнения</strong> выберите <strong>Безопасный</strong> или <strong>Небезопасный режим</strong> выполнения. Небезопасный режим выполнения не доступен базовой версии.</div> </li><li> <div>Для запуска алгоритма нажмите кнопку <strong>Выполнить</strong>.</div> </li><li> diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ObjectModule.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ObjectModule.bsl index 247f17f8b..f7edd7ecc 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ObjectModule.bsl @@ -752,7 +752,7 @@ КонецЕсли; ВерсияБСП = МодульСтандартныеПодсистемыСервер.ВерсияБиблиотеки(); - Возврат СравнитьВерсии(ВерсияБСП, "2.3.3.9") >= 0; + Возврат СравнитьВерсии(ВерсияБСП, "2.4.1.1") >= 0; КонецФункции diff --git a/SSL/src/DataProcessors/ДоступныеАнкеты/Forms/АрхивАнкет/Module.bsl b/SSL/src/DataProcessors/ДоступныеАнкеты/Forms/АрхивАнкет/Module.bsl index c2a1d5077..becd5cf6b 100644 --- a/SSL/src/DataProcessors/ДоступныеАнкеты/Forms/АрхивАнкет/Module.bsl +++ b/SSL/src/DataProcessors/ДоступныеАнкеты/Forms/АрхивАнкет/Module.bsl @@ -13,9 +13,9 @@ Если Параметры.Свойство("Респондент") Тогда Объект.Респондент = Параметры.Респондент; Иначе + УстановитьРеспондентаСогласноТекущемуВнешнемуПользователю(); КонецЕсли; - - УстановитьРеспондентаСогласноТекущемуВнешнемуПользователю(); + УстановитьПараметрыДинамическогоСпискаДереваАнкет(); КонецПроцедуры @@ -66,7 +66,6 @@ Иначе Объект.Респондент = ВнешниеПользователи.ПолучитьОбъектАвторизацииВнешнегоПользователя(ТекущийПользователь); КонецЕсли; - УстановитьПараметрыДинамическогоСпискаДереваАнкет(); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ДоступныеАнкеты/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ДоступныеАнкеты/Forms/Форма/Module.bsl index 4e7338922..9991b3e9e 100644 --- a/SSL/src/DataProcessors/ДоступныеАнкеты/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ДоступныеАнкеты/Forms/Форма/Module.bsl @@ -8,11 +8,17 @@ Возврат; КонецЕсли; - ТекущийПользователь = Пользователи.АвторизованныйПользователь(); - Если ТипЗнч(ТекущийПользователь) <> Тип("СправочникСсылка.ВнешниеПользователи") Тогда - Объект.Респондент = ТекущийПользователь; - Иначе - Объект.Респондент = ВнешниеПользователи.ПолучитьОбъектАвторизацииВнешнегоПользователя(ТекущийПользователь); + Объект.РежимАнкетирования = Перечисления.РежимыАнкетирования.Анкета; + Если Параметры.Свойство("РежимАнкетирования") Тогда + Объект.РежимАнкетирования = Параметры.РежимАнкетирования; + Объект.Респондент = Параметры.Респондент; + Иначе + ТекущийПользователь = Пользователи.АвторизованныйПользователь(); + Если ТипЗнч(ТекущийПользователь) <> Тип("СправочникСсылка.ВнешниеПользователи") Тогда + Объект.Респондент = ТекущийПользователь; + Иначе + Объект.Респондент = ВнешниеПользователи.ПолучитьОбъектАвторизацииВнешнегоПользователя(ТекущийПользователь); + КонецЕсли; КонецЕсли; ТаблицаАнкетРеспондента(); @@ -43,25 +49,20 @@ КонецЕсли; Если ТипЗнч(ТекущиеДанные.АнкетаОпрос) = Тип("ДокументСсылка.Анкета") Тогда - СтруктураПараметров = Новый Структура; СтруктураПараметров.Вставить("Ключ",ТекущиеДанные.АнкетаОпрос); СтруктураПараметров.Вставить("ТолькоФормаЗаполнения",Истина); - + СтруктураПараметров.Вставить("РежимАнкетирования", Объект.РежимАнкетирования); ОткрытьФорму("Документ.Анкета.Форма.ФормаДокумента",СтруктураПараметров,Элемент); - ИначеЕсли ТипЗнч(ТекущиеДанные.АнкетаОпрос) = Тип("ДокументСсылка.НазначениеОпросов") Тогда - СтруктураПараметров = Новый Структура; ЗначенияЗаполнения = Новый Структура; - ЗначенияЗаполнения.Вставить("Респондент",Объект.Респондент); ЗначенияЗаполнения.Вставить("Опрос",ТекущиеДанные.АнкетаОпрос); + ЗначенияЗаполнения.Вставить("РежимАнкетирования", Объект.РежимАнкетирования); СтруктураПараметров.Вставить("ЗначенияЗаполнения",ЗначенияЗаполнения); СтруктураПараметров.Вставить("ТолькоФормаЗаполнения",Истина); - ОткрытьФорму("Документ.Анкета.Форма.ФормаДокумента",СтруктураПараметров,Элемент); - КонецЕсли; КонецПроцедуры diff --git a/SSL/src/DataProcessors/ДоступныеАнкеты/ДоступныеАнкеты.mdo b/SSL/src/DataProcessors/ДоступныеАнкеты/ДоступныеАнкеты.mdo index 3df6d0014..6cb842b22 100644 --- a/SSL/src/DataProcessors/ДоступныеАнкеты/ДоступныеАнкеты.mdo +++ b/SSL/src/DataProcessors/ДоступныеАнкеты/ДоступныеАнкеты.mdo @@ -28,6 +28,18 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> + <attributes uuid="6b28a716-2fb1-47f7-a7d6-f2fe7edb32c3"> + <name>РежимАнкетирования</name> + <synonym> + <key>ru</key> + <value>Режим анкетирования</value> + </synonym> + <type> + <types>EnumRef.РежимыАнкетирования</types> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </attributes> <forms uuid="e849e46c-2ce6-427b-92bc-06d7997f59bf"> <name>Форма</name> <synonym> diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form index 26dcd5276..04636fb05 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form @@ -145,32 +145,34 @@ <headerHorizontalAlign>Left</headerHorizontalAlign> <showInFooter>true</showInFooter> <extInfo xsi:type="form:InputFieldExtInfo"> + <handlers> + <event>Clearing</event> + <name>КритичностьОчистка</name> + </handlers> <width>15</width> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> <horizontalStretch>false</horizontalStretch> <wrap>true</wrap> <dropListButton>true</dropListButton> - <listChoiceMode>true</listChoiceMode> <chooseType>true</chooseType> <typeDomainEnabled>true</typeDomainEnabled> - <textEdit>true</textEdit> <choiceList> <presentation> <key>ru</key> - <value>Ошибки</value> + <value>Ошибка</value> </presentation> <value xsi:type="core:StringValue"> - <value>Ошибки</value> + <value>Ошибка</value> </value> </choiceList> <choiceList> <presentation> <key>ru</key> - <value>Предупреждения</value> + <value>Предупреждение</value> </presentation> <value xsi:type="core:StringValue"> - <value>Предупреждения</value> + <value>Предупреждение</value> </value> </choiceList> <choiceList> @@ -179,7 +181,7 @@ <value>Все события</value> </presentation> <value xsi:type="core:StringValue"> - <value>ВсеСобытия</value> + <value>Все события</value> </value> </choiceList> <textSize>Normal</textSize> @@ -252,6 +254,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -1187,6 +1190,33 @@ <autoCommandBar> <name>ЖурналКоманднаяПанель</name> <id>50</id> + <items xsi:type="form:Button"> + <name>ЖурналВыгрузитьЖурналДляПередачиВТехподдержку</name> + <id>209</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>ЖурналВыгрузитьЖурналДляПередачиВТехподдержкуРасширеннаяПодсказка</name> + <id>210</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.Command.ВыгрузитьЖурналДляПередачиВТехподдержку</commandName> + <buttonImportance>Normal</buttonImportance> + <representation>Auto</representation> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + <locationInCommandBar>InCommandBarAndInAdditionalSubmenu</locationInCommandBar> + </items> <items xsi:type="form:Button"> <name>ПросмотрТекущегоСобытияВОтдельномОкне</name> <id>38</id> @@ -2955,6 +2985,24 @@ <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>ВыгрузитьЖурналДляПередачиВТехподдержку</name> + <title> + <key>ru</key> + <value>Выгрузить в файл...</value> + + 7 + + true + + + + ВыгрузитьЖурналДляПередачиВТехподдержку + + + Auto + Auto + Пользователь diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl index 760e509eb..02e1f612b 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl @@ -99,11 +99,19 @@ ОтборЖурналаРегистрацииПоУмолчанию.Вставить("Событие", ОтборПоУмолчанию); Элементы.ПредставлениеРазделенияДанныхСеанса.Видимость = Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных(); - Критичность = "ВсеСобытия"; + Критичность = "Все события"; // идентификатор. // Взводится в значение Истина, если нужно, чтобы формирование журнала регистрации проходило не в фоне. ЗапускатьНеВФоне = Параметры.ЗапускатьНеВФоне; + Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Критичность", "ПоложениеЗаголовка", ПоложениеЗаголовкаЭлементаФормы.Нет); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Критичность", "КнопкаВыбора", Истина); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Журнал", "ПоложениеКоманднойПанели", ПоложениеКоманднойПанелиЭлементаФормы.Нет); + + КонецЕсли; + КонецПроцедуры &НаСервере @@ -149,7 +157,7 @@ &НаКлиенте Процедура КоличествоПоказываемыхСобытийПриИзменении(Элемент) -#Если ВебКлиент Тогда +#Если ВебКлиент ИЛИ МобильныйКлиент Тогда КоличествоПоказываемыхСобытий = ?(КоличествоПоказываемыхСобытий > 1000, 1000, КоличествоПоказываемыхСобытий); #КонецЕсли @@ -160,21 +168,21 @@ &НаКлиенте Процедура КритичностьПриИзменении(Элемент) - Если Критичность = "ВсеСобытия" Тогда - ОтборЖурналаРегистрации.Удалить("Уровень"); - ОбновитьТекущийСписок(); - ИначеЕсли Критичность = "Ошибки" Тогда + Если Критичность = "Ошибка" Тогда ОтборПоУровню = Новый СписокЗначений; ОтборПоУровню.Добавить("Ошибка", "Ошибка"); ОтборЖурналаРегистрации.Удалить("Уровень"); ОтборЖурналаРегистрации.Вставить("Уровень", ОтборПоУровню); ОбновитьТекущийСписок(); - ИначеЕсли Критичность = "Предупреждения" Тогда + ИначеЕсли Критичность = "Предупреждение" Тогда ОтборПоУровню = Новый СписокЗначений; ОтборПоУровню.Добавить("Предупреждение", "Предупреждение"); ОтборЖурналаРегистрации.Удалить("Уровень"); ОтборЖурналаРегистрации.Вставить("Уровень", ОтборПоУровню); ОбновитьТекущийСписок(); + Иначе + ОтборЖурналаРегистрации.Удалить("Уровень"); + ОбновитьТекущийСписок(); КонецЕсли; КонецПроцедуры @@ -206,9 +214,10 @@ ОтборЖурналаРегистрации.Вставить(ЭлементСписка.Представление, ЭлементСписка.Значение); КонецЦикла; - Если ОтборЖурналаРегистрации.Свойство("Уровень") - И ОтборЖурналаРегистрации.Уровень.Количество() > 1 Тогда - Критичность = ""; + Если ОтборЖурналаРегистрации.Свойство("Уровень") Тогда + Если ОтборЖурналаРегистрации.Уровень.Количество() > 0 Тогда + Критичность = Строка(ОтборЖурналаРегистрации.Уровень); + КонецЕсли; КонецЕсли; ОбновитьТекущийСписок(); @@ -264,7 +273,7 @@ Процедура ОтключитьОтбор() ОтборЖурналаРегистрации = ОтборЖурналаРегистрацииПоУмолчанию; - Критичность = "ВсеСобытия"; + Критичность = "Все события"; // идентификатор. ОбновитьТекущийСписок(); КонецПроцедуры @@ -324,6 +333,12 @@ КонецПроцедуры +&НаКлиенте +Процедура ВыгрузитьЖурналДляПередачиВТехподдержку(Команда) + ОписаниеОповещения = Новый ОписаниеОповещения("ВыгрузитьЖурналПродолжение", ЭтотОбъект); + НачатьПодключениеРасширенияРаботыСФайлами(ОписаниеОповещения); +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -431,4 +446,49 @@ КонецПроцедуры +&НаКлиенте +Процедура КритичностьОчистка(Элемент, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; +КонецПроцедуры + +&НаКлиенте +Процедура ВыгрузитьЖурналПродолжение(Подключено, ДополнительныеПараметры) Экспорт + + Если Подключено Тогда + Режим = РежимДиалогаВыбораФайла.Сохранение; + ДиалогСохранения = Новый ДиалогВыбораФайла(Режим); + ДиалогСохранения.МножественныйВыбор = Ложь; + ДиалогСохранения.Фильтр = НСтр("ru = 'Данные журнала регистрации'") + "(*.xml)|*.xml"; + ДиалогСохранения.ПолноеИмяФайла = "EventLog"; + ОписаниеОповещения = Новый ОписаниеОповещения("ВыгрузитьЖурналЗавершение", ЭтотОбъект); + ДиалогСохранения.Показать(ОписаниеОповещения); + Иначе + ПолучитьФайл(ВыгрузкаЖурналаРегистрации(), "EventLog.xml", Истина); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыгрузитьЖурналЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + ДанныеЖурнала = ВыгрузкаЖурналаРегистрации(); + + ПолноеИмяФайла = Результат[0]; + ПолучаемыеФайлы = Новый Массив; + ПолучаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ПолноеИмяФайла, ДанныеЖурнала)); + + Обработчик = Новый ОписаниеОповещения(); + НачатьПолучениеФайлов(Обработчик, ПолучаемыеФайлы, ПолноеИмяФайла, Ложь); + +КонецПроцедуры + +&НаСервере +Функция ВыгрузкаЖурналаРегистрации() + Возврат ЖурналРегистрации.ЖурналДляТехподдержки(ОтборЖурналаРегистрации, КоличествоПоказываемыхСобытий); +КонецФункции + #КонецОбласти diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Form.form b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Form.form index bae3aaab9..5fa8226df 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Form.form +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Form.form @@ -163,6 +163,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -194,6 +195,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -222,6 +224,7 @@ UsualGroup + HorizontalIfPossible Auto true Auto @@ -370,6 +373,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -951,6 +955,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -1311,6 +1316,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Module.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Module.bsl index 824e0ff6d..d3cf5cdf6 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Module.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Module.bsl @@ -83,7 +83,7 @@ // Грузим как дерево Для Каждого ЭлементСоответствия Из ЗначенияОтбора Цикл - НовыйЭлемент = ПолучитьВетвьДерева(ЭлементСоответствия.Значение); + НовыйЭлемент = ПолучитьВетвьДерева(ЭлементСоответствия.Значение, ОтбираемыеПараметры); НовыйЭлемент.Пометка = Ложь; Если ПустаяСтрока(НовыйЭлемент.Значение) Тогда НовыйЭлемент.Значение = ЭлементСоответствия.Ключ; @@ -168,8 +168,18 @@ КонецФункции &НаСервере -Функция ПолучитьВетвьДерева(Представление, Рекурсия = Ложь) +Функция ПолучитьВетвьДерева(Представление, ОтбираемыеПараметры, Рекурсия = Ложь) СтрокиПути = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Представление, ".", Истина, Истина); + Если (ОтбираемыеПараметры = "Метаданные" + Или ОтбираемыеПараметры = "Metadata") + И СтрокиПути.Количество() > 2 Тогда + ИмяОбъекта = СтрокиПути[0]; + СтрокиПути.Удалить(0); + ИмяОбъектаМетаданных = СтрСоединить(СтрокиПути, ". "); + СтрокиПути = Новый Массив; + СтрокиПути.Добавить(ИмяОбъекта); + СтрокиПути.Добавить(ИмяОбъектаМетаданных); + КонецЕсли; Если СтрокиПути.Количество() = 1 Тогда ЭлементыДерева = Список.ПолучитьЭлементы(); @@ -183,7 +193,7 @@ КонецЕсли; ПредставлениеПутиРодителя = ПредставлениеПутиРодителя + СтрокиПути[Сч]; КонецЦикла; - ЭлементыДерева = ПолучитьВетвьДерева(ПредставлениеПутиРодителя, Истина).ПолучитьЭлементы(); + ЭлементыДерева = ПолучитьВетвьДерева(ПредставлениеПутиРодителя, ОтбираемыеПараметры, Истина).ПолучитьЭлементы(); ИмяВетки = СтрокиПути[СтрокиПути.Количество() - 1]; КонецЕсли; diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/Событие/Form.form b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/Событие/Form.form index 2bcd8a705..730d9b339 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/Событие/Form.form +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/Событие/Form.form @@ -398,6 +398,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1929,6 +1930,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2406,6 +2408,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Help/ru.html b/SSL/src/DataProcessors/ЖурналРегистрации/Help/ru.html index 943d79660..d501d98f2 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Help/ru.html +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Help/ru.html @@ -1,7 +1,7 @@

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

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

    -

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

    +

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

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

    @@ -26,7 +26,8 @@
    Данные, Комментарий - указание объекта программы: указывается конкретный элемент списка, документ и т.п.; в комментарии - краткое описание события;
  • Метаданные - тип объекта программы и его наименование: список, вид документа и т.п.
  • Для того чтобы настроить количество, видимость и взаимное расположение колонок журнала регистрации, нажмите Еще - Изменить форму.

    -

    Обновление списка событий

    +

    Сохранение журнала регистрации на компьютер

    +
    • Нажмите Выгрузить в файл, укажите путь для сохранения журнала на компьютер. Журнал сохраняется в виде файла XML, просмотреть его можно, например, в программе MS Excel.

    Обновление списка событий

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

    Количество событий

    • Журнал отображает фиксированное количество записей, которое указывается в поле Показывать (По умолчанию равно 200). Кроме предопределенных значений (200, 500, 1000 и 10000 событий) можно ввести произвольное количество событий, которое будет сохранено.

    Отборы

    diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Form.form b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Form.form index b74916bf3..0eb3ef6ff 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Form.form +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Form.form @@ -969,6 +969,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1593,6 +1594,7 @@ UsualGroup + HorizontalIfPossible Auto WeakSeparation true @@ -2003,6 +2005,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2318,6 +2321,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2624,6 +2628,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -3102,6 +3107,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Module.bsl b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Module.bsl index 031458dbf..a2fa37485 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Module.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Module.bsl @@ -980,13 +980,11 @@ &НаКлиенте Процедура ВывестиСообщениеОбОшибке(ТекстОшибкиДляПользователя, ТехническаяИнформация) - ТекстСообщенияОбОшибке = ТекстОшибкиДляПользователя + Символы.ПС + НСтр("ru = 'Возможная причина: Загружаемые данные некорректные. |Техническая информация: %1'"); ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщенияОбОшибке, ТехническаяИнформация); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияОбОшибке); - КонецПроцедуры #КонецОбласти diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РазрешенияНеоднозначностей/Form.form b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РазрешенияНеоднозначностей/Form.form index c73691f2f..951eb0c82 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РазрешенияНеоднозначностей/Form.form +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РазрешенияНеоднозначностей/Form.form @@ -77,7 +77,7 @@ <key>ru</key> <value>При сопоставлении элементов в программе с загружаемыми данными было найдено несколько совпадающих вариантов. -Выберите элемент в соответствие с данными из файла. Для создания нового элемента нажмите "Создать новый элемент"</value> +Выберите элемент в соответствие с данными из файла.</value> true true diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РедактированиеБланка/Module.bsl b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РедактированиеБланка/Module.bsl index b37f0b7f2..5bdb82986 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РедактированиеБланка/Module.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РедактированиеБланка/Module.bsl @@ -130,5 +130,4 @@ КонецПроцедуры - #КонецОбласти diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ManagerModule.bsl b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ManagerModule.bsl index 6c55505b1..0de2395d3 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ManagerModule.bsl @@ -113,9 +113,9 @@ КонецЦикла; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда - - Запрос = ДополнительныеОтчетыИОбработки.НовыйЗапросПоДоступнымКомандам(Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка, - Неопределено, Ложь, Перечисления.СпособыВызоваДополнительныхОбработок.ЗагрузкаДанныхИзФайла); + МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); + Запрос = МодульДополнительныеОтчетыИОбработки.НовыйЗапросПоДоступнымКомандам(Перечисления["ВидыДополнительныхОтчетовИОбработок"].ДополнительнаяОбработка, + Неопределено, Ложь, Перечисления["СпособыВызоваДополнительныхОбработок"].ЗагрузкаДанныхИзФайла); ТаблицаКоманд = Запрос.Выполнить().Выгрузить(); Для Каждого СтрокаТаблицы Из ТаблицаКоманд Цикл @@ -575,10 +575,6 @@ Для каждого Реквизит Из МетаданныеСправочника.Реквизиты Цикл - Если Реквизит.Имя = "Идентификатор" Тогда - Продолжить; - КонецЕсли; - Если Реквизит.Тип.СодержитТип(Тип("ХранилищеЗначения")) Тогда Продолжить; КонецЕсли; @@ -1528,8 +1524,8 @@ Если ВидКонтактнойИнформации <> Неопределено Тогда Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); - XMLПредставление = МодульУправлениеКонтактнойИнформацией.КонтактнаяИнформацияXMLПоПредставлению(СтрокаТаблицы[Колонка.ИмяКолонки], ВидКонтактнойИнформации.Ссылка); - МодульУправлениеКонтактнойИнформацией.ЗаписатьКонтактнуюИнформацию(ЭлементСправочника, XMLПредставление, ВидКонтактнойИнформации.Ссылка, ВидКонтактнойИнформации.Тип); + ЗначениеКонтактнойИнформации = МодульУправлениеКонтактнойИнформацией.КонтактнаяИнформацияПоПредставлению(СтрокаТаблицы[Колонка.ИмяКолонки], ВидКонтактнойИнформации.Ссылка); + МодульУправлениеКонтактнойИнформацией.ЗаписатьКонтактнуюИнформацию(ЭлементСправочника, ЗначениеКонтактнойИнформации, ВидКонтактнойИнформации.Ссылка, ВидКонтактнойИнформации.Тип); КонецЕсли; КонецЕсли; ИначеЕсли СтрНачинаетсяС(Колонка.ИмяКолонки, "ДополнительныйРеквизит_") Тогда diff --git a/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/Forms/ЗагрузкаКлассификатора/Form.form b/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/Forms/ЗагрузкаКлассификатора/Form.form index ef6127b7a..4270a21e9 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/Forms/ЗагрузкаКлассификатора/Form.form +++ b/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/Forms/ЗагрузкаКлассификатора/Form.form @@ -66,11 +66,20 @@ ИТС + + + ru + Из файла + + + Файл + + Vertical - ПутьКДискуИТС + Путь 20 true true @@ -78,10 +87,11 @@ true - ПутьКДискуИТС + Путь + None - ПутьКДискуИТСExtendedTooltip + ПутьРасширеннаяПодсказка 29 Label true @@ -91,7 +101,7 @@ - ПутьКДискуИТСКонтекстноеМеню + ПутьКонтекстноеМеню 21 true @@ -103,7 +113,7 @@ StartChoice - ПутьКДискуИТСНачалоВыбора + ПутьНачалоВыбора true true @@ -297,6 +307,7 @@ Page + HorizontalIfPossible auto false @@ -572,6 +583,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -664,10 +676,10 @@ - ПутьКДискуИТС + Путь <key>ru</key> - <value>Путь к диску ИТС</value> + <value>Путь</value> 5 @@ -681,7 +693,7 @@ true - ПутьКДискуИТС + Путь diff --git a/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/Forms/ЗагрузкаКлассификатора/Help/ru.html b/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/Forms/ЗагрузкаКлассификатора/Help/ru.html index 566ec45b6..f8eb3de52 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/Forms/ЗагрузкаКлассификатора/Help/ru.html +++ b/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/Forms/ЗагрузкаКлассификатора/Help/ru.html @@ -5,10 +5,13 @@
    • С помощью переключателя выберите Вариант загрузки:
      • -

        Из интернета (при работе в веб-клиенте возможна загрузка только с сайта 1С);

        +

        С сайта 1С;

      • с диска "Информационно-технологическое сопровождение" - загрузка будет производиться из поставляемого на диске 1С:ИТС "Общероссийского классификатора банков" (ОКБ).
        • -

          укажите Путь к диску ИТС.

    • +

      укажите Путь к диску ИТС;

  • +

    Из файла.

    +
    • +

      укажите путь к файлу на диске, например, E:\Классификатор банков\bnk.zip. Скачать файл с классификатором банков можно по адресу https:\\bankregister.1c.ru\bankregister/v1/bnk.zip (для доступа потребуются логин и пароль от ИТС).

  • Нажмите Загрузить.

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

  • Повторная загрузка

    diff --git a/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/Forms/ЗагрузкаКлассификатора/Module.bsl b/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/Forms/ЗагрузкаКлассификатора/Module.bsl index 8f06a90fb..d123dc6bf 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/Forms/ЗагрузкаКлассификатора/Module.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/Forms/ЗагрузкаКлассификатора/Module.bsl @@ -2,7 +2,6 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; @@ -15,14 +14,7 @@ КонецЕсли; КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда - АвтоматическоеСохранениеДанныхВНастройках = АвтоматическоеСохранениеДанныхФормыВНастройках.НеИспользовать; - Элементы.ВариантЗагрузки.Доступность = Ложь; - Элементы.ПутьКДискуИТС.Доступность = Ложь; - Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ЗагрузкаССайта1С; - Иначе - Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаВыборИсточника; - КонецЕсли; + Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаВыборИсточника; ВыполнитьПроверкуПравДоступа("Изменение", Метаданные.Справочники.КлассификаторБанков); ВариантЗагрузки = "Интернет"; @@ -50,32 +42,59 @@ &НаКлиенте Процедура ВариантЗагрузкиПриИзменении(Элемент) + Путь = ""; УстановитьИзмененияВИнтерфейсе(); КонецПроцедуры &НаКлиенте -Процедура ПутьКДискуИТСНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - +Процедура ПутьНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) ОчиститьСообщения(); - ДиалогВыбораКаталога = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога); - ДиалогВыбораКаталога.Заголовок = НСтр("ru = 'Укажите путь к диску ИТС'"); - ДиалогВыбораКаталога.Каталог = ПутьКДискуИТС; + Если ВариантЗагрузки = "ИТС" Тогда + РежимДиалога = РежимДиалогаВыбораФайла.ВыборКаталога; + ЗаголовокДиалога = НСтр("ru = 'Укажите путь к диску ИТС'"); + Иначе + РежимДиалога = РежимДиалогаВыбораФайла.Открытие; + ЗаголовокДиалога = НСтр("ru = 'Укажите путь к файлу классификатора'"); + КонецЕсли; - Если НЕ ДиалогВыбораКаталога.Выбрать() Тогда + Диалог = Новый ДиалогВыбораФайла(РежимДиалога); + Диалог.Заголовок = ЗаголовокДиалога; + Диалог.Каталог = Путь; + Диалог.Показать(Новый ОписаниеОповещения("ПутьЗавершениеВыбора", ЭтотОбъект)); +КонецПроцедуры + +// Обработчик завершения выбора каталога или файла классификатора. +// См. Синтакс-помощник: ДиалогВыбораФайла.Показать(). +// +&НаКлиенте +Процедура ПутьЗавершениеВыбора(ВыбранныйПуть, ДополнительныеПараметры) Экспорт + Если ВыбранныйПуть = Неопределено Или ВыбранныйПуть.Количество() = 0 Тогда Возврат; КонецЕсли; - ПутьКДискуИТС = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ДиалогВыбораКаталога.Каталог); - - ФайлДанных = Новый Файл(ПутьКДискуИТС + "Database\Garant\MorphDB\Morph.dlc"); - Если НЕ ФайлДанных.Существует() Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru ='В указанном каталоге не обнаружены данные классификатора. Необходимо указать путь к диску 1С:ИТС, на котором содержится база ""Гарант. Налоги, бухучет, предпринимательство.""'"), - , - "ПутьКДискуИТС"); + Если ВариантЗагрузки = "ИТС" Тогда + Путь = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ВыбранныйПуть[0]); + ПолноеИмяФайла = Путь + "1CITS\EXE\EXTDB\bnk.zip"; + Иначе // Вариант загрузки - "Файл". + Путь = ВыбранныйПуть[0]; + ПолноеИмяФайла = Путь; КонецЕсли; + ФайлКлассификатора = Новый Файл(ПолноеИмяФайла); + ФайлКлассификатора.НачатьПроверкуСуществования( + Новый ОписаниеОповещения("ОбработатьПроверкуСуществованияКлассификатора", ЭтотОбъект)); +КонецПроцедуры + +// Обработчик проверки существования файла классификатора. +// См. Синтакс-помощник: Файл.НачатьПроверкуСуществования(). +// +&НаКлиенте +Процедура ОбработатьПроверкуСуществованияКлассификатора(Существует, ДополнительныеПараметры) Экспорт + Если Не Существует Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru ='По указанному пути файл классификатора не обнаружен.'"),, "Путь"); + КонецЕсли; КонецПроцедуры #КонецОбласти @@ -90,20 +109,23 @@ КонецЕсли; ОчиститьСообщения(); - Если ВариантЗагрузки = "ИТС" Тогда - Если НЕ ЗначениеЗаполнено(ПутьКДискуИТС) И Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда - // Не в Windows перебор букв дисков невозможен. - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'При работе не в ОС Windows необходимо явно указать путь к диску'"), - , - "ПутьКДискуИТС"); - Возврат; - КонецЕсли; - Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ВыполняетсяЗагрузка; - УстановитьИзмененияВИнтерфейсе(); - КонецЕсли; - ПодключитьОбработчикОжидания("НачатьЗагрузкуКлассификатора", 0.1, Истина); + СообщениеОбОшибке = ""; + Если Не ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() И Не ЗначениеЗаполнено(Путь) Тогда + Если ВариантЗагрузки = "ИТС" И Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда + // Не в Windows перебор букв дисков невозможен. + СообщениеОбОшибке = НСтр("ru = 'При работе не в ОС Windows необходимо явно указать путь к диску'"); + ИначеЕсли ВариантЗагрузки = "Файл" Тогда + СообщениеОбОшибке = НСтр("ru = 'Укажите путь к файлу классификатора'"); + КонецЕсли; + КонецЕсли; + + Если ЗначениеЗаполнено(СообщениеОбОшибке) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке,, Путь); + Возврат; + КонецЕсли; + + ПодключитьОбработчикОжидания("НачатьЗагрузкуКлассификатора", 0.1, Истина); КонецПроцедуры &НаКлиенте @@ -111,15 +133,10 @@ ТекущаяСтраница = Элементы.СтраницыФормы.ТекущаяСтраница; Если ТекущаяСтраница = Элементы.СтраницаРезультат Тогда - #Если ВебКлиент Тогда - Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ЗагрузкаССайта1С; - #Иначе Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаВыборИсточника; - #КонецЕсли КонецЕсли; УстановитьИзмененияВИнтерфейсе(); - КонецПроцедуры &НаКлиенте @@ -134,9 +151,12 @@ #Область СлужебныеПроцедурыИФункции +//////////////////////////////////////////////////////////////////////////////// +// Обработчики подготовки к загрузке данных + &НаКлиенте Процедура НачатьЗагрузкуКлассификатора() - Если ВариантЗагрузки <> "ИТС" И ТребуетсяНастройкаАвторизацияИнтернетПоддержки() Тогда + Если ВариантЗагрузки = "Интернет" И ТребуетсяНастройкаАвторизацияИнтернетПоддержки() Тогда ТекстВопроса = НСтр("ru='Для загрузки классификатора банков из Интернета |необходимо подключиться к Интернет-поддержке пользователей. |Подключиться сейчас?'"); @@ -151,6 +171,127 @@ КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ЗагрузитьКлассификатор() + // Загружает классификатор банков с диска ИТС или с сайта 1С. + ПараметрыЗагрузки = ПараметрыЗагрузкиКлассификатора(ВариантЗагрузки); + + Если ВариантЗагрузки = "Интернет" Тогда + ЗавершитьЗагрузкуКлассификатора(ПараметрыЗагрузки); + Иначе + НачатьПоискКлассификатора(ПараметрыЗагрузки); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ЗавершитьЗагрузкуКлассификатора(ПараметрыЗагрузки) + ДлительнаяОперация = ПолучитьДанныеНаСервере(ПараметрыЗагрузки); + + Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ВыполняетсяЗагрузка; + УстановитьИзмененияВИнтерфейсе(); + + ИдентификаторЗадания = ДлительнаяОперация.ИдентификаторЗадания; + + ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); + ПараметрыОжидания.ВыводитьОкноОжидания = Ложь; + + ОписаниеОповещения = Новый ОписаниеОповещения("ПриЗавершенииОперацииЗагрузки", ЭтотОбъект); + ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОписаниеОповещения, ПараметрыОжидания); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики поиска данных + +&НаКлиенте +Процедура НачатьПоискКлассификатора(ПараметрыЗагрузки) + Если ЗначениеЗаполнено(Путь) Тогда + Если ПараметрыЗагрузки.ВариантЗагрузки = "ИТС" Тогда + Путь = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(Путь); + + ПараметрыЗагрузки.ДискИТС = Путь; + ПараметрыЗагрузки.Путь = ПараметрыЗагрузки.ДискИТС + ПараметрыЗагрузки.ПутьНаДискеИТС; + Иначе + ПараметрыЗагрузки.ДискИТС = ""; + ПараметрыЗагрузки.Путь = Путь; + КонецЕсли; + + ПараметрыЗагрузки.КодБуквыДиска = 999; + КонецЕсли; + + Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда + ОписаниеОповещения = Новый ОписаниеОповещения("ОбработатьРезультатПомещенияКлассификатора", ЭтотОбъект, ПараметрыЗагрузки); + НачатьПомещениеФайла(ОписаниеОповещения, , , ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент(), УникальныйИдентификатор); + Иначе + ПродолжитьПоискКлассификатора(ПараметрыЗагрузки); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПродолжитьПоискКлассификатора(ПараметрыЗагрузки) + Если ПараметрыЗагрузки.ВариантЗагрузки = "ИТС" + И Не ЗначениеЗаполнено(ПараметрыЗагрузки.ДискИТС) Тогда + + ПараметрыЗагрузки.КодБуквыДиска = ПараметрыЗагрузки.КодБуквыДиска + 1; + ПараметрыЗагрузки.ДискИТС = Символ(ПараметрыЗагрузки.КодБуквыДиска) + ":\"; + ПараметрыЗагрузки.Путь = ПараметрыЗагрузки.ДискИТС + ПараметрыЗагрузки.ПутьНаДискеИТС; + КонецЕсли; + + ОписаниеОповещения = Новый ОписаниеОповещения("ЗавершитьПоискКлассификатора", ЭтотОбъект, ПараметрыЗагрузки); + + ФайлДанных = Новый Файл(ПараметрыЗагрузки.Путь); + ФайлДанных.НачатьПроверкуСуществования(ОписаниеОповещения); +КонецПроцедуры + +&НаКлиенте +Процедура ЗавершитьПоискКлассификатора(Найден, ПараметрыЗагрузки) Экспорт + Если Найден Тогда + Если ПараметрыЗагрузки.ВариантЗагрузки = "ИТС" Тогда + Путь = ПараметрыЗагрузки.ДискИТС; + КонецЕсли; + + ДанныеКлассификатора = Новый ДвоичныеДанные(ПараметрыЗагрузки.Путь); + АдресДанных = ПоместитьВоВременноеХранилище(ДанныеКлассификатора, УникальныйИдентификатор); + ПараметрыЗагрузки.АдресДанных = АдресДанных; + + ЗавершитьЗагрузкуКлассификатора(ПараметрыЗагрузки); + + ИначеЕсли ПараметрыЗагрузки.КодБуквыДиска < 91 Тогда + ПараметрыЗагрузки.ДискИТС = ""; + ПродолжитьПоискКлассификатора(ПараметрыЗагрузки); + Иначе + ТекстСообщения = НСтр("ru ='На диске 1С:ИТС не обнаружены данные классификатора БИК РФ. + |Для установки требуется диск 1С:ИТС, на котором содержится + |база ""Гарант. Налоги, бухучет, предпринимательство.""'"); + ПараметрыЗагрузки.ТекстСообщения = ТекстСообщения; + + Элементы.ПоясняющийТекст.Заголовок = ТекстСообщения; + Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаРезультат; + + УстановитьИзмененияВИнтерфейсе(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОбработатьРезультатПомещенияКлассификатора(Помещен, АдресДанных, ВыбранноеИмяФайла, ПараметрыЗагрузки) Экспорт + Если Не Помещен Тогда + Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаРезультат; + УстановитьИзмененияВИнтерфейсе(); + Возврат; + КонецЕсли; + + Если ПараметрыЗагрузки = Неопределено Тогда + ПараметрыЗагрузки = ПараметрыЗагрузкиКлассификатора(ВариантЗагрузки); + КонецЕсли; + + ПараметрыЗагрузки.Путь = ВыбранноеИмяФайла; + ПараметрыЗагрузки.АдресДанных = АдресДанных; + + ЗавершитьЗагрузкуКлассификатора(ПараметрыЗагрузки); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики загрузки данных из интернета + &НаКлиенте Процедура ПриПодключенииИнтернетПоддержки(РезультатВопроса, ДополнительныеПараметры) Экспорт Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда @@ -188,61 +329,31 @@ Возврат Ложь; КонецФункции -&НаКлиенте -Процедура ЗагрузитьКлассификатор() - // Загружает классификатор банков с диска ИТС или с сайта 1С. - ПараметрыЗагрузки = ПараметрыЗагрузкиКлассификатора(ВариантЗагрузки); - - Если ВариантЗагрузки = "ИТС" Тогда - ПолучитьДанныеБИКДискИТС(ПараметрыЗагрузки); - Успешно = ПустаяСтрока(ПараметрыЗагрузки["ТекстСообщения"]); - Если Не Успешно Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ПараметрыЗагрузки["ТекстСообщения"]); - Возврат; - КонецЕсли; +//////////////////////////////////////////////////////////////////////////////// +// Обработчики загрузки данных классификатора + +&НаСервере +Функция ПолучитьДанныеНаСервере(ПараметрыЗагрузки) + Если ОбщегоНазначения.РазделениеВключено() Тогда + ВызватьИсключение НСтр("ru = 'Загрузка классификатора банков в разделенном режиме запрещена.'"); КонецЕсли; - ДлительнаяОперация = ПолучитьДанныеНаСервере(ПараметрыЗагрузки); - - Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ВыполняетсяЗагрузка; - УстановитьИзмененияВИнтерфейсе(); - - ИдентификаторЗадания = ДлительнаяОперация.ИдентификаторЗадания; - - ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); - ПараметрыОжидания.ВыводитьОкноОжидания = Ложь; - - ОписаниеОповещения = Новый ОписаниеОповещения("ПриЗавершенииОперацииЗагрузки", ЭтотОбъект); - ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОписаниеОповещения, ПараметрыОжидания); - -КонецПроцедуры - -&НаКлиенте -Функция ПараметрыЗагрузкиКлассификатора(Знач ВариантЗагрузки) - - Результат = Новый Соответствие; - // (Число) Количество новых записей классификатора: - Результат.Вставить("Загружено", 0); - // (Число) Количество обновленных записей классификатора: - Результат.Вставить("Обновлено", 0); - // (Строка) Тест сообщения о результатах загрузки: - Результат.Вставить("ТекстСообщения", ""); - // (Булево) Флаг успешного завершения загрузки данных классификатора: - Результат.Вставить("ЗагрузкаВыполнена", Ложь); - - Результат.Вставить("ВариантЗагрузки", ВариантЗагрузки); - Если ВариантЗагрузки = "ИТС" Тогда - Результат.Вставить("ПутьКДискуИТС", ""); - Результат.Вставить("ДанныеИТСАдресДвоичныхДанных", ""); + Если ПараметрыЗагрузки.ВариантЗагрузки <> "Интернет" Тогда + АдресДанных = ПараметрыЗагрузки.АдресДанных; + ПараметрыЗагрузки.АдресДанных = Новый ХранилищеЗначения( + ПолучитьИзВременногоХранилища(АдресДанных), Новый СжатиеДанных(9)); + УдалитьИзВременногоХранилища(АдресДанных); КонецЕсли; - + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Загрузка классификатора банков РФ'"); + Результат = ДлительныеОперации.ВыполнитьВФоне("Обработки.ЗагрузкаКлассификатораБанков.ПолучитьДанные", ПараметрыЗагрузки, ПараметрыВыполнения); + Возврат Результат; - КонецФункции &НаКлиенте Процедура ПриЗавершенииОперацииЗагрузки(Результат, ДополнительныеПараметры) Экспорт - Если Результат = Неопределено Тогда Возврат; КонецЕсли; @@ -269,9 +380,10 @@ Процедура ЗагрузитьРезультат(АдресХранилища) // Отображает результат попытки загрузки классификатора банков РФ в журнале регистрации // и в форме загрузки. - Если ВариантЗагрузки = "ИТС" Тогда Источник = НСтр("ru ='Диск ИТС'"); + ИначеЕсли ВариантЗагрузки = "Файл" Тогда + Источник = НСтр("ru ='Файл'"); Иначе Источник = НСтр("ru ='Сайт 1С'"); КонецЕсли; @@ -280,87 +392,22 @@ ИмяСобытия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru ='Загрузка классификатора банков.%1'"), Источник); - Если ПараметрыЗагрузкиКлассификатора["ЗагрузкаВыполнена"] Тогда + Если ПараметрыЗагрузкиКлассификатора.ЗагрузкаВыполнена Тогда ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытия,, - ПараметрыЗагрузкиКлассификатора["ТекстСообщения"],, Истина); + ПараметрыЗагрузкиКлассификатора.ТекстСообщения, , Истина); РаботаСБанкамиКлиент.ОповеститьКлассификаторУспешноОбновлен(); Иначе ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытия, - "Ошибка", ПараметрыЗагрузкиКлассификатора["ТекстСообщения"],, Истина); + "Ошибка", ПараметрыЗагрузкиКлассификатора.ТекстСообщения, , Истина); КонецЕсли; - Элементы.ПоясняющийТекст.Заголовок = ПараметрыЗагрузкиКлассификатора["ТекстСообщения"]; + Элементы.ПоясняющийТекст.Заголовок = ПараметрыЗагрузкиКлассификатора.ТекстСообщения; Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаРезультат; УстановитьИзмененияВИнтерфейсе(); - Если (ПараметрыЗагрузкиКлассификатора["Обновлено"] > 0) Или (ПараметрыЗагрузкиКлассификатора["Загружено"] > 0) Тогда + Если (ПараметрыЗагрузкиКлассификатора.Обновлено > 0) Или (ПараметрыЗагрузкиКлассификатора.Загружено > 0) Тогда ОповеститьОбИзменении(Тип("СправочникСсылка.КлассификаторБанков")); КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПолучитьДанныеБИКДискИТС(ПараметрыЗагрузкиФайловИТС) - - ИмяФайлаБИК = "1CITS\EXE\EXTDB\bnk.zip"; - Если ЗначениеЗаполнено(ПутьКДискуИТС) Тогда - // Путь к диску указан явно. - ПутьКДискуИТС = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПутьКДискуИТС); - ФайлДанных = Новый Файл(ПутьКДискуИТС + ИмяФайлаБИК); - ФайлНайден = ФайлДанных.Существует(); - Если ФайлНайден Тогда - ПараметрыЗагрузкиФайловИТС.Вставить("ПутьКДискуИТС", ПутьКДискуИТС); - КонецЕсли; - Иначе - // Под Linux - проверка расположена ранее в Далее(). - // Под Windows - перебор букв дисков с D по Z. - Для Индекс = 68 По 90 Цикл - НайденныйПутьКДискуИТС = Символ(Индекс) + ":\"; - ФайлДанных = Новый Файл(НайденныйПутьКДискуИТС + ИмяФайлаБИК); - ФайлНайден = ФайлДанных.Существует(); - Если ФайлНайден Тогда - ПараметрыЗагрузкиФайловИТС.Вставить("ПутьКДискуИТС", НайденныйПутьКДискуИТС); - Прервать; - КонецЕсли; - КонецЦикла; - КонецЕсли; - - Если ФайлНайден Тогда - ДанныеИТСАдресДвоичныхДанных = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ФайлДанных.ПолноеИмя), УникальныйИдентификатор); - ПараметрыЗагрузкиФайловИТС.Вставить("ДанныеИТСАдресДвоичныхДанных", ДанныеИТСАдресДвоичныхДанных); - Иначе - ТекстСообщения = НСтр("ru ='На диске 1С:ИТС не обнаружены данные классификатора БИК РФ. - |Для установки требуется диск 1С:ИТС, на котором содержится база ""Гарант. Налоги, бухучет, предпринимательство.""'"); - ПараметрыЗагрузкиФайловИТС.Вставить("ТекстСообщения", ТекстСообщения); - КонецЕсли; - - ПараметрыЗагрузкиФайловИТС.Вставить("ТекстСообщения", ТекстСообщения); - -КонецПроцедуры - -&НаСервере -Процедура УстановитьИзмененияВИнтерфейсе() - // В зависимости от текущей страницы устанавливает доступность тех или иных полей для пользователя. - - Элементы.ПутьКДискуИТС.Доступность = (ВариантЗагрузки = "ИТС"); - - Если Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаВыборИсточника - Или Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ЗагрузкаССайта1С Тогда - Элементы.ФормаКнопкаНазад.Видимость = Ложь; - Элементы.ФормаКнопкаДалее.Заголовок = НСтр("ru ='Загрузить'"); - Элементы.ФормаКнопкаОтмена.Доступность = Истина; - Элементы.ФормаКнопкаДалее.Доступность = Истина; - ИначеЕсли Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ВыполняетсяЗагрузка Тогда - Элементы.ФормаКнопкаНазад.Видимость = Ложь; - Элементы.ФормаКнопкаДалее.Доступность = Ложь; - Элементы.ФормаКнопкаОтмена.Доступность = Истина; - Иначе - Элементы.ФормаКнопкаНазад.Видимость = Истина; - Элементы.ФормаКнопкаДалее.Заголовок = НСтр("ru ='Закрыть'"); - Элементы.ФормаКнопкаОтмена.Доступность = Ложь; - Элементы.ФормаКнопкаДалее.Доступность = Истина; - КонецЕсли; - КонецПроцедуры &НаСервере @@ -371,30 +418,87 @@ КонецЕсли; КонецПроцедуры -&НаСервере -Функция ПолучитьДанныеНаСервере(ПараметрыЗагрузкиФайлов) - - Если ОбщегоНазначения.РазделениеВключено() Тогда - ВызватьИсключение ТекстЗагрузкаЗапрещена(); - КонецЕсли; - - Если ПараметрыЗагрузкиФайлов["ВариантЗагрузки"] = "ИТС" Тогда - АдресХранилища = ПараметрыЗагрузкиФайлов["ДанныеИТСАдресДвоичныхДанных"]; - ПараметрыЗагрузкиФайлов["ДанныеИТСАдресДвоичныхДанных"] = Новый ХранилищеЗначения( - ПолучитьИзВременногоХранилища(АдресХранилища), Новый СжатиеДанных(9)); - УдалитьИзВременногоХранилища(АдресХранилища); - КонецЕсли; - - ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); - ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Загрузка классификатора банков РФ'"); - Результат = ДлительныеОперации.ВыполнитьВФоне("Обработки.ЗагрузкаКлассификатораБанков.ПолучитьДанные", ПараметрыЗагрузкиФайлов, ПараметрыВыполнения); - Возврат Результат; - -КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Общие обработчики &НаСервере -Функция ТекстЗагрузкаЗапрещена() - Возврат НСтр("ru = 'Загрузка классификатора банков в разделенном режиме запрещена.'"); +Процедура УстановитьИзмененияВИнтерфейсе() + ЭтоВебКлиент = ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент(); + + // Установка свойств поля Путь. + Элементы.Путь.Видимость = Не ЭтоВебКлиент; + + // Управление вариантами загрузки. + Варианты = Элементы.ВариантЗагрузки.СписокВыбора; + НайденныйВариант = Варианты.НайтиПоЗначению("ИТС"); + + Если ЭтоВебКлиент Тогда + Если НайденныйВариант <> Неопределено Тогда + Варианты.Удалить(НайденныйВариант); + КонецЕсли; + + Элементы.ВариантЗагрузки.ОтображениеПодсказки = ОтображениеПодсказки.ОтображатьСнизу; + Элементы.ВариантЗагрузки.Подсказка = НСтр("ru = 'Шаг 1: Нажмите на ""Загрузить"" + |Шаг 2: В открывшемся окне нажмите на ""Выберите файл"" + |Шаг 3: Укажите путь к файлу классификатора: + | - На диске ИТС - <Диск ИТС>\1CITS\EXE\EXTDB\bnk.zip + | - На компьютере или на сетевом диске - ...\bnk.zip + |Шаг 4: Нажмите на ""ОК"" + |Шаг 5: Дождитесь завершения загрузки.'"); + Иначе + Если НайденныйВариант = Неопределено Тогда + Варианты.Вставить(1, "ИТС", НСтр("ru = 'С диска ""Информационно-технологическое сопровождение""'")); + КонецЕсли; + + Элементы.Путь.Доступность = (ВариантЗагрузки <> "Интернет"); + Элементы.Путь.ПодсказкаВвода = ""; + Элементы.ВариантЗагрузки.Подсказка = ""; + Элементы.ВариантЗагрузки.ОтображениеПодсказки = ОтображениеПодсказки.Нет; + + Если ВариантЗагрузки = "ИТС" Тогда + Элементы.Путь.ПодсказкаВвода = НСтр("ru = 'Путь к диску ИТС, например E:\'"); + ИначеЕсли ВариантЗагрузки = "Файл" Тогда + Элементы.Путь.ПодсказкаВвода = НСтр("ru = 'Путь к файлу классификатора, например C:\...\bnk.zip'"); + КонецЕсли; + КонецЕсли; + + // Установка свойств кнопок мастера загрузки. + Если Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаВыборИсточника + Или Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ЗагрузкаССайта1С Тогда + Элементы.ФормаКнопкаНазад.Видимость = Ложь; + Элементы.ФормаКнопкаДалее.Заголовок = НСтр("ru ='Загрузить'"); + Элементы.ФормаКнопкаОтмена.Доступность = Истина; + Элементы.ФормаКнопкаДалее.Доступность = Истина; + ИначеЕсли Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ВыполняетсяЗагрузка Тогда + Элементы.ФормаКнопкаНазад.Видимость = Ложь; + Элементы.ФормаКнопкаДалее.Доступность = Ложь; + Элементы.ФормаКнопкаОтмена.Доступность = Истина; + Иначе + Элементы.ФормаКнопкаНазад.Видимость = Истина; + Элементы.ФормаКнопкаДалее.Заголовок = НСтр("ru ='Закрыть'"); + Элементы.ФормаКнопкаОтмена.Доступность = Ложь; + Элементы.ФормаКнопкаДалее.Доступность = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Функция ПараметрыЗагрузкиКлассификатора(Знач ВариантЗагрузки) + ПараметрыЗагрузки = Новый Структура; + ПараметрыЗагрузки.Вставить("Загружено", 0); + ПараметрыЗагрузки.Вставить("Обновлено", 0); + ПараметрыЗагрузки.Вставить("ТекстСообщения", ""); + ПараметрыЗагрузки.Вставить("ЗагрузкаВыполнена", Ложь); + ПараметрыЗагрузки.Вставить("ВариантЗагрузки", ВариантЗагрузки); + + Если ВариантЗагрузки <> "Интернет" Тогда + ПараметрыЗагрузки.Вставить("ДискИТС", ""); + ПараметрыЗагрузки.Вставить("КодБуквыДиска", 67); + ПараметрыЗагрузки.Вставить("ПутьНаДискеИТС", "1CITS\EXE\EXTDB\bnk.zip"); + ПараметрыЗагрузки.Вставить("Путь", ""); + ПараметрыЗагрузки.Вставить("АдресДанных", ""); + КонецЕсли; + + Возврат ПараметрыЗагрузки; КонецФункции #КонецОбласти diff --git a/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/ManagerModule.bsl b/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/ManagerModule.bsl index 03d5a21c1..7ca548fd2 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/ManagerModule.bsl @@ -48,7 +48,7 @@ // Формирует, дополняет текст сообщения пользователю в случае, если загрузка данных классификатора проведена успешно. // // Параметры: -// ПараметрыЗагрузкиКлассификатора - Соответствие: +// ПараметрыЗагрузкиКлассификатора - Структура: // Загружено - Число - Количество новых записей классификатора. // Обновлено - Число - Количество обновленных записей классификатора. // ТекстСообщения - Строка - тест сообщения о результатах загрузки. @@ -56,9 +56,9 @@ // Процедура ДополнитьТекстСообщения(ПараметрыЗагрузкиКлассификатора) - ТекстСообщения = ПараметрыЗагрузкиКлассификатора["ТекстСообщения"]; - Загружено = ПараметрыЗагрузкиКлассификатора["Загружено"]; - Обновлено = ПараметрыЗагрузкиКлассификатора["Обновлено"]; + ТекстСообщения = ПараметрыЗагрузкиКлассификатора.ТекстСообщения; + Загружено = ПараметрыЗагрузкиКлассификатора.Загружено; + Обновлено = ПараметрыЗагрузкиКлассификатора.Обновлено; Если ПустаяСтрока(ТекстСообщения) Тогда Если Загружено = 0 И Обновлено = 0 Тогда @@ -78,16 +78,17 @@ НСтр("ru ='Обновлено записей: %1.'"), Обновлено); КонецЕсли; - ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ТекстСообщения); + ПараметрыЗагрузкиКлассификатора.ТекстСообщения = ТекстСообщения; КонецПроцедуры // Получает данные классификатора БИК РФ с сайта 1С или с диска ИТС. // // Параметры: -// ПараметрыЗагрузкиКлассификатора - Соответствие - содержит параметры: -// * ВариантЗагрузки - Строка - "ИТС" или "Интернет". -// * ДанныеИТСАдресДвоичныхДанных - Строка - если ВариантЗагрузки = "ИТС", то адрес временного хранилища с bnk.zip. +// ПараметрыЗагрузкиКлассификатора - Структура - содержит параметры: +// * ВариантЗагрузки - Строка - "ИТС", "Интернет" или "Файл". +// * АдресДанных - Строка - Если ВариантЗагрузки = "ИТС" или "Файл", то содержит +// адрес временного хранилища с bnk.zip. // * Загружено - Число - Количество новых записей классификатора. // * Обновлено - Число - Количество обновленных записей классификатора. // * ТекстСообщения - Строка - Текст сообщения о результатах загрузки. @@ -100,20 +101,20 @@ ВременныйКаталог = ОбщегоНазначения.СоздатьВременныйКаталог(); - ПараметрыПолученияФайлов = Новый Соответствие; + ПараметрыПолученияФайлов = Новый Структура; ПараметрыПолученияФайлов.Вставить("ПутьКФайлу", ""); - ПараметрыПолученияФайлов.Вставить("ТекстСообщения", ПараметрыЗагрузкиКлассификатора["ТекстСообщения"]); + ПараметрыПолученияФайлов.Вставить("ТекстСообщения", ПараметрыЗагрузкиКлассификатора.ТекстСообщения); ПараметрыПолученияФайлов.Вставить("ВременныйКаталог", ВременныйКаталог); ПараметрыПолученияФайлов.Вставить("ЕстьОбновлениеНаСервере", Истина); ПараметрыПолученияФайлов.Вставить("ВерсияКлассификатора", ТекущаяВерсияКлассификатора); Попытка - Если ПараметрыЗагрузкиКлассификатора["ВариантЗагрузки"] = "ИТС" Тогда - ДанныеИТСДвоичныеДанные = ПараметрыЗагрузкиКлассификатора["ДанныеИТСАдресДвоичныхДанных"].Получить(); - ПараметрыПолученияФайлов["ПутьКФайлу"] = ВременныйКаталог + "\bnk.zip"; - ДанныеИТСДвоичныеДанные.Записать(ПараметрыПолученияФайлов["ПутьКФайлу"]); - Иначе + Если ПараметрыЗагрузкиКлассификатора.ВариантЗагрузки = "Интернет" Тогда ПолучитьДанныеИзИнтернета(ПараметрыПолученияФайлов); + Иначе // ИТС или Файл. + ДанныеКлассификатора = ПараметрыЗагрузкиКлассификатора.АдресДанных.Получить(); + ПараметрыПолученияФайлов.ПутьКФайлу = ВременныйКаталог + "\bnk.zip"; + ДанныеКлассификатора.Записать(ПараметрыПолученияФайлов.ПутьКФайлу); КонецЕсли; ПрочитатьИЗагрузитьДанные(ПараметрыЗагрузкиКлассификатора, ПараметрыПолученияФайлов, АдресХранилища); ОбщегоНазначения.УдалитьВременныйКаталог(ВременныйКаталог); @@ -126,40 +127,40 @@ Процедура ПрочитатьИЗагрузитьДанные(ПараметрыЗагрузкиКлассификатора, ПараметрыПолученияФайлов, АдресХранилища = "") - Если Не ПустаяСтрока(ПараметрыПолученияФайлов["ТекстСообщения"]) Тогда - ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ПараметрыПолученияФайлов["ТекстСообщения"]); + Если Не ПустаяСтрока(ПараметрыПолученияФайлов.ТекстСообщения) Тогда + ПараметрыЗагрузкиКлассификатора.ТекстСообщения = ПараметрыПолученияФайлов.ТекстСообщения; Если НЕ ПустаяСтрока(АдресХранилища) Тогда ПоместитьВоВременноеХранилище(ПараметрыЗагрузкиКлассификатора, АдресХранилища); КонецЕсли; Возврат; КонецЕсли; - Если ПараметрыПолученияФайлов["ЕстьОбновлениеНаСервере"] Тогда + Если ПараметрыПолученияФайлов.ЕстьОбновлениеНаСервере Тогда Попытка - ZIPФайл = Новый ЧтениеZipФайла(ПараметрыПолученияФайлов["ПутьКФайлу"]); + ZIPФайл = Новый ЧтениеZipФайла(ПараметрыПолученияФайлов.ПутьКФайлу); Исключение - ТекстСообщения = НСтр("ru ='Возникли проблемы с файлом классификатора банков, полученным с сайта 1С.'"); + ТекстСообщения = НСтр("ru = 'Возникли проблемы с файлом классификатора банков, полученным с сайта 1С.'"); ТекстСообщения = ТекстСообщения + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); КонецПопытки; Если Не ПустаяСтрока(ТекстСообщения) Тогда - ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ТекстСообщения); + ПараметрыЗагрузкиКлассификатора.ТекстСообщения = ТекстСообщения; Если НЕ ПустаяСтрока(АдресХранилища) Тогда ПоместитьВоВременноеХранилище(ПараметрыЗагрузкиКлассификатора, АдресХранилища); КонецЕсли; Возврат; КонецЕсли; - ВременныйКаталог = ПараметрыПолученияФайлов["ВременныйКаталог"]; + ВременныйКаталог = ПараметрыПолученияФайлов.ВременныйКаталог; Попытка ZIPФайл.ИзвлечьВсе(ВременныйКаталог); Исключение - ТекстСообщения = НСтр("ru ='Возникли проблемы с файлом классификатора банков, полученным с сайта 1С.'"); + ТекстСообщения = НСтр("ru = 'Возникли проблемы с файлом классификатора банков, полученным с сайта 1С.'"); ТекстСообщения = ТекстСообщения + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); КонецПопытки; Если Не ПустаяСтрока(ТекстСообщения) Тогда - ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ТекстСообщения); + ПараметрыЗагрузкиКлассификатора.ТекстСообщения = ТекстСообщения; Если НЕ ПустаяСтрока(АдресХранилища) Тогда ПоместитьВоВременноеХранилище(ПараметрыЗагрузкиКлассификатора, АдресХранилища); КонецЕсли; @@ -174,9 +175,9 @@ ФайлБИК = Новый Файл(ПутьКФайлуБИК); Если Не ФайлБИК.Существует() Тогда - ТекстСообщения = НСтр("ru ='Возникли проблемы с файлом классификатора банков, полученным с сайта 1С. + ТекстСообщения = НСтр("ru = 'Возникли проблемы с файлом классификатора банков, полученным с сайта 1С. |Архив не содержит информацию - классификатор банков.'"); - ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ТекстСообщения); + ПараметрыЗагрузкиКлассификатора.ТекстСообщения = ТекстСообщения; Если НЕ ПустаяСтрока(АдресХранилища) Тогда ПоместитьВоВременноеХранилище(ПараметрыЗагрузкиКлассификатора, АдресХранилища); КонецЕсли; @@ -188,7 +189,7 @@ Если Не ФайлРегионов.Существует() Тогда ТекстСообщения = НСтр("ru ='Возникли проблемы с файлом классификатора банков, полученным с сайта 1С. |Архив не содержит информацию о регионах.'"); - ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ТекстСообщения); + ПараметрыЗагрузкиКлассификатора.ТекстСообщения = ТекстСообщения; Если НЕ ПустаяСтрока(АдресХранилища) Тогда ПоместитьВоВременноеХранилище(ПараметрыЗагрузкиКлассификатора, АдресХранилища); КонецЕсли; @@ -200,40 +201,40 @@ Если Не ФайлНедействующихБанков.Существует() Тогда ТекстСообщения = НСтр("ru ='Возникли проблемы с файлом классификатора банков, полученным с сайта 1С. |Архив не содержит информацию о недействующих банках.'"); - ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ТекстСообщения); + ПараметрыЗагрузкиКлассификатора.ТекстСообщения = ТекстСообщения; Если НЕ ПустаяСтрока(АдресХранилища) Тогда ПоместитьВоВременноеХранилище(ПараметрыЗагрузкиКлассификатора, АдресХранилища); КонецЕсли; Возврат; КонецЕсли; - ПараметрыЗагрузкиФайлов = Новый Соответствие; + ПараметрыЗагрузкиФайлов = Новый Структура; ПараметрыЗагрузкиФайлов.Вставить("ПутьКФайлуБИК", ПутьКФайлуБИК); ПараметрыЗагрузкиФайлов.Вставить("ПутьКФайлуРегионов", ПутьКФайлуРегионов); ПараметрыЗагрузкиФайлов.Вставить("ПутьКФайлуНедействующихБанков", ПутьКФайлуНедействующихБанков); ПараметрыЗагрузкиФайлов.Вставить("ВременныйКаталог", ВременныйКаталог); - ПараметрыЗагрузкиФайлов.Вставить("Загружено", ПараметрыЗагрузкиКлассификатора["Загружено"]); - ПараметрыЗагрузкиФайлов.Вставить("Обновлено", ПараметрыЗагрузкиКлассификатора["Обновлено"]); - ПараметрыЗагрузкиФайлов.Вставить("ТекстСообщения", ПараметрыЗагрузкиКлассификатора["ТекстСообщения"]); + ПараметрыЗагрузкиФайлов.Вставить("Загружено", ПараметрыЗагрузкиКлассификатора.Загружено); + ПараметрыЗагрузкиФайлов.Вставить("Обновлено", ПараметрыЗагрузкиКлассификатора.Обновлено); + ПараметрыЗагрузкиФайлов.Вставить("ТекстСообщения", ПараметрыЗагрузкиКлассификатора.ТекстСообщения); ЗагрузитьДанные(ПараметрыЗагрузкиФайлов); - Если Не ПустаяСтрока(ПараметрыЗагрузкиФайлов["ТекстСообщения"]) Тогда + Если Не ПустаяСтрока(ПараметрыЗагрузкиФайлов.ТекстСообщения) Тогда Если НЕ ПустаяСтрока(АдресХранилища) Тогда ПоместитьВоВременноеХранилище(ПараметрыЗагрузкиКлассификатора, АдресХранилища); КонецЕсли; Возврат; КонецЕсли; - ПараметрыЗагрузкиКлассификатора.Вставить("Загружено", ПараметрыЗагрузкиФайлов["Загружено"]); - ПараметрыЗагрузкиКлассификатора.Вставить("Обновлено", ПараметрыЗагрузкиФайлов["Обновлено"]); - ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ПараметрыЗагрузкиФайлов["ТекстСообщения"]); + ПараметрыЗагрузкиКлассификатора.Загружено = ПараметрыЗагрузкиФайлов.Загружено; + ПараметрыЗагрузкиКлассификатора.Обновлено = ПараметрыЗагрузкиФайлов.Обновлено; + ПараметрыЗагрузкиКлассификатора.ТекстСообщения = ПараметрыЗагрузкиФайлов.ТекстСообщения; КонецЕсли; - УстановитьВерсиюКлассификатора(ПараметрыПолученияФайлов["ВерсияКлассификатора"]); + УстановитьВерсиюКлассификатора(ПараметрыПолученияФайлов.ВерсияКлассификатора); - ПараметрыЗагрузкиКлассификатора.Вставить("ЗагрузкаВыполнена", Истина); + ПараметрыЗагрузкиКлассификатора.ЗагрузкаВыполнена = Истина; ДополнитьТекстСообщения(ПараметрыЗагрузкиКлассификатора); Если НЕ ПустаяСтрока(АдресХранилища) Тогда @@ -253,36 +254,38 @@ Возврат; КонецЕсли; - ПараметрыЗагрузкиКлассификатора = Новый Соответствие; + ПараметрыЗагрузкиКлассификатора = Новый Структура; ПараметрыЗагрузкиКлассификатора.Вставить("Загружено", 0); ПараметрыЗагрузкиКлассификатора.Вставить("Обновлено", 0); ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ""); ПараметрыЗагрузкиКлассификатора.Вставить("ЗагрузкаВыполнена", Ложь); + ПараметрыЗагрузкиКлассификатора.Вставить("ВариантЗагрузки", "Интернет"); ПолучитьДанные(ПараметрыЗагрузкиКлассификатора); - Если ПараметрыЗагрузкиКлассификатора["ЗагрузкаВыполнена"] Тогда - Если ПустаяСтрока(ПараметрыЗагрузкиКлассификатора["ТекстСообщения"]) Тогда + Если ПараметрыЗагрузкиКлассификатора.ЗагрузкаВыполнена Тогда + Если ПустаяСтрока(ПараметрыЗагрузкиКлассификатора.ТекстСообщения) Тогда ДополнитьТекстСообщения(ПараметрыЗагрузкиКлассификатора); КонецЕсли; Иначе УровеньСобытия = УровеньЖурналаРегистрации.Ошибка; КонецЕсли; - ЗаписьЖурналаРегистрации(ИмяСобытияВЖурналеРегистрации(), УровеньСобытия, , , ПараметрыЗагрузкиКлассификатора["ТекстСообщения"]); + ЗаписьЖурналаРегистрации(ИмяСобытияВЖурналеРегистрации(), УровеньСобытия, , , + ПараметрыЗагрузкиКлассификатора.ТекстСообщения); КонецПроцедуры Процедура ЗагрузитьДанные(ПараметрыЗагрузкиФайлов) - Регионы = Регионы(ПараметрыЗагрузкиФайлов["ПутьКФайлуРегионов"]); + Регионы = Регионы(ПараметрыЗагрузкиФайлов.ПутьКФайлуРегионов); - ТекстБИК = Новый ЧтениеТекста(ПараметрыЗагрузкиФайлов["ПутьКФайлуБИК"], "windows-1251"); + ТекстБИК = Новый ЧтениеТекста(ПараметрыЗагрузкиФайлов.ПутьКФайлуБИК, "windows-1251"); СтрокаТекстаБИК = ТекстБИК.ПрочитатьСтроку(); - ПараметрыЗагрузкиДанных = Новый Соответствие; - ПараметрыЗагрузкиДанных.Вставить("Загружено", ПараметрыЗагрузкиФайлов["Загружено"]); - ПараметрыЗагрузкиДанных.Вставить("Обновлено", ПараметрыЗагрузкиФайлов["Обновлено"]); + ПараметрыЗагрузкиДанных = Новый Структура; + ПараметрыЗагрузкиДанных.Вставить("Загружено", ПараметрыЗагрузкиФайлов.Загружено); + ПараметрыЗагрузкиДанных.Вставить("Обновлено", ПараметрыЗагрузкиФайлов.Обновлено); Пока СтрокаТекстаБИК <> Неопределено Цикл @@ -305,13 +308,13 @@ КонецЦикла; // Пометка недействующих банков. - ДействующиеБанки = ДействующиеБанкиИзФайла(ПараметрыЗагрузкиФайлов["ПутьКФайлуБИК"]); - НедействующиеБанки = НедействующиеБанкиИзФайла(ПараметрыЗагрузкиФайлов["ПутьКФайлуНедействующихБанков"]); + ДействующиеБанки = ДействующиеБанкиИзФайла(ПараметрыЗагрузкиФайлов.ПутьКФайлуБИК); + НедействующиеБанки = НедействующиеБанкиИзФайла(ПараметрыЗагрузкиФайлов.ПутьКФайлуНедействующихБанков); КоличествоОтмеченных = ОтметитьНедействующиеБанки(ДействующиеБанки, НедействующиеБанки); - ПараметрыЗагрузкиДанных["Обновлено"] = ПараметрыЗагрузкиДанных["Обновлено"] + КоличествоОтмеченных; + ПараметрыЗагрузкиДанных.Обновлено = ПараметрыЗагрузкиДанных.Обновлено + КоличествоОтмеченных; - ПараметрыЗагрузкиФайлов.Вставить("Загружено", ПараметрыЗагрузкиДанных["Загружено"]); - ПараметрыЗагрузкиФайлов.Вставить("Обновлено", ПараметрыЗагрузкиДанных["Обновлено"]); + ПараметрыЗагрузкиФайлов.Загружено = ПараметрыЗагрузкиДанных.Загружено; + ПараметрыЗагрузкиФайлов.Обновлено = ПараметрыЗагрузкиДанных.Обновлено; КонецПроцедуры Процедура ПолучитьДанныеИзИнтернета(ПараметрыПолученияФайлов) @@ -327,25 +330,25 @@ ФайлНаВебСервере = "https://bankregister.1c.ru/bankregister/v1/bnk.zip"; КонецЕсли; - ВременныйФайл = ПараметрыПолученияФайлов["ВременныйКаталог"]+ "\bnk.zip"; + ВременныйФайл = ПараметрыПолученияФайлов.ВременныйКаталог+ "\bnk.zip"; ПараметрыПолучения.Вставить("ПутьДляСохранения", ВременныйФайл); - ДатаПоследнегоОбновления = ПараметрыПолученияФайлов["ВерсияКлассификатора"]; + ДатаПоследнегоОбновления = ПараметрыПолученияФайлов.ВерсияКлассификатора; ПараметрыПолучения.Вставить("Заголовки", Новый Соответствие); ПараметрыПолучения.Заголовки.Вставить("If-Modified-Since", ДатаHTTP(ДатаПоследнегоОбновления)); РезультатИзИнтернета = ПолучениеФайловИзИнтернета.СкачатьФайлНаСервере(ФайлНаВебСервере, ПараметрыПолучения); Если РезультатИзИнтернета.Статус Тогда - ПараметрыПолученияФайлов.Вставить("ПутьКФайлу", РезультатИзИнтернета.Путь); + ПараметрыПолученияФайлов.ПутьКФайлу = РезультатИзИнтернета.Путь; ВерсияКлассификатора = РезультатИзИнтернета.Заголовки["Last-Modified"]; Если ВерсияКлассификатора <> Неопределено Тогда ВерсияКлассификатора = ПрочитатьДатуHTTP(ВерсияКлассификатора); - ПараметрыПолученияФайлов["ВерсияКлассификатора"] = ВерсияКлассификатора; + ПараметрыПолученияФайлов.ВерсияКлассификатора = ВерсияКлассификатора; КонецЕсли; Иначе Если РезультатИзИнтернета.КодСостояния = 304 Тогда - ПараметрыПолученияФайлов["ЕстьОбновлениеНаСервере"] = Ложь; + ПараметрыПолученияФайлов.ЕстьОбновлениеНаСервере = Ложь; Иначе Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда ДополнительноеСообщение = Символы.ПС @@ -355,7 +358,7 @@ + НСтр("ru ='Возможно неточные или неправильные настройки подключения к Интернету на сервере 1С:Предприятие.'"); КонецЕсли; СообщениеОбОшибке = РезультатИзИнтернета.СообщениеОбОшибке + ДополнительноеСообщение; - ПараметрыПолученияФайлов.Вставить("ТекстСообщения", СообщениеОбОшибке); + ПараметрыПолученияФайлов.ТекстСообщения = СообщениеОбОшибке; КонецЕсли; КонецЕсли; @@ -535,7 +538,7 @@ Функция ЗагрузитьДанныеИзФайла(ИмяФайла) Экспорт ПапкаСИзвлеченнымиФайлами = ИзвлечьФайлыИзАрхива(ИмяФайла); Если ФайлыКлассификатораПолучены(ПапкаСИзвлеченнымиФайлами) Тогда - Параметры = Новый Соответствие; + Параметры = Новый Структура; ФайлБИКСВИФТ = Новый Файл(ИмяФайлаБИКСВИФТ(ПапкаСИзвлеченнымиФайлами)); Если ФайлБИКСВИФТ.Существует() Тогда Параметры.Вставить("ПутьКФайлуБИК", ИмяФайлаБИКСВИФТ(ПапкаСИзвлеченнымиФайлами)); @@ -737,7 +740,7 @@ /// Записывает/перезаписывает в справочник КлассификаторБанков данные банка. // Параметры: -// ПараметрыЗагрузкиДанных - Соответствие: +// ПараметрыЗагрузкиДанных - Структура: // СтруктураБанк - Структура или СтрокаТаблицыЗначений - Данные банка. // Загружено - Число - Количество новых записей классификатора. // Обновлено - Число - Количество обновленных записей классификатора. @@ -748,9 +751,9 @@ ФлагОбновленный = Ложь; Регион = ""; - СтруктураБанк = ПараметрыЗагрузкиДанных["СтруктураБанк"]; - Загружено = ПараметрыЗагрузкиДанных["Загружено"]; - Обновлено = ПараметрыЗагрузкиДанных["Обновлено"]; + СтруктураБанк = ПараметрыЗагрузкиДанных.СтруктураБанк; + Загружено = ПараметрыЗагрузкиДанных.Загружено; + Обновлено = ПараметрыЗагрузкиДанных.Обновлено; ТекущийРегион = Справочники.КлассификаторБанков.НайтиПоКоду(СтруктураБанк.КодРегиона); Если ТекущийРегион.Пустая() Тогда @@ -811,8 +814,8 @@ Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда Страна = "РФ"; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда - МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами"); - Страна = МодульРаботаСАдресами.ОсновнаяСтрана(); + МодульРаботаСАдресамиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресамиКлиентСервер"); + Страна = МодульРаботаСАдресамиКлиентСервер.ОсновнаяСтрана(); КонецЕсли; ОбновитьЗначениеРеквизита(КлассификаторБанковОбъект, "Страна", Страна); КонецЕсли; @@ -828,8 +831,8 @@ Обновлено = Обновлено + 1; КонецЕсли; - ПараметрыЗагрузкиДанных.Вставить("Загружено", Загружено); - ПараметрыЗагрузкиДанных.Вставить("Обновлено", Обновлено); + ПараметрыЗагрузкиДанных.Загружено = Загружено; + ПараметрыЗагрузкиДанных.Обновлено = Обновлено; КонецПроцедуры diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/ПараметрыПрописиВалюты/Form.form b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/ПараметрыПрописиВалюты/Form.form index d1c1937b8..cbb1e21d8 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/ПараметрыПрописиВалюты/Form.form +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/ПараметрыПрописиВалюты/Form.form @@ -275,6 +275,7 @@ UsualGroup + HorizontalIfPossible Auto WeakSeparation true @@ -562,6 +563,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -803,6 +805,7 @@ UsualGroup + HorizontalIfPossible Auto WeakSeparation true diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Form.form b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Form.form index e4f80d46d..e0c2fef05 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Form.form @@ -256,6 +256,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -899,6 +900,7 @@ Page + HorizontalIfPossible Center auto false diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ManagerModule.bsl b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ManagerModule.bsl index 5f61a21a8..c20206cd3 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ManagerModule.bsl @@ -146,7 +146,7 @@ МодульРаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса(Протокол, Адрес, Порт, Описание)); Иначе Протокол = "HTTPS"; - Адрес = "currencyrates.1c.ru"; + Адрес = "bankregister.1c.ru"; Порт = Неопределено; Описание = НСтр("ru = 'Загрузка курсов валют с сайта 1С.'"); Разрешения.Добавить( @@ -363,12 +363,12 @@ Если НачалоПериодаЗагрузки = ОкончаниеПериодаЗагрузки Тогда ДатаКурса = ОкончаниеПериодаЗагрузки; Кратность = Число(ЧастиСтроки[0]); - Курс = КурсИзСтроки(ЧастиСтроки[1]); + Курс = Число(ЧастиСтроки[1]); Иначе ДатаКурсаСтр = ЧастиСтроки[0]; ДатаКурса = Дата(Лев(ДатаКурсаСтр,4), Сред(ДатаКурсаСтр,5,2), Сред(ДатаКурсаСтр,7,2)); Кратность = Число(ЧастиСтроки[1]); - Курс = КурсИзСтроки(ЧастиСтроки[2]); + Курс = Число(ЧастиСтроки[2]); КонецЕсли; Если ДатаКурса > ОкончаниеПериодаЗагрузки Тогда @@ -449,32 +449,6 @@ КонецФункции -// Предназначена для преобразования формата чисел, используемого в файле курсов валюты. -// Работает в любой локализации, не поддерживает отрицательные числа. -Функция КурсИзСтроки(Знач Строка) - - Строка = СокрЛП(Строка); - ЧастиСтроки = СтрРазделить(Строка, ".", Истина); - - Если Строка = "" Или ЧастиСтроки.Количество() > 2 Тогда - ВызватьИсключение НСтр("ru = 'Преобразование значения к типу Число не может быть выполнено.'"); - КонецЕсли; - - ДлинаДробнойЧасти = 0; - Если ЧастиСтроки.Количество() > 1 Тогда - ДлинаДробнойЧасти = СтрДлина(ЧастиСтроки[1]); - КонецЕсли; - - Строка = СтрСоединить(ЧастиСтроки, ""); - Результат = 0; - Если Строка <> "" Тогда - Результат = Число(Строка) / Pow(10, ДлинаДробнойЧасти); - КонецЕсли; - - Возврат Результат; - -КонецФункции - Процедура ОбновитьФорматХраненияПрописи() Экспорт ВыборкаВалют = Справочники.Валюты.Выбрать(); diff --git a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Form.form b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Form.form index 4d5f8b71e..3ee919166 100644 --- a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Form.form +++ b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Form.form @@ -589,6 +589,7 @@ Page + HorizontalIfPossible auto false @@ -1413,6 +1414,7 @@ Page + HorizontalIfPossible auto false @@ -1623,6 +1625,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true diff --git a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Module.bsl b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Module.bsl index cf1a3d1d0..da9cc1fd1 100644 --- a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Module.bsl +++ b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Module.bsl @@ -34,8 +34,11 @@ // Инициализируем динамический список на форме - имитация формы выбора. ОсновныеМетаданные = ЦелевойЭлемент.Метаданные(); Список.ПроизвольныйЗапрос = Ложь; - Список.ОсновнаяТаблица = ОсновныеМетаданные.ПолноеИмя(); - Список.ДинамическоеСчитываниеДанных = Истина; + + ПараметрыДинамическогоСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка(); + ПараметрыДинамическогоСписка.ОсновнаяТаблица = ОсновныеМетаданные.ПолноеИмя(); + ПараметрыДинамическогоСписка.ДинамическоеСчитываниеДанных = Истина; + ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.Список, ПараметрыДинамическогоСписка); Элементы.Добавить("СписокСсылкаНовый", Тип("ПолеФормы"), Элементы.СписокЭлемент).ПутьКДанным = "Список.Ссылка"; diff --git a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Form.form b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Form.form index 95d88623c..e551b57fc 100644 --- a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Form.form +++ b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Form.form @@ -104,6 +104,7 @@ Page + HorizontalIfPossible auto false @@ -1236,6 +1237,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1366,6 +1368,7 @@ Page + HorizontalIfPossible auto false @@ -2259,6 +2262,7 @@ Page + HorizontalIfPossible auto false @@ -2469,6 +2473,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Module.bsl b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Module.bsl index 6d7296e69..a04333c3f 100644 --- a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Module.bsl +++ b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Module.bsl @@ -1070,6 +1070,7 @@ ПараметрыМетода.Параметры = Новый Структура; ПараметрыМетода.Параметры.Вставить("СпособУдаления", ТекущийВариантУдаления); ПараметрыМетода.Параметры.Вставить("ВключатьБизнесЛогику", Истина); + ПараметрыМетода.Параметры.Вставить("ЗаменаПарыВТранзакции", Ложь); Иначе diff --git a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Forms/ПодборКалендарейИзКлассификатора/Form.form b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Forms/ПодборКалендарейИзКлассификатора/Form.form index 3a8cd735f..30b310a7e 100644 --- a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Forms/ПодборКалендарейИзКлассификатора/Form.form +++ b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Forms/ПодборКалендарейИзКлассификатора/Form.form @@ -115,112 +115,6 @@ СписокКалендарейКоманднаяПанель 3 - - Выбрать - 14 - true - true - - true - - false - - ВыбратьExtendedTooltip - 24 - Label - true - true - - Left - - - Form.Command.Выбрать - true - true - true - UserCmds - Auto - - - Найти - 12 - true - true - - true - - false - - НайтиExtendedTooltip - 25 - Label - true - true - - Left - - - Form.Item.СписокКалендарей.StandardCommand.Find - Normal - Auto - true - true - UserCmds - Auto - - - ОтменитьПоиск - 13 - true - true - - true - - false - - ОтменитьПоискExtendedTooltip - 26 - Label - true - true - - Left - - - Form.Item.СписокКалендарей.StandardCommand.CancelSearch - Normal - Auto - true - true - UserCmds - Auto - - - ФормаСправка - 17 - true - true - - true - - - ФормаСправкаExtendedTooltip - 27 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - Left @@ -417,11 +311,143 @@ true - None - false ФормаКоманднаяПанель -1 + + Выбрать + 14 + true + true + + true + + false + + ВыбратьExtendedTooltip + 24 + Label + true + true + + Left + + + Form.Command.Выбрать + true + true + true + UserCmds + Auto + + + ГруппаПоиск + 43 + + Найти + 12 + true + true + + true + + false + + НайтиExtendedTooltip + 25 + Label + true + true + + Left + + + Form.Item.СписокКалендарей.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + + + ОтменитьПоиск + 13 + true + true + + true + + false + + ОтменитьПоискExtendedTooltip + 26 + Label + true + true + + Left + + + Form.Item.СписокКалендарей.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа поиск</value> + + + ru + Группа поиск + + + ГруппаПоискРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + + + + ФормаСправка + 17 + true + true + + true + + + ФормаСправкаExtendedTooltip + 27 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + Left true diff --git a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Forms/ПодборКалендарейИзКлассификатора/Module.bsl b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Forms/ПодборКалендарейИзКлассификатора/Module.bsl index b965c99bd..9e532d477 100644 --- a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Forms/ПодборКалендарейИзКлассификатора/Module.bsl +++ b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Forms/ПодборКалендарейИзКлассификатора/Module.bsl @@ -11,6 +11,15 @@ // Заполнение списка календарей. ЗакрыватьПриВыборе = Ложь; + Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Выбрать", "Видимость", Ложь); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаПоиск", "Отображение", ОтображениеГруппыКнопок.Компактное); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Найти", "Отображение", ОтображениеКнопки.Картинка); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ОтменитьПоиск", "Отображение", ОтображениеКнопки.Картинка); + + КонецЕсли; + КонецПроцедуры &НаКлиенте diff --git a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/ManagerModule.bsl b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/ManagerModule.bsl index 94b46c2a9..865822b93 100644 --- a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/ManagerModule.bsl @@ -37,19 +37,19 @@ Функция ВерсияКалендарей() Экспорт - Возврат 18; + Возврат 15; КонецФункции Функция ВерсияОбновленияПроизводственныхКалендарей() Экспорт - Возврат "2.4.6.4"; + Возврат "3.0.1.86"; КонецФункции Функция ВерсияОбновленияДанныхПроизводственныхКалендарей() Экспорт - Возврат "2.4.6.149"; + Возврат "3.0.1.174"; КонецФункции diff --git a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Templates/ДанныеПроизводственныхКалендарей/Template.txt b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Templates/ДанныеПроизводственныхКалендарей/Template.txt index ba24f50c4..4c7a6db11 100644 --- a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Templates/ДанныеПроизводственныхКалендарей/Template.txt +++ b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Templates/ДанныеПроизводственныхКалендарей/Template.txt @@ -12,9 +12,6 @@ - - - @@ -45,15 +42,11 @@ - - - - @@ -87,10 +80,6 @@ - - - - @@ -127,10 +116,6 @@ - - - - @@ -158,11 +143,6 @@ - - - - - @@ -180,16 +160,11 @@ - - - - - @@ -202,11 +177,6 @@ - - - - - @@ -226,10 +196,6 @@ - - - - @@ -255,11 +221,6 @@ - - - - - @@ -295,14 +256,6 @@ - - - - - - - - @@ -310,42 +263,31 @@ - - - - - - - - - - - @@ -368,7 +310,6 @@ - @@ -376,7 +317,6 @@ - @@ -801,27 +741,4 @@ - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Form.form b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Form.form index 64c1615b0..ea7ce8617 100644 --- a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Form.form @@ -169,6 +169,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1957,6 +1958,7 @@ UsualGroup + HorizontalIfPossible Auto WeakSeparation true diff --git a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Module.bsl index a68101a8c..87a8f066f 100644 --- a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Module.bsl @@ -15,6 +15,24 @@ КоличествоПоказываемыхСобытий = 200; + Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаПросмотрЗарегистрированныхСобытий", "ОтображатьЗаголовок", Ложь); + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаОтбора", "Группировка", ГруппировкаПодчиненныхЭлементовФормы.Вертикальная); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КоличествоПоказываемыхСобытий", "Заголовок", НСтр("ru ='Показывать'")); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КомандыОтбора", "Отображение", ОтображениеГруппыКнопок.Компактное); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КомандыПоиска", "Отображение", ОтображениеГруппыКнопок.Компактное); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаНайти", "Отображение", ОтображениеКнопки.Картинка); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаОтменитьПоиск", "Отображение", ОтображениеКнопки.Картинка); + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ПросмотрТекущегоСобытияВОтдельномОкне", "ТолькоВоВсехДействиях", Истина); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ОбновитьТекущийСписок", "ТолькоВоВсехДействиях", Истина); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаОтменитьПоиск", "ТолькоВоВсехДействиях", Истина); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Справка", "ТолькоВоВсехДействиях", Истина); + + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -38,7 +56,7 @@ &НаКлиенте Процедура КоличествоПоказываемыхСобытийПриИзменении(Элемент) -#Если ВебКлиент Тогда +#Если ВебКлиент ИЛИ МобильныйКлиент Тогда КоличествоПоказываемыхСобытий = ?(КоличествоПоказываемыхСобытий > 1000, 1000, КоличествоПоказываемыхСобытий); #КонецЕсли diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Form.form b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Form.form index 66d858c71..85ea0c65c 100644 --- a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Form.form +++ b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Form.form @@ -712,6 +712,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1142,6 +1143,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1439,6 +1441,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1720,6 +1723,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1879,6 +1883,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2006,6 +2011,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2412,6 +2418,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2731,6 +2738,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2910,6 +2918,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2968,6 +2977,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -3178,6 +3188,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -3363,6 +3374,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -3442,6 +3454,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -3900,6 +3913,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -4099,6 +4113,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -4435,6 +4450,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -4674,6 +4690,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -4984,6 +5001,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -5117,6 +5135,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -5559,6 +5578,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -5721,6 +5741,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -5927,6 +5948,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -6041,6 +6063,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -6237,6 +6260,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -6570,6 +6594,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -6885,6 +6910,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Module.bsl b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Module.bsl index d5c9ee484..29d8837f5 100644 --- a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Module.bsl +++ b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Module.bsl @@ -1611,7 +1611,8 @@ |Район, |Город, |ВнутригородскойРайон, - |НаселенныйПункт"); + |НаселенныйПункт, + |Территория"); КонецФункции @@ -1644,10 +1645,10 @@ Возврат Ложь; КонецЕсли; - МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами"); + МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); ТекстСообщения = ""; - ТелефонСтруктура = МодульРаботаСАдресами.ПредыдущаяСтруктураКонтактнойИнформацииXML(ТелефонXML); + ТелефонСтруктура = МодульУправлениеКонтактнойИнформацией.СведенияОТелефоне(ТелефонXML); // Проверка, что телефон российский. Если СтрЗаменить(ТелефонСтруктура.КодСтраны, "+", "") <> "7" Тогда diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Templates/КомпонентаОбмена/Template.bin b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Templates/КомпонентаОбмена/Template.addin similarity index 100% rename from SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Templates/КомпонентаОбмена/Template.bin rename to SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Templates/КомпонентаОбмена/Template.addin diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.mdo b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.mdo index 59ff4861b..d95de0f76 100644 --- a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.mdo +++ b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.mdo @@ -24,23 +24,6 @@ PersonalComputer MobileDevice - - Соглашение - - ru - Соглашение - - TextDocument - - - ИменаРегионовРФПоРекомендациямДляСКПЭП - - ru - Имена регионов РФ по рекомендациям для СКПЭП - - Дата актуальности - 24.03.2014 (http://www.gnivc.ru/inf_provision/classifiers_reference/ssrf/) - TextDocument - ЗаявлениеНаСертификатИндивидуальногоПредпринимателя @@ -55,12 +38,29 @@ Заявление на сертификат юридического лица + + ИменаРегионовРФПоРекомендациямДляСКПЭП + + ru + Имена регионов РФ по рекомендациям для СКПЭП + + Дата актуальности - 24.03.2014 (http://www.gnivc.ru/inf_provision/classifiers_reference/ssrf/) + TextDocument + КомпонентаОбмена ru Компонента обмена - BinaryData + AddIn + + + Соглашение + + ru + Соглашение + + TextDocument diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеПериодаИОтбора/Form.form b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеПериодаИОтбора/Form.form index 7407b37b9..00b197ebe 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеПериодаИОтбора/Form.form +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеПериодаИОтбора/Form.form @@ -82,6 +82,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/Форма/Form.form b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/Форма/Form.form index 2fced402b..519f0f895 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/Форма/Form.form @@ -175,6 +175,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -661,6 +662,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ObjectModule.bsl b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ObjectModule.bsl index 8da8f57fc..8ed8402de 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ObjectModule.bsl @@ -143,15 +143,15 @@ Данные = ПолучитьИзВременногоХранилища(Источник.АдресКомпоновщикаВсехДокументов); КонецЕсли; - ЭтотОбъект.КомпоновщикОтбораВсехДокументов = Новый КомпоновщикНастроекКомпоновкиДанных; - ЭтотОбъект.КомпоновщикОтбораВсехДокументов.Инициализировать( + КомпоновщикОтбораВсехДокументов = Новый КомпоновщикНастроекКомпоновкиДанных; + КомпоновщикОтбораВсехДокументов.Инициализировать( Новый ИсточникДоступныхНастроекКомпоновкиДанных(Данные.СхемаКомпоновки)); - ЭтотОбъект.КомпоновщикОтбораВсехДокументов.ЗагрузитьНастройки(Данные.Настройки); + КомпоновщикОтбораВсехДокументов.ЗагрузитьНастройки(Данные.Настройки); Если ПустаяСтрока(Источник.АдресКомпоновщикаВсехДокументов) Тогда - ЭтотОбъект.АдресКомпоновщикаВсехДокументов = ПоместитьВоВременноеХранилище(Данные, Источник.АдресХранилищаФормы); + АдресКомпоновщикаВсехДокументов = ПоместитьВоВременноеХранилище(Данные, Источник.АдресХранилищаФормы); Иначе - ЭтотОбъект.АдресКомпоновщикаВсехДокументов = Источник.АдресКомпоновщикаВсехДокументов; + АдресКомпоновщикаВсехДокументов = Источник.АдресКомпоновщикаВсехДокументов; КонецЕсли; Возврат ЭтотОбъект; @@ -167,7 +167,7 @@ // Функция СохранитьЭтотОбъект(Знач АдресХранилища) Экспорт Данные = Новый Структура; - Для Каждого Мета Из ЭтотОбъект.Метаданные().Реквизиты Цикл + Для Каждого Мета Из Метаданные().Реквизиты Цикл Имя = Мета.Имя; Данные.Вставить(Имя, ЭтотОбъект[Имя]); КонецЦикла; diff --git a/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Form.form b/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Form.form index 03f318de4..62ac50d1e 100644 --- a/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Form.form @@ -202,6 +202,7 @@ Page + HorizontalIfPossible auto false @@ -273,6 +274,7 @@ Page + HorizontalIfPossible false @@ -321,6 +323,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Module.bsl index e9ecd04bd..08ab02875 100644 --- a/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Module.bsl @@ -88,8 +88,8 @@ &НаКлиенте Процедура ОткрытьСписокЗадачТочкиМаршрута() -#Если ВебКлиент Тогда - ПоказатьПредупреждение(,НСтр("ru = 'Данная операция недоступна в веб-клиенте.'")); +#Если ВебКлиент ИЛИ МобильныйКлиент Тогда + ПоказатьПредупреждение(,НСтр("ru = 'Для корректной работы необходим режим тонкого или толстого клиента.'")); Возврат; #КонецЕсли ОчиститьСообщения(); diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовXDTO/ObjectModule.bsl b/SSL/src/DataProcessors/КонвертацияОбъектовXDTO/ObjectModule.bsl index a78882f3f..1f014e9dc 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовXDTO/ObjectModule.bsl +++ b/SSL/src/DataProcessors/КонвертацияОбъектовXDTO/ObjectModule.bsl @@ -149,36 +149,46 @@ КомпонентыОбмена = ОбменДаннымиXDTOСервер.ИнициализироватьКомпонентыОбмена("Отправка"); - КомпонентыОбмена.ВедениеПротоколаДанных.ВыводВПротоколИнформационныхСообщений = ВыводВПротоколИнформационныхСообщений; - КомпонентыОбмена.КлючСообщенияЖурналаРегистрации = КлючСообщенияЖурналаРегистрации; - #Область НастройкаКомпонентовОбменаНаРаботуСУзлом КомпонентыОбмена.УзелКорреспондента = УзелДляОбмена; - КомпонентыОбмена.ВерсияФорматаОбмена = ОбменДаннымиXDTOСервер.ВерсияФорматаОбменаПриВыгрузке(УзелДляОбмена); + КомпонентыОбмена.ВерсияФорматаОбмена = ОбщегоНазначения.ЗначениеРеквизитаОбъекта( + КомпонентыОбмена.УзелКорреспондента, "ВерсияФорматаОбмена"); + КомпонентыОбмена.ТолькоНастройкиXDTO = Не ОбменДаннымиСервер.НастройкаСинхронизацииЗавершена( + КомпонентыОбмена.УзелКорреспондента); + + ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(КомпонентыОбмена.УзелКорреспондента); + КомпонентыОбмена.XMLСхема = ОбменДаннымиXDTOСервер.ФорматОбмена(ИмяПланаОбмена, КомпонентыОбмена.ВерсияФорматаОбмена); - ИмяПланаОбмена = УзелДляОбмена.Метаданные().Имя; - ФорматОбмена = ОбменДаннымиXDTOСервер.ФорматОбмена( - ИмяПланаОбмена, КомпонентыОбмена.ВерсияФорматаОбмена); - КомпонентыОбмена.XMLСхема = ФорматОбмена; - - КомпонентыОбмена.МенеджерОбмена = ОбменДаннымиXDTOСервер.МенеджерОбменаВерсииФормата( - КомпонентыОбмена.ВерсияФорматаОбмена, УзелДляОбмена); - - КомпонентыОбмена.ТаблицаПравилаРегистрацииОбъектов = ОбменДаннымиXDTOСервер.ПравилаРегистрацииОбъектов(УзелДляОбмена); - КомпонентыОбмена.СвойстваУзлаПланаОбмена = ОбменДаннымиXDTOСервер.СвойстваУзлаПланаОбмена(УзелДляОбмена); - - ОбменДаннымиXDTOСервер.ИнициализироватьТаблицыПравилОбмена(КомпонентыОбмена); + Если Не КомпонентыОбмена.ТолькоНастройкиXDTO Тогда + КомпонентыОбмена.МенеджерОбмена = ОбменДаннымиXDTOСервер.МенеджерОбменаВерсииФормата( + КомпонентыОбмена.ВерсияФорматаОбмена, КомпонентыОбмена.УзелКорреспондента); + + КомпонентыОбмена.ТаблицаПравилаРегистрацииОбъектов = ОбменДаннымиXDTOСервер.ПравилаРегистрацииОбъектов( + КомпонентыОбмена.УзелКорреспондента); + КомпонентыОбмена.СвойстваУзлаПланаОбмена = ОбменДаннымиXDTOСервер.СвойстваУзлаПланаОбмена( + КомпонентыОбмена.УзелКорреспондента); + + ОбменДаннымиXDTOСервер.ЗаполнитьПоддерживаемыеОбъектыXDTO(КомпонентыОбмена); + + ОбменДаннымиXDTOСервер.ИнициализироватьТаблицыПравилОбмена(КомпонентыОбмена); + КонецЕсли; #КонецОбласти - ОбменДаннымиXDTOСервер.ИнициализироватьВедениеПротоколаОбмена(КомпонентыОбмена, ИмяФайлаПротоколаОбмена); + Если Не КомпонентыОбмена.ТолькоНастройкиXDTO Тогда + КомпонентыОбмена.ВедениеПротоколаДанных.ВыводВПротоколИнформационныхСообщений = ВыводВПротоколИнформационныхСообщений; + КомпонентыОбмена.КлючСообщенияЖурналаРегистрации = КлючСообщенияЖурналаРегистрации; + + ОбменДаннымиXDTOСервер.ИнициализироватьВедениеПротоколаОбмена(КомпонентыОбмена, ИмяФайлаПротоколаОбмена); + КонецЕсли; - // Открываем файл обмена + // Открываем файл обмена. ОбменДаннымиXDTOСервер.ОткрытьФайлВыгрузки(КомпонентыОбмена, ИмяФайлаОбмена); - Если КомпонентыОбмена.ФлагОшибки Тогда - КомпонентыОбмена.ФайлОбмена = Неопределено; - ОбменДаннымиXDTOСервер.ЗавершитьВедениеПротоколаОбмена(КомпонентыОбмена); + Отказ = Ложь; + ПослеОткрытияФайлаВыгрузки(Отказ); + + Если Отказ Тогда Возврат; КонецЕсли; @@ -187,7 +197,7 @@ ОбменДаннымиXDTOСервер.ПроизвестиВыгрузкуДанных(КомпонентыОбмена); Исключение Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена Тогда - РазблокироватьДанныеДляРедактирования(УзелДляОбмена); + РазблокироватьДанныеДляРедактирования(КомпонентыОбмена.УзелКорреспондента); КонецЕсли; ОбменДаннымиXDTOСервер.ЗаписатьВПротоколВыполнения(КомпонентыОбмена, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ОбменДаннымиXDTOСервер.ЗавершитьВедениеПротоколаОбмена(КомпонентыОбмена); @@ -200,20 +210,28 @@ ОбменДаннымиXDTOСервер.ЗавершитьВедениеПротоколаОбмена(КомпонентыОбмена); Если ЭтоОбменЧерезВнешнееСоединение() Тогда - Если Не КомпонентыОбмена.ФлагОшибки Тогда - ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xml"); - - ТекстовыйДокумент = Новый ТекстовыйДокумент; - ТекстовыйДокумент.ДобавитьСтроку(ДанныеВыгрузкиXML); - ТекстовыйДокумент.Записать(ИмяВременногоФайла,,Символы.ПС); - - ОбработкаДляЗагрузкиДанных().ИмяФайлаОбмена = ИмяВременногоФайла; - ОбработкаДляЗагрузкиДанных().ВыполнитьЗагрузкуДанных(); - - УдалитьФайлы(ИмяВременногоФайла); + Если ОбработкаДляЗагрузкиДанных().РежимЗагрузкиДанных = "ЗагрузкаСообщенияДляСопоставленияДанных" Тогда + Если Не КомпонентыОбмена.ФлагОшибки Тогда + ОбработкаДляЗагрузкиДанных().ПоместитьСообщениеДляСопоставленияДанных(ДанныеВыгрузкиXML); + Иначе + ОбработкаДляЗагрузкиДанных().ПоместитьСообщениеДляСопоставленияДанных(""); + КонецЕсли; Иначе - ОбработкаДляЗагрузкиДанных().ИмяФайлаОбмена = ""; - ОбработкаДляЗагрузкиДанных().ВыполнитьЗагрузкуДанных(); + Если Не КомпонентыОбмена.ФлагОшибки Тогда + ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xml"); + + ТекстовыйДокумент = Новый ТекстовыйДокумент; + ТекстовыйДокумент.ДобавитьСтроку(ДанныеВыгрузкиXML); + ТекстовыйДокумент.Записать(ИмяВременногоФайла,,Символы.ПС); + + ОбработкаДляЗагрузкиДанных().ИмяФайлаОбмена = ИмяВременногоФайла; + ОбработкаДляЗагрузкиДанных().ВыполнитьЗагрузкуДанных(); + + УдалитьФайлы(ИмяВременногоФайла); + Иначе + ОбработкаДляЗагрузкиДанных().ИмяФайлаОбмена = ""; + ОбработкаДляЗагрузкиДанных().ВыполнитьЗагрузкуДанных(); + КонецЕсли; КонецЕсли; КонецЕсли; @@ -229,12 +247,13 @@ Процедура ВыполнитьЗагрузкуДанных() Экспорт КомпонентыОбмена = ОбменДаннымиXDTOСервер.ИнициализироватьКомпонентыОбмена("Получение"); - КомпонентыОбмена.КлючСообщенияЖурналаРегистрации = КлючСообщенияЖурналаРегистрации; + КомпонентыОбмена.УзелКорреспондента = УзелОбменаЗагрузкаДанных; - КомпонентыОбмена.ВедениеПротоколаДанных.ВыводВПротоколИнформационныхСообщений = ВыводВПротоколИнформационныхСообщений; РежимЗагрузкиДанных = "ЗагрузкаВИнформационнуюБазу"; + КомпонентыОбмена.КлючСообщенияЖурналаРегистрации = КлючСообщенияЖурналаРегистрации; + КомпонентыОбмена.ВедениеПротоколаДанных.ВыводВПротоколИнформационныхСообщений = ВыводВПротоколИнформационныхСообщений; КомпонентыОбмена.СостояниеОбменаДанными.ДатаНачала = ТекущаяДатаСеанса(); ОбменДаннымиXDTOСервер.ИнициализироватьВедениеПротоколаОбмена(КомпонентыОбмена, ИмяФайлаПротоколаОбмена); @@ -252,11 +271,10 @@ ОбменДаннымиXDTOСервер.ОткрытьФайлЗагрузки(КомпонентыОбмена, ИмяФайлаОбмена); - Если КомпонентыОбмена.ФлагОшибки Тогда - ОбменДаннымиXDTOСервер.ЗавершитьВедениеПротоколаОбмена(КомпонентыОбмена); - Если КомпонентыОбмена.Свойство("ФайлОбмена") Тогда - КомпонентыОбмена.ФайлОбмена.Закрыть(); - КонецЕсли; + Отказ = Ложь; + ПослеОткрытияФайлаЗагрузки(Отказ); + + Если Отказ Тогда Возврат; КонецЕсли; @@ -266,8 +284,6 @@ КомпонентыОбмена.Вставить("РазмерФайлаСообщенияОбмена", РезультатАнализаДанныхКЗагрузке.РазмерФайлаСообщенияОбмена); КомпонентыОбмена.Вставить("КоличествоОбъектовКЗагрузке", РезультатАнализаДанныхКЗагрузке.КоличествоОбъектовКЗагрузке); - ОбменДаннымиXDTOСервер.ИнициализироватьТаблицыПравилОбмена(КомпонентыОбмена); - Попытка ОбменДаннымиXDTOСервер.ПроизвестиЧтениеДанных(КомпонентыОбмена); Исключение @@ -323,14 +339,13 @@ ОбменДаннымиXDTOСервер.ОткрытьФайлЗагрузки(КомпонентыОбмена, ИмяФайлаОбмена); - Если КомпонентыОбмена.ФлагОшибки Тогда - ОбменДаннымиXDTOСервер.ЗавершитьВедениеПротоколаОбмена(КомпонентыОбмена); - КомпонентыОбмена.ФайлОбмена.Закрыть(); + Отказ = Ложь; + ПослеОткрытияФайлаЗагрузки(Отказ); + + Если Отказ Тогда Возврат; КонецЕсли; - ОбменДаннымиXDTOСервер.ИнициализироватьТаблицыПравилОбмена(КомпонентыОбмена); - // Запись в журнале регистрации. СтрокаСообщения = НСтр("ru = 'Начало процесса обмена данными для узла: %1'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, Строка(УзелОбменаЗагрузкаДанных)); @@ -385,14 +400,13 @@ ОбменДаннымиXDTOСервер.ОткрытьФайлЗагрузки(КомпонентыОбмена, ИмяФайлаОбмена); - Если КомпонентыОбмена.ФлагОшибки Тогда - ОбменДаннымиXDTOСервер.ЗавершитьВедениеПротоколаОбмена(КомпонентыОбмена); - КомпонентыОбмена.ФайлОбмена.Закрыть(); + Отказ = Ложь; + ПослеОткрытияФайлаЗагрузки(Отказ); + + Если Отказ Тогда Возврат; КонецЕсли; - ОбменДаннымиXDTOСервер.ИнициализироватьТаблицыПравилОбмена(КомпонентыОбмена); - Попытка // Зачитываем данные из сообщения обмена. @@ -451,24 +465,22 @@ РежимЗагрузкиДанных = "ЗагрузкаВТаблицуЗначений"; ИспользоватьТранзакции = Ложь; + ИнициализироватьТаблицыПравил = (КомпонентыОбмена = Неопределено); + Если КомпонентыОбмена = Неопределено Тогда - КомпонентыОбмена = ОбменДаннымиXDTOСервер.ИнициализироватьКомпонентыОбмена("Получение"); КомпонентыОбмена.КлючСообщенияЖурналаРегистрации = КлючСообщенияЖурналаРегистрации; КомпонентыОбмена.ВедениеПротоколаДанных.ВыводВПротоколИнформационныхСообщений = ВыводВПротоколИнформационныхСообщений; КомпонентыОбмена.УзелКорреспондента = УзелОбменаЗагрузкаДанных; + КонецЕсли; - ОбменДаннымиXDTOСервер.ОткрытьФайлЗагрузки(КомпонентыОбмена, ИмяФайлаОбмена); + ОбменДаннымиXDTOСервер.ОткрытьФайлЗагрузки(КомпонентыОбмена, ИмяФайлаОбмена); - Если КомпонентыОбмена.ФлагОшибки Тогда - ОбменДаннымиXDTOСервер.ЗавершитьВедениеПротоколаОбмена(КомпонентыОбмена); - КомпонентыОбмена.ФайлОбмена.Закрыть(); - Возврат; - КонецЕсли; - - ОбменДаннымиXDTOСервер.ИнициализироватьТаблицыПравилОбмена(КомпонентыОбмена); - Иначе - ОбменДаннымиXDTOСервер.ОткрытьФайлЗагрузки(КомпонентыОбмена, ИмяФайлаОбмена); + Отказ = Ложь; + ПослеОткрытияФайлаЗагрузки(Отказ, ИнициализироватьТаблицыПравил); + + Если Отказ Тогда + Возврат; КонецЕсли; КомпонентыОбмена.СостояниеОбменаДанными.ДатаНачала = ТекущаяДатаСеанса(); @@ -494,6 +506,34 @@ #КонецОбласти +#Область СлужебныйПрограммныйИнтерфейс + +// Выполняет помещение файла обмена в сервис хранения файлов для последующего сопоставления. +// Загрузка данных не выполняется. +// +Процедура ПоместитьСообщениеДляСопоставленияДанных(ДанныеВыгрузкиXML) Экспорт + + КомпонентыОбмена = ОбменДаннымиXDTOСервер.ИнициализироватьКомпонентыОбмена("Получение"); + + КаталогВыгрузки = ОбменДаннымиПовтИсп.КаталогВременногоХранилищаФайлов(); + ИмяВременногоФайла = ОбменДаннымиСервер.УникальноеИмяФайлаСообщенияОбмена(); + + ПолноеИмяВременногоФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( + КаталогВыгрузки, ИмяВременногоФайла); + + ТекстовыйДокумент = Новый ТекстовыйДокумент; + ТекстовыйДокумент.ДобавитьСтроку(ДанныеВыгрузкиXML); + ТекстовыйДокумент.Записать(ПолноеИмяВременногоФайла, , Символы.ПС); + + ИдентификаторФайла = ОбменДаннымиСервер.ПоместитьФайлВХранилище(ПолноеИмяВременногоФайла); + + РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ПоместитьСообщениеДляСопоставленияДанных( + УзелОбменаЗагрузкаДанных, ИдентификаторФайла); + +КонецПроцедуры + +#КонецОбласти + #Область Прочее Функция ИнициализацияТаблицыДанныхСообщенияОбмена(ТипОбъекта) @@ -533,6 +573,103 @@ КонецФункции +Процедура ПослеОткрытияФайлаЗагрузки(Отказ = Ложь, ИнициализироватьТаблицыПравил = Истина) + + Если КомпонентыОбмена.ФлагОшибки Тогда + ОбменДаннымиXDTOСервер.ЗавершитьВедениеПротоколаОбмена(КомпонентыОбмена); + Если КомпонентыОбмена.Свойство("ФайлОбмена") Тогда + КомпонентыОбмена.ФайлОбмена.Закрыть(); + КонецЕсли; + Отказ = Истина; + Возврат; + КонецЕсли; + + Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена Тогда + ОбменДаннымиXDTOСервер.ОбновитьНастройкиXDTOКорреспондента(КомпонентыОбмена); + ОбменДаннымиXDTOСервер.ОбновитьПрефиксКорреспондента(КомпонентыОбмена); + + ОбменДаннымиXDTOСервер.ЗаполнитьПоддерживаемыеОбъектыXDTO(КомпонентыОбмена); + КонецЕсли; + + Если КомпонентыОбмена.ТолькоНастройкиXDTO Тогда + Если КомпонентыОбмена.Свойство("ФайлОбмена") Тогда + КомпонентыОбмена.ФайлОбмена.Закрыть(); + КонецЕсли; + Отказ = Истина; + Возврат; + КонецЕсли; + + Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена Тогда + ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(КомпонентыОбмена.УзелКорреспондента); + + Если ОбменДаннымиСервер.ЕстьАлгоритмМенеджераПланаОбмена("ОбработчикПроверкиЗначенийПоУмолчанию", ИмяПланаОбмена) Тогда + + СообщениеОбОшибке = ""; + + ПараметрыОбработчика = Новый Структура; + ПараметрыОбработчика.Вставить("Корреспондент", КомпонентыОбмена.УзелКорреспондента); + ПараметрыОбработчика.Вставить("ПоддерживаемыеОбъектыXDTO", КомпонентыОбмена.ПоддерживаемыеОбъектыXDTO); + + ПланыОбмена[ИмяПланаОбмена].ОбработчикПроверкиЗначенийПоУмолчанию(Отказ, ПараметрыОбработчика, СообщениеОбОшибке); + + Если Отказ Тогда + ОбменДаннымиXDTOСервер.ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СообщениеОбОшибке); + ОбменДаннымиXDTOСервер.ЗавершитьВедениеПротоколаОбмена(КомпонентыОбмена); + Возврат; + КонецЕсли; + + КонецЕсли; + КонецЕсли; + + Если ИнициализироватьТаблицыПравил Тогда + ОбменДаннымиXDTOСервер.ИнициализироватьТаблицыПравилОбмена(КомпонентыОбмена); + КонецЕсли; + +КонецПроцедуры + +Процедура ПослеОткрытияФайлаВыгрузки(Отказ = Ложь) + + Если КомпонентыОбмена.ФлагОшибки Тогда + КомпонентыОбмена.ФайлОбмена = Неопределено; + ОбменДаннымиXDTOСервер.ЗавершитьВедениеПротоколаОбмена(КомпонентыОбмена); + Отказ = Истина; + Возврат; + КонецЕсли; + + Если КомпонентыОбмена.ТолькоНастройкиXDTO Тогда + // Отправка настроек XDTO используется только для файловых каналов связи. + КомпонентыОбмена.ФайлОбмена.ЗаписатьКонецЭлемента(); // Message + КомпонентыОбмена.ФайлОбмена.Закрыть(); + Отказ = Истина; + Возврат; + КонецЕсли; + + ИмяПланаОбмена = ""; + Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена Тогда + ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(КомпонентыОбмена.УзелКорреспондента); + КонецЕсли; + + Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена + И ОбменДаннымиСервер.ЕстьАлгоритмМенеджераПланаОбмена("ОбработчикПроверкиОграниченийПередачиДанных", ИмяПланаОбмена) Тогда + + СообщениеОбОшибке = ""; + + ПараметрыОбработчика = Новый Структура; + ПараметрыОбработчика.Вставить("Корреспондент", КомпонентыОбмена.УзелКорреспондента); + ПараметрыОбработчика.Вставить("ПоддерживаемыеОбъектыXDTO", КомпонентыОбмена.ПоддерживаемыеОбъектыXDTO); + + ПланыОбмена[ИмяПланаОбмена].ОбработчикПроверкиОграниченийПередачиДанных(Отказ, ПараметрыОбработчика, СообщениеОбОшибке); + + Если Отказ Тогда + ОбменДаннымиXDTOСервер.ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СообщениеОбОшибке); + ОбменДаннымиXDTOСервер.ЗавершитьВедениеПротоколаОбмена(КомпонентыОбмена); + Возврат; + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область Инициализация diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl b/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl index 90229cf42..53862c340 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl +++ b/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl @@ -1532,7 +1532,7 @@ КонецЦикла; - ВыгрузитьСвойства(СтруктураИсточник, , ВходящиеДанные, ИсходящиеДанные, Правило, МассивПКСДляВыгрузки, Приемник, + ВыгрузитьСвойства(СтруктураИсточник, Неопределено, ВходящиеДанные, ИсходящиеДанные, Правило, МассивПКСДляВыгрузки, Приемник, , , Истина, , , , ВыгружаемПустойНабор); Приемник.ЗаписатьКонецЭлемента(); @@ -2139,6 +2139,11 @@ Если ЭтоОбменЧерезВнешнееСоединение() Тогда ФайлОбмена = Новый ЗаписьТекста; Иначе + + Если ЭтоЗагрузкаСообщенияДляСопоставления() Тогда + ИмяФайлаОбмена = ПолучитьИмяВременногоФайла("xml"); + КонецЕсли; + ОткрытьФайлВыгрузки(); КонецЕсли; @@ -2217,6 +2222,19 @@ ЗавершитьВедениеПротоколаОбмена(); + Если ЭтоЗагрузкаСообщенияДляСопоставления() Тогда + + ТекстовыйДокумент = Новый ТекстовыйДокумент; + ТекстовыйДокумент.Прочитать(ИмяФайлаОбмена); + + ОбработкаДляЗагрузкиДанных().ПоместитьСообщениеДляСопоставленияДанных(ТекстовыйДокумент.ПолучитьТекст()); + + ТекстовыйДокумент = Неопределено; + + УдалитьФайлы(ИмяФайлаОбмена); + + КонецЕсли; + // Сбрасываем модальные переменные перед помещением обработки в платформенный кэш. ПолеВыгруженныеПоСсылкеОбъекты = Неопределено; ПолеСозданныеПриВыгрузкеОбъекты = Неопределено; @@ -2863,6 +2881,28 @@ #Область Прочее +// Выполняет помещение файла обмена в сервис хранения файлов для последующего сопоставления. +// Загрузка данных не выполняется. +// +Процедура ПоместитьСообщениеДляСопоставленияДанных(ДанныеВыгрузкиXML) Экспорт + + КаталогВыгрузки = ОбменДаннымиПовтИсп.КаталогВременногоХранилищаФайлов(); + ИмяВременногоФайла = ОбменДаннымиСервер.УникальноеИмяФайлаСообщенияОбмена(); + + ПолноеИмяВременногоФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( + КаталогВыгрузки, ИмяВременногоФайла); + + ТекстовыйДокумент = Новый ТекстовыйДокумент; + ТекстовыйДокумент.ДобавитьСтроку(ДанныеВыгрузкиXML); + ТекстовыйДокумент.Записать(ПолноеИмяВременногоФайла, , Символы.ПС); + + ИдентификаторФайла = ОбменДаннымиСервер.ПоместитьФайлВХранилище(ПолноеИмяВременногоФайла); + + РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ПоместитьСообщениеДляСопоставленияДанных( + УзелОбменаЗагрузкаДанных, ИдентификаторФайла); + +КонецПроцедуры + // Устанавливает значение параметра "Загрузка" для свойства объекта "ОбменДанными". // // Параметры: @@ -2923,9 +2963,17 @@ Функция ЭтоОбменЧерезВнешнееСоединение() - Возврат ОбработкаДляЗагрузкиДанных() <> Неопределено; + Возврат ОбработкаДляЗагрузкиДанных() <> Неопределено + И Не (ОбработкаДляЗагрузкиДанных().РежимЗагрузкиДанных = "ЗагрузкаСообщенияДляСопоставленияДанных"); КонецФункции + +Функция ЭтоЗагрузкаСообщенияДляСопоставления() + + Возврат ОбработкаДляЗагрузкиДанных() <> Неопределено + И ОбработкаДляЗагрузкиДанных().РежимЗагрузкиДанных = "ЗагрузкаСообщенияДляСопоставленияДанных"; + +КонецФункции Функция СостояниеОбменаДанными() @@ -3997,6 +4045,7 @@ Функция ОткрытьФайлВыгрузки() ФайлОбмена = Новый ЗаписьТекста; + Попытка ФайлОбмена.Открыть(ИмяФайлаОбмена, КодировкаТекста.UTF8); Исключение @@ -6113,7 +6162,7 @@ // Возвращаемое значение: // Ссылка на правило конвертации (строка в таблице правил). // -Функция НайтиПравило(Объект, ИмяПравила="") +Функция НайтиПравило(Объект = Неопределено, ИмяПравила = "") Если Не ПустаяСтрока(ИмяПравила) Тогда @@ -7128,8 +7177,8 @@ КонецФункции -Процедура УстановитьРеквизитыПоискаУОбъекта(НайденныйОбъект, СвойстваПоиска, СвойстваПоискаНеЗамещать, - НужноСравниватьСТекущимиРеквизитами = Истина, НЕЗаменятьСвойстваНеПодлежащиеИзменению = Истина) +Процедура УстановитьРеквизитыПоискаУОбъекта(НайденныйОбъект, СвойстваПоиска, + СвойстваПоискаНеЗамещать = Неопределено, НужноСравниватьСТекущимиРеквизитами = Истина, НЕЗаменятьСвойстваНеПодлежащиеИзменению = Истина) Для каждого Свойство Из СвойстваПоиска Цикл @@ -16465,8 +16514,8 @@ Приемник = СоздатьУзел("ДанныеПоОбмену"); УстановитьАтрибут(Приемник, "ПланОбмена", ИмяПланаОбмена()); - УстановитьАтрибут(Приемник, "Кому", УзелДляОбмена.Код); - УстановитьАтрибут(Приемник, "ОтКого", ПланыОбмена[ИмяПланаОбмена()].ЭтотУзел().Код); + УстановитьАтрибут(Приемник, "Кому", ОбменДаннымиСервер.ИдентификаторУзлаКорреспондентаДляОбмена(УзелДляОбмена)); + УстановитьАтрибут(Приемник, "ОтКого", ОбменДаннымиСервер.ИдентификаторЭтогоУзлаДляОбмена(УзелДляОбмена)); // Атрибуты механизма квитирования сообщений обмена. УстановитьАтрибут(Приемник, "НомерИсходящегоСообщения", НомерОтправленного); @@ -16579,7 +16628,7 @@ КонецЕсли; // {Обработчик: ПриОтправкеДанныхОтправителя} Окончание - ОбщийУзел.Код = ОбменДаннымиПовтИсп.ПолучитьКодЭтогоУзлаДляПланаОбмена(ИмяПланаОбмена); + ОбщийУзел.Код = ОбменДаннымиСервер.ИдентификаторЭтогоУзлаДляОбмена(УзелДляОбмена); УзелXML = СоздатьУзел("ОбщиеДанныеУзлов"); diff --git a/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Form.form b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Form.form index 0f3680459..c96b81700 100644 --- a/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Form.form +++ b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Form.form @@ -150,6 +150,7 @@ РазрешитьОтправкуСтатистики Right + None РазрешитьОтправкуСтатистикиРасширеннаяПодсказка 14 @@ -239,6 +240,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Module.bsl b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Module.bsl index 33df15a03..55129272e 100644 --- a/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Module.bsl +++ b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Module.bsl @@ -24,7 +24,6 @@ ИнформационнаяБазаФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая(); // СтандартныеПодсистемы.ЦентрМониторинга - // ЦентрМониторингаСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга"); Если ЦентрМониторингаСуществует Тогда МодульЦентрМониторингаСлужебный = ОбщегоНазначения.ОбщийМодуль("ЦентрМониторингаСлужебный"); @@ -41,12 +40,20 @@ Элементы.ГруппаОтправкаСтатистики.Видимость = Ложь; КонецЕсли; // Конец СтандартныеПодсистемы.ЦентрМониторинга - // + КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) + #Если МобильныйКлиент Тогда + + ПоказатьПредупреждение(, НСтр("ru = 'Для корректной работы необходим режим толстого, тонкого или ВЕБ-клиента.'")); + Отказ = Истина; + Возврат; + + #КонецЕсли + Если ИнформационнаяБазаФайловая И СтрНайти(ПараметрЗапуска, "ВыполнитьОбновлениеИЗавершитьРаботу") > 0 Тогда diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ЗавершениеЗапросаРазрешений/Form.form b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ЗавершениеЗапросаРазрешений/Form.form index 330dd8e8e..84f522e26 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ЗавершениеЗапросаРазрешений/Form.form +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ЗавершениеЗапросаРазрешений/Form.form @@ -100,6 +100,7 @@ DontBlock true true + HorizontalIfPossible true true true diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ИнициализацияЗапросаРазрешений/Form.form b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ИнициализацияЗапросаРазрешений/Form.form index c23dba067..bf282eca5 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ИнициализацияЗапросаРазрешений/Form.form +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ИнициализацияЗапросаРазрешений/Form.form @@ -101,6 +101,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Form.form b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Form.form index f73daa153..1a1648aea 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Form.form +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Form.form @@ -110,6 +110,7 @@ Page + HorizontalIfPossible auto false @@ -209,6 +210,7 @@ Page + HorizontalIfPossible auto false @@ -305,6 +307,7 @@ Page + HorizontalIfPossible auto false @@ -402,6 +405,7 @@ Page + HorizontalIfPossible auto false @@ -452,6 +456,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -745,6 +750,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -802,6 +808,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -977,6 +984,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1110,6 +1118,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1267,6 +1276,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1746,6 +1756,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1990,6 +2001,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2318,6 +2330,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2346,6 +2359,7 @@ Page + HorizontalIfPossible auto false diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Module.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Module.bsl index ff21adb02..553df6d76 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Module.bsl @@ -92,6 +92,12 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) + #Если МобильныйКлиент Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Для корректной работы необходим режим тонкого или толстого клиента.'")); + Отказ = Истина; + Возврат; + #КонецЕсли + #Если ВебКлиент Тогда ПоказатьОшибкуОперацияНеПоддерживаетсяВВебКлиенте(); Возврат; diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Form.form b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Form.form index 0e5f05105..deafb662a 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Form.form +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Form.form @@ -115,6 +115,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -525,6 +526,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -628,6 +630,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -917,6 +920,7 @@ UsualGroup + HorizontalIfPossible Auto Button WeakSeparation diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Module.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Module.bsl index a2df49091..d0552ab5e 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Module.bsl @@ -140,9 +140,6 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Клиент - &НаКлиенте Процедура ПослеЗакрытияПомощникаПримененияИзмененийВПрофиляхБезопасности(Результат, ТребуетсяПерезапускКлиентскогоПриложения) Экспорт @@ -250,12 +247,10 @@ &НаКлиенте Процедура ОбновитьИнтерфейсПрограммы() - #Если НЕ ВебКлиент Тогда Если ОбновитьИнтерфейс = Истина Тогда ОбновитьИнтерфейс = Ложь; - ОбновитьИнтерфейс(); + ОбщегоНазначенияКлиент.ОбновитьИнтерфейсПрограммы(); КонецЕсли; - #КонецЕсли КонецПроцедуры diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Form.form b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Form.form index d0f266018..967fe325a 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Form.form +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Form.form @@ -194,6 +194,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -373,6 +374,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -707,6 +709,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1045,6 +1048,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1069,6 +1073,7 @@ UsualGroup + HorizontalIfPossible Auto true Auto @@ -1237,6 +1242,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1261,6 +1267,7 @@ UsualGroup + HorizontalIfPossible Auto true Auto @@ -1313,6 +1320,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1566,6 +1574,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Module.bsl b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Module.bsl index 08d0df5e7..a62261287 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Module.bsl @@ -15,7 +15,7 @@ КонецЕсли; Если Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда - Возврат; // Отказ устанавливается в ПриОткрытии(). + ВызватьИсключение НСтр("ru = 'Резервное копирование и восстановление данных необходимо настроить средствами операционной системы или другими сторонними средствами.'"); КонецЕсли; Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда @@ -63,13 +63,6 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) - Если Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда - Отказ = Истина; - ТекстСообщения = НСтр("ru = 'Резервное копирование поддерживается только в клиенте под управлением ОС Windows.'"); - ПоказатьПредупреждение(, ТекстСообщения); - Возврат; - КонецЕсли; - ПараметрыРезервногоКопированияИБ = ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыРезервногоКопированияИБ"]; МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования = ПараметрыРезервногоКопированияИБ.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования; @@ -236,8 +229,8 @@ &НаКлиенте Функция ПроверитьКаталогСРезервнымиКопиями() -#Если ВебКлиент Тогда - ТекстСообщения = НСтр("ru = 'Настройка резервного копирования не доступна в веб-клиенте.'"); +#Если ВебКлиент ИЛИ МобильныйКлиент Тогда + ТекстСообщения = НСтр("ru = 'Для корректной работы необходим режим тонкого или толстого клиента.'"); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); РеквизитыЗаполнены = Ложь; #Иначе diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопированияКлиентСервер/Form.form b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопированияКлиентСервер/Form.form index e8fb437e4..10062ae1a 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопированияКлиентСервер/Form.form +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопированияКлиентСервер/Form.form @@ -165,6 +165,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Help/ru.html b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Help/ru.html index 4a2e715a5..53b015a8c 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Help/ru.html +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Help/ru.html @@ -5,7 +5,8 @@

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

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

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

    -

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

    +

    Ограничения

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

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

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

    • diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаБезИнтервалов/Form.form b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаБезИнтервалов/Form.form index 44332b596..5fd87aed2 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаБезИнтервалов/Form.form +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаБезИнтервалов/Form.form @@ -141,6 +141,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -249,6 +250,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -366,6 +368,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -523,6 +526,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -664,6 +668,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -773,6 +778,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -882,6 +888,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -939,6 +946,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаБезИнтервалов/Module.bsl b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаБезИнтервалов/Module.bsl index 24963cd7c..103089341 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаБезИнтервалов/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаБезИнтервалов/Module.bsl @@ -14,6 +14,13 @@ Возврат; КонецЕсли; + Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда + + Отказ = Истина; + ВызватьИсключение НСтр("ru = 'Для корректной работы необходим режим толстого, тонкого или ВЕБ-клиента.'"); + + КонецЕсли; + НастройкиРезервногоКопирования = РезервноеКопированиеОбластейДанных.ПолучитьНастройкиРезервногоКопированияОбласти( РаботаВМоделиСервиса.ЗначениеРазделителяСеанса()); ЗаполнитьЗначенияСвойств(ЭтотОбъект, НастройкиРезервногоКопирования); diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаСИнтервалами/Form.form b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаСИнтервалами/Form.form index f6b0ec225..ae70f3fd7 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаСИнтервалами/Form.form +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаСИнтервалами/Form.form @@ -203,6 +203,7 @@ Page + HorizontalIfPossible auto false @@ -380,6 +381,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -537,6 +539,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -686,6 +689,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -803,6 +807,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -920,6 +925,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -977,6 +983,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаСИнтервалами/Module.bsl b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаСИнтервалами/Module.bsl index b0e43109b..ea7b5b749 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаСИнтервалами/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаСИнтервалами/Module.bsl @@ -14,6 +14,13 @@ Возврат; КонецЕсли; + Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда + + Отказ = Истина; + ВызватьИсключение НСтр("ru = 'Для корректной работы необходим режим толстого, тонкого или ВЕБ-клиента.'"); + + КонецЕсли; + // Инициализация формы Для НомерМесяца = 1 По 12 Цикл Элементы.МесяцФормированияЕжегодныхКопий.СписокВыбора.Добавить(НомерМесяца, diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Form.form b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Form.form index c2317237e..8c9b24e09 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Form.form +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Form.form @@ -83,6 +83,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -343,6 +344,7 @@ Page + HorizontalIfPossible false diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Form.form b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Form.form index ffb28b6fa..a4de35d1b 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Form.form +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Form.form @@ -570,6 +570,7 @@ CommonPicture.СостоянияПользователей + SelectionPresentation true @@ -917,6 +918,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Form.form b/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Form.form index 335e87323..5e22cbba3 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Form.form +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Form.form @@ -191,6 +191,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -219,6 +220,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -356,6 +358,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -384,6 +387,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Form.form b/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Form.form index 912f15e0e..afe83a47d 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Form.form +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Form.form @@ -150,6 +150,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -736,6 +737,7 @@ Page + HorizontalIfPossible false @@ -2391,6 +2393,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2521,6 +2524,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Form.form b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Form.form index cd1938170..374de354d 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Form.form +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Form.form @@ -131,6 +131,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -266,6 +267,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ПредупреждениеОКопированииНастроек/Form.form b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ПредупреждениеОКопированииНастроек/Form.form index e4e3069a5..a5c59ffbc 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ПредупреждениеОКопированииНастроек/Form.form +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ПредупреждениеОКопированииНастроек/Form.form @@ -68,6 +68,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Commands/ПроблемыПроизводительности/CommandModule.bsl b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Commands/ПроблемыПроизводительности/CommandModule.bsl new file mode 100644 index 000000000..d365ae99e --- /dev/null +++ b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Commands/ПроблемыПроизводительности/CommandModule.bsl @@ -0,0 +1,8 @@ +#Область ОбработчикиСобытий + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + ОткрытьФорму("Обработка.НастройкиЦентраМониторинга.Форма.ОтправкаКонтактнойИнформации", , ЭтотОбъект,,,,,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ЗапросНаСборИОтправкуОтчетовОбОшибках/Form.form b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ЗапросНаСборИОтправкуОтчетовОбОшибках/Form.form index e5b415650..b6329842d 100644 --- a/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ЗапросНаСборИОтправкуОтчетовОбОшибках/Form.form +++ b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ЗапросНаСборИОтправкуОтчетовОбОшибках/Form.form @@ -98,6 +98,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -241,6 +242,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -382,6 +384,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true diff --git a/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/НастройкиЦентраМониторинга/Form.form b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/НастройкиЦентраМониторинга/Form.form index 4342e830c..19c29948f 100644 --- a/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/НастройкиЦентраМониторинга/Form.form +++ b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/НастройкиЦентраМониторинга/Form.form @@ -83,6 +83,7 @@ Page + HorizontalIfPossible auto false @@ -176,6 +177,7 @@ Page + HorizontalIfPossible auto false @@ -298,6 +300,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ОтправкаКонтактнойИнформации/Form.form b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ОтправкаКонтактнойИнформации/Form.form new file mode 100644 index 000000000..3c47017fa --- /dev/null +++ b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ОтправкаКонтактнойИнформации/Form.form @@ -0,0 +1,382 @@ + + + + <key>ru</key> + <value>Сообщить о проблемах производительности</value> + + + Заголовок + 10 + + <key>ru</key> + <value>Если программа медленно работает, и Вы готовы предоставить фирме "1С" копию Вашей информационной базы (может быть обезличена) для расследования проблем производительности, пожалуйста, укажите свои контактные данные, чтобы сотрудники фирмы "1С" могли с Вами связаться.</value> + + true + true + + true + + + ЗаголовокРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + ЗаголовокКонтекстноеМеню + 11 + true + + Label + true + + Left + + + + Контакты + 1 + + <key>ru</key> + <value>Контакты (в том числе логин от portal.1c.ru для дополнительной идентификации)</value> + + true + true + + true + + + Контакты + + Top + None + + КонтактыРасширеннаяПодсказка + 3 + + <key>ru</key> + <value>Вместе с контактами будет отправлен логин от portal.1c.ru для дополнительной идентификации.</value> + + Label + 60 + true + true + + Left + + + + КонтактыКонтекстноеМеню + 2 + true + + InputField + Enter + true + Left + true + + 60 + true + true + true + true + true + true + Normal + + ru + Укажите контактные данные: email, телефон (в т.ч. удобное время), как к Вам обращаться + + + + + Комментарий + 13 + true + true + + true + + + Комментарий + + Top + None + + КомментарийРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + КомментарийКонтекстноеМеню + 14 + true + + InputField + Enter + true + Left + true + + 60 + true + true + true + true + true + true + Normal + + ru + Опишите проблему, либо укажите причину отказа. Не указывайте здесь контактные данные + + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаОтправить + 6 + + <key>ru</key> + <value>Сообщить о проблемах производительности</value> + + true + true + + true + + + ФормаОтправитьРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + Form.Command.Отправить + Auto + true + true + true + UserCmds + Auto + + + ФормаОтказаться + 16 + true + true + + true + + + ФормаОтказатьсяРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + Form.Command.Отказаться + Normal + Auto + true + true + UserCmds + Auto + + + ФормаЗакрыть + 4 + true + true + + true + + + ФормаЗакрытьРасширеннаяПодсказка + 5 + Label + true + true + + Left + + + Form.StandardCommand.Close + Normal + Auto + true + true + UserCmds + Auto + + Right + + + OnCreateAtServer + ПриСозданииНаСервере + + 60 + LockOwner + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + String + + + + true + + + true + +
      true
      +
      + + Контакты + + <key>ru</key> + <value>Контакты</value> + + 2 + + String + + + + true + + + true + + + + Комментарий + + <key>ru</key> + <value>Комментарий</value> + + 3 + + String + + + + true + + + true + + + + ПоЗапросу + + <key>ru</key> + <value>По запросу</value> + + 4 + + Boolean + + + true + + + true + + + + Логин + + <key>ru</key> + <value>Логин</value> + + 5 + + String + + + + true + + + true + + + + Отправить + + <key>ru</key> + <value>Отправить</value> + + 1 + + ru + Отправить + + + true + + + + Отправить + + + DontUse + Auto + + + Отказаться + + <key>ru</key> + <value>Отказаться</value> + + 2 + + ru + Отказаться + + + true + + + + Отказаться + + + DontUse + Auto + + + + + +
      diff --git a/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ОтправкаКонтактнойИнформации/Module.bsl b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ОтправкаКонтактнойИнформации/Module.bsl new file mode 100644 index 000000000..709f19ea6 --- /dev/null +++ b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ОтправкаКонтактнойИнформации/Module.bsl @@ -0,0 +1,98 @@ + + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + ПараметрыЦентраМониторинга = Новый Структура("КонтактнаяИнформация, КонтактнаяИнформацияКомментарий"); + ПараметрыЦентраМониторинга = ЦентрМониторингаСлужебный.ПолучитьПараметрыЦентраМониторинга(ПараметрыЦентраМониторинга); + Контакты = ПараметрыЦентраМониторинга.КонтактнаяИнформация; + Комментарий = ПараметрыЦентраМониторинга.КонтактнаяИнформацияКомментарий; + Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей") Тогда + МодульИнтернетПоддержкаПользователей = ОбщегоНазначения.ОбщийМодуль("ИнтернетПоддержкаПользователей"); + ДанныеАутентификации = МодульИнтернетПоддержкаПользователей.ДанныеАутентификацииПользователяИнтернетПоддержки(); + Если ДанныеАутентификации <> Неопределено Тогда + Логин = ДанныеАутентификации.Логин; + КонецЕсли; + КонецЕсли; + Если Параметры.Свойство("ПоЗапросу") Тогда + ПоЗапросу = Истина; + Элементы.Заголовок.Заголовок = НСтр("ru = 'Ранее Вы подписались на отправку анонимных обезличенных отчетов об использовании программы. В результате анализа предоставленных отчетов выявлены проблемы производительности. Если Вы готовы предоставить фирме ""1С"" копию Вашей информационной базы (может быть обезличена) для расследования проблем производительности, пожалуйста, укажите свои контактные данные, чтобы сотрудники фирмы ""1С"" могли с Вами связаться. + |Если Вы откажетесь, никакие идентификационные данные не будут отправлены.'"); + Элементы.ФормаОтправить.Заголовок = НСтр("ru = 'Отправить контактную информацию'"); + Иначе + Элементы.Комментарий.ПодсказкаВвода = НСтр("ru = 'Опишите проблему'"); + Элементы.ФормаОтказаться.Видимость = Ложь; + Элементы.Контакты.АвтоОтметкаНезаполненного = Истина; + Элементы.Комментарий.АвтоОтметкаНезаполненного = Истина; + КонецЕсли; + СброситьРазмерыИПоложениеОкна(); +КонецПроцедуры + +#КонецОбласти + + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Отправить(Команда) + Если Не КорректноЗаполнена() Тогда + Возврат; + КонецЕсли; + НовыеПараметры = Новый Структура; + НовыеПараметры.Вставить("ЗапросКонтактнойИнформации", 1); + НовыеПараметры.Вставить("КонтактнаяИнформацияИзменена", Истина); + НовыеПараметры.Вставить("КонтактнаяИнформация", Контакты); + НовыеПараметры.Вставить("КонтактнаяИнформацияКомментарий", Комментарий); + НовыеПараметры.Вставить("ЛогинПортала", Логин); + УстановитьПараметрыЦентраМониторинга(НовыеПараметры); + Закрыть(); +КонецПроцедуры + +&НаКлиенте +Процедура Отказаться(Команда) + НовыеПараметры = Новый Структура; + НовыеПараметры.Вставить("ЗапросКонтактнойИнформации", 0); + НовыеПараметры.Вставить("КонтактнаяИнформацияИзменена", Истина); + НовыеПараметры.Вставить("КонтактнаяИнформация", ""); + НовыеПараметры.Вставить("КонтактнаяИнформацияКомментарий", Комментарий); + УстановитьПараметрыЦентраМониторинга(НовыеПараметры); + Закрыть(); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Функция КорректноЗаполнена() + РезультатПроверки = Истина; + Если ПоЗапросу Тогда + Если ПустаяСтрока(Контакты)Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Не указана контактная информация.'"),,"Контакты"); + РезультатПроверки = Ложь; + КонецЕсли; + Иначе + Если ПустаяСтрока(Контакты)Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Не указана контактная информация.'"),,"Контакты"); + РезультатПроверки = Ложь; + КонецЕсли; + Если ПустаяСтрока(Комментарий)Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Не заполнен комментарий.'"),,"Комментарий"); + РезультатПроверки = Ложь; + КонецЕсли; + КонецЕсли; + Возврат РезультатПроверки; +КонецФункции + +&НаСервере +Процедура СброситьРазмерыИПоложениеОкна() + КлючСохраненияПоложенияОкна = ?(ПоЗапросу, "ПоЗапросу", "Самостоятельный"); +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура УстановитьПараметрыЦентраМониторинга(НовыеПараметры) + ЦентрМониторингаСлужебный.УстановитьПараметрыЦентраМониторингаВнешнийВызов(НовыеПараметры); +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/НастройкиЦентраМониторинга/НастройкиЦентраМониторинга.mdo b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/НастройкиЦентраМониторинга.mdo index e1d300dbd..c074e91da 100644 --- a/SSL/src/DataProcessors/НастройкиЦентраМониторинга/НастройкиЦентраМониторинга.mdo +++ b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/НастройкиЦентраМониторинга.mdo @@ -38,6 +38,15 @@ PersonalComputer MobileDevice + + ОтправкаКонтактнойИнформации + + ru + Отправка контактной информации + + PersonalComputer + MobileDevice + НастройкаОтправкиОтчетовОбОшибках @@ -47,4 +56,13 @@ ActionsPanelTools Auto + + ПроблемыПроизводительности + + ru + Проблемы производительности + + ActionsPanelTools + Auto + diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НерекомендуемаяВерсияПлатформы/Form.form b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НерекомендуемаяВерсияПлатформы/Form.form index f9fbf65ee..de90e547b 100644 --- a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НерекомендуемаяВерсияПлатформы/Form.form +++ b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НерекомендуемаяВерсияПлатформы/Form.form @@ -147,6 +147,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -312,6 +313,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Form.form b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Form.form index aef08206c..f42f14f83 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Form.form +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Form.form @@ -98,6 +98,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -292,6 +293,7 @@ UsualGroup + HorizontalIfPossible None Auto true @@ -488,6 +490,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -516,6 +519,7 @@ UsualGroup + HorizontalIfPossible Auto WeakSeparation true diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Help/ru.html b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Help/ru.html index ddba6f312..1a5b2ba22 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Help/ru.html +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Help/ru.html @@ -1,7 +1,7 @@

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

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

      -

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

      +

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

      Настройка автоматического экспорта замеров производительности

      • Включите флажок Выполнять экспорт, при этом автоматически включаются флажки Выполнять экспорт в локальный каталог, Выполнять экспорт на FTP.
      • При необходимости включите флажок Экспорт всех ключевых операций. В том случае производится экспорт замеров производительности всех ключевых операций, в том числе и тех, у которых не заполнены поля Приоритет и Целевое время. diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИмпортЗамеровПроизводительности/Help/ru.html b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИмпортЗамеровПроизводительности/Help/ru.html index 88b7f8b4a..d91aeec7c 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИмпортЗамеровПроизводительности/Help/ru.html +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИмпортЗамеровПроизводительности/Help/ru.html @@ -1,3 +1,5 @@

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

        -

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

        \ No newline at end of file +

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

        +

        См. также:

        + \ No newline at end of file diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИмпортЗамеровПроизводительности/Module.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИмпортЗамеровПроизводительности/Module.bsl index 7fb713aa0..d872af341 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИмпортЗамеровПроизводительности/Module.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИмпортЗамеровПроизводительности/Module.bsl @@ -52,7 +52,12 @@ &НаКлиенте Процедура Импорт(Команда) Файл = Новый Файл(ФайлИмпорта); - Если Не Файл.Существует() Тогда + Файл.НачатьПроверкуСуществования(Новый ОписаниеОповещения("ИмпортПослеПроверкиСуществования", ЭтотОбъект)); +КонецПроцедуры + +&НаКлиенте +Процедура ИмпортПослеПроверкиСуществования(Существует, ДополнительныеПараметры) Экспорт + Если Не Существует Тогда Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = НСтр("ru = 'Выберите файл для импорта.'"); Сообщение.Поле = "ФайлИмпорта"; @@ -61,7 +66,7 @@ КонецЕсли; ДвоичныеДанные = Новый ДвоичныеДанные(ФайлИмпорта); АдресХранилища = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ЭтотОбъект.УникальныйИдентификатор); - ВыполнитьИмпортНаСервере(ФайлИмпорта, АдресХранилища); + ВыполнитьИмпортНаСервере(ФайлИмпорта, АдресХранилища); КонецПроцедуры #КонецОбласти diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИсторияВыполнения/Form.form b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИсторияВыполнения/Form.form index 01bc70b9f..8a289b3c9 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИсторияВыполнения/Form.form +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИсторияВыполнения/Form.form @@ -119,6 +119,7 @@ UsualGroup + HorizontalIfPossible Auto WeakSeparation true @@ -285,6 +286,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Form.form b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Form.form index ff4eaa8bf..07dfc0f73 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Form.form @@ -181,6 +181,7 @@ UsualGroup + HorizontalIfPossible Auto WeakSeparation true @@ -333,6 +334,7 @@ UsualGroup + HorizontalIfPossible Auto WeakSeparation true diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ФормаОтбора/Form.form b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ФормаОтбора/Form.form index deb3d2602..b198cfef8 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ФормаОтбора/Form.form +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ФормаОтбора/Form.form @@ -231,6 +231,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ЭкспортЗамеровПроизводительности/Form.form b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ЭкспортЗамеровПроизводительности/Form.form index 0be08072a..827126f15 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ЭкспортЗамеровПроизводительности/Form.form +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ЭкспортЗамеровПроизводительности/Form.form @@ -118,6 +118,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Help/ru.html b/SSL/src/DataProcessors/ОценкаПроизводительности/Help/ru.html index deebf7e2c..96339eead 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Help/ru.html +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Help/ru.html @@ -27,12 +27,12 @@
    - Ошибка;
    1.00 отлично

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

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

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

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

    • Можно проанализировать замеры производительности другой программы с помощью импорта из соответствующего файла.
    • -
      Для импорта воспользуйтесь ссылкой Импорт замеров производительности в разделе Администрирование - Обслуживание - Оценка производительности.
      +
      Для импорта воспользуйтесь ссылкой Импорт замеров в разделе Администрирование - Обслуживание - Оценка производительности.
    • В поле Файл импорта с помощью кнопки  укажите путь к файлу на компьютере, нажмите кнопку Импорт.
    \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Form.form index f04a2d002..a6d663cba 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Form.form @@ -111,6 +111,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -380,6 +381,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -387,54 +389,6 @@ Auto - - БИППодключатьсяКСерверамВЗонеEu - 1741 - - <key>ru</key> - <value>Подключаться к серверам в зоне *.1c.eu</value> - - true - true - - true - - - БИППодключатьсяКСерверамВЗонеEu - - Right - ShowBottom - - OnChange - БИППодключатьсяКСерверамВЗонеEuИзменении - - - БИППодключатьсяКСерверамВЗонеEuРасширеннаяПодсказка - 1743 - - <key>ru</key> - <value>По умолчанию подключение устанавливается к *.1c.ru. Некоторые сервисы работают только в зоне *.1c.ru.</value> - - Label - 38 - true - true - - Left - - - - БИППодключатьсяКСерверамВЗонеEuКонтекстноеМеню - 1742 - true - - CheckBoxField - Enter - true - Left - true - - true true @@ -473,222 +427,13 @@ 1605 ГруппаАдресныйКлассификаторНастройки - 1607 - - ГруппаАдресныйКлассификаторЛеваяКолонка - 1609 - - ГруппаИсточникДанных - 1611 - - ГруппаИсточникДанныхВарианты - 1613 - - ИсточникДанныхФИАССервис1С - 1615 - true - true - - true - - - НаборКонстант.ИсточникДанныхАдресногоКлассификатора - - None - ShowBottom - - OnChange - АдресныйКлассификаторПриИзменении - - - ИсточникДанныхФИАССервис1СРасширеннаяПодсказка - 1617 - - <key>ru</key> - <value>Использовать веб-сервис, предоставляемый фирмой 1С. Требуется постоянное подключение к Интернету.</value> - - Label - true - - Left - - - - ИсточникДанныхФИАССервис1СКонтекстноеМеню - 1616 - true - - RadioButtonField - Enter - true - Left - true - - 1 - - - ru - Использовать веб-сервис 1С для ввода и проверки адресов - - - Сервис1С - - - Vertical - - - - ИсточникДанныхФИАСЛокально - 1618 - true - true - - true - - - НаборКонстант.ИсточникДанныхАдресногоКлассификатора - - None - ShowBottom - - OnChange - АдресныйКлассификаторПриИзменении - - - ИсточникДанныхФИАСЛокальноРасширеннаяПодсказка - 1620 - - <key>ru</key> - <value>Использовать данные, загружаемые с сайта 1С или из папки на диске. Возможна работа без подключения к Интернету.</value> - - Label - true - - Left - - - - ИсточникДанныхФИАСЛокальноКонтекстноеМеню - 1619 - true - - RadioButtonField - Enter - true - Left - true - - 1 - - - ru - Загружать классификатор в программу - - - - Vertical - - - true - true - - true - - - <key>ru</key> - <value>Источник данных варианты</value> - - - ГруппаИсточникДанныхВариантыРасширеннаяПодсказка - 1614 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Источник данных</value> - - - Style.FormTextColor - - - Style.NormalTextFont - - - ГруппаИсточникДанныхРасширеннаяПодсказка - 1612 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Адресный классификатор левая колонка</value> - - 43 - false - - ГруппаАдресныйКлассификаторЛеваяКолонкаРасширеннаяПодсказка - 1610 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - + 1854 ГруппаАдресныйКлассификаторПраваяКолонка - 1621 + 1856 РегистрСведенийАдресныеОбъектыАвторизацияНаСайтеПоддержкиПользователей - 1623 + 1858 true true @@ -696,10 +441,10 @@ РегистрСведенийАдресныеОбъектыАвторизацияНаСайтеПоддержкиПользователейРасширеннаяПодсказка - 1624 + 1859 <key>ru</key> - <value>Для использования веб-сервиса 1С и загрузки обновлений адресного классификатора необходимо выполнить подключение к интернет-поддержке пользователей. + <value>Для автоподбора и проверки адресов необходимо подключиться к интернет-поддержке пользователей. </value> Label @@ -731,7 +476,7 @@ false ГруппаАдресныйКлассификаторПраваяКолонкаРасширеннаяПодсказка - 1622 + 1857 Label true true @@ -749,55 +494,15 @@ Auto - true - true - - true - - - <key>ru</key> - <value>Адресный классификатор настройки</value> - - - System.DefaultGUIFont - 11.0 - true - false - false - false - - - ГруппаАдресныйКлассификаторНастройкиРасширеннаяПодсказка - 1608 - Label - true - true - - Left - - - UsualGroup - - Auto - NormalSeparation - true - true - Auto - Auto - - - - ГруппаАдресныйКлассификаторКоманды - 1625 ГруппаКомандАдресныйКлассификатор - 1627 + 1872 АдресныйКлассификаторЛеваяКолонка - 1629 + 1874 РегистрСведенийАдресныеОбъектыЗагрузитьАдресныйКлассификатор - 1631 + 1876 <key>ru</key> <value>Загрузить классификатор</value> @@ -809,10 +514,10 @@ </userVisible> <extendedTooltip> <name>РегистрСведенийАдресныеОбъектыЗагрузитьАдресныйКлассификаторРасширеннаяПодсказка</name> - <id>1632</id> + <id>1877</id> <title> <key>ru</key> - <value>Загрузка и проверка обновления адресного классификатора с сайта 1С или из папки на диске.</value> + <value>Для экономии трафика при автоподборе и проверке адресов, а также при работе без доступа к Интернету возможно загружать и обновлять адресные сведения в программу. Требуется до 2 Гб места на диске.</value> Label true @@ -830,43 +535,9 @@ ShowBottom Auto - true - true - - true - - - <key>ru</key> - <value>Адресный классификатор левая колонка</value> - - 43 - false - - АдресныйКлассификаторЛеваяКолонкаРасширеннаяПодсказка - 1630 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - АдресныйКлассификаторПраваяКолонка - 1633 РегистрСведенийАдресныеОбъектыОчиститьАдресныйКлассификатор - 1635 + 1878 <key>ru</key> <value>Очистить адресные сведения</value> @@ -878,11 +549,7 @@ </userVisible> <extendedTooltip> <name>РегистрСведенийАдресныеОбъектыОчиститьАдресныйКлассификаторРасширеннаяПодсказка</name> - <id>1636</id> - <title> - <key>ru</key> - <value>Удаление загруженных адресных сведений по выбранным, неиспользуемым регионам для уменьшения размера базы.</value> - + 1879 Label true @@ -906,13 +573,13 @@ <key>ru</key> - <value>Адресный классификатор правая колонка</value> + <value>Адресный классификатор левая колонка</value> 43 false - АдресныйКлассификаторПраваяКолонкаРасширеннаяПодсказка - 1634 + АдресныйКлассификаторЛеваяКолонкаРасширеннаяПодсказка + 1875 Label true true @@ -941,7 +608,7 @@ ГруппаКомандАдресныйКлассификаторРасширеннаяПодсказка - 1628 + 1873 Label true true @@ -965,11 +632,10 @@ <key>ru</key> - <value>Адресный классификатор</value> + <value>Адресный классификатор настройки</value> System.DefaultGUIFont - MS Shell Dlg 11.0 true false @@ -977,8 +643,8 @@ false - ГруппаАдресныйКлассификаторКомандыРасширеннаяПодсказка - 1626 + ГруппаАдресныйКлассификаторНастройкиРасширеннаяПодсказка + 1855 Label true true @@ -1019,6 +685,7 @@ Vertical Collapsible + true Button NormalSeparation true @@ -1182,6 +849,7 @@ UsualGroup + HorizontalIfPossible Collapsible true Button @@ -1366,6 +1034,7 @@ UsualGroup + HorizontalIfPossible Collapsible true Button @@ -1596,6 +1265,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -1812,6 +1482,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1989,6 +1660,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2073,6 +1745,81 @@ Auto + + БИПГруппаОбновлениеКлассификаторов + 1880 + + БИПОбновлениеКлассификаторов + 1882 + + <key>ru</key> + <value>Обновление классификаторов</value> + + true + true + + true + + + БИПОбновлениеКлассификаторовРасширеннаяПодсказка + 1883 + + <key>ru</key> + <value>Обновление классификаторов из файла на локальном диске, в сетевом каталоге или загрузка с Портала 1С:ИТС.</value> + + Label + true + true + + Left + + + Hyperlink + Form.Command.БИПОбновлениеКлассификаторов + Normal + Auto + true + true + UserCmds + ShowBottom + Auto + + true + true + + true + + + <key>ru</key> + <value>Обновление классификаторов</value> + + 86 + false + + БИПГруппаОбновлениеКлассификаторовРасширеннаяПодсказка + 1881 + Label + true + true + + Left + + + UsualGroup + + Vertical + Collapsible + true + Button + NormalSeparation + true + true + Equal + auto + Auto + Auto + + БИПГруппаПроверкаКонтрагентов 1804 @@ -2276,6 +2023,7 @@ UsualGroup + HorizontalIfPossible Collapsible true Button @@ -2535,6 +2283,7 @@ UsualGroup + HorizontalIfPossible Collapsible true Button @@ -2715,6 +2464,7 @@ UsualGroup + HorizontalIfPossible Collapsible true Button @@ -2897,6 +2647,7 @@ UsualGroup + HorizontalIfPossible Collapsible true Button @@ -3059,6 +2810,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -3152,6 +2904,101 @@ UsualGroup + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + ГруппаОтправитьКонтактнуюИнформацию + 1847 + + ДекорацияОтправитьКонтактнуюИнформацию + 1849 + true + true + + true + + + ДекорацияОтправитьКонтактнуюИнформациюРасширеннаяПодсказка + 1851 + Label + true + true + + Left + + + + ДекорацияОтправитьКонтактнуюИнформациюКонтекстноеМеню + 1850 + true + + Label + 3 + true + true + + Left + + + + ЦентрМониторингаОтправитьКонтактнуюИнформацию + 1852 + + <key>ru</key> + <value>Сообщить о проблемах производительности</value> + + true + true + + true + + + ЦентрМониторингаОтправитьКонтактнуюИнформациюРасширеннаяПодсказка + 1853 + Label + true + true + + Left + + + Hyperlink + DataProcessor.НастройкиЦентраМониторинга.Command.ПроблемыПроизводительности + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Переключатель</value> + + + ГруппаОтправитьКонтактнуюИнформациюРасширеннаяПодсказка + 1848 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible Auto true true @@ -3303,6 +3150,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -3414,6 +3262,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -3526,6 +3375,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -3665,6 +3515,7 @@ UsualGroup + HorizontalIfPossible Collapsible true Button @@ -3857,26 +3708,6 @@ true - - БИППодключатьсяКСерверамВЗонеEu - - <key>ru</key> - <value>Автоматическая проверка обновлений</value> - - 23 - - Number - - 1 - - - - true - - - true - - БИПИспользоватьПроверкуКонтрагентов @@ -3972,13 +3803,12 @@ <name>БИПМониторИнтернетПоддержки</name> <title> <key>ru</key> - <value>Монитор Интернет-поддержки</value> + <value>Монитор Портала 1С:ИТС</value> 2 ru - Информация о поддержке программного продукта, -версии программы и др. + Информация о поддержке программного продукта и др. true @@ -4115,6 +3945,24 @@ DontUse Auto + + БИПОбновлениеКлассификаторов + + <key>ru</key> + <value>Обновление классификаторов</value> + + 9 + + true + + + + БИПОбновлениеКлассификаторов + + + Auto + Auto + diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Help/ru.html index 9e77992db..8a2747410 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Help/ru.html @@ -6,12 +6,12 @@ TD { }

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

    +

    Настройки Интернет-поддержки

    • Логин - сохраненный в программе логин, используемый для входа в систему Интернет-поддержки пользователей. Для входа в систему Интернет-поддержки пользователей используется тот же логин и пароль, что и на сайтах portal.1c.ru и portal.1c.eu. Если у вас еще нет логина и пароля, то выполните регистрацию самостоятельно или обратитесь за помощью к партнеру фирмы "1С", с которым у Вас заключен договор ИТС.
    • Подключить - ввести логин и пароль для подключения ко всем сервисам Интернет-поддержки. Введенные логин и пароль будут сохранены в программе.
    • Отключить - удалить из программы логин и пароль для подключения к сервисам Интернет-поддержки.
    • Сообщение в службу технической поддержки - перейти на Портал 1С:ИТС для отправки сообщения в службу технической поддержки. К данным сообщения будет автоматически добавлена техническая информация о программе. -
    • Монитор Интернет-поддержки - информация о поддержке программного продукта, версии программы и др. -
    • Подключаться к серверам в зоне *.1c.eu - если настройка включена тогда подключение будет устанавливаться к серверу в зоне *.1c.eu при наличии сервера в этой зоне. По умолчанию подключение устанавливается к *.1c.ru.

    +
  • Монитор Портала 1С:ИТС - информация о поддержке программного продукта, версии программы и др.
  • Новости

    • Управление новостями - управление настройками новостей, а также ручное обновление классификаторов и списка новостей.

    1СПАРК Риски

    Адресный классификатор

    - - -
    Выберите с помощью переключателя способ работы с адресными сведениями:
    -
  • Использовать веб-сервис 1С для ввода и проверки адресов
  • -

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

    -
  • Загружать классификатор в программу
  • -

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

    Для использования возможностей адресного классификатора предусмотрены команды:
    + @@ -66,7 +60,13 @@ TD {
  • Результаты обновления и дополнительная обработка данных
  • -
    Для использования возможностей адресного классификатора предусмотрены команды:
  • Подключить интернет-поддержку
  • Для использования веб-сервиса 1С и загрузки обновлений адресного классификатора необходимо выполнить подключение к интернет-поддержке пользователей.
  • Загрузить классификатор
  • Сведения о ходе обновления версии программы, отложенное выполнение дополнительных процедур обработки данных.
  • Детализировать ход обновления в журнале регистрации
  • При включенном флажке в журнал регистрации записываются выполняемые обработчики обновления с указанием времени выполнения.

    Онлайн-поддержка

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

    Обновление классификаторов

    +

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

    + + + +

    +
  • Обновление классификаторов
  • С помощью этой команды можно выполнить загрузку обновлений классификаторов из сервиса компании 1С, локального или сетевого каталога.

    Онлайн-поддержка

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

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

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

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

    @@ -91,5 +91,10 @@ TD {
  • Разрешить отправку сведений стороннему разработчику
  • в этом случае необходимо заполнить Адрес сервиса.
  • Запретить отправку сведений
  • -не рекомендуется, т.к. статистика необходима разработчикам для анализа работы программы, при этом передача статистики не замедляет ее работу.

    См. также:

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

    Внешние компоненты

    +

    В разделе представлены команды для обновления внешних компонент с портала 1С:ИТС.

    +

    + +
    +
  • Настройка внешних компонент
  • Перейдите по ссылке для настройки автообновления внешних компонент сторонних поставщиков, подключенных к программе, с портала 1С:ИТС.

    См. также:

    \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Module.bsl index 09c5f122d..f7167e7b0 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Module.bsl @@ -33,10 +33,8 @@ ВидимостьГруппыКоманды = Ложь; КонецЕсли; Элементы.ГруппаАдресныйКлассификаторНастройки.Видимость = ВидимостьГруппыНастройки; - Элементы.ГруппаАдресныйКлассификаторКоманды.Видимость = ВидимостьГруппыКоманды; Иначе Элементы.ГруппаАдресныйКлассификаторНастройки.Видимость = Ложь; - Элементы.ГруппаАдресныйКлассификаторКоманды.Видимость = Ложь; КонецЕсли; Элементы.ГруппаКлассификаторы.Видимость = Не РазделениеВключено; @@ -114,6 +112,7 @@ Элементы.ЦентрМониторингаАдресСервиса.Доступность = (ЦентрМониторингаРазрешитьОтправлятьДанные = 1); Элементы.ЦентрМониторингаНастройки.Доступность = (ЦентрМониторингаРазрешитьОтправлятьДанные <> 2); + Элементы.ГруппаОтправитьКонтактнуюИнформацию.Видимость = ПараметрыЦентраМониторинга.ЗапросКонтактнойИнформации <> 2; КонецЕсли; Иначе Элементы.ГруппаЦентрМониторинга.Видимость = Ложь; @@ -124,7 +123,7 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВнешниеКомпоненты") Тогда МодульВнешниеКомпонентыСлужебный = ОбщегоНазначения.ОбщийМодуль("ВнешниеКомпонентыСлужебный"); - ВидимостьГруппыВнешниеКомпоненты = МодульВнешниеКомпонентыСлужебный.ДоступнаЗагрузкаССайта(); + ВидимостьГруппыВнешниеКомпоненты = МодульВнешниеКомпонентыСлужебный.ДоступнаЗагрузкаСПортала(); КонецЕсли; @@ -145,11 +144,12 @@ МодульИнтернетПоддержкаПользователей = ОбщегоНазначения.ОбщийМодуль("ИнтернетПоддержкаПользователей"); МодульИнтернетПоддержкаПользователей.ИнтернетПоддержкаИСервисы_ПриСозданииНаСервере(ЭтотОбъект); Иначе - Элементы.БИПГруппаНастройки.Видимость = Ложь; - Элементы.БИПГруппаНовости.Видимость = Ложь; - Элементы.БИПГруппаОбновлениеПрограммы.Видимость = Ложь; - Элементы.БИПГруппаПроверкаКонтрагентов.Видимость = Ложь; - Элементы.БИПГруппаСПАРКРиски.Видимость = Ложь; + Элементы.БИПГруппаНастройки.Видимость = Ложь; + Элементы.БИПГруппаНовости.Видимость = Ложь; + Элементы.БИПГруппаОбновлениеПрограммы.Видимость = Ложь; + Элементы.БИПГруппаОбновлениеКлассификаторов.Видимость = Ложь; + Элементы.БИПГруппаПроверкаКонтрагентов.Видимость = Ложь; + Элементы.БИПГруппаСПАРКРиски.Видимость = Ложь; КонецЕсли; НастройкиПрограммыПереопределяемый.ИнтернетПоддержкаИСервисыПриСозданииНаСервере(ЭтотОбъект); @@ -175,12 +175,14 @@ КонецЕсли; Если ОбрабатыватьНастройкиБИП Тогда - МодульИнтернетПоддержкаПользователейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ИнтернетПоддержкаПользователейКлиент"); - МодульИнтернетПоддержкаПользователейКлиент.ИнтернетПоддержкаИСервисы_ОбработкаОповещения( - ЭтотОбъект, - ИмяСобытия, - Параметр, - Источник); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.БазоваяФункциональностьБИП") Тогда + МодульИнтернетПоддержкаПользователейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ИнтернетПоддержкаПользователейКлиент"); + МодульИнтернетПоддержкаПользователейКлиент.ИнтернетПоддержкаИСервисы_ОбработкаОповещения( + ЭтотОбъект, + ИмяСобытия, + Параметр, + Источник); + КонецЕсли; КонецЕсли; Если ИмяСобытия = "ОбсужденияПодключены" Тогда @@ -278,60 +280,57 @@ КонецПроцедуры -&НаКлиенте -Процедура БИППодключатьсяКСерверамВЗонеEuИзменении(Элемент) - - МодульИнтернетПоддержкаПользователейКлиент = - ОбщегоНазначенияКлиент.ОбщийМодуль("ИнтернетПоддержкаПользователейКлиент"); - МодульИнтернетПоддержкаПользователейКлиент.ИнтернетПоддержкаИСервисы_ПодключатьсяКСерверамВЗонеEuИзменении( - ЭтотОбъект, - Элемент); - -КонецПроцедуры - &НаКлиенте Процедура БИПВключитьРаботуСНовостямиПриИзменении(Элемент) - МодульОбработкаНовостейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбработкаНовостейКлиент"); - МодульОбработкаНовостейКлиент.ИнтернетПоддержкаИСервисы_ВключитьРаботуСНовостямиПриИзменении( - ЭтотОбъект, - Элемент); - ОбновитьИнтерфейс = Истина; - ПодключитьОбработчикОжидания("ОбновитьИнтерфейсПрограммы", 2, Истина); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.Новости") Тогда + МодульОбработкаНовостейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбработкаНовостейКлиент"); + МодульОбработкаНовостейКлиент.ИнтернетПоддержкаИСервисы_ВключитьРаботуСНовостямиПриИзменении( + ЭтотОбъект, + Элемент); + ОбновитьИнтерфейс = Истина; + ПодключитьОбработчикОжидания("ОбновитьИнтерфейсПрограммы", 2, Истина); + КонецЕсли; КонецПроцедуры &НаКлиенте Процедура БИПИспользоватьСервисСПАРКРискиПриИзменении(Элемент) - МодульСПАРКРискиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СПАРКРискиКлиент"); - МодульСПАРКРискиКлиент.ИнтернетПоддержкаИСервисы_ИспользоватьСервисСПАРКРискиПриИзменении( - ЭтотОбъект, - Элемент); - ОбновитьИнтерфейс = Истина; - ПодключитьОбработчикОжидания("ОбновитьИнтерфейсПрограммы", 2, Истина); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.СПАРКРиски") Тогда + МодульСПАРКРискиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СПАРКРискиКлиент"); + МодульСПАРКРискиКлиент.ИнтернетПоддержкаИСервисы_ИспользоватьСервисСПАРКРискиПриИзменении( + ЭтотОбъект, + Элемент); + ОбновитьИнтерфейс = Истина; + ПодключитьОбработчикОжидания("ОбновитьИнтерфейсПрограммы", 2, Истина); + КонецЕсли; КонецПроцедуры &НаКлиенте Процедура АвтоматическаяПроверкаОбновленийПриИзменении(Элемент) - МодульПолучениеОбновленийПрограммыКлиент = - ОбщегоНазначенияКлиент.ОбщийМодуль("ПолучениеОбновленийПрограммыКлиент"); - МодульПолучениеОбновленийПрограммыКлиент.ИнтернетПоддержкаИСервисы_АвтоматическаяПроверкаОбновленийПриИзменении( - ЭтотОбъект, - Элемент); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ПолучениеОбновленийПрограммы") Тогда + МодульПолучениеОбновленийПрограммыКлиент = + ОбщегоНазначенияКлиент.ОбщийМодуль("ПолучениеОбновленийПрограммыКлиент"); + МодульПолучениеОбновленийПрограммыКлиент.ИнтернетПоддержкаИСервисы_АвтоматическаяПроверкаОбновленийПриИзменении( + ЭтотОбъект, + Элемент); + КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ДекорацияРасписаниеПроверкиОбновленийНажатие(Элемент) - МодульПолучениеОбновленийПрограммыКлиент = - ОбщегоНазначенияКлиент.ОбщийМодуль("ПолучениеОбновленийПрограммыКлиент"); - МодульПолучениеОбновленийПрограммыКлиент.ИнтернетПоддержкаИСервисы_ДекорацияРасписаниеПроверкиОбновленийНажатие( - ЭтотОбъект, - Элемент); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ПолучениеОбновленийПрограммы") Тогда + МодульПолучениеОбновленийПрограммыКлиент = + ОбщегоНазначенияКлиент.ОбщийМодуль("ПолучениеОбновленийПрограммыКлиент"); + МодульПолучениеОбновленийПрограммыКлиент.ИнтернетПоддержкаИСервисы_ДекорацияРасписаниеПроверкиОбновленийНажатие( + ЭтотОбъект, + Элемент); + КонецЕсли; КонецПроцедуры @@ -352,11 +351,6 @@ Подключаемый_ПриИзмененииРеквизита(Элемент); КонецПроцедуры -&НаКлиенте -Процедура АдресныйКлассификаторПриИзменении(Элемент) - Подключаемый_ПриИзмененииРеквизита(Элемент, Ложь); -КонецПроцедуры - #КонецОбласти #Область ОбработчикиКомандФормы @@ -376,72 +370,100 @@ &НаКлиенте Процедура БИПВойтиИлиВыйти(Команда) - МодульИнтернетПоддержкаПользователейКлиент = - ОбщегоНазначенияКлиент.ОбщийМодуль("ИнтернетПоддержкаПользователейКлиент"); - МодульИнтернетПоддержкаПользователейКлиент.ИнтернетПоддержкаИСервисы_БИПВойтиИлиВыйти( - ЭтотОбъект, - Команда); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.БазоваяФункциональностьБИП") Тогда + МодульИнтернетПоддержкаПользователейКлиент = + ОбщегоНазначенияКлиент.ОбщийМодуль("ИнтернетПоддержкаПользователейКлиент"); + МодульИнтернетПоддержкаПользователейКлиент.ИнтернетПоддержкаИСервисы_БИПВойтиИлиВыйти( + ЭтотОбъект, + Команда); + КонецЕсли; КонецПроцедуры &НаКлиенте Процедура БИПСообщениеВСлужбуТехническойПоддержки(Команда) - МодульИнтернетПоддержкаПользователейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ИнтернетПоддержкаПользователейКлиент"); - МодульИнтернетПоддержкаПользователейКлиент.ИнтернетПоддержкаИСервисы_СообщениеВСлужбуТехническойПоддержки( - ЭтотОбъект, - Команда); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.БазоваяФункциональностьБИП") Тогда + МодульИнтернетПоддержкаПользователейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ИнтернетПоддержкаПользователейКлиент"); + МодульИнтернетПоддержкаПользователейКлиент.ИнтернетПоддержкаИСервисы_СообщениеВСлужбуТехническойПоддержки( + ЭтотОбъект, + Команда); + КонецЕсли; КонецПроцедуры &НаКлиенте Процедура БИПМониторИнтернетПоддержки(Команда) - МодульМониторИнтернетПоддержкиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("МониторИнтернетПоддержкиКлиент"); - МодульМониторИнтернетПоддержкиКлиент.ИнтернетПоддержкаИСервисы_МониторИнтернетПоддержки( - ЭтотОбъект, - Команда); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.МониторПортала1СИТС") Тогда + МодульМониторПортала1СИТСКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("МониторПортала1СИТСКлиент"); + МодульМониторПортала1СИТСКлиент.ИнтернетПоддержкаИСервисы_МониторПортала1СИТС( + ЭтотОбъект, + Команда); + КонецЕсли; КонецПроцедуры &НаКлиенте Процедура БИПУправлениеНовостями(Команда) - МодульОбработкаНовостейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбработкаНовостейКлиент"); - МодульОбработкаНовостейКлиент.ИнтернетПоддержкаИСервисы_УправлениеНовостями( - ЭтотОбъект, - Команда); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.Новости") Тогда + МодульОбработкаНовостейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбработкаНовостейКлиент"); + МодульОбработкаНовостейКлиент.ИнтернетПоддержкаИСервисы_УправлениеНовостями( + ЭтотОбъект, + Команда); + КонецЕсли; КонецПроцедуры &НаКлиенте Процедура БИПОбновлениеПрограммы(Команда) - МодульПолучениеОбновленийПрограммыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПолучениеОбновленийПрограммыКлиент"); - МодульПолучениеОбновленийПрограммыКлиент.ИнтернетПоддержкаИСервисы_ОбновлениеПрограммы( - ЭтотОбъект, - Команда); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ПолучениеОбновленийПрограммы") Тогда + МодульПолучениеОбновленийПрограммыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПолучениеОбновленийПрограммыКлиент"); + МодульПолучениеОбновленийПрограммыКлиент.ИнтернетПоддержкаИСервисы_ОбновлениеПрограммы( + ЭтотОбъект, + Команда); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура БИПОбновлениеКлассификаторов(Команда) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.РаботаСКлассификаторами") Тогда + МодульПолучениеРаботаСКлассификаторамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСКлассификаторамиКлиент"); + МодульПолучениеРаботаСКлассификаторамиКлиент.ИнтернетПоддержкаИСервисы_ОбновлениеКлассификаторов( + ЭтотОбъект, + Команда); + КонецЕсли; КонецПроцедуры &НаКлиенте Процедура БИПИспользоватьПроверкуКонтрагентовПриИзменении(Элемент) - МодульРаботаСКонтрагентамиКлиент = - ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСКонтрагентамиКлиент"); - МодульРаботаСКонтрагентамиКлиент.ИнтернетПоддержкаИСервисы_ИспользоватьПроверкуКонтрагентовПриИзменении( - ЭтотОбъект, - Элемент); - ОбновитьИнтерфейс = Истина; - ПодключитьОбработчикОжидания("ОбновитьИнтерфейсПрограммы", 2, Истина); + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.РаботаСКонтрагентами") Тогда + МодульРаботаСКонтрагентамиКлиент = + ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСКонтрагентамиКлиент"); + МодульРаботаСКонтрагентамиКлиент.ИнтернетПоддержкаИСервисы_ИспользоватьПроверкуКонтрагентовПриИзменении( + ЭтотОбъект, + Элемент); + ОбновитьИнтерфейс = Истина; + ПодключитьОбработчикОжидания("ОбновитьИнтерфейсПрограммы", 2, Истина); + КонецЕсли; + КонецПроцедуры &НаКлиенте Процедура БИППроверкаКонтрагентовПроверитьДоступКВебСервису(Команда) - МодульРаботаСКонтрагентамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСКонтрагентамиКлиент"); - МодульРаботаСКонтрагентамиКлиент.ИнтернетПоддержкаИСервисы_БИППроверкаКонтрагентовПроверитьДоступКВебСервису( - ЭтотОбъект, - Команда); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.РаботаСКонтрагентами") Тогда + МодульРаботаСКонтрагентамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСКонтрагентамиКлиент"); + МодульРаботаСКонтрагентамиКлиент.ИнтернетПоддержкаИСервисы_БИППроверкаКонтрагентовПроверитьДоступКВебСервису( + ЭтотОбъект, + Команда); + КонецЕсли; КонецПроцедуры @@ -596,13 +618,6 @@ Возврат; КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") - И (РеквизитПутьКДанным = "НаборКонстант.ИсточникДанныхАдресногоКлассификатора" - Или РеквизитПутьКДанным = "") Тогда - - Элементы.ГруппаАдресныйКлассификаторКоманды.Доступность = ПустаяСтрока(НаборКонстант.ИсточникДанныхАдресногоКлассификатора); - КонецЕсли; - Если (РеквизитПутьКДанным = "НаборКонстант.ИспользоватьОнлайнПоддержку" Или РеквизитПутьКДанным = "") И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВызовОнлайнПоддержки") Тогда Элементы.ГруппаНастройкаОнлайнПоддержки.Доступность = НаборКонстант.ИспользоватьОнлайнПоддержку; diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Form.form index 92f6e5135..1c7d37f7a 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Form.form @@ -112,6 +112,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -326,6 +327,7 @@ UsualGroup + HorizontalIfPossible Collapsible Button NormalSeparation @@ -501,7 +503,7 @@ ru Список внешних пользователей - 43 + 41 false ГруппаСписокВнешнихПользователейРасширеннаяПодсказка @@ -515,6 +517,7 @@ UsualGroup + Vertical Auto true true @@ -614,6 +617,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -803,6 +807,34 @@ ShowBottom Auto
    + + ОбновлениеДоступаНаУровнеЗаписей + 2219 + true + true + + true + + + ОбновлениеДоступаНаУровнеЗаписейРасширеннаяПодсказка + 2220 + Label + true + true + + Left + + + Hyperlink + Form.Command.ОбновлениеДоступаНаУровнеЗаписей + Normal + Auto + true + true + UserCmds + ShowBottom + Auto + true true @@ -855,6 +887,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -886,7 +919,6 @@ Vertical Collapsible - true Button NormalSeparation true @@ -1053,6 +1085,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1290,6 +1323,8 @@ ru Даты запрета изменения настройка + 43 + false ГруппаДатыЗапретаИзмененияНастройкаРасширеннаяПодсказка 2206 @@ -1319,7 +1354,6 @@ ru Даты запрета изменения - 43 false ГруппаДатыЗапретаИзмененияРасширеннаяПодсказка @@ -1333,6 +1367,7 @@ UsualGroup + HorizontalIfPossible Collapsible true Button @@ -1349,7 +1384,7 @@ 2209 ГруппаНастройкиЗащитыПерсональныхДанных - 2219 + 2221 ГруппаОткрытьНастройкиРегистрацииСобытийДоступаКПерсональнымДанным 2211 @@ -1417,13 +1452,13 @@ ГруппаСкрытиеПерсональныхДанныхИспользование - 2221 + 2223 ГруппаДнейДоСкрытия - 2223 + 2225 ИспользоватьСкрытиеПерсональныхДанных - 2225 + 2227 <key>ru</key> <value>Скрывать персональные данные через</value> @@ -1437,17 +1472,14 @@ <segments>НаборКонстант.ИспользоватьСкрытиеПерсональныхДанныхСубъектов</segments> </dataPath> <titleLocation>Right</titleLocation> - <toolTip> - <key>ru</key> - <value>Скрывать персональные данные субъектов</value> - </toolTip> + <toolTipRepresentation>ShowBottom</toolTipRepresentation> <handlers> <event>OnChange</event> <name>Подключаемый_НастройкиСкрытияПДнПриИзменении</name> </handlers> <extendedTooltip> <name>ИспользоватьСкрытиеПерсональныхДанныхРасширеннаяПодсказка</name> - <id>2227</id> + <id>2229</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1457,7 +1489,7 @@ </extendedTooltip> <contextMenu> <name>ИспользоватьСкрытиеПерсональныхДанныхКонтекстноеМеню</name> - <id>2226</id> + <id>2228</id> <autoFill>true</autoFill> </contextMenu> <type>CheckBoxField</type> @@ -1469,7 +1501,7 @@ </items> <items xsi:type="form:FormField"> <name>ДнейДоСкрытияПерсональныхДанныхСубъектов</name> - <id>2228</id> + <id>2230</id> <title> <key>ru</key> <value>дней</value> @@ -1489,7 +1521,7 @@ </handlers> <extendedTooltip> <name>ДнейДоСкрытияПерсональныхДанныхСубъектовРасширеннаяПодсказка</name> - <id>2230</id> + <id>2232</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1499,7 +1531,7 @@ </extendedTooltip> <contextMenu> <name>ДнейДоСкрытияПерсональныхДанныхСубъектовКонтекстноеМеню</name> - <id>2229</id> + <id>2231</id> <autoFill>true</autoFill> </contextMenu> <type>InputField</type> @@ -1519,7 +1551,7 @@ </items> <items xsi:type="form:Decoration"> <name>ДекорацияОжиданиеИзмененияИспользованияСкрытияПДн</name> - <id>2231</id> + <id>2233</id> <title> <key>ru</key> <value>Декорация ожидание изменения использования скрытия ПДн</value> @@ -1530,7 +1562,7 @@ </userVisible> <extendedTooltip> <name>ДекорацияОжиданиеИзмененияИспользованияСкрытияПДнРасширеннаяПодсказка</name> - <id>2233</id> + <id>2235</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1540,7 +1572,7 @@ </extendedTooltip> <contextMenu> <name>ДекорацияОжиданиеИзмененияИспользованияСкрытияПДнКонтекстноеМеню</name> - <id>2232</id> + <id>2234</id> <autoFill>true</autoFill> </contextMenu> <width>2</width> @@ -1571,7 +1603,7 @@ <horizontalStretch>false</horizontalStretch> <extendedTooltip> <name>ГруппаДнейДоСкрытияРасширеннаяПодсказка</name> - <id>2224</id> + <id>2226</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1599,7 +1631,7 @@ ГруппаСкрытиеПерсональныхДанныхИспользованиеРасширеннаяПодсказка - 2222 + 2224 Label true true @@ -1628,7 +1660,7 @@ ГруппаНастройкиЗащитыПерсональныхДанныхРасширеннаяПодсказка - 2220 + 2222 Label true true @@ -1733,6 +1765,7 @@ UsualGroup + HorizontalIfPossible Collapsible true Button @@ -1923,6 +1956,30 @@ DontUse Auto + + ОбновлениеДоступаНаУровнеЗаписей + + <key>ru</key> + <value>Обновление доступа на уровне записей</value> + + 2 + + ru + Отображает ход обновления доступа, а также позволяет вручную: +- обновить доступ отдельного объекта, +- запланировать обновление доступа к требуемым спискам. + + + true + + + + ОбновлениеДоступаНаУровнеЗаписей + + + Auto + Auto + diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Help/ru.html index 0cccef90b..40d3e11fb 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Help/ru.html @@ -29,5 +29,6 @@ TD {
  • См. также Даты запрета загрузки данных в панели Администрирование - Синхронизация данных.
  • Защита персональных данных 

    См. также:

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

    \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Module.bsl index 47c474af2..24a00c5d1 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Module.bsl @@ -19,7 +19,7 @@ Элементы.ГруппаСписокВнешнихПользователейОтступ.Видимость = Ложь; Элементы.ГруппаНастройкиВходаВнешнихПользователей.Видимость = Ложь; Элементы.ГруппаВнешниеПользователи.Группировка - = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; КонецЕсли; Если ОбщегоНазначения.РазделениеВключено() @@ -43,10 +43,14 @@ УпрощенныйИнтерфейс = МодульУправлениеДоступомСлужебный.УпрощенныйИнтерфейсНастройкиПравДоступа(); Элементы.ОткрытьГруппыДоступа.Видимость = НЕ УпрощенныйИнтерфейс; Элементы.ИспользоватьГруппыПользователей.Видимость = НЕ УпрощенныйИнтерфейс; + Элементы.ОбновлениеДоступаНаУровнеЗаписей.Видимость = + МодульУправлениеДоступомСлужебный.ОграничиватьДоступНаУровнеЗаписейУниверсально(Истина); Если ОбщегоНазначения.ЭтоАвтономноеРабочееМесто() Тогда Элементы.ОграничиватьДоступНаУровнеЗаписей.Доступность = Ложь; КонецЕсли; + Иначе + Элементы.ГруппаГруппыДоступа.Видимость = Ложь; КонецЕсли; Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда @@ -187,6 +191,14 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбновлениеДоступаНаУровнеЗаписей(Команда) + + ОткрытьФорму("РегистрСведений" + "." + "ОбновлениеКлючейДоступаКДанным" + "." + + "Форма" + "." + "ОбновлениеДоступаНаУровнеЗаписей"); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -347,6 +359,14 @@ НаборКонстант.ИспользоватьДатыЗапретаИзменения; КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") + И (РеквизитПутьКДанным = "НаборКонстант.ОграничиватьДоступНаУровнеЗаписей" + Или РеквизитПутьКДанным = "") Тогда + + Элементы.ОбновлениеДоступаНаУровнеЗаписей.Доступность = + НаборКонстант.ОграничиватьДоступНаУровнеЗаписей; + КонецЕсли; + КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Form.form index d7ee3506f..a46953e99 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Form.form @@ -110,6 +110,7 @@
    UsualGroup + HorizontalIfPossible Auto true true @@ -282,6 +283,7 @@
    UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -418,6 +420,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -570,6 +573,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -698,6 +702,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1142,6 +1147,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1302,6 +1308,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Help/ru.html index 92f772c10..b3fffe67a 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Help/ru.html @@ -26,5 +26,11 @@ TD {
    Все данные находятся в одном месте - в информационной базе;
  • Для резервного копирования достаточно стандартных средств платформы 1С:Предприятия или СУБД.
  • Необходимо помнить, что хранение файлов в информационной базе подходит только для баз с небольшим количеством (объемом) файлов.

    -

    См. также:

    +

    Правила хранения файлов в томах

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

    См. также:

    \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Form.form index 30afa962b..c527c9efa 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Form.form @@ -111,6 +111,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -250,6 +251,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -488,6 +490,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -686,6 +689,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1088,6 +1092,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1194,6 +1199,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -1397,6 +1403,7 @@ Page + HorizontalIfPossible auto false @@ -1495,6 +1502,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1656,6 +1664,7 @@ Page + HorizontalIfPossible auto false @@ -2040,6 +2049,7 @@ Page + HorizontalIfPossible auto false @@ -2138,6 +2148,7 @@ Page + HorizontalIfPossible auto false @@ -2440,6 +2451,7 @@ UsualGroup + HorizontalIfPossible Collapsible true Button @@ -2466,7 +2478,7 @@ 2103 <key>ru</key> - <value>Установка обновлений</value> + <value>Установка обновлений и исправлений (патчей)</value> true true @@ -2478,7 +2490,7 @@ 2104 <key>ru</key> - <value>Обновление программы из файла на локальном диске или в сетевом каталоге.</value> + <value>Обновление программы из файла на локальном диске, в сетевом каталоге или установка исправлений (патчей).</value> Label true @@ -2519,6 +2531,172 @@ UsualGroup + HorizontalIfPossible + Auto + true + true + Auto + Auto + +
    + + ГруппаУстановленныеИсправления + 2227 + + УстановленныеИсправленияОткрыть + 2225 + + <key>ru</key> + <value>Установленные исправления (патчи)</value> + + true + true + + true + + + УстановленныеИсправленияОткрытьРасширеннаяПодсказка + 2226 + + <key>ru</key> + <value>Список установленных в программе исправлений.</value> + + Label + true + true + + Left + + + Hyperlink + CommonForm.УстановленныеИсправления.StandardCommand.Open + Normal + Auto + true + true + UserCmds + ShowBottom + Auto + + true + true + + true + + + <key>ru</key> + <value>Установленные исправления</value> + + + ГруппаУстановленныеИсправленияРасширеннаяПодсказка + 2228 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Обновление и описание изменений первая строка</value> + + + ГруппаОбновлениеИОписаниеИзмененийПерваяСтрокаРасширеннаяПодсказка + 2044 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + +
    + + ГруппаОбновлениеИОписаниеИзмененийВтораяСтрока + 2059 + + ГруппаОтложеннаяОбработкаДанных + 2052 + + РезультатыОбновленияИДополнительнаяОбработкаДанных + 2054 + true + true + + true + + + РезультатыОбновленияИДополнительнаяОбработкаДанныхРасширеннаяПодсказка + 2055 + + <key>ru</key> + <value>Сведения о ходе обновления версии программы, отложенное выполнение дополнительных процедур обработки данных.</value> + + Label + true + + Left + + + Hyperlink + Form.Command.РезультатыОбновленияИДополнительнаяОбработкаДанных + Normal + Auto + true + true + UserCmds + ShowBottom + Auto + + true + true + + true + + + <key>ru</key> + <value>Отложенная обработка данных</value> + + 43 + false + + ГруппаОтложеннаяОбработкаДанныхРасширеннаяПодсказка + 2053 + Label + true + true + + Left + + + UsualGroup + + Vertical Auto true true @@ -2599,11 +2777,11 @@ <key>ru</key> - <value>Обновление и описание изменений первая строка</value> + <value>Обновление и описание изменений вторая строка</value> - ГруппаОбновлениеИОписаниеИзмененийПерваяСтрокаРасширеннаяПодсказка - 2044 + ГруппаОбновлениеИОписаниеИзмененийВтораяСтрокаРасширеннаяПодсказка + 2060 Label true true @@ -2613,6 +2791,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2621,73 +2800,8 @@ - ГруппаОбновлениеИОписаниеИзмененийВтораяСтрока - 2059 - - ГруппаОтложеннаяОбработкаДанных - 2052 - - РезультатыОбновленияИДополнительнаяОбработкаДанных - 2054 - true - true - - true - - - РезультатыОбновленияИДополнительнаяОбработкаДанныхРасширеннаяПодсказка - 2055 - - <key>ru</key> - <value>Сведения о ходе обновления версии программы, отложенное выполнение дополнительных процедур обработки данных.</value> - - Label - true - - Left - - - Hyperlink - Form.Command.РезультатыОбновленияИДополнительнаяОбработкаДанных - Normal - Auto - true - true - UserCmds - ShowBottom - Auto - - true - true - - true - - - <key>ru</key> - <value>Отложенная обработка данных</value> - - 43 - false - - ГруппаОтложеннаяОбработкаДанныхРасширеннаяПодсказка - 2053 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - + ГруппаРезультатыОбновленияПрограммыТретьяСтрока + 2223 ГруппаДетализироватьОбновлениеИБВЖурналеРегистрации 2061 @@ -2775,11 +2889,11 @@ <key>ru</key> - <value>Обновление и описание изменений вторая строка</value> + <value>Результаты обновления программы третья строка</value> - ГруппаОбновлениеИОписаниеИзмененийВтораяСтрокаРасширеннаяПодсказка - 2060 + ГруппаРезультатыОбновленияПрограммыТретьяСтрокаРасширеннаяПодсказка + 2224 Label true true @@ -2789,6 +2903,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2803,7 +2918,7 @@ <key>ru</key> - <value>Результаты обновления программы</value> + <value>Обновление программы</value> ГруппаРезультатыОбновленияПрограммыРасширеннаяПодсказка @@ -3108,6 +3223,7 @@ UsualGroup + HorizontalIfPossible Collapsible true Button diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Help/ru.html index 75bf99043..502d71fa9 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Help/ru.html @@ -40,8 +40,8 @@ TD {
  • Управление итогами и агрегатами
  • Управление итогами регистров накопления и бухгалтерии и агрегатами оборотных регистров. Правильная настройка итогов и агрегатов может повысить производительность программы.

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

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

    - - +
    Создание резервной  копии
    + -
    Создание резервной  копии Выполнение резервного копирования программы: прямо сейчас, через некоторое время или при завершении работы.
  • Настройка резервного копирования
  • Настройка автоматического резервного копирования по расписанию, или отключение контроля резервного копирования, если оно выполняется сторонними средствами.
    @@ -57,14 +57,16 @@ TD { Поиск похожих элементов по заданным условиям сравнения.
  • Правила проверки учета
  • Правила проверки корректности данных информационной базы.

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

    -

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

    - - - -

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

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

    +

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

    + + +

    + + diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Module.bsl index f03794f65..7808af687 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Module.bsl @@ -77,8 +77,19 @@ И Не ОбщегоНазначения.РазделениеВключено() И Не ОбщегоНазначенияКлиентСервер.КлиентПодключенЧерезВебСервер() И ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент(); + + Элементы.ГруппаУстановленныеИсправления.Видимость = + Пользователи.ЭтоПолноправныйПользователь() + И Не СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации(); + + Если СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() Тогда + Элементы.УстановкаОбновлений.Заголовок = НСтр("ru = 'Установка обновлений'"); + Элементы.УстановкаОбновлений.РасширеннаяПодсказка.Заголовок = + НСтр("ru = 'Обновление программы из файла на локальном диске или в сетевом каталоге.'"); + КонецЕсли; Иначе Элементы.ГруппаУстановкаОбновлений.Видимость = Ложь; + Элементы.ГруппаУстановленныеИсправления.Видимость = Ложь; КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ОблачныйАрхив") Тогда @@ -186,6 +197,7 @@ РазблокироватьРаботуСВнешнимиРесурсамиНаСервере(); СтандартныеПодсистемыКлиент.УстановитьРасширенныйЗаголовокПриложения(); Оповестить("РазрешенаРаботаСВнешнимиРесурсами"); + ОбновитьИнтерфейс(); КонецПроцедуры &НаКлиенте @@ -326,11 +338,19 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности") И (РеквизитПутьКДанным = "НаборКонстант.ВыполнятьЗамерыПроизводительности" Или РеквизитПутьКДанным = "") Тогда - ЭлементОбработкаОценкаПроизводительности = Элементы.Найти("ОбработкаОценкаПроизводительности"); + ЭлементОбработкаОценкаПроизводительностиИмпортЗамеровПроизводительности = Элементы.Найти("ОбработкаОценкаПроизводительностиИмпортЗамеровПроизводительности"); + ЭлементОбработкаОценкаПроизводительностиЭкспортДанных = Элементы.Найти("ОбработкаОценкаПроизводительностиЭкспортДанных"); + ЭлементСправочникПрофилиКлючевыхОперацийОткрытьСписок = Элементы.Найти("СправочникПрофилиКлючевыхОперацийОткрытьСписок"); ЭлементОбработкаНастройкиОценкиПроизводительности = Элементы.Найти("ОбработкаНастройкиОценкиПроизводительности"); - Если (ЭлементОбработкаОценкаПроизводительности <> Неопределено И ЭлементОбработкаНастройкиОценкиПроизводительности <> Неопределено И НаборКонстант.Свойство("ВыполнятьЗамерыПроизводительности")) Тогда - ЭлементОбработкаОценкаПроизводительности.Доступность = НаборКонстант.ВыполнятьЗамерыПроизводительности; + Если (ЭлементОбработкаНастройкиОценкиПроизводительности <> Неопределено + И ЭлементОбработкаОценкаПроизводительностиЭкспортДанных <> Неопределено + И ЭлементСправочникПрофилиКлючевыхОперацийОткрытьСписок <> Неопределено + И ЭлементОбработкаОценкаПроизводительностиИмпортЗамеровПроизводительности <> Неопределено + И НаборКонстант.Свойство("ВыполнятьЗамерыПроизводительности")) Тогда ЭлементОбработкаНастройкиОценкиПроизводительности.Доступность = НаборКонстант.ВыполнятьЗамерыПроизводительности; + ЭлементОбработкаОценкаПроизводительностиЭкспортДанных.Доступность = НаборКонстант.ВыполнятьЗамерыПроизводительности; + ЭлементСправочникПрофилиКлючевыхОперацийОткрытьСписок.Доступность = НаборКонстант.ВыполнятьЗамерыПроизводительности; + ЭлементОбработкаОценкаПроизводительностиИмпортЗамеровПроизводительности.Доступность = НаборКонстант.ВыполнятьЗамерыПроизводительности; КонецЕсли; КонецЕсли; diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Form.form index b8245ed61..2d9ecff46 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Form.form @@ -112,6 +112,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -275,6 +276,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -675,6 +677,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -778,6 +781,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -1120,6 +1124,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1342,6 +1347,7 @@ UsualGroup + HorizontalIfPossible Collapsible true Button @@ -1527,6 +1533,7 @@ UsualGroup + HorizontalIfPossible Collapsible true Button @@ -1663,6 +1670,7 @@ ru Управление полнотекстовым поиском и извлечением текстов настройка + 43 ГруппаУправлениеПолнотекстовымПоискомИИзвлечениемТекстовНастройкаРасширеннаяПодсказка 2082 @@ -1692,7 +1700,6 @@ ru Полнотекстовый поиск данных - 43 false ГруппаУправлениеПолнотекстовымПоискомИИзвлечениемТекстовExtendedTooltip @@ -1706,6 +1713,7 @@ UsualGroup + HorizontalIfPossible Collapsible true Button @@ -1836,6 +1844,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1960,6 +1969,7 @@ UsualGroup + HorizontalIfPossible Collapsible true Button diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Form.form index febe155c3..36de206e2 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Form.form @@ -111,6 +111,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -304,6 +305,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -501,6 +503,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -693,6 +696,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -990,6 +994,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -1246,6 +1251,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1455,6 +1461,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1569,6 +1576,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1674,6 +1682,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1789,6 +1798,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1894,6 +1904,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2062,6 +2073,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2117,6 +2129,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2285,6 +2298,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2340,6 +2354,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Form.form index c112fdee0..f649c634e 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Form.form @@ -111,6 +111,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -182,6 +183,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -250,6 +252,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -278,6 +281,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -348,6 +352,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -413,6 +418,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -441,6 +447,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -510,6 +517,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -517,6 +525,40 @@ Auto + true + true + + true + + + <key>ru</key> + <value>Универсальный отчет расширения</value> + + + ГруппаУниверсальныйОтчетРасширенияРасширеннаяПодсказка + 1642 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + NormalSeparation + true + true + Equal + Auto + Auto + + + + ГруппаРасширенияИВнешниеКомпоненты + 1690 ГруппаРасширения 1672 @@ -575,6 +617,73 @@ UsualGroup + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + ГруппаВнешниеКомпоненты + 1686 + + ОбработкаУправлениеВнешнимиКомпонентами + 1688 + true + true + + true + + + ОбработкаУправлениеВнешнимиКомпонентамиРасширеннаяПодсказка + 1689 + + <key>ru</key> + <value>Подключение внешних компонент сторонних поставщиков к программе.</value> + + Label + true + true + + Left + + + Hyperlink + Catalog.ВнешниеКомпоненты.StandardCommand.OpenList + Normal + Auto + true + true + UserCmds + ShowBottom + Auto + + true + true + + true + + + <key>ru</key> + <value>Внешние компоненты</value> + + 43 + false + + ГруппаВнешниеКомпонентыРасширеннаяПодсказка + 1687 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible Auto true true @@ -589,11 +698,11 @@ <key>ru</key> - <value>Универсальный отчет расширения</value> + <value>Расширения и внешние компоненты</value> - ГруппаУниверсальныйОтчетРасширенияРасширеннаяПодсказка - 1642 + ГруппаРасширенияИВнешниеКомпонентыРасширеннаяПодсказка + 1691 Label true true @@ -603,6 +712,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -612,72 +722,6 @@ Auto - - ГруппаУправлениеВнешнимиКомпонентами - 1686 - - ОбработкаУправлениеВнешнимиКомпонентами - 1688 - true - true - - true - - - ОбработкаУправлениеВнешнимиКомпонентамиРасширеннаяПодсказка - 1689 - - <key>ru</key> - <value>Подключение внешних компонент сторонних поставщиков к программе.</value> - - Label - true - true - - Left - - - Hyperlink - Catalog.ВнешниеКомпоненты.StandardCommand.OpenList - Normal - Auto - true - true - UserCmds - ShowBottom - Auto - - true - true - - true - - - <key>ru</key> - <value>Управление внешними компонентами</value> - - 43 - false - - ГруппаУправлениеВнешнимиКомпонентамиРасширеннаяПодсказка - 1687 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - ГруппаДополнительныеОтчетыИОбработки 1593 @@ -754,6 +798,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -818,6 +863,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -846,6 +892,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Form.form index 3c7fd416a..717987d35 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Form.form @@ -111,6 +111,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -288,6 +289,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -466,6 +468,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -634,6 +637,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -754,6 +758,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Form.form b/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Form.form index 6f8b87a8b..078bc9901 100644 --- a/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Form.form @@ -100,6 +100,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -253,6 +254,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/Форма/Form.form b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/Форма/Form.form index e20edf6ae..3f861530d 100644 --- a/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/Форма/Form.form @@ -33,7 +33,7 @@ true - CommonPicture.Обсуждения + CommonPicture.ПодключениеОбсуждений @@ -99,6 +99,7 @@ Page + HorizontalIfPossible auto false @@ -137,7 +138,7 @@ true - CommonPicture.Обсуждения + CommonPicture.ПодключениеОбсуждений @@ -201,6 +202,7 @@ Page + HorizontalIfPossible auto false @@ -235,7 +237,7 @@ true - CommonPicture.Обсуждения + CommonPicture.ПодключениеОбсуждений @@ -380,6 +382,7 @@ Page + HorizontalIfPossible auto false @@ -525,7 +528,7 @@ true - CommonPicture.Обсуждения + CommonPicture.ПодключениеОбсуждений @@ -589,6 +592,7 @@ Page + HorizontalIfPossible auto false @@ -687,6 +691,7 @@ Page + HorizontalIfPossible auto false @@ -903,6 +908,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Form.form b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Form.form index fab0b06a6..d577e1136 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Form.form +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Form.form @@ -1430,6 +1430,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1539,6 +1540,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1775,6 +1777,7 @@ Page + HorizontalIfPossible auto false @@ -2794,6 +2797,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2901,6 +2905,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -3180,6 +3185,7 @@ Page + HorizontalIfPossible auto false @@ -3419,6 +3425,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Module.bsl b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Module.bsl index 4a7168e2d..e072078f2 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Module.bsl +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Module.bsl @@ -1449,6 +1449,7 @@ НаименованиеМетода = НСтр("ru = 'Поиск и удаление дублей: Удаление дублей'"); ПараметрыПроцедуры.Вставить("СпособУдаления", "Пометка"); ПараметрыПроцедуры.Вставить("ПарыЗамен", ПарыЗаменДублей()); + ПараметрыПроцедуры.Вставить("ЗаменаПарыВТранзакции", Ложь); Иначе ВызватьИсключение НСтр("ru = 'Некорректное имя процедуры.'"); diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ВыборОбластиПоиска/Form.form b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ВыборОбластиПоиска/Form.form index 60c3f0e36..3fa7900d3 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ВыборОбластиПоиска/Form.form +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ВыборОбластиПоиска/Form.form @@ -245,6 +245,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Form.form b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Form.form index 68af33fcb..2ed838844 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Form.form +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Form.form @@ -110,6 +110,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -170,6 +171,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -359,6 +361,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -550,6 +553,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -801,6 +805,7 @@ UsualGroup + HorizontalIfPossible Auto true Auto @@ -912,6 +917,7 @@ UsualGroup + HorizontalIfPossible Auto true Auto diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Form.form b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Form.form index 8daebf143..7dd958f2c 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Form.form +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Form.form @@ -108,6 +108,7 @@ true true true + HorizontalIfPossible true true auto diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Form.form b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Form.form index 1775452bd..cc06f1b97 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Form.form @@ -122,6 +122,10 @@ Left true + + Clearing + ВидТранспортаСообщенийОбменаОчистка + true true true @@ -157,6 +161,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -195,9 +200,6 @@ true true UserCmds - - StdPicture.Change - Auto true @@ -222,6 +224,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -451,6 +454,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -481,7 +485,7 @@ Vertical Auto - NormalSeparation + WeakSeparation true true auto @@ -551,6 +555,208 @@ false + + СтраницаОжиданияАнализаДанных + 454 + + ЗаголовокСтраницыОжиданияАнализаДанных + 698 + + ГруппаКартинки2 + 699 + + Декорация27 + 700 + true + true + + true + + + Декорация27ExtendedTooltip + 876 + Label + true + true + + Left + + + + Декорация27КонтекстноеМеню + 701 + true + + 6 + true + 2 + true + false + + + CommonPicture.СинхронизацияДанныхАнализДанных48 + + + + true + true + + true + + + <key>ru</key> + <value>Группа картинки</value> + + + ГруппаКартинки2ExtendedTooltip + 875 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаСообщения2 + 702 + + Декорация28 + 703 + + <key>ru</key> + <value>Выполняется анализ данных. Это может занять несколько минут. +Пожалуйста, подождите...</value> + + true + true + + true + + + Декорация28ExtendedTooltip + 878 + Label + true + true + + Left + + + + Декорация28КонтекстноеМеню + 704 + true + + Label + true + false + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Группа сообщения</value> + + + ГруппаСообщения2ExtendedTooltip + 877 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Анализ данных</value> + + + ЗаголовокСтраницыОжиданияАнализаДанныхРасширеннаяПодсказка + 874 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Center + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница ожидания анализа данных</value> + + + ru + Страница ожидания + + + СтраницаОжиданияАнализаДанныхExtendedTooltip + 872 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + СтраницаИнформацииСтатистики 169 @@ -722,6 +928,7 @@ Page + HorizontalIfPossible auto false @@ -773,7 +980,7 @@ Vertical Auto - NormalSeparation + WeakSeparation true true auto @@ -1770,1184 +1977,6 @@ false - - СтраницаОкончанияСопоставления - 289 - - ЗаголовокСтраницыОкончанияСопоставления - 579 - - ГруппаРезультатаВыполненияОбменаДанными - 374 - - ГруппаЗагрузкиДанных - 375 - - СтраницыСтатусаЗагрузкиДанных - 376 - - СтатусЗагрузкиНеопределено - 377 - - КартинкаНеопределено - 378 - - <key>ru</key> - <value>Картинка неопределено</value> - - true - true - - true - - - КартинкаНеопределеноExtendedTooltip - 790 - Label - true - true - - Left - - - - КартинкаНеопределеноКонтекстноеМеню - 379 - true - - true - 1 - true - 1 - false - - - true - true - - true - - - <key>ru</key> - <value>Статус загрузки неопределено</value> - - 2 - 1 - false - - СтатусЗагрузкиНеопределеноExtendedTooltip - 789 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтатусЗагрузкиУспех - 380 - - КартинкаУспех - 381 - - <key>ru</key> - <value>Картинка успех</value> - - true - true - - true - - - КартинкаУспехExtendedTooltip - 792 - Label - true - true - - Left - - - - КартинкаУспехКонтекстноеМеню - 382 - true - - true - 1 - 1 - true - 1 - false - - - true - true - - true - - - <key>ru</key> - <value>Статус загрузки успех</value> - - - ru - Статус загрузки неопределено - - 2 - 1 - false - - СтатусЗагрузкиУспехExtendedTooltip - 791 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтатусЗагрузкиОшибка - 383 - - КартинкаОшибка - 384 - - <key>ru</key> - <value>Картинка ошибка</value> - - true - true - - true - - - КартинкаОшибкаExtendedTooltip - 794 - Label - true - true - - Left - - - - КартинкаОшибкаКонтекстноеМеню - 385 - true - - true - 1 - true - false - - - CommonPicture.СостояниеОбменаДаннымиОшибка - - - - true - true - - true - - - <key>ru</key> - <value>Статус загрузки ошибка</value> - - - ru - Статус загрузки неопределено - - 2 - 1 - false - - СтатусЗагрузкиОшибкаExtendedTooltip - 793 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтатусЗагрузкиПредупреждение - 386 - - КартинкаПредупреждение1 - 387 - - <key>ru</key> - <value>Картинка ошибка</value> - - true - true - - true - - - КартинкаПредупреждение1ExtendedTooltip - 796 - Label - true - true - - Left - - - - КартинкаПредупреждение1КонтекстноеМеню - 388 - true - - true - 1 - true - false - - - CommonPicture.Предупреждение - - - - true - true - - true - - - <key>ru</key> - <value>Статус загрузки предупреждение</value> - - - ru - Статус загрузки неопределено - - 2 - false - - СтатусЗагрузкиПредупреждениеExtendedTooltip - 795 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - true - true - - true - - - <key>ru</key> - <value>Страницы статуса загрузки данных</value> - - - СтраницыСтатусаЗагрузкиДанныхExtendedTooltip - 788 - Label - true - true - - Left - - - Pages - - Auto - - - - ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных - 577 - - <key>ru</key> - <value>Описание получения данных</value> - - true - true - - true - - - ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанныхExtendedTooltip - 797 - Label - true - true - - Left - - - - ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанныхКонтекстноеМеню - 578 - true - - Label - true - 1 - true - 1 - - Left - - - - ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанныхПодробно - 389 - - <key>ru</key> - <value>Подробно...</value> - - true - true - - true - - false - - ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанныхПодробноExtendedTooltip - 810 - Label - true - true - - Left - - - Hyperlink - Form.Command.ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных - Normal - Auto - true - 1 - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Загрузки данных</value> - - - ГруппаЗагрузкиДанныхExtendedTooltip - 787 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ГруппаВыгрузкиДанных - 390 - - СтраницыСтатусаВыгрузкиДанных - 391 - - СтатусВыгрузкиНеопределено - 392 - - КартинкаНеопределено1 - 393 - - <key>ru</key> - <value>Картинка неопределено</value> - - true - true - - true - - - КартинкаНеопределено1ExtendedTooltip - 801 - Label - true - true - - Left - - - - КартинкаНеопределено1КонтекстноеМеню - 394 - true - - 1 - false - - - true - true - - true - - - <key>ru</key> - <value>Статус выгрузки неопределено</value> - - - ru - Статус загрузки неопределено - - 2 - 1 - - СтатусВыгрузкиНеопределеноExtendedTooltip - 800 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтатусВыгрузкиУспех - 395 - - КартинкаУспех1 - 396 - - <key>ru</key> - <value>Картинка успех</value> - - true - true - - true - - - КартинкаУспех1ExtendedTooltip - 803 - Label - true - true - - Left - - - - КартинкаУспех1КонтекстноеМеню - 397 - true - - 2 - 1 - 1 - false - - - true - true - - true - - - <key>ru</key> - <value>Статус выгрузки успех</value> - - 2 - 1 - - СтатусВыгрузкиУспехExtendedTooltip - 802 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтатусВыгрузкиОшибка - 398 - - КартинкаОшибка1 - 399 - - <key>ru</key> - <value>Картинка ошибка</value> - - true - true - - true - - - КартинкаОшибка1ExtendedTooltip - 805 - Label - true - true - - Left - - - - КартинкаОшибка1КонтекстноеМеню - 400 - true - - false - - - CommonPicture.СостояниеОбменаДаннымиОшибка - - - - true - true - - true - - - <key>ru</key> - <value>Статус выгрузки ошибка</value> - - - ru - Статус загрузки неопределено - - 2 - 1 - - СтатусВыгрузкиОшибкаExtendedTooltip - 804 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтатусВыгрузкиПредупреждение - 401 - - КартинкаПредупреждение - 402 - - <key>ru</key> - <value>Картинка ошибка</value> - - true - true - - true - - - КартинкаПредупреждениеExtendedTooltip - 807 - Label - true - true - - Left - - - - КартинкаПредупреждениеКонтекстноеМеню - 403 - true - - false - - - CommonPicture.Предупреждение - - - - true - true - - true - - - <key>ru</key> - <value>Статус выгрузки предупреждение</value> - - - ru - Статус загрузки неопределено - - 2 - 1 - - СтатусВыгрузкиПредупреждениеExtendedTooltip - 806 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - true - true - - true - - - <key>ru</key> - <value>Страницы статуса выгрузки данных</value> - - - СтраницыСтатусаВыгрузкиДанныхExtendedTooltip - 799 - Label - true - true - - Left - - - Pages - - Auto - - - - ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных - 581 - - <key>ru</key> - <value>Описание отправки данных</value> - - true - true - - true - - - ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанныхExtendedTooltip - 808 - Label - true - true - - Left - - - - ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанныхКонтекстноеМеню - 582 - true - - Label - true - true - - Left - - - - ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанныхПодробно - 404 - - <key>ru</key> - <value>Подробно...</value> - - true - true - - true - - false - - ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанныхПодробноExtendedTooltip - 811 - Label - true - true - - Left - - - Hyperlink - Form.Command.ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Выгрузки данных</value> - - - ru - Группа загрузки данных - - - ГруппаВыгрузкиДанныхExtendedTooltip - 798 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Результата выполнения обмена данными</value> - - - ГруппаРезультатаВыполненияОбменаДаннымиExtendedTooltip - 786 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Синхронизация завершена</value> - - - ЗаголовокСтраницыОкончанияСопоставленияРасширеннаяПодсказка - 785 - Label - true - true - - Left - - - UsualGroup - - Auto - NormalSeparation - true - true - auto - Auto - Auto - - - - ИнформационнаяНадписьНастройкиРасписания - 337 - - Группировка - 370 - - ГруппаКартинкаНастройкиРасписания - 913 - - Декорация14 - 339 - true - true - - true - - - Декорация14ExtendedTooltip - 814 - Label - true - true - - Left - - - - Декорация14КонтекстноеМеню - 340 - true - - true - true - false - - - CommonPicture.Информация32 - - - - true - true - - true - - - <key>ru</key> - <value>Картинка настройки расписания</value> - - - ru - Картинка настройка расписания - - - ГруппаКартинкаНастройкиРасписанияРасширеннаяПодсказка - 914 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ГруппаТекстНастройкиРасписания - 478 - - Декорация15 - 342 - - <key>ru</key> - <value>При необходимости можно настроить расписание -для синхронизации данных в автоматическом режиме.</value> - - true - true - - true - - - Декорация15ExtendedTooltip - 816 - Label - true - true - - Left - - - - Декорация15КонтекстноеМеню - 343 - true - - Label - 2 - true - false - - Style.ПоясняющийТекст - - - System.DefaultGUIFont - - - Left - Center - - - - ОткрытьНастройкуРасписания - 583 - true - true - - true - - - ОткрытьНастройкуРасписанияExtendedTooltip - 817 - Label - true - true - - Left - - - UsualButton - Form.Command.ОткрытьНастройкуРасписания - Normal - PictureAndText - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Текст настройки расписания</value> - - - ru - Текст настройка расписания - - - ГруппаТекстНастройкиРасписанияРасширеннаяПодсказка - 815 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Группировка</value> - - - ГруппировкаExtendedTooltip - 813 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Информационная надпись настройки расписания</value> - - - ru - Группировка сообщения - - - ИнформационнаяНадписьНастройкиРасписанияExtendedTooltip - 812 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Auto - Auto - - - - Декорация10 - 321 - - <key>ru</key> - <value>Нажмите кнопку "Готово" для завершения работы с помощником.</value> - - true - true - - true - - - Декорация10ExtendedTooltip - 819 - Label - true - true - - Left - - - - Декорация10КонтекстноеМеню - 322 - true - - Label - 3 - true - true - false - - Left - Bottom - - - true - true - - true - - - <key>ru</key> - <value>Страница окончания сопоставления</value> - - - СтраницаОкончанияСопоставленияExtendedTooltip - 783 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - СтраницаВопросОСоставеВыгрузки 540 @@ -3106,6 +2135,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -3439,6 +2469,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -3496,6 +2527,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -3677,6 +2709,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -3831,6 +2864,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -3859,6 +2893,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -4268,6 +3303,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -4356,7 +3392,7 @@ Vertical Auto - NormalSeparation + WeakSeparation true true auto @@ -4482,6 +3518,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -4582,58 +3619,22 @@ - СтраницаОжиданияАнализаДанных - 454 + СтраницаРегистрацияДанных + 968 - ЗаголовокСтраницыОжиданияАнализаДанных - 698 - - ГруппаКартинки2 - 699 - - Декорация27 - 700 - true - true - - true - - - Декорация27ExtendedTooltip - 876 - Label - true - true - - Left - - - - Декорация27КонтекстноеМеню - 701 - true - - true - true - false - - - CommonPicture.СинхронизацияДанныхАнализДанных48 - - - + ЗаголовокСтраницыРегистрацияИзменений + 970 + + Декорация1 + 972 true true true - - <key>ru</key> - <value>Группа картинки</value> - - ГруппаКартинки2ExtendedTooltip - 875 + Декорация1РасширеннаяПодсказка + 974 Label true true @@ -4641,72 +3642,37 @@ Left - UsualGroup - - Vertical - Auto - true - true - Auto - Auto + + Декорация1КонтекстноеМеню + 973 + true + + 6 + true + 2 + true + + + CommonPicture.ДлительнаяОперация48 + - - ГруппаСообщения2 - 702 - - Декорация28 - 703 - - <key>ru</key> - <value>Выполняется анализ данных. Это может занять несколько минут. + <items xsi:type="form:Decoration"> + <name>Декорация3</name> + <id>975</id> + <title> + <key>ru</key> + <value>Выполняется регистрация данных для выгрузки. Пожалуйста, подождите...</value> - - true - true - - true - - - Декорация28ExtendedTooltip - 878 - Label - true - true - - Left - - - - Декорация28КонтекстноеМеню - 704 - true - - Label - 3 - true - false - - System.DefaultGUIFont - 10.0 - - - Left - Center - - + true true true - - <key>ru</key> - <value>Группа сообщения</value> - - ГруппаСообщения2ExtendedTooltip - 877 + Декорация3РасширеннаяПодсказка + 977 Label true true @@ -4714,14 +3680,15 @@ Left - UsualGroup - - Vertical - Auto - true - true - Auto - Auto + + Декорация3КонтекстноеМеню + 976 + true + + Label + true + + Left true @@ -4731,15 +3698,11 @@ <key>ru</key> - <value>Анализ данных</value> + <value>Регистрация данных</value> - - ru - Группировка сообщения - - ЗаголовокСтраницыОжиданияАнализаДанныхРасширеннаяПодсказка - 874 + ЗаголовокСтраницыРегистрацияИзмененийРасширеннаяПодсказка + 971 Label true true @@ -4749,8 +3712,10 @@ UsualGroup + AlwaysHorizontal + Center Auto - NormalSeparation + WeakSeparation true true auto @@ -4765,15 +3730,11 @@ <key>ru</key> - <value>Страница ожидания анализа данных</value> + <value>Страница регистрация данных</value> - - ru - Страница ожидания - - СтраницаОжиданияАнализаДанныхExtendedTooltip - 872 + СтраницаРегистрацияДанныхРасширеннаяПодсказка + 969 Label true true @@ -4820,7 +3781,9 @@ 692 true + 6 true + 2 true false @@ -4866,7 +3829,7 @@ 694 <key>ru</key> - <value>Выполняется синхронизация данных. Это может занять несколько минут. + <value>Выполняется синхронизация данных. Это может занять некоторое время. Пожалуйста, подождите...</value> true @@ -4890,13 +3853,8 @@ true Label - 3 true false - - System.DefaultGUIFont - 10.0 - Left Center @@ -4956,8 +3914,10 @@ UsualGroup + HorizontalIfPossible + Center Auto - NormalSeparation + WeakSeparation true true auto @@ -4995,94 +3955,6 @@ false - - СтраницаОшибкаРасхожденияВерсий - 917 - - КартинкаОшибкаРасхожденияВерсий - 919 - true - true - - true - - - КартинкаОшибкаРасхожденияВерсийРасширеннаяПодсказка - 921 - Label - true - true - - Left - - - - КартинкаОшибкаРасхожденияВерсийКонтекстноеМеню - 920 - true - - true - true - - - CommonPicture.Предупреждение32 - - - - - ДекорацияОшибкаРасхожденияВерсий - 922 - true - true - - true - - - ДекорацияОшибкаРасхожденияВерсийРасширеннаяПодсказка - 924 - Label - true - true - - Left - - - - ДекорацияОшибкаРасхожденияВерсийКонтекстноеМеню - 923 - true - - Label - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Страница ошибка расхождения версий</value> - - - СтраницаОшибкаРасхожденияВерсийРасширеннаяПодсказка - 918 - Label - true - true - - Left - - - Page - - auto - false - - СтраницаОжиданияСинхронизацииДанныхПрогрессБарЗагрузка 942 @@ -5119,10 +3991,6 @@ Label true false - - System.DefaultGUIFont - 10.0 - Left Center @@ -5233,7 +4101,7 @@ Vertical Auto - NormalSeparation + WeakSeparation true true auto @@ -5307,10 +4175,6 @@ Label true false - - System.DefaultGUIFont - 10.0 - Left Center @@ -5421,7 +4285,7 @@ Vertical Auto - NormalSeparation + WeakSeparation true true auto @@ -5459,6 +4323,1289 @@ false + + СтраницаОшибкаРасхожденияВерсий + 917 + + КартинкаОшибкаРасхожденияВерсий + 919 + true + true + + true + + + КартинкаОшибкаРасхожденияВерсийРасширеннаяПодсказка + 921 + Label + true + true + + Left + + + + КартинкаОшибкаРасхожденияВерсийКонтекстноеМеню + 920 + true + + true + true + + + CommonPicture.Предупреждение32 + + + + + ДекорацияОшибкаРасхожденияВерсий + 922 + true + true + + true + + + ДекорацияОшибкаРасхожденияВерсийРасширеннаяПодсказка + 924 + Label + true + true + + Left + + + + ДекорацияОшибкаРасхожденияВерсийКонтекстноеМеню + 923 + true + + Label + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Страница ошибка расхождения версий</value> + + + СтраницаОшибкаРасхожденияВерсийРасширеннаяПодсказка + 918 + Label + true + true + + Left + + + Page + + HorizontalIfPossible + auto + false + + + + СтраницаОкончанияСопоставления + 289 + + ЗаголовокСтраницыОкончанияСопоставления + 579 + + ГруппаРезультатаВыполненияОбменаДанными + 374 + + ГруппаЗагрузкиДанных + 375 + + СтраницыСтатусаЗагрузкиДанных + 376 + + СтатусЗагрузкиНеопределено + 377 + + КартинкаНеопределено + 378 + + <key>ru</key> + <value>Картинка неопределено</value> + + true + true + + true + + + КартинкаНеопределеноExtendedTooltip + 790 + Label + true + true + + Left + + + + КартинкаНеопределеноКонтекстноеМеню + 379 + true + + 2 + true + 1 + true + 1 + false + + + true + true + + true + + + <key>ru</key> + <value>Статус загрузки неопределено</value> + + false + + СтатусЗагрузкиНеопределеноExtendedTooltip + 789 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтатусЗагрузкиУспех + 380 + + КартинкаУспех + 381 + + <key>ru</key> + <value>Картинка успех</value> + + true + true + + true + + + КартинкаУспехExtendedTooltip + 792 + Label + true + true + + Left + + + + КартинкаУспехКонтекстноеМеню + 382 + true + + 2 + true + 1 + 1 + true + 1 + false + + + CommonPicture.Успешно + + + + true + true + + true + + + <key>ru</key> + <value>Статус загрузки успех</value> + + + ru + Статус загрузки неопределено + + false + + СтатусЗагрузкиУспехExtendedTooltip + 791 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтатусЗагрузкиОшибка + 383 + + КартинкаОшибка + 384 + + <key>ru</key> + <value>Картинка ошибка</value> + + true + true + + true + + + КартинкаОшибкаExtendedTooltip + 794 + Label + true + true + + Left + + + + КартинкаОшибкаКонтекстноеМеню + 385 + true + + 2 + true + 1 + true + false + + + CommonPicture.СостояниеОбменаДаннымиОшибка + + + + true + true + + true + + + <key>ru</key> + <value>Статус загрузки ошибка</value> + + + ru + Статус загрузки неопределено + + false + + СтатусЗагрузкиОшибкаExtendedTooltip + 793 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтатусЗагрузкиПредупреждение + 386 + + КартинкаПредупреждение1 + 387 + + <key>ru</key> + <value>Картинка ошибка</value> + + true + true + + true + + + КартинкаПредупреждение1ExtendedTooltip + 796 + Label + true + true + + Left + + + + КартинкаПредупреждение1КонтекстноеМеню + 388 + true + + 2 + true + 1 + true + false + + + CommonPicture.Предупреждение + + + + true + true + + true + + + <key>ru</key> + <value>Статус загрузки предупреждение</value> + + + ru + Статус загрузки неопределено + + 2 + false + + СтатусЗагрузкиПредупреждениеExtendedTooltip + 795 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Страницы статуса загрузки данных</value> + + + СтраницыСтатусаЗагрузкиДанныхExtendedTooltip + 788 + Label + true + true + + Left + + + Pages + + Auto + + + + ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных + 577 + + <key>ru</key> + <value>Описание получения данных</value> + + true + true + + true + + + ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанныхExtendedTooltip + 797 + Label + true + true + + Left + + + + ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанныхКонтекстноеМеню + 578 + true + + Label + true + 1 + true + 1 + + Left + + + + ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанныхПодробно + 389 + + <key>ru</key> + <value>Подробно...</value> + + true + true + + true + + false + + ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанныхПодробноExtendedTooltip + 810 + Label + true + true + + Left + + + Hyperlink + Form.Command.ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных + Normal + Auto + true + 1 + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Загрузки данных</value> + + + ГруппаЗагрузкиДанныхExtendedTooltip + 787 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + ГруппаВыгрузкиДанных + 390 + + СтраницыСтатусаВыгрузкиДанных + 391 + + СтатусВыгрузкиНеопределено + 392 + + КартинкаНеопределено1 + 393 + + <key>ru</key> + <value>Картинка неопределено</value> + + true + true + + true + + + КартинкаНеопределено1ExtendedTooltip + 801 + Label + true + true + + Left + + + + КартинкаНеопределено1КонтекстноеМеню + 394 + true + + 2 + true + 1 + true + false + + + true + true + + true + + + <key>ru</key> + <value>Статус выгрузки неопределено</value> + + + ru + Статус загрузки неопределено + + + СтатусВыгрузкиНеопределеноExtendedTooltip + 800 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтатусВыгрузкиУспех + 395 + + КартинкаУспех1 + 396 + + <key>ru</key> + <value>Картинка успех</value> + + true + true + + true + + + КартинкаУспех1ExtendedTooltip + 803 + Label + true + true + + Left + + + + КартинкаУспех1КонтекстноеМеню + 397 + true + + 2 + true + 2 + 1 + true + 1 + false + + + CommonPicture.Успешно + + + + true + true + + true + + + <key>ru</key> + <value>Статус выгрузки успех</value> + + + СтатусВыгрузкиУспехExtendedTooltip + 802 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтатусВыгрузкиОшибка + 398 + + КартинкаОшибка1 + 399 + + <key>ru</key> + <value>Картинка ошибка</value> + + true + true + + true + + + КартинкаОшибка1ExtendedTooltip + 805 + Label + true + true + + Left + + + + КартинкаОшибка1КонтекстноеМеню + 400 + true + + 2 + true + 1 + true + false + + + CommonPicture.СостояниеОбменаДаннымиОшибка + + + + true + true + + true + + + <key>ru</key> + <value>Статус выгрузки ошибка</value> + + + ru + Статус загрузки неопределено + + + СтатусВыгрузкиОшибкаExtendedTooltip + 804 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтатусВыгрузкиПредупреждение + 401 + + КартинкаПредупреждение + 402 + + <key>ru</key> + <value>Картинка ошибка</value> + + true + true + + true + + + КартинкаПредупреждениеExtendedTooltip + 807 + Label + true + true + + Left + + + + КартинкаПредупреждениеКонтекстноеМеню + 403 + true + + 2 + true + 1 + true + false + + + CommonPicture.Предупреждение + + + + true + true + + true + + + <key>ru</key> + <value>Статус выгрузки предупреждение</value> + + + ru + Статус загрузки неопределено + + + СтатусВыгрузкиПредупреждениеExtendedTooltip + 806 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Страницы статуса выгрузки данных</value> + + + СтраницыСтатусаВыгрузкиДанныхExtendedTooltip + 799 + Label + true + true + + Left + + + Pages + + Auto + + + + ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных + 581 + + <key>ru</key> + <value>Описание отправки данных</value> + + true + true + + true + + + ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанныхExtendedTooltip + 808 + Label + true + true + + Left + + + + ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанныхКонтекстноеМеню + 582 + true + + Label + true + true + + Left + + + + ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанныхПодробно + 404 + + <key>ru</key> + <value>Подробно...</value> + + true + true + + true + + false + + ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанныхПодробноExtendedTooltip + 811 + Label + true + true + + Left + + + Hyperlink + Form.Command.ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Выгрузки данных</value> + + + ru + Группа загрузки данных + + + ГруппаВыгрузкиДанныхExtendedTooltip + 798 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Результата выполнения обмена данными</value> + + + ГруппаРезультатаВыполненияОбменаДаннымиExtendedTooltip + 786 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Синхронизация завершена</value> + + + ЗаголовокСтраницыОкончанияСопоставленияРасширеннаяПодсказка + 785 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + ИнформационнаяНадписьНастройкиРасписания + 337 + + Группировка + 370 + + ГруппаКартинкаНастройкиРасписания + 913 + + Декорация14 + 339 + true + true + + true + + + Декорация14ExtendedTooltip + 814 + Label + true + true + + Left + + + + Декорация14КонтекстноеМеню + 340 + true + + true + true + false + + + CommonPicture.Информация32 + + + + true + true + + true + + + <key>ru</key> + <value>Картинка настройки расписания</value> + + + ru + Картинка настройка расписания + + + ГруппаКартинкаНастройкиРасписанияРасширеннаяПодсказка + 914 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаТекстНастройкиРасписания + 478 + + Декорация15 + 342 + + <key>ru</key> + <value>При необходимости можно настроить расписание +для синхронизации данных в автоматическом режиме.</value> + + true + true + + true + + + Декорация15ExtendedTooltip + 816 + Label + true + true + + Left + + + + Декорация15КонтекстноеМеню + 343 + true + + Label + 2 + true + false + + Style.ПоясняющийТекст + + + System.DefaultGUIFont + + + Left + Center + + + + ОткрытьНастройкуРасписания + 583 + true + true + + true + + + ОткрытьНастройкуРасписанияExtendedTooltip + 817 + Label + true + true + + Left + + + UsualButton + Form.Command.ОткрытьНастройкуРасписания + Normal + PictureAndText + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Текст настройки расписания</value> + + + ru + Текст настройка расписания + + + ГруппаТекстНастройкиРасписанияРасширеннаяПодсказка + 815 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группировка</value> + + + ГруппировкаExtendedTooltip + 813 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Информационная надпись настройки расписания</value> + + + ru + Группировка сообщения + + + ИнформационнаяНадписьНастройкиРасписанияExtendedTooltip + 812 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + + Декорация10 + 321 + + <key>ru</key> + <value>Нажмите кнопку "Готово" для завершения работы с помощником.</value> + + true + true + + true + + + Декорация10ExtendedTooltip + 819 + Label + true + true + + Left + + + + Декорация10КонтекстноеМеню + 322 + true + + Label + 3 + true + true + false + + Left + Bottom + + + true + true + + true + + + <key>ru</key> + <value>Страница окончания сопоставления</value> + + + СтраницаОкончанияСопоставленияExtendedTooltip + 783 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + true true @@ -5620,6 +5767,7 @@ Page + AlwaysHorizontal auto false @@ -5755,6 +5903,7 @@ Page + AlwaysHorizontal auto false @@ -5863,6 +6012,7 @@ Page + AlwaysHorizontal auto false @@ -5971,6 +6121,7 @@ Page + AlwaysHorizontal auto false @@ -6078,7 +6229,145 @@ Page - Vertical + AlwaysHorizontal + auto + false + + + + СтраницаНавигацииИнформацииСтатистики + 978 + + КоманднаяПанель6 + 980 + + КомандаГотово + 986 + + <key>ru</key> + <value>Сохранить результаты сопоставления</value> + + true + true + + true + + + КомандаГотовоРасширеннаяПодсказка + 987 + Label + true + true + + Left + + + Form.Command.КомандаГотово + Normal + Auto + true + true + UserCmds + Auto + + + КомандаДалее1 + 982 + true + true + + true + + + КомандаДалее1РасширеннаяПодсказка + 983 + Label + true + true + + Left + + + Form.Command.КомандаДалее + Normal + Auto + true + true + UserCmds + Auto + + + КомандаОтмена2 + 984 + true + true + + true + + + КомандаОтмена2РасширеннаяПодсказка + 985 + Label + true + true + + Left + + + Form.Command.КомандаОтмена + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель6</value> + + + КоманднаяПанель6РасширеннаяПодсказка + 981 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Страница навигации информации статистики</value> + + + СтраницаНавигацииИнформацииСтатистикиРасширеннаяПодсказка + 979 + Label + true + true + + Left + + + Page + + AlwaysHorizontal auto false @@ -6201,43 +6490,6 @@
    true
    - - ВариантРаботыМастера - - <key>ru</key> - <value>Вариант работы мастера</value> - - 3 - - String - - 50 - - - - true - - - true - - - - ВыполнитьСопоставлениеПриОткрытии - - <key>ru</key> - <value>Выполнить сопоставление при открытии</value> - - 4 - - Boolean - - - true - - - true - - ИдентификаторФайлаПакетаДанных @@ -6256,40 +6508,6 @@ <common>true</common> </edit> </attributes> - <attributes> - <name>ОткрытьПомощникСозданияСценарияОбменаДанными</name> - <title> - <key>ru</key> - <value>Открыть настройку расписания</value> - - 2 - - Boolean - - - true - - - true - - - - УзелИспользуетсяВСценарииОбмена - - <key>ru</key> - <value>Узел используется в сценарии обмена</value> - - 6 - - Boolean - - - true - - - true - - РезультатВыгрузкиДанных @@ -6837,34 +7055,6 @@ </edit> </columns> </attributes> - <attributes> - <name>СтруктураПараметровПодключенияВнешнегоСоединения</name> - <title> - <key>ru</key> - <value>Структура параметров подключения внешнего соединения</value> - - 12 - - - true - - - true - - - - ЭтоЗапускИзДругогоПриложения - 13 - - Boolean - - - true - - - true - - ИдентификаторФайла @@ -6918,42 +7108,6 @@ <common>true</common> </edit> </attributes> - <attributes> - <name>WSURLВебСервиса</name> - <title> - <key>ru</key> - <value>WSURLВеб сервиса</value> - - 17 - - String - - - - true - - - true - - - - WSИмяПользователя - - <key>ru</key> - <value>WSИмя пользователя</value> - - 18 - - String - - - - true - - - true - - WSПароль @@ -7320,23 +7474,6 @@ <common>true</common> </edit> </attributes> - <attributes> - <name>АктивизироватьсяПриЗакрытииПомощникаСозданияОбменаДанными</name> - <title> - <key>ru</key> - <value>Активизироваться при закрытии помощника создания обмена данными</value> - - 41 - - Boolean - - - true - - - true - - ПроверятьРасхождениеВерсий @@ -7488,6 +7625,172 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>ПараметрыОбработчикаРегистрацииДанных</name> + <title> + <key>ru</key> + <value>Параметры обработчика регистрации данных</value> + + 51 + + + true + + + true + + + + ПараметрыОбработчикаОжиданияРегистрацииДанных + + <key>ru</key> + <value>Параметры обработчика ожидания регистрации данных</value> + + 52 + + + true + + + true + + + + ПолученоСообщениеДляСопоставленияДанных + + <key>ru</key> + <value>Получено сообщение для сопоставления данных</value> + + 53 + + Boolean + + + true + + + true + + + + МодельСервиса + + <key>ru</key> + <value>Модель сервиса</value> + + 54 + + Boolean + + + true + + + true + + + + ОбластьДанныхКорреспондента + + <key>ru</key> + <value>Область данных корреспондента</value> + + 55 + + Number + + 10 + + + + true + + + true + + + + ЗапускОбменаИзКорреспондента + + <key>ru</key> + <value>Запуск обмена из корреспондента</value> + + 56 + + Boolean + + + true + + + true + + + + ОбменМеждуПриложениямиВСервисе + + <key>ru</key> + <value>Обмен между приложениями в сервисе</value> + + 57 + + Boolean + + + true + + + true + + + + НаименованиеКорреспондента + + <key>ru</key> + <value>Наименование корреспондента</value> + + 58 + + String + + + + true + + + true + + + + ПараметрыОбработчикаОжиданияВыгрузкиДанных + + <key>ru</key> + <value>Параметры обработчика ожидания выгрузки данных</value> + + 59 + + + true + + + true + + + + ПараметрыОбработчикаВыгрузкиДанных + + <key>ru</key> + <value>Параметры обработчика выгрузки данных</value> + + 60 + + + true + + + true + + ОбновитьИнформациюСопоставленияПолностью diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl index 7c29831e0..baa5960ad 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl @@ -8,14 +8,13 @@ // // Вариант 2: // Параметры: -// УзелИнформационнойБазы - ПланОбменаСсылка - плана обмена, для которого выполняется помощник. -// РасширенныйРежимДополненияВыгрузки - Булево - флаг включения механизма настройки дополнения -// выгрузки по сценарию узла. -// ИмяПланаОбмена - Строка - имя менеджера плана обмена которого используется +// КодУзлаИнформационнойБазы - Строка - код узла плана обмена, для которого открывается помощник. +// ИмяПланаОбмена - Строка - имя плана обмена, которое используется // для поиска узла плана обмена с кодом, заданными в // параметре КодУзлаИнформационнойБазы. +// РасширенныйРежимДополненияВыгрузки - Булево - флаг включения механизма настройки дополнения +// выгрузки по сценарию узла. // - #Область ОписаниеПеременных &НаКлиенте @@ -28,148 +27,88 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Перем КодУзлаИнформационнойБазы; - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; - Параметры.Свойство("АктивизироватьсяПриЗакрытииПомощникаСозданияОбменаДанными", АктивизироватьсяПриЗакрытииПомощникаСозданияОбменаДанными); - ЭтоЗапускИзДругогоПриложения = Ложь; Если Параметры.Свойство("УзелИнформационнойБазы", Объект.УзелИнформационнойБазы) Тогда Объект.ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(Объект.УзелИнформационнойБазы); - ИначеЕсли Параметры.Свойство("КодУзлаИнформационнойБазы", КодУзлаИнформационнойБазы) Тогда + ИначеЕсли Параметры.Свойство("КодУзлаИнформационнойБазы") Тогда ЭтоЗапускИзДругогоПриложения = Истина; - Объект.УзелИнформационнойБазы = ПланыОбмена[Параметры.ИмяПланаОбмена].НайтиПоКоду(КодУзлаИнформационнойБазы); + Объект.УзелИнформационнойБазы = ОбменДаннымиСервер.УзелПланаОбменаПоКоду( + Параметры.ИмяПланаОбмена, Параметры.КодУзлаИнформационнойБазы); - Если Объект.УзелИнформационнойБазы.Пустая() Тогда - - ОбменДаннымиСервер.СообщитьОбОшибке(НСтр("ru = 'Настройка обмена данными не найдена.'"), Отказ); - Возврат; - + Если Не ЗначениеЗаполнено(Объект.УзелИнформационнойБазы) Тогда + ВызватьИсключение НСтр("ru = 'Настройка обмена данными не найдена.'"); КонецЕсли; Объект.ИмяПланаОбмена = Параметры.ИмяПланаОбмена; Иначе - ОбменДаннымиСервер.СообщитьОбОшибке(НСтр("ru = 'Непосредственное открытие помощника не предусмотрено.'"), Отказ); - Возврат; + ВызватьИсключение НСтр("ru = 'Непосредственное открытие помощника не предусмотрено.'"); КонецЕсли; + // Интерактивное выполнение обмена данными поддерживается только для универсальных обменов. Если Не ОбменДаннымиПовтИсп.ЭтоУзелУниверсальногоОбменаДанными(Объект.УзелИнформационнойБазы) Тогда - - // Интерактивное выполнение обмена данными поддерживается только для универсальных обменов с использованием правил - // конвертации объектов. - ОбменДаннымиСервер.СообщитьОбОшибке( - НСтр("ru = 'Для выбранного узла выполнение обмена данными с настройкой не предусмотрено.'"), Отказ); - Возврат; - + ВызватьИсключение НСтр("ru = 'Для выбранного узла выполнение обмена данными с настройкой не предусмотрено.'"); КонецЕсли; - МассивУзлов = ОбменДаннымиСобытия.ВсеУзлыПланаОбмена(Объект.ИмяПланаОбмена); - // Проверяем настройку обмена на соответствие фильтру. - Если МассивУзлов.Найти(Объект.УзелИнформационнойБазы) = Неопределено Тогда - - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Для выбранного узла сопоставление данных не предусмотрено.'"),,,, Отказ); - Возврат; - + ВсеУзлы = ОбменДаннымиСобытия.ВсеУзлыПланаОбмена(Объект.ИмяПланаОбмена); + Если ВсеУзлы.Найти(Объект.УзелИнформационнойБазы) = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Для выбранного узла сопоставление данных не предусмотрено.'"); КонецЕсли; + Если Не Параметры.Свойство("ПолучитьДанные", ПолучитьДанные) Тогда + ПолучитьДанные = Истина; + КонецЕсли; + + Если Не Параметры.Свойство("ОтправитьДанные", ОтправитьДанные) Тогда + ОтправитьДанные = Истина; + КонецЕсли; + + Если Не ПолучитьДанные И Не ОтправитьДанные Тогда + ВызватьИсключение НСтр("ru = 'Заданный сценарий синхронизации данных не поддерживается.'"); + КонецЕсли; + + МодельСервиса = ОбщегоНазначения.РазделениеВключено() + И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных(); + + Параметры.Свойство("ОбластьДанныхКорреспондента", ОбластьДанныхКорреспондента); + + Параметры.Свойство("РасширенныйРежимДополненияВыгрузки", ДополнениеВыгрузкиРасширенныйРежим); + Параметры.Свойство("ВидТранспортаСообщенийОбмена", Объект.ВидТранспортаСообщенийОбмена); - // Задание вида транспорта сообщений обмена, если значение не было передано. - Если Не ЗначениеЗаполнено(Объект.ВидТранспортаСообщенийОбмена) Тогда - - НастройкиТранспортаОбмена = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспорта(Объект.УзелИнформационнойБазы); - Объект.ВидТранспортаСообщенийОбмена = НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию; - Если Не ЗначениеЗаполнено(Объект.ВидТранспортаСообщенийОбмена) Тогда - Объект.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FILE; - КонецЕсли; - - КонецЕсли; - - ПолучитьДанные = Истина; - ОтправитьДанные = Истина; ПроверятьРасхождениеВерсий = Истина; - Если Параметры.Свойство("ПолучитьДанные") Тогда - ПолучитьДанные = Параметры.ПолучитьДанные; - КонецЕсли; + ПолученоСообщениеДляСопоставленияДанных = ОбменДаннымиСервер.ПолученоСообщениеСДаннымиДляСопоставления(Объект.УзелИнформационнойБазы); - Если Параметры.Свойство("ОтправитьДанные") Тогда - ОтправитьДанные = Параметры.ОтправитьДанные; - КонецЕсли; + НаименованиеКорреспондента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.УзелИнформационнойБазы, "Наименование"); - ОбменДаннымиСервер.ЗаполнитьСписокВыбораДоступнымиВидамиТранспорта(Объект.УзелИнформационнойБазы, Элементы.ВидТранспортаСообщенийОбмена); - Параметры.Свойство("ВыполнитьСопоставлениеПриОткрытии", ВыполнитьСопоставлениеПриОткрытии); - ВариантРаботыМастера = "ВыполнитьСопоставление"; + УстановитьЗаголовокФормы(); - Заголовок = СтрЗаменить(Заголовок, "%1", Объект.УзелИнформационнойБазы); + ИнициализироватьПомощникНастройкиРасписания(ЭтоЗапускИзДругогоПриложения); - // Дополнение выгрузки ИнициализироватьРеквизитыДополненияВыгрузки(); - // Флаг пропуска страницы транспорта. - ПропускатьСтраницуТранспорта = ДополнениеВыгрузкиРасширенныйРежим Или ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент(); - - ОбновитьСтраницыНастроекТранспорта(); - - // Различие интерфейсов - Если КлиентскоеПриложение.ТекущийВариантИнтерфейса() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда - УстановитьШрифтЗаголовкаГруппы(Элементы.ЗаголовокСтраницы); - УстановитьШрифтЗаголовкаГруппы(Элементы.ЗаголовокСтраницыИнформацииСтатистики); - УстановитьШрифтЗаголовкаГруппы(Элементы.ЗаголовокСтраницыОкончанияСопоставления); - УстановитьШрифтЗаголовкаГруппы(Элементы.ЗаголовокСтраницыДополненияВыгрузки); - УстановитьШрифтЗаголовкаГруппы(Элементы.ЗаголовокСтраницыОжиданияАнализаДанных); - УстановитьШрифтЗаголовкаГруппы(Элементы.ЗаголовокСтраницыОжиданияСинхронизацииДанных); - КонецЕсли; + ИнициализироватьНастройкиТранспортаСообщенийОбмена(); КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) - ЗакрытьФормуБезусловно = Ложь; - ПорядковыйНомерПерехода = 1; УстановитьПорядковыйНомерПерехода(1); - // Анализ страницы транспорта, пропускаем если не требует настроек. - СледующаяСтраница = Ложь; - ИзменитьЗаголовок = Элементы.ВидТранспортаСообщенийОбмена.СписокВыбора.Количество()=1; - - Если ВыполнитьСопоставлениеПриОткрытии Тогда - СледующаяСтраница = Истина; - ИначеЕсли ПропускатьСтраницуТранспорта Тогда - // Идем на следующую страницу только если не требуется пароль. - Если ОбменЧерезВебСервис И Не WSЗапомнитьПароль Тогда - // Требуется пароль, скрываем лишние реквизиты. - Элементы.ГруппаВыборВидаТранспортаИзДоступных.Видимость = Ложь; - Элементы.КаталогОбменаИнформацией.Видимость = Ложь; - ИзменитьЗаголовок = Истина; - Иначе - // Пароль не требуется, пропускаем. - СледующаяСтраница = Истина; - КонецЕсли; - КонецЕсли; - - Если ИзменитьЗаголовок Тогда - Элементы.ЗаголовокСтраницы.Заголовок = НСтр("ru='Параметры подключения'"); - КонецЕсли; - - Если СледующаяСтраница И ЗначениеЗаполнено(Объект.ВидТранспортаСообщенийОбмена) Тогда - // Переходим сразу к следующей странице - загрузки информации - статистики. - ВыполнитьПереходДалее(); - КонецЕсли; - КонецПроцедуры &НаКлиенте @@ -260,7 +199,14 @@ &НаКлиенте Процедура ВидТранспортаСообщенийОбменаПриИзменении(Элемент) - ВидТранспортаСообщенийОбменаПриИзмененииНаСервере(); + ПриИзмененииВидаТранспортаСообщенийОбмена(); + +КонецПроцедуры + +&НаКлиенте +Процедура ВидТранспортаСообщенийОбменаОчистка(Элемент, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; КонецПроцедуры @@ -366,7 +312,8 @@ ЗначенияЗаполнения = Новый Структура("Узел", Объект.УзелИнформационнойБазы); Оповещение = Новый ОписаниеОповещения("НастроитьПараметрыТранспортаСообщенийОбменаЗавершение", ЭтотОбъект); - ОбменДаннымиКлиент.ОткрытьФормуЗаписиРегистраСведенийПоОтбору(Отбор, ЗначенияЗаполнения, "НастройкиТранспортаОбмена", ЭтотОбъект,,, Оповещение); + ОбменДаннымиКлиент.ОткрытьФормуЗаписиРегистраСведенийПоОтбору(Отбор, + ЗначенияЗаполнения, "НастройкиТранспортаОбменаДанными", ЭтотОбъект, , , Оповещение); КонецПроцедуры @@ -649,6 +596,8 @@ Элементы.ПанельОсновная.ТекущаяСтраница = Элементы[СтрокаПереходаТекущая.ИмяОсновнойСтраницы]; Элементы.ПанельНавигации.ТекущаяСтраница = Элементы[СтрокаПереходаТекущая.ИмяСтраницыНавигации]; + Элементы.ПанельНавигации.ТекущаяСтраница.Доступность = Не (ЭтоПереходДалее И СтрокаПереходаТекущая.ДлительнаяОперация); + // Устанавливаем текущую кнопку по умолчанию. КнопкаДалее = ПолучитьКнопкуФормыПоИмениКоманды(Элементы.ПанельНавигации.ТекущаяСтраница, "КомандаДалее"); @@ -684,31 +633,29 @@ СтрокиПерехода = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода - 1)); - Если СтрокиПерехода.Количество() = 0 Тогда - Возврат; - КонецЕсли; + Если СтрокиПерехода.Количество() > 0 Тогда + СтрокаПерехода = СтрокиПерехода[0]; - СтрокаПерехода = СтрокиПерехода[0]; - - // Обработчик ПриПереходеДалее. - Если Не ПустаяСтрока(СтрокаПерехода.ИмяОбработчикаПриПереходеДалее) - И Не СтрокаПерехода.ДлительнаяОперация Тогда - - ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ)"; - ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПерехода.ИмяОбработчикаПриПереходеДалее); - - Отказ = Ложь; - - РезультатВычисления = Вычислить(ИмяПроцедуры); - - Если Отказ Тогда + // Обработчик ПриПереходеДалее. + Если Не ПустаяСтрока(СтрокаПерехода.ИмяОбработчикаПриПереходеДалее) + И Не СтрокаПерехода.ДлительнаяОперация Тогда - УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); + ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ)"; + ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПерехода.ИмяОбработчикаПриПереходеДалее); - Возврат; + Отказ = Ложь; + + Результат = Вычислить(ИмяПроцедуры); + + Если Отказ Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); + + Возврат; + + КонецЕсли; КонецЕсли; - КонецЕсли; Иначе @@ -830,7 +777,6 @@ &НаСервере Процедура ТаблицаПереходовНоваяСтрока( - ПорядковыйНомерПерехода, ИмяОсновнойСтраницы, ИмяСтраницыНавигации, ИмяОбработчикаПриОткрытии = "", @@ -838,7 +784,7 @@ НоваяСтрока = ТаблицаПереходов.Добавить(); - НоваяСтрока.ПорядковыйНомерПерехода = ПорядковыйНомерПерехода; + НоваяСтрока.ПорядковыйНомерПерехода = ТаблицаПереходов.Количество(); НоваяСтрока.ИмяОсновнойСтраницы = ИмяОсновнойСтраницы; НоваяСтрока.ИмяСтраницыНавигации = ИмяСтраницыНавигации; @@ -852,7 +798,6 @@ &НаСервере Процедура ТаблицаПереходовНоваяСтрокаДлительнаяОперация( - ПорядковыйНомерПерехода, ИмяОсновнойСтраницы, ИмяСтраницыНавигации, ДлительнаяОперация = Ложь, @@ -861,7 +806,7 @@ НоваяСтрока = ТаблицаПереходов.Добавить(); - НоваяСтрока.ПорядковыйНомерПерехода = ПорядковыйНомерПерехода; + НоваяСтрока.ПорядковыйНомерПерехода = ТаблицаПереходов.Количество(); НоваяСтрока.ИмяОсновнойСтраницы = ИмяОсновнойСтраницы; НоваяСтрока.ИмяСтраницыНавигации = ИмяСтраницыНавигации; @@ -908,7 +853,7 @@ &НаКлиенте Процедура НастроитьПараметрыТранспортаСообщенийОбменаЗавершение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт - ОбновитьСтраницыНастроекТранспорта(); + ИнициализироватьНастройкиТранспортаСообщенийОбмена(); КонецПроцедуры @@ -1041,13 +986,6 @@ #Область ПроцедурыИФункцииСервер -&НаСервере -Процедура УстановитьШрифтЗаголовкаГруппы(Знач ЭлементГруппы) - - ЭлементГруппы.ШрифтЗаголовка = Новый Шрифт(ШрифтыСтиля.КрупныйШрифтТекста, , , Истина); - -КонецПроцедуры - &НаСервере Процедура ОбновитьИнформациюСопоставленияПоСтрокеНаСервере(Отказ, КлючиСтрок) @@ -1126,124 +1064,108 @@ Элементы.СтраницыСтатусаСопоставленияДанных.ТекущаяСтраница = ?(ВсеДанныеСопоставлены, Элементы.СтатусСопоставленияВсеДанныеСопоставлены, Элементы.СтатусСопоставленияЕстьНесопоставленныеДанные); + КонецПроцедуры &НаСервере -Процедура ВидТранспортаСообщенийОбменаПриИзмененииНаСервере() +Процедура ИнициализироватьНастройкиТранспортаСообщенийОбмена() + + ВидТранспортаПоУмолчанию = РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию(Объект.УзелИнформационнойБазы); + НастроенныеВидыТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастроенныеВидыТранспорта(Объект.УзелИнформационнойБазы); + + ПропускатьСтраницуТранспорта = Истина; + + Если НастроенныеВидыТранспорта.Количество() > 1 + И Не ЗначениеЗаполнено(Объект.ВидТранспортаСообщенийОбмена) Тогда + ПропускатьСтраницуТранспорта = ДополнениеВыгрузкиРасширенныйРежим; + КонецЕсли; + + Если Не ЗначениеЗаполнено(Объект.ВидТранспортаСообщенийОбмена) Тогда + Объект.ВидТранспортаСообщенийОбмена = ВидТранспортаПоУмолчанию; + КонецЕсли; + + ЗапускОбменаИзКорреспондента = Не ЗначениеЗаполнено(Объект.ВидТранспортаСообщенийОбмена); + + ОбменМеждуПриложениямиВСервисе = МодельСервиса + И (Объект.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FILE + Или Объект.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FTP); + + ПриИзмененииВидаТранспортаСообщенийОбмена(Истина); + + Если Не ПропускатьСтраницуТранспорта Тогда + + Если ОбменДаннымиСервер.ЕстьПраваНаАдминистрированиеОбменов() Тогда + Элементы.НастроитьПараметрыТранспортаСообщенийОбмена.Видимость = Истина; + + ОбменДаннымиСервер.ЗаполнитьСписокВыбораДоступнымиВидамиТранспорта(Объект.УзелИнформационнойБазы, + Элементы.ВидТранспортаСообщенийОбмена); + Иначе + Элементы.НастроитьПараметрыТранспортаСообщенийОбмена.Видимость = Ложь; + + ОбменДаннымиСервер.ЗаполнитьСписокВыбораДоступнымиВидамиТранспорта(Объект.УзелИнформационнойБазы, + Элементы.ВидТранспортаСообщенийОбмена, НастроенныеВидыТранспорта); + КонецЕсли; + + СписокВыбораТранспорта = Элементы.ВидТранспортаСообщенийОбмена.СписокВыбора; + + Если СписокВыбораТранспорта.Количество() = 0 Тогда + СписокВыбораТранспорта.Добавить(Неопределено, НСтр("ru = 'подключение не настроено'")); + + Элементы.ВидТранспортаСообщенияОбменаСтрокой.ЦветТекста = ЦветаСтиля.ПоясняющийОшибкуТекст + Иначе + Элементы.ВидТранспортаСообщенияОбменаСтрокой.ЦветТекста = Новый Цвет; + КонецЕсли; + + Элементы.ВидТранспортаСообщенияОбменаСтрокой.Заголовок = СписокВыбораТранспорта[0].Представление; + Элементы.ВидТранспортаСообщенияОбменаСтрокой.Видимость = (СписокВыбораТранспорта.Количество() = 1); + Элементы.ВидТранспортаСообщенийОбмена.Видимость = Не Элементы.ВидТранспортаСообщенияОбменаСтрокой.Видимость; + + Элементы.WSПароль.Видимость = ОбменЧерезВебСервис И Не WSЗапомнитьПароль; + Элементы.НадписьWSПароль.Видимость = ОбменЧерезВебСервис И Не WSЗапомнитьПароль; + Элементы.WSЗапомнитьПароль.Видимость = ОбменЧерезВебСервис И Не WSЗапомнитьПароль; + + УстановитьВидимостьКнопкиОткрытияКаталогаОбмена(); + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПриИзмененииВидаТранспортаСообщенийОбмена(Инициализация = Ложь) ОбменЧерезВнешнееСоединение = (Объект.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.COM); ОбменЧерезВебСервис = (Объект.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS); - ОбменЧерезПодключениеККорреспонденту = ОбменЧерезВнешнееСоединение ИЛИ ОбменЧерезВебСервис; + ОбменЧерезПодключениеККорреспонденту = ОбменЧерезВнешнееСоединение Или ОбменЧерезВебСервис; - СтруктураПараметровПодключенияВнешнегоСоединения = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспорта(Объект.УзелИнформационнойБазы); - СтруктураПараметровПодключенияВнешнегоСоединения = УдалитьПрефиксВКлючахКоллекции(СтруктураПараметровПодключенияВнешнегоСоединения, "COM"); - - Если ЭтоЗапускИзДругогоПриложения Тогда - - Элементы.ИнформационнаяНадписьНастройкиРасписания.Видимость = Ложь; - - ОткрытьПомощникСозданияСценарияОбменаДанными = Ложь; - - Иначе - - УзелИспользуетсяВСценарииОбмена = УзелИнформационнойБазыИспользуетсяВСценарииОбмена(Объект.УзелИнформационнойБазы); - - Элементы.ИнформационнаяНадписьНастройкиРасписания.Видимость = Не УзелИспользуетсяВСценарииОбмена - И ОбменДаннымиСервер.ЕстьПраваНаАдминистрированиеОбменов(); - - ОткрытьПомощникСозданияСценарияОбменаДанными = ОбменДаннымиСервер.ЕстьПраваНаАдминистрированиеОбменов(); - - Элементы.ИнформационнаяНадписьНастройкиРасписания.Видимость = ОткрытьПомощникСозданияСценарияОбменаДанными; - КонецЕсли; - - // Устанавливаем текущую таблицу переходов. - Если ОбменЧерезПодключениеККорреспонденту Тогда - - Если ПолучитьДанные И ОтправитьДанные Тогда - - ПолучениеИОтправкаДанныхЧерезВнешнееСоединениеИлиВебСервис(); - - ИначеЕсли ПолучитьДанные Тогда - - ПолучениеДанныхЧерезВнешнееСоединениеИлиВебСервис();; - - ИначеЕсли ОтправитьДанные Тогда - - ОтправкаДанныхЧерезВнешнееСоединениеИлиВебСервис(); - - Иначе - - ВызватьИсключение НСтр("ru = 'Заданный сценарий синхронизации данных не поддерживается.'"); - - КонецЕсли; - - Иначе - - Если ПолучитьДанные И ОтправитьДанные Тогда - - ПолучениеИОтправкаДанныхЧерезОбычныеКаналыСвязи(); - - ИначеЕсли ПолучитьДанные Тогда - - ПолучениеДанныхЧерезОбычныеКаналыСвязи(); - - ИначеЕсли ОтправитьДанные Тогда - - ОтправкаДанныхЧерезОбычныеКаналыСвязи(); - - Иначе - - ВызватьИсключение НСтр("ru = 'Заданный сценарий синхронизации данных не поддерживается.'"); - - КонецЕсли; - - КонецЕсли; - - УстановитьВидимостьКнопкиОткрытияКаталогаОбмена(); - - Элементы.WSПароль.Видимость = Ложь; - Элементы.НадписьWSПароль.Заголовок = ""; - Элементы.WSЗапомнитьПароль.Видимость = Ложь; - Если ОбменЧерезВебСервис Тогда - - // Получаем настройки подключения к веб-сервису корреспондента. - // Настройки нужны, например, для периодического опроса корреспондента на предмет окончания длительной операции - // выгрузки данных. - СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспортаWS(Объект.УзелИнформационнойБазы); - ЗаполнитьЗначенияСвойств(ЭтотОбъект, СтруктураНастроек, "WSURLВебСервиса, WSИмяПользователя, WSПароль, WSЗапомнитьПароль"); - - Элементы.WSПароль.Видимость = Не WSЗапомнитьПароль; - Элементы.WSЗапомнитьПароль.Видимость = Не WSЗапомнитьПароль; + СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспортаWS(Объект.УзелИнформационнойБазы); + ЗаполнитьЗначенияСвойств(ЭтотОбъект, СтруктураНастроек, "WSЗапомнитьПароль"); + КонецЕсли; + + ИспользоватьПрогрессБар = Не ОбменЧерезПодключениеККорреспонденту И Не ОбменМеждуПриложениямиВСервисе; + + Если Инициализация Тогда + ПропускатьСтраницуТранспорта = ПропускатьСтраницуТранспорта И (Не ОбменЧерезВебСервис Или WSЗапомнитьПароль); + ЗаполнитьТаблицуПереходов(); КонецЕсли; КонецПроцедуры -// Удаляет заданный литерал (префикс) в именах ключей переданной структуры. -// Создает новую структуру. -// -// Параметры: -// Структура - Структура - Структура элементов, на основании которой необходимо создать новую структуру с ключами без -// заданного литерала. -// Литерал - Строка - Строка символов, которую необходимо исключить из имени ключей переданной структуры. -// -// Возвращаемое значение: -// Структура - получается на основании копирования исходной структуры. -// &НаСервере -Функция УдалитьПрефиксВКлючахКоллекции(Структура, Литерал) +Процедура ИнициализироватьПомощникНастройкиРасписания(ЭтоЗапускИзДругогоПриложения) - Результат = Новый Структура; + ОткрытьПомощникСозданияСценарияОбменаДанными = ОбменДаннымиСервер.ЕстьПраваНаАдминистрированиеОбменов(); - Для Каждого Элемент Из Структура Цикл - - Результат.Вставить(СтрЗаменить(Элемент.Ключ, Литерал, ""), Элемент.Значение); - - КонецЦикла; + Если ЭтоЗапускИзДругогоПриложения Тогда + ОткрытьПомощникСозданияСценарияОбменаДанными = Ложь; + ИначеЕсли Параметры.Свойство("НастройкаРасписания") Тогда + ОткрытьПомощникСозданияСценарияОбменаДанными = Параметры.НастройкаРасписания; + КонецЕсли; - Возврат Результат; -КонецФункции + Элементы.ИнформационнаяНадписьНастройкиРасписания.Видимость = ОткрытьПомощникСозданияСценарияОбменаДанными; + +КонецПроцедуры &НаСервере Функция ПолучитьИндексыСтрокТаблицыИнформацииСтатистики(КлючиСтрок) @@ -1264,60 +1186,18 @@ КонецФункции -&НаСервере -Процедура ОбновитьСтраницыНастроекТранспорта() - - РольДоступнаДобавлениеИзменениеОбменовДанными = ОбменДаннымиСервер.ЕстьПраваНаАдминистрированиеОбменов(); - - Элементы.НастроитьПараметрыТранспортаСообщенийОбмена.Видимость = РольДоступнаДобавлениеИзменениеОбменовДанными; - - ВидТранспортаСообщенийОбменаПоУмолчанию = РегистрыСведений.НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию(Объект.УзелИнформационнойБазы); - НастроенныеВидыТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.НастроенныеВидыТранспорта(Объект.УзелИнформационнойБазы); - ТекущийВидТранспорта = Объект.ВидТранспортаСообщенийОбмена; - - ОбменДаннымиСервер.ЗаполнитьСписокВыбораДоступнымиВидамиТранспорта(Объект.УзелИнформационнойБазы, Элементы.ВидТранспортаСообщенийОбмена, НастроенныеВидыТранспорта); - - СписокВыбораТранспорта = Элементы.ВидТранспортаСообщенийОбмена.СписокВыбора; - - Элементы.ВидТранспортаСообщенияОбменаСтрокой.ЦветТекста = Новый Цвет; - - Если СписокВыбораТранспорта.НайтиПоЗначению(ТекущийВидТранспорта)<>Неопределено Тогда - // Не меняем - - ИначеЕсли СписокВыбораТранспорта.НайтиПоЗначению(ВидТранспортаСообщенийОбменаПоУмолчанию)<>Неопределено Тогда - - Объект.ВидТранспортаСообщенийОбмена = ВидТранспортаСообщенийОбменаПоУмолчанию; - - ИначеЕсли СписокВыбораТранспорта.Количество()>0 Тогда - Объект.ВидТранспортаСообщенийОбмена = СписокВыбораТранспорта[0].Значение; - - Иначе - // Ничего нет - Объект.ВидТранспортаСообщенийОбмена = Неопределено; - - СписокВыбораТранспорта.Очистить(); - СписокВыбораТранспорта.Добавить(Неопределено, НСтр("ru='подключение не настроено'") ); - - Элементы.ВидТранспортаСообщенияОбменаСтрокой.ЦветТекста = ЦветаСтиля.ПоясняющийОшибкуТекст - КонецЕсли; - - Элементы.ВидТранспортаСообщенияОбменаСтрокой.Заголовок = СписокВыбораТранспорта[0].Представление; - Элементы.ВидТранспортаСообщенияОбменаСтрокой.Видимость = СписокВыбораТранспорта.Количество()=1; - Элементы.ВидТранспортаСообщенийОбмена.Видимость= Не Элементы.ВидТранспортаСообщенияОбменаСтрокой.Видимость; - - ВидТранспортаСообщенийОбменаПриИзмененииНаСервере(); -КонецПроцедуры - &НаСервере Процедура УстановитьВидимостьКнопкиОткрытияКаталогаОбмена() - ВидимостьКнопки = Объект.ВидТранспортаСообщенийОбмена=Перечисления.ВидыТранспортаСообщенийОбмена.FILE - Или Объект.ВидТранспортаСообщенийОбмена=Перечисления.ВидыТранспортаСообщенийОбмена.FTP; + ВидимостьКнопки = (Объект.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FILE + Или Объект.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FTP); Элементы.КаталогОбменаИнформацией.Видимость = ВидимостьКнопки; + Если ВидимостьКнопки Тогда Элементы.КаталогОбменаИнформацией.Заголовок = ПолучитьИмяКаталогаНаСервере(Объект.ВидТранспортаСообщенийОбмена, Объект.УзелИнформационнойБазы); КонецЕсли; + КонецПроцедуры &НаСервере @@ -1360,14 +1240,38 @@ КонецПроцедуры +&НаСервере +Процедура ПодготовитьСтруктуруДополненияВыгрузки(СтруктураДополнение) + + СтруктураДополнение = Новый Структура; + СтруктураДополнение.Вставить("ВариантВыгрузки", ДополнениеВыгрузки.ВариантВыгрузки); + СтруктураДополнение.Вставить("ПериодОтбораВсехДокументов", ДополнениеВыгрузки.ПериодОтбораВсехДокументов); + + СтруктураДополнение.Вставить("КомпоновщикВсехДокументов", Неопределено); + Если Не ПустаяСтрока(ДополнениеВыгрузки.АдресКомпоновщикаВсехДокументов) Тогда + КомпоновщикВсехДокументов = ПолучитьИзВременногоХранилища(ДополнениеВыгрузки.АдресКомпоновщикаВсехДокументов); + + СтруктураДополнение.КомпоновщикВсехДокументов = КомпоновщикВсехДокументов; + КонецЕсли; + + СтруктураДополнение.Вставить("ПериодОтбораСценарияУзла", ДополнениеВыгрузки.ПериодОтбораСценарияУзла); + СтруктураДополнение.Вставить("ПредставлениеОтбораСценарияУзла", ДополнениеВыгрузки.ПредставлениеОтбораСценарияУзла); + СтруктураДополнение.Вставить("ПараметрыСценарияДополнения", ДополнениеВыгрузки.ПараметрыСценарияДополнения); + СтруктураДополнение.Вставить("ПредставлениеТекущейНастройки", ДополнениеВыгрузки.ПредставлениеТекущейНастройки); + СтруктураДополнение.Вставить("УзелИнформационнойБазы", ДополнениеВыгрузки.УзелИнформационнойБазы); + + СтруктураДополнение.Вставить("КомпоновщикОтбораВсехДокументовНастройки", ДополнениеВыгрузки.КомпоновщикОтбораВсехДокументов.ПолучитьНастройки()); + + СтруктураДополнение.Вставить("ДополнительнаяРегистрацияСценарияУзла", ДополнениеВыгрузки.ДополнительнаяРегистрацияСценарияУзла.Выгрузить()); + СтруктураДополнение.Вставить("ДополнительнаяРегистрация", ДополнениеВыгрузки.ДополнительнаяРегистрация.Выгрузить()); + +КонецПроцедуры + #Область РаботаСДополнениемВыгрузки &НаСервере Процедура ИнициализироватьРеквизитыДополненияВыгрузки() - // Читаем параметр в реквизит формы. - Параметры.Свойство("РасширенныйРежимДополненияВыгрузки", ДополнениеВыгрузкиРасширенныйРежим); - // Получаем настройки в виде структуры, настройки будут неявно сохранены во временном хранилище формы. НастройкиДополненияВыгрузки = ОбменДаннымиСервер.ИнтерактивноеИзменениеВыгрузки( Объект.УзелИнформационнойБазы, ЭтотОбъект.УникальныйИдентификатор, ДополнениеВыгрузкиРасширенныйРежим); @@ -1502,6 +1406,27 @@ // Описание начальных типовых отборов. УстановитьОписаниеОтборовДополненияВыгрузки(); + +КонецПроцедуры + +&НаСервере +Процедура УстановитьЗаголовокФормы() + + ШаблонЗаголовка = НСтр("ru = 'Обмен данными с ""%1""'"); + + Если ПолученоСообщениеДляСопоставленияДанных Тогда + ШаблонЗаголовка = НСтр("ru = 'Сопоставление данных ""%1""'"); + ИначеЕсли ПолучитьДанные И ОтправитьДанные Тогда + ШаблонЗаголовка = НСтр("ru = 'Синхронизация данных с ""%1""'"); + ИначеЕсли ОтправитьДанные Тогда + ШаблонЗаголовка = НСтр("ru = 'Отправка данных для ""%1""'"); + ИначеЕсли ПолучитьДанные Тогда + ШаблонЗаголовка = НСтр("ru = 'Получение данных от ""%1""'"); + КонецЕсли; + + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонЗаголовка, НаименованиеКорреспондента); + КонецПроцедуры &НаКлиенте @@ -1616,27 +1541,61 @@ &НаСервереБезКонтекста Функция ПолучитьИмяКаталогаНаСервере(ВидТранспортаСообщенийОбмена, УзелИнформационнойБазы) - Возврат РегистрыСведений.НастройкиТранспортаОбмена.ИмяКаталогаОбменаИнформацией(ВидТранспортаСообщенийОбмена, УзелИнформационнойБазы); + Возврат РегистрыСведений.НастройкиТранспортаОбменаДанными.ИмяКаталогаОбменаИнформацией(ВидТранспортаСообщенийОбмена, УзелИнформационнойБазы); КонецФункции &НаСервереБезКонтекста -Функция УзелИнформационнойБазыИспользуетсяВСценарииОбмена(УзелИнформационнойБазы) +Функция СостояниеДлительнойОперации(Знач ИдентификаторОперации, УзелОбмена) - ТекстЗапроса = " - |ВЫБРАТЬ ПЕРВЫЕ 1 1 - |ИЗ - | Справочник.СценарииОбменовДанными.НастройкиОбмена КАК СценарииОбменовДаннымиНастройкиОбмена - |ГДЕ - | СценарииОбменовДаннымиНастройкиОбмена.УзелИнформационнойБазы = &УзелИнформационнойБазы - | И НЕ СценарииОбменовДаннымиНастройкиОбмена.Ссылка.ПометкаУдаления - |"; + Попытка + + ПараметрыПодключения = ОбменДаннымиСервер.СтруктураПараметровWS(); + + СохраненныеПараметры = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспортаWS(УзелОбмена); + ЗаполнитьЗначенияСвойств(ПараметрыПодключения, СохраненныеПараметры); + + ВерсииИнтерфейса = ОбменДаннымиПовтИсп.ВерсииКорреспондента(ПараметрыПодключения); + + СтрокаСообщенияОбОшибке = ""; + + WSПрокси = Неопределено; + Если ВерсииИнтерфейса.Найти("3.0.1.1") <> Неопределено Тогда + + WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси_3_0_1_1(ПараметрыПодключения, СтрокаСообщенияОбОшибке); + + ИначеЕсли ВерсииИнтерфейса.Найти("2.1.1.7") <> Неопределено Тогда + + WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси_2_1_1_7(ПараметрыПодключения, СтрокаСообщенияОбОшибке); + + ИначеЕсли ВерсииИнтерфейса.Найти("2.0.1.6") <> Неопределено Тогда + + WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси_2_0_1_6(ПараметрыПодключения, СтрокаСообщенияОбОшибке); + + Иначе + + WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси(ПараметрыПодключения, СтрокаСообщенияОбОшибке); + + КонецЕсли; + + Если WSПрокси = Неопределено Тогда + ВызватьИсключение СтрокаСообщенияОбОшибке; + КонецЕсли; + + Результат = WSПрокси.GetContinuousOperationStatus(ИдентификаторОперации, СтрокаСообщенияОбОшибке); + + Исключение + Результат = "Failed"; + СтрокаСообщенияОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + + ?(ЗначениеЗаполнено(СтрокаСообщенияОбОшибке), Символы.ПС + СтрокаСообщенияОбОшибке, ""); + КонецПопытки; - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("УзелИнформационнойБазы", УзелИнформационнойБазы); - Запрос.Текст = ТекстЗапроса; + Если Результат = "Failed" Тогда + СтрокаСообщения = НСтр("ru = 'Ошибка в базе-корреспонденте: %1'"); + СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, СтрокаСообщенияОбОшибке); + КонецЕсли; - Возврат Не Запрос.Выполнить().Пустой(); + Возврат Результат; КонецФункции @@ -1653,11 +1612,7 @@ Если ОбменЧерезВебСервис Тогда - СостояниеОперации = ОбменДаннымиВызовСервера.СостояниеДлительнойОперации(ИдентификаторОперации, - WSURLВебСервиса, - WSИмяПользователя, - WSПароль, - СообщениеОбОшибке); + СостояниеОперации = СостояниеДлительнойОперации(ИдентификаторОперации, Объект.УзелИнформационнойБазы); Иначе // Обмен по COM соединению. @@ -1677,7 +1632,7 @@ ДлительнаяОперацияЗавершенаСОшибкой = Истина; КонецЕсли; - ПодключитьОбработчикОжидания("ВыполнитьПереходДалее", 1, Истина); + ПодключитьОбработчикОжидания("ВыполнитьПереходДалее", 0.1, Истина); КонецЕсли; @@ -1733,6 +1688,8 @@ &НаКлиенте Процедура ОбновитьОтображениеЭлементовСтатусаОбменаДанными() + Элементы.ГруппаЗагрузкиДанных.Видимость = ПолучитьДанные; + Элементы.СтраницыСтатусаЗагрузкиДанных.ТекущаяСтраница = Элементы[ОбменДаннымиКлиент.СтраницыСтатусаЗагрузкиДанных()[РезультатЗагрузкиДанных]]; Если Элементы.СтраницыСтатусаЗагрузкиДанных.ТекущаяСтраница=Элементы.СтатусЗагрузкиНеопределено Тогда Элементы.ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных.Заголовок = НСтр("ru='Загрузка данных не произведена'"); @@ -1740,6 +1697,8 @@ Элементы.ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных.Заголовок = ОбменДаннымиКлиент.ЗаголовкиГиперссылокЗагрузкиДанных()[РезультатЗагрузкиДанных]; КонецЕсли; + Элементы.ГруппаВыгрузкиДанных.Видимость = ОтправитьДанные; + Элементы.СтраницыСтатусаВыгрузкиДанных.ТекущаяСтраница = Элементы[ОбменДаннымиКлиент.СтраницыСтатусаВыгрузкиДанных()[РезультатВыгрузкиДанных]]; Если Элементы.СтраницыСтатусаВыгрузкиДанных.ТекущаяСтраница=Элементы.СтатусВыгрузкиНеопределено Тогда Элементы.ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных.Заголовок = НСтр("ru='Выгрузка данных не произведена'"); @@ -1830,7 +1789,7 @@ Иначе // Задание выполнено, отменено или выполнено с ошибкой. - ПодключитьОбработчикОжидания(ПараметрыЗадания.ОбработчикЗавершения, "1", Истина); + ПодключитьОбработчикОжидания(ПараметрыЗадания.ОбработчикЗавершения, 0.1, Истина); КонецЕсли; КонецПроцедуры @@ -1873,7 +1832,7 @@ РезультатВыполненияФоновогоЗадания = Результат; // Задание выполнено, отменено или выполнено с ошибкой. - ПодключитьОбработчикОжидания(ОбработчикЗавершения, "1", Истина); + ПодключитьОбработчикОжидания(ОбработчикЗавершения, 0.1, Истина); КонецПроцедуры @@ -1900,17 +1859,18 @@ Если Объект.УзелИнформационнойБазы.Пустая() Тогда НСтрока = НСтр("ru = 'Укажите узел информационной базы'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.УзелИнформационнойБазы",, Отказ); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока, , "Объект.УзелИнформационнойБазы", , Отказ); - ИначеЕсли Объект.ВидТранспортаСообщенийОбмена.Пустая() Тогда + ИначеЕсли Объект.ВидТранспортаСообщенийОбмена.Пустая() + И Не ПолученоСообщениеДляСопоставленияДанных Тогда НСтрока = НСтр("ru = 'Укажите вариант подключения'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.ВидТранспортаСообщенийОбмена",, Отказ); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока, , "Объект.ВидТранспортаСообщенийОбмена", , Отказ); ИначеЕсли ОбменЧерезВебСервис И ПустаяСтрока(WSПароль) Тогда НСтрока = НСтр("ru = 'Не указан пароль.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "WSПароль",, Отказ); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока, , "WSПароль", , Отказ); КонецЕсли; @@ -1937,13 +1897,15 @@ Процедура ПроверитьПодключениеИСохранитьНастройки(Отказ) ПараметрыПодключения = ОбменДаннымиСервер.СтруктураПараметровWS(); - ЗаполнитьЗначенияСвойств(ПараметрыПодключения, ЭтотОбъект); + СохраненныеПараметры = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспортаWS(Объект.УзелИнформационнойБазы); + + ЗаполнитьЗначенияСвойств(ПараметрыПодключения, СохраненныеПараметры); СообщениеПользователю = ""; - WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси(ПараметрыПодключения,, СообщениеПользователю); + WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси(ПараметрыПодключения, , СообщениеПользователю); Если WSПрокси = Неопределено Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеПользователю,,"WSПароль",, Отказ); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеПользователю, , "WSПароль", , Отказ); Возврат; КонецЕсли; @@ -1953,18 +1915,24 @@ УстановитьПривилегированныйРежим(Истина); - // обновляем запись в РС + // Обновляем запись в РС. СтруктураЗаписи = Новый Структура; - СтруктураЗаписи.Вставить("Узел", Объект.УзелИнформационнойБазы); + СтруктураЗаписи.Вставить("Корреспондент", Объект.УзелИнформационнойБазы); СтруктураЗаписи.Вставить("WSЗапомнитьПароль", Истина); СтруктураЗаписи.Вставить("WSПароль", WSПароль); - РегистрыСведений.НастройкиТранспортаОбмена.ОбновитьЗапись(СтруктураЗаписи); + + РегистрыСведений.НастройкиТранспортаОбменаДанными.ОбновитьЗапись(СтруктураЗаписи); + + WSПароль = Строка(ЭтотОбъект.УникальныйИдентификатор); Исключение + СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()),,,, Отказ); + УровеньЖурналаРегистрации.Ошибка, , , СообщениеОбОшибке); + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке, , , , Отказ); Возврат; КонецПопытки; @@ -1978,7 +1946,9 @@ &НаКлиенте Функция Подключаемый_СтраницаОжиданияАнализаДанных_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) + ИнициализироватьПеременныеОбработки(); + КонецФункции &НаКлиенте @@ -1999,6 +1969,8 @@ ПараметрыМетода.Вставить("ВидТранспортаСообщенийОбмена", Объект.ВидТранспортаСообщенийОбмена); ПараметрыМетода.Вставить("WSПароль", WSПароль); + ПараметрыМетода.Вставить("ПолученоСообщениеДляСопоставленияДанных", ПолученоСообщениеДляСопоставленияДанных); + ПараметрыЗадания = ПараметрыФоновогоЗадания(); ПараметрыЗадания.ВыполняемыйМетод = "Обработки.ПомощникИнтерактивногоОбменаДанными.ПолучитьСообщениеОбменаВоВременныйКаталог"; ПараметрыЗадания.ПараметрыМетода = ПараметрыМетода; @@ -2023,7 +1995,7 @@ Если ДлительнаяОперация И Не ПропуститьПолучениеДанных Тогда ПодключитьОбработчикОжидания("ОбработчикОжиданияДлительнойОперации", 5, Истина); Иначе - ПодключитьОбработчикОжидания("ВыполнитьПереходДалее", 1, Истина); + ПодключитьОбработчикОжидания("ВыполнитьПереходДалее", 0.1, Истина); КонецЕсли; КонецПроцедуры @@ -2087,7 +2059,7 @@ ЗавершениеПолученияДанныхВоВременныйКаталогНаСервере(); КонецЕсли; - ПодключитьОбработчикОжидания("ВыполнитьПереходДалее", 1, Истина); + ПодключитьОбработчикОжидания("ВыполнитьПереходДалее", 0.1, Истина); КонецПроцедуры @@ -2197,7 +2169,7 @@ РазвернутьДеревоИнформацииСтатистики(); КонецЕсли; - ПодключитьОбработчикОжидания("ВыполнитьПереходДалее", 1, Истина); + ПодключитьОбработчикОжидания("ВыполнитьПереходДалее", 0.1, Истина); КонецФункции @@ -2297,7 +2269,7 @@ Возврат Неопределено; КонецЕсли; - Если Истина = ПропускатьКонтрольОтказаТекущейСтраницы Тогда + Если ПропускатьКонтрольОтказаТекущейСтраницы = Истина Тогда ПропускатьКонтрольОтказаТекущейСтраницы = Неопределено; Возврат Неопределено; КонецЕсли; @@ -2405,7 +2377,7 @@ КонецЕсли; - ПодключитьОбработчикОжидания("ВыполнитьПереходДалее", 1, Истина); + ПодключитьОбработчикОжидания("ВыполнитьПереходДалее", 0.1, Истина); КонецПроцедуры @@ -2415,7 +2387,7 @@ &НаКлиенте Функция Подключаемый_СтраницаВопросОСоставеВыгрузки_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) - Если ДополнениеВыгрузки.ВариантВыгрузки<0 Тогда + Если ДополнениеВыгрузки.ВариантВыгрузки < 0 Тогда // Согласно настройкам узла дополнение выгрузки не производится, переходим на следующую страницу. ПропуститьСтраницу = Истина; КонецЕсли; @@ -2423,42 +2395,125 @@ КонецФункции &НаКлиенте -Функция Подключаемый_СтраницаВопросОСоставеВыгрузки_ПриПереходеДалее(Отказ) +Функция Подключаемый_СтраницаРегистрацияДанных_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) - Если ДополнениеВыгрузки.ВариантВыгрузки >= 0 Тогда - РегистрацияДополнительноОтобранныхДанных(); - - // Возможно, на этапе регистрации возникли проблемы, которые надо показать в предупреждении. - Если ЗначениеЗаполнено(СообщениеОбОшибке) И ДлительнаяОперацияЗавершенаСОшибкой Тогда - ПерейтиДалее = Ложь; - ИзменитьПорядковыйНомерПерехода(-1); - ПоказатьПредупреждение(, СообщениеОбОшибке); - КонецЕсли; + Если ДополнениеВыгрузки.ВариантВыгрузки < 0 Тогда + // Согласно настройкам узла дополнение выгрузки не производится, переходим на следующую страницу. + ПропуститьСтраницу = Истина; КонецЕсли; КонецФункции +&НаКлиенте +Функция Подключаемый_СтраницаРегистрацияДанных_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + ПерейтиДалее = Ложь; + ПодключитьОбработчикОжидания("ПриНачалеРегистрацииДанных", 0.1, Истина); + +КонецФункции + +&НаКлиенте +Процедура ПриНачалеРегистрацииДанных() + + ПродолжитьОжидание = Истина; + ПриНачалеРегистрацииДанныхНаСервере(ПродолжитьОжидание); + + Если ПродолжитьОжидание Тогда + ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания( + ПараметрыОбработчикаОжиданияРегистрацииДанных); + + ПодключитьОбработчикОжидания("ПриОжиданииРегистрацииДанных", + ПараметрыОбработчикаОжиданияРегистрацииДанных.ТекущийИнтервал, Истина); + Иначе + ПодключитьОбработчикОжидания("ПриЗавершенииРегистрацииДанных", 0.1, Истина); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОжиданииРегистрацииДанных() + + ПродолжитьОжидание = Ложь; + ПриОжиданииРегистрацииДанныхНаСервере(ПараметрыОбработчикаРегистрацииДанных, ПродолжитьОжидание); + + Если ПродолжитьОжидание Тогда + ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияРегистрацииДанных); + + ПодключитьОбработчикОжидания("ПриОжиданииРегистрацииДанных", + ПараметрыОбработчикаОжиданияРегистрацииДанных.ТекущийИнтервал, Истина); + Иначе + ПодключитьОбработчикОжидания("ПриЗавершенииРегистрацииДанных", 0.1, Истина); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗавершенииРегистрацииДанных() + + ДанныеЗарегистрированы = Ложь; + СообщениеОбОшибке = ""; + + ПриЗавершенииРегистрацииДанныхНаСервере(ПараметрыОбработчикаРегистрацииДанных, ДанныеЗарегистрированы, СообщениеОбОшибке); + + Если ДанныеЗарегистрированы Тогда + + ИзменитьПорядковыйНомерПерехода(+1); + + Иначе + ИзменитьПорядковыйНомерПерехода(-1); + + Если Не ПустаяСтрока(СообщениеОбОшибке) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке); + Иначе + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Не удалось зарегистрировать данные для выгрузки.'")); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + &НаСервере -Процедура РегистрацияДополнительноОтобранныхДанных() +Процедура ПриНачалеРегистрацииДанныхНаСервере(ПродолжитьОжидание) - // Сохраняем настройки дополнения выгрузки. - ОбменДаннымиСервер.ИнтерактивноеИзменениеВыгрузкиСохранитьНастройки(ДополнениеВыгрузки, - ОбменДаннымиСервер.ДополнениеВыгрузкиИмяАвтоСохраненияНастроек()); + НастройкиРегистрации = Новый Структура; + НастройкиРегистрации.Вставить("УзелОбмена", ДополнениеВыгрузки.УзелИнформационнойБазы); + НастройкиРегистрации.Вставить("ДополнениеВыгрузки", Неопределено); - // Дополнительно регистрируем данные. - Попытка - СообщениеОбОшибке = ""; - ОбменДаннымиСервер.ИнтерактивноеИзменениеВыгрузкиЗарегистрироватьДополнительныеДанные(ДополнениеВыгрузки); - Исключение - УдалитьВременныйКаталогСообщенийОбмена(Объект.ИмяВременногоКаталогаСообщенийОбмена); - ДлительнаяОперацияЗавершенаСОшибкой = Истина; - ДлительнаяОперацияЗавершена = Истина; - ДлительнаяОперация = Ложь; - СообщениеОбОшибке = НСтр("ru = 'Возникла проблема при добавлении данных к выгрузке:'") - + Символы.ПС + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()) - + Символы.ПС + НСтр("ru = 'Необходимо изменить условия отбора.'"); - Возврат; - КонецПопытки; + ПодготовитьСтруктуруДополненияВыгрузки(НастройкиРегистрации.ДополнениеВыгрузки); + + ПараметрыОбработчикаРегистрацииДанных = Неопределено; + Обработки.ПомощникИнтерактивногоОбменаДанными.ПриНачалеРегистрацииДанных(НастройкиРегистрации, + ПараметрыОбработчикаРегистрацииДанных, ПродолжитьОжидание); + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ПриОжиданииРегистрацииДанныхНаСервере(ПараметрыОбработчика, ПродолжитьОжидание) + + ПродолжитьОжидание = Ложь; + Обработки.ПомощникИнтерактивногоОбменаДанными.ПриОжиданииРегистрацииДанных(ПараметрыОбработчика, ПродолжитьОжидание); + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ПриЗавершенииРегистрацииДанныхНаСервере(ПараметрыОбработчика, ДанныеЗарегистрированы, СообщениеОбОшибке) + + СтатусЗавершения = Неопределено; + + Обработки.ПомощникИнтерактивногоОбменаДанными.ПриЗавершенииРегистрацииДанных( + ПараметрыОбработчика, СтатусЗавершения); + ПараметрыОбработчика = Неопределено; + + Если СтатусЗавершения.Отказ Тогда + ДанныеЗарегистрированы = Ложь; + СообщениеОбОшибке = СтатусЗавершения.СообщениеОбОшибке; + Иначе + ДанныеЗарегистрированы = СтатусЗавершения.Результат.ДанныеЗарегистрированы; + + Если Не ДанныеЗарегистрированы Тогда + СообщениеОбОшибке = СтатусЗавершения.Результат.СообщениеОбОшибке; + КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -2476,27 +2531,144 @@ Функция Подключаемый_СтраницаОжиданияВыгрузкиДанных_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) ПерейтиДалее = Ложь; - - ПараметрыМетода = Новый Структура; - ПараметрыМетода.Вставить("УзелИнформационнойБазы", Объект.УзелИнформационнойБазы); - ПараметрыМетода.Вставить("ВидТранспортаСообщенийОбмена", Объект.ВидТранспортаСообщенийОбмена); - ПараметрыМетода.Вставить("ИмяФайлаСообщенияОбмена", Объект.ИмяФайлаСообщенияОбмена); - ПараметрыМетода.Вставить("ДлительнаяОперация", ДлительнаяОперация); - ПараметрыМетода.Вставить("ИдентификаторОперации", ИдентификаторОперации); - ПараметрыМетода.Вставить("ИдентификаторФайла", ИдентификаторФайла); - ПараметрыМетода.Вставить("WSПароль", WSПароль); - ПараметрыМетода.Вставить("Отказ", Ложь); - - ПараметрыЗадания = ПараметрыФоновогоЗадания(); - ПараметрыЗадания.ВыполняемыйМетод = "Обработки.ПомощникИнтерактивногоОбменаДанными.ВыполнитьВыгрузкуДанных"; - ПараметрыЗадания.ПараметрыМетода = ПараметрыМетода; - ПараметрыЗадания.НаименованиеЗадания = НСтр("ru = 'Выгрузка данных из сообщения обмена'"); - ПараметрыЗадания.ОбработчикЗавершения = "ЗавершениеВыгрузкиДанных"; - - ФоновоеЗаданиеЗапуститьНаКлиенте(ПараметрыЗадания, Отказ); + ПриНачалеВыгрузкиДанных(Отказ); КонецФункции +&НаКлиенте +Процедура ПриНачалеВыгрузкиДанных(Отказ) + + Если ОбменМеждуПриложениямиВСервисе Тогда + ПродолжитьОжидание = Истина; + ПриНачалеВыгрузкиДанныхНаСервере(ПродолжитьОжидание); + + Если ПродолжитьОжидание Тогда + ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания( + ПараметрыОбработчикаОжиданияВыгрузкиДанных); + + ПодключитьОбработчикОжидания("ПриОжиданииВыгрузкиДанных", + ПараметрыОбработчикаОжиданияВыгрузкиДанных.ТекущийИнтервал, Истина); + Иначе + ПриЗавершенииВыгрузкиДанных(); + КонецЕсли; + Иначе + ПараметрыМетода = Новый Структура; + ПараметрыМетода.Вставить("УзелИнформационнойБазы", Объект.УзелИнформационнойБазы); + ПараметрыМетода.Вставить("ВидТранспортаСообщенийОбмена", Объект.ВидТранспортаСообщенийОбмена); + ПараметрыМетода.Вставить("ИмяФайлаСообщенияОбмена", Объект.ИмяФайлаСообщенияОбмена); + ПараметрыМетода.Вставить("ДлительнаяОперация", ДлительнаяОперация); + ПараметрыМетода.Вставить("ИдентификаторОперации", ИдентификаторОперации); + ПараметрыМетода.Вставить("ИдентификаторФайла", ИдентификаторФайла); + ПараметрыМетода.Вставить("WSПароль", WSПароль); + ПараметрыМетода.Вставить("Отказ", Ложь); + + ПараметрыЗадания = ПараметрыФоновогоЗадания(); + ПараметрыЗадания.ВыполняемыйМетод = "Обработки.ПомощникИнтерактивногоОбменаДанными.ВыполнитьВыгрузкуДанных"; + ПараметрыЗадания.ПараметрыМетода = ПараметрыМетода; + ПараметрыЗадания.НаименованиеЗадания = НСтр("ru = 'Выгрузка данных в сообщение обмена'"); + ПараметрыЗадания.ОбработчикЗавершения = "ЗавершениеВыгрузкиДанных"; + + ФоновоеЗаданиеЗапуститьНаКлиенте(ПараметрыЗадания, Отказ); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОжиданииВыгрузкиДанных() + + ПродолжитьОжидание = Ложь; + ПриОжиданииВыгрузкиДанныхНаСервере(ПараметрыОбработчикаВыгрузкиДанных, ПродолжитьОжидание); + + Если ПродолжитьОжидание Тогда + ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияВыгрузкиДанных); + + ПодключитьОбработчикОжидания("ПриОжиданииВыгрузкиДанных", + ПараметрыОбработчикаОжиданияВыгрузкиДанных.ТекущийИнтервал, Истина); + Иначе + ПриЗавершенииВыгрузкиДанных(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗавершенииВыгрузкиДанных() + + ДанныеВыгружены = Ложь; + СообщениеОбОшибке = ""; + + ПриЗавершенииВыгрузкиДанныхНаСервере(ПараметрыОбработчикаВыгрузкиДанных, ДанныеВыгружены, СообщениеОбОшибке); + + Если ДанныеВыгружены Тогда + ИзменитьПорядковыйНомерПерехода(+1); + Иначе + ИзменитьПорядковыйНомерПерехода(-1); + + Если Не ПустаяСтрока(СообщениеОбОшибке) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке); + Иначе + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Не удалось выполнить обмен данными.'")); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПриНачалеВыгрузкиДанныхНаСервере(ПродолжитьОжидание) + + НастройкиВыгрузки = Новый Структура; + НастройкиВыгрузки.Вставить("Корреспондент", Объект.УзелИнформационнойБазы); + НастройкиВыгрузки.Вставить("ОбластьДанныхКорреспондента", ОбластьДанныхКорреспондента); + НастройкиВыгрузки.Вставить("ДополнениеВыгрузки", Неопределено); + + ПодготовитьСтруктуруДополненияВыгрузки(НастройкиВыгрузки.ДополнениеВыгрузки); + + МодульПомощникИнтерактивногоОбмена = ОбщегоНазначения.ОбщийМодуль( + "Обработки.ПомощникИнтерактивногоОбменаДаннымиВМоделиСервиса"); + + ПараметрыОбработчикаВыгрузкиДанных = Неопределено; + МодульПомощникИнтерактивногоОбмена.ПриНачалеВыгрузкиДанных(НастройкиВыгрузки, + ПараметрыОбработчикаВыгрузкиДанных, ПродолжитьОжидание); + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ПриОжиданииВыгрузкиДанныхНаСервере(ПараметрыОбработчика, ПродолжитьОжидание) + + МодульПомощникИнтерактивногоОбмена = ОбщегоНазначения.ОбщийМодуль( + "Обработки.ПомощникИнтерактивногоОбменаДаннымиВМоделиСервиса"); + + ПродолжитьОжидание = Ложь; + МодульПомощникИнтерактивногоОбмена.ПриОжиданииВыгрузкиДанных(ПараметрыОбработчика, ПродолжитьОжидание); + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ПриЗавершенииВыгрузкиДанныхНаСервере(ПараметрыОбработчика, ДанныеВыгружены, СообщениеОбОшибке) + + СтатусЗавершения = Неопределено; + + МодульПомощникИнтерактивногоОбмена = ОбщегоНазначения.ОбщийМодуль( + "Обработки.ПомощникИнтерактивногоОбменаДаннымиВМоделиСервиса"); + + МодульПомощникИнтерактивногоОбмена.ПриЗавершенииВыгрузкиДанных(ПараметрыОбработчика, СтатусЗавершения); + ПараметрыОбработчика = Неопределено; + + Если СтатусЗавершения.Отказ Тогда + ДанныеВыгружены = Ложь; + СообщениеОбОшибке = СтатусЗавершения.СообщениеОбОшибке; + Возврат; + Иначе + ДанныеВыгружены = СтатусЗавершения.Результат.ДанныеВыгружены; + + Если Не ДанныеВыгружены Тогда + СообщениеОбОшибке = СтатусЗавершения.Результат.СообщениеОбОшибке; + Возврат; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ЗавершениеВыгрузкиДанных() @@ -2516,13 +2688,13 @@ ПодключитьОбработчикОжидания("ОбработчикОжиданияДлительнойОперации", 5, Истина); Иначе УдалитьВременныйКаталогСообщенийОбмена(Объект.ИмяВременногоКаталогаСообщенийОбмена); - ПодключитьОбработчикОжидания("ВыполнитьПереходДалее", 1, Истина); + ПодключитьОбработчикОжидания("ВыполнитьПереходДалее", 0.1, Истина); КонецЕсли; КонецПроцедуры &НаСервере -Процедура ЗавершениеВыгрузкиНаСервере(); +Процедура ЗавершениеВыгрузкиНаСервере() РезультатВыполненияМетода = ПолучитьИзВременногоХранилища(РезультатВыполненияФоновогоЗадания.АдресРезультата); @@ -2595,202 +2767,101 @@ //////////////////////////////////////////////////////////////////////////////// // РАЗДЕЛ ИНИЦИАЛИЗАЦИИ ПЕРЕХОДОВ -#Область ТаблицыПереходов - &НаСервере -Процедура ПолучениеДанныхЧерезОбычныеКаналыСвязи() +Процедура ЗаполнитьТаблицуПереходов() - ТаблицаПереходов.Очистить(); - - // Начало. - ТаблицаПереходовНоваяСтрока(1, "СтраницаНачала", "СтраницаНавигацииНачало",, "СтраницаНачала_ПриПереходеДалее"); - - // Получение данных (транспорт сообщения обмена). - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(2, "СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияАнализаДанных_ОбработкаДлительнойОперации", "СтраницаОжиданияАнализаДанных_ПриОткрытии"); - - // Анализ данных. - // Автоматическое сопоставление данных. - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(3, "СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "АнализДанных_ОбработкаДлительнойОперации", "СтраницаАнализДанных_ПриОткрытии"); - - // Сопоставление данных пользователем. - ТаблицаПереходовНоваяСтрока(5, "СтраницаИнформацииСтатистики", "СтраницаНавигацииПродолжение", "СтраницаИнформацииСтатистики_ПриОткрытии", "СтраницаИнформацииСтатистики_ПриПереходеДалее"); - - // Загрузка данных. - ИспользоватьПрогрессБар = Истина; - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(6, "СтраницаОжиданияСинхронизацииДанныхПрогрессБарЗагрузка", "СтраницаНавигацииОжидание", Истина, "ЗагрузкаДанных_ОбработкаДлительнойОперации", "ЗагрузкаДанных_ПриОткрытии"); - - // Итоги. - ТаблицаПереходовНоваяСтрока(7, "СтраницаОкончанияСопоставления", "СтраницаНавигацииОкончание", "СтраницаОкончанияСопоставления_ПриОткрытии"); - -КонецПроцедуры - -&НаСервере -Процедура ПолучениеДанныхЧерезВнешнееСоединениеИлиВебСервис() - - ТаблицаПереходов.Очистить(); - - // Проверка подключения. - ТаблицаПереходовНоваяСтрока(1, "СтраницаНачала", "СтраницаНавигацииНачало",, "СтраницаНачала_ПриПереходеДалее"); - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(2, "СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияПроверкиПодключения_ОбработкаДлительнойОперации"); - - // Получение данных (транспорт сообщения обмена). - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(3, "СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияАнализаДанных_ОбработкаДлительнойОперации", "СтраницаОжиданияАнализаДанных_ПриОткрытии"); - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(4, "СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияАнализаДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); - - // Анализ данных. - // Автоматическое сопоставление данных. - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(5, "СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "АнализДанных_ОбработкаДлительнойОперации", "СтраницаАнализДанных_ПриОткрытии"); - - // Сопоставление данных пользователем. - ТаблицаПереходовНоваяСтрока(6, "СтраницаИнформацииСтатистики", "СтраницаНавигацииПродолжение", "СтраницаИнформацииСтатистики_ПриОткрытии", "СтраницаИнформацииСтатистики_ПриПереходеДалее"); - - // Загрузка данных. - Если ОбменЧерезВебСервис Тогда - ИмяСтраницыСинхронизация = "СтраницаОжиданияСинхронизацииДанных"; - Иначе - ИспользоватьПрогрессБар = Истина; - ИмяСтраницыСинхронизация = "СтраницаОжиданияСинхронизацииДанныхПрогрессБарЗагрузка"; - КонецЕсли; - - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(7, ИмяСтраницыСинхронизация, "СтраницаНавигацииОжидание", Истина, "ЗагрузкаДанных_ОбработкаДлительнойОперации", "ЗагрузкаДанных_ПриОткрытии"); - - // Итоги. - ТаблицаПереходовНоваяСтрока(8, "СтраницаОкончанияСопоставления", "СтраницаНавигацииОкончание", "СтраницаОкончанияСопоставления_ПриОткрытии"); - -КонецПроцедуры - -&НаСервере -Процедура ОтправкаДанныхЧерезОбычныеКаналыСвязи() - - ТаблицаПереходов.Очистить(); - - // Начало. - ТаблицаПереходовНоваяСтрока(1, "СтраницаНачала", "СтраницаНавигацииНачало",, "СтраницаНачала_ПриПереходеДалее"); - - // Настройка выгрузки данных. - РезультатВыгрузкиДанных = ""; - ТаблицаПереходовНоваяСтрока(2, "СтраницаВопросОСоставеВыгрузки", "СтраницаНавигацииПродолжение", "СтраницаВопросОСоставеВыгрузки_ПриОткрытии", "СтраницаВопросОСоставеВыгрузки_ПриПереходеДалее"); - - // Выгрузка данных. - ИспользоватьПрогрессБар = Истина; - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(3, "СтраницаОжиданияСинхронизацииДанныхПрогрессБарВыгрузка", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияВыгрузкиДанных_ОбработкаДлительнойОперации", "ВыгрузкаДанных_ПриОткрытии"); - - // Итоги. - ТаблицаПереходовНоваяСтрока(4, "СтраницаОкончанияСопоставления", "СтраницаНавигацииОкончание", "СтраницаОкончанияСопоставления_ПриОткрытии"); - -КонецПроцедуры - -&НаСервере -Процедура ОтправкаДанныхЧерезВнешнееСоединениеИлиВебСервис() - - ТаблицаПереходов.Очистить(); - - // Проверка подключения. - ТаблицаПереходовНоваяСтрока(1, "СтраницаНачала", "СтраницаНавигацииНачало",, "СтраницаНачала_ПриПереходеДалее"); - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(2, "СтраницаОжиданияСинхронизацииДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияПроверкиПодключения_ОбработкаДлительнойОперации"); - - // Настройка выгрузки данных. - РезультатВыгрузкиДанных = ""; - ТаблицаПереходовНоваяСтрока(3, "СтраницаВопросОСоставеВыгрузки", "СтраницаНавигацииПродолжение", "СтраницаВопросОСоставеВыгрузки_ПриОткрытии", "СтраницаВопросОСоставеВыгрузки_ПриПереходеДалее"); - - // Выгрузка данных. - Если ОбменЧерезВебСервис Тогда - ИмяСтраницыСинхронизация = "СтраницаОжиданияСинхронизацииДанных"; - Иначе - ИспользоватьПрогрессБар = Истина; - ИмяСтраницыСинхронизация = "СтраницаОжиданияСинхронизацииДанныхПрогрессБарВыгрузка"; - КонецЕсли; - - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(4, ИмяСтраницыСинхронизация, "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияВыгрузкиДанных_ОбработкаДлительнойОперации", "ВыгрузкаДанных_ПриОткрытии"); - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(5, ИмяСтраницыСинхронизация, "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияВыгрузкиДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); - - // Итоги. - ТаблицаПереходовНоваяСтрока(6, "СтраницаОкончанияСопоставления", "СтраницаНавигацииОкончание", "СтраницаОкончанияСопоставления_ПриОткрытии"); - -КонецПроцедуры - -&НаСервере -Процедура ПолучениеИОтправкаДанныхЧерезОбычныеКаналыСвязи() - - ТаблицаПереходов.Очистить(); - - // Начало. - ТаблицаПереходовНоваяСтрока(1, "СтраницаНачала", "СтраницаНавигацииНачало",, "СтраницаНачала_ПриПереходеДалее"); - - // Получение данных (транспорт сообщения обмена). - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(2, "СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияАнализаДанных_ОбработкаДлительнойОперации", "СтраницаОжиданияАнализаДанных_ПриОткрытии"); - - // Анализ данных. - // Автоматическое сопоставление данных. - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(3, "СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "АнализДанных_ОбработкаДлительнойОперации", "СтраницаАнализДанных_ПриОткрытии"); - - // Сопоставление данных пользователем. - ТаблицаПереходовНоваяСтрока(4, "СтраницаИнформацииСтатистики", "СтраницаНавигацииПродолжение", "СтраницаИнформацииСтатистики_ПриОткрытии", "СтраницаИнформацииСтатистики_ПриПереходеДалее"); - - ИспользоватьПрогрессБар = Истина; - - // Загрузка данных. - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(5, "СтраницаОжиданияСинхронизацииДанныхПрогрессБарЗагрузка", "СтраницаНавигацииОжидание", Истина, "ЗагрузкаДанных_ОбработкаДлительнойОперации", "ЗагрузкаДанных_ПриОткрытии"); - - // Настройка выгрузки данных. - РезультатВыгрузкиДанных = ""; - ТаблицаПереходовНоваяСтрока(6, "СтраницаВопросОСоставеВыгрузки", "СтраницаНавигацииПродолжение", "СтраницаВопросОСоставеВыгрузки_ПриОткрытии", "СтраницаВопросОСоставеВыгрузки_ПриПереходеДалее"); - - // Выгрузка данных. - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(7, "СтраницаОжиданияСинхронизацииДанныхПрогрессБарВыгрузка", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияВыгрузкиДанных_ОбработкаДлительнойОперации", "ВыгрузкаДанных_ПриОткрытии"); - - // Итоги. - ТаблицаПереходовНоваяСтрока(8, "СтраницаОкончанияСопоставления", "СтраницаНавигацииОкончание", "СтраницаОкончанияСопоставления_ПриОткрытии"); - -КонецПроцедуры - -&НаСервере -Процедура ПолучениеИОтправкаДанныхЧерезВнешнееСоединениеИлиВебСервис() - - ТаблицаПереходов.Очистить(); - - // Проверка подключения. - ТаблицаПереходовНоваяСтрока(1, "СтраницаНачала", "СтраницаНавигацииНачало",, "СтраницаНачала_ПриПереходеДалее"); - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(2, "СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияПроверкиПодключения_ОбработкаДлительнойОперации"); - - // Получение данных (транспорт сообщения обмена). - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(3, "СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияАнализаДанных_ОбработкаДлительнойОперации", "СтраницаОжиданияАнализаДанных_ПриОткрытии"); - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(4, "СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияАнализаДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); - - // Анализ данных. - // Автоматическое сопоставление данных. - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(5, "СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "АнализДанных_ОбработкаДлительнойОперации", "СтраницаАнализДанных_ПриОткрытии"); - - // Сопоставление данных пользователем. - ТаблицаПереходовНоваяСтрока(6, "СтраницаИнформацииСтатистики", "СтраницаНавигацииПродолжение", "СтраницаИнформацииСтатистики_ПриОткрытии", "СтраницаИнформацииСтатистики_ПриПереходеДалее"); - - // Загрузка данных. - Если ОбменЧерезВебСервис Тогда - ИмяСтраницыСинхронизацияЗагрузка = "СтраницаОжиданияСинхронизацииДанных"; - ИмяСтраницыСинхронизацияВыгрузка = "СтраницаОжиданияСинхронизацииДанных"; - Иначе - ИспользоватьПрогрессБар = Истина; + Если ИспользоватьПрогрессБар Тогда ИмяСтраницыСинхронизацияЗагрузка = "СтраницаОжиданияСинхронизацииДанныхПрогрессБарЗагрузка"; ИмяСтраницыСинхронизацияВыгрузка = "СтраницаОжиданияСинхронизацииДанныхПрогрессБарВыгрузка"; + Иначе + ИмяСтраницыСинхронизацияЗагрузка = "СтраницаОжиданияСинхронизацииДанных"; + ИмяСтраницыСинхронизацияВыгрузка = "СтраницаОжиданияСинхронизацииДанных"; КонецЕсли; - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(7, ИмяСтраницыСинхронизацияЗагрузка, "СтраницаНавигацииОжидание", Истина, "ЗагрузкаДанных_ОбработкаДлительнойОперации", "ЗагрузкаДанных_ПриОткрытии"); + ТаблицаПереходов.Очистить(); - // Настройка выгрузки данных. - РезультатВыгрузкиДанных = ""; - ТаблицаПереходовНоваяСтрока(8, "СтраницаВопросОСоставеВыгрузки", "СтраницаНавигацииПродолжение", "СтраницаВопросОСоставеВыгрузки_ПриОткрытии", "СтраницаВопросОСоставеВыгрузки_ПриПереходеДалее"); + Если Не ПропускатьСтраницуТранспорта Тогда + ТаблицаПереходовНоваяСтрока("СтраницаНачала", "СтраницаНавигацииНачало", , "СтраницаНачала_ПриПереходеДалее"); + КонецЕсли; - // Выгрузка данных. - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(9, ИмяСтраницыСинхронизацияВыгрузка, "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияВыгрузкиДанных_ОбработкаДлительнойОперации", "ВыгрузкаДанных_ПриОткрытии"); - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(10, ИмяСтраницыСинхронизацияВыгрузка, "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияВыгрузкиДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + Если ОбменМеждуПриложениямиВСервисе Тогда + + Если ПолученоСообщениеДляСопоставленияДанных Тогда + // Получение данных (транспорт сообщения обмена). + ТаблицаПереходовНоваяСтрокаДлительнаяОперация("СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияАнализаДанных_ОбработкаДлительнойОперации", "СтраницаОжиданияАнализаДанных_ПриОткрытии"); + + // Анализ данных. Автоматическое сопоставление данных. + ТаблицаПереходовНоваяСтрокаДлительнаяОперация("СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "АнализДанных_ОбработкаДлительнойОперации", "СтраницаАнализДанных_ПриОткрытии"); + + // Сопоставление данных пользователем. + ТаблицаПереходовНоваяСтрока("СтраницаИнформацииСтатистики", "СтраницаНавигацииИнформацииСтатистики", "СтраницаИнформацииСтатистики_ПриОткрытии", "СтраницаИнформацииСтатистики_ПриПереходеДалее"); + + // Загрузка данных. + ТаблицаПереходовНоваяСтрокаДлительнаяОперация(ИмяСтраницыСинхронизацияЗагрузка, "СтраницаНавигацииОжидание", Истина, "ЗагрузкаДанных_ОбработкаДлительнойОперации", "ЗагрузкаДанных_ПриОткрытии"); + КонецЕсли; + + Если ОтправитьДанные Тогда + РезультатВыгрузкиДанных = ""; + ТаблицаПереходовНоваяСтрока("СтраницаВопросОСоставеВыгрузки", "СтраницаНавигацииПродолжение", "СтраницаВопросОСоставеВыгрузки_ПриОткрытии"); + + // Выгрузка и загрузка данных. + ТаблицаПереходовНоваяСтрокаДлительнаяОперация(ИмяСтраницыСинхронизацияВыгрузка, "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияВыгрузкиДанных_ОбработкаДлительнойОперации", "ВыгрузкаДанных_ПриОткрытии"); + КонецЕсли; + + Иначе + + Если ОбменЧерезПодключениеККорреспонденту Тогда + // Проверка подключения. + Если ПолучитьДанные Тогда + ТаблицаПереходовНоваяСтрокаДлительнаяОперация("СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияПроверкиПодключения_ОбработкаДлительнойОперации"); + Иначе + ТаблицаПереходовНоваяСтрокаДлительнаяОперация("СтраницаОжиданияСинхронизацииДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияПроверкиПодключения_ОбработкаДлительнойОперации"); + КонецЕсли; + КонецЕсли; + + Если ПолучитьДанные Тогда + // Получение данных (транспорт сообщения обмена). + ТаблицаПереходовНоваяСтрокаДлительнаяОперация("СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияАнализаДанных_ОбработкаДлительнойОперации", "СтраницаОжиданияАнализаДанных_ПриОткрытии"); + Если ОбменЧерезПодключениеККорреспонденту Тогда + ТаблицаПереходовНоваяСтрокаДлительнаяОперация("СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияАнализаДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + КонецЕсли; + + // Анализ данных. Автоматическое сопоставление данных. + ТаблицаПереходовНоваяСтрокаДлительнаяОперация("СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "АнализДанных_ОбработкаДлительнойОперации", "СтраницаАнализДанных_ПриОткрытии"); + + // Сопоставление данных пользователем. + Если ПолученоСообщениеДляСопоставленияДанных Тогда + ТаблицаПереходовНоваяСтрока("СтраницаИнформацииСтатистики", "СтраницаНавигацииИнформацииСтатистики", "СтраницаИнформацииСтатистики_ПриОткрытии", "СтраницаИнформацииСтатистики_ПриПереходеДалее"); + Иначе + ТаблицаПереходовНоваяСтрока("СтраницаИнформацииСтатистики", "СтраницаНавигацииПродолжение", "СтраницаИнформацииСтатистики_ПриОткрытии", "СтраницаИнформацииСтатистики_ПриПереходеДалее"); + КонецЕсли; + + // Загрузка данных. + ТаблицаПереходовНоваяСтрокаДлительнаяОперация(ИмяСтраницыСинхронизацияЗагрузка, "СтраницаНавигацииОжидание", Истина, "ЗагрузкаДанных_ОбработкаДлительнойОперации", "ЗагрузкаДанных_ПриОткрытии"); + КонецЕсли; + + Если ОтправитьДанные Тогда + // Настройка выгрузки данных. + РезультатВыгрузкиДанных = ""; + ТаблицаПереходовНоваяСтрока("СтраницаВопросОСоставеВыгрузки", "СтраницаНавигацииПродолжение", "СтраницаВопросОСоставеВыгрузки_ПриОткрытии"); + + // Длительная операция регистрации дополнительных данных к выгрузке. + ТаблицаПереходовНоваяСтрокаДлительнаяОперация("СтраницаРегистрацияДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаРегистрацияДанных_ОбработкаДлительнойОперации", "СтраницаРегистрацияДанных_ПриОткрытии"); + + // Выгрузка данных. + ТаблицаПереходовНоваяСтрокаДлительнаяОперация(ИмяСтраницыСинхронизацияВыгрузка, "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияВыгрузкиДанных_ОбработкаДлительнойОперации", "ВыгрузкаДанных_ПриОткрытии"); + Если ОбменЧерезПодключениеККорреспонденту Тогда + ТаблицаПереходовНоваяСтрокаДлительнаяОперация(ИмяСтраницыСинхронизацияВыгрузка, "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияВыгрузкиДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + КонецЕсли; + КонецЕсли; + + КонецЕсли; // Итоги. - ТаблицаПереходовНоваяСтрока(11, "СтраницаОкончанияСопоставления", "СтраницаНавигацииОкончание", "СтраницаОкончанияСопоставления_ПриОткрытии"); + ТаблицаПереходовНоваяСтрока("СтраницаОкончанияСопоставления", "СтраницаНавигацииОкончание", "СтраницаОкончанияСопоставления_ПриОткрытии"); КонецПроцедуры #КонецОбласти -#КонецОбласти - -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Help/ru.html b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Help/ru.html index 71dbad84b..7f3509830 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Help/ru.html +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Help/ru.html @@ -1,9 +1,9 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.18427"></meta></head><body> <p>Помощник интерактивной синхронизации данных предназначен для выполнения синхронизации данных с возможностью предварительного просмотра и сопоставления загружаемых данных. Помощник позволяет выполнять сопоставление объектов двух информационных баз, между которыми настроена синхронизация данных. После выполнения сопоставления выполняется загрузка данных и последующая выгрузка данных.</p> <p>Режим интерактивной синхронизации данных следует использовать в случае, когда до начала синхронизации один и тот же объект мог быть введен независимо в обеих обменивающихся ИБ. Другими словами, интерактивный режим синхронизации данных следует выбирать при первой синхронизации данных между ИБ, учет в которых уже ведется. Поскольку вероятность существования в таких ИБ одних и тех же объектов очень высока. В этом случае интерактивный режим позволит такие объекты сопоставить вручную.</p> -<p>Открыть помощник можно, нажав кнопку <img src="CommonPicture.СинхронизацияДанныхИнтерактивноеВыполнение" width="16" height="16"></img> <strong>Синхронизировать данные, задав дополнительные параметры</strong> в списке <a href="CommonForm.СинхронизацияДанных/Help">Синхронизация данных</a>.</p> +<p>Открыть помощник можно, нажав кнопку <img src="CommonPicture.СинхронизацияДанныхИнтерактивноеВыполнение" width="16" height="16"></img> <strong>Запустить синхронизацию</strong> в списке <a href="CommonForm.СинхронизацияДанных/Help">Синхронизация данных</a>.</p> <h3>Параметры подключения</h3> -<ul><li>На первой странице помощника следует выбрать <a href="InformationRegister.НастройкиТранспортаОбмена/Help">вид транспорта сообщений обмена</a> (можно изменить уже имеющийся вариант подключения, он указан на этой странице), для этого нажмите <img src="StdPicture.Change"></img> <strong>Настроить,</strong> при необходимости можно перейти в каталог обмена информацией и убедиться в физическом существовании требуемых файлов или проверить параметры транспорта сообщений обмена. +<ul><li>На первой странице помощника следует выбрать <a href="InformationRegister.УдалитьНастройкиТранспортаОбмена/Help">вид транспорта сообщений обмена</a> (можно изменить уже имеющийся вариант подключения, он указан на этой странице), для этого нажмите <img src="StdPicture.Change"></img> <strong>Настроить,</strong> при необходимости можно перейти в каталог обмена информацией и убедиться в физическом существовании требуемых файлов или проверить параметры транспорта сообщений обмена. </li><li>Для перехода к следующей странице нажмите кнопку <strong>Далее</strong>. </li></ul><h3 align="left">Сопоставление данных</h3> <ul><li>На второй странице помощника отображается статистика сопоставления объектов. Перед открытием страницы программа выполняет попытку сопоставить данные автоматически. </li><li>Автоматическое сопоставление выполняется по заданным по умолчанию полям сопоставления, при этом соблюдаются самые строгие правила сопоставления. Рекомендуется выполнить проверку результатов автоматического сопоставления данных. В списке выводится: @@ -16,7 +16,7 @@ </li><li> <div align="left"><strong>Осталось сопоставить, шт</strong>.</div> </li><li> -<div align="left"><strong>Сопоставление, %</strong></div></li></ul></li><li>По команде <strong>Выполнить сопоставление</strong> открывается окно для предварительного просмотра загружаемых данных и выполнения <a href="DataProcessor.СопоставлениеОбъектовИнформационныхБаз/Help">сопоставления объектов вручную</a>. Сопоставленные вручную объекты двух ИБ запоминаются и при выполнении следующей синхронизации данных сопоставляются автоматически. При использовании интерактивного режима загрузки рекомендуется вначале выполнять автоматическое сопоставление, а затем выполнять сопоставление вручную для объектов, которые не были сопоставлены автоматически. +<div align="left"><strong>Сопоставление, %</strong></div></li></ul></li><li>С помощью кнопки <strong>Сопоставить</strong> открывается окно для предварительного просмотра загружаемых данных и выполнения <a href="DataProcessor.СопоставлениеОбъектовИнформационныхБаз/Help">сопоставления объектов вручную</a>. Сопоставленные вручную объекты двух ИБ запоминаются и при выполнении следующей синхронизации данных сопоставляются автоматически. При использовании интерактивного режима загрузки рекомендуется вначале выполнять автоматическое сопоставление, а затем выполнять сопоставление вручную для объектов, которые не были сопоставлены автоматически. </li><li> <div align="left">Список не является динамическим, поэтому для того чтобы увидеть новые данные, полученные и сопоставленные после открытия списка, нажмите <img src="StdPicture.Refresh"></img> <strong>Обновить</strong>.</div> </li><li> @@ -46,6 +46,6 @@ <ul><li>На заключительной странице помощника программа выводит сообщения о состоянии синхронизации: <ul><li><img src="CommonPicture.СостояниеОбменаДаннымиОшибка"></img><strong>Не удалось получить данные</strong> или <strong>Данные успешно получены</strong> и т.д. </li><li><strong><img src="CommonPicture.СостояниеОбменаДаннымиОшибка" width="16" height="16"></img>Не удалось отправить данные</strong> или <strong>Данные успешно отправлены</strong> и т.д. -</li><li>По ссылке <strong>Подробно</strong> можно перейти в журнал регистрации и просмотреть, как проходил процесс синхронизации, узнать об ошибках.</li></ul></li><li>При необходимости можно настроить <a href="Catalog.СценарииОбменовДанными.Form.ФормаЭлемента/Help">расписание для синхронизации данных</a> в автоматическом режиме (в том случае, если текущая синхронизация данных еще не включена ни в одно из существующих <a href="Catalog.СценарииОбменовДанными/Help">расписаний выполнения синхронизации</a>). Нажмите <img src="StdPicture.ScheduledJob" width="16" height="16"></img><strong>Настроить</strong>. +</li><li>По ссылке <strong>Подробно</strong> можно перейти в <a href="DataProcessor.ЖурналРегистрации/Help">журнал регистрации</a> и просмотреть, как проходил процесс синхронизации, узнать об ошибках.</li></ul></li><li>При необходимости можно настроить <a href="Catalog.СценарииОбменовДанными.Form.ФормаЭлемента/Help">расписание для синхронизации данных</a> в автоматическом режиме (в том случае, если текущая синхронизация данных еще не включена ни в одно из существующих <a href="Catalog.СценарииОбменовДанными/Help">расписаний выполнения синхронизации</a>). Нажмите <img src="StdPicture.ScheduledJob" width="16" height="16"></img><strong>Настроить</strong>. </li><li>Для завершения работы с помощником нажмите <strong>Готово</strong>.</li></ul><h3>См. также:</h3> <ul><li><a href="CommonForm.СинхронизацияДанных/Help">Синхронизация данных</a>.</li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ManagerModule.bsl b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ManagerModule.bsl index 8aa15e086..b8a02ec69 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ManagerModule.bsl @@ -21,7 +21,31 @@ Отказ = Ложь; УстановитьПривилегированныйРежим(Истина); - Если Параметры.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.COM Тогда + СтруктураДанных = Новый Структура; + СтруктураДанных.Вставить("ИмяВременногоКаталогаСообщенийОбмена", ""); + СтруктураДанных.Вставить("ИдентификаторФайлаПакетаДанных", Неопределено); + СтруктураДанных.Вставить("ИмяФайлаСообщенияОбмена", ""); + + Если Параметры.ПолученоСообщениеДляСопоставленияДанных Тогда + + Отбор = Новый Структура("УзелИнформационнойБазы", Параметры.УзелИнформационнойБазы); + ОбщиеНастройки = РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.Получить(Отбор); + + Если ЗначениеЗаполнено(ОбщиеНастройки.СообщениеДляСопоставленияДанных) Тогда + ИмяВременногоФайла = ОбменДаннымиСервер.ПолучитьФайлИзХранилища(ОбщиеНастройки.СообщениеДляСопоставленияДанных); + + Файл = Новый Файл(ИмяВременногоФайла); + Если Файл.Существует() Тогда + + СтруктураДанных.ИмяВременногоКаталогаСообщенийОбмена = Файл.Путь; + СтруктураДанных.ИдентификаторФайлаПакетаДанных = Файл.ПолучитьВремяИзменения(); + СтруктураДанных.ИмяФайлаСообщенияОбмена = Файл.ПолноеИмя; + + КонецЕсли; + + КонецЕсли; + + ИначеЕсли Параметры.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.COM Тогда СтруктураДанных = ОбменДаннымиСервер.ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондента(Отказ, Параметры.УзелИнформационнойБазы, Ложь); @@ -131,9 +155,235 @@ Возврат (ИнформацияСтатистики.НайтиСтроки(Новый Структура("ИндексКартинки, ЭтоНСИ", 1, Истина)).Количество() > 0); КонецФункции +#Область РегистрацияДанных + +Процедура ПриНачалеРегистрацииДанных(НастройкиРегистрации, ПараметрыОбработчика, ПродолжитьОжидание = Истина) Экспорт + + КлючФоновогоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Регистрация данных для выгрузки (%1)'"), + НастройкиРегистрации.УзелОбмена); + + Если ЕстьАктивныеФоновыеЗадания(КлючФоновогоЗадания) Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Регистрация данных для начальной выгрузки для ""%1"" уже выполняется.'"), + НастройкиРегистрации.УзелОбмена); + КонецЕсли; + + ПараметрыПроцедуры = Новый Структура; + ПараметрыПроцедуры.Вставить("НастройкиРегистрации", НастройкиРегистрации); + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(Новый УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Регистрация данных для выгрузки (%1).'"), + НастройкиРегистрации.УзелОбмена); + ПараметрыВыполнения.КлючФоновогоЗадания = КлючФоновогоЗадания; + ПараметрыВыполнения.ЗапуститьНеВФоне = Ложь; + ПараметрыВыполнения.ЗапуститьВФоне = Истина; + + ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( + "Обработки.ПомощникИнтерактивногоОбменаДанными.ЗарегистрироватьДанныеДляВыгрузки", + ПараметрыПроцедуры, + ПараметрыВыполнения); + + ПриНачалеДлительнойОперации(ФоновоеЗадание, ПараметрыОбработчика, ПродолжитьОжидание); + +КонецПроцедуры + +Процедура ПриОжиданииРегистрацииДанных(ПараметрыОбработчика, ПродолжитьОжидание = Истина) Экспорт + + ПриОжиданииДлительнойОперации(ПараметрыОбработчика, ПродолжитьОжидание); + +КонецПроцедуры + +Процедура ПриЗавершенииРегистрацииДанных(ПараметрыОбработчика, СтатусЗавершения) Экспорт + + ПриЗавершенииДлительнойОперации(ПараметрыОбработчика, СтатусЗавершения); + +КонецПроцедуры + +#КонецОбласти + +#Область ВыгрузкаДанныхДляСопоставления + +// Для внутреннего использования. +// +Процедура ПриНачалеВыгрузкиДанныхДляСопоставления(НастройкиВыгрузки, ПараметрыОбработчика, ПродолжитьОжидание = Истина) Экспорт + + КлючФоновогоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Выгрузка данных для сопоставления (%1)'"), + НастройкиВыгрузки.УзелОбмена); + + Если ЕстьАктивныеФоновыеЗадания(КлючФоновогоЗадания) Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Выгрузка данных для сопоставления для ""%1"" уже выполняется.'"), + НастройкиВыгрузки.УзелОбмена); + КонецЕсли; + + ПараметрыПроцедуры = Новый Структура; + ПараметрыПроцедуры.Вставить("НастройкиВыгрузки", НастройкиВыгрузки); + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(Новый УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Выгрузка данных для сопоставления (%1).'"), + НастройкиВыгрузки.УзелОбмена); + ПараметрыВыполнения.КлючФоновогоЗадания = КлючФоновогоЗадания; + ПараметрыВыполнения.ЗапуститьНеВФоне = Ложь; + ПараметрыВыполнения.ЗапуститьВФоне = Истина; + + ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( + "Обработки.ПомощникСозданияОбменаДанными.ВыгрузитьДанныеДляСопоставления", + ПараметрыПроцедуры, + ПараметрыВыполнения); + + ПриНачалеДлительнойОперации(ФоновоеЗадание, ПараметрыОбработчика, ПродолжитьОжидание); + +КонецПроцедуры + +// Для внутреннего использования. +// +Процедура ПриЗавершенииВыгрузкиДанныхДляСопоставления(ПараметрыОбработчика, СтатусЗавершения) Экспорт + + ПриЗавершенииДлительнойОперации(ПараметрыОбработчика, СтатусЗавершения); + +КонецПроцедуры + +#КонецОбласти + #КонецОбласти #Область СлужебныеПроцедурыИФункции + +Процедура ЗарегистрироватьДанныеДляВыгрузки(Параметры, АдресРезультата) Экспорт + + НастройкиРегистрации = Неопределено; + Параметры.Свойство("НастройкиРегистрации", НастройкиРегистрации); + + Результат = Новый Структура; + Результат.Вставить("ДанныеЗарегистрированы", Истина); + Результат.Вставить("СообщениеОбОшибке", ""); + + СтруктураДополнение = НастройкиРегистрации.ДополнениеВыгрузки; + + ДополнениеВыгрузки = Обработки.ИнтерактивноеИзменениеВыгрузки.Создать(); + ЗаполнитьЗначенияСвойств(ДополнениеВыгрузки, СтруктураДополнение, , "ДополнительнаяРегистрация, ДополнительнаяРегистрацияСценарияУзла"); + + ДополнениеВыгрузки.КомпоновщикОтбораВсехДокументов.ЗагрузитьНастройки(СтруктураДополнение.КомпоновщикОтбораВсехДокументовНастройки); + + ОбменДаннымиСервер.ЗаполнитьТаблицуЗначений(ДополнениеВыгрузки.ДополнительнаяРегистрация, СтруктураДополнение.ДополнительнаяРегистрация); + ОбменДаннымиСервер.ЗаполнитьТаблицуЗначений(ДополнениеВыгрузки.ДополнительнаяРегистрацияСценарияУзла, СтруктураДополнение.ДополнительнаяРегистрацияСценарияУзла); + + Если Не СтруктураДополнение.КомпоновщикВсехДокументов = Неопределено Тогда + ДополнениеВыгрузки.АдресКомпоновщикаВсехДокументов = ПоместитьВоВременноеХранилище(СтруктураДополнение.КомпоновщикВсехДокументов); + КонецЕсли; + + // Сохраняем настройки дополнения выгрузки. + ОбменДаннымиСервер.ИнтерактивноеИзменениеВыгрузкиСохранитьНастройки(ДополнениеВыгрузки, + ОбменДаннымиСервер.ДополнениеВыгрузкиИмяАвтоСохраненияНастроек()); + + // Дополнительно регистрируем данные. + Попытка + ОбменДаннымиСервер.ИнтерактивноеИзменениеВыгрузкиЗарегистрироватьДополнительныеДанные(ДополнениеВыгрузки); + Исключение + Результат.ДанныеЗарегистрированы = Ложь; + + Информация = ИнформацияОбОшибке(); + + Результат.СообщениеОбОшибке = НСтр("ru = 'Возникла проблема при добавлении данных к выгрузке:'") + + Символы.ПС + КраткоеПредставлениеОшибки(Информация) + + Символы.ПС + НСтр("ru = 'Необходимо изменить условия отбора.'"); + + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(Информация)); + КонецПопытки; + + ПоместитьВоВременноеХранилище(Результат, АдресРезультата); + +КонецПроцедуры + +// Для внутреннего использования. +// +Процедура ПриНачалеДлительнойОперации(ФоновоеЗадание, ПараметрыОбработчика, ПродолжитьОжидание = Истина) + + ИнициализироватьПараметрыОбработчикаДлительнойОперации(ПараметрыОбработчика, ФоновоеЗадание); + + Если ФоновоеЗадание.Статус = "Выполняется" Тогда + ПараметрыОбработчика.АдресРезультата = ФоновоеЗадание.АдресРезультата; + ПараметрыОбработчика.ИдентификаторОперации = ФоновоеЗадание.ИдентификаторЗадания; + ПараметрыОбработчика.ДлительнаяОперация = Истина; + + ПродолжитьОжидание = Истина; + Возврат; + ИначеЕсли ФоновоеЗадание.Статус = "Выполнено" Тогда + ПараметрыОбработчика.АдресРезультата = ФоновоеЗадание.АдресРезультата; + ПараметрыОбработчика.ДлительнаяОперация = Ложь; + + ПродолжитьОжидание = Ложь; + Возврат; + Иначе + ПараметрыОбработчика.СообщениеОбОшибке = ФоновоеЗадание.КраткоеПредставлениеОшибки; + Если ЗначениеЗаполнено(ФоновоеЗадание.ПодробноеПредставлениеОшибки) Тогда + ПараметрыОбработчика.СообщениеОбОшибке = ФоновоеЗадание.ПодробноеПредставлениеОшибки; + КонецЕсли; + + ПараметрыОбработчика.Отказ = Истина; + ПараметрыОбработчика.ДлительнаяОперация = Ложь; + + ПродолжитьОжидание = Ложь; + Возврат; + КонецЕсли; + +КонецПроцедуры + +// Для внутреннего использования. +// +Процедура ПриОжиданииДлительнойОперации(ПараметрыОбработчика, ПродолжитьОжидание = Истина) + + Если ПараметрыОбработчика.Отказ + Или Не ПараметрыОбработчика.ДлительнаяОперация Тогда + ПродолжитьОжидание = Ложь; + Возврат; + КонецЕсли; + + ЗаданиеВыполнено = Ложь; + Попытка + ЗаданиеВыполнено = ДлительныеОперации.ЗаданиеВыполнено(ПараметрыОбработчика.ИдентификаторОперации); + Исключение + ПараметрыОбработчика.Отказ = Истина; + ПараметрыОбработчика.СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), + УровеньЖурналаРегистрации.Ошибка, , , ПараметрыОбработчика.СообщениеОбОшибке); + КонецПопытки; + + Если ПараметрыОбработчика.Отказ Тогда + ПродолжитьОжидание = Ложь; + Возврат; + КонецЕсли; + + ПродолжитьОжидание = Не ЗаданиеВыполнено; + +КонецПроцедуры + +// Для внутреннего использования. +// +Процедура ПриЗавершенииДлительнойОперации(ПараметрыОбработчика, + СтатусЗавершения = Неопределено) + + СтатусЗавершения = Новый Структура; + СтатусЗавершения.Вставить("Отказ", Ложь); + СтатусЗавершения.Вставить("СообщениеОбОшибке", ""); + СтатусЗавершения.Вставить("Результат", Неопределено); + + Если ПараметрыОбработчика.Отказ Тогда + ЗаполнитьЗначенияСвойств(СтатусЗавершения, ПараметрыОбработчика, "Отказ, СообщениеОбОшибке"); + Иначе + СтатусЗавершения.Результат = ПолучитьИзВременногоХранилища(ПараметрыОбработчика.АдресРезультата); + КонецЕсли; + + ПараметрыОбработчика = Неопределено; + +КонецПроцедуры + // Для внутреннего использования. // Функция РезультатАвтоматическогоСопоставленияДанных(Знач Корреспондент, Знач ИмяФайлаСообщенияОбмена, Знач ИмяВременногоКаталогаСообщенийОбмена, ПроверятьРасхождениеВерсий) @@ -194,6 +444,31 @@ КонецФункции +Процедура ИнициализироватьПараметрыОбработчикаДлительнойОперации(ПараметрыОбработчика, ФоновоеЗадание) + + ПараметрыОбработчика = Новый Структура; + ПараметрыОбработчика.Вставить("ФоновоеЗадание", ФоновоеЗадание); + ПараметрыОбработчика.Вставить("Отказ", Ложь); + ПараметрыОбработчика.Вставить("СообщениеОбОшибке", ""); + ПараметрыОбработчика.Вставить("ДлительнаяОперация", Ложь); + ПараметрыОбработчика.Вставить("ИдентификаторОперации", Неопределено); + ПараметрыОбработчика.Вставить("АдресРезультата", Неопределено); + ПараметрыОбработчика.Вставить("ДополнительныеПараметры", Новый Структура); + +КонецПроцедуры + +Функция ЕстьАктивныеФоновыеЗадания(КлючФоновогоЗадания) + + Отбор = Новый Структура; + Отбор.Вставить("Ключ", КлючФоновогоЗадания); + Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); + + АктивныеФоновыеЗадания = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); + + Возврат (АктивныеФоновыеЗадания.Количество() > 0); + +КонецФункции + #КонецОбласти -#КонецЕсли +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ObjectModule.bsl b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ObjectModule.bsl index eae563cf1..d08589ebb 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ObjectModule.bsl @@ -401,4 +401,4 @@ #КонецОбласти -#КонецЕсли +#КонецЕсли \ 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..fdb35113b --- /dev/null +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ВыгрузкаДанныхДляСопоставления/Form.form @@ -0,0 +1,2971 @@ +<?xml version="1.0" encoding="UTF-8"?> +<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form"> + <items xsi:type="form:FormGroup"> + <name>ПанельОсновная</name> + <id>1</id> + <items xsi:type="form:FormGroup"> + <name>СтраницаНачало</name> + <id>163</id> + <items xsi:type="form:FormGroup"> + <name>ГруппаНачало</name> + <id>165</id> + <items xsi:type="form:Decoration"> + <name>Декорация14</name> + <id>179</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>Декорация14РасширеннаяПодсказка</name> + <id>181</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>Декорация14КонтекстноеМеню</name> + <id>180</id> + <autoFill>true</autoFill> + </contextMenu> + <width>6</width> + <autoMaxWidth>true</autoMaxWidth> + <height>2</height> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:PictureDecorationExtInfo"> + <picture xsi:type="core:PictureRef"> + <picture>CommonPicture.Предупреждение32</picture> + </picture> + </extInfo> + </items> + <items xsi:type="form:FormGroup"> + <name>ГруппаРегистрацияДанных</name> + <id>228</id> + <items xsi:type="form:Decoration"> + <name>Декорация15</name> + <id>182</id> + <title> + <key>ru</key> + <value>Выгрузка данных может занять длительное время в случаях: + - медленного канала связи; + - большого объема данных в этой программе. + +Если операция будет отменена, можно выполнить ее позднее из формы списка настроенных синхронизаций данных.</value> + + true + true + + true + + + Декорация15РасширеннаяПодсказка + 184 + Label + true + true + + Left + + + + Декорация15КонтекстноеМеню + 183 + true + + Label + 50 + true + + Left + +
    + + РежимВыгрузкиДанных + 233 + true + true + + true + + + РежимВыгрузкиДанных + + + РежимВыгрузкиДанныхРасширеннаяПодсказка + 235 + Label + true + true + + Left + + + + РежимВыгрузкиДанныхКонтекстноеМеню + 234 + true + + RadioButtonField + Enter + true + Left + true + + 1 + + + ru + Выгрузить все данные (начальная выгрузка данных) + + + НачальнаяВыгрузка + + + + + ru + Выгрузить только зарегистрированные к обмену данные + + + ОбычнаяВыгрузка + + + Vertical + + + true + true + + true + + + <key>ru</key> + <value>Регистрация данных</value> + + + ГруппаРегистрацияДанныхРасширеннаяПодсказка + 229 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Начало</value> + + + ГруппаНачалоРасширеннаяПодсказка + 166 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница начало</value> + + + СтраницаНачалоРасширеннаяПодсказка + 164 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаЗапросПароля + 99 + + ГруппаЗапросаПароля + 101 + + Декорация11 + 141 + true + true + + true + + + Декорация11РасширеннаяПодсказка + 143 + Label + true + true + + Left + + + + Декорация11КонтекстноеМеню + 142 + true + + 1 + true + 2 + true + + + + ГруппаПароль + 139 + + ДекорацияНадписьПароль + 103 + + <key>ru</key> + <value>Введите пароль для доступа к "%НаименованиеПриложения%" через Интернет</value> + + true + true + + true + + + ДекорацияНадписьПарольРасширеннаяПодсказка + 105 + Label + true + true + + Left + + + + ДекорацияНадписьПарольКонтекстноеМеню + 104 + true + + Label + true + true + + Left + + + + WSПароль + 144 + true + true + + true + + + WSПароль + + + WSПарольРасширеннаяПодсказка + 146 + Label + true + true + + Left + + + + WSПарольКонтекстноеМеню + 145 + true + + InputField + true + Enter + true + Left + true + + 20 + true + false + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Пароль</value> + + + ГруппаПарольРасширеннаяПодсказка + 140 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Запроса пароля</value> + + + ГруппаЗапросаПароляРасширеннаяПодсказка + 102 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + NormalSeparation + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница запрос пароля</value> + + + СтраницаЗапросПароляРасширеннаяПодсказка + 100 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаПроверкаПодключения + 147 + + ГруппаПроверкаПодключения + 149 + + Декорация12 + 151 + true + true + + true + + + Декорация12РасширеннаяПодсказка + 153 + Label + true + true + + Left + + + + Декорация12КонтекстноеМеню + 152 + true + + 6 + true + 2 + true + + + CommonPicture.ДлительнаяОперация48 + + + + + Декорация13 + 154 + + <key>ru</key> + <value>Выполняется проверка параметров подключения. +Пожалуйста, подождите...</value> + + true + true + + true + + + Декорация13РасширеннаяПодсказка + 156 + Label + true + true + + Left + + + + Декорация13КонтекстноеМеню + 155 + true + + Label + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Проверка подключения</value> + + + ГруппаПроверкаПодключенияРасширеннаяПодсказка + 150 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Center + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница проверка подключения</value> + + + СтраницаПроверкаПодключенияРасширеннаяПодсказка + 148 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаРегистрацияИзменений + 66 + + ГруппаРегистрацияИзменений + 75 + + Декорация1 + 77 + true + true + + true + + + Декорация1РасширеннаяПодсказка + 79 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 78 + true + + 6 + true + 2 + true + + + CommonPicture.ДлительнаяОперация48 + + + + + Декорация2 + 80 + + <key>ru</key> + <value>Выполняется регистрация данных для выгрузки. +Пожалуйста, подождите...</value> + + true + true + + true + + + Декорация2РасширеннаяПодсказка + 82 + Label + true + true + + Left + + + + Декорация2КонтекстноеМеню + 81 + true + + Label + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Регистрация изменений</value> + + + ГруппаРегистрацияИзмененийРасширеннаяПодсказка + 76 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Center + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница регистрация изменений</value> + + + СтраницаРегистрацияИзмененийРасширеннаяПодсказка + 67 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаВыгрузкаДанныхБезПрогресса + 73 + + ГруппаВыгрузкаДанныхБезПрогресса + 83 + + Декорация3 + 85 + true + true + + true + + + Декорация3РасширеннаяПодсказка + 87 + Label + true + true + + Left + + + + Декорация3КонтекстноеМеню + 86 + true + + 6 + true + 2 + true + + + CommonPicture.СинхронизацияДанныхДлительнаяОперация48 + + + + + ДекорацияНадписьВыгрузкаДанныхБезПрогресса + 88 + + <key>ru</key> + <value>Выполняется выгрузка данных для "%НаименованиеПриложения%". +Пожалуйста, подождите...</value> + + true + true + + true + + + ДекорацияНадписьВыгрузкаДанныхБезПрогрессаРасширеннаяПодсказка + 90 + Label + true + true + + Left + + + + ДекорацияНадписьВыгрузкаДанныхБезПрогрессаКонтекстноеМеню + 89 + true + + Label + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Выгрузка данных без прогресса</value> + + + ГруппаВыгрузкаДанныхБезПрогрессаРасширеннаяПодсказка + 84 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Center + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница выгрузка данных без прогресса</value> + + + СтраницаВыгрузкаДанныхБезПрогрессаРасширеннаяПодсказка + 74 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаВыгрузкаДанныхПрогресс + 124 + + ГруппаВыгрузкаДанныхПрогресс + 126 + + ГруппаПроцентВыполнения + 134 + + ДекорацияНадписьВыгрузкаДанныхПрогресс + 128 + + <key>ru</key> + <value>Выгрузка данных для "%НаименованиеПриложения%"</value> + + true + true + + true + + + ДекорацияНадписьВыгрузкаДанныхПрогрессРасширеннаяПодсказка + 130 + Label + true + true + + Left + + + + ДекорацияНадписьВыгрузкаДанныхПрогрессКонтекстноеМеню + 129 + true + + Label + true + + Left + + + + ПроцентВыполненияВыгрузки + 131 + true + true + + true + + + ПроцентВыполнения + + None + + ПроцентВыполненияВыгрузкиРасширеннаяПодсказка + 133 + Label + true + true + + Left + + + + ПроцентВыполненияВыгрузкиКонтекстноеМеню + 132 + true + + ProgressBarField + Enter + true + Left + true + + 32 + true + 1 + true + true + 100 + true + + + true + true + + true + + + <key>ru</key> + <value>Процент выполнения</value> + + + ГруппаПроцентВыполненияРасширеннаяПодсказка + 135 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Выгрузка данных прогресс</value> + + + ГруппаВыгрузкаДанныхПрогрессРасширеннаяПодсказка + 127 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Center + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница выгрузка данных прогресс</value> + + + СтраницаВыгрузкаДанныхПрогрессРасширеннаяПодсказка + 125 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаОкончание + 5 + + ПанельСостояниеЗавершения + 157 + + СтраницаЗавершениеУспех + 159 + + ГруппаЗавершениеУспех + 91 + + Декорация5 + 93 + true + true + + true + + + Декорация5РасширеннаяПодсказка + 95 + Label + true + true + + Left + + + + Декорация5КонтекстноеМеню + 94 + true + + 6 + true + 2 + true + + + CommonPicture.Успешно32 + + + + + ДекорацияНадписьВыгрузкаЗавершена + 96 + + <key>ru</key> + <value>Выгрузка успешно завершена. + +Теперь можно перейти в программу "%НаименованиеПриложения%" и выполнить сопоставление и загрузку полученных данных.</value> + + true + true + + true + + + ДекорацияНадписьВыгрузкаЗавершенаРасширеннаяПодсказка + 98 + Label + true + true + + Left + + + + ДекорацияНадписьВыгрузкаЗавершенаКонтекстноеМеню + 97 + true + + Label + 50 + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Завершение успех</value> + + + ГруппаЗавершениеУспехРасширеннаяПодсказка + 92 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Top + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница завершение успех</value> + + + СтраницаЗавершениеУспехРасширеннаяПодсказка + 160 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаЗавершениеОшибкаПроверкаПодключения + 161 + + ГруппаЗавершениеОшибкаПроверкаПодключения + 185 + + Декорация8 + 187 + true + true + + true + + + Декорация8РасширеннаяПодсказка + 189 + Label + true + true + + Left + + + + Декорация8КонтекстноеМеню + 188 + true + + 6 + true + 2 + true + + + CommonPicture.Предупреждение32 + + + + + ГруппаСообщениеПроверкаПодключения + 193 + + Декорация16 + 190 + + <key>ru</key> + <value>При проверке параметров подключения возникла ошибка. +Выгрузка данных не выполнена.</value> + + true + true + + true + + + Декорация16РасширеннаяПодсказка + 192 + Label + true + true + + Left + + + + Декорация16КонтекстноеМеню + 191 + true + + Label + true + true + + Left + + + + СообщениеОбОшибке + 195 + true + true + + true + + + СообщениеОбОшибке + + None + + СообщениеОбОшибкеРасширеннаяПодсказка + 197 + Label + true + true + + Left + + + + СообщениеОбОшибкеКонтекстноеМеню + 196 + true + + InputField + Enter + true + Left + true + + 50 + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Сообщение проверка подключения</value> + + + ГруппаСообщениеПроверкаПодключенияРасширеннаяПодсказка + 194 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Завершение ошибка проверка подключения</value> + + + ГруппаЗавершениеОшибкаПроверкаПодключенияРасширеннаяПодсказка + 186 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница завершение ошибка проверка подключения</value> + + + СтраницаЗавершениеОшибкаПроверкаПодключенияРасширеннаяПодсказка + 162 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаЗавершениеОшибкаРегистрацияИзменений + 198 + + ГруппаЗавершениеОшибкаРегистрацияИзменений + 202 + + Декорация17 + 204 + true + true + + true + + + Декорация17РасширеннаяПодсказка + 206 + Label + true + true + + Left + + + + Декорация17КонтекстноеМеню + 205 + true + + 6 + true + 2 + true + + + CommonPicture.Предупреждение32 + + + + + ГруппаСообщениеРегистрацияИзменений + 207 + + Декорация18 + 209 + + <key>ru</key> + <value>При регистрации данных произошла ошибка. +Выгрузка данных не выполнена.</value> + + true + true + + true + + + Декорация18РасширеннаяПодсказка + 211 + Label + true + true + + Left + + + + Декорация18КонтекстноеМеню + 210 + true + + Label + true + true + + Left + + + + СообщениеОбОшибке1 + 212 + true + true + + true + + + СообщениеОбОшибке + + None + + СообщениеОбОшибке1РасширеннаяПодсказка + 214 + Label + true + true + + Left + + + + СообщениеОбОшибке1КонтекстноеМеню + 213 + true + + InputField + Enter + true + Left + true + + 50 + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Сообщение регистрация изменений</value> + + + ГруппаСообщениеРегистрацияИзмененийРасширеннаяПодсказка + 208 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Завершение ошибка регистрация изменений</value> + + + ГруппаЗавершениеОшибкаРегистрацияИзмененийРасширеннаяПодсказка + 203 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница завершение ошибка регистрация изменений</value> + + + СтраницаЗавершениеОшибкаРегистрацияИзмененийРасширеннаяПодсказка + 199 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаЗавершениеОшибкаВыгрузкаДанных + 200 + + ГруппаЗавершениеОшибкаВыгрузкаДанных + 215 + + Декорация19 + 217 + true + true + + true + + + Декорация19РасширеннаяПодсказка + 219 + Label + true + true + + Left + + + + Декорация19КонтекстноеМеню + 218 + true + + 6 + true + 2 + true + + + CommonPicture.Предупреждение32 + + + + + ГруппаСообщениеВыгрузкаДанных + 220 + + Декорация20 + 222 + + <key>ru</key> + <value>Выгрузка данных не выполнена.</value> + + true + true + + true + + + Декорация20РасширеннаяПодсказка + 224 + Label + true + true + + Left + + + + Декорация20КонтекстноеМеню + 223 + true + + Label + true + true + + Left + + + + СообщениеОбОшибке2 + 225 + true + true + + true + + + СообщениеОбОшибке + + None + + СообщениеОбОшибке2РасширеннаяПодсказка + 227 + Label + true + true + + Left + + + + СообщениеОбОшибке2КонтекстноеМеню + 226 + true + + InputField + Enter + true + Left + true + + 50 + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Сообщение выгрузка данных</value> + + + ГруппаСообщениеВыгрузкаДанныхРасширеннаяПодсказка + 221 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Завершение ошибка выгрузка данных</value> + + + ГруппаЗавершениеОшибкаВыгрузкаДанныхРасширеннаяПодсказка + 216 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница завершение ошибка выгрузка данных</value> + + + СтраницаЗавершениеОшибкаВыгрузкаДанныхРасширеннаяПодсказка + 201 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Панель состояние завершения</value> + + + ПанельСостояниеЗавершенияРасширеннаяПодсказка + 158 + Label + true + true + + Left + + + Pages + + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница окончание</value> + + + СтраницаОкончаниеРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Панель основная</value> + + + ПанельОсновнаяРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + Pages + + Auto + + + + ПанельНавигации + 3 + + СтраницаНавигацияНачало + 113 + + КоманднаяПанельНавигацияНачалоСправа + 115 + + КомандаДалее + 117 + true + true + + true + + + КомандаДалееРасширеннаяПодсказка + 118 + Label + true + true + + Left + + + Form.Command.КомандаДалее + Auto + true + true + true + UserCmds + Auto + + + КомандаОтмена1 + 119 + true + true + + true + + + КомандаОтмена1РасширеннаяПодсказка + 120 + Label + true + true + + Left + + + Form.Command.КомандаОтмена + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель навигация начало справа</value> + + + КоманднаяПанельНавигацияНачалоСправаРасширеннаяПодсказка + 116 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Страница навигация начало</value> + + + СтраницаНавигацияНачалоРасширеннаяПодсказка + 114 + Label + true + true + + Left + + + Page + + AlwaysHorizontal + auto + false + + + + СтраницаНавигацияПродолжение + 167 + + КоманднаяПанельНавигацияПродолжениеСлева + 169 + + КомандаНазад + 177 + true + true + + true + + + КомандаНазадРасширеннаяПодсказка + 178 + Label + true + true + + Left + + + Form.Command.КомандаНазад + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель навигация продолжение слева</value> + + + КоманднаяПанельНавигацияПродолжениеСлеваРасширеннаяПодсказка + 170 + Label + true + true + + Left + + + CommandBar + + Left + + + + КоманднаяПанельНавигацияПродолжениеСправа + 171 + + КомандаДалее1 + 173 + true + true + + true + + + КомандаДалее1РасширеннаяПодсказка + 174 + Label + true + true + + Left + + + Form.Command.КомандаДалее + Normal + Auto + true + true + UserCmds + Auto + + + КомандаОтмена2 + 175 + true + true + + true + + + КомандаОтмена2РасширеннаяПодсказка + 176 + Label + true + true + + Left + + + Form.Command.КомандаОтмена + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель навигация продолжение справа</value> + + + КоманднаяПанельНавигацияПродолжениеСправаРасширеннаяПодсказка + 172 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Страница навигация продолжение</value> + + + СтраницаНавигацияПродолжениеРасширеннаяПодсказка + 168 + Label + true + true + + Left + + + Page + + AlwaysHorizontal + auto + false + + + + СтраницаНавигацияОжидание + 9 + + КоманднаяПанельНавигацияОжиданиеСправа + 13 + + КомандаОтмена + 15 + true + true + + true + + + КомандаОтменаРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + Form.Command.КомандаОтмена + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель навигация ожидание справа</value> + + + КоманднаяПанельНавигацияОжиданиеСправаРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Страница навигация ожидание</value> + + + СтраницаНавигацияОжиданиеРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + Page + + AlwaysHorizontal + auto + false + + + + СтраницаНавигацияОкончание + 11 + + КоманднаяПанельНавигацияОкончаниеСправа + 17 + + КомандаГотово + 19 + true + true + + true + + + КомандаГотовоРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + Form.Command.КомандаГотово + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель навигация окончание справа</value> + + + КоманднаяПанельНавигацияОкончаниеСправаРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Страница навигация окончание</value> + + + СтраницаНавигацияОкончаниеРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + Page + + AlwaysHorizontal + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Панель навигации</value> + + Bottom + + ПанельНавигацииРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + Pages + + Auto + + + None + false + + ФормаКоманднаяПанель + -1 + Left + true + + + OnOpen + ПриОткрытии + + + BeforeClose + ПередЗакрытием + + + OnCreateAtServer + ПриСозданииНаСервере + + + OnClose + ПриЗакрытии + + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + ТаблицаПереходов + + <key>ru</key> + <value>Таблица переходов</value> + + 1 + + ValueTable + + + true + + + true + + + ПорядковыйНомерПерехода + + <key>ru</key> + <value>Порядковый номер перехода</value> + + 1 + + Number + + 3 + true + + + + true + + + true + + + + ИмяОсновнойСтраницы + + <key>ru</key> + <value>Имя основной страницы</value> + + 2 + + String + + + + true + + + true + + + + ИмяСтраницыДекорации + + <key>ru</key> + <value>Имя страницы декорации</value> + + 3 + + String + + + + true + + + true + + + + ИмяСтраницыНавигации + + <key>ru</key> + <value>Имя страницы навигации</value> + + 4 + + String + + + + true + + + true + + + + ИмяОбработчикаПриОткрытии + + <key>ru</key> + <value>Имя обработчика при открытии</value> + + 5 + + String + + + + true + + + true + + + + ИмяОбработчикаПриПереходеДалее + + <key>ru</key> + <value>Имя обработчика при переходе далее</value> + + 6 + + String + + + + true + + + true + + + + ИмяОбработчикаПриПереходеНазад + + <key>ru</key> + <value>Имя обработчика при переходе назад</value> + + 7 + + String + + + + true + + + true + + + + ДлительнаяОперация + + <key>ru</key> + <value>Длительная операция</value> + + 8 + + Boolean + + + true + + + true + + + + ИмяОбработчикаДлительнойОперации + + <key>ru</key> + <value>Имя обработчика длительной операции</value> + + 9 + + String + + + + true + + + true + + + + + ПорядковыйНомерПерехода + + <key>ru</key> + <value>Порядковый номер перехода</value> + + 2 + + Number + + 3 + true + + + + true + + + true + + + + УзелОбмена + + <key>ru</key> + <value>Узел обмена</value> + + 3 + + ExchangePlanRef + + + true + + + true + + + + ЗакрытьФормуБезусловно + + <key>ru</key> + <value>Закрыть форму безусловно</value> + + 4 + + Boolean + + + true + + + true + + + + WSПароль + + <key>ru</key> + <value>Пароль</value> + + 5 + + String + + 50 + + + + true + + + true + + + + ПроцентВыполнения + + <key>ru</key> + <value>Процент выполнения</value> + + 7 + + Number + + 3 + true + + + + true + + + true + + + + ЗапроситьПароль + + <key>ru</key> + <value>Запросить пароль</value> + + 8 + + Boolean + + + true + + + true + + + + ИспользоватьПрогресс + + <key>ru</key> + <value>Использовать прогресс</value> + + 9 + + Boolean + + + true + + + true + + + + ВидТранспорта + + <key>ru</key> + <value>Вид транспорта</value> + + 10 + + EnumRef.ВидыТранспортаСообщенийОбмена + + + true + + + true + + + + ПараметрыОбработчикаОжиданияПроверкиПодключения + + <key>ru</key> + <value>Параметры обработчика ожидания проверки подключения</value> + + 11 + + + true + + + true + + + + ПараметрыОбработчикаПроверкиПодключения + + <key>ru</key> + <value>Параметры обработчика проверки подключения</value> + + 12 + + + true + + + true + + + + ПроверкаПодключенияВыполнена + + <key>ru</key> + <value>Проверка подключения выполнена</value> + + 13 + + Boolean + + + true + + + true + + + + РегистрацияИзмененийВыполнена + + <key>ru</key> + <value>Регистрация изменений выполнена</value> + + 14 + + Boolean + + + true + + + true + + + + ВыгрузкаДанныхВыполнена + + <key>ru</key> + <value>Выгрузка данных выполнена</value> + + 15 + + Boolean + + + true + + + true + + + + СообщениеОбОшибке + + <key>ru</key> + <value>Сообщение об ошибке</value> + + 16 + + String + + + + true + + + true + + + + ПараметрыОбработчикаОжиданияРегистрацииДанныхДляНачальнойВыгрузки + + <key>ru</key> + <value>Параметры обработчика ожидания регистрации данных для начальной выгрузки</value> + + 17 + + + true + + + true + + + + ПараметрыОбработчикаРегистрацииДанныхДляНачальнойВыгрузки + + <key>ru</key> + <value>Параметры обработчика регистрации данных для начальной выгрузки</value> + + 19 + + + true + + + true + + + + ПараметрыОбработчикаОжиданияВыгрузкиДанныхДляСопоставления + + <key>ru</key> + <value>Параметры обработчика ожидания выгрузки данных для сопоставления</value> + + 20 + + + true + + + true + + + + ПараметрыОбработчикаВыгрузкиДанныхДляСопоставления + + <key>ru</key> + <value>Параметры обработчика выгрузки данных для сопоставления</value> + + 21 + + + true + + + true + + + + РежимВыгрузкиДанных + + <key>ru</key> + <value>Состав выгружаемых данных</value> + + 23 + + String + + + + true + + + true + + + + НачальнаяВыгрузка + + <key>ru</key> + <value>Начальная выгрузка</value> + + 24 + + Boolean + + + true + + + true + + + + ОбластьДанныхКорреспондента + + <key>ru</key> + <value>Область данных корреспондента</value> + + 25 + + Number + + 10 + + + + true + + + true + + + + НаименованиеПриложения + + <key>ru</key> + <value>Наименование приложения</value> + + 26 + + String + + + + true + + + true + + + + ЭтоОбменСПриложениемВСервисе + + <key>ru</key> + <value>Это обмен с приложением в сервисе</value> + + 27 + + Boolean + + + true + + + true + + + + КомандаГотово + + <key>ru</key> + <value>Готово</value> + + 1 + + ru + Команда готово + + + true + + + + КомандаГотово + + + Auto + Auto + + + КомандаОтмена + + <key>ru</key> + <value>Отмена</value> + + 2 + + ru + Команда отмена + + + true + + + + КомандаОтмена + + + Auto + Auto + + + КомандаДалее + + <key>ru</key> + <value>Далее ></value> + + 4 + + ru + Команда далее + + + true + + + + КомандаДалее + + + Auto + Auto + + + КомандаНазад + + <key>ru</key> + <value>< Назад</value> + + 3 + + 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..8d3f9285d --- /dev/null +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ВыгрузкаДанныхДляСопоставления/Module.bsl @@ -0,0 +1,925 @@ +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + ПроверитьВозможностьИспользованияФормы(Отказ); + + Если Отказ Тогда + Возврат; + КонецЕсли; + + ИнициализироватьРеквизитыФормы(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + УстановитьПорядковыйНомерПерехода(1); + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) + + Если НачальнаяВыгрузка Тогда + ТекстПредупреждения = НСтр("ru = 'Отменить начальную выгрузку данных?'"); + Иначе + ТекстПредупреждения = НСтр("ru = 'Отменить выгрузку данных?'"); + КонецЕсли; + + ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияПроизвольнойФормы( + ЭтотОбъект, Отказ, ЗавершениеРаботы, ТекстПредупреждения, "ЗакрытьФормуБезусловно"); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗакрытии(ЗавершениеРаботы) + + Если Не ЗавершениеРаботы Тогда + Оповестить("ВыполненОбменДанными"); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура КомандаДалее(Команда) + + ИзменитьПорядковыйНомерПерехода(+1); + +КонецПроцедуры + +&НаКлиенте +Процедура КомандаНазад(Команда) + + ИзменитьПорядковыйНомерПерехода(-1); + +КонецПроцедуры + +&НаКлиенте +Процедура КомандаГотово(Команда) + + ПараметрЗакрытия = Неопределено; + Если ВыгрузкаДанныхВыполнена Тогда + ПараметрЗакрытия = УзелОбмена; + КонецЕсли; + + ЗакрытьФормуБезусловно = Истина; + Закрыть(ПараметрЗакрытия); + +КонецПроцедуры + +&НаКлиенте +Процедура КомандаОтмена(Команда) + + Закрыть(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область ПроверкаПараметровПодключения + +&НаКлиенте +Процедура ПриНачалеПроверкиПодключения() + + ПродолжитьОжидание = Истина; + + ПриНачалеПроверкиПодключенияНаСервере(ПродолжитьОжидание); + + Если ПродолжитьОжидание Тогда + ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания( + ПараметрыОбработчикаОжиданияПроверкиПодключения); + + ПодключитьОбработчикОжидания("ПриОжиданииПроверкиПодключения", + ПараметрыОбработчикаОжиданияПроверкиПодключения.ТекущийИнтервал, Истина); + Иначе + ПриЗавершенииПроверкиПодключения(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОжиданииПроверкиПодключения() + + ПродолжитьОжидание = Ложь; + ПриОжиданииПроверкиПодключенияНаСервере(ПараметрыОбработчикаПроверкиПодключения, ПродолжитьОжидание); + + Если ПродолжитьОжидание Тогда + ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияПроверкиПодключения); + + ПодключитьОбработчикОжидания("ПриОжиданииПроверкиПодключения", + ПараметрыОбработчикаОжиданияПроверкиПодключения.ТекущийИнтервал, Истина); + Иначе + ПараметрыОбработчикаОжиданияПроверкиПодключения = Неопределено; + ПриЗавершенииПроверкиПодключения(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗавершенииПроверкиПодключения() + + ПриЗавершенииПроверкиПодключенияНаСервере(); + + ИзменитьПорядковыйНомерПерехода(+1); + +КонецПроцедуры + +&НаСервере +Процедура ПриНачалеПроверкиПодключенияНаСервере(ПродолжитьОжидание) + + Если ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS + И ЗапроситьПароль Тогда + НастройкиПодключения = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспортаWS(УзелОбмена, WSПароль); + Иначе + НастройкиПодключения = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспорта(УзелОбмена, ВидТранспорта); + КонецЕсли; + НастройкиПодключения.Вставить("ВидТранспортаСообщенийОбмена", ВидТранспорта); + + НастройкиПодключения.Вставить("ИмяПланаОбмена", ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелОбмена)); + + Обработки.ПомощникСозданияОбменаДанными.ПриНачалеПроверкиПодключения( + НастройкиПодключения, ПараметрыОбработчикаПроверкиПодключения, ПродолжитьОжидание); + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ПриОжиданииПроверкиПодключенияНаСервере(ПараметрыОбработчика, ПродолжитьОжидание) + + ПродолжитьОжидание = Ложь; + Обработки.ПомощникСозданияОбменаДанными.ПриОжиданииПроверкиПодключения(ПараметрыОбработчика, ПродолжитьОжидание); + +КонецПроцедуры + +&НаСервере +Процедура ПриЗавершенииПроверкиПодключенияНаСервере() + + СтатусЗавершения = Неопределено; + Обработки.ПомощникСозданияОбменаДанными.ПриЗавершенииПроверкиПодключения( + ПараметрыОбработчикаПроверкиПодключения, СтатусЗавершения); + + Если СтатусЗавершения.Отказ Тогда + ПроверкаПодключенияВыполнена = Ложь; + СообщениеОбОшибке = СтатусЗавершения.СообщениеОбОшибке; + Иначе + ПроверкаПодключенияВыполнена = СтатусЗавершения.Результат.ПодключениеУстановлено + И СтатусЗавершения.Результат.ПодключениеРазрешено; + + Если Не ПроверкаПодключенияВыполнена + И Не ПустаяСтрока(СтатусЗавершения.Результат.СообщениеОбОшибке) Тогда + СообщениеОбОшибке = СтатусЗавершения.Результат.СообщениеОбОшибке; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область РегистрацияИзменений + +&НаКлиенте +Процедура ПриНачалеРегистрацииИзменений() + + ПродолжитьОжидание = Истина; + ПриНачалеРегистрацииИзмененийНаСервере(ПродолжитьОжидание); + + Если ПродолжитьОжидание Тогда + ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания( + ПараметрыОбработчикаОжиданияРегистрацииДанныхДляНачальнойВыгрузки); + + ПодключитьОбработчикОжидания("ПриОжиданииРегистрацииИзменений", + ПараметрыОбработчикаОжиданияРегистрацииДанныхДляНачальнойВыгрузки.ТекущийИнтервал, Истина); + Иначе + ПриЗавершенииРегистрацииИзменений(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОжиданииРегистрацииИзменений() + + ПродолжитьОжидание = Ложь; + ПриОжиданииРегистрацииИзмененийНаСервере(ПараметрыОбработчикаРегистрацииДанныхДляНачальнойВыгрузки, ПродолжитьОжидание); + + Если ПродолжитьОжидание Тогда + ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияРегистрацииДанныхДляНачальнойВыгрузки); + + ПодключитьОбработчикОжидания("ПриОжиданииРегистрацииИзменений", + ПараметрыОбработчикаОжиданияРегистрацииДанныхДляНачальнойВыгрузки.ТекущийИнтервал, Истина); + Иначе + ПараметрыОбработчикаОжиданияРегистрацииДанныхДляНачальнойВыгрузки = Неопределено; + ПриЗавершенииРегистрацииИзменений(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗавершенииРегистрацииИзменений() + + ПриЗавершенииРегистрацииИзмененийНаСервере(); + + ИзменитьПорядковыйНомерПерехода(+1); + +КонецПроцедуры + +&НаСервере +Процедура ПриНачалеРегистрацииИзмененийНаСервере(ПродолжитьОжидание) + + НастройкиРегистрации = Новый Структура; + НастройкиРегистрации.Вставить("УзелОбмена", УзелОбмена); + + Обработки.ПомощникСозданияОбменаДанными.ПриНачалеРегистрацииДанныхДляНачальнойВыгрузки( + НастройкиРегистрации, ПараметрыОбработчикаРегистрацииДанныхДляНачальнойВыгрузки, ПродолжитьОжидание); + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ПриОжиданииРегистрацииИзмененийНаСервере(ПараметрыОбработчика, ПродолжитьОжидание) + + ПродолжитьОжидание = Ложь; + Обработки.ПомощникСозданияОбменаДанными.ПриОжиданииРегистрацииДанныхДляНачальнойВыгрузки( + ПараметрыОбработчика, ПродолжитьОжидание); + +КонецПроцедуры + +&НаСервере +Процедура ПриЗавершенииРегистрацииИзмененийНаСервере() + + СтатусЗавершения = Неопределено; + Обработки.ПомощникСозданияОбменаДанными.ПриЗавершенииРегистрацииДанныхДляНачальнойВыгрузки( + ПараметрыОбработчикаРегистрацииДанныхДляНачальнойВыгрузки, СтатусЗавершения); + + Если СтатусЗавершения.Отказ Тогда + РегистрацияИзмененийВыполнена = Ложь; + СообщениеОбОшибке = СтатусЗавершения.СообщениеОбОшибке; + Иначе + РегистрацияИзмененийВыполнена = СтатусЗавершения.Результат.ДанныеЗарегистрированы; + + Если Не РегистрацияИзмененийВыполнена + И Не ПустаяСтрока(СтатусЗавершения.Результат.СообщениеОбОшибке) Тогда + СообщениеОбОшибке = СтатусЗавершения.Результат.СообщениеОбОшибке; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ВыгрузкаДанных + +&НаКлиенте +Процедура ПриНачалеВыгрузкиДанныхДляСопоставления() + + ПроцентВыполнения = 0; + + ПродолжитьОжидание = Истина; + ПриНачалеВыгрузкиДанныхДляСопоставленияНаСервере(ПродолжитьОжидание); + + Если ПродолжитьОжидание Тогда + + Если ЭтоОбменСПриложениемВСервисе Тогда + ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания( + ПараметрыОбработчикаОжиданияВыгрузкиДанныхДляСопоставления); + + ПодключитьОбработчикОжидания("ПриОжиданииВыгрузкиДанныхДляСопоставления", + ПараметрыОбработчикаОжиданияВыгрузкиДанныхДляСопоставления.ТекущийИнтервал, Истина); + Иначе + ОповещениеОЗавершении = Новый ОписаниеОповещения("ВыгрузкаДанныхДляСопоставленияЗавершение", ЭтотОбъект); + + ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); + ПараметрыОжидания.ВыводитьОкноОжидания = Ложь; + ПараметрыОжидания.ВыводитьПрогрессВыполнения = ИспользоватьПрогресс; + ПараметрыОжидания.ОповещениеОПрогрессеВыполнения = Новый ОписаниеОповещения("ВыгрузкаДанныхДляСопоставленияПрогресс", ЭтотОбъект); + + ДлительныеОперацииКлиент.ОжидатьЗавершение(ПараметрыОбработчикаВыгрузкиДанныхДляСопоставления.ФоновоеЗадание, + ОповещениеОЗавершении, ПараметрыОжидания); + КонецЕсли; + + Иначе + + ПриЗавершенииВыгрузкиДанныхДляСопоставления(); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОжиданииВыгрузкиДанныхДляСопоставления() + + ПродолжитьОжидание = Ложь; + ПриОжиданииВыгрузкиДанныхДляСопоставленияНаСервере(ПараметрыОбработчикаВыгрузкиДанныхДляСопоставления, ПродолжитьОжидание); + + Если ПродолжитьОжидание Тогда + ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияВыгрузкиДанныхДляСопоставления); + + ПодключитьОбработчикОжидания("ПриОжиданииВыгрузкиДанныхДляСопоставления", + ПараметрыОбработчикаОжиданияВыгрузкиДанныхДляСопоставления.ТекущийИнтервал, Истина); + Иначе + ПараметрыОбработчикаОжиданияВыгрузкиДанныхДляСопоставления = Неопределено; + ПриЗавершенииВыгрузкиДанныхДляСопоставления(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗавершенииВыгрузкиДанныхДляСопоставления() + + ПроцентВыполнения = 100; + + ПриЗавершенииВыгрузкиДанныхДляСопоставленияНаСервере(); + ИзменитьПорядковыйНомерПерехода(+1); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыгрузкаДанныхДляСопоставленияЗавершение(Результат, ДополнительныеПараметры) Экспорт + + ПриЗавершенииВыгрузкиДанныхДляСопоставления(); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыгрузкаДанныхДляСопоставленияПрогресс(Прогресс, ДополнительныеПараметры) Экспорт + + Если Прогресс = Неопределено Тогда + Возврат; + КонецЕсли; + + СтруктураПрогресса = Прогресс.Прогресс; + Если СтруктураПрогресса <> Неопределено Тогда + ПроцентВыполнения = СтруктураПрогресса.Процент; + ДопИнформацияВыполнение = СтруктураПрогресса.Текст; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПриНачалеВыгрузкиДанныхДляСопоставленияНаСервере(ПродолжитьОжидание) + + НастройкиВыгрузки = Новый Структура; + + Если ЭтоОбменСПриложениемВСервисе Тогда + НастройкиВыгрузки.Вставить("Корреспондент", УзелОбмена); + НастройкиВыгрузки.Вставить("ОбластьДанныхКорреспондента", ОбластьДанныхКорреспондента); + + МодульПомощникНастройки = ОбщегоНазначения.ОбщийМодуль( + "Обработки.ПомощникИнтерактивногоОбменаДаннымиВМоделиСервиса"); + Иначе + НастройкиВыгрузки.Вставить("УзелОбмена", УзелОбмена); + НастройкиВыгрузки.Вставить("ВидТранспорта", ВидТранспорта); + + Если ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS + И ЗапроситьПароль Тогда + НастройкиВыгрузки.Вставить("WSПароль", WSПароль); + КонецЕсли; + + МодульПомощникНастройки = ОбщегоНазначения.ОбщийМодуль("Обработки.ПомощникИнтерактивногоОбменаДанными"); + КонецЕсли; + + МодульПомощникНастройки.ПриНачалеВыгрузкиДанныхДляСопоставления( + НастройкиВыгрузки, ПараметрыОбработчикаВыгрузкиДанныхДляСопоставления, ПродолжитьОжидание); + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ПриОжиданииВыгрузкиДанныхДляСопоставленияНаСервере(ПараметрыОбработчика, ПродолжитьОжидание) + + МодульПомощникНастройки = ОбщегоНазначения.ОбщийМодуль( + "Обработки.ПомощникИнтерактивногоОбменаДаннымиВМоделиСервиса"); + МодульПомощникНастройки.ПриОжиданииВыгрузкиДанныхДляСопоставления(ПараметрыОбработчика, ПродолжитьОжидание); + +КонецПроцедуры + +&НаСервере +Процедура ПриЗавершенииВыгрузкиДанныхДляСопоставленияНаСервере() + + СтатусЗавершения = Неопределено; + + Если ЭтоОбменСПриложениемВСервисе Тогда + МодульПомощникНастройки = ОбщегоНазначения.ОбщийМодуль( + "Обработки.ПомощникИнтерактивногоОбменаДаннымиВМоделиСервиса"); + Иначе + МодульПомощникНастройки = ОбщегоНазначения.ОбщийМодуль("Обработки.ПомощникИнтерактивногоОбменаДанными"); + КонецЕсли; + + МодульПомощникНастройки.ПриЗавершенииВыгрузкиДанныхДляСопоставления( + ПараметрыОбработчикаВыгрузкиДанныхДляСопоставления, СтатусЗавершения); + + Если СтатусЗавершения.Отказ Тогда + ВыгрузкаДанныхВыполнена = Ложь; + СообщениеОбОшибке = СтатусЗавершения.СообщениеОбОшибке; + Иначе + ВыгрузкаДанныхВыполнена = СтатусЗавершения.Результат.ДанныеВыгружены; + + Если Не ВыгрузкаДанныхВыполнена + И Не ПустаяСтрока(СтатусЗавершения.Результат.СообщениеОбОшибке) Тогда + СообщениеОбОшибке = СтатусЗавершения.Результат.СообщениеОбОшибке; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ИнициализацияФормыПриСоздании + +&НаСервере +Процедура ПроверитьВозможностьИспользованияФормы(Отказ = Ложь) + + // Обязательная должны быть переданы параметры выполнения выгрузки данных. + Если Не Параметры.Свойство("УзелОбмена") Тогда + ТекстСообщения = НСтр("ru = 'Форма не предназначена для непосредственного использования.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , , , Отказ); + Возврат; + КонецЕсли; + + Если ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(Параметры.УзелОбмена) Тогда + ТекстСообщения = НСтр("ru = 'Начальная выгрузка не поддерживается для узлов распределенных информационных баз.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , , , Отказ); + Возврат; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ИнициализироватьРеквизитыФормы() + + УзелОбмена = Параметры.УзелОбмена; + + Если Параметры.Свойство("НачальнаяВыгрузка") Тогда + РежимВыгрузкиДанных = "НачальнаяВыгрузка"; + НачальнаяВыгрузка = Истина; + Иначе + РежимВыгрузкиДанных = "ОбычнаяВыгрузка"; + КонецЕсли; + + НаименованиеПриложения = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелОбмена, "Наименование"); + + Параметры.Свойство("ЭтоОбменСПриложениемВСервисе", ЭтоОбменСПриложениемВСервисе); + Параметры.Свойство("ОбластьДанныхКорреспондента", ОбластьДанныхКорреспондента); + + ИспользоватьПрогресс = Не ЭтоОбменСПриложениемВСервисе; + + ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелОбмена); + + Если ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда + + ИспользоватьПрогресс = Ложь; + + НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспортаWS(УзелОбмена); + + ЗапроситьПароль = Не (НастройкиТранспорта.WSЗапомнитьПароль + Или ОбменДаннымиСервер.ПарольСинхронизацииДанныхЗадан(УзелОбмена)); + + КонецЕсли; + + ЗаполнитьТаблицуПереходов(); + + УстановитьНаименованиеПриложенияВНадписяхФормы(); + +КонецПроцедуры + +&НаСервере +Процедура УстановитьНаименованиеПриложенияВНадписяхФормы() + + Элементы.ДекорацияНадписьПароль.Заголовок = СтрЗаменить(Элементы.ДекорацияНадписьПароль.Заголовок, + "%НаименованиеПриложения%", НаименованиеПриложения); + + Элементы.ДекорацияНадписьВыгрузкаДанныхБезПрогресса.Заголовок = СтрЗаменить(Элементы.ДекорацияНадписьВыгрузкаДанныхБезПрогресса.Заголовок, + "%НаименованиеПриложения%", НаименованиеПриложения); + + Элементы.ДекорацияНадписьВыгрузкаДанныхПрогресс.Заголовок = СтрЗаменить(Элементы.ДекорацияНадписьВыгрузкаДанныхПрогресс.Заголовок, + "%НаименованиеПриложения%", НаименованиеПриложения); + + Элементы.ДекорацияНадписьВыгрузкаЗавершена.Заголовок = СтрЗаменить(Элементы.ДекорацияНадписьВыгрузкаЗавершена.Заголовок, + "%НаименованиеПриложения%", НаименованиеПриложения); + +КонецПроцедуры + +#КонецОбласти + +#Область СценарииРаботыПомощника + +&НаСервере +Функция ДобавитьСтрокуТаблицыПереходов(ИмяОсновнойСтраницы, ИмяСтраницыНавигации, ИмяСтраницыДекорации = "") + + СтрокаПереходов = ТаблицаПереходов.Добавить(); + СтрокаПереходов.ПорядковыйНомерПерехода = ТаблицаПереходов.Количество(); + СтрокаПереходов.ИмяОсновнойСтраницы = ИмяОсновнойСтраницы; + СтрокаПереходов.ИмяСтраницыНавигации = ИмяСтраницыНавигации; + СтрокаПереходов.ИмяСтраницыДекорации = ИмяСтраницыДекорации; + + Возврат СтрокаПереходов; + +КонецФункции + +&НаСервере +Процедура ЗаполнитьТаблицуПереходов() + + ТаблицаПереходов.Очистить(); + + НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаНачало", "СтраницаНавигацияНачало"); + НовыйПереход.ИмяОбработчикаПриОткрытии = "СтраницаНачало_ПриОткрытии"; + + Если ЗапроситьПароль Тогда + НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаЗапросПароля", "СтраницаНавигацияПродолжение"); + НовыйПереход.ИмяОбработчикаПриПереходеДалее = "СтраницаЗапросПароля_ПриПереходеДалее"; + КонецЕсли; + + НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаПроверкаПодключения", "СтраницаНавигацияОжидание"); + НовыйПереход.ДлительнаяОперация = Истина; + НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаПроверкаПодключения_ДлительнаяОперация"; + + НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаРегистрацияИзменений", "СтраницаНавигацияОжидание"); + НовыйПереход.ИмяОбработчикаПриОткрытии = "СтраницаРегистрацияИзменений_ПриОткрытии"; + НовыйПереход.ДлительнаяОперация = Истина; + НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаРегистрацияИзменений_ДлительнаяОперация"; + + Если ИспользоватьПрогресс Тогда + НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаВыгрузкаДанныхПрогресс", "СтраницаНавигацияОжидание"); + Иначе + НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаВыгрузкаДанныхБезПрогресса", "СтраницаНавигацияОжидание"); + КонецЕсли; + НовыйПереход.ИмяОбработчикаПриОткрытии = "СтраницаВыгрузкаДанных_ПриОткрытии"; + НовыйПереход.ДлительнаяОперация = Истина; + НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаВыгрузкаДанных_ДлительнаяОперация"; + + НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаОкончание", "СтраницаНавигацияОкончание"); + НовыйПереход.ИмяОбработчикаПриОткрытии = "СтраницаОкончание_ПриОткрытии"; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийПереходов + +&НаКлиенте +Функция Подключаемый_СтраницаНачало_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) + + Элементы.РежимВыгрузкиДанных.Доступность = Не НачальнаяВыгрузка; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаЗапросПароля_ПриПереходеДалее(Отказ) + + Если Не ЗапроситьПароль Тогда + Возврат 0; + КонецЕсли; + + Если ПустаяСтрока(WSПароль) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Укажите пароль.'"), , "WSПароль", , Отказ); + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаПроверкаПодключения_ДлительнаяОперация(Отказ, ПерейтиДалее) + + ПерейтиДалее = Ложь; + ПриНачалеПроверкиПодключения(); + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаРегистрацияИзменений_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) + + Если Не ПроверкаПодключенияВыполнена Тогда + ПропуститьСтраницу = Истина; + Возврат 0; + Иначе + Если РежимВыгрузкиДанных = "ОбычнаяВыгрузка" Тогда + ПропуститьСтраницу = Истина; + РегистрацияИзмененийВыполнена = Истина; + КонецЕсли; + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаРегистрацияИзменений_ДлительнаяОперация(Отказ, ПерейтиДалее) + + ПерейтиДалее = Ложь; + ПриНачалеРегистрацииИзменений(); + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаВыгрузкаДанных_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) + + ПропуститьСтраницу = Не ПроверкаПодключенияВыполнена + Или Не РегистрацияИзмененийВыполнена; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаВыгрузкаДанных_ДлительнаяОперация(Отказ, ПерейтиДалее) + + ПерейтиДалее = Ложь; + ПриНачалеВыгрузкиДанныхДляСопоставления(); + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаОкончание_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) + + Если Не ПроверкаПодключенияВыполнена Тогда + Элементы.ПанельСостояниеЗавершения.ТекущаяСтраница = Элементы.СтраницаЗавершениеОшибкаПроверкаПодключения; + ИначеЕсли Не РегистрацияИзмененийВыполнена Тогда + Элементы.ПанельСостояниеЗавершения.ТекущаяСтраница = Элементы.СтраницаЗавершениеОшибкаРегистрацияИзменений; + ИначеЕсли Не ВыгрузкаДанныхВыполнена Тогда + Элементы.ПанельСостояниеЗавершения.ТекущаяСтраница = Элементы.СтраницаЗавершениеОшибкаВыгрузкаДанных; + Иначе + Элементы.ПанельСостояниеЗавершения.ТекущаяСтраница = Элементы.СтраницаЗавершениеУспех; + КонецЕсли; + +КонецФункции + +#КонецОбласти + +#Область ДополнительныеОбработчикиПереходов + +&НаКлиенте +Процедура ИзменитьПорядковыйНомерПерехода(Итератор) + + ОчиститьСообщения(); + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + Итератор); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьПорядковыйНомерПерехода(Знач Значение) + + ЭтоПереходДалее = (Значение > ПорядковыйНомерПерехода); + + ПорядковыйНомерПерехода = Значение; + + Если ПорядковыйНомерПерехода < 1 Тогда + + ПорядковыйНомерПерехода = 1; + + КонецЕсли; + + ПорядковыйНомерПереходаПриИзменении(ЭтоПереходДалее); + +КонецПроцедуры + +&НаКлиенте +Процедура ПорядковыйНомерПереходаПриИзменении(Знач ЭтоПереходДалее) + + // Выполняем обработчики событий перехода. + ВыполнитьОбработчикиСобытийПерехода(ЭтоПереходДалее); + + // Устанавливаем отображение страниц. + СтрокиПереходаТекущие = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода)); + + Если СтрокиПереходаТекущие.Количество() = 0 Тогда + ВызватьИсключение НСтр("ru = 'Не определена страница для отображения.'"); + КонецЕсли; + + СтрокаПереходаТекущая = СтрокиПереходаТекущие[0]; + + Элементы.ПанельОсновная.ТекущаяСтраница = Элементы[СтрокаПереходаТекущая.ИмяОсновнойСтраницы]; + Элементы.ПанельНавигации.ТекущаяСтраница = Элементы[СтрокаПереходаТекущая.ИмяСтраницыНавигации]; + + Элементы.ПанельНавигации.ТекущаяСтраница.Доступность = Не (ЭтоПереходДалее И СтрокаПереходаТекущая.ДлительнаяОперация); + + // Устанавливаем текущую кнопку по умолчанию. + КнопкаДалее = ПолучитьКнопкуФормыПоИмениКоманды(Элементы.ПанельНавигации.ТекущаяСтраница, "КомандаДалее"); + + Если КнопкаДалее <> Неопределено Тогда + + КнопкаДалее.КнопкаПоУмолчанию = Истина; + + Иначе + + КнопкаГотово = ПолучитьКнопкуФормыПоИмениКоманды(Элементы.ПанельНавигации.ТекущаяСтраница, "КомандаГотово"); + + Если КнопкаГотово <> Неопределено Тогда + + КнопкаГотово.КнопкаПоУмолчанию = Истина; + + КонецЕсли; + + КонецЕсли; + + Если ЭтоПереходДалее И СтрокаПереходаТекущая.ДлительнаяОперация Тогда + + ПодключитьОбработчикОжидания("ВыполнитьОбработчикДлительнойОперации", 0.1, Истина); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьОбработчикиСобытийПерехода(Знач ЭтоПереходДалее) + + // Обработчики событий переходов. + Если ЭтоПереходДалее Тогда + + СтрокиПерехода = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода - 1)); + + Если СтрокиПерехода.Количество() > 0 Тогда + СтрокаПерехода = СтрокиПерехода[0]; + + // Обработчик ПриПереходеДалее. + Если Не ПустаяСтрока(СтрокаПерехода.ИмяОбработчикаПриПереходеДалее) + И Не СтрокаПерехода.ДлительнаяОперация Тогда + + ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ)"; + ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПерехода.ИмяОбработчикаПриПереходеДалее); + + Отказ = Ложь; + + Результат = Вычислить(ИмяПроцедуры); + + Если Отказ Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); + + Возврат; + + КонецЕсли; + + КонецЕсли; + КонецЕсли; + + Иначе + + СтрокиПерехода = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода + 1)); + + Если СтрокиПерехода.Количество() > 0 Тогда + СтрокаПерехода = СтрокиПерехода[0]; + + // Обработчик ПриПереходеНазад. + Если Не ПустаяСтрока(СтрокаПерехода.ИмяОбработчикаПриПереходеНазад) + И Не СтрокаПерехода.ДлительнаяОперация Тогда + + ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ)"; + ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПерехода.ИмяОбработчикаПриПереходеНазад); + + Отказ = Ложь; + + Результат = Вычислить(ИмяПроцедуры); + + Если Отказ Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); + + Возврат; + + КонецЕсли; + + КонецЕсли; + КонецЕсли; + + КонецЕсли; + + СтрокиПереходаТекущие = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода)); + + Если СтрокиПереходаТекущие.Количество() = 0 Тогда + ВызватьИсключение НСтр("ru = 'Не определена страница для отображения.'"); + КонецЕсли; + + СтрокаПереходаТекущая = СтрокиПереходаТекущие[0]; + + Если СтрокаПереходаТекущая.ДлительнаяОперация И Не ЭтоПереходДалее Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); + Возврат; + КонецЕсли; + + // обработчик ПриОткрытии + Если Не ПустаяСтрока(СтрокаПереходаТекущая.ИмяОбработчикаПриОткрытии) Тогда + + ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ, ПропуститьСтраницу, ЭтоПереходДалее)"; + ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПереходаТекущая.ИмяОбработчикаПриОткрытии); + + Отказ = Ложь; + ПропуститьСтраницу = Ложь; + + Результат = Вычислить(ИмяПроцедуры); + + Если Отказ Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); + + Возврат; + + ИначеЕсли ПропуститьСтраницу Тогда + + Если ЭтоПереходДалее Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); + + Возврат; + + Иначе + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); + + Возврат; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьОбработчикДлительнойОперации() + + СтрокиПереходаТекущие = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода)); + + Если СтрокиПереходаТекущие.Количество() = 0 Тогда + ВызватьИсключение НСтр("ru = 'Не определена страница для отображения.'"); + КонецЕсли; + + СтрокаПереходаТекущая = СтрокиПереходаТекущие[0]; + + // Обработчик ОбработкаДлительнойОперации. + Если Не ПустаяСтрока(СтрокаПереходаТекущая.ИмяОбработчикаДлительнойОперации) Тогда + + ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ, ПерейтиДалее)"; + ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПереходаТекущая.ИмяОбработчикаДлительнойОперации); + + Отказ = Ложь; + ПерейтиДалее = Истина; + + Результат = Вычислить(ИмяПроцедуры); + + Если Отказ Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); + + Возврат; + + ИначеЕсли ПерейтиДалее Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); + + Возврат; + + КонецЕсли; + + Иначе + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); + + Возврат; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Функция ПолучитьКнопкуФормыПоИмениКоманды(ЭлементФормы, ИмяКоманды) + + Для Каждого Элемент Из ЭлементФормы.ПодчиненныеЭлементы Цикл + + Если ТипЗнч(Элемент) = Тип("ГруппаФормы") Тогда + + ЭлементФормыПоИмениКоманды = ПолучитьКнопкуФормыПоИмениКоманды(Элемент, ИмяКоманды); + + Если ЭлементФормыПоИмениКоманды <> Неопределено Тогда + + Возврат ЭлементФормыПоИмениКоманды; + + КонецЕсли; + + ИначеЕсли ТипЗнч(Элемент) = Тип("КнопкаФормы") + И СтрНайти(Элемент.ИмяКоманды, ИмяКоманды) > 0 Тогда + + Возврат Элемент; + + Иначе + + Продолжить; + + КонецЕсли; + + КонецЦикла; + + Возврат Неопределено; + +КонецФункции + +#КонецОбласти + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ЗагрузкаНастроекXDTO/Form.form b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ЗагрузкаНастроекXDTO/Form.form new file mode 100644 index 000000000..f488f6aaa --- /dev/null +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ЗагрузкаНастроекXDTO/Form.form @@ -0,0 +1,362 @@ + + + + ПанельОсновная + 1 + + СтраницаДлительнаяОперация + 3 + + Декорация1 + 7 + true + true + + true + + + Декорация1РасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 8 + true + + 6 + true + 2 + true + + + CommonPicture.ДлительнаяОперация48 + + + + + ДекорацияНадписьОжидание + 10 + + <key>ru</key> + <value>Выполняется получение параметров из программы "%НаименованиеКорреспондента%". +Пожалуйста, подождите...</value> + + true + true + + true + + + ДекорацияНадписьОжиданиеРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + ДекорацияНадписьОжиданиеКонтекстноеМеню + 11 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Страница длительная операция</value> + + + СтраницаДлительнаяОперацияРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + Page + + AlwaysHorizontal + auto + false + + + + СтраницаОшибка + 5 + + Декорация3 + 13 + true + true + + true + + + Декорация3РасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + Декорация3КонтекстноеМеню + 14 + true + + 6 + true + 2 + true + + + CommonPicture.Информация32 + + + + + ДекорацияНадписьОшибка + 16 + + <key>ru</key> + <value>Перед продолжением настройки синхронизации данных (настройки правил отправки и получения данных) требуется получить параметры из программы "%НаименованиеКорреспондента%". + +Перейдите в "%НаименованиеКорреспондента%", завершите в ней настройку и выполните первоначальную выгрузку данных, после чего завершите настройку в этой программе.</value> + + true + true + + true + + + ДекорацияНадписьОшибкаРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + ДекорацияНадписьОшибкаКонтекстноеМеню + 17 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Страница ошибка</value> + + + СтраницаОшибкаРасширеннаяПодсказка + 6 + 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 + true + true + + true + + + ФормаКомандаГотовоРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + Form.Command.КомандаГотово + Auto + true + true + true + UserCmds + Auto + + Right + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + Vertical + true + true + true + auto + true + + УзелОбмена + + <key>ru</key> + <value>Узел обмена</value> + + 1 + + ExchangePlanRef + + + true + + + true + + + + ПараметрыОбработчикаОжидания + + <key>ru</key> + <value>Параметры обработчика ожидания</value> + + 2 + + + true + + + true + + + + ПараметрыОбработчика + + <key>ru</key> + <value>Параметры обработчика</value> + + 3 + + + true + + + true + + + + НаименованиеКорреспондента + + <key>ru</key> + <value>Наименование корреспондента</value> + + 4 + + String + + + + true + + + true + + + + КомандаГотово + + <key>ru</key> + <value>Готово</value> + + 1 + + true + + + + КомандаГотово + + + Auto + Auto + + + + + + diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ЗагрузкаНастроекXDTO/Module.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ЗагрузкаНастроекXDTO/Module.bsl new file mode 100644 index 000000000..23fdfd026 --- /dev/null +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ЗагрузкаНастроекXDTO/Module.bsl @@ -0,0 +1,156 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + УзелОбмена = Параметры.УзелОбмена; + + НаименованиеКорреспондента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелОбмена, "Наименование"); + + Элементы.ДекорацияНадписьОжидание.Заголовок = СтрЗаменить(Элементы.ДекорацияНадписьОжидание.Заголовок, + "%НаименованиеКорреспондента%", НаименованиеКорреспондента); + Элементы.ДекорацияНадписьОшибка.Заголовок = СтрЗаменить(Элементы.ДекорацияНадписьОшибка.Заголовок, + "%НаименованиеКорреспондента%", НаименованиеКорреспондента); + + Заголовок = НСтр("ru = 'Загрузка параметров обмена данными'"); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Элементы.ПанельОсновная.ТекущаяСтраница = Элементы.СтраницаДлительнаяОперация; + Элементы.ФормаКомандаГотово.КнопкаПоУмолчанию = Ложь; + Элементы.ФормаКомандаГотово.Доступность = Ложь; + + ПодключитьОбработчикОжидания("ПриНачалеЗагрузкиНастроекXDTO", 1, Истина); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура КомандаГотово(Команда) + + Результат = Новый Структура; + Результат.Вставить("ПродолжитьНастройку", Ложь); + Результат.Вставить("ПолученыДанныеДляСопоставления", Ложь); + + Закрыть(Результат); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура ПриНачалеЗагрузкиНастроекXDTO() + + ПродолжитьОжидание = Истина; + ПриНачалеЗагрузкиНастроекXDTOНаСервере(ПродолжитьОжидание); + + Если ПродолжитьОжидание Тогда + ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания( + ПараметрыОбработчикаОжидания); + + ПодключитьОбработчикОжидания("ПриОжиданииЗагрузкиНастроекXDTO", + ПараметрыОбработчикаОжидания.ТекущийИнтервал, Истина); + Иначе + ПриЗавершенииЗагрузкиНастроекXDTO(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОжиданииЗагрузкиНастроекXDTO() + + ПродолжитьОжидание = Ложь; + ПриОжиданииЗагрузкиНастроекXDTOНаСервере(ПараметрыОбработчика, ПродолжитьОжидание); + + Если ПродолжитьОжидание Тогда + ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + + ПодключитьОбработчикОжидания("ПриОжиданииЗагрузкиНастроекXDTO", + ПараметрыОбработчикаОжидания.ТекущийИнтервал, Истина); + Иначе + ПараметрыОбработчикаОжидания = Неопределено; + ПриЗавершенииЗагрузкиНастроекXDTO(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗавершенииЗагрузкиНастроекXDTO() + + СообщениеОбОшибке = ""; + НастройкиЗагружены = Ложь; + ПолученыДанныеДляСопоставления = Ложь; + ПриЗавершенииЗагрузкиНастроекXDTOНаСервере(ПараметрыОбработчика, НастройкиЗагружены, ПолученыДанныеДляСопоставления, СообщениеОбОшибке); + + Если НастройкиЗагружены Тогда + + Результат = Новый Структура; + Результат.Вставить("ПродолжитьНастройку", Истина); + Результат.Вставить("ПолученыДанныеДляСопоставления", ПолученыДанныеДляСопоставления); + + Закрыть(Результат); + Иначе + Элементы.ПанельОсновная.ТекущаяСтраница = Элементы.СтраницаОшибка; + Элементы.ФормаКомандаГотово.КнопкаПоУмолчанию = Истина; + Элементы.ФормаКомандаГотово.Доступность = Истина; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПриНачалеЗагрузкиНастроекXDTOНаСервере(ПродолжитьОжидание) + + НастройкиЗагрузки = Новый Структура; + НастройкиЗагрузки.Вставить("УзелОбмена", УзелОбмена); + + Обработки.ПомощникСозданияОбменаДанными.ПриНачалеЗагрузкиНастроекXDTO( + НастройкиЗагрузки, ПараметрыОбработчика, ПродолжитьОжидание); + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ПриОжиданииЗагрузкиНастроекXDTOНаСервере(ПараметрыОбработчика, ПродолжитьОжидание) + + ПродолжитьОжидание = Ложь; + Обработки.ПомощникСозданияОбменаДанными.ПриОжиданииЗагрузкиНастроекXDTO(ПараметрыОбработчика, ПродолжитьОжидание); + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ПриЗавершенииЗагрузкиНастроекXDTOНаСервере(ПараметрыОбработчика, НастройкиЗагружены, ПолученыДанныеДляСопоставления, СообщениеОбОшибке) + + СтатусЗавершения = Неопределено; + Обработки.ПомощникСозданияОбменаДанными.ПриЗавершенииЗагрузкиНастроекXDTO( + ПараметрыОбработчика, СтатусЗавершения); + + Если СтатусЗавершения.Отказ Тогда + НастройкиЗагружены = Ложь; + ПолученыДанныеДляСопоставления = Ложь; + СообщениеОбОшибке = СтатусЗавершения.СообщениеОбОшибке; + Иначе + НастройкиЗагружены = СтатусЗавершения.Результат.НастройкиЗагружены; + + Если Не НастройкиЗагружены Тогда + ПолученыДанныеДляСопоставления = Ложь; + СообщениеОбОшибке = СтатусЗавершения.Результат.СообщениеОбОшибке; + Иначе + ПолученыДанныеДляСопоставления = СтатусЗавершения.Результат.ПолученыДанныеДляСопоставления; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаПодключения/Form.form b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаПодключения/Form.form new file mode 100644 index 000000000..8e8e1c600 --- /dev/null +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаПодключения/Form.form @@ -0,0 +1,7631 @@ + + + + ПанельОсновная + 28 + + СтраницаСпособНастройкиПодключения + 732 + + ГруппаСпособНастройкиПодключения + 738 + + СпособНастройкиПодключения + 740 + true + true + + true + + + СпособНастройкиПодключения + + None + + OnChange + СпособНастройкиПодключенияПриИзменении + + + СпособНастройкиПодключенияРасширеннаяПодсказка + 742 + Label + true + true + + Left + + + + СпособНастройкиПодключенияКонтекстноеМеню + 741 + true + + RadioButtonField + Enter + true + Left + true + + Tumbler + + + ru + Выбрать приложение из списка + + + ПриложениеИзСписка + + + + + ru + Настроить подключение вручную + + + НастроитьВручную + + + Vertical + + + + ПанельСпособыНастройкиПодключения + 734 + + СтраницаМоиПриложения + 728 + + ГруппаМоиПриложения + 647 + + ГруппаКоманднаяПанельСписокПриложений + 611 + + ГруппаКоманднаяПанельСписокПриложенийСлева + 613 + + ПриложенияВСервисеОбновитьСписокДоступныхПриложений + 133 + true + true + + true + + + ПриложенияВСервисеОбновитьСписокДоступныхПриложенийРасширеннаяПодсказка + 134 + Label + true + true + + Left + + + Form.Command.ОбновитьСписокДоступныхПриложений + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель список приложений слева</value> + + false + + ГруппаКоманднаяПанельСписокПриложенийСлеваРасширеннаяПодсказка + 614 + Label + true + true + + Left + + + CommandBar + + Left + + + + ПанельПриложенияВСервисе + 85 + + СтраницаПриложенияВСервисеОжидание + 87 + + ДекорацияПриложенияОжиданиеКартинка + 91 + + <key>ru</key> + <value>Декорация приложения ожидание картинка</value> + + true + true + + true + + + ДекорацияПриложенияОжиданиеКартинкаРасширеннаяПодсказка + 93 + Label + true + true + + Left + + + + ДекорацияПриложенияОжиданиеКартинкаКонтекстноеМеню + 92 + true + + true + true + + + CommonPicture.ДлительнаяОперация16 + + + + + ДекорацияПриложенияОжиданиеНадпись + 96 + + <key>ru</key> + <value>Выполняется получение списка доступных программ...</value> + + true + true + + true + + + ДекорацияПриложенияОжиданиеНадписьРасширеннаяПодсказка + 98 + Label + true + true + + Left + + + + ДекорацияПриложенияОжиданиеНадписьКонтекстноеМеню + 97 + true + + Label + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Страница приложения в сервисе ожидание</value> + + + СтраницаПриложенияВСервисеОжиданиеРасширеннаяПодсказка + 88 + Label + true + true + + Left + + + Page + + AlwaysHorizontal + auto + false + + + + СтраницаПриложенияВСервисеОшибка + 125 + + ДекорацияПриложенияОшибкаКартинка + 127 + + <key>ru</key> + <value>Декорация приложения ошибка картинка</value> + + true + true + + true + + + ДекорацияПриложенияОшибкаКартинкаРасширеннаяПодсказка + 129 + Label + true + true + + Left + + + + ДекорацияПриложенияОшибкаКартинкаКонтекстноеМеню + 128 + true + + true + true + + + CommonPicture.Предупреждение + + + + + ДекорацияПриложенияОшибкаНадпись + 130 + + <key>ru</key> + <value>Не удалось получить список доступных программ.</value> + + true + true + + true + + + ДекорацияПриложенияОшибкаНадписьРасширеннаяПодсказка + 132 + Label + true + true + + Left + + + + ДекорацияПриложенияОшибкаНадписьКонтекстноеМеню + 131 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Страница приложения в сервисе ошибка</value> + + + СтраницаПриложенияВСервисеОшибкаРасширеннаяПодсказка + 126 + Label + true + true + + Left + + + Page + + AlwaysHorizontal + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Панель приложения в сервисе</value> + + + ПанельПриложенияВСервисеРасширеннаяПодсказка + 86 + Label + true + true + + Left + + + Pages + + Auto + + + true + true + + true + + + <key>ru</key> + <value>Командная панель список приложений</value> + + + ГруппаКоманднаяПанельСписокПриложенийРасширеннаяПодсказка + 612 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Center + Auto + true + true + Auto + Auto + + + + ПриложенияВСервисе + 66 + + <key>ru</key> + <value>Приложения в сервисе</value> + + true + true + + true + + + ПриложенияВСервисе + + None + Add + Change + Copy + CopyToClipboard + Delete + EndEdit + MoveDown + MoveUp + ShowRowRearrangement + + ПриложенияВСервисеНаименованиеПриложения + 79 + true + true + + true + + + ПриложенияВСервисе.НаименованиеПриложения + + + ПриложенияВСервисеНаименованиеПриложенияРасширеннаяПодсказка + 81 + Label + true + true + + Left + + + + ПриложенияВСервисеНаименованиеПриложенияКонтекстноеМеню + 80 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПриложенияВСервисеПрефикс + 82 + true + + true + + + ПриложенияВСервисе.Префикс + + + ПриложенияВСервисеПрефиксРасширеннаяПодсказка + 84 + Label + true + true + + Left + + + + ПриложенияВСервисеПрефиксКонтекстноеМеню + 83 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПриложенияВСервисеОбластьДанных + 584 + true + true + + true + + + ПриложенияВСервисе.ОбластьДанных + + + ПриложенияВСервисеОбластьДанныхРасширеннаяПодсказка + 586 + Label + true + true + + Left + + + + ПриложенияВСервисеОбластьДанныхКонтекстноеМеню + 585 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + None + + ПриложенияВСервисеКоманднаяПанель + 68 + Left + true + + + ПриложенияВСервисеСтрокаПоиска + 70 + + ПриложенияВСервисеСтрокаПоискаРасширеннаяПодсказка + 72 + Label + true + true + + Left + + + + ПриложенияВСервисеСтрокаПоискаКонтекстноеМеню + 71 + true + + ПриложенияВСервисе + + true + + + + ПриложенияВСервисеСостояниеПросмотра + 73 + + ПриложенияВСервисеСостояниеПросмотраРасширеннаяПодсказка + 75 + Label + true + true + + Left + + + + ПриложенияВСервисеСостояниеПросмотраКонтекстноеМеню + 74 + true + + ViewStatusAddition + ПриложенияВСервисе + + true + + + + ПриложенияВСервисеУправлениеПоиском + 76 + + ПриложенияВСервисеУправлениеПоискомРасширеннаяПодсказка + 78 + Label + true + true + + Left + + + + ПриложенияВСервисеУправлениеПоискомКонтекстноеМеню + 77 + true + + SearchControlAddition + ПриложенияВСервисе + + true + + + + ПриложенияВСервисеРасширеннаяПодсказка + 69 + Label + true + true + + Left + + + + ПриложенияВСервисеКонтекстноеМеню + 67 + true + + true + true + true + true + true + true +
    true
    + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + + ПриложенияВСервисе.КартинкаРежимИспользования + + + CommonPicture.РежимИспользованияПриложенияВСервисеЛокально + + true + +
    + + Декорация10 + 725 + true + true + + true + + + Декорация10РасширеннаяПодсказка + 727 + Label + true + true + + Left + + + + Декорация10КонтекстноеМеню + 726 + true + + true + 1 + true + + + true + true + + true + + + <key>ru</key> + <value>Мои приложения</value> + + + ГруппаМоиПриложенияРасширеннаяПодсказка + 648 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + Button + WeakSeparation + true + true + Auto + Auto + +
    + true + true + + true + + + <key>ru</key> + <value>Страница мои приложения</value> + + + СтраницаМоиПриложенияРасширеннаяПодсказка + 729 + Label + true + true + + Left + + + Page + + Vertical + auto + false + +
    + + СтраницаВидыПодключения + 32 + + ГруппаВидыПодключения + 1 + + ВидПодключенияВнешнееСоединение + 106 + true + true + + true + + + ВидПодключения + + None + ShowBottom + + OnChange + ВидПодключенияВнешнееСоединениеПриИзменении + + + ВидПодключенияВнешнееСоединениеРасширеннаяПодсказка + 108 + + <key>ru</key> + <value>Данный вариант подключения рекомендуется в том случае, если другая программа находится на том же компьютере, +что и эта программа, или обе программы расположены в одной локальной сети (в одном офисе).</value> + + Label + true + true + + Left + + + + ВидПодключенияВнешнееСоединениеКонтекстноеМеню + 107 + true + + RadioButtonField + Enter + true + Left + true + + + + ru + Подключение к другой программе на этом компьютере или по локальной сети + + + ВнешнееСоединение + + + Vertical + + + + ВидПодключенияИнтернет + 103 + true + true + + true + + + ВидПодключения + + None + ShowBottom + + OnChange + ВидПодключенияИнтернетПриИзменении + + + ВидПодключенияИнтернетРасширеннаяПодсказка + 105 + + <key>ru</key> + <value>Этот вариант подключения рекомендуется выбрать, если программа находится в другой сети (офисе) +и при этом доступна для подключения через Интернет.</value> + + Label + true + + Left + + + + ВидПодключенияИнтернетКонтекстноеМеню + 104 + true + + RadioButtonField + Enter + true + Left + true + + + + ru + Подключение к другой программе через Интернет + + + Интернет + + + Vertical + + + + ВидПодключенияОбычныеКаналыСвязи + 109 + true + true + + true + + + ВидПодключения + + None + ShowBottom + + OnChange + ВидПодключенияОбычныеКаналыСвязиПриИзменении + + + ВидПодключенияОбычныеКаналыСвязиРасширеннаяПодсказка + 111 + + <key>ru</key> + <value>В случае если к другой программе нет возможности прямого подключения по локальной сети или через Интернет (веб-сервисы), +рекомендуется использовать другие каналы связи: сетевой каталог, FTP-ресурс или электронную почту. При этом программы, +между которыми настроена синхронизация данных, могут работать полностью автономно друг от друга и в разное время. +Такой вариант подходит не только для синхронизации данных с программами, расположенными в других сетях (офисах), +но и для программ в одной сети.</value> + + Label + true + + Left + + + + ВидПодключенияОбычныеКаналыСвязиКонтекстноеМеню + 110 + true + + RadioButtonField + Enter + true + Left + true + + + + ru + Синхронизация данных через файл, без подключения к другой программе + + + ОбычныеКаналыСвязи + + + Vertical + + + + ВидПодключенияПассивныйРежим + 112 + true + true + + true + + + ВидПодключения + + None + ShowBottom + + OnChange + ВидПодключенияПассивныйРежимПриИзменении + + + ВидПодключенияПассивныйРежимРасширеннаяПодсказка + 114 + + <key>ru</key> + <value>При таком варианте подключения эта программа отправляет и принимает данные через Интернет +только по запросу от программы-корреспондента.</value> + + Label + true + + Left + + + + ВидПодключенияПассивныйРежимКонтекстноеМеню + 113 + true + + RadioButtonField + Enter + true + Left + true + + + + ru + Подключение для синхронизации данных выполняется из другой программы + + + ПассивныйРежим + + + Vertical + + + + Декорация1 + 712 + true + true + + true + + + Декорация1РасширеннаяПодсказка + 714 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 713 + true + + true + 1 + true + + + + ПанельФайлНастройки + 715 + + СтраницаФайлНастройкиОбычныеКаналыСвязи + 721 + + ГруппаФайлНастройкиОбычныеКаналыСвязи + 669 + + ЗагрузитьПараметрыПодключенияИзФайла + 666 + true + true + + true + + + ЗагрузитьПараметрыПодключенияИзФайла + + Right + + OnChange + ЗагрузитьНастройкиПодключенияИзФайлаПриИзменении + + + ЗагрузитьПараметрыПодключенияИзФайлаРасширеннаяПодсказка + 668 + Label + true + true + + Left + + + + ЗагрузитьПараметрыПодключенияИзФайлаКонтекстноеМеню + 667 + true + + CheckBoxField + Enter + true + Left + true + + + + ИмяФайлаНастроекПодключенияДляЗагрузки + 617 + true + true + + true + + + ИмяФайлаНастроекПодключенияДляЗагрузки + + None + Button + + ИмяФайлаНастроекПодключенияДляЗагрузкиРасширеннаяПодсказка + 619 + + <key>ru</key> + <value>Если файл параметров подключения утерян, то для формирования нового файла необходимо: + - перейти в первую программу + - перейти в форму синхронизации данных + - выбрать требуемую синхронизацию данных и открыть ее параметры + - в командной панели формы следует выбрать пункт меню: "Все действия" –> "Получить настройки синхронизации данных для другой программы..."</value> + + Label + true + true + + Left + + + + ИмяФайлаНастроекПодключенияДляЗагрузкиКонтекстноеМеню + 618 + true + + InputField + true + Enter + true + Left + true + + + StartChoice + ИмяФайлаНастроекПодключенияДляЗагрузкиНачалоВыбора + + true + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Файл настройки обычные каналы связи</value> + + + ГруппаФайлНастройкиОбычныеКаналыСвязиРасширеннаяПодсказка + 670 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + ОписаниеМастерИзФайла + 663 + + <key>ru</key> + <value>Можно загрузить параметры подключения из файла, созданного в программе-корреспонденте +при настройке синхронизации данных.</value> + + true + true + + true + + + ОписаниеМастерИзФайлаРасширеннаяПодсказка + 665 + Label + true + true + + Left + + + + ОписаниеМастерИзФайлаКонтекстноеМеню + 664 + true + + Label + true + + Style.ПоясняющийТекст + + + Left + Top + + + true + true + + true + + + <key>ru</key> + <value>Страница файл настройки обычные каналы связи</value> + + + СтраницаФайлНастройкиОбычныеКаналыСвязиРасширеннаяПодсказка + 722 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаФайлНастройкиПассивныйРежим + 723 + + ИмяФайлаНастроекXDTOКорреспондента + 709 + + <key>ru</key> + <value>Файл с настройками программы-корреспондента</value> + + true + true + + true + + + ИмяФайлаНастроекXDTOКорреспондента + + + ИмяФайлаНастроекXDTOКорреспондентаРасширеннаяПодсказка + 711 + Label + true + true + + Left + + + + ИмяФайлаНастроекXDTOКорреспондентаКонтекстноеМеню + 710 + true + + InputField + true + Enter + true + Left + true + + + StartChoice + ИмяФайлаНастроекXDTOКорреспондентаНачалоВыбора + + true + true + true + true + true + true + true + true + Normal + + + + ОписаниеМастерИзФайла1 + 683 + + <key>ru</key> + <value>Для продолжения настройки требуется конфигурационный файл с настройками синхронизации данных +через EnterpriseData в программе-корреспонденте.</value> + + true + true + + true + + + ОписаниеМастерИзФайла1РасширеннаяПодсказка + 685 + Label + true + true + + Left + + + + ОписаниеМастерИзФайла1КонтекстноеМеню + 684 + true + + Label + true + + Style.ПоясняющийТекст + + + Left + Top + + + true + true + + true + + + <key>ru</key> + <value>Страница файл настройки пассивный режим</value> + + + СтраницаФайлНастройкиПассивныйРежимРасширеннаяПодсказка + 724 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Панель файл настройки</value> + + + ПанельФайлНастройкиРасширеннаяПодсказка + 716 + Label + true + true + + Left + + + Pages + + Auto + + + true + true + + true + + + <key>ru</key> + <value>Виды подключения</value> + + + ГруппаВидыПодключенияРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + Button + WeakSeparation + true + true + Auto + Auto + + + + ДекорацияОтступОтКоманднойПанелиКартинка + 654 + true + true + + true + + + ДекорацияОтступОтКоманднойПанелиКартинкаРасширеннаяПодсказка + 656 + Label + true + true + + Left + + + + ДекорацияОтступОтКоманднойПанелиКартинкаКонтекстноеМеню + 655 + true + + true + 1 + true + + + true + true + + true + + + <key>ru</key> + <value>Страница виды подключения</value> + + + СтраницаВидыПодключенияРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Панель способы настройки подключения</value> + + + ПанельСпособыНастройкиПодключенияРасширеннаяПодсказка + 735 + Label + true + true + + Left + + + Pages + + Auto + +
    + true + true + + true + + + <key>ru</key> + <value>Варианты настройки подключения</value> + + + ГруппаСпособНастройкиПодключенияРасширеннаяПодсказка + 739 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + +
    + true + true + + true + + + <key>ru</key> + <value>Страница способ настройки подключения</value> + + + СтраницаСпособНастройкиПодключенияРасширеннаяПодсказка + 733 + Label + true + true + + Left + + + Page + + Vertical + auto + false + +
    + + СтраницаПараметрыПодключенияИнтернет + 145 + + ГруппаПараметрыПодключенияИнтернет + 410 + + Декорация14 + 449 + true + true + + true + + + Декорация14РасширеннаяПодсказка + 451 + Label + true + true + + Left + + + + Декорация14КонтекстноеМеню + 450 + true + + Label + true + true + + Left + + + + ГруппаПараметрыИнтернет + 447 + + ИнтернетВебАдрес + 184 + true + true + + true + + + ИнтернетВебАдрес + + ShowBottom + + ИнтернетВебАдресРасширеннаяПодсказка + 186 + + <key>ru</key> + <value>Ссылка для входа в программу (как в веб-браузере). +Например, https://site.domain/database/123 +</value> + + Label + true + + Left + + + + ИнтернетВебАдресКонтекстноеМеню + 185 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + ИнтернетИмяПользователя + 187 + true + true + + true + + + ИнтернетИмяПользователя + + + ИнтернетИмяПользователяРасширеннаяПодсказка + 189 + Label + true + true + + Left + + + + ИнтернетИмяПользователяКонтекстноеМеню + 188 + true + + InputField + Enter + true + Left + true + + 20 + true + false + true + true + true + true + Normal + + + + ГруппаИнтернетПароль + 196 + + ИнтернетПароль + 190 + true + true + + true + + + ИнтернетПароль + + + ИнтернетПарольРасширеннаяПодсказка + 192 + Label + true + true + + Left + + + + ИнтернетПарольКонтекстноеМеню + 191 + true + + InputField + Enter + true + Left + true + + 20 + true + false + true + true + true + true + true + Normal + + + + ИнтернетЗапомнитьПароль + 193 + true + true + + true + + + ИнтернетЗапомнитьПароль + + Right + + ИнтернетЗапомнитьПарольРасширеннаяПодсказка + 195 + Label + true + true + + Left + + + + ИнтернетЗапомнитьПарольКонтекстноеМеню + 194 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Интернет пароль</value> + + + ГруппаИнтернетПарольРасширеннаяПодсказка + 197 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + ПараметрыДоступаВИнтернет1 + 353 + true + true + + true + + + ПараметрыДоступаВИнтернет1РасширеннаяПодсказка + 354 + Label + true + true + + Left + + + Hyperlink + Form.Command.ПараметрыДоступаВИнтернет + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Параметры интернет</value> + + + ГруппаПараметрыИнтернетРасширеннаяПодсказка + 448 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Параметры подключения через Интернет</value> + + + ГруппаПараметрыПодключенияИнтернетРасширеннаяПодсказка + 411 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница параметры подключения интернет</value> + + + СтраницаПараметрыПодключенияИнтернетРасширеннаяПодсказка + 146 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаПараметрыПодключенияВнешнееСоединение + 143 + + ГруппаПараметрыПодключенияВнешнееСоединение + 147 + + Декорация15 + 454 + true + true + + true + + + Декорация15РасширеннаяПодсказка + 456 + Label + true + true + + Left + + + + Декорация15КонтекстноеМеню + 455 + true + + Label + true + true + + Left + + + + ГруппаПараметрыВнешнееСоединение + 452 + + ГруппаПараметрыРасположенияВнешнееСоединение + 149 + + Декорация16 + 459 + true + true + + true + + + Декорация16РасширеннаяПодсказка + 461 + Label + true + true + + Left + + + + Декорация16КонтекстноеМеню + 460 + true + + Label + true + true + + Left + + + + ГруппаПараметрыРасположение + 457 + + ВнешнееСоединениеВариантРаботыИнформационнойБазыФайловый + 157 + true + true + + true + + + ВнешнееСоединениеВариантРаботыИнформационнойБазы + + None + + OnChange + ВнешнееСоединениеВариантРаботыИнформационнойБазыФайловыйПриИзменении + + + ВнешнееСоединениеВариантРаботыИнформационнойБазыФайловыйРасширеннаяПодсказка + 159 + Label + true + true + + Left + + + + ВнешнееСоединениеВариантРаботыИнформационнойБазыФайловыйКонтекстноеМеню + 158 + true + + RadioButtonField + Enter + true + Left + true + + + + ru + На данном компьютере или на компьютере в локальной сети + + + Файловый + + + Vertical + + + + ВнешнееСоединениеКаталогИнформационнойБазы + 163 + true + true + + true + + + ВнешнееСоединениеКаталогИнформационнойБазы + + + ВнешнееСоединениеКаталогИнформационнойБазыРасширеннаяПодсказка + 165 + Label + true + true + + Left + + + + ВнешнееСоединениеКаталогИнформационнойБазыКонтекстноеМеню + 164 + true + + InputField + true + Enter + true + Left + true + + + StartChoice + ВнешнееСоединениеКаталогИнформационнойБазыНачалоВыбора + + true + true + true + true + true + true + true + true + Normal + + + + ВнешнееСоединениеВариантРаботыИнформационнойБазыКлиентСерверный + 160 + true + true + + true + + + ВнешнееСоединениеВариантРаботыИнформационнойБазы + + None + + OnChange + ВнешнееСоединениеВариантРаботыИнформационнойБазыКлиентСерверныйПриИзменении + + + ВнешнееСоединениеВариантРаботыИнформационнойБазыКлиентСерверныйРасширеннаяПодсказка + 162 + Label + true + true + + Left + + + + ВнешнееСоединениеВариантРаботыИнформационнойБазыКлиентСерверныйКонтекстноеМеню + 161 + true + + RadioButtonField + Enter + true + Left + true + + + + ru + На сервере 1С:Предприятия + + + КлиентСерверный + + + Vertical + + + + ВнешнееСоединениеКластерСерверов + 166 + true + true + + true + + + ВнешнееСоединениеКластерСерверов + + + ВнешнееСоединениеКластерСерверовРасширеннаяПодсказка + 168 + Label + true + true + + Left + + + + ВнешнееСоединениеКластерСерверовКонтекстноеМеню + 167 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + ВнешнееСоединениеИмяИнформационнойБазы + 169 + true + true + + true + + + ВнешнееСоединениеИмяИнформационнойБазы + + + ВнешнееСоединениеИмяИнформационнойБазыРасширеннаяПодсказка + 171 + Label + true + true + + Left + + + + ВнешнееСоединениеИмяИнформационнойБазыКонтекстноеМеню + 170 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Параметры расположение</value> + + + ГруппаПараметрыРасположениеРасширеннаяПодсказка + 458 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Расположение программы</value> + + + ГруппаПараметрыРасположенияВнешнееСоединениеРасширеннаяПодсказка + 150 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + Button + true + true + auto + Auto + Auto + + + + ГруппаПараметрыАутентификацииВнешнееСоединение + 151 + + Декорация17 + 464 + true + true + + true + + + Декорация17РасширеннаяПодсказка + 466 + Label + true + true + + Left + + + + Декорация17КонтекстноеМеню + 465 + true + + Label + true + true + + Left + + + + ГруппаПараметрыАутентификация + 462 + + ВнешнееСоединениеВидАутентификацииОперационнаяСистема + 175 + true + true + + true + + + ВнешнееСоединениеВидАутентификации + + None + + OnChange + ВнешнееСоединениеВидАутентификацииОперационнаяСистемаПриИзменении + + + ВнешнееСоединениеВидАутентификацииОперационнаяСистемаРасширеннаяПодсказка + 177 + Label + true + true + + Left + + + + ВнешнееСоединениеВидАутентификацииОперационнаяСистемаКонтекстноеМеню + 176 + true + + RadioButtonField + Enter + true + Left + true + + + + ru + Использовать учетную запись операционной системы + + + ОперационнаяСистема + + + Vertical + + + + ВнешнееСоединениеВидАутентификации1СПредприятие + 172 + true + true + + true + + + ВнешнееСоединениеВидАутентификации + + None + + OnChange + ВнешнееСоединениеВидАутентификации1СПредприятиеПриИзменении + + + ВнешнееСоединениеВидАутентификации1СПредприятиеРасширеннаяПодсказка + 174 + Label + true + true + + Left + + + + ВнешнееСоединениеВидАутентификации1СПредприятиеКонтекстноеМеню + 173 + true + + RadioButtonField + Enter + true + Left + true + + + + ru + Использовать указанные имя пользователя и пароль + + + 1СПредприятие + + + Vertical + + + + ВнешнееСоединениеИмяПользователя + 178 + true + true + + true + + + ВнешнееСоединениеИмяПользователя + + + ВнешнееСоединениеИмяПользователяРасширеннаяПодсказка + 180 + Label + true + true + + Left + + + + ВнешнееСоединениеИмяПользователяКонтекстноеМеню + 179 + true + + InputField + Enter + true + Left + true + + 20 + true + false + true + true + true + true + Normal + + + + ВнешнееСоединениеПароль + 181 + true + true + + true + + + ВнешнееСоединениеПароль + + + ВнешнееСоединениеПарольРасширеннаяПодсказка + 183 + Label + true + true + + Left + + + + ВнешнееСоединениеПарольКонтекстноеМеню + 182 + true + + InputField + Enter + true + Left + true + + 20 + true + false + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Параметры аутентификация</value> + + + ГруппаПараметрыАутентификацияРасширеннаяПодсказка + 463 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Параметры входа в программу</value> + + + ГруппаПараметрыАутентификацииВнешнееСоединениеРасширеннаяПодсказка + 152 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + auto + DontUse + Auto + + + true + true + + true + + + <key>ru</key> + <value>Параметры внешнее соединение</value> + + + ГруппаПараметрыВнешнееСоединениеРасширеннаяПодсказка + 453 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Параметры прямого подключения</value> + + + ГруппаПараметрыПодключенияВнешнееСоединениеРасширеннаяПодсказка + 148 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница параметры подключения внешнее соединение</value> + + + СтраницаПараметрыПодключенияВнешнееСоединениеРасширеннаяПодсказка + 144 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаПараметрыПодключенияОбычныеКаналыСвязи + 198 + + ГруппаСинхронизацияЧерезКаталог + 237 + + ОбычныеКаналыСвязиFILEИспользование + 268 + true + true + + true + + + ОбычныеКаналыСвязиFILEИспользование + + Right + + OnChange + ОбычныеКаналыСвязиFILEИспользованиеПриИзменении + + + ОбычныеКаналыСвязиFILEИспользованиеРасширеннаяПодсказка + 270 + Label + true + true + + Left + + + + ОбычныеКаналыСвязиFILEИспользованиеКонтекстноеМеню + 269 + true + + CheckBoxField + Enter + true + Left + true + + + + ГруппаОбычныеКаналыСвязиFILEИспользование + 686 + + ОбычныеКаналыСвязиFILEКаталог + 211 + true + true + + true + + + ОбычныеКаналыСвязиFILEКаталог + + + ОбычныеКаналыСвязиFILEКаталогРасширеннаяПодсказка + 213 + Label + true + true + + Left + + + + ОбычныеКаналыСвязиFILEКаталогКонтекстноеМеню + 212 + true + + InputField + true + Enter + true + Left + true + + + StartChoice + ОбычныеКаналыСвязиFILEКаталогНачалоВыбора + + true + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Обычные каналы связи FILE использование</value> + + + ГруппаОбычныеКаналыСвязиFILEИспользованиеРасширеннаяПодсказка + 687 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Синхронизация данных через локальный или сетевой каталог</value> + + + ГруппаСинхронизацияЧерезКаталогРасширеннаяПодсказка + 238 + Label + true + true + + Left + + + UsualGroup + + Vertical + Collapsible + Button + WeakSeparation + true + true + auto + Auto + Auto + + + + ГруппаСинхронизацияЧерезFTP + 239 + + ОбычныеКаналыСвязиFTPИспользование + 271 + true + true + + true + + + ОбычныеКаналыСвязиFTPИспользование + + Right + + OnChange + ОбычныеКаналыСвязиFTPИспользованиеПриИзменении + + + ОбычныеКаналыСвязиFTPИспользованиеРасширеннаяПодсказка + 273 + Label + true + true + + Left + + + + ОбычныеКаналыСвязиFTPИспользованиеКонтекстноеМеню + 272 + true + + CheckBoxField + Enter + true + Left + true + + + + ГруппаОбычныеКаналыСвязиFTPИспользование + 688 + + ГруппаСинхронизацияЧерезFTPКаталог + 252 + + ОбычныеКаналыСвязиFTPКаталог + 246 + true + true + + true + + + ОбычныеКаналыСвязиFTPПуть + + + ОбычныеКаналыСвязиFTPКаталогРасширеннаяПодсказка + 248 + Label + true + true + + Left + + + + ОбычныеКаналыСвязиFTPКаталогКонтекстноеМеню + 247 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + ОбычныеКаналыСвязиFTPПорт + 254 + true + true + + true + + + ОбычныеКаналыСвязиFTPПорт + + + ОбычныеКаналыСвязиFTPПортРасширеннаяПодсказка + 256 + Label + true + true + + Left + + + + ОбычныеКаналыСвязиFTPПортКонтекстноеМеню + 255 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Синхронизация через FTP каталог</value> + + + ГруппаСинхронизацияЧерезFTPКаталогРасширеннаяПодсказка + 253 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + СинхронизацияЧерезFTPАутентификация + 285 + + ОбычныеКаналыСвязиFTPПользователь + 257 + true + true + + true + + + ОбычныеКаналыСвязиFTPПользователь + + + ОбычныеКаналыСвязиFTPПользовательРасширеннаяПодсказка + 259 + Label + true + true + + Left + + + + ОбычныеКаналыСвязиFTPПользовательКонтекстноеМеню + 258 + true + + InputField + Enter + true + Left + true + + 20 + true + true + false + true + true + true + true + Normal + + + + ОбычныеКаналыСвязиFTPПароль + 260 + true + true + + true + + + ОбычныеКаналыСвязиFTPПароль + + + ОбычныеКаналыСвязиFTPПарольРасширеннаяПодсказка + 262 + Label + true + true + + Left + + + + ОбычныеКаналыСвязиFTPПарольКонтекстноеМеню + 261 + true + + InputField + Enter + true + Left + true + + 20 + true + false + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Синхронизация через FTP аутентификация</value> + + + СинхронизацияЧерезFTPАутентификацияРасширеннаяПодсказка + 286 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаОграничениеРазмераФайлаFTP + 342 + + ОбычныеКаналыСвязиFTPИспользоватьОграничениеРазмераФайла + 344 + true + true + + true + + + ОбычныеКаналыСвязиFTPИспользоватьОграничениеРазмераФайла + + Right + + OnChange + ОбычныеКаналыСвязиFTPИспользоватьОграничениеРазмераФайлаПриИзменении + + + ОбычныеКаналыСвязиFTPИспользоватьОграничениеРазмераФайлаРасширеннаяПодсказка + 346 + Label + true + true + + Left + + + + ОбычныеКаналыСвязиFTPИспользоватьОграничениеРазмераФайлаКонтекстноеМеню + 345 + true + + CheckBoxField + Enter + true + Left + true + + + + ОбычныеКаналыСвязиFTPМаксимальныйДопустимыйРазмерФайла + 347 + true + true + + true + + + ОбычныеКаналыСвязиFTPМаксимальныйДопустимыйРазмерФайла + + None + + ОбычныеКаналыСвязиFTPМаксимальныйДопустимыйРазмерФайлаРасширеннаяПодсказка + 349 + Label + true + true + + Left + + + + ОбычныеКаналыСвязиFTPМаксимальныйДопустимыйРазмерФайлаКонтекстноеМеню + 348 + true + + InputField + true + Enter + true + Left + true + + 9 + true + true + true + true + true + true + true + Normal + + + + Декорация5 + 350 + + <key>ru</key> + <value>КБ</value> + + true + true + + true + + + Декорация5РасширеннаяПодсказка + 352 + Label + true + true + + Left + + + + Декорация5КонтекстноеМеню + 351 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Ограничение размера файла FTP</value> + + + ГруппаОграничениеРазмераФайлаFTPРасширеннаяПодсказка + 343 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + ОбычныеКаналыСвязиFTPПассивныйРежим + 334 + true + true + + true + + + ОбычныеКаналыСвязиFTPПассивныйРежим + + Right + + ОбычныеКаналыСвязиFTPПассивныйРежимРасширеннаяПодсказка + 336 + Label + true + true + + Left + + + + ОбычныеКаналыСвязиFTPПассивныйРежимКонтекстноеМеню + 335 + true + + CheckBoxField + Enter + true + Left + true + + + + ПараметрыДоступаВИнтернет + 337 + true + true + + true + + + ПараметрыДоступаВИнтернетРасширеннаяПодсказка + 338 + Label + true + true + + Left + + + Hyperlink + Form.Command.ПараметрыДоступаВИнтернет + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Обычные каналы связи FTP использование</value> + + + ГруппаОбычныеКаналыСвязиFTPИспользованиеРасширеннаяПодсказка + 689 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Cинхронизация данных через каталог на FTP-сервере</value> + + + ГруппаСинхронизацияЧерезFTPРасширеннаяПодсказка + 240 + Label + true + true + + Left + + + UsualGroup + + Vertical + Collapsible + true + Button + WeakSeparation + true + true + auto + Auto + Auto + + + + ГруппаСинхронизацияЧерезEMAIL + 241 + + ОбычныеКаналыСвязиEMAILИспользование + 279 + true + true + + true + + + ОбычныеКаналыСвязиEMAILИспользование + + Right + + OnChange + ОбычныеКаналыСвязиEMAILИспользованиеПриИзменении + + + ОбычныеКаналыСвязиEMAILИспользованиеРасширеннаяПодсказка + 281 + Label + true + true + + Left + + + + ОбычныеКаналыСвязиEMAILИспользованиеКонтекстноеМеню + 280 + true + + CheckBoxField + Enter + true + Left + true + + + + ГруппаОбычныеКаналыСвязиEMAILИспользование + 693 + + ОбычныеКаналыСвязиEMAILУчетнаяЗапись + 282 + true + true + + true + + + ОбычныеКаналыСвязиEMAILУчетнаяЗапись + + + ОбычныеКаналыСвязиEMAILУчетнаяЗаписьРасширеннаяПодсказка + 284 + Label + true + true + + Left + + + + ОбычныеКаналыСвязиEMAILУчетнаяЗаписьКонтекстноеМеню + 283 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + ГруппаОграничениеРазмераВложенияEMAIL + 304 + + ОбычныеКаналыСвязиEMAILИспользоватьОграничениеРазмераВложения + 306 + true + true + + true + + + ОбычныеКаналыСвязиEMAILИспользоватьОграничениеРазмераВложения + + Right + + OnChange + ОбычныеКаналыСвязиEMAILИспользоватьОграничениеРазмераВложенияПриИзменении + + + ОбычныеКаналыСвязиEMAILИспользоватьОграничениеРазмераВложенияРасширеннаяПодсказка + 308 + Label + true + true + + Left + + + + ОбычныеКаналыСвязиEMAILИспользоватьОграничениеРазмераВложенияКонтекстноеМеню + 307 + true + + CheckBoxField + Enter + true + Left + true + + + + ОбычныеКаналыСвязиEMAILМаксимальныйДопустимыйРазмерВложения + 309 + true + true + + true + + + ОбычныеКаналыСвязиEMAILМаксимальныйДопустимыйРазмерВложения + + None + + ОбычныеКаналыСвязиEMAILМаксимальныйДопустимыйРазмерВложенияРасширеннаяПодсказка + 311 + Label + true + true + + Left + + + + ОбычныеКаналыСвязиEMAILМаксимальныйДопустимыйРазмерВложенияКонтекстноеМеню + 310 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + Декорация4 + 339 + + <key>ru</key> + <value>КБ</value> + + true + true + + true + + + Декорация4РасширеннаяПодсказка + 341 + Label + true + true + + Left + + + + Декорация4КонтекстноеМеню + 340 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Ограничение размера вложения EMAIL</value> + + + ГруппаОграничениеРазмераВложенияEMAILРасширеннаяПодсказка + 305 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Обычные каналы связи EMAIL использование</value> + + + ГруппаОбычныеКаналыСвязиEMAILИспользованиеРасширеннаяПодсказка + 694 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Cинхронизация данных через электронную почту</value> + + + ГруппаСинхронизацияЧерезEMAILРасширеннаяПодсказка + 242 + Label + true + true + + Left + + + UsualGroup + + Vertical + Collapsible + true + Button + WeakSeparation + true + true + auto + Auto + Auto + + + + ГруппаДополнительныеПараметрыПередачиДанных + 629 + + ОбычныеКаналыСвязиТранслитерироватьИменаФайлов + 243 + true + true + + true + + + ОбычныеКаналыСвязиТранслитерироватьИменаФайлов + + Right + Button + + ОбычныеКаналыСвязиТранслитерироватьИменаФайловРасширеннаяПодсказка + 245 + + <key>ru</key> + <value>Рекомендуется применять в случае, если при обмене возникают ошибки, связанные с различными кодировками файлов. +Настройку не следует использовать, в случае, если такая же настройка не поддерживается на стороне корреспондента.</value> + + Label + true + true + + Left + + + + ОбычныеКаналыСвязиТранслитерироватьИменаФайловКонтекстноеМеню + 244 + true + + CheckBoxField + Enter + true + Left + true + + + + ОбычныеКаналыСвязиАрхивироватьФайлы + 214 + true + true + + true + + + ОбычныеКаналыСвязиАрхивироватьФайлы + + Right + + OnChange + ОбычныеКаналыСвязиАрхивироватьФайлыПриИзменении + + + ОбычныеКаналыСвязиАрхивироватьФайлыРасширеннаяПодсказка + 216 + Label + true + true + + Left + + + + ОбычныеКаналыСвязиАрхивироватьФайлыКонтекстноеМеню + 215 + true + + CheckBoxField + Enter + true + Left + true + + + + ГруппаОбычныеКаналыСвязиПарольАрхива + 266 + + Декорация13 + 690 + true + true + + true + + + Декорация13РасширеннаяПодсказка + 692 + Label + true + true + + Left + + + + Декорация13КонтекстноеМеню + 691 + true + + Label + true + true + + Left + + + + ОбычныеКаналыСвязиИспользоватьПарольАрхива + 263 + true + true + + true + + + ОбычныеКаналыСвязиИспользоватьПарольДляАрхива + + Right + + OnChange + ОбычныеКаналыСвязиИспользоватьПарольАрхиваПриИзменении + + + ОбычныеКаналыСвязиИспользоватьПарольАрхиваРасширеннаяПодсказка + 265 + Label + true + true + + Left + + + + ОбычныеКаналыСвязиИспользоватьПарольАрхиваКонтекстноеМеню + 264 + true + + CheckBoxField + Enter + true + Left + true + + + + ОбычныеКаналыСвязиПарольАрхива + 217 + true + true + + true + + + ОбычныеКаналыСвязиПарольАрхива + + None + + ОбычныеКаналыСвязиПарольАрхиваРасширеннаяПодсказка + 219 + Label + true + true + + Left + + + + ОбычныеКаналыСвязиПарольАрхиваКонтекстноеМеню + 218 + true + + InputField + true + Enter + true + Left + true + + 20 + true + false + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Обычные каналы связи пароль архива</value> + + + ГруппаОбычныеКаналыСвязиПарольАрхиваРасширеннаяПодсказка + 267 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Дополнительные настройки</value> + + + ГруппаДополнительныеПараметрыПередачиДанныхРасширеннаяПодсказка + 630 + Label + true + true + + Left + + + UsualGroup + + Vertical + Collapsible + Button + WeakSeparation + true + true + auto + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница параметры подключения обычные каналы связи</value> + + + СтраницаПараметрыПодключенияОбычныеКаналыСвязиРасширеннаяПодсказка + 199 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаПроверкаПодключения + 355 + + ПанельПроверкаПодключения + 587 + + СтраницаПроверкаПодключенияOnline + 589 + + ГруппаПроверкаПодключенияOnline + 359 + + ДекорацияПроверкаПодключенияOnlineОжиданиеКартинка + 373 + + <key>ru</key> + <value>Декорация проверка подключения online ожидание картинка</value> + + true + true + + true + + + ДекорацияПроверкаПодключенияOnlineОжиданиеКартинкаРасширеннаяПодсказка + 375 + Label + true + true + + Left + + + + ДекорацияПроверкаПодключенияOnlineОжиданиеКартинкаКонтекстноеМеню + 374 + true + + true + true + + + CommonPicture.ДлительнаяОперация48 + + + + + ДекорацияПроверкаПодключенияOnlineОжиданиеНадпись + 376 + + <key>ru</key> + <value>Выполняется подключение к программе-корреспонденту. +Пожалуйста, подождите...</value> + + true + true + + true + + + ДекорацияПроверкаПодключенияOnlineОжиданиеНадписьРасширеннаяПодсказка + 378 + Label + true + true + + Left + + + + ДекорацияПроверкаПодключенияOnlineОжиданиеНадписьКонтекстноеМеню + 377 + true + + Label + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Проверка параметров подключения</value> + + + ГруппаПроверкаПодключенияOnlineРасширеннаяПодсказка + 360 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница проверка подключения online</value> + + + СтраницаПроверкаПодключенияOnlineРасширеннаяПодсказка + 590 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаПроверкаПодключенияOffline + 591 + + ГруппаПроверкаПодключенияOffline + 593 + + ДекорацияПроверкаПодключенияOfflineОжиданиеКартинка + 623 + + <key>ru</key> + <value>Декорация проверка подключения offline ожидание картинка</value> + + true + true + + true + + + ДекорацияПроверкаПодключенияOfflineОжиданиеКартинкаРасширеннаяПодсказка + 625 + Label + true + true + + Left + + + + ДекорацияПроверкаПодключенияOfflineОжиданиеКартинкаКонтекстноеМеню + 624 + true + + true + true + + + CommonPicture.ДлительнаяОперация48 + + + + + ДекорацияПроверкаПодключенияOfflineОжиданиеНадпись + 626 + + <key>ru</key> + <value>Выполняется проверка параметров передачи данных. +Пожалуйста, подождите...</value> + + true + true + + true + + + ДекорацияПроверкаПодключенияOfflineОжиданиеНадписьРасширеннаяПодсказка + 628 + Label + true + true + + Left + + + + ДекорацияПроверкаПодключенияOfflineОжиданиеНадписьКонтекстноеМеню + 627 + true + + Label + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Проверка параметров передачи данных</value> + + + ГруппаПроверкаПодключенияOfflineРасширеннаяПодсказка + 594 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница проверка подключения offline</value> + + + СтраницаПроверкаПодключенияOfflineРасширеннаяПодсказка + 592 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Панель проверка подключения</value> + + + ПанельПроверкаПодключенияРасширеннаяПодсказка + 588 + Label + true + true + + Left + + + Pages + + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница проверка подключения</value> + + + СтраницаПроверкаПодключенияРасширеннаяПодсказка + 356 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаОбщиеНастройкиСинхронизации + 474 + + ГруппаОбщиеНастройкиСинхронизации + 476 + + ГруппаНастройкиПрограммыПредставление + 514 + + Наименование + 482 + true + true + + true + + + Наименование + + Top + + НаименованиеРасширеннаяПодсказка + 484 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 483 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + Префикс + 485 + true + true + + true + + + Префикс + + Top + + ПрефиксРасширеннаяПодсказка + 487 + Label + true + true + + Left + + + + ПрефиксКонтекстноеМеню + 486 + true + + InputField + true + Enter + true + Left + true + + 5 + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Представление этой программы</value> + + + ГруппаНастройкиПрограммыПредставлениеРасширеннаяПодсказка + 515 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + Button + true + true + auto + Auto + Auto + + + + ГруппаНастройкиПрограммыКорреспондентаПредставление + 516 + + НаименованиеКорреспондента + 488 + true + true + + true + + + НаименованиеКорреспондента + + Top + + НаименованиеКорреспондентаРасширеннаяПодсказка + 490 + Label + true + true + + Left + + + + НаименованиеКорреспондентаКонтекстноеМеню + 489 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПрефиксКорреспондента + 491 + true + true + + true + + + ПрефиксКорреспондента + + Top + + ПрефиксКорреспондентаРасширеннаяПодсказка + 493 + Label + true + true + + Left + + + + ПрефиксКорреспондентаКонтекстноеМеню + 492 + true + + InputField + true + Enter + true + Left + true + + 5 + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Представление программы-корреспондента</value> + + + ГруппаНастройкиПрограммыКорреспондентаПредставлениеРасширеннаяПодсказка + 517 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + Button + true + true + auto + Auto + Auto + + + + ГруппаФайлНастроекПодключенияДляКорреспондента + 631 + + ОбычныеКаналыСвязиВидТранспортаПоУмолчанию + 636 + true + true + + true + + + ОбычныеКаналыСвязиВидТранспортаПоУмолчанию + + Top + + ОбычныеКаналыСвязиВидТранспортаПоУмолчаниюРасширеннаяПодсказка + 638 + Label + true + true + + Left + + + + ОбычныеКаналыСвязиВидТранспортаПоУмолчаниюКонтекстноеМеню + 637 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + true + Normal + + + + ИмяФайлаНастроекПодключенияДляВыгрузки + 633 + true + true + + true + + + ИмяФайлаНастроекПодключенияДляВыгрузки + + Top + + ИмяФайлаНастроекПодключенияДляВыгрузкиРасширеннаяПодсказка + 635 + Label + true + true + + Left + + + + ИмяФайлаНастроекПодключенияДляВыгрузкиКонтекстноеМеню + 634 + true + + InputField + true + Enter + true + Left + true + + + StartChoice + ИмяФайлаНастроекПодключенияДляВыгрузкиНачалоВыбора + + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Прочее</value> + + + ГруппаФайлНастроекПодключенияДляКорреспондентаРасширеннаяПодсказка + 632 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + Button + true + true + auto + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Параметры синхронизации данных</value> + + + ГруппаОбщиеНастройкиСинхронизацииРасширеннаяПодсказка + 477 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + Button + WeakSeparation + true + true + auto + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница общие настройки синхронизации</value> + + + СтраницаОбщиеНастройкиСинхронизацииРасширеннаяПодсказка + 475 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаСохранениеНастроекПодключения + 400 + + ГруппаСохранениеНастроекПодключения + 402 + + Декорация8 + 404 + true + true + + true + + + Декорация8РасширеннаяПодсказка + 406 + Label + true + true + + Left + + + + Декорация8КонтекстноеМеню + 405 + true + + true + true + + + CommonPicture.ДлительнаяОперация48 + + + + + Декорация9 + 407 + + <key>ru</key> + <value>Выполняется сохранение настроек подключения. +Пожалуйста, подождите...</value> + + true + true + + true + + + Декорация9РасширеннаяПодсказка + 409 + Label + true + true + + Left + + + + Декорация9КонтекстноеМеню + 408 + true + + Label + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Сохранение настроек</value> + + + ГруппаСохранениеНастроекПодключенияРасширеннаяПодсказка + 403 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница сохранение настроек подключения</value> + + + СтраницаСохранениеНастроекПодключенияРасширеннаяПодсказка + 401 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаОкончание + 357 + + ГруппаЗавершениеНастройкиПодключения + 361 + + Группа27 + 577 + + Декорация6 + 397 + true + true + + true + + + Декорация6РасширеннаяПодсказка + 399 + Label + true + true + + Left + + + + Декорация6КонтекстноеМеню + 398 + true + + true + true + + + CommonPicture.Успешно32 + + + + + Декорация7 + 366 + + <key>ru</key> + <value>Настройки подключения в этой программе успешно сохранены.</value> + + true + true + + true + + + Декорация7РасширеннаяПодсказка + 368 + Label + true + true + + Left + + + + Декорация7КонтекстноеМеню + 367 + true + + Label + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Параметры синхронизации данных в этой программе</value> + + + Группа27РасширеннаяПодсказка + 578 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Center + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Настройка подключения завершена</value> + + + ГруппаЗавершениеНастройкиПодключенияРасширеннаяПодсказка + 362 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница окончание</value> + + + СтраницаОкончаниеРасширеннаяПодсказка + 358 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Панель основная</value> + + + ПанельОсновнаяРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + Pages + + Auto + +
    + + ПанельНавигации + 30 + + СтраницаНавигацияНачало + 34 + + КоманднаяПанельНавигацияНачалоСлева + 40 + true + true + + true + + + <key>ru</key> + <value>Командная панель навигация начало слева</value> + + + КоманднаяПанельНавигацияНачалоСлеваРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + CommandBar + + Left + + + + КоманднаяПанельНавигацияНачалоСправа + 42 + + КомандаНавигацияНачалоДалее + 44 + true + true + + true + + + КомандаНавигацияНачалоДалееРасширеннаяПодсказка + 45 + Label + true + true + + Left + + + Form.Command.КомандаДалее + Auto + true + true + true + UserCmds + Auto + + + КомандаНавигацияНачалоОтмена + 46 + true + true + + true + + + КомандаНавигацияНачалоОтменаРасширеннаяПодсказка + 47 + Label + true + true + + Left + + + Form.Command.КомандаОтмена + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель навигация начало справа</value> + + + КоманднаяПанельНавигацияНачалоСправаРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Страница навигация начало</value> + + + СтраницаНавигацияНачалоРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + Page + + AlwaysHorizontal + auto + false + + + + СтраницаНавигацияПродолжение + 36 + + КоманднаяПанельНавигацияПродолжениеСлева + 48 + + КомандаНавигацияПродолжениеНазад + 52 + true + true + + true + + + КомандаНавигацияПродолжениеНазадРасширеннаяПодсказка + 53 + Label + true + true + + Left + + + Form.Command.КомандаНазад + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель навигация продолжение слева</value> + + + КоманднаяПанельНавигацияПродолжениеСлеваРасширеннаяПодсказка + 49 + Label + true + true + + Left + + + CommandBar + + Left + + + + КоманднаяПанельНавигацияПродолжениеСправа + 50 + + КомандаНавигацияПродолжениеДалее + 54 + true + true + + true + + + КомандаНавигацияПродолжениеДалееРасширеннаяПодсказка + 55 + Label + true + true + + Left + + + Form.Command.КомандаДалее + Normal + Auto + true + true + UserCmds + Auto + + + КомандаНавигацияПродолжениеОтмена + 56 + true + true + + true + + + КомандаНавигацияПродолжениеОтменаРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + Form.Command.КомандаОтмена + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель навигация продолжение справа</value> + + + КоманднаяПанельНавигацияПродолжениеСправаРасширеннаяПодсказка + 51 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Страница навигация продолжение</value> + + + СтраницаНавигацияПродолжениеРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + Page + + AlwaysHorizontal + auto + false + + + + СтраницаНавигацияОкончание + 38 + + КоманднаяПанельНавигацияОкончаниеСлева + 58 + + КомандаНавигацияОкончаниеНазад + 62 + true + true + + true + + + КомандаНавигацияОкончаниеНазадРасширеннаяПодсказка + 63 + Label + true + true + + Left + + + Form.Command.КомандаНазад + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель навигация окончание слева</value> + + + КоманднаяПанельНавигацияОкончаниеСлеваРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + CommandBar + + Left + + + + КоманднаяПанельНавигацияОкончаниеСправа + 60 + + КомандаНавигацияОкончаниеГотово + 64 + true + true + + true + + + КомандаНавигацияОкончаниеГотовоРасширеннаяПодсказка + 65 + Label + true + true + + Left + + + Form.Command.КомандаГотово + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель навигация окончание справа</value> + + + КоманднаяПанельНавигацияОкончаниеСправаРасширеннаяПодсказка + 61 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Страница навигация окончание</value> + + + СтраницаНавигацияОкончаниеРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + Page + + AlwaysHorizontal + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Панель навигации</value> + + Bottom + + ПанельНавигацииРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + Pages + + Auto + + + None + false + + ФормаКоманднаяПанель + -1 + Left + true + + + OnOpen + ПриОткрытии + + + BeforeClose + ПередЗакрытием + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + Vertical + true + true + true + auto + true + + ПриложенияВСервисе + + <key>ru</key> + <value>Приложения в сервисе</value> + + 2 + + ValueTable + + + true + + + true + + + НаименованиеПриложения + + <key>ru</key> + <value>Наименование</value> + + 1 + + String + + + + true + + + true + + + + Префикс + + <key>ru</key> + <value>Префикс</value> + + 2 + + String + + 2 + + + + true + + + true + + + + РольКорреспондента + + <key>ru</key> + <value>Роль корреспондента</value> + + 3 + + String + + + + true + + + true + + + + ИмяПланаОбмена + + <key>ru</key> + <value>Имя плана обмена</value> + + 4 + + String + + + + true + + + true + + + + ФорматОбмена + + <key>ru</key> + <value>Формат обмена</value> + + 5 + + String + + + + true + + + true + + + + ВерсияКорреспондента + + <key>ru</key> + <value>Версия корреспондента</value> + + 6 + + String + + + + true + + + true + + + + ОбластьДанных + + <key>ru</key> + <value>Область данных</value> + + 7 + + Number + + 10 + true + + + + true + + + true + + + + КонечнаяТочкаКорреспондента + + <key>ru</key> + <value>Конечная точка корреспондента</value> + + 8 + + ExchangePlanRef.ОбменСообщениями + + + true + + + true + + + + КартинкаРежимИспользования + + <key>ru</key> + <value>Картинка режим использования</value> + + 9 + + Number + + 10 + + + + true + + + true + + + + НастройкаСинхронизацииВМенеджереСервиса + + <key>ru</key> + <value>Настройка синхронизации в менеджере сервиса</value> + + 10 + + Boolean + + + true + + + true + + + + ИдентификаторНастройки + + <key>ru</key> + <value>Идентификатор настройки</value> + + 11 + + String + + + + true + + + true + + + + ПрефиксКорреспондента + + <key>ru</key> + <value>Префикс корреспондента</value> + + 12 + + String + + + + true + + + true + + + + + ТаблицаПереходов + + <key>ru</key> + <value>Таблица переходов</value> + + 3 + + ValueTable + + + true + + + true + + + ПорядковыйНомерПерехода + + <key>ru</key> + <value>Порядковый номер перехода</value> + + 1 + + Number + + 3 + true + + + + true + + + true + + + + ИмяОсновнойСтраницы + + <key>ru</key> + <value>Имя основной страницы</value> + + 2 + + String + + + + true + + + true + + + + ИмяСтраницыДекорации + + <key>ru</key> + <value>Имя страницы декорации</value> + + 3 + + String + + + + true + + + true + + + + ИмяСтраницыНавигации + + <key>ru</key> + <value>Имя страницы навигации</value> + + 4 + + String + + + + true + + + true + + + + ИмяОбработчикаПриОткрытии + + <key>ru</key> + <value>Имя обработчика при открытии</value> + + 5 + + String + + + + true + + + true + + + + ИмяОбработчикаПриПереходеДалее + + <key>ru</key> + <value>Имя обработчика при переходе далее</value> + + 6 + + String + + + + true + + + true + + + + ИмяОбработчикаПриПереходеНазад + + <key>ru</key> + <value>Имя обработчика при переходе назад</value> + + 7 + + String + + + + true + + + true + + + + ДлительнаяОперация + + <key>ru</key> + <value>Длительная операция</value> + + 8 + + Boolean + + + true + + + true + + + + ИмяОбработчикаДлительнойОперации + + <key>ru</key> + <value>Имя обработчика длительной операции</value> + + 9 + + String + + + + true + + + true + + + + + ВидПодключения + + <key>ru</key> + <value>Вид подключения</value> + + 4 + + String + + + + true + + + true + + + + МодельСервиса + + <key>ru</key> + <value>Модель сервиса</value> + + 5 + + Boolean + + + true + + + true + + + + ИмяФайлаНастроекПодключенияДляЗагрузки + + <key>ru</key> + <value>Имя файла настроек подключения для загрузки</value> + + 6 + + String + + + + true + + + true + + + + ПорядковыйНомерПерехода + + <key>ru</key> + <value>Порядковый номер перехода</value> + + 7 + + Number + + 10 + + + + true + + + true + + + + ВнешнееСоединениеВариантРаботыИнформационнойБазы + + <key>ru</key> + <value>Вариант работы информационной базы</value> + + 8 + + String + + + + true + + + true + + + + ВнешнееСоединениеКаталогИнформационнойБазы + + <key>ru</key> + <value>Каталог</value> + + 9 + + String + + + + true + + + true + + + + ВнешнееСоединениеКластерСерверов + + <key>ru</key> + <value>Сервер</value> + + 10 + + String + + + + true + + + true + + + + ВнешнееСоединениеИмяИнформационнойБазы + + <key>ru</key> + <value>Имя базы</value> + + 11 + + String + + + + true + + + true + + + + ВнешнееСоединениеВидАутентификации + + <key>ru</key> + <value>Вид аутентификации</value> + + 12 + + String + + + + true + + + true + + + + ВнешнееСоединениеИмяПользователя + + <key>ru</key> + <value>Пользователь</value> + + 13 + + String + + + + true + + + true + + + + ВнешнееСоединениеПароль + + <key>ru</key> + <value>Пароль</value> + + 14 + + String + + + + true + + + true + + + + ИнтернетВебАдрес + + <key>ru</key> + <value>Адрес программы</value> + + 15 + + String + + + + true + + + true + + + + ИнтернетИмяПользователя + + <key>ru</key> + <value>Пользователь</value> + + 16 + + String + + 165 + + + + true + + + true + + + + ИнтернетПароль + + <key>ru</key> + <value>Пароль</value> + + 17 + + String + + + + true + + + true + + + + ИнтернетЗапомнитьПароль + + <key>ru</key> + <value>Запомнить пароль</value> + + 18 + + Boolean + + + true + + + true + + + + ОбычныеКаналыСвязиFILEКаталог + + <key>ru</key> + <value>Каталог</value> + + 22 + + String + + + + true + + + true + + + + ОбычныеКаналыСвязиАрхивироватьФайлы + + <key>ru</key> + <value>Архивировать файлы обмена</value> + + 23 + + Boolean + + + true + + + true + + + + ОбычныеКаналыСвязиТранслитерироватьИменаФайлов + + <key>ru</key> + <value>Транслитерировать имена файлов обмена</value> + + 24 + + Boolean + + + true + + + true + + + + ОбычныеКаналыСвязиПарольАрхива + + <key>ru</key> + <value>Пароль архива</value> + + 25 + + String + + + + true + + + true + + + + ОбычныеКаналыСвязиПарольАрхиваИзменен + + <key>ru</key> + <value>Обычные каналы связи пароль архива изменен</value> + + 26 + + Boolean + + + true + + + true + + + + ИспользоватьПарольДляАрхива + + <key>ru</key> + <value>Использовать пароль</value> + + 27 + + Boolean + + + true + + + true + + + + ОбычныеКаналыСвязиFTPПуть + + <key>ru</key> + <value>Адрес каталога</value> + + 28 + + String + + + + true + + + true + + + + ОбычныеКаналыСвязиFTPПорт + + <key>ru</key> + <value>Порт</value> + + 30 + + Number + + 5 + true + + + + true + + + true + + + + ОбычныеКаналыСвязиFTPПользователь + + <key>ru</key> + <value>Пользователь</value> + + 31 + + String + + 50 + + + + true + + + true + + + + ОбычныеКаналыСвязиFTPПароль + + <key>ru</key> + <value>Пароль</value> + + 32 + + String + + + + true + + + true + + + + ОбычныеКаналыСвязиИспользоватьПарольДляАрхива + + <key>ru</key> + <value>Пароль архива</value> + + 33 + + Boolean + + + true + + + true + + + + ОбычныеКаналыСвязиFILEИспользование + + <key>ru</key> + <value>Использовать локальный или сетевой каталог для синхронизации данных</value> + + 34 + + Boolean + + + true + + + true + + + + ОбычныеКаналыСвязиFTPИспользование + + <key>ru</key> + <value>Использовать каталог на FTP-сервере для синхронизации данных</value> + + 35 + + Boolean + + + true + + + true + + + + ОбычныеКаналыСвязиFTPПарольИзменен + + <key>ru</key> + <value>Обычные каналы связи FTPПароль изменен</value> + + 36 + + Boolean + + + true + + + true + + + + ОбычныеКаналыСвязиEMAILИспользование + + <key>ru</key> + <value>Использовать электронную почту для синхронизации данных</value> + + 37 + + Boolean + + + true + + + true + + + + ОбычныеКаналыСвязиEMAILУчетнаяЗапись + + <key>ru</key> + <value>Учетная запись</value> + + 38 + + CatalogRef.УчетныеЗаписиЭлектроннойПочты + + + true + + + true + + + + ОбычныеКаналыСвязиEMAILМаксимальныйДопустимыйРазмерВложения + + <key>ru</key> + <value>Максимальный допустимый размер вложения</value> + + 42 + + Number + + 10 + true + + + + true + + + true + + + + ОбычныеКаналыСвязиEMAILИспользоватьОграничениеРазмераВложения + + <key>ru</key> + <value>Ограничение размера вложения</value> + + 43 + + Boolean + + + true + + + true + + + + ОбычныеКаналыСвязиFTPПассивныйРежим + + <key>ru</key> + <value>Пассивный режим</value> + + 47 + + Boolean + + + true + + + true + + + + ОбычныеКаналыСвязиFTPМаксимальныйДопустимыйРазмерФайла + + <key>ru</key> + <value>Максимальный допустимый размер файла</value> + + 48 + + Number + + 10 + true + + + + true + + + true + + + + ОбычныеКаналыСвязиFTPИспользоватьОграничениеРазмераФайла + + <key>ru</key> + <value>Ограничение размера файла</value> + + 49 + + Boolean + + + true + + + true + + + + КраткаяИнформацияПоОбмену + + <key>ru</key> + <value>Краткая информация по обмену</value> + + 50 + + String + + + + true + + + true + + + + ИмяПланаОбмена + + <key>ru</key> + <value>Имя плана обмена</value> + + 51 + + String + + + + true + + + true + + + + ИдентификаторНастройки + + <key>ru</key> + <value>Идентификатор настройки</value> + + 52 + + String + + + + true + + + true + + + + НаименованиеКонфигурацииКорреспондента + + <key>ru</key> + <value>Наименование конфигурации корреспондента</value> + + 53 + + String + + + + true + + + true + + + + ИмяКонфигурацииКорреспондента + + <key>ru</key> + <value>Имя конфигурации корреспондента</value> + + 54 + + String + + + + true + + + true + + + + ПодробнаяИнформацияПоОбмену + + <key>ru</key> + <value>Подробная информация по обмену</value> + + 56 + + String + + + + true + + + true + + + + НастройкаРИБ + + <key>ru</key> + <value>Настройка РИБ</value> + + 57 + + Boolean + + + true + + + true + + + + Наименование + + <key>ru</key> + <value>Наименование</value> + + 58 + + String + + + + true + + + true + + + + Префикс + + <key>ru</key> + <value>Префикс</value> + + 59 + + String + + 2 + + + + true + + + true + + + + НаименованиеКорреспондента + + <key>ru</key> + <value>Наименование</value> + + 60 + + String + + + + true + + + true + + + + ПрефиксКорреспондента + + <key>ru</key> + <value>Префикс</value> + + 61 + + String + + 2 + + + + true + + + true + + + + ВерсияКонфигурацииКорреспондента + + <key>ru</key> + <value>Версия конфигурации корреспондента</value> + + 67 + + String + + + + true + + + true + + + + ИспользоватьПрефиксыДляНастройкиОбмена + + <key>ru</key> + <value>Использовать префиксы для настройки обмена</value> + + 68 + + Boolean + + + true + + + true + + + + ДоступнаНастройкаПараметровДоступаВИнтернет + + <key>ru</key> + <value>Доступна настройка параметров доступа в интернет</value> + + 77 + + Boolean + + + true + + + true + + + + НастройкаXDTO + + <key>ru</key> + <value>Настройка XDTO</value> + + 78 + + Boolean + + + true + + + true + + + + ПараметрыОбработчикаОжиданияПолученияСпискаПриложений + + <key>ru</key> + <value>Параметры обработчика ожидания получения списка приложений</value> + + 81 + + + true + + + true + + + + ПараметрыОбработчикаПроверкиПодключения + + <key>ru</key> + <value>Параметры обработчика проверки подключения</value> + + 82 + + + true + + + true + + + + ПараметрыОбработчикаОжиданияПроверкиПодключения + + <key>ru</key> + <value>Параметры обработчика ожидания проверки подключения</value> + + 83 + + + true + + + true + + + + ИмяФайлаНастроекПодключенияДляВыгрузки + + <key>ru</key> + <value>Имя файла настроек подключения</value> + + 85 + + String + + + + true + + + true + + + + ИмяФормыПомощникаНастройкиСинхронизацииДанных + + <key>ru</key> + <value>Имя формы помощника настройки синхронизации данных</value> + + 86 + + String + + + + true + + + true + + + + ОчередьПроверкиПодключенияОбычныеКаналыСвязи + + <key>ru</key> + <value>Очередь проверки подключения обычные каналы связи</value> + + 87 + + + true + + + true + + + + ПараметрыОбработчикаОжиданияСохраненияНастроекПодключения + + <key>ru</key> + <value>Параметры обработчика ожидания сохранения настроек подключения</value> + + 88 + + + true + + + true + + + + ПараметрыОбработчикаСохраненияНастроекПодключения + + <key>ru</key> + <value>Параметры обработчика сохранения настроек подключения</value> + + 89 + + + true + + + true + + + + ПродолжениеНастройкиВПодчиненномУзлеРИБ + + <key>ru</key> + <value>Продолжение настройки в подчиненном узле РИБ</value> + + 90 + + Boolean + + + true + + + true + + + + УзелОбмена + + <key>ru</key> + <value>Узел обмена</value> + + 91 + + ExchangePlanRef + + + true + + + true + + + + ОбычныеКаналыСвязиВидТранспортаПоУмолчанию + + <key>ru</key> + <value>Вид подключения по умолчанию</value> + + 92 + + String + + + + true + + + true + + + + ЗакрытьФормуБезусловно + + <key>ru</key> + <value>Закрыть форму безусловно</value> + + 93 + + Boolean + + + true + + + true + + + + ДоступноИзменениеНаименования + + <key>ru</key> + <value>Доступно изменение наименования</value> + + 94 + + Boolean + + + true + + + true + + + + ДоступноИзменениеПрефикса + + <key>ru</key> + <value>Доступно изменение префикса</value> + + 95 + + Boolean + + + true + + + true + + + + ДоступноИзменениеНаименованияКорреспондента + + <key>ru</key> + <value>Доступно изменение наименования корреспондента</value> + + 96 + + Boolean + + + true + + + true + + + + ДоступноИзменениеПрефиксаКорреспондента + + <key>ru</key> + <value>Доступно изменение префикса корреспондента</value> + + 97 + + Boolean + + + true + + + true + + + + ПараметрыОбработчикаПолученияСпискаПриложений + + <key>ru</key> + <value>Параметры обработчика получения списка приложений</value> + + 98 + + + true + + + true + + + + АдресВХранилищеНастройкиПодключения + + <key>ru</key> + <value>Адрес в хранилище настройки подключения</value> + + 99 + + + true + + + true + + + + ИмяФайлаНастроекДляПриемника + + <key>ru</key> + <value>Имя файла настроек для приемника</value> + + 100 + + String + + + + true + + + true + + + + СохранитьПараметрыПодключенияВФайл + + <key>ru</key> + <value>Сохранить параметры подключения в файл</value> + + 101 + + Boolean + + + true + + + true + + + + ИдентификаторИнформационнойБазыПриемника + + <key>ru</key> + <value>Идентификатор информационной базы приемника</value> + + 102 + + String + + 36 + + + + true + + + true + + + + ИдентификаторИнформационнойБазыИсточника + + <key>ru</key> + <value>Идентификатор информационной базы источника</value> + + 103 + + String + + 36 + + + + true + + + true + + + + КонечнаяТочкаКорреспондента + + <key>ru</key> + <value>Конечная точка корреспондента</value> + + 104 + + ExchangePlanRef.ОбменСообщениями + + + true + + + true + + + + ОбластьДанныхКорреспондента + + <key>ru</key> + <value>Область данных корреспондента</value> + + 105 + + Number + + 10 + + + + true + + + true + + + + ПрефиксОбласти + + <key>ru</key> + <value>Префикс области</value> + + 106 + + String + + 2 + + + + true + + + true + + + + ПрефиксОбластиКорреспондента + + <key>ru</key> + <value>Префикс области корреспондента</value> + + 107 + + String + + 2 + + + + true + + + true + + + + ЗагрузитьПараметрыПодключенияИзФайла + + <key>ru</key> + <value>Загрузить параметры подключения из файла</value> + + 109 + + Boolean + + + true + + + true + + + + ИмяФайлаПараметрыСинхронизацииПассивныйРежим + + <key>ru</key> + <value>Файл с настройками программы-корреспондента</value> + + 110 + + String + + + + true + + + true + + + + ДоступныеВидыТранспорта + + <key>ru</key> + <value>Доступные виды транспорта</value> + + 111 + + + true + + + true + + + + ВерсияФорматаОбмена + + <key>ru</key> + <value>Версия формата обмена</value> + + 112 + + String + + + + true + + + true + + + + ПоддерживаемыеОбъектыФормата + + <key>ru</key> + <value>Поддерживаемые объекты формата</value> + + 113 + + + true + + + true + + + + СпособНастройкиПодключения + + <key>ru</key> + <value>Способ настройки подключения</value> + + 114 + + String + + + + true + + + true + + + + ИмяФайлаНастроекXDTOКорреспондента + + <key>ru</key> + <value>Имя файла настроек XDTOКорреспондента</value> + + 1 + + String + + + + true + + + true + + + + ИмяПланаОбменаКорреспондента + + <key>ru</key> + <value>Имя плана обмена корреспондента</value> + + 115 + + String + + + + true + + + true + + + + ФорматОбмена + + <key>ru</key> + <value>Формат обмена</value> + + 116 + + String + + + + true + + + true + + + + ЕстьДанныеДляСопоставления + + <key>ru</key> + <value>Есть данные для сопоставления</value> + + 117 + + Boolean + + + true + + + true + + + + ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента + + <key>ru</key> + <value>Использовать префиксы для настройки обмена корреспондента</value> + + 118 + + Boolean + + + true + + + true + + + + ЭтоОбменСПриложениемВСервисе + + <key>ru</key> + <value>Это обмен с приложением в сервисе</value> + + 119 + + Boolean + + + true + + + true + + + + КомандаНазад + + <key>ru</key> + <value>< Назад</value> + + 1 + + ru + Команда назад + + + true + + + + КомандаНазад + + + Auto + Auto + + + КомандаДалее + + <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 + + + КомандаСправка + + <key>ru</key> + <value>Справка</value> + + 5 + + ru + Cправка + + + true + + + StdPicture.FormHelp + + + + КомандаСправка + + + TextPicture + Auto + Auto + + + ОбновитьСписокДоступныхПриложений + + <key>ru</key> + <value>Обновить</value> + + 6 + + ru + Обновить список доступных приложений + + + true + + + StdPicture.Refresh + + + + ОбновитьСписокДоступныхПриложений + + + TextPicture + Auto + Auto + + + ПараметрыДоступаВИнтернет + + <key>ru</key> + <value>Параметры доступа в интернет</value> + + 8 + + ru + Параметры доступа в интернет + + + true + + + + ПараметрыДоступаВИнтернет + + + Auto + Auto + + + ПодробноеОписаниеСинхронизацииДанных + + <key>ru</key> + <value>Подробное описание</value> + + 7 + + ru + Подробное описание синхронизации данных + + + true + + + CommonPicture.Информация + + + + ПодробноеОписаниеСинхронизацииДанных + + + Auto + Auto + + + СохранитьФайлНастроекПодключения + + <key>ru</key> + <value>Сохранить</value> + + 10 + + ru + Сохранить файл настроек подключения + + + true + + + StdPicture.Write + + TextPicture + Auto + Auto + + + + + +
    diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаПодключения/Module.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаПодключения/Module.bsl new file mode 100644 index 000000000..0112b2080 --- /dev/null +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаПодключения/Module.bsl @@ -0,0 +1,2471 @@ +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + ПроверитьВозможностьИспользованияФормы(Отказ); + + Если Отказ Тогда + Возврат; + КонецЕсли; + + ИнициализироватьРеквизитыФормы(); + + ИнициализироватьСвойстваФормы(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + УстановитьПорядковыйНомерПерехода(1); + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) + + ТекстПредупреждения = НСтр("ru = 'Прервать настройку параметров подключения для синхронизации данных?'"); + ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияПроизвольнойФормы( + ЭтотОбъект, Отказ, ЗавершениеРаботы, ТекстПредупреждения, "ЗакрытьФормуБезусловно"); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура СпособНастройкиПодключенияПриИзменении(Элемент) + + ПриИзмененииСпособНастройкиПодключения(); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузитьНастройкиПодключенияИзФайлаПриИзменении(Элемент) + + ПриИзмененииЗагрузитьНастройкиПодключенияИзФайла(); + +КонецПроцедуры + +&НаКлиенте +Процедура ИмяФайлаНастроекПодключенияДляЗагрузкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + НастройкиДиалога = Новый Структура; + НастройкиДиалога.Вставить("Заголовок", НСтр("ru = 'Выберите файл с настройками подключения'")); + НастройкиДиалога.Вставить("Фильтр", НСтр("ru = 'Файл настроек подключения (*.xml)'") + "|*.xml"); + + ОбменДаннымиКлиент.ОбработчикВыбораФайла(ЭтотОбъект, "ИмяФайлаНастроекПодключенияДляЗагрузки", СтандартнаяОбработка, НастройкиДиалога); + +КонецПроцедуры + +&НаКлиенте +Процедура ИмяФайлаНастроекXDTOКорреспондентаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + НастройкиДиалога = Новый Структура; + НастройкиДиалога.Вставить("Заголовок", НСтр("ru = 'Выберите файл с настройками корреспондента'")); + НастройкиДиалога.Вставить("Фильтр", НСтр("ru = 'Файл настроек корреспондента (*.xml)'") + "|*.xml"); + + ОбменДаннымиКлиент.ОбработчикВыбораФайла(ЭтотОбъект, "ИмяФайлаНастроекXDTOКорреспондента", СтандартнаяОбработка, НастройкиДиалога); + +КонецПроцедуры + +&НаКлиенте +Процедура ИмяФайлаНастроекПодключенияДляВыгрузкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + НастройкиДиалога = Новый Структура; + НастройкиДиалога.Вставить("Режим", РежимДиалогаВыбораФайла.Сохранение); + НастройкиДиалога.Вставить("Заголовок", НСтр("ru = 'Укажите файл для сохранения настроек подключения'")); + НастройкиДиалога.Вставить("Фильтр", НСтр("ru = 'Файл настроек подключения (*.xml)'") + "|*.xml"); + + ОбменДаннымиКлиент.ОбработчикВыбораФайла(ЭтотОбъект, "ИмяФайлаНастроекПодключенияДляВыгрузки", СтандартнаяОбработка, НастройкиДиалога); + +КонецПроцедуры + +&НаКлиенте +Процедура ВидПодключенияВнешнееСоединениеПриИзменении(Элемент) + + ПриИзмененииВидПодключения(); + +КонецПроцедуры + +&НаКлиенте +Процедура ВидПодключенияИнтернетПриИзменении(Элемент) + + ПриИзмененииВидПодключения(); + +КонецПроцедуры + +&НаКлиенте +Процедура ВидПодключенияОбычныеКаналыСвязиПриИзменении(Элемент) + + ПриИзмененииВидПодключения(); + +КонецПроцедуры + +&НаКлиенте +Процедура ВидПодключенияПассивныйРежимПриИзменении(Элемент) + + ПриИзмененииВидПодключения(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбычныеКаналыСвязиFILEКаталогНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ОбменДаннымиКлиент.ОбработчикВыбораФайловогоКаталога(ЭтотОбъект, "ОбычныеКаналыСвязиFILEКаталог", СтандартнаяОбработка); + +КонецПроцедуры + +&НаКлиенте +Процедура ВнешнееСоединениеКаталогИнформационнойБазыНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ОбменДаннымиКлиент.ОбработчикВыбораФайловогоКаталога(ЭтотОбъект, "ВнешнееСоединениеКаталогИнформационнойБазы", СтандартнаяОбработка); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбычныеКаналыСвязиFILEИспользованиеПриИзменении(Элемент) + + ПриИзмененииОбычныеКаналыСвязиFILEИспользование(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбычныеКаналыСвязиFTPИспользованиеПриИзменении(Элемент) + + ПриИзмененииОбычныеКаналыСвязиFTPИспользование(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбычныеКаналыСвязиEMAILИспользованиеПриИзменении(Элемент) + + ПриИзмененииОбычныеКаналыСвязиEMAILИспользование(); + +КонецПроцедуры + +&НаКлиенте +Процедура ВнешнееСоединениеВариантРаботыИнформационнойБазыФайловыйПриИзменении(Элемент) + + ПриИзмененииВнешнееСоединениеВариантРаботыИнформационнойБазы(); + +КонецПроцедуры + +&НаКлиенте +Процедура ВнешнееСоединениеВариантРаботыИнформационнойБазыКлиентСерверныйПриИзменении(Элемент) + + ПриИзмененииВнешнееСоединениеВариантРаботыИнформационнойБазы(); + +КонецПроцедуры + +&НаКлиенте +Процедура ВнешнееСоединениеВидАутентификации1СПредприятиеПриИзменении(Элемент) + + ПриИзмененииВнешнееСоединениеВидАутентификации(); + +КонецПроцедуры + +&НаКлиенте +Процедура ВнешнееСоединениеВидАутентификацииОперационнаяСистемаПриИзменении(Элемент) + + ПриИзмененииВнешнееСоединениеВидАутентификации(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбычныеКаналыСвязиАрхивироватьФайлыПриИзменении(Элемент) + + ПриИзмененииОбычныеКаналыСвязиАрхивироватьФайлы(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбычныеКаналыСвязиИспользоватьПарольАрхиваПриИзменении(Элемент) + + ПриИзмененииОбычныеКаналыСвязиИспользоватьПарольАрхива(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбычныеКаналыСвязиFTPИспользоватьОграничениеРазмераФайлаПриИзменении(Элемент) + + ПриИзмененииОбычныеКаналыСвязиFTPИспользоватьОграничениеРазмераФайла(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбычныеКаналыСвязиEMAILИспользоватьОграничениеРазмераВложенияПриИзменении(Элемент) + + ПриИзмененииОбычныеКаналыСвязиEMAILИспользоватьОграничениеРазмераВложения(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура КомандаДалее(Команда) + + ИзменитьПорядковыйНомерПерехода(+1); + +КонецПроцедуры + +&НаКлиенте +Процедура КомандаНазад(Команда) + + ИзменитьПорядковыйНомерПерехода(-1); + +КонецПроцедуры + +&НаКлиенте +Процедура КомандаГотово(Команда) + + ЗакрытьФормуБезусловно = Истина; + + Результат = Новый Структура; + Результат.Вставить("УзелОбмена", УзелОбмена); + Результат.Вставить("ЕстьДанныеДляСопоставления", ЕстьДанныеДляСопоставления); + + Если МодельСервиса Тогда + Результат.Вставить("ОбластьДанныхКорреспондента", ОбластьДанныхКорреспондента); + Результат.Вставить("ЭтоОбменСПриложениемВСервисе", ЭтоОбменСПриложениемВСервисе); + КонецЕсли; + + Закрыть(Результат); + +КонецПроцедуры + +&НаКлиенте +Процедура КомандаОтмена(Команда) + + Закрыть(); + +КонецПроцедуры + +&НаКлиенте +Процедура КомандаСправка(Команда) + + ОткрытьСправкуФормы(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьСписокДоступныхПриложений(Команда) + + НачатьПолучениеСпискаПриложенийДляПодключения(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПараметрыДоступаВИнтернет(Команда) + + ОбменДаннымиКлиент.ОткрытьФормуПараметровПроксиСервера(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПодробноеОписаниеСинхронизацииДанных(Команда) + + ОбменДаннымиКлиент.ОткрытьПодробноеОписаниеСинхронизации(ПодробнаяИнформацияПоОбмену); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область ПолучениеСпискаПриложенийДляПодключения + +&НаКлиенте +Процедура НачатьПолучениеСпискаПриложенийДляПодключения() + + Элементы.ПанельПриложенияВСервисе.Видимость = Истина; + Элементы.ПриложенияВСервисе.Доступность = Ложь; + Элементы.ПриложенияВСервисеОбновитьСписокДоступныхПриложений.Доступность = Ложь; + + Элементы.ПанельПриложенияВСервисе.ТекущаяСтраница = Элементы.СтраницаПриложенияВСервисеОжидание; + ПодключитьОбработчикОжидания("ПриНачалеПолученияСпискаПриложенийДляПодключения", 0.1, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриНачалеПолученияСпискаПриложенийДляПодключения() + + ПараметрыОбработчикаПолученияСпискаПриложений = Неопределено; + ПродолжитьОжидание = Ложь; + + ПриНачалеПолученияСпискаПриложенийДляПодключенияНаСервере(ПродолжитьОжидание); + + Если ПродолжитьОжидание Тогда + ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания( + ПараметрыОбработчикаОжиданияПолученияСпискаПриложений); + + ПодключитьОбработчикОжидания("ПриОжиданииПолученияСпискаПриложенийДляПодключения", + ПараметрыОбработчикаОжиданияПолученияСпискаПриложений.ТекущийИнтервал, Истина); + Иначе + ПриЗавершенииПолученияСпискаПриложенийДляПодключения(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОжиданииПолученияСпискаПриложенийДляПодключения() + + ПродолжитьОжидание = Ложь; + ПриОжиданииПолученияСпискаПриложенийДляПодключенияНаСервере(ПараметрыОбработчикаПолученияСпискаПриложений, ПродолжитьОжидание); + + Если ПродолжитьОжидание Тогда + ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияПолученияСпискаПриложений); + + ПодключитьОбработчикОжидания("ПриОжиданииПолученияСпискаПриложенийДляПодключения", + ПараметрыОбработчикаОжиданияПолученияСпискаПриложений.ТекущийИнтервал, Истина); + Иначе + ПараметрыОбработчикаОжиданияПолученияСпискаПриложений = Неопределено; + ПриЗавершенииПолученияСпискаПриложенийДляПодключения(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗавершенииПолученияСпискаПриложенийДляПодключения() + + Отказ = Ложь; + ПриЗавершенииПолученияСпискаПриложенийДляПодключенияНаСервере(Отказ); + + Элементы.ПриложенияВСервисеОбновитьСписокДоступныхПриложений.Доступность = Истина; + Элементы.ПриложенияВСервисе.Доступность = Истина; + + Если Отказ Тогда + Элементы.ПанельПриложенияВСервисе.ТекущаяСтраница = Элементы.СтраницаПриложенияВСервисеОшибка; + Иначе + Элементы.ПанельПриложенияВСервисе.Видимость = Ложь; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПриНачалеПолученияСпискаПриложенийДляПодключенияНаСервере(ПродолжитьОжидание) + + Если Не ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса") Тогда + Возврат; + КонецЕсли; + + МодульПомощникНастройки = ОбщегоНазначения.ОбщийМодуль( + "Обработки.ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете"); + + ПараметрыПомощника = Новый Структура; + ПараметрыПомощника.Вставить("Режим", "НеНастроенныеОбмены"); + ПараметрыПомощника.Вставить("ИмяПланаОбмена", ИмяПланаОбмена); + ПараметрыПомощника.Вставить("ИдентификаторНастройки", ИдентификаторНастройки); + + МодульПомощникНастройки.ПриНачалеПолученияСпискаПриложений(ПараметрыПомощника, + ПараметрыОбработчикаПолученияСпискаПриложений, ПродолжитьОжидание); + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ПриОжиданииПолученияСпискаПриложенийДляПодключенияНаСервере(ПараметрыОбработчика, ПродолжитьОжидание) + + Если Не ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса") Тогда + Возврат; + КонецЕсли; + + МодульПомощникНастройки = ОбщегоНазначения.ОбщийМодуль( + "Обработки.ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете"); + + МодульПомощникНастройки.ПриОжиданииПолученияСпискаПриложений( + ПараметрыОбработчика, ПродолжитьОжидание); + +КонецПроцедуры + +&НаСервере +Процедура ПриЗавершенииПолученияСпискаПриложенийДляПодключенияНаСервере(Отказ = Ложь) + + Если Не ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса") Тогда + Возврат; + КонецЕсли; + + МодульПомощникНастройки = ОбщегоНазначения.ОбщийМодуль( + "Обработки.ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете"); + + СтатусЗавершения = Неопределено; + МодульПомощникНастройки.ПриЗавершенииПолученияСпискаПриложений( + ПараметрыОбработчикаПолученияСпискаПриложений, СтатусЗавершения); + + Если СтатусЗавершения.Отказ Тогда + Отказ = Истина; + Возврат; + КонецЕсли; + + ТаблицаПриложений = СтатусЗавершения.Результат; + + ТаблицаПриложений.Колонки.Добавить("КартинкаРежимИспользования", Новый ОписаниеТипов("Число")); + ТаблицаПриложений.ЗаполнитьЗначения(1, "КартинкаРежимИспользования"); // приложение в Интернете + ПриложенияВСервисе.Загрузить(ТаблицаПриложений); + +КонецПроцедуры + +#КонецОбласти + +#Область ПроверкаПараметровПодключения + +&НаКлиенте +Процедура ПриНачалеПроверкиПодключенияOnline() + + ПродолжитьОжидание = Истина; + + Если ВидПодключения = "Интернет" Тогда + ПриНачалеПроверкиПодключенияНаСервере("WS", ПродолжитьОжидание); + ИначеЕсли ВидПодключения = "ВнешнееСоединение" Тогда + ПриНачалеПроверкиПодключенияНаСервере("COM", ПродолжитьОжидание); + КонецЕсли; + + Если ПродолжитьОжидание Тогда + ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания( + ПараметрыОбработчикаОжиданияПроверкиПодключения); + + ПодключитьОбработчикОжидания("ПриОжиданииПроверкиПодключенияOnline", + ПараметрыОбработчикаОжиданияПроверкиПодключения.ТекущийИнтервал, Истина); + Иначе + ПриЗавершенииПроверкиПодключенияOnline(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОжиданииПроверкиПодключенияOnline() + + ПродолжитьОжидание = Ложь; + ПриОжиданииПроверкиПодключенияНаСервере(ПараметрыОбработчикаПроверкиПодключения, ПродолжитьОжидание); + + Если ПродолжитьОжидание Тогда + ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияПроверкиПодключения); + + ПодключитьОбработчикОжидания("ПриОжиданииПроверкиПодключенияOnline", + ПараметрыОбработчикаОжиданияПроверкиПодключения.ТекущийИнтервал, Истина); + Иначе + ПараметрыОбработчикаОжиданияПроверкиПодключения = Неопределено; + ПриЗавершенииПроверкиПодключенияOnline(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗавершенииПроверкиПодключенияOnline() + + СообщениеОбОшибке = ""; + ПроверкаПодключенияВыполнена = Ложь; + ПриЗавершенииПроверкиПодключенияНаСервере(ПроверкаПодключенияВыполнена, СообщениеОбОшибке); + + Если ПроверкаПодключенияВыполнена Тогда + ИзменитьПорядковыйНомерПерехода(+1); + Иначе + ИзменитьПорядковыйНомерПерехода(-1); + + Если Не ПустаяСтрока(СообщениеОбОшибке) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке); + Иначе + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Не удалось подключиться к программе. Проверьте настройки подключения.'")); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриНачалеПроверкиПодключенияOffline() + + Если ОчередьПроверкиПодключенияОбычныеКаналыСвязи = Неопределено Тогда + + ОчередьПроверкиПодключенияОбычныеКаналыСвязи = Новый Структура; + + Если ОбычныеКаналыСвязиFILEИспользование Тогда + ОчередьПроверкиПодключенияОбычныеКаналыСвязи.Вставить("FILE"); + КонецЕсли; + + Если ОбычныеКаналыСвязиFTPИспользование Тогда + ОчередьПроверкиПодключенияОбычныеКаналыСвязи.Вставить("FTP"); + КонецЕсли; + + Если ОбычныеКаналыСвязиEMAILИспользование Тогда + ОчередьПроверкиПодключенияОбычныеКаналыСвязи.Вставить("EMAIL"); + КонецЕсли; + + КонецЕсли; + + ПроверяемыйВидТранспорта = Неопределено; + Для Каждого ЭлементПроверки Из ОчередьПроверкиПодключенияОбычныеКаналыСвязи Цикл + ПроверяемыйВидТранспорта = ЭлементПроверки.Ключ; + Прервать; + КонецЦикла; + + ПродолжитьОжидание = Истина; + ПриНачалеПроверкиПодключенияНаСервере(ПроверяемыйВидТранспорта, ПродолжитьОжидание); + + Если ПродолжитьОжидание Тогда + ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания( + ПараметрыОбработчикаОжиданияПроверкиПодключения); + + ПодключитьОбработчикОжидания("ПриОжиданииПроверкиПодключенияOffline", + ПараметрыОбработчикаОжиданияПроверкиПодключения.ТекущийИнтервал, Истина); + Иначе + ПриЗавершенииПроверкиПодключенияOffline(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОжиданииПроверкиПодключенияOffline() + + ПродолжитьОжидание = Ложь; + ПриОжиданииПроверкиПодключенияНаСервере(ПараметрыОбработчикаПроверкиПодключения, ПродолжитьОжидание); + + Если ПродолжитьОжидание Тогда + ПодключитьОбработчикОжидания("ПриОжиданииПроверкиПодключенияOffline", + ПараметрыОбработчикаОжиданияПроверкиПодключения.ТекущийИнтервал, Истина); + Иначе + ПараметрыОбработчикаОжиданияПроверкиПодключения = Неопределено; + ПриЗавершенииПроверкиПодключенияOffline(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗавершенииПроверкиПодключенияOffline() + + СообщениеОбОшибке = ""; + ПроверкаПодключенияВыполнена = Ложь; + ПриЗавершенииПроверкиПодключенияНаСервере(ПроверкаПодключенияВыполнена, СообщениеОбОшибке); + + Если ПроверкаПодключенияВыполнена Тогда + + ПроверяемыйВидТранспорта = Неопределено; + Для Каждого ЭлементПроверки Из ОчередьПроверкиПодключенияОбычныеКаналыСвязи Цикл + ПроверяемыйВидТранспорта = ЭлементПроверки.Ключ; + Прервать; + КонецЦикла; + ОчередьПроверкиПодключенияОбычныеКаналыСвязи.Удалить(ПроверяемыйВидТранспорта); + + Если ОчередьПроверкиПодключенияОбычныеКаналыСвязи.Количество() > 0 Тогда + ПриНачалеПроверкиПодключенияOffline(); + Иначе + ОчередьПроверкиПодключенияОбычныеКаналыСвязи = Неопределено; + ИзменитьПорядковыйНомерПерехода(+1); + КонецЕсли; + + Иначе + + ПроверяемыйВидТранспорта = Неопределено; + ОчередьПроверкиПодключенияОбычныеКаналыСвязи = Неопределено; + ИзменитьПорядковыйНомерПерехода(-1); + + Если Не ПустаяСтрока(СообщениеОбОшибке) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке); + Иначе + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось подключиться к программе. Проверьте настройки подключения %1.'"), ПроверяемыйВидТранспорта)); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриНачалеПроверкиПодключенияВМоделиСервиса() + + ПродолжитьОжидание = Истина; + ПриНачалеПроверкиПодключенияВМоделиСервисаНаСервере(ПродолжитьОжидание); + + Если ПродолжитьОжидание Тогда + ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания( + ПараметрыОбработчикаОжиданияПроверкиПодключения); + + ПодключитьОбработчикОжидания("ПриОжиданииПроверкиПодключенияВМоделиСервиса", + ПараметрыОбработчикаОжиданияПроверкиПодключения.ТекущийИнтервал, Истина); + Иначе + ПриЗавершенииПроверкиПодключенияВМоделиСервиса(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОжиданииПроверкиПодключенияВМоделиСервиса() + + ПродолжитьОжидание = Ложь; + ПриОжиданииПроверкиПодключенияВМоделиСервисаНаСервере(ПараметрыОбработчикаПроверкиПодключения, ПродолжитьОжидание); + + Если ПродолжитьОжидание Тогда + ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияПроверкиПодключения); + + ПодключитьОбработчикОжидания("ПриОжиданииПроверкиПодключенияВМоделиСервиса", + ПараметрыОбработчикаОжиданияПроверкиПодключения.ТекущийИнтервал, Истина); + Иначе + ПриЗавершенииПроверкиПодключенияВМоделиСервиса(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗавершенииПроверкиПодключенияВМоделиСервиса() + + СообщениеОбОшибке = ""; + ПроверкаПодключенияВыполнена = Ложь; + ПриЗавершенииПроверкиПодключенияВМоделиСервисаНаСервере(ПроверкаПодключенияВыполнена, СообщениеОбОшибке); + + Если ПроверкаПодключенияВыполнена Тогда + ИзменитьПорядковыйНомерПерехода(+1); + Иначе + ИзменитьПорядковыйНомерПерехода(-1); + + Если Не ПустаяСтрока(СообщениеОбОшибке) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке); + Иначе + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Не удалось подключиться к программе. Проверьте настройки подключения.'")); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПриНачалеПроверкиПодключенияНаСервере(ВидТранспорта, ПродолжитьОжидание) + + СтруктураНастроек = Новый Структура; + ЗаполнитьСтруктуруПараметровПодключенияПомощника(СтруктураНастроек); + СтруктураНастроек.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена[ВидТранспорта]; + + Обработки.ПомощникСозданияОбменаДанными.ПриНачалеПроверкиПодключения( + СтруктураНастроек, ПараметрыОбработчикаПроверкиПодключения, ПродолжитьОжидание); + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ПриОжиданииПроверкиПодключенияНаСервере(ПараметрыОбработчика, ПродолжитьОжидание) + + ПродолжитьОжидание = Ложь; + Обработки.ПомощникСозданияОбменаДанными.ПриОжиданииПроверкиПодключения(ПараметрыОбработчика, ПродолжитьОжидание); + +КонецПроцедуры + +&НаСервере +Процедура ПриЗавершенииПроверкиПодключенияНаСервере(ПроверкаПодключенияВыполнена, СообщениеОбОшибке = "") + + СтатусЗавершения = Неопределено; + Обработки.ПомощникСозданияОбменаДанными.ПриЗавершенииПроверкиПодключения( + ПараметрыОбработчикаПроверкиПодключения, СтатусЗавершения); + + Если СтатусЗавершения.Отказ Тогда + ПроверкаПодключенияВыполнена = Ложь; + СообщениеОбОшибке = СтатусЗавершения.СообщениеОбОшибке; + Возврат; + Иначе + ПроверкаПодключенияВыполнена = СтатусЗавершения.Результат.ПодключениеУстановлено + И СтатусЗавершения.Результат.ПодключениеРазрешено; + + Если Не ПроверкаПодключенияВыполнена + И Не ПустаяСтрока(СтатусЗавершения.Результат.СообщениеОбОшибке) Тогда + СообщениеОбОшибке = СтатусЗавершения.Результат.СообщениеОбОшибке; + КонецЕсли; + + Если ПроверкаПодключенияВыполнена + И СтатусЗавершения.Результат.ПараметрыКорреспондентаПолучены Тогда + ЗаполнитьПараметрыКорреспондента(СтатусЗавершения.Результат.ПараметрыКорреспондента); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПриНачалеПроверкиПодключенияВМоделиСервисаНаСервере(ПродолжитьОжидание) + + НастройкиПодключения = Новый Структура; + НастройкиПодключения.Вставить("ИмяПланаОбмена", ИмяПланаОбмена); + НастройкиПодключения.Вставить("НаименованиеКорреспондента", НаименованиеКорреспондента); + НастройкиПодключения.Вставить("ОбластьДанныхКорреспондента", ОбластьДанныхКорреспондента); + + МодульПомощникНастройки = ОбщегоНазначения.ОбщийМодуль( + "Обработки.ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете"); + + ПараметрыОбработчикаПроверкиПодключения = Неопределено; + МодульПомощникНастройки.ПриНачалеПолученияОбщихДанныхУзловКорреспондента(НастройкиПодключения, + ПараметрыОбработчикаПроверкиПодключения, ПродолжитьОжидание); + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ПриОжиданииПроверкиПодключенияВМоделиСервисаНаСервере(ПараметрыОбработчика, ПродолжитьОжидание) + + МодульПомощникНастройки = ОбщегоНазначения.ОбщийМодуль( + "Обработки.ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете"); + + ПродолжитьОжидание = Ложь; + МодульПомощникНастройки.ПриОжиданииПолученияОбщихДанныхУзловКорреспондента(ПараметрыОбработчика, ПродолжитьОжидание); + +КонецПроцедуры + +&НаСервере +Процедура ПриЗавершенииПроверкиПодключенияВМоделиСервисаНаСервере(ПроверкаПодключенияВыполнена, СообщениеОбОшибке = "") + + СтатусЗавершения = Неопределено; + + МодульПомощникНастройки = ОбщегоНазначения.ОбщийМодуль( + "Обработки.ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете"); + + МодульПомощникНастройки.ПриЗавершенииПолученияОбщихДанныхУзловКорреспондента( + ПараметрыОбработчикаПроверкиПодключения, СтатусЗавершения); + ПараметрыОбработчикаПроверкиПодключения = Неопределено; + + Если СтатусЗавершения.Отказ Тогда + ПроверкаПодключенияВыполнена = Ложь; + СообщениеОбОшибке = СтатусЗавершения.СообщениеОбОшибке; + Возврат; + Иначе + ПроверкаПодключенияВыполнена = СтатусЗавершения.Результат.ПараметрыКорреспондентаПолучены; + + Если Не ПроверкаПодключенияВыполнена Тогда + СообщениеОбОшибке = СтатусЗавершения.Результат.СообщениеОбОшибке; + Возврат; + КонецЕсли; + + Если ПроверкаПодключенияВыполнена Тогда + ЗаполнитьПараметрыКорреспондента(СтатусЗавершения.Результат.ПараметрыКорреспондента, Истина); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СохранениеНастроекПодключения + +&НаКлиенте +Процедура ПриНачалеСохраненияНастроекПодключения() + + ПродолжитьОжидание = Истина; + ПриНачалеСохраненияНастроекПодключенияНаСервере(ПродолжитьОжидание); + + Если ПродолжитьОжидание Тогда + ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания( + ПараметрыОбработчикаОжиданияСохраненияНастроекПодключения); + + ПодключитьОбработчикОжидания("ПриОжиданииСохраненияНастроекПодключения", + ПараметрыОбработчикаОжиданияСохраненияНастроекПодключения.ТекущийИнтервал, Истина); + Иначе + ПриЗавершенииСохраненияНастроекПодключения(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОжиданииСохраненияНастроекПодключения() + + ПродолжитьОжидание = Ложь; + ПриОжиданииСохраненияНастроекПодключенияНаСервере(МодельСервиса, ПараметрыОбработчикаСохраненияНастроекПодключения, ПродолжитьОжидание); + + Если ПродолжитьОжидание Тогда + ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияСохраненияНастроекПодключения); + + ПодключитьОбработчикОжидания("ПриОжиданииСохраненияНастроекПодключения", + ПараметрыОбработчикаОжиданияСохраненияНастроекПодключения.ТекущийИнтервал, Истина); + Иначе + ПриЗавершенииСохраненияНастроекПодключения(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗавершенииСохраненияНастроекПодключения() + + НастройкиПодключенияСохранены = Ложь; + СообщениеОбОшибке = ""; + АдресВХранилищеНастройкиПодключения = Неопределено; + + ПриЗавершенииСохраненияНастроекПодключенияНаСервере(НастройкиПодключенияСохранены, СообщениеОбОшибке); + + Если НастройкиПодключенияСохранены Тогда + + Если СохранитьПараметрыПодключенияВФайл + И Не АдресВХранилищеНастройкиПодключения = Неопределено Тогда + ДанныеФайла = ПолучитьИзВременногоХранилища(АдресВХранилищеНастройкиПодключения); + ДанныеФайла.Записать(ИмяФайлаНастроекПодключенияДляВыгрузки); + КонецЕсли; + + ИзменитьПорядковыйНомерПерехода(+1); + Оповестить("Запись_УзелПланаОбмена"); + Иначе + ИзменитьПорядковыйНомерПерехода(-1); + + Если Не ПустаяСтрока(СообщениеОбОшибке) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке); + Иначе + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Не удалось сохранить настройки подключения.'")); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПриНачалеСохраненияНастроекПодключенияНаСервере(ПродолжитьОжидание) + + Если ЭтоОбменСПриложениемВСервисе Тогда + + МодульОбменДаннымиВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиВМоделиСервиса"); + + НастройкиПодключения = Новый Структура; + НастройкиПодключения.Вставить("ИмяПланаОбмена", ИмяПланаОбменаКорреспондента); + НастройкиПодключения.Вставить("ИмяПланаОбменаКорреспондента", ИмяПланаОбмена); + + НастройкиПодключения.Вставить("ИдентификаторНастройки", ИдентификаторНастройки); + + НастройкиПодключения.Вставить("ФорматОбмена", ФорматОбмена); + + НастройкиПодключения.Вставить("Наименование", Наименование); + НастройкиПодключения.Вставить("НаименованиеКорреспондента", НаименованиеКорреспондента); + + НастройкиПодключения.Вставить("Префикс", Префикс); + НастройкиПодключения.Вставить("ПрефиксКорреспондента", ПрефиксКорреспондента); + + НастройкиПодключения.Вставить("ИдентификаторИнформационнойБазыИсточника", ИдентификаторИнформационнойБазыИсточника); + НастройкиПодключения.Вставить("ИдентификаторИнформационнойБазыПриемника", ИдентификаторИнформационнойБазыПриемника); + + НастройкиПодключения.Вставить("КонечнаяТочкаКорреспондента", КонечнаяТочкаКорреспондента); + + НастройкиПодключения.Вставить("Корреспондент"); + НастройкиПодключения.Вставить("ОбластьДанныхКорреспондента", ОбластьДанныхКорреспондента); + + Если НастройкаXDTO Тогда + НастройкиПодключения.Вставить("НастройкиXDTOКорреспондента", Новый Структура); + НастройкиПодключения.НастройкиXDTOКорреспондента.Вставить("ПоддерживаемыеВерсии", Новый Массив); + НастройкиПодключения.НастройкиXDTOКорреспондента.Вставить("ПоддерживаемыеОбъекты", ПоддерживаемыеОбъектыФормата); + + НастройкиПодключения.НастройкиXDTOКорреспондента.ПоддерживаемыеВерсии.Добавить(ВерсияФорматаОбмена); + КонецЕсли; + + МодульПомощникНастройки = ОбщегоНазначения.ОбщийМодуль( + "Обработки.ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете"); + Иначе + + // Настройки подключения в формате структуры реквизитов помощника создания обмена данными. + НастройкиПодключения = Новый Структура; + ЗаполнитьСтруктуруПараметровПодключенияПомощника(НастройкиПодключения); + + МодульПомощникНастройки = ОбщегоНазначения.ОбщийМодуль("Обработки.ПомощникСозданияОбменаДанными"); + + КонецЕсли; + + ПараметрыОбработчикаСохраненияНастроекПодключения = Неопределено; + МодульПомощникНастройки.ПриНачалеСохраненияНастроекПодключения(НастройкиПодключения, + ПараметрыОбработчикаСохраненияНастроекПодключения, ПродолжитьОжидание); + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ПриОжиданииСохраненияНастроекПодключенияНаСервере(МодельСервиса, ПараметрыОбработчика, ПродолжитьОжидание) + + Если МодельСервиса Тогда + МодульПомощникНастройки = ОбщегоНазначения.ОбщийМодуль( + "Обработки.ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете"); + Иначе + МодульПомощникНастройки = ОбщегоНазначения.ОбщийМодуль("Обработки.ПомощникСозданияОбменаДанными"); + КонецЕсли; + + ПродолжитьОжидание = Ложь; + МодульПомощникНастройки.ПриОжиданииСохраненияНастроекПодключения(ПараметрыОбработчика, ПродолжитьОжидание); + +КонецПроцедуры + +&НаСервере +Процедура ПриЗавершенииСохраненияНастроекПодключенияНаСервере(НастройкиПодключенияСохранены, СообщениеОбОшибке) + + СтатусЗавершения = Неопределено; + + Если МодельСервиса Тогда + МодульПомощникНастройки = ОбщегоНазначения.ОбщийМодуль( + "Обработки.ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете"); + Иначе + МодульПомощникНастройки = ОбщегоНазначения.ОбщийМодуль("Обработки.ПомощникСозданияОбменаДанными"); + КонецЕсли; + + МодульПомощникНастройки.ПриЗавершенииСохраненияНастроекПодключения( + ПараметрыОбработчикаСохраненияНастроекПодключения, СтатусЗавершения); + ПараметрыОбработчикаСохраненияНастроекПодключения = Неопределено; + + Если СтатусЗавершения.Отказ Тогда + НастройкиПодключенияСохранены = Ложь; + СообщениеОбОшибке = СтатусЗавершения.СообщениеОбОшибке; + Возврат; + Иначе + НастройкиПодключенияСохранены = СтатусЗавершения.Результат.НастройкиПодключенияСохранены; + + Если Не НастройкиПодключенияСохранены Тогда + СообщениеОбОшибке = СтатусЗавершения.Результат.СообщениеОбОшибке; + Возврат; + КонецЕсли; + + УзелОбмена = СтатусЗавершения.Результат.УзелОбмена; + + Если СохранитьПараметрыПодключенияВФайл Тогда + ВременныйФайл = ПолучитьИмяВременногоФайла("xml"); + + Запись = Новый ЗаписьТекста; + Запись.Открыть(ВременныйФайл, "UTF-8"); + Запись.Записать(СтатусЗавершения.Результат.СтрокаНастроекПодключенияXML); + Запись.Закрыть(); + + АдресВХранилищеНастройкиПодключения = ПоместитьВоВременноеХранилище( + Новый ДвоичныеДанные(ВременныйФайл), УникальныйИдентификатор); + + УдалитьФайлы(ВременныйФайл); + КонецЕсли; + + Если Не МодельСервиса Тогда + ЕстьДанныеДляСопоставления = СтатусЗавершения.Результат.ЕстьДанныеДляСопоставления; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +&НаСервере +Процедура ЗаполнитьСтруктуруПараметровПодключенияПомощника(СтруктураНастроекПомощника) + + // Преобразование структуры реквизитов формы в структуру реквизитов помощника. + СтруктураНастроекПомощника.Вставить("ИмяПланаОбмена", ИмяПланаОбмена); + СтруктураНастроекПомощника.Вставить("ИмяПланаОбменаКорреспондента", ИмяПланаОбменаКорреспондента); + + СтруктураНастроекПомощника.Вставить("ВариантНастройкиОбмена", ИдентификаторНастройки); + + СтруктураНастроекПомощника.Вставить("ФорматОбмена", ФорматОбмена); + + Если ЗначениеЗаполнено(УзелОбмена) Тогда + СтруктураНастроекПомощника.Вставить("Корреспондент", УзелОбмена); + КонецЕсли; + + Если ПродолжениеНастройкиВПодчиненномУзлеРИБ + Или ЗагрузитьПараметрыПодключенияИзФайла Тогда + СтруктураНастроекПомощника.Вставить("ВариантРаботыМастера", "ПродолжитьНастройкуОбменаДанными"); + Иначе + СтруктураНастроекПомощника.Вставить("ВариантРаботыМастера", "НастроитьНовыйОбменДанными"); + КонецЕсли; + + СтруктураНастроекПомощника.Вставить("СсылкаНового", Неопределено); + + СтруктураНастроекПомощника.Вставить("КодПредопределенногоУзла", ИдентификаторИнформационнойБазыИсточника); + + СтруктураНастроекПомощника.Вставить("КодНовогоУзлаВторойБазы", ИдентификаторИнформационнойБазыПриемника); + СтруктураНастроекПомощника.Вставить("КодУзлаКорреспондента", ИдентификаторИнформационнойБазыПриемника); + + СтруктураНастроекПомощника.Вставить("НаименованиеЭтойБазы", Наименование); + СтруктураНастроекПомощника.Вставить("НаименованиеВторойБазы", НаименованиеКорреспондента); + + СтруктураНастроекПомощника.Вставить("ПрефиксИнформационнойБазыИсточника", Префикс); + СтруктураНастроекПомощника.Вставить("ПрефиксИнформационнойБазыПриемника", ПрефиксКорреспондента); + + СтруктураНастроекПомощника.Вставить("УзелИнформационнойБазы", УзелОбмена); + + СтруктураНастроекПомощника.Вставить("ИспользоватьПрефиксыДляНастройкиОбмена", ИспользоватьПрефиксыДляНастройкиОбмена); + СтруктураНастроекПомощника.Вставить("ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента", ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента); + + СтруктураНастроекПомощника.Вставить("ИдентификаторИнформационнойБазыИсточника", ИдентификаторИнформационнойБазыИсточника); + СтруктураНастроекПомощника.Вставить("ИдентификаторИнформационнойБазыПриемника", ИдентификаторИнформационнойБазыПриемника); + + СтруктураНастроекПомощника.Вставить("ВерсияФорматаФайлаНастроекОбменаДанными", + Обработки.ПомощникСозданияОбменаДанными.ВерсияФорматаНастроекОбменаДанными()); + + СтруктураНастроекПомощника.Вставить("ВерсияФорматаОбмена", ВерсияФорматаОбмена); + СтруктураНастроекПомощника.Вставить("ПоддерживаемыеОбъектыФормата", ПоддерживаемыеОбъектыФормата); + + // Настройки транспорта. + СтруктураНастроекПомощника.Вставить("COMАутентификацияОперационнойСистемы", + ВнешнееСоединениеВидАутентификации = "ОперационнаяСистема"); + СтруктураНастроекПомощника.Вставить("COMВариантРаботыИнформационнойБазы", + ?(ВнешнееСоединениеВариантРаботыИнформационнойБазы = "Файловый", 0, 1)); + СтруктураНастроекПомощника.Вставить("COMИмяИнформационнойБазыНаСервере1СПредприятия", + ВнешнееСоединениеИмяИнформационнойБазы); + СтруктураНастроекПомощника.Вставить("COMИмяПользователя", + ВнешнееСоединениеИмяПользователя); + СтруктураНастроекПомощника.Вставить("COMИмяСервера1СПредприятия", + ВнешнееСоединениеКластерСерверов); + СтруктураНастроекПомощника.Вставить("COMКаталогИнформационнойБазы", + ВнешнееСоединениеКаталогИнформационнойБазы); + СтруктураНастроекПомощника.Вставить("COMПарольПользователя", + ВнешнееСоединениеПароль); + + СтруктураНастроекПомощника.Вставить("EMAILМаксимальныйДопустимыйРазмерСообщения", + ОбычныеКаналыСвязиEMAILМаксимальныйДопустимыйРазмерВложения); + СтруктураНастроекПомощника.Вставить("EMAILСжиматьФайлИсходящегоСообщения", + ОбычныеКаналыСвязиАрхивироватьФайлы); + СтруктураНастроекПомощника.Вставить("EMAILУчетнаяЗапись", + ОбычныеКаналыСвязиEMAILУчетнаяЗапись); + СтруктураНастроекПомощника.Вставить("EMAILТранслитерироватьИменаФайловСообщенийОбмена", + ОбычныеКаналыСвязиТранслитерироватьИменаФайлов); + + СтруктураНастроекПомощника.Вставить("FILEКаталогОбменаИнформацией", + ОбычныеКаналыСвязиFILEКаталог); + СтруктураНастроекПомощника.Вставить("FILEСжиматьФайлИсходящегоСообщения", + ОбычныеКаналыСвязиАрхивироватьФайлы); + СтруктураНастроекПомощника.Вставить("FILEТранслитерироватьИменаФайловСообщенийОбмена", + ОбычныеКаналыСвязиТранслитерироватьИменаФайлов); + + СтруктураНастроекПомощника.Вставить("FTPСжиматьФайлИсходящегоСообщения", + ОбычныеКаналыСвязиАрхивироватьФайлы); + СтруктураНастроекПомощника.Вставить("FTPСоединениеМаксимальныйДопустимыйРазмерСообщения", + ОбычныеКаналыСвязиFTPМаксимальныйДопустимыйРазмерФайла); + СтруктураНастроекПомощника.Вставить("FTPСоединениеПароль", + ОбычныеКаналыСвязиFTPПароль); + СтруктураНастроекПомощника.Вставить("FTPСоединениеПассивноеСоединение", + ОбычныеКаналыСвязиFTPПассивныйРежим); + СтруктураНастроекПомощника.Вставить("FTPСоединениеПользователь", + ОбычныеКаналыСвязиFTPПользователь); + СтруктураНастроекПомощника.Вставить("FTPСоединениеПорт", + ОбычныеКаналыСвязиFTPПорт); + СтруктураНастроекПомощника.Вставить("FTPСоединениеПуть", + ОбычныеКаналыСвязиFTPПуть); + СтруктураНастроекПомощника.Вставить("FTPТранслитерироватьИменаФайловСообщенийОбмена", + ОбычныеКаналыСвязиТранслитерироватьИменаФайлов); + + СтруктураНастроекПомощника.Вставить("WSURLВебСервиса", ИнтернетВебАдрес); + СтруктураНастроекПомощника.Вставить("WSЗапомнитьПароль", ИнтернетЗапомнитьПароль); + СтруктураНастроекПомощника.Вставить("WSИмяПользователя", ИнтернетИмяПользователя); + СтруктураНастроекПомощника.Вставить("WSПароль", ИнтернетПароль); + + Если ВидПодключения = "Интернет" Тогда + СтруктураНастроекПомощника.Вставить("ВидТранспортаСообщенийОбмена", Перечисления.ВидыТранспортаСообщенийОбмена.WS); + ИначеЕсли ВидПодключения = "ВнешнееСоединение" Тогда + СтруктураНастроекПомощника.Вставить("ВидТранспортаСообщенийОбмена", Перечисления.ВидыТранспортаСообщенийОбмена.COM); + ИначеЕсли ВидПодключения = "ОбычныеКаналыСвязи" Тогда + Если Не ЗначениеЗаполнено(ОбычныеКаналыСвязиВидТранспортаПоУмолчанию) Тогда + Если ОбычныеКаналыСвязиFILEИспользование Тогда + СтруктураНастроекПомощника.Вставить("ВидТранспортаСообщенийОбмена", Перечисления.ВидыТранспортаСообщенийОбмена.FILE); + ИначеЕсли ОбычныеКаналыСвязиFTPИспользование Тогда + СтруктураНастроекПомощника.Вставить("ВидТранспортаСообщенийОбмена", Перечисления.ВидыТранспортаСообщенийОбмена.FTP); + ИначеЕсли ОбычныеКаналыСвязиEMAILИспользование Тогда + СтруктураНастроекПомощника.Вставить("ВидТранспортаСообщенийОбмена", Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL); + КонецЕсли; + ИначеЕсли ОбычныеКаналыСвязиВидТранспортаПоУмолчанию = "FILE" Тогда + СтруктураНастроекПомощника.Вставить("ВидТранспортаСообщенийОбмена", Перечисления.ВидыТранспортаСообщенийОбмена.FILE); + ИначеЕсли ОбычныеКаналыСвязиВидТранспортаПоУмолчанию = "FTP" Тогда + СтруктураНастроекПомощника.Вставить("ВидТранспортаСообщенийОбмена", Перечисления.ВидыТранспортаСообщенийОбмена.FTP); + ИначеЕсли ОбычныеКаналыСвязиВидТранспортаПоУмолчанию = "EMAIL" Тогда + СтруктураНастроекПомощника.Вставить("ВидТранспортаСообщенийОбмена", Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL); + КонецЕсли; + ИначеЕсли ВидПодключения = "ПассивныйРежим" Тогда + СтруктураНастроекПомощника.Вставить("ВидТранспортаСообщенийОбмена", Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим); + КонецЕсли; + + СтруктураНастроекПомощника.Вставить("ИспользоватьПараметрыТранспортаCOM", ВидПодключения = "ВнешнееСоединение"); + + СтруктураНастроекПомощника.Вставить("ИспользоватьПараметрыТранспортаEMAIL", ОбычныеКаналыСвязиEMAILИспользование); + СтруктураНастроекПомощника.Вставить("ИспользоватьПараметрыТранспортаFILE", ОбычныеКаналыСвязиFILEИспользование); + СтруктураНастроекПомощника.Вставить("ИспользоватьПараметрыТранспортаFTP", ОбычныеКаналыСвязиFTPИспользование); + + СтруктураНастроекПомощника.Вставить("ПарольАрхиваСообщенияОбмена", ОбычныеКаналыСвязиПарольАрхива); + +КонецПроцедуры + +&НаСервере +Процедура ПрочитатьСтруктуруПараметровПодключенияПомощника(СтруктураНастроекПомощника) + + // Преобразование структуры реквизитов помощника в структуру реквизитов формы. + ИдентификаторИнформационнойБазыИсточника = СтруктураНастроекПомощника.КодПредопределенногоУзла; + ИдентификаторИнформационнойБазыПриемника = СтруктураНастроекПомощника.КодНовогоУзлаВторойБазы; + + ИмяПланаОбменаКорреспондента = СтруктураНастроекПомощника.ИмяПланаОбменаКорреспондента; + + ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента = + Не ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ИмяПланаОбмена) + Или СтрДлина(ИдентификаторИнформационнойБазыПриемника) <> 36 + Или СтрДлина(ИдентификаторИнформационнойБазыИсточника) <> 36; + + Если ДоступноИзменениеНаименования Тогда + Наименование = СтруктураНастроекПомощника.НаименованиеЭтойБазы; + КонецЕсли; + + Если ДоступноИзменениеНаименованияКорреспондента Тогда + НаименованиеКорреспондента = СтруктураНастроекПомощника.НаименованиеВторойБазы; + КонецЕсли; + + Если ДоступноИзменениеПрефикса Тогда + Префикс = СтруктураНастроекПомощника.ПрефиксИнформационнойБазыИсточника; + Если ПустаяСтрока(Префикс) + И (ИспользоватьПрефиксыДляНастройкиОбмена Или ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента) Тогда + Префикс = СтруктураНастроекПомощника.КодПредопределенногоУзла; + КонецЕсли; + КонецЕсли; + + Если ДоступноИзменениеПрефиксаКорреспондента Тогда + ПрефиксКорреспондента = СтруктураНастроекПомощника.ПрефиксИнформационнойБазыПриемника; + Если ПустаяСтрока(ПрефиксКорреспондента) + И (ИспользоватьПрефиксыДляНастройкиОбмена Или ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента) Тогда + ПрефиксКорреспондента = СтруктураНастроекПомощника.КодНовогоУзлаВторойБазы; + КонецЕсли; + КонецЕсли; + + // Настройки транспорта. + ВнешнееСоединениеВидАутентификации = + ?(СтруктураНастроекПомощника.COMАутентификацияОперационнойСистемы, "ОперационнаяСистема", "1СПредприятие"); + ВнешнееСоединениеВариантРаботыИнформационнойБазы = + ?(СтруктураНастроекПомощника.COMВариантРаботыИнформационнойБазы = 0, "Файловый", "КлиентСерверный"); + ВнешнееСоединениеИмяИнформационнойБазы = + СтруктураНастроекПомощника.COMИмяИнформационнойБазыНаСервере1СПредприятия; + ВнешнееСоединениеИмяПользователя = + СтруктураНастроекПомощника.COMИмяПользователя; + ВнешнееСоединениеКластерСерверов = + СтруктураНастроекПомощника.COMИмяСервера1СПредприятия; + ВнешнееСоединениеКаталогИнформационнойБазы = + СтруктураНастроекПомощника.COMКаталогИнформационнойБазы; + ВнешнееСоединениеПароль = + СтруктураНастроекПомощника.COMПарольПользователя; + + ОбычныеКаналыСвязиEMAILМаксимальныйДопустимыйРазмерВложения = + СтруктураНастроекПомощника.EMAILМаксимальныйДопустимыйРазмерСообщения; + ОбычныеКаналыСвязиEMAILУчетнаяЗапись = + СтруктураНастроекПомощника.EMAILУчетнаяЗапись; + + ОбычныеКаналыСвязиFILEКаталог = + СтруктураНастроекПомощника.FILEКаталогОбменаИнформацией; + + ОбычныеКаналыСвязиFTPМаксимальныйДопустимыйРазмерФайла = + СтруктураНастроекПомощника.FTPСоединениеМаксимальныйДопустимыйРазмерСообщения; + ОбычныеКаналыСвязиFTPПароль = + СтруктураНастроекПомощника.FTPСоединениеПароль; + ОбычныеКаналыСвязиFTPПассивныйРежим = + СтруктураНастроекПомощника.FTPСоединениеПассивноеСоединение; + ОбычныеКаналыСвязиFTPПользователь = + СтруктураНастроекПомощника.FTPСоединениеПользователь; + ОбычныеКаналыСвязиFTPПорт = + СтруктураНастроекПомощника.FTPСоединениеПорт; + ОбычныеКаналыСвязиFTPПуть = + СтруктураНастроекПомощника.FTPСоединениеПуть; + + ИнтернетВебАдрес = СтруктураНастроекПомощника.WSURLВебСервиса; + ИнтернетЗапомнитьПароль = СтруктураНастроекПомощника.WSЗапомнитьПароль; + ИнтернетИмяПользователя = СтруктураНастроекПомощника.WSИмяПользователя; + ИнтернетПароль = СтруктураНастроекПомощника.WSПароль; + + Если СтруктураНастроекПомощника.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда + ВидПодключения = "Интернет"; + ИначеЕсли СтруктураНастроекПомощника.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.COM Тогда + ВидПодключения = "ВнешнееСоединение"; + ИначеЕсли СтруктураНастроекПомощника.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FILE + Или СтруктураНастроекПомощника.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FTP + Или СтруктураНастроекПомощника.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL Тогда + ВидПодключения = "ОбычныеКаналыСвязи"; + ИначеЕсли СтруктураНастроекПомощника.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим Тогда + ВидПодключения = "ПассивныйРежим"; + КонецЕсли; + + ОбычныеКаналыСвязиEMAILИспользование = СтруктураНастроекПомощника.ИспользоватьПараметрыТранспортаEMAIL; + ОбычныеКаналыСвязиFILEИспользование = СтруктураНастроекПомощника.ИспользоватьПараметрыТранспортаFILE; + ОбычныеКаналыСвязиFTPИспользование = СтруктураНастроекПомощника.ИспользоватьПараметрыТранспортаFTP; + + Если ОбычныеКаналыСвязиFILEИспользование Тогда + ОбычныеКаналыСвязиВидТранспортаПоУмолчанию = "FILE"; + ИначеЕсли ОбычныеКаналыСвязиFTPИспользование Тогда + ОбычныеКаналыСвязиВидТранспортаПоУмолчанию = "FTP"; + ИначеЕсли ОбычныеКаналыСвязиEMAILИспользование Тогда + ОбычныеКаналыСвязиВидТранспортаПоУмолчанию = "EMAIL"; + КонецЕсли; + + ОбычныеКаналыСвязиТранслитерироватьИменаФайлов = + СтруктураНастроекПомощника.FILEТранслитерироватьИменаФайловСообщенийОбмена + Или СтруктураНастроекПомощника.FTPТранслитерироватьИменаФайловСообщенийОбмена + Или СтруктураНастроекПомощника.EMAILТранслитерироватьИменаФайловСообщенийОбмена; + + ОбычныеКаналыСвязиАрхивироватьФайлы = + СтруктураНастроекПомощника.FILEСжиматьФайлИсходящегоСообщения + Или СтруктураНастроекПомощника.FTPСжиматьФайлИсходящегоСообщения + Или СтруктураНастроекПомощника.EMAILСжиматьФайлИсходящегоСообщения; + + ОбычныеКаналыСвязиПарольАрхива = СтруктураНастроекПомощника.ПарольАрхиваСообщенияОбмена; + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьПараметрыКорреспондента(ПараметрыКорреспондента, КорреспондентВМоделиСервиса = Ложь) + + Если ЗначениеЗаполнено(ПараметрыКорреспондента.ПрефиксИнформационнойБазы) Тогда + ПрефиксКорреспондента = ПараметрыКорреспондента.ПрефиксИнформационнойБазы; + Иначе + ПрефиксКорреспондента = ПараметрыКорреспондента.ПрефиксИнформационнойБазыПоУмолчанию; + КонецЕсли; + + Если Не КорреспондентВМоделиСервиса Тогда + Если ЗначениеЗаполнено(ПараметрыКорреспондента.НаименованиеИнформационнойБазы) Тогда + НаименованиеКорреспондента = ПараметрыКорреспондента.НаименованиеИнформационнойБазы; + Иначе + НаименованиеКорреспондента = ПараметрыКорреспондента.НаименованиеИнформационнойБазыПоУмолчанию; + КонецЕсли; + КонецЕсли; + + ИдентификаторИнформационнойБазыПриемника = ПараметрыКорреспондента.КодЭтогоУзла; + + ВерсияКонфигурацииКорреспондента = ПараметрыКорреспондента.ВерсияКонфигурации; + + ИмяПланаОбменаКорреспондента = ПараметрыКорреспондента.ИмяПланаОбмена; + + Если НастройкаXDTO Тогда + ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента = ПараметрыКорреспондента.ИспользоватьПрефиксыДляНастройкиОбмена; + + ВерсияФорматаОбмена = ОбменДаннымиXDTOСервер.МаксимальнаяОбщаяВерсияФормата( + ИмяПланаОбмена, ПараметрыКорреспондента.ВерсииФорматаОбмена); + + ПоддерживаемыеОбъектыФормата = Новый ХранилищеЗначения( + ПараметрыКорреспондента.ПоддерживаемыеОбъектыФормата, Новый СжатиеДанных(9)); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьНастройкиПодключенияИзXMLНаСервере(АдресВХранилище, Отказ, СообщениеОбОшибке = "") + + ВременныйФайл = ПолучитьИмяВременногоФайла("xml"); + + ДанныеФайла = ПолучитьИзВременногоХранилища(АдресВХранилище); + ДанныеФайла.Записать(ВременныйФайл); + + Попытка + НастройкиПодключения = Обработки.ПомощникСозданияОбменаДанными.Создать(); + НастройкиПодключения.ИмяПланаОбмена = ИмяПланаОбмена; + НастройкиПодключения.ВариантНастройкиОбмена = ИдентификаторНастройки; + НастройкиПодключения.ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными"; + + Обработки.ПомощникСозданияОбменаДанными.ЗаполнитьНастройкиПодключенияИзXML( + НастройкиПодключения, ВременныйФайл, Истина); + Исключение + Отказ = Истина; + СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), + УровеньЖурналаРегистрации.Ошибка, , , СообщениеОбОшибке); + КонецПопытки; + + УдалитьФайлы(ВременныйФайл); + УдалитьИзВременногоХранилища(АдресВХранилище); + + Если Не Отказ Тогда + ПрочитатьСтруктуруПараметровПодключенияПомощника(НастройкиПодключения); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьНастройкиXDTOКорреспондентаИзXMLНаСервере(АдресВХранилище, Отказ, СообщениеОбОшибке = "") + + ВременныйФайл = ПолучитьИмяВременногоФайла("xml"); + + ДанныеФайла = ПолучитьИзВременногоХранилища(АдресВХранилище); + ДанныеФайла.Записать(ВременныйФайл); + + Попытка + НастройкиXDTOКорреспондента = Обработки.ПомощникСозданияОбменаДанными.НастройкиXDTOКорреспондентаИзXML( + ВременныйФайл, Истина, ПланыОбмена[ИмяПланаОбмена].ПустаяСсылка()); + Исключение + Отказ = Истина; + СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), + УровеньЖурналаРегистрации.Ошибка, , , СообщениеОбОшибке); + КонецПопытки; + + УдалитьФайлы(ВременныйФайл); + УдалитьИзВременногоХранилища(АдресВХранилище); + + Если Не Отказ Тогда + ВерсияФорматаОбмена = ОбменДаннымиXDTOСервер.МаксимальнаяОбщаяВерсияФормата(ИмяПланаОбмена, + НастройкиXDTOКорреспондента.ПоддерживаемыеВерсии); + + ТаблицаПоддерживаемыеОбъекты = НастройкиXDTOКорреспондента.ПоддерживаемыеОбъекты.Скопировать( + Новый Структура("Версия", ВерсияФорматаОбмена)); + + ПоддерживаемыеОбъектыФормата = Новый ХранилищеЗначения(ТаблицаПоддерживаемыеОбъекты, + Новый СжатиеДанных(9)); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьДоступныеВидыТранспорта() + + ДоступныеВидыТранспорта = Новый Структура; + + ИспользуемыеТранспортыСообщенийОбмена = ОбменДаннымиПовтИсп.ИспользуемыеТранспортыСообщенийОбмена( + ПланыОбмена[ИмяПланаОбмена].ПустаяСсылка(), ИдентификаторНастройки); + + Для Каждого ТекущийВидТранспорта Из ИспользуемыеТранспортыСообщенийОбмена Цикл + // В модели сервиса обмен через Интернет и Интернет-пассивное соединение + // поддерживается только для планов обмена XDTO. + Если МодельСервиса Тогда + Если ТекущийВидТранспорта <> Перечисления.ВидыТранспортаСообщенийОбмена.WS + И ТекущийВидТранспорта <> Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим Тогда + Продолжить; + КонецЕсли; + + Если Не НастройкаXDTO Тогда + Продолжить; + КонецЕсли; + КонецЕсли; + + ДоступныеВидыТранспорта.Вставить(ОбщегоНазначения.ИмяЗначенияПеречисления(ТекущийВидТранспорта)); + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗавершенииПомещенияФайлаНастроекПодключенияДляЗагрузки(РезультатВыбора, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт + + Результат = Новый Структура; + Результат.Вставить("Отказ", Ложь); + Результат.Вставить("СообщениеОбОшибке", ""); + + Если Не РезультатВыбора Тогда + Результат.Отказ = Истина; + Иначе + ЗаполнитьНастройкиПодключенияИзXMLНаСервере(Адрес, Результат.Отказ, Результат.СообщениеОбОшибке); + КонецЕсли; + + Если Результат.Отказ Тогда + Если ПустаяСтрока(Результат.СообщениеОбОшибке) Тогда + Результат.СообщениеОбОшибке = НСтр("ru = 'Не удалось загрузить файл с настройками подключения.'"); + КонецЕсли; + Иначе + ДоступноИзменениеНаименования = Ложь; + ДоступноИзменениеПрефикса = Ложь; + + ДоступноИзменениеНаименованияКорреспондента = Ложь; + ДоступноИзменениеПрефиксаКорреспондента = Ложь; + КонецЕсли; + + ВыполнитьОбработкуОповещения(ДополнительныеПараметры.Оповещение, Результат); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗавершенииПомещенияФайлаНастроекXDTOКорреспондента(РезультатВыбора, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт + + Результат = Новый Структура; + Результат.Вставить("Отказ", Ложь); + Результат.Вставить("СообщениеОбОшибке", ""); + + Если Не РезультатВыбора Тогда + Результат.Отказ = Истина; + Иначе + ЗаполнитьНастройкиXDTOКорреспондентаИзXMLНаСервере(Адрес, Результат.Отказ, Результат.СообщениеОбОшибке); + КонецЕсли; + + Если Результат.Отказ Тогда + Если ПустаяСтрока(Результат.СообщениеОбОшибке) Тогда + Результат.СообщениеОбОшибке = НСтр("ru = 'Не удалось загрузить файл с настройками корреспондента.'"); + КонецЕсли; + КонецЕсли; + + ВыполнитьОбработкуОповещения(ДополнительныеПараметры.Оповещение, Результат); + +КонецПроцедуры + +&НаКлиенте +Процедура ПродолжениеНастройкиПараметрыПодключенияОбычныеКаналыСвязи(Результат, ДополнительныеПараметры) Экспорт + + Если Результат.Отказ Тогда + ИзменитьПорядковыйНомерПерехода(-1); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Результат.СообщениеОбОшибке); + Возврат; + КонецЕсли; + + Элементы.ПараметрыДоступаВИнтернет.Видимость = ДоступнаНастройкаПараметровДоступаВИнтернет; + + Элементы.ГруппаСинхронизацияЧерезКаталог.Видимость = ДоступныеВидыТранспорта.Свойство("FILE"); + Элементы.ГруппаСинхронизацияЧерезFTP.Видимость = ДоступныеВидыТранспорта.Свойство("FTP"); + Элементы.ГруппаСинхронизацияЧерезEMAIL.Видимость = ДоступныеВидыТранспорта.Свойство("EMAIL"); + + Если ДополнительныеПараметры.ЭтоПереходДалее Тогда + + ПриИзмененииОбычныеКаналыСвязиFILEИспользование(); + ПриИзмененииОбычныеКаналыСвязиFTPИспользование(); + ПриИзмененииОбычныеКаналыСвязиEMAILИспользование(); + + ПриИзмененииОбычныеКаналыСвязиАрхивироватьФайлы(); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПродолжениеНастройкиОбщиеНастройкиСинхронизации(Результат, ДополнительныеПараметры) Экспорт + + Если Результат.Отказ Тогда + ИзменитьПорядковыйНомерПерехода(-1); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Результат.СообщениеОбОшибке); + Возврат; + КонецЕсли; + + Если ДополнительныеПараметры.ЭтоПереходДалее Тогда + Элементы.ОбычныеКаналыСвязиВидТранспортаПоУмолчанию.СписокВыбора.Очистить(); + + Если ОбычныеКаналыСвязиFILEИспользование Тогда + Элементы.ОбычныеКаналыСвязиВидТранспортаПоУмолчанию.СписокВыбора.Добавить("FILE"); + ОбычныеКаналыСвязиВидТранспортаПоУмолчанию = "FILE"; + КонецЕсли; + + Если ОбычныеКаналыСвязиFTPИспользование Тогда + Элементы.ОбычныеКаналыСвязиВидТранспортаПоУмолчанию.СписокВыбора.Добавить("FTP"); + Если Не ЗначениеЗаполнено(ОбычныеКаналыСвязиВидТранспортаПоУмолчанию) Тогда + ОбычныеКаналыСвязиВидТранспортаПоУмолчанию = "FTP"; + КонецЕсли; + КонецЕсли; + + Если ОбычныеКаналыСвязиEMAILИспользование Тогда + Элементы.ОбычныеКаналыСвязиВидТранспортаПоУмолчанию.СписокВыбора.Добавить("EMAIL"); + Если Не ЗначениеЗаполнено(ОбычныеКаналыСвязиВидТранспортаПоУмолчанию) Тогда + ОбычныеКаналыСвязиВидТранспортаПоУмолчанию = "EMAIL"; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Элементы.ОбычныеКаналыСвязиВидТранспортаПоУмолчанию.Видимость = + (Элементы.ОбычныеКаналыСвязиВидТранспортаПоУмолчанию.СписокВыбора.Количество() > 1); + + СохранитьПараметрыПодключенияВФайл = Не НастройкаРИБ + И (ВидПодключения = "ОбычныеКаналыСвязи") И Не ЗагрузитьПараметрыПодключенияИзФайла; + + Элементы.ИмяФайлаНастроекПодключенияДляВыгрузки.Видимость = СохранитьПараметрыПодключенияВФайл; + + Если СохранитьПараметрыПодключенияВФайл + И ОбычныеКаналыСвязиFILEИспользование Тогда + ИмяФайлаНастроекПодключенияДляВыгрузки = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( + ОбычныеКаналыСвязиFILEКаталог, ИмяФайлаНастроекДляПриемника + ".xml"); + КонецЕсли; + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "Наименование", "ТолькоПросмотр", Не ДоступноИзменениеНаименования); + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "Префикс", "ТолькоПросмотр", Не ДоступноИзменениеПрефикса); + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "НаименованиеКорреспондента", "ТолькоПросмотр", Не ДоступноИзменениеНаименованияКорреспондента); + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "ПрефиксКорреспондента", "ТолькоПросмотр", Не ДоступноИзменениеПрефиксаКорреспондента); + +КонецПроцедуры + +#Область ИнициализацияФормыПриСоздании + +&НаСервере +Процедура ПроверитьВозможностьИспользованияФормы(Отказ = Ложь) + + // Обязательная должны быть переданы параметры помощника создания обмена данными. + Если Не Параметры.Свойство("ИмяПланаОбмена") + Или Не Параметры.Свойство("ИдентификаторНастройки") Тогда + ТекстСообщения = НСтр("ru = 'Форма не предназначена для непосредственного использования.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , , , Отказ); + Возврат; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ИнициализироватьСвойстваФормы() + + Если НастройкаРИБ Тогда + Заголовок = НСтр("ru = 'Настройка распределенной информационной базы'"); + Иначе + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Настройка подключения к ""%1""'"), + НаименованиеКонфигурацииКорреспондента); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ИнициализироватьРеквизитыФормы() + + ИмяПланаОбмена = Параметры.ИмяПланаОбмена; + ИдентификаторНастройки = Параметры.ИдентификаторНастройки; + + ПродолжениеНастройкиВПодчиненномУзлеРИБ = Параметры.Свойство("ПродолжениеНастройкиВПодчиненномУзлеРИБ"); + + ВерсияКонфигурацииКорреспондента = ""; + + МодельСервиса = ОбщегоНазначения.РазделениеВключено() + И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных(); + + ДоступнаНастройкаПараметровДоступаВИнтернет = ОбщегоНазначения.ПодсистемаСуществует( + "СтандартныеПодсистемы.ПолучениеФайловИзИнтернета"); + + НастройкаРИБ = ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(ИмяПланаОбмена); + НастройкаXDTO = ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ИмяПланаОбмена); + + ЗаполнитьДоступныеВидыТранспорта(); + + Если ДоступныеВидыТранспорта.Свойство("COM") Тогда + ВидПодключения = "ВнешнееСоединение"; + ИначеЕсли ДоступныеВидыТранспорта.Свойство("WS") Тогда + ВидПодключения = "Интернет"; + ИначеЕсли ДоступныеВидыТранспорта.Свойство("FILE") + Или ДоступныеВидыТранспорта.Свойство("FTP") + Или ДоступныеВидыТранспорта.Свойство("EMAIL") Тогда + ВидПодключения = "ОбычныеКаналыСвязи"; + ИначеЕсли ДоступныеВидыТранспорта.Свойство("WSПассивныйРежим") Тогда + ВидПодключения = "ПассивныйРежим"; + КонецЕсли; + + Если ДоступныеВидыТранспорта.Свойство("FILE") Тогда + ОбычныеКаналыСвязиFILEИспользование = Истина; + ИначеЕсли ДоступныеВидыТранспорта.Свойство("FTP") Тогда + ОбычныеКаналыСвязиFTPИспользование = Истина; + ИначеЕсли ДоступныеВидыТранспорта.Свойство("EMAIL") Тогда + ОбычныеКаналыСвязиEMAILИспользование = Истина; + КонецЕсли; + + Если ДоступныеВидыТранспорта.Свойство("FTP") Тогда + ОбычныеКаналыСвязиFTPПорт = 21; + ОбычныеКаналыСвязиFTPПассивныйРежим = Истина; + КонецЕсли; + + СпособНастройкиПодключения = ?(МодельСервиса, "ПриложениеИзСписка", "НастроитьВручную"); + + ЗначенияНастроекДляВарианта = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, + "ИмяКонфигурацииКорреспондента, + |ФорматОбмена, + |ИмяФайлаНастроекДляПриемника, + |НаименованиеКонфигурацииКорреспондента, + |КраткаяИнформацияПоОбмену, + |ПодробнаяИнформацияПоОбмену, + |ИмяФормыПомощникаНастройкиСинхронизацииДанных", + ИдентификаторНастройки); + + ЗаполнитьЗначенияСвойств(ЭтотОбъект, ЗначенияНастроекДляВарианта); + + ИмяПланаОбменаКорреспондента = ИмяПланаОбмена; + + ДоступноИзменениеНаименования = Ложь; + ДоступноИзменениеПрефикса = Ложь; + + ДоступноИзменениеНаименованияКорреспондента = Истина; + ДоступноИзменениеПрефиксаКорреспондента = Истина; + + Если МодельСервиса Тогда + МодульОбменДаннымиВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиВМоделиСервиса"); + Наименование = МодульОбменДаннымиВМоделиСервиса.СформироватьНаименованиеПредопределенногоУзла(); + Иначе + // Представление этой информационной базы. + Наименование = ОбменДаннымиСервер.НаименованиеПредопределенногоУзлаПланаОбмена(ИмяПланаОбмена); + Если ПустаяСтрока(Наименование) Тогда + ДоступноИзменениеНаименования = Истина; + Наименование = ОбменДаннымиПовтИсп.ИмяЭтойИнформационнойБазы(); + КонецЕсли; + + НаименованиеКорреспондента = НаименованиеКонфигурацииКорреспондента; + КонецЕсли; + + Префикс = ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"); + Если ПустаяСтрока(Префикс) Тогда + ДоступноИзменениеПрефикса = Истина; + ОбменДаннымиПереопределяемый.ПриОпределенииПрефиксаИнформационнойБазыПоУмолчанию(Префикс); + КонецЕсли; + + Если НастройкаРИБ Тогда + ВидПодключения = "ОбычныеКаналыСвязи"; + КонецЕсли; + + Если ПродолжениеНастройкиВПодчиненномУзлеРИБ Тогда + УзелОбмена = ОбменДаннымиСервер.ГлавныйУзел(); + + // Заполнение параметров из настроек подключения в константе. + ПомощникСозданияОбмена = Обработки.ПомощникСозданияОбменаДанными.Создать(); + ПомощникСозданияОбмена.ИмяПланаОбмена = ИмяПланаОбмена; + ПомощникСозданияОбмена.ВариантНастройкиОбмена = ИдентификаторНастройки; + ПомощникСозданияОбмена.ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными"; + + Обработки.ПомощникСозданияОбменаДанными.ЗаполнитьНастройкиПодключенияИзКонстанты(ПомощникСозданияОбмена); + ПрочитатьСтруктуруПараметровПодключенияПомощника(ПомощникСозданияОбмена); + + ДоступноИзменениеНаименования = Ложь; + ДоступноИзменениеПрефикса = Ложь; + + ДоступноИзменениеНаименованияКорреспондента = Ложь; + ДоступноИзменениеПрефиксаКорреспондента = Ложь; + КонецЕсли; + + ИдентификаторИнформационнойБазыИсточника = ОбменДаннымиСервер.КодПредопределенногоУзлаПланаОбмена(ИмяПланаОбмена); + + ИспользоватьПрефиксыДляНастройкиОбмена = Не ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ИмяПланаОбмена) + Или Не ОбменДаннымиXDTOСервер.ПоддерживаетсяВерсияСИдентификаторомОбменаДанными(ПланыОбмена[ИмяПланаОбмена].ПустаяСсылка()); + + // До получения настроек из корреспондента устанавливаем режим по-умолчанию. + ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента = Истина; + + ЗаполнитьТаблицуПереходов(); + +КонецПроцедуры + +#КонецОбласти + +#Область СценарииРаботыПомощника + +&НаСервере +Функция ДобавитьСтрокуТаблицыПереходов(ИмяОсновнойСтраницы, ИмяСтраницыНавигации, ИмяСтраницыДекорации = "") + + СтрокаПереходов = ТаблицаПереходов.Добавить(); + СтрокаПереходов.ПорядковыйНомерПерехода = ТаблицаПереходов.Количество(); + СтрокаПереходов.ИмяОсновнойСтраницы = ИмяОсновнойСтраницы; + СтрокаПереходов.ИмяСтраницыНавигации = ИмяСтраницыНавигации; + СтрокаПереходов.ИмяСтраницыДекорации = ИмяСтраницыДекорации; + + Возврат СтрокаПереходов; + +КонецФункции + +&НаСервере +Процедура ЗаполнитьТаблицуПереходов() + + ТаблицаПереходов.Очистить(); + + Если НастройкаРИБ Тогда + НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаПараметрыПодключенияОбычныеКаналыСвязи", "СтраницаНавигацияНачало"); + НовыйПереход.ИмяОбработчикаПриОткрытии = "СтраницаПараметрыПодключенияОбычныеКаналыСвязи_ПриОткрытии"; + НовыйПереход.ИмяОбработчикаПриПереходеДалее = "СтраницаПараметрыПодключенияОбычныеКаналыСвязи_ПриПереходеДалее"; + Иначе + НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаСпособНастройкиПодключения", "СтраницаНавигацияНачало"); + НовыйПереход.ИмяОбработчикаПриОткрытии = "СтраницаСпособНастройкиПодключения_ПриОткрытии"; + НовыйПереход.ИмяОбработчикаПриПереходеДалее = "СтраницаСпособНастройкиПодключения_ПриПереходеДалее"; + + НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаПараметрыПодключенияИнтернет", "СтраницаНавигацияПродолжение"); + НовыйПереход.ИмяОбработчикаПриОткрытии = "СтраницаПараметрыПодключенияИнтернет_ПриОткрытии"; + НовыйПереход.ИмяОбработчикаПриПереходеДалее = "СтраницаПараметрыПодключенияИнтернет_ПриПереходеДалее"; + + Если Не МодельСервиса Тогда + НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаПараметрыПодключенияВнешнееСоединение", "СтраницаНавигацияПродолжение"); + НовыйПереход.ИмяОбработчикаПриОткрытии = "СтраницаПараметрыПодключенияВнешнееСоединение_ПриОткрытии"; + НовыйПереход.ИмяОбработчикаПриПереходеДалее = "СтраницаПараметрыПодключенияВнешнееСоединение_ПриПереходеДалее"; + + НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаПараметрыПодключенияОбычныеКаналыСвязи", "СтраницаНавигацияПродолжение"); + НовыйПереход.ИмяОбработчикаПриОткрытии = "СтраницаПараметрыПодключенияОбычныеКаналыСвязи_ПриОткрытии"; + НовыйПереход.ИмяОбработчикаПриПереходеДалее = "СтраницаПараметрыПодключенияОбычныеКаналыСвязи_ПриПереходеДалее"; + КонецЕсли; + КонецЕсли; + + НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаПроверкаПодключения", "СтраницаНавигацияПродолжение"); + НовыйПереход.ИмяОбработчикаПриОткрытии = "СтраницаПроверкаПодключения_ПриОткрытии"; + НовыйПереход.ДлительнаяОперация = Истина; + НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаПроверкаПодключения_ДлительнаяОперация"; + + НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаОбщиеНастройкиСинхронизации", "СтраницаНавигацияПродолжение"); + НовыйПереход.ИмяОбработчикаПриОткрытии = "СтраницаОбщиеНастройкиСинхронизации_ПриОткрытии"; + НовыйПереход.ИмяОбработчикаПриПереходеДалее = "СтраницаОбщиеНастройкиСинхронизации_ПриПереходеДалее"; + + НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаСохранениеНастроекПодключения", "СтраницаНавигацияПродолжение"); + НовыйПереход.ДлительнаяОперация = Истина; + НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаСохранениеНастроекПодключения_ДлительнаяОперация"; + + НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаОкончание", "СтраницаНавигацияОкончание"); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиИзмененийРеквизитовФормы + +&НаКлиенте +Процедура ПриИзмененииСпособНастройкиПодключения() + + ЭтоОбменСПриложениемВСервисе = (СпособНастройкиПодключения = "ПриложениеИзСписка"); + + Если СпособНастройкиПодключения = "ПриложениеИзСписка" Тогда + Элементы.ПанельСпособыНастройкиПодключения.ТекущаяСтраница = Элементы.СтраницаМоиПриложения; + + НачатьПолучениеСпискаПриложенийДляПодключения(); + ИначеЕсли СпособНастройкиПодключения = "НастроитьВручную" Тогда + + Элементы.ВидПодключенияВнешнееСоединение.Видимость = ДоступныеВидыТранспорта.Свойство("COM"); + Элементы.ВидПодключенияИнтернет.Видимость = ДоступныеВидыТранспорта.Свойство("WS"); + Элементы.ВидПодключенияОбычныеКаналыСвязи.Видимость = ДоступныеВидыТранспорта.Свойство("FILE") + Или ДоступныеВидыТранспорта.Свойство("FTP") + Или ДоступныеВидыТранспорта.Свойство("EMAIL"); + Элементы.ВидПодключенияПассивныйРежим.Видимость = ДоступныеВидыТранспорта.Свойство("WSПассивныйРежим"); + + Элементы.ПанельСпособыНастройкиПодключения.ТекущаяСтраница = Элементы.СтраницаВидыПодключения; + ПриИзмененииВидПодключения(); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриИзмененииЗагрузитьНастройкиПодключенияИзФайла() + + Элементы.ИмяФайлаНастроекПодключенияДляЗагрузки.Доступность = ЗагрузитьПараметрыПодключенияИзФайла; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриИзмененииВидПодключения() + + Если ВидПодключения = "ВнешнееСоединение" Тогда + Элементы.ПанельФайлНастройки.Видимость = Ложь; + ИначеЕсли ВидПодключения = "Интернет" Тогда + Элементы.ПанельФайлНастройки.Видимость = Ложь; + ИначеЕсли ВидПодключения = "ОбычныеКаналыСвязи" Тогда + Элементы.ПанельФайлНастройки.Видимость = Истина; + Элементы.ПанельФайлНастройки.ТекущаяСтраница = Элементы.СтраницаФайлНастройкиОбычныеКаналыСвязи; + + ПриИзмененииЗагрузитьНастройкиПодключенияИзФайла(); + + ИначеЕсли ВидПодключения = "ПассивныйРежим" Тогда + Элементы.ПанельФайлНастройки.Видимость = Истина; + Элементы.ПанельФайлНастройки.ТекущаяСтраница = Элементы.СтраницаФайлНастройкиПассивныйРежим; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриИзмененииОбычныеКаналыСвязиFILEИспользование() + + Элементы.ГруппаОбычныеКаналыСвязиFILEИспользование.Доступность = ОбычныеКаналыСвязиFILEИспользование; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриИзмененииОбычныеКаналыСвязиFTPИспользование() + + Элементы.ГруппаОбычныеКаналыСвязиFTPИспользование.Доступность = ОбычныеКаналыСвязиFTPИспользование; + ПриИзмененииОбычныеКаналыСвязиFTPИспользоватьОграничениеРазмераФайла(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриИзмененииОбычныеКаналыСвязиEMAILИспользование() + + Элементы.ГруппаОбычныеКаналыСвязиEMAILИспользование.Доступность = ОбычныеКаналыСвязиEMAILИспользование; + ПриИзмененииОбычныеКаналыСвязиEMAILИспользоватьОграничениеРазмераВложения(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриИзмененииВнешнееСоединениеВариантРаботыИнформационнойБазы() + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "ВнешнееСоединениеКаталогИнформационнойБазы", + "Доступность", ВнешнееСоединениеВариантРаботыИнформационнойБазы = "Файловый"); + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "ВнешнееСоединениеКластерСерверов", + "Доступность", ВнешнееСоединениеВариантРаботыИнформационнойБазы = "КлиентСерверный"); + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "ВнешнееСоединениеИмяИнформационнойБазы", + "Доступность", ВнешнееСоединениеВариантРаботыИнформационнойБазы = "КлиентСерверный"); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриИзмененииВнешнееСоединениеВидАутентификации() + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "ВнешнееСоединениеИмяПользователя", + "Доступность", ВнешнееСоединениеВидАутентификации = "1СПредприятие"); + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "ВнешнееСоединениеПароль", + "Доступность", ВнешнееСоединениеВидАутентификации = "1СПредприятие"); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриИзмененииОбычныеКаналыСвязиАрхивироватьФайлы() + + Элементы.ГруппаОбычныеКаналыСвязиПарольАрхива.Доступность = ОбычныеКаналыСвязиАрхивироватьФайлы; + ПриИзмененииОбычныеКаналыСвязиИспользоватьПарольАрхива(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриИзмененииОбычныеКаналыСвязиИспользоватьПарольАрхива() + + Элементы.ОбычныеКаналыСвязиПарольАрхива.Доступность = ОбычныеКаналыСвязиИспользоватьПарольДляАрхива; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриИзмененииОбычныеКаналыСвязиFTPИспользоватьОграничениеРазмераФайла() + + Элементы.ОбычныеКаналыСвязиFTPМаксимальныйДопустимыйРазмерФайла.Доступность = + ОбычныеКаналыСвязиFTPИспользоватьОграничениеРазмераФайла; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриИзмененииОбычныеКаналыСвязиEMAILИспользоватьОграничениеРазмераВложения() + + Элементы.ОбычныеКаналыСвязиEMAILМаксимальныйДопустимыйРазмерВложения.Доступность = + ОбычныеКаналыСвязиEMAILИспользоватьОграничениеРазмераВложения; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийПереходов + +&НаКлиенте +Функция Подключаемый_СтраницаСпособНастройкиПодключения_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) + + Элементы.СпособНастройкиПодключения.Видимость = МодельСервиса + И (ДоступныеВидыТранспорта.Свойство("WS") Или ДоступныеВидыТранспорта.Свойство("WSПассивныйРежим")); + + Если ЭтоПереходДалее Тогда + ПриИзмененииСпособНастройкиПодключения(); + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаСпособНастройкиПодключения_ПриПереходеДалее(Отказ) + + Если СпособНастройкиПодключения = "ПриложениеИзСписка" Тогда + + ТекущиеДанные = Элементы.ПриложенияВСервисе.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Выберите приложение из списка для продолжения настройки подключения.'"), + , "ПриложенияВСервисе", , Отказ); + Возврат 0; + ИначеЕсли ТекущиеДанные.НастройкаСинхронизацииВМенеджереСервиса Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Для настройки синхронизации данных с выбранным приложением перейдите в менеджер сервиса. + |В менеджере сервиса воспользуйтесь командой ""Синхронизация данных"".'")); + Отказ = Истина; + Возврат 0; + Иначе + ПрефиксОбласти = ТекущиеДанные.Префикс; + + НаименованиеКорреспондента = ТекущиеДанные.НаименованиеПриложения; + ПрефиксОбластиКорреспондента = ТекущиеДанные.ПрефиксКорреспондента; + + КонечнаяТочкаКорреспондента = ТекущиеДанные.КонечнаяТочкаКорреспондента; + ОбластьДанныхКорреспондента = ТекущиеДанные.ОбластьДанных; + + ВидПодключения = ""; + КонецЕсли; + + ИначеЕсли СпособНастройкиПодключения = "НастроитьВручную" Тогда + + Если ВидПодключения = "ОбычныеКаналыСвязи" + И ЗагрузитьПараметрыПодключенияИзФайла Тогда + Если ПустаяСтрока(ИмяФайлаНастроекПодключенияДляЗагрузки) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Выберите файл с настройками подключения.'"), + , "ИмяФайлаНастроекПодключенияДляЗагрузки", , Отказ); + Возврат 0; + КонецЕсли; + ИначеЕсли ВидПодключения = "ПассивныйРежим" Тогда + Если ПустаяСтрока(ИмяФайлаНастроекXDTOКорреспондента) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Выберите файл с настройками программы-корреспондента.'"), + , "ИмяФайлаНастроекXDTOКорреспондента", , Отказ); + Возврат 0; + КонецЕсли; + КонецЕсли; + + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаПараметрыПодключенияИнтернет_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) + + Если ВидПодключения <> "Интернет" Тогда + ПропуститьСтраницу = Истина; + Возврат 0; + КонецЕсли; + + Элементы.ПараметрыДоступаВИнтернет1.Видимость = ДоступнаНастройкаПараметровДоступаВИнтернет; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаПараметрыПодключенияИнтернет_ПриПереходеДалее(Отказ) + + Если ВидПодключения <> "Интернет" Тогда + Возврат 0; + КонецЕсли; + + Если ПустаяСтрока(ИнтернетВебАдрес) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Укажите адрес программы в Интернет.'"), + , "ИнтернетВебАдрес", , Отказ); + Возврат 0; + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаПараметрыПодключенияВнешнееСоединение_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) + + Если МодельСервиса Тогда + ПропуститьСтраницу = Истина; + КонецЕсли; + + Если ВидПодключения <> "ВнешнееСоединение" Тогда + ПропуститьСтраницу = Истина; + КонецЕсли; + + ВнешнееСоединениеВариантРаботыИнформационнойБазы = "Файловый"; + ПриИзмененииВнешнееСоединениеВариантРаботыИнформационнойБазы(); + + ВнешнееСоединениеВидАутентификации = "1СПредприятие"; + ПриИзмененииВнешнееСоединениеВидАутентификации(); + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаПараметрыПодключенияВнешнееСоединение_ПриПереходеДалее(Отказ) + + Если ВидПодключения <> "ВнешнееСоединение" Тогда + Возврат 0; + КонецЕсли; + + Если ВнешнееСоединениеВариантРаботыИнформационнойБазы = "Файловый" Тогда + + Если ПустаяСтрока(ВнешнееСоединениеКаталогИнформационнойБазы) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Выберите каталог расположения информационной базы.'"), + , "ВнешнееСоединениеКаталогИнформационнойБазы", , Отказ); + Возврат 0; + КонецЕсли; + + ИначеЕсли ВнешнееСоединениеВариантРаботыИнформационнойБазы = "КлиентСерверный" Тогда + + Если ПустаяСтрока(ВнешнееСоединениеКластерСерверов) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Укажите имя кластера серверов 1С:Предприятия.'"), + , "ВнешнееСоединениеКластерСерверов", , Отказ); + Возврат 0; + КонецЕсли; + + Если ПустаяСтрока(ВнешнееСоединениеИмяИнформационнойБазы) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Укажите имя информационной базы в кластере серверов 1С:Предприятия.'"), + , "ВнешнееСоединениеИмяИнформационнойБазы", , Отказ); + Возврат 0; + КонецЕсли; + + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаПараметрыПодключенияОбычныеКаналыСвязи_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) + + Если ВидПодключения <> "ОбычныеКаналыСвязи" Тогда + ПропуститьСтраницу = Истина; + Возврат 0; + КонецЕсли; + + ДополнительныеПараметрыНастройки = Новый Структура; + ДополнительныеПараметрыНастройки.Вставить("ЭтоПереходДалее", ЭтоПереходДалее); + ОповещениеПродолжениеНастройки = Новый ОписаниеОповещения("ПродолжениеНастройкиПараметрыПодключенияОбычныеКаналыСвязи", + ЭтотОбъект, ДополнительныеПараметрыНастройки); + + Если ЭтоПереходДалее + И ЗагрузитьПараметрыПодключенияИзФайла Тогда + // Загрузка настроек из файла. + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("Оповещение", ОповещениеПродолжениеНастройки); + + ОповещениеОЗавершении = Новый ОписаниеОповещения("ПриЗавершенииПомещенияФайлаНастроекПодключенияДляЗагрузки", ЭтотОбъект, ДополнительныеПараметры); + НачатьПомещениеФайла(ОповещениеОЗавершении, , ИмяФайлаНастроекПодключенияДляЗагрузки, Ложь, УникальныйИдентификатор); + Иначе + Результат = Новый Структура; + Результат.Вставить("Отказ", Ложь); + Результат.Вставить("СообщениеОбОшибке", ""); + + ВыполнитьОбработкуОповещения(ОповещениеПродолжениеНастройки, Результат); + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаПараметрыПодключенияОбычныеКаналыСвязи_ПриПереходеДалее(Отказ) + + Если ВидПодключения <> "ОбычныеКаналыСвязи" Тогда + Возврат 0; + КонецЕсли; + + Если Не ОбычныеКаналыСвязиFILEИспользование + И Не ОбычныеКаналыСвязиFTPИспользование + И Не ОбычныеКаналыСвязиEMAILИспользование Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Выберите хотя бы один способ передачи файлов с данными.'"), + , "ОбычныеКаналыСвязиFILEИспользование", , Отказ); + Возврат 0; + КонецЕсли; + + Если ОбычныеКаналыСвязиАрхивироватьФайлы + И ОбычныеКаналыСвязиИспользоватьПарольДляАрхива + И ПустаяСтрока(ОбычныеКаналыСвязиПарольАрхива) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Укажите пароль для архивации файлов.'"), + , "ОбычныеКаналыСвязиПарольАрхива", , Отказ); + Возврат 0; + КонецЕсли; + + Если ОбычныеКаналыСвязиFILEИспользование Тогда + + Если ПустаяСтрока(ОбычныеКаналыСвязиFILEКаталог) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Выберите каталог для передачи файлов с данными.'"), + , "ОбычныеКаналыСвязиFILEКаталог", , Отказ); + Возврат 0; + КонецЕсли; + + КонецЕсли; + + Если ОбычныеКаналыСвязиFTPИспользование Тогда + + Если ПустаяСтрока(ОбычныеКаналыСвязиFTPПуть) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Укажите адрес каталога для передачи файлов с данными.'"), + , "ОбычныеКаналыСвязиFTPПуть", , Отказ); + Возврат 0; + КонецЕсли; + + Если ОбычныеКаналыСвязиFTPИспользоватьОграничениеРазмераФайла + И Не ЗначениеЗаполнено(ОбычныеКаналыСвязиFTPМаксимальныйДопустимыйРазмерФайла) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Укажите максимальный допустимый размер файлов с данными.'"), + , "ОбычныеКаналыСвязиFTPМаксимальныйДопустимыйРазмерФайла", , Отказ); + Возврат 0; + КонецЕсли; + + КонецЕсли; + + Если ОбычныеКаналыСвязиEMAILИспользование Тогда + + Если Не ЗначениеЗаполнено(ОбычныеКаналыСвязиEMAILУчетнаяЗапись) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Выберите учетную запись электронной почты для отправки сообщений с данными.'"), + , "ОбычныеКаналыСвязиEMAILУчетнаяЗапись", , Отказ); + Возврат 0; + КонецЕсли; + + Если ОбычныеКаналыСвязиEMAILИспользоватьОграничениеРазмераВложения + И Не ЗначениеЗаполнено(ОбычныеКаналыСвязиEMAILМаксимальныйДопустимыйРазмерВложения) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Укажите максимальный допустимый размер почтового вложения.'"), + , "ОбычныеКаналыСвязиEMAILМаксимальныйДопустимыйРазмерВложения", , Отказ); + Возврат 0; + КонецЕсли; + + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаПроверкаПодключения_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) + + Если ВидПодключения = "ПассивныйРежим" Тогда + + ПропуститьСтраницу = Истина; + + ИначеЕсли ВидПодключения = "ВнешнееСоединение" + Или ВидПодключения = "Интернет" + Или МодельСервиса Тогда + + Элементы.ПанельПроверкаПодключения.ТекущаяСтраница = Элементы.СтраницаПроверкаПодключенияOnline; + + ИначеЕсли ВидПодключения = "ОбычныеКаналыСвязи" Тогда + + Элементы.ПанельПроверкаПодключения.ТекущаяСтраница = Элементы.СтраницаПроверкаПодключенияOffline; + + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаПроверкаПодключения_ДлительнаяОперация(Отказ, ПерейтиДалее) + + ПерейтиДалее = Ложь; + + Если ВидПодключения = "ПассивныйРежим" Тогда + + ПерейтиДалее = Истина; + + ИначеЕсли ВидПодключения = "ВнешнееСоединение" + Или ВидПодключения = "Интернет" Тогда + + ПриНачалеПроверкиПодключенияOnline(); + + ИначеЕсли МодельСервиса Тогда + + ПриНачалеПроверкиПодключенияВМоделиСервиса(); + + ИначеЕсли ВидПодключения = "ОбычныеКаналыСвязи" Тогда + + ПриНачалеПроверкиПодключенияOffline(); + + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаОбщиеНастройкиСинхронизации_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) + + ДополнительныеПараметрыНастройки = Новый Структура; + ДополнительныеПараметрыНастройки.Вставить("ЭтоПереходДалее", ЭтоПереходДалее); + ОповещениеПродолжениеНастройки = Новый ОписаниеОповещения("ПродолжениеНастройкиОбщиеНастройкиСинхронизации", + ЭтотОбъект, ДополнительныеПараметрыНастройки); + + Если ЭтоПереходДалее + И ВидПодключения = "ПассивныйРежим" Тогда + // Загрузка настроек корреспондента из файла. + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("Оповещение", ОповещениеПродолжениеНастройки); + + ОповещениеОЗавершении = Новый ОписаниеОповещения("ПриЗавершенииПомещенияФайлаНастроекXDTOКорреспондента", ЭтотОбъект, ДополнительныеПараметры); + НачатьПомещениеФайла(ОповещениеОЗавершении, , ИмяФайлаНастроекXDTOКорреспондента, Ложь, УникальныйИдентификатор); + Иначе + + Результат = Новый Структура; + Результат.Вставить("Отказ", Ложь); + Результат.Вставить("СообщениеОбОшибке", ""); + + ВыполнитьОбработкуОповещения(ОповещениеПродолжениеНастройки, Результат); + + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаОбщиеНастройкиСинхронизации_ПриПереходеДалее(Отказ) + + Если ДоступноИзменениеНаименования + И ПустаяСтрока(Наименование) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Укажите наименование этой программы.'"), + , "Наименование", , Отказ); + КонецЕсли; + + Если ДоступноИзменениеПрефикса + И ПустаяСтрока(Префикс) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Укажите префикс этой программы.'"), + , "Префикс", , Отказ); + КонецЕсли; + + Если ДоступноИзменениеНаименованияКорреспондента + И ПустаяСтрока(НаименованиеКорреспондента) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Укажите наименование программы-корреспондента.'"), + , "НаименованиеКорреспондента", , Отказ); + КонецЕсли; + + Если ДоступноИзменениеПрефиксаКорреспондента + И ПустаяСтрока(ПрефиксКорреспондента) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Укажите префикс программы-корреспондента.'"), + , "ПрефиксКорреспондента", , Отказ); + КонецЕсли; + + Если СохранитьПараметрыПодключенияВФайл + И ПустаяСтрока(ИмяФайлаНастроекПодключенияДляВыгрузки) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Укажите путь к файлу для сохранения настроек подключения.'"), + , "ИмяФайлаНастроекПодключенияДляВыгрузки", , Отказ); + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаСохранениеНастроекПодключения_ДлительнаяОперация(Отказ, ПерейтиДалее) + + ПерейтиДалее = Ложь; + ПриНачалеСохраненияНастроекПодключения(); + +КонецФункции + +#КонецОбласти + +#Область ДополнительныеОбработчикиПереходов + +&НаКлиенте +Процедура ИзменитьПорядковыйНомерПерехода(Итератор) + + ОчиститьСообщения(); + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + Итератор); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьПорядковыйНомерПерехода(Знач Значение) + + ЭтоПереходДалее = (Значение > ПорядковыйНомерПерехода); + + ПорядковыйНомерПерехода = Значение; + + Если ПорядковыйНомерПерехода < 1 Тогда + + ПорядковыйНомерПерехода = 1; + + КонецЕсли; + + ПорядковыйНомерПереходаПриИзменении(ЭтоПереходДалее); + +КонецПроцедуры + +&НаКлиенте +Процедура ПорядковыйНомерПереходаПриИзменении(Знач ЭтоПереходДалее) + + // Выполняем обработчики событий перехода. + ВыполнитьОбработчикиСобытийПерехода(ЭтоПереходДалее); + + // Устанавливаем отображение страниц. + СтрокиПереходаТекущие = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода)); + + Если СтрокиПереходаТекущие.Количество() = 0 Тогда + ВызватьИсключение НСтр("ru = 'Не определена страница для отображения.'"); + КонецЕсли; + + СтрокаПереходаТекущая = СтрокиПереходаТекущие[0]; + + Элементы.ПанельОсновная.ТекущаяСтраница = Элементы[СтрокаПереходаТекущая.ИмяОсновнойСтраницы]; + Элементы.ПанельНавигации.ТекущаяСтраница = Элементы[СтрокаПереходаТекущая.ИмяСтраницыНавигации]; + + Элементы.ПанельНавигации.ТекущаяСтраница.Доступность = Не (ЭтоПереходДалее И СтрокаПереходаТекущая.ДлительнаяОперация); + + // Устанавливаем текущую кнопку по умолчанию. + КнопкаДалее = ПолучитьКнопкуФормыПоИмениКоманды(Элементы.ПанельНавигации.ТекущаяСтраница, "КомандаДалее"); + + Если КнопкаДалее <> Неопределено Тогда + + КнопкаДалее.КнопкаПоУмолчанию = Истина; + + Иначе + + КнопкаГотово = ПолучитьКнопкуФормыПоИмениКоманды(Элементы.ПанельНавигации.ТекущаяСтраница, "КомандаГотово"); + + Если КнопкаГотово <> Неопределено Тогда + + КнопкаГотово.КнопкаПоУмолчанию = Истина; + + КонецЕсли; + + КонецЕсли; + + Если ЭтоПереходДалее И СтрокаПереходаТекущая.ДлительнаяОперация Тогда + + ПодключитьОбработчикОжидания("ВыполнитьОбработчикДлительнойОперации", 0.1, Истина); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьОбработчикиСобытийПерехода(Знач ЭтоПереходДалее) + + // Обработчики событий переходов. + Если ЭтоПереходДалее Тогда + + СтрокиПерехода = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода - 1)); + + Если СтрокиПерехода.Количество() > 0 Тогда + СтрокаПерехода = СтрокиПерехода[0]; + + // Обработчик ПриПереходеДалее. + Если Не ПустаяСтрока(СтрокаПерехода.ИмяОбработчикаПриПереходеДалее) + И Не СтрокаПерехода.ДлительнаяОперация Тогда + + ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ)"; + ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПерехода.ИмяОбработчикаПриПереходеДалее); + + Отказ = Ложь; + + Результат = Вычислить(ИмяПроцедуры); + + Если Отказ Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); + + Возврат; + + КонецЕсли; + + КонецЕсли; + КонецЕсли; + + Иначе + + СтрокиПерехода = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода + 1)); + + Если СтрокиПерехода.Количество() > 0 Тогда + СтрокаПерехода = СтрокиПерехода[0]; + + // Обработчик ПриПереходеНазад. + Если Не ПустаяСтрока(СтрокаПерехода.ИмяОбработчикаПриПереходеНазад) + И Не СтрокаПерехода.ДлительнаяОперация Тогда + + ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ)"; + ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПерехода.ИмяОбработчикаПриПереходеНазад); + + Отказ = Ложь; + + Результат = Вычислить(ИмяПроцедуры); + + Если Отказ Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); + + Возврат; + + КонецЕсли; + + КонецЕсли; + КонецЕсли; + + КонецЕсли; + + СтрокиПереходаТекущие = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода)); + + Если СтрокиПереходаТекущие.Количество() = 0 Тогда + ВызватьИсключение НСтр("ru = 'Не определена страница для отображения.'"); + КонецЕсли; + + СтрокаПереходаТекущая = СтрокиПереходаТекущие[0]; + + Если СтрокаПереходаТекущая.ДлительнаяОперация И Не ЭтоПереходДалее Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); + Возврат; + КонецЕсли; + + // обработчик ПриОткрытии + Если Не ПустаяСтрока(СтрокаПереходаТекущая.ИмяОбработчикаПриОткрытии) Тогда + + ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ, ПропуститьСтраницу, ЭтоПереходДалее)"; + ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПереходаТекущая.ИмяОбработчикаПриОткрытии); + + Отказ = Ложь; + ПропуститьСтраницу = Ложь; + + Результат = Вычислить(ИмяПроцедуры); + + Если Отказ Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); + + Возврат; + + ИначеЕсли ПропуститьСтраницу Тогда + + Если ЭтоПереходДалее Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); + + Возврат; + + Иначе + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); + + Возврат; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьОбработчикДлительнойОперации() + + СтрокиПереходаТекущие = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода)); + + Если СтрокиПереходаТекущие.Количество() = 0 Тогда + ВызватьИсключение НСтр("ru = 'Не определена страница для отображения.'"); + КонецЕсли; + + СтрокаПереходаТекущая = СтрокиПереходаТекущие[0]; + + // Обработчик ОбработкаДлительнойОперации. + Если Не ПустаяСтрока(СтрокаПереходаТекущая.ИмяОбработчикаДлительнойОперации) Тогда + + ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ, ПерейтиДалее)"; + ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПереходаТекущая.ИмяОбработчикаДлительнойОперации); + + Отказ = Ложь; + ПерейтиДалее = Истина; + + Результат = Вычислить(ИмяПроцедуры); + + Если Отказ Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); + + Возврат; + + ИначеЕсли ПерейтиДалее Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); + + Возврат; + + КонецЕсли; + + Иначе + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); + + Возврат; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Функция ПолучитьКнопкуФормыПоИмениКоманды(ЭлементФормы, ИмяКоманды) + + Для Каждого Элемент Из ЭлементФормы.ПодчиненныеЭлементы Цикл + + Если ТипЗнч(Элемент) = Тип("ГруппаФормы") Тогда + + ЭлементФормыПоИмениКоманды = ПолучитьКнопкуФормыПоИмениКоманды(Элемент, ИмяКоманды); + + Если ЭлементФормыПоИмениКоманды <> Неопределено Тогда + + Возврат ЭлементФормыПоИмениКоманды; + + КонецЕсли; + + ИначеЕсли ТипЗнч(Элемент) = Тип("КнопкаФормы") + И СтрНайти(Элемент.ИмяКоманды, ИмяКоманды) > 0 Тогда + + Возврат Элемент; + + Иначе + + Продолжить; + + КонецЕсли; + + КонецЦикла; + + Возврат Неопределено; + +КонецФункции + +#КонецОбласти + +#КонецОбласти \ 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..f67cb1663 --- /dev/null +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаСинхронизации/Form.form @@ -0,0 +1,2304 @@ + + + + ГруппаОписаниеСинхронизацииДанных + 1 + + ДекорацияКраткаяИнформацияПоОбменуНадпись + 3 + true + true + + true + + + ДекорацияКраткаяИнформацияПоОбменуНадписьРасширеннаяПодсказка + 5 + Label + true + true + + Left + + + + ДекорацияКраткаяИнформацияПоОбменуНадписьКонтекстноеМеню + 4 + true + + Label + true + true + false + + Left + + + + ПодробноеОписаниеСинхронизацииДанных + 6 + true + true + + true + + + ПодробноеОписаниеСинхронизацииДанныхРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + Hyperlink + Form.Command.ПодробноеОписаниеСинхронизацииДанных + Normal + Auto + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Описание синхронизации данных</value> + + + ГруппаОписаниеСинхронизацииДанныхРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаРезервноеКопирование + 8 + + ДекорацияРезервноеКопированиеКартинка + 10 + true + true + + true + + + ДекорацияРезервноеКопированиеКартинкаРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + ДекорацияРезервноеКопированиеКартинкаКонтекстноеМеню + 11 + true + + true + 2 + true + + + CommonPicture.Предупреждение + + + + + ДекорацияРезервноеКопированиеНадпись + 13 + + <key>ru</key> + <value>Перед началом настройки новой синхронизации данных рекомендуется <link создать резервную копию данных>создать резервную копию данных</>.</value> + + true + true + + true + + + ДекорацияРезервноеКопированиеНадписьРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + ДекорацияРезервноеКопированиеНадписьКонтекстноеМеню + 14 + true + + true + Label + true + + + URLProcessing + ДекорацияРезервноеКопированиеНадписьОбработкаНавигационнойСсылки + + Left + + + true + true + + true + + + <key>ru</key> + <value>Резервное копирование</value> + + + ГруппаРезервноеКопированиеРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Center + Auto + Button + true + true + Auto + Auto + + + + ГруппаНастройка + 121 + + ГруппаНастройкаПодключения + 16 + + ПанельНастройкаПодключения + 18 + + СтраницаНастройкаПодключенияУспешно + 20 + + Декорация1 + 22 + true + true + + true + + + Декорация1РасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 23 + true + + 2 + true + 1 + true + + + CommonPicture.Успешно + + + + true + true + + true + + + <key>ru</key> + <value>Страница настройка подключения успешно</value> + + + СтраницаНастройкаПодключенияУспешноРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаНастройкаПодключенияТекущий + 25 + + Декорация2 + 27 + true + true + + true + + + Декорация2РасширеннаяПодсказка + 29 + Label + true + true + + Left + + + + Декорация2КонтекстноеМеню + 28 + true + + 2 + true + 1 + true + + + StdPicture.BusinessProcessStart + + + + true + true + + true + + + <key>ru</key> + <value>Страница настройка подключения текущий</value> + + + СтраницаНастройкаПодключенияТекущийРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаНастройкаПодключенияПустой + 116 + + Декорация15 + 118 + true + true + + true + + + Декорация15РасширеннаяПодсказка + 120 + Label + true + true + + Left + + + + Декорация15КонтекстноеМеню + 119 + true + + 2 + true + 2 + true + + + true + true + + true + + + <key>ru</key> + <value>Страница настройка подключения пустой</value> + + + СтраницаНастройкаПодключенияПустойРасширеннаяПодсказка + 117 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Панель настройка подключения</value> + + + ПанельНастройкаПодключенияРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + Pages + + Auto + + + + НастроитьПараметрыПодключения + 30 + true + true + + true + + + НастроитьПараметрыПодключенияРасширеннаяПодсказка + 31 + + <key>ru</key> + <value>Для начала синхронизации данных необходимо указать, каким способом программы будут подключаться друг к другу.</value> + + Label + true + + Left + + + Hyperlink + Form.Command.НастроитьПараметрыПодключения + Normal + Auto + true + UserCmds + + Style.NormalTextFont + + ShowBottom + Auto + + true + true + + true + + + <key>ru</key> + <value>Настройка подключения</value> + + + ГруппаНастройкаПодключенияРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + ГруппаНастройкаПравил + 32 + + ПанельНастройкаПравил + 34 + + СтраницаНастройкаПравилУспешно + 36 + + Декорация3 + 38 + true + true + + true + + + Декорация3РасширеннаяПодсказка + 40 + Label + true + true + + Left + + + + Декорация3КонтекстноеМеню + 39 + true + + 2 + true + 1 + true + + + CommonPicture.Успешно + + + + true + true + + true + + + <key>ru</key> + <value>Страница настройка правил успешно</value> + + + СтраницаНастройкаПравилУспешноРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаНастройкаПравилТекущий + 41 + + Декорация4 + 43 + true + true + + true + + + Декорация4РасширеннаяПодсказка + 45 + Label + true + true + + Left + + + + Декорация4КонтекстноеМеню + 44 + true + + 2 + true + 1 + true + + + StdPicture.BusinessProcessStart + + + + true + true + + true + + + <key>ru</key> + <value>Страница настройка правил текущий</value> + + + СтраницаНастройкаПравилТекущийРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаНастройкаПравилПустой + 46 + + Декорация5 + 48 + true + true + + true + + + Декорация5РасширеннаяПодсказка + 50 + Label + true + true + + Left + + + + Декорация5КонтекстноеМеню + 49 + true + + 2 + true + 2 + true + + + true + true + + true + + + <key>ru</key> + <value>Страница настройка правил пустой</value> + + + СтраницаНастройкаПравилПустойРасширеннаяПодсказка + 47 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Панель настройка правил</value> + + + ПанельНастройкаПравилРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + Pages + + Auto + + + + НастроитьПравилаОтправкиИПолучения + 51 + true + true + + true + + + НастроитьПравилаОтправкиИПолученияРасширеннаяПодсказка + 52 + + <key>ru</key> + <value>Перед началом использования синхронизации данных требуется указать ограничения отправки данных, а также правила получения данных из другой программы (значения по умолчанию).</value> + + Label + true + + Left + + + Hyperlink + Form.Command.НастроитьПравилаОтправкиИПолученияДанных + Normal + Auto + true + UserCmds + ShowBottom + Auto + + true + true + + true + + + <key>ru</key> + <value>Настройка правил</value> + + + ГруппаНастройкаПравилРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + ГруппаНачальныйОбразРИБ + 53 + + ПанельНачальныйОбразРИБ + 55 + + СтраницаНачальныйОбразРИБУспешно + 57 + + Декорация6 + 59 + true + true + + true + + + Декорация6РасширеннаяПодсказка + 61 + Label + true + true + + Left + + + + Декорация6КонтекстноеМеню + 60 + true + + 2 + true + 1 + true + + + CommonPicture.Успешно + + + + true + true + + true + + + <key>ru</key> + <value>Страница начальный образ РИБ успешно</value> + + + СтраницаНачальныйОбразРИБУспешноРасширеннаяПодсказка + 58 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаНачальныйОбразРИБТекущий + 62 + + Декорация7 + 64 + true + true + + true + + + Декорация7РасширеннаяПодсказка + 66 + Label + true + true + + Left + + + + Декорация7КонтекстноеМеню + 65 + true + + 2 + true + 1 + true + + + StdPicture.BusinessProcessStart + + + + true + true + + true + + + <key>ru</key> + <value>Страница начальный образ РИБ текущий</value> + + + СтраницаНачальныйОбразРИБТекущийРасширеннаяПодсказка + 63 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаНачальныйОбразРИБПустой + 67 + + Декорация8 + 69 + true + true + + true + + + Декорация8РасширеннаяПодсказка + 71 + Label + true + true + + Left + + + + Декорация8КонтекстноеМеню + 70 + true + + 2 + true + 2 + true + + + true + true + + true + + + <key>ru</key> + <value>Страница начальный образ РИБ пустой</value> + + + СтраницаНачальныйОбразРИБПустойРасширеннаяПодсказка + 68 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Панель начальный образ РИБ</value> + + + ПанельНачальныйОбразРИБРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + Pages + + Auto + + + + СоздатьНачальныйОбразРИБ + 72 + true + true + + true + + + СоздатьНачальныйОбразРИБРасширеннаяПодсказка + 73 + + <key>ru</key> + <value>Создание начального образа может занять длительное время. +После создания необходимо развернуть информационную базу из созданного образа и выполнить первоначальный запуск программы для завершения настройки. Возможно создать начальный образ позднее. Для этого необходимо открыть параметры настроенной синхронизации и выполнить команду «Создание начального образа подчиненного узла распределенной информационной базы».</value> + + Label + true + + Left + + + Hyperlink + Form.Command.СоздатьНачальныйОбразРИБ + Normal + Auto + true + UserCmds + ShowBottom + Auto + + true + true + + true + + + <key>ru</key> + <value>Начальный образ РИБ</value> + + + ГруппаНачальныйОбразРИБРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + ГруппаСопоставлениеИЗагрузка + 125 + + ПанельСопоставлениеИЗагрузка + 127 + + СтраницаСопоставлениеИЗагрузкаУспешно + 131 + + Декорация16 + 137 + true + true + + true + + + Декорация16РасширеннаяПодсказка + 139 + Label + true + true + + Left + + + + Декорация16КонтекстноеМеню + 138 + true + + 2 + true + 1 + true + + + CommonPicture.Успешно + + + + true + true + + true + + + <key>ru</key> + <value>Страница сопоставление и загрузка успешно</value> + + + СтраницаСопоставлениеИЗагрузкаУспешноРасширеннаяПодсказка + 132 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаСопоставлениеИЗагрузкаТекущий + 133 + + Декорация17 + 140 + true + true + + true + + + Декорация17РасширеннаяПодсказка + 142 + Label + true + true + + Left + + + + Декорация17КонтекстноеМеню + 141 + true + + 2 + true + 1 + true + + + StdPicture.BusinessProcessStart + + + + true + true + + true + + + <key>ru</key> + <value>Страница сопоставление и загрузка текущий</value> + + + СтраницаСопоставлениеИЗагрузкаТекущийРасширеннаяПодсказка + 134 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаСопоставлениеИЗагрузкаПустой + 135 + + Декорация18 + 143 + true + true + + true + + + Декорация18РасширеннаяПодсказка + 145 + Label + true + true + + Left + + + + Декорация18КонтекстноеМеню + 144 + true + + 2 + true + 2 + true + + + true + true + + true + + + <key>ru</key> + <value>Страница сопоставление и загрузка пустой</value> + + + СтраницаСопоставлениеИЗагрузкаПустойРасширеннаяПодсказка + 136 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Панель сопоставление и загрузка</value> + + + ПанельСопоставлениеИЗагрузкаРасширеннаяПодсказка + 128 + Label + true + true + + Left + + + Pages + + Auto + + + + ВыполнитьСопоставлениеИЗагрузкуДанных + 129 + true + true + + true + + + ВыполнитьСопоставлениеИЗагрузкуДанныхРасширеннаяПодсказка + 130 + + <key>ru</key> + <value>Если учет ведется в обеих программах, перед запуском синхронизации следует выполнить сопоставление данных. Это позволит избежать появления дублирующихся элементов справочников, которые независимо друг от друга были введены в обеих программах, например, с одинаковыми наименованиями. С помощью сопоставления можно указать, какие данные являются одинаковыми в двух программах. После чего можно будет выполнить загрузку с учетом настроенных сопоставлений.</value> + + Label + true + + Left + + + Hyperlink + Form.Command.ВыполнитьСопоставлениеИЗагрузкуДанных + Normal + Auto + true + true + UserCmds + ShowBottom + Auto + + true + true + + true + + + <key>ru</key> + <value>Сопоставление и загрузка</value> + + + ГруппаСопоставлениеИЗагрузкаРасширеннаяПодсказка + 126 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + ГруппаНачальнаяВыгрузкаДанных + 74 + + ПанельНачальнаяВыгрузкаДанных + 76 + + СтраницаНачальнаяВыгрузкаДанныхУспешно + 78 + + Декорация9 + 80 + true + true + + true + + + Декорация9РасширеннаяПодсказка + 82 + Label + true + true + + Left + + + + Декорация9КонтекстноеМеню + 81 + true + + 2 + true + 1 + true + + + CommonPicture.Успешно + + + + true + true + + true + + + <key>ru</key> + <value>Страница начальная выгрузка данных успешно</value> + + + СтраницаНачальнаяВыгрузкаДанныхУспешноРасширеннаяПодсказка + 79 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаНачальнаяВыгрузкаДанныхТекущий + 83 + + Декорация10 + 85 + true + true + + true + + + Декорация10РасширеннаяПодсказка + 87 + Label + true + true + + Left + + + + Декорация10КонтекстноеМеню + 86 + true + + 2 + true + 1 + true + + + StdPicture.BusinessProcessStart + + + + true + true + + true + + + <key>ru</key> + <value>Страница начальная выгрузка данных текущий</value> + + + СтраницаНачальнаяВыгрузкаДанныхТекущийРасширеннаяПодсказка + 84 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаНачальнаяВыгрузкаДанныхПустой + 88 + + Декорация11 + 90 + true + true + + true + + + Декорация11РасширеннаяПодсказка + 92 + Label + true + true + + Left + + + + Декорация11КонтекстноеМеню + 91 + true + + 2 + true + 2 + true + + + true + true + + true + + + <key>ru</key> + <value>Страница начальная выгрузка данных пустой</value> + + + СтраницаНачальнаяВыгрузкаДанныхПустойРасширеннаяПодсказка + 89 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Панель начальная выгрузка данных</value> + + + ПанельНачальнаяВыгрузкаДанныхРасширеннаяПодсказка + 77 + Label + true + true + + Left + + + Pages + + Auto + + + + ВыполнитьНачальнуюВыгрузкуДанных + 93 + true + true + + true + + + ВыполнитьНачальнуюВыгрузкуДанныхРасширеннаяПодсказка + 94 + + <key>ru</key> + <value>Будет произведена выгрузка данных из этой программы. Сразу после завершения настройки синхронизации возможно будет выполнить загрузку данных в другой программе и указать, какие данные являются одинаковыми для двух синхронизирующихся программ. +Выгрузку данных можно выполнить позднее из списка настроенных синхронизаций данных.</value> + + Label + true + + Left + + + Hyperlink + Form.Command.ВыполнитьНачальнуюВыгрузкуДанных + Normal + Auto + true + UserCmds + ShowBottom + Auto + + true + true + + true + + + <key>ru</key> + <value>Начальная выгрузка данных</value> + + + ГруппаНачальнаяВыгрузкаДанныхРасширеннаяПодсказка + 75 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Этапы настройки</value> + + + ГруппаНастройкаРасширеннаяПодсказка + 122 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + None + false + + ФормаКоманднаяПанель + -1 + Left + true + + + OnOpen + ПриОткрытии + + + BeforeClose + ПередЗакрытием + + + OnCreateAtServer + ПриСозданииНаСервере + + + OnClose + ПриЗакрытии + + DontBlock + true + true + Vertical + true + true + true + auto + true + + ПодробнаяИнформацияПоОбмену + + <key>ru</key> + <value>Подробная информация по обмену</value> + + 1 + + String + + + + true + + + true + + + + ИмяПланаОбмена + + <key>ru</key> + <value>Имя плана обмена</value> + + 2 + + String + + + + true + + + true + + + + ИдентификаторНастройки + + <key>ru</key> + <value>Идентификатор настройки</value> + + 3 + + String + + + + true + + + true + + + + НастройкаРИБ + + <key>ru</key> + <value>Настройка РИБ</value> + + 4 + + Boolean + + + true + + + true + + + + НаименованиеКонфигурацииКорреспондента + + <key>ru</key> + <value>Наименование конфигурации корреспондента</value> + + 5 + + String + + + + true + + + true + + + + МодельСервиса + + <key>ru</key> + <value>Модель сервиса</value> + + 8 + + Boolean + + + true + + + true + + + + КраткаяИнформацияПоОбмену + + <key>ru</key> + <value>Краткая информация по обмену</value> + + 9 + + String + + + + true + + + true + + + + РезервноеКопирование + + <key>ru</key> + <value>Резервное копирование</value> + + 10 + + Boolean + + + true + + + true + + + + ТекущийЭтапНастройки + + <key>ru</key> + <value>Текущий этап настройки</value> + + 11 + + String + + + + true + + + true + + + + ЭтапыНастройки + + <key>ru</key> + <value>Этапы настройки</value> + + 12 + + ValueTable + + + true + + + true + + + Название + + <key>ru</key> + <value>Название</value> + + 3 + + String + + + + true + + + true + + + + Кнопка + + <key>ru</key> + <value>Кнопка</value> + + 1 + + String + + + + true + + + true + + + + ШрифтОбычный + + <key>ru</key> + <value>Шрифт обычный</value> + + 2 + + + true + + + true + + + + ШрифтЖирный + + <key>ru</key> + <value>Шрифт жирный</value> + + 4 + + + true + + + true + + + + + УзелОбмена + + <key>ru</key> + <value>Узел обмена</value> + + 13 + + ExchangePlanRef + + + true + + + true + + + + ИмяФормыПомощникаНастройкиСинхронизацииДанных + + <key>ru</key> + <value>Имя формы помощника настройки синхронизации данных</value> + + 14 + + String + + + + true + + + true + + + + ИмяФормыСозданияНачальногоОбраза + + <key>ru</key> + <value>Имя формы создания начального образа</value> + + 15 + + String + + + + true + + + true + + + + ПродолжениеНастройкиВПодчиненномУзлеРИБ + + <key>ru</key> + <value>Продолжение настройки в подчиненном узле РИБ</value> + + 16 + + Boolean + + + true + + + true + + + + НастройкаНовойСинхронизации + + <key>ru</key> + <value>Настройка новой синхронизации</value> + + 17 + + Boolean + + + true + + + true + + + + ЗакрытьФормуБезусловно + + <key>ru</key> + <value>Закрыть форму безусловно</value> + + 18 + + Boolean + + + true + + + true + + + + ВсеЭтапыНастройки + + <key>ru</key> + <value>Все этапы настройки</value> + + 19 + + + true + + + true + + + + НастройкаXDTO + + <key>ru</key> + <value>Настройка XDTO</value> + + 20 + + Boolean + + + true + + + true + + + + НавигационнаяСсылкаОбработкиРезервногоКопирования + + <key>ru</key> + <value>Навигационная ссылка обработки резервного копирования</value> + + 21 + + String + + + + true + + + true + + + + ПолученыДанныеДляСопоставления + + <key>ru</key> + <value>Получены данные для сопоставления</value> + + 22 + + Boolean + + + true + + + true + + + + НастройкаЗавершена + + <key>ru</key> + <value>Настройка завершена</value> + + 23 + + Boolean + + + true + + + true + + + + ЗаголовокПомощникаСозданияОбмена + + <key>ru</key> + <value>Заголовок помощника создания обмена</value> + + 24 + + String + + + + true + + + true + + + + НастройкаУниверсальногоОбмена + + <key>ru</key> + <value>Настройка универсального обмена</value> + + 25 + + Boolean + + + true + + + true + + + + ЕстьНастройкиТранспорта + + <key>ru</key> + <value>Есть настройки транспорта</value> + + 26 + + Boolean + + + true + + + true + + + + ОбластьДанныхКорреспондента + + <key>ru</key> + <value>Область данных корреспондента</value> + + 27 + + Number + + 10 + + + + true + + + true + + + + ЭтоОбменСПриложениемВСервисе + + <key>ru</key> + <value>Это обмен с приложением в сервисе</value> + + 28 + + Boolean + + + true + + + true + + + + ПодробноеОписаниеСинхронизацииДанных + + <key>ru</key> + <value>Подробное описание</value> + + 1 + + ru + Подробное описание синхронизации данных + + + true + + + CommonPicture.Информация + + + + ПодробноеОписаниеСинхронизацииДанных + + + Auto + Auto + + + НастроитьПараметрыПодключения + + <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 + + + ВыполнитьНачальнуюВыгрузкуДанных + + <key>ru</key> + <value>Выполнить начальную выгрузку данных</value> + + 5 + + ru + Выполнить начальную выгрузку данных + + + true + + + + ВыполнитьНачальнуюВыгрузкуДанных + + + Auto + Auto + + + НастроитьРасписание + + <key>ru</key> + <value>Настроить расписание синхронизации данных</value> + + 6 + + ru + Настроить расписание + + + true + + + + НастроитьРасписание + + + Auto + Auto + + + ВыполнитьСопоставлениеИЗагрузкуДанных + + <key>ru</key> + <value>Выполнить сопоставление и загрузку данных</value> + + 7 + + 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..d38594994 --- /dev/null +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаСинхронизации/Module.bsl @@ -0,0 +1,666 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + ОбменДаннымиСервер.ПроверитьВозможностьАдминистрированияОбменов(); + + ИнициализироватьРеквизитыФормы(); + + ИнициализироватьСвойстваФормы(); + + УстановитьНачальноеОтображениеЭлементовФормы(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + ЗаполнитьТаблицуЭтаповНастройки(); + ОбновитьОтображениеТекущегоСостоянияНастройки(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) + + Если ЗавершениеРаботы Тогда + Возврат; + КонецЕсли; + + Если Не ЗначениеЗаполнено(УзелОбмена) + Или Не НастройкаСинхронизацииЗавершена(УзелОбмена) + Или (НастройкаРИБ И Не ПродолжениеНастройкиВПодчиненномУзлеРИБ И Не НачальныйОбразСоздан(УзелОбмена))Тогда + ТекстПредупреждения = НСтр("ru = 'Настройка синхронизации данных еще не завершена. + |Завершить работу с помощником? Настройку можно будет продолжить позже.'"); + ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияПроизвольнойФормы( + ЭтотОбъект, Отказ, ЗавершениеРаботы, ТекстПредупреждения, "ЗакрытьФормуБезусловно"); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗакрытии(ЗавершениеРаботы) + + Если Не ЗавершениеРаботы Тогда + Оповестить("ЗакрытаФормаПомощникаСозданияОбменаДанными"); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ДекорацияРезервноеКопированиеНадписьОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + Если РезервноеКопирование Тогда + ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(НавигационнаяСсылкаОбработкиРезервногоКопирования); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ПодробноеОписаниеСинхронизацииДанных(Команда) + + ОбменДаннымиКлиент.ОткрытьПодробноеОписаниеСинхронизации(ПодробнаяИнформацияПоОбмену); + +КонецПроцедуры + +&НаКлиенте +Процедура НастроитьПараметрыПодключения(Команда) + + Если Не НастройкаНовойСинхронизации Тогда + Если МодельСервиса Тогда + СтрокаПредупреждение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Настройка подключения к ""%1"" уже выполнена. + |Редактирование параметров подключения не предусмотрено.'"), УзелОбмена); + ПоказатьПредупреждение(, СтрокаПредупреждение); + Возврат; + Иначе + Отбор = Новый Структура("Корреспондент", УзелОбмена); + ЗначенияЗаполнения = Новый Структура("Корреспондент", УзелОбмена); + + ОбменДаннымиКлиент.ОткрытьФормуЗаписиРегистраСведенийПоОтбору(Отбор, + ЗначенияЗаполнения, "НастройкиТранспортаОбменаДанными", ЭтотОбъект); + КонецЕсли; + Возврат; + КонецЕсли; + + ПараметрыПомощника = Новый Структура; + ПараметрыПомощника.Вставить("ИмяПланаОбмена", ИмяПланаОбмена); + ПараметрыПомощника.Вставить("ИдентификаторНастройки", ИдентификаторНастройки); + Если ПродолжениеНастройкиВПодчиненномУзлеРИБ Тогда + ПараметрыПомощника.Вставить("ПродолжениеНастройкиВПодчиненномУзлеРИБ"); + КонецЕсли; + + ОповещениеОЗакрытии = Новый ОписаниеОповещения("НастроитьПараметрыПодключенияЗавершение", ЭтотОбъект); + ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.НастройкаПодключения", + ПараметрыПомощника, ЭтотОбъект, , , , ОповещениеОЗакрытии, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + +КонецПроцедуры + +&НаКлиенте +Процедура НастроитьПравилаОтправкиИПолученияДанных(Команда) + + ОповещениеПродолжения = Новый ОписаниеОповещения("НастроитьПравилаОтправкиИПолученияДанныхПродолжение", ЭтотОбъект); + + // Для плана обмена XDTO перед настройкой правил выгрузки и загрузки + // должны быть получены настройки корреспондента. + Если НастройкаXDTO Тогда + СостояниеНастройки = СостояниеНастройкиСинхронизации(УзелОбмена); + Если Не СостояниеНастройки.НастройкаСинхронизацииЗавершена + И Не СостояниеНастройки.ПолученыНастройкиXDTOКорреспондента Тогда + + ПараметрыЗагрузки = Новый Структура; + ПараметрыЗагрузки.Вставить("УзелОбмена", УзелОбмена); + + ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.ЗагрузкаНастроекXDTO", + ПараметрыЗагрузки, ЭтотОбъект, , , , ОповещениеПродолжения, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + Возврат; + КонецЕсли; + КонецЕсли; + + Результат = Новый Структура; + Результат.Вставить("ПродолжитьНастройку", Истина); + Результат.Вставить("ПолученыДанныеДляСопоставления", ПолученыДанныеДляСопоставления); + + ВыполнитьОбработкуОповещения(ОповещениеПродолжения, Результат); + +КонецПроцедуры + +&НаКлиенте +Процедура СоздатьНачальныйОбразРИБ(Команда) + + ПараметрыПомощника = Новый Структура("Ключ, Узел", УзелОбмена, УзелОбмена); + + ОповещениеОЗакрытии = Новый ОписаниеОповещения("СоздатьНачальныйОбразРИБЗавершение", ЭтотОбъект); + ОткрытьФорму(ИмяФормыСозданияНачальногоОбраза, + ПараметрыПомощника, ЭтотОбъект, , , , ОповещениеОЗакрытии, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьСопоставлениеИЗагрузкуДанных(Команда) + + ОповещениеПродолжения = Новый ОписаниеОповещения("ВыполнитьСопоставлениеИЗагрузкуДанныхПродолжение", ЭтотОбъект); + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ОтправитьДанные", Ложь); + ДополнительныеПараметры.Вставить("НастройкаРасписания", Ложь); + + Если МодельСервиса Тогда + ДополнительныеПараметры.Вставить("ОбластьДанныхКорреспондента", ОбластьДанныхКорреспондента); + КонецЕсли; + + ОбменДаннымиКлиент.ОткрытьПомощникСопоставленияОбъектовОбработкаКоманды(УзелОбмена, + ЭтотОбъект, ДополнительныеПараметры, ОповещениеПродолжения); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьНачальнуюВыгрузкуДанных(Команда) + + ПараметрыПомощника = Новый Структура; + ПараметрыПомощника.Вставить("УзелОбмена", УзелОбмена); + ПараметрыПомощника.Вставить("НачальнаяВыгрузка"); + + Если МодельСервиса Тогда + ПараметрыПомощника.Вставить("ЭтоОбменСПриложениемВСервисе", ЭтоОбменСПриложениемВСервисе); + ПараметрыПомощника.Вставить("ОбластьДанныхКорреспондента", ОбластьДанныхКорреспондента); + КонецЕсли; + + ОповещениеОЗакрытии = Новый ОписаниеОповещения("ВыполнитьНачальнуюВыгрузкуДанныхЗавершение", ЭтотОбъект); + ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.ВыгрузкаДанныхДляСопоставления", + ПараметрыПомощника, ЭтотОбъект, , , , ОповещениеОЗакрытии, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + +КонецПроцедуры + +&НаКлиенте +Процедура НастроитьРасписание(Команда) + + РасписаниеВыполненияОбменаДанными = ПредопределенноеРасписаниеКаждыйЧас(); + + Диалог = Новый ДиалогРасписанияРегламентногоЗадания(РасписаниеВыполненияОбменаДанными); + ОписаниеОповещения = Новый ОписаниеОповещения("НастроитьРасписаниеЗавершение", ЭтотОбъект); + Диалог.Показать(ОписаниеОповещения); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервереБезКонтекста +Функция СостояниеНастройкиСинхронизации(УзелОбмена) + + Результат = Новый Структура; + Результат.Вставить("НастройкаСинхронизацииЗавершена", НастройкаСинхронизацииЗавершена(УзелОбмена)); + Результат.Вставить("НачальныйОбразСоздан", НачальныйОбразСоздан(УзелОбмена)); + Результат.Вставить("ПолученоСообщениеСДаннымиДляСопоставления", ОбменДаннымиСервер.ПолученоСообщениеСДаннымиДляСопоставления(УзелОбмена)); + Результат.Вставить("ПолученыНастройкиXDTOКорреспондента", ПолученыНастройкиXDTOКорреспондента(УзелОбмена)); + + Возврат Результат; + +КонецФункции + +&НаСервереБезКонтекста +Функция ПолученыНастройкиXDTOКорреспондента(УзелОбмена) + + НастройкиКорреспондента = ОбменДаннымиXDTOСервер.ПоддерживаемыеОбъектыФорматаКорреспондента(УзелОбмена, "ОтправкаПолучение"); + + Возврат НастройкиКорреспондента.Количество() > 0; + +КонецФункции + +&НаСервереБезКонтекста +Функция НачальныйОбразСоздан(УзелОбмена) + + Возврат РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.НачальныйОбразСоздан(УзелОбмена); + +КонецФункции + +&НаСервереБезКонтекста +Функция ПредопределенноеРасписаниеКаждыйЧас() + + Возврат Обработки.ПомощникСозданияОбменаДанными.ПредопределенноеРасписаниеКаждыйЧас(); + +КонецФункции + +&НаСервереБезКонтекста +Процедура СоздатьСценарийОбменаДаннымиПоРасписанию(УзелОбмена, Расписание) + + Справочники.СценарииОбменовДанными.СоздатьСценарий(УзелОбмена, Расписание); + +КонецПроцедуры + +&НаКлиенте +Процедура НастроитьПараметрыПодключенияЗавершение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт + + Если РезультатЗакрытия <> Неопределено + И ТипЗнч(РезультатЗакрытия) = Тип("Структура") Тогда + + Если РезультатЗакрытия.Свойство("УзелОбмена") Тогда + УзелОбмена = РезультатЗакрытия.УзелОбмена; + КонецЕсли; + + Если МодельСервиса Тогда + РезультатЗакрытия.Свойство("ЭтоОбменСПриложениемВСервисе", ЭтоОбменСПриложениемВСервисе); + РезультатЗакрытия.Свойство("ОбластьДанныхКорреспондента", ОбластьДанныхКорреспондента); + КонецЕсли; + + Если РезультатЗакрытия.Свойство("ЕстьДанныеДляСопоставления") + И РезультатЗакрытия.ЕстьДанныеДляСопоставления Тогда + ПолученыДанныеДляСопоставления = Истина; + + ЗаполнитьТаблицуЭтаповНастройки(); + ОбновитьОтображениеТекущегоСостоянияНастройки(); + КонецЕсли; + + Если ТекущийЭтапНастройки = "НастройкаПодключения" Тогда + ПерейтиКСледующемуЭтапуНастройки(); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура НастроитьПравилаОтправкиИПолученияДанныхПродолжение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт + + Если Не РезультатЗакрытия.ПродолжитьНастройку Тогда + Возврат; + КонецЕсли; + + Если РезультатЗакрытия.ПолученыДанныеДляСопоставления + И Не ПолученыДанныеДляСопоставления Тогда + ПолученыДанныеДляСопоставления = РезультатЗакрытия.ПолученыДанныеДляСопоставления; + + ЗаполнитьТаблицуЭтаповНастройки(); + ОбновитьОтображениеТекущегоСостоянияНастройки(); + КонецЕсли; + + ПараметрыПомощника = Новый Структура; + + Если ПустаяСтрока(ИмяФормыПомощникаНастройкиСинхронизацииДанных) Тогда + ПараметрыПомощника.Вставить("Ключ", УзелОбмена); + ПараметрыПомощника.Вставить("ИмяФормыПомощника", "ПланОбмена.[ИмяПланаОбмена].ФормаОбъекта"); + + ПараметрыПомощника.ИмяФормыПомощника = СтрЗаменить(ПараметрыПомощника.ИмяФормыПомощника, + "[ИмяПланаОбмена]", ИмяПланаОбмена); + Иначе + ПараметрыПомощника.Вставить("УзелОбмена", УзелОбмена); + ПараметрыПомощника.Вставить("ИмяФормыПомощника", ИмяФормыПомощникаНастройкиСинхронизацииДанных); + КонецЕсли; + + ОповещениеОЗакрытии = Новый ОписаниеОповещения("НастроитьПравилаОтправкиИПолученияДанныхЗавершение", ЭтотОбъект); + + ОткрытьФорму(ПараметрыПомощника.ИмяФормыПомощника, + ПараметрыПомощника, ЭтотОбъект, , , , ОповещениеОЗакрытии, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + +КонецПроцедуры + +&НаКлиенте +Процедура НастроитьПравилаОтправкиИПолученияДанныхЗавершение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт + + Если ТекущийЭтапНастройки = "НастройкаПравил" + И НастройкаСинхронизацииЗавершена(УзелОбмена) Тогда + Оповестить("Запись_УзелПланаОбмена"); + ПерейтиКСледующемуЭтапуНастройки(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьСопоставлениеИЗагрузкуДанныхПродолжение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт + + Если ТекущийЭтапНастройки = "СопоставлениеИЗагрузка" + И ВыполненаЗагрузкаДанных(УзелОбмена) Тогда + ПерейтиКСледующемуЭтапуНастройки(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СоздатьНачальныйОбразРИБЗавершение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт + + Если ТекущийЭтапНастройки = "НачальныйОбразРИБ" + И НачальныйОбразСоздан(УзелОбмена) Тогда + ПерейтиКСледующемуЭтапуНастройки(); + КонецЕсли; + + ОбновитьИнтерфейс(); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьНачальнуюВыгрузкуДанныхЗавершение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт + + Если ТекущийЭтапНастройки = "НачальнаяВыгрузкаДанных" + И РезультатЗакрытия = УзелОбмена Тогда + ПерейтиКСледующемуЭтапуНастройки(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура НастроитьРасписаниеЗавершение(Расписание, ДополнительныеПараметры) Экспорт + + Если Расписание <> Неопределено Тогда + + СоздатьСценарийОбменаДаннымиПоРасписанию(УзелОбмена, Расписание); + + Если ТекущийЭтапНастройки = "НастройкаРасписания" Тогда + ПерейтиКСледующемуЭтапуНастройки(); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьОтображениеТекущегоСостоянияНастройки() + + Если ПустаяСтрока(ТекущийЭтапНастройки) Тогда + // Все этапы завершены. + Для Каждого ЭтапНастройки Из ЭтапыНастройки Цикл + Элементы["Группа" + ЭтапНастройки.Название].Доступность = Истина; + Элементы[ЭтапНастройки.Кнопка].Шрифт = ЭтапНастройки.ШрифтОбычный; + + // Зеленый флажок только для основных этапов настройки. + Если ВсеЭтапыНастройки[ЭтапНастройки.Название] = "Основное" Тогда + Элементы["Панель" + ЭтапНастройки.Название].ТекущаяСтраница = Элементы["Страница" + ЭтапНастройки.Название + "Успешно"]; + Иначе + Элементы["Панель" + ЭтапНастройки.Название].ТекущаяСтраница = Элементы["Страница" + ЭтапНастройки.Название + "Пустой"]; + КонецЕсли; + КонецЦикла; + Иначе + + ТекущийЭтапНайден = Ложь; + Для Каждого ЭтапНастройки Из ЭтапыНастройки Цикл + Если ЭтапНастройки.Название = ТекущийЭтапНастройки Тогда + Элементы["Группа" + ЭтапНастройки.Название].Доступность = Истина; + Элементы["Панель" + ЭтапНастройки.Название].ТекущаяСтраница = Элементы["Страница" + ЭтапНастройки.Название + "Текущий"]; + Элементы[ЭтапНастройки.Кнопка].Шрифт = ЭтапНастройки.ШрифтЖирный; + ТекущийЭтапНайден = Истина; + ИначеЕсли Не ТекущийЭтапНайден Тогда + Элементы["Группа" + ЭтапНастройки.Название].Доступность = Истина; + Элементы["Панель" + ЭтапНастройки.Название].ТекущаяСтраница = Элементы["Страница" + ЭтапНастройки.Название + "Успешно"]; + Элементы[ЭтапНастройки.Кнопка].Шрифт = ЭтапНастройки.ШрифтОбычный; + Иначе + Элементы["Группа" + ЭтапНастройки.Название].Доступность = Ложь; + Элементы["Панель" + ЭтапНастройки.Название].ТекущаяСтраница = Элементы["Страница" + ЭтапНастройки.Название + "Пустой"]; + Элементы[ЭтапНастройки.Кнопка].Шрифт = ЭтапНастройки.ШрифтОбычный; + КонецЕсли; + КонецЦикла; + + Для Каждого ЭтапНастройки Из ВсеЭтапыНастройки Цикл + СтрокиЭтапы = ЭтапыНастройки.НайтиСтроки(Новый Структура("Название", ЭтапНастройки.Ключ)); + Если СтрокиЭтапы.Количество() = 0 Тогда + Элементы["Группа" + ЭтапНастройки.Ключ].Доступность = Ложь; + Элементы["Панель" + ЭтапНастройки.Ключ].ТекущаяСтраница = Элементы["Страница" + ЭтапНастройки.Ключ + "Пустой"]; + КонецЕсли; + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПерейтиКСледующемуЭтапуНастройки() + + СледующаяСтрока = Неопределено; + ТекущийЭтапНайден = Ложь; + Для Каждого СтрокаЭтапыНастройки Из ЭтапыНастройки Цикл + Если ТекущийЭтапНайден Тогда + СледующаяСтрока = СтрокаЭтапыНастройки; + Прервать; + КонецЕсли; + + Если СтрокаЭтапыНастройки.Название = ТекущийЭтапНастройки Тогда + ТекущийЭтапНайден = Истина; + КонецЕсли; + КонецЦикла; + + Если СледующаяСтрока <> Неопределено Тогда + ТекущийЭтапНастройки = СледующаяСтрока.Название; + Если ВсеЭтапыНастройки[ТекущийЭтапНастройки] <> "Основное" Тогда + ТекущийЭтапНастройки = ""; + КонецЕсли; + Иначе + ТекущийЭтапНастройки = ""; + КонецЕсли; + + ПодключитьОбработчикОжидания("ОбновитьОтображениеТекущегоСостоянияНастройки", 0.2, Истина); + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция НастройкаСинхронизацииЗавершена(УзелОбмена) + + Возврат ОбменДаннымиСервер.НастройкаСинхронизацииЗавершена(УзелОбмена); + +КонецФункции + +&НаСервереБезКонтекста +Функция ВыполненаЗагрузкаДанных(УзелОбмена) + + Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелОбмена, "НомерПринятого") > 0; + +КонецФункции + +#Область ИнициализацияФормыПриСоздании + +&НаСервере +Процедура ИнициализироватьСвойстваФормы() + + Если ПустаяСтрока(ЗаголовокПомощникаСозданияОбмена) Тогда + Если НастройкаРИБ Тогда + Заголовок = НСтр("ru = 'Настройка распределенной информационной базы'"); + Иначе + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Настройка синхронизации данных с ""%1""'"), + НаименованиеКонфигурацииКорреспондента); + КонецЕсли; + Иначе + Заголовок = ЗаголовокПомощникаСозданияОбмена; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ИнициализироватьРеквизитыФормы() + + НастройкаНовойСинхронизации = Параметры.Свойство("НастройкаНовойСинхронизации"); + + МодельСервиса = ОбщегоНазначения.РазделениеВключено() + И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных(); + + Если НастройкаНовойСинхронизации Тогда + ИмяПланаОбмена = Параметры.ИмяПланаОбмена; + ИдентификаторНастройки = Параметры.ИдентификаторНастройки; + + ПродолжениеНастройкиВПодчиненномУзлеРИБ = Параметры.Свойство("ПродолжениеНастройкиВПодчиненномУзлеРИБ"); + + Если Не ПродолжениеНастройкиВПодчиненномУзлеРИБ Тогда + Если ОбменДаннымиСервер.ЭтоПодчиненныйУзелРИБ() Тогда + ИмяПланаОбменаРИБ = ОбменДаннымиСервер.ГлавныйУзел().Метаданные().Имя; + + ПродолжениеНастройкиВПодчиненномУзлеРИБ = (ИмяПланаОбмена = ИмяПланаОбменаРИБ) + И Не Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Получить(); + + КонецЕсли; + КонецЕсли; + + Если ПродолжениеНастройкиВПодчиненномУзлеРИБ Тогда + ОбменДаннымиСервер.ПриПродолженииНастройкиПодчиненногоУзлаРИБ(); + УзелОбмена = ОбменДаннымиСервер.ГлавныйУзел(); + КонецЕсли; + Иначе + УзелОбмена = Параметры.УзелОбмена; + + ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелОбмена); + ИдентификаторНастройки = ОбменДаннымиСервер.СохраненныйВариантНастройкиУзлаПланаОбмена(УзелОбмена); + + Если МодельСервиса Тогда + Параметры.Свойство("ОбластьДанныхКорреспондента", ОбластьДанныхКорреспондента); + Параметры.Свойство("ЭтоОбменСПриложениемВСервисе", ЭтоОбменСПриложениемВСервисе); + КонецЕсли; + КонецЕсли; + + ВидТранспорта = Неопределено; + Если ЗначениеЗаполнено(УзелОбмена) Тогда + НастройкаЗавершена = НастройкаСинхронизацииЗавершена(УзелОбмена); + ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелОбмена); + ЕстьНастройкиТранспорта = ЗначениеЗаполнено(ВидТранспорта); + КонецЕсли; + + РезервноеКопирование = Не МодельСервиса + И Не ПродолжениеНастройкиВПодчиненномУзлеРИБ + И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РезервноеКопированиеИБ"); + + Если РезервноеКопирование Тогда + МодульРезервноеКопированиеИБСервер = ОбщегоНазначения.ОбщийМодуль("РезервноеКопированиеИБСервер"); + + НавигационнаяСсылкаОбработкиРезервногоКопирования = + МодульРезервноеКопированиеИБСервер.НавигационнаяСсылкаОбработкиРезервногоКопирования(); + КонецЕсли; + + НастройкаРИБ = ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(ИмяПланаОбмена); + НастройкаXDTO = ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ИмяПланаОбмена); + + НастройкаУниверсальногоОбмена = ОбменДаннымиПовтИсп.ЭтоУзелСтандартногоОбменаДанными(ИмяПланаОбмена); // без правил конвертации + + Если НастройкаНовойСинхронизации + Или НастройкаРИБ + Или НастройкаУниверсальногоОбмена Тогда + ПолученыДанныеДляСопоставления = Ложь; + ИначеЕсли МодельСервиса Тогда + ПолученыДанныеДляСопоставления = ОбменДаннымиСервер.ПолученоСообщениеСДаннымиДляСопоставления(УзелОбмена); + Иначе + Если ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.COM + Или ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS + Или ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим + Или Не ЕстьНастройкиТранспорта Тогда + ПолученыДанныеДляСопоставления = ОбменДаннымиСервер.ПолученоСообщениеСДаннымиДляСопоставления(УзелОбмена); + Иначе + ПолученыДанныеДляСопоставления = Истина; + КонецЕсли; + КонецЕсли; + + ЗначенияНастроекДляВарианта = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, + "НаименованиеКонфигурацииКорреспондента, + |КраткаяИнформацияПоОбмену, + |ЗаголовокПомощникаСозданияОбмена, + |ПодробнаяИнформацияПоОбмену, + |ИмяФормыСозданияНачальногоОбраза, + |ИмяФормыПомощникаНастройкиСинхронизацииДанных", + ИдентификаторНастройки); + + ЗаполнитьЗначенияСвойств(ЭтотОбъект, ЗначенияНастроекДляВарианта); + + Если ПустаяСтрока(ИмяФормыСозданияНачальногоОбраза) + И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + ИмяФормыСозданияНачальногоОбраза = "ОбщаяФорма.[ФормаСозданияНачальногоОбраза]"; + ИмяФормыСозданияНачальногоОбраза = СтрЗаменить(ИмяФормыСозданияНачальногоОбраза, + "[ФормаСозданияНачальногоОбраза]", "СозданиеНачальногоОбразаСФайлами"); + КонецЕсли; + + ТекущийЭтапНастройки = ""; + Если НастройкаНовойСинхронизации Тогда + ТекущийЭтапНастройки = "НастройкаПодключения"; + Иначе + Если Не НастройкаСинхронизацииЗавершена(УзелОбмена) Тогда + ТекущийЭтапНастройки = "НастройкаПравил"; + ИначеЕсли НастройкаРИБ + И Не ПродолжениеНастройкиВПодчиненномУзлеРИБ + И Не НачальныйОбразСоздан(УзелОбмена) Тогда + Если Не ПустаяСтрока(ИмяФормыСозданияНачальногоОбраза) Тогда + ТекущийЭтапНастройки = "НачальныйОбразРИБ"; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + ВсеЭтапыНастройки = Новый Структура; + ВсеЭтапыНастройки.Вставить("НастройкаПодключения", "Основное"); + ВсеЭтапыНастройки.Вставить("НастройкаПравил", "Основное"); + ВсеЭтапыНастройки.Вставить("НачальныйОбразРИБ", "Основное"); + ВсеЭтапыНастройки.Вставить("СопоставлениеИЗагрузка", "Основное"); + ВсеЭтапыНастройки.Вставить("НачальнаяВыгрузкаДанных", "Основное"); + +КонецПроцедуры + +&НаКлиенте +Функция ДобавитьЭтапНастройки(Название, Кнопка) + + СтрокаЭтап = ЭтапыНастройки.Добавить(); + СтрокаЭтап.Название = Название; + СтрокаЭтап.Кнопка = Кнопка; + СтрокаЭтап.ШрифтОбычный = Новый Шрифт(Элементы[Кнопка].Шрифт, , , Ложь); + СтрокаЭтап.ШрифтЖирный = Новый Шрифт(Элементы[Кнопка].Шрифт, , , Истина); + + Возврат СтрокаЭтап; + +КонецФункции + +&НаКлиенте +Процедура ЗаполнитьТаблицуЭтаповНастройки() + + ЭтапыНастройки.Очистить(); + + Если ЕстьНастройкиТранспорта + Или НастройкаНовойСинхронизации Тогда + ДобавитьЭтапНастройки("НастройкаПодключения", "НастроитьПараметрыПодключения"); + КонецЕсли; + + ДобавитьЭтапНастройки("НастройкаПравил", "НастроитьПравилаОтправкиИПолучения"); + + Если НастройкаРИБ + И Не ПродолжениеНастройкиВПодчиненномУзлеРИБ + И Не ПустаяСтрока(ИмяФормыСозданияНачальногоОбраза) Тогда + ДобавитьЭтапНастройки("НачальныйОбразРИБ", "СоздатьНачальныйОбразРИБ"); + КонецЕсли; + + Если Не НастройкаРИБ + И Не НастройкаУниверсальногоОбмена + И ПолученыДанныеДляСопоставления Тогда + ДобавитьЭтапНастройки("СопоставлениеИЗагрузка", "ВыполнитьСопоставлениеИЗагрузкуДанных"); + КонецЕсли; + + Если Не НастройкаРИБ + И (ЕстьНастройкиТранспорта + Или НастройкаНовойСинхронизации) Тогда + ДобавитьЭтапНастройки("НачальнаяВыгрузкаДанных", "ВыполнитьНачальнуюВыгрузкуДанных"); + КонецЕсли; + + // Видимость элементов настройки. + Для Каждого ЭтапНастройки Из ВсеЭтапыНастройки Цикл + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "Группа" + ЭтапНастройки.Ключ, + "Видимость", + ЭтапыНастройки.НайтиСтроки(Новый Структура("Название", ЭтапНастройки.Ключ)).Количество() > 0); + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьНачальноеОтображениеЭлементовФормы() + + Элементы.ДекорацияКраткаяИнформацияПоОбменуНадпись.Заголовок = КраткаяИнформацияПоОбмену; + Элементы.ГруппаРезервноеКопирование.Видимость = РезервноеКопирование; + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти \ 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..986ecc65f --- /dev/null +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НоваяСинхронизацияДанных/Form.form @@ -0,0 +1,170 @@ + + + + ГруппаОбменДругиеПрограммы + 15 + true + true + + true + + + <key>ru</key> + <value>Обмен данными с другими программами</value> + + + ГруппаОбменДругиеПрограммыРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + UsualGroup + + Vertical + Collapsible + Button + WeakSeparation + true + true + auto + Auto + Auto + + + + ГруппаОбменРИБ + 17 + true + true + + true + + + <key>ru</key> + <value>Распределенные информационные базы</value> + + + ГруппаОбменРИБРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + UsualGroup + + Vertical + Collapsible + Button + WeakSeparation + true + true + auto + Auto + Auto + + + None + false + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + КомандыСозданияОбмена + + <key>ru</key> + <value>Команды создания обмена</value> + + 1 + + ValueTable + + + true + + + true + + + ИмяКоманды + + <key>ru</key> + <value>Имя команды</value> + + 1 + + String + + + + true + + + true + + + + ИдентификаторНастройки + + <key>ru</key> + <value>Идентификатор настройки</value> + + 3 + + String + + + + true + + + true + + + + ИмяПланаОбмена + + <key>ru</key> + <value>Имя плана обмена</value> + + 5 + + String + + + + true + + + true + + + + + + + + diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НоваяСинхронизацияДанных/Module.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НоваяСинхронизацияДанных/Module.bsl new file mode 100644 index 000000000..6d187af11 --- /dev/null +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НоваяСинхронизацияДанных/Module.bsl @@ -0,0 +1,175 @@ +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + ОбменДаннымиСервер.ПроверитьВозможностьАдминистрированияОбменов(); + + ПроверитьВозможностьНастройкиСинхронизацииДанных(Отказ); + + Если Отказ Тогда + Возврат; + КонецЕсли; + + ДобавитьКомандыСозданияНовогоОбмена(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура НастройкаПараметровТранспортаОбменаДанными(Команда) + + СтрокиКоманды = КомандыСозданияОбмена.НайтиСтроки(Новый Структура("ИмяКоманды", Команда.Имя)); + + Если СтрокиКоманды.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ПараметрыПомощника = Новый Структура; + ПараметрыПомощника.Вставить("ИмяПланаОбмена", СтрокиКоманды[0].ИмяПланаОбмена); + ПараметрыПомощника.Вставить("ИдентификаторНастройки", СтрокиКоманды[0].ИдентификаторНастройки); + ПараметрыПомощника.Вставить("НастройкаНовойСинхронизации"); + + КлючУникальностиПомощника = ПараметрыПомощника.ИмяПланаОбмена + "_" + ПараметрыПомощника.ИдентификаторНастройки; + + ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.НастройкаСинхронизации", ПараметрыПомощника, , КлючУникальностиПомощника); + + Закрыть(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура ДобавитьКомандыСозданияНовогоОбмена() + + КомандыСозданияОбмена.Очистить(); + + ТаблицаНастройки = Неопределено; + Обработки.ПомощникСозданияОбменаДанными.ПриПолученииДоступныхНастроекСинхронизацииДанных(ТаблицаНастройки, Истина); + + НаименованияКонфигураций = Новый Соответствие; + Для Каждого СтрокаНастройки Из ТаблицаНастройки Цикл + Если СтрокаНастройки.ЭтоПланОбменаРаспределеннойИнформационнойБазы Тогда + Продолжить; + КонецЕсли; + + НаименованияКонфигураций.Вставить(СтрокаНастройки.ИмяКонфигурацииКорреспондента, + СтрокаНастройки.НаименованиеКонфигурацииКорреспондента); + КонецЦикла; + + ТаблицаНастройки.Сортировать("ЭтоПланОбменаXDTO"); + + ТаблицаКонфигурации = ТаблицаНастройки.Скопировать(, + "ИмяКонфигурацииКорреспондента, ЭтоПланОбменаРаспределеннойИнформационнойБазы"); + ТаблицаКонфигурации.Свернуть("ИмяКонфигурацииКорреспондента, ЭтоПланОбменаРаспределеннойИнформационнойБазы"); + + НомерКонфигурации = 0; + Для Каждого СтрокаКонфигурация Из ТаблицаКонфигурации Цикл + + НомерКонфигурации = НомерКонфигурации + 1; + + Отбор = Новый Структура("ИмяКонфигурацииКорреспондента, ЭтоПланОбменаРаспределеннойИнформационнойБазы"); + ЗаполнитьЗначенияСвойств(Отбор, СтрокаКонфигурация); + + СтрокиНастройки = ТаблицаНастройки.НайтиСтроки(Отбор); + + Если СтрокиНастройки.Количество() = 0 Тогда + Продолжить; + КонецЕсли; + + РодительскаяГруппа = Неопределено; + + Если СтрокаКонфигурация.ЭтоПланОбменаРаспределеннойИнформационнойБазы Тогда + РодительскаяГруппа = Элементы.ГруппаОбменРИБ; + Иначе + РодительскаяГруппа = Элементы.ГруппаОбменДругиеПрограммы; + КонецЕсли; + + НомерНастройки = 0; + Для Каждого СтрокаНастройки Из СтрокиНастройки Цикл + + НомерНастройки = НомерНастройки + 1; + + ГруппаВариант = Элементы.Добавить("ГруппаКонфигурация" + НомерКонфигурации + "Настройка" + НомерНастройки, + Тип("ГруппаФормы"), РодительскаяГруппа); + ГруппаВариант.Вид = ВидГруппыФормы.ОбычнаяГруппа; + ГруппаВариант.Отображение = ОтображениеОбычнойГруппы.Нет; + ГруппаВариант.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; + ГруппаВариант.ОтображатьЗаголовок = Ложь; + + ИмяКоманды = "КомандаКонфигурация" + НомерКонфигурации + "Настройка" + НомерНастройки; + + СоздатьКомандуИЭлементФормы(ИмяКоманды, + СтрокаНастройки.ЗаголовокКомандыДляСозданияНовогоОбменаДанными, + ГруппаВариант, + СтрокаНастройки.КраткаяИнформацияПоОбмену); + + СтрокаКоманды = КомандыСозданияОбмена.Добавить(); + СтрокаКоманды.ИмяКоманды = ИмяКоманды; + СтрокаКоманды.ИдентификаторНастройки = СтрокаНастройки.ИдентификаторНастройки; + СтрокаКоманды.ИмяПланаОбмена = СтрокаНастройки.ИмяПланаОбмена; + + КонецЦикла; + + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура ПроверитьВозможностьНастройкиСинхронизацииДанных(Отказ = Ложь) + + ТекстСообщения = ""; + Если ОбщегоНазначения.РазделениеВключено() Тогда + Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + МодульОбменДаннымиВМоделиСервисаПовтИсп = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиВМоделиСервисаПовтИсп"); + Если Не МодульОбменДаннымиВМоделиСервисаПовтИсп.СинхронизацияДанныхПоддерживается() Тогда + ТекстСообщения = НСтр("ru = 'Возможность настройки синхронизации данных в данной программе не предусмотрена.'"); + Отказ = Истина; + КонецЕсли; + Иначе + ТекстСообщения = НСтр("ru = 'В неразделенном режиме настройка синхронизации данных с другими программами недоступна.'"); + Отказ = Истина; + КонецЕсли; + Иначе + СписокПлановОбмена = ОбменДаннымиПовтИсп.ПланыОбменаБСП(); + Если СписокПлановОбмена.Количество() = 0 Тогда + ТекстСообщения = НСтр("ru = 'Возможность настройки синхронизации данных в данной программе не предусмотрена.'"); + Отказ = Истина; + КонецЕсли; + КонецЕсли; + + Если Отказ + И Не ПустаяСтрока(ТекстСообщения) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура СоздатьКомандуИЭлементФормы(ИмяКоманды, Заголовок, Родитель, Подсказка) + + Команда = Команды.Добавить(ИмяКоманды); + Команда.Заголовок = Заголовок; + Команда.Действие = "НастройкаПараметровТранспортаОбменаДанными"; + Команда.Подсказка = Подсказка; + + КнопкаКоманды = Элементы.Добавить(ИмяКоманды, Тип("КнопкаФормы"), Родитель); + КнопкаКоманды.ИмяКоманды = ИмяКоманды; + КнопкаКоманды.Вид = ВидКнопкиФормы.Гиперссылка; + КнопкаКоманды.ОтображениеПодсказки = ОтображениеПодсказки.ОтображатьСнизу; + КнопкаКоманды.АвтоМаксимальнаяШирина = Ложь; + КнопкаКоманды.РасширеннаяПодсказка.АвтоМаксимальнаяШирина = Ложь; + +КонецПроцедуры + +#КонецОбласти \ 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..583cbe144 --- /dev/null +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УдалениеНастройкиСинхронизации/Form.form @@ -0,0 +1,1376 @@ + + + + ПанельОсновная + 1 + + СтраницаНачало + 5 + + ГруппаНачало + 47 + + Декорация5 + 49 + true + true + + true + + + Декорация5РасширеннаяПодсказка + 51 + Label + true + true + + Left + + + + Декорация5КонтекстноеМеню + 50 + true + + 6 + true + 2 + true + + + CommonPicture.СинхронизацияДанныхОтключение + + + + + ГруппаНачалоНадпись + 55 + + Декорация6 + 52 + + <key>ru</key> + <value>В этой программе будут удалены + - настройки подключения; + - информация о сопоставлении объектов; + - информация о зарегистрированных к отправке объектах.</value> + + true + true + + true + + + Декорация6РасширеннаяПодсказка + 54 + Label + true + true + + Left + + + + Декорация6КонтекстноеМеню + 53 + true + + Label + true + + Left + + + + ГруппаНачалоДополнительно + 60 + + УдалитьНастройкуВКорреспонденте + 57 + + <key>ru</key> + <value>Удалить настройку также в программе "%НаименованиеКорреспондента%"</value> + + true + true + + true + + + УдалитьНастройкуВКорреспонденте + + Right + + УдалитьНастройкуВКорреспондентеРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + + УдалитьНастройкуВКорреспондентеКонтекстноеМеню + 58 + true + + CheckBoxField + Enter + true + Left + true + + + + Декорация7 + 62 + true + true + + true + + + Декорация7РасширеннаяПодсказка + 64 + Label + true + true + + Left + + + + Декорация7КонтекстноеМеню + 63 + true + + 1 + true + 1 + true + + + true + true + + true + + + <key>ru</key> + <value>Начало дополнительно</value> + + + ГруппаНачалоДополнительноРасширеннаяПодсказка + 61 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Начало надпись</value> + + + ГруппаНачалоНадписьРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Начало</value> + + + ГруппаНачалоРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница начало</value> + + + СтраницаНачалоРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаОжидание + 7 + + ГруппаОжидание + 17 + + Декорация1 + 19 + true + true + + true + + + Декорация1РасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 20 + true + + 6 + true + 2 + true + + + CommonPicture.ДлительнаяОперация48 + + + + + Декорация2 + 22 + + <key>ru</key> + <value>Выполняется удаление настройки синхронизации данных. +Пожалуйста, подождите...</value> + + true + true + + true + + + Декорация2РасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + Декорация2КонтекстноеМеню + 23 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Ожидание</value> + + + ГруппаОжиданиеРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Center + Auto + WeakSeparation + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница ожидание</value> + + + СтраницаОжиданиеРасширеннаяПодсказка + 8 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаОкончание + 9 + + ГруппаОкончание + 39 + + Декорация3 + 41 + true + true + + true + + + Декорация3РасширеннаяПодсказка + 43 + Label + true + true + + Left + + + + Декорация3КонтекстноеМеню + 42 + true + + 6 + true + 2 + true + + + CommonPicture.Успешно32 + + + + + ДекорацияСинхронизацияУдаленаНадпись + 44 + + <key>ru</key> + <value>Настройка синхронизации данных удалена.</value> + + true + true + + true + + + ДекорацияСинхронизацияУдаленаНадписьРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + + ДекорацияСинхронизацияУдаленаНадписьКонтекстноеМеню + 45 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Окончание</value> + + + ГруппаОкончаниеРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Center + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница окончание</value> + + + СтраницаОкончаниеРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Панель основная</value> + + + ПанельОсновнаяРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + Pages + + Auto + + + + ПанельНавигации + 3 + + СтраницаНавигацияНачало + 11 + + КоманднаяПанельНавигацияНачалоСправа + 25 + + КомандаДалее + 27 + true + true + + true + + + КомандаДалееРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + Form.Command.КомандаДалее + Auto + true + true + true + UserCmds + Auto + + + КомандаОтмена + 29 + true + true + + true + + + КомандаОтменаРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + Form.Command.КомандаОтмена + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель навигация начало справа</value> + + + КоманднаяПанельНавигацияНачалоСправаРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Страница навигация начало</value> + + + СтраницаНавигацияНачалоРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаНавигацияОжидание + 13 + + КоманднаяПанельНавигацияОжиданиеСправа + 31 + + КомандаОтмена1 + 33 + true + true + + true + + + КомандаОтмена1РасширеннаяПодсказка + 34 + Label + true + true + + Left + + + Form.Command.КомандаОтмена + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель навигация ожидание справа</value> + + + КоманднаяПанельНавигацияОжиданиеСправаРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Страница навигация ожидание</value> + + + СтраницаНавигацияОжиданиеРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаНавигацияОкончание + 15 + + КоманднаяПанельНавигацияОкончаниеСправа + 35 + + КомандаГотово + 37 + true + true + + true + + + КомандаГотовоРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + Form.Command.КомандаГотово + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель навигация окончание справа</value> + + + КоманднаяПанельНавигацияОкончаниеСправаРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Страница навигация окончание</value> + + + СтраницаНавигацияОкончаниеРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Панель навигации</value> + + Bottom + + ПанельНавигацииРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + Pages + + Auto + + + None + false + + ФормаКоманднаяПанель + -1 + Left + true + + + OnOpen + ПриОткрытии + + + BeforeClose + ПередЗакрытием + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + true + auto + true + + ТаблицаПереходов + + <key>ru</key> + <value>Таблица переходов</value> + + 1 + + ValueTable + + + true + + + true + + + ПорядковыйНомерПерехода + + <key>ru</key> + <value>Порядковый номер перехода</value> + + 1 + + Number + + 3 + true + + + + true + + + true + + + + ИмяОсновнойСтраницы + + <key>ru</key> + <value>Имя основной страницы</value> + + 2 + + String + + + + true + + + true + + + + ИмяСтраницыДекорации + + <key>ru</key> + <value>Имя страницы декорации</value> + + 3 + + String + + + + true + + + true + + + + ИмяСтраницыНавигации + + <key>ru</key> + <value>Имя страницы навигации</value> + + 4 + + String + + + + true + + + true + + + + ИмяОбработчикаПриОткрытии + + <key>ru</key> + <value>Имя обработчика при открытии</value> + + 5 + + String + + + + true + + + true + + + + ИмяОбработчикаПриПереходеДалее + + <key>ru</key> + <value>Имя обработчика при переходе далее</value> + + 6 + + String + + + + true + + + true + + + + ИмяОбработчикаПриПереходеНазад + + <key>ru</key> + <value>Имя обработчика при переходе назад</value> + + 7 + + String + + + + true + + + true + + + + ДлительнаяОперация + + <key>ru</key> + <value>Длительная операция</value> + + 8 + + Boolean + + + true + + + true + + + + ИмяОбработчикаДлительнойОперации + + <key>ru</key> + <value>Имя обработчика длительной операции</value> + + 9 + + String + + + + true + + + true + + + + + ПорядковыйНомерПерехода + + <key>ru</key> + <value>Порядковый номер перехода</value> + + 2 + + Number + + 3 + true + + + + true + + + true + + + + МодельСервиса + + <key>ru</key> + <value>Модель сервиса</value> + + 3 + + Boolean + + + true + + + true + + + + УзелОбмена + + <key>ru</key> + <value>Узел обмена</value> + + 4 + + ExchangePlanRef + + + true + + + true + + + + ЗакрытьФормуБезусловно + + <key>ru</key> + <value>Закрыть форму безусловно</value> + + 5 + + Boolean + + + true + + + true + + + + УдалитьНастройкуВКорреспонденте + 6 + + Boolean + + + true + + + true + + + + ПодключениеOnline + + <key>ru</key> + <value>Подключение online</value> + + 9 + + Boolean + + + true + + + true + + + + ПараметрыОбработчикаОжиданияУдаленияНастройкиСинхронизации + + <key>ru</key> + <value>Параметры обработчика ожидания удаления настройки синхронизации</value> + + 10 + + + true + + + true + + + + РазрешенияУдалены + + <key>ru</key> + <value>Разрешения удалены</value> + + 11 + + Boolean + + + true + + + true + + + + ПараметрыОбработчикаУдаленияНастройкиСинхронизации + + <key>ru</key> + <value>Параметры обработчика удаления настройки синхронизации</value> + + 12 + + + true + + + true + + + + НаименованиеКорреспондента + + <key>ru</key> + <value>Наименование корреспондента</value> + + 13 + + String + + + + true + + + true + + + + ОбластьДанныхКорреспондента + + <key>ru</key> + <value>Область данных корреспондента</value> + + 14 + + Number + + 10 + + + + true + + + true + + + + ИмяПланаОбмена + + <key>ru</key> + <value>Имя плана обмена</value> + + 15 + + String + + + + true + + + true + + + + ЭтоОбменСПриложениемВСервисе + + <key>ru</key> + <value>Это обмен с приложением в сервисе</value> + + 16 + + Boolean + + + true + + + true + + + + КомандаДалее + + <key>ru</key> + <value>Удалить настройку синхронизации</value> + + 1 + + ru + Команда далее + + + true + + + + КомандаДалее + + + Auto + Auto + + + КомандаГотово + + <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 new file mode 100644 index 000000000..6ea115e18 --- /dev/null +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УдалениеНастройкиСинхронизации/Module.bsl @@ -0,0 +1,636 @@ +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + // Отключать синхронизацию данных может только администратор обмена (для абонента). + ОбменДаннымиСервер.ПроверитьВозможностьАдминистрированияОбменов(); + + ИнициализироватьРеквизитыФормы(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + УстановитьПорядковыйНомерПерехода(1); + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) + + ТекстПредупреждения = НСтр("ru = 'Не выполнять удаление настройки синхронизации данных?'"); + ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияПроизвольнойФормы( + ЭтотОбъект, Отказ, ЗавершениеРаботы, ТекстПредупреждения, "ЗакрытьФормуБезусловно"); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура КомандаДалее(Команда) + + ИзменитьПорядковыйНомерПерехода(+1); + +КонецПроцедуры + +&НаКлиенте +Процедура КомандаНазад(Команда) + + ИзменитьПорядковыйНомерПерехода(-1); + +КонецПроцедуры + +&НаКлиенте +Процедура КомандаГотово(Команда) + + ЗакрытьФормуБезусловно = Истина; + Закрыть(УзелОбмена); + +КонецПроцедуры + +&НаКлиенте +Процедура КомандаОтмена(Команда) + + Закрыть(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область УдалениеНастройкиСинхронизации + +&НаКлиенте +Процедура ПриНачалеУдаленияНастройкиСинхронизации() + + ПродолжитьОжидание = Истина; + + ПриНачалеУдаленияНастройкиСинхронизацииНаСервере(ПродолжитьОжидание); + + Если ПродолжитьОжидание Тогда + ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания( + ПараметрыОбработчикаОжиданияУдаленияНастройкиСинхронизации); + + ПодключитьОбработчикОжидания("ПриОжиданииУдаленияНастройкиСинхронизации", + ПараметрыОбработчикаОжиданияУдаленияНастройкиСинхронизации.ТекущийИнтервал, Истина); + Иначе + ПриЗавершенииУдаленияНастройкиСинхронизации(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОжиданииУдаленияНастройкиСинхронизации() + + ПродолжитьОжидание = Ложь; + ПриОжиданииУдаленияНастройкиСинхронизацииНаСервере(ЭтоОбменСПриложениемВСервисе, + ПараметрыОбработчикаУдаленияНастройкиСинхронизации, ПродолжитьОжидание); + + Если ПродолжитьОжидание Тогда + ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияУдаленияНастройкиСинхронизации); + + ПодключитьОбработчикОжидания("ПриОжиданииУдаленияНастройкиСинхронизации", + ПараметрыОбработчикаОжиданияУдаленияНастройкиСинхронизации.ТекущийИнтервал, Истина); + Иначе + ПараметрыОбработчикаОжиданияУдаленияНастройкиСинхронизации = Неопределено; + ПриЗавершенииУдаленияНастройкиСинхронизации(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗавершенииУдаленияНастройкиСинхронизации() + + СообщениеОбОшибке = ""; + + НастройкаУдалена = Истина; + НастройкаУдаленаВКорреспонденте = Истина; + + ПриЗавершенииУдаленияНастройкиСинхронизацииНаСервере(НастройкаУдалена, + НастройкаУдаленаВКорреспонденте, СообщениеОбОшибке); + + Если НастройкаУдалена Тогда + ИзменитьПорядковыйНомерПерехода(+1); + + Если УдалитьНастройкуВКорреспонденте + И НастройкаУдаленаВКорреспонденте Тогда + Элементы.ДекорацияСинхронизацияУдаленаНадпись.Заголовок = НСтр("ru = 'Настройки синхронизации данных в этой программе + |и программе-корреспонденте успешно удалены.'"); + КонецЕсли; + + Иначе + ИзменитьПорядковыйНомерПерехода(-1); + + Если Не ПустаяСтрока(СообщениеОбОшибке) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке); + Иначе + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Не удалось удалить настройку синхронизации данных.'")); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПриНачалеУдаленияНастройкиСинхронизацииНаСервере(ПродолжитьОжидание) + + НастройкиУдаления = Новый Структура; + + Если ЭтоОбменСПриложениемВСервисе Тогда + + НастройкиУдаления.Вставить("ИмяПланаОбмена", ИмяПланаОбмена); + НастройкиУдаления.Вставить("ОбластьДанныхКорреспондента", ОбластьДанныхКорреспондента); + + МодульПомощникУдаленияНастройки = ОбщегоНазначения.ОбщийМодуль("Обработки.ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете"); + + Иначе + + НастройкиУдаления.Вставить("УзелОбмена", УзелОбмена); + НастройкиУдаления.Вставить("УдалитьНастройкуВКорреспонденте", УдалитьНастройкуВКорреспонденте); + + МодульПомощникУдаленияНастройки = ОбщегоНазначения.ОбщийМодуль("Обработки.ПомощникСозданияОбменаДанными"); + + КонецЕсли; + + МодульПомощникУдаленияНастройки.ПриНачалеУдаленияНастройкиСинхронизации(НастройкиУдаления, + ПараметрыОбработчикаУдаленияНастройкиСинхронизации, ПродолжитьОжидание); + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ПриОжиданииУдаленияНастройкиСинхронизацииНаСервере(ЭтоОбменСПриложениемВСервисе, ПараметрыОбработчика, ПродолжитьОжидание) + + ПродолжитьОжидание = Ложь; + + Если ЭтоОбменСПриложениемВСервисе Тогда + МодульПомощникУдаленияНастройки = ОбщегоНазначения.ОбщийМодуль("Обработки.ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете"); + Иначе + МодульПомощникУдаленияНастройки = ОбщегоНазначения.ОбщийМодуль("Обработки.ПомощникСозданияОбменаДанными"); + КонецЕсли; + + МодульПомощникУдаленияНастройки.ПриОжиданииУдаленияНастройкиСинхронизации(ПараметрыОбработчика, ПродолжитьОжидание); + +КонецПроцедуры + +&НаСервере +Процедура ПриЗавершенииУдаленияНастройкиСинхронизацииНаСервере(НастройкаУдалена, НастройкаУдаленаВКорреспонденте, СообщениеОбОшибке) + + СтатусЗавершения = Неопределено; + + Если ЭтоОбменСПриложениемВСервисе Тогда + МодульПомощникУдаленияНастройки = ОбщегоНазначения.ОбщийМодуль("Обработки.ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете"); + Иначе + МодульПомощникУдаленияНастройки = ОбщегоНазначения.ОбщийМодуль("Обработки.ПомощникСозданияОбменаДанными"); + КонецЕсли; + + МодульПомощникУдаленияНастройки.ПриЗавершенииУдаленияНастройкиСинхронизации( + ПараметрыОбработчикаУдаленияНастройкиСинхронизации, СтатусЗавершения); + + Если СтатусЗавершения.Отказ Тогда + НастройкаУдалена = Ложь; + + СообщениеОбОшибке = СтатусЗавершения.СообщениеОбОшибке; + Возврат; + Иначе + НастройкаУдалена = СтатусЗавершения.Результат.НастройкаУдалена; + НастройкаУдаленаВКорреспонденте = СтатусЗавершения.Результат.НастройкаУдаленаВКорреспонденте; + + СообщениеОбОшибке = СтатусЗавершения.СообщениеОбОшибке; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ИнициализацияФормыПриСоздании + +&НаСервере +Процедура УстановитьЗаголовкиЭлементовФормы() + + Элементы.УдалитьНастройкуВКорреспонденте.Заголовок = СтрЗаменить(Элементы.УдалитьНастройкуВКорреспонденте.Заголовок, + "%НаименованиеКорреспондента%", НаименованиеКорреспондента); + +КонецПроцедуры + +&НаСервере +Процедура ИнициализироватьРеквизитыФормы() + + УзелОбмена = Параметры.УзелОбмена; + ИмяПланаОбмена = Параметры.ИмяПланаОбмена; + + ОбластьДанныхКорреспондента = Параметры.ОбластьДанныхКорреспондента; + НаименованиеКорреспондента = Параметры.НаименованиеКорреспондента; + ЭтоОбменСПриложениемВСервисе = Параметры.ЭтоОбменСПриложениемВСервисе; + + МодельСервиса = ОбщегоНазначения.РазделениеВключено() + И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных(); + + ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелОбмена); + ПодключениеOnline = (ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.COM + Или ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS); + + УдалитьНастройкуВКорреспонденте = ПодключениеOnline; + + УстановитьЗаголовкиЭлементовФормы(); + + ЗаполнитьТаблицуПереходов(); + +КонецПроцедуры + +#КонецОбласти + +#Область СценарииРаботыПомощника + +&НаСервере +Функция ДобавитьСтрокуТаблицыПереходов(ИмяОсновнойСтраницы, ИмяСтраницыНавигации, ИмяСтраницыДекорации = "") + + СтрокаПереходов = ТаблицаПереходов.Добавить(); + СтрокаПереходов.ПорядковыйНомерПерехода = ТаблицаПереходов.Количество(); + СтрокаПереходов.ИмяОсновнойСтраницы = ИмяОсновнойСтраницы; + СтрокаПереходов.ИмяСтраницыНавигации = ИмяСтраницыНавигации; + СтрокаПереходов.ИмяСтраницыДекорации = ИмяСтраницыДекорации; + + Возврат СтрокаПереходов; + +КонецФункции + +&НаСервере +Процедура ЗаполнитьТаблицуПереходов() + + ТаблицаПереходов.Очистить(); + + НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаНачало", "СтраницаНавигацияНачало"); + НовыйПереход.ИмяОбработчикаПриОткрытии = "СтраницаНачало_ПриОткрытии"; + + НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаОжидание", "СтраницаНавигацияОжидание"); + НовыйПереход.ИмяОбработчикаПриОткрытии = "СтраницаОжидание_ПриОткрытии"; + НовыйПереход.ДлительнаяОперация = Истина; + НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаОжидание_ДлительнаяОперация"; + + НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаОкончание", "СтраницаНавигацияОкончание"); + НовыйПереход.ИмяОбработчикаПриОткрытии = "СтраницаОкончание_ПриОткрытии"; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийПереходов + +&НаКлиенте +Функция Подключаемый_СтраницаНачало_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) + + Элементы.ГруппаНачалоДополнительно.Видимость = ПодключениеOnline; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаОжидание_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) + + ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПослеУдаленияРазрешений", ЭтотОбъект, УзелОбмена); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда + Запросы = ОбменДаннымиВызовСервера.ЗапросНаОчисткуРазрешенийИспользованияВнешнихРесурсов(УзелОбмена); + МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент"); + МодульРаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, Неопределено, ОповещениеОЗакрытии); + Иначе + ВыполнитьОбработкуОповещения(ОповещениеОЗакрытии, КодВозвратаДиалога.ОК); + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаОжидание_ДлительнаяОперация(Отказ, ПерейтиДалее) + + ПерейтиДалее = Ложь; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаОкончание_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) + + Оповестить("Запись_УзелПланаОбмена"); + ЗакрытьФормы("ФормаУзла"); + +КонецФункции + +#КонецОбласти + +#Область ДополнительныеОбработчикиПереходов + +&НаКлиенте +Процедура ИзменитьПорядковыйНомерПерехода(Итератор) + + ОчиститьСообщения(); + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + Итератор); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьПорядковыйНомерПерехода(Знач Значение) + + ЭтоПереходДалее = (Значение > ПорядковыйНомерПерехода); + + ПорядковыйНомерПерехода = Значение; + + Если ПорядковыйНомерПерехода < 1 Тогда + + ПорядковыйНомерПерехода = 1; + + КонецЕсли; + + ПорядковыйНомерПереходаПриИзменении(ЭтоПереходДалее); + +КонецПроцедуры + +&НаКлиенте +Процедура ПорядковыйНомерПереходаПриИзменении(Знач ЭтоПереходДалее) + + // Выполняем обработчики событий перехода. + ВыполнитьОбработчикиСобытийПерехода(ЭтоПереходДалее); + + // Устанавливаем отображение страниц. + СтрокиПереходаТекущие = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода)); + + Если СтрокиПереходаТекущие.Количество() = 0 Тогда + ВызватьИсключение НСтр("ru = 'Не определена страница для отображения.'"); + КонецЕсли; + + СтрокаПереходаТекущая = СтрокиПереходаТекущие[0]; + + Элементы.ПанельОсновная.ТекущаяСтраница = Элементы[СтрокаПереходаТекущая.ИмяОсновнойСтраницы]; + Элементы.ПанельНавигации.ТекущаяСтраница = Элементы[СтрокаПереходаТекущая.ИмяСтраницыНавигации]; + + Элементы.ПанельНавигации.ТекущаяСтраница.Доступность = Не (ЭтоПереходДалее И СтрокаПереходаТекущая.ДлительнаяОперация); + + // Устанавливаем текущую кнопку по умолчанию. + КнопкаДалее = ПолучитьКнопкуФормыПоИмениКоманды(Элементы.ПанельНавигации.ТекущаяСтраница, "КомандаДалее"); + + Если КнопкаДалее <> Неопределено Тогда + + КнопкаДалее.КнопкаПоУмолчанию = Истина; + + Иначе + + КнопкаГотово = ПолучитьКнопкуФормыПоИмениКоманды(Элементы.ПанельНавигации.ТекущаяСтраница, "КомандаГотово"); + + Если КнопкаГотово <> Неопределено Тогда + + КнопкаГотово.КнопкаПоУмолчанию = Истина; + + КонецЕсли; + + КонецЕсли; + + Если ЭтоПереходДалее И СтрокаПереходаТекущая.ДлительнаяОперация Тогда + + ПодключитьОбработчикОжидания("ВыполнитьОбработчикДлительнойОперации", 0.1, Истина); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьОбработчикиСобытийПерехода(Знач ЭтоПереходДалее) + + // Обработчики событий переходов. + Если ЭтоПереходДалее Тогда + + СтрокиПерехода = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода - 1)); + + Если СтрокиПерехода.Количество() > 0 Тогда + СтрокаПерехода = СтрокиПерехода[0]; + + // Обработчик ПриПереходеДалее. + Если Не ПустаяСтрока(СтрокаПерехода.ИмяОбработчикаПриПереходеДалее) + И Не СтрокаПерехода.ДлительнаяОперация Тогда + + ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ)"; + ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПерехода.ИмяОбработчикаПриПереходеДалее); + + Отказ = Ложь; + + Результат = Вычислить(ИмяПроцедуры); + + Если Отказ Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); + + Возврат; + + КонецЕсли; + + КонецЕсли; + КонецЕсли; + + Иначе + + СтрокиПерехода = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода + 1)); + + Если СтрокиПерехода.Количество() > 0 Тогда + СтрокаПерехода = СтрокиПерехода[0]; + + // Обработчик ПриПереходеНазад. + Если Не ПустаяСтрока(СтрокаПерехода.ИмяОбработчикаПриПереходеНазад) + И Не СтрокаПерехода.ДлительнаяОперация Тогда + + ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ)"; + ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПерехода.ИмяОбработчикаПриПереходеНазад); + + Отказ = Ложь; + + Результат = Вычислить(ИмяПроцедуры); + + Если Отказ Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); + + Возврат; + + КонецЕсли; + + КонецЕсли; + КонецЕсли; + + КонецЕсли; + + СтрокиПереходаТекущие = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода)); + + Если СтрокиПереходаТекущие.Количество() = 0 Тогда + ВызватьИсключение НСтр("ru = 'Не определена страница для отображения.'"); + КонецЕсли; + + СтрокаПереходаТекущая = СтрокиПереходаТекущие[0]; + + Если СтрокаПереходаТекущая.ДлительнаяОперация И Не ЭтоПереходДалее Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); + Возврат; + КонецЕсли; + + // обработчик ПриОткрытии + Если Не ПустаяСтрока(СтрокаПереходаТекущая.ИмяОбработчикаПриОткрытии) Тогда + + ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ, ПропуститьСтраницу, ЭтоПереходДалее)"; + ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПереходаТекущая.ИмяОбработчикаПриОткрытии); + + Отказ = Ложь; + ПропуститьСтраницу = Ложь; + + Результат = Вычислить(ИмяПроцедуры); + + Если Отказ Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); + + Возврат; + + ИначеЕсли ПропуститьСтраницу Тогда + + Если ЭтоПереходДалее Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); + + Возврат; + + Иначе + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); + + Возврат; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьОбработчикДлительнойОперации() + + СтрокиПереходаТекущие = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода)); + + Если СтрокиПереходаТекущие.Количество() = 0 Тогда + ВызватьИсключение НСтр("ru = 'Не определена страница для отображения.'"); + КонецЕсли; + + СтрокаПереходаТекущая = СтрокиПереходаТекущие[0]; + + // Обработчик ОбработкаДлительнойОперации. + Если Не ПустаяСтрока(СтрокаПереходаТекущая.ИмяОбработчикаДлительнойОперации) Тогда + + ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ, ПерейтиДалее)"; + ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПереходаТекущая.ИмяОбработчикаДлительнойОперации); + + Отказ = Ложь; + ПерейтиДалее = Истина; + + Результат = Вычислить(ИмяПроцедуры); + + Если Отказ Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); + + Возврат; + + ИначеЕсли ПерейтиДалее Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); + + Возврат; + + КонецЕсли; + + Иначе + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); + + Возврат; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Функция ПолучитьКнопкуФормыПоИмениКоманды(ЭлементФормы, ИмяКоманды) + + Для Каждого Элемент Из ЭлементФормы.ПодчиненныеЭлементы Цикл + + Если ТипЗнч(Элемент) = Тип("ГруппаФормы") Тогда + + ЭлементФормыПоИмениКоманды = ПолучитьКнопкуФормыПоИмениКоманды(Элемент, ИмяКоманды); + + Если ЭлементФормыПоИмениКоманды <> Неопределено Тогда + + Возврат ЭлементФормыПоИмениКоманды; + + КонецЕсли; + + ИначеЕсли ТипЗнч(Элемент) = Тип("КнопкаФормы") + И СтрНайти(Элемент.ИмяКоманды, ИмяКоманды) > 0 Тогда + + Возврат Элемент; + + Иначе + + Продолжить; + + КонецЕсли; + + КонецЦикла; + + Возврат Неопределено; + +КонецФункции + +#КонецОбласти + +&НаКлиенте +Процедура ПослеУдаленияРазрешений(Результат, УзелИнформационнойБазы) Экспорт + + Если Результат = КодВозвратаДиалога.ОК Тогда + ПриНачалеУдаленияНастройкиСинхронизации(); + Иначе + ИзменитьПорядковыйНомерПерехода(-1); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗакрытьФормы(Знач ИмяФормы) + + ОкнаПриложения = ПолучитьОкна(); + + Если ОкнаПриложения = Неопределено Тогда + Возврат; + КонецЕсли; + + Для Каждого ОкноПриложения Из ОкнаПриложения Цикл + Если ОкноПриложения.Основное Тогда + Продолжить; + КонецЕсли; + + Форма = ОкноПриложения.ПолучитьСодержимое(); + + Если ТипЗнч(Форма) = Тип("УправляемаяФорма") + И Не Форма.Модифицированность + И СтрНайти(Форма.ИмяФормы, ИмяФормы) <> 0 Тогда + + Форма.Закрыть(); + + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Form.form b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Form.form deleted file mode 100644 index 0912c567d..000000000 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Form.form +++ /dev/null @@ -1,17355 +0,0 @@ - - - - <key>ru</key> - <value>Помощник настройки синхронизации данных</value> - - - ПанельОсновная - 2 - - СтраницаМастераНачало - 3 - - ГруппаОписаниеСинхронизацииДанных - 2510 - - КраткоеОписание - 2492 - true - true - - true - - - КраткоеОписание - - None - - КраткоеОписаниеРасширеннаяПодсказка - 2494 - Label - true - true - - Left - - - - КраткоеОписаниеКонтекстноеМеню - 2493 - true - - LabelField - Enter - true - Left - true - - 4 - true - false - - Style.FormBackColor - - - - - ПодробноеОписание - 1799 - true - true - - true - - - ПодробноеОписаниеExtendedTooltip - 1941 - Label - true - true - - Left - - - Hyperlink - Form.Command.ПодробноеОписание - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Описание синхронизации данных</value> - - - ГруппаОписаниеСинхронизацииДанныхРасширеннаяПодсказка - 2511 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Auto - Auto - - - - ГруппаРезервноеКопирование - 2446 - - Декорация3 - 2448 - true - true - - true - - - Декорация3РасширеннаяПодсказка - 2450 - Label - true - true - - Left - - - - Декорация3КонтекстноеМеню - 2449 - true - - true - true - - - CommonPicture.Предупреждение - - - - - НадписьРезервноеКопирование - 2451 - - <key>ru</key> - <value>Перед настройкой синхронизации рекомендуется создать резервную копию данных.</value> - - true - true - - true - - - НадписьРезервноеКопированиеРасширеннаяПодсказка - 2453 - Label - true - true - - Left - - - - НадписьРезервноеКопированиеКонтекстноеМеню - 2452 - true - - Label - true - - - URLProcessing - НадписьРезервноеКопированиеОбработкаНавигационнойСсылки - - Left - - - true - true - - true - - - <key>ru</key> - <value>Резервное копирование</value> - - - ГруппаРезервноеКопированиеРасширеннаяПодсказка - 2447 - Label - true - true - - Left - - - UsualGroup - - Auto - NormalSeparation - true - true - Auto - Auto - - - - ГруппаПереключателяВыбораРежимаРаботыПомощника - 144 - - ВариантРаботыМастераВручную - 45 - true - true - - true - - - ВариантРаботыМастера - - None - - OnChange - ВариантРаботыМастераВручнуюПриИзменении - - - ВариантРаботыМастераВручнуюРасширеннаяПодсказка - 1932 - Label - true - true - - Left - - - - ВариантРаботыМастераВручнуюКонтекстноеМеню - 46 - true - - RadioButtonField - Enter - true - Left - true - - 1 - - - ru - Указать настройки вручную - - - НастроитьНовыйОбменДанными - - - Vertical - - - - ГруппаВыборИзФайла - 2515 - - ВариантРаботыМастераИзФайла - 2507 - true - true - - true - - - ВариантРаботыМастера - - None - None - - OnChange - ВариантРаботыМастераИзФайлаПриИзменении - - - ВариантРаботыМастераИзФайлаРасширеннаяПодсказка - 2509 - Label - true - true - - Left - - - - ВариантРаботыМастераИзФайлаКонтекстноеМеню - 2508 - true - - RadioButtonField - Enter - true - Left - true - - 1 - - - ru - Загрузить файл с настройками, созданный в другой программе - - - ПродолжитьНастройкуОбменаДанными - - - Vertical - - - - ИмяФайлаНастроекОбменаДаннымиДляЗагрузки - 415 - - <key>ru</key> - <value>Укажите имя файла с сохраненными настройками синхронизации данных, -который был выгружен при настройке в первой программе</value> - - true - true - - true - - - Объект.ИмяФайлаНастроекСинхронизацииДанныхДляЗагрузки - - None - Button - - OnChange - ИмяФайлаНастроекОбменаДаннымиДляЗагрузкиПриИзменении - - - ИмяФайлаНастроекОбменаДаннымиДляЗагрузкиExtendedTooltip - 1937 - - <key>ru</key> - <value>Если файл настроек синхронизации данных утерян, то для формирования нового файла необходимо: - - перейти в первую программу - - перейти в форму синхронизации данных - - выбрать требуемую синхронизацию данных и открыть ее параметры - - в командной панели формы следует выбрать пункт меню: "Все действия" –> "Получить настройки синхронизации данных для другой программы..."</value> - - Label - true - true - - Left - - - - ИмяФайлаНастроекОбменаДаннымиДляЗагрузкиКонтекстноеМеню - 416 - true - - InputField - true - Left - Enter - true - Left - true - - - StartChoice - ИмяФайлаНастроекОбменаДаннымиДляЗагрузкиНачалоВыбора - - true - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Выбор из файла</value> - - - ГруппаВыборИзФайлаРасширеннаяПодсказка - 2516 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ОписаниеМастерИзФайла - 2512 - - <key>ru</key> - <value>Если синхронизация данных уже производилась в программе "%ПрограммаКорреспондент%" и настройки были сохранены во внешнем файле, то эти настройки можно использовать, указав путь до файла, в котором они хранятся. </value> - - true - true - - true - - - ОписаниеМастерИзФайлаРасширеннаяПодсказка - 2514 - Label - true - true - - Left - - - - ОписаниеМастерИзФайлаКонтекстноеМеню - 2513 - true - - Label - true - - Style.ПоясняющийТекст - - - Left - Top - - - true - true - - true - - - <key>ru</key> - <value>Выбор способа настройки синхронизации данных</value> - - - ГруппаПереключателяВыбораРежимаРаботыПомощникаExtendedTooltip - 1931 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - auto - Auto - Auto - - - - Декорация57 - 1912 - true - true - - true - - - Декорация57ExtendedTooltip - 1951 - Label - true - true - - Left - - - - Декорация57КонтекстноеМеню - 1913 - true - - Label - true - true - true - - Left - - - - НадписьДалееВариантРаботыМастера - 123 - - <key>ru</key> - <value>Нажмите кнопку "Далее" для выбора варианта подключения.</value> - - true - true - - true - - - НадписьДалееВариантРаботыМастераExtendedTooltip - 1953 - Label - true - true - - Left - - - - НадписьДалееВариантРаботыМастераКонтекстноеМеню - 124 - true - - Label - true - false - - Left - - - true - true - - true - - - <key>ru</key> - <value>Страница мастера начало</value> - - - СтраницаМастераНачалоExtendedTooltip - 1929 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаМастераНастройкаПараметров - 6 - - НастройкаПараметровСинхронизации - 1800 - - ПараметрыПервойБазы - 1802 - - НаименованиеЭтойБазы - 67 - - <key>ru</key> - <value>Наименование этой информационной базы</value> - - true - true - - true - - - Объект.НаименованиеЭтойБазы - - Top - - НаименованиеЭтойБазыExtendedTooltip - 2168 - Label - true - true - - Left - - - - НаименованиеЭтойБазыКонтекстноеМеню - 68 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - ПрефиксИнформационнойБазыИсточника - 117 - - <key>ru</key> - <value>Префикс</value> - - true - true - - true - - - Объект.ПрефиксИнформационнойБазыИсточника - - Top - - ПрефиксИнформационнойБазыИсточникаExtendedTooltip - 2172 - Label - true - true - - Left - - - - ПрефиксИнформационнойБазыИсточникаКонтекстноеМеню - 118 - true - - InputField - true - Enter - true - Left - true - - 3 - true - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Параметры первой базы</value> - - - ПараметрыПервойБазыРасширеннаяПодсказка - 2167 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ПараметрыВторойБазы - 1879 - - НаименованиеВторойБазы - 978 - - <key>ru</key> - <value>Наименование другой информационной базы</value> - - true - true - - true - - - Объект.НаименованиеВторойБазы - - Top - - НаименованиеВторойБазыExtendedTooltip - 2169 - Label - true - true - - Left - - - - НаименованиеВторойБазыКонтекстноеМеню - 979 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - ПрефиксИнформационнойБазыПриемника - 1033 - - <key>ru</key> - <value>Префикс</value> - - true - true - - true - - - Объект.ПрефиксИнформационнойБазыПриемника - - Top - Button - - ПрефиксИнформационнойБазыПриемникаРасширеннаяПодсказка - 2175 - - <key>ru</key> - <value>Для того чтобы узнать префикс второй информационной базы следует выполнить запуск программы и перейти в форму синхронизации данных. Если во второй информационной базе префикс не задан, то следует указать любой желаемый префикс. Этот префикс будет установлен во второй базе при настройке синхронизации данных.</value> - - Label - true - true - - Left - - - - ПрефиксИнформационнойБазыПриемникаКонтекстноеМеню - 1034 - true - - InputField - true - Enter - true - Left - true - - 3 - true - true - false - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Параметры второй базы</value> - - - ПараметрыВторойБазыРасширеннаяПодсказка - 2174 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ГруппаСпособПодключения - 1875 - - ВидТранспортаСообщенийОбмена - 715 - true - true - - true - - - Объект.ВидТранспортаСообщенийОбмена - - Top - - ВидТранспортаСообщенийОбменаExtendedTooltip - 2178 - Label - true - true - - Left - - - - ВидТранспортаСообщенийОбменаКонтекстноеМеню - 716 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - true - true - - - ru - Локальный или сетевой каталог - - - Enum.ВидыТранспортаСообщенийОбмена.EnumValue.FILE - - - - - ru - FTP-ресурс - - - Enum.ВидыТранспортаСообщенийОбмена.EnumValue.FTP - - - - - ru - Почтовые сообщения - - - Enum.ВидыТранспортаСообщенийОбмена.EnumValue.EMAIL - - - Normal - - - true - true - - true - - - <key>ru</key> - <value>Способ подключения</value> - - - ГруппаСпособПодключенияРасширеннаяПодсказка - 2177 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Настройка параметров синхронизации данных</value> - - - НастройкаПараметровСинхронизацииРасширеннаяПодсказка - 2165 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - auto - Auto - Auto - - - - НастройкиУзла - 539 - - РамкаГруппыОграничений - 111 - - ОписаниеОграниченийПередачиДанных - 387 - - <key>ru</key> - <value>Правила отправки данных в -%Программа%</value> - - true - true - - true - - - ОписаниеОграниченийПередачиДанных - - Top - - ОписаниеОграниченийПередачиДанныхExtendedTooltip - 2184 - Label - true - true - - Left - - - - ОписаниеОграниченийПередачиДанныхКонтекстноеМеню - 388 - true - - InputField - true - Enter - true - Left - true - - 8 - true - true - true - true - true - true - Normal - - - - НастройкаОграниченийРегистрацииДанных - 110 - true - true - - true - - false - - НастройкаОграниченийРегистрацииДанныхExtendedTooltip - 2185 - Label - true - true - - Left - - - Hyperlink - Form.Command.НастройкаОграниченийРегистрацииДанных - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Ограничения передачи данных:</value> - - true - false - - РамкаГруппыОграниченийExtendedTooltip - 2182 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - РамкаГруппыЗначенийПоУмолчанию - 532 - - ОписаниеЗначенийПоУмолчанию - 533 - - <key>ru</key> - <value>Правила получения данных из -%Программа%</value> - - true - true - - true - - - ОписаниеЗначенийПоУмолчанию - - Top - - ОписаниеЗначенийПоУмолчаниюExtendedTooltip - 2188 - Label - true - true - - Left - - - - ОписаниеЗначенийПоУмолчаниюКонтекстноеМеню - 534 - true - - InputField - true - Enter - true - Left - true - - 8 - true - true - true - true - true - true - Normal - - - - НастройкаЗначенийПоУмолчанию - 538 - true - true - - true - - false - - НастройкаЗначенийПоУмолчаниюExtendedTooltip - 2189 - Label - true - true - - Left - - - Hyperlink - Form.Command.НастройкаЗначенийПоУмолчанию - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Значения по умолчанию:</value> - - true - false - - РамкаГруппыЗначенийПоУмолчаниюExtendedTooltip - 2186 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Настройки узла</value> - - - НастройкиУзлаExtendedTooltip - 2181 - Label - true - true - - Left - - - UsualGroup - - Auto - NormalSeparation - true - true - Equal - Auto - Auto - - - - Декорация5 - 194 - true - true - - true - - - Декорация5ExtendedTooltip - 2190 - Label - true - true - - Left - - - - Декорация5КонтекстноеМеню - 195 - true - - Label - true - true - true - false - - Left - - - - НадписьДалееПодтверждениеНастроек - 131 - - <key>ru</key> - <value>Нажмите кнопку "Далее" для проверки параметров и завершения настройки синхронизации данных.</value> - - true - true - - true - - - НадписьДалееПодтверждениеНастроекExtendedTooltip - 2191 - Label - true - true - - Left - - - - НадписьДалееПодтверждениеНастроекКонтекстноеМеню - 132 - true - - Label - true - false - - Left - - - true - true - - true - - - <key>ru</key> - <value>Страница мастера настройка параметров</value> - - - СтраницаМастераНастройкаПараметровExtendedTooltip - 2163 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаМастераНачалоНастройкиОбменаССервисом - 1190 - - ГруппаСтраницаМастераНачалоНастройкиОбменаССервисом - 2487 - - ПараметрыТранспортаПодключенияКСервису - 1235 - - ДекорацияПараметрыПодключенияКСервису - 2489 - - <key>ru</key> - <value>Укажите параметры подключения к приложению в Интернете:</value> - - true - true - - true - - Button - - ДекорацияПараметрыПодключенияКСервисуРасширеннаяПодсказка - 2491 - - <key>ru</key> - <value>Для настройки синхронизации данных с приложением, расположенным в Интернете, необходимо указать в поле Адрес веб-ссылку к этому приложению (точно такую же, как при открытии этого приложения в браузере). -Например: http://www.1cfresh.com/ea_demo/123/ -В полях Пользователь и Пароль необходимо указать имя и пароль администратора приложения. - -Важно! Имя пользователя не должно содержать служебных символов "[НедопустимыеСимволы]". В противном случае в приложении, расположенном в Интернете, необходимо создать пользователя, в имени которого не будут содержаться служебные символы. Этот пользователь должен быть администратором приложения.</value> - - Label - true - true - - Left - - - - ДекорацияПараметрыПодключенияКСервисуКонтекстноеМеню - 2490 - true - - Label - true - - Left - - - - WSURLВебСервиса1 - 1236 - - <key>ru</key> - <value>Адрес приложения</value> - - true - true - - true - - - Объект.WSURLВебСервиса - - - WSURLВебСервиса1ExtendedTooltip - 1959 - Label - true - true - - Left - - - - WSURLВебСервиса1КонтекстноеМеню - 1237 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - ГруппаПаролиСервиса - 1252 - - WSИмяПользователя1 - 1238 - - <key>ru</key> - <value>Пользователь</value> - - true - true - - true - - - Объект.WSИмяПользователя - - - WSИмяПользователя1ExtendedTooltip - 1961 - Label - true - true - - Left - - - - WSИмяПользователя1КонтекстноеМеню - 1239 - true - - InputField - true - Enter - true - Left - true - - 30 - true - true - true - true - true - true - true - Normal - - - - WSПароль1 - 1240 - - <key>ru</key> - <value>Пароль</value> - - true - true - - true - - - Объект.WSПароль - - - WSПароль1ExtendedTooltip - 1962 - Label - true - true - - Left - - - - WSПароль1КонтекстноеМеню - 1241 - true - - InputField - true - Enter - true - Left - true - - 30 - true - true - true - true - true - true - true - true - Normal - - - - ГруппаПаролиСервисаГоризонтальная - 1924 - - WSЗапомнитьПароль - 1793 - true - true - - true - - - Объект.WSЗапомнитьПароль - - Right - - WSЗапомнитьПарольExtendedTooltip - 1964 - Label - true - true - - Left - - - - WSЗапомнитьПарольКонтекстноеМеню - 1794 - true - - CheckBoxField - Enter - true - Left - true - - - - ПараметрыДоступаВИнтернет - 1923 - true - true - - true - - - ПараметрыДоступаВИнтернетExtendedTooltip - 1965 - Label - true - true - - Left - - - Hyperlink - Form.Command.ПараметрыДоступаВИнтернет - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Пароли сервиса горизонтальная</value> - - - ГруппаПаролиСервисаГоризонтальнаяРасширеннаяПодсказка - 1963 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Пароли сервиса</value> - - - ГруппаПаролиСервисаРасширеннаяПодсказка - 1960 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Укажите параметры подключения к приложению в Интернете</value> - - 70 - false - - ПараметрыТранспортаПодключенияКСервисуExtendedTooltip - 1958 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ПодробноеОписание1 - 1916 - true - true - - true - - - ПодробноеОписание1ExtendedTooltip - 1957 - Label - true - true - - Left - - - Hyperlink - Form.Command.ПодробноеОписание - Normal - Auto - true - true - UserCmds - Auto - - - Декорация15 - 1246 - true - true - - true - - - Декорация15ExtendedTooltip - 1967 - Label - true - true - - Left - - - - Декорация15КонтекстноеМеню - 1247 - true - - Label - true - true - true - false - - Left - - - - ГруппаРезервноеКопирование1 - 2454 - - Декорация9 - 2456 - true - true - - true - - - Декорация9РасширеннаяПодсказка - 2458 - Label - true - true - - Left - - - - Декорация9КонтекстноеМеню - 2457 - true - - true - true - - - CommonPicture.Предупреждение - - - - - НадписьРезервноеКопированиеСервис - 2459 - - <key>ru</key> - <value>Перед настройкой синхронизации рекомендуется создать резервную копию данных.</value> - - true - true - - true - - - НадписьРезервноеКопированиеСервисРасширеннаяПодсказка - 2461 - Label - true - true - - Left - - - - НадписьРезервноеКопированиеСервисКонтекстноеМеню - 2460 - true - - Label - true - - - URLProcessing - НадписьРезервноеКопированиеОбработкаНавигационнойСсылки - - Left - - - true - true - - true - - - <key>ru</key> - <value>Группа резервное копирование</value> - - - ГруппаРезервноеКопирование1РасширеннаяПодсказка - 2455 - Label - true - true - - Left - - - UsualGroup - - Auto - NormalSeparation - true - true - Auto - Auto - - - - НадписьДалееСтраницаМастераНачалоНастройкиОбменаССервисом - 1244 - - <key>ru</key> - <value>Нажмите кнопку "Далее" для задания параметров синхронизации.</value> - - true - true - - true - - - НадписьДалееСтраницаМастераНачалоНастройкиОбменаССервисомExtendedTooltip - 1968 - Label - true - true - - Left - - - - НадписьДалееСтраницаМастераНачалоНастройкиОбменаССервисомКонтекстноеМеню - 1245 - true - - Label - true - false - - Left - - - true - true - - true - - - <key>ru</key> - <value>Настройка синхронизации данных с приложением в сервисе</value> - - - ГруппаСтраницаМастераНачалоНастройкиОбменаССервисомРасширеннаяПодсказка - 2488 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - auto - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница мастера начало настройки обмена с сервисом</value> - - - ru - Страница мастера выбор режима работы помощника - - - СтраницаМастераНачалоНастройкиОбменаССервисомExtendedTooltip - 1954 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаМастераНастройкаПараметровОбменаДанными - 1253 - - ГруппаСтраницаМастераНастройкаПараметровОбменаДанными - 2485 - - НаименованиеЭтойБазы3 - 1256 - - <key>ru</key> - <value>Наименование этой информационной базы (программы)</value> - - true - true - - true - - - Объект.НаименованиеЭтойБазы - - Top - - НаименованиеЭтойБазы3ExtendedTooltip - 1971 - Label - true - true - - Left - - - - НаименованиеЭтойБазы3КонтекстноеМеню - 1257 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - ПрефиксИнформационнойБазыИсточникаОбменССервисом - 1789 - - <key>ru</key> - <value>Префикс этой информационной базы</value> - - true - true - - true - - - Объект.ПрефиксИнформационнойБазыИсточника - - - ПрефиксИнформационнойБазыИсточникаОбменССервисомExtendedTooltip - 1972 - Label - true - true - - Left - - - - ПрефиксИнформационнойБазыИсточникаОбменССервисомКонтекстноеМеню - 1790 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - true - Normal - - - - ГруппаВтораяБаза - 1290 - - НаименованиеВторойБазы1 - 1258 - - <key>ru</key> - <value>Наименование приложения в Интернете</value> - - true - true - - true - - - Объект.НаименованиеВторойБазы - - Top - - НаименованиеВторойБазы1ExtendedTooltip - 1974 - Label - true - true - - Left - - - - НаименованиеВторойБазы1КонтекстноеМеню - 1259 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - ПрефиксИнформационнойБазыПриемникаОбменССервисом - 1791 - - <key>ru</key> - <value>Префикс приложения в Интернете</value> - - true - true - - true - - - Объект.ПрефиксИнформационнойБазыПриемника - - - ПрефиксИнформационнойБазыПриемникаОбменССервисомExtendedTooltip - 1975 - Label - true - true - - Left - - - - ПрефиксИнформационнойБазыПриемникаОбменССервисомКонтекстноеМеню - 1792 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Вторая база</value> - - - ГруппаВтораяБазаРасширеннаяПодсказка - 1973 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Auto - Auto - - - - ГруппаОписаниеНастроек - 1285 - - ОписаниеНастроекВыгрузкиДанных - 1283 - - <key>ru</key> - <value>Правила синхронизации данных</value> - - true - true - - true - - - ОписаниеНастроекВыгрузкиДанных - - - ОписаниеНастроекВыгрузкиДанныхExtendedTooltip - 1977 - Label - true - true - - Left - - - - ОписаниеНастроекВыгрузкиДанныхКонтекстноеМеню - 1284 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - ВыполнитьНастройкуВыгрузкиДанных - 1289 - true - true - - true - - - ВыполнитьНастройкуВыгрузкиДанныхExtendedTooltip - 1978 - Label - true - true - - Left - - - Hyperlink - Form.Command.ВыполнитьНастройкуВыгрузкиДанных - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Описание настроек</value> - - - ГруппаОписаниеНастроекРасширеннаяПодсказка - 1976 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Auto - Auto - - - - НадписьДалееПодтверждениеНастроек6 - 1281 - - <key>ru</key> - <value>Нажмите кнопку "Далее" для перехода к сопоставлению данных.</value> - - true - true - - true - - - НадписьДалееПодтверждениеНастроек6ExtendedTooltip - 1979 - Label - true - true - - Left - - - - НадписьДалееПодтверждениеНастроек6КонтекстноеМеню - 1282 - true - - Label - 3 - true - false - - Left - Bottom - - - true - true - - true - - - <key>ru</key> - <value>Настройка параметров синхронизации данных</value> - - - ГруппаСтраницаМастераНастройкаПараметровОбменаДаннымиРасширеннаяПодсказка - 2486 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - auto - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница мастера настройка параметров обмена данными</value> - - - ru - Страница мастера настройка параметров - - - СтраницаМастераНастройкаПараметровОбменаДаннымиExtendedTooltip - 1969 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаМастераНастройкаПараметровОбменаДаннымиЧерезВебСервис - 1768 - - ГруппаСтраницаМастераНастройкаПараметровОбменаДаннымиЧерезВебСервис - 2481 - - ГруппаЭтаБазаВеб - 2483 - - НаименованиеЭтойБазы5 - 1771 - - <key>ru</key> - <value>Наименование этой информационной базы (программы)</value> - - true - true - - true - - - Объект.НаименованиеЭтойБазы - - Top - - НаименованиеЭтойБазы5ExtendedTooltip - 1982 - Label - true - true - - Left - - - - НаименованиеЭтойБазы5КонтекстноеМеню - 1772 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - ПрефиксИнформационнойБазыИсточникаОбменЧерезВебСервис - 1785 - - <key>ru</key> - <value>Префикс</value> - - true - true - - true - - - Объект.ПрефиксИнформационнойБазыИсточника - - Top - - ПрефиксИнформационнойБазыИсточникаОбменЧерезВебСервисExtendedTooltip - 1983 - Label - true - true - - Left - - - - ПрефиксИнформационнойБазыИсточникаОбменЧерезВебСервисКонтекстноеМеню - 1786 - true - - InputField - true - true - Enter - true - Left - true - - true - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Эта база веб</value> - - - ГруппаЭтаБазаВебРасширеннаяПодсказка - 2484 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ГруппаВтораяБазаВеб - 1773 - - НаименованиеВторойБазы3 - 1774 - - <key>ru</key> - <value>Наименование приложения в Интернете</value> - - true - true - - true - - - Объект.НаименованиеВторойБазы - - Top - - НаименованиеВторойБазы3ExtendedTooltip - 1985 - Label - true - true - - Left - - - - НаименованиеВторойБазы3КонтекстноеМеню - 1775 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - ПрефиксИнформационнойБазыПриемникаОбменЧерезВебСервис - 1787 - - <key>ru</key> - <value>Префикс</value> - - true - true - - true - - - Объект.ПрефиксИнформационнойБазыПриемника - - Top - Button - - ПрефиксИнформационнойБазыПриемникаОбменЧерезВебСервисExtendedTooltip - 1986 - Label - true - true - - Left - - - - ПрефиксИнформационнойБазыПриемникаОбменЧерезВебСервисКонтекстноеМеню - 1788 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Вторая база веб</value> - - - ГруппаВтораяБазаВебРасширеннаяПодсказка - 1984 - Label - true - true - - Left - - - UsualGroup - - Auto - NormalSeparation - true - true - Auto - Auto - - - - ГруппаОписаниеНастроекВеб - 1776 - - ОписаниеНастроекВыгрузкиДанных1 - 1781 - - <key>ru</key> - <value>Правила синхронизации данных</value> - - true - true - - true - - - ОписаниеНастроекВыгрузкиДанных - - - ОписаниеНастроекВыгрузкиДанных1ExtendedTooltip - 1988 - Label - true - true - - Left - - - - ОписаниеНастроекВыгрузкиДанных1КонтекстноеМеню - 1782 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - ВыполнитьНастройкуВыгрузкиДанных1 - 1780 - - <key>ru</key> - <value>Изменить правила отправки данных</value> - - true - true - - true - - - ВыполнитьНастройкуВыгрузкиДанных1ExtendedTooltip - 1989 - Label - true - true - - Left - - - Hyperlink - Form.Command.ВыполнитьНастройкуВыгрузкиДанных - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Описание настроек веб</value> - - - ГруппаОписаниеНастроекВебРасширеннаяПодсказка - 1987 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Auto - Auto - - - - НадписьДалееПодтверждениеНастроек7 - 1783 - - <key>ru</key> - <value>Нажмите кнопку "Далее" для перехода к сопоставлению данных.</value> - - true - true - - true - - - НадписьДалееПодтверждениеНастроек7ExtendedTooltip - 1990 - Label - true - true - - Left - - - - НадписьДалееПодтверждениеНастроек7КонтекстноеМеню - 1784 - true - - Label - 3 - true - false - - Left - Bottom - - - true - true - - true - - - <key>ru</key> - <value>Правила отправки данных</value> - - - ГруппаСтраницаМастераНастройкаПараметровОбменаДаннымиЧерезВебСервисРасширеннаяПодсказка - 2482 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - auto - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница мастера настройка параметров обмена данными</value> - - - СтраницаМастераНастройкаПараметровОбменаДаннымиЧерезВебСервисExtendedTooltip - 1980 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаМастераНастройкаПараметровДляВнешнегоСоединенияПервойБазы - 910 - - Отступ - 938 - - НаименованиеЭтойБазы1 - 980 - - <key>ru</key> - <value>Наименование информационной базы</value> - - true - true - - true - - - Объект.НаименованиеЭтойБазы - - Top - - НаименованиеЭтойБазы1ExtendedTooltip - 2209 - Label - true - true - - Left - - - - НаименованиеЭтойБазы1КонтекстноеМеню - 981 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - ПрефиксИнформационнойБазыИсточникаОбменЧерезВнешнееСоединение - 918 - true - true - - true - - - Объект.ПрефиксИнформационнойБазыИсточника - - Top - - ПрефиксИнформационнойБазыИсточникаОбменЧерезВнешнееСоединениеРасширеннаяПодсказка - 2210 - Label - true - true - - Left - - - - ПрефиксИнформационнойБазыИсточникаОбменЧерезВнешнееСоединениеКонтекстноеМеню - 919 - true - - InputField - true - true - Enter - true - Left - true - - true - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Настройка параметров синхронизации данных для этой программы</value> - - - ОтступExtendedTooltip - 2208 - Label - true - true - - Left - - - UsualGroup - - Auto - NormalSeparation - true - true - auto - Auto - Auto - - - - НастройкиУзла1 - 920 - - РамкаГруппыОграничений1 - 921 - - ОписаниеОграниченийПередачиДанных1 - 922 - - <key>ru</key> - <value>Правила отправки данных в -%Программа%</value> - - true - true - - true - - - ОписаниеОграниченийПередачиДанных - - Top - - ОписаниеОграниченийПередачиДанных1ExtendedTooltip - 2214 - Label - true - true - - Left - - - - ОписаниеОграниченийПередачиДанных1КонтекстноеМеню - 923 - true - - InputField - true - Enter - true - Left - true - - 8 - true - true - true - true - true - true - Normal - - - - НастройкаОграниченийРегистрацииДанных1 - 925 - true - true - - true - - false - - НастройкаОграниченийРегистрацииДанных1ExtendedTooltip - 2215 - Label - true - true - - Left - - - Hyperlink - Form.Command.НастройкаОграниченийРегистрацииДанных - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Ограничения передачи данных:</value> - - - ru - Рамка группы ограничений - - true - false - - РамкаГруппыОграничений1ExtendedTooltip - 2212 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - РамкаГруппыЗначенийПоУмолчанию1 - 926 - - ОписаниеЗначенийПоУмолчанию1 - 927 - - <key>ru</key> - <value>Правила получения данных из -%Программа%</value> - - true - true - - true - - - ОписаниеЗначенийПоУмолчанию - - Top - - ОписаниеЗначенийПоУмолчанию1ExtendedTooltip - 2218 - Label - true - true - - Left - - - - ОписаниеЗначенийПоУмолчанию1КонтекстноеМеню - 928 - true - - InputField - true - Enter - true - Left - true - - 8 - true - true - true - true - true - true - Normal - - - - НастройкаЗначенийПоУмолчанию1 - 930 - true - true - - true - - false - - НастройкаЗначенийПоУмолчанию1ExtendedTooltip - 2219 - Label - true - true - - Left - - - Hyperlink - Form.Command.НастройкаЗначенийПоУмолчанию - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Значения по умолчанию:</value> - - true - false - - РамкаГруппыЗначенийПоУмолчанию1ExtendedTooltip - 2216 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Настройки узла</value> - - - НастройкиУзла1ExtendedTooltip - 2211 - Label - true - true - - Left - - - UsualGroup - - Auto - NormalSeparation - true - true - Equal - Auto - Auto - - - - Декорация20 - 931 - true - true - - true - - - Декорация20ExtendedTooltip - 2220 - Label - true - true - - Left - - - - Декорация20КонтекстноеМеню - 932 - true - - Label - true - true - true - false - - Left - - - - НадписьДалееПодтверждениеНастроек1 - 933 - - <key>ru</key> - <value>Нажмите кнопку "Далее" для настройки параметров синхронизации другой программы.</value> - - true - true - - true - - - НадписьДалееПодтверждениеНастроек1ExtendedTooltip - 2221 - Label - true - true - - Left - - - - НадписьДалееПодтверждениеНастроек1КонтекстноеМеню - 934 - true - - Label - true - false - - Left - - - true - true - - true - - - <key>ru</key> - <value>Страница мастера настройка параметров для внешнего соединения первой базы</value> - - - ru - Страница мастера настройка параметров - - - СтраницаМастераНастройкаПараметровДляВнешнегоСоединенияПервойБазыExtendedTooltip - 2206 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаМастераНастройкаПараметровДляВнешнегоСоединенияВторойБазы - 995 - - Отступ1 - 1002 - - НаименованиеВторойБазы2 - 1000 - - <key>ru</key> - <value>Наименование информационной базы</value> - - true - true - - true - - - Объект.НаименованиеВторойБазы - - Top - - НаименованиеВторойБазы2ExtendedTooltip - 2225 - Label - true - true - - Left - - - - НаименованиеВторойБазы2КонтекстноеМеню - 1001 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - ПрефиксИнформационнойБазыПриемникаОбменЧерезВнешнееСоединение - 1005 - true - true - - true - - - Объект.ПрефиксИнформационнойБазыПриемника - - Top - - ПрефиксИнформационнойБазыПриемникаОбменЧерезВнешнееСоединениеРасширеннаяПодсказка - 2226 - Label - true - true - - Left - - - - ПрефиксИнформационнойБазыПриемникаОбменЧерезВнешнееСоединениеКонтекстноеМеню - 1006 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Настройка параметров синхронизации данных для другой программы</value> - - - Отступ1ExtendedTooltip - 2224 - Label - true - true - - Left - - - UsualGroup - - Auto - NormalSeparation - true - true - auto - Auto - Auto - - - - НастройкиУзлаБазыКорреспондента1 - 1018 - - РамкаГруппыОграничений4 - 1019 - - ОписаниеОграниченийПередачиДанных4 - 1020 - - <key>ru</key> - <value>Правила отправки данных в -%Программа%</value> - - true - true - - true - - - ОписаниеОграниченийПередачиДанныхБазыКорреспондента - - Top - - ОписаниеОграниченийПередачиДанных4ExtendedTooltip - 2230 - Label - true - true - - Left - - - - ОписаниеОграниченийПередачиДанных4КонтекстноеМеню - 1021 - true - - InputField - true - Enter - true - Left - true - - 8 - true - true - true - true - true - true - Normal - - - - НастройкаОграниченийРегистрацииДанных4 - 1023 - true - true - - true - - false - - НастройкаОграниченийРегистрацииДанных4ExtendedTooltip - 2231 - Label - true - true - - Left - - - Hyperlink - Form.Command.НастройкаОграниченийРегистрацииДанныхБазыКорреспондентаЧерезВнешнееСоединение - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Ограничения передачи данных:</value> - - - ru - Рамка группы ограничений - - true - false - - РамкаГруппыОграничений4ExtendedTooltip - 2228 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - РамкаГруппыЗначенийПоУмолчанию4 - 1024 - - ОписаниеЗначенийПоУмолчанию4 - 1025 - - <key>ru</key> - <value>Правила получения данных из -%Программа%</value> - - true - true - - true - - - ОписаниеЗначенийПоУмолчаниюБазыКорреспондента - - Top - - ОписаниеЗначенийПоУмолчанию4ExtendedTooltip - 2234 - Label - true - true - - Left - - - - ОписаниеЗначенийПоУмолчанию4КонтекстноеМеню - 1026 - true - - InputField - true - Enter - true - Left - true - - 8 - true - true - true - true - true - true - Normal - - - - НастройкаЗначенийПоУмолчанию4 - 1028 - true - true - - true - - false - - НастройкаЗначенийПоУмолчанию4ExtendedTooltip - 2235 - Label - true - true - - Left - - - Hyperlink - Form.Command.НастройкаЗначенийПоУмолчаниюБазыКорреспондентаЧерезВнешнееСоединение - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Значения по умолчанию:</value> - - true - false - - РамкаГруппыЗначенийПоУмолчанию4ExtendedTooltip - 2232 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Настройки узла</value> - - - НастройкиУзлаБазыКорреспондента1ExtendedTooltip - 2227 - Label - true - true - - Left - - - UsualGroup - - Auto - NormalSeparation - true - true - Equal - Auto - Auto - - - - Декорация21 - 1029 - true - true - - true - - - Декорация21ExtendedTooltip - 2236 - Label - true - true - - Left - - - - Декорация21КонтекстноеМеню - 1030 - true - - Label - true - true - true - false - - Left - - - - НадписьДалееПодтверждениеНастроек2 - 1031 - - <key>ru</key> - <value>Нажмите кнопку "Далее" для проверки параметров и завершения настройки синхронизации данных.</value> - - true - true - - true - - - НадписьДалееПодтверждениеНастроек2ExtendedTooltip - 2237 - Label - true - true - - Left - - - - НадписьДалееПодтверждениеНастроек2КонтекстноеМеню - 1032 - true - - Label - true - false - - Left - - - true - true - - true - - - <key>ru</key> - <value>Страница мастера настройка параметров для внешнего соединения второй базы</value> - - - ru - Страница мастера настройка параметров - - - СтраницаМастераНастройкаПараметровДляВнешнегоСоединенияВторойБазыExtendedTooltip - 2222 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаМастераСопоставлениеДанных - 1331 - - ГруппаСтраницаМастераСопоставлениеДанных - 2479 - - СтраницыСтатусаСопоставленияДанных - 1674 - - СтатусСопоставленияЕстьНесопоставленныеДанные - 1675 - - ПояснениеОНаличииНесопоставленныхОбъектов1 - 1717 - - <key>ru</key> - <value>Учет ведется в обеих программах, поэтому следует выполнить сопоставление данных. -Это позволит избежать появления дублирующихся элементов справочников, которые независимо друг от друга -были введены в обеих программах, например, с одинаковыми наименованиями. -С помощью сопоставления можно указать, какие данные являются одинаковыми в двух программах.</value> - - true - true - - true - - - ПояснениеОНаличииНесопоставленныхОбъектов1ExtendedTooltip - 1995 - Label - true - true - - Left - - - - ПояснениеОНаличииНесопоставленныхОбъектов1КонтекстноеМеню - 1718 - true - - Label - true - false - - Style.ПоясняющийТекст - - - Left - Top - - - - ДеревоИнформацииСтатистики - 1651 - - <key>ru</key> - <value>Дерево информации статистики</value> - - true - true - - true - - - ДеревоИнформацииСтатистики - - None - Add - Change - Copy - Delete - EndEdit - MoveDown - MoveUp - SortListAsc - SortListDesc - - ДеревоИнформацииСтатистикиГруппа - 1668 - - ДеревоИнформацииСтатистикиКартинка - 1658 - true - true - - true - - - ДеревоИнформацииСтатистики.Картинка - - None - - ДеревоИнформацииСтатистикиКартинкаExtendedTooltip - 2000 - Label - true - true - - Left - - - - ДеревоИнформацииСтатистикиКартинкаКонтекстноеМеню - 1659 - true - - PictureField - true - Auto - true - Left - true - - true - true - true - - - 1 - - - - - ДеревоИнформацииСтатистикиСиноним - 1654 - true - true - - true - - - ДеревоИнформацииСтатистики.Синоним - - - ДеревоИнформацииСтатистикиСинонимExtendedTooltip - 2001 - Label - true - true - - Left - - - - ДеревоИнформацииСтатистикиСинонимКонтекстноеМеню - 1655 - true - - InputField - true - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Дерево информации статистики группа</value> - - true - - ДеревоИнформацииСтатистикиГруппаExtendedTooltip - 1999 - Label - true - true - - Left - - - ColumnGroup - - InCell - auto - true - - - - ДеревоИнформацииСтатистикиПроцентСопоставленияОбъектов - 1656 - true - true - - true - - - ДеревоИнформацииСтатистики.ПроцентСопоставленияОбъектов - - - ДеревоИнформацииСтатистикиПроцентСопоставленияОбъектовExtendedTooltip - 2002 - Label - true - true - - Left - - - - ДеревоИнформацииСтатистикиПроцентСопоставленияОбъектовКонтекстноеМеню - 1657 - true - - InputField - true - Auto - true - Right - true - - 10 - true - true - false - true - - ru - ЧН= - - - ru - ЧН= - - true - true - true - Normal - - - - ДеревоИнформацииСтатистикиКоманднаяПанель - 1653 - - ДеревоИнформацииСтатистикиВыполнитьСопоставлениеДанных - 1681 - true - true - - true - - - ДеревоИнформацииСтатистикиВыполнитьСопоставлениеДанныхExtendedTooltip - 1997 - Label - true - true - - Left - - - Form.Command.ВыполнитьСопоставлениеДанных - Normal - Auto - true - true - UserCmds - Auto - - Left - - - Selection - ДеревоИнформацииСтатистикиВыбор - - - ДеревоИнформацииСтатистикиSearchString - 2495 - - ДеревоИнформацииСтатистикиSearchStringExtendedTooltip - 2497 - Label - true - true - - Left - - - - ДеревоИнформацииСтатистикиSearchStringContextMenu - 2496 - true - - ДеревоИнформацииСтатистики - - true - - - - ДеревоИнформацииСтатистикиViewStatus - 2498 - - ДеревоИнформацииСтатистикиViewStatusExtendedTooltip - 2500 - Label - true - true - - Left - - - - ДеревоИнформацииСтатистикиViewStatusContextMenu - 2499 - true - - ViewStatusAddition - ДеревоИнформацииСтатистики - - true - - - - ДеревоИнформацииСтатистикиSearchControl - 2501 - - ДеревоИнформацииСтатистикиSearchControlExtendedTooltip - 2503 - Label - true - true - - Left - - - - ДеревоИнформацииСтатистикиSearchControlContextMenu - 2502 - true - - SearchControlAddition - ДеревоИнформацииСтатистики - - true - - - - ДеревоИнформацииСтатистикиExtendedTooltip - 1998 - Label - true - true - - Left - - - - ДеревоИнформацииСтатистикиКонтекстноеМеню - 1652 - - ДеревоИнформацииСтатистикиКонтекстноеМенюВыполнитьСопоставлениеДанных - 1682 - true - true - - true - - - ДеревоИнформацииСтатистикиКонтекстноеМенюВыполнитьСопоставлениеДанныхExtendedTooltip - 1996 - Label - true - true - - Left - - - Form.Command.ВыполнитьСопоставлениеДанных - Normal - Auto - true - true - UserCmds - Auto - - - Tree - true - true - true - true - Row -
    true
    - 1 - 1 - AutoUse - AutoUse - true - true - false - true - Auto - Auto - ExpandAllLevels - true - true - true -
    - true - true - - true - - - <key>ru</key> - <value>Статус сопоставления есть несопоставленные данные</value> - - - СтатусСопоставленияЕстьНесопоставленныеДанныеExtendedTooltip - 1994 - Label - true - true - - Left - - - Page - - Vertical - auto - false - -
    - - СтатусСопоставленияВсеДанныеСопоставлены - 1676 - - ГруппировкаСообщения8 - 1743 - - Декорация35 - 1745 - true - true - - true - - - Декорация35ExtendedTooltip - 2005 - Label - true - true - - Left - - - - Декорация35КонтекстноеМеню - 1746 - true - - true - true - false - - - CommonPicture.Информация32 - - - - - Декорация36 - 1748 - - <key>ru</key> - <value>Все данные сопоставлены. -Перейдите далее для продолжения настройки.</value> - - true - true - - true - - - Декорация36ExtendedTooltip - 2006 - Label - true - true - - Left - - - - Декорация36КонтекстноеМеню - 1749 - true - - Label - 3 - true - false - - System.DefaultGUIFont - 10.0 - - - Left - Center - - - true - true - - true - - - <key>ru</key> - <value>Группировка сообщения 8</value> - - - ru - Группировка сообщения - - - ГруппировкаСообщения8ExtendedTooltip - 2004 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - auto - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Статус сопоставления все данные сопоставлены</value> - - - СтатусСопоставленияВсеДанныеСопоставленыExtendedTooltip - 2003 - Label - true - true - - Left - - - Page - - auto - false - - - true - true - - true - - - <key>ru</key> - <value>Сопоставление одинаковых данных</value> - - - СтраницыСтатусаСопоставленияДанныхExtendedTooltip - 1993 - Label - true - true - - Left - - - Pages - - Auto - -
    - - НадписьДалееНаСтраницеСопоставленияДанных - 1334 - - <key>ru</key> - <value>Нажмите кнопку "Далее" для синхронизации данных.</value> - - true - true - - true - - - НадписьДалееНаСтраницеСопоставленияДанныхExtendedTooltip - 2007 - Label - true - true - - Left - - - - НадписьДалееНаСтраницеСопоставленияДанныхКонтекстноеМеню - 1335 - true - - Label - 3 - true - false - - Left - Bottom - - - true - true - - true - - - <key>ru</key> - <value>Сопоставление одинаковых данных</value> - - - ГруппаСтраницаМастераСопоставлениеДанныхРасширеннаяПодсказка - 2480 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - auto - Auto - Auto - -
    - true - true - - true - - - <key>ru</key> - <value>Страница мастера сопоставление данных</value> - - - СтраницаМастераСопоставлениеДанныхExtendedTooltip - 1991 - Label - true - true - - Left - - - Page - - Vertical - auto - false - -
    - - СтраницаМастераСозданиеОбменаДаннымиУспешноЗавершено - 1345 - - ГруппаРасписания - 1685 - - КартинкаЧасы - 1686 - - <key>ru</key> - <value>Картинка часы</value> - - true - true - - true - - - КартинкаЧасыExtendedTooltip - 2011 - Label - true - true - - Left - - - - КартинкаЧасыКонтекстноеМеню - 1687 - true - - true - true - - - - - - ГруппаРасписания1 - 1688 - - ВыполнятьОбменДаннымиАвтоматически - 1683 - true - true - - true - - - ВыполнятьОбменДаннымиАвтоматически - - Right - - OnChange - ВыполнятьОбменДаннымиАвтоматическиПриИзменении - - - ВыполнятьОбменДаннымиАвтоматическиExtendedTooltip - 2013 - Label - true - true - - Left - - - - ВыполнятьОбменДаннымиАвтоматическиКонтекстноеМеню - 1684 - true - - CheckBoxField - Enter - true - Left - true - - - - ГруппаПредопределенногоРасписания - 1691 - - СтраницыПредопределенногоРасписания - 1710 - - СтраницаПредопределенногоРасписания - 1711 - - ПредопределенноеРасписаниеОбменаДанными - 1699 - true - true - - true - - - ПредопределенноеРасписаниеОбменаДанными - - None - - OnChange - ПредопределенноеРасписаниеОбменаДаннымиПриИзменении - - - ПредопределенноеРасписаниеОбменаДаннымиExtendedTooltip - 2017 - Label - true - true - - Left - - - - ПредопределенноеРасписаниеОбменаДаннымиКонтекстноеМеню - 1700 - true - - RadioButtonField - Enter - true - Left - true - - 1 - - - ru - Каждые 15 минут - - - Каждые15Минут - - - - - ru - Каждые 30 минут - - - Каждые30Минут - - - - - ru - Каждый час - - - КаждыйЧас - - - - - ru - Каждый день, в 8:00 - - - КаждыйДеньВ_8_00 - - - - - ru - Другое расписание - - - ДругоеРасписание - - - Vertical - - - - СтраницыПользовательскогоРасписания - 1705 - - СтраницаПользовательскогоРасписания - 1706 - - ИзменитьПользовательскоеРасписание - 1704 - true - true - - true - - - ИзменитьПользовательскоеРасписаниеExtendedTooltip - 2020 - Label - true - true - - Left - - - UsualButton - Form.Command.ИзменитьПользовательскоеРасписание - Normal - Auto - 15 - true - true - UserCmds - Auto - - - ПредставлениеПользовательскогоОписания - 1701 - true - true - - true - - - ПредставлениеПользовательскогоОписания - - None - - ПредставлениеПользовательскогоОписанияExtendedTooltip - 2021 - Label - true - true - - Left - - - - ПредставлениеПользовательскогоОписанияКонтекстноеМеню - 1702 - true - - LabelField - Enter - true - Left - true - - 2 - true - false - - Style.ПоясняющийТекст - - - - true - true - - true - - - <key>ru</key> - <value>Страница пользовательского расписания</value> - - - СтраницаПользовательскогоРасписанияExtendedTooltip - 2019 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - ПустаяСтраницаПользовательскогоРасписания - 1707 - - Декорация10 - 1708 - true - true - - true - - - Декорация10ExtendedTooltip - 2023 - Label - true - true - - Left - - - - Декорация10КонтекстноеМеню - 1709 - true - - Label - true - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Пустая страница пользовательского расписания</value> - - - ПустаяСтраницаПользовательскогоРасписанияExtendedTooltip - 2022 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - true - true - - true - - - <key>ru</key> - <value>Страницы пользовательского расписания</value> - - true - - СтраницыПользовательскогоРасписанияExtendedTooltip - 2018 - Label - true - true - - Left - - - Pages - - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница предопределенного расписания</value> - - - СтраницаПредопределенногоРасписанияExtendedTooltip - 2016 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - НедоступнаяСтраницаПредопределенногоРасписания - 1712 - - ПредопределенноеРасписаниеОбменаДанными1 - 1715 - true - true - - true - - - ПредопределенноеРасписаниеОбменаДанными - - None - - OnChange - ПредопределенноеРасписаниеОбменаДаннымиПриИзменении - - - ПредопределенноеРасписаниеОбменаДанными1ExtendedTooltip - 2025 - Label - true - true - - Left - - - - ПредопределенноеРасписаниеОбменаДанными1КонтекстноеМеню - 1716 - true - - RadioButtonField - Enter - true - Left - true - - 1 - - - ru - Каждые 15 минут - - - Каждые15Минут - - - - - ru - Каждые 30 минут - - - Каждые30Минут - - - - - ru - Каждый час - - - КаждыйЧас - - - - - ru - Каждый день, в 8:00 - - - КаждыйДеньВ_8_00 - - - - - ru - Другое расписание - - - ДругоеРасписание - - - Vertical - - - true - false - - true - - - <key>ru</key> - <value>Недоступная страница предопределенного расписания</value> - - true - - НедоступнаяСтраницаПредопределенногоРасписанияExtendedTooltip - 2024 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - true - true - - true - - - <key>ru</key> - <value>Страницы предопределенного расписания</value> - - - СтраницыПредопределенногоРасписанияExtendedTooltip - 2015 - Label - true - true - - Left - - - Pages - - Auto - - - true - true - - true - - - <key>ru</key> - <value>Предопределенного расписания</value> - - - ГруппаПредопределенногоРасписанияExtendedTooltip - 2014 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Расписания 1</value> - - - ГруппаРасписания1ExtendedTooltip - 2012 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Настройка синхронизации данных успешно завершена</value> - - - ГруппаРасписанияExtendedTooltip - 2010 - Label - true - true - - Left - - - UsualGroup - - Auto - NormalSeparation - true - true - auto - Auto - Auto - - - - Декорация32 - 1348 - true - true - - true - - - Декорация32ExtendedTooltip - 2026 - Label - true - true - - Left - - - - Декорация32КонтекстноеМеню - 1349 - true - - Label - true - true - true - - Left - - - - НадписьГотово12 - 1350 - - <key>ru</key> - <value>Нажмите кнопку "Готово" для завершения работы с помощником.</value> - - true - true - - true - - - НадписьГотово12ExtendedTooltip - 2030 - Label - true - true - - Left - - - - НадписьГотово12КонтекстноеМеню - 1351 - true - - Label - 3 - true - false - - Left - Bottom - - - true - true - - true - - - <key>ru</key> - <value>Страница мастера создание обмена данными успешно завершено</value> - - - ru - Страница мастера сопоставление данных - - - СтраницаМастераСозданиеОбменаДаннымиУспешноЗавершеноExtendedTooltip - 2008 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаМастераНастройкиОтраженияДокументовВУчете - 1338 - - ГруппаОтражениеВУчете - 1618 - - НастройкиПараметровУчета - 1619 - - НаименованиеЭтойБазы4 - 1614 - true - true - - true - - - Объект.НаименованиеЭтойБазы - - None - - НаименованиеЭтойБазы4ExtendedTooltip - 2035 - Label - true - true - - Left - - - - НаименованиеЭтойБазы4КонтекстноеМеню - 1615 - true - - LabelField - Enter - true - Left - true - - true - - System.DefaultGUIFont - true - false - false - false - - - - - НастройкиПараметровУчетаГоризонтальная - 1640 - - Декорация99 - 1641 - true - true - - true - - - Декорация99ExtendedTooltip - 2037 - Label - true - true - - Left - - - - Декорация99КонтекстноеМеню - 1642 - true - - true - true - - - CommonPicture.Предупреждение32 - - - - - НастройкиПараметровУчетаПоясняющаяНадпись - 1643 - true - true - - true - - - НастройкиПараметровУчетаПоясняющаяНадпись - - None - - НастройкиПараметровУчетаПоясняющаяНадписьExtendedTooltip - 2038 - Label - true - true - - Left - - - - НастройкиПараметровУчетаПоясняющаяНадписьКонтекстноеМеню - 1644 - true - - LabelField - Center - Enter - true - Left - true - - 2 - true - false - - - true - true - - true - - - <key>ru</key> - <value>Настройки параметров учета горизонтальная</value> - - - НастройкиПараметровУчетаГоризонтальнаяРасширеннаяПодсказка - 2036 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - НадписьНастройкиПараметровУчета - 2437 - true - true - - true - - - НадписьНастройкиПараметровУчета - - None - - НадписьНастройкиПараметровУчетаРасширеннаяПодсказка - 2439 - Label - true - true - - Left - - - - НадписьНастройкиПараметровУчетаКонтекстноеМеню - 2438 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Настройки параметров учета</value> - - - System.DefaultGUIFont - true - false - false - false - - - НастройкиПараметровУчетаРасширеннаяПодсказка - 2034 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Auto - Auto - - - - НастройкиПараметровУчетаКорреспондента - 1626 - - НаименованиеВторойБазы4 - 1616 - true - true - - true - - - Объект.НаименованиеВторойБазы - - None - - НаименованиеВторойБазы4ExtendedTooltip - 2043 - Label - true - true - - Left - - - - НаименованиеВторойБазы4КонтекстноеМеню - 1617 - true - - LabelField - Enter - true - Left - true - - true - - System.DefaultGUIFont - true - false - false - false - - - - - НастройкиПараметровУчетаКорреспондентаГоризонтальная - 1627 - - Декорация98 - 1628 - true - true - - true - - - Декорация98ExtendedTooltip - 2045 - Label - true - true - - Left - - - - Декорация98КонтекстноеМеню - 1629 - true - - true - true - - - CommonPicture.Предупреждение32 - - - - - НастройкиПараметровУчетаКорреспондентаПоясняющаяНадпись - 1649 - true - true - - true - - - НастройкиПараметровУчетаКорреспондентаПоясняющаяНадпись - - None - - НастройкиПараметровУчетаКорреспондентаПоясняющаяНадписьExtendedTooltip - 2046 - Label - true - true - - Left - - - - НастройкиПараметровУчетаКорреспондентаПоясняющаяНадписьКонтекстноеМеню - 1650 - true - - LabelField - Center - Enter - true - Left - true - - 2 - true - false - - - true - true - - true - - - <key>ru</key> - <value>Настройки параметров учета корреспондента горизонтальная</value> - - - НастройкиПараметровУчетаКорреспондентаГоризонтальнаяРасширеннаяПодсказка - 2044 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - НадписьНастройкиПараметровУчетаКорреспондента - 2440 - true - true - - true - - - НадписьНастройкиПараметровУчетаКорреспондента - - None - - НадписьНастройкиПараметровУчетаКорреспондентаРасширеннаяПодсказка - 2442 - Label - true - true - - Left - - - - НадписьНастройкиПараметровУчетаКорреспондентаКонтекстноеМеню - 2441 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Настройки параметров учета корреспондента</value> - - - System.DefaultGUIFont - true - false - false - false - - - НастройкиПараметровУчетаКорреспондентаРасширеннаяПодсказка - 2042 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Настройки для отражения документов в учете</value> - - - ГруппаОтражениеВУчетеРасширеннаяПодсказка - 2033 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - auto - Auto - Auto - - - - НадписьДалее3 - 1343 - - <key>ru</key> - <value>Нажмите кнопку "Далее" для выполнения синхронизации данных.</value> - - true - true - - true - - - НадписьДалее3ExtendedTooltip - 2050 - Label - true - true - - Left - - - - НадписьДалее3КонтекстноеМеню - 1344 - true - - Label - 3 - true - false - - Left - Bottom - - - true - true - - true - - - <key>ru</key> - <value>Страница мастера настройки отражения документов в учете</value> - - - ru - Страница мастера сопоставление данных - - - СтраницаМастераНастройкиОтраженияДокументовВУчетеExtendedTooltip - 2031 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаМастераПараметрыПолученияДанных - 2407 - - ПравилаПолученияДанных - 2412 - - ПравилаПолученияДанныхЭтойБазы - 2414 - - НаименованиеЭтойБазы6 - 2418 - true - true - - true - - - Объект.НаименованиеЭтойБазы - - None - - НаименованиеЭтойБазы6РасширеннаяПодсказка - 2420 - Label - true - true - - Left - - - - НаименованиеЭтойБазы6КонтекстноеМеню - 2419 - true - - LabelField - Enter - true - Left - true - - true - - System.DefaultGUIFont - true - false - false - false - - - - - РамкаГруппыЗначенийПоУмолчанию6 - 1647 - - ОписаниеЗначенийПоУмолчанию6 - 1624 - - <key>ru</key> - <value>Значения для заполнения реквизитов при получении данных в этой программе</value> - - true - true - - true - - - ОписаниеЗначенийПоУмолчанию - - - ОписаниеЗначенийПоУмолчанию6ExtendedTooltip - 2040 - Label - true - true - - Left - - - - ОписаниеЗначенийПоУмолчанию6КонтекстноеМеню - 1625 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - true - Normal - - - - НастройкаЗначенийПоУмолчанию6 - 1645 - - <key>ru</key> - <value>Изменить правила получения данных для этой программы</value> - - true - true - - true - - - НастройкаЗначенийПоУмолчанию6ExtendedTooltip - 2041 - Label - true - true - - Left - - - Hyperlink - Form.Command.НастройкаЗначенийПоУмолчанию - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Рамка группы значений по умолчанию 6</value> - - - РамкаГруппыЗначенийПоУмолчанию6ExtendedTooltip - 2039 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Правила получения данных этой базы</value> - - - ПравилаПолученияДанныхЭтойБазыРасширеннаяПодсказка - 2415 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Auto - Auto - - - - ПравилаПолученияДанныхВторойБазы - 2416 - - НаименованиеВторойБазы5 - 2421 - true - true - - true - - - Объект.НаименованиеВторойБазы - - None - - НаименованиеВторойБазы5РасширеннаяПодсказка - 2423 - Label - true - true - - Left - - - - НаименованиеВторойБазы5КонтекстноеМеню - 2422 - true - - LabelField - Enter - true - Left - true - - true - - System.DefaultGUIFont - true - false - false - false - - - - - РамкаГруппыЗначенийПоУмолчаниюБазыКорреспондента - 1648 - - ОписаниеЗначенийПоУмолчаниюБазыКорреспондента - 1636 - - <key>ru</key> - <value>Значения для заполнения реквизитов при получении данных в приложении, расположенном в Интернете</value> - - true - true - - true - - - ОписаниеЗначенийПоУмолчаниюБазыКорреспондента - - - ОписаниеЗначенийПоУмолчаниюБазыКорреспондентаExtendedTooltip - 2048 - Label - true - true - - Left - - - - ОписаниеЗначенийПоУмолчаниюБазыКорреспондентаКонтекстноеМеню - 1637 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - true - Normal - - - - НастройкаЗначенийПоУмолчаниюБазыКорреспондентаЧерезВебСервис - 1646 - - <key>ru</key> - <value>Изменить правила получения данных для другой программы</value> - - true - true - - true - - - НастройкаЗначенийПоУмолчаниюБазыКорреспондентаЧерезВебСервисExtendedTooltip - 2049 - Label - true - true - - Left - - - Hyperlink - Form.Command.НастройкаЗначенийПоУмолчаниюБазыКорреспондентаЧерезВебСервис - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Рамка группы значений по умолчанию базы корреспондента</value> - - - РамкаГруппыЗначенийПоУмолчаниюБазыКорреспондентаExtendedTooltip - 2047 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Правила получения данных второй базы</value> - - - ПравилаПолученияДанныхВторойБазыРасширеннаяПодсказка - 2417 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Правила получения данных</value> - - - ПравилаПолученияДанныхРасширеннаяПодсказка - 2413 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - auto - Auto - Auto - - - - НадписьДалее4 - 2443 - - <key>ru</key> - <value>Нажмите кнопку "Далее" для выполнения синхронизации данных.</value> - - true - true - - true - - - НадписьДалее4РасширеннаяПодсказка - 2445 - Label - true - true - - Left - - - - НадписьДалее4КонтекстноеМеню - 2444 - true - - Label - 3 - true - false - - Left - Bottom - - - true - true - - true - - - <key>ru</key> - <value>Страница мастера параметры получения данных</value> - - - СтраницаМастераПараметрыПолученияДанныхРасширеннаяПодсказка - 2408 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаМастераВыборРежимаРаботыПомощника - 774 - - ВыборВариантаПодключения - 1811 - - РежимРаботыМастера - 837 - true - true - - true - - - РежимРаботыМастера - - None - - OnChange - РежимРаботыМастераПриИзменении - - - РежимРаботыМастераExtendedTooltip - 2055 - Label - true - true - - Left - - - - РежимРаботыМастераКонтекстноеМеню - 838 - true - - RadioButtonField - Enter - true - Left - true - - 1 - - - ru - Прямое подключение к программе на этом компьютере или в локальной сети - - - ОбменЧерезВнешнееСоединение - - - - - ru - Прямое подключение к программе через Интернет - - - ОбменЧерезВебСервис - - - - - ru - Другие каналы связи (сетевой каталог, FTP, электронная почта) - - - ОбменЧерезОбычныеКаналыСвязи - - - Vertical - - - true - true - - true - - - <key>ru</key> - <value>Выбор варианта подключения к другой программе</value> - - - ВыборВариантаПодключенияРасширеннаяПодсказка - 2054 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - auto - Auto - Auto - - - - ГруппаОтступ - 839 - - СтраницыПараметровТранспорта - 830 - - СтраницаПараметровТранспортаCOM - 831 - - Декорация59 - 1904 - - <key>ru</key> - <value>Данный вариант подключения рекомендуется в том случае, если другая программа находится на том же -компьютере, что и эта программа, или обе программы расположены в одной локальной сети (в одном офисе).</value> - - true - true - - true - - - Декорация59ExtendedTooltip - 2067 - Label - true - true - - Left - - - - Декорация59КонтекстноеМеню - 1905 - true - - Label - true - - Style.ПоясняющийТекст - - - Left - - - - ПараметрыТранспортаCOM - 1814 - - ВидБазы - 1818 - - COMВариантРаботыИнформационнойБазы - 782 - - <key>ru</key> - <value>Укажите параметры подключения к другой программе</value> - - true - true - - true - - - Объект.COMВариантРаботыИнформационнойБазы - - Top - - OnChange - COMВариантРаботыИнформационнойБазыПриИзменении - - - COMВариантРаботыИнформационнойБазыExtendedTooltip - 2070 - Label - true - true - - Left - - - - COMВариантРаботыИнформационнойБазыКонтекстноеМеню - 783 - true - - RadioButtonField - Enter - true - Left - true - - 1 - - - ru - На данном компьютере или на компьютере в локальной сети - - - 0 - - - - - ru - На сервере 1С:Предприятия - - - 1 - - - Vertical - - - true - true - - true - - - <key>ru</key> - <value>Вид базы</value> - - Button - - ВидБазыРасширеннаяПодсказка - 2069 - - <key>ru</key> - <value>Для настройки синхронизации данных необходимо знать где находится программа, с которой нужно настроить синхронизацию (другая программа). Для этого достаточно открыть программу. В главном меню выбрать пункт "Справка\О программе...". -Обратите внимание на следующие параметры (все они могут быть скопированы из формы "О программе..."): -• Режим - либо файловый либо серверный. Если режим файловый, то информационная база находится в каталоге на данном компьютере или в локальной сети. Если режим серверный, то для подключения нужно знать имя сервера и имя информационной базы на сервере. -• Каталог - для файлового режима указывается каталог, в котором располагается информационная база. -• Сервер - для серверного режима указывается имя сервера 1С:Предприятия, на котором расположена информационная база. -• База - для серверного режима указывается имя информационной базы на сервере 1С:Предприятия. -• Пользователь - имя пользователя, который вошел в информационную базу. Если в имени пользователя присутствует ";", то в качестве имени пользователя для подключения нужно использовать имя от начала строки до ";".</value> - - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - МестонахождениеБазы - 1815 - - Декорация37 - 1816 - true - true - - true - - - Декорация37ExtendedTooltip - 2074 - Label - true - true - - Left - - - - Декорация37КонтекстноеМеню - 1817 - true - - Label - 1 - true - true - - Left - - - - ВариантыРаботыИнформационнойБазы - 794 - - СтраницаВариантРаботыФайловый - 795 - - COMКаталогИнформационнойБазы - 790 - true - true - - true - - - Объект.COMКаталогИнформационнойБазы - - - COMКаталогИнформационнойБазыExtendedTooltip - 2077 - Label - true - true - - Left - - - - COMКаталогИнформационнойБазыКонтекстноеМеню - 791 - true - - InputField - true - Enter - true - Left - true - - - StartChoice - COMКаталогИнформационнойБазыНачалоВыбора - - - Opening - COMКаталогИнформационнойБазыОткрытие - - true - true - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Страница вариант работы файловый</value> - - - СтраницаВариантРаботыФайловыйExtendedTooltip - 2076 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаВариантРаботыКлиентСерверный - 796 - - COMИмяСервера1СПредприятия - 788 - - <key>ru</key> - <value>Кластер серверов</value> - - true - true - - true - - - Объект.COMИмяСервера1СПредприятия - - - COMИмяСервера1СПредприятияExtendedTooltip - 2079 - Label - true - true - - Left - - - - COMИмяСервера1СПредприятияКонтекстноеМеню - 789 - true - - InputField - true - Enter - true - Left - true - - 20 - true - true - false - true - true - true - true - true - Normal - - - - COMИмяИнформационнойБазыНаСервере1СПредприятия - 784 - - <key>ru</key> - <value>Имя информационной базы</value> - - true - true - - true - - - Объект.COMИмяИнформационнойБазыНаСервере1СПредприятия - - - COMИмяИнформационнойБазыНаСервере1СПредприятияExtendedTooltip - 2080 - Label - true - true - - Left - - - - COMИмяИнформационнойБазыНаСервере1СПредприятияКонтекстноеМеню - 785 - true - - InputField - true - Enter - true - Left - true - - 20 - true - true - false - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Страница вариант работы клиент серверный</value> - - - СтраницаВариантРаботыКлиентСерверныйExtendedTooltip - 2078 - Label - true - true - - Left - - - Page - - auto - false - - - true - true - - true - - - <key>ru</key> - <value>Варианты работы информационной базы</value> - - - ВариантыРаботыИнформационнойБазыExtendedTooltip - 2075 - Label - true - true - - Left - - - Pages - - Auto - - - true - true - - true - - - <key>ru</key> - <value>Местонахождение базы</value> - - - МестонахождениеБазыРасширеннаяПодсказка - 2073 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - Авторизация - 2533 - - АвторизацияВертикальная - 1821 - - COMГруппаПользовательПароль - 797 - - ТипАутентификации1С - 1819 - true - true - - true - - - ТипАутентификации - - None - - OnChange - ТипАутентификацииПриИзменении - - - ТипАутентификации1СРасширеннаяПодсказка - 2082 - Label - true - true - - Left - - - - ТипАутентификации1СКонтекстноеМеню - 1820 - true - - RadioButtonField - Enter - true - Left - true - - 1 - - - ru - Аутентификация 1С Предприятия - - - 0 - - - Vertical - - - - ПользовательИПароль - 2537 - - Декорация2 - 2539 - true - true - - true - - - Декорация2РасширеннаяПодсказка - 2541 - Label - true - true - - Left - - - - Декорация2КонтекстноеМеню - 2540 - true - - Label - 2 - true - true - - Left - - - - ПользовательИПарольВертикальная - 2535 - - COMИмяПользователя - 786 - true - true - - true - - - Объект.COMИмяПользователя - - - COMИмяПользователяExtendedTooltip - 2084 - Label - true - true - - Left - - - - COMИмяПользователяКонтекстноеМеню - 787 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - COMПарольПользователя - 792 - true - true - - true - - - Объект.COMПарольПользователя - - - COMПарольПользователяExtendedTooltip - 2085 - Label - true - true - - Left - - - - COMПарольПользователяКонтекстноеМеню - 793 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Пользователь и пароль вертикальная</value> - - - ПользовательИПарольВертикальнаяРасширеннаяПодсказка - 2536 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Пользователь и пароль</value> - - - ПользовательИПарольРасширеннаяПодсказка - 2538 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Аутентификация 1С Предприятия</value> - - - COMГруппаПользовательПарольExtendedTooltip - 2083 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Авторизация вертикальная</value> - - - АвторизацияВертикальнаяРасширеннаяПодсказка - 2081 - Label - true - true - - Left - - - UsualGroup - - Auto - NormalSeparation - true - true - Auto - Auto - - - - ТипАутентификацииОС - 2530 - true - true - - true - - - ТипАутентификации - - None - - OnChange - ТипАутентификацииПриИзменении - - - ТипАутентификацииОСРасширеннаяПодсказка - 2532 - Label - true - true - - Left - - - - ТипАутентификацииОСКонтекстноеМеню - 2531 - true - - RadioButtonField - Enter - true - Left - true - - 1 - - - ru - Аутентификация операционной системы - - - 1 - - - Vertical - - - true - true - - true - - - <key>ru</key> - <value>Авторизация</value> - - - АвторизацияРасширеннаяПодсказка - 2534 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ГруппаКнопокПроверкиПодключенияCOM - 1075 - - ПроверитьПодключениеCOM - 798 - true - true - - true - - - ПроверитьПодключениеCOMExtendedTooltip - 2087 - Label - true - true - - Left - - - UsualButton - Form.Command.ПроверитьПодключениеCOM - Normal - Auto - 20 - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Кнопок проверки подключения COM</value> - - - ГруппаКнопокПроверкиПодключенияCOMExtendedTooltip - 2086 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ГруппаОшибкиПодключения - 2557 - - КартинкаПредупреждениеПодключения - 2559 - - <key>ru</key> - <value>Картинка предупреждение подключения</value> - - true - true - - true - - - КартинкаПредупреждениеПодключенияРасширеннаяПодсказка - 2561 - Label - true - true - - Left - - - - КартинкаПредупреждениеПодключенияКонтекстноеМеню - 2560 - true - - false - false - Left - Top - - - CommonPicture.Предупреждение32 - - - - - ТекстОшибкиПроверкиПодключения - 2562 - true - true - - true - - - ТекстОшибкиПроверкиПодключенияРасширеннаяПодсказка - 2564 - Label - true - true - - Left - - - - ТекстОшибкиПроверкиПодключенияКонтекстноеМеню - 2563 - true - - Label - true - true - Left - Top - - Left - Top - - - true - true - - true - - - <key>ru</key> - <value>Ошибки подключения</value> - - true - - ГруппаОшибкиПодключенияРасширеннаяПодсказка - 2558 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Параметры транспорта COM</value> - - - ПараметрыТранспортаCOMРасширеннаяПодсказка - 2068 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - НадписьДалее - 847 - - <key>ru</key> - <value>Нажмите "Далее" для настройки параметров синхронизации данных.</value> - - true - true - - true - - - НадписьДалееExtendedTooltip - 2091 - Label - true - true - - Left - - - - НадписьДалееКонтекстноеМеню - 848 - true - - Label - true - true - false - - Left - Bottom - - - true - true - - true - - - <key>ru</key> - <value>Страница параметров транспорта COM</value> - - - СтраницаПараметровТранспортаCOMExtendedTooltip - 2066 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаПараметровТранспортаWS - 1076 - - Декорация60 - 1908 - - <key>ru</key> - <value>Этот вариант подключения рекомендуется выбрать, если программа находится -в другой сети (офисе) и при этом доступна для подключения через Интернет.</value> - - true - true - - true - - - Декорация60ExtendedTooltip - 2093 - Label - true - true - - Left - - - - Декорация60КонтекстноеМеню - 1909 - true - - Label - true - - Style.ПоясняющийТекст - - - Left - - - - ПараметрыТранспортаВеб - 1822 - - ПользовательИПарольВеб - 1750 - - WSИмяПользователя - 1079 - true - true - - true - - - Объект.WSИмяПользователя - - - WSИмяПользователяExtendedTooltip - 2102 - Label - true - true - - Left - - - - WSИмяПользователяКонтекстноеМеню - 1080 - true - - InputField - true - Enter - true - Left - true - - 30 - true - true - true - true - true - true - true - Normal - - - - WSПароль - 1081 - true - true - - true - - - Объект.WSПароль - - - WSПарольExtendedTooltip - 2103 - Label - true - true - - Left - - - - WSПарольКонтекстноеМеню - 1082 - true - - InputField - true - Enter - true - Left - true - - 30 - true - true - true - true - true - true - true - Normal - - - - ПараметрыДоступаВеб - 1926 - - WSЗапомнитьПароль1 - 1795 - true - true - - true - - - Объект.WSЗапомнитьПароль - - Right - - WSЗапомнитьПароль1ExtendedTooltip - 2105 - Label - true - true - - Left - - - - WSЗапомнитьПароль1КонтекстноеМеню - 1796 - true - - CheckBoxField - Enter - true - Left - true - - - - ПараметрыДоступаВИнтернет1 - 1925 - true - true - - true - - - ПараметрыДоступаВИнтернет1ExtendedTooltip - 2106 - Label - true - true - - Left - - - Hyperlink - Form.Command.ПараметрыДоступаВИнтернет - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Параметры доступа в интернет</value> - - - ПараметрыДоступаВебРасширеннаяПодсказка - 2104 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Пользователь и пароль WS</value> - - - ПользовательИПарольВебРасширеннаяПодсказка - 2101 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Auto - Auto - - - - ПроверитьПодключениеWS - 1083 - true - true - - true - - - ПроверитьПодключениеWSExtendedTooltip - 2107 - Label - true - true - - Left - - - UsualButton - Form.Command.ПроверитьПодключениеWS - Normal - Auto - 20 - true - true - UserCmds - Auto - - - АдресВеб - 1823 - - ДекорацияПараметрыПодключенияWS - 1824 - - <key>ru</key> - <value>Укажите параметры подключения к другой программе:</value> - - true - true - - true - - Button - - ДекорацияПараметрыПодключенияWSРасширеннаяПодсказка - 2097 - - <key>ru</key> - <value>Для настройки синхронизации данных нужно знать где находится программа, с которой нужно настроить синхронизацию (другая программа). Для этого достаточно открыть программу в режиме веб-клиента. В главном меню выбрать пункт "Справка\О программе...". -Обратите внимание на следующие параметры (все они могут быть скопированы из формы "О программе..."): -• Адрес - адрес информационной базы в Интернете. -• Пользователь - имя пользователя, который вошел в информационную базу. Если в имени пользователя присутствует ";", то в качестве имени пользователя для подключения нужно использовать имя от начала строки до ";". -Важно! Имя пользователя не должно содержать служебных символов "[НедопустимыеСимволы]". В противном случае во второй информационной базе необходимо создать пользователя, в имени которого не будут содержаться служебные символы. Этот пользователь должен быть администратором.</value> - - Label - true - true - - Left - - - - ДекорацияПараметрыПодключенияWSКонтекстноеМеню - 1825 - true - - Label - 1 - true - - Left - Top - - - - АдресВеб2 - 1827 - - WSURLВебСервиса - 1077 - - <key>ru</key> - <value>Адрес программы</value> - - true - true - - true - - - Объект.WSURLВебСервиса - - - WSURLВебСервисаExtendedTooltip - 2100 - Label - true - true - - Left - - - - WSURLВебСервисаКонтекстноеМеню - 1078 - true - - InputField - true - Enter - true - Left - true - - 50 - true - true - false - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Адрес WS</value> - - - АдресВеб2РасширеннаяПодсказка - 2099 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Укажите параметры подключения к другой программе</value> - - - АдресВебРасширеннаяПодсказка - 2095 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Параметры транспорта WS</value> - - - ПараметрыТранспортаВебРасширеннаяПодсказка - 2094 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - НадписьДалееСтраницаМастераНачалоНастройкиОбменаЧерезВебСервис - 1751 - - <key>ru</key> - <value>Нажмите "Далее" для настройки параметров синхронизации данных.</value> - - true - true - - true - - - НадписьДалееСтраницаМастераНачалоНастройкиОбменаЧерезВебСервисExtendedTooltip - 2108 - Label - true - true - - Left - - - - НадписьДалееСтраницаМастераНачалоНастройкиОбменаЧерезВебСервисКонтекстноеМеню - 1752 - true - - Label - true - true - false - - Left - Bottom - - - true - true - - true - - - <key>ru</key> - <value>Страница параметров транспорта WS</value> - - - СтраницаПараметровТранспортаWSExtendedTooltip - 2092 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаПараметровТранспорта - 832 - - Декорация61 - 1910 - - <key>ru</key> - <value>В случае если к другой программе нет возможности прямого подключения по локальной сети -или через Интернет (веб-сервисы), рекомендуется использовать другие каналы связи: сетевой -каталог, FTP-ресурс или электронную почту. При этом программы, между которыми настроена -синхронизация данных, могут работать полностью автономно друг от друга и в разное время. - -Такой вариант подключения подходит не только для синхронизации данных с программами, -расположенными в других сетях (офисах), но и для программ в одной сети.</value> - - true - true - - true - - - Декорация61ExtendedTooltip - 2110 - Label - true - true - - Left - - - - Декорация61КонтекстноеМеню - 1911 - true - - Label - true - - Style.ПоясняющийТекст - - - Left - Top - - - - НадписьДалее1 - 853 - - <key>ru</key> - <value>Нажмите "Далее" для настройки параметров подключения.</value> - - true - true - - true - - - НадписьДалее1ExtendedTooltip - 2111 - Label - true - true - - Left - - - - НадписьДалее1КонтекстноеМеню - 854 - true - - Label - true - true - false - - Left - Bottom - - - true - true - - true - - - <key>ru</key> - <value>Страница параметров транспорта</value> - - - СтраницаПараметровТранспортаExtendedTooltip - 2109 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - true - true - - true - - - <key>ru</key> - <value>Страницы параметров транспорта</value> - - - СтраницыПараметровТранспортаExtendedTooltip - 2065 - Label - true - true - - Left - - - Pages - - Auto - - - true - true - - true - - - <key>ru</key> - <value>Отступ</value> - - - ГруппаОтступExtendedTooltip - 2064 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница мастера выбор режима работы помощника</value> - - - СтраницаМастераВыборРежимаРаботыПомощникаExtendedTooltip - 2051 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаМастераЗаданиеПараметровТранспортаFILE - 694 - - ГруппаСтраницаМастераЗаданиеПараметровТранспортаFILE - 2477 - - ИспользоватьПараметрыТранспортаFILE - 717 - true - true - - true - - - Объект.ИспользоватьПараметрыТранспортаFILE - - Right - - OnChange - ИспользоватьПараметрыТранспортаFILEПриИзменении - - - ИспользоватьПараметрыТранспортаFILEExtendedTooltip - 2114 - Label - true - true - - Left - - - - ИспользоватьПараметрыТранспортаFILEКонтекстноеМеню - 718 - true - - CheckBoxField - Enter - true - Left - true - - - - НастройкиТранспортаFILE - 620 - - ПояснениеВыбораКаталогаОбменаИнформациейНаСервере - 755 - - <key>ru</key> - <value>Укажите каталог на сервере 1С:Предприятия или сетевой каталог, доступный с сервера.</value> - - true - true - - true - - - ПояснениеВыбораКаталогаОбменаИнформациейНаСервереExtendedTooltip - 2116 - Label - true - true - - Left - - - - ПояснениеВыбораКаталогаОбменаИнформациейНаСервереКонтекстноеМеню - 756 - true - - Label - true - - Style.ПоясняющийТекст - - - Left - - - - FILEКаталогОбменаИнформацией - 621 - true - true - - true - - - Объект.FILEКаталогОбменаИнформацией - - - FILEКаталогОбменаИнформациейExtendedTooltip - 2117 - Label - true - true - - Left - - - - FILEКаталогОбменаИнформациейКонтекстноеМеню - 622 - true - - InputField - true - Enter - true - Left - true - - - StartChoice - FILEКаталогОбменаИнформациейНачалоВыбора - - - Opening - FILEКаталогОбменаИнформациейОткрытие - - true - true - true - true - true - true - Normal - - - - ГруппаАрхив - 1836 - - FILEСжиматьФайлИсходящегоСообщения - 623 - true - true - - true - - - Объект.FILEСжиматьФайлИсходящегоСообщения - - Right - - FILEСжиматьФайлИсходящегоСообщенияExtendedTooltip - 2119 - Label - true - true - - Left - - - - FILEСжиматьФайлИсходящегоСообщенияКонтекстноеМеню - 624 - true - - CheckBoxField - Enter - true - Left - true - - - - ПарольАрхива - 2542 - - Декорация6 - 2544 - true - true - - true - - - Декорация6РасширеннаяПодсказка - 2546 - Label - true - true - - Left - - - - Декорация6КонтекстноеМеню - 2545 - true - - Label - 2 - true - true - - Left - - - - ПарольАрхиваСообщенияОбмена - 639 - true - true - - true - - - Объект.ПарольАрхиваСообщенияОбмена - - - ПарольАрхиваСообщенияОбменаExtendedTooltip - 2120 - Label - true - true - - Left - - - - ПарольАрхиваСообщенияОбменаКонтекстноеМеню - 640 - true - - InputField - Enter - true - Left - true - - 20 - true - true - false - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Пароль архива</value> - - - ПарольАрхиваРасширеннаяПодсказка - 2543 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Архив</value> - - - ГруппаАрхивРасширеннаяПодсказка - 2118 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - FILEТранслитерироватьИменаФайловСообщенийОбмена - 2565 - true - true - - true - - - Объект.FILEТранслитерироватьИменаФайловСообщенийОбмена - - Right - Button - - FILEТранслитерироватьИменаФайловСообщенийОбменаРасширеннаяПодсказка - 2567 - - <key>ru</key> - <value>Рекомендуется применять в случае, если при обмене возникают ошибки, связанные с различными кодировками файлов. -Настройку не следует использовать, в случае, если такая же настройка не поддерживается на стороне корреспондента.</value> - - Label - true - true - - Left - - - - FILEТранслитерироватьИменаФайловСообщенийОбменаКонтекстноеМеню - 2566 - true - - CheckBoxField - Enter - true - Left - true - - - - ОтступКнопкиПроверкиПодключенияFILE - 664 - - ПроверитьПодключениеFILE - 654 - true - true - - true - - false - - ПроверитьПодключениеFILEExtendedTooltip - 2122 - Label - true - true - - Left - - - UsualButton - Form.Command.ПроверитьПодключениеFILE - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Отступ кнопки проверки подключения FILE</value> - - - ОтступКнопкиПроверкиПодключенияFILEExtendedTooltip - 2121 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Настройки транспорта FILE</value> - - - НастройкиТранспортаFILEExtendedTooltip - 2115 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Auto - Auto - - - - Декорация4 - 697 - true - true - - true - - - Декорация4ExtendedTooltip - 2123 - Label - true - true - - Left - - - - Декорация4КонтекстноеМеню - 698 - true - - Label - true - true - true - false - - Left - - - - НадписьДалееFILE - 699 - - <key>ru</key> - <value>Нажмите кнопку "Далее" для настройки подключения через FTP-ресурс.</value> - - true - true - - true - - - НадписьДалееFILEExtendedTooltip - 2124 - Label - true - true - - Left - - - - НадписьДалееFILEКонтекстноеМеню - 700 - true - - Label - true - false - - Left - - - true - true - - true - - - <key>ru</key> - <value>Выбор каталога для файлов синхронизации данных</value> - - - ГруппаСтраницаМастераЗаданиеПараметровТранспортаFILEРасширеннаяПодсказка - 2478 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - auto - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница мастера задание параметров транспорта FILE</value> - - - СтраницаМастераЗаданиеПараметровТранспортаFILEExtendedTooltip - 2112 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаМастераЗаданиеПараметровТранспортаFTP - 708 - - ГруппаСтраницаМастераЗаданиеПараметровТранспортаFTP - 2475 - - ИспользоватьПараметрыТранспортаFTP - 719 - true - true - - true - - - Объект.ИспользоватьПараметрыТранспортаFTP - - Right - - OnChange - ИспользоватьПараметрыТранспортаFTPПриИзменении - - - ИспользоватьПараметрыТранспортаFTPExtendedTooltip - 2127 - Label - true - true - - Left - - - - ИспользоватьПараметрыТранспортаFTPКонтекстноеМеню - 720 - true - - CheckBoxField - Enter - true - Left - true - - - - НастройкиТранспортаFTP - 617 - - Декорация54 - 1858 - - <key>ru</key> - <value>Укажите путь к FTP каталогу, например, "ftp://SyncServer/Accounting/"</value> - - true - true - - true - - - Декорация54ExtendedTooltip - 2129 - Label - true - true - - Left - - - - Декорация54КонтекстноеМеню - 1859 - true - - Label - true - - Style.ПоясняющийТекст - - - Left - - - - ГруппаСерверПорт - 650 - - FTPСоединениеПуть - 637 - true - true - - true - - - Объект.FTPСоединениеПуть - - - FTPСоединениеПутьExtendedTooltip - 2131 - Label - true - true - - Left - - - - FTPСоединениеПутьКонтекстноеМеню - 638 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - FTPСоединениеПорт - 635 - true - true - - true - - - Объект.FTPСоединениеПорт - - - FTPСоединениеПортExtendedTooltip - 2132 - Label - true - true - - Left - - - - FTPСоединениеПортКонтекстноеМеню - 636 - true - - InputField - true - Enter - true - Left - true - - true - true - true - - ru - ЧГ=0 - - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Сервер порт</value> - - - ГруппаСерверПортExtendedTooltip - 2130 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ГруппаПользовательПароль - 651 - - FTPСоединениеПользователь - 633 - true - true - - true - - - Объект.FTPСоединениеПользователь - - - FTPСоединениеПользовательExtendedTooltip - 2134 - Label - true - true - - Left - - - - FTPСоединениеПользовательКонтекстноеМеню - 634 - true - - InputField - Enter - true - Left - true - - true - true - false - true - true - true - true - Normal - - - - FTPСоединениеПароль - 629 - true - true - - true - - - Объект.FTPСоединениеПароль - - - FTPСоединениеПарольExtendedTooltip - 2135 - Label - true - true - - Left - - - - FTPСоединениеПарольКонтекстноеМеню - 630 - true - - InputField - Enter - true - Left - true - - 20 - true - true - false - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Пользователь пароль</value> - - - ГруппаПользовательПарольExtendedTooltip - 2133 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ГруппаРазмерФайла - 1850 - - FTPСоединениеМаксимальныйДопустимыйРазмерСообщения - 627 - true - true - - true - - - Объект.FTPСоединениеМаксимальныйДопустимыйРазмерСообщения - - - FTPСоединениеМаксимальныйДопустимыйРазмерСообщенияExtendedTooltip - 2137 - Label - true - true - - Left - - - - FTPСоединениеМаксимальныйДопустимыйРазмерСообщенияКонтекстноеМеню - 628 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - true - Normal - - - - Декорация51 - 1851 - - <key>ru</key> - <value>КБ (0 – нет ограничений)</value> - - true - true - - true - - - Декорация51ExtendedTooltip - 2138 - Label - true - true - - Left - - - - Декорация51КонтекстноеМеню - 1852 - true - - Label - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Размер файла</value> - - - ГруппаРазмерФайлаРасширеннаяПодсказка - 2136 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - FTPСоединениеПассивноеСоединение - 631 - true - true - - true - - - Объект.FTPСоединениеПассивноеСоединение - - Right - - FTPСоединениеПассивноеСоединениеExtendedTooltip - 2139 - Label - true - true - - Left - - - - FTPСоединениеПассивноеСоединениеКонтекстноеМеню - 632 - true - - CheckBoxField - Enter - true - Left - true - - - - ГруппаЗаданияПароляСообщенияОбменаFTP - 661 - - FTPСжиматьФайлИсходящегоСообщения - 625 - true - true - - true - - - Объект.FTPСжиматьФайлИсходящегоСообщения - - Right - - FTPСжиматьФайлИсходящегоСообщенияExtendedTooltip - 2141 - Label - true - true - - Left - - - - FTPСжиматьФайлИсходящегоСообщенияКонтекстноеМеню - 626 - true - - CheckBoxField - Enter - true - Left - true - - - - ГруппаПарольАрхива - 2547 - - Декорация11 - 2549 - true - true - - true - - - Декорация11РасширеннаяПодсказка - 2551 - Label - true - true - - Left - - - - Декорация11КонтекстноеМеню - 2550 - true - - Label - 2 - true - true - - Left - - - - ПарольАрхиваСообщенияОбмена1 - 657 - true - true - - true - - - Объект.ПарольАрхиваСообщенияОбмена - - - ПарольАрхиваСообщенияОбмена1ExtendedTooltip - 2142 - Label - true - true - - Left - - - - ПарольАрхиваСообщенияОбмена1КонтекстноеМеню - 658 - true - - InputField - Enter - true - Left - true - - 20 - true - true - false - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Пароль архива</value> - - - ГруппаПарольАрхиваРасширеннаяПодсказка - 2548 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Задания пароля сообщения обмена FTP</value> - - - ГруппаЗаданияПароляСообщенияОбменаFTPExtendedTooltip - 2140 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ПараметрыДоступаВИнтернет2 - 1927 - true - true - - true - - - ПараметрыДоступаВИнтернет2ExtendedTooltip - 2143 - Label - true - true - - Left - - - Hyperlink - Form.Command.ПараметрыДоступаВИнтернет - Normal - Auto - true - true - UserCmds - Auto - - - FTPТранслитерироватьИменаФайловСообщенийОбмена - 2568 - true - true - - true - - - Объект.FTPТранслитерироватьИменаФайловСообщенийОбмена - - Right - Button - - FTPТранслитерироватьИменаФайловСообщенийОбменаРасширеннаяПодсказка - 2570 - - <key>ru</key> - <value>Рекомендуется применять в случае, если при обмене возникают ошибки, связанные с различными кодировками файлов. -Настройку не следует использовать, в случае, если такая же настройка не поддерживается на стороне корреспондента.</value> - - Label - true - true - - Left - - - - FTPТранслитерироватьИменаФайловСообщенийОбменаКонтекстноеМеню - 2569 - true - - CheckBoxField - Enter - true - Left - true - - - - ОтступКнопкиПроверкиПодключенияFTP - 665 - - ПроверитьПодключениеFTP - 655 - true - true - - true - - false - - ПроверитьПодключениеFTPExtendedTooltip - 2145 - Label - true - true - - Left - - - UsualButton - Form.Command.ПроверитьПодключениеFTP - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Отступ кнопки проверки подключения FTP</value> - - - ОтступКнопкиПроверкиПодключенияFTPExtendedTooltip - 2144 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Настройки транспорта FTP</value> - - - НастройкиТранспортаFTPExtendedTooltip - 2128 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Auto - Auto - - - - Декорация8 - 711 - true - true - - true - - - Декорация8ExtendedTooltip - 2146 - Label - true - true - - Left - - - - Декорация8КонтекстноеМеню - 712 - true - - Label - true - true - true - false - - Left - - - - НадписьДалееFTP - 713 - - <key>ru</key> - <value>Нажмите кнопку "Далее" для настройки подключения по почте.</value> - - true - true - - true - - - НадписьДалееFTPExtendedTooltip - 2147 - Label - true - true - - Left - - - - НадписьДалееFTPКонтекстноеМеню - 714 - true - - Label - true - false - - Left - - - true - true - - true - - - <key>ru</key> - <value>Настройка параметров подключения через FTP-ресурс</value> - - - ГруппаСтраницаМастераЗаданиеПараметровТранспортаFTPРасширеннаяПодсказка - 2476 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - auto - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница мастера задание параметров транспорта FTP</value> - - - СтраницаМастераЗаданиеПараметровТранспортаFTPExtendedTooltip - 2125 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаМастераЗаданиеПараметровТранспортаEMAIL - 701 - - ГруппаСтраницаМастераЗаданиеПараметровТранспортаEMAIL - 2473 - - ИспользоватьПараметрыТранспортаEMAIL - 721 - true - true - - true - - - Объект.ИспользоватьПараметрыТранспортаEMAIL - - Right - - OnChange - ИспользоватьПараметрыТранспортаEMAILПриИзменении - - - ИспользоватьПараметрыТранспортаEMAILExtendedTooltip - 2150 - Label - true - true - - Left - - - - ИспользоватьПараметрыТранспортаEMAILКонтекстноеМеню - 722 - true - - CheckBoxField - Enter - true - Left - true - - - - НастройкиТранспортаEMAIL - 619 - - EMAILУчетнаяЗапись - 652 - true - true - - true - - - Объект.EMAILУчетнаяЗапись - - - EMAILУчетнаяЗаписьExtendedTooltip - 2152 - Label - true - true - - Left - - - - EMAILУчетнаяЗаписьКонтекстноеМеню - 653 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - РазмерВложения - 1853 - - EMAILМаксимальныйДопустимыйРазмерСообщения - 643 - true - true - - true - - - Объект.EMAILМаксимальныйДопустимыйРазмерСообщения - - - EMAILМаксимальныйДопустимыйРазмерСообщенияExtendedTooltip - 2154 - Label - true - true - - Left - - - - EMAILМаксимальныйДопустимыйРазмерСообщенияКонтекстноеМеню - 644 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - true - Normal - - - - Декорация52 - 1854 - - <key>ru</key> - <value>КБ (0 – нет ограничений)</value> - - true - true - - true - - - Декорация52ExtendedTooltip - 2155 - Label - true - true - - Left - - - - Декорация52КонтекстноеМеню - 1855 - true - - Label - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Размер вложения</value> - - - РазмерВложенияРасширеннаяПодсказка - 2153 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - АрхивироватьФайлСообщения - 1849 - - EMAILСжиматьФайлИсходящегоСообщения - 645 - true - true - - true - - - Объект.EMAILСжиматьФайлИсходящегоСообщения - - Right - - EMAILСжиматьФайлИсходящегоСообщенияExtendedTooltip - 2157 - Label - true - true - - Left - - - - EMAILСжиматьФайлИсходящегоСообщенияКонтекстноеМеню - 646 - true - - CheckBoxField - Enter - true - Left - true - - - - ПарольАрхиваСообщения - 2552 - - Декорация18 - 2554 - true - true - - true - - - Декорация18РасширеннаяПодсказка - 2556 - Label - true - true - - Left - - - - Декорация18КонтекстноеМеню - 2555 - true - - Label - 2 - true - true - - Left - - - - ПарольАрхиваСообщенияОбмена2 - 659 - true - true - - true - - - Объект.ПарольАрхиваСообщенияОбмена - - - ПарольАрхиваСообщенияОбмена2ExtendedTooltip - 2158 - Label - true - true - - Left - - - - ПарольАрхиваСообщенияОбмена2КонтекстноеМеню - 660 - true - - InputField - Enter - true - Left - true - - 20 - true - true - false - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Пароль архива сообщения</value> - - - ПарольАрхиваСообщенияРасширеннаяПодсказка - 2553 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Архивировать файл сообщения</value> - - - АрхивироватьФайлСообщенияРасширеннаяПодсказка - 2156 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - EMAILТранслитерироватьИменаФайловСообщенийОбмена - 2571 - true - true - - true - - - Объект.EMAILТранслитерироватьИменаФайловСообщенийОбмена - - Right - Button - - EMAILТранслитерироватьИменаФайловСообщенийОбменаРасширеннаяПодсказка - 2573 - - <key>ru</key> - <value>Рекомендуется применять в случае, если при обмене возникают ошибки, связанные с различными кодировками файлов. -Настройку не следует использовать, в случае, если такая же настройка не поддерживается на стороне корреспондента.</value> - - Label - true - true - - Left - - - - EMAILТранслитерироватьИменаФайловСообщенийОбменаКонтекстноеМеню - 2572 - true - - CheckBoxField - Enter - true - Left - true - - - - ОтступКнопкиПроверкиПодключенияEMAIL - 666 - - ПроверитьПодключениеEMAIL - 656 - true - true - - true - - false - - ПроверитьПодключениеEMAILExtendedTooltip - 2160 - Label - true - true - - Left - - - UsualButton - Form.Command.ПроверитьПодключениеEMAIL - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Отступ кнопки проверки подключения EMAIL</value> - - - ОтступКнопкиПроверкиПодключенияEMAILExtendedTooltip - 2159 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Настройки транспорта EMAIL</value> - - - НастройкиТранспортаEMAILExtendedTooltip - 2151 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Auto - Auto - - - - Декорация7 - 704 - true - true - - true - - - Декорация7ExtendedTooltip - 2161 - Label - true - true - - Left - - - - Декорация7КонтекстноеМеню - 705 - true - - Label - true - true - true - false - - Left - - - - НадписьДалееEMAIL - 706 - - <key>ru</key> - <value>Нажмите кнопку "Далее" для настройки дополнительных параметров обмена данными.</value> - - true - true - - true - - - НадписьДалееEMAILExtendedTooltip - 2162 - Label - true - true - - Left - - - - НадписьДалееEMAILКонтекстноеМеню - 707 - true - - Label - true - false - - Left - - - true - true - - true - - - <key>ru</key> - <value>Настройка параметров подключения по электронной почте</value> - - - ГруппаСтраницаМастераЗаданиеПараметровТранспортаEMAILРасширеннаяПодсказка - 2474 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - auto - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница мастера задание параметров транспорта EMAIL</value> - - - СтраницаМастераЗаданиеПараметровТранспортаEMAILExtendedTooltip - 2148 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаМастераНастройкаПараметровВторогоЭтапаНастройки - 1038 - - ГруппаСтраницаМастераНастройкаПараметровВторогоЭтапаНастройки - 2468 - - ВидТранспортаСообщенийОбмена1 - 1045 - true - true - - true - - - Объект.ВидТранспортаСообщенийОбмена - - Top - - ВидТранспортаСообщенийОбмена1ExtendedTooltip - 2194 - Label - true - true - - Left - - - - ВидТранспортаСообщенийОбмена1КонтекстноеМеню - 1046 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - false - true - true - true - true - true - - - ru - Локальный или сетевой каталог - - - Enum.ВидыТранспортаСообщенийОбмена.EnumValue.FILE - - - - - ru - FTP-ресурс - - - Enum.ВидыТранспортаСообщенийОбмена.EnumValue.FTP - - - - - ru - Почтовые сообщения - - - Enum.ВидыТранспортаСообщенийОбмена.EnumValue.EMAIL - - - Normal - - - - НастройкиУзла2 - 1054 - - РамкаГруппыОграничений2 - 1055 - - ОписаниеОграниченийПередачиДанных2 - 1056 - - <key>ru</key> - <value>Правила отправки данных в -%Программа%</value> - - true - true - - true - - - ОписаниеОграниченийПередачиДанных - - Top - - ОписаниеОграниченийПередачиДанных2ExtendedTooltip - 2198 - Label - true - true - - Left - - - - ОписаниеОграниченийПередачиДанных2КонтекстноеМеню - 1057 - true - - InputField - true - Enter - true - Left - true - - 8 - true - true - true - true - true - true - Normal - - - - НастройкаОграниченийРегистрацииДанных2 - 1059 - true - true - - true - - false - - НастройкаОграниченийРегистрацииДанных2ExtendedTooltip - 2199 - Label - true - true - - Left - - - Hyperlink - Form.Command.НастройкаОграниченийРегистрацииДанных - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Ограничения передачи данных:</value> - - - ru - Рамка группы ограничений - - true - false - - РамкаГруппыОграничений2ExtendedTooltip - 2196 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - РамкаГруппыЗначенийПоУмолчанию2 - 1060 - - ОписаниеЗначенийПоУмолчанию2 - 1061 - - <key>ru</key> - <value>Правила получения данных из -%Программа%</value> - - true - true - - true - - - ОписаниеЗначенийПоУмолчанию - - Top - - ОписаниеЗначенийПоУмолчанию2ExtendedTooltip - 2202 - Label - true - true - - Left - - - - ОписаниеЗначенийПоУмолчанию2КонтекстноеМеню - 1062 - true - - InputField - true - Enter - true - Left - true - - 8 - true - true - true - true - true - true - Normal - - - - НастройкаЗначенийПоУмолчанию2 - 1064 - true - true - - true - - false - - НастройкаЗначенийПоУмолчанию2ExtendedTooltip - 2203 - Label - true - true - - Left - - - Hyperlink - Form.Command.НастройкаЗначенийПоУмолчанию - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Значения по умолчанию:</value> - - true - false - - РамкаГруппыЗначенийПоУмолчанию2ExtendedTooltip - 2200 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Настройки узла</value> - - - НастройкиУзла2ExtendedTooltip - 2195 - Label - true - true - - Left - - - UsualGroup - - Auto - NormalSeparation - true - true - Equal - Auto - Auto - - - - Декорация23 - 1065 - true - true - - true - - - Декорация23ExtendedTooltip - 2204 - Label - true - true - - Left - - - - Декорация23КонтекстноеМеню - 1066 - true - - Label - true - true - true - false - - Left - - - - НадписьДалееПодтверждениеНастроек3 - 1067 - - <key>ru</key> - <value>Нажмите кнопку "Далее" для проверки параметров и завершения настройки синхронизации данных.</value> - - true - true - - true - - - НадписьДалееПодтверждениеНастроек3ExtendedTooltip - 2205 - Label - true - true - - Left - - - - НадписьДалееПодтверждениеНастроек3КонтекстноеМеню - 1068 - true - - Label - true - false - - Left - - - true - true - - true - - - <key>ru</key> - <value>Настройка параметров синхронизации данных</value> - - - ГруппаСтраницаМастераНастройкаПараметровВторогоЭтапаНастройкиРасширеннаяПодсказка - 2469 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - auto - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница мастера настройка параметров второго этапа настройки</value> - - - ru - Страница мастера настройка параметров - - - СтраницаМастераНастройкаПараметровВторогоЭтапаНастройкиExtendedTooltip - 2192 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаМастераИтогНастройкиОбмена - 7 - - ГруппаСтраницаМастераИтогНастройкиОбмена - 2466 - - ПредставлениеРезультатаНастройкиОбмена - 119 - - <key>ru</key> - <value>Данные будут синхронизироваться со следующими параметрами</value> - - true - true - - true - - - ПредставлениеРезультатаНастройкиОбмена - - true - Top - - ПредставлениеРезультатаНастройкиОбменаExtendedTooltip - 2240 - Label - true - true - - Left - - - - ПредставлениеРезультатаНастройкиОбменаКонтекстноеМеню - 120 - true - - InputField - true - Left - Enter - true - Left - true - - true - true - true - true - true - true - true - Normal - - - - ГруппаНадписиИнформацииОбОткрытииПомощникаСопоставления - 1251 - - ДекорацияИнформация - 726 - - <key>ru</key> - <value>Декорация информация</value> - - true - true - - true - - - ДекорацияИнформацияExtendedTooltip - 2242 - Label - true - true - - Left - - - - ДекорацияИнформацияКонтекстноеМеню - 727 - true - - true - true - - - CommonPicture.Информация - - - - - НадписьИнформацияОбОткрытииПомощникаСопоставления - 723 - - <key>ru</key> - <value>После завершения создания настройки синхронизации данных будет открыто окно интерактивной синхронизации данных.</value> - - true - true - - true - - - НадписьИнформацияОбОткрытииПомощникаСопоставленияExtendedTooltip - 2243 - Label - true - true - - Left - - - - НадписьИнформацияОбОткрытииПомощникаСопоставленияКонтекстноеМеню - 724 - true - - Label - true - - Style.ПоясняющийТекст - - - Left - - - true - true - - true - - - <key>ru</key> - <value>Надписи информации об открытии помощника сопоставления</value> - - - ГруппаНадписиИнформацииОбОткрытииПомощникаСопоставленияExtendedTooltip - 2241 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Все готово для начала синхронизации данных</value> - - - ГруппаСтраницаМастераИтогНастройкиОбменаРасширеннаяПодсказка - 2467 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - auto - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница мастера итог настройки обмена</value> - - - СтраницаМастераИтогНастройкиОбменаExtendedTooltip - 2238 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаМастераОкончаниеСВыгрузкойНастройки - 330 - - ГруппаСтраницаМастераОкончаниеСВыгрузкойНастройки - 2462 - - СтраницыОтображенияФинальногоДействия - 587 - - СтраницаВыполнитьВыгрузкуДанныхДляСопоставления - 588 - - ГруппаФайлаНастроекОбмена1 - 338 - - ФайлНастроекКартинка - 339 - - Декорация111 - 340 - true - true - - true - - - Декорация111ExtendedTooltip - 2248 - Label - true - true - - Left - - - - Декорация111КонтекстноеМеню - 341 - true - - true - true - false - - - CommonPicture.Предупреждение32 - - - - true - true - - true - - - <key>ru</key> - <value>Файл настроек картинка</value> - - - ФайлНастроекКартинкаРасширеннаяПодсказка - 2247 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ФайлНастроекИнформация - 342 - - Декорация141 - 412 - - <key>ru</key> - <value>Для завершения настройки синхронизации данных необходимо сохранить файл настроек для другой программы. В помощнике в другой программе укажите этот файл:</value> - - true - true - - true - - - Декорация141ExtendedTooltip - 2250 - Label - true - true - - Left - - - - Декорация141КонтекстноеМеню - 413 - true - - Label - true - false - - Left - Bottom - 2 - - - - ФайлНастроекИнформацияГоризонтальная - 414 - - ИмяФайлаНастроекОбменаДанными - 378 - true - true - - true - - - Объект.ИмяФайлаНастроекСинхронизацииДанных - - None - - ИмяФайлаНастроекОбменаДаннымиExtendedTooltip - 2252 - Label - true - true - - Left - - - - ИмяФайлаНастроекОбменаДаннымиКонтекстноеМеню - 379 - true - - InputField - true - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - СохранитьФайлНастроекОбменаДанными - 363 - true - true - - true - - false - - СохранитьФайлНастроекОбменаДаннымиExtendedTooltip - 2253 - Label - true - true - - Left - - - UsualButton - Form.Command.СохранитьФайлНастроекОбменаДанными - Normal - Auto - true - true - UserCmds - - System.DefaultGUIFont - - Auto - - true - true - - true - - - <key>ru</key> - <value>Файл настроек информация горизонтальная</value> - - - ФайлНастроекИнформацияГоризонтальнаяРасширеннаяПодсказка - 2251 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Файл настроек информация</value> - - - ФайлНастроекИнформацияРасширеннаяПодсказка - 2249 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Группа файла настроек обмена</value> - - - ГруппаФайлаНастроекОбмена1ExtendedTooltip - 2246 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ФайлНастроекВыгрузка - 2464 - - Декорация181 - 444 - true - true - - true - - - Декорация181ExtendedTooltip - 2257 - Label - true - true - - Left - - - - Декорация181КонтекстноеМеню - 445 - true - - true - true - false - - - CommonPicture.СинхронизацияДанныхПодсистема - - - - - ФайлНастроекВыгрузкаВертикальная - 446 - - ВыполнитьОбменДаннымиСейчас21 - 449 - - <key>ru</key> - <value>Выполнить отправку данных в -%Программа% сейчас (рекомендуется)</value> - - - System.DefaultGUIFont - - true - true - - true - - - ВыполнитьОбменДаннымиСейчас - - Right - - ВыполнитьОбменДаннымиСейчас21ExtendedTooltip - 2259 - Label - true - true - - Left - - - - ВыполнитьОбменДаннымиСейчас21КонтекстноеМеню - 450 - true - - CheckBoxField - Center - Enter - true - Left - true - - - - ПоясняющаяНадписьКФлагуСопоставления - 596 - - <key>ru</key> - <value>При нажатии на кнопку "Готово" будет произведена выгрузка данных из этой программы в файл. -Сразу после завершения настройки синхронизации возможно будет выполнить загрузку данных из этого -файла в другой программе и указать, какие данные являются одинаковыми для двух синхронизирующихся -программ. Также отправку данных можно выполнить позднее из списка синхронизации данных.</value> - - true - true - - true - - - ПоясняющаяНадписьКФлагуСопоставленияExtendedTooltip - 2260 - Label - true - true - - Left - - - - ПоясняющаяНадписьКФлагуСопоставленияКонтекстноеМеню - 597 - true - - Label - true - false - - Style.ПоясняющийТекст - - - Left - - - true - true - - true - - - <key>ru</key> - <value>Файл настроек выгрузка вертикальная</value> - - - ФайлНастроекВыгрузкаВертикальнаяРасширеннаяПодсказка - 2258 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Файл настроек выгрузка</value> - - - ФайлНастроекВыгрузкаРасширеннаяПодсказка - 2465 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ГруппаПрогрессБарВыгрузка - 2517 - - Декорация1 - 2519 - true - true - - true - - - Декорация1РасширеннаяПодсказка - 2521 - Label - true - true - - Left - - - - Декорация1КонтекстноеМеню - 2520 - true - - Label - 6 - true - 4 - true - - Left - - - - ГруппаПрогрессБарВыгрузкаВертикальная - 2522 - - ПроцентВыполнения - 2524 - true - true - - true - - - ПроцентВыполнения - - None - - ПроцентВыполненияРасширеннаяПодсказка - 2526 - Label - true - true - - Left - - - - ПроцентВыполненияКонтекстноеМеню - 2525 - true - - ProgressBarField - Enter - true - Left - true - - 32 - 1 - true - true - 100 - true - - - - ДопИнформацияВыполнение - 2527 - true - true - - true - - - ДопИнформацияВыполнение - - None - - ДопИнформацияВыполнениеРасширеннаяПодсказка - 2529 - Label - true - true - - Left - - - - ДопИнформацияВыполнениеКонтекстноеМеню - 2528 - true - - LabelField - Enter - true - Left - true - - true - - - true - true - - true - - - <key>ru</key> - <value>Прогресс бар выгрузка вертикальная</value> - - - ГруппаПрогрессБарВыгрузкаВертикальнаяРасширеннаяПодсказка - 2523 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Прогресс бар выгрузка</value> - - - ГруппаПрогрессБарВыгрузкаРасширеннаяПодсказка - 2518 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница выполнить выгрузку данных для сопоставления</value> - - - СтраницаВыполнитьВыгрузкуДанныхДляСопоставленияExtendedTooltip - 2256 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаВыполнитьСозданиеНачальногоОбразаПодчиненногоУзла - 589 - - ВыполнитьСозданиеНачальногоОбраза - 595 - - ВыполнитьСозданиеНачальногоОбразаСейчас - 593 - true - true - - true - - - ВыполнитьСозданиеНачальногоОбразаСейчас - - Right - - ВыполнитьСозданиеНачальногоОбразаСейчасExtendedTooltip - 2264 - Label - true - true - - Left - - - - ВыполнитьСозданиеНачальногоОбразаСейчасКонтекстноеМеню - 594 - true - - CheckBoxField - Enter - true - Left - true - - - - ПоясняющаяНадписьКФлагуСозданияНачальногоОбраза - 598 - - <key>ru</key> - <value>Создание начального образа может занять длительное время. -После создания необходимо развернуть информационную базу из созданного образа и выполнить -первоначальный запуск программы для завершения настройки. Возможно создать начальный образ -позднее. Для этого необходимо открыть параметры настроенной синхронизации и выполнить -команду «Создание начального образа подчиненного узла распределенной информационной базы». -</value> - - true - true - - true - - - ПоясняющаяНадписьКФлагуСозданияНачальногоОбразаExtendedTooltip - 2265 - Label - true - true - - Left - - - - ПоясняющаяНадписьКФлагуСозданияНачальногоОбразаКонтекстноеМеню - 599 - true - - Label - true - false - - Style.ПоясняющийТекст - - - Left - - - true - true - - true - - - <key>ru</key> - <value>Выполнить создание начального образа</value> - - - ВыполнитьСозданиеНачальногоОбразаРасширеннаяПодсказка - 2263 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - auto - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница выполнить создание начального образа подчиненного узла</value> - - - СтраницаВыполнитьСозданиеНачальногоОбразаПодчиненногоУзлаExtendedTooltip - 2261 - Label - true - true - - Left - - - Page - - auto - false - - - true - true - - true - - - <key>ru</key> - <value>Страницы отображения финального действия</value> - - - СтраницыОтображенияФинальногоДействияExtendedTooltip - 2255 - Label - true - true - - Left - - - Pages - - Auto - - - - Декорация103 - 347 - true - true - - true - - - Декорация103ExtendedTooltip - 2266 - Label - true - true - - Left - - - - Декорация103КонтекстноеМеню - 348 - true - - Label - true - true - true - false - - Left - - - - НадписьГотово - 349 - - <key>ru</key> - <value>Нажмите кнопку "Готово" для выхода из помощника.</value> - - true - true - - true - - - НадписьГотовоExtendedTooltip - 2270 - Label - true - true - - Left - - - - НадписьГотовоКонтекстноеМеню - 350 - true - - Label - true - false - - Left - - - true - true - - true - - - <key>ru</key> - <value>Первый этап настройки успешно завершен</value> - - - ГруппаСтраницаМастераОкончаниеСВыгрузкойНастройкиРасширеннаяПодсказка - 2463 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - auto - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница мастера окончание с выгрузкой настройки</value> - - - СтраницаМастераОкончаниеСВыгрузкойНастройкиExtendedTooltip - 2244 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаМастераОкончаниеСОбменомПоВнешнемуСоединению - 865 - - ОкончаниеОбменаВнешнееСоединение - 901 - - Декорация183 - 882 - true - true - - true - - - Декорация183ExtendedTooltip - 2274 - Label - true - true - - Left - - - - Декорация183КонтекстноеМеню - 883 - true - - true - true - false - - - CommonPicture.СинхронизацияДанныхПодсистема - - - - - ВыполнитьИнтерактивныйОбмен - 884 - - ВыполнитьИнтерактивныйОбменДаннымиСейчас - 902 - - <key>ru</key> - <value>Выполнить синхронизацию данных с -%Программа%</value> - - true - true - - true - - - ВыполнитьИнтерактивныйОбменДаннымиСейчас - - Right - - ВыполнитьИнтерактивныйОбменДаннымиСейчасExtendedTooltip - 2276 - Label - true - true - - Left - - - - ВыполнитьИнтерактивныйОбменДаннымиСейчасКонтекстноеМеню - 903 - true - - CheckBoxField - Enter - true - Left - true - - - - ПоясняющаяНадписьКФлагуСопоставления1 - 887 - - <key>ru</key> - <value>Сразу после завершения настройки можно будет указать, какие объекты являются одинаковыми в двух синхронизирующихся программах, и синхронизировать данные.</value> - - true - true - - true - - - ПоясняющаяНадписьКФлагуСопоставления1ExtendedTooltip - 2277 - Label - true - true - - Left - - - - ПоясняющаяНадписьКФлагуСопоставления1КонтекстноеМеню - 888 - true - - Label - 5 - true - false - - Style.ПоясняющийТекст - - - Left - 2 - - - true - true - - true - - - <key>ru</key> - <value>Выполнить интерактивный обмен</value> - - - ВыполнитьИнтерактивныйОбменРасширеннаяПодсказка - 2275 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Настройка синхронизации данных успешно завершена</value> - - - ОкончаниеОбменаВнешнееСоединениеРасширеннаяПодсказка - 2273 - Label - true - true - - Left - - - UsualGroup - - Auto - NormalSeparation - true - true - auto - Auto - Auto - - - - Декорация104 - 897 - true - true - - true - - - Декорация104ExtendedTooltip - 2278 - Label - true - true - - Left - - - - Декорация104КонтекстноеМеню - 898 - true - - Label - true - true - true - false - - Left - - - - НадписьГотово1 - 899 - - <key>ru</key> - <value>Нажмите кнопку "Готово" для выхода из помощника.</value> - - true - true - - true - - - НадписьГотово1ExtendedTooltip - 2282 - Label - true - true - - Left - - - - НадписьГотово1КонтекстноеМеню - 900 - true - - Label - true - false - - Left - - - true - true - - true - - - <key>ru</key> - <value>Страница мастера окончание с обменом по внешнему соединению</value> - - - СтраницаМастераОкончаниеСОбменомПоВнешнемуСоединениюExtendedTooltip - 2271 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаМастераОжиданиеСозданияНастройкиОбменаДанными - 757 - - ГруппировкаСообщения - 760 - - ГруппаКартинки - 1364 - - Декорация16 - 1365 - true - true - - true - - - Декорация16ExtendedTooltip - 2287 - Label - true - true - - Left - - - - Декорация16КонтекстноеМеню - 1366 - true - - true - true - false - - - CommonPicture.Информация32 - - - - true - true - - true - - - <key>ru</key> - <value>Картинки</value> - - - ГруппаКартинкиExtendedTooltip - 2286 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ГруппаСообщения - 764 - - Декорация12 - 765 - - <key>ru</key> - <value>Выполняется создание новой настройки синхронизации данных. -Пожалуйста, подождите...</value> - - true - true - - true - - - Декорация12ExtendedTooltip - 2289 - Label - true - true - - Left - - - - Декорация12КонтекстноеМеню - 766 - true - - Label - 3 - true - false - - System.DefaultGUIFont - 10.0 - - - Left - - - true - true - - true - - - <key>ru</key> - <value>Сообщения</value> - - - ГруппаСообщенияExtendedTooltip - 2288 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Создание настройки синхронизации данных</value> - - - ГруппировкаСообщенияExtendedTooltip - 2285 - Label - true - true - - Left - - - UsualGroup - - Auto - NormalSeparation - true - true - auto - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница мастера ожидание создания настройки обмена данными</value> - - - СтраницаМастераОжиданиеСозданияНастройкиОбменаДаннымиExtendedTooltip - 2283 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаМастераОжиданиеАнализаДанныхСозданиеНастройкиОбмена - 1380 - - ГруппировкаСообщения4 - 1383 - - ГруппаКартинки4 - 1384 - - Декорация26 - 1385 - true - true - - true - - - Декорация26ExtendedTooltip - 2294 - Label - true - true - - Left - - - - Декорация26КонтекстноеМеню - 1386 - true - - true - true - false - - - CommonPicture.СинхронизацияДанныхАнализДанных48 - - - - true - true - - true - - - <key>ru</key> - <value>Группа картинки</value> - - - ГруппаКартинки4ExtendedTooltip - 2293 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ГруппаСообщения4 - 1387 - - Декорация33 - 1388 - - <key>ru</key> - <value>Выполняется создание настройки синхронизации данных. -Пожалуйста, подождите...</value> - - true - true - - true - - - Декорация33ExtendedTooltip - 2296 - Label - true - true - - Left - - - - Декорация33КонтекстноеМеню - 1389 - true - - Label - 3 - true - false - - System.DefaultGUIFont - 10.0 - - - Left - Center - - - true - true - - true - - - <key>ru</key> - <value>Группа сообщения</value> - - - ГруппаСообщения4ExtendedTooltip - 2295 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Анализ данных</value> - - - ГруппировкаСообщения4ExtendedTooltip - 2292 - Label - true - true - - Left - - - UsualGroup - - Auto - NormalSeparation - true - true - auto - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница мастера ожидание анализа данных создание настройки обмена</value> - - - СтраницаМастераОжиданиеАнализаДанныхСозданиеНастройкиОбменаExtendedTooltip - 2290 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщения - 1291 - - ГруппировкаСообщения3 - 1294 - - ГруппаКартинки3 - 1377 - - Декорация25 - 1378 - true - true - - true - - - Декорация25ExtendedTooltip - 2301 - Label - true - true - - Left - - - - Декорация25КонтекстноеМеню - 1379 - true - - true - true - false - - - CommonPicture.СинхронизацияДанныхАнализДанных48 - - - - true - true - - true - - - <key>ru</key> - <value>Группа картинки</value> - - - ГруппаКартинки3ExtendedTooltip - 2300 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ГруппаСообщения3 - 1298 - - Декорация17 - 1299 - - <key>ru</key> - <value>Выполняется получение данных. -Пожалуйста, подождите...</value> - - true - true - - true - - - Декорация17ExtendedTooltip - 2303 - Label - true - true - - Left - - - - Декорация17КонтекстноеМеню - 1300 - true - - Label - 3 - true - false - - System.DefaultGUIFont - 10.0 - - - Left - Center - - - true - true - - true - - - <key>ru</key> - <value>Группа сообщения</value> - - - ГруппаСообщения3ExtendedTooltip - 2302 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Анализ данных</value> - - - ГруппировкаСообщения3ExtendedTooltip - 2299 - Label - true - true - - Left - - - UsualGroup - - Auto - NormalSeparation - true - true - auto - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница мастера ожидание анализа данных получение сообщения</value> - - - СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщенияExtendedTooltip - 2297 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаМастераОжиданиеАнализаДанныхАвтоматическоеСопоставление - 1528 - - ГруппировкаСообщения16 - 1531 - - ГруппаКартинки16 - 1532 - - Декорация75 - 1533 - true - true - - true - - - Декорация75ExtendedTooltip - 2308 - Label - true - true - - Left - - - - Декорация75КонтекстноеМеню - 1534 - true - - true - true - false - - - CommonPicture.СинхронизацияДанныхАнализДанных48 - - - - true - true - - true - - - <key>ru</key> - <value>Группа картинки</value> - - - ГруппаКартинки16ExtendedTooltip - 2307 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ГруппаСообщения16 - 1535 - - Декорация76 - 1536 - - <key>ru</key> - <value>Выполняется автоматическое сопоставление данных. -Пожалуйста, подождите...</value> - - true - true - - true - - - Декорация76ExtendedTooltip - 2310 - Label - true - true - - Left - - - - Декорация76КонтекстноеМеню - 1537 - true - - Label - 3 - true - false - - System.DefaultGUIFont - 10.0 - - - Left - Center - - - true - true - - true - - - <key>ru</key> - <value>Группа сообщения</value> - - - ГруппаСообщения16ExtendedTooltip - 2309 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Анализ данных</value> - - - ГруппировкаСообщения16ExtendedTooltip - 2306 - Label - true - true - - Left - - - UsualGroup - - Auto - NormalSeparation - true - true - auto - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница мастера ожидание анализа данных автоматическое сопоставление</value> - - - СтраницаМастераОжиданиеАнализаДанныхАвтоматическоеСопоставлениеExtendedTooltip - 2304 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - ОжиданиеСинхронизацииДанных - 1486 - - ГруппировкаСообщения13 - 1489 - - ГруппаКартинки13 - 1490 - - Декорация63 - 1491 - true - true - - true - - - Декорация63ExtendedTooltip - 2315 - Label - true - true - - Left - - - - Декорация63КонтекстноеМеню - 1492 - true - - true - true - false - - - CommonPicture.СинхронизацияДанныхДлительнаяОперация48 - - - - true - true - - true - - - <key>ru</key> - <value>Группа картинки</value> - - - ГруппаКартинки13ExtendedTooltip - 2314 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ГруппаСообщения13 - 1493 - - Декорация64 - 1494 - - <key>ru</key> - <value>Выполняется синхронизация данных. -Пожалуйста, подождите...</value> - - true - true - - true - - - Декорация64ExtendedTooltip - 2317 - Label - true - true - - Left - - - - Декорация64КонтекстноеМеню - 1495 - true - - Label - 3 - true - false - - System.DefaultGUIFont - 10.0 - - - Left - Center - - - true - true - - true - - - <key>ru</key> - <value>Группа сообщения</value> - - - ГруппаСообщения13ExtendedTooltip - 2316 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Синхронизация данных</value> - - - ГруппировкаСообщения13ExtendedTooltip - 2313 - Label - true - true - - Left - - - UsualGroup - - Auto - NormalSeparation - true - true - auto - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Ожидание синхронизации данных</value> - - - ОжиданиеСинхронизацииДанныхExtendedTooltip - 2311 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаМастераОжиданиеСохраненияНастроек - 1321 - - ГруппировкаСообщения6 - 1324 - - ГруппаКартинки6 - 1325 - - Декорация29 - 1326 - true - true - - true - - - Декорация29ExtendedTooltip - 2322 - Label - true - true - - Left - - - - Декорация29КонтекстноеМеню - 1327 - true - - true - true - false - - - CommonPicture.СинхронизацияДанныхДлительнаяОперация48 - - - - true - true - - true - - - <key>ru</key> - <value>Группа картинки</value> - - - ГруппаКартинки6ExtendedTooltip - 2321 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ГруппаСообщения6 - 1328 - - Декорация30 - 1329 - - <key>ru</key> - <value>Выполняется сохранение настроек. -Пожалуйста, подождите...</value> - - true - true - - true - - - Декорация30ExtendedTooltip - 2324 - Label - true - true - - Left - - - - Декорация30КонтекстноеМеню - 1330 - true - - Label - 3 - true - false - - System.DefaultGUIFont - 10.0 - - - Left - Center - - - true - true - - true - - - <key>ru</key> - <value>Группа сообщения</value> - - - ГруппаСообщения6ExtendedTooltip - 2323 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Сохранение настроек</value> - - - ГруппировкаСообщения6ExtendedTooltip - 2320 - Label - true - true - - Left - - - UsualGroup - - Auto - NormalSeparation - true - true - auto - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница мастера ожидание сохранения настроек</value> - - - ru - Страница 14 - - - СтраницаМастераОжиданиеСохраненияНастроекExtendedTooltip - 2318 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаМастераОжиданиеПроверкиПодключенияКСервису - 1733 - - ГруппировкаСообщения7 - 1736 - - ГруппаКартинки7 - 1737 - - Декорация31 - 1738 - true - true - - true - - - Декорация31ExtendedTooltip - 2329 - Label - true - true - - Left - - - - Декорация31КонтекстноеМеню - 1739 - true - - true - true - false - - - CommonPicture.Информация32 - - - - true - true - - true - - - <key>ru</key> - <value>Группа картинки</value> - - - ГруппаКартинки7ExtendedTooltip - 2328 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ГруппаСообщения7 - 1740 - - Декорация34 - 1741 - - <key>ru</key> - <value>Выполняется проверка установки соединения с приложением в Интернете. -Пожалуйста, подождите...</value> - - true - true - - true - - - Декорация34ExtendedTooltip - 2331 - Label - true - true - - Left - - - - Декорация34КонтекстноеМеню - 1742 - true - - Label - 3 - true - false - - System.DefaultGUIFont - 10.0 - - - Left - Center - - - true - true - - true - - - <key>ru</key> - <value>Группа сообщения</value> - - - ГруппаСообщения7ExtendedTooltip - 2330 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Проверка подключения</value> - - - ГруппировкаСообщения7ExtendedTooltip - 2327 - Label - true - true - - Left - - - UsualGroup - - Auto - NormalSeparation - true - true - auto - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница мастера ожидание проверки подключения к сервису</value> - - - СтраницаМастераОжиданиеПроверкиПодключенияКСервисуExtendedTooltip - 2325 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаМастераОжиданиеПроверкиПодключенияВнешнегоСоединения - 855 - - ГруппировкаСообщения1 - 858 - - ГруппаКартинки1 - 859 - - Декорация13 - 860 - true - true - - true - - - Декорация13ExtendedTooltip - 2336 - Label - true - true - - Left - - - - Декорация13КонтекстноеМеню - 861 - true - - true - true - false - - - CommonPicture.Информация32 - - - - true - true - - true - - - <key>ru</key> - <value>Группа картинки</value> - - - ГруппаКартинки1ExtendedTooltip - 2335 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ГруппаСообщения1 - 862 - - Декорация14 - 863 - - <key>ru</key> - <value>Выполняется проверка установки соединения с другой программой. -Пожалуйста, подождите...</value> - - true - true - - true - - - Декорация14ExtendedTooltip - 2338 - Label - true - true - - Left - - - - Декорация14КонтекстноеМеню - 864 - true - - Label - 3 - true - false - - System.DefaultGUIFont - 10.0 - - - Left - - - true - true - - true - - - <key>ru</key> - <value>Группа сообщения</value> - - - ГруппаСообщения1ExtendedTooltip - 2337 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Проверка подключения</value> - - - ГруппировкаСообщения1ExtendedTooltip - 2334 - Label - true - true - - Left - - - UsualGroup - - Auto - NormalSeparation - true - true - auto - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница мастера ожидание проверки подключения внешнего соединения</value> - - - СтраницаМастераОжиданиеПроверкиПодключенияВнешнегоСоединенияExtendedTooltip - 2332 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - true - true - - true - - - <key>ru</key> - <value>Панель основная</value> - - - ПанельОсновнаяExtendedTooltip - 1928 - Label - true - true - - Left - - - Pages - - Auto - -
    - - РамкаПанелиНавигации - 977 - - ПанельНавигации - 940 - - СтраницаНавигацииНачало - 941 - - КоманднаяПанельСлева1 - 2377 - - КомандаНазад5 - 943 - true - - true - - - КомандаНазад5ExtendedTooltip - 2343 - Label - true - true - - Left - - - Form.Command.КомандаНазад - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Командная панель слева 1</value> - - - КоманднаяПанельСлева1РасширеннаяПодсказка - 2378 - Label - true - true - - Left - - - CommandBar - - Left - - - - КоманднаяПанельСправа1 - 942 - - КомандаДалее3 - 944 - true - true - - true - - true - - КомандаДалее3ExtendedTooltip - 2344 - Label - true - true - - Left - - - Form.Command.КомандаДалее - Auto - true - true - true - UserCmds - Auto - - - КомандаОтмена6 - 945 - true - true - - true - - - КомандаОтмена6ExtendedTooltip - 2345 - Label - true - true - - Left - - - Form.Command.КомандаОтмена - Normal - Auto - true - true - UserCmds - Auto - - - Справка - 946 - true - true - - true - - - СправкаExtendedTooltip - 2346 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Командная панель справа 1</value> - - true - - КоманднаяПанельСправа1РасширеннаяПодсказка - 2342 - Label - true - true - - Left - - - CommandBar - - Right - - - true - true - - true - - - <key>ru</key> - <value>Страница навигации начало</value> - - - СтраницаНавигацииНачалоExtendedTooltip - 2341 - Label - true - true - - Left - - - Page - - auto - false - - - - СтраницаНавигацииПродолжение - 947 - - КоманднаяПанельСлева2 - 2385 - - КомандаНазад6 - 949 - true - true - - true - - - КомандаНазад6ExtendedTooltip - 2349 - Label - true - true - - Left - - - Form.Command.КомандаНазад - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Командная панель слева 2</value> - - - КоманднаяПанельСлева2РасширеннаяПодсказка - 2386 - Label - true - true - - Left - - - CommandBar - - Left - - - - КоманднаяПанельСправа2 - 948 - - КомандаДалее4 - 950 - true - true - - true - - true - - КомандаДалее4ExtendedTooltip - 2350 - Label - true - true - - Left - - - Form.Command.КомандаДалее - Normal - Auto - true - true - UserCmds - Auto - - - КомандаОтмена7 - 951 - true - true - - true - - - КомандаОтмена7ExtendedTooltip - 2351 - Label - true - true - - Left - - - Form.Command.КомандаОтмена - Normal - Auto - true - true - UserCmds - Auto - - - Справка1 - 952 - true - true - - true - - - Справка1ExtendedTooltip - 2352 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Командная панель справа 2</value> - - true - - КоманднаяПанельСправа2РасширеннаяПодсказка - 2348 - Label - true - true - - Left - - - CommandBar - - Right - - - true - true - - true - - - <key>ru</key> - <value>Страница навигации продолжение</value> - - - СтраницаНавигацииПродолжениеExtendedTooltip - 2347 - Label - true - true - - Left - - - Page - - auto - false - - - - СтраницаНавигацииПродолжениеТолькоДалее - 1566 - - КоманднаяПанельСлева3 - 2390 - - КомандаНазад7 - 1568 - true - false - - true - - - КомандаНазад7ExtendedTooltip - 2355 - Label - true - true - - Left - - - Form.Command.КомандаНазад - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Командная панель слева 3</value> - - - КоманднаяПанельСлева3РасширеннаяПодсказка - 2391 - Label - true - true - - Left - - - CommandBar - - Left - - - - КоманднаяПанельСправа3 - 1567 - - КомандаДалее6 - 1569 - true - true - - true - - true - - КомандаДалее6ExtendedTooltip - 2356 - Label - true - true - - Left - - - Form.Command.КомандаДалее - Normal - Auto - true - true - UserCmds - Auto - - - КомандаОтмена8 - 1570 - true - true - - true - - - КомандаОтмена8ExtendedTooltip - 2357 - Label - true - true - - Left - - - Form.Command.КомандаОтмена - Normal - Auto - true - true - UserCmds - Auto - - - Справка2 - 1571 - true - true - - true - - - Справка2ExtendedTooltip - 2358 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Командная панель справа 3</value> - - true - - КоманднаяПанельСправа3РасширеннаяПодсказка - 2354 - Label - true - true - - Left - - - CommandBar - - Right - - - true - true - - true - - - <key>ru</key> - <value>Страница навигации продолжение только далее</value> - - - СтраницаНавигацииПродолжениеТолькоДалееExtendedTooltip - 2353 - Label - true - true - - Left - - - Page - - auto - false - - - - СтраницаНавигацииОжидание - 959 - - КоманднаяПанельСлева4 - 2395 - - КомандаНазад8 - 961 - true - false - - true - - - КомандаНазад8ExtendedTooltip - 2361 - Label - true - true - - Left - - - Form.Command.КомандаНазад - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Командная панель слева 4</value> - - - КоманднаяПанельСлева4РасширеннаяПодсказка - 2396 - Label - true - true - - Left - - - CommandBar - - Left - - - - КоманднаяПанельСправа4 - 960 - - КомандаДалее5 - 962 - - <key>ru</key> - <value>Далее ></value> - - true - false - - true - - true - - КомандаДалее5ExtendedTooltip - 2362 - Label - true - true - - Left - - - Form.Command.КомандаНазад - Normal - Auto - true - true - UserCmds - Auto - - - КомандаОтмена9 - 963 - true - false - - true - - - КомандаОтмена9ExtendedTooltip - 2363 - Label - true - true - - Left - - - Form.Command.КомандаОтмена - Normal - Auto - true - true - UserCmds - Auto - - - Справка3 - 964 - true - false - - true - - - Справка3ExtendedTooltip - 2364 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Командная панель справа 4</value> - - true - - КоманднаяПанельСправа4РасширеннаяПодсказка - 2360 - Label - true - true - - Left - - - CommandBar - - Right - - - true - true - - true - - - <key>ru</key> - <value>Страница навигации ожидание</value> - - - СтраницаНавигацииОжиданиеExtendedTooltip - 2359 - Label - true - true - - Left - - - Page - - auto - false - - - - СтраницаНавигацииОкончание - 1168 - - КоманднаяПанельСлева7 - 2400 - - КомандаНазад11 - 1170 - true - false - - true - - - КомандаНазад11ExtendedTooltip - 2367 - Label - true - true - - Left - - - Form.Command.КомандаНазад - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Командная панель слева 7</value> - - - КоманднаяПанельСлева7РасширеннаяПодсказка - 2401 - Label - true - true - - Left - - - CommandBar - - Left - - - - КоманднаяПанельСправа7 - 1169 - - КомандаГотово6 - 1171 - true - true - - true - - - КомандаГотово6ExtendedTooltip - 2368 - Label - true - true - - Left - - - Form.Command.КомандаГотово - Normal - Auto - true - true - UserCmds - Auto - - - КомандаОтмена11 - 1172 - true - true - - true - - - КомандаОтмена11ExtendedTooltip - 2369 - Label - true - true - - Left - - - Form.Command.КомандаОтмена - Normal - Auto - true - true - UserCmds - Auto - - - Справка6 - 1173 - true - true - - true - - - Справка6ExtendedTooltip - 2370 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Командная панель справа 7</value> - - true - - КоманднаяПанельСправа7РасширеннаяПодсказка - 2366 - Label - true - true - - Left - - - CommandBar - - Right - - - true - true - - true - - - <key>ru</key> - <value>Страница навигации окончание</value> - - - СтраницаНавигацииОкончаниеExtendedTooltip - 2365 - Label - true - true - - Left - - - Page - - auto - false - - - - СтраницаНавигацииОкончаниеИНазад - 1917 - - КоманднаяПанельСлева8 - 2405 - - КомандаНазад12 - 1919 - true - true - - true - - - КомандаНазад12ExtendedTooltip - 2373 - Label - true - true - - Left - - - Form.Command.КомандаНазад - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Командная панель слева 8</value> - - - КоманднаяПанельСлева8РасширеннаяПодсказка - 2406 - Label - true - true - - Left - - - CommandBar - - Left - - - - КоманднаяПанельСправа8 - 1918 - - КомандаГотово7 - 1920 - true - true - - true - - - КомандаГотово7ExtendedTooltip - 2374 - Label - true - true - - Left - - - Form.Command.КомандаГотово - Normal - Auto - true - true - UserCmds - Auto - - - КомандаОтмена12 - 1921 - true - true - - true - - - КомандаОтмена12ExtendedTooltip - 2375 - Label - true - true - - Left - - - Form.Command.КомандаОтмена - Normal - Auto - true - true - UserCmds - Auto - - - Справка7 - 1922 - true - true - - true - - - Справка7ExtendedTooltip - 2376 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Командная панель справа 8</value> - - true - - КоманднаяПанельСправа8РасширеннаяПодсказка - 2372 - Label - true - true - - Left - - - CommandBar - - Right - - - true - true - - true - - - <key>ru</key> - <value>Страница навигации окончание и назад</value> - - - СтраницаНавигацииОкончаниеИНазадExtendedTooltip - 2371 - Label - true - true - - Left - - - Page - - auto - false - - - true - true - - true - - - <key>ru</key> - <value>Панель навигации</value> - - true - - ПанельНавигацииExtendedTooltip - 2340 - Label - true - true - - Left - - - Pages - - Auto - - - true - true - - true - - - <key>ru</key> - <value>Рамка панели навигации</value> - - - РамкаПанелиНавигацииExtendedTooltip - 2339 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - WeakSeparation - true - true - Auto - Auto - - - None - false - - ФормаКоманднаяПанель - -1 - Left - true - - - NotificationProcessing - ОбработкаОповещения - - - OnOpen - ПриОткрытии - - - BeforeClose - ПередЗакрытием - - - OnCreateAtServer - ПриСозданииНаСервере - - - OnClose - ПриЗакрытии - - Abort - Cancel - Close - Ignore - No - OK - RestoreValues - Retry - SaveValues - Yes - DontBlock - true - true - Vertical - true - true - auto - true - - Объект - 1 - - DataProcessorObject.ПомощникСозданияОбменаДанными - - - true - - - true - -
    true
    -
    - - ВариантРаботыМастера - - <key>ru</key> - <value>Вариант работы мастера</value> - - 2 - - String - - 50 - - - - true - - - true - - - - РасположениеИнформационнойБазы - - <key>ru</key> - <value>Расположение информационной базы</value> - - 3 - - String - - 50 - - - - true - - - true - - - - ТипИнформационнойБазы - - <key>ru</key> - <value>Тип информационной базы</value> - - 4 - - String - - 50 - - - - true - - - true - - - - НастройкаОтборовНаУзле - - <key>ru</key> - <value>Настройка отборов на узле</value> - - 5 - - - true - - - true - - - - ПредставлениеРезультатаНастройкиОбмена - - <key>ru</key> - <value>Представление результата настройки обмена</value> - - 7 - - String - - - - true - - - true - - - - ВыполнитьОбменДаннымиСейчас - 8 - - Boolean - - - true - - - true - - - - ВариантНастройкиРасписания - - <key>ru</key> - <value>Вариант настройки расписания</value> - - 9 - - String - - 100 - - - - true - - - true - - - - ИмяФайлаНастроекДляПриемника - - <key>ru</key> - <value>Имя файла настроек для приемника</value> - - 10 - - String - - - - true - - - true - - - - ОписаниеОграниченийПередачиДанных - - <key>ru</key> - <value>Описание ограничений передачи данных</value> - - 11 - - String - - - - true - - - true - - - - ЗначенияПоУмолчаниюНаУзле - - <key>ru</key> - <value>Значения по умолчанию на узле</value> - - 13 - - - true - - - true - - - - ОписаниеЗначенийПоУмолчанию - - <key>ru</key> - <value>Описание значений по умолчанию</value> - - 14 - - String - - - - true - - - true - - - - ВыполнитьСозданиеНачальногоОбразаСейчас - - <key>ru</key> - <value>Создать начальный образ подчиненного узла РИБ (рекомендуется)</value> - - 20 - - Boolean - - - true - - - true - - - - ФормаСозданияНачальногоОбразаСуществует - - <key>ru</key> - <value>Форма создания начального образа существует</value> - - 21 - - Boolean - - - true - - - true - - - - ИмяФормыСозданияНачальногоОбраза - - <key>ru</key> - <value>Имя формы создания начального образа</value> - - 16 - - String - - - - true - - - true - - - - ПродолжитьНастройкуБезОткрытияПомощникаСопоставленияОбъектов - - <key>ru</key> - <value>Продолжить настройку синхронизации данных без возможности сопоставления объектов (не рекомендуется)</value> - - 15 - - Boolean - - - true - - - true - - - - ИспользоватьТранспортСообщенийОбменаFILE - - <key>ru</key> - <value>Локальный или сетевой каталог</value> - - 6 - - Boolean - - - true - - - true - - - - ИспользоватьТранспортСообщенийОбменаFTP - - <key>ru</key> - <value>FTP-ресурс</value> - - 17 - - Boolean - - - true - - - true - - - - ИспользоватьТранспортСообщенийОбменаEMAIL - - <key>ru</key> - <value>Почтовые сообщения</value> - - 18 - - Boolean - - - true - - - true - - - - ТаблицаПереходов - - <key>ru</key> - <value>Таблица переходов</value> - - 12 - - ValueTable - - - true - - - true - - - ПорядковыйНомерПерехода - - <key>ru</key> - <value>Порядковый номер перехода</value> - - 1 - - Number - - 3 - true - - - - true - - - true - - - - ИмяОсновнойСтраницы - - <key>ru</key> - <value>Имя основной страницы</value> - - 2 - - String - - - - true - - - true - - - - ИмяСтраницыДекорации - - <key>ru</key> - <value>Имя страницы декорации</value> - - 3 - - String - - - - true - - - true - - - - ИмяСтраницыНавигации - - <key>ru</key> - <value>Имя страницы навигации</value> - - 4 - - String - - - - true - - - true - - - - ИмяОбработчикаПриОткрытии - - <key>ru</key> - <value>Имя обработчика при открытии</value> - - 5 - - String - - - - true - - - true - - - - ИмяОбработчикаПриПереходеДалее - - <key>ru</key> - <value>Имя обработчика при переходе далее</value> - - 6 - - String - - - - true - - - true - - - - ИмяОбработчикаПриПереходеНазад - - <key>ru</key> - <value>Имя обработчика при переходе назад</value> - - 7 - - String - - - - true - - - true - - - - ДлительнаяОперация - - <key>ru</key> - <value>Длительная операция</value> - - 8 - - Boolean - - - true - - - true - - - - ИмяОбработчикаДлительнойОперации - - <key>ru</key> - <value>Имя обработчика длительной операции</value> - - 9 - - String - - - - true - - - true - - - - - ПорядковыйНомерПерехода - - <key>ru</key> - <value>Порядковый номер перехода</value> - - 19 - - Number - - 3 - true - - - - true - - - true - - - - РежимРаботыМастера - - <key>ru</key> - <value>Режим работы мастера</value> - - 22 - - String - - - - true - - - true - - - - ВыполнитьИнтерактивныйОбменДаннымиСейчас - - <key>ru</key> - <value>Выполнить загрузку данных в этой программе</value> - - 23 - - Boolean - - - true - - - true - - - - ИспользоватьТранспортСообщенийОбменаCOM - - <key>ru</key> - <value>Прямое подключение</value> - - 24 - - Boolean - - - true - - - true - - - - НастройкаОтборовНаУзлеБазыКорреспондента - - <key>ru</key> - <value>Настройка отборов на узле базы корреспондента</value> - - 25 - - - true - - - true - - - - ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента - - <key>ru</key> - <value>Значения по умолчанию на узле базы корреспондента</value> - - 26 - - - true - - - true - - - - ОписаниеОграниченийПередачиДанныхБазыКорреспондента - - <key>ru</key> - <value>Описание ограничений передачи данных базы корреспондента</value> - - 27 - - String - - - - true - - - true - - - - ОписаниеЗначенийПоУмолчаниюБазыКорреспондента - - <key>ru</key> - <value>Описание значений по умолчанию базы корреспондента</value> - - 28 - - String - - - - true - - - true - - - - ИнформационнаяБазаФайловая - - <key>ru</key> - <value>Информационная база файловая</value> - - 29 - - Boolean - - - true - - - true - - - - ПредусмотреныНастройкиОтборовНаУзле - - <key>ru</key> - <value>Предусмотрены настройки отборов на узле</value> - - 30 - - Boolean - - - true - - - true - - - - ПредусмотреныЗначенияПоУмолчаниюНаУзле - - <key>ru</key> - <value>Предусмотрены значения по умолчанию на узле</value> - - 31 - - Boolean - - - true - - - true - - - - ПредусмотреныНастройкиОтборовНаУзлеБазыКорреспондента - - <key>ru</key> - <value>Предусмотрены настройки отборов на узле базы корреспондента</value> - - 32 - - String - - - - true - - - true - - - - ПредусмотреныЗначенияПоУмолчаниюНаУзлеБазыКорреспондента - - <key>ru</key> - <value>Предусмотрены значения по умолчанию на узле базы корреспондента</value> - - 33 - - String - - - - true - - - true - - - - СобытиеЖурналаРегистрацииУстановкаПодключенияКWebСервису - - <key>ru</key> - <value>Событие журнала регистрации установка подключения к web сервису</value> - - 34 - - String - - - - true - - - true - - - - ДлительнаяОперация - - <key>ru</key> - <value>Длительная операция</value> - - 35 - - Boolean - - - true - - - true - - - - СобытиеЖурналаРегистрацииСозданиеОбменаДанными - - <key>ru</key> - <value>Событие журнала регистрации создание обмена данными</value> - - 37 - - String - - - - true - - - true - - - - НастройкаОбменаССервисом - - <key>ru</key> - <value>Настройка обмена с сервисом</value> - - 38 - - Boolean - - - true - - - true - - - - ОписаниеНастроекВыгрузкиДанных - - <key>ru</key> - <value>Описание настроек выгрузки данных</value> - - 39 - - String - - - - true - - - true - - - - КонтекстФормыНастройкиУзлов - - <key>ru</key> - <value>Контекст формы настройки узлов</value> - - 40 - - - true - - - true - - - - ИдентификаторДлительнойОперации - 41 - - - true - - - true - - - - ИдентификаторФайлаСообщенияВСервисе - - <key>ru</key> - <value>Идентификатор файла сообщения в сервисе</value> - - 42 - - String - - - - true - - - true - - - - ДлительнаяОперацияЗавершена - - <key>ru</key> - <value>Длительная операция завершена</value> - - 44 - - Boolean - - - true - - - true - - - - ДатаНачалаОперации - - <key>ru</key> - <value>Дата начала операции</value> - - 45 - - Date - - - - true - - - true - - - - НастройкиПараметровУчетаПоясняющаяНадпись - - <key>ru</key> - <value>Настройки параметров учета поясняющая надпись</value> - - 46 - - String - - - - true - - - true - - - - ДополнительныеНастройкиПоясняющаяНадпись - - <key>ru</key> - <value>Дополнительные настройки поясняющая надпись</value> - - 47 - - String - - - - true - - - true - - - - НастройкиПараметровУчетаЗаданы - - <key>ru</key> - <value>Настройки параметров учета заданы</value> - - 48 - - Boolean - - - true - - - true - - - - НастройкиПараметровУчетаКорреспондентаЗаданы - - <key>ru</key> - <value>Настройки параметров учета корреспондента заданы</value> - - 49 - - Boolean - - - true - - - true - - - - НастройкиПараметровУчетаКорреспондентаПоясняющаяНадпись - - <key>ru</key> - <value>Настройки параметров учета корреспондента поясняющая надпись</value> - - 50 - - String - - - - true - - - true - - - - ДеревоИнформацииСтатистики - - <key>ru</key> - <value>Дерево информации статистики</value> - - 36 - - ValueTree - - - true - - - true - - - Синоним - - <key>ru</key> - <value>Данные</value> - - 1 - - String - - - - true - - - true - - - - ПроцентСопоставленияОбъектов - - <key>ru</key> - <value>Сопоставлено, %</value> - - 2 - - Number - - 3 - true - - - - true - - - true - - - - Картинка - - <key>ru</key> - <value>Картинка</value> - - 3 - - Picture - - - true - - - true - - - - КоличествоОбъектовВИсточнике - - <key>ru</key> - <value>Объектов в сообщении, шт</value> - - 4 - - Number - - 10 - - - - true - - - true - - - - КоличествоОбъектовВПриемнике - - <key>ru</key> - <value>Объектов в этой базе, шт</value> - - 5 - - Number - - 10 - - - - true - - - true - - - - КоличествоОбъектовНесопоставленных - - <key>ru</key> - <value>Осталось сопоставить, шт</value> - - 6 - - Number - - 10 - - - - true - - - true - - - - ИндексКартинки - 7 - - Number - - 1 - true - - - - true - - - true - - - - Ключ - - <key>ru</key> - <value>Ключ</value> - - 8 - - String - - - - true - - - true - - - - ИспользоватьПредварительныйПросмотр - - <key>ru</key> - <value>Использовать предварительный просмотр</value> - - 9 - - Boolean - - - true - - - true - - - - ИмяПравила - - <key>ru</key> - <value>Имя правила</value> - - 10 - - String - - - - true - - - true - - - - ИмяТаблицыПриемника - - <key>ru</key> - <value>Имя таблицы приемника</value> - - 11 - - String - - - - true - - - true - - - - ТипОбъектаСтрокой - - <key>ru</key> - <value>Тип объекта строкой</value> - - 12 - - String - - - - true - - - true - - - - ПоляТаблицы - - <key>ru</key> - <value>Поля таблицы</value> - - 13 - - String - - - - true - - - true - - - - ПоляПоиска - - <key>ru</key> - <value>Поля поиска</value> - - 14 - - String - - - - true - - - true - - - - ТипИсточникаСтрокой - - <key>ru</key> - <value>Тип источника строкой</value> - - 15 - - String - - - - true - - - true - - - - ТипПриемникаСтрокой - - <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 - - - - - ВсеДанныеСопоставлены - - <key>ru</key> - <value>Все данные сопоставлены</value> - - 43 - - Boolean - - - true - - - true - - - - ВыполнятьОбменДаннымиАвтоматически - - <key>ru</key> - <value>Синхронизировать данные автоматически</value> - - 51 - - Boolean - - - true - - - true - - - - ПредопределенноеРасписаниеОбменаДанными - - <key>ru</key> - <value>Предопределенное расписание обмена данными</value> - - 52 - - String - - - - true - - - true - - - - ПредставлениеПользовательскогоОписания - - <key>ru</key> - <value>Представление пользовательского описания</value> - - 53 - - String - - - - true - - - true - - - - РасписаниеВыполненияОбменаДанными - - <key>ru</key> - <value>Расписание выполнения обмена данными</value> - - 54 - - - true - - - true - - - - СостояниеДлительнойОперации - - <key>ru</key> - <value>Состояние длительной операции</value> - - 55 - - String - - - - true - - - true - - - - ЗаголовокСтраницыДлительнойОперации - 56 - - String - - - - true - - - true - - - - ЖурналРегистрацииВключен - - <key>ru</key> - <value>Журнал регистрации включен</value> - - 57 - - Boolean - - - true - - - true - - - - ТипАутентификации - - <key>ru</key> - <value>Тип аутентификации</value> - - 59 - - Number - - 1 - true - - - - true - - - true - - - - СинонимПланаОбмена - - <key>ru</key> - <value>Синоним плана обмена</value> - - 60 - - String - - - - true - - - true - - - - СсылкаНаПодробноеОписание - - <key>ru</key> - <value>Ссылка на подробное описание</value> - - 61 - - String - - - - true - - - true - - - - НастройкиЗачитаны - - <key>ru</key> - <value>Настройки зачитаны</value> - - 62 - - Boolean - - - true - - - true - - - - ФормаНастройкиУзлов - - <key>ru</key> - <value>Форма настройки узлов</value> - - 64 - - String - - - - true - - - true - - - - ФормаНастройкиУзлаБазыКорреспондента - - <key>ru</key> - <value>Форма настройки узла базы корреспондента</value> - - 65 - - String - - - - true - - - true - - - - ФормаНастройкиЗначенийПоУмолчаниюБазыКорреспондента - - <key>ru</key> - <value>Форма настройки значений по умолчанию базы корреспондента</value> - - 66 - - String - - - - true - - - true - - - - ВерсияКонфигурацииКорреспондента - - <key>ru</key> - <value>Версия конфигурации корреспондента</value> - - 67 - - String - - - - true - - - true - - - - ФормаНастройкиУзла - - <key>ru</key> - <value>Форма настройки узла</value> - - 68 - - String - - - - true - - - true - - - - ФормаНастройкиЗначенийПоУмолчанию - - <key>ru</key> - <value>Форма настройки значений по умолчанию</value> - - 69 - - String - - - - true - - - true - - - - ЗакрытьФормуБезПредупреждения - - <key>ru</key> - <value>Закрыть форму без предупреждения</value> - - 70 - - Boolean - - - true - - - true - - - - ИспользоватьТранспортСообщенийОбменаWS - - <key>ru</key> - <value>Использовать транспорт сообщений обмена WS</value> - - 58 - - Boolean - - - true - - - true - - - - ФайлНастроекОбменаДаннымиУспешноЗагружен - - <key>ru</key> - <value>Файл настроек обмена данными успешно загружен</value> - - 71 - - Boolean - - - true - - - true - - - - НадписьНастройкиПараметровУчета - - <key>ru</key> - <value>Надпись настройки параметров учета</value> - - 72 - - String - - - - true - - - true - - - - НадписьНастройкиПараметровУчетаКорреспондента - - <key>ru</key> - <value>Надпись настройки параметров учета корреспондента</value> - - 73 - - String - - - - true - - - true - - - - АдресИнструкцииПоВыполнениюРезервногоКопирования - - <key>ru</key> - <value>Адрес инструкции по выполнению резервного копирования</value> - - 74 - - String - - - - true - - - true - - - - ЭтоПродолжениеНастройкиВПодчиненномУзлеРИБ - - <key>ru</key> - <value>Это продолжение настройки в подчиненном узле РИБ</value> - - 76 - - Boolean - - - true - - - true - - - - КраткоеОписание - - <key>ru</key> - <value>Краткое описание</value> - - 63 - - String - - - - true - - - true - - - - ЭтоПланОбменаXDTO - - <key>ru</key> - <value>Это план обмена XDTO</value> - - 75 - - Boolean - - - true - - - true - - - - ДопИнформацияВыполнение - - <key>ru</key> - <value>Доп информация выполнение</value> - - 77 - - String - - 150 - - - - true - - - true - - - - ПроцентВыполнения - - <key>ru</key> - <value>Процент выполнения</value> - - 78 - - Number - - 10 - true - - - - true - - - true - - - - РезультатВыполненияФоновогоЗадания - - <key>ru</key> - <value>Результат выполнения фонового задания</value> - - 79 - - - true - - - true - - - - ЭтоПланОбменаРИБ - - <key>ru</key> - <value>Это план обмена РИБ</value> - - 80 - - Boolean - - - true - - - true - - - - ФайлНастроекОбменаДаннымиСохранен - - <key>ru</key> - <value>Файл настроек обмена данными успешно загружен</value> - - 81 - - Boolean - - - true - - - true - - - - КомандаДалее - - <key>ru</key> - <value>Далее ></value> - - 1 - - true - - - - КомандаДалее - - - DontUse - Auto - - - КомандаНазад - - <key>ru</key> - <value>< Назад</value> - - 2 - - true - - - - КомандаНазад - - - DontUse - Auto - - - КомандаОтмена - - <key>ru</key> - <value>Отмена</value> - - 3 - - true - - - - КомандаОтмена - - - DontUse - Auto - - - НастройкаОграниченийРегистрацииДанных - - <key>ru</key> - <value>Изменить правила выгрузки данных</value> - - 8 - - ru - Правила синхронизации данных - - - true - - - - НастройкаОграниченийРегистрацииДанных - - - TextPicture - DontUse - Auto - - - КомандаСправка - - <key>ru</key> - <value>Справка</value> - - 10 - - true - - - StdPicture.FormHelp - - - - КомандаСправка - - - TextPicture - DontUse - Auto - - - СохранитьФайлНастроекОбменаДанными - - <key>ru</key> - <value>Сохранить</value> - - 13 - - ru - Сохранить файл настроек синхронизации данных - - - true - - - StdPicture.SaveFile - - - - СохранитьФайлНастроекОбменаДанными - - - TextPicture - DontUse - Auto - - - НастройкаЗначенийПоУмолчанию - - <key>ru</key> - <value>Изменить значения автоматического заполнения</value> - - 16 - - ru - Изменить правила получения данных для этой программы - - - true - - - - НастройкаЗначенийПоУмолчанию - - - TextPicture - DontUse - Auto - - - ПроверитьПодключениеFILE - - <key>ru</key> - <value>Проверить возможность записи в каталог</value> - - 7 - - ru - Проверить подключение через локальный или сетевой каталог - - - true - - - StdPicture.CheckSyntax - - - - ПроверитьПодключениеFILE - - - TextPicture - DontUse - Auto - - - ПроверитьПодключениеFTP - - <key>ru</key> - <value>Проверить подключение</value> - - 9 - - ru - Проверить подключение через FTP ресурс - - - true - - - StdPicture.CheckSyntax - - - - ПроверитьПодключениеFTP - - - TextPicture - DontUse - Auto - - - ПроверитьПодключениеEMAIL - - <key>ru</key> - <value>Проверить подключение</value> - - 5 - - ru - Проверить подключение по электронной почте - - - true - - - StdPicture.CheckSyntax - - - - ПроверитьПодключениеEMAIL - - - TextPicture - DontUse - Auto - - - ПроверитьПодключениеCOM - - <key>ru</key> - <value>Проверить подключение</value> - - 4 - - ru - Проверить подключение к другой программе - - - true - - - StdPicture.CheckSyntax - - - - ПроверитьПодключениеCOM - - - TextPicture - DontUse - Auto - - - НастройкаОграниченийРегистрацииДанныхБазыКорреспондентаЧерезВнешнееСоединение - - <key>ru</key> - <value>Изменить правила выгрузки данных</value> - - 12 - - true - - - - НастройкаОграниченийРегистрацииДанныхБазыКорреспондентаЧерезВнешнееСоединение - - - TextPicture - DontUse - Auto - - - НастройкаЗначенийПоУмолчаниюБазыКорреспондентаЧерезВнешнееСоединение - - <key>ru</key> - <value>Изменить значения автоматического заполнения</value> - - 17 - - true - - - - НастройкаЗначенийПоУмолчаниюБазыКорреспондентаЧерезВнешнееСоединение - - - TextPicture - DontUse - Auto - - - ПроверитьПодключениеWS - - <key>ru</key> - <value>Проверить подключение</value> - - 23 - - true - - - StdPicture.CheckSyntax - - - - ПроверитьПодключениеWS - - - TextPicture - DontUse - Auto - - - НастройкаЗначенийПоУмолчаниюБазыКорреспондентаЧерезВебСервис - - <key>ru</key> - <value>Изменить значения автоматического заполнения</value> - - 26 - - ru - Изменить правила получения данных для этой программы - - - true - - - - НастройкаЗначенийПоУмолчаниюБазыКорреспондентаЧерезВебСервис - - - TextPicture - DontUse - Auto - - - НастройкаОграниченийРегистрацииДанныхБазыКорреспондентаЧерезВебСервис - - <key>ru</key> - <value>Изменить</value> - - 27 - - ru - Правила синхронизации данных - - - true - - - StdPicture.FilterCriterion - - - - НастройкаОграниченийРегистрацииДанныхБазыКорреспондентаЧерезВебСервис - - - TextPicture - DontUse - Auto - - - КомандаГотово - - <key>ru</key> - <value>Готово</value> - - 25 - - ru - Команда готово - - - true - - - - КомандаГотово - - - DontUse - Auto - - - ВыполнитьНастройкуВыгрузкиДанных - - <key>ru</key> - <value>Изменить правила синхронизации данных</value> - - 11 - - ru - Изменить правила отправки данных для этой программы и для приложения в Интернете - - - true - - - - ВыполнитьНастройкуВыгрузкиДанных - - - TextPicture - DontUse - Auto - - - ВыполнитьСопоставлениеДанных - - <key>ru</key> - <value>Выполнить сопоставление</value> - - 14 - - ru - Выполнить сопоставление данных - - - true - - - StdPicture.ChooseValue - - - - ВыполнитьСопоставлениеДанных - - - TextPicture - DontUse - Auto - - - ИзменитьПользовательскоеРасписание - - <key>ru</key> - <value>Настроить...</value> - - 28 - - true - - - - ИзменитьПользовательскоеРасписание - - - DontUse - Auto - - - ПодробноеОписание - - <key>ru</key> - <value>Подробное описание</value> - - 29 - - true - - - CommonPicture.Информация - - - - ПодробноеОписание - - - DontUse - Auto - - - ПараметрыДоступаВИнтернет - - <key>ru</key> - <value>Параметры доступа в Интернет</value> - - 20 - - ru - Параметры доступа в Интернет - - - true - - - - ПараметрыДоступаВИнтернет - - - DontUse - Auto - - - - - - -
    diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Items/КартинкаЧасы/Picture.png b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Items/КартинкаЧасы/Picture.png deleted file mode 100644 index 81d507e30..000000000 Binary files a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Items/КартинкаЧасы/Picture.png and /dev/null differ diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Module.bsl deleted file mode 100644 index 7a7efa970..000000000 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Module.bsl +++ /dev/null @@ -1,5524 +0,0 @@ -#Область ОписаниеПеременных - -&НаКлиенте -Перем ЗакрытьФормуБезусловно, ПользовательОтветилДаНаВопросОСопоставлении, ПропускатьКонтрольОтказаТекущейСтраницы, ВнешниеРесурсыРазрешены; -#КонецОбласти - -#Область ОбработчикиСобытийФормы - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. - Возврат; - КонецЕсли; - - // Параметризация мастера по имени плана обмена (обязательно). - Если Не Параметры.Свойство("ИмяПланаОбмена", Объект.ИмяПланаОбмена) И ПустаяСтрока(Объект.ИмяПланаОбмена) Тогда - - ВызватьИсключение НСтр("ru='Обработка не предназначена для непосредственного использования.'"); - - КонецЕсли; - - ОбменДаннымиСервер.ПроверитьВозможностьАдминистрированияОбменов(); - - Если Параметры.Свойство("ДополнительнаяНастройка") Тогда - Объект.ВариантНастройкиОбмена = Параметры.ДополнительнаяНастройка; - КонецЕсли; - - СтандартныеПодсистемыСервер.УстановитьОтображениеЗаголовковГрупп(ЭтотОбъект); - - НастройкаОбменаССервисом = Параметры.Свойство("НастройкаОбменаССервисом"); - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда - МодульРаботаВБезопасномРежиме = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежиме"); - ИспользуютсяПрофилиБезопасности = МодульРаботаВБезопасномРежиме.ИспользуютсяПрофилиБезопасности(); - Иначе - ИспользуютсяПрофилиБезопасности = Ложь; - КонецЕсли; - - Если ИспользуютсяПрофилиБезопасности Тогда - Объект.СсылкаНового = ПланыОбмена[Объект.ИмяПланаОбмена].ПолучитьСсылку(); - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - - // Установка значений по умолчанию - общих. - РасположениеИнформационнойБазы = "ПодключениеНеДоступно"; - ТипИнформационнойБазы = "Серверный"; - ВыполнитьОбменДаннымиСейчас = Истина; - ВыполнитьСозданиеНачальногоОбразаСейчас = Истина; - ВыполнитьИнтерактивныйОбменДаннымиСейчас = Истина; - - Объект.EMAILСжиматьФайлИсходящегоСообщения = Истина; - Объект.FTPСжиматьФайлИсходящегоСообщения = Истина; - Объект.FTPСоединениеПорт = 21; - - // Значение по умолчанию для вида транспорта сообщений обмена. - Объект.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FILE; - - // Получаем значения по умолчанию для плана обмена. - МенеджерПланаОбмена = ПланыОбмена[Объект.ИмяПланаОбмена]; - - ЗначенияНастроекПланаОбмена = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(Объект.ИмяПланаОбмена, - "КраткаяИнформацияПоОбмену, ПодробнаяИнформацияПоОбмену, ИмяФайлаНастроекДляПриемника, - |ЭтоПланОбменаXDTO, ИмяФормыСозданияНачальногоОбраза, НаименованиеКонфигурацииКорреспондента, - |ЗаголовокПомощникаСозданияОбмена", - Объект.ВариантНастройкиОбмена, ВерсияКонфигурацииКорреспондента); - КраткоеОписание = ЗначенияНастроекПланаОбмена.КраткаяИнформацияПоОбмену; - СсылкаНаПодробноеОписание = ЗначенияНастроекПланаОбмена.ПодробнаяИнформацияПоОбмену; - - ИмяФайлаНастроекДляПриемника = ЗначенияНастроекПланаОбмена.ИмяФайлаНастроекДляПриемника + ".xml"; - - ОбновитьНастройкиИИхОписанияЗначениямиПоУмолчанию(); - - ЭтоПланОбменаXDTO = ЗначенияНастроекПланаОбмена.ЭтоПланОбменаXDTO; - ЭтоПланОбменаРИБ = Метаданные.ПланыОбмена[Объект.ИмяПланаОбмена].РаспределеннаяИнформационнаяБаза; - - КонтекстФормыНастройкиУзлов = Новый Структура; - - ЭтотУзел = МенеджерПланаОбмена.ЭтотУзел(); - - ИмяФормыСозданияНачальногоОбраза = ЗначенияНастроекПланаОбмена.ИмяФормыСозданияНачальногоОбраза; - - ИспользуемыеТранспортыСообщенийОбмена = ОбменДаннымиПовтИсп.ИспользуемыеТранспортыСообщенийОбмена( - ПланыОбмена[Объект.ИмяПланаОбмена].ПустаяСсылка(), Объект.ВариантНастройкиОбмена); - - ИспользоватьТранспортСообщенийОбменаEMAIL = (ИспользуемыеТранспортыСообщенийОбмена.Найти(Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL) <> Неопределено); - ИспользоватьТранспортСообщенийОбменаFILE = (ИспользуемыеТранспортыСообщенийОбмена.Найти(Перечисления.ВидыТранспортаСообщенийОбмена.FILE) <> Неопределено); - ИспользоватьТранспортСообщенийОбменаFTP = (ИспользуемыеТранспортыСообщенийОбмена.Найти(Перечисления.ВидыТранспортаСообщенийОбмена.FTP) <> Неопределено); - ИспользоватьТранспортСообщенийОбменаCOM = (ИспользуемыеТранспортыСообщенийОбмена.Найти(Перечисления.ВидыТранспортаСообщенийОбмена.COM) <> Неопределено); - ИспользоватьТранспортСообщенийОбменаWS = (ИспользуемыеТранспортыСообщенийОбмена.Найти(Перечисления.ВидыТранспортаСообщенийОбмена.WS) <> Неопределено); - - // Получаем другие настройки. - Объект.ИспользоватьПрефиксыДляНастройкиОбмена = НЕ (ЭтоПланОбменаXDTO - И ОбменДаннымиXDTOСервер.ПоддерживаетсяВерсияСИдентификаторомОбменаДанными(ПланыОбмена[Объект.ИмяПланаОбмена].ПустаяСсылка())); - Если Объект.ИспользоватьПрефиксыДляНастройкиОбмена Тогда - Если ОбщегоНазначения.РазделениеВключено() Тогда - Объект.ПрефиксИнформационнойБазыИсточника = ОбменДаннымиСервер.КодПредопределенногоУзлаПланаОбмена(Объект.ИмяПланаОбмена); - Иначе - Объект.ПрефиксИнформационнойБазыИсточника = ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"); - КонецЕсли; - Объект.ПрефиксИнформационнойБазыИсточникаУстановлен = ЗначениеЗаполнено(Объект.ПрефиксИнформационнойБазыИсточника); - Иначе - КодПредопределенногоУзла = ОбменДаннымиСервер.КодПредопределенногоУзлаПланаОбмена(Объект.ИмяПланаОбмена); - Объект.ИдентификаторИнформационнойБазыИсточника = КодПредопределенногоУзла; - Объект.ПрефиксИнформационнойБазыПриемникаУстановлен = Истина; - Объект.ПрефиксИнформационнойБазыИсточникаУстановлен = Истина; - Объект.ИдентификаторИнформационнойБазыПриемника = Строка(Новый УникальныйИдентификатор()); - КонецЕсли; - - Если Не Объект.ПрефиксИнформационнойБазыИсточникаУстановлен - И Объект.ИспользоватьПрефиксыДляНастройкиОбмена - И Не НастройкаОбменаССервисом Тогда - ОбменДаннымиПереопределяемый.ПриОпределенииПрефиксаИнформационнойБазыПоУмолчанию(Объект.ПрефиксИнформационнойБазыИсточника); - КонецЕсли; - - ВариантРаботыМастера = "НастроитьНовыйОбменДанными"; - Если НастройкаОбменаССервисом Тогда - - РежимРаботыМастера = "ОбменЧерезВебСервис"; - - ИначеЕсли ИспользоватьТранспортСообщенийОбменаCOM Тогда - - РежимРаботыМастера = "ОбменЧерезВнешнееСоединение"; - - ИначеЕсли ИспользоватьТранспортСообщенийОбменаWS Тогда - - РежимРаботыМастера = "ОбменЧерезВебСервис"; - - Иначе - - РежимРаботыМастера = "ОбменЧерезОбычныеКаналыСвязи"; - - КонецЕсли; - - МетаданныеПланаОбмена = Метаданные.ПланыОбмена[Объект.ИмяПланаОбмена]; - - СинонимПланаОбмена = ЗначенияНастроекПланаОбмена.НаименованиеКонфигурацииКорреспондента; - Заголовок = ЗначенияНастроекПланаОбмена.ЗаголовокПомощникаСозданияОбмена; - - Объект.ЭтоНастройкаРаспределеннойИнформационнойБазы = ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(Объект.ИмяПланаОбмена); - Объект.ЭтоНастройкаСтандартногоОбмена = ОбменДаннымиПовтИсп.ЭтоУзелСтандартногоОбменаДанными(ЭтотУзел); - - ИнформационнаяБазаФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая(); - - Объект.ИспользоватьПараметрыТранспортаFILE = Истина; - Объект.ИспользоватьПараметрыТранспортаFTP = Ложь; - Объект.ИспользоватьПараметрыТранспортаEMAIL = Ложь; - - Элементы.НастройкиТранспортаFILE.Доступность = Объект.ИспользоватьПараметрыТранспортаFILE; - Элементы.НастройкиТранспортаFTP.Доступность = Объект.ИспользоватьПараметрыТранспортаFTP; - Элементы.НастройкиТранспортаEMAIL.Доступность = Объект.ИспользоватьПараметрыТранспортаEMAIL; - - Элементы.ИспользоватьПараметрыТранспортаFILE.Видимость = ИспользуемыеТранспортыСообщенийОбмена.Количество() > 1; - Элементы.ОписаниеМастерИзФайла.Заголовок = СтрЗаменить(Элементы.ОписаниеМастерИзФайла.Заголовок, "%ПрограммаКорреспондент%", СинонимПланаОбмена); - - Объект.НаименованиеЭтойБазы = ОбменДаннымиСервер.НаименованиеПредопределенногоУзлаПланаОбмена(Объект.ИмяПланаОбмена); - ЗаданоНаименованиеЭтойБазы = Не ПустаяСтрока(Объект.НаименованиеЭтойБазы); - - Элементы.НаименованиеЭтойБазы.ТолькоПросмотр = ЗаданоНаименованиеЭтойБазы; - Элементы.НаименованиеЭтойБазы1.ТолькоПросмотр = ЗаданоНаименованиеЭтойБазы; - - Если Не ЗаданоНаименованиеЭтойБазы Тогда - - Объект.НаименованиеЭтойБазы = ОбменДаннымиПовтИсп.ИмяЭтойИнформационнойБазы(); - - КонецЕсли; - - Элементы.ДекорацияПараметрыПодключенияWS.РасширеннаяПодсказка.Заголовок = СтрЗаменить( - Элементы.ДекорацияПараметрыПодключенияWS.РасширеннаяПодсказка.Заголовок, "[НедопустимыеСимволы]", - ОбменДаннымиКлиентСервер.НедопустимыеСимволыВИмениПользователяWSПрокси()); - - Элементы.ДекорацияПараметрыПодключенияКСервису.РасширеннаяПодсказка.Заголовок = СтрЗаменить( - Элементы.ДекорацияПараметрыПодключенияКСервису.РасширеннаяПодсказка.Заголовок, "[НедопустимыеСимволы]", - ОбменДаннымиКлиентСервер.НедопустимыеСимволыВИмениПользователяWSПрокси()); - - УстановитьВидимостьНаСервере(); - - // Назначаем значения поясняющим надписям внизу страницы для перехода по кнопке "Далее". - - // Поясняющая надпись на странице мастера настроек FILE. - Если ИспользоватьТранспортСообщенийОбменаFILE Тогда - - Если ИспользоватьТранспортСообщенийОбменаFTP Тогда - - Элементы.НадписьДалееFILE.Заголовок = НадписьДалееFTP(); - - ИначеЕсли ИспользоватьТранспортСообщенийОбменаEMAIL Тогда - - Элементы.НадписьДалееFILE.Заголовок = НадписьДалееEMAIL(); - - Иначе - - Элементы.НадписьДалееFILE.Заголовок = НадписьДалееНастройки(); - - КонецЕсли; - - КонецЕсли; - - // Поясняющая надпись на странице мастера настроек FTP. - Если ИспользоватьТранспортСообщенийОбменаFTP Тогда - - Если ИспользоватьТранспортСообщенийОбменаEMAIL Тогда - - Элементы.НадписьДалееFTP.Заголовок = НадписьДалееEMAIL(); - - Иначе - - Элементы.НадписьДалееFTP.Заголовок = НадписьДалееНастройки(); - - КонецЕсли; - - КонецЕсли; - - // Поясняющая надпись на странице мастера настроек EMAIL. - Если ИспользоватьТранспортСообщенийОбменаEMAIL Тогда - - Элементы.НадписьДалееEMAIL.Заголовок = НадписьДалееНастройки(); - - КонецЕсли; - - ЭтоПродолжениеНастройкиВПодчиненномУзлеРИБ = Параметры.Свойство("ЭтоПродолжениеНастройкиВПодчиненномУзлеРИБ"); - - Если Не ЭтоПродолжениеНастройкиВПодчиненномУзлеРИБ Тогда - - Если ОбменДаннымиСервер.ЭтоПодчиненныйУзелРИБ() Тогда - - ИмяПланаОбменаРИБ = ОбменДаннымиСервер.ГлавныйУзел().Метаданные().Имя; - - Если Объект.ИмяПланаОбмена = ИмяПланаОбменаРИБ - И Не Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Получить() Тогда - - ЭтоПродолжениеНастройкиВПодчиненномУзлеРИБ = Истина; - - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - - Если ЭтоПродолжениеНастройкиВПодчиненномУзлеРИБ Тогда - - ОбменДаннымиСервер.ПриПродолженииНастройкиПодчиненногоУзлаРИБ(); - - ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными"; - - ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); - ОбработкаОбъект.ВыполнитьЗагрузкуПараметровМастераИзКонстанты(Ложь); - ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект"); - - Элементы.НастройкиТранспортаFILE.Доступность = Объект.ИспользоватьПараметрыТранспортаFILE; - Элементы.НастройкиТранспортаFTP.Доступность = Объект.ИспользоватьПараметрыТранспортаFTP; - Элементы.НастройкиТранспортаEMAIL.Доступность = Объект.ИспользоватьПараметрыТранспортаEMAIL; - - Элементы.ГруппаПереключателяВыбораРежимаРаботыПомощника.Заголовок = НСтр("ru = 'Продолжение настройки синхронизации данных с главным узлом'"); - - Элементы.ГруппаРезервноеКопирование.Видимость = Ложь; - КонецЕсли; - - ВариантРаботыМастераПриИзмененииНаСервере(); - - РежимРаботыМастераПриИзмененииНаСервере(); - - СобытиеЖурналаРегистрацииУстановкаПодключенияКWebСервису = ОбменДаннымиСервер.СобытиеЖурналаРегистрацииУстановкаПодключенияКWebСервису(); - СобытиеЖурналаРегистрацииСозданиеОбменаДанными = ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(); - - ДлительнаяОперация = Ложь; - ПредопределенноеРасписаниеОбменаДанными = "КаждыйЧас"; - РасписаниеВыполненияОбменаДанными = ПредопределенноеРасписаниеКаждыйЧас(); - ПредставлениеПользовательскогоОписания = Строка(РасписаниеВыполненияОбменаДанными); - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда - Элементы.ПараметрыДоступаВИнтернет.Видимость = Истина; - Элементы.ПараметрыДоступаВИнтернет1.Видимость = Истина; - Элементы.ПараметрыДоступаВИнтернет2.Видимость = Истина; - Иначе - Элементы.ПараметрыДоступаВИнтернет.Видимость = Ложь; - Элементы.ПараметрыДоступаВИнтернет1.Видимость = Ложь; - Элементы.ПараметрыДоступаВИнтернет2.Видимость = Ложь; - КонецЕсли; - - Объект.НаименованиеВторойБазы = НаименованиеВторойБазы(); - -КонецПроцедуры - -&НаКлиенте -Процедура ПриОткрытии(Отказ) - Элементы.ГруппаОшибкиПодключения.Видимость = Ложь; - Если ОбщегоНазначенияКлиент.ПредлагатьСоздаватьРезервныеКопии() Тогда - - Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Перед настройкой синхронизации рекомендуется сделать резервную копию данных.'"), - "СоздатьРезервнуюКопию"); - - ФорматированнаяСтрока = СтроковыеФункцииКлиентСервер.ФорматированнаяСтрока(Текст); - - Элементы.НадписьРезервноеКопирование.Заголовок = ФорматированнаяСтрока; - Элементы.НадписьРезервноеКопированиеСервис.Заголовок = ФорматированнаяСтрока; - - КонецЕсли; - - Если ЭтоПродолжениеНастройкиВПодчиненномУзлеРИБ Тогда - РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс; - КонецЕсли; - - ЗакрытьФормуБезусловно = Ложь; - ПользовательОтветилДаНаВопросОСопоставлении = Ложь; - - ВнешниеРесурсыРазрешены = Новый Структура; - ВнешниеРесурсыРазрешены.Вставить("РазрешенCom", Ложь); - ВнешниеРесурсыРазрешены.Вставить("РазрешенFILE", Ложь); - ВнешниеРесурсыРазрешены.Вставить("РазрешенFTP", Ложь); - ВнешниеРесурсыРазрешены.Вставить("РазрешенWS", Ложь); - - АутентификацияОперационнойСистемыПриИзменении(); - - ВариантРаботыИнформационнойБазыПриИзменении(); - - УстановитьПорядковыйНомерПерехода(1); - -КонецПроцедуры - -&НаКлиенте -Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) - - Если ЗавершениеРаботы Тогда - Если ДлительнаяОперация Тогда - ТекстПредупреждения = НСтр("ru = 'Настройка синхронизации данных будет прервана.'"); - КонецЕсли; - - Если ЭтоПродолжениеНастройкиВПодчиненномУзлеРИБ Тогда - ТекстПредупреждения = НСтр("ru = 'Настройка подчиненного узла распределенной информационной базы не выполнена.'"); - КонецЕсли; - - Возврат; - КонецЕсли; - - Если ДлительнаяОперация Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Выполняется настройка синхронизации данных. - |Работа помощника не может быть завершена.'")); - Отказ = Истина; - Возврат; - КонецЕсли; - - Если ЗакрытьФормуБезусловно = Истина Тогда - Возврат; - КонецЕсли; - - Если ЭтоПродолжениеНастройкиВПодчиненномУзлеРИБ Тогда - ТекстПредупреждения = НСтр("ru = 'Выполняется настройка подчиненного узла распределенной информационной базы. - |Отказаться от настройки и использовать значения по умолчанию?'"); - - ОписаниеОповещенияОтказПродолженияРИБ = Новый ОписаниеОповещения("ОписаниеОповещенияОтказОтПродолженияРИБ", ЭтотОбъект); - ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияПроизвольнойФормы(ЭтотОбъект, Отказ, ЗавершениеРаботы, - ТекстПредупреждения, "ЗакрытьФормуБезПредупреждения", ОписаниеОповещенияОтказПродолженияРИБ); - Возврат; - КонецЕсли; - - ТекстПредупреждения = НСтр("ru = 'Отменить настройку синхронизации и выйти из помощника?'"); - ОписаниеОповещенияЗакрыть = Новый ОписаниеОповещения("УдалитьНастройкуОбменаДанными", ЭтотОбъект); - ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияПроизвольнойФормы(ЭтотОбъект, Отказ, ЗавершениеРаботы, - ТекстПредупреждения, "ЗакрытьФормуБезПредупреждения", ОписаниеОповещенияЗакрыть); - -КонецПроцедуры - -&НаКлиенте -Процедура ПриЗакрытии(ЗавершениеРаботы) - - Если ЗавершениеРаботы Тогда - Возврат; - КонецЕсли; - - Оповестить("ЗакрытаФормаПомощникаСозданияОбменаДанными"); - -КонецПроцедуры - -&НаКлиенте -Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - - Если ИмяСобытия = "ЗакрытиеФормыСопоставленияОбъектов" Тогда - - Отказ = Ложь; - - ОбновитьДанныеСтатистикиСопоставленияНаСервере(Отказ, Параметр); - - Если Отказ Тогда - ПоказатьПредупреждение(, НСтр("ru = 'При получении информации статистики возникли ошибки.'")); - Иначе - - РазвернутьДеревоИнформацииСтатистики(Параметр.КлючУникальности); - - ПоказатьОповещениеПользователя(НСтр("ru = 'Сбор информации завершен'")); - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -#КонецОбласти - -#Область ОбработчикиСобытийЭлементовШапкиФормы - -//////////////////////////////////////////////////////////////////////////////// -// Страница СтраницаМастераНачало - -&НаКлиенте -Процедура ИмяФайлаНастроекОбменаДаннымиДляЗагрузкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - - НастройкиДиалога = Новый Структура; - НастройкиДиалога.Вставить("Фильтр", НСтр("ru = 'Файл настроек синхронизации данных (*.xml)'") + "|*.xml" ); - - Оповещение = Новый ОписаниеОповещения("ЗавершениеВыбораФайлаНастроекОбменаДаннымиДляЗагрузки", ЭтотОбъект); - ОбменДаннымиКлиент.ВыбратьИПередатьФайлНаСервер(Оповещение, НастройкиДиалога, УникальныйИдентификатор); -КонецПроцедуры - -&НаКлиенте -Процедура ИмяФайлаНастроекОбменаДаннымиДляЗагрузкиПриИзменении(Элемент) - - ФайлНастроекОбменаДаннымиУспешноЗагружен = Ложь; - -КонецПроцедуры - -&НаКлиенте -Процедура ВариантРаботыМастераВручнуюПриИзменении(Элемент) - - ВариантРаботыМастераПриИзмененииНаСервере(); - -КонецПроцедуры - -&НаКлиенте -Процедура ВариантРаботыМастераИзФайлаПриИзменении(Элемент) - - ВариантРаботыМастераПриИзмененииНаСервере(); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Страница СтраницаМастераСозданиеОбменаДаннымиУспешноЗавершено - -&НаКлиенте -Процедура ПредопределенноеРасписаниеОбменаДаннымиПриИзменении(Элемент) - - ПредопределенноеРасписаниеОбменаДаннымиПриИзмененииЗначения(); - -КонецПроцедуры - -&НаКлиенте -Процедура ВыполнятьОбменДаннымиАвтоматическиПриИзменении(Элемент) - - ВыполнятьОбменДаннымиАвтоматическиПриИзмененииЗначения(); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Страница СтраницаМастераВыборРежимаРаботыПомощника - -&НаКлиенте -Процедура РежимРаботыМастераПриИзменении(Элемент) - - РежимРаботыМастераПриИзмененииНаСервере(); - -КонецПроцедуры - -&НаКлиенте -Процедура COMКаталогИнформационнойБазыНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - ОбменДаннымиКлиент.ОбработчикВыбораФайловогоКаталога(Объект, "COMКаталогИнформационнойБазы", СтандартнаяОбработка); - -КонецПроцедуры - -&НаКлиенте -Процедура COMКаталогИнформационнойБазыОткрытие(Элемент, СтандартнаяОбработка) - - ОбменДаннымиКлиент.ОбработчикОткрытияФайлаИлиКаталога(Объект, "COMКаталогИнформационнойБазы", СтандартнаяОбработка) - -КонецПроцедуры - -&НаКлиенте -Процедура COMВариантРаботыИнформационнойБазыПриИзменении(Элемент) - - ВариантРаботыИнформационнойБазыПриИзменении(); - -КонецПроцедуры - -&НаКлиенте -Процедура ТипАутентификацииПриИзменении(Элемент) - - АутентификацияОперационнойСистемыПриИзменении(); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Страница СтраницаМастераЗаданиеПараметровТранспортаFILE - -&НаКлиенте -Процедура FILEКаталогОбменаИнформациейНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - Если Не ИнформационнаяБазаФайловая Тогда - Возврат; - КонецЕсли; - - ОбменДаннымиКлиент.ОбработчикВыбораФайловогоКаталога(Объект, "FILEКаталогОбменаИнформацией", СтандартнаяОбработка); - -КонецПроцедуры - -&НаКлиенте -Процедура FILEКаталогОбменаИнформациейОткрытие(Элемент, СтандартнаяОбработка) - - ОбменДаннымиКлиент.ОбработчикОткрытияФайлаИлиКаталога(Объект, "FILEКаталогОбменаИнформацией", СтандартнаяОбработка) - -КонецПроцедуры - -&НаКлиенте -Процедура ИспользоватьПараметрыТранспортаFILEПриИзменении(Элемент) - - Элементы.НастройкиТранспортаFILE.Доступность = Объект.ИспользоватьПараметрыТранспортаFILE; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Страница СтраницаМастераЗаданиеПараметровТранспортаFTP - -&НаКлиенте -Процедура ИспользоватьПараметрыТранспортаFTPПриИзменении(Элемент) - - Элементы.НастройкиТранспортаFTP.Доступность = Объект.ИспользоватьПараметрыТранспортаFTP; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Страница СтраницаМастераЗаданиеПараметровТранспортаEMAIL - -&НаКлиенте -Процедура ИспользоватьПараметрыТранспортаEMAILПриИзменении(Элемент) - - Элементы.НастройкиТранспортаEMAIL.Доступность = Объект.ИспользоватьПараметрыТранспортаEMAIL; - -КонецПроцедуры - -#КонецОбласти - -#Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоИнформацииСтатистики - -&НаКлиенте -Процедура ДеревоИнформацииСтатистикиВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - - ОткрытьФормуСопоставления(); - -КонецПроцедуры - -#КонецОбласти - -#Область ОбработчикиКомандФормы - -//////////////////////////////////////////////////////////////////////////////// -// Поставляемая часть - -&НаКлиенте -Процедура КомандаДалее(Команда) - - ИзменитьПорядковыйНомерПерехода(+1); - -КонецПроцедуры - -&НаКлиенте -Процедура КомандаНазад(Команда) - - ПользовательОтветилДаНаВопросОСопоставлении = Ложь; - ИзменитьПорядковыйНомерПерехода(-1); - -КонецПроцедуры - -&НаКлиенте -Процедура КомандаГотово(Команда) - - ВыполнитьКомандуГотово(); - -КонецПроцедуры - -&НаКлиенте -Процедура КомандаОтмена(Команда) - - Закрыть(); - -КонецПроцедуры - -&НаКлиенте -Процедура КомандаСправка(Команда) - - ОткрытьСправкуФормы(); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Переопределяемая часть - -&НаКлиенте -Процедура ВыполнитьСопоставлениеДанных(Команда) - - ОткрытьФормуСопоставления(); - -КонецПроцедуры - -&НаКлиенте -Процедура ВыполнитьНастройкуВыгрузкиДанных(Команда) - - ТипСоединения = "ВебСервис"; - - ИмяФормыНастройкиУзла = "ПланОбмена.[ИмяПланаОбмена].Форма.[ФормаНастройкиУзлов]"; - ИмяФормыНастройкиУзла = СтрЗаменить(ИмяФормыНастройкиУзла, "[ИмяПланаОбмена]", Объект.ИмяПланаОбмена); - ИмяФормыНастройкиУзла = СтрЗаменить(ИмяФормыНастройкиУзла, "[ФормаНастройкиУзлов]", ФормаНастройкиУзлов); - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ВерсияКорреспондента", ВерсияКонфигурацииКорреспондента); - ПараметрыФормы.Вставить("ПараметрыПодключения", СтруктураПараметровПодключенияВнешнегоСоединения(ТипСоединения)); - ПараметрыФормы.Вставить("Настройки", КонтекстФормыНастройкиУзлов); - ПараметрыФормы.Вставить("ИдентификаторНастройки", Объект.ВариантНастройкиОбмена); - - Обработчик = Новый ОписаниеОповещения("ВыполнитьНастройкуВыгрузкиДанныхЗавершение", ЭтотОбъект); - Режим = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; - ОткрытьФорму(ИмяФормыНастройкиУзла, ПараметрыФормы, ЭтотОбъект,,,,Обработчик, Режим); - -КонецПроцедуры - -&НаКлиенте -Процедура ВыполнитьНастройкуВыгрузкиДанныхЗавершение(Результат, ДополнительныеПараметры) Экспорт - - Если Результат <> Неопределено Тогда - - КонтекстФормыНастройкиУзлов = Результат; - - ОписаниеНастроекВыгрузкиДанных = Результат.ОписаниеКонтекста; - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура НастройкаОграниченийРегистрацииДанных(Команда) - - ИмяФормыНастройкиУзла = "ПланОбмена.[ИмяПланаОбмена].Форма.[ФормаНастройкиУзла]"; - ИмяФормыНастройкиУзла = СтрЗаменить(ИмяФормыНастройкиУзла, "[ИмяПланаОбмена]", Объект.ИмяПланаОбмена); - ИмяФормыНастройкиУзла = СтрЗаменить(ИмяФормыНастройкиУзла, "[ФормаНастройкиУзла]", ФормаНастройкиУзла); - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ВерсияКорреспондента", ВерсияКонфигурацииКорреспондента); - ПараметрыФормы.Вставить("НастройкаОтборовНаУзле", НастройкаОтборовНаУзле); - ПараметрыФормы.Вставить("ИдентификаторНастройки", Объект.ВариантНастройкиОбмена); - - Обработчик = Новый ОписаниеОповещения("НастройкаОграниченийРегистрацииДанныхЗавершение", ЭтотОбъект); - Режим = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; - ОткрытьФорму(ИмяФормыНастройкиУзла, ПараметрыФормы, ЭтотОбъект,,,,Обработчик, Режим); - -КонецПроцедуры - -&НаКлиенте -Процедура НастройкаОграниченийРегистрацииДанныхЗавершение(Результат, ДополнительныеПараметры) Экспорт - - Если Результат <> Неопределено Тогда - - Для Каждого НастройкаОтбора Из НастройкаОтборовНаУзле Цикл - - НастройкаОтборовНаУзле[НастройкаОтбора.Ключ] = Результат[НастройкаОтбора.Ключ]; - - КонецЦикла; - - // вызов сервера - ОбновитьОписаниеОграниченийПередачиДанных(НастройкаОтборовНаУзле); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура НастройкаОграниченийРегистрацииДанныхБазыКорреспондентаЧерезВебСервис(Команда) - - НастройкаОграниченийРегистрацииДанныхБазыКорреспондента("ВебСервис"); - -КонецПроцедуры - -&НаКлиенте -Процедура НастройкаОграниченийРегистрацииДанныхБазыКорреспондентаЧерезВнешнееСоединение(Команда) - - НастройкаОграниченийРегистрацииДанныхБазыКорреспондента("ВнешнееСоединение"); - -КонецПроцедуры - -&НаКлиенте -Процедура НастройкаЗначенийПоУмолчанию(Команда) - - ИмяФормыНастройкиУзла = "ПланОбмена.[ИмяПланаОбмена].Форма.[ФормаНастройкиЗначенийПоУмолчанию]"; - ИмяФормыНастройкиУзла = СтрЗаменить(ИмяФормыНастройкиУзла, "[ИмяПланаОбмена]", Объект.ИмяПланаОбмена); - ИмяФормыНастройкиУзла = СтрЗаменить(ИмяФормыНастройкиУзла, "[ФормаНастройкиЗначенийПоУмолчанию]", ФормаНастройкиЗначенийПоУмолчанию); - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ВерсияКорреспондента", ВерсияКонфигурацииКорреспондента); - ПараметрыФормы.Вставить("ЗначенияПоУмолчаниюНаУзле", ЗначенияПоУмолчаниюНаУзле); - ПараметрыФормы.Вставить("ИдентификаторНастройки", Объект.ВариантНастройкиОбмена); - - Обработчик = Новый ОписаниеОповещения("НастройкаЗначенийПоУмолчаниюЗавершение", ЭтотОбъект); - Режим = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; - ОткрытьФорму(ИмяФормыНастройкиУзла, ПараметрыФормы, ЭтотОбъект,,,,Обработчик, Режим); - -КонецПроцедуры - -&НаКлиенте -Процедура НастройкаЗначенийПоУмолчаниюЗавершение(Результат, ДополнительныеПараметры) Экспорт - - Если Результат <> Неопределено Тогда - - Для Каждого Настройка Из ЗначенияПоУмолчаниюНаУзле Цикл - - ЗначенияПоУмолчаниюНаУзле[Настройка.Ключ] = Результат[Настройка.Ключ]; - - КонецЦикла; - - // вызов сервера - ОбновитьОписаниеЗначенийПоУмолчанию(ЗначенияПоУмолчаниюНаУзле); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура НастройкаЗначенийПоУмолчаниюБазыКорреспондентаЧерезВебСервис(Команда) - - НастройкаЗначенийПоУмолчаниюБазыКорреспондента("ВебСервис"); - -КонецПроцедуры - -&НаКлиенте -Процедура НастройкаЗначенийПоУмолчаниюБазыКорреспондентаЧерезВнешнееСоединение(Команда) - - НастройкаЗначенийПоУмолчаниюБазыКорреспондента("ВнешнееСоединение"); - -КонецПроцедуры - -&НаКлиенте -Процедура СохранитьФайлНастроекОбменаДанными(Команда) - - Перем АдресВременногоХранилища; - - Отказ = Ложь; - - // вызов сервера - ВыгрузитьНастройкиОбменаДляПриемника(Отказ, АдресВременногоХранилища); - - Если Отказ Тогда - - ПоказатьПредупреждение(, НСтр("ru = 'При сохранении файла настроек синхронизации данных возникли ошибки.'")); - - Иначе - - #Если ВебКлиент Тогда - - ПолучитьФайл(АдресВременногоХранилища, ИмяФайлаНастроекДляПриемника, Истина); - - Объект.ИмяФайлаНастроекСинхронизацииДанных = ИмяФайлаНастроекДляПриемника; - ФайлНастроекОбменаДаннымиСохранен = Истина; - - #Иначе - - ДополнительныеПараметры = Новый Структура(); - ДополнительныеПараметры.Вставить("АдресВременногоХранилища", АдресВременногоХранилища); - ТекстПредложения = НСтр("ru = 'Для открытия каталога необходимо необходимо установить расширение работы с файлами.'"); - Оповещение = Новый ОписаниеОповещения("ПослеПроверкиРасширенияРаботыСФайлами", ЭтотОбъект, ДополнительныеПараметры); - ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение, ТекстПредложения); - - #КонецЕсли - - КонецЕсли; - -КонецПроцедуры - -// Продолжение процедуры (см. выше). -&НаКлиенте -Процедура ПослеПроверкиРасширенияРаботыСФайлами(Результат, ДополнительныеПараметры) Экспорт - - Если Результат Тогда - - Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); - - Диалог.Заголовок = НСтр("ru = 'Укажите имя файла настроек синхронизации данных'"); - Диалог.Расширение = "xml"; - Диалог.Фильтр = "Файл настроек синхронизации данных(*.xml)|*.xml"; - Диалог.ПолноеИмяФайла = ИмяФайлаНастроекДляПриемника; - - Оповещение = Новый ОписаниеОповещения("ПослеВыбораФайла", ЭтотОбъект, ДополнительныеПараметры); - Диалог.Показать(Оповещение); - - КонецЕсли; - -КонецПроцедуры - -// Продолжение процедуры (см. выше). -&НаКлиенте -Процедура ПослеВыбораФайла(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт - Если ВыбранныеФайлы = Неопределено Тогда - Возврат; - КонецЕсли; - Если ВыбранныеФайлы.Количество() = 1 Тогда - Объект.ИмяФайлаНастроекСинхронизацииДанных = ВыбранныеФайлы[0]; - ДвоичныеДанные = ПолучитьИзВременногоХранилища(ДополнительныеПараметры.АдресВременногоХранилища); - УдалитьИзВременногоХранилища(ДополнительныеПараметры.АдресВременногоХранилища); - ДвоичныеДанные.Записать(Объект.ИмяФайлаНастроекСинхронизацииДанных); - ФайлНастроекОбменаДаннымиСохранен = Истина; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПроверитьПодключениеFILE(Команда) - - ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПроверитьПодключениеFILEЗавершение", ЭтотОбъект); - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда - Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Объект, Ложь, Истина, Ложь, Ложь); - МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент"); - МодульРаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); - Иначе - ВыполнитьОбработкуОповещения(ОповещениеОЗакрытии, КодВозвратаДиалога.ОК); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПроверитьПодключениеFTP(Команда) - - ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПроверитьПодключениеFTPЗавершение", ЭтотОбъект); - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда - Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Объект, Ложь, Ложь, Ложь, Истина); - МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент"); - МодульРаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); - Иначе - ВыполнитьОбработкуОповещения(ОповещениеОЗакрытии, КодВозвратаДиалога.ОК); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПроверитьПодключениеEMAIL(Команда) - - ПроверитьПодключение("EMAIL"); - -КонецПроцедуры - -&НаКлиенте -Процедура ПроверитьПодключениеCOM(Команда) - - ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПроверитьПодключениеCOMЗавершение", ЭтотОбъект); - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда - Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Объект, Истина, Ложь, Ложь, Ложь); - МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент"); - МодульРаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); - Иначе - ВыполнитьОбработкуОповещения(ОповещениеОЗакрытии, КодВозвратаДиалога.ОК); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПроверитьПодключениеWS(Команда) - - Отказ = Ложь; - ПроверитьКорректностьПараметровПодключенияWS(Отказ); - - Если Не Отказ Тогда - ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПроверитьПодключениеWSЗавершение", ЭтотОбъект); - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда - Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Объект, Ложь, Ложь, Истина, Ложь); - МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент"); - МодульРаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); - Иначе - ВыполнитьОбработкуОповещения(ОповещениеОЗакрытии, КодВозвратаДиалога.ОК); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ИзменитьПользовательскоеРасписание(Команда) - - Диалог = Новый ДиалогРасписанияРегламентногоЗадания(РасписаниеВыполненияОбменаДанными); - ОписаниеОповещения = Новый ОписаниеОповещения("ИзменитьПользовательскоеРасписаниеЗавершение", ЭтотОбъект); - Диалог.Показать(ОписаниеОповещения); - -КонецПроцедуры - -&НаКлиенте -Процедура ИзменитьПользовательскоеРасписаниеЗавершение(Расписание) Экспорт - - Если Расписание <> Неопределено Тогда - - РасписаниеВыполненияОбменаДанными = Расписание; - - ПредставлениеПользовательскогоОписания = Строка(РасписаниеВыполненияОбменаДанными); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПодробноеОписание(Команда) - - ОбменДаннымиКлиент.ОткрытьПодробноеОписаниеСинхронизации(СсылкаНаПодробноеОписание); - -КонецПроцедуры - -&НаКлиенте -Процедура ПараметрыДоступаВИнтернет(Команда) - - ОбменДаннымиКлиент.ОткрытьФормуПараметровПроксиСервера(); - -КонецПроцедуры - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -#Область НастройкиПоУмолчаниюИВыводОписаний - -&НаСервере -Процедура ОбновитьНастройкиИИхОписанияЗначениямиПоУмолчанию(ДляОбменаЧерезПрямоеПодключение = Ложь) - // 1. Для этой базы. - ФормаНастройкиУзла = ""; - ФормаНастройкиЗначенийПоУмолчанию = ""; - - НастройкаОтборовНаУзле = ОбменДаннымиСервер.НастройкаОтборовНаУзле( - Объект.ИмяПланаОбмена, - ВерсияКонфигурацииКорреспондента, - ФормаНастройкиУзла, - Объект.ВариантНастройкиОбмена); - - ЗначенияПоУмолчаниюНаУзле = ОбменДаннымиСервер.ЗначенияПоУмолчаниюНаУзле( - Объект.ИмяПланаОбмена, - ВерсияКонфигурацииКорреспондента, - ФормаНастройкиЗначенийПоУмолчанию, - Объект.ВариантНастройкиОбмена); - - ОбновитьОписаниеОграниченийПередачиДанных(НастройкаОтборовНаУзле); - ОбновитьОписаниеЗначенийПоУмолчанию(ЗначенияПоУмолчаниюНаУзле); - - ЗначенияНастроекПланаОбмена = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(Объект.ИмяПланаОбмена, - "ПояснениеДляНастройкиПараметровУчета, ОтображатьНастройкуОтборовНаУзле, ОтображатьЗначенияПоУмолчаниюНаУзле, - |ИмяФормыОтборовКорреспондента, ИмяФормыЗначенийПоУмолчаниюКорреспондента, ИмяФормыОбщиеДанныеУзлов, - |ОтборыКорреспондента, ЗначенияПоУмолчаниюКорреспондента, ПояснениеДляНастройкиПараметровУчета, - |ОтображатьНастройкуОтборовНаУзлеБазыКорреспондента, ОтображатьЗначенияПоУмолчаниюНаУзлеБазыКорреспондента, - |ПояснениеДляНастройкиПараметровУчетаБазыКорреспондента", - Объект.ВариантНастройкиОбмена, ВерсияКонфигурацииКорреспондента); - - НастройкиПараметровУчетаПоясняющаяНадпись = ЗначенияНастроекПланаОбмена.ПояснениеДляНастройкиПараметровУчета; - - // Управление видимостью связанных элементов. - ПредусмотреныНастройкиОтборовНаУзле = НастройкаОтборовНаУзле.Количество() > 0 - И ЗначенияНастроекПланаОбмена.ОтображатьНастройкуОтборовНаУзле; - ПредусмотреныЗначенияПоУмолчаниюНаУзле = ЗначенияПоУмолчаниюНаУзле.Количество() > 0 - И ЗначенияНастроекПланаОбмена.ОтображатьЗначенияПоУмолчаниюНаУзле; - - Элементы.РамкаГруппыОграничений.Видимость = ПредусмотреныНастройкиОтборовНаУзле; - Элементы.РамкаГруппыОграничений1.Видимость = ПредусмотреныНастройкиОтборовНаУзле; - Элементы.РамкаГруппыОграничений2.Видимость = ПредусмотреныНастройкиОтборовНаУзле; - Элементы.РамкаГруппыЗначенийПоУмолчанию.Видимость = ПредусмотреныЗначенияПоУмолчаниюНаУзле; - Элементы.РамкаГруппыЗначенийПоУмолчанию1.Видимость = ПредусмотреныЗначенияПоУмолчаниюНаУзле; - Элементы.РамкаГруппыЗначенийПоУмолчанию2.Видимость = ПредусмотреныЗначенияПоУмолчаниюНаУзле; - Элементы.РамкаГруппыЗначенийПоУмолчанию6.Видимость = ПредусмотреныЗначенияПоУмолчаниюНаУзле; - - // 2. Для корреспондента - опционально. - Если Не ДляОбменаЧерезПрямоеПодключение Тогда - Возврат; - КонецЕсли; - ФормаНастройкиУзлаБазыКорреспондента = ""; - ФормаНастройкиЗначенийПоУмолчаниюБазыКорреспондента = ""; - ФормаНастройкиУзлов = ""; - - НастройкаОтборовНаУзлеБазыКорреспондента = ОбменДаннымиСервер.НастройкаОтборовНаУзлеБазыКорреспондента( - Объект.ИмяПланаОбмена, - ВерсияКонфигурацииКорреспондента, - ФормаНастройкиУзлаБазыКорреспондента, - Объект.ВариантНастройкиОбмена); - - ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента = ОбменДаннымиСервер.ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента( - Объект.ИмяПланаОбмена, - ВерсияКонфигурацииКорреспондента, - ФормаНастройкиЗначенийПоУмолчаниюБазыКорреспондента, - Объект.ВариантНастройкиОбмена); - - ФормаНастройкиУзлаБазыКорреспондента = ЗначенияНастроекПланаОбмена.ИмяФормыОтборовКорреспондента; - - ФормаНастройкиЗначенийПоУмолчаниюБазыКорреспондента = ЗначенияНастроекПланаОбмена.ИмяФормыЗначенийПоУмолчаниюКорреспондента; - ФормаНастройкиУзлов = ЗначенияНастроекПланаОбмена.ИмяФормыОбщиеДанныеУзлов; - - НастройкаОтборовНаУзлеБазыКорреспондента = ЗначенияНастроекПланаОбмена.ОтборыКорреспондента; - - ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента = ЗначенияНастроекПланаОбмена.ЗначенияПоУмолчаниюКорреспондента; - - ОбновитьОписаниеОграниченийПередачиДанныхБазыКорреспондента(НастройкаОтборовНаУзлеБазыКорреспондента); - ОбновитьОписаниеЗначенийПоУмолчаниюБазыКорреспондента(ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента); - - НастройкиПараметровУчетаКорреспондентаПоясняющаяНадпись = ЗначенияНастроекПланаОбмена. - ПояснениеДляНастройкиПараметровУчетаБазыКорреспондента; - - НастройкиПараметровУчетаКорреспондентаПоясняющаяНадпись = ЗначенияНастроекПланаОбмена.ПояснениеДляНастройкиПараметровУчета; - - // Управление видимостью связанных элементов. - ПредусмотреныНастройкиОтборовНаУзлеБазыКорреспондента = НастройкаОтборовНаУзлеБазыКорреспондента.Количество() > 0 - И ЗначенияНастроекПланаОбмена.ОтображатьНастройкуОтборовНаУзлеБазыКорреспондента; - ПредусмотреныЗначенияПоУмолчаниюНаУзлеБазыКорреспондента = ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента.Количество() > 0 - И ЗначенияНастроекПланаОбмена.ОтображатьЗначенияПоУмолчаниюНаУзлеБазыКорреспондента; - - Элементы.РамкаГруппыОграничений4.Видимость = ПредусмотреныНастройкиОтборовНаУзлеБазыКорреспондента; - Элементы.РамкаГруппыЗначенийПоУмолчанию4.Видимость = ПредусмотреныЗначенияПоУмолчаниюНаУзлеБазыКорреспондента; - Элементы.РамкаГруппыЗначенийПоУмолчаниюБазыКорреспондента.Видимость = ПредусмотреныЗначенияПоУмолчаниюНаУзлеБазыКорреспондента; - -КонецПроцедуры - -&НаСервере -Процедура ОбновитьОписаниеОграниченийПередачиДанных(НастройкаОтборовНаУзле) - - ОписаниеОграниченийПередачиДанных = ОбменДаннымиСервер.ОписаниеОграниченийПередачиДанных( - Объект.ИмяПланаОбмена, - НастройкаОтборовНаУзле, - ВерсияКонфигурацииКорреспондента, - Объект.ВариантНастройкиОбмена); - -КонецПроцедуры - -&НаСервере -Процедура ОбновитьОписаниеОграниченийПередачиДанныхБазыКорреспондента(НастройкаОтборовНаУзлеБазыКорреспондента) - ОписаниеОграниченийПередачиДанныхБазыКорреспондента = ОбменДаннымиСервер.ОписаниеОграниченийПередачиДанныхБазыКорреспондента( - Объект.ИмяПланаОбмена, - НастройкаОтборовНаУзлеБазыКорреспондента, - ВерсияКонфигурацииКорреспондента, - Объект.ВариантНастройкиОбмена); - -КонецПроцедуры - -&НаСервере -Процедура ОбновитьОписаниеЗначенийПоУмолчанию(ЗначенияПоУмолчаниюНаУзле) - - ОписаниеЗначенийПоУмолчанию = ОбменДаннымиСервер.ОписаниеЗначенийПоУмолчанию( - Объект.ИмяПланаОбмена, - ЗначенияПоУмолчаниюНаУзле, - ВерсияКонфигурацииКорреспондента, - Объект.ВариантНастройкиОбмена); - -КонецПроцедуры - -&НаСервере -Процедура ОбновитьОписаниеЗначенийПоУмолчаниюБазыКорреспондента(ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента) - ОписаниеЗначенийПоУмолчаниюБазыКорреспондента = ОбменДаннымиСервер.ОписаниеЗначенийПоУмолчаниюБазыКорреспондента( - Объект.ИмяПланаОбмена, - ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента, - ВерсияКонфигурацииКорреспондента, - Объект.ВариантНастройкиОбмена); - -КонецПроцедуры - -#КонецОбласти - -#Область Прочее - -&НаКлиенте -Процедура ВыполнитьПереходДалее() - - ИзменитьПорядковыйНомерПерехода(+1); - -КонецПроцедуры - -&НаКлиенте -Процедура ВыполнитьКомандуГотово(Знач ЗакрыватьФорму = Истина) - - Отказ = Ложь; - Если РежимРаботыМастера = "ОбменЧерезВнешнееСоединение" Тогда - ЗавершениеНастройкиОбменаЧерезВнешнееСоединение(ЗакрыватьФорму); - - ИначеЕсли РежимРаботыМастера = "ОбменЧерезВебСервис" Тогда - ЗавершениеНастройкиОбменаЧерезВебСервис(); - - ИначеЕсли РежимРаботыМастера = "ОбменЧерезОбычныеКаналыСвязи" Тогда - Если ВариантРаботыМастера = "НастроитьНовыйОбменДанными" Тогда - ЗавершениеПервогоЭтапаНастройкиОбменаЧерезОбычныеКаналыСвязи(Отказ); - Если ВыполнитьОбменДаннымиСейчас - И ВыполнитьСозданиеНачальногоОбразаСейчас - И ВыполнитьИнтерактивныйОбменДаннымиСейчас Тогда - // Надо дождаться окончания выгрузки и только потом закрывать форму. - Возврат; - КонецЕсли; - ИначеЕсли ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" Тогда - ЗавершениеВторогоЭтапаНастройкиОбменаЧерезОбычныеКаналыСвязи(Отказ, ЗакрыватьФорму); - - КонецЕсли; - - КонецЕсли; - - Если Отказ Тогда - Возврат; - КонецЕсли; - - ОбновитьИнтерфейс(); - - Если ЗакрыватьФорму Тогда - ЗакрытьФормуБезусловно = Истина; - Закрыть(); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура НадписьРезервноеКопированиеОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) - - Если НавигационнаяСсылкаФорматированнойСтроки = "СоздатьРезервнуюКопию" Тогда - - СтандартнаяОбработка = Ложь; - - ОбщегоНазначенияКлиент.ПредложитьПользователюСоздатьРезервнуюКопию(); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПредопределенноеРасписаниеОбменаДаннымиПриИзмененииЗначения() - - ИспользоватьПользовательскоеРасписание = (ПредопределенноеРасписаниеОбменаДанными = "ДругоеРасписание"); - - Элементы.СтраницыПользовательскогоРасписания.ТекущаяСтраница = ?(ИспользоватьПользовательскоеРасписание, - Элементы.СтраницаПользовательскогоРасписания, - Элементы.ПустаяСтраницаПользовательскогоРасписания); - -КонецПроцедуры - -&НаКлиенте -Процедура ВыполнятьОбменДаннымиАвтоматическиПриИзмененииЗначения() - - Элементы.СтраницыПредопределенногоРасписания.ТекущаяСтраница = ?(ВыполнятьОбменДаннымиАвтоматически, - Элементы.СтраницаПредопределенногоРасписания, - Элементы.НедоступнаяСтраницаПредопределенногоРасписания); - -КонецПроцедуры - -&НаКлиенте -Процедура ИзменитьПорядковыйНомерПерехода(Итератор) - - ОчиститьСообщения(); - - УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + Итератор); - -КонецПроцедуры - -&НаКлиенте -Процедура УстановитьПорядковыйНомерПерехода(Знач Значение) - - ЭтоПереходДалее = (Значение > ПорядковыйНомерПерехода); - - ПорядковыйНомерПерехода = Значение; - - Если ПорядковыйНомерПерехода < 1 Тогда - - ПорядковыйНомерПерехода = 1; - - КонецЕсли; - - ПорядковыйНомерПереходаПриИзменении(ЭтоПереходДалее); - -КонецПроцедуры - -&НаКлиенте -Процедура ПорядковыйНомерПереходаПриИзменении(Знач ЭтоПереходДалее) - - // Выполняем обработчики событий перехода. - ВыполнитьОбработчикиСобытийПерехода(ЭтоПереходДалее); - - // Устанавливаем отображение страниц. - СтрокиПереходаТекущие = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода)); - - Если СтрокиПереходаТекущие.Количество() = 0 Тогда - ВызватьИсключение НСтр("ru = 'Не определена страница для отображения.'"); - КонецЕсли; - - СтрокаПереходаТекущая = СтрокиПереходаТекущие[0]; - - Элементы.ПанельОсновная.ТекущаяСтраница = Элементы[СтрокаПереходаТекущая.ИмяОсновнойСтраницы]; - Элементы.ПанельНавигации.ТекущаяСтраница = Элементы[СтрокаПереходаТекущая.ИмяСтраницыНавигации]; - - // Устанавливаем текущую кнопку по умолчанию. - КнопкаДалее = ПолучитьКнопкуФормыПоИмениКоманды(Элементы.ПанельНавигации.ТекущаяСтраница, "КомандаДалее"); - - Если КнопкаДалее <> Неопределено Тогда - - КнопкаДалее.КнопкаПоУмолчанию = Истина; - - Иначе - - КнопкаГотово = ПолучитьКнопкуФормыПоИмениКоманды(Элементы.ПанельНавигации.ТекущаяСтраница, "КомандаГотово"); - - Если КнопкаГотово <> Неопределено Тогда - - КнопкаГотово.КнопкаПоУмолчанию = Истина; - - КонецЕсли; - - КонецЕсли; - - Если ЭтоПереходДалее И СтрокаПереходаТекущая.ДлительнаяОперация Тогда - - ПодключитьОбработчикОжидания("ВыполнитьОбработчикДлительнойОперации", 0.1, Истина); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ВыполнитьОбработчикиСобытийПерехода(Знач ЭтоПереходДалее) - - // Обработчики событий переходов. - Если ЭтоПереходДалее Тогда - - СтрокиПерехода = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода - 1)); - - Если СтрокиПерехода.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - СтрокаПерехода = СтрокиПерехода[0]; - - // Обработчик ПриПереходеДалее. - Если Не ПустаяСтрока(СтрокаПерехода.ИмяОбработчикаПриПереходеДалее) - И Не СтрокаПерехода.ДлительнаяОперация Тогда - - ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ)"; - ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПерехода.ИмяОбработчикаПриПереходеДалее); - - Отказ = Ложь; - - РезультатВычисления = Вычислить(ИмяПроцедуры); - - Если Отказ Тогда - - УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); - - Возврат; - - КонецЕсли; - - КонецЕсли; - - Иначе - - СтрокиПерехода = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода + 1)); - - Если СтрокиПерехода.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - СтрокаПерехода = СтрокиПерехода[0]; - - // Обработчик ПриПереходеНазад. - Если Не ПустаяСтрока(СтрокаПерехода.ИмяОбработчикаПриПереходеНазад) - И Не СтрокаПерехода.ДлительнаяОперация Тогда - - ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ)"; - ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПерехода.ИмяОбработчикаПриПереходеНазад); - - Отказ = Ложь; - - РезультатВычисления = Вычислить(ИмяПроцедуры); - - Если Отказ Тогда - - УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); - - Возврат; - - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - - СтрокиПереходаТекущие = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода)); - - Если СтрокиПереходаТекущие.Количество() = 0 Тогда - ВызватьИсключение НСтр("ru = 'Не определена страница для отображения.'"); - КонецЕсли; - - СтрокаПереходаТекущая = СтрокиПереходаТекущие[0]; - - Если СтрокаПереходаТекущая.ДлительнаяОперация И Не ЭтоПереходДалее Тогда - - УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); - Возврат; - КонецЕсли; - - // обработчик ПриОткрытии - Если Не ПустаяСтрока(СтрокаПереходаТекущая.ИмяОбработчикаПриОткрытии) Тогда - - ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ, ПропуститьСтраницу, ЭтоПереходДалее)"; - ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПереходаТекущая.ИмяОбработчикаПриОткрытии); - - Отказ = Ложь; - ПропуститьСтраницу = Ложь; - - РезультатВычисления = Вычислить(ИмяПроцедуры); - - Если Отказ Тогда - - УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); - - Возврат; - - ИначеЕсли ПропуститьСтраницу Тогда - - Если ЭтоПереходДалее Тогда - - УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); - - Возврат; - - Иначе - - УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); - - Возврат; - - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ВыполнитьОбработчикДлительнойОперации() - - СтрокиПереходаТекущие = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода)); - - Если СтрокиПереходаТекущие.Количество() = 0 Тогда - ВызватьИсключение НСтр("ru = 'Не определена страница для отображения.'"); - КонецЕсли; - - СтрокаПереходаТекущая = СтрокиПереходаТекущие[0]; - - // Обработчик ОбработкаДлительнойОперации. - Если Не ПустаяСтрока(СтрокаПереходаТекущая.ИмяОбработчикаДлительнойОперации) Тогда - - ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ, ПерейтиДалее)"; - ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПереходаТекущая.ИмяОбработчикаДлительнойОперации); - - Отказ = Ложь; - ПерейтиДалее = Истина; - - РезультатВычисления = Вычислить(ИмяПроцедуры); - - Если Отказ Тогда - - УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); - - Возврат; - - ИначеЕсли ПерейтиДалее Тогда - - УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); - - Возврат; - - КонецЕсли; - - Иначе - - УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); - - Возврат; - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Функция ПолучитьКнопкуФормыПоИмениКоманды(ЭлементФормы, ИмяКоманды) - - Для Каждого Элемент Из ЭлементФормы.ПодчиненныеЭлементы Цикл - - Если ТипЗнч(Элемент) = Тип("ГруппаФормы") Тогда - - ЭлементФормыПоИмениКоманды = ПолучитьКнопкуФормыПоИмениКоманды(Элемент, ИмяКоманды); - - Если ЭлементФормыПоИмениКоманды <> Неопределено Тогда - - Возврат ЭлементФормыПоИмениКоманды; - - КонецЕсли; - - ИначеЕсли ТипЗнч(Элемент) = Тип("КнопкаФормы") - И СтрНайти(Элемент.ИмяКоманды, ИмяКоманды) > 0 Тогда - - Возврат Элемент; - - Иначе - - Продолжить; - - КонецЕсли; - - КонецЦикла; - - Возврат Неопределено; - -КонецФункции - -&НаСервере -Функция ПроверитьПодключениеCOMНаСервере() - - СтруктураНастроек = Новый Структура; - СтруктураНастроек.Вставить("COMАутентификацияОперационнойСистемы"); - СтруктураНастроек.Вставить("COMВариантРаботыИнформационнойБазы"); - СтруктураНастроек.Вставить("COMИмяИнформационнойБазыНаСервере1СПредприятия"); - СтруктураНастроек.Вставить("COMИмяПользователя"); - СтруктураНастроек.Вставить("COMИмяСервера1СПредприятия"); - СтруктураНастроек.Вставить("COMКаталогИнформационнойБазы"); - СтруктураНастроек.Вставить("COMПарольПользователя"); - ЗаполнитьЗначенияСвойств(СтруктураНастроек, Объект); - - Результат = ОбменДаннымиСервер.УстановитьВнешнееСоединениеСБазой(СтруктураНастроек); - Если Результат.Соединение = Неопределено Тогда - Возврат Результат.КраткоеОписаниеОшибки; - КонецЕсли; - Возврат ""; // успешно - -КонецФункции - -&НаКлиенте -Процедура РазрешитьРесурсЗавершение(Результат, ИмяРазрешения) Экспорт - - Если Результат = КодВозвратаДиалога.ОК Тогда - - ВнешниеРесурсыРазрешены[ИмяРазрешения] = Истина; - ИзменитьПорядковыйНомерПерехода(+1); - - КонецЕсли; - -КонецПроцедуры - -&НаСервереБезКонтекста -Функция СоздатьЗапросНаИспользованиеВнешнихРесурсов(Знач Объект, ЗапрашиватьCOM, - ЗапрашиватьFILE, ЗапрашиватьWS, ЗапрашиватьFTP) - - Запись = РегистрыСведений.НастройкиТранспортаОбмена.СоздатьМенеджерЗаписи(); - ЗаполнитьЗначенияСвойств(Запись, Объект); - Запись.Узел = Объект.СсылкаНового; - - ЗапросыРазрешений = Новый Массив; - - ПараметрыЗапроса = РегистрыСведений.НастройкиТранспортаОбмена.ПараметрыЗапросаНаИспользованиеВнешнихРесурсов(); - ПараметрыЗапроса.ЗапрашиватьCOM = ЗапрашиватьCOM; - ПараметрыЗапроса.ЗапрашиватьFILE = ЗапрашиватьFILE; - ПараметрыЗапроса.ЗапрашиватьWS = ЗапрашиватьWS; - ПараметрыЗапроса.ЗапрашиватьFTP = ЗапрашиватьFTP; - - РегистрыСведений.НастройкиТранспортаОбмена.ЗапросНаИспользованиеВнешнихРесурсов(ЗапросыРазрешений, - Запись, ПараметрыЗапроса); - - Возврат ЗапросыРазрешений; - -КонецФункции - -&НаКлиенте -Процедура ПроверитьПодключениеCOMЗавершение(Результат, ДополнительныеПараметры) Экспорт - - Если Результат = КодВозвратаДиалога.ОК Тогда - Элементы.ГруппаОшибкиПодключения.Видимость = Ложь; - ОчиститьСообщения(); - - Если ОбщегоНазначенияКлиент.ИнформационнаяБазаФайловая() Тогда - - ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель(Ложь); - - КонецЕсли; - - ТекстСообщения = ПроверитьПодключениеCOMНаСервере(); - Если ПустаяСтрока(ТекстСообщения) Тогда - ТекстСообщения = НСтр("ru = 'Проверка подключения успешно завершена.'"); - ПоказатьПредупреждение(,ТекстСообщения); - Иначе - Элементы.ГруппаОшибкиПодключения.Видимость = Истина; - ЭтоОшибкаРегистрацииКомпоненты = СтрНайти(ТекстСообщения, "2147221164") > 0; - ТекстРегистрацияКомпоненты = ""; - Если ЭтоОшибкаРегистрацииКомпоненты Тогда - ЭтоФайловаяИБ = ОбщегоНазначенияКлиент.ИнформационнаяБазаФайловая(); - ТекстРегистрацияКомпоненты = Символы.ПС - + НСтр("ru = 'Возможно, необходимо зарегистрировать COM-компоненту comcntr.dll'") - + ?(ЭтоФайловаяИБ, ".", НСтр("ru = ', после чего выполнить перезапуск сервера 1С:Предприятие.'")) - КонецЕсли; - - Элементы.ТекстОшибкиПроверкиПодключения.Заголовок = ТекстСообщения + ТекстРегистрацияКомпоненты; - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПроверитьПодключениеFILEЗавершение(Результат, ДополнительныеПараметры) Экспорт - - Если Результат = КодВозвратаДиалога.ОК Тогда - - ПроверитьПодключение("FILE"); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПроверитьПодключениеFTPЗавершение(Результат, ДополнительныеПараметры) Экспорт - - Если Результат = КодВозвратаДиалога.ОК Тогда - - ПроверитьПодключение("FTP"); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПроверитьПодключениеWSЗавершение(Результат, ДополнительныеПараметры) Экспорт - - Если Результат = КодВозвратаДиалога.ОК Тогда - - Отказ = Ложь; - - ПроверитьПодключениеWSНаКлиенте(Отказ); - - Если Не Отказ Тогда - - ПоказатьПредупреждение(, НСтр("ru = 'Подключение успешно установлено.'")); - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Функция НаименованиеВторойБазы() - - НаименованиеВторойБазы = ""; - - ТекстЗапроса = "ВЫБРАТЬ - | СозданныеОбмены.Ссылка - |ИЗ - | ПланОбмена.%ИмяПланаОбмена% КАК СозданныеОбмены - |ГДЕ - | СозданныеОбмены.Наименование = &Наименование - | И НЕ СозданныеОбмены.ЭтотУзел"; - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%ИмяПланаОбмена%", Объект.ИмяПланаОбмена); - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - Запрос.УстановитьПараметр("Наименование", СокрЛП(СинонимПланаОбмена)); - - РезультатЗапроса = Запрос.Выполнить().Выгрузить(); - - Если РезультатЗапроса.Количество() = 0 Тогда - НаименованиеВторойБазы = СинонимПланаОбмена; - Иначе - НомерНастраиваемогоОбмена = РезультатЗапроса.Количество() + 1; - НаименованиеВторойБазы = СокрЛП(СинонимПланаОбмена) + " (" + НомерНастраиваемогоОбмена +")"; - КонецЕсли; - - Возврат НаименованиеВторойБазы; - -КонецФункции - -#КонецОбласти - -#Область ОбработчикиОжидания - -&НаКлиенте -Процедура ОбработчикОжиданияДлительнойОперации() - - СтрокаСообщенияОбОшибке = ""; - - СостояниеОперации = ОбменДаннымиВызовСервера.СостояниеДлительнойОперации(ИдентификаторДлительнойОперации, - Объект.WSURLВебСервиса, - Объект.WSИмяПользователя, - Объект.WSПароль, - СтрокаСообщенияОбОшибке); - - Если СостояниеОперации = "Active" Тогда - - ПодключитьОбработчикОжидания("ОбработчикОжиданияДлительнойОперации", 5, Истина); - - ИначеЕсли СостояниеОперации = "Completed" Тогда - - ДлительнаяОперация = Ложь; - ДлительнаяОперацияЗавершена = Истина; - - КомандаДалее(Неопределено); - - Иначе // Failed, Canceled - - ЗаписатьОшибкуВЖурналРегистрации(СтрокаСообщенияОбОшибке, СобытиеЖурналаРегистрацииСозданиеОбменаДанными); - - ДлительнаяОперация = Ложь; - - КомандаНазад(Неопределено); - - ТекстВопроса = НСтр("ru = 'При создании синхронизации данных возникли ошибки. - |Перейти в журнал регистрации?'"); - - ПредложитьПерейтиВЖурналРегистрации(ТекстВопроса, СобытиеЖурналаРегистрацииСозданиеОбменаДанными); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ОбработчикОжиданияФоновогоЗадания() - - Состояние = ОбменДаннымиВызовСервера.СостояниеЗадания(ИдентификаторДлительнойОперации); - - Если Состояние = "Активно" Тогда - - ПодключитьОбработчикОжидания("ОбработчикОжиданияФоновогоЗадания", 5, Истина); - - ИначеЕсли Состояние = "Завершено" Тогда - - ДлительнаяОперация = Ложь; - ДлительнаяОперацияЗавершена = Истина; - - КомандаДалее(Неопределено); - - Иначе - - ДлительнаяОперация = Ложь; - - КомандаНазад(Неопределено); - - ТекстВопроса = НСтр("ru = 'При создании синхронизации данных возникли ошибки. - |Перейти в журнал регистрации?'"); - - ПредложитьПерейтиВЖурналРегистрации(ТекстВопроса, СобытиеЖурналаРегистрацииСозданиеОбменаДанными); - - КонецЕсли; - -КонецПроцедуры - -#КонецОбласти - -#Область ДругиеСлужебныеПроцедурыИФункции - -&НаСервере -Процедура НастроитьНовыйОбменДаннымиНаСервере(Отказ, НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле) - - Объект.ВариантРаботыМастера = ВариантРаботыМастера; - - ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); - - ОбработкаОбъект.ВыполнитьДействияПоНастройкеНовогоОбменаДанными(Отказ, НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле); - - ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект"); - -КонецПроцедуры - -&НаСервере -Процедура НастроитьНовыйОбменДаннымиНаСервереЧерезВнешнееСоединение(Отказ, НастройкаОтборовНаУзлеБазыКорреспондента, ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента) - - Объект.ВариантРаботыМастера = ВариантРаботыМастера; - - ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); - - ОбработкаОбъект.ВыполнитьДействияПоНастройкеНовогоОбменаДаннымиЧерезВнешнееСоединение(Отказ, НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле, НастройкаОтборовНаУзлеБазыКорреспондента, ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента); - - ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект"); - - Элементы.ВыполнитьИнтерактивныйОбменДаннымиСейчас.Заголовок = СтрЗаменить(Элементы.ВыполнитьИнтерактивныйОбменДаннымиСейчас.Заголовок, "%Программа%", СинонимПланаОбмена); - -КонецПроцедуры - -&НаСервере -Процедура НастроитьНовыйОбменДаннымиНаСервереЧерезВебСервис(Отказ) - - Объект.ВариантРаботыМастера = ВариантРаботыМастера; - - ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); - - КонтекстФормыНастройкиУзлов.Вставить("ЗначенияПоУмолчаниюНаУзле", ЗначенияПоУмолчаниюНаУзле); - КонтекстФормыНастройкиУзлов.Вставить("ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента", ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента); - - ОбработкаОбъект.ВыполнитьДействияПоНастройкеНовогоОбменаДаннымиЧерезВебСервисВДвухБазах(Отказ, - КонтекстФормыНастройкиУзлов, - ДлительнаяОперация, - ИдентификаторДлительнойОперации); - - ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект"); - -КонецПроцедуры - -&НаСервере -Процедура ОбновитьНастройкиОбменаДанными(Отказ) - - ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); - - ОбработкаОбъект.ОбновитьНастройкиОбменаДанными(Отказ, - ЗначенияПоУмолчаниюНаУзле, - ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента, - ДлительнаяОперация, - ИдентификаторДлительнойОперации); - - ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект"); - -КонецПроцедуры - -&НаСервере -Процедура УстановитьВидимостьНаСервере() - - Элементы.ПояснениеВыбораКаталогаОбменаИнформациейНаСервере.Видимость = Не ИнформационнаяБазаФайловая; - Элементы.FILEКаталогОбменаИнформацией.КнопкаВыбора = ИнформационнаяБазаФайловая; - - // Префикс источника. - - ПрефиксИсточникаКоллекцияЭлементов = Новый Массив; - ПрефиксИсточникаКоллекцияЭлементов.Добавить(Элементы.ПрефиксИнформационнойБазыИсточника); - ПрефиксИсточникаКоллекцияЭлементов.Добавить(Элементы.ПрефиксИнформационнойБазыИсточникаОбменССервисом); - ПрефиксИсточникаКоллекцияЭлементов.Добавить(Элементы.ПрефиксИнформационнойБазыИсточникаОбменЧерезВебСервис); - ПрефиксИсточникаКоллекцияЭлементов.Добавить(Элементы.ПрефиксИнформационнойБазыИсточникаОбменЧерезВнешнееСоединение); - - // В основном префикс нужен только для просмотра. - ПрефиксИсточникаДоступность = НЕ Объект.ПрефиксИнформационнойБазыИсточникаУстановлен - ИЛИ ЭтоПланОбменаРИБ; - Для Каждого ПрефиксИсточникаЭлемент Из ПрефиксИсточникаКоллекцияЭлементов Цикл - ПрефиксИсточникаЭлемент.Видимость = Объект.ИспользоватьПрефиксыДляНастройкиОбмена; - ПрефиксИсточникаЭлемент.Доступность = ПрефиксИсточникаДоступность; - КонецЦикла; - - // Префикс приемника для онлайн обменов с возможностью установки префикса в корреспонденте. - - ПрефиксПриемникаКоллекцияЭлементов = Новый Массив; - ПрефиксПриемникаКоллекцияЭлементов.Добавить(Элементы.ПрефиксИнформационнойБазыПриемника); - ПрефиксПриемникаКоллекцияЭлементов.Добавить(Элементы.ПрефиксИнформационнойБазыПриемникаОбменЧерезВнешнееСоединение); - ПрефиксПриемникаКоллекцияЭлементов.Добавить(Элементы.ПрефиксИнформационнойБазыПриемникаОбменЧерезВебСервис); - Для Каждого ПрефиксПриемникаЭлемент Из ПрефиксПриемникаКоллекцияЭлементов Цикл - ПрефиксПриемникаЭлемент.Видимость = Объект.ИспользоватьПрефиксыДляНастройкиОбмена; - КонецЦикла; - - Если Объект.ЭтоНастройкаРаспределеннойИнформационнойБазы Тогда - Элементы.СтраницыОтображенияФинальногоДействия.ТекущаяСтраница = Элементы.СтраницаВыполнитьСозданиеНачальногоОбразаПодчиненногоУзла; - Иначе - Элементы.СтраницыОтображенияФинальногоДействия.ТекущаяСтраница = Элементы.СтраницаВыполнитьВыгрузкуДанныхДляСопоставления; - Элементы.ГруппаПрогрессБарВыгрузка.Видимость = Ложь; - КонецЕсли; - - Если Объект.ЭтоНастройкаРаспределеннойИнформационнойБазы Тогда - - Элементы.ГруппаПереключателяВыбораРежимаРаботыПомощника.Видимость = Ложь; - - Элементы.ГруппаПереключателяВыбораРежимаРаботыПомощника.Заголовок = НСтр("ru = 'Создание начального образа подчиненного узла РИБ'"); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Функция ПредставлениеРезультатаТранспортСообщений() - - Если НастройкаОбменаССервисом Тогда - - Результат = НСтр("ru = 'Параметры подключения к приложению в сервисе: - |%1'"); - Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Результат, ПолучитьОписаниеНастроекТранспортаОбмена()); - - Иначе - - Результат = Строка(Объект.ВидТранспортаСообщенийОбмена) - + НСтр("ru = ', параметры:'") + Символы.ПС - + ПолучитьОписаниеНастроекТранспортаОбмена(); - КонецЕсли; - - Возврат Результат; -КонецФункции - -&НаКлиенте -Функция ПредставлениеРезультатаОтборыНаУзле() - - Возврат ?(ПустаяСтрока(ОписаниеОграниченийПередачиДанных), "", ОписаниеОграниченийПередачиДанных + Символы.ПС + Символы.ПС); - -КонецФункции - -&НаКлиенте -Функция ПредставлениеРезультатаОтборыНаУзлеБазыКорреспондента() - - Возврат ?(ПустаяСтрока(ОписаниеОграниченийПередачиДанныхБазыКорреспондента), "", ОписаниеОграниченийПередачиДанныхБазыКорреспондента + Символы.ПС + Символы.ПС); - -КонецФункции - -&НаКлиенте -Функция ПредставлениеРезультатаЗначенияПоУмолчаниюНаУзле() - - Возврат ?(ПустаяСтрока(ОписаниеЗначенийПоУмолчанию), "", ОписаниеЗначенийПоУмолчанию + Символы.ПС + Символы.ПС); - -КонецФункции - -&НаКлиенте -Функция ПредставлениеРезультатаЗначенияПоУмолчаниюНаУзлеБазыКорреспондента() - - Возврат ?(ПустаяСтрока(ОписаниеЗначенийПоУмолчаниюБазыКорреспондента), "", ОписаниеЗначенийПоУмолчаниюБазыКорреспондента + Символы.ПС + Символы.ПС); - -КонецФункции - -&НаСервере -Процедура ВыгрузитьНастройкиОбменаДляПриемника(Отказ, АдресВременногоХранилища) - - ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); - - ОбработкаОбъект.ВыполнитьВыгрузкуПараметровМастераВоВременноеХранилище(Отказ, АдресВременногоХранилища); - - ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект"); - -КонецПроцедуры - -&НаСервере -Процедура ЗагрузитьПараметрыМастера(Отказ, АдресВременногоХранилища) - - ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); - - ОбработкаОбъект.ВыполнитьЗагрузкуПараметровМастераИзВременногоХранилища(Отказ, АдресВременногоХранилища); - - ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект"); - - Элементы.НастройкиТранспортаFILE.Доступность = Объект.ИспользоватьПараметрыТранспортаFILE; - Элементы.НастройкиТранспортаFTP.Доступность = Объект.ИспользоватьПараметрыТранспортаFTP; - Элементы.НастройкиТранспортаEMAIL.Доступность = Объект.ИспользоватьПараметрыТранспортаEMAIL; - - Если Не Отказ Тогда - НастройкиЗачитаны = Истина; - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Функция ПолучитьОписаниеНастроекТранспортаОбмена() - - COMВариантРаботыИнформационнойБазы = 0; - COMАутентификацияОперационнойСистемы = Ложь; - - // Возвращаемое значение функции. - Результат = ""; - - ПредставленияНастроек = РегистрыСведений.НастройкиТранспортаОбмена.ПредставленияНастроекТранспорта(Объект.ВидТранспортаСообщенийОбмена); - - Для Каждого Элемент Из ПредставленияНастроек Цикл - - ЗначениеНастройки = Объект[Элемент.Ключ]; - - Если РежимРаботыМастера = "ОбменЧерезВнешнееСоединение" Тогда - - Если Элемент.Ключ = "COMВариантРаботыИнформационнойБазы" Тогда - - ЗначениеНастройки = ?(Объект[Элемент.Ключ] = 0, НСтр("ru = 'Файловый'"), НСтр("ru = 'Клиент-серверный'")); - - COMВариантРаботыИнформационнойБазы = Объект[Элемент.Ключ]; - - КонецЕсли; - - Если Элемент.Ключ = "COMАутентификацияОперационнойСистемы" Тогда - - COMАутентификацияОперационнойСистемы = Объект[Элемент.Ключ]; - - КонецЕсли; - - Если COMВариантРаботыИнформационнойБазы = 0 Тогда - - Если Элемент.Ключ = "COMИмяИнформационнойБазыНаСервере1СПредприятия" - ИЛИ Элемент.Ключ = "COMИмяСервера1СПредприятия" Тогда - Продолжить; - КонецЕсли; - - Иначе - - Если Элемент.Ключ = "COMКаталогИнформационнойБазы" Тогда - Продолжить; - КонецЕсли; - - КонецЕсли; - - Если COMАутентификацияОперационнойСистемы Тогда - - Если Элемент.Ключ = "COMИмяПользователя" Тогда - Продолжить; - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - - Если СтрНайти(ВРег(Элемент.Значение), "ПАРОЛЬ") <> 0 Тогда - - Продолжить; // Значения паролей не выводим. - - ИначеЕсли Не ТипЗначения(ЗначениеНастройки, "Число") - И Не ТипЗначения(ЗначениеНастройки, "Булево") - И Не ЗначениеЗаполнено(ЗначениеНастройки) Тогда - - // Если значение настройки не задано, то выводим значение "<пусто>". - ЗначениеНастройки = НСтр("ru = '<пусто>'"); - - КонецЕсли; - - СтрокаНастройки = "[Представление]: [Значение]"; // Не локализуется - СтрокаНастройки = СтрЗаменить(СтрокаНастройки, "[Представление]", Элемент.Значение); - СтрокаНастройки = СтрЗаменить(СтрокаНастройки, "[Значение]", ЗначениеНастройки); - - Результат = Результат + СтрокаНастройки + Символы.ПС; - - КонецЦикла; - - Если ПустаяСтрока(Результат) Тогда - - Результат = НСтр("ru = 'Настройки подключения не заданы.'"); - - КонецЕсли; - - Возврат Результат; - -КонецФункции - -&НаСервере -Функция ТипЗначения(Значение, ИмяТипа) - - Возврат ТипЗнч(Значение) = Тип(ИмяТипа); - -КонецФункции - -&НаКлиенте -Процедура ПроверитьПодключение(ВидТранспорта) - - Отказ = Ложь; - - ПроверитьПодключениеНаСервере(Отказ, ВидТранспорта); - - Если Не Отказ Тогда - - Если ВидТранспорта = ПредопределенноеЗначение("Перечисление.ВидыТранспортаСообщенийОбмена.FILE") Тогда - ТекстПредупреждения = НСтр("ru = 'Запись данных в указанный каталог разрешена.'"); - Иначе - ТекстПредупреждения = НСтр("ru = 'Подключение успешно установлено.'"); - КонецЕсли; - - ПоказатьПредупреждение(, ТекстПредупреждения); - - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ПроверитьПодключениеНаСервере(Отказ, ВидТранспорта) - - Если ТипЗнч(ВидТранспорта) = Тип("Строка") Тогда - - ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена[ВидТранспорта]; - - КонецЕсли; - - ОбменДаннымиСервер.ПроверитьПодключениеОбработкиТранспортаСообщенийОбмена(Отказ, Объект, ВидТранспорта); - -КонецПроцедуры - -&НаКлиенте -Процедура ПроверитьКорректностьПараметровПодключенияWS(Отказ) - - Если ПустаяСтрока(Объект.WSURLВебСервиса) Тогда - - НСтрока = НСтр("ru = 'Укажите адрес приложения в Интернете.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.WSURLВебСервиса",, Отказ); - - ИначеЕсли ПустаяСтрока(Объект.WSИмяПользователя) Тогда - - НСтрока = НСтр("ru = 'Укажите имя пользователя.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.WSИмяПользователя",, Отказ); - - ИначеЕсли ПустаяСтрока(Объект.WSПароль) Тогда - - НСтрока = НСтр("ru = 'Укажите пароль пользователя.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.WSПароль",, Отказ); - - Иначе - - Попытка - ОбменДаннымиКлиентСервер.ПроверитьКорректностьФорматаАдресаWSПрокси(Объект.WSURLВебСервиса); - Исключение - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), , "Объект.WSURLВебСервиса", , Отказ); - Возврат; - КонецПопытки; - - Попытка - ОбменДаннымиКлиентСервер.ПроверитьНедопустимыеСимволыВИмениПользователяWSПрокси(Объект.WSИмяПользователя); - Исключение - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()),, "Объект.WSИмяПользователя",, Отказ); - Возврат; - КонецПопытки; - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПроверитьПодключениеWSНаКлиенте(Отказ, РасширеннаяПроверка = Ложь) - - ПредлагатьПерейтиВЖурналРегистрации = Истина; - - ПроверитьПодключениеWSНаСервере(Отказ, РасширеннаяПроверка, ПредлагатьПерейтиВЖурналРегистрации); - - Если Отказ И ПредлагатьПерейтиВЖурналРегистрации Тогда - - ТекстВопроса = НСтр("ru = 'Ошибка установки подключения. - |Перейти в журнал регистрации?'"); - - ПредложитьПерейтиВЖурналРегистрации(ТекстВопроса, СобытиеЖурналаРегистрацииУстановкаПодключенияКWebСервису); - - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ПроверитьПодключениеWSНаСервере(Отказ, РасширеннаяПроверка, ПредлагатьПерейтиВЖурналРегистрации) - - ПараметрыПодключения = ОбменДаннымиСервер.СтруктураПараметровWS(); - - ЗаполнитьЗначенияСвойств(ПараметрыПодключения, Объект); - - WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси(ПараметрыПодключения); - - Если WSПрокси = Неопределено Тогда - Отказ = Истина; - Возврат; - КонецЕсли; - - ВерсииКорреспондента = ОбменДаннымиПовтИсп.ВерсииКорреспондента(ПараметрыПодключения); - - Объект.ВерсияКорреспондента_2_0_1_6 = (ВерсииКорреспондента.Найти("2.0.1.6") <> Неопределено); - Объект.ВерсияКорреспондента_2_1_1_7 = (ВерсииКорреспондента.Найти("2.1.1.7") <> Неопределено); - - Если Объект.ВерсияКорреспондента_2_1_1_7 Тогда - - WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси_2_1_1_7(ПараметрыПодключения); - - Если WSПрокси = Неопределено Тогда - Отказ = Истина; - Возврат; - КонецЕсли; - - ИначеЕсли Объект.ВерсияКорреспондента_2_0_1_6 Тогда - - WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси_2_0_1_6(ПараметрыПодключения); - - Если WSПрокси = Неопределено Тогда - Отказ = Истина; - Возврат; - КонецЕсли; - - КонецЕсли; - - Если РасширеннаяПроверка Тогда - - // Получаем параметры второй информационной базы. - ПредлагатьПерейтиВЖурналРегистрации = Ложь; - - Если Объект.ВерсияКорреспондента_2_1_1_7 Тогда - - ПараметрыПриемника = СериализаторXDTO.ПрочитатьXDTO(WSПрокси.GetIBParameters(Объект.ИмяПланаОбмена, "", "")); - - ИначеЕсли Объект.ВерсияКорреспондента_2_0_1_6 Тогда - - ПараметрыПриемника = СериализаторXDTO.ПрочитатьXDTO(WSПрокси.GetIBParameters(Объект.ИмяПланаОбмена, "", "")); - - Иначе - - ПараметрыПриемника = ЗначениеИзСтрокиВнутр(WSПрокси.GetIBParameters(Объект.ИмяПланаОбмена, "", "")); - - КонецЕсли; - - // {Обработчик: ПриПодключенииККорреспонденту} Начало - ВерсияКонфигурацииКорреспондента = Неопределено; - ПараметрыПриемника.Свойство("ВерсияКонфигурации", ВерсияКонфигурацииКорреспондента); - - ПриПодключенииККорреспонденту(Отказ, ВерсияКонфигурацииКорреспондента); - - Если Отказ Тогда - Возврат; - КонецЕсли; - // {Обработчик: ПриПодключенииККорреспонденту} Окончание - - Если Не ПараметрыПриемника.ПланОбменаСуществует Тогда - - Сообщение = НСтр("ru = 'Другая программа не предназначена для синхронизации с текущей.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Сообщение,,,, Отказ); - Возврат; - - КонецЕсли; - - Объект.КодУзлаКорреспондента = ПараметрыПриемника.КодЭтогоУзла; - - - Если Объект.ИспользоватьПрефиксыДляНастройкиОбмена Тогда - Объект.ПрефиксИнформационнойБазыПриемника = ПараметрыПриемника.ПрефиксИнформационнойБазы; - Объект.ПрефиксИнформационнойБазыПриемникаУстановлен = ЗначениеЗаполнено(Объект.ПрефиксИнформационнойБазыПриемника); - Если Не Объект.ПрефиксИнформационнойБазыПриемникаУстановлен Тогда - Объект.ПрефиксИнформационнойБазыПриемника = ПараметрыПриемника.ПрефиксИнформационнойБазыПоУмолчанию; - КонецЕсли; - Элементы.ПрефиксИнформационнойБазыПриемникаОбменЧерезВебСервис.Видимость = Не Объект.ПрефиксИнформационнойБазыПриемникаУстановлен; - Элементы.ПрефиксИнформационнойБазыПриемникаОбменЧерезВебСервис.ТолькоПросмотр = Объект.ПрефиксИнформационнойБазыПриемникаУстановлен; - Иначе - Объект.ИдентификаторИнформационнойБазыПриемника = ПараметрыПриемника.КодЭтогоУзла; - КонецЕсли; - - - // Проверка на существование обмена с базой-корреспондентом. - ПроверитьНаличиеСуществующегоОбменаДаннымиСВторойБазой(Отказ); - Если Отказ Тогда - Возврат; - КонецЕсли; - - Объект.НаименованиеВторойБазы = ПараметрыПриемника.НаименованиеИнформационнойБазы; - ЗаданоНаименованиеВторойБазы = Не ПустаяСтрока(Объект.НаименованиеВторойБазы); - - Элементы.НаименованиеВторойБазы1.ТолькоПросмотр = ЗаданоНаименованиеВторойБазы; - - Если Не ЗаданоНаименованиеВторойБазы Тогда - - Объект.НаименованиеВторойБазы = ПараметрыПриемника.НаименованиеИнформационнойБазыПоУмолчанию; - - КонецЕсли; - - ОбновитьНастройкиИИхОписанияЗначениямиПоУмолчанию(Истина); - ФормаНастройкиУзлов = ""; - ОбменДаннымиСервер.ОбщиеДанныеУзлов(Объект.ИмяПланаОбмена, ВерсияКонфигурацииКорреспондента, - Объект.ВариантНастройкиОбмена, ФормаНастройкиУзлов); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПредложитьПерейтиВЖурналРегистрации(ТекстВопроса, Знач Событие) - - ОписаниеОповещения = Новый ОписаниеОповещения("ПредложитьПерейтиВЖурналРегистрацииЗавершение", ЭтотОбъект, Событие); - ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет, ,КодВозвратаДиалога.Нет); - -КонецПроцедуры - -&НаКлиенте -Процедура ПредложитьПерейтиВЖурналРегистрацииЗавершение(Ответ, Событие) Экспорт - - Если Ответ = КодВозвратаДиалога.Да Тогда - - Отбор = Новый Структура("СобытиеЖурналаРегистрации", Событие); - - ОткрытьФорму("Обработка.ЖурналРегистрации.Форма", Отбор, ЭтотОбъект); - - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ЗаполнитьТаблицуПереходов() - - Если ВариантРаботыМастера = "НастроитьНовыйОбменДанными" Тогда - - Если РежимРаботыМастера = "ОбменЧерезВнешнееСоединение" Тогда - - ТаблицаПереходовНастройкиОбменаЧерезВнешнееСоединение(); - - ИначеЕсли РежимРаботыМастера = "ОбменЧерезОбычныеКаналыСвязи" Тогда - - ТаблицаПереходовПервогоЭтапаНастройкиОбмена(); - - ИначеЕсли РежимРаботыМастера = "ОбменЧерезВебСервис" Тогда - - Если НастройкаОбменаССервисом Тогда - - ТаблицаПереходовРасширеннойНастройкиОбменаССервисом(); - - Иначе - - ТаблицаПереходовНастройкиОбменаЧерезВебСервис(); - - КонецЕсли; - - КонецЕсли; - - Иначе // "ПродолжитьНастройкуОбменаДанными". - - ТаблицаПереходовВторогоЭтапаНастройкиОбмена(); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ВариантРаботыИнформационнойБазыПриИзменении() - - ТекущаяСтраница = ?(Объект.COMВариантРаботыИнформационнойБазы = 0, Элементы.СтраницаВариантРаботыФайловый, Элементы.СтраницаВариантРаботыКлиентСерверный); - - Элементы.ВариантыРаботыИнформационнойБазы.ТекущаяСтраница = ТекущаяСтраница; - -КонецПроцедуры - -&НаКлиенте -Процедура АутентификацияОперационнойСистемыПриИзменении() - - Объект.COMАутентификацияОперационнойСистемы = (ТипАутентификации = 1); - Элементы.COMИмяПользователя.Доступность = Не Объект.COMАутентификацияОперационнойСистемы; - Элементы.COMПарольПользователя.Доступность = Не Объект.COMАутентификацияОперационнойСистемы; - -КонецПроцедуры - -&НаСервере -Процедура ВариантРаботыМастераПриИзмененииНаСервере() - - Элементы.ИмяФайлаНастроекОбменаДаннымиДляЗагрузки.Доступность = ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" - И Не Объект.ЭтоНастройкаРаспределеннойИнформационнойБазы; - - Если ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" Тогда - - РежимРаботыМастера = "ОбменЧерезОбычныеКаналыСвязи"; - - Иначе - - Если НастройкаОбменаССервисом Тогда - - РежимРаботыМастера = "ОбменЧерезВебСервис"; - - ИначеЕсли ИспользоватьТранспортСообщенийОбменаCOM Тогда - - РежимРаботыМастера = "ОбменЧерезВнешнееСоединение"; - - ИначеЕсли ИспользоватьТранспортСообщенийОбменаWS Тогда - - РежимРаботыМастера = "ОбменЧерезВебСервис"; - - Иначе - - РежимРаботыМастера = "ОбменЧерезОбычныеКаналыСвязи"; - - КонецЕсли; - - КонецЕсли; - - ЗаполнитьТаблицуПереходов(); - -КонецПроцедуры - -&НаСервере -Процедура РежимРаботыМастераПриИзмененииНаСервере() - - ВсеНастройкиСтраниц = Новый Структура; - - ВариантНастроек = "ОбменЧерезВнешнееСоединение"; - ЗначенияНастроек = Новый Структура; - - ЗначенияНастроек.Вставить("Транспорт", Элементы.СтраницаПараметровТранспортаCOM); - ЗначенияНастроек.Вставить("Сообщения", Перечисления.ВидыТранспортаСообщенийОбмена.COM); - ЗначенияНастроек.Вставить("Использование", РежимРаботыМастера = ВариантНастроек Или ИспользоватьТранспортСообщенийОбменаCOM); - ВсеНастройкиСтраниц.Вставить(ВариантНастроек, ЗначенияНастроек); - - ВариантНастроек = "ОбменЧерезОбычныеКаналыСвязи"; - ЗначенияНастроек = Новый Структура; - ЗначенияНастроек.Вставить("Транспорт", Элементы.СтраницаПараметровТранспорта); - ЗначенияНастроек.Вставить("Сообщения", Перечисления.ВидыТранспортаСообщенийОбмена.FILE); - ЗначенияНастроек.Вставить("Использование", РежимРаботыМастера = ВариантНастроек Или ИспользоватьТранспортСообщенийОбменаFILE - Или ИспользоватьТранспортСообщенийОбменаFTP Или ИспользоватьТранспортСообщенийОбменаEMAIL); - ВсеНастройкиСтраниц.Вставить(ВариантНастроек, ЗначенияНастроек); - - ВариантНастроек = "ОбменЧерезВебСервис"; - ЗначенияНастроек = Новый Структура; - ЗначенияНастроек.Вставить("Транспорт", Элементы.СтраницаПараметровТранспортаWS); - ЗначенияНастроек.Вставить("Сообщения", Перечисления.ВидыТранспортаСообщенийОбмена.WS); - ЗначенияНастроек.Вставить("Использование", РежимРаботыМастера = ВариантНастроек Или ИспользоватьТранспортСообщенийОбменаWS); - ВсеНастройкиСтраниц.Вставить(ВариантНастроек, ЗначенияНастроек); - - // Реальные настройки - только те, которые допустимы. - СписокВыбораВариантов = Элементы.РежимРаботыМастера.СписокВыбора; - - Для Каждого КлючЗначение Из ВсеНастройкиСтраниц Цикл - ВариантНастроек = КлючЗначение.Ключ; - ЗначенияНастроек = КлючЗначение.Значение; - ВариантВСписке = СписокВыбораВариантов.НайтиПоЗначению(ВариантНастроек); - - Если ЗначенияНастроек.Использование Тогда - Если ВариантНастроек = РежимРаботыМастера Тогда - Элементы.СтраницыПараметровТранспорта.ТекущаяСтраница = ЗначенияНастроек.Транспорт; - Объект.ВидТранспортаСообщенийОбмена = ЗначенияНастроек.Сообщения; - КонецЕсли; - - Иначе - Если ВариантВСписке <> Неопределено Тогда - СписокВыбораВариантов.Удалить( ВариантВСписке ); - КонецЕсли; - - КонецЕсли; - - КонецЦикла; - - ЗаполнитьТаблицуПереходов(); -КонецПроцедуры - -&НаКлиенте -Функция СтруктураПараметровПодключенияВнешнегоСоединения(ТипСоединения = "ВнешнееСоединение") - - Результат = Неопределено; - - Если ТипСоединения = "ВнешнееСоединение" Тогда - - Результат = ОбщегоНазначенияКлиентСервер.СтруктураПараметровДляУстановкиВнешнегоСоединения(); - - Результат.ВариантРаботыИнформационнойБазы = Объект.COMВариантРаботыИнформационнойБазы; - Результат.КаталогИнформационнойБазы = Объект.COMКаталогИнформационнойБазы; - Результат.ИмяСервера1СПредприятия = Объект.COMИмяСервера1СПредприятия; - Результат.ИмяИнформационнойБазыНаСервере1СПредприятия = Объект.COMИмяИнформационнойБазыНаСервере1СПредприятия; - Результат.АутентификацияОперационнойСистемы = Объект.COMАутентификацияОперационнойСистемы; - Результат.ИмяПользователя = Объект.COMИмяПользователя; - Результат.ПарольПользователя = Объект.COMПарольПользователя; - - Результат.Вставить("ТипСоединения", ТипСоединения); - Результат.Вставить("ВерсияКорреспондента_2_0_1_6", Объект.ВерсияКорреспондента_2_0_1_6); - Результат.Вставить("ВерсияКорреспондента_2_1_1_7", Объект.ВерсияКорреспондента_2_1_1_7); - - ИначеЕсли ТипСоединения = "ВебСервис" Тогда - - Результат = Новый Структура; - Результат.Вставить("WSURLВебСервиса"); - Результат.Вставить("WSИмяПользователя"); - Результат.Вставить("WSПароль"); - - ЗаполнитьЗначенияСвойств(Результат, Объект); - - Результат.Вставить("ТипСоединения", ТипСоединения); - Результат.Вставить("ВерсияКорреспондента_2_0_1_6", Объект.ВерсияКорреспондента_2_0_1_6); - Результат.Вставить("ВерсияКорреспондента_2_1_1_7", Объект.ВерсияКорреспондента_2_1_1_7); - - КонецЕсли; - - Возврат Результат; -КонецФункции - -&НаКлиенте -Процедура ПроверитьЗаполнениеРеквизитовВФорме(Отказ, ИмяФормыДляПроверки, ПараметрыФормы, ИмяРеквизитаФормы) - - ПараметрыФормы.Вставить("ВерсияКорреспондента", ВерсияКонфигурацииКорреспондента); - ПараметрыФормы.Вставить("ИдентификаторНастройки", Объект.ВариантНастройкиОбмена); - - ИмяФормыНастройки = "ПланОбмена.[ИмяПланаОбмена].Форма.[ИмяФормы]"; - ИмяФормыНастройки = СтрЗаменить(ИмяФормыНастройки, "[ИмяПланаОбмена]", Объект.ИмяПланаОбмена); - ИмяФормыНастройки = СтрЗаменить(ИмяФормыНастройки, "[ИмяФормы]", ИмяФормыДляПроверки); - - ФормаНастройки = ПолучитьФорму(ИмяФормыНастройки, ПараметрыФормы, ЭтотОбъект); - - Если Не ФормаНастройки.ПроверитьЗаполнение() Тогда - - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Необходимо задать обязательные настройки.'"),,, ИмяРеквизитаФормы, Отказ); - - КонецЕсли; - -КонецПроцедуры - -&НаСервереБезКонтекста -Процедура ЗаписатьОшибкуВЖурналРегистрации(СтрокаСообщенияОбОшибке, Событие) - - ЗаписьЖурналаРегистрации(Событие, УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщенияОбОшибке); - -КонецПроцедуры - -&НаКлиенте -Процедура НастройкаОграниченийРегистрацииДанныхБазыКорреспондента(ТипСоединения) - - ИмяФормыНастройкиУзла = "ПланОбмена.[ИмяПланаОбмена].Форма.[ФормаНастройкиУзлаБазыКорреспондента]"; - ИмяФормыНастройкиУзла = СтрЗаменить(ИмяФормыНастройкиУзла, "[ИмяПланаОбмена]", Объект.ИмяПланаОбмена); - ИмяФормыНастройкиУзла = СтрЗаменить(ИмяФормыНастройкиУзла, "[ФормаНастройкиУзлаБазыКорреспондента]", ФормаНастройкиУзлаБазыКорреспондента); - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ВерсияКорреспондента", ВерсияКонфигурацииКорреспондента); - ПараметрыФормы.Вставить("ПараметрыВнешнегоСоединения", СтруктураПараметровПодключенияВнешнегоСоединения(ТипСоединения)); - ПараметрыФормы.Вставить("НастройкаОтборовНаУзле", НастройкаОтборовНаУзлеБазыКорреспондента); - ПараметрыФормы.Вставить("ИдентификаторНастройки", Объект.ВариантНастройкиОбмена); - - Обработчик = Новый ОписаниеОповещения("НастройкаОграниченийРегистрацииДанныхБазыКорреспондентаЗавершение", ЭтотОбъект); - Режим = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; - ОткрытьФорму(ИмяФормыНастройкиУзла, ПараметрыФормы, ЭтотОбъект,,,,Обработчик, Режим); - -КонецПроцедуры - -&НаКлиенте -Процедура НастройкаОграниченийРегистрацииДанныхБазыКорреспондентаЗавершение(Результат, ДополнительныеПараметры) Экспорт - - Если Результат <> Неопределено Тогда - - Для Каждого НастройкаОтбора Из НастройкаОтборовНаУзлеБазыКорреспондента Цикл - - НастройкаОтборовНаУзлеБазыКорреспондента[НастройкаОтбора.Ключ] = Результат[НастройкаОтбора.Ключ]; - - КонецЦикла; - - // вызов сервера - ОбновитьОписаниеОграниченийПередачиДанныхБазыКорреспондента(НастройкаОтборовНаУзлеБазыКорреспондента); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура НастройкаЗначенийПоУмолчаниюБазыКорреспондента(ТипСоединения) - - ИмяФормыНастройкиУзла = "ПланОбмена.[ИмяПланаОбмена].Форма.[ФормаНастройкиЗначенийПоУмолчаниюБазыКорреспондента]"; - ИмяФормыНастройкиУзла = СтрЗаменить(ИмяФормыНастройкиУзла, "[ИмяПланаОбмена]", Объект.ИмяПланаОбмена); - ИмяФормыНастройкиУзла = СтрЗаменить(ИмяФормыНастройкиУзла, "[ФормаНастройкиЗначенийПоУмолчаниюБазыКорреспондента]", ФормаНастройкиЗначенийПоУмолчаниюБазыКорреспондента); - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ВерсияКорреспондента", ВерсияКонфигурацииКорреспондента); - ПараметрыФормы.Вставить("ПараметрыВнешнегоСоединения", СтруктураПараметровПодключенияВнешнегоСоединения(ТипСоединения)); - ПараметрыФормы.Вставить("ЗначенияПоУмолчаниюНаУзле", ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента); - ПараметрыФормы.Вставить("ИдентификаторНастройки", Объект.ВариантНастройкиОбмена); - - Обработчик = Новый ОписаниеОповещения("НастройкаЗначенийПоУмолчаниюБазыКорреспондентаЗавершение", ЭтотОбъект); - Режим = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; - ОткрытьФорму(ИмяФормыНастройкиУзла, ПараметрыФормы, ЭтотОбъект,,,,Обработчик, Режим); - -КонецПроцедуры - -&НаКлиенте -Процедура НастройкаЗначенийПоУмолчаниюБазыКорреспондентаЗавершение(Результат, ДополнительныеПараметры) Экспорт - - Если Результат <> Неопределено Тогда - - Для Каждого НастройкаОтбора Из ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента Цикл - - ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента[НастройкаОтбора.Ключ] = Результат[НастройкаОтбора.Ключ]; - - КонецЦикла; - - // вызов сервера - ОбновитьОписаниеЗначенийПоУмолчаниюБазыКорреспондента(ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ЗавершениеНастройкиОбменаЧерезВнешнееСоединение(Знач ОткрыватьПослеЗакрытияТекущей) - - Если ВыполнитьИнтерактивныйОбменДаннымиСейчас Тогда - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("УзелИнформационнойБазы", Объект.УзелИнформационнойБазы); - ПараметрыФормы.Вставить("ВидТранспортаСообщенийОбмена", Объект.ВидТранспортаСообщенийОбмена); - ПараметрыФормы.Вставить("ВыполнитьСопоставлениеПриОткрытии", Ложь); - ПараметрыФормы.Вставить("РасширенныйРежимДополненияВыгрузки", Истина); - - Если ОткрыватьПослеЗакрытияТекущей Тогда - ПараметрыОткрытия = Новый Структура; - ПараметрыОткрытия.Вставить("РежимОткрытияОкна", РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); - ОбменДаннымиКлиент.ОткрытьФормуПослеЗакрытияТекущей(ЭтотОбъект, "Обработка.ПомощникИнтерактивногоОбменаДанными.Форма", ПараметрыФормы, ПараметрыОткрытия); - - Иначе - ОткрытьФорму("Обработка.ПомощникИнтерактивногоОбменаДанными.Форма", ПараметрыФормы); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ЗавершениеНастройкиОбменаЧерезВебСервис() - - Если ВыполнятьОбменДаннымиАвтоматически Тогда - - ЗавершениеНастройкиОбменаЧерезВебСервисНаСервере(Объект.УзелИнформационнойБазы, ПредопределенноеРасписаниеОбменаДанными, РасписаниеВыполненияОбменаДанными); - - КонецЕсли; - -КонецПроцедуры - -&НаСервереБезКонтекста -Процедура ЗавершениеНастройкиОбменаЧерезВебСервисНаСервере(УзелИнформационнойБазы, ПредопределенноеРасписание, Расписание) - - УстановитьПривилегированныйРежим(Истина); - - РасписаниеСценария = Неопределено; - - Если ПредопределенноеРасписание = "Каждые15Минут" Тогда - - РасписаниеСценария = ПредопределенноеРасписаниеКаждые15Минут(); - - ИначеЕсли ПредопределенноеРасписание = "Каждые30Минут" Тогда - - РасписаниеСценария = ПредопределенноеРасписаниеКаждые30Минут(); - - ИначеЕсли ПредопределенноеРасписание = "КаждыйЧас" Тогда - - РасписаниеСценария = ПредопределенноеРасписаниеКаждыйЧас(); - - ИначеЕсли ПредопределенноеРасписание = "КаждыйДеньВ_8_00" Тогда - - РасписаниеСценария = ПредопределенноеРасписаниеКаждыйДеньВ_8_00(); - - ИначеЕсли ПредопределенноеРасписание = "ДругоеРасписание" Тогда - - РасписаниеСценария = Расписание; - - КонецЕсли; - - Если РасписаниеСценария <> Неопределено Тогда - - Справочники.СценарииОбменовДанными.СоздатьСценарий(УзелИнформационнойБазы, РасписаниеСценария); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ЗавершениеПервогоЭтапаНастройкиОбменаЧерезОбычныеКаналыСвязи(Отказ) - - ОчиститьСообщения(); - - Если Не Объект.ЭтоНастройкаРаспределеннойИнформационнойБазы - И Не ФайлНастроекОбменаДаннымиСохранен Тогда - - НСтрока = НСтр("ru = 'Сохраните файл с настройками для другой программы'"); - - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,,"Объект.ИмяФайлаНастроекСинхронизацииДанных",, Отказ); - Возврат; - КонецЕсли; - - Если Объект.ЭтоНастройкаРаспределеннойИнформационнойБазы Тогда - - Если ВыполнитьСозданиеНачальногоОбразаСейчас Тогда - - ПараметрыФормы = Новый Структура("Ключ, Узел", Объект.УзелИнформационнойБазы, Объект.УзелИнформационнойБазы); - - Режим = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; - Обработчик = Новый ОписаниеОповещения("ЗакрытьФормуПослеСозданияНачальногоОбраза", ЭтотОбъект); - ОткрытьФорму(ИмяФормыСозданияНачальногоОбраза, ПараметрыФормы,,,,, Обработчик, Режим); - Отказ = Истина; - - КонецЕсли; - - Иначе - - Если ВыполнитьОбменДаннымиСейчас Тогда - - // Видимость прогресс-бара - Если РежимРаботыМастера <> "ОбменЧерезВебСервис" - ИЛИ РежимРаботыМастера = "ОбменЧерезВнешнееСоединение" - ИЛИ РежимРаботыМастера = "ОбменЧерезОбычныеКаналыСвязи" Тогда - Элементы.ГруппаПрогрессБарВыгрузка.Видимость = Истина; - КонецЕсли; - - ЭтотОбъект.ТолькоПросмотр = Истина; - Элементы.КомандаГотово6.Доступность = Ложь; - Элементы.КомандаГотово7.Доступность = Ложь; - - ПараметрыМетода = Новый Структура; - ПараметрыМетода.Вставить("Отказ", Отказ); - ПараметрыМетода.Вставить("УзелИнформационнойБазы", Объект.УзелИнформационнойБазы); - ПараметрыМетода.Вставить("ВыполнятьЗагрузку", Ложь); - ПараметрыМетода.Вставить("ВыполнятьВыгрузку", Истина); - ПараметрыМетода.Вставить("ВидТранспортаСообщенийОбмена", Объект.ВидТранспортаСообщенийОбмена); - - ДлительнаяОперация = Ложь; - ДлительнаяОперацияЗавершена = Ложь; - ИдентификаторДлительнойОперации = ""; - - ПараметрыЗадания = ПараметрыФоновогоЗадания(); - ПараметрыЗадания.ВыполняемыйМетод = "Обработки.ВыполнениеОбменаДанными.ВыполнитьЗапускОбменаДанными"; - ПараметрыЗадания.ПараметрыМетода = ПараметрыМетода; - ПараметрыЗадания.НаименованиеЗадания = НСтр("ru = 'Выгрузка данных'"); - ПараметрыЗадания.ОбработчикЗавершения = "ЗавершениеВыгрузкиДанных"; - - ФоновоеЗаданиеЗапуститьНаКлиенте(ПараметрыЗадания, Отказ); - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ЗавершениеВыгрузкиДанных() - - Если РезультатВыполненияФоновогоЗадания.Статус = "Ошибка" Тогда - СообщениеОбОшибке = РезультатВыполненияФоновогоЗадания.ПодробноеПредставлениеОшибки; - ИначеЕсли РезультатВыполненияФоновогоЗадания.Статус = "Отменено" Тогда - СообщениеОбОшибке = НСтр("ru = 'Действие отменено пользователем.'"); - Иначе - - РезультатВыполнения = ПолучитьРезультатВыполненияФоновогоЗаданияНаСервере(); - - Если РезультатВыполнения.Отказ Тогда - СообщениеОбОшибке = НСтр("ru = 'Во время отправки данных возникли ошибки(см. журнал регистрации).'"); - КонецЕсли; - - КонецЕсли; - - ДопИнформацияВыполнение = ""; - ДлительнаяОперация = Ложь; - ПоказатьОповещениеПользователя(НСтр("ru = 'Отправка данных завершена'")); - - Если ЗначениеЗаполнено(СообщениеОбОшибке) Тогда - - ОбменДаннымиВызовСервера.ЗафиксироватьЗавершениеОбменаСОшибкой( - Объект.УзелИнформационнойБазы, - "ВыгрузкаДанных", - ДатаНачалаОперации, - СообщениеОбОшибке); - - ПоказатьПредупреждение(, СообщениеОбОшибке); - - ПроцентВыполнения = 0; - ВыполнитьОбменДаннымиСейчас = Ложь; - - ЭтотОбъект.ТолькоПросмотр = Ложь; - Элементы.КомандаГотово6.Доступность = Истина; - Элементы.КомандаГотово7.Доступность = Истина; - - Иначе - ПроцентВыполнения = 100; - ПодключитьОбработчикОжидания("ЗакрытьФормуОтложенно", 1, Истина); - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Функция ПолучитьРезультатВыполненияФоновогоЗаданияНаСервере() - - РезультатВыполнения = ПолучитьИзВременногоХранилища(РезультатВыполненияФоновогоЗадания.АдресРезультата); - Возврат РезультатВыполнения; - -КонецФункции - -&НаКлиенте -Процедура ЗакрытьФормуПослеСозданияНачальногоОбраза(Результат, ДополнительныеПараметры) Экспорт - - ОбновитьИнтерфейс(); - - ЗакрытьФормуБезусловно = Истина; - Закрыть(); - -КонецПроцедуры - -&НаКлиенте -Процедура ЗавершениеВторогоЭтапаНастройкиОбменаЧерезОбычныеКаналыСвязи(Отказ, Знач ОткрыватьПослеЗакрытияТекущей) - - НастроитьНовыйОбменДаннымиНаСервере(Отказ, НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле); - - Если Отказ Тогда - - ПоказатьПредупреждение(, НСтр("ru = 'При создании настройки синхронизации данных возникли ошибки.'")); - Возврат; - КонецЕсли; - - ОткрытьПомощникСопоставления = Не Объект.ЭтоНастройкаРаспределеннойИнформационнойБазы И Не Объект.ЭтоНастройкаСтандартногоОбмена; - - Если ОткрытьПомощникСопоставления Тогда - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("УзелИнформационнойБазы", Объект.УзелИнформационнойБазы); - ПараметрыФормы.Вставить("ВидТранспортаСообщенийОбмена", Объект.ВидТранспортаСообщенийОбмена); - ПараметрыФормы.Вставить("ВыполнитьСопоставлениеПриОткрытии", Ложь); - ПараметрыФормы.Вставить("РасширенныйРежимДополненияВыгрузки", Истина); - - ИмяФормыПомощника = "Обработка.ПомощникИнтерактивногоОбменаДанными.Форма"; - Если ОткрыватьПослеЗакрытияТекущей Тогда - ПараметрыОткрытия = Новый Структура; - ПараметрыОткрытия.Вставить("РежимОткрытияОкна", РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); - ОбменДаннымиКлиент.ОткрытьФормуПослеЗакрытияТекущей(ЭтотОбъект, ИмяФормыПомощника, ПараметрыФормы, ПараметрыОткрытия); - Иначе - ОткрытьФорму(ИмяФормыПомощника, ПараметрыФормы); - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ОткрытьФормуСопоставления() - - ТекущиеДанные = Элементы.ДеревоИнформацииСтатистики.ТекущиеДанные; - - Если ТекущиеДанные = Неопределено Тогда - Возврат; - КонецЕсли; - - Если ПустаяСтрока(ТекущиеДанные.Ключ) Тогда - Возврат; - КонецЕсли; - - Если Не ТекущиеДанные.ИспользоватьПредварительныйПросмотр Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Для этих данных нельзя выполнить сопоставление.'")); - Возврат; - КонецЕсли; - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ИмяТаблицыПриемника", ТекущиеДанные.ИмяТаблицыПриемника); - ПараметрыФормы.Вставить("ИмяТипаОбъектаТаблицыИсточника", ТекущиеДанные.ТипОбъектаСтрокой); - ПараметрыФормы.Вставить("ПоляТаблицыПриемника", ТекущиеДанные.ПоляТаблицы); - ПараметрыФормы.Вставить("ПоляПоискаТаблицыПриемника", ТекущиеДанные.ПоляПоиска); - ПараметрыФормы.Вставить("ТипИсточникаСтрокой", ТекущиеДанные.ТипИсточникаСтрокой); - ПараметрыФормы.Вставить("ТипПриемникаСтрокой", ТекущиеДанные.ТипПриемникаСтрокой); - ПараметрыФормы.Вставить("ЭтоУдалениеОбъекта", ТекущиеДанные.ЭтоУдалениеОбъекта); - ПараметрыФормы.Вставить("ДанныеУспешноЗагружены", ТекущиеДанные.ДанныеУспешноЗагружены); - ПараметрыФормы.Вставить("Ключ", ТекущиеДанные.Ключ); - ПараметрыФормы.Вставить("Синоним", ТекущиеДанные.Синоним); - - ПараметрыФормы.Вставить("УзелИнформационнойБазы", Объект.УзелИнформационнойБазы); - ПараметрыФормы.Вставить("ИмяФайлаСообщенияОбмена", Объект.ИмяФайлаСообщенияОбмена); - - ПараметрыФормы.Вставить("ВыполнятьЗагрузкуДанных", Ложь); - - ОткрытьФорму("Обработка.СопоставлениеОбъектовИнформационныхБаз.Форма", ПараметрыФормы, ЭтотОбъект); - -КонецПроцедуры - -&НаКлиенте -Процедура РазвернутьДеревоИнформацииСтатистики(КлючСтроки = "") - - КоллекцияЭлементов = ДеревоИнформацииСтатистики.ПолучитьЭлементы(); - - Для Каждого СтрокаДерева Из КоллекцияЭлементов Цикл - - Элементы.ДеревоИнформацииСтатистики.Развернуть(СтрокаДерева.ПолучитьИдентификатор(), Истина); - - КонецЦикла; - - // Позиционирование курсора в дереве значений. - Если Не ПустаяСтрока(КлючСтроки) Тогда - - ИдентификаторСтроки = 0; - - ОбщегоНазначенияКлиентСервер.ПолучитьИдентификаторСтрокиДереваПоЗначениюПоля("Ключ", ИдентификаторСтроки, ДеревоИнформацииСтатистики.ПолучитьЭлементы(), КлючСтроки, Ложь); - - Элементы.ДеревоИнформацииСтатистики.ТекущаяСтрока = ИдентификаторСтроки; - - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ОбновитьДанныеСтатистикиСопоставленияНаСервере(Отказ, ПараметрыОповещения) - - СтрокиТаблицы = Объект.ИнформацияСтатистики.НайтиСтроки(Новый Структура("Ключ", ПараметрыОповещения.КлючУникальности)); - - ЗаполнитьЗначенияСвойств(СтрокиТаблицы[0], ПараметрыОповещения, "ДанныеУспешноЗагружены"); - - КлючиСтрок = Новый Массив; - КлючиСтрок.Добавить(ПараметрыОповещения.КлючУникальности); - - ОбновитьИнформациюСопоставленияПоСтрокеНаСервере(Отказ, КлючиСтрок); - -КонецПроцедуры - -&НаСервере -Процедура ОбновитьИнформациюСопоставленияПоСтрокеНаСервере(Отказ, КлючиСтрок) - - ИндексыСтрок = ПолучитьИндексыСтрокТаблицыИнформацииСтатистики(КлючиСтрок); - - ПомощникИнтерактивногоОбменаДанными = Обработки.ПомощникИнтерактивногоОбменаДанными.Создать(); - - ЗаполнитьЗначенияСвойств(ПомощникИнтерактивногоОбменаДанными, Объект,, "ИнформацияСтатистики"); - - ПомощникИнтерактивногоОбменаДанными.ИнформацияСтатистики.Загрузить(Объект.ИнформацияСтатистики.Выгрузить()); - - ПомощникИнтерактивногоОбменаДанными.ПолучитьСтатистикуСопоставленияОбъектовПоСтроке(Отказ, ИндексыСтрок); - - Если Не Отказ Тогда - - Объект.ИнформацияСтатистики.Загрузить(ПомощникИнтерактивногоОбменаДанными.ТаблицаИнформацииСтатистики()); - - СведенияОбИнформацииСтатистики(ПомощникИнтерактивногоОбменаДанными.ТаблицаИнформацииСтатистики()); - - УстановитьВидимостьГруппыДополнительнойИнформации(); - - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Функция ПолучитьИндексыСтрокТаблицыИнформацииСтатистики(КлючиСтрок) - - ИндексыСтрок = Новый Массив; - - Для Каждого Ключ Из КлючиСтрок Цикл - - СтрокиТаблицы = Объект.ИнформацияСтатистики.НайтиСтроки(Новый Структура("Ключ", Ключ)); - - ИндексСтроки = Объект.ИнформацияСтатистики.Индекс(СтрокиТаблицы[0]); - - ИндексыСтрок.Добавить(ИндексСтроки); - - КонецЦикла; - - Возврат ИндексыСтрок; - -КонецФункции - -&НаСервере -Процедура СведенияОбИнформацииСтатистики(ИнформацияСтатистики) - - КоллекцияЭлементовДерева = ДеревоИнформацииСтатистики.ПолучитьЭлементы(); - КоллекцияЭлементовДерева.Очистить(); - - ОбщегоНазначения.ЗаполнитьКоллекциюЭлементовДереваДанныхФормы(КоллекцияЭлементовДерева, - ОбменДаннымиСервер.ИнформацияСтатистики(ИнформацияСтатистики)); - -КонецПроцедуры - -&НаСервере -Процедура ПриПодключенииККорреспонденту(Отказ, Знач ВерсияКорреспондента) - - Если ВерсияКорреспондента = Неопределено - ИЛИ ПустаяСтрока(ВерсияКорреспондента) Тогда - - ВерсияКорреспондента = "0.0.0.0"; - КонецЕсли; - - Попытка - ОбменДаннымиСервер.ПриПодключенииККорреспонденту(Объект.ИмяПланаОбмена, ВерсияКорреспондента); - Исключение - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()),,,, Отказ); - ЗаписатьОшибкуВЖурналРегистрации( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'При выполнении обработчика ПриПодключенииККорреспонденту произошла ошибка:%1%2'"), - Символы.ПС, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())), - СобытиеЖурналаРегистрацииСозданиеОбменаДанными); - Возврат; - КонецПопытки; - -КонецПроцедуры - -&НаКлиенте -Процедура УдалитьНастройкуОбменаДанными(Результат, ДополнительныеПараметры) Экспорт - - Если Объект.УзелИнформационнойБазы <> Неопределено Тогда - - ОбменДаннымиВызовСервера.УдалитьНастройкуСинхронизации(Объект.УзелИнформационнойБазы); - - Оповестить("Запись_УзелПланаОбмена"); - - КонецЕсли; - -КонецПроцедуры - -// Был отказ от настройки РИБ, принимаем все умолчания. -&НаКлиенте -Процедура ОписаниеОповещенияОтказОтПродолженияРИБ(Знач Результат, ДополнительныеПараметры) Экспорт - - // Игнорируем все шаги, настройки должны быть заданы заранее. - ВыполнитьКомандуГотово(Ложь); - -КонецПроцедуры - -#КонецОбласти - -#Область ЗначенияКонстант - -&НаКлиентеНаСервереБезКонтекста -Функция НадписьДалееFTP() - - Возврат НСтр("ru = 'Нажмите кнопку ""Далее"" для настройки подключения через FTP-ресурс.'"); - -КонецФункции - -&НаКлиентеНаСервереБезКонтекста -Функция НадписьДалееEMAIL() - - Возврат НСтр("ru = 'Нажмите кнопку ""Далее"" для настройки подключения по почте.'"); - -КонецФункции - -&НаКлиентеНаСервереБезКонтекста -Функция НадписьДалееНастройки() - - Возврат НСтр("ru = 'Нажмите кнопку ""Далее"" для настройки дополнительных параметров синхронизации данных.'"); - -КонецФункции - -&НаСервереБезКонтекста -Функция ПредопределенноеРасписаниеКаждые15Минут() - - Месяцы = Новый Массив; - Месяцы.Добавить(1); - Месяцы.Добавить(2); - Месяцы.Добавить(3); - Месяцы.Добавить(4); - Месяцы.Добавить(5); - Месяцы.Добавить(6); - Месяцы.Добавить(7); - Месяцы.Добавить(8); - Месяцы.Добавить(9); - Месяцы.Добавить(10); - Месяцы.Добавить(11); - Месяцы.Добавить(12); - - ДниНедели = Новый Массив; - ДниНедели.Добавить(1); - ДниНедели.Добавить(2); - ДниНедели.Добавить(3); - ДниНедели.Добавить(4); - ДниНедели.Добавить(5); - ДниНедели.Добавить(6); - ДниНедели.Добавить(7); - - Расписание = Новый РасписаниеРегламентногоЗадания; - Расписание.Месяцы = Месяцы; - Расписание.ДниНедели = ДниНедели; - Расписание.ПериодПовтораВТечениеДня = 60*15; // 15 минут - Расписание.ПериодПовтораДней = 1; // каждый день - - Возврат Расписание; -КонецФункции - -&НаСервереБезКонтекста -Функция ПредопределенноеРасписаниеКаждые30Минут() - - Месяцы = Новый Массив; - Месяцы.Добавить(1); - Месяцы.Добавить(2); - Месяцы.Добавить(3); - Месяцы.Добавить(4); - Месяцы.Добавить(5); - Месяцы.Добавить(6); - Месяцы.Добавить(7); - Месяцы.Добавить(8); - Месяцы.Добавить(9); - Месяцы.Добавить(10); - Месяцы.Добавить(11); - Месяцы.Добавить(12); - - ДниНедели = Новый Массив; - ДниНедели.Добавить(1); - ДниНедели.Добавить(2); - ДниНедели.Добавить(3); - ДниНедели.Добавить(4); - ДниНедели.Добавить(5); - ДниНедели.Добавить(6); - ДниНедели.Добавить(7); - - Расписание = Новый РасписаниеРегламентногоЗадания; - Расписание.Месяцы = Месяцы; - Расписание.ДниНедели = ДниНедели; - Расписание.ПериодПовтораВТечениеДня = 60*30; // 30 минут - Расписание.ПериодПовтораДней = 1; // каждый день - - Возврат Расписание; -КонецФункции - -&НаСервереБезКонтекста -Функция ПредопределенноеРасписаниеКаждыйЧас() - - Месяцы = Новый Массив; - Месяцы.Добавить(1); - Месяцы.Добавить(2); - Месяцы.Добавить(3); - Месяцы.Добавить(4); - Месяцы.Добавить(5); - Месяцы.Добавить(6); - Месяцы.Добавить(7); - Месяцы.Добавить(8); - Месяцы.Добавить(9); - Месяцы.Добавить(10); - Месяцы.Добавить(11); - Месяцы.Добавить(12); - - ДниНедели = Новый Массив; - ДниНедели.Добавить(1); - ДниНедели.Добавить(2); - ДниНедели.Добавить(3); - ДниНедели.Добавить(4); - ДниНедели.Добавить(5); - ДниНедели.Добавить(6); - ДниНедели.Добавить(7); - - Расписание = Новый РасписаниеРегламентногоЗадания; - Расписание.Месяцы = Месяцы; - Расписание.ДниНедели = ДниНедели; - Расписание.ПериодПовтораВТечениеДня = 60*60; // 60 минут - Расписание.ПериодПовтораДней = 1; // каждый день - - Возврат Расписание; -КонецФункции - -&НаСервереБезКонтекста -Функция ПредопределенноеРасписаниеКаждыйДеньВ_8_00() - - Месяцы = Новый Массив; - Месяцы.Добавить(1); - Месяцы.Добавить(2); - Месяцы.Добавить(3); - Месяцы.Добавить(4); - Месяцы.Добавить(5); - Месяцы.Добавить(6); - Месяцы.Добавить(7); - Месяцы.Добавить(8); - Месяцы.Добавить(9); - Месяцы.Добавить(10); - Месяцы.Добавить(11); - Месяцы.Добавить(12); - - ДниНедели = Новый Массив; - ДниНедели.Добавить(1); - ДниНедели.Добавить(2); - ДниНедели.Добавить(3); - ДниНедели.Добавить(4); - ДниНедели.Добавить(5); - ДниНедели.Добавить(6); - ДниНедели.Добавить(7); - - Расписание = Новый РасписаниеРегламентногоЗадания; - Расписание.Месяцы = Месяцы; - Расписание.ДниНедели = ДниНедели; - Расписание.ВремяНачала = Дата('00010101080000'); // 8:00 - Расписание.ПериодПовтораДней = 1; // каждый день - - Возврат Расписание; -КонецФункции - -#КонецОбласти - -#Область ОбработчикиФоновыхЗаданий - -&НаКлиенте -Функция ПараметрыФоновогоЗадания() - - ПараметрыЗадания = Новый Структура(); - ПараметрыЗадания.Вставить("ВыполняемыйМетод", ""); - ПараметрыЗадания.Вставить("НаименованиеЗадания", ""); - ПараметрыЗадания.Вставить("ПараметрыМетода", Неопределено); - ПараметрыЗадания.Вставить("ОповещениеОЗавершении", Неопределено); - ПараметрыЗадания.Вставить("ОбработчикЗавершения", Неопределено); - - Возврат ПараметрыЗадания; - -КонецФункции - -&НаКлиенте -Процедура ФоновоеЗаданиеЗапуститьНаКлиенте(ПараметрыЗадания, Отказ) - - Результат = ФоновоеЗаданиеЗапуститьНаСервере(ПараметрыЗадания); - - Если Результат = Неопределено Тогда - Отказ = Истина; - Возврат; - КонецЕсли; - - РезультатВыполненияФоновогоЗадания = Результат; - - Если Результат.Статус = "Выполняется" Тогда - - ДлительнаяОперация = Истина; - ИдентификаторДлительнойОперации = Результат.ИдентификаторЗадания; - - РезультатВыполненияФоновогоЗадания.Вставить("ОбработчикЗавершения", ПараметрыЗадания.ОбработчикЗавершения); - - ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); - ПараметрыОжидания.ВыводитьОкноОжидания = Ложь; - ПараметрыОжидания.ВыводитьСообщения = Истина; - - ОповещениеОЗавершенииФоновогоЗадания = Новый ОписаниеОповещения("ОповещениеОЗавершенииФоновогоЗадания", ЭтотОбъект); - - Если Элементы.ГруппаПрогрессБарВыгрузка.Видимость Тогда - - ПараметрыОжидания.ВыводитьПрогрессВыполнения = Истина; - ПараметрыОжидания.ОповещениеОПрогрессеВыполнения = Новый ОписаниеОповещения("ПрогрессВыполненияФоновогоЗадания", ЭтотОбъект); - ПараметрыОжидания.Интервал = 1; - - КонецЕсли; - - ДлительныеОперацииКлиент.ОжидатьЗавершение(Результат, ОповещениеОЗавершенииФоновогоЗадания, ПараметрыОжидания); - - Иначе - // Задание выполнено, отменено или выполнено с ошибкой. - ПодключитьОбработчикОжидания(ПараметрыЗадания.ОбработчикЗавершения, "1", Истина); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПрогрессВыполненияФоновогоЗадания(Прогресс, ДополнительныеПараметры) Экспорт - - Если Прогресс = Неопределено Тогда - Возврат; - КонецЕсли; - - Если Прогресс.Прогресс <> Неопределено Тогда - СтруктураПрогресса = Прогресс.Прогресс; - ПроцентВыполнения = СтруктураПрогресса.Процент; - ДопИнформацияВыполнение = СтруктураПрогресса.Текст; - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Функция ФоновоеЗаданиеЗапуститьНаСервере(ПараметрыЗадания) - - ДатаНачалаОперации = ТекущаяДатаСеанса(); - ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); - ПараметрыВыполнения.НаименованиеФоновогоЗадания = ПараметрыЗадания.НаименованиеЗадания; - - Результат = ДлительныеОперации.ВыполнитьВФоне( - ПараметрыЗадания.ВыполняемыйМетод, - ПараметрыЗадания.ПараметрыМетода, - ПараметрыВыполнения); - - Возврат Результат; - -КонецФункции - -&НаКлиенте -Процедура ОповещениеОЗавершенииФоновогоЗадания(Результат, ДополнительныеПараметры) Экспорт - - ОбработчикЗавершения = РезультатВыполненияФоновогоЗадания.ОбработчикЗавершения; - РезультатВыполненияФоновогоЗадания = Результат; - - // Задание выполнено, отменено или выполнено с ошибкой. - ПодключитьОбработчикОжидания(ОбработчикЗавершения, "1", Истина); - -КонецПроцедуры - -#КонецОбласти - -#Область ОбработчикиСобытийПереходов - -&НаКлиенте -Процедура ПерейтиНаШагВпередОтложеннойОбработкой() - - ПодключитьОбработчикОжидания("Подключаемый_ПерейтиНаШагВпередОтложеннойОбработкой", 0.01, Истина); - -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_ПерейтиНаШагВпередОтложеннойОбработкой() - - // Двигаемся на шаг вперед принудительно. - ПропускатьКонтрольОтказаТекущейСтраницы = Истина; - ИзменитьПорядковыйНомерПерехода( +1 ); - -КонецПроцедуры - -&НаКлиенте -Функция Подключаемый_СтраницаМастераЗаданиеПараметровТранспортаFILE_ПриПереходеДалее(Отказ) - - Если Объект.ИспользоватьПараметрыТранспортаFILE Тогда - - Если ПустаяСтрока(Объект.FILEКаталогОбменаИнформацией) Или ВнешниеРесурсыРазрешены.РазрешенFile Тогда - СтраницаМастераЗаданиеПараметровТранспортаFILE_ПриПереходеДалееНаСервере(Отказ); - Иначе - ОповещениеОЗакрытии = Новый ОписаниеОповещения("РазрешитьРесурсЗавершение", ЭтотОбъект, "РазрешенFile"); - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда - Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Объект, Ложь, Истина, Ложь, Ложь); - МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент"); - МодульРаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); - Иначе - ВыполнитьОбработкуОповещения(ОповещениеОЗакрытии, КодВозвратаДиалога.ОК); - КонецЕсли; - Отказ = Истина; - КонецЕсли; - - КонецЕсли; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаМастераЗаданиеПараметровТранспортаFTP_ПриПереходеДалее(Отказ) - - Если Объект.ИспользоватьПараметрыТранспортаFTP Тогда - - Если ПустаяСтрока(Объект.FTPСоединениеПуть) Или ВнешниеРесурсыРазрешены.РазрешенFTP Тогда - СтраницаМастераЗаданиеПараметровТранспортаFTP_ПриПереходеДалееНаСервере(Отказ); - Иначе - ОповещениеОЗакрытии = Новый ОписаниеОповещения("РазрешитьРесурсЗавершение", ЭтотОбъект, "РазрешенFTP"); - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда - Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Объект, Ложь, Ложь, Ложь, Истина); - МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент"); - МодульРаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); - Иначе - ВыполнитьОбработкуОповещения(ОповещениеОЗакрытии, КодВозвратаДиалога.ОК); - КонецЕсли; - Отказ = Истина; - КонецЕсли; - КонецЕсли; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаМастераЗаданиеПараметровТранспортаEMAIL_ПриПереходеДалее(Отказ) - - СтраницаМастераЗаданиеПараметровТранспортаEMAIL_ПриПереходеДалееНаСервере(Отказ); - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаМастераВыборРежимаРаботыПомощника_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) - - Если Не ИспользоватьТранспортСообщенийОбменаCOM Или Не ИспользоватьТранспортСообщенийОбменаWS Тогда - - Объект.ИспользоватьПараметрыТранспортаCOM = Ложь; - - ПропуститьСтраницу = Истина; - Иначе - Элементы.ГруппаОшибкиПодключения.Видимость = Ложь; - КонецЕсли; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаМастераВыборРежимаРаботыПомощника_ПриПереходеДалее(Отказ) - - Если ((РежимРаботыМастера = "ОбменЧерезВнешнееСоединение" И (Не ПустаяСтрока(Объект.COMКаталогИнформационнойБазы) Или Не ПустаяСтрока(Объект.COMИмяСервера1СПредприятия))) - И Не ВнешниеРесурсыРазрешены.РазрешенCom) Тогда - - ОповещениеОЗакрытии = Новый ОписаниеОповещения("РазрешитьРесурсЗавершение", ЭтотОбъект, "РазрешенCom"); - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда - Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Объект, Истина, Ложь, Ложь, Ложь); - МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент"); - МодульРаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); - Иначе - ВыполнитьОбработкуОповещения(ОповещениеОЗакрытии, КодВозвратаДиалога.ОК); - КонецЕсли; - Отказ = Истина; - - ИначеЕсли РежимРаботыМастера = "ОбменЧерезВебСервис" И Не ВнешниеРесурсыРазрешены.РазрешенWS Тогда - - ПроверитьКорректностьПараметровПодключенияWS(Отказ); - - Если Не Отказ Тогда - ОповещениеОЗакрытии = Новый ОписаниеОповещения("РазрешитьРесурсЗавершение", ЭтотОбъект, "РазрешенWS"); - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда - Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Объект, Ложь, Ложь, Истина, Ложь); - МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент"); - МодульРаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); - Иначе - ВыполнитьОбработкуОповещения(ОповещениеОЗакрытии, КодВозвратаДиалога.ОК); - КонецЕсли; - Отказ = Истина; - КонецЕсли; - - КонецЕсли; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаМастераЗаданиеПараметровТранспортаFILE_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) - - ВнешниеРесурсыРазрешены.РазрешенFile = Ложь; - - Если Не ИспользоватьТранспортСообщенийОбменаFILE Тогда - - Объект.ИспользоватьПараметрыТранспортаFILE = Ложь; - - ПропуститьСтраницу = Истина; - - КонецЕсли; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаМастераЗаданиеПараметровТранспортаFTP_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) - - ВнешниеРесурсыРазрешены.РазрешенFTP = Ложь; - - Если Не ИспользоватьТранспортСообщенийОбменаFTP Тогда - - Объект.ИспользоватьПараметрыТранспортаFTP = Ложь; - - ПропуститьСтраницу = Истина; - - КонецЕсли; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаМастераЗаданиеПараметровТранспортаEMAIL_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) - - Если Не ИспользоватьТранспортСообщенийОбменаEMAIL Тогда - - Объект.ИспользоватьПараметрыТранспортаEMAIL = Ложь; - - ПропуститьСтраницу = Истина; - - КонецЕсли; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаМастераНастройкаПараметров_ПриПереходеДалее(Отказ) - - Если ПустаяСтрока(Объект.НаименованиеЭтойБазы) Тогда - - НСтрока = НСтр("ru = 'Укажите наименование этой программы.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.НаименованиеЭтойБазы",, Отказ); - - КонецЕсли; - - Если ПустаяСтрока(Объект.НаименованиеВторойБазы) Тогда - - НСтрока = НСтр("ru = 'Укажите наименование другой программы.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.НаименованиеВторойБазы",, Отказ); - - КонецЕсли; - - Если Объект.ИспользоватьПрефиксыДляНастройкиОбмена - И ПустаяСтрока(Объект.ПрефиксИнформационнойБазыИсточника) Тогда - - НСтрока = НСтр("ru = 'Укажите префикс этой информационной базы.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.ПрефиксИнформационнойБазыИсточника",, Отказ); - - КонецЕсли; - - Если Объект.ИспользоватьПрефиксыДляНастройкиОбмена - И ПустаяСтрока(Объект.ПрефиксИнформационнойБазыПриемника) Тогда - - НСтрока = НСтр("ru = 'Укажите существующий или желаемый префикс второй информационной базы.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.ПрефиксИнформационнойБазыПриемника",, Отказ); - - КонецЕсли; - - Если Объект.ИспользоватьПрефиксыДляНастройкиОбмена - И СокрЛП(Объект.ПрефиксИнформационнойБазыИсточника) = СокрЛП(Объект.ПрефиксИнформационнойБазыПриемника) Тогда - - НСтрока = НСтр("ru = 'Префиксы информационных баз должны быть различными.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.ПрефиксИнформационнойБазыПриемника",, Отказ); - - КонецЕсли; - - Если Отказ Тогда - Возврат Неопределено; - КонецЕсли; - - Если ПредусмотреныНастройкиОтборовНаУзле Тогда - - // Проверяем заполнение реквизитов в форме настроек ограничения миграции данных. - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("НастройкаОтборовНаУзле", НастройкаОтборовНаУзле); - - ПроверитьЗаполнениеРеквизитовВФорме(Отказ, ФормаНастройкиУзла, ПараметрыФормы, "ОписаниеОграниченийПередачиДанных"); - - КонецЕсли; - - Если ПредусмотреныЗначенияПоУмолчаниюНаУзле Тогда - - // Проверяем заполнение реквизитов в форме дополнительных настроек. - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ЗначенияПоУмолчаниюНаУзле", ЗначенияПоУмолчаниюНаУзле); - - ПроверитьЗаполнениеРеквизитовВФорме(Отказ, ФормаНастройкиЗначенийПоУмолчанию, ПараметрыФормы, "ОписаниеЗначенийПоУмолчанию"); - - КонецЕсли; - - СтраницаМастераНастройкаПараметров_ПриПереходеДалееНаСервере(Отказ); - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаМастераНастройкаПараметровДляВнешнегоСоединенияПервойБазы_ПриПереходеДалее(Отказ) - - Если ПустаяСтрока(Объект.НаименованиеЭтойБазы) Тогда - - НСтрока = НСтр("ru = 'Укажите наименование информационной базы.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.НаименованиеЭтойБазы",, Отказ); - Возврат Неопределено; - КонецЕсли; - - Если Объект.ИспользоватьПрефиксыДляНастройкиОбмена - И ПустаяСтрока(Объект.ПрефиксИнформационнойБазыИсточника) Тогда - - НСтрока = НСтр("ru = 'Укажите префикс информационной базы.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.ПрефиксИнформационнойБазыИсточника",, Отказ); - - КонецЕсли; - - Если ПредусмотреныНастройкиОтборовНаУзле Тогда - - // Проверяем заполнение реквизитов в форме настроек ограничения миграции данных. - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("НастройкаОтборовНаУзле", НастройкаОтборовНаУзле); - - ПроверитьЗаполнениеРеквизитовВФорме(Отказ, ФормаНастройкиУзла, ПараметрыФормы, "ОписаниеОграниченийПередачиДанных"); - - КонецЕсли; - - Если ПредусмотреныЗначенияПоУмолчаниюНаУзле Тогда - - // Проверяем заполнение реквизитов в форме дополнительных настроек. - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ЗначенияПоУмолчаниюНаУзле", ЗначенияПоУмолчаниюНаУзле); - - ПроверитьЗаполнениеРеквизитовВФорме(Отказ, ФормаНастройкиЗначенийПоУмолчанию, ПараметрыФормы, "ОписаниеЗначенийПоУмолчанию"); - - КонецЕсли; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаМастераНастройкаПараметровОбменаДанными_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) - - Если ЭтоПереходДалее Тогда - - // Получаем контекст и описание контекста формы настройки узлов. - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ВерсияКорреспондента", ВерсияКонфигурацииКорреспондента); - ПараметрыФормы.Вставить("ПолучитьЗначенияПоУмолчанию"); - ПараметрыФормы.Вставить("Настройки", КонтекстФормыНастройкиУзлов); - ПараметрыФормы.Вставить("ИдентификаторНастройки", Объект.ВариантНастройкиОбмена); - - ИмяФормыНастройки = "ПланОбмена.[ИмяПланаОбмена].Форма.[ФормаНастройкиУзлов]"; - ИмяФормыНастройки = СтрЗаменить(ИмяФормыНастройки, "[ИмяПланаОбмена]", Объект.ИмяПланаОбмена); - ИмяФормыНастройки = СтрЗаменить(ИмяФормыНастройки, "[ФормаНастройкиУзлов]", ФормаНастройкиУзлов); - - ФормаНастройки = ПолучитьФорму(ИмяФормыНастройки, ПараметрыФормы, ЭтотОбъект); - - КонтекстФормыНастройкиУзлов = ФормаНастройки.Контекст; - ОписаниеНастроекВыгрузкиДанных = ФормаНастройки.ОписаниеКонтекста; - - КонецЕсли; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаМастераНастройкаПараметровОбменаДанными_ПриПереходеДалее(Отказ) - - ПроверитьЗаданиеНастроекДляПервойБазы(Отказ, "ВебСервис"); - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаМастераНастройкаПараметровДляВнешнегоСоединенияВторойБазы_ПриПереходеДалее(Отказ) - - ПроверитьЗаданиеНастроекДляВторойБазы(Отказ, "ВнешнееСоединение"); - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаМастераНастройкаПараметровВторогоЭтапаНастройки_ПриПереходеДалее(Отказ) - - Если ПредусмотреныНастройкиОтборовНаУзле Тогда - - // Проверяем заполнение реквизитов в форме настроек ограничения миграции данных. - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("НастройкаОтборовНаУзле", НастройкаОтборовНаУзле); - - ПроверитьЗаполнениеРеквизитовВФорме(Отказ, ФормаНастройкиУзла, ПараметрыФормы, "ОписаниеОграниченийПередачиДанных"); - - КонецЕсли; - - Если ПредусмотреныЗначенияПоУмолчаниюНаУзле Тогда - - // Проверяем заполнение реквизитов в форме дополнительных настроек. - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ЗначенияПоУмолчаниюНаУзле", ЗначенияПоУмолчаниюНаУзле); - - ПроверитьЗаполнениеРеквизитовВФорме(Отказ, ФормаНастройкиЗначенийПоУмолчанию, ПараметрыФормы, "ОписаниеЗначенийПоУмолчанию"); - - КонецЕсли; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаМастераНачало_ПриПереходеДалее(Отказ) - - Если Истина = ПропускатьКонтрольОтказаТекущейСтраницы Тогда - ПропускатьКонтрольОтказаТекущейСтраницы = Неопределено; - Возврат Неопределено; - - ИначеЕсли Объект.ЭтоНастройкаРаспределеннойИнформационнойБазы Тогда - Возврат Неопределено; - - ИначеЕсли ВариантРаботыМастера <> "ПродолжитьНастройкуОбменаДанными" Тогда - Возврат Неопределено; - - ИначеЕсли ФайлНастроекОбменаДаннымиУспешноЗагружен Тогда - // Дополнительные проверки при продолжении обмена не требуются. - Возврат Неопределено; - - КонецЕсли; - - // Успешный переход далее будет в оповещениях. - Отказ = Истина; - - // Пытаемся передать файл на сервер с запросом установки расширения, без диалога. - Если ПустаяСтрока(Объект.ИмяФайлаНастроекСинхронизацииДанныхДляЗагрузки) Тогда - ТекстОшибки = НСтр("ru = 'Выберите файл с настройками синхронизации данных'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "Объект.ИмяФайлаНастроекСинхронизацииДанныхДляЗагрузки"); - Возврат Неопределено; - КонецЕсли; - - Оповещение = Новый ОписаниеОповещения("СтраницаМастераНачало_ПриПереходеДалее_Завершение", ЭтотОбъект, Новый Структура); - ТекстПредупреждения = НСтр("ru = 'Для передачи файла настроек синхронизации данных необходимо установить расширение для веб-клиента 1С:Предприятие.'"); - - ИменаФайлов = Новый Массив; - ИменаФайлов.Добавить(Объект.ИмяФайлаНастроекСинхронизацииДанныхДляЗагрузки); - - ОбменДаннымиКлиент.ПередатьФайлыНаСервер(Оповещение, ИменаФайлов, УникальныйИдентификатор, ТекстПредупреждения); -КонецФункции - -// Описание оповещения завершения передачи файла на сервер. -// -&НаКлиенте -Процедура СтраницаМастераНачало_ПриПереходеДалее_Завершение(Знач РезультатПомещенияФайлов, Знач ДополнительныеПараметры) Экспорт - - ЗавершениеВыбораФайлаНастроекОбменаДаннымиДляЗагрузки(РезультатПомещенияФайлов[0], Неопределено); - - Если ФайлНастроекОбменаДаннымиУспешноЗагружен Тогда - // Выполняем успешный переход далее. - ПерейтиНаШагВпередОтложеннойОбработкой(); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ЗавершениеВыбораФайлаНастроекОбменаДаннымиДляЗагрузки(Знач РезультатПомещенияФайлов, Знач ДополнительныеПараметры) Экспорт - - ОчиститьСообщения(); - - АдресПомещенногоФайла = РезультатПомещенияФайлов.Хранение; - ТекстОшибки = РезультатПомещенияФайлов.ОписаниеОшибки; - - Объект.ИмяФайлаНастроекСинхронизацииДанныхДляЗагрузки = РезультатПомещенияФайлов.Имя; - - ФайлНастроекОбменаДаннымиУспешноЗагружен = Ложь; - - Если ПустаяСтрока(ТекстОшибки) И ПустаяСтрока(АдресПомещенногоФайла) Тогда - ТекстОшибки = НСтр("ru = 'Ошибка передачи файла настроек синхронизации данных на сервер'"); - КонецЕсли; - - Если ПустаяСтрока(ТекстОшибки) Тогда - // Успешно передали файл, пытаемся применить установки. - ОшибкаЗагрузкиПараметровМастера = Ложь; - // Вызов сервера - ЗагрузитьПараметрыМастера(ОшибкаЗагрузкиПараметровМастера, АдресПомещенногоФайла); - Если ОшибкаЗагрузкиПараметровМастера Тогда - ТекстОшибки = НСтр("ru = 'Указан неправильный файл настроек синхронизации данных. Укажите корректный файл.'"); - Иначе - ФайлНастроекОбменаДаннымиУспешноЗагружен = Истина; - КонецЕсли; - КонецЕсли; - - Если Не ПустаяСтрока(ТекстОшибки) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "Объект.ИмяФайлаНастроекСинхронизацииДанныхДляЗагрузки"); - КонецЕсли; - - ОбновитьОтображениеДанных(); -КонецПроцедуры - -&НаКлиенте -Функция Подключаемый_СтраницаМастераНастройкаПараметров_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) - - // Если перешли на страницу дополнительных параметров и не выбрали ни один вид транспорта, то предупреждаем об ошибке. - Если НЕ (Объект.ИспользоватьПараметрыТранспортаEMAIL - ИЛИ Объект.ИспользоватьПараметрыТранспортаFILE - ИЛИ Объект.ИспользоватьПараметрыТранспортаFTP) Тогда - - НСтрока = НСтр("ru = 'Не указаны параметры подключения для синхронизации данных. - |Следует настроить хотя бы один вариант подключения.'"); - // - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,,,, Отказ); - - Возврат Неопределено; - КонецЕсли; - - СтраницаМастераНастройкаПараметров_ПриОткрытииНаСервере(Отказ, ПропуститьСтраницу, ЭтоПереходДалее); - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаМастераНастройкаПараметровДляВнешнегоСоединенияПервойБазы_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) - - Элементы.ОписаниеОграниченийПередачиДанных1.Заголовок = СтрЗаменить(Элементы.ОписаниеОграниченийПередачиДанных1.Заголовок, - "%Программа%", СинонимПланаОбмена); - - Элементы.ОписаниеЗначенийПоУмолчанию1.Заголовок = СтрЗаменить(Элементы.ОписаниеЗначенийПоУмолчанию1.Заголовок, - "%Программа%", СинонимПланаОбмена); - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаМастераНастройкаПараметровДляВнешнегоСоединенияВторойБазы_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) - - Элементы.ОписаниеОграниченийПередачиДанных4.Заголовок = СтрЗаменить(Элементы.ОписаниеОграниченийПередачиДанных4.Заголовок, - "%Программа%", Объект.НаименованиеЭтойБазы); - - Элементы.ОписаниеЗначенийПоУмолчанию4.Заголовок = СтрЗаменить(Элементы.ОписаниеЗначенийПоУмолчанию4.Заголовок, - "%Программа%", Объект.НаименованиеЭтойБазы); - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаМастераИтогНастройкиОбмена_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) - Если НЕ Объект.ИспользоватьПрефиксыДляНастройкиОбмена Тогда - // Представление результата настройки обмена. - СтрокаСообщения = НСтр("ru = '%1%2%3'"); - - ПредставлениеРезультатаНастройкиОбмена = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, - ПредставлениеРезультатаТранспортСообщений(), - ПредставлениеРезультатаОтборыНаУзле(), - ПредставлениеРезультатаЗначенияПоУмолчаниюНаУзле()); - ИначеЕсли ВариантРаботыМастера = "НастроитьНовыйОбменДанными" Тогда - - // Представление результата настройки обмена. - СтрокаСообщения = НСтр("ru = '%1%2%3Префикс этой информационной базы: %4 - |Префикс второй информационной базы: %5'"); - - ПредставлениеРезультатаНастройкиОбмена = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, - ПредставлениеРезультатаТранспортСообщений(), - ПредставлениеРезультатаОтборыНаУзле(), - ПредставлениеРезультатаЗначенияПоУмолчаниюНаУзле(), - Объект.ПрефиксИнформационнойБазыИсточника, - ?(Объект.ИспользоватьПрефиксыДляНастройкиОбмена, - Объект.ПрефиксИнформационнойБазыПриемника, - Объект.ИдентификаторИнформационнойБазыПриемника)); - - Иначе - - // Представление результата настройки обмена. - СтрокаСообщения = НСтр("ru = '%1%2%3Префикс этой информационной базы: %4'"); - - ПредставлениеРезультатаНастройкиОбмена = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, - ПредставлениеРезультатаТранспортСообщений(), - ПредставлениеРезультатаОтборыНаУзле(), - ПредставлениеРезультатаЗначенияПоУмолчаниюНаУзле(), - ?(Объект.ИспользоватьПрефиксыДляНастройкиОбмена, - Объект.ПрефиксИнформационнойБазыИсточника, - Объект.КодПредопределенногоУзла)); - - КонецЕсли; - - // выводим поясняющую надпись - Элементы.ГруппаНадписиИнформацииОбОткрытииПомощникаСопоставления.Видимость = - (ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" - И Не Объект.ЭтоНастройкаРаспределеннойИнформационнойБазы - И Не Объект.ЭтоНастройкаСтандартногоОбмена); - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаМастераИтогНастройкиОбмена_ПриОткрытии_ВнешнееСоединение(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) - - // Представление результата настройки обмена. - Если НастройкаОбменаССервисом Тогда - - СтрокаСообщения = НСтр("ru = '%1 - |Настройки для этой информационной базы: - |======================================================== - |%2%3Префикс информационной базы: %4 - | - |Настройки для приложения, расположенного в сервисе: - |======================================================== - |%5%6Префикс приложения: %7'"); - - Иначе - - СтрокаСообщения = НСтр("ru = '%1 - |Параметры синхронизации данных для этой программы: - |======================================================== - |%2%3Префикс информационной базы: %4 - | - |Параметры синхронизации данных для другой программы:: - |======================================================== - |%5%6Префикс информационной базы: %7'"); - - КонецЕсли; - - ПредставлениеРезультатаНастройкиОбмена = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, - ПредставлениеРезультатаТранспортСообщений(), - ПредставлениеРезультатаОтборыНаУзле(), - ПредставлениеРезультатаЗначенияПоУмолчаниюНаУзле(), - Объект.ПрефиксИнформационнойБазыИсточника, - ПредставлениеРезультатаОтборыНаУзлеБазыКорреспондента(), - ПредставлениеРезультатаЗначенияПоУмолчаниюНаУзлеБазыКорреспондента(), - ?(Объект.ИспользоватьПрефиксыДляНастройкиОбмена, - Объект.ПрефиксИнформационнойБазыПриемника, - Объект.ИдентификаторИнформационнойБазыПриемника)); - - // выводим поясняющую надпись - Элементы.ГруппаНадписиИнформацииОбОткрытииПомощникаСопоставления.Видимость = Ложь; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаМастераОжиданиеСозданияНастройкиОбменаДанными_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) - - СтраницаМастераОжиданиеСозданияНастройкиОбменаДанными_ОбработкаДлительнойОперацииНаСервере(Отказ); - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаМастераОжиданиеСозданияНастройкиОбменаДаннымиЧерезВнешнееСоединение_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) - - // Создаем настройку обмена через внешнее соединение. - НастроитьНовыйОбменДаннымиНаСервереЧерезВнешнееСоединение(Отказ, НастройкаОтборовНаУзлеБазыКорреспондента, ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента); - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаМастераОжиданиеПроверкиПодключенияВнешнегоСоединения_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) - - СтраницаМастераОжиданиеПроверкиПодключенияВнешнегоСоединения_ОбработкаДлительнойОперацииНаСервере(Отказ); - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаМастераНачалоНастройкиОбменаССервисом_ПриПереходеДалее(Отказ) - - Если Не ВнешниеРесурсыРазрешены.РазрешенWS Тогда - - ПроверитьКорректностьПараметровПодключенияWS(Отказ); - - Если Не Отказ Тогда - ОповещениеОЗакрытии = Новый ОписаниеОповещения("РазрешитьРесурсЗавершение", ЭтотОбъект, "РазрешенWS"); - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда - Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Объект, Ложь, Ложь, Истина, Ложь); - МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент"); - МодульРаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); - Иначе - ВыполнитьОбработкуОповещения(ОповещениеОЗакрытии, КодВозвратаДиалога.ОК); - КонецЕсли; - Отказ = Истина; - КонецЕсли; - - КонецЕсли; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаМастераОжиданиеПроверкиПодключенияЧерезВебСервис_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) - - ПроверитьПодключениеWSНаКлиенте(Отказ, Истина); - -КонецФункции - -// - -&НаКлиенте -Функция Подключаемый_СтраницаМастераОжиданиеАнализаДанныхСозданиеНастройкиОбмена_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) - - // Создание настройки обмена данными: - // - создание узлов в этой базе и в корреспонденте с настройками выгрузки данных - // - регистрация справочников к выгрузке в этой базе и в корреспонденте. - - ДлительнаяОперация = Ложь; - ДлительнаяОперацияЗавершена = Ложь; - ИдентификаторДлительнойОперации = ""; - - НастроитьНовыйОбменДаннымиНаСервереЧерезВебСервис(Отказ); - - Если Отказ Тогда - - ПоказатьПредупреждение(, НСтр("ru = 'Возникли ошибки на этапе создания настройки синхронизации данных. - |Для решения проблем воспользуйтесь журналом регистрации.'")); - - КонецЕсли; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаМастераОжиданиеАнализаДанныхСозданиеНастройкиОбменаДлительнаяОперация_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) - - Если ДлительнаяОперация Тогда - - ПерейтиДалее = Ложь; - - ПодключитьОбработчикОжидания("ОбработчикОжиданияДлительнойОперации", 5, Истина); - - КонецЕсли; - -КонецФункции - -// - -&НаКлиенте -Функция Подключаемый_СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщения_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) - - ДлительнаяОперация = Ложь; - ДлительнаяОперацияЗавершена = Ложь; - ИдентификаторФайлаСообщенияВСервисе = ""; - ИдентификаторДлительнойОперации = ""; - - СтруктураДанных = ОбменДаннымиВызовСервера.ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондентаЧерезВебСервис( - Отказ, - Объект.УзелИнформационнойБазы, - ИдентификаторФайлаСообщенияВСервисе, - ДлительнаяОперация, - ИдентификаторДлительнойОперации, - Объект.WSПароль); - - Если Отказ Тогда - - ПоказатьПредупреждение(, НСтр("ru = 'Возникли ошибки на этапе анализа данных. - |Для решения проблем воспользуйтесь журналом регистрации.'")); - - ИначеЕсли Не ДлительнаяОперация Тогда - - Объект.ИмяВременногоКаталогаСообщенийОбмена = СтруктураДанных.ИмяВременногоКаталогаСообщенийОбмена; - Объект.ИмяФайлаСообщенияОбмена = СтруктураДанных.ИмяФайлаСообщенияОбмена; - - КонецЕсли; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщенияДлительнаяОперация_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) - - Если ДлительнаяОперация Тогда - - ПерейтиДалее = Ложь; - - ПодключитьОбработчикОжидания("ОбработчикОжиданияДлительнойОперации", 5, Истина); - - КонецЕсли; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщенияДлительнаяОперацияОкончание_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) - - Если ДлительнаяОперацияЗавершена Тогда - - СтруктураДанных = ОбменДаннымиВызовСервера.ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондентаЧерезВебСервисЗавершениеДлительнойОперации( - Отказ, - Объект.УзелИнформационнойБазы, - ИдентификаторФайлаСообщенияВСервисе, - Объект.WSПароль); - - Если Отказ Тогда - - ПоказатьПредупреждение(, НСтр("ru = 'Возникли ошибки на этапе анализа данных. - |Для решения проблем воспользуйтесь журналом регистрации.'")); - - Иначе - - Объект.ИмяВременногоКаталогаСообщенийОбмена = СтруктураДанных.ИмяВременногоКаталогаСообщенийОбмена; - Объект.ИмяФайлаСообщенияОбмена = СтруктураДанных.ИмяФайлаСообщенияОбмена; - - КонецЕсли; - - КонецЕсли; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаМастераОжиданиеАнализаДанныхАвтоматическоеСопоставление_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) - - СтраницаМастераОжиданиеАнализаДанныхАвтоматическоеСопоставление_ОбработкаДлительнойОперации(Отказ); - - Если Отказ Тогда - - ПоказатьПредупреждение(, НСтр("ru = 'Возникли ошибки на этапе анализа данных.'")); - - КонецЕсли; - -КонецФункции - -&НаСервере -Процедура СтраницаМастераОжиданиеАнализаДанныхАвтоматическоеСопоставление_ОбработкаДлительнойОперации(Отказ) - - ПомощникИнтерактивногоОбменаДанными = Обработки.ПомощникИнтерактивногоОбменаДанными.Создать(); - - ЗаполнитьЗначенияСвойств(ПомощникИнтерактивногоОбменаДанными, Объект,, "ИнформацияСтатистики"); - - ПомощникИнтерактивногоОбменаДанными.ИнформацияСтатистики.Загрузить(Объект.ИнформацияСтатистики.Выгрузить()); - - ПомощникИнтерактивногоОбменаДанными.ВыполнитьАнализСообщенияОбмена(Отказ); - - ПомощникИнтерактивногоОбменаДанными.ВыполнитьАвтоматическоеСопоставлениеПоУмолчаниюИПолучитьСтатистикуСопоставления(Отказ); - - Если Не Отказ Тогда - - ТаблицаИнформацииСтатистики = ПомощникИнтерактивногоОбменаДанными.ТаблицаИнформацииСтатистики(); - - // Удаляем строки, в которых сопоставление 100%. - ОбратныйИндекс = ТаблицаИнформацииСтатистики.Количество() - 1; - - Пока ОбратныйИндекс >= 0 Цикл - - СтрокаТаблицы = ТаблицаИнформацииСтатистики[ОбратныйИндекс]; - - Если СтрокаТаблицы.КоличествоОбъектовНесопоставленных = 0 Тогда - - ТаблицаИнформацииСтатистики.Удалить(СтрокаТаблицы); - - КонецЕсли; - - ОбратныйИндекс = ОбратныйИндекс - 1; - КонецЦикла; - - Объект.ИнформацияСтатистики.Загрузить(ТаблицаИнформацииСтатистики); - - СведенияОбИнформацииСтатистики(ТаблицаИнформацииСтатистики); - - УстановитьВидимостьГруппыДополнительнойИнформации(); - - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура УстановитьВидимостьГруппыДополнительнойИнформации() - - // Если в таблице информации статистике есть хотя бы одна строка с сопоставлением меньшим 100%, - // то группу дополнительной информации делаем видимой. - МассивСтрок = Объект.ИнформацияСтатистики.НайтиСтроки(Новый Структура("ИндексКартинки", 1)); - - ВсеДанныеСопоставлены = (МассивСтрок.Количество() = 0); - - Элементы.СтраницыСтатусаСопоставленияДанных.ТекущаяСтраница = ?(ВсеДанныеСопоставлены, - Элементы.СтатусСопоставленияВсеДанныеСопоставлены, - Элементы.СтатусСопоставленияЕстьНесопоставленныеДанные); - -КонецПроцедуры - -&НаКлиенте -Функция Подключаемый_СтраницаМастераСопоставлениеДанных_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) - - Если ЭтоПереходДалее И ВсеДанныеСопоставлены Тогда - - ПропуститьСтраницу = Истина; - - КонецЕсли; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаМастераСопоставлениеДанных_ПриПереходеДалее(Отказ) - - Если Не ВсеДанныеСопоставлены Тогда - - Кнопки = Новый СписокЗначений; - Кнопки.Добавить(КодВозвратаДиалога.Да, "Продолжить"); - Кнопки.Добавить(КодВозвратаДиалога.Нет, "Отмена"); - - Сообщение = НСтр("ru = 'Не все данные сопоставлены. Наличие несопоставленных данных - |может привести к появлению одинаковых элементов справочников (дублей). - |Продолжить?'"); - - Если Не ПользовательОтветилДаНаВопросОСопоставлении Тогда - ОписаниеОповещения = Новый ОписаниеОповещения("ОбработатьОтветПользователяПриСопоставлении", ЭтотОбъект); - ПоказатьВопрос(ОписаниеОповещения, Сообщение, Кнопки,, КодВозвратаДиалога.Нет); - Отказ = Истина; - КонецЕсли; - - КонецЕсли; - -КонецФункции - -&НаКлиенте -Процедура ОбработатьОтветПользователяПриСопоставлении(Ответ, ДополнительныеПараметры) Экспорт - - Если Ответ = КодВозвратаДиалога.Да Тогда - - ПользовательОтветилДаНаВопросОСопоставлении = Истина; - ИзменитьПорядковыйНомерПерехода(+1); - - КонецЕсли; - -КонецПроцедуры - -// - -&НаКлиенте -Функция Подключаемый_СтраницаМастераОжиданиеСинхронизацииСправочниковЗагрузка_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) - - ПерейтиДалее = Ложь; - - ПараметрыМетода = Новый Структура; - ПараметрыМетода.Вставить("УзелИнформационнойБазы", Объект.УзелИнформационнойБазы); - ПараметрыМетода.Вставить("ИмяФайлаСообщенияОбмена", Объект.ИмяФайлаСообщенияОбмена); - - ПараметрыЗадания = ПараметрыФоновогоЗадания(); - ПараметрыЗадания.ВыполняемыйМетод = "Обработки.ПомощникСозданияОбменаДанными.ВыполнитьЗагрузкуСправочников"; - ПараметрыЗадания.ПараметрыМетода = ПараметрыМетода; - ПараметрыЗадания.НаименованиеЗадания = НСтр("ru = 'Загрузка справочников из сообщения обмена'"); - ПараметрыЗадания.ОбработчикЗавершения = "ЗавершениеЗагрузкиСправочников"; - - ФоновоеЗаданиеЗапуститьНаКлиенте(ПараметрыЗадания, Отказ); - -КонецФункции - -&НаКлиенте -Процедура ЗавершениеЗагрузкиСправочников() - - Если РезультатВыполненияФоновогоЗадания.Статус = "Ошибка" Тогда - ОбменДаннымиВызовСервера.ЗафиксироватьЗавершениеОбменаСОшибкой( - Объект.УзелИнформационнойБазы, - "ЗагрузкаДанных", - ДатаНачалаОперации, - РезультатВыполненияФоновогоЗадания.ПодробноеПредставлениеОшибки); - КонецЕсли; - - ВыполнитьПереходДалее(); - -КонецПроцедуры - -&НаКлиенте -Функция Подключаемый_СтраницаМастераОжиданиеСинхронизацииСправочниковВыгрузка_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) - - ДлительнаяОперация = Ложь; - ДлительнаяОперацияЗавершена = Ложь; - ИдентификаторФайлаСообщенияВСервисе = ""; - ИдентификаторДлительнойОперации = ""; - - СтраницаМастераОжиданиеСинхронизацииСправочниковВыгрузка_ОбработкаДлительнойОперации( - Отказ, - Объект.УзелИнформационнойБазы, - ДлительнаяОперация, - ИдентификаторДлительнойОперации, - ИдентификаторФайлаСообщенияВСервисе, - ДатаНачалаОперации, - Объект.WSПароль); - - Если Отказ Тогда - - ПоказатьПредупреждение(, НСтр("ru = 'Возникли ошибки на этапе синхронизации справочников. - |Для решения проблем воспользуйтесь журналом регистрации.'")); - - КонецЕсли; - -КонецФункции - -&НаСервереБезКонтекста -Процедура СтраницаМастераОжиданиеСинхронизацииСправочниковВыгрузка_ОбработкаДлительнойОперации( - Отказ, - УзелИнформационнойБазы, - ДлительнаяОперация, - ИдентификаторОперации, - ИдентификаторФайла, - ДатаНачалаОперации, - Пароль) - - ДатаНачалаОперации = ТекущаяДатаСеанса(); - - // Запускаем выполнение обмена. - ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); - ПараметрыОбмена.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS; - ПараметрыОбмена.ВыполнятьЗагрузку = Ложь; - ПараметрыОбмена.ВыполнятьВыгрузку = Истина; - - ПараметрыОбмена.ДлительнаяОперацияРазрешена = Истина; - ПараметрыОбмена.ДлительнаяОперация = ДлительнаяОперация; - ПараметрыОбмена.ИдентификаторОперации = ИдентификаторОперации; - ПараметрыОбмена.ИдентификаторФайла = ИдентификаторФайла; - ПараметрыОбмена.ПараметрыАутентификации = Пароль; - - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, ПараметрыОбмена, Отказ); - - ДлительнаяОперация = ПараметрыОбмена.ДлительнаяОперация; - ИдентификаторОперации = ПараметрыОбмена.ИдентификаторОперации; - ИдентификаторФайла = ПараметрыОбмена.ИдентификаторФайла; - Пароль = ПараметрыОбмена.ПараметрыАутентификации; - -КонецПроцедуры - -&НаКлиенте -Функция Подключаемый_СтраницаМастераОжиданиеСинхронизацииСправочниковВыгрузкаДлительнаяОперация_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) - - Если ДлительнаяОперация Тогда - - ПерейтиДалее = Ложь; - - ПодключитьОбработчикОжидания("ОбработчикОжиданияДлительнойОперации", 5, Истина); - - КонецЕсли; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаМастераОжиданиеСинхронизацииСправочниковВыгрузкаДлительнаяОперацияОкончание_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) - - Если ДлительнаяОперацияЗавершена Тогда - - ОбменДаннымиВызовСервера.ЗафиксироватьВыполнениеВыгрузкиДанныхВРежимеДлительнойОперации(Объект.УзелИнформационнойБазы, ДатаНачалаОперации); - - КонецЕсли; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаМастераОжиданиеСохраненияНастроек_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) - - // Обновление настройки обмена данными в этой базе и корреспонденте: - // - обновление информации значений по умолчанию в узлах планов обмена - // - регистрация всех данных, кроме справочников и ПВХ к выгрузке в этой базе и в корреспонденте. - - ДлительнаяОперация = Ложь; - ДлительнаяОперацияЗавершена = Ложь; - ИдентификаторДлительнойОперации = ""; - - ОбновитьНастройкиОбменаДанными(Отказ); - - Если Отказ Тогда - - ПоказатьПредупреждение(, НСтр("ru = 'Возникли ошибки на этапе сохранения настроек. - |Для решения проблем воспользуйтесь журналом регистрации.'")); - - КонецЕсли; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаМастераОжиданиеСохраненияНастроекДлительнаяОперация_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) - - Если ДлительнаяОперация Тогда - - ПерейтиДалее = Ложь; - - ПодключитьОбработчикОжидания("ОбработчикОжиданияДлительнойОперации", 5, Истина); - - КонецЕсли; - -КонецФункции - -// - -&НаКлиенте -Функция Подключаемый_СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузка_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) - - ДлительнаяОперация = Ложь; - ДлительнаяОперацияЗавершена = Ложь; - ИдентификаторФайлаСообщенияВСервисе = ""; - ИдентификаторДлительнойОперации = ""; - - СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузка_ОбработкаДлительнойОперации( - Отказ, - Объект.УзелИнформационнойБазы, - ДлительнаяОперация, - ИдентификаторДлительнойОперации, - ИдентификаторФайлаСообщенияВСервисе, - ДатаНачалаОперации, - Объект.WSПароль); - - Если Отказ Тогда - - ПоказатьПредупреждение(, НСтр("ru = 'Возникли ошибки на этапе синхронизации данных. - |Для решения проблем воспользуйтесь журналом регистрации.'")); - - КонецЕсли; - -КонецФункции - -&НаСервереБезКонтекста -Процедура СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузка_ОбработкаДлительнойОперации( - Отказ, - УзелИнформационнойБазы, - ДлительнаяОперация, - ИдентификаторОперации, - ИдентификаторФайла, - ДатаНачалаОперации, - Пароль) - - ДатаНачалаОперации = ТекущаяДатаСеанса(); - - // Запускаем выполнение обмена. - ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); - ПараметрыОбмена.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS; - ПараметрыОбмена.ВыполнятьЗагрузку = Истина; - ПараметрыОбмена.ВыполнятьВыгрузку = Ложь; - - ПараметрыОбмена.ДлительнаяОперацияРазрешена = Истина; - ПараметрыОбмена.ДлительнаяОперация = ДлительнаяОперация; - ПараметрыОбмена.ИдентификаторОперации = ИдентификаторОперации; - ПараметрыОбмена.ИдентификаторФайла = ИдентификаторФайла; - ПараметрыОбмена.ПараметрыАутентификации = Пароль; - - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, ПараметрыОбмена, Отказ); - - ДлительнаяОперация = ПараметрыОбмена.ДлительнаяОперация; - ИдентификаторОперации = ПараметрыОбмена.ИдентификаторОперации; - ИдентификаторФайла = ПараметрыОбмена.ИдентификаторФайла; - Пароль = ПараметрыОбмена.ПараметрыАутентификации; - -КонецПроцедуры - -&НаКлиенте -Функция Подключаемый_СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузкаДлительнаяОперация_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) - - Если ДлительнаяОперация Тогда - - ПерейтиДалее = Ложь; - - ПодключитьОбработчикОжидания("ОбработчикОжиданияДлительнойОперации", 5, Истина); - - КонецЕсли; - -КонецФункции - -&НаСервере -Процедура СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузкаДлительнаяОперацияОкончание_ОбработкаДлительнойОперации() - - ДлительнаяОперация = Ложь; - -КонецПроцедуры - -&НаКлиенте -Функция Подключаемый_СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузкаДлительнаяОперацияОкончание_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) - - СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузкаДлительнаяОперацияОкончание_ОбработкаДлительнойОперации(); - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузкаДанных_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) - - Если ДлительнаяОперация Тогда - - ПерейтиДалее = Ложь; - - ПодключитьОбработчикОжидания("ОбработчикОжиданияФоновогоЗадания", 5, Истина); - - КонецЕсли; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаМастераОжиданиеСинхронизацииДанныхВыгрузка_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) - - ДлительнаяОперация = Ложь; - ДлительнаяОперацияЗавершена = Ложь; - ИдентификаторФайлаСообщенияВСервисе = ""; - ИдентификаторДлительнойОперации = ""; - - СтраницаМастераОжиданиеСинхронизацииДанныхВыгрузка_ОбработкаДлительнойОперации( - Отказ, - Объект.УзелИнформационнойБазы, - ДлительнаяОперация, - ИдентификаторДлительнойОперации, - ИдентификаторФайлаСообщенияВСервисе, - ДатаНачалаОперации, - Объект.WSПароль); - - Если Отказ Тогда - - ПоказатьПредупреждение(, НСтр("ru = 'Возникли ошибки на этапе синхронизации данных. - |Для решения проблем воспользуйтесь журналом регистрации.'")); - - КонецЕсли; - -КонецФункции - -&НаСервереБезКонтекста -Процедура СтраницаМастераОжиданиеСинхронизацииДанныхВыгрузка_ОбработкаДлительнойОперации( - Отказ, - УзелИнформационнойБазы, - ДлительнаяОперация, - ИдентификаторОперации, - ИдентификаторФайла, - ДатаНачалаОперации, - Пароль) - - ДатаНачалаОперации = ТекущаяДатаСеанса(); - - // Запускаем выполнение обмена. - ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); - ПараметрыОбмена.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS; - ПараметрыОбмена.ВыполнятьЗагрузку = Ложь; - ПараметрыОбмена.ВыполнятьВыгрузку = Истина; - - ПараметрыОбмена.ДлительнаяОперацияРазрешена = Истина; - ПараметрыОбмена.ДлительнаяОперация = ДлительнаяОперация; - ПараметрыОбмена.ИдентификаторОперации = ИдентификаторОперации; - ПараметрыОбмена.ИдентификаторФайла = ИдентификаторФайла; - ПараметрыОбмена.ПараметрыАутентификации = Пароль; - - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, ПараметрыОбмена, Отказ); - - ДлительнаяОперация = ПараметрыОбмена.ДлительнаяОперация; - ИдентификаторОперации = ПараметрыОбмена.ИдентификаторОперации; - ИдентификаторФайла = ПараметрыОбмена.ИдентификаторФайла; - Пароль = ПараметрыОбмена.ПараметрыАутентификации; - -КонецПроцедуры - -&НаКлиенте -Функция Подключаемый_СтраницаМастераОжиданиеСинхронизацииДанныхВыгрузкаДлительнаяОперация_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) - - Если ДлительнаяОперация Тогда - - ПерейтиДалее = Ложь; - - ПодключитьОбработчикОжидания("ОбработчикОжиданияДлительнойОперации", 5, Истина); - - КонецЕсли; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаМастераОжиданиеСинхронизацииДанныхВыгрузкаДлительнаяОперацияОкончание_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) - - Если ДлительнаяОперацияЗавершена Тогда - - ОбменДаннымиВызовСервера.ЗафиксироватьВыполнениеВыгрузкиДанныхВРежимеДлительнойОперации(Объект.УзелИнформационнойБазы, ДатаНачалаОперации); - - КонецЕсли; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаМастераНастройкиОтраженияДокументовВУчете_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) - - Если ЭтоПереходДалее Тогда - - ТипСоединения = "ВебСервис"; - - ПроверитьНастройкиПараметровУчетаНаСервере( - Ложь, - ТипСоединения, - Объект.ИмяПланаОбмена, - СтруктураПараметровПодключенияВнешнегоСоединения(ТипСоединения), - ПропуститьСтраницу); - - КонецЕсли; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаМастераНастройкиОтраженияДокументовВУчете_ПриПереходеДалее(Отказ) - - ТипСоединения = "ВебСервис"; - - ПроверитьНастройкиПараметровУчетаНаСервере( - Отказ, - ТипСоединения, - Объект.ИмяПланаОбмена, - СтруктураПараметровПодключенияВнешнегоСоединения(ТипСоединения), - Ложь); - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаМастераПараметрыПолученияДанных_ПриПереходеДалее(Отказ) - - ТипСоединения = "ВебСервис"; - - ПроверитьПравилаПолученияДанных(Отказ, ТипСоединения); - - Если Отказ Тогда - Возврат Неопределено; - КонецЕсли; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаМастераСозданиеОбменаДаннымиУспешноЗавершено_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) - - ПредопределенноеРасписаниеОбменаДаннымиПриИзмененииЗначения(); - - ВыполнятьОбменДаннымиАвтоматическиПриИзмененииЗначения(); - -КонецФункции - -// - -&НаКлиенте -Процедура ПроверитьПравилаПолученияДанных(Отказ, ТипСоединения) - - Если ПредусмотреныЗначенияПоУмолчаниюНаУзле Тогда - - // Проверяем заполнение реквизитов в форме дополнительных настроек. - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ЗначенияПоУмолчаниюНаУзле", ЗначенияПоУмолчаниюНаУзле); - - ПроверитьЗаполнениеРеквизитовВФорме(Отказ, ФормаНастройкиЗначенийПоУмолчанию, ПараметрыФормы, "ОписаниеЗначенийПоУмолчанию"); - - КонецЕсли; - - Если ПредусмотреныЗначенияПоУмолчаниюНаУзлеБазыКорреспондента Тогда - - // Проверяем заполнение реквизитов в форме дополнительных настроек. - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ПараметрыВнешнегоСоединения", СтруктураПараметровПодключенияВнешнегоСоединения(ТипСоединения)); - ПараметрыФормы.Вставить("ЗначенияПоУмолчаниюНаУзле", ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента); - - ПроверитьЗаполнениеРеквизитовВФорме(Отказ, ФормаНастройкиЗначенийПоУмолчаниюБазыКорреспондента, ПараметрыФормы, "ОписаниеЗначенийПоУмолчаниюБазыКорреспондента"); - - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ПроверитьНастройкиПараметровУчетаНаСервере( - Отказ, - Знач ТипСоединения, - Знач ИмяПланаОбмена, - ПараметрыПодключения, - ПропуститьСтраницу) - - СообщениеОбОшибке = ""; - СообщениеОбОшибкеКорреспондента = ""; - - КодУзла = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.УзелИнформационнойБазы, "Код"); - - НастройкиПараметровУчетаЗаданы = ОбменДаннымиСервер.НастройкиПараметровУчетаВСистемеУстановлены(ИмяПланаОбмена, КодУзла, СообщениеОбОшибке); - УзелСуществует = Истина; - Если ТипСоединения = "ВебСервис" Тогда - - СтрокаСообщенияОбОшибке = ""; - - Если Объект.ВерсияКорреспондента_2_1_1_7 Тогда - - WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси_2_1_1_7(ПараметрыПодключения, СтрокаСообщенияОбОшибке); - - ИначеЕсли Объект.ВерсияКорреспондента_2_0_1_6 Тогда - - WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси_2_0_1_6(ПараметрыПодключения, СтрокаСообщенияОбОшибке); - - Иначе - - WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси(ПараметрыПодключения, СтрокаСообщенияОбОшибке); - - КонецЕсли; - - Если WSПрокси = Неопределено Тогда - ОбменДаннымиСервер.СообщитьОбОшибке(СтрокаСообщенияОбОшибке, Отказ); - Возврат; - КонецЕсли; - - КодУзла = ОбменДаннымиВызовСервера.ПолучитьКодЭтогоУзлаДляПланаОбмена(Объект.ИмяПланаОбмена); - - // Получаем параметры второй информационной базы. - Если Объект.ВерсияКорреспондента_2_1_1_7 Тогда - - ПараметрыПриемника = СериализаторXDTO.ПрочитатьXDTO(WSПрокси.GetIBParameters(ИмяПланаОбмена, КодУзла, СообщениеОбОшибкеКорреспондента)); - - ИначеЕсли Объект.ВерсияКорреспондента_2_0_1_6 Тогда - - ПараметрыПриемника = СериализаторXDTO.ПрочитатьXDTO(WSПрокси.GetIBParameters(ИмяПланаОбмена, КодУзла, СообщениеОбОшибкеКорреспондента)); - - Иначе - - ПараметрыПриемника = ЗначениеИзСтрокиВнутр(WSПрокси.GetIBParameters(ИмяПланаОбмена, КодУзла, СообщениеОбОшибкеКорреспондента)); - - КонецЕсли; - - НастройкиПараметровУчетаКорреспондентаЗаданы = ПараметрыПриемника.НастройкиПараметровУчетаЗаданы; - Если ПараметрыПриемника.Свойство("УзелСуществует") Тогда - УзелСуществует = ПараметрыПриемника.УзелСуществует; - КонецЕсли; - ИначеЕсли ТипСоединения = "ВнешнееСоединение" Тогда - - ПараметрыТранспорта = ОбменДаннымиСервер.НастройкиТранспортаПоПараметрамВнешнегоСоединения(ПараметрыПодключения); - Подключение = ОбменДаннымиСервер.УстановитьВнешнееСоединениеСБазой(ПараметрыПодключения); - СтрокаСообщенияОбОшибке = Подключение.ПодробноеОписаниеОшибки; - ВнешнееСоединение = Подключение.Соединение; - - Если ВнешнееСоединение = Неопределено Тогда - ОбменДаннымиСервер.СообщитьОбОшибке(СтрокаСообщенияОбОшибке, Отказ); - Возврат; - КонецЕсли; - - КодУзла = ОбменДаннымиВызовСервера.ПолучитьКодЭтогоУзлаДляПланаОбмена(Объект.ИмяПланаОбмена); - - // Получаем параметры второй информационной базы. - Если Объект.ВерсияКорреспондента_2_1_1_7 Тогда - - ПараметрыПриемника = ОбщегоНазначения.ЗначениеИзСтрокиXML(ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПолучитьПараметрыИнформационнойБазы_2_0_1_6(ИмяПланаОбмена, КодУзла, СообщениеОбОшибкеКорреспондента)); - - ИначеЕсли Объект.ВерсияКорреспондента_2_0_1_6 Тогда - - ПараметрыПриемника = ОбщегоНазначения.ЗначениеИзСтрокиXML(ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПолучитьПараметрыИнформационнойБазы_2_0_1_6(ИмяПланаОбмена, КодУзла, СообщениеОбОшибкеКорреспондента)); - - Иначе - - ПараметрыПриемника = ЗначениеИзСтрокиВнутр(ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПолучитьПараметрыИнформационнойБазы(ИмяПланаОбмена, КодУзла, СообщениеОбОшибкеКорреспондента)); - - КонецЕсли; - - НастройкиПараметровУчетаКорреспондентаЗаданы = ПараметрыПриемника.НастройкиПараметровУчетаЗаданы; - Если ПараметрыПриемника.Свойство("УзелСуществует") Тогда - УзелСуществует = ПараметрыПриемника.УзелСуществует; - КонецЕсли; - КонецЕсли; - - Если Отказ Тогда - Возврат; - КонецЕсли; - - Если Не УзелСуществует Тогда - Сообщение = НСтр("ru = 'Не найден узел плана обмена; имя плана обмена %1; код узла %2'"); - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ИмяПланаОбмена, КодУзла); - ВызватьИсключение Сообщение; - КонецЕсли; - - - Если НастройкиПараметровУчетаЗаданы И НастройкиПараметровУчетаКорреспондентаЗаданы Тогда - ПропуститьСтраницу = Истина; - Возврат; - КонецЕсли; - - Если Не НастройкиПараметровУчетаЗаданы Тогда - - Если ПустаяСтрока(СообщениеОбОшибке) Тогда - СообщениеОбОшибке = НСтр("ru = 'Не заданы параметры учета в этой программе.'"); - КонецЕсли; - - НадписьНастройкиПараметровУчета = СообщениеОбОшибке; - Отказ = Истина; - - КонецЕсли; - - Если Не НастройкиПараметровУчетаКорреспондентаЗаданы Тогда - - Если ПустаяСтрока(СообщениеОбОшибкеКорреспондента) Тогда - СообщениеОбОшибкеКорреспондента = НСтр("ru = 'Не заданы параметры учета в приложении, расположенном в Интернете.'"); - КонецЕсли; - - НадписьНастройкиПараметровУчетаКорреспондента = СообщениеОбОшибкеКорреспондента; - Отказ = Истина; - - КонецЕсли; - - Элементы.НастройкиПараметровУчета.Видимость = Не НастройкиПараметровУчетаЗаданы; - Элементы.НастройкиПараметровУчетаКорреспондента.Видимость = Не НастройкиПараметровУчетаКорреспондентаЗаданы; - -КонецПроцедуры - -&НаКлиенте -Процедура ПроверитьЗаданиеНастроекДляПервойБазы(Отказ, ТипСоединения = "ВебСервис") - - Если ПустаяСтрока(Объект.НаименованиеЭтойБазы) Тогда - - НСтрока = НСтр("ru = 'Укажите наименование этой программы.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.НаименованиеЭтойБазы",, Отказ); - - КонецЕсли; - - Если ПустаяСтрока(Объект.НаименованиеВторойБазы) Тогда - - НСтрока = НСтр("ru = 'Укажите наименование приложения в Интернете.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.НаименованиеВторойБазы",, Отказ); - - КонецЕсли; - - Если Объект.ИспользоватьПрефиксыДляНастройкиОбмена - И ПустаяСтрока(Объект.ПрефиксИнформационнойБазыИсточника) Тогда - - НСтрока = НСтр("ru = 'Укажите префикс этой программы.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.ПрефиксИнформационнойБазыИсточника",, Отказ); - - КонецЕсли; - - Если Объект.ИспользоватьПрефиксыДляНастройкиОбмена Тогда - Если СокрЛП(Объект.ПрефиксИнформационнойБазыИсточника) = СокрЛП(Объект.ПрефиксИнформационнойБазыПриемника) Тогда - - НСтрока = НСтр("ru = 'Префиксы информационных баз должны быть различными.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.ПрефиксИнформационнойБазыИсточника",, Отказ); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.ПрефиксИнформационнойБазыПриемника",, Отказ); - - Элементы.ПрефиксИнформационнойБазыПриемникаОбменЧерезВебСервис.ТолькоПросмотр = Ложь; - Иначе - Элементы.ПрефиксИнформационнойБазыПриемникаОбменЧерезВебСервис.ТолькоПросмотр = Истина; - КонецЕсли; - КонецЕсли; - - Если Отказ Тогда - Возврат; - КонецЕсли; - - Если ПредусмотреныНастройкиОтборовНаУзле Тогда - - // Проверяем заполнение реквизитов в форме. - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ПараметрыПодключения", СтруктураПараметровПодключенияВнешнегоСоединения(ТипСоединения)); - ПараметрыФормы.Вставить("Настройки", КонтекстФормыНастройкиУзлов); - ПараметрыФормы.Вставить("ПроверкаЗаполнения"); - - ПроверитьЗаполнениеРеквизитовВФорме(Отказ, ФормаНастройкиУзлов, ПараметрыФормы, "ОписаниеНастроекВыгрузкиДанных"); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПроверитьЗаданиеНастроекДляВторойБазы(Отказ, ТипСоединения) - - Если ПустаяСтрока(Объект.НаименованиеВторойБазы) Тогда - - НСтрока = НСтр("ru = 'Укажите наименование программы.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.НаименованиеВторойБазы",, Отказ); - - КонецЕсли; - - Если Объект.ИспользоватьПрефиксыДляНастройкиОбмена - И СокрЛП(Объект.ПрефиксИнформационнойБазыИсточника) = СокрЛП(Объект.ПрефиксИнформационнойБазыПриемника) Тогда - - НСтрока = НСтр("ru = 'Префиксы информационных баз должны быть различными.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.ПрефиксИнформационнойБазыПриемника",, Отказ); - - КонецЕсли; - - Если Отказ Тогда - Возврат; - КонецЕсли; - - Если ПредусмотреныНастройкиОтборовНаУзлеБазыКорреспондента Тогда - - // Проверяем заполнение реквизитов в форме настроек ограничения миграции данных. - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ПараметрыВнешнегоСоединения", СтруктураПараметровПодключенияВнешнегоСоединения(ТипСоединения)); - ПараметрыФормы.Вставить("НастройкаОтборовНаУзле", НастройкаОтборовНаУзлеБазыКорреспондента); - - ПроверитьЗаполнениеРеквизитовВФорме(Отказ, ФормаНастройкиУзлаБазыКорреспондента, ПараметрыФормы, "ОписаниеОграниченийПередачиДанныхБазыКорреспондента"); - - КонецЕсли; - - Если ПредусмотреныЗначенияПоУмолчаниюНаУзлеБазыКорреспондента Тогда - - // Проверяем заполнение реквизитов в форме дополнительных настроек. - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ПараметрыВнешнегоСоединения", СтруктураПараметровПодключенияВнешнегоСоединения(ТипСоединения)); - ПараметрыФормы.Вставить("ЗначенияПоУмолчаниюНаУзле", ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента); - - ПроверитьЗаполнениеРеквизитовВФорме(Отказ, ФормаНастройкиЗначенийПоУмолчаниюБазыКорреспондента, ПараметрыФормы, "ОписаниеЗначенийПоУмолчаниюБазыКорреспондента"); - - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура СтраницаМастераЗаданиеПараметровТранспортаFILE_ПриПереходеДалееНаСервере(Отказ) - - Если Не ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда - ОбменДаннымиСервер.ПроверитьПодключениеОбработкиТранспортаСообщенийОбмена(Отказ, Объект, Перечисления.ВидыТранспортаСообщенийОбмена.FILE); - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура СтраницаМастераЗаданиеПараметровТранспортаFTP_ПриПереходеДалееНаСервере(Отказ) - - ОбменДаннымиСервер.ПроверитьПодключениеОбработкиТранспортаСообщенийОбмена(Отказ, Объект, Перечисления.ВидыТранспортаСообщенийОбмена.FTP); - -КонецПроцедуры - -&НаСервере -Процедура СтраницаМастераЗаданиеПараметровТранспортаEMAIL_ПриПереходеДалееНаСервере(Отказ) - - Если Объект.ИспользоватьПараметрыТранспортаEMAIL Тогда - - ОбменДаннымиСервер.ПроверитьПодключениеОбработкиТранспортаСообщенийОбмена(Отказ, Объект, Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL); - - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура СтраницаМастераНастройкаПараметров_ПриПереходеДалееНаСервере(Отказ) - ИспользуемыйПрефиксКорреспондента = ?(Объект.ИспользоватьПрефиксыДляНастройкиОбмена, - Объект.ПрефиксИнформационнойБазыПриемника, - Объект.ИдентификаторИнформационнойБазыПриемника); - Если Не ПланыОбмена[Объект.ИмяПланаОбмена].НайтиПоКоду(ОбменДаннымиСервер.КодУзлаПланаОбменаСтрокой(ИспользуемыйПрефиксКорреспондента)).Пустая() Тогда - - НСтрока = НСтр("ru = 'Значение префикса второй информационной базы не уникально. - |В системе уже существует синхронизация данных для информационной базы (программы) с указанным префиксом. - |Измените значение префикса или используйте существующую синхронизацию.'"); - // - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.ПрефиксИнформационнойБазыПриемника",, Отказ); - - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура СтраницаМастераНастройкаПараметров_ПриОткрытииНаСервере(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) - - // Заполняем список выбора транспортов обмена из доступных видов (выбранных пользователем). - СписокЗначений = Новый СписокЗначений; - - Если Объект.ИспользоватьПараметрыТранспортаFILE Тогда - ЗначениеПеречисления = Перечисления.ВидыТранспортаСообщенийОбмена.FILE; - СписокЗначений.Добавить(ЗначениеПеречисления, Строка(ЗначениеПеречисления)); - КонецЕсли; - - Если Объект.ИспользоватьПараметрыТранспортаFTP Тогда - ЗначениеПеречисления = Перечисления.ВидыТранспортаСообщенийОбмена.FTP; - СписокЗначений.Добавить(ЗначениеПеречисления, Строка(ЗначениеПеречисления)); - КонецЕсли; - - Если Объект.ИспользоватьПараметрыТранспортаEMAIL Тогда - ЗначениеПеречисления = Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL; - СписокЗначений.Добавить(ЗначениеПеречисления, Строка(ЗначениеПеречисления)); - КонецЕсли; - - СписокВыбора = Элементы.ВидТранспортаСообщенийОбмена.СписокВыбора; - СписокВыбора.Очистить(); - - Для Каждого Элемент Из СписокЗначений Цикл - - ЗаполнитьЗначенияСвойств(СписокВыбора.Добавить(), Элемент); - - КонецЦикла; - - Элементы.ГруппаСпособПодключения.Видимость = СписокВыбора.Количество() > 1; - - // Устанавливаем вид транспорта сообщений обмена по умолчанию - // в зависимости от тех видов транспорта, которые были выбраны пользователем. - Если Объект.ИспользоватьПараметрыТранспортаFILE Тогда - - Объект.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FILE; - - ИначеЕсли Объект.ИспользоватьПараметрыТранспортаFTP Тогда - - Объект.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FTP; - - ИначеЕсли Объект.ИспользоватьПараметрыТранспортаEMAIL Тогда - - Объект.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL; - - КонецЕсли; - - Элементы.ОписаниеОграниченийПередачиДанных.Заголовок = СтрЗаменить(Элементы.ОписаниеОграниченийПередачиДанных.Заголовок, - "%Программа%", СинонимПланаОбмена); - Элементы.ОписаниеОграниченийПередачиДанных2.Заголовок = Элементы.ОписаниеОграниченийПередачиДанных.Заголовок; - - Элементы.ОписаниеЗначенийПоУмолчанию.Заголовок = СтрЗаменить(Элементы.ОписаниеЗначенийПоУмолчанию.Заголовок, - "%Программа%", СинонимПланаОбмена); - Элементы.ОписаниеЗначенийПоУмолчанию2.Заголовок = Элементы.ОписаниеЗначенийПоУмолчанию.Заголовок; - -КонецПроцедуры - -&НаСервере -Процедура СтраницаМастераОжиданиеСозданияНастройкиОбменаДанными_ОбработкаДлительнойОперацииНаСервере(Отказ) - - // создаем настройку обмена - НастроитьНовыйОбменДаннымиНаСервере(Отказ, НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле); - - Если Отказ Тогда - Возврат; - КонецЕсли; - - // Выгружаем файл с настройками для второй ИБ. - Если Объект.ЭтоНастройкаРаспределеннойИнформационнойБазы Тогда - - ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); - - ОбработкаОбъект.ВыполнитьВыгрузкуПараметровМастераВКонстанту(Отказ); - - ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект"); - - ИначеЕсли Объект.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FILE Тогда - - АдресВременногоХранилища = ""; - - ВыгрузитьНастройкиОбменаДляПриемника(Отказ, АдресВременногоХранилища); - - Если Не Отказ Тогда - - Объект.ИмяФайлаНастроекСинхронизацииДанных = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(Объект.FILEКаталогОбменаИнформацией, ИмяФайлаНастроекДляПриемника); - - ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВременногоХранилища); - - УдалитьИзВременногоХранилища(АдресВременногоХранилища); - - // получаем файл - ДвоичныеДанные.Записать(Объект.ИмяФайлаНастроекСинхронизацииДанных); - - ФайлНастроекОбменаДаннымиСохранен = Истина; - - КонецЕсли; - - ИначеЕсли Объект.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL - Или Объект.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FTP Тогда - - Объект.ИмяФайлаНастроекСинхронизацииДанных = ИмяФайлаНастроекДляПриемника; - - КонецЕсли; - - Элементы.ВыполнитьОбменДаннымиСейчас21.Заголовок = СтрЗаменить(Элементы.ВыполнитьОбменДаннымиСейчас21.Заголовок, "%Программа%", СинонимПланаОбмена); - -КонецПроцедуры - -&НаСервере -Процедура СтраницаМастераОжиданиеПроверкиПодключенияВнешнегоСоединения_ОбработкаДлительнойОперацииНаСервере(Отказ) - - Если Объект.COMВариантРаботыИнформационнойБазы = 0 Тогда - - Если ПустаяСтрока(Объект.COMКаталогИнформационнойБазы) Тогда - - НСтрока = НСтр("ru = 'Укажите каталог информационной базы.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.COMКаталогИнформационнойБазы",, Отказ); - Отказ = Истина; - Возврат; - - КонецЕсли; - - Иначе - - Если ПустаяСтрока(Объект.COMИмяСервера1СПредприятия) Тогда - - НСтрока = НСтр("ru = 'Укажите имя кластера серверов.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.COMИмяСервера1СПредприятия",, Отказ); - Отказ = Истина; - Возврат; - - ИначеЕсли ПустаяСтрока(Объект.COMИмяИнформационнойБазыНаСервере1СПредприятия) Тогда - - НСтрока = НСтр("ru = 'Укажите имя информационной базы.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.COMИмяИнформационнойБазыНаСервере1СПредприятия",, Отказ); - Отказ = Истина; - Возврат; - - КонецЕсли; - - КонецЕсли; - - Результат = ОбменДаннымиСервер.УстановитьВнешнееСоединениеСБазой(Объект); - ВнешнееСоединение = Результат.Соединение; - ОшибкаПодключенияКомпоненты = Результат.ОшибкаПодключенияКомпоненты; - Если ВнешнееСоединение = Неопределено Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Результат.КраткоеОписаниеОшибки,,,, Отказ); - Возврат; - КонецЕсли; - - // {Обработчик: ПриПодключенииККорреспонденту} Начало - ВерсияКонфигурацииКорреспондента = ВнешнееСоединение.Метаданные.Версия; - - ПриПодключенииККорреспонденту(Отказ, ВерсияКонфигурацииКорреспондента); - - Если Отказ Тогда - Возврат; - КонецЕсли; - // {Обработчик: ПриПодключенииККорреспонденту} Окончание - - ВерсииКорреспондента = ОбменДаннымиСервер.ВерсииКорреспондентаЧерезВнешнееСоединение(ВнешнееСоединение); - - Объект.ВерсияКорреспондента_2_0_1_6 = (ВерсииКорреспондента.Найти("2.0.1.6") <> Неопределено); - Объект.ВерсияКорреспондента_2_1_1_7 = (ВерсииКорреспондента.Найти("2.1.1.7") <> Неопределено); - - Попытка - ПланОбменаСуществует = ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПланОбменаСуществует(Объект.ИмяПланаОбмена); - Исключение - ПланОбменаСуществует = Ложь; - КонецПопытки; - - Если Не ПланОбменаСуществует Тогда - - Сообщение = НСтр("ru = 'Синхронизация данных с указанной программой не предусмотрена.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Сообщение,,,, Отказ); - Возврат; - - КонецЕсли; - - Если НРег(СтрокаСоединенияИнформационнойБазы()) = НРег(ВнешнееСоединение.СтрокаСоединенияИнформационнойБазы()) Тогда - - Сообщение = НСтр("ru = 'Заданы настройки подключения к этой информационной базе.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Сообщение,,,, Отказ); - Возврат; - - КонецЕсли; - - Если Объект.ИспользоватьПрефиксыДляНастройкиОбмена Тогда - Объект.ПрефиксИнформационнойБазыПриемника = ВнешнееСоединение.ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"); - Объект.ПрефиксИнформационнойБазыПриемникаУстановлен = ЗначениеЗаполнено(Объект.ПрефиксИнформационнойБазыПриемника); - Иначе - Объект.ИдентификаторИнформационнойБазыПриемника = ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.КодПредопределенногоУзлаПланаОбмена(Объект.ИмяПланаОбмена); - Объект.ПрефиксИнформационнойБазыПриемникаУстановлен = ЗначениеЗаполнено(Объект.ИдентификаторИнформационнойБазыПриемника); - КонецЕсли; - // Проверка на существование обмена с базой-корреспондентом. - ПроверитьНаличиеСуществующегоОбменаДаннымиСВторойБазой(Отказ); - Если Отказ Тогда - Возврат; - КонецЕсли; - - ПрефиксПриемникаЭлемент = Элементы.ПрефиксИнформационнойБазыПриемникаОбменЧерезВнешнееСоединение; - Если Объект.ИспользоватьПрефиксыДляНастройкиОбмена Тогда - Если Объект.ПрефиксИнформационнойБазыПриемникаУстановлен Тогда - ПрефиксПриемникаЭлемент.ТолькоПросмотр = Истина; - ПрефиксПриемникаЭлемент.ОтображениеПодсказки = ОтображениеПодсказки.Нет; - Иначе - Объект.ПрефиксИнформационнойБазыПриемника = ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПрефиксИнформационнойБазыПоУмолчанию(); - ПрефиксПриемникаЭлемент.ТолькоПросмотр = Ложь; - ПрефиксПриемникаЭлемент.ОтображениеПодсказки = ОтображениеПодсказки.Кнопка; - КонецЕсли; - Иначе - ПрефиксПриемникаЭлемент.Видимость = Ложь; - КонецЕсли; - - Объект.НаименованиеВторойБазы = ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.НаименованиеПредопределенногоУзлаПланаОбмена(Объект.ИмяПланаОбмена); - ЗаданоНаименованиеВторойБазы = Не ПустаяСтрока(Объект.НаименованиеВторойБазы); - - Элементы.НаименованиеВторойБазы2.ТолькоПросмотр = ЗаданоНаименованиеВторойБазы; - - Если Не ЗаданоНаименованиеВторойБазы Тогда - - Объект.НаименованиеВторойБазы = ВнешнееСоединение.ОбменДаннымиПовтИсп.ИмяЭтойИнформационнойБазы(); - - КонецЕсли; - - ОбновитьНастройкиИИхОписанияЗначениямиПоУмолчанию(Истина); - -КонецПроцедуры - -&НаСервере -Процедура ПроверитьНаличиеСуществующегоОбменаДаннымиСВторойБазой(Отказ) - ИспользуемыйПрефиксКорреспондента = ?(Объект.ИспользоватьПрефиксыДляНастройкиОбмена, - Объект.ПрефиксИнформационнойБазыПриемника, - Объект.ИдентификаторИнформационнойБазыПриемника); - - КодУзла = ?(ПустаяСтрока(Объект.КодУзлаКорреспондента), - ОбменДаннымиСервер.КодУзлаПланаОбменаСтрокой(ИспользуемыйПрефиксКорреспондента), - Объект.КодУзлаКорреспондента); - - Если Не ПустаяСтрока(КодУзла) - И Не ПланыОбмена[Объект.ИмяПланаОбмена].НайтиПоКоду(КодУзла).Пустая() Тогда - - Сообщение = НСтр("ru = 'Синхронизация данных между программами уже была настроена ранее.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Сообщение,,,, Отказ); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ЗакрытьФормуОтложенно() - ОбновитьИнтерфейс(); - - ЗакрытьФормуБезусловно = Истина; - Закрыть(); - -КонецПроцедуры - -#КонецОбласти - -#Область ИнициализацияПереходов - -&НаСервере -Процедура ТаблицаПереходовПервогоЭтапаНастройкиОбмена() - - ТаблицаПереходов.Очистить(); - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 1; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераНачало"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииНачало"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 2; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераВыборРежимаРаботыПомощника"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииПродолжение"; - НовыйПереход.ИмяОбработчикаПриОткрытии = "СтраницаМастераВыборРежимаРаботыПомощника_ПриОткрытии"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 3; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераЗаданиеПараметровТранспортаFILE"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииПродолжение"; - НовыйПереход.ИмяОбработчикаПриПереходеДалее = "СтраницаМастераЗаданиеПараметровТранспортаFILE_ПриПереходеДалее"; - НовыйПереход.ИмяОбработчикаПриОткрытии = "СтраницаМастераЗаданиеПараметровТранспортаFILE_ПриОткрытии"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 4; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераЗаданиеПараметровТранспортаFTP"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииПродолжение"; - НовыйПереход.ИмяОбработчикаПриПереходеДалее = "СтраницаМастераЗаданиеПараметровТранспортаFTP_ПриПереходеДалее"; - НовыйПереход.ИмяОбработчикаПриОткрытии = "СтраницаМастераЗаданиеПараметровТранспортаFTP_ПриОткрытии"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 5; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераЗаданиеПараметровТранспортаEMAIL"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииПродолжение"; - НовыйПереход.ИмяОбработчикаПриПереходеДалее = "СтраницаМастераЗаданиеПараметровТранспортаEMAIL_ПриПереходеДалее"; - НовыйПереход.ИмяОбработчикаПриОткрытии = "СтраницаМастераЗаданиеПараметровТранспортаEMAIL_ПриОткрытии"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 6; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераНастройкаПараметров"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииПродолжение"; - НовыйПереход.ИмяОбработчикаПриПереходеДалее = "СтраницаМастераНастройкаПараметров_ПриПереходеДалее"; - НовыйПереход.ИмяОбработчикаПриОткрытии = "СтраницаМастераНастройкаПараметров_ПриОткрытии"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 7; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераИтогНастройкиОбмена"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииПродолжение"; - НовыйПереход.ИмяОбработчикаПриОткрытии = "СтраницаМастераИтогНастройкиОбмена_ПриОткрытии"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 8; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераОжиданиеСозданияНастройкиОбменаДанными"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеСозданияНастройкиОбменаДанными_ОбработкаДлительнойОперации"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 9; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераОкончаниеСВыгрузкойНастройки"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОкончание"; - -КонецПроцедуры - -&НаСервере -Процедура ТаблицаПереходовВторогоЭтапаНастройкиОбмена() - - ТаблицаПереходов.Очистить(); - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 1; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераНачало"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииНачало"; - НовыйПереход.ИмяОбработчикаПриПереходеДалее = "СтраницаМастераНачало_ПриПереходеДалее"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 2; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераЗаданиеПараметровТранспортаFILE"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииПродолжение"; - НовыйПереход.ИмяОбработчикаПриПереходеДалее = "СтраницаМастераЗаданиеПараметровТранспортаFILE_ПриПереходеДалее"; - НовыйПереход.ИмяОбработчикаПриОткрытии = "СтраницаМастераЗаданиеПараметровТранспортаFILE_ПриОткрытии"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 3; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераЗаданиеПараметровТранспортаFTP"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииПродолжение"; - НовыйПереход.ИмяОбработчикаПриПереходеДалее = "СтраницаМастераЗаданиеПараметровТранспортаFTP_ПриПереходеДалее"; - НовыйПереход.ИмяОбработчикаПриОткрытии = "СтраницаМастераЗаданиеПараметровТранспортаFTP_ПриОткрытии"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 4; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераЗаданиеПараметровТранспортаEMAIL"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииПродолжение"; - НовыйПереход.ИмяОбработчикаПриПереходеДалее = "СтраницаМастераЗаданиеПараметровТранспортаEMAIL_ПриПереходеДалее"; - НовыйПереход.ИмяОбработчикаПриОткрытии = "СтраницаМастераЗаданиеПараметровТранспортаEMAIL_ПриОткрытии"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 5; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераНастройкаПараметровВторогоЭтапаНастройки"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииПродолжение"; - НовыйПереход.ИмяОбработчикаПриПереходеДалее = "СтраницаМастераНастройкаПараметровВторогоЭтапаНастройки_ПриПереходеДалее"; - НовыйПереход.ИмяОбработчикаПриОткрытии = "СтраницаМастераНастройкаПараметров_ПриОткрытии"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 6; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераИтогНастройкиОбмена"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОкончаниеИНазад"; - НовыйПереход.ИмяОбработчикаПриОткрытии = "СтраницаМастераИтогНастройкиОбмена_ПриОткрытии"; - -КонецПроцедуры - -&НаСервере -Процедура ТаблицаПереходовНастройкиОбменаЧерезВнешнееСоединение() - - ТаблицаПереходов.Очистить(); - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 1; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераНачало"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииНачало"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 2; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераВыборРежимаРаботыПомощника"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииПродолжение"; - НовыйПереход.ИмяОбработчикаПриПереходеДалее = "СтраницаМастераВыборРежимаРаботыПомощника_ПриПереходеДалее"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 3; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераОжиданиеПроверкиПодключенияВнешнегоСоединения"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеПроверкиПодключенияВнешнегоСоединения_ОбработкаДлительнойОперации"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 4; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераНастройкаПараметровДляВнешнегоСоединенияПервойБазы"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииПродолжение"; - НовыйПереход.ИмяОбработчикаПриПереходеДалее = "СтраницаМастераНастройкаПараметровДляВнешнегоСоединенияПервойБазы_ПриПереходеДалее"; - НовыйПереход.ИмяОбработчикаПриОткрытии = "СтраницаМастераНастройкаПараметровДляВнешнегоСоединенияПервойБазы_ПриОткрытии"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 5; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераНастройкаПараметровДляВнешнегоСоединенияВторойБазы"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииПродолжение"; - НовыйПереход.ИмяОбработчикаПриПереходеДалее = "СтраницаМастераНастройкаПараметровДляВнешнегоСоединенияВторойБазы_ПриПереходеДалее"; - НовыйПереход.ИмяОбработчикаПриОткрытии = "СтраницаМастераНастройкаПараметровДляВнешнегоСоединенияВторойБазы_ПриОткрытии"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 6; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераИтогНастройкиОбмена"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииПродолжение"; - НовыйПереход.ИмяОбработчикаПриОткрытии = "СтраницаМастераИтогНастройкиОбмена_ПриОткрытии_ВнешнееСоединение"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 7; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераОжиданиеСозданияНастройкиОбменаДанными"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеСозданияНастройкиОбменаДаннымиЧерезВнешнееСоединение_ОбработкаДлительнойОперации"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 8; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераОкончаниеСОбменомПоВнешнемуСоединению"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОкончание"; - -КонецПроцедуры - -&НаСервере -Процедура ТаблицаПереходовНастройкиОбменаЧерезВебСервис() - - ТаблицаПереходов.Очистить(); - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 1; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераНачало"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииНачало"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 2; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераВыборРежимаРаботыПомощника"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииПродолжение"; - НовыйПереход.ИмяОбработчикаПриПереходеДалее = "СтраницаМастераВыборРежимаРаботыПомощника_ПриПереходеДалее"; - - // Задание параметров подключения; Проверка подключения. - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 3; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераОжиданиеПроверкиПодключенияКСервису"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеПроверкиПодключенияЧерезВебСервис_ОбработкаДлительнойОперации"; - - // Настройка параметров для выгрузки данных (отборы на узлах). - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 4; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераНастройкаПараметровОбменаДаннымиЧерезВебСервис"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииПродолжение"; - НовыйПереход.ИмяОбработчикаПриПереходеДалее = "СтраницаМастераНастройкаПараметровОбменаДанными_ПриПереходеДалее"; - НовыйПереход.ИмяОбработчикаПриОткрытии = "СтраницаМастераНастройкаПараметровОбменаДанными_ПриОткрытии"; - - // Значения по умолчанию при загрузке данных. - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 5; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераПараметрыПолученияДанных"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииПродолжение"; - НовыйПереход.ИмяОбработчикаПриПереходеДалее = "СтраницаМастераПараметрыПолученияДанных_ПриПереходеДалее"; - - // Создание настройки обмена; Регистрация справочников для выгрузки. - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 6; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераОжиданиеАнализаДанныхСозданиеНастройкиОбмена"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеАнализаДанныхСозданиеНастройкиОбмена_ОбработкаДлительнойОперации"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 7; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераОжиданиеАнализаДанныхСозданиеНастройкиОбмена"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеАнализаДанныхСозданиеНастройкиОбменаДлительнаяОперация_ОбработкаДлительнойОперации"; - - // Получение справочников от корреспондента. - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 8; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщения"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщения_ОбработкаДлительнойОперации"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 9; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщения"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщенияДлительнаяОперация_ОбработкаДлительнойОперации"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 10; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщения"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщенияДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"; - - // Выполнение автоматического сопоставления данных; Получение статистики сопоставления. - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 11; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераОжиданиеАнализаДанныхАвтоматическоеСопоставление"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеАнализаДанныхАвтоматическоеСопоставление_ОбработкаДлительнойОперации"; - - // Ручное сопоставление данных. - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 12; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераСопоставлениеДанных"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииПродолжениеТолькоДалее"; - НовыйПереход.ИмяОбработчикаПриПереходеДалее = "СтраницаМастераСопоставлениеДанных_ПриПереходеДалее"; - НовыйПереход.ИмяОбработчикаПриОткрытии = "СтраницаМастераСопоставлениеДанных_ПриОткрытии"; - - // Синхронизация справочников. - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 13; - НовыйПереход.ИмяОсновнойСтраницы = "ОжиданиеСинхронизацииДанных"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеСинхронизацииСправочниковЗагрузка_ОбработкаДлительнойОперации"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 14; - НовыйПереход.ИмяОсновнойСтраницы = "ОжиданиеСинхронизацииДанных"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеСинхронизацииСправочниковВыгрузка_ОбработкаДлительнойОперации"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 15; - НовыйПереход.ИмяОсновнойСтраницы = "ОжиданиеСинхронизацииДанных"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеСинхронизацииСправочниковВыгрузкаДлительнаяОперация_ОбработкаДлительнойОперации"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 16; - НовыйПереход.ИмяОсновнойСтраницы = "ОжиданиеСинхронизацииДанных"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеСинхронизацииСправочниковВыгрузкаДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"; - - // Настройки параметров учета - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 17; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераНастройкиОтраженияДокументовВУчете"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииПродолжениеТолькоДалее"; - НовыйПереход.ИмяОбработчикаПриПереходеДалее = "СтраницаМастераНастройкиОтраженияДокументовВУчете_ПриПереходеДалее"; - НовыйПереход.ИмяОбработчикаПриОткрытии = "СтраницаМастераНастройкиОтраженияДокументовВУчете_ПриОткрытии"; - - // Сохранение настроек; Регистрация всех данных к выгрузке, кроме справочников. - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 18; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераОжиданиеСохраненияНастроек"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеСохраненияНастроек_ОбработкаДлительнойОперации"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 19; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераОжиданиеСохраненияНастроек"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеСохраненияНастроекДлительнаяОперация_ОбработкаДлительнойОперации"; - - // Синхронизация всех данных, кроме справочников. - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 20; - НовыйПереход.ИмяОсновнойСтраницы = "ОжиданиеСинхронизацииДанных"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузка_ОбработкаДлительнойОперации"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 21; - НовыйПереход.ИмяОсновнойСтраницы = "ОжиданиеСинхронизацииДанных"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузкаДлительнаяОперация_ОбработкаДлительнойОперации"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 22; - НовыйПереход.ИмяОсновнойСтраницы = "ОжиданиеСинхронизацииДанных"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузкаДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 23; - НовыйПереход.ИмяОсновнойСтраницы = "ОжиданиеСинхронизацииДанных"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузкаДанных_ОбработкаДлительнойОперации"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 24; - НовыйПереход.ИмяОсновнойСтраницы = "ОжиданиеСинхронизацииДанных"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеСинхронизацииДанныхВыгрузка_ОбработкаДлительнойОперации"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 25; - НовыйПереход.ИмяОсновнойСтраницы = "ОжиданиеСинхронизацииДанных"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеСинхронизацииДанныхВыгрузкаДлительнаяОперация_ОбработкаДлительнойОперации"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 26; - НовыйПереход.ИмяОсновнойСтраницы = "ОжиданиеСинхронизацииДанных"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеСинхронизацииДанныхВыгрузкаДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 27; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераСозданиеОбменаДаннымиУспешноЗавершено"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОкончание"; - НовыйПереход.ИмяОбработчикаПриОткрытии = "СтраницаМастераСозданиеОбменаДаннымиУспешноЗавершено_ПриОткрытии"; - -КонецПроцедуры - -&НаСервере -Процедура ТаблицаПереходовРасширеннойНастройкиОбменаССервисом() - - ТаблицаПереходов.Очистить(); - - // Задание параметров подключения; Проверка подключения. - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 1; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераНачалоНастройкиОбменаССервисом"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииНачало"; - НовыйПереход.ИмяОбработчикаПриПереходеДалее = "СтраницаМастераНачалоНастройкиОбменаССервисом_ПриПереходеДалее"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 2; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераОжиданиеПроверкиПодключенияКСервису"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеПроверкиПодключенияЧерезВебСервис_ОбработкаДлительнойОперации"; - - // Настройка параметров для выгрузки данных (отборы на узлах). - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 3; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераНастройкаПараметровОбменаДанными"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииПродолжение"; - НовыйПереход.ИмяОбработчикаПриПереходеДалее = "СтраницаМастераНастройкаПараметровОбменаДанными_ПриПереходеДалее"; - НовыйПереход.ИмяОбработчикаПриОткрытии = "СтраницаМастераНастройкаПараметровОбменаДанными_ПриОткрытии"; - - // Значения по умолчанию при загрузке данных. - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 4; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераПараметрыПолученияДанных"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииПродолжение"; - НовыйПереход.ИмяОбработчикаПриПереходеДалее = "СтраницаМастераПараметрыПолученияДанных_ПриПереходеДалее"; - - // Создание настройки обмена; Регистрация справочников для выгрузки. - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 5; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераОжиданиеАнализаДанныхСозданиеНастройкиОбмена"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеАнализаДанныхСозданиеНастройкиОбмена_ОбработкаДлительнойОперации"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 6; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераОжиданиеАнализаДанныхСозданиеНастройкиОбмена"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеАнализаДанныхСозданиеНастройкиОбменаДлительнаяОперация_ОбработкаДлительнойОперации"; - - // Получение справочников от корреспондента. - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 7; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщения"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщения_ОбработкаДлительнойОперации"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 8; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщения"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщенияДлительнаяОперация_ОбработкаДлительнойОперации"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 9; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщения"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщенияДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"; - - // Выполнение автоматического сопоставления данных; Получение статистики сопоставления. - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 10; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераОжиданиеАнализаДанныхАвтоматическоеСопоставление"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеАнализаДанныхАвтоматическоеСопоставление_ОбработкаДлительнойОперации"; - - // Ручное сопоставление данных. - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 11; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераСопоставлениеДанных"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииПродолжениеТолькоДалее"; - НовыйПереход.ИмяОбработчикаПриПереходеДалее = "СтраницаМастераСопоставлениеДанных_ПриПереходеДалее"; - НовыйПереход.ИмяОбработчикаПриОткрытии = "СтраницаМастераСопоставлениеДанных_ПриОткрытии"; - - // Синхронизация справочников. - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 12; - НовыйПереход.ИмяОсновнойСтраницы = "ОжиданиеСинхронизацииДанных"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеСинхронизацииСправочниковЗагрузка_ОбработкаДлительнойОперации"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 13; - НовыйПереход.ИмяОсновнойСтраницы = "ОжиданиеСинхронизацииДанных"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеСинхронизацииСправочниковВыгрузка_ОбработкаДлительнойОперации"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 14; - НовыйПереход.ИмяОсновнойСтраницы = "ОжиданиеСинхронизацииДанных"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеСинхронизацииСправочниковВыгрузкаДлительнаяОперация_ОбработкаДлительнойОперации"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 15; - НовыйПереход.ИмяОсновнойСтраницы = "ОжиданиеСинхронизацииДанных"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеСинхронизацииСправочниковВыгрузкаДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"; - - // Настройки параметров учета - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 16; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераНастройкиОтраженияДокументовВУчете"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииПродолжениеТолькоДалее"; - НовыйПереход.ИмяОбработчикаПриПереходеДалее = "СтраницаМастераНастройкиОтраженияДокументовВУчете_ПриПереходеДалее"; - НовыйПереход.ИмяОбработчикаПриОткрытии = "СтраницаМастераНастройкиОтраженияДокументовВУчете_ПриОткрытии"; - - // Сохранение настроек; Регистрация всех данных к выгрузке, кроме справочников. - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 17; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераОжиданиеСохраненияНастроек"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеСохраненияНастроек_ОбработкаДлительнойОперации"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 18; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераОжиданиеСохраненияНастроек"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеСохраненияНастроекДлительнаяОперация_ОбработкаДлительнойОперации"; - - // Синхронизация всех данных, кроме справочников. - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 19; - НовыйПереход.ИмяОсновнойСтраницы = "ОжиданиеСинхронизацииДанных"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузка_ОбработкаДлительнойОперации"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 20; - НовыйПереход.ИмяОсновнойСтраницы = "ОжиданиеСинхронизацииДанных"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузкаДлительнаяОперация_ОбработкаДлительнойОперации"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 21; - НовыйПереход.ИмяОсновнойСтраницы = "ОжиданиеСинхронизацииДанных"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузкаДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 22; - НовыйПереход.ИмяОсновнойСтраницы = "ОжиданиеСинхронизацииДанных"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузкаДанных_ОбработкаДлительнойОперации"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 23; - НовыйПереход.ИмяОсновнойСтраницы = "ОжиданиеСинхронизацииДанных"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеСинхронизацииДанныхВыгрузка_ОбработкаДлительнойОперации"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 24; - НовыйПереход.ИмяОсновнойСтраницы = "ОжиданиеСинхронизацииДанных"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеСинхронизацииДанныхВыгрузкаДлительнаяОперация_ОбработкаДлительнойОперации"; - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 25; - НовыйПереход.ИмяОсновнойСтраницы = "ОжиданиеСинхронизацииДанных"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "СтраницаМастераОжиданиеСинхронизацииДанныхВыгрузкаДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"; - - - НовыйПереход = ТаблицаПереходов.Добавить(); - НовыйПереход.ПорядковыйНомерПерехода = 26; - НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераСозданиеОбменаДаннымиУспешноЗавершено"; - НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииОкончание"; - НовыйПереход.ИмяОбработчикаПриОткрытии = "СтраницаМастераСозданиеОбменаДаннымиУспешноЗавершено_ПриОткрытии"; - -КонецПроцедуры - -#КонецОбласти - -#КонецОбласти diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Help/ru.html b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Help/ru.html index 079c40915..21e628c0c 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Help/ru.html +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Help/ru.html @@ -1,79 +1,98 @@ -

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

    -

    Этапы настройки параметров синхронизации данных

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

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

      +

      Выбор типа синхронизации данных

      +

      Выберите нужный раздел списка:

      +
      • Обмен данных с другими программами; +
        • Без использования правил обмена; +
        • Полная синхронизация; +
        • Получение данных; +
        • Полная синхронизация данных через EnterpriseData. При настройке обмена с использованием обычных каналов связи (файл, ftp, e-mail) в программе-источнике не получится настроить правила отправки и получения данных, пока не будут выполнены настройки в программе-приемнике. +
        • Полная синхронизация с поддержкой обратной совместимости; +
        • Синхронизация данных через универсальный формат;
      • Распределенные информационные базы.

      Этапы настройки параметров синхронизации данных между двумя программами

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

      Рассмотрим подробнее все этапы.

      -

      Выбор способа настройки синхронизации данных

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

    Особенности синхронизации через универсальный формат EnterpriseData

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

    Подробное описание

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

    Резервное копирование

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

    Выбор варианта подключения к другой программе

    +

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

    +

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

    +

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

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

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

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

    Нажмите кнопку Далее для перехода к дальнейшей настройке синхронизации данных.

    -

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

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

    +

    Синхронизация данных через локальный или сетевой каталог

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

    Настройка параметров подключения через FTP-ресурс

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

    Синхронизация данных через каталог на FTP-сервере

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

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

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

    Настройка параметров синхронизации данных

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

    Все готово для начала синхронизации данных

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

    Первый этап настройки успешно завершен

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

    Особенности настройки синхронизации данных в клиент-серверном варианте

    +
  • Нажмите Далее для перехода к дальнейшей настройке синхронизации данных.
  • Синхронизация данных через электронную почту

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

    Дополнительные настройки при синхронизации через файл

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

    Особенности синхронизации данных через универсальный формат или формат EnterpriseData через файл

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

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

    +

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

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

    Параметры синхронизации данных

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

    Переход к интерактивной синхронизации данных

    +

    Особенности настройки синхронизации данных в клиент-серверном варианте

    • При настройке синхронизации данных в клиент-серверном варианте работы информационной базы необходимо иметь в виду, что данные синхронизируются на компьютере, на котором установлен сервер 1С:Предприятия. Для сервера 1С:Предприятия под управлением операционной системы Microsoft Windows это путь вида:
      \\servername\resource
      а для сервера под управлением Linux:
      //servername/resource.
    • Необходимо убедиться в том, что каталог синхронизации доступен для чтения и записи пользователю операционной системы, от имени которого запущен сервер 1С:Предприятия. Если это не так, то необходимо дать этому пользователю необходимые права, или выбрать другого пользователя для запуска сервера 1С:Предприятия с необходимыми правами на каталог, используемый для синхронизации данных. Эти же рекомендации актуальны и для доступа к ресурсам FTP и электронной почты. Подробнее об администрировании сервера 1С:Предприятия см. документацию к платформе 1С:Предприятие.

    Особенности создания узла РИБ.

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

    @@ -110,4 +129,4 @@
  • Создайте новую базу, выбрав Добавление в список существующей информационной базы, укажите путь к файлу с начальным образом. Указанная информационная база будет добавлена в список баз.
  • После входа в программу автоматически запустится Помощник на странице Продолжение настройки синхронизации данных с главным узлом, продолжите настройку синхронизации, нажмите кнопку Далее, чтобы продолжить настройку и задать вариант подключения к главному узлу.
  • Создание узла РИБ (внешние файлы)

    -
    • Если у вас есть файлы в томах, то при создании начального образа вам также потребуется указать путь к файлу, в который будет записан архив (zip) со всеми файлами в томах. При первом запуске в базе филиала вам нужно будет выполнить команду Разместить файлы начального образа, указав в ней путь к файлу архива.
    \ No newline at end of file +
    • Если у вас есть файлы в томах, то при создании начального образа вам также потребуется указать путь к файлу, в который будет записан архив (zip) со всеми файлами в томах. При первом запуске в базе филиала вам нужно будет выполнить команду Разместить файлы начального образа, указав в ней путь к файлу архива.
    \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ManagerModule.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ManagerModule.bsl index 0c459aad1..0dcdb5d9f 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ManagerModule.bsl @@ -4,18 +4,1948 @@ // Для внутреннего использования. // -Процедура ВыполнитьЗагрузкуСправочников(Параметры, АдресВременногоХранилища) Экспорт +Процедура ПриПолученииДоступныхНастроекСинхронизацииДанных(ТаблицаНастройки, + ИспользоватьПомощникСозданияОбменаДанными = Истина) Экспорт - ПараметрыОбменаДанными = ОбменДаннымиСервер.ПараметрыОбменаДаннымиЧерезФайлИлиСтроку(); + ЭтоПолноправныйПользователь = Пользователи.ЭтоПолноправныйПользователь(, Истина); - ПараметрыОбменаДанными.УзелИнформационнойБазы = Параметры.УзелИнформационнойБазы; - ПараметрыОбменаДанными.ПолноеИмяФайлаСообщенияОбмена = Параметры.ИмяФайлаСообщенияОбмена; - ПараметрыОбменаДанными.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ЗагрузкаДанных; + МодельСервиса = ОбщегоНазначения.РазделениеВключено() + И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных(); - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(ПараметрыОбменаДанными); + ТаблицаНастройки = Новый ТаблицаЗначений; + ТаблицаНастройки.Колонки.Добавить("ИмяПланаОбмена", Новый ОписаниеТипов("Строка")); + ТаблицаНастройки.Колонки.Добавить("ИдентификаторНастройки", Новый ОписаниеТипов("Строка")); + ТаблицаНастройки.Колонки.Добавить("ИмяКонфигурацииКорреспондента", Новый ОписаниеТипов("Строка")); + ТаблицаНастройки.Колонки.Добавить("НаименованиеКонфигурацииКорреспондента", Новый ОписаниеТипов("Строка")); + ТаблицаНастройки.Колонки.Добавить("ИспользоватьПомощникСозданияОбменаДанными", Новый ОписаниеТипов("Булево")); + ТаблицаНастройки.Колонки.Добавить("ЗаголовокКомандыДляСозданияНовогоОбменаДанными", Новый ОписаниеТипов("Строка")); + ТаблицаНастройки.Колонки.Добавить("КраткаяИнформацияПоОбмену", Новый ОписаниеТипов("Строка")); + ТаблицаНастройки.Колонки.Добавить("ЭтоПланОбменаРаспределеннойИнформационнойБазы", Новый ОписаниеТипов("Булево")); + ТаблицаНастройки.Колонки.Добавить("ЭтоПланОбменаXDTO", Новый ОписаниеТипов("Булево")); + + СписокПлановОбмена = Новый Массив; + + Если МодельСервиса Тогда + МодульОбменДаннымиВМоделиСервисаПовтИсп = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиВМоделиСервисаПовтИсп"); + СписокПлановОбмена = МодульОбменДаннымиВМоделиСервисаПовтИсп.ПланыОбменаСинхронизацииДанных(); + Иначе + СписокПлановОбмена = ОбменДаннымиПовтИсп.ПланыОбменаБСП(); + КонецЕсли; + + Для Каждого ИмяПланаОбмена Из СписокПлановОбмена Цикл + МенеджерПланаОбмена = ПланыОбмена[ИмяПланаОбмена]; + + Если Не ЭтоПолноправныйПользователь + И ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(ИмяПланаОбмена) Тогда + // Для создания обмена РИБ требуются права администратора системы. + Продолжить; + КонецЕсли; + + Если Не ОбменДаннымиПовтИсп.ДоступноИспользованиеПланаОбмена(ИмяПланаОбмена) Тогда + Продолжить; + КонецЕсли; + + ВозможныеНастройкиОбмена = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, "ВариантыНастроекОбмена"); + + Для Каждого ВариантНастройки Из ВозможныеНастройкиОбмена Цикл + ПредопределеннаяНастройка = ВариантНастройки.ИдентификаторНастройки; + + ЗначенияНастроекДляВарианта = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, + "ИспользоватьПомощникСозданияОбменаДанными, + |ИмяКонфигурацииКорреспондента, + |НаименованиеКонфигурацииКорреспондента, + |ЗаголовокКомандыДляСозданияНовогоОбменаДанными, + |КраткаяИнформацияПоОбмену", + ПредопределеннаяНастройка); + + Если ИспользоватьПомощникСозданияОбменаДанными + И Не ЗначенияНастроекДляВарианта.ИспользоватьПомощникСозданияОбменаДанными Тогда + Продолжить; + КонецЕсли; + + СтрокаНастройки = ТаблицаНастройки.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаНастройки, ЗначенияНастроекДляВарианта); + + СтрокаНастройки.ИмяПланаОбмена = ИмяПланаОбмена; + СтрокаНастройки.ИдентификаторНастройки = ПредопределеннаяНастройка; + СтрокаНастройки.ЭтоПланОбменаРаспределеннойИнформационнойБазы = + ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(ИмяПланаОбмена); + СтрокаНастройки.ЭтоПланОбменаXDTO = ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ИмяПланаОбмена); + + КонецЦикла; + + КонецЦикла; + +КонецПроцедуры + +// Для внутреннего использования. +// +Процедура ВыгрузитьНастройкиПодключенияДляПодчиненногоУзлаРИБ(НастройкиПодключения) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + СтрокаXML = ""; + Попытка + СтрокаXML = НастройкиПодключенияВXML(НастройкиПодключения); + Исключение + ВызватьИсключение; + КонецПопытки; + + Константы.НастройкиПодчиненногоУзлаРИБ.Установить(СтрокаXML); + ПланыОбмена.ЗарегистрироватьИзменения(НастройкиПодключения.УзелИнформационнойБазы, + Метаданные.Константы.НастройкиПодчиненногоУзлаРИБ); + +КонецПроцедуры + +#Область ПроверкаПодключенияККорреспонденту + +// Для внутреннего использования. +// +Процедура ПриНачалеПроверкиПодключения(НастройкиПодключения, ПараметрыОбработчика, ПродолжитьОжидание = Истина) Экспорт + + КлючФоновогоЗадания = КлючФоновогоЗадания(НастройкиПодключения.ИмяПланаОбмена, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Проверка подключения %1'"), НастройкиПодключения.ВидТранспортаСообщенийОбмена)); + + Если ЕстьАктивныеФоновыеЗадания(КлючФоновогоЗадания) Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Проверка подключения %1 уже выполняется.'"), НастройкиПодключения.ВидТранспортаСообщенийОбмена); + КонецЕсли; + + ПараметрыПроцедуры = Новый Структура; + ПараметрыПроцедуры.Вставить("НастройкиПодключения", НастройкиПодключения); + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(Новый УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Проверка подключения к корреспонденту: %1.'"), НастройкиПодключения.ВидТранспортаСообщенийОбмена); + ПараметрыВыполнения.КлючФоновогоЗадания = КлючФоновогоЗадания; + ПараметрыВыполнения.ЗапуститьНеВФоне = Ложь; + ПараметрыВыполнения.ЗапуститьВФоне = Истина; + + ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( + "Обработки.ПомощникСозданияОбменаДанными.ПроверитьПодключениеККорреспонденту", + ПараметрыПроцедуры, + ПараметрыВыполнения); + + ПриНачалеДлительнойОперации(ФоновоеЗадание, ПараметрыОбработчика, ПродолжитьОжидание); + +КонецПроцедуры + +Процедура ПриОжиданииПроверкиПодключения(ПараметрыОбработчика, ПродолжитьОжидание = Истина) Экспорт + + ПриОжиданииДлительнойОперации(ПараметрыОбработчика, ПродолжитьОжидание); + +КонецПроцедуры + +Процедура ПриЗавершенииПроверкиПодключения(ПараметрыОбработчика, СтатусЗавершения) Экспорт + + ПриЗавершенииДлительнойОперации(ПараметрыОбработчика, СтатусЗавершения); КонецПроцедуры #КонецОбласти +#Область СохранениеНастроекПодключения +// Для внутреннего использования. +// +Процедура ПриНачалеСохраненияНастроекПодключения(НастройкиПодключения, ПараметрыОбработчика, ПродолжитьОжидание = Истина) Экспорт + + КлючФоновогоЗадания = КлючФоновогоЗадания(НастройкиПодключения.ИмяПланаОбмена, + НСтр("ru = 'Сохранение настроек подключения'")); + + Если ЕстьАктивныеФоновыеЗадания(КлючФоновогоЗадания) Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Сохранение настроек подключения для ""%1"" уже выполняется.'"), НастройкиПодключения.ИмяПланаОбмена); + КонецЕсли; + + ПараметрыПроцедуры = Новый Структура; + ПараметрыПроцедуры.Вставить("НастройкиПодключения", НастройкиПодключения); + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(Новый УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Сохранение настроек подключения: %1.'"), НастройкиПодключения.ИмяПланаОбмена); + ПараметрыВыполнения.КлючФоновогоЗадания = КлючФоновогоЗадания; + ПараметрыВыполнения.ЗапуститьНеВФоне = Ложь; + ПараметрыВыполнения.ЗапуститьВФоне = Истина; + + ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( + "Обработки.ПомощникСозданияОбменаДанными.СохранитьНастройкиПодключения", + ПараметрыПроцедуры, + ПараметрыВыполнения); + + ПриНачалеДлительнойОперации(ФоновоеЗадание, ПараметрыОбработчика, ПродолжитьОжидание); + +КонецПроцедуры + +// Для внутреннего использования. +// +Процедура ПриОжиданииСохраненияНастроекПодключения(ПараметрыОбработчика, ПродолжитьОжидание) Экспорт + + ПриОжиданииДлительнойОперации(ПараметрыОбработчика, ПродолжитьОжидание); + +КонецПроцедуры + +// Для внутреннего использования. +// +Процедура ПриЗавершенииСохраненияНастроекПодключения(ПараметрыОбработчика, СтатусЗавершения) Экспорт + + ПриЗавершенииДлительнойОперации(ПараметрыОбработчика, СтатусЗавершения); + +КонецПроцедуры + +#КонецОбласти + +#Область СохранениеНастроекСинхронизации + +// Для внутреннего использования. +// +Процедура ПриНачалеСохраненияНастроекСинхронизации(НастройкиСинхронизации, ПараметрыОбработчика, ПродолжитьОжидание = Истина) Экспорт + + ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(НастройкиСинхронизации.УзелОбмена); + + КлючФоновогоЗадания = КлючФоновогоЗадания(ИмяПланаОбмена, + НСтр("ru = 'Сохранение настроек синхронизации данных'")); + + Если ЕстьАктивныеФоновыеЗадания(КлючФоновогоЗадания) Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Сохранение настроек синхронизации данных для ""%1"" уже выполняется.'"), ИмяПланаОбмена); + КонецЕсли; + + ПараметрыПроцедуры = Новый Структура; + ПараметрыПроцедуры.Вставить("НастройкиСинхронизации", НастройкиСинхронизации); + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(Новый УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Сохранение настроек синхронизации данных: %1.'"), ИмяПланаОбмена); + ПараметрыВыполнения.КлючФоновогоЗадания = КлючФоновогоЗадания; + ПараметрыВыполнения.ЗапуститьНеВФоне = Ложь; + ПараметрыВыполнения.ЗапуститьВФоне = Истина; + + ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( + "Обработки.ПомощникСозданияОбменаДанными.СохранитьНастройкиСинхронизации", + ПараметрыПроцедуры, + ПараметрыВыполнения); + + ПриНачалеДлительнойОперации(ФоновоеЗадание, ПараметрыОбработчика, ПродолжитьОжидание); + +КонецПроцедуры + +// Для внутреннего использования. +// +Процедура ПриОжиданииСохраненияНастроекСинхронизации(ПараметрыОбработчика, ПродолжитьОжидание) Экспорт + + ПриОжиданииДлительнойОперации(ПараметрыОбработчика, ПродолжитьОжидание); + +КонецПроцедуры + +// Для внутреннего использования. +// +Процедура ПриЗавершенииСохраненияНастроекСинхронизации(ПараметрыОбработчика, СтатусЗавершения) Экспорт + + ПриЗавершенииДлительнойОперации(ПараметрыОбработчика, СтатусЗавершения); + +КонецПроцедуры + +#КонецОбласти + +#Область УдалениеНастройкиСинхронизацииДанных + +// Для внутреннего использования. +// +Процедура ПриНачалеУдаленияНастройкиСинхронизации(НастройкиУдаления, ПараметрыОбработчика, ПродолжитьОжидание = Истина) Экспорт + + ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(НастройкиУдаления.УзелОбмена); + + КлючФоновогоЗадания = КлючФоновогоЗадания(ИмяПланаОбмена, + НСтр("ru = 'Удаление настройки синхронизации данных'")); + + Если ЕстьАктивныеФоновыеЗадания(КлючФоновогоЗадания) Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Удаление настройки синхронизации данных для ""%1"" уже выполняется.'"), ИмяПланаОбмена); + КонецЕсли; + + ПараметрыПроцедуры = Новый Структура; + ПараметрыПроцедуры.Вставить("НастройкиУдаления", НастройкиУдаления); + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(Новый УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Удаление настройки синхронизации данных: %1.'"), ИмяПланаОбмена); + ПараметрыВыполнения.КлючФоновогоЗадания = КлючФоновогоЗадания; + ПараметрыВыполнения.ЗапуститьНеВФоне = Ложь; + ПараметрыВыполнения.ЗапуститьВФоне = Истина; + + ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( + "Обработки.ПомощникСозданияОбменаДанными.УдалитьНастройкуСинхронизации", + ПараметрыПроцедуры, + ПараметрыВыполнения); + + ПриНачалеДлительнойОперации(ФоновоеЗадание, ПараметрыОбработчика, ПродолжитьОжидание); + +КонецПроцедуры + +// Для внутреннего использования. +// +Процедура ПриОжиданииУдаленияНастройкиСинхронизации(ПараметрыОбработчика, ПродолжитьОжидание) Экспорт + + ПриОжиданииДлительнойОперации(ПараметрыОбработчика, ПродолжитьОжидание); + +КонецПроцедуры + +// Для внутреннего использования. +// +Процедура ПриЗавершенииУдаленияНастройкиСинхронизации(ПараметрыОбработчика, СтатусЗавершения) Экспорт + + ПриЗавершенииДлительнойОперации(ПараметрыОбработчика, СтатусЗавершения); + +КонецПроцедуры + +#КонецОбласти + +#Область РегистрацияДанныхДляНачальнойВыгрузки + +// Для внутреннего использования. +// +Процедура ПриНачалеРегистрацииДанныхДляНачальнойВыгрузки(НастройкиРегистрации, ПараметрыОбработчика, ПродолжитьОжидание = Истина) Экспорт + + КлючФоновогоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Регистрация данных для начальной выгрузки (%1)'"), + НастройкиРегистрации.УзелОбмена); + + Если ЕстьАктивныеФоновыеЗадания(КлючФоновогоЗадания) Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Регистрация данных для начальной выгрузки для ""%1"" уже выполняется.'"), + НастройкиРегистрации.УзелОбмена); + КонецЕсли; + + ПараметрыПроцедуры = Новый Структура; + ПараметрыПроцедуры.Вставить("НастройкиРегистрации", НастройкиРегистрации); + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(Новый УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Регистрация данных для начальной выгрузки (%1).'"), + НастройкиРегистрации.УзелОбмена); + ПараметрыВыполнения.КлючФоновогоЗадания = КлючФоновогоЗадания; + ПараметрыВыполнения.ЗапуститьНеВФоне = Ложь; + ПараметрыВыполнения.ЗапуститьВФоне = Истина; + + ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( + "Обработки.ПомощникСозданияОбменаДанными.ЗарегистрироватьДанныеДляНачальнойВыгрузки", + ПараметрыПроцедуры, + ПараметрыВыполнения); + + ПриНачалеДлительнойОперации(ФоновоеЗадание, ПараметрыОбработчика, ПродолжитьОжидание); + +КонецПроцедуры + +// Для внутреннего использования. +// +Процедура ПриОжиданииРегистрацииДанныхДляНачальнойВыгрузки(ПараметрыОбработчика, ПродолжитьОжидание) Экспорт + + ПриОжиданииДлительнойОперации(ПараметрыОбработчика, ПродолжитьОжидание); + +КонецПроцедуры + +// Для внутреннего использования. +// +Процедура ПриЗавершенииРегистрацииДанныхДляНачальнойВыгрузки(ПараметрыОбработчика, СтатусЗавершения) Экспорт + + ПриЗавершенииДлительнойОперации(ПараметрыОбработчика, СтатусЗавершения); + +КонецПроцедуры + +#КонецОбласти + +#Область ЗагрузкаНастроекXDTO + +// Для внутреннего использования. +// +Процедура ПриНачалеЗагрузкиНастроекXDTO(НастройкиЗагрузки, ПараметрыОбработчика, ПродолжитьОжидание = Истина) Экспорт + + КлючФоновогоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Загрузка настроек XDTO (%1)'"), + НастройкиЗагрузки.УзелОбмена); + + Если ЕстьАктивныеФоновыеЗадания(КлючФоновогоЗадания) Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Загрузка настроек XDTO для ""%1"" уже выполняется.'"), + НастройкиЗагрузки.УзелОбмена); + КонецЕсли; + + ПараметрыПроцедуры = Новый Структура; + ПараметрыПроцедуры.Вставить("НастройкиЗагрузки", НастройкиЗагрузки); + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(Новый УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Загрузка настроек XDTO (%1).'"), + НастройкиЗагрузки.УзелОбмена); + ПараметрыВыполнения.КлючФоновогоЗадания = КлючФоновогоЗадания; + ПараметрыВыполнения.ЗапуститьНеВФоне = Ложь; + ПараметрыВыполнения.ЗапуститьВФоне = Истина; + + ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( + "Обработки.ПомощникСозданияОбменаДанными.ЗагрузитьНастройкиXDTOКорреспондента", + ПараметрыПроцедуры, + ПараметрыВыполнения); + + ПриНачалеДлительнойОперации(ФоновоеЗадание, ПараметрыОбработчика, ПродолжитьОжидание); + +КонецПроцедуры + +// Для внутреннего использования. +// +Процедура ПриОжиданииЗагрузкиНастроекXDTO(ПараметрыОбработчика, ПродолжитьОжидание) Экспорт + + ПриОжиданииДлительнойОперации(ПараметрыОбработчика, ПродолжитьОжидание); + +КонецПроцедуры + +// Для внутреннего использования. +// +Процедура ПриЗавершенииЗагрузкиНастроекXDTO(ПараметрыОбработчика, СтатусЗавершения) Экспорт + + ПриЗавершенииДлительнойОперации(ПараметрыОбработчика, СтатусЗавершения); + +КонецПроцедуры + +#КонецОбласти + +Функция ВерсияФорматаНастроекОбменаДанными() Экспорт + + Возврат "1.2"; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область РаботаСДлительнымиОперациями + +// Для внутреннего использования. +// +Процедура ПриНачалеДлительнойОперации(ФоновоеЗадание, ПараметрыОбработчика, ПродолжитьОжидание = Истина) + + ИнициализироватьПараметрыОбработчикаДлительнойОперации(ПараметрыОбработчика, ФоновоеЗадание); + + Если ФоновоеЗадание.Статус = "Выполняется" Тогда + ПараметрыОбработчика.АдресРезультата = ФоновоеЗадание.АдресРезультата; + ПараметрыОбработчика.ИдентификаторОперации = ФоновоеЗадание.ИдентификаторЗадания; + ПараметрыОбработчика.ДлительнаяОперация = Истина; + + ПродолжитьОжидание = Истина; + Возврат; + ИначеЕсли ФоновоеЗадание.Статус = "Выполнено" Тогда + ПараметрыОбработчика.АдресРезультата = ФоновоеЗадание.АдресРезультата; + ПараметрыОбработчика.ДлительнаяОперация = Ложь; + + ПродолжитьОжидание = Ложь; + Возврат; + Иначе + ПараметрыОбработчика.СообщениеОбОшибке = ФоновоеЗадание.КраткоеПредставлениеОшибки; + Если ЗначениеЗаполнено(ФоновоеЗадание.ПодробноеПредставлениеОшибки) Тогда + ПараметрыОбработчика.СообщениеОбОшибке = ФоновоеЗадание.ПодробноеПредставлениеОшибки; + КонецЕсли; + + ПараметрыОбработчика.Отказ = Истина; + ПараметрыОбработчика.ДлительнаяОперация = Ложь; + + ПродолжитьОжидание = Ложь; + Возврат; + КонецЕсли; + +КонецПроцедуры + +// Для внутреннего использования. +// +Процедура ПриОжиданииДлительнойОперации(ПараметрыОбработчика, ПродолжитьОжидание = Истина) + + Если ПараметрыОбработчика.Отказ + Или Не ПараметрыОбработчика.ДлительнаяОперация Тогда + ПродолжитьОжидание = Ложь; + Возврат; + КонецЕсли; + + ЗаданиеВыполнено = Ложь; + Попытка + ЗаданиеВыполнено = ДлительныеОперации.ЗаданиеВыполнено(ПараметрыОбработчика.ИдентификаторОперации); + Исключение + ПараметрыОбработчика.Отказ = Истина; + ПараметрыОбработчика.СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), + УровеньЖурналаРегистрации.Ошибка, , , ПараметрыОбработчика.СообщениеОбОшибке); + КонецПопытки; + + Если ПараметрыОбработчика.Отказ Тогда + ПродолжитьОжидание = Ложь; + Возврат; + КонецЕсли; + + ПродолжитьОжидание = Не ЗаданиеВыполнено; + +КонецПроцедуры + +// Для внутреннего использования. +// +Процедура ПриЗавершенииДлительнойОперации(ПараметрыОбработчика, + СтатусЗавершения = Неопределено) + + СтатусЗавершения = Новый Структура; + СтатусЗавершения.Вставить("Отказ", Ложь); + СтатусЗавершения.Вставить("СообщениеОбОшибке", ""); + СтатусЗавершения.Вставить("Результат", Неопределено); + + Если ПараметрыОбработчика.Отказ Тогда + ЗаполнитьЗначенияСвойств(СтатусЗавершения, ПараметрыОбработчика, "Отказ, СообщениеОбОшибке"); + Иначе + СтатусЗавершения.Результат = ПолучитьИзВременногоХранилища(ПараметрыОбработчика.АдресРезультата); + КонецЕсли; + + ПараметрыОбработчика = Неопределено; + +КонецПроцедуры + +Процедура ИнициализироватьПараметрыОбработчикаДлительнойОперации(ПараметрыОбработчика, ФоновоеЗадание) + + ПараметрыОбработчика = Новый Структура; + ПараметрыОбработчика.Вставить("ФоновоеЗадание", ФоновоеЗадание); + ПараметрыОбработчика.Вставить("Отказ", Ложь); + ПараметрыОбработчика.Вставить("СообщениеОбОшибке", ""); + ПараметрыОбработчика.Вставить("ДлительнаяОперация", Ложь); + ПараметрыОбработчика.Вставить("ИдентификаторОперации", Неопределено); + ПараметрыОбработчика.Вставить("АдресРезультата", Неопределено); + ПараметрыОбработчика.Вставить("ДополнительныеПараметры", Новый Структура); + +КонецПроцедуры + +Функция КлючФоновогоЗадания(ИмяПланаОбмена, Действие) + + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'ПланОбмена:%1 Действие:%2'"), ИмяПланаОбмена, Действие); + +КонецФункции + +Функция ЕстьАктивныеФоновыеЗадания(КлючФоновогоЗадания) + + Отбор = Новый Структура; + Отбор.Вставить("Ключ", КлючФоновогоЗадания); + Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); + + АктивныеФоновыеЗадания = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); + + Возврат (АктивныеФоновыеЗадания.Количество() > 0); + +КонецФункции + +#КонецОбласти + +Процедура ПриПодключенииККорреспонденту(Отказ, ИмяПланаОбмена, Знач ВерсияКорреспондента, СообщениеОбОшибке = "") + + Если Не ЗначениеЗаполнено(ВерсияКорреспондента) Тогда + ВерсияКорреспондента = "0.0.0.0"; + КонецЕсли; + + Попытка + ОбменДаннымиСервер.ПриПодключенииККорреспонденту(ИмяПланаОбмена, ВерсияКорреспондента); + Исключение + СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), + УровеньЖурналаРегистрации.Ошибка, , , СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При выполнении обработчика ПриПодключенииККорреспонденту произошла ошибка:%1%2'"), + Символы.ПС, СообщениеОбОшибке)); + + Отказ = Истина; + КонецПопытки; + +КонецПроцедуры + +Процедура ПроверитьПодключениеККорреспонденту(Параметры, АдресРезультата) Экспорт + + НастройкиПодключения = Неопределено; + Параметры.Свойство("НастройкиПодключения", НастройкиПодключения); + + РезультатПроверки = Новый Структура; + РезультатПроверки.Вставить("ПодключениеУстановлено", Ложь); + РезультатПроверки.Вставить("ПодключениеРазрешено", Ложь); + РезультатПроверки.Вставить("ВерсииИнтерфейса", Неопределено); + РезультатПроверки.Вставить("СообщениеОбОшибке", ""); + + РезультатПроверки.Вставить("ПараметрыКорреспондентаПолучены", Ложь); + РезультатПроверки.Вставить("ПараметрыКорреспондента", Неопределено); + + Если НастройкиПодключения.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.COM Тогда + + Результат = ОбменДаннымиСервер.УстановитьВнешнееСоединениеСБазой(НастройкиПодключения); + + ВнешнееСоединение = Результат.Соединение; + Если ВнешнееСоединение = Неопределено Тогда + РезультатПроверки.СообщениеОбОшибке = Результат.КраткоеОписаниеОшибки; + РезультатПроверки.ПодключениеУстановлено = Ложь; + + ПоместитьВоВременноеХранилище(РезультатПроверки, АдресРезультата); + Возврат; + КонецЕсли; + + РезультатПроверки.ПодключениеУстановлено = Истина; + РезультатПроверки.ВерсииИнтерфейса = ОбменДаннымиСервер.ВерсииИнтерфейсаЧерезВнешнееСоединение(ВнешнееСоединение); + + Если РезультатПроверки.ВерсииИнтерфейса.Найти("3.0.1.1") <> Неопределено Тогда + + СообщениеОбОшибке = ""; + ПараметрыИнформационнойБазы = ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПолучитьПараметрыИнформационнойБазы_2_0_1_6( + НастройкиПодключения.ИмяПланаОбмена, "", СообщениеОбОшибке); + + РезультатПроверки.ПараметрыКорреспондентаПолучены = Истина; + РезультатПроверки.ПараметрыКорреспондента = ОбщегоНазначения.ЗначениеИзСтрокиXML(ПараметрыИнформационнойБазы); + + Иначе + + РезультатПроверки.ПодключениеРазрешено = Ложь; + РезультатПроверки.СообщениеОбОшибке = НСтр("ru = 'Корреспондент не поддерживает версию 3.0.1.1 интерфейса ""ОбменДанными"". + |Для настройки подключения необходимо обновить конфигурацию корреспондента, или начать настройку из него.'"); + + ПоместитьВоВременноеХранилище(РезультатПроверки, АдресРезультата); + Возврат; + + КонецЕсли; + + Отказ = Ложь; + СообщениеОбОшибке = ""; + + ПриПодключенииККорреспонденту(Отказ, НастройкиПодключения.ИмяПланаОбмена, + РезультатПроверки.ПараметрыКорреспондента.ВерсияКонфигурации, СообщениеОбОшибке); + + Если Отказ Тогда + РезультатПроверки.ПодключениеРазрешено = Ложь; + РезультатПроверки.СообщениеОбОшибке = СообщениеОбОшибке; + + ПоместитьВоВременноеХранилище(РезультатПроверки, АдресРезультата); + Возврат; + КонецЕсли; + + РезультатПроверки.ПодключениеРазрешено = Истина; + + ИначеЕсли НастройкиПодключения.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда + + Корреспондент = Новый Структура("WSURLВебСервиса, WSИмяПользователя, WSПароль"); + ЗаполнитьЗначенияСвойств(Корреспондент, НастройкиПодключения); + + Попытка + РезультатПроверки.ВерсииИнтерфейса = ОбменДаннымиПовтИсп.ВерсииКорреспондента(Корреспондент); + Исключение + РезультатПроверки.СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + РезультатПроверки.ПодключениеУстановлено = Ложь; + + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), + УровеньЖурналаРегистрации.Ошибка, , , РезультатПроверки.СообщениеОбОшибке); + + ПоместитьВоВременноеХранилище(РезультатПроверки, АдресРезультата); + Возврат; + КонецПопытки; + + СтрокаСообщенияОбОшибке = ""; + WSПрокси = Неопределено; + Если РезультатПроверки.ВерсииИнтерфейса.Найти("3.0.1.1") <> Неопределено Тогда + + WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси_3_0_1_1(НастройкиПодключения, СтрокаСообщенияОбОшибке); + + ИначеЕсли РезультатПроверки.ВерсииИнтерфейса.Найти("2.1.1.7") <> Неопределено Тогда + + WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси_2_1_1_7(НастройкиПодключения, СтрокаСообщенияОбОшибке); + + ИначеЕсли РезультатПроверки.ВерсииИнтерфейса.Найти("2.0.1.6") <> Неопределено Тогда + + WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси_2_0_1_6(НастройкиПодключения, СтрокаСообщенияОбОшибке); + + Иначе + + WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси(НастройкиПодключения, СтрокаСообщенияОбОшибке); + + КонецЕсли; + + Если WSПрокси = Неопределено Тогда + РезультатПроверки.ПодключениеУстановлено = Ложь; + РезультатПроверки.СообщениеОбОшибке = СтрокаСообщенияОбОшибке; + + ПоместитьВоВременноеХранилище(РезультатПроверки, АдресРезультата); + Возврат; + КонецЕсли; + + РезультатПроверки.ПодключениеУстановлено = Истина; + + Если РезультатПроверки.ВерсииИнтерфейса.Найти("3.0.1.1") <> Неопределено Тогда + + СообщениеОбОшибке = ""; + ПараметрыИнформационнойБазы = WSПрокси.GetIBParameters(НастройкиПодключения.ИмяПланаОбмена, "", СообщениеОбОшибке); + + РезультатПроверки.ПараметрыКорреспондентаПолучены = Истина; + РезультатПроверки.ПараметрыКорреспондента = СериализаторXDTO.ПрочитатьXDTO(ПараметрыИнформационнойБазы); + + Иначе + + РезультатПроверки.ПодключениеРазрешено = Ложь; + РезультатПроверки.СообщениеОбОшибке = НСтр("ru = 'Корреспондент не поддерживает версию 3.0.1.1 интерфейса ""ОбменДанными"". + |Для настройки подключения необходимо обновить конфигурацию корреспондента, или начать настройку из него.'"); + + ПоместитьВоВременноеХранилище(РезультатПроверки, АдресРезультата); + Возврат; + + КонецЕсли; + + Отказ = Ложь; + СообщениеОбОшибке = ""; + + ПриПодключенииККорреспонденту(Отказ, НастройкиПодключения.ИмяПланаОбмена, + РезультатПроверки.ПараметрыКорреспондента.ВерсияКонфигурации, СообщениеОбОшибке); + + Если Отказ Тогда + РезультатПроверки.ПодключениеРазрешено = Ложь; + РезультатПроверки.СообщениеОбОшибке = СообщениеОбОшибке; + + ПоместитьВоВременноеХранилище(РезультатПроверки, АдресРезультата); + Возврат; + КонецЕсли; + + РезультатПроверки.ПодключениеРазрешено = Истина; + + ИначеЕсли НастройкиПодключения.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FILE + Или НастройкиПодключения.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FTP + Или НастройкиПодключения.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL Тогда + + Отказ = Ложь; + СообщениеОбОшибке = ""; + + ОбменДаннымиСервер.ПроверитьПодключениеОбработкиТранспортаСообщенийОбмена(Отказ, + НастройкиПодключения, НастройкиПодключения.ВидТранспортаСообщенийОбмена, СообщениеОбОшибке); + + Если Отказ Тогда + РезультатПроверки.ПодключениеУстановлено = Ложь; + РезультатПроверки.СообщениеОбОшибке = СообщениеОбОшибке; + + ПоместитьВоВременноеХранилище(РезультатПроверки, АдресРезультата); + Возврат; + КонецЕсли; + + РезультатПроверки.ПодключениеУстановлено = Истина; + РезультатПроверки.ПодключениеРазрешено = Истина; + + КонецЕсли; + + ПоместитьВоВременноеХранилище(РезультатПроверки, АдресРезультата); + +КонецПроцедуры + +Процедура СохранитьНастройкиПодключения(Параметры, АдресРезультата) Экспорт + + НастройкиПодключения = Неопределено; + Параметры.Свойство("НастройкиПодключения", НастройкиПодключения); + + Результат = Новый Структура; + Результат.Вставить("НастройкиПодключенияСохранены", Ложь); + Результат.Вставить("ЕстьДанныеДляСопоставления", Ложь); // Только для offline-транспорта. + Результат.Вставить("УзелОбмена", Неопределено); + Результат.Вставить("СообщениеОбОшибке", ""); + Результат.Вставить("СтрокаНастроекПодключенияXML", ""); + + // 1. Сохранение узла и настроек подключения в ИБ. + Отказ = Ложь; + Попытка + ВыполнитьДействияПоНастройкеОбменаДанными(НастройкиПодключения); + Исключение + Отказ = Истина; + Результат.СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), + УровеньЖурналаРегистрации.Ошибка, , , Результат.СообщениеОбОшибке); + КонецПопытки; + + Если Отказ Тогда + ПоместитьВоВременноеХранилище(Результат, АдресРезультата); + Возврат; + КонецЕсли; + + // 2. Сохранение настроек подключения для корреспондента. + Если Не НастройкиПодключения.ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" Тогда + Если ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(НастройкиПодключения.ИмяПланаОбмена) Тогда + ВыгрузитьНастройкиПодключенияДляПодчиненногоУзлаРИБ(НастройкиПодключения); + Иначе + Результат.СтрокаНастроекПодключенияXML = НастройкиПодключенияВXML(НастройкиПодключения); + КонецЕсли; + КонецЕсли; + + // 3. Сохранение настроек подключения на стороне корреспондента для online-подключения, + // или отправка сообщения с настройками XDTO для offline-подключения. + Если НастройкиПодключения.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.COM Тогда + + Подключение = ОбменДаннымиСервер.УстановитьВнешнееСоединениеСБазой(НастройкиПодключения); + Результат.СообщениеОбОшибке = Подключение.ПодробноеОписаниеОшибки; + ВнешнееСоединение = Подключение.Соединение; + + Если ВнешнееСоединение = Неопределено Тогда + Отказ = Истина; + Иначе + + НастройкиПодключенияКорреспондента = ВнешнееСоединение.Обработки.ПомощникСозданияОбменаДанными.Создать(); + + НастройкиПодключенияКорреспондента.ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными"; + НастройкиПодключенияКорреспондента.ВариантНастройкиОбмена = НастройкиПодключения.ВариантНастройкиОбмена; + + НастройкиПодключенияКорреспондента.ИмяПланаОбмена = НастройкиПодключения.ИмяПланаОбменаКорреспондента; + НастройкиПодключенияКорреспондента.ИмяПланаОбменаКорреспондента = НастройкиПодключения.ИмяПланаОбмена; + НастройкиПодключенияКорреспондента.ФорматОбмена = НастройкиПодключения.ФорматОбмена; + + НастройкиПодключенияКорреспондента.ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента = + НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбмена; + + НастройкиПодключенияКорреспондента.ПрефиксИнформационнойБазыИсточника = НастройкиПодключения.ПрефиксИнформационнойБазыПриемника; + НастройкиПодключенияКорреспондента.ПрефиксИнформационнойБазыПриемника = НастройкиПодключения.ПрефиксИнформационнойБазыИсточника; + + Попытка + + ВнешнееСоединение.Обработки.ПомощникСозданияОбменаДанными.ЗаполнитьНастройкиПодключенияИзXML( + НастройкиПодключенияКорреспондента, Результат.СтрокаНастроекПодключенияXML); + + Исключение + Отказ = Истина; + Результат.СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), + УровеньЖурналаРегистрации.Ошибка, , , Результат.СообщениеОбОшибке); + КонецПопытки; + + Если Не Отказ Тогда + + Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(НастройкиПодключения.ИмяПланаОбмена) Тогда + НастройкиПодключенияКорреспондента.ВерсияФорматаОбмена = НастройкиПодключения.ВерсияФорматаОбмена; + + ТаблицаОбъекты = ОбменДаннымиXDTOСервер.ПоддерживаемыеОбъектыФормата(НастройкиПодключения.ИмяПланаОбмена); + + СтрокаХранилище = СериализаторXDTO.XMLСтрока( + Новый ХранилищеЗначения(ТаблицаОбъекты, Новый СжатиеДанных(9))); + + НастройкиПодключенияКорреспондента.ПоддерживаемыеОбъектыФормата = ВнешнееСоединение.СериализаторXDTO.XMLЗначение( + ВнешнееСоединение.NewObject("ОписаниеТипов", "ХранилищеЗначения").Типы().Get(0), СтрокаХранилище); + КонецЕсли; + + Попытка + + ВнешнееСоединение.ОбменДаннымиСервер.ПроверитьИспользованиеОбменаДанными(Истина); + + ВнешнееСоединение.Обработки.ПомощникСозданияОбменаДанными.ВыполнитьДействияПоНастройкеОбменаДанными( + НастройкиПодключенияКорреспондента); + Исключение + Отказ = Истина; + Результат.СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), + УровеньЖурналаРегистрации.Ошибка, , , Результат.СообщениеОбОшибке); + КонецПопытки; + + КонецЕсли; + + КонецЕсли; + + ИначеЕсли НастройкиПодключения.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда + + WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси_3_0_1_1(НастройкиПодключения); + + Если WSПрокси = Неопределено Тогда + Отказ = Истина; + Иначе + НастройкиПодключенияКорреспондента = Новый Структура; + Для Каждого ЭлементНастройки Из НастройкиПодключения Цикл + НастройкиПодключенияКорреспондента.Вставить(ЭлементНастройки.Ключ); + КонецЦикла; + + НастройкиПодключенияКорреспондента.ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными"; + НастройкиПодключенияКорреспондента.ВариантНастройкиОбмена = НастройкиПодключения.ВариантНастройкиОбмена; + + НастройкиПодключенияКорреспондента.ИмяПланаОбмена = НастройкиПодключения.ИмяПланаОбменаКорреспондента; + НастройкиПодключенияКорреспондента.ИмяПланаОбменаКорреспондента = НастройкиПодключения.ИмяПланаОбмена; + НастройкиПодключенияКорреспондента.ФорматОбмена = НастройкиПодключения.ФорматОбмена; + + НастройкиПодключенияКорреспондента.ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента = + НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбмена; + + НастройкиПодключенияКорреспондента.ПрефиксИнформационнойБазыИсточника = НастройкиПодключения.ПрефиксИнформационнойБазыПриемника; + НастройкиПодключенияКорреспондента.ПрефиксИнформационнойБазыПриемника = НастройкиПодключения.ПрефиксИнформационнойБазыИсточника; + + Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(НастройкиПодключения.ИмяПланаОбмена) Тогда + НастройкиПодключенияКорреспондента.ВерсияФорматаОбмена = НастройкиПодключения.ВерсияФорматаОбмена; + НастройкиПодключенияКорреспондента.ПоддерживаемыеОбъектыФормата = Новый ХранилищеЗначения( + ОбменДаннымиXDTOСервер.ПоддерживаемыеОбъектыФормата(НастройкиПодключения.ИмяПланаОбмена), + Новый СжатиеДанных(9)); + КонецЕсли; + + Сериализатор = Новый СериализаторXDTO(WSПрокси.ФабрикаXDTO); + + ПараметрыПодключения = Новый Структура; + ПараметрыПодключения.Вставить("НастройкиПодключения", НастройкиПодключенияКорреспондента); + ПараметрыПодключения.Вставить("СтрокаПараметровXML", Результат.СтрокаНастроекПодключенияXML); + + Попытка + WSПрокси.CreateExchangeNode(Сериализатор.ЗаписатьXDTO(ПараметрыПодключения)); + Исключение + Отказ = Истина; + Результат.СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), + УровеньЖурналаРегистрации.Ошибка, , , Результат.СообщениеОбОшибке); + КонецПопытки; + + КонецЕсли; + + ИначеЕсли НастройкиПодключения.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FILE + Или НастройкиПодключения.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FTP + Или НастройкиПодключения.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL Тогда + + Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(НастройкиПодключения.ИмяПланаОбмена) Тогда + + Если НастройкиПодключения.ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" Тогда + // Получение сообщения обмена с настройками XDTO. + ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); + ПараметрыОбмена.ВыполнятьЗагрузку = Истина; + ПараметрыОбмена.ВыполнятьВыгрузку = Ложь; + ПараметрыОбмена.ВидТранспортаСообщенийОбмена = НастройкиПодключения.ВидТранспортаСообщенийОбмена; + + // Для настройки синхронизации ошибка получения сообщения через обычные каналы связи не критична + // (сообщения обмена в принципе может не быть). + ОтказПолучение = Ложь; + ДополнительныеПараметры = Новый Структура; + Попытка + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы( + НастройкиПодключения.УзелИнформационнойБазы, ПараметрыОбмена, ОтказПолучение, ДополнительныеПараметры); + Исключение + // Возникновение исключения - критично с точки зрения сохранения настройки. + // Исключений быть не должно. + Отказ = Истина; + Результат.СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), + УровеньЖурналаРегистрации.Ошибка, , , Результат.СообщениеОбОшибке); + КонецПопытки; + + Если ДополнительныеПараметры.Свойство("ПолученыДанныеДляСопоставления") Тогда + Результат.ЕстьДанныеДляСопоставления = ДополнительныеПараметры.ПолученыДанныеДляСопоставления; + КонецЕсли; + Иначе + // Отправка сообщения обмена с настройками XDTO. + ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); + ПараметрыОбмена.ВыполнятьЗагрузку = Ложь; + ПараметрыОбмена.ВыполнятьВыгрузку = Истина; + ПараметрыОбмена.ВидТранспортаСообщенийОбмена = НастройкиПодключения.ВидТранспортаСообщенийОбмена; + + Попытка + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы( + НастройкиПодключения.УзелИнформационнойБазы, ПараметрыОбмена, Отказ); + Исключение + Отказ = Истина; + Результат.СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), + УровеньЖурналаРегистрации.Ошибка, , , Результат.СообщениеОбОшибке); + КонецПопытки; + КонецЕсли; + + ИначеЕсли Не ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(НастройкиПодключения.ИмяПланаОбмена) + И Не ОбменДаннымиПовтИсп.ЭтоУзелСтандартногоОбменаДанными(НастройкиПодключения.ИмяПланаОбмена) Тогда + + СтруктураНастроекОбмена = ОбменДаннымиПовтИсп.НастройкиТранспортаУзлаПланаОбмена( + НастройкиПодключения.УзелИнформационнойБазы, НастройкиПодключения.ВидТранспортаСообщенийОбмена); + + ОбработкаТранспортаСообщенийОбмена = СтруктураНастроекОбмена.ОбработкаТранспортаСообщенийОбмена; + + Если ОбработкаТранспортаСообщенийОбмена.ПодключениеУстановлено() Тогда + + Результат.ЕстьДанныеДляСопоставления = ОбработкаТранспортаСообщенийОбмена.ПолучитьСообщение(Истина); + + Если Не Результат.ЕстьДанныеДляСопоставления Тогда + // Возможно, сообщение удастся получить если применить виртуальный код узла (псевдоним). + Транслитерация = Неопределено; + Если СтруктураНастроекОбмена.ВидТранспортаОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FILE Тогда + СтруктураНастроекОбмена.НастройкиТранспорта.Свойство("FILEТранслитерироватьИменаФайловСообщенийОбмена", Транслитерация); + ИначеЕсли СтруктураНастроекОбмена.ВидТранспортаОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL Тогда + СтруктураНастроекОбмена.НастройкиТранспорта.Свойство("EMAILТранслитерироватьИменаФайловСообщенийОбмена", Транслитерация); + ИначеЕсли СтруктураНастроекОбмена.ВидТранспортаОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FTP Тогда + СтруктураНастроекОбмена.НастройкиТранспорта.Свойство("FTPТранслитерироватьИменаФайловСообщенийОбмена", Транслитерация); + КонецЕсли; + Транслитерация = ?(Транслитерация = Неопределено, Ложь, Транслитерация); + + ШаблонИмениФайлаСтарый = СтруктураНастроекОбмена.ОбработкаТранспортаСообщенийОбмена.ШаблонИмениФайлаСообщения; + СтруктураНастроекОбмена.ОбработкаТранспортаСообщенийОбмена.ШаблонИмениФайлаСообщения = ОбменДаннымиСервер.ШаблонИмениФайлаСообщения( + СтруктураНастроекОбмена.ТекущийУзелПланаОбмена, + СтруктураНастроекОбмена.УзелИнформационнойБазы, + Ложь, + Транслитерация, + Истина); + + Если ШаблонИмениФайлаСтарый <> СтруктураНастроекОбмена.ОбработкаТранспортаСообщенийОбмена.ШаблонИмениФайлаСообщения Тогда + Результат.ЕстьДанныеДляСопоставления = ОбработкаТранспортаСообщенийОбмена.ПолучитьСообщение(Истина); + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + Если Не Отказ Тогда + Результат.НастройкиПодключенияСохранены = Истина; + Результат.УзелОбмена = НастройкиПодключения.УзелИнформационнойБазы; + Иначе + ОбменДаннымиСервер.УдалитьНастройкуСинхронизации(НастройкиПодключения.УзелИнформационнойБазы); + + Результат.НастройкиПодключенияСохранены = Ложь; + Результат.УзелОбмена = Неопределено; + КонецЕсли; + + ПоместитьВоВременноеХранилище(Результат, АдресРезультата); + +КонецПроцедуры + +Процедура ЗагрузитьНастройкиXDTOКорреспондента(Параметры, АдресРезультата) Экспорт + + НастройкиЗагрузки = Неопределено; + Параметры.Свойство("НастройкиЗагрузки", НастройкиЗагрузки); + + Результат = Новый Структура; + Результат.Вставить("НастройкиЗагружены", Истина); + Результат.Вставить("ПолученыДанныеДляСопоставления", Ложь); + Результат.Вставить("СообщениеОбОшибке", ""); + + // Получение сообщения обмена с настройками XDTO. + ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); + ПараметрыОбмена.ВыполнятьЗагрузку = Истина; + ПараметрыОбмена.ВыполнятьВыгрузку = Ложь; + ПараметрыОбмена.ВидТранспортаСообщенийОбмена = + РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию(НастройкиЗагрузки.УзелОбмена); + + ДополнительныеПараметры = Новый Структура; + + Отказ = Ложь; + Попытка + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы( + НастройкиЗагрузки.УзелОбмена, ПараметрыОбмена, Отказ, ДополнительныеПараметры); + Исключение + Отказ = Истина; + Результат.СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), + УровеньЖурналаРегистрации.Ошибка, , , Результат.СообщениеОбОшибке); + КонецПопытки; + + Если Отказ Тогда + Результат.НастройкиЗагружены = Ложь; + Если ПустаяСтрока(Результат.СообщениеОбОшибке) Тогда + Результат.СообщениеОбОшибке = НСтр("ru = 'Не удалось получить параметры корреспондента.'"); + КонецЕсли; + Иначе + НастройкиКорреспондента = ОбменДаннымиXDTOСервер.ПоддерживаемыеОбъектыФорматаКорреспондента( + НастройкиЗагрузки.УзелОбмена, "ОтправкаПолучение"); + Результат.НастройкиЗагружены = (НастройкиКорреспондента.Количество() > 0); + + Если Результат.НастройкиЗагружены Тогда + Если ДополнительныеПараметры.Свойство("ПолученыДанныеДляСопоставления") Тогда + Результат.ПолученыДанныеДляСопоставления = ДополнительныеПараметры.ПолученыДанныеДляСопоставления; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + ПоместитьВоВременноеХранилище(Результат, АдресРезультата); + +КонецПроцедуры + +Процедура СохранитьНастройкиСинхронизации(Параметры, АдресРезультата) Экспорт + + НастройкиСинхронизации = Неопределено; + Параметры.Свойство("НастройкиСинхронизации", НастройкиСинхронизации); + + Результат = Новый Структура; + Результат.Вставить("НастройкиСохранены", Истина); + Результат.Вставить("СообщениеОбОшибке", ""); + + ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(НастройкиСинхронизации.УзелОбмена); + + Если ОбменДаннымиСервер.ЕстьАлгоритмМенеджераПланаОбмена("ПриСохраненииНастроекСинхронизацииДанных", ИмяПланаОбмена) Тогда + НачатьТранзакцию(); + Попытка + УзелОбъект = НастройкиСинхронизации.УзелОбмена.ПолучитьОбъект(); + ПланыОбмена[ИмяПланаОбмена].ПриСохраненииНастроекСинхронизацииДанных(УзелОбъект, + НастройкиСинхронизации.ДанныеЗаполнения); + УзелОбъект.Записать(); + + Если Не ОбменДаннымиСервер.НастройкаСинхронизацииЗавершена(НастройкиСинхронизации.УзелОбмена) Тогда + ОбменДаннымиСервер.ЗавершитьНастройкуСинхронизацииДанных(НастройкиСинхронизации.УзелОбмена); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + + Результат.НастройкиСохранены = Ложь; + Результат.СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), + УровеньЖурналаРегистрации.Ошибка, , , Результат.СообщениеОбОшибке); + КонецПопытки; + Иначе + Если Не ОбменДаннымиСервер.НастройкаСинхронизацииЗавершена(НастройкиСинхронизации.УзелОбмена) Тогда + ОбменДаннымиСервер.ЗавершитьНастройкуСинхронизацииДанных(НастройкиСинхронизации.УзелОбмена); + КонецЕсли; + КонецЕсли; + + ПоместитьВоВременноеХранилище(Результат, АдресРезультата); + +КонецПроцедуры + +Процедура ВыполнитьДействияПоНастройкеОбменаДанными(НастройкиПодключения) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + НачатьТранзакцию(); + Попытка + + // Создаем/обновляем узлы плана обмена. + СоздатьОбновитьУзлыПланаОбмена(НастройкиПодключения); + + // Загружаем настройки транспорта сообщений. + Если ЗначениеЗаполнено(НастройкиПодключения.ВидТранспортаСообщенийОбмена) Тогда + // Для online-обмена при настройке из коробки вид транспорта не будет и не должен быть заполнен. + ОбновитьНастройкиТранспортаОбменаДанными(НастройкиПодключения); + КонецЕсли; + + // Обновляем значение константы префикса ИБ. + Если ПустаяСтрока(ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы")) + И Не ПустаяСтрока(НастройкиПодключения.ПрефиксИнформационнойБазыИсточника) Тогда + + ОбменДаннымиСервер.УстановитьПрефиксИнформационнойБазы(НастройкиПодключения.ПрефиксИнформационнойБазыИсточника); + + КонецЕсли; + + Если ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(НастройкиПодключения.ИмяПланаОбмена) + И НастройкиПодключения.ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" Тогда + + Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Установить(Истина); + Константы.ИспользоватьСинхронизациюДанных.Установить(Истина); + Константы.НеИспользоватьРазделениеПоОбластямДанных.Установить(Истина); + + // Правила обмена не мигрируют в РИБ, поэтому выполняем загрузку правил. + ОбменДаннымиСервер.ВыполнитьОбновлениеПравилДляОбменаДанными(); + + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +Процедура УдалитьНастройкуСинхронизации(Параметры, АдресРезультата) Экспорт + + НастройкиУдаления = Неопределено; + Параметры.Свойство("НастройкиУдаления", НастройкиУдаления); + + Результат = Новый Структура; + Результат.Вставить("НастройкаУдалена", Истина); + Результат.Вставить("НастройкаУдаленаВКорреспонденте", НастройкиУдаления.УдалитьНастройкуВКорреспонденте); + Результат.Вставить("СообщениеОбОшибке", ""); + Результат.Вставить("СообщениеОбОшибкеВКорреспонденте", ""); + + // 1. Удаление настройки синхронизации в программе-корреспонденте (опционально). + Если НастройкиУдаления.УдалитьНастройкуВКорреспонденте Тогда + УдалитьНастройкуСинхронизацииВКорреспонденте(НастройкиУдаления, Результат); + КонецЕсли; + + // 2. Удаление настройки синхронизации в этой программе. + Попытка + ОбменДаннымиСервер.УдалитьНастройкуСинхронизации(НастройкиУдаления.УзелОбмена); + Исключение + Результат.НастройкаУдалена = Ложь; + Результат.СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииУдалениеОбменаДанными(), + УровеньЖурналаРегистрации.Ошибка, , , Результат.СообщениеОбОшибке); + КонецПопытки; + + ПоместитьВоВременноеХранилище(Результат, АдресРезультата); + +КонецПроцедуры + +Процедура УдалитьНастройкуСинхронизацииВКорреспонденте(НастройкиУдаления, Результат) + + ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(НастройкиУдаления.УзелОбмена); + ИдентификаторУзла = ОбменДаннымиСервер.ИдентификаторЭтогоУзлаДляОбмена(НастройкиУдаления.УзелОбмена); + + ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию( + НастройкиУдаления.УзелОбмена); + + Если ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.COM Тогда + + НастройкиПодключения = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспорта( + НастройкиУдаления.УзелОбмена, ВидТранспорта); + РезультатПодключения = ОбменДаннымиСервер.УстановитьВнешнееСоединениеСБазой(НастройкиПодключения); + + ВнешнееСоединение = РезультатПодключения.Соединение; + Если ВнешнееСоединение = Неопределено Тогда + Результат.СообщениеОбОшибкеВКорреспонденте = РезультатПодключения.ПодробноеОписаниеОшибки; + Результат.НастройкаУдаленаВКорреспонденте = Ложь; + Возврат; + КонецЕсли; + + УзелКорреспондента = ВнешнееСоединение.ОбменДаннымиСервер.УзелПланаОбменаПоКоду(ИмяПланаОбмена, + ИдентификаторУзла); + + Если УзелКорреспондента = Неопределено Тогда + Результат.СообщениеОбОшибкеВКорреспонденте = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В программе-корреспонденте не найден узел плана обмена ""%1"" по коду ""%2"".'"), + ИмяПланаОбмена, ИдентификаторУзла); + Результат.НастройкаУдаленаВКорреспонденте = Ложь; + Возврат; + КонецЕсли; + + Попытка + ВнешнееСоединение.ОбменДаннымиСервер.УдалитьНастройкуСинхронизации(УзелКорреспондента); + Исключение + Результат.НастройкаУдаленаВКорреспонденте = Ложь; + Результат.СообщениеОбОшибкеВКорреспонденте = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииУдалениеОбменаДанными(), + УровеньЖурналаРегистрации.Ошибка, , , Результат.СообщениеОбОшибкеВКорреспонденте); + КонецПопытки; + + ИначеЕсли ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда + + НастройкиПодключения = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспортаWS( + НастройкиУдаления.УзелОбмена); + + ВерсииИнтерфейса = Неопределено; + Попытка + ВерсииИнтерфейса = ОбменДаннымиПовтИсп.ВерсииКорреспондента(НастройкиПодключения); + Исключение + Результат.СообщениеОбОшибкеВКорреспонденте = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + Результат.НастройкаУдаленаВКорреспонденте = Ложь; + + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииУдалениеОбменаДанными(), + УровеньЖурналаРегистрации.Ошибка, , , Результат.СообщениеОбОшибкеВКорреспонденте); + Возврат; + КонецПопытки; + + WSПрокси = Неопределено; + Если ВерсииИнтерфейса.Найти("3.0.1.1") <> Неопределено Тогда + WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси_3_0_1_1(НастройкиПодключения); + Иначе + Результат.СообщениеОбОшибкеВКорреспонденте = НСтр("ru = 'Удаление настройки синхронизации на стороне программы-корреспондента из этой программы не поддерживается.'"); + Результат.НастройкаУдаленаВКорреспонденте = Ложь; + Возврат; + КонецЕсли; + + Если WSПрокси = Неопределено Тогда + Отказ = Истина; + Возврат; + КонецЕсли; + + Попытка + WSПрокси.RemoveExchangeNode(ИмяПланаОбмена, ИдентификаторУзла); + Исключение + Результат.НастройкаУдаленаВКорреспонденте = Ложь; + Результат.СообщениеОбОшибкеВКорреспонденте = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииУдалениеОбменаДанными(), + УровеньЖурналаРегистрации.Ошибка, , , Результат.СообщениеОбОшибкеВКорреспонденте); + КонецПопытки; + + Иначе + Результат.НастройкаУдаленаВКорреспонденте = Ложь; + Результат.СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для вида подключения ""%1"" не поддерживается удаление настройки синхронизации на стороне программы-корреспондента.'"), + ВидТранспорта); + КонецЕсли; + +КонецПроцедуры + +Процедура ЗарегистрироватьДанныеДляНачальнойВыгрузки(Параметры, АдресРезультата) Экспорт + + НастройкиРегистрации = Неопределено; + Параметры.Свойство("НастройкиРегистрации", НастройкиРегистрации); + + Результат = Новый Структура; + Результат.Вставить("ДанныеЗарегистрированы", Истина); + Результат.Вставить("СообщениеОбОшибке", ""); + + Попытка + ОбменДаннымиСервер.ЗарегистрироватьДанныеДляНачальнойВыгрузки(НастройкиРегистрации.УзелОбмена); + Исключение + Результат.ДанныеЗарегистрированы = Ложь; + Результат.СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииРегистрацияДанныхДляНачальнойВыгрузки(), + УровеньЖурналаРегистрации.Ошибка, , , Результат.СообщениеОбОшибке); + КонецПопытки; + + ПоместитьВоВременноеХранилище(Результат, АдресРезультата); + +КонецПроцедуры + +Процедура ВыгрузитьДанныеДляСопоставления(Параметры, АдресРезультата) Экспорт + + НастройкиВыгрузки = Неопределено; + Параметры.Свойство("НастройкиВыгрузки", НастройкиВыгрузки); + + Результат = Новый Структура; + Результат.Вставить("ДанныеВыгружены", Истина); + Результат.Вставить("СообщениеОбОшибке", ""); + + ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); + ПараметрыОбмена.ВыполнятьЗагрузку = Ложь; + ПараметрыОбмена.ВыполнятьВыгрузку = Истина; + ПараметрыОбмена.ВидТранспортаСообщенийОбмена = НастройкиВыгрузки.ВидТранспорта; + ПараметрыОбмена.СообщениеДляСопоставленияДанных = Истина; + + Если НастройкиВыгрузки.Свойство("WSПароль") Тогда + ПараметрыОбмена.Вставить("ПараметрыАутентификации", НастройкиВыгрузки.WSПароль); + КонецЕсли; + + Отказ = Ложь; + Попытка + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы( + НастройкиВыгрузки.УзелОбмена, ПараметрыОбмена, Отказ); + Исключение + Результат.ДанныеВыгружены = Ложь; + Результат.СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииВыгрузкаДанныхДляСопоставления(), + УровеньЖурналаРегистрации.Ошибка, , , Результат.СообщениеОбОшибке); + КонецПопытки; + + Результат.ДанныеВыгружены = Результат.ДанныеВыгружены И Не Отказ; + + Если Не Результат.ДанныеВыгружены + И ПустаяСтрока(Результат.СообщениеОбОшибке) Тогда + Результат.СообщениеОбОшибке = НСтр("ru = 'При выполнении выгрузки данных для сопоставления возникли ошибки (см. Журнал регистрации).'"); + КонецЕсли; + + ПоместитьВоВременноеХранилище(Результат, АдресРезультата); + +КонецПроцедуры + +Функция ПредопределенноеРасписаниеКаждыйЧас() Экспорт + + Месяцы = Новый Массив; + Месяцы.Добавить(1); + Месяцы.Добавить(2); + Месяцы.Добавить(3); + Месяцы.Добавить(4); + Месяцы.Добавить(5); + Месяцы.Добавить(6); + Месяцы.Добавить(7); + Месяцы.Добавить(8); + Месяцы.Добавить(9); + Месяцы.Добавить(10); + Месяцы.Добавить(11); + Месяцы.Добавить(12); + + ДниНедели = Новый Массив; + ДниНедели.Добавить(1); + ДниНедели.Добавить(2); + ДниНедели.Добавить(3); + ДниНедели.Добавить(4); + ДниНедели.Добавить(5); + ДниНедели.Добавить(6); + ДниНедели.Добавить(7); + + Расписание = Новый РасписаниеРегламентногоЗадания; + Расписание.Месяцы = Месяцы; + Расписание.ДниНедели = ДниНедели; + Расписание.ПериодПовтораВТечениеДня = 60 * 60; // 60 минут + Расписание.ПериодПовтораДней = 1; // каждый день + + Возврат Расписание; + +КонецФункции + +Функция КодУзла(НастройкиПодключения) + + Если НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбмена + Или НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента Тогда + + Возврат НастройкиПодключения.ПрефиксИнформационнойБазыИсточника; + + Иначе + + Возврат НастройкиПодключения.ИдентификаторИнформационнойБазыИсточника; + + КонецЕсли; + +КонецФункции + +Функция КодУзлаКорреспондента(НастройкиПодключения) + + Если НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбмена + Или НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента Тогда + + Возврат НастройкиПодключения.ПрефиксИнформационнойБазыПриемника; + + Иначе + + Возврат НастройкиПодключения.ИдентификаторИнформационнойБазыПриемника; + + КонецЕсли; + +КонецФункции + +Процедура СоздатьОбновитьУзлыПланаОбмена(НастройкиПодключения) + + КодЭтогоУзла = КодУзла(НастройкиПодключения); + КодНовогоУзла = КодУзлаКорреспондента(НастройкиПодключения); + + МенеджерПланаОбмена = ПланыОбмена[НастройкиПодключения.ИмяПланаОбмена]; + + // Обновляем код предопределенного узла этой базы, если он не заполнен. + ЭтотУзел = МенеджерПланаОбмена.ЭтотУзел(); + + КодЭтогоУзлаВБазе = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЭтотУзел, "Код"); + ЭтоПланОбменаРИБ = ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы( + НастройкиПодключения.ИмяПланаОбмена); + + Если ПустаяСтрока(КодЭтогоУзлаВБазе) Тогда + + ЭтотУзелОбъект = ЭтотУзел.ПолучитьОбъект(); + ЭтотУзелОбъект.Код = КодЭтогоУзла; + ЭтотУзелОбъект.Наименование = НастройкиПодключения.НаименованиеЭтойБазы; + ЭтотУзелОбъект.ДополнительныеСвойства.Вставить("ПолучениеСообщенияОбмена"); + ЭтотУзелОбъект.Записать(); + + КодЭтогоУзлаВБазе = КодЭтогоУзла; + + КонецЕсли; + + СоздаватьНовыйУзел = Ложь; + + // Получаем узел корреспондента. + Если ЭтоПланОбменаРИБ + И НастройкиПодключения.ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" Тогда + + ГлавныйУзел = ОбменДаннымиСервер.ГлавныйУзел(); + + Если ГлавныйУзел = Неопределено Тогда + + ВызватьИсключение НСтр("ru = 'Главный узел для текущей информационной базы не определен. + |Возможно, информационная база не является подчиненным узлом в РИБ.'"); + КонецЕсли; + + НовыйУзел = ГлавныйУзел.ПолучитьОбъект(); + + // Перенос общих данных с предопределенного узла. + ЭтотУзелОбъект = ЭтотУзел.ПолучитьОбъект(); + + МетаданныеПланаОбмена = НовыйУзел.Метаданные(); + ОбщиеДанныеСтрока = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(НастройкиПодключения.ИмяПланаОбмена, + "ОбщиеДанныеУзлов", НастройкиПодключения.ВариантНастройкиОбмена); + + ОбщиеДанные = СтрРазделить(ОбщиеДанныеСтрока, ", ", Ложь); + Для Каждого ЭлементОбщиеДанные Из ОбщиеДанные Цикл + Если МетаданныеПланаОбмена.ТабличныеЧасти.Найти(ЭлементОбщиеДанные) = Неопределено Тогда + ЗаполнитьЗначенияСвойств(НовыйУзел, ЭтотУзелОбъект, ЭлементОбщиеДанные); + Иначе + НовыйУзел[ЭлементОбщиеДанные].Загрузить(ЭтотУзелОбъект[ЭлементОбщиеДанные].Выгрузить()); + КонецЕсли; + КонецЦикла; + Иначе + // Создаем/обновляем узел. + НовыйУзелСсылка = МенеджерПланаОбмена.НайтиПоКоду(КодНовогоУзла); + + СоздаватьНовыйУзел = НовыйУзелСсылка.Пустая(); + + Если СоздаватьНовыйУзел Тогда + НовыйУзел = МенеджерПланаОбмена.СоздатьУзел(); + НовыйУзел.Код = КодНовогоУзла; + Иначе + ВызватьИсключение НСтр("ru = 'Значение префикса первой информационной базы не уникально. + |В системе уже существует синхронизация данных для информационной базы (программы) с указанным префиксом.'"); + КонецЕсли; + + НовыйУзел.Наименование = НастройкиПодключения.НаименованиеВторойБазы; + + Если ОбщегоНазначения.ЕстьРеквизитОбъекта("ВариантНастройки", Метаданные.ПланыОбмена[НастройкиПодключения.ИмяПланаОбмена]) Тогда + НовыйУзел.ВариантНастройки = НастройкиПодключения.ВариантНастройкиОбмена; + КонецЕсли; + + Если СоздаватьНовыйУзел Тогда + НовыйУзел.Заполнить(Неопределено); + КонецЕсли; + + Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(НастройкиПодключения.ИмяПланаОбмена) Тогда + Если ЗначениеЗаполнено(НастройкиПодключения.ВерсияФорматаОбмена) Тогда + НовыйУзел.ВерсияФорматаОбмена = НастройкиПодключения.ВерсияФорматаОбмена; + КонецЕсли; + КонецЕсли; + + КонецЕсли; + + // Сбрасываем счетчики сообщений. + НовыйУзел.НомерОтправленного = 0; + НовыйУзел.НомерПринятого = 0; + + Если ОбщегоНазначения.РазделениеВключено() + И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() + И ОбменДаннымиСервер.ЭтоРазделенныйПланОбменаБСП(НастройкиПодключения.ИмяПланаОбмена) Тогда + + НовыйУзел.РегистрироватьИзменения = Истина; + + КонецЕсли; + + Если ЗначениеЗаполнено(НастройкиПодключения.СсылкаНового) Тогда + НовыйУзел.УстановитьСсылкуНового(НастройкиПодключения.СсылкаНового); + КонецЕсли; + + НовыйУзел.ОбменДанными.Загрузка = Истина; + НовыйУзел.Записать(); + + Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(НастройкиПодключения.ИмяПланаОбмена) Тогда + Если НастройкиПодключения.ПоддерживаемыеОбъектыФормата <> Неопределено Тогда + РегистрыСведений.НастройкиОбменаДаннымиXDTO.ОбновитьНастройкиКорреспондента(НовыйУзел.Ссылка, + "ПоддерживаемыеОбъекты", НастройкиПодключения.ПоддерживаемыеОбъектыФормата); + КонецЕсли; + + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("УзелИнформационнойБазы", НовыйУзел.Ссылка); + СтруктураЗаписи.Вставить("ИмяПланаОбменаКорреспондента", НастройкиПодключения.ИмяПланаОбменаКорреспондента); + + ОбменДаннымиСервер.ОбновитьЗаписьВРегистрСведений(СтруктураЗаписи, "НастройкиОбменаДаннымиXDTO"); + КонецЕсли; + + НастройкиПодключения.УзелИнформационнойБазы = НовыйУзел.Ссылка; + + // Общие данные узлов. + РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ОбновитьПрефиксы( + НастройкиПодключения.УзелИнформационнойБазы, + НастройкиПодключения.ПрефиксИнформационнойБазыИсточника, + НастройкиПодключения.ПрефиксИнформационнойБазыПриемника); + + Если СоздаватьНовыйУзел + И Не ОбщегоНазначения.РазделениеВключено() Тогда + ОбменДаннымиСервер.ВыполнитьОбновлениеПравилДляОбменаДанными(); + КонецЕсли; + + Если КодЭтогоУзла <> КодЭтогоУзлаВБазе + И ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(НастройкиПодключения.ИмяПланаОбмена) + И (НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбмена + Или НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента) Тогда + // Узел в базе корреспонденте нуждается в перекодировании. + СтруктураВременныйКод = Новый Структура; + СтруктураВременныйКод.Вставить("Корреспондент", НастройкиПодключения.УзелИнформационнойБазы); + СтруктураВременныйКод.Вставить("КодУзла", КодЭтогоУзла); + + ОбменДаннымиСервер.ДобавитьЗаписьВРегистрСведений(СтруктураВременныйКод, "ПсевдонимыПредопределенныхУзлов"); + КонецЕсли; + +КонецПроцедуры + +Процедура ОбновитьНастройкиТранспортаОбменаДанными(НастройкиПодключения) + + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("Корреспондент", НастройкиПодключения.УзелИнформационнойБазы); + СтруктураЗаписи.Вставить("ВидТранспортаСообщенийОбменаПоУмолчанию", НастройкиПодключения.ВидТранспортаСообщенийОбмена); + + СтруктураЗаписи.Вставить("COMАутентификацияОперационнойСистемы"); + СтруктураЗаписи.Вставить("COMВариантРаботыИнформационнойБазы"); + СтруктураЗаписи.Вставить("COMИмяИнформационнойБазыНаСервере1СПредприятия"); + СтруктураЗаписи.Вставить("COMИмяПользователя"); + СтруктураЗаписи.Вставить("COMИмяСервера1СПредприятия"); + СтруктураЗаписи.Вставить("COMКаталогИнформационнойБазы"); + СтруктураЗаписи.Вставить("COMПарольПользователя"); + + СтруктураЗаписи.Вставить("EMAILМаксимальныйДопустимыйРазмерСообщения"); + СтруктураЗаписи.Вставить("EMAILСжиматьФайлИсходящегоСообщения"); + СтруктураЗаписи.Вставить("EMAILУчетнаяЗапись"); + СтруктураЗаписи.Вставить("EMAILТранслитерироватьИменаФайловСообщенийОбмена"); + + СтруктураЗаписи.Вставить("FILEКаталогОбменаИнформацией"); + СтруктураЗаписи.Вставить("FILEСжиматьФайлИсходящегоСообщения"); + СтруктураЗаписи.Вставить("FILEТранслитерироватьИменаФайловСообщенийОбмена"); + + СтруктураЗаписи.Вставить("FTPСжиматьФайлИсходящегоСообщения"); + СтруктураЗаписи.Вставить("FTPСоединениеМаксимальныйДопустимыйРазмерСообщения"); + СтруктураЗаписи.Вставить("FTPСоединениеПароль"); + СтруктураЗаписи.Вставить("FTPСоединениеПассивноеСоединение"); + СтруктураЗаписи.Вставить("FTPСоединениеПользователь"); + СтруктураЗаписи.Вставить("FTPСоединениеПорт"); + СтруктураЗаписи.Вставить("FTPСоединениеПуть"); + СтруктураЗаписи.Вставить("FTPТранслитерироватьИменаФайловСообщенийОбмена"); + + СтруктураЗаписи.Вставить("WSURLВебСервиса"); + СтруктураЗаписи.Вставить("WSИмяПользователя"); + СтруктураЗаписи.Вставить("WSПароль"); + СтруктураЗаписи.Вставить("WSЗапомнитьПароль"); + + СтруктураЗаписи.Вставить("WSИспользоватьПередачуБольшогоОбъемаДанных", Истина); + + СтруктураЗаписи.Вставить("ПарольАрхиваСообщенияОбмена"); + + ЗаполнитьЗначенияСвойств(СтруктураЗаписи, НастройкиПодключения); + + РегистрыСведений.НастройкиТранспортаОбменаДанными.ДобавитьЗапись(СтруктураЗаписи); + +КонецПроцедуры + +#Область НастройкиВФорматеXML + +Процедура ЗаполнитьНастройкиПодключенияИзКонстанты(НастройкиПодключения) Экспорт + + УстановитьПривилегированныйРежим(Истина); + СтрокаПодключения = Константы.НастройкиПодчиненногоУзлаРИБ.Получить(); + + ЗаполнитьНастройкиПодключенияИзXML(НастройкиПодключения, СтрокаПодключения); + +КонецПроцедуры + +Процедура ЗаполнитьНастройкиПодключенияИзXML(НастройкиПодключения, ИмяФайлаСтрокаXML, ЭтоФайл = Ложь) Экспорт + + СтруктураНастроек = Неопределено; + Попытка + ПрочитатьНастройкиПодключенияИзXMLВСтруктуру(СтруктураНастроек, ИмяФайлаСтрокаXML, ЭтоФайл); + Исключение + ВызватьИсключение; + КонецПопытки; + + // Выполняем проверку зачитанных параметров из файла. + Если СтруктураНастроек.Свойство("ИмяПланаОбмена") + И СтруктураНастроек.ИмяПланаОбмена <> НастройкиПодключения.ИмяПланаОбмена Тогда + + Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(НастройкиПодключения.ИмяПланаОбмена) Тогда + Если СтруктураНастроек.Свойство("ПараметрыОбменаXDTO") + И СтруктураНастроек.ПараметрыОбменаXDTO.Свойство("ФорматОбмена") + И СтруктураНастроек.ПараметрыОбменаXDTO.ФорматОбмена <> НастройкиПодключения.ФорматОбмена Тогда + ВызватьИсключение НСтр("ru = 'Файл не содержит настроек подключения для выбранного обмена данными.'"); + КонецЕсли; + Иначе + ВызватьИсключение НСтр("ru = 'Файл не содержит настроек подключения для выбранного обмена данными.'"); + КонецЕсли; + + КонецЕсли; + + Если Не ЗначениеЗаполнено(НастройкиПодключения.ИмяПланаОбменаКорреспондента) Тогда + НастройкиПодключения.ИмяПланаОбменаКорреспондента = СтруктураНастроек.ИмяПланаОбмена; + КонецЕсли; + + ЗаполнитьЗначенияСвойств(НастройкиПодключения, СтруктураНастроек, , "ИмяПланаОбмена, ПрефиксИнформационнойБазыИсточника"); + + ПустаяСсылкаПланаОбмена = ПланыОбмена[НастройкиПодключения.ИмяПланаОбмена].ПустаяСсылка(); + + НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбмена = + Не ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(НастройкиПодключения.ИмяПланаОбмена) + Или Не ОбменДаннымиXDTOСервер.ПоддерживаетсяВерсияСИдентификаторомОбменаДанными(ПустаяСсылкаПланаОбмена); + + Если Не НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбмена + И Не НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента Тогда + + СтруктураНастроек.Свойство("КодПредопределенногоУзла", НастройкиПодключения.ИдентификаторИнформационнойБазыИсточника); + СтруктураНастроек.Свойство("КодНовогоУзлаВторойБазы", НастройкиПодключения.ИдентификаторИнформационнойБазыПриемника); + + Иначе + + СтруктураНастроек.Свойство("ПрефиксИнформационнойБазыИсточника", НастройкиПодключения.ПрефиксИнформационнойБазыИсточника); + СтруктураНастроек.Свойство("КодНовогоУзлаВторойБазы", НастройкиПодключения.ПрефиксИнформационнойБазыПриемника); + + КонецЕсли; + + Если НастройкиПодключения.ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" + И (НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбмена + Или НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента) Тогда + + ПрефиксИБ = ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"); + Если Не ПустаяСтрока(ПрефиксИБ) + И ПрефиксИБ <> НастройкиПодключения.ПрефиксИнформационнойБазыИсточника Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Префикс программы, указанный при настройке (""%1""), не соответствует префиксу в этой программе (""%2""). + |Для продолжения необходимо начать настройку заново из другой программы, и указать корректный префикс (""%2"").'"), + НастройкиПодключения.ПрефиксИнформационнойБазыИсточника, ПрефиксИБ); + + КонецЕсли; + + КонецЕсли; + + УчетнаяЗаписьЭлектроннойПочты = Неопределено; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") + И СтруктураНастроек.Свойство("УчетнаяЗаписьЭлектроннойПочты", УчетнаяЗаписьЭлектроннойПочты) + И УчетнаяЗаписьЭлектроннойПочты <> Неопределено Тогда + + МодульРаботаСПочтовымиСообщениямиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениямиСлужебный"); + УчетнаяЗаписьЭтойБазы = МодульРаботаСПочтовымиСообщениямиСлужебный.УчетнаяЗаписьЭтойБазыПоДаннымУчетнойЗаписиКорреспондента( + УчетнаяЗаписьЭлектроннойПочты); + НастройкиПодключения.EMAILУчетнаяЗапись = УчетнаяЗаписьЭтойБазы.Ссылка; + + КонецЕсли; + + // Поддержка файла настроек обмена формата версии 1.0. + Если НастройкиПодключения.ВерсияФорматаФайлаНастроекОбменаДанными = "1.0" Тогда + + НастройкиПодключения.НаименованиеЭтойБазы = НСтр("ru = 'Эта информационная база'"); + НастройкиПодключения.НаименованиеВторойБазы = СтруктураНастроек.НаименованиеНастройкиВыполненияОбмена; + НастройкиПодключения.КодНовогоУзлаВторойБазы = СтруктураНастроек.КодНовогоУзла; + + КонецЕсли; + +КонецПроцедуры + +Функция НастройкиПодключенияВXML(НастройкиПодключения, ИмяФайла = "", ТипКодировки = "UTF-8") Экспорт + + ЗаписьXML = Новый ЗаписьXML; + + Если ПустаяСтрока(ИмяФайла) Тогда + ЗаписьXML.УстановитьСтроку(ТипКодировки); + Иначе + ЗаписьXML.ОткрытьФайл(ИмяФайла, ТипКодировки); + КонецЕсли; + + ЗаписьXML.ЗаписатьОбъявлениеXML(); + + ЗаписьXML.ЗаписатьНачалоЭлемента("ПараметрыНастройки"); + ЗаписьXML.ЗаписатьАтрибут("ВерсияФормата", ВерсияФорматаНастроекОбменаДанными()); + + ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsd", "http://www.w3.org/2001/XMLSchema"); + ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance"); + ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("v8", "http://v8.1c.ru/data"); + + ЗаписатьПараметрыПодключения(ЗаписьXML, НастройкиПодключения); + + Если НастройкиПодключения.ИспользоватьПараметрыТранспортаEMAIL Тогда + ЗаписатьУчетнуюЗаписьЭлектроннойПочты(ЗаписьXML, НастройкиПодключения); + КонецЕсли; + + Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(НастройкиПодключения.ИмяПланаОбмена) Тогда + ЗаписатьПараметрыОбменаXDTO(ЗаписьXML, НастройкиПодключения.ИмяПланаОбмена); + КонецЕсли; + + ЗаписьXML.ЗаписатьКонецЭлемента(); // ПараметрыНастройки + + Возврат ЗаписьXML.Закрыть(); + +КонецФункции + +Процедура ЗаписатьПараметрыПодключения(ЗаписьXML, НастройкиПодключения) + + ЗаписьXML.ЗаписатьНачалоЭлемента("ОсновныеПараметрыОбмена"); + + ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.ИмяПланаОбмена, "ИмяПланаОбмена"); + + ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.НаименованиеЭтойБазы, "НаименованиеВторойБазы"); + ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.НаименованиеВторойБазы, "НаименованиеЭтойБазы"); + + Если НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбмена + Или НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента Тогда + + ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.ПрефиксИнформационнойБазыИсточника, "КодНовогоУзлаВторойБазы"); + ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.ПрефиксИнформационнойБазыПриемника, "ПрефиксИнформационнойБазыИсточника"); + + Иначе + + ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.ИдентификаторИнформационнойБазыИсточника, "КодНовогоУзлаВторойБазы"); + ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.ИдентификаторИнформационнойБазыПриемника, "ПрефиксИнформационнойБазыИсточника"); + + КонецЕсли; + + // Настройки транспорта сообщений обмена. + Если НастройкиПодключения.ВидТранспортаСообщенийОбмена <> Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда + ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.ВидТранспортаСообщенийОбмена, "ВидТранспортаСообщенийОбмена"); + Иначе + ДобавитьЗаписьXML(ЗаписьXML, Неопределено, "ВидТранспортаСообщенийОбмена"); + КонецЕсли; + ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.ПарольАрхиваСообщенияОбмена, "ПарольАрхиваСообщенияОбмена"); + + Если НастройкиПодключения.ИспользоватьПараметрыТранспортаEMAIL Тогда + + ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.EMAILМаксимальныйДопустимыйРазмерСообщения, "EMAILМаксимальныйДопустимыйРазмерСообщения"); + ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.EMAILСжиматьФайлИсходящегоСообщения, "EMAILСжиматьФайлИсходящегоСообщения"); + ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.EMAILУчетнаяЗапись, "EMAILУчетнаяЗапись"); + + КонецЕсли; + + Если НастройкиПодключения.ИспользоватьПараметрыТранспортаFILE Тогда + + ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.FILEКаталогОбменаИнформацией, "FILEКаталогОбменаИнформацией"); + ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.FILEСжиматьФайлИсходящегоСообщения, "FILEСжиматьФайлИсходящегоСообщения"); + + КонецЕсли; + + Если НастройкиПодключения.ИспользоватьПараметрыТранспортаFTP Тогда + + ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.FTPСжиматьФайлИсходящегоСообщения, "FTPСжиматьФайлИсходящегоСообщения"); + ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.FTPСоединениеМаксимальныйДопустимыйРазмерСообщения, "FTPСоединениеМаксимальныйДопустимыйРазмерСообщения"); + ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.FTPСоединениеПароль, "FTPСоединениеПароль"); + ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.FTPСоединениеПассивноеСоединение, "FTPСоединениеПассивноеСоединение"); + ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.FTPСоединениеПользователь, "FTPСоединениеПользователь"); + ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.FTPСоединениеПорт, "FTPСоединениеПорт"); + ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.FTPСоединениеПуть, "FTPСоединениеПуть"); + + КонецЕсли; + + Если НастройкиПодключения.ИспользоватьПараметрыТранспортаCOM Тогда + + ПараметрыПодключенияИБ = ОбщегоНазначенияКлиентСервер.ПолучитьПараметрыПодключенияИзСтрокиСоединенияИнформационнойБазы( + СтрокаСоединенияИнформационнойБазы()); + + ВариантРаботыИнформационнойБазы = ПараметрыПодключенияИБ.ВариантРаботыИнформационнойБазы; + ИмяИнформационнойБазыНаСервере1СПредприятия = ПараметрыПодключенияИБ.ИмяИнформационнойБазыНаСервере1СПредприятия; + ИмяСервера1СПредприятия = ПараметрыПодключенияИБ.ИмяСервера1СПредприятия; + КаталогИнформационнойБазы = ПараметрыПодключенияИБ.КаталогИнформационнойБазы; + + ПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь(); + АутентификацияОС = ПользовательИБ.АутентификацияОС; + ИмяПользователя = ПользовательИБ.Имя; + + ДобавитьЗаписьXML(ЗаписьXML, ВариантРаботыИнформационнойБазы, "COMВариантРаботыИнформационнойБазы"); + ДобавитьЗаписьXML(ЗаписьXML, ИмяИнформационнойБазыНаСервере1СПредприятия, "COMИмяИнформационнойБазыНаСервере1СПредприятия"); + ДобавитьЗаписьXML(ЗаписьXML, ИмяСервера1СПредприятия, "COMИмяСервера1СПредприятия"); + ДобавитьЗаписьXML(ЗаписьXML, КаталогИнформационнойБазы, "COMКаталогИнформационнойБазы"); + ДобавитьЗаписьXML(ЗаписьXML, АутентификацияОС, "COMАутентификацияОперационнойСистемы"); + ДобавитьЗаписьXML(ЗаписьXML, ИмяПользователя, "COMИмяПользователя"); + + КонецЕсли; + + ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.ИспользоватьПараметрыТранспортаEMAIL, "ИспользоватьПараметрыТранспортаEMAIL"); + ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.ИспользоватьПараметрыТранспортаFILE, "ИспользоватьПараметрыТранспортаFILE"); + ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.ИспользоватьПараметрыТранспортаFTP, "ИспользоватьПараметрыТранспортаFTP"); + + // Поддержка файла настроек обмена формата версии 1.0. + ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.НаименованиеЭтойБазы, "НаименованиеНастройкиВыполненияОбмена"); + + Если НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбмена + Или НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента Тогда + ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.ПрефиксИнформационнойБазыИсточника, "КодНовогоУзла"); + Иначе + ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.ИдентификаторИнформационнойБазыИсточника, "КодНовогоУзла"); + КонецЕсли; + + КодУзлаИБ = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(НастройкиПодключения.УзелИнформационнойБазы, "Код"); + + ДобавитьЗаписьXML(ЗаписьXML, КодУзлаИБ, "КодПредопределенногоУзла"); + + ЗаписьXML.ЗаписатьКонецЭлемента(); // ОсновныеПараметрыОбмена + +КонецПроцедуры + +Процедура ЗаписатьУчетнуюЗаписьЭлектроннойПочты(ЗаписьXML, НастройкиПодключения) + + EMAILУчетнаяЗапись = Неопределено; + Если ЗначениеЗаполнено(НастройкиПодключения.EMAILУчетнаяЗапись) Тогда + EMAILУчетнаяЗапись = НастройкиПодключения.EMAILУчетнаяЗапись.ПолучитьОбъект(); + КонецЕсли; + + ЗаписьXML.ЗаписатьНачалоЭлемента("УчетнаяЗаписьЭлектроннойПочты"); + ЗаписатьXML(ЗаписьXML, EMAILУчетнаяЗапись); + ЗаписьXML.ЗаписатьКонецЭлемента(); // УчетнаяЗаписьЭлектроннойПочты + +КонецПроцедуры + +Процедура ЗаписатьПараметрыОбменаXDTO(ЗаписьXML, ИмяПланаОбмена) + + ЗаписьXML.ЗаписатьНачалоЭлемента("ПараметрыОбменаXDTO"); + + ФорматОбмена = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, "ФорматОбмена"); + + ЗаписатьXML(ЗаписьXML, ФорматОбмена, "ФорматОбмена", НазначениеТипаXML.Явное); + + ЗаписьXML.ЗаписатьКонецЭлемента(); // ПараметрыОбменаXDTO + +КонецПроцедуры + +Процедура ДобавитьЗаписьXML(ЗаписьXML, Значение, ПолноеИмя) + + ЗаписатьXML(ЗаписьXML, Значение, ПолноеИмя, НазначениеТипаXML.Явное); + +КонецПроцедуры + +Процедура ПрочитатьНастройкиПодключенияИзXMLВСтруктуру(СтруктураНастроек, ИмяФайлаСтрокаXML, ЭтоФайл) + + СтруктураНастроек = Новый Структура; + + ЧтениеXML = Новый ЧтениеXML; + Если ЭтоФайл Тогда + ЧтениеXML.ОткрытьФайл(ИмяФайлаСтрокаXML); + Иначе + ЧтениеXML.УстановитьСтроку(ИмяФайлаСтрокаXML); + КонецЕсли; + + ЧтениеXML.Прочитать(); // ПараметрыНастройки + + ВерсияФормата = ЧтениеXML.ПолучитьАтрибут("ВерсияФормата"); + СтруктураНастроек.Вставить("ВерсияФорматаФайлаНастроекОбменаДанными", + ?(ВерсияФормата = Неопределено, "1.0", ВерсияФормата)); + + ЧтениеXML.Прочитать(); // ОсновныеПараметрыОбмена + + // Зачитываем узел ОсновныеПараметрыОбмена. + СчитатьДанныеВСтруктуру(СтруктураНастроек, ЧтениеXML); + + Если СтруктураНастроек.Свойство("ИспользоватьПараметрыТранспортаEMAIL") + И СтруктураНастроек.ИспользоватьПараметрыТранспортаEMAIL Тогда + + // Зачитываем узел УчетнаяЗаписьЭлектроннойПочты. + ЧтениеXML.Прочитать(); // УчетнаяЗаписьЭлектроннойПочты {НачалоЭлемента} + + СтруктураНастроек.Вставить("УчетнаяЗаписьЭлектроннойПочты", ПрочитатьXML(ЧтениеXML)); + + ЧтениеXML.Прочитать(); // УчетнаяЗаписьЭлектроннойПочты {КонецЭлемента} + + КонецЕсли; + + ЧтениеXML.Закрыть(); + +КонецПроцедуры + +Процедура СчитатьДанныеВСтруктуру(СтруктураНастроек, ЧтениеXML) + + Если ЧтениеXML.ТипУзла <> ТипУзлаXML.НачалоЭлемента Тогда + ВызватьИсключение НСтр("ru = 'Ошибка разбора XML.'"); + КонецЕсли; + + ЧтениеXML.Прочитать(); + + Пока ЧтениеXML.ТипУзла <> ТипУзлаXML.КонецЭлемента Цикл + + ИмяУзла = ЧтениеXML.Имя; + СтруктураНастроек.Вставить(ИмяУзла, ПрочитатьXML(ЧтениеXML)); + + КонецЦикла; + + ЧтениеXML.Прочитать(); + +КонецПроцедуры + +Функция НастройкиXDTOКорреспондентаИзXML(ИмяФайлаСтрокаXML, ЭтоФайл, УзелОбмена) Экспорт + + ЧтениеXML = Новый ЧтениеXML; + Если ЭтоФайл Тогда + ЧтениеXML.ОткрытьФайл(ИмяФайлаСтрокаXML); + Иначе + ЧтениеXML.УстановитьСтроку(ИмяФайлаСтрокаXML); + КонецЕсли; + + ЧтениеXML.Прочитать(); // Message + ЧтениеXML.Прочитать(); // Header + + Header = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, + ФабрикаXDTO.Тип("http://www.1c.ru/SSL/Exchange/Message", ЧтениеXML.ЛокальноеИмя)); + + СтруктураНастроек = Новый Структура; + ОбменДаннымиXDTOСервер.ЗаполнитьСтруктуруНастроекXDTOКорреспондента(СтруктураНастроек, Header, , УзелОбмена); + + ЧтениеXML.Закрыть(); + + Возврат СтруктураНастроек; + +КонецФункции + +#КонецОбласти + +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl index 033af6859..14aec6489 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl @@ -23,11 +23,10 @@ // Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибок при работе процедуры. // Процедура ВыполнитьДействияПоНастройкеНовогоОбменаДанными(Отказ, - НастройкаОтборовНаУзле, - ЗначенияПоУмолчаниюНаУзле, - РегистрироватьДанныеДляВыгрузки = Истина, - ИспользоватьНастройкиТранспорта = Истина, - СообщениеОбОшибке = "") Экспорт + НастройкаОтборовНаУзле, + ЗначенияПоУмолчаниюНаУзле, + РегистрироватьДанныеДляВыгрузки = Истина, + ИспользоватьНастройкиТранспорта = Истина) КодЭтогоУзла = ?(ИспользоватьПрефиксыДляНастройкиОбмена, ПолучитьКодУзлаЭтойБазы(ПрефиксИнформационнойБазыИсточника), @@ -40,187 +39,19 @@ КодНовогоУзла = ИдентификаторИнформационнойБазыПриемника; КонецЕсли; - СтатусЗавершения = Неопределено; - ВыполнитьДействияПоНастройкеОбменаДанными(СтатусЗавершения, - НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле, КодЭтогоУзла, КодНовогоУзла, РегистрироватьДанныеДляВыгрузки, ИспользоватьНастройкиТранспорта); - - Отказ = СтатусЗавершения.Отказ; - СообщениеОбОшибке = СтатусЗавершения.СообщениеОбОшибке; - -КонецПроцедуры - -// Выполняет действия по настройке нового обмена данными для обоих баз. -// -Процедура ВыполнитьДействияПоНастройкеНовогоОбменаДаннымиЧерезВебСервисВДвухБазах(Отказ, - НастройкаОтборовНаУзле, - ДлительнаяОперация, - ИдентификаторОперацииСозданияОбменаДанными) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - ЗначенияПоУмолчаниюНаУзле = НастройкаОтборовНаУзле.ЗначенияПоУмолчаниюНаУзле; - - ПолеСтрокаСообщенияОбОшибке = Неопределено; - ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS; - ИспользоватьПараметрыТранспортаCOM = Ложь; - - КодЭтогоУзла = ПолучитьКодУзлаЭтойБазы(ПрефиксИнформационнойБазыИсточника); - КодНовогоУзла = ПолучитьКодУзлаКорреспондента(); - - ПараметрыПодключения = ОбменДаннымиСервер.СтруктураПараметровWS(); - - ЗаполнитьЗначенияСвойств(ПараметрыПодключения, ЭтотОбъект); - - Если ВерсияКорреспондента_2_1_1_7 Тогда - - WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси_2_1_1_7(ПараметрыПодключения); - - ИначеЕсли ВерсияКорреспондента_2_0_1_6 Тогда - - WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси_2_0_1_6(ПараметрыПодключения); - - Иначе - - WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси(ПараметрыПодключения); - - КонецЕсли; - - Если WSПрокси = Неопределено Тогда - Отказ = Истина; - Возврат; - КонецЕсли; - - НачатьТранзакцию(); - Попытка - - // создаем новый узел - СоздатьОбновитьУзлыПланаОбмена(НастройкаОтборовНаУзле.НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле, КодЭтогоУзла, КодНовогоУзла); - - // Загружаем настройки транспорта сообщений. - ОбновитьНастройкиТранспортаСообщенийОбмена(); - - // Обновляем значение константы префикса ИБ. - Если ИспользоватьПрефиксыДляНастройкиОбмена - И Не ПрефиксИнформационнойБазыИсточникаУстановлен Тогда - - ОбновитьЗначениеКонстантыПрефиксаИнформационнойБазы(); - - КонецЕсли; - - // Выгружаем параметры помощника в строку. - СтрокаПараметровМастераXML = ВыполнитьВыгрузкуПараметровМастера(Отказ); - - Если Отказ Тогда - ВызватьИсключение НСтр("ru = 'При создании настройки обмена во второй информационной базе возникли ошибки.'"); - КонецЕсли; - - // {Обработчик: ПриОтправкеДанныхОтправителя} Начало - Если ОбменДаннымиСервер.ЕстьАлгоритмМенеджераПланаОбмена("ПриОтправкеДанныхОтправителя",ИмяПланаОбмена) Тогда - ПланыОбмена[ИмяПланаОбмена].ПриОтправкеДанныхОтправителя(НастройкаОтборовНаУзле, Ложь); - КонецЕсли; - // {Обработчик: ПриОтправкеДанныхОтправителя} Окончание - - Если ВерсияКорреспондента_2_1_1_7 Тогда - - Сериализатор = Новый СериализаторXDTO(WSПрокси.ФабрикаXDTO); - - WSПрокси.CreateExchange(ИмяПланаОбмена, - СтрокаПараметровМастераXML, - Сериализатор.ЗаписатьXDTO(ЭкранироватьПеречисления(НастройкаОтборовНаУзле.НастройкаОтборовНаУзлеБазыКорреспондента)), - Сериализатор.ЗаписатьXDTO(НастройкаОтборовНаУзле.ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента)); - - ИначеЕсли ВерсияКорреспондента_2_0_1_6 Тогда - - Сериализатор = Новый СериализаторXDTO(WSПрокси.ФабрикаXDTO); - - WSПрокси.CreateExchange(ИмяПланаОбмена, - СтрокаПараметровМастераXML, - Сериализатор.ЗаписатьXDTO(НастройкаОтборовНаУзле.НастройкаОтборовНаУзлеБазыКорреспондента), - Сериализатор.ЗаписатьXDTO(НастройкаОтборовНаУзле.ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента)); - - Иначе - - WSПрокси.CreateExchange(ИмяПланаОбмена, - СтрокаПараметровМастераXML, - ЗначениеВСтрокуВнутр(НастройкаОтборовНаУзле.НастройкаОтборовНаУзлеБазыКорреспондента), - ЗначениеВСтрокуВнутр(НастройкаОтборовНаУзле.ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента)); - - КонецЕсли; - - Если Отказ Тогда - ВызватьИсключение(НСтр("ru = 'Возникла ошибка при создании настройки синхронизации данных.'")); - КонецЕсли; - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ); - КонецПопытки; - - Если Отказ Тогда - Возврат; - КонецЕсли; - - // Выполняем регистрацию изменений только справочников и ПВХ. - Попытка - ОбменДаннымиСервер.ЗарегистрироватьТолькоСправочникиДляНачальнойВыгрузки(УзелИнформационнойБазы); - Исключение - СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ); - Возврат; - КонецПопытки; - - // Выполняем регистрацию изменений во второй ИБ. - WSПрокси.RegisterOnlyCatalogData( - ИмяПланаОбмена, - КодЭтогоУзла, - ДлительнаяОперация, - ИдентификаторОперацииСозданияОбменаДанными); - -КонецПроцедуры - -// Выполняет действия при создании нового обмена данными через внешнее соединение. -// -Процедура ВыполнитьДействияПоНастройкеНовогоОбменаДаннымиЧерезВнешнееСоединение(Отказ, - НастройкаОтборовНаУзле, - ЗначенияПоУмолчаниюНаУзле, - НастройкаОтборовНаУзлеБазыКорреспондента, - ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента) Экспорт - - ПолеСтрокаСообщенияОбОшибке = Неопределено; - ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.COM; - ИспользоватьПараметрыТранспортаCOM = Истина; - - КодЭтогоУзла = ПолучитьКодУзлаЭтойБазы(ПрефиксИнформационнойБазыИсточника); - Если ИспользоватьПрефиксыДляНастройкиОбмена Тогда - КодНовогоУзла = ОбменДаннымиСервер.КодУзлаПланаОбменаСтрокой(ПрефиксИнформационнойБазыПриемника); - Иначе - КодНовогоУзла = ИдентификаторИнформационнойБазыПриемника; - КонецЕсли; - - // Создаем внешнее соединение - Подключение = ОбменДаннымиСервер.УстановитьВнешнееСоединениеСБазой(ЭтотОбъект); - ПолеСтрокаСообщенияОбОшибке = Подключение.ПодробноеОписаниеОшибки; - ВнешнееСоединение = Подключение.Соединение; - - Если ВнешнееСоединение = Неопределено Тогда - Отказ = Истина; - Возврат; - КонецЕсли; - УстановитьПривилегированныйРежим(Истина); НачатьТранзакцию(); Попытка - - // создаем новый узел + // Создаем/обновляем узлы плана обмена. СоздатьОбновитьУзлыПланаОбмена(НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле, КодЭтогоУзла, КодНовогоУзла); - // Записываем версию корреспондента. - РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.УстановитьВерсиюКорреспондента( - УзелИнформационнойБазы, ВнешнееСоединение.Метаданные.Версия); - - // Загружаем настройки транспорта сообщений. - ОбновитьНастройкиТранспортаСообщенийОбменаCOM(); + Если ИспользоватьНастройкиТранспорта Тогда + + // Загружаем настройки транспорта сообщений. + ОбновитьНастройкиТранспортаСообщенийОбмена(); + + КонецЕсли; // Обновляем значение константы префикса ИБ. Если ИспользоватьПрефиксыДляНастройкиОбмена @@ -229,162 +60,44 @@ ОбновитьЗначениеКонстантыПрефиксаИнформационнойБазы(); КонецЕсли; - - // Выгружаем параметры помощника в строку. - СтрокаПараметровМастераXML = ВыполнитьВыгрузкуПараметровМастера(Отказ); - Если Отказ Тогда - ВызватьИсключение НСтр("ru = 'При создании настройки обмена во второй информационной базе возникли ошибки.'"); - КонецЕсли; - - // Получаем обработку помощника настройки обмена во второй базе. - ПомощникСозданияОбменаДанными = ВнешнееСоединение.Обработки.ПомощникСозданияОбменаДанными.Создать(); - ПомощникСозданияОбменаДанными.ИмяПланаОбмена = ИмяПланаОбмена; - - // Загружаем параметры помощника из строки в обработку помощника. - ПомощникСозданияОбменаДанными.ВнешнееСоединениеВыполнитьЗагрузкуПараметровМастера(Отказ, СтрокаПараметровМастераXML); - - Если Отказ Тогда - Сообщение = НСтр("ru = 'При создании настройки обмена во второй информационной базе возникли ошибки: %1'"); - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ПомощникСозданияОбменаДанными.СтрокаСообщенияОбОшибке()); - ВызватьИсключение Сообщение; - КонецЕсли; - - // Выполняем создание настройки обмена во второй ИБ через внешнее соединение. - Если ВерсияКорреспондента_2_1_1_7 ИЛИ ВерсияКорреспондента_2_0_1_6 Тогда + Если ЭтоНастройкаРаспределеннойИнформационнойБазы + И ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" Тогда - ПомощникСозданияОбменаДанными.ВнешнееСоединениеВыполнитьДействияПоНастройкеНовогоОбменаДанными_2_0_1_6(Отказ, - ОбщегоНазначения.ЗначениеВСтрокуXML(НастройкаОтборовНаУзлеБазыКорреспондента), - ОбщегоНазначения.ЗначениеВСтрокуXML(ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента), - ПрефиксИнформационнойБазыПриемникаУстановлен, - ?(ИспользоватьПрефиксыДляНастройкиОбмена,ПрефиксИнформационнойБазыПриемника,ИдентификаторИнформационнойБазыПриемника)); + Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Установить(Истина); + Константы.ИспользоватьСинхронизациюДанных.Установить(Истина); + Константы.НеИспользоватьРазделениеПоОбластямДанных.Установить(Истина); - Иначе + // Правила обмена не мигрируют в РИБ, поэтому выполняем загрузку правил. + ОбменДаннымиСервер.ВыполнитьОбновлениеПравилДляОбменаДанными(); - ПомощникСозданияОбменаДанными.ВнешнееСоединениеВыполнитьДействияПоНастройкеНовогоОбменаДанными(Отказ, - ЗначениеВСтрокуВнутр(НастройкаОтборовНаУзлеБазыКорреспондента), - ЗначениеВСтрокуВнутр(ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента), - ПрефиксИнформационнойБазыПриемникаУстановлен, - ?(ИспользоватьПрефиксыДляНастройкиОбмена,ПрефиксИнформационнойБазыПриемника,ИдентификаторИнформационнойБазыПриемника)); - - КонецЕсли; - - Если Отказ Тогда - Сообщение = НСтр("ru = 'При создании настройки обмена во второй информационной базе возникли ошибки: %1'"); - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ПомощникСозданияОбменаДанными.СтрокаСообщенияОбОшибке()); - ВызватьИсключение Сообщение; КонецЕсли; ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ); + Возврат; КонецПопытки; - Если Отказ Тогда - Возврат; - КонецЕсли; + // Обновляем повторно используемые значения МРО. + ОбменДаннымиВызовСервера.ПроверитьКэшМеханизмаРегистрацииОбъектов(); - // Выполняем регистрацию изменений на узле плана обмена. - ЗарегистрироватьИзмененияДляОбмена(Отказ); - - // Выполняем регистрацию изменений во второй ИБ через внешнее соединение. - ПомощникСозданияОбменаДанными.ВнешнееСоединениеЗарегистрироватьИзмененияДляОбмена(); - -КонецПроцедуры - -// Обновление настроек обмена данными. -// -Процедура ОбновитьНастройкиОбменаДанными(Отказ, - ЗначенияПоУмолчаниюНаУзле, - ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента, - ДлительнаяОперация, - ИдентификаторОперацииСозданияОбменаДанными) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - ПолеСтрокаСообщенияОбОшибке = Неопределено; - - ПараметрыПодключения = ОбменДаннымиСервер.СтруктураПараметровWS(); - - ЗаполнитьЗначенияСвойств(ПараметрыПодключения, ЭтотОбъект); - - Если ВерсияКорреспондента_2_1_1_7 Тогда - - WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси_2_1_1_7(ПараметрыПодключения); - - ИначеЕсли ВерсияКорреспондента_2_0_1_6 Тогда - - WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси_2_0_1_6(ПараметрыПодключения); - - Иначе - - WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси(ПараметрыПодключения); - - КонецЕсли; - - Если WSПрокси = Неопределено Тогда - Отказ = Истина; - Возврат; - КонецЕсли; - - НачатьТранзакцию(); Попытка - // Обновляем настройки для узла. - УзелИнформационнойБазыОбъект = УзелИнформационнойБазы.ПолучитьОбъект(); - - // Установка значений по умолчанию. - ОбменДаннымиСобытия.УстановитьЗначенияПоУмолчаниюНаУзле(УзелИнформационнойБазыОбъект, ЗначенияПоУмолчаниюНаУзле); - - УзелИнформационнойБазыОбъект.ДополнительныеСвойства.Вставить("ПолучениеСообщенияОбмена"); - УзелИнформационнойБазыОбъект.Записать(); - - Если ВерсияКорреспондента_2_1_1_7 ИЛИ ВерсияКорреспондента_2_0_1_6 Тогда + Если РегистрироватьДанныеДляВыгрузки + И Не ЭтоНастройкаРаспределеннойИнформационнойБазы Тогда - Сериализатор = Новый СериализаторXDTO(WSПрокси.ФабрикаXDTO); + // Выполняем регистрацию изменений на узле плана обмена. + ЗарегистрироватьИзмененияДляОбмена(Отказ); - WSПрокси.UpdateExchange( - ИмяПланаОбмена, - ОбменДаннымиПовтИсп.ПолучитьКодЭтогоУзлаДляПланаОбмена(ИмяПланаОбмена), - Сериализатор.ЗаписатьXDTO(ЭкранироватьПеречисления(ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента))); - Иначе - - WSПрокси.UpdateExchange( - ИмяПланаОбмена, - ОбменДаннымиПовтИсп.ПолучитьКодЭтогоУзлаДляПланаОбмена(ИмяПланаОбмена), - ЗначениеВСтрокуВнутр(ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента)); КонецЕсли; - Если Отказ Тогда - ВызватьИсключение(НСтр("ru = 'Возникла ошибка при обновлении настройки синхронизации данных.'")); - КонецЕсли; - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ); - КонецПопытки; - - Если Отказ Тогда - Возврат; - КонецЕсли; - - // Выполняем регистрацию изменений всех данных, кроме справочников и ПВХ. - Попытка - ОбменДаннымиСервер.ЗарегистрироватьВсеДанныеКромеСправочниковДляНачальнойВыгрузки(УзелИнформационнойБазы); Исключение СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ); Возврат; КонецПопытки; - // Выполняем регистрацию изменений во второй ИБ. - WSПрокси.RegisterAllDataExceptCatalogs( - ИмяПланаОбмена, - ОбменДаннымиПовтИсп.ПолучитьКодЭтогоУзлаДляПланаОбмена(ИмяПланаОбмена), - ДлительнаяОперация, - ИдентификаторОперацииСозданияОбменаДанными); - КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -541,13 +254,10 @@ КонецПроцедуры -// - // Выполняет действия при создании нового обмена данными через веб-сервис. // Подробное описание см. в процедуре ВыполнитьДействияПоНастройкеНовогоОбменаДанными. // -Процедура ВебСервисВыполнитьДействияПоНастройкеНовогоОбменаДанными(Отказ, - НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле, СообщениеОбОшибке = "") Экспорт +Процедура ВебСервисВыполнитьДействияПоНастройкеНовогоОбменаДанными(Отказ, НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле) Экспорт НастройкаОтборовНаУзле = ПолучитьЗначенияНастройкиОтборов(НастройкаОтборовНаУзле); ЗначенияПоУмолчаниюНаУзле = ПолучитьЗначенияНастройкиОтборов(ЗначенияПоУмолчаниюНаУзле); @@ -560,9 +270,7 @@ Попытка ПланыОбмена[ИмяПланаОбмена].ПриПолученииДанныхОтправителя(НастройкаОтборовНаУзле, Ложь); Исключение - Инфо = ИнформацияОбОшибке(); - СообщениеОбОшибке = КраткоеПредставлениеОшибки(Инфо); - СообщитьИнформациюОбОшибке(Инфо, Отказ); + СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ); Возврат; КонецПопытки; КонецЕсли; @@ -572,8 +280,23 @@ НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле, Ложь, - Ложь, - СообщениеОбОшибке); + Ложь); + + Если Отказ Тогда + УдалитьНастройкуОбменаДанными(); + КонецЕсли; + +КонецПроцедуры + +Процедура УдалитьНастройкуОбменаДанными() + + УстановитьПривилегированныйРежим(Истина); + МенеджерПланаОбмена = ПланыОбмена[ИмяПланаОбмена]; + УдаляемыйУзел = МенеджерПланаОбмена.НайтиПоКоду(КодНовогоУзлаВторойБазы); + Если Не УдаляемыйУзел.Пустая() Тогда + УдаляемыйУзелОбъект = УдаляемыйУзел.ПолучитьОбъект(); + УдаляемыйУзелОбъект.Удалить(); + КонецЕсли; КонецПроцедуры @@ -593,95 +316,19 @@ ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xml"); Попытка - ЗаписьТекста = Новый ЗаписьТекста(ИмяВременногоФайла, КодировкаТекста.UTF8); + Обработки.ПомощникСозданияОбменаДанными.НастройкиПодключенияВXML(ЭтотОбъект, ИмяВременногоФайла); Исключение - ОбменДаннымиСервер.СообщитьОбОшибке(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), Отказ); + СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ); + УдалитьВременныйФайл(ИмяВременногоФайла); Возврат; КонецПопытки; - СтрокаXML = ВыполнитьВыгрузкуПараметровМастера(Отказ); - - Если Не Отказ Тогда - - ЗаписьТекста.Записать(СтрокаXML); - - КонецЕсли; - - ЗаписьТекста.Закрыть(); - ЗаписьТекста = Неопределено; - АдресВременногоХранилища = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяВременногоФайла)); УдалитьВременныйФайл(ИмяВременногоФайла); КонецПроцедуры -// Выполняет выгрузку параметров помощника в константу для продолжения настройки обмена в подчиненном узле РИБ. -// -// Параметры: -// Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибок при работе процедуры. -// -Процедура ВыполнитьВыгрузкуПараметровМастераВКонстанту(Отказ) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - СтрокаXML = ВыполнитьВыгрузкуПараметровМастера(Отказ); - - Если Не Отказ Тогда - - Константы.НастройкиПодчиненногоУзлаРИБ.Установить(СтрокаXML); - - ПланыОбмена.ЗарегистрироватьИзменения(УзелИнформационнойБазы, Метаданные.Константы.НастройкиПодчиненногоУзлаРИБ); - - КонецЕсли; - -КонецПроцедуры - -// Выполняет загрузку параметров помощника из временного хранилища для продолжения настройки обмена во второй базе. -// -// Параметры: -// Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибок при работе процедуры. -// АдресВременногоХранилища - Строка - адрес временного хранилища с данными xml-файла для загрузки. -// -Процедура ВыполнитьЗагрузкуПараметровМастераИзВременногоХранилища(Отказ, АдресВременногоХранилища) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВременногоХранилища); - - // Получаем имя временного файла в локальной ФС на сервере. - ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xml"); - - // Получаем файл для считывания. - ДвоичныеДанные.Записать(ИмяВременногоФайла); - - ЧтениеТекста = Новый ЧтениеТекста(ИмяВременногоФайла, КодировкаТекста.UTF8); - - СтрокаXML = ЧтениеТекста.Прочитать(); - ЧтениеТекста.Закрыть(); - - // удаляем временный файл - УдалитьВременныйФайл(ИмяВременногоФайла); - - ВыполнитьЗагрузкуПараметровМастера(Отказ, СтрокаXML); - -КонецПроцедуры - -// Выполняет загрузку параметров помощника из константы для продолжения настройки обмена во второй базе. -// -// Параметры: -// Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибок при работе процедуры. -// -Процедура ВыполнитьЗагрузкуПараметровМастераИзКонстанты(Отказ) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - СтрокаXML = Константы.НастройкиПодчиненногоУзлаРИБ.Получить(); - - ВыполнитьЗагрузкуПараметровМастера(Отказ, СтрокаXML); - -КонецПроцедуры - // Инициализирует настройки узла обмена. // Процедура Инициализация(Узел) Экспорт @@ -696,7 +343,7 @@ ПрефиксИнформационнойБазыПриемника = УзелИнформационнойБазыПараметры.Код; - НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспорта(Узел); + НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспорта(Узел); ЗаполнитьЗначенияСвойств(ЭтотОбъект, НастройкиТранспорта); @@ -772,86 +419,6 @@ //////////////////////////////////////////////////////////////////////////////// // Вспомогательные служебные процедуры и функции. -Процедура ВыполнитьДействияПоНастройкеОбменаДанными( - СтатусЗавершения, - НастройкаОтборовНаУзле, - ЗначенияПоУмолчаниюНаУзле, - КодЭтогоУзла, - КодНовогоУзла, - РегистрироватьДанныеДляВыгрузки = Истина, - ИспользоватьНастройкиТранспорта = Истина) - - СтатусЗавершения = Новый Структура; - СтатусЗавершения.Вставить("Отказ", Ложь); - СтатусЗавершения.Вставить("СообщениеОбОшибке", ""); - - УстановитьПривилегированныйРежим(Истина); - - НачатьТранзакцию(); - Попытка - - // Создаем/обновляем узлы плана обмена. - СоздатьОбновитьУзлыПланаОбмена(НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле, КодЭтогоУзла, КодНовогоУзла); - - Если ИспользоватьНастройкиТранспорта Тогда - - // Загружаем настройки транспорта сообщений. - ОбновитьНастройкиТранспортаСообщенийОбмена(); - - КонецЕсли; - - // Обновляем значение константы префикса ИБ. - Если ИспользоватьПрефиксыДляНастройкиОбмена - И Не ПрефиксИнформационнойБазыИсточникаУстановлен Тогда - - ОбновитьЗначениеКонстантыПрефиксаИнформационнойБазы(); - - КонецЕсли; - - Если ЭтоНастройкаРаспределеннойИнформационнойБазы - И ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" Тогда - - Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Установить(Истина); - Константы.ИспользоватьСинхронизациюДанных.Установить(Истина); - Константы.НеИспользоватьРазделениеПоОбластямДанных.Установить(Истина); - - // Правила обмена не мигрируют в РИБ, поэтому выполняем загрузку правил. - ОбменДаннымиСервер.ВыполнитьОбновлениеПравилДляОбменаДанными(); - - КонецЕсли; - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - - Инфо = ИнформацияОбОшибке(); - СтатусЗавершения.СообщениеОбОшибке = КраткоеПредставлениеОшибки(Инфо); - СообщитьИнформациюОбОшибке(Инфо, СтатусЗавершения.Отказ); - Возврат; - КонецПопытки; - - // Обновляем повторно используемые значения МРО. - ОбменДаннымиВызовСервера.ПроверитьКэшМеханизмаРегистрацииОбъектов(); - - Попытка - - Если РегистрироватьДанныеДляВыгрузки - И Не ЭтоНастройкаРаспределеннойИнформационнойБазы Тогда - - // Выполняем регистрацию изменений на узле плана обмена. - ЗарегистрироватьИзмененияДляОбмена(СтатусЗавершения.Отказ); - - КонецЕсли; - - Исключение - Инфо = ИнформацияОбОшибке(); - СтатусЗавершения.СообщениеОбОшибке = КраткоеПредставлениеОшибки(Инфо); - СообщитьИнформациюОбОшибке(Инфо, СтатусЗавершения.Отказ); - Возврат; - КонецПопытки; - -КонецПроцедуры - Процедура СоздатьОбновитьУзлыПланаОбмена(НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле, КодЭтогоУзла, КодНовогоУзла) МенеджерПланаОбмена = ПланыОбмена[ИмяПланаОбмена]; @@ -860,8 +427,10 @@ // Получение ссылки на этот узел плана обмена. ЭтотУзел = МенеджерПланаОбмена.ЭтотУзел(); + КодЭтогоУзлаВБазе = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЭтотУзел, "Код"); - ЭтоПланОбменаРИБ = Метаданные.ПланыОбмена[ИмяПланаОбмена].РаспределеннаяИнформационнаяБаза; + ЭтоПланОбменаРИБ = ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(ИмяПланаОбмена); + Если ПустаяСтрока(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЭтотУзел, "Код")) Или (ЭтоПланОбменаРИБ И КодЭтогоУзлаВБазе <> КодЭтогоУзла) Или (ИспользоватьПрефиксыДляНастройкиОбмена И КодЭтогоУзлаВБазе <> КодЭтогоУзла) Тогда @@ -897,15 +466,8 @@ НовыйУзел = МенеджерПланаОбмена.СоздатьУзел(); НовыйУзел.Код = КодНовогоУзла; Иначе - Если ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Значение префикса программы ""%1"" не уникально (""%2""). Уже существует настройка синхронизации с таким же префиксом. - |Для продолжения необходимо назначить в программе ""%1"" уникальный префикс информационной базы, отличный от текущего.'"), - НаименованиеВторойБазы, КодНовогоУзлаВторойБазы); - Иначе - ВызватьИсключение НСтр("ru = 'Значение префикса первой информационной базы не уникально. - |В системе уже существует синхронизация данных для информационной базы (программы) с указанным префиксом.'"); - КонецЕсли; + ВызватьИсключение НСтр("ru = 'Значение префикса первой информационной базы не уникально. + |В системе уже существует синхронизация данных для информационной базы (программы) с указанным префиксом.'"); КонецЕсли; НовыйУзел.Наименование = НаименованиеВторойБазы; @@ -941,6 +503,24 @@ НовыйУзел.ОбменДанными.Загрузка = Истина; НовыйУзел.Записать(); + Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ИмяПланаОбмена) Тогда + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("УзелИнформационнойБазы", НовыйУзел.Ссылка); + СтруктураЗаписи.Вставить("ИмяПланаОбменаКорреспондента", ИмяПланаОбменаКорреспондента); + + ОбменДаннымиСервер.ОбновитьЗаписьВРегистрСведений(СтруктураЗаписи, "НастройкиОбменаДаннымиXDTO"); + КонецЕсли; + + // Общие данные узлов. + РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ОбновитьПрефиксы( + НовыйУзел.Ссылка, + ПрефиксИнформационнойБазыИсточника, + ПрефиксИнформационнойБазыПриемника); + + Если Не ОбменДаннымиСервер.НастройкаСинхронизацииЗавершена(НовыйУзел.Ссылка) Тогда + ОбменДаннымиСервер.ЗавершитьНастройкуСинхронизацииДанных(НовыйУзел.Ссылка); + КонецЕсли; + УзелИнформационнойБазы = НовыйУзел.Ссылка; Если СоздаватьНовыйУзел @@ -959,7 +539,7 @@ Процедура ОбновитьНастройкиТранспортаСообщенийОбмена() СтруктураЗаписи = Новый Структура; - СтруктураЗаписи.Вставить("Узел", УзелИнформационнойБазы); + СтруктураЗаписи.Вставить("Корреспондент", УзелИнформационнойБазы); СтруктураЗаписи.Вставить("ВидТранспортаСообщенийОбменаПоУмолчанию", ВидТранспортаСообщенийОбмена); СтруктураЗаписи.Вставить("WSИспользоватьПередачуБольшогоОбъемаДанных", Истина); @@ -986,14 +566,14 @@ ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "ПарольАрхиваСообщенияОбмена"); // добавляем запись в РС - РегистрыСведений.НастройкиТранспортаОбмена.ДобавитьЗапись(СтруктураЗаписи); + РегистрыСведений.НастройкиТранспортаОбменаДанными.ДобавитьЗапись(СтруктураЗаписи); КонецПроцедуры Процедура ОбновитьНастройкиТранспортаСообщенийОбменаCOM() СтруктураЗаписи = Новый Структура; - СтруктураЗаписи.Вставить("Узел", УзелИнформационнойБазы); + СтруктураЗаписи.Вставить("Корреспондент", УзелИнформационнойБазы); СтруктураЗаписи.Вставить("ВидТранспортаСообщенийОбменаПоУмолчанию", Перечисления.ВидыТранспортаСообщенийОбмена.COM); ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "COMАутентификацияОперационнойСистемы"); @@ -1005,7 +585,7 @@ ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "COMПарольПользователя"); // добавляем запись в РС - РегистрыСведений.НастройкиТранспортаОбмена.ДобавитьЗапись(СтруктураЗаписи); + РегистрыСведений.НастройкиТранспортаОбменаДанными.ДобавитьЗапись(СтруктураЗаписи); КонецПроцедуры @@ -1038,45 +618,6 @@ КонецПроцедуры -Функция ВыполнитьВыгрузкуПараметровМастера(Отказ) - - Попытка - - ЗаписьXML = Новый ЗаписьXML; - ЗаписьXML.УстановитьСтроку("UTF-8"); - ЗаписьXML.ЗаписатьОбъявлениеXML(); - - ЗаписьXML.ЗаписатьНачалоЭлемента("ПараметрыНастройки"); - ЗаписьXML.ЗаписатьАтрибут("ВерсияФормата", ВерсияФорматаФайлаНастроекОбменаДанными()); - - ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsd", "http://www.w3.org/2001/XMLSchema"); - ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance"); - ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("v8", "http://v8.1c.ru/data"); - - // Выгрузка параметров мастера. - ЗаписьXML.ЗаписатьНачалоЭлемента("ОсновныеПараметрыОбмена"); - ВыгрузитьПараметрыМастера(ЗаписьXML); - ЗаписьXML.ЗаписатьКонецЭлемента(); // ОсновныеПараметрыОбмена - - Если ИспользоватьПараметрыТранспортаEMAIL Тогда - - ЗаписьXML.ЗаписатьНачалоЭлемента("УчетнаяЗаписьЭлектроннойПочты"); - ЗаписатьXML(ЗаписьXML, ?(ЗначениеЗаполнено(EMAILУчетнаяЗапись), EMAILУчетнаяЗапись.ПолучитьОбъект(), Неопределено)); - ЗаписьXML.ЗаписатьКонецЭлемента(); // УчетнаяЗаписьЭлектроннойПочты - - КонецЕсли; - - ЗаписьXML.ЗаписатьКонецЭлемента(); // ПараметрыНастройки - - Исключение - ОбменДаннымиСервер.СообщитьОбОшибке(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), Отказ); - Возврат ""; - КонецПопытки; - - Возврат ЗаписьXML.Закрыть(); - -КонецФункции - Функция ПолучитьКодУзлаЭтойБазы(Знач ПрефиксИнформационнойБазыЗаданныйПользователем) Если ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" Тогда @@ -1112,69 +653,10 @@ КонецЕсли; КонецФункции -Функция ПолучитьКодУзлаКорреспондента() - - Если Не ПустаяСтрока(КодУзлаКорреспондента) Тогда - - Возврат КодУзлаКорреспондента; - - КонецЕсли; - Если ИспользоватьПрефиксыДляНастройкиОбмена Тогда - Возврат ОбменДаннымиСервер.КодУзлаПланаОбменаСтрокой(ПрефиксИнформационнойБазыПриемника); - Иначе - Возврат ИдентификаторИнформационнойБазыПриемника; - КонецЕсли; -КонецФункции - -Процедура ПрочитатьПараметрыВСтруктуру(Отказ, СтрокаXML, СтруктураНастроек) - - Попытка - ЧтениеXML = Новый ЧтениеXML; - ЧтениеXML.УстановитьСтроку(СтрокаXML); - Исключение - Отказ = Истина; - ЧтениеXML = Неопределено; - Возврат; - КонецПопытки; - - Попытка - - ЧтениеXML.Прочитать(); // ПараметрыНастройки - ВерсияФормата = ЧтениеXML.ПолучитьАтрибут("ВерсияФормата"); - ВерсияФорматаФайлаНастроекОбменаДанными = ?(ВерсияФормата = Неопределено, "1.0", ВерсияФормата); - - ЧтениеXML.Прочитать(); // ОсновныеПараметрыОбмена - - // Зачитываем узел ОсновныеПараметрыОбмена. - СтруктураНастроек = СчитатьДанныеВСтруктуру(ЧтениеXML); - - Если СтруктураНастроек.Свойство("ИспользоватьПараметрыТранспортаEMAIL", ИспользоватьПараметрыТранспортаEMAIL) - И ИспользоватьПараметрыТранспортаEMAIL Тогда - - // Зачитываем узел УчетнаяЗаписьЭлектроннойПочты. - ЧтениеXML.Прочитать(); // УчетнаяЗаписьЭлектроннойПочты {НачалоЭлемента} - - СтруктураНастроек.Вставить("УчетнаяЗаписьЭлектроннойПочты", ПрочитатьXML(ЧтениеXML)); - - ЧтениеXML.Прочитать(); // УчетнаяЗаписьЭлектроннойПочты {КонецЭлемента} - - КонецЕсли; - - Исключение - Отказ = Истина; - КонецПопытки; - - ЧтениеXML.Закрыть(); - ЧтениеXML = Неопределено; - -КонецПроцедуры - // Читает настройки помощника обмена из строки XML. // Процедура ВыполнитьЗагрузкуПараметровМастера(Отказ, СтрокаXML) Экспорт - Перем СтруктураНастроек; - // Проверка возможности использования плана обмена в модели сервиса. Если ОбщегоНазначения.РазделениеВключено() И Не ОбменДаннымиПовтИсп.ПланОбменаИспользуетсяВМоделиСервиса(ИмяПланаОбмена) Тогда @@ -1183,175 +665,11 @@ Возврат; КонецЕсли; - ПрочитатьПараметрыВСтруктуру(Отказ, СтрокаXML, СтруктураНастроек); - - Если СтруктураНастроек = Неопределено Тогда - Возврат; - КонецЕсли; - - // Выполняем проверку зачитанных параметров из файла. - Если СтруктураНастроек.Свойство("ИмяПланаОбмена") - И СтруктураНастроек.ИмяПланаОбмена <> ИмяПланаОбмена Тогда - - ПолеСтрокаСообщенияОбОшибке = НСтр("ru = 'Файл содержит настройки обмена для другой информационной базы.'"); - ОбменДаннымиСервер.СообщитьОбОшибке(СтрокаСообщенияОбОшибке(), Отказ); - - КонецЕсли; - - Если Не Отказ Тогда - - // Заполняем свойства обработки значениями из файла. - ЗаполнитьЗначенияСвойств(ЭтотОбъект, СтруктураНастроек); - Если ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS - Или ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.COM Тогда - // Требуется заполнить настройку использования префиксов. - ИспользоватьПрефиксыДляНастройкиОбмена = НЕ (ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, "ЭтоПланОбменаXDTO") - И ОбменДаннымиXDTOСервер.ПоддерживаетсяВерсияСИдентификаторомОбменаДанными(ПланыОбмена[ИмяПланаОбмена].ПустаяСсылка())); - КонецЕсли; - Если НЕ ИспользоватьПрефиксыДляНастройкиОбмена Тогда - ПрефиксИнформационнойБазыИсточника = ""; - ПрефиксИнформационнойБазыПриемника = ""; - СтруктураНастроек.Свойство("ПрефиксИнформационнойБазыИсточника", ИдентификаторИнформационнойБазыИсточника); - СтруктураНастроек.Свойство("ПрефиксИнформационнойБазыПриемника", ИдентификаторИнформационнойБазыПриемника); - КонецЕсли; - УчетнаяЗаписьЭлектроннойПочты = Неопределено; - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") - И СтруктураНастроек.Свойство("УчетнаяЗаписьЭлектроннойПочты", УчетнаяЗаписьЭлектроннойПочты) - И УчетнаяЗаписьЭлектроннойПочты <> Неопределено Тогда - - МодульРаботаСПочтовымиСообщениямиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениямиСлужебный"); - УчетнаяЗаписьЭтойБазы = МодульРаботаСПочтовымиСообщениямиСлужебный.УчетнаяЗаписьЭтойБазыПоДаннымУчетнойЗаписиКорреспондента(УчетнаяЗаписьЭлектроннойПочты); - ЭтотОбъект.EMAILУчетнаяЗапись = УчетнаяЗаписьЭтойБазы.Ссылка; - - КонецЕсли; - - // Поддержка файла настроек обмена формата версии 1.0. - Если ВерсияФорматаФайлаНастроекОбменаДанными = "1.0" Тогда - - ЭтотОбъект.НаименованиеЭтойБазы = НСтр("ru = 'Эта информационная база'"); - ЭтотОбъект.НаименованиеВторойБазы = СтруктураНастроек.НаименованиеНастройкиВыполненияОбмена; - ЭтотОбъект.КодНовогоУзлаВторойБазы = СтруктураНастроек.КодНовогоУзла; - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -Функция СчитатьДанныеВСтруктуру(ЧтениеXML) - - // Возвращаемое значение функции. - Структура = Новый Структура; - - Если ЧтениеXML.ТипУзла <> ТипУзлаXML.НачалоЭлемента Тогда - - ВызватьИсключение НСтр("ru = 'Ошибка чтения 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, "ПарольАрхиваСообщенияОбмена"); - - Если ИспользоватьПараметрыТранспортаEMAIL Тогда - - ДобавитьЗаписьXML(ЗаписьXML, "EMAILМаксимальныйДопустимыйРазмерСообщения"); - ДобавитьЗаписьXML(ЗаписьXML, "EMAILСжиматьФайлИсходящегоСообщения"); - ДобавитьЗаписьXML(ЗаписьXML, "EMAILУчетнаяЗапись"); - - КонецЕсли; - - Если ИспользоватьПараметрыТранспортаFILE Тогда - - ДобавитьЗаписьXML(ЗаписьXML, "FILEКаталогОбменаИнформацией"); - ДобавитьЗаписьXML(ЗаписьXML, "FILEСжиматьФайлИсходящегоСообщения"); - - КонецЕсли; - - Если ИспользоватьПараметрыТранспортаFTP Тогда - - ДобавитьЗаписьXML(ЗаписьXML, "FTPСжиматьФайлИсходящегоСообщения"); - ДобавитьЗаписьXML(ЗаписьXML, "FTPСоединениеМаксимальныйДопустимыйРазмерСообщения"); - ДобавитьЗаписьXML(ЗаписьXML, "FTPСоединениеПароль"); - ДобавитьЗаписьXML(ЗаписьXML, "FTPСоединениеПассивноеСоединение"); - ДобавитьЗаписьXML(ЗаписьXML, "FTPСоединениеПользователь"); - ДобавитьЗаписьXML(ЗаписьXML, "FTPСоединениеПорт"); - ДобавитьЗаписьXML(ЗаписьXML, "FTPСоединениеПуть"); - - КонецЕсли; - - Если ИспользоватьПараметрыТранспортаCOM Тогда - - ПараметрыПодключения = ОбщегоНазначенияКлиентСервер.ПолучитьПараметрыПодключенияИзСтрокиСоединенияИнформационнойБазы(СтрокаСоединенияИнформационнойБазы()); - - ВариантРаботыИнформационнойБазы = ПараметрыПодключения.ВариантРаботыИнформационнойБазы; - ИмяИнформационнойБазыНаСервере1СПредприятия = ПараметрыПодключения.ИмяИнформационнойБазыНаСервере1СПредприятия; - ИмяСервера1СПредприятия = ПараметрыПодключения.ИмяСервера1СПредприятия; - КаталогИнформационнойБазы = ПараметрыПодключения.КаталогИнформационнойБазы; - - ПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь(); - АутентификацияОперационнойСистемы = ПользовательИБ.АутентификацияОС; - ИмяПользователя = ПользовательИБ.Имя; - - ЗаписатьXML(ЗаписьXML, ВариантРаботыИнформационнойБазы, "COMВариантРаботыИнформационнойБазы", НазначениеТипаXML.Явное); - ЗаписатьXML(ЗаписьXML, ИмяИнформационнойБазыНаСервере1СПредприятия, "COMИмяИнформационнойБазыНаСервере1СПредприятия", НазначениеТипаXML.Явное); - ЗаписатьXML(ЗаписьXML, ИмяСервера1СПредприятия, "COMИмяСервера1СПредприятия", НазначениеТипаXML.Явное); - ЗаписатьXML(ЗаписьXML, КаталогИнформационнойБазы, "COMКаталогИнформационнойБазы", НазначениеТипаXML.Явное); - ЗаписатьXML(ЗаписьXML, АутентификацияОперационнойСистемы, "COMАутентификацияОперационнойСистемы", НазначениеТипаXML.Явное); - ЗаписатьXML(ЗаписьXML, ИмяПользователя, "COMИмяПользователя", НазначениеТипаXML.Явное); - - КонецЕсли; - - ДобавитьЗаписьXML(ЗаписьXML, "ИспользоватьПараметрыТранспортаEMAIL"); - ДобавитьЗаписьXML(ЗаписьXML, "ИспользоватьПараметрыТранспортаFILE"); - ДобавитьЗаписьXML(ЗаписьXML, "ИспользоватьПараметрыТранспортаFTP"); - - // Поддержка файла настроек обмена формата версии 1.0. - ЗаписатьXML(ЗаписьXML, НаименованиеЭтойБазы, "НаименованиеНастройкиВыполненияОбмена", НазначениеТипаXML.Явное); - Если ИспользоватьПрефиксыДляНастройкиОбмена Тогда - ЗаписатьXML(ЗаписьXML, СокрЛП(ПрефиксИнформационнойБазыИсточника), "КодНовогоУзла", НазначениеТипаXML.Явное); - Иначе - ЗаписатьXML(ЗаписьXML, ИдентификаторИнформационнойБазыИсточника, "КодНовогоУзла", НазначениеТипаXML.Явное); - КонецЕсли; - ЗаписатьXML(ЗаписьXML, ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелИнформационнойБазы, "Код"), "КодПредопределенногоУзла", НазначениеТипаXML.Явное); - -КонецПроцедуры - -Процедура ДобавитьЗаписьXML(ЗаписьXML, ИмяРеквизита) - - ЗаписатьXML(ЗаписьXML, ЭтотОбъект[ИмяРеквизита], ИмяРеквизита, НазначениеТипаXML.Явное); + Попытка + Обработки.ПомощникСозданияОбменаДанными.ЗаполнитьНастройкиПодключенияИзXML(ЭтотОбъект, СтрокаXML); + Исключение + СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ); + КонецПопытки; КонецПроцедуры @@ -1381,34 +699,6 @@ КонецФункции -Функция ВерсияФорматаФайлаНастроекОбменаДанными() - - Возврат "1.1"; - -КонецФункции - -Функция ЭкранироватьПеречисления(Настройки) - - Результат = Новый Структура; - - Для Каждого Настройка Из Настройки Цикл - - Если ОбщегоНазначения.ЗначениеСсылочногоТипа(Настройка.Значение) - И ОбщегоНазначения.ВидОбъектаПоСсылке(Настройка.Значение) = "Перечисление" Тогда - - Результат.Вставить(Настройка.Ключ, ПолучитьПолноеИмяПредопределенногоЗначения(Настройка.Значение)); - - Иначе - - Результат.Вставить(Настройка.Ключ, Настройка.Значение); - - КонецЕсли; - - КонецЦикла; - - Возврат Результат; -КонецФункции - #КонецОбласти -#КонецЕсли +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ПомощникСозданияОбменаДанными.mdo b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ПомощникСозданияОбменаДанными.mdo index c54b27f0a..e9f63b2c9 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ПомощникСозданияОбменаДанными.mdo +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ПомощникСозданияОбменаДанными.mdo @@ -9,7 +9,6 @@ ru Помощник настройки синхронизации данных - DataProcessor.ПомощникСозданияОбменаДанными.Form.Форма true @@ -506,6 +505,21 @@ + + ИмяПланаОбменаКорреспондента + + ru + Имя плана обмена корреспондента + + + String + + 150 + + + + + ИмяФайлаНастроекСинхронизацииДанных @@ -810,6 +824,18 @@ + + ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента + + ru + Использовать префиксы для настройки обмена корреспондента + + + Boolean + + + + ИдентификаторИнформационнойБазыПриемника @@ -840,293 +866,92 @@ - - - - - - ИнформацияСтатистики + + ФорматОбмена ru - Информация статистики + Формат обмена - - Use - LineNumber - - Use - - - - - ДанныеУспешноЗагружены - - ru - Данные успешно загружены - - - Boolean - - - - - - - ИмяТаблицыПриемника - - ru - Имя таблицы - - - String - - - - - - - - ИндексКартинки - - ru - Индекс картинки - - - Number - - 1 - - - - - - - - ИспользоватьПредварительныйПросмотр - - ru - Использовать предварительный просмотр - - - Boolean - - - - - - - Ключ - - ru - Ключ - - Ключ строки для связи с деревом значений на форме - - String - - - - - - - - КоличествоОбъектовВИсточнике - - ru - Объектов в базе-источнике, шт - - - Number - - 10 - - - - - - - - КоличествоОбъектовВПриемнике - - ru - Объектов в этой базе, шт - - - Number - - 10 - - - - - - - - КоличествоОбъектовНесопоставленных - - ru - Осталось сопоставить, шт - - - Number - - 10 - - - - - - - - КоличествоОбъектовСопоставленных - - ru - Объектов сопоставленных, шт - - - Number - - 10 - - - - - - - - ОдинКоМногим - - ru - Один ко многим - - - Boolean - - - - - - - ПоляПоиска - - ru - Поля поиска - - Поля поиска по умолчанию - - String - - - - - - - - ПоляТаблицы - - ru - Поля таблицы - - Поля таблицы, для которых определены правила конвертации свойств - - String - - - - - - - - ПроцентСопоставленияОбъектов - - ru - Сопоставление, % - - - Number - - 3 - true - - - - - - - - СинхронизироватьПоИдентификатору - - ru - Синхронизировать по идентификатору - - - Boolean - - - - - - - ТипИсточникаСтрокой - - ru - Тип источника строкой - - - String - - - - - - - - ТипОбъектаСтрокой - - ru - Тип объекта строкой - - - String - - - - - - - - ТипПриемникаСтрокой - - ru - Тип приемника строкой - - - String - - - - - - - - ЭтоУдалениеОбъекта - - ru - Это удаление объекта - - - Boolean - - - - - - - - Форма + + String + + + + + + + ВерсияФорматаОбмена ru - Форма + Версия формата обмена + + + String + + + + + + + ПоддерживаемыеОбъектыФормата + + ru + Поддерживаемые объекты формата + + + + + + + НоваяСинхронизацияДанных + + ru + Новая синхронизация данных + + PersonalComputer + MobileDevice + + + НастройкаСинхронизации + + ru + Настройка синхронизации + + PersonalComputer + MobileDevice + + + НастройкаПодключения + + ru + Настройка подключения + + PersonalComputer + MobileDevice + + + УдалениеНастройкиСинхронизации + + ru + Удаление настройки синхронизации + + PersonalComputer + MobileDevice + + + ВыгрузкаДанныхДляСопоставления + + ru + Выгрузка данных для сопоставления + + PersonalComputer + MobileDevice + + + ЗагрузкаНастроекXDTO + + ru + Загрузка настроек XDTO PersonalComputer MobileDevice diff --git a/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/Forms/ПрограммаВОблачномСервисе/Form.form b/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/Forms/ПрограммаВОблачномСервисе/Form.form index 5904dae5f..234bddca2 100644 --- a/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/Forms/ПрограммаВОблачномСервисе/Form.form +++ b/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/Forms/ПрограммаВОблачномСервисе/Form.form @@ -98,6 +98,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсииФайла/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсииФайла/Form.form index b804b51c5..19664d33b 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсииФайла/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсииФайла/Form.form @@ -426,10 +426,6 @@ BeforeDeleteRow СписокПередУдалением - - OnActivateRow - СписокПриАктивизацииСтроки - BeforeRowChange СписокПередНачаломИзменения @@ -1065,33 +1061,33 @@ ВЫБРАТЬ РАЗРЕШЕННЫЕ - ВерсииФайлов.Код КАК Код, - ВерсииФайлов.Размер КАК Размер, - ВерсииФайлов.Комментарий КАК Комментарий, - ВерсииФайлов.Автор КАК Автор, - ВерсииФайлов.ДатаСоздания КАК ДатаСоздания, - ВерсииФайлов.ПолноеНаименование КАК ПолноеНаименование, - ВерсииФайлов.РодительскаяВерсия КАК РодительскаяВерсия, - ВерсииФайлов.ИндексКартинки, + ВерсииФайловПереопределяемый.Код КАК Код, + ВерсииФайловПереопределяемый.Размер КАК Размер, + ВерсииФайловПереопределяемый.Комментарий КАК Комментарий, + ВерсииФайловПереопределяемый.Автор КАК Автор, + ВерсииФайловПереопределяемый.ДатаСоздания КАК ДатаСоздания, + ВерсииФайловПереопределяемый.ПолноеНаименование КАК ПолноеНаименование, + ВерсииФайловПереопределяемый.РодительскаяВерсия КАК РодительскаяВерсия, + ВерсииФайловПереопределяемый.ИндексКартинки КАК ИндексКартинки, ВЫБОР - КОГДА ВерсииФайлов.ПометкаУдаления - ТОГДА ВерсииФайлов.ИндексКартинки + 1 - ИНАЧЕ ВерсииФайлов.ИндексКартинки + КОГДА ВерсииФайловПереопределяемый.ПометкаУдаления + ТОГДА ВерсииФайловПереопределяемый.ИндексКартинки + 1 + ИНАЧЕ ВерсииФайловПереопределяемый.ИндексКартинки КОНЕЦ КАК ИндексКартинкиТекущий, - ВерсииФайлов.ПометкаУдаления КАК ПометкаУдаления, - ВерсииФайлов.Владелец КАК Владелец, - ВерсииФайлов.Ссылка КАК Ссылка, + ВерсииФайловПереопределяемый.ПометкаУдаления КАК ПометкаУдаления, + ВерсииФайловПереопределяемый.Владелец КАК Владелец, + ВерсииФайловПереопределяемый.Ссылка КАК Ссылка, ВЫБОР - КОГДА ВерсииФайлов.Владелец.ТекущаяВерсия = ВерсииФайлов.Ссылка + КОГДА ВерсииФайловПереопределяемый.Владелец.ТекущаяВерсия = ВерсииФайловПереопределяемый.Ссылка ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ КАК ЭтоТекущая, - ВерсииФайлов.Расширение КАК Расширение, - ВерсииФайлов.НомерВерсии КАК НомерВерсии + ВерсииФайловПереопределяемый.Расширение КАК Расширение, + ВерсииФайловПереопределяемый.НомерВерсии КАК НомерВерсии ИЗ - Справочник.ВерсииФайлов КАК ВерсииФайлов + Справочник.ВерсииФайлов КАК ВерсииФайловПереопределяемый ГДЕ - ВерсииФайлов.Владелец = &Владелец + ВерсииФайловПереопределяемый.Владелец = &Владелец Catalog.ВерсииФайлов true true diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсииФайла/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсииФайла/Module.bsl index bd85c3af2..872b2794f 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсииФайла/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсииФайла/Module.bsl @@ -142,51 +142,22 @@ Процедура Сравнить(Команда) ЧислоВыделенныхСтрок = Элементы.Список.ВыделенныеСтроки.Количество(); - - Если ЧислоВыделенныхСтрок = 2 ИЛИ ЧислоВыделенныхСтрок = 1 Тогда - Если ЧислоВыделенныхСтрок = 2 Тогда - Ссылка1 = Элементы.Список.ВыделенныеСтроки[0]; - Ссылка2 = Элементы.Список.ВыделенныеСтроки[1]; - ИначеЕсли ЧислоВыделенныхСтрок = 1 Тогда - Ссылка1 = Элементы.Список.ТекущиеДанные.Ссылка; - Ссылка2 = Элементы.Список.ТекущиеДанные.РодительскаяВерсия; - КонецЕсли; - - Расширение = НРег(Элементы.Список.ТекущиеДанные.Расширение); - - РаботаСФайламиСлужебныйКлиент.СравнитьФайлы(УникальныйИдентификатор, Ссылка1, Ссылка2, Расширение, ВладелецВерсии); - + Если ЧислоВыделенныхСтрок <> 2 И ЧислоВыделенныхСтрок <> 1 Тогда + ПоказатьПредупреждение(, НСтр("ru='Для просмотра отличий необходимо выбрать две версии файла.'")); + Возврат; КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура СписокПриАктивизацииСтроки(Элемент) - ЧислоВыделенныхСтрок = Элементы.Список.ВыделенныеСтроки.Количество(); - - КомандаСравненияДоступна = Ложь; - + Если ЧислоВыделенныхСтрок = 2 Тогда - КомандаСравненияДоступна = Истина; + Ссылка1 = Элементы.Список.ВыделенныеСтроки[0]; + Ссылка2 = Элементы.Список.ВыделенныеСтроки[1]; ИначеЕсли ЧислоВыделенныхСтрок = 1 Тогда - - Если Не Элементы.Список.ТекущиеДанные.РодительскаяВерсия.Пустая() Тогда - КомандаСравненияДоступна = Истина; - Иначе - КомандаСравненияДоступна = Ложь; - КонецЕсли; - - Иначе - КомандаСравненияДоступна = Ложь; - КонецЕсли; - - Если КомандаСравненияДоступна = Истина Тогда - Элементы.ФормаСравнить.Доступность = Истина; - Элементы.КонтекстноеМенюСписокСравнить.Доступность = Истина; - Иначе - Элементы.ФормаСравнить.Доступность = Ложь; - Элементы.КонтекстноеМенюСписокСравнить.Доступность = Ложь; + Ссылка1 = Элементы.Список.ТекущиеДанные.Ссылка; + Ссылка2 = Элементы.Список.ТекущиеДанные.РодительскаяВерсия; КонецЕсли; + + Расширение = НРег(Элементы.Список.ТекущиеДанные.Расширение); + РаботаСФайламиСлужебныйКлиент.СравнитьФайлы(УникальныйИдентификатор, Ссылка1, Ссылка2, Расширение, ВладелецВерсии); + КонецПроцедуры &НаКлиенте diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсияПрисоединенногоФайла/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсияПрисоединенногоФайла/Form.form index 65065a234..705e4e64a 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсияПрисоединенногоФайла/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсияПрисоединенногоФайла/Form.form @@ -169,6 +169,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -365,6 +366,7 @@ UsualGroup + HorizontalIfPossible Center Auto true @@ -582,6 +584,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -828,6 +831,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ГруппаФайлов/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ГруппаФайлов/Form.form index fef1527db..8b2909072 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ГруппаФайлов/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ГруппаФайлов/Form.form @@ -224,6 +224,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -338,6 +339,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ГруппаФайлов/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ГруппаФайлов/Module.bsl index be334096c..d9faab97e 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ГруппаФайлов/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ГруппаФайлов/Module.bsl @@ -202,6 +202,8 @@ &НаКлиенте Функция ОбработатьКомандуЗаписиФайла() + ОчиститьСообщения(); + Если ПустаяСтрока(ЭтотОбъект.Объект.Наименование) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Для продолжения укажите имя файла.'"), , "Наименование", "Объект"); diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Form.form index 915aadcc4..eef70a6a0 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Form.form @@ -445,6 +445,32 @@ UserCmds Auto + + ФормаЗакончитьРедактирование + 43 + true + true + + true + + + ФормаЗакончитьРедактированиеExtendedTooltip + 108 + Label + true + true + + Left + + + Form.Command.ЗакончитьРедактирование + Normal + Auto + true + true + UserCmds + Auto + ПодменюПечать 334 @@ -525,32 +551,6 @@ Normal - - ФормаЗакончитьРедактирование - 43 - true - true - - true - - - ФормаЗакончитьРедактированиеExtendedTooltip - 108 - Label - true - true - - Left - - - Form.Command.ЗакончитьРедактирование - Normal - Picture - true - true - UserCmds - Auto - Отправить 263 @@ -934,7 +934,7 @@ Left - Form.Item.Список.StandardCommand.SetDeletionMark + Form.Command.УстановитьПометкуУдаления Normal Auto true @@ -1834,6 +1834,7 @@ UsualGroup + HorizontalIfPossible Center Auto true @@ -3069,7 +3070,7 @@ Left - Form.Item.Список.StandardCommand.SetDeletionMark + Form.Command.УстановитьПометкуУдаления Normal Auto true @@ -3417,6 +3418,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -4031,7 +4033,7 @@ ЗакончитьРедактирование <key>ru</key> - <value>Закончить редактирование</value> + <value>Закончить</value> 10 @@ -4049,7 +4051,7 @@ ЗакончитьРедактирование - TextPicture + Text DontUse Auto @@ -4625,6 +4627,31 @@ DontUse Auto + + УстановитьПометкуУдаления + + <key>ru</key> + <value>Пометить на удаление / Снять пометку</value> + + 31 + + ru + Установить пометку удаления + + + true + + + StdPicture.MarkToDelete + + + + УстановитьПометкуУдаления + + + Auto + Auto + ВладелецФайла diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Module.bsl index 492f5a8a3..1833b720a 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Module.bsl @@ -1,3 +1,4 @@ + #Область ОбработчикиСобытийФормы &НаСервере @@ -85,7 +86,7 @@ МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); ЕстьПравоИспользоватьШаблоны = МодульУправлениеДоступом .ЕстьПраво("Чтение", Справочники.ПапкиФайлов.Шаблоны); Иначе - ЕстьПравоИспользоватьШаблоны = ПравоДоступа("Чтение", Метаданные.Справочники.Файлы) И ПравоДоступа("Чтение", Метаданные.Справочники.ПапкиФайлов); + ЕстьПравоИспользоватьШаблоны = ПравоДоступа("Чтение", Метаданные.Справочники.Файлы) И ПравоДоступа("Чтение", Метаданные.Справочники.ПапкиФайлов) КонецЕсли; Если НЕ ЕстьПравоИспользоватьШаблоны Или НастройкиФайлов.НеСоздаватьФайлыПоШаблону.Найти(Метаданные.НайтиПоТипу(ТипЗнч(ВладелецФайла))) <> Неопределено Тогда @@ -287,7 +288,7 @@ &НаКлиенте Процедура СписокПриАктивизацииСтроки(Элемент) - ПодключитьОбработчикОжидания("ОбновитьДоступностьФайловыхКоманд", 0.1, Истина); + ОбновитьДоступностьФайловыхКоманд(); КонецПроцедуры @@ -312,16 +313,9 @@ КонецЕсли; Иначе - ТекущиеДанные = Элементы.Список.ТекущиеДанные; - ГруппаФайлов = Неопределено; - Если ТекущиеДанные <> Неопределено И ТекущиеДанные.ЭтоГруппа И ТекущиеДанные.ВладелецФайла = Параметры.ВладелецФайла Тогда - ГруппаФайлов = ТекущиеДанные.Ссылка; - КонецЕсли; - Если ЭтоВладелецЭлементовСправочникаФайлы Тогда - РаботаСФайламиСлужебныйКлиент.ДобавитьФайлИзФайловойСистемы(Параметры.ВладелецФайла, ЭтотОбъект); - Иначе - РаботаСФайламиКлиент.ДобавитьФайлы(Параметры.ВладелецФайла, УникальныйИдентификатор, , ГруппаФайлов); - КонецЕсли; + + ДобавитьФайл(); + КонецЕсли; КонецПроцедуры @@ -414,7 +408,7 @@ &НаКлиенте Процедура Добавить(Команда) - Элементы.Список.ДобавитьСтроку(); + ДобавитьФайл(); КонецПроцедуры @@ -532,6 +526,20 @@ КонецПроцедуры +&НаКлиенте +Процедура УстановитьПометкуУдаления(Команда) + ТекущиеДанные = Элементы.Список.ТекущиеДанные; + Если ТекущиеДанные <> Неопределено Тогда + ШаблонВопроса = ?(ТекущиеДанные.ПометкаУдаления, + НСтр("ru='Снять с ""%1"" пометку на удаление?'"), + НСтр("ru='Пометить ""%1"" на удаление?'")); + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонВопроса, ТекущиеДанные.Наименование); + ДополнительныеПараметры = Новый Структура("ФайлСсылка", ТекущиеДанные.Ссылка); + Оповещение = Новый ОписаниеОповещения("ПослеВопросОПометкиНаУдаление", ЭтотОбъект, ДополнительныеПараметры); + ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет); + КонецЕсли; +КонецПроцедуры + &НаКлиенте Процедура ОткрытьСвойстваФайла(Команда) @@ -1106,6 +1114,22 @@ КонецПроцедуры +&НаКлиенте +Процедура ДобавитьФайл() + + ТекущиеДанные = Элементы.Список.ТекущиеДанные; + ГруппаФайлов = Неопределено; + Если ТекущиеДанные <> Неопределено И ТекущиеДанные.ЭтоГруппа И ТекущиеДанные.ВладелецФайла = Параметры.ВладелецФайла Тогда + ГруппаФайлов = ТекущиеДанные.Ссылка; + КонецЕсли; + Если ЭтоВладелецЭлементовСправочникаФайлы Тогда + РаботаСФайламиСлужебныйКлиент.ДобавитьФайлИзФайловойСистемы(Параметры.ВладелецФайла, ЭтотОбъект); + Иначе + РаботаСФайламиКлиент.ДобавитьФайлы(Параметры.ВладелецФайла, УникальныйИдентификатор, , ГруппаФайлов); + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ОткрытьФайл() @@ -1347,10 +1371,20 @@ КонецЕсли; КонецЦикла; - ОбновитьПредпросмотр(); + ПодключитьОбработчикОжидания("ОбновитьПредпросмотр", 0.1, Истина); КонецПроцедуры +&НаКлиенте +Процедура ПослеВопросОПометкиНаУдаление(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = КодВозвратаДиалога.Да Тогда + УстановитьСнятьПометкуУдаления(ДополнительныеПараметры.ФайлСсылка); + Элементы.Список.Обновить(); + КонецЕсли; + +КонецПроцедуры + &НаСервере Процедура НастроитьДинамическийСписок(ИмяСправочникаХранилищаФайлов) @@ -1443,6 +1477,7 @@ КонецПроцедуры + &НаКлиентеНаСервереБезКонтекста Функция ПолучитьИменаКомандФормы() @@ -1670,6 +1705,11 @@ РаботаСФайламиПереопределяемый.ПриОтправкеФайловПочтой(ПараметрыОтправки, ФайлыДляОтправки, ВладелецФайлов, УникальныйИдентификатор); КонецПроцедуры +&НаСервереБезКонтекста +Процедура УстановитьСнятьПометкуУдаления(ФайлСсылка) + ФайлСсылка.ПолучитьОбъект().УстановитьПометкуУдаления(Не ФайлСсылка.ПометкаУдаления); +КонецПроцедуры + &НаКлиенте Процедура УстановитьВидимостьПредпросмотра(ИспользоватьПредпросмотр) diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Form.form index 2162a7b1c..1aaa242e0 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Form.form @@ -173,6 +173,7 @@ UsualGroup + HorizontalIfPossible Center Auto true @@ -501,6 +502,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -726,6 +728,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -836,6 +839,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1083,6 +1087,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1205,6 +1210,7 @@ UsualGroup + HorizontalIfPossible Center Auto true @@ -1299,6 +1305,7 @@ Page + HorizontalIfPossible auto false @@ -2186,6 +2193,7 @@ Page + HorizontalIfPossible auto false diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Module.bsl index d2ebbe831..07b090cdb 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Module.bsl @@ -768,8 +768,9 @@ Процедура ОтображатьВкладкиДополнительныхДанных() Если Элементы.ГруппаДополнительныеРеквизиты.ПодчиненныеЭлементы.Количество() > 0 Тогда - Если Элементы.Найти("Свойства_ПустаяДекорация") <> Неопределено Тогда - ВидимостьДополнительныхРеквизитов = Элементы["Свойства_ПустаяДекорация"].Видимость; + ПустаяДекорация = Элементы.Найти("Свойства_ПустаяДекорация"); + Если ПустаяДекорация <> Неопределено Тогда + ВидимостьДополнительныхРеквизитов = ПустаяДекорация.Видимость; Иначе ВидимостьДополнительныхРеквизитов = Истина; КонецЕсли; diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактированиеТекстовогоФайла/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактированиеТекстовогоФайла/Form.form index c3e214f1c..595996cc9 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактированиеТекстовогоФайла/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактированиеТекстовогоФайла/Form.form @@ -65,6 +65,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактированиеТекстовогоФайла/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактированиеТекстовогоФайла/Module.bsl index e1590bd13..f8c5de0d7 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактированиеТекстовогоФайла/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактированиеТекстовогоФайла/Module.bsl @@ -20,14 +20,14 @@ РежимРедактирования = Ложь; КонецЕсли; - Элементы.Текст.ТолькоПросмотр = Не РежимРедактирования; - Элементы.ПоказатьОтличия.Видимость = ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент(); - Элементы.ПоказатьОтличия.Доступность = РежимРедактирования; - Элементы.Редактировать.Доступность = Не РежимРедактирования; + Элементы.Текст.ТолькоПросмотр = Не РежимРедактирования; + Элементы.ПоказатьОтличия.Видимость = ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент(); + Элементы.ПоказатьОтличия.Доступность = РежимРедактирования; + Элементы.Редактировать.Доступность = Не РежимРедактирования; Элементы.ЗакончитьРедактирование.Доступность = РежимРедактирования; - Элементы.ЗаписатьИЗакрыть.Доступность = РежимРедактирования; - Элементы.Записать.Доступность = РежимРедактирования; - Элементы.ФормаВыбратьКодировку.Доступность = РежимРедактирования; + Элементы.ЗаписатьИЗакрыть.Доступность = РежимРедактирования; + Элементы.Записать.Доступность = РежимРедактирования; + Элементы.ФормаВыбратьКодировку.Доступность = РежимРедактирования; Если ДанныеФайла.Версия <> ДанныеФайла.ТекущаяВерсия Тогда Элементы.Редактировать.Доступность = Ложь; @@ -41,10 +41,7 @@ КонецЕсли; Заголовок = ЗаголовокСтрока; - Если ДанныеФайла.Свойство("Кодировка") Тогда - КодировкаТекстаФайла = ДанныеФайла.Кодировка; - КонецЕсли; - + КодировкаТекстаФайла = ДанныеФайла.Кодировка; Если ЗначениеЗаполнено(КодировкаТекстаФайла) Тогда СписокКодировок = РаботаСФайламиСлужебный.Кодировки(); ЭлементСписка = СписокКодировок.НайтиПоЗначению(КодировкаТекстаФайла); @@ -54,7 +51,7 @@ КодировкаПредставление = ЭлементСписка.Представление; КонецЕсли; Иначе - КодировкаПредставление = НСтр("ru = 'По умолчанию'"); + КодировкаПредставление = НСтр("ru='По умолчанию'"); КонецЕсли; КонецПроцедуры @@ -224,6 +221,9 @@ #Если ВебКлиент Тогда ПоказатьПредупреждение(, НСтр("ru = 'Сравнение версий файлов в веб-клиенте недоступно.'")); Возврат; +#ИначеЕсли МобильныйКлиент Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Сравнение версий файлов в мобильном клиенте недоступно.'")); + Возврат; #Иначе ПараметрыВыполнения = Новый Структура; ПараметрыВыполнения.Вставить("ТекущийШаг", 1); @@ -330,16 +330,24 @@ КонецПроцедуры &НаКлиенте -Функция КодировкаТекстаДляЧтения() +Процедура ЗаписатьТекстВФайл(ИмяФайла) - КодировкаТекстаДляЧтения = ?(ЗначениеЗаполнено(КодировкаТекстаФайла), КодировкаТекстаФайла, Неопределено); - Если КодировкаТекстаДляЧтения = "utf-8_WithoutBOM" Тогда - КодировкаТекстаДляЧтения = "utf-8"; + Если КодировкаТекстаФайла = "utf-8_WithoutBOM" Тогда + + ДвоичныеДанные = ПолучитьДвоичныеДанныеИзСтроки(Текст.ПолучитьТекст(), "utf-8", Ложь); + ДвоичныеДанные.Записать(ИмяФайла); + + Иначе + + Текст.Записать(ИмяФайла, + ?(ЗначениеЗаполнено(КодировкаТекстаФайла), КодировкаТекстаФайла, Неопределено)); + КонецЕсли; - Возврат КодировкаТекстаДляЧтения; + РаботаСФайламиСлужебныйВызовСервера.ЗаписатьКодировкуВерсииФайлаИИзвлеченныйТекст( + ДанныеФайла.Версия, КодировкаТекстаФайла, Текст.ПолучитьТекст()); -КонецФункции +КонецПроцедуры &НаКлиенте Процедура УстановитьДоступностьКоманд() @@ -370,24 +378,16 @@ КонецПроцедуры &НаКлиенте -Процедура ЗаписатьТекстВФайл(ИмяФайла) +Функция КодировкаТекстаДляЧтения() - Если КодировкаТекстаФайла = "utf-8_WithoutBOM" Тогда - - ДвоичныеДанные = ПолучитьДвоичныеДанныеИзСтроки(Текст.ПолучитьТекст(), "utf-8", Ложь); - ДвоичныеДанные.Записать(ИмяФайла); - - Иначе - - Текст.Записать(ИмяФайла, - ?(ЗначениеЗаполнено(КодировкаТекстаФайла), КодировкаТекстаФайла, Неопределено)); - + КодировкаТекстаДляЧтения = ?(ЗначениеЗаполнено(КодировкаТекстаФайла), КодировкаТекстаФайла, Неопределено); + Если КодировкаТекстаДляЧтения = "utf-8_WithoutBOM" Тогда + КодировкаТекстаДляЧтения = "utf-8"; КонецЕсли; - РаботаСФайламиСлужебныйВызовСервера.ЗаписатьКодировкуВерсииФайлаИИзвлеченныйТекст( - ДанныеФайла.Версия, КодировкаТекстаФайла, Текст.ПолучитьТекст()); + Возврат КодировкаТекстаДляЧтения; -КонецПроцедуры +КонецФункции &НаКлиенте Процедура ВыполнитьСравнениеФайлов(Результат, ПараметрыВыполнения) Экспорт diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РежимСозданияФайлаДляСохранитьКак/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РежимСозданияФайлаДляСохранитьКак/Form.form index c41dccf66..13756e1e0 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РежимСозданияФайлаДляСохранитьКак/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РежимСозданияФайлаДляСохранитьКак/Form.form @@ -2,7 +2,7 @@ <key>ru</key> - <value>Режим сохранения файла</value> + <value>Сохранение файла</value> ГруппаСообщение @@ -104,6 +104,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -120,17 +121,13 @@ Файл 8 - - <key>ru</key> - <value>Файл в рабочем каталоге</value> - true true true - Файл + КопияФайла Top @@ -155,6 +152,7 @@ Left true + 60 true true true @@ -213,6 +211,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -253,10 +252,6 @@ РежимСозданияФайла 5 - - <key>ru</key> - <value>Выберите режим сохранения файла</value> - true true @@ -291,7 +286,7 @@ ru - На основе файла в рабочем каталоге (рекомендуется) + Копию файла на комьютере в рабочем каталоге (рекомендуется) 1 @@ -300,7 +295,7 @@ ru - На основе файла в хранилище файлов + Получить заново и сохранить копию файла из программы 0 @@ -405,7 +400,7 @@ РежимСозданияФайла <key>ru</key> - <value>Режим создания файла</value> + <value>Выберите, какую копию файла сохранить</value> 3 @@ -422,10 +417,10 @@ - Файл + КопияФайла <key>ru</key> - <value>Файл</value> + <value>Копия файла на компьютере</value> 4 diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РежимСозданияФайлаДляСохранитьКак/Help/ru.html b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РежимСозданияФайлаДляСохранитьКак/Help/ru.html index aa004126e..eec902d0f 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РежимСозданияФайлаДляСохранитьКак/Help/ru.html +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РежимСозданияФайлаДляСохранитьКак/Help/ru.html @@ -1,6 +1,6 @@ -

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

    -

    Программа указывает путь к файлу в рабочем каталоге.

    -

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

    -
    • На основе файла в рабочем каталоге (рекомендуется). -
    • На основе файла в хранилище файлов.

    Нажмите Сохранить файл.

    \ No newline at end of file +

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

    +

    Программа указывает путь к файлу в рабочем каталоге на компьютере.

    +

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

    +
    • На основе копии файла в рабочем каталоге на компьютере (рекомендуется). +
    • На основе файла в программе.

    Нажмите Сохранить файл.

    \ No newline at end of file diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РежимСозданияФайлаДляСохранитьКак/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РежимСозданияФайлаДляСохранитьКак/Module.bsl index e5e247e28..9970ab327 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РежимСозданияФайлаДляСохранитьКак/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РежимСозданияФайлаДляСохранитьКак/Module.bsl @@ -8,7 +8,7 @@ Возврат; КонецЕсли; - Файл = Параметры.Файл; + КопияФайла = Параметры.Файл; Сообщение = Параметры.Сообщение; РежимСозданияФайла = 1; @@ -29,7 +29,7 @@ &НаКлиенте Процедура ОткрытьКаталог(Команда) - РаботаСФайламиСлужебныйКлиент.ОткрытьПроводникСФайлом(Файл); + РаботаСФайламиСлужебныйКлиент.ОткрытьПроводникСФайлом(КопияФайла); КонецПроцедуры diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФайлыВОсновномРабочемКаталоге/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФайлыВОсновномРабочемКаталоге/Module.bsl index 30b9c60a4..c507e46fc 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФайлыВОсновномРабочемКаталоге/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФайлыВОсновномРабочемКаталоге/Module.bsl @@ -239,7 +239,7 @@ &НаКлиенте Процедура УдалитьИзЛокальногоКэшаФайловВыполнить() - ТекстВопроса = НСтр("ru = 'Удалить выбранные файлы из основного рабочего каталога?'"); + ТекстВопроса = НСтр("ru = 'Удалить выбранные файлы из рабочего каталога?'"); Обработчик = Новый ОписаниеОповещения("УдалитьИзЛокальногоКэшаПослеОтветаНаВопрос", ЭтотОбъект); ПоказатьВопрос(Обработчик, ТекстВопроса, РежимДиалогаВопрос.ДаНет); @@ -310,7 +310,7 @@ Если ПараметрыВыполнения.ЕстьЗанятыеФайлы Тогда ПоказатьПредупреждение(, - НСтр("ru = 'Нельзя удалять из основного рабочего каталога файлы, + НСтр("ru = 'Нельзя удалять из рабочего каталога файлы, |занятые для редактирования.'")); КонецЕсли; diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВыбораРежимаОткрытия/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВыбораРежимаОткрытия/Form.form index c05313c31..7359cf725 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВыбораРежимаОткрытия/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВыбораРежимаОткрытия/Form.form @@ -187,6 +187,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЗавершениеРедактирования/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЗавершениеРедактирования/Form.form index f1b82a5e7..a043ca2a7 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЗавершениеРедактирования/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЗавершениеРедактирования/Form.form @@ -383,6 +383,45 @@ Left
    + + УдалитьФайлыИзОсновногоКаталога + 65 + true + true + + true + + + УдалитьФайлыИзОсновногоКаталога + + Right + Button + + УдалитьФайлыИзОсновногоКаталогаРасширеннаяПодсказка + 67 + + <key>ru</key> + <value>Если установлен флажок, то после помещения файла в программу его копия удаляется на компьютере. Используйте эту настройку для экономии места на жестком диске или в целях повышения безопасности.</value> + + Label + true + true + + Left + + + + УдалитьФайлыИзОсновногоКаталогаКонтекстноеМеню + 66 + true + + CheckBoxField + Enter + true + Left + true + + ОсновнаяКоманднаяПанель 1 @@ -715,6 +754,23 @@ true + + УдалитьФайлыИзОсновногоКаталога + + <key>ru</key> + <value>Удалить копии файлов на компьютере</value> + + 15 + + Boolean + + + true + + + true + + ЗакончитьРедактирование diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЗавершениеРедактирования/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЗавершениеРедактирования/Module.bsl index 3b70e6b6d..631559104 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЗавершениеРедактирования/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЗавершениеРедактирования/Module.bsl @@ -18,6 +18,10 @@ Элементы.ХранитьВерсии.Видимость = ВозможностьСоздаватьВерсииФайлов; + ПерсональныеНастройкиРаботыСФайлами = РаботаСФайламиСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами(); + Элементы.УдалитьФайлыИзОсновногоКаталога.Видимость = ПерсональныеНастройкиРаботыСФайлами.ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов; + УдалитьФайлыИзОсновногоКаталога = ПерсональныеНастройкиРаботыСФайлами.УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования; + КонецПроцедуры &НаКлиенте @@ -59,6 +63,8 @@ ПараметрыОбновленияФайлов.Вставить("Редактирует", Редактирует); ПараметрыОбновленияФайлов.Вставить("КомментарийКВерсии", Комментарий); ПараметрыОбновленияФайлов.Вставить("ПоказыватьОповещение", Ложь); + ПараметрыОбновленияФайлов.Вставить("УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования2", УдалитьФайлыИзОсновногоКаталога); + РаботаСФайламиСлужебныйКлиент.ЗакончитьРедактированиеПоСсылкамСОповещением(ПараметрыОбновленияФайлов); Закрыть(); КонецПроцедуры diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Form.form index 609a08aaf..198b84670 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Form.form @@ -339,6 +339,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаФайлов/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаФайлов/Form.form index 6c8e8f568..83e64c44f 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаФайлов/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаФайлов/Form.form @@ -113,6 +113,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -661,6 +662,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Form.form b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Form.form index 2820a3b07..6624ac4b8 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Form.form +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Form.form @@ -4,6 +4,642 @@ <key>ru</key> <value>Адрес</value> + + ПанельКоманд + 82 + + ГруппаПроверитьЗаполнения + 86 + + ГруппаКомандаДобавить + 167 + + ГруппаДобавлениеСтроения + 410 + true + true + + true + + + <key>ru</key> + <value>Здание</value> + + + ГруппаДобавлениеСтроенияРасширеннаяПодсказка + 411 + Label + true + true + + Left + + + + + + ГруппаДобавлениеПомещения + 408 + true + true + + true + + + <key>ru</key> + <value>Помещение</value> + + + ГруппаДобавлениеПомещенияРасширеннаяПодсказка + 409 + Label + true + true + + Left + + + + + + ГруппаГруппаДобавлениеКомментария + 406 + + ДобавитьКомментарий + 386 + true + true + + true + + + ДобавитьКомментарийРасширеннаяПодсказка + 387 + Label + true + true + + Left + + + Form.Command.ДобавитьКомментарий + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа добавление комментария</value> + + + ГруппаГруппаДобавлениеКомментарияРасширеннаяПодсказка + 407 + Label + true + true + + Left + + + + + true + true + + true + + + <key>ru</key> + <value>Добавить</value> + + + ГруппаКомандаДобавитьРасширеннаяПодсказка + 168 + Label + true + true + + Left + + + Popup + + + StdPicture.CreateListItem + + Auto + Normal + + + + ПроверитьЗаполнениеАдреса + 87 + true + true + + true + + + ПроверитьЗаполнениеАдресаExtendedTooltip + 138 + Label + true + true + + Left + + + Form.Command.ПроверитьЗаполнениеАдреса + Normal + Auto + true + true + UserCmds + Auto + + + АдресныйКлассификаторУстарел + 353 + true + + true + + + АдресныйКлассификаторУстарелРасширеннаяПодсказка + 354 + Label + true + true + + Left + + + CommandBarHyperlink + Form.Command.АдресныйКлассификаторУстарел + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Проверить заполнения</value> + + true + + ГруппаПроверитьЗаполненияРасширеннаяПодсказка + 137 + Label + true + true + + Left + + + CommandBar + + Left + + + + ПанельКомандФормы + 83 + + ФормаВводАдресаПоказать + 101 + + ИсторияИзменений + 326 + true + true + + true + + + ИсторияИзмененийРасширеннаяПодсказка + 327 + Label + true + true + + Left + + + Form.Command.ИсторияИзменений + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + АдресНаКартеЯндексКартах + 328 + true + true + + true + + + АдресНаКартеЯндексКартахРасширеннаяПодсказка + 329 + Label + true + true + + Left + + + Form.Command.АдресНаЯндексКарты + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ПоказатьНаКартеGoogle + 330 + true + true + + true + + + ПоказатьНаКартеGoogleРасширеннаяПодсказка + 331 + Label + true + true + + Left + + + Form.Command.АдресНаGoogleMaps + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Форма ввод адреса показать</value> + + + ФормаВводАдресаПоказатьРасширеннаяПодсказка + 144 + Label + true + true + + Left + + + + + + ФормаВсеДействияИзмененияАдреса + 152 + + МуниципальноеДеление + 454 + true + true + + true + + + МуниципальноеДелениеРасширеннаяПодсказка + 455 + Label + true + true + + Left + + + Form.Command.МуниципальноеДеление + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + АдминистративноТерриториальноеДеление + 456 + true + true + + true + + + АдминистративноТерриториальноеДелениеРасширеннаяПодсказка + 457 + Label + true + true + + Left + + + Form.Command.АдминистративноТерриториальноеДеление + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + АдресВСвободнойФорме + 102 + true + true + + true + + + АдресВСвободнойФормеРасширеннаяПодсказка + 145 + Label + true + true + + Left + + + Form.Command.АдресВСвободнойФорме + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ГруппаДействияСАдресом + 458 + + ФормаОчиститьАдрес + 90 + true + true + + true + + + ФормаОчиститьАдресExtendedTooltip + 143 + Label + true + true + + Left + + + Form.Command.ОчиститьАдрес + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ЗаполнитьПоПочтовомуИндексу + 150 + true + true + + true + + + ЗаполнитьПоПочтовомуИндексуРасширеннаяПодсказка + 151 + Label + true + true + + Left + + + Form.Command.ЗаполнитьПоПочтовомуИндексу + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Действия с адресом</value> + + + ГруппаДействияСАдресомРасширеннаяПодсказка + 459 + Label + true + true + + Left + + + + + true + true + + true + + + <key>ru</key> + <value>Форма все действия изменения адреса</value> + + + ФормаВсеДействияИзмененияАдресаРасширеннаяПодсказка + 153 + Label + true + true + + Left + + + + + + ЗагрузитьКлассификатор + 172 + true + true + + true + + + ЗагрузитьКлассификаторРасширеннаяПодсказка + 173 + Label + true + true + + Left + + + Form.Command.ЗагрузитьКлассификатор + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ИзменитьФорму + 98 + true + true + + true + + + ИзменитьФормуРасширеннаяПодсказка + 147 + Label + true + true + + Left + + + Form.StandardCommand.CustomizeForm + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + Справка + 99 + true + true + + true + + + СправкаExtendedTooltip + 148 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Панель команд формы</value> + + + ПанельКомандФормыExtendedTooltip + 139 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Панель команд</value> + + + ПанельКомандExtendedTooltip + 136 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + ГруппаИсторическийАдрес 358 @@ -165,6 +801,7 @@ ru Дата действия адреса + 2 ГруппаИсторическийАдресРасширеннаяПодсказка 359 @@ -185,375 +822,271 @@
    - СтранаАдреса - 35 + ОсновныеСтраницы + 482 - ГруппаСтраны - 9 - - Страна - 10 - true - true - - true - - - Страна - - - ru - Страна адреса - - - OnChange - СтранаПриИзменении - - - СтранаExtendedTooltip - 107 - Label - true - true - - Left - - - - СтранаКонтекстноеМеню - 11 - true - - InputField - Left - Enter - true - Left - true - - - AutoComplete - СтранаАвтоПодбор - - - Clearing - СтранаОчистка - - - TextEditEnd - СтранаОкончаниеВводаТекста - - - ChoiceProcessing - СтранаОбработкаВыбора - - 15 - true - true - true - false - true - ShowInInputField - false - false - false - false - true - true - - ТолькоДанныеКлассификатора - - - true - - - - - РазрешитьДанныеКлассификатора - - - true - - - - - Style.ФонУправляющегоПоля - - Normal - DontUse - - - - КодСтраны - 103 - true - false - - true - - - КодСтраны - - None - - КодСтраныExtendedTooltip - 108 - Label - true - true - - Left - - - - КодСтраныКонтекстноеМеню - 104 - true - - LabelField - Enter - true - Left - true - - 3 - true - true - false - - System.DefaultGUIFont - true - false - false - false - - - - true - true - - true - - - <key>ru</key> - <value>Страна</value> - - - ГруппаСтраныExtendedTooltip - 106 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ГруппаИндекса - 36 - - Индекс - 12 - true - true - - true - - - Индекс - - - ru - Почтовый индекс российского адреса - - - ИндексExtendedTooltip - 110 - Label - true - true - - Left - - - - ИндексКонтекстноеМеню - 13 - true - - InputField - Enter - true - Left - true - - - EditTextChange - ИндексИзменениеТекстаРедактирования - - - TextEditEnd - ИндексОкончаниеВводаТекста - - 6 - true - true - false - true - false - 999999 - - ru - ЧЦ=6; ЧРГ=' '; ЧН=; ЧГ=0 - - true - true - Normal - - - - ОКТМО - 279 - true - - true - - - ОКТМО - - - ОКТМОРасширеннаяПодсказка - 281 - Label - true - true - - Left - - - - ОКТМОКонтекстноеМеню - 280 - true - - InputField - Enter - true - Left - true - - 11 - true - true - false - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Индекс</value> - - - ГруппаИндексаExtendedTooltip - 109 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страна адреса</value> - - - СтранаАдресаExtendedTooltip - 105 - Label - true - true - - Left - - - UsualGroup - - Auto - NormalSeparation - true - true - Auto - Auto - - - - АдресПредставлениеКомментарий - 225 - - АдресСтраницаПредставление - 227 + СтраницаАдрес + 484 - ТипАдреса - 1 + АдресПредставлениеКомментарий + 225 НациональныйАдрес 2 - - НаселенныйПункт - 16 + + ГруппаОсновныеПоляАдреса + 516 + + Страна + 10 + true + true + + true + + + Страна + + + ru + Страна адреса + + + OnChange + СтранаПриИзменении + + + СтранаExtendedTooltip + 107 + Label + true + true + + Left + + + + СтранаКонтекстноеМеню + 11 + true + + InputField + Left + Enter + true + Left + true + + + AutoComplete + СтранаАвтоПодбор + + + Clearing + СтранаОчистка + + + TextEditEnd + СтранаОкончаниеВводаТекста + + + ChoiceProcessing + СтранаОбработкаВыбора + + 60 + true + true + false + true + ShowInInputField + false + false + false + false + true + true + + ТолькоДанныеКлассификатора + + + true + + + + + РазрешитьДанныеКлассификатора + + + true + + + + Normal + + ru + Введите первые буквы названия страны + + DontUse + + + + НаселенныйПункт + 16 + true + true + + true + + + НаселенныйПункт + + true + + ru + Город, населенный пункт адреса + + + OnChange + НаселенныйПунктПриИзменении + + + НаселенныйПунктExtendedTooltip + 113 + Label + true + true + + Left + + + + НаселенныйПунктКонтекстноеМеню + 17 + true + + InputField + Enter + true + Left + true + + + AutoComplete + НаселенныйПунктАвтоПодбор + + + StartChoice + НаселенныйПунктНачалоВыбора + + + Clearing + НаселенныйПунктОчистка + + + ChoiceProcessing + НаселенныйПунктОбработкаВыбора + + 60 + true + true + true + true + true + true + Normal + + ru + Введите первые буквы названия населенного пункта + + + + + Улица + 18 + true + true + + true + + + Улица + + + ru + Улица адреса + + + OnChange + УлицаПриИзменении + + + УлицаExtendedTooltip + 114 + Label + true + true + + Left + + + + УлицаКонтекстноеМеню + 19 + true + + InputField + Enter + true + Left + true + + + AutoComplete + УлицаАвтоПодбор + + + StartChoice + УлицаНачалоВыбора + + + Clearing + УлицаОчистка + + + ChoiceProcessing + УлицаОбработкаВыбора + + 60 + true + true + true + true + true + true + OnValueChange + Normal + + ru + Введите первые буквы названия улицы + + + true true true - - НаселенныйПункт - - Left + + <key>ru</key> + <value>Основные поля адреса</value> + ru - Город, населенный пункт адреса + \ - - OnChange - НаселенныйПунктПриИзменении - - НаселенныйПунктExtendedTooltip - 113 + ГруппаОсновныеПоляАдресаРасширеннаяПодсказка + 517 Label true true @@ -561,133 +1094,25 @@ Left
    - - НаселенныйПунктКонтекстноеМеню - 17 - true - - InputField - Enter - true - Left - true - - - AutoComplete - НаселенныйПунктАвтоПодбор - - - StartChoice - НаселенныйПунктНачалоВыбора - - - Clearing - НаселенныйПунктОчистка - - - TextEditEnd - НаселенныйПунктОкончаниеВводаТекста - - - ChoiceProcessing - НаселенныйПунктОбработкаВыбора - - true - true - true - true - true - true - true - OnValueChange - Normal - - ru - Введите первые буквы названия населенного пункта - - -
    - - Улица - 18 - true - true - - true - - - Улица - - Left - - ru - Улица адреса - - - УлицаExtendedTooltip - 114 - Label - true - true - - Left - - - - УлицаКонтекстноеМеню - 19 - true - - InputField - Enter - true - Left - true - - - AutoComplete - УлицаАвтоПодбор - - - StartChoice - УлицаНачалоВыбора - - - Clearing - УлицаОчистка - - - TextEditEnd - УлицаОкончаниеВводаТекста - - - ChoiceProcessing - УлицаОбработкаВыбора - - true - true - true - true - true - true - true - OnValueChange - Normal - - ru - Введите первые буквы названия улицы - + UsualGroup + + Vertical + Auto + true + true + Auto + Auto - ГруппаОбщаяДомаИСтроения - 251 + ГруппаСтроенияИИнформация + 436 - ГруппаДомаИСтроения - 253 + ГруппаДомаСтроенияПомещения + 526 ГруппаДом - 59 + 518 ТипДома 23 @@ -729,8 +1154,7 @@ Left true - 12 - true + 11 true true false @@ -794,7 +1218,6 @@ ChoiceProcessing ДомОбработкаВыбора
    - 7 true true true @@ -817,8 +1240,8 @@ Дом - ГруппаДомExtendedTooltip - 115 + ГруппаДомРасширеннаяПодсказка + 519 Label true true @@ -828,149 +1251,39 @@ UsualGroup + AlwaysHorizontal Auto true - true Auto Auto - ГруппаСтроения - 60 - - ГруппаСтроениеНачальное - 67 - - ТипСтроения - 27 - true - true - - true - - - ТипСтроения - - None - - ru - Дополнительный тип здания: корпус, строение и т. п. - - - OnChange - ТипСтроенияПриИзменении - - - ТипСтроенияExtendedTooltip - 120 - Label - true - true - - Left - - - - ТипСтроенияКонтекстноеМеню - 28 - true - - InputField - Enter - true - Left - true - - 12 - true - true - true - ShowInDropList - true - true - true - true - Normal - - - - Строение - 29 - true - true - - true - - - Строение - - None - - ru - Номер здания - - - OnChange - СтроениеПриИзменении - - - СтроениеExtendedTooltip - 121 - Label - true - true - - Left - - - - СтроениеКонтекстноеМеню - 30 - true - - InputField - Enter - true - Left - true - - - AutoComplete - СтроениеАвтоПодбор - - - StartChoice - СтроениеНачалоВыбора - - - ChoiceProcessing - СтроениеОбработкаВыбора - - 7 - true - true - true - true - true - true - true - true - Normal - - + ГруппаСтроенияОсновная + 520 + + ТипСтроения + 27 true true true - + <dataPath xsi:type="form:DataPath"> + <segments>ТипСтроения</segments> + </dataPath> + <titleLocation>None</titleLocation> + <toolTip> <key>ru</key> - <value>Строение начальное</value> - + Дополнительный тип здания: корпус, строение и т. п. + + + OnChange + ТипСтроенияПриИзменении + - ГруппаСтроениеНачальноеExtendedTooltip - 119 + ТипСтроенияExtendedTooltip + 120 Label true true @@ -978,30 +1291,56 @@ Left
    - UsualGroup - - Auto - true - true - Auto - Auto + + ТипСтроенияКонтекстноеМеню + 28 + true + + InputField + Enter + true + Left + true + + + ChoiceProcessing + ТипСтроенияОбработкаВыбора + + 11 + true + true + true + ShowInDropList + true + true + true + true + Normal - - ГруппаСтроенияДополнительно - 70 + + Строение + 29 true true true - + <dataPath xsi:type="form:DataPath"> + <segments>Строение</segments> + </dataPath> + <titleLocation>None</titleLocation> + <toolTip> <key>ru</key> - <value>Строения дополнительно</value> - + Номер здания + + + OnChange + СтроениеПриИзменении + - ГруппаСтроенияДополнительноExtendedTooltip - 122 + СтроениеExtendedTooltip + 121 Label true true @@ -1009,14 +1348,38 @@ Left - UsualGroup - - Vertical - Auto - true - true - Auto - Auto + + СтроениеКонтекстноеМеню + 30 + true + + InputField + Enter + true + Left + true + + + AutoComplete + СтроениеАвтоПодбор + + + StartChoice + СтроениеНачалоВыбора + + + ChoiceProcessing + СтроениеОбработкаВыбора + + true + true + true + true + true + true + true + true + Normal true @@ -1026,12 +1389,42 @@
    <key>ru</key> - <value>Строения</value> + <value>Строения основная</value> - true - ГруппаСтроенияExtendedTooltip - 118 + ГруппаСтроенияОсновнаяРасширеннаяПодсказка + 521 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + Auto + Auto + + + + ГруппаСтроенияДополнительно + 476 + true + true + + true + + + <key>ru</key> + <value>Типы строений дополнительно</value> + + + ГруппаСтроенияДополнительноРасширеннаяПодсказка + 477 Label true true @@ -1044,136 +1437,36 @@ Vertical Auto true - true Auto Auto
    - ГруппаПомещение - 51 - - ГруппаПомещениеНачальное - 71 - - ТипПомещения - 31 - true - true - - true - - - ТипПомещения - - None - - ru - Тип помещения: квартира, офис и т. п. - - - OnChange - ТипПомещенияПриИзменении - - - ТипПомещенияExtendedTooltip - 125 - Label - true - true - - Left - - - - ТипПомещенияКонтекстноеМеню - 32 - true - - InputField - Enter - true - Left - true - - 12 - true - true - true - ShowInDropList - true - true - true - Normal - - ru - Другое - - - - - Помещение - 33 - true - true - - true - - - Помещение - - None - - ru - Значение помещения - - - OnChange - ПомещениеПриИзменении - - - ПомещениеExtendedTooltip - 126 - Label - true - true - - Left - - - - ПомещениеКонтекстноеМеню - 34 - true - - InputField - Enter - true - Left - true - - 7 - true - true - true - true - true - true - Normal - - + ГруппаПомещенияОсновная + 522 + + ТипПомещения + 31 true true true - + <dataPath xsi:type="form:DataPath"> + <segments>ТипПомещения</segments> + </dataPath> + <titleLocation>None</titleLocation> + <toolTip> <key>ru</key> - <value>Помещение начальное</value> - + Тип помещения: квартира, офис и т. п. + + + OnChange + ТипПомещенияПриИзменении + - ГруппаПомещениеНачальноеExtendedTooltip - 124 + ТипПомещенияExtendedTooltip + 125 Label true true @@ -1181,30 +1474,59 @@ Left
    - UsualGroup - - Auto - true - true - Auto - Auto + + ТипПомещенияКонтекстноеМеню + 32 + true + + InputField + Enter + true + Left + true + + + ChoiceProcessing + ТипПомещенияОбработкаВыбора + + 11 + true + true + true + ShowInDropList + true + true + true + Normal + + ru + Другое + - - ГруппаПомещенияДополнительно - 72 + + Помещение + 33 true true true - + <dataPath xsi:type="form:DataPath"> + <segments>Помещение</segments> + </dataPath> + <titleLocation>None</titleLocation> + <toolTip> <key>ru</key> - <value>Группа строения дополнительно</value> - + Значение помещения + + + OnChange + ПомещениеПриИзменении + - ГруппаПомещенияДополнительноExtendedTooltip - 127 + ПомещениеExtendedTooltip + 126 Label true true @@ -1212,14 +1534,24 @@ Left - UsualGroup - - Vertical - Auto - true - true - Auto - Auto + + ПомещениеКонтекстноеМеню + 34 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal true @@ -1229,12 +1561,42 @@ <key>ru</key> - <value>Помещение</value> + <value>Помещения основная</value> - true - ГруппаПомещениеExtendedTooltip - 123 + ГруппаПомещенияОсновнаяРасширеннаяПодсказка + 523 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + Auto + Auto + + + + ГруппаПомещенияДополнительно + 478 + true + true + + true + + + <key>ru</key> + <value>Типы помещений дополнительно</value> + + + ГруппаПомещенияДополнительноРасширеннаяПодсказка + 479 Label true true @@ -1247,65 +1609,6 @@ Vertical Auto true - true - Auto - Auto - - - - ГруппаКомандаДобавить - 167 - - ДобавитьОбъект - 94 - true - true - - true - - - ДобавитьОбъектExtendedTooltip - 128 - Label - true - true - - Left - - - UsualButton - Form.Command.ДобавитьОбъект - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Команда добавить</value> - - - ГруппаКомандаДобавитьРасширеннаяПодсказка - 168 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true Auto Auto @@ -1317,12 +1620,12 @@ <key>ru</key> - <value>Дома и строения</value> + <value>Дома строения помещения</value> false - ГруппаДомаИСтроенияРасширеннаяПодсказка - 254 + ГруппаДомаСтроенияПомещенияРасширеннаяПодсказка + 527 Label true true @@ -1341,67 +1644,8 @@
    - ГруппаОписаниеНедоступностиСервера - 270 - - СервисДоступен - 274 - - СервисДоступенДекорация - 276 - true - true - - true - - - СервисДоступенДекорацияРасширеннаяПодсказка - 278 - Label - true - true - - Left - - - - СервисДоступенДекорацияКонтекстноеМеню - 277 - true - - Label - true - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Сервис доступен</value> - - - СервисДоступенРасширеннаяПодсказка - 275 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - + ГруппаИнформационныеСообщения + 528 СервисНедоступен 272 @@ -1482,6 +1726,7 @@ true true + 1 true true true @@ -1552,7 +1797,6 @@ Auto - true true true @@ -1571,32 +1815,64 @@ Left
    - Page - + UsualGroup + + Auto + true + true auto - false + Auto + Auto - СообщениеОбОшибке - 348 - - СообщениеОбОбращенииВФИАС - 355 - - <key>ru</key> - <value>Рекомендуется дополнительно <link http://fias.nalog.ru/ExtendedSearchPage.aspx>проверить адрес </> -<link http://fias.nalog.ru/ExtendedSearchPage.aspx>на сайте ФИАС</>. -</value> - + ГруппаОписаниеНедоступностиСервера + 270 + + СервисДоступен + 274 + + СервисДоступенДекорация + 276 + true + true + + true + + + СервисДоступенДекорацияРасширеннаяПодсказка + 278 + Label + true + true + + Left + + + + СервисДоступенДекорацияКонтекстноеМеню + 277 + true + + Label + true + true + + Left + + true true true + + <key>ru</key> + <value>Сервис доступен</value> + - СообщениеОбОбращенииВФИАСРасширеннаяПодсказка - 357 + СервисДоступенРасширеннаяПодсказка + 275 Label true true @@ -1604,34 +1880,64 @@ Left - - СообщениеОбОбращенииВФИАСКонтекстноеМеню - 356 - true - - true - Label - true - true - - Left + Page + + Vertical + auto + false - - СообщениеОбОбращенииВФНС - 345 - - <key>ru</key> - <value>О некорректных или неполных адресных сведениях рекомендуется сообщать в службу <link https://www.nalog.ru/rn77/service/service_feedback/?service=22>технической поддержки</> online-сервисов ФНС России.</value> - + + СообщениеОбОшибке + 348 + + СообщениеОбОбращенииВФИАС + 355 + + <key>ru</key> + <value>Рекомендуется дополнительно <link http://fias.nalog.ru/ExtendedSearchPage.aspx>проверить адрес на сайте ФИАС</>. +О некорректных или неполных адресных сведениях рекомендуется сообщать в службу <link https://www.nalog.ru/rn77/service/service_feedback/?service=22>технической поддержки</> online-сервисов ФНС России.</value> + + true + true + + true + + + СообщениеОбОбращенииВФИАСРасширеннаяПодсказка + 357 + Label + true + true + + Left + + + + СообщениеОбОбращенииВФИАСКонтекстноеМеню + 356 + true + + true + Label + true + true + + Left + + true true true + + <key>ru</key> + <value>Сообщение об ошибке</value> + - СообщениеОбОбращенииВФНСРасширеннаяПодсказка - 347 + СообщениеОбОшибкеРасширеннаяПодсказка + 349 Label true true @@ -1639,17 +1945,11 @@ Left - - СообщениеОбОбращенииВФНСКонтекстноеМеню - 346 - true - - true - Label - true - true - - Left + Page + + Vertical + auto + false true @@ -1659,11 +1959,11 @@ <key>ru</key> - <value>Сообщение об ошибке</value> + <value>Описание недоступности сервера</value> - СообщениеОбОшибкеРасширеннаяПодсказка - 349 + ГруппаОписаниеНедоступностиСервераРасширеннаяПодсказка + 271 Label true true @@ -1671,11 +1971,39 @@ Left - Page - - Vertical - auto - false + Pages + + Auto + + + + ДекорацияОтступ + 530 + true + true + + true + + + ДекорацияОтступРасширеннаяПодсказка + 532 + Label + true + true + + Left + + + + ДекорацияОтступКонтекстноеМеню + 531 + true + + Label + true + true + + Left true @@ -1685,11 +2013,13 @@ <key>ru</key> - <value>Описание недоступности сервера</value> + <value>Информационные сообщения</value> + 32 + false - ГруппаОписаниеНедоступностиСервераРасширеннаяПодсказка - 271 + ГруппаИнформационныеСообщенияРасширеннаяПодсказка + 529 Label true true @@ -1697,8 +2027,13 @@ Left - Pages - + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto Auto @@ -1709,11 +2044,11 @@ <key>ru</key> - <value>Общая дома и строения</value> + <value>Адрес</value> - ГруппаОбщаяДомаИСтроенияРасширеннаяПодсказка - 252 + ГруппаСтроенияИИнформацияРасширеннаяПодсказка + 437 Label true true @@ -1723,61 +2058,60 @@ UsualGroup + AlwaysHorizontal + Left Auto true true - Auto Auto - - ПредставлениеАдреса - 7 - true - true - - true - - - ПредставлениеАдреса - - true - None - - ru - Представление адреса - - - OnChange - ПредставлениеАдресаПриИзменении - - - ПредставлениеАдресаExtendedTooltip - 130 - Label - true - true - - Left - - - - ПредставлениеАдресаКонтекстноеМеню - 8 - - ПредставлениеАдресаКонтекстноеМенюГруппа1 - 156 + + ГруппаДополнительныеПоляАдреса + 524 + + Индекс + 12 + true + true + + true + + + Индекс + + + ru + Почтовый индекс + + + OnChange + ИндексПриИзменении + + + ИндексExtendedTooltip + 110 + Label + true + true + + Left + + + + ИндексКонтекстноеМеню + 13 - ПредставлениеАдресаКонтекстноеМенюВвестиАдресВСвободнойФорме - 154 + ЗаполнитьПоПочтовомуИндексуЭлемента + 486 true true true - ПредставлениеАдресаКонтекстноеМенюВвестиАдресВСвободнойФормеРасширеннаяПодсказка - 155 + ЗаполнитьПоПочтовомуИндексуЭлементаРасширеннаяПодсказка + 487 Label true true @@ -1785,7 +2119,7 @@ Left - Form.Command.ВвестиАдресВСвободнойФорме + Form.Command.ЗаполнитьПоПочтовомуИндексу Normal Auto true @@ -1793,45 +2127,250 @@ UserCmds Auto - true - true - - true - - + <autoFill>true</autoFill> + </contextMenu> + <type>InputField</type> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:InputFieldExtInfo"> + <handlers> + <event>EditTextChange</event> + <name>ИндексИзменениеТекстаРедактирования</name> + </handlers> + <handlers> + <event>StartChoice</event> + <name>ИндексНачалоВыбора</name> + </handlers> + <handlers> + <event>TextEditEnd</event> + <name>ИндексОкончаниеВводаТекста</name> + </handlers> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <wrap>true</wrap> + <extendedEdit>false</extendedEdit> + <editFormat> <key>ru</key> - <value>Представление адреса контекстное меню группа 1</value> - - - ПредставлениеАдресаКонтекстноеМенюГруппа1РасширеннаяПодсказка - 157 - Label - true - true - - Left - - - - - true - - InputField - Enter - true - Left - true - + ЧЦ=6; ЧРГ=' '; ЧН=; ЧГ=0 + + true + true + OnValueChange + Normal + + + + ОКТМО + 279 + true + true + + true + + + ОКТМО + + + OnChange + ОКТМОПриИзменении + + + ОКТМОРасширеннаяПодсказка + 281 + Label + true + true + + Left + + + + ОКТМОКонтекстноеМеню + 280 + true + + InputField + Enter + true + Left + true + + 11 + true + true + false + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Дополнительные поля адреса</value> + + + ГруппаДополнительныеПоляАдресаРасширеннаяПодсказка + 525 + Label + true true - true - true - true - true - true - - Style.ButtonBackColor - - Normal + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаПредставлениеАдреса + 412 + + ПредставлениеАдреса + 7 + + <key>ru</key> + <value>Представление</value> + + true + true + + true + + + ПредставлениеАдреса + + true + None + + ru + Представление адреса + + + ПредставлениеАдресаExtendedTooltip + 130 + Label + true + true + + Left + + + + ПредставлениеАдресаКонтекстноеМеню + 8 + + ПредставлениеАдресаКонтекстноеМенюГруппа + 156 + + ПредставлениеАдресаКонтекстноеМенюВвестиАдресВСвободнойФорме + 154 + true + true + + true + + + ПредставлениеАдресаКонтекстноеМенюВвестиАдресВСвободнойФормеРасширеннаяПодсказка + 155 + Label + true + true + + Left + + + Form.Command.АдресВСвободнойФорме + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Представление адреса контекстное меню группа 1</value> + + + ПредставлениеАдресаКонтекстноеМенюГруппаРасширеннаяПодсказка + 157 + Label + true + true + + Left + + + + + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + + Style.ButtonBackColor + + Normal + + + true + true + + true + + + <key>ru</key> + <value>Представление адреса</value> + + + ГруппаПредставлениеАдресаРасширеннаяПодсказка + 413 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + Auto + Auto true @@ -1856,591 +2395,116 @@ Page Vertical + auto false - ИностранныйАдрес + ВСвободнойФорме 3 - СтруктураИностранныйАдреса - 320 - - НаселенныйПунктИностранныйАдреса - 282 - true - true - - true - - - НаселенныйПункт - - - OnChange - НаселенныйПунктИностранныйАдресаПриИзменении - - - НаселенныйПунктИностранныйАдресаРасширеннаяПодсказка - 284 - Label - true - true - - Left - - - - НаселенныйПунктИностранныйАдресаКонтекстноеМеню - 283 - true - - InputField - Enter - true - Left - true - - - StartChoice - НаселенныйПунктИностранныйАдресаНачалоВыбора - - - ChoiceProcessing - НаселенныйПунктИностранныйАдресаОбработкаВыбора - - true - true - true - true - true - true - true - Normal - - - - УлицаИностранныйАдреса - 285 - true - true - - true - - - Улица - - - OnChange - УлицаИностранныйАдресаПриИзменении - - - УлицаИностранныйАдресаРасширеннаяПодсказка - 287 - Label - true - true - - Left - - - - УлицаИностранныйАдресаКонтекстноеМеню - 286 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - + ГруппаСтранаСвободнаяФорма + 468 - ГруппаДомаИСтроенияИностранныйАдреса - 288 - - ГруппаДомИностранныйАдреса - 290 - - ТипДомаИностранныйАдреса - 292 - true - true - - true - - - ТипДома - - None - - ru - Тип дома: дом, владение и т. п. - + ГруппаСтранаСвободнаяФормаЗначение + 472 + + СтранаВСвободнойФорме + 488 + + <key>ru</key> + <value>Страна</value> + + true + true + + true + + + Страна + + + ru + Страна адреса + + + OnChange + СтранаПриИзменении + + + СтранаВСвободнойФормеРасширеннаяПодсказка + 490 + Label + true + true + + Left + + + + СтранаВСвободнойФормеКонтекстноеМеню + 489 + true + + InputField + Left + Enter + true + Left + true + - OnChange - ТипДомаПриИзменении + AutoComplete + СтранаАвтоПодбор - - ТипДомаИностранныйАдресаРасширеннаяПодсказка - 294 - Label - true - true - - Left - - - - ТипДомаИностранныйАдресаКонтекстноеМеню - 293 - true - - InputField - Enter - true - Left - true - - 12 - true - true - true - false - true - ShowInDropList - true - true - true - Normal - - - - ДомИностранныйАдреса - 295 - true - true - - true - - - Дом - - None - - ru - Номер дома, владения - - OnChange - ДомИностранныйАдресаПриИзменении + Clearing + СтранаОчистка - - ДомИностранныйАдресаРасширеннаяПодсказка - 297 - Label - true - true - - Left - - - - ДомИностранныйАдресаКонтекстноеМеню - 296 - true - - InputField - Enter - true - Left - true - - 7 - true - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Группа дом</value> - - - ГруппаДомИностранныйАдресаРасширеннаяПодсказка - 291 - Label + + TextEditEnd + СтранаОкончаниеВводаТекста + + + ChoiceProcessing + СтранаОбработкаВыбора + + 60 true + 60 true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ГруппаСтроенияИностранныйАдреса - 298 - - ГруппаСтроениеНачальноеИностранныйАдреса - 300 - - ТипСтроенияИностранныйАдреса - 302 - true - true - - true - - - ТипСтроения - - None - - ru - Дополнительный тип здания: корпус, строение и т. п. - - - OnChange - ТипСтроенияПриИзменении - - - ТипСтроенияИностранныйАдресаРасширеннаяПодсказка - 304 - Label - true - true - - Left - - - - ТипСтроенияИностранныйАдресаКонтекстноеМеню - 303 - true - - InputField - Enter - true - Left - true - - 12 - true - true - true - ShowInDropList - true - true - true - true - true - Normal - - - - СтроениеИностранныйАдреса - 305 - true - true - - true - - - Строение - - None - - ru - Номер здания - - - OnChange - СтроениеИностранныйАдресаПриИзменении - - - СтроениеИностранныйАдресаРасширеннаяПодсказка - 307 - Label - true - true - - Left - - - - СтроениеИностранныйАдресаКонтекстноеМеню - 306 - true - - InputField - Enter - true - Left - true - - 7 - true - true - true - true - true - true - true - Normal - - - true - true - - true - - + <wrap>true</wrap> + <dropListButton>false</dropListButton> + <choiceButton>true</choiceButton> + <choiceButtonRepresentation>ShowInInputField</choiceButtonRepresentation> + <clearButton>false</clearButton> + <spinButton>false</spinButton> + <openButton>false</openButton> + <createButton>false</createButton> + <typeDomainEnabled>true</typeDomainEnabled> + <textEdit>true</textEdit> + <choiceParameters> + <name>ТолькоДанныеКлассификатора</name> + <value xsi:type="form:FormChoiceListDesTimeValue"> + <value xsi:type="core:BooleanValue"> + <value>true</value> + </value> + </value> + </choiceParameters> + <choiceParameters> + <name>РазрешитьДанныеКлассификатора</name> + <value xsi:type="form:FormChoiceListDesTimeValue"> + <value xsi:type="core:BooleanValue"> + <value>true</value> + </value> + </value> + </choiceParameters> + <textSize>Normal</textSize> + <inputHint> <key>ru</key> - <value>Группа строение начальное</value> - - - ГруппаСтроениеНачальноеИностранныйАдресаРасширеннаяПодсказка - 301 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Группа строения</value> - - true - - ГруппаСтроенияИностранныйАдресаРасширеннаяПодсказка - 299 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ГруппаПомещениеИностранныйАдреса - 310 - - ГруппаПомещениеНачальноеИностранныйАдреса - 312 - - ТипПомещенияИностранныйАдреса - 314 - true - true - - true - - - ТипПомещения - - None - - ru - Тип помещения: квартира, офис и т. п. - - - OnChange - ТипПомещенияПриИзменении - - - ТипПомещенияИностранныйАдресаРасширеннаяПодсказка - 316 - Label - true - true - - Left - - - - ТипПомещенияИностранныйАдресаКонтекстноеМеню - 315 - true - - InputField - Enter - true - Left - true - - 12 - true - true - true - ShowInDropList - true - true - true - true - true - Normal - - - - ПомещениеИностранныйАдреса - 317 - true - true - - true - - - Помещение - - None - - ru - Значение помещения - - - OnChange - ПомещениеИностранныйАдресаПриИзменении - - - ПомещениеИностранныйАдресаРасширеннаяПодсказка - 319 - Label - true - true - - Left - - - - ПомещениеИностранныйАдресаКонтекстноеМеню - 318 - true - - InputField - Enter - true - Left - true - - 7 - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Группа помещение начальное</value> - - - ГруппаПомещениеНачальноеИностранныйАдресаРасширеннаяПодсказка - 313 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Помещение</value> - - true - - ГруппаПомещениеИностранныйАдресаРасширеннаяПодсказка - 311 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto + Введите первые буквы названия страны + + DontUse true @@ -2450,12 +2514,11 @@ <key>ru</key> - <value>Группа дома и строения</value> + <value>Страна свободная форма значение</value> - false - ГруппаДомаИСтроенияИностранныйАдресаРасширеннаяПодсказка - 289 + ГруппаСтранаСвободнаяФормаЗначениеРасширеннаяПодсказка + 473 Label true true @@ -2465,9 +2528,8 @@ UsualGroup - Vertical + AlwaysHorizontal Auto - WeakSeparation true true Auto @@ -2481,11 +2543,11 @@ <key>ru</key> - <value>Структура иностранный адреса</value> + <value>Страна свободная форма</value> - СтруктураИностранныйАдресаРасширеннаяПодсказка - 321 + ГруппаСтранаСвободнаяФормаРасширеннаяПодсказка + 469 Label true true @@ -2495,11 +2557,10 @@ UsualGroup - Vertical + AlwaysHorizontal Auto true true - Auto Auto @@ -2556,10 +2617,10 @@ <key>ru</key> - <value>Иностранный адрес</value> + <value>В свободной форме</value> - ИностранныйАдресExtendedTooltip + ВСвободнойФормеРасширеннаяПодсказка 131 Label true @@ -2574,213 +2635,6 @@ false - - МеждународныйАдрес - 371 - - СтруктураМеждународныеАдреса - 373 - - НаселенныйПунктМеждународныеАдреса - 375 - - <key>ru</key> - <value>Город, населенный пункт / City</value> - - true - true - - true - - - НаселенныйПункт - - - OnChange - НаселенныйПунктИностранныйАдресаПриИзменении - - - НаселенныйПунктМеждународныеАдресаРасширеннаяПодсказка - 377 - Label - true - true - - Left - - - - НаселенныйПунктМеждународныеАдресаКонтекстноеМеню - 376 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - УлицаМеждународныеАдреса - 378 - - <key>ru</key> - <value>Адрес / Address</value> - - true - true - - true - - - Улица - - Left - - OnChange - УлицаИностранныйАдресаПриИзменении - - - УлицаМеждународныеАдресаРасширеннаяПодсказка - 380 - Label - true - true - - Left - - - - УлицаМеждународныеАдресаКонтекстноеМеню - 379 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Структура международные адреса</value> - - - СтруктураМеждународныеАдресаРасширеннаяПодсказка - 374 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ПредставлениеМеждународногоАдреса - 381 - true - true - - true - - - ПредставлениеАдреса - - None - - OnChange - ПредставлениеИностранногоАдресаПриИзменении - - - ПредставлениеМеждународногоАдресаРасширеннаяПодсказка - 383 - Label - true - true - - Left - - - - ПредставлениеМеждународногоАдресаКонтекстноеМеню - 382 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Международный адрес</value> - - - МеждународныйАдресРасширеннаяПодсказка - 372 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - true true @@ -2788,11 +2642,11 @@ <key>ru</key> - <value>Тип адреса</value> + <value>Адрес представление комментарий</value> - ТипАдресаExtendedTooltip - 111 + АдресПредставлениеКомментарийРасширеннаяПодсказка + 226 Label true true @@ -2815,8 +2669,8 @@ Адрес - АдресСтраницаПредставлениеРасширеннаяПодсказка - 228 + СтраницаАдресРасширеннаяПодсказка + 485 Label true true @@ -2832,11 +2686,11 @@
    - АдресСтраницаКомментарий - 229 + СтраницаКомментарий + 414 Комментарий - 5 + 373 true true @@ -2846,17 +2700,13 @@ Комментарий None - - ru - Дополнительный комментарий, не включаемый в представление адреса - OnChange КомментарийПриИзменении - КомментарийExtendedTooltip - 135 + КомментарийРасширеннаяПодсказка + 375 Label true true @@ -2866,7 +2716,7 @@ КомментарийКонтекстноеМеню - 6 + 374 true InputField @@ -2875,7 +2725,6 @@ Left true - true true true true @@ -2893,9 +2742,12 @@ ru Комментарий + + Style.ПоясняющийТекст + - АдресСтраницаКомментарийРасширеннаяПодсказка - 230 + СтраницаКомментарийРасширеннаяПодсказка + 415 Label true true @@ -2917,11 +2769,11 @@ <key>ru</key> - <value>Адрес представление комментарий</value> + <value>Основные страницы</value> - АдресПредставлениеКомментарийРасширеннаяПодсказка - 226 + ОсновныеСтраницыРасширеннаяПодсказка + 483 Label true true @@ -2936,22 +2788,70 @@
    - ПанельКоманд - 82 + ГруппаПанельНиз + 491 - ГруппаПроверитьЗаполнения - 86 - - ПроверитьЗаполнениеАдреса - 87 + СтраницаТипАдреса + 499 + + СтраницаМуниципальныйАдрес + 505 + + ДекорацияМуниципальный + 510 + + <key>ru</key> + <value>Муниципальное деление</value> + + true + true + + true + + Button + + ДекорацияМуниципальныйРасширеннаяПодсказка + 512 + + <key>ru</key> + <value>Адреса могут быть введены в следующих форматах: + • в историческом формате – по административно-территориальному делению; + • по муниципальному делению с учетом требований Федерального закона от 06.10.1999 № 131-ФЗ «Об общих принципах организации местного самоуправления в Российской Федерации».</value> + + Label + true + true + + Left + + + + ДекорацияМуниципальныйКонтекстноеМеню + 511 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + true true true + + <key>ru</key> + <value>Страница муниципальный адрес</value> + - ПроверитьЗаполнениеАдресаExtendedTooltip - 138 + СтраницаМуниципальныйАдресРасширеннаяПодсказка + 506 Label true true @@ -2959,25 +2859,72 @@ Left
    - Form.Command.ПроверитьЗаполнениеАдреса - Normal - Auto - true - true - UserCmds - Auto + Page + + Vertical + auto + false + - - АдресныйКлассификаторУстарел - 353 + + СтраницаАдминистративноТерриториальныйАдрес + 503 + + ДекорацияАдминистративноТерриториальный + 507 + + <key>ru</key> + <value>Административно-территориальное деление</value> + + true + true + + true + + Button + + ДекорацияАдминистративноТерриториальныйРасширеннаяПодсказка + 509 + + <key>ru</key> + <value>Адреса могут быть введены в следующих форматах: + • в историческом формате – по административно-территориальному делению; + • по муниципальному делению с учетом требований Федерального закона от 06.10.1999 № 131-ФЗ «Об общих принципах организации местного самоуправления в Российской Федерации».</value> + + Label + true + true + + Left + + + + ДекорацияАдминистративноТерриториальныйКонтекстноеМеню + 508 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + true true true + + <key>ru</key> + <value>Страница административно территориальный адрес</value> + - АдресныйКлассификаторУстарелРасширеннаяПодсказка - 354 + СтраницаАдминистративноТерриториальныйАдресРасширеннаяПодсказка + 504 Label true true @@ -2985,14 +2932,71 @@ Left
    - CommandBarHyperlink - Form.Command.АдресныйКлассификаторУстарел - Normal - Auto - true - true - UserCmds - Auto + Page + + Vertical + auto + false + + + + СтраницаДругойАдрес + 501 + + ДекорацияДругойАдрес + 513 + true + true + + true + + + ДекорацияДругойАдресРасширеннаяПодсказка + 515 + Label + true + true + + Left + + + + ДекорацияДругойАдресКонтекстноеМеню + 514 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Страница другой адрес</value> + + + СтраницаДругойАдресРасширеннаяПодсказка + 502 + Label + true + true + + Left + + + Page + + Vertical + auto + false + true true @@ -3001,12 +3005,11 @@ <key>ru</key> - <value>Проверить заполнения</value> + <value>Страница тип адреса</value> - true - ГруппаПроверитьЗаполненияРасширеннаяПодсказка - 137 + СтраницаТипАдресаРасширеннаяПодсказка + 500 Label true true @@ -3014,14 +3017,66 @@ Left
    - CommandBar - - Left + Pages + + Auto + + + + ТипАдреса + 496 + + Style.ПоясняющийТекст + + true + + true + + + ФорматАдреса + + None + Button + + ТипАдресаРасширеннаяПодсказка + 498 + + <key>ru</key> + <value>Адреса могут быть введены в следующих форматах: + • в историческом формате – по административно-территориальному делению; + • по муниципальному делению с учетом требований Федерального закона от 06.10.1999 № 131-ФЗ «Об общих принципах организации местного самоуправления в Российской Федерации». +</value> + + true + Label + true + true + + Left + + + + ТипАдресаКонтекстноеМеню + 497 + true + + LabelField + Enter + true + Left + true + + true + true + false + + Style.ПоясняющийТекст + - ПанельКомандФормы - 83 + ГруппаОКОтмена + 371 ФормаКомандаОК 56 @@ -3074,667 +3129,6 @@ UserCmds Auto - - ФормаВсеДействия - 231 - - ФормаВводАдресаВСвободнойФормеВсеДействия - 233 - - ПоказатьИсториюВсеДействия - 324 - true - true - - true - - - ПоказатьИсториюВсеДействияРасширеннаяПодсказка - 325 - Label - true - true - - Left - - - Form.Command.ИсторияИзменений - Normal - Auto - true - true - UserCmds - Auto - - - ПоказатьАдресНаВсеДействия - 334 - - АдресНаЯндексКарты - 336 - true - true - - true - - - АдресНаЯндексКартыРасширеннаяПодсказка - 337 - Label - true - true - - Left - - - Form.Command.АдресНаЯндексКарты - Normal - Auto - true - true - UserCmds - Auto - - - АдресНаGoogleMaps - 338 - true - true - - true - - - АдресНаGoogleMapsРасширеннаяПодсказка - 339 - Label - true - true - - Left - - - Form.Command.АдресНаGoogleMaps - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Показать адрес на</value> - - - ПоказатьАдресНаВсеДействияРасширеннаяПодсказка - 335 - Label - true - true - - Left - - - Popup - - Auto - Normal - - - true - true - - true - - - <key>ru</key> - <value>Форма ввод адреса в свободной форме</value> - - - ФормаВводАдресаВСвободнойФормеВсеДействияРасширеннаяПодсказка - 234 - Label - true - true - - Left - - - - - - ФормаИзмененияАдресаВсеДействия - 237 - - ВвестиАдресВСвободнойФормеВсеДействия - 235 - true - true - - true - - - ВвестиАдресВСвободнойФормеВсеДействияРасширеннаяПодсказка - 236 - Label - true - true - - Left - - - Form.Command.ВвестиАдресВСвободнойФорме - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - ЗаполнитьПоПочтовомуИндексуВсеДействия - 239 - true - true - - true - - - ЗаполнитьПоПочтовомуИндексуВсеДействияРасширеннаяПодсказка - 240 - Label - true - true - - Left - - - Form.Command.ЗаполнитьПоПочтовомуИндексу - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - ФормаОчиститьАдресВсеДействия - 241 - true - true - - true - - - ФормаОчиститьАдресВсеДействияРасширеннаяПодсказка - 242 - Label - true - true - - Left - - - Form.Command.ОчиститьАдрес - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Форма изменения адреса все действия</value> - - - ФормаИзмененияАдресаВсеДействияРасширеннаяПодсказка - 238 - Label - true - true - - Left - - - - - - ФормаСтандартныеДействия - 243 - - ЗагрузитьКлассификаторВсеДействия - 249 - true - true - - true - - - ЗагрузитьКлассификаторВсеДействияРасширеннаяПодсказка - 250 - Label - true - true - - Left - - - Form.Command.ЗагрузитьКлассификатор - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - ИзменитьФормуВсеДействия - 245 - true - true - - true - - - ИзменитьФормуВсеДействияРасширеннаяПодсказка - 246 - Label - true - true - - Left - - - Form.StandardCommand.CustomizeForm - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - СправкаВсеДействия - 247 - true - true - - true - - - СправкаВсеДействияРасширеннаяПодсказка - 248 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Форма стандартные действия</value> - - - ФормаСтандартныеДействияExtendedTooltip - 244 - Label - true - true - - Left - - - - - true - true - - true - - - <key>ru</key> - <value>Все действия</value> - - - ФормаВсеДействияExtendedTooltip - 232 - Label - true - true - - Left - - - Popup - - - CommonPicture.Подменю - - Picture - Normal - - - - ФормаВводАдресаПоказать - 101 - - ИсторияИзменений - 326 - true - true - - true - - - ИсторияИзмененийРасширеннаяПодсказка - 327 - Label - true - true - - Left - - - Form.Command.ИсторияИзменений - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - АдресНаКартеЯндексКартах - 328 - true - true - - true - - - АдресНаКартеЯндексКартахРасширеннаяПодсказка - 329 - Label - true - true - - Left - - - Form.Command.АдресНаЯндексКарты - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ПоказатьНаКартеGoogle - 330 - true - true - - true - - - ПоказатьНаКартеGoogleРасширеннаяПодсказка - 331 - Label - true - true - - Left - - - Form.Command.АдресНаGoogleMaps - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Форма ввод адреса показать</value> - - - ФормаВводАдресаПоказатьРасширеннаяПодсказка - 144 - Label - true - true - - Left - - - - - - ФормаВсеДействияИзмененияАдреса - 152 - - ВвестиАдресВСвободнойФорме - 102 - true - true - - true - - - ВвестиАдресВСвободнойФормеExtendedTooltip - 145 - Label - true - true - - Left - - - Form.Command.ВвестиАдресВСвободнойФорме - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ЗаполнитьПоПочтовомуИндексу - 150 - true - true - - true - - - ЗаполнитьПоПочтовомуИндексуРасширеннаяПодсказка - 151 - Label - true - true - - Left - - - Form.Command.ЗаполнитьПоПочтовомуИндексу - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ФормаОчиститьАдрес - 90 - true - true - - true - - - ФормаОчиститьАдресExtendedTooltip - 143 - Label - true - true - - Left - - - Form.Command.ОчиститьАдрес - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Форма все действия изменения адреса</value> - - - ФормаВсеДействияИзмененияАдресаРасширеннаяПодсказка - 153 - Label - true - true - - Left - - - - - - ЗагрузитьКлассификатор - 172 - true - true - - true - - - ЗагрузитьКлассификаторРасширеннаяПодсказка - 173 - Label - true - true - - Left - - - Form.Command.ЗагрузитьКлассификатор - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ИзменитьФорму - 98 - true - true - - true - - - ИзменитьФормуРасширеннаяПодсказка - 147 - Label - true - true - - Left - - - Form.StandardCommand.CustomizeForm - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - Справка - 99 - true - true - - true - - - СправкаExtendedTooltip - 148 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - true true @@ -3742,11 +3136,11 @@ <key>ru</key> - <value>Панель команд формы</value> + <value>ОК отмена</value> - ПанельКомандФормыExtendedTooltip - 139 + ГруппаОКОтменаРасширеннаяПодсказка + 372 Label true true @@ -3766,11 +3160,11 @@ <key>ru</key> - <value>Панель команд</value> + <value>Панель низ</value> - ПанельКомандExtendedTooltip - 136 + ГруппаПанельНизРасширеннаяПодсказка + 492 Label true true @@ -3780,6 +3174,7 @@ UsualGroup + AlwaysHorizontal Auto true true @@ -3810,6 +3205,7 @@ OnCreateAtServer ПриСозданииНаСервере + 60 LockOwner Use UseList @@ -3902,7 +3298,7 @@ НаселенныйПункт <key>ru</key> - <value>Город, нас. пункт</value> + <value>Город, населенный пункт</value> 5 @@ -4103,10 +3499,10 @@ - ДополнительныеЗдания + ДополнительныеСтроенияИПомещения <key>ru</key> - <value>Дополнительные здания</value> + <value>Дополнительные строения и помещения</value> 19 @@ -4155,15 +3551,14 @@ - ПутьXPath + Видимость <key>ru</key> - <value>Путь xpath</value> + <value>Видимость</value> 3 - String - + Boolean true @@ -4172,30 +3567,33 @@ true - - - ДополнительныеПомещения - - <key>ru</key> - <value>Дополнительные здания</value> - - 20 - - ValueTable - - - true - - - true - - Тип + Ключ <key>ru</key> - <value>Тип</value> + <value>Ключ</value> - 1 + 4 + + String + + 30 + + + + true + + + true + + + + ПредыдущиеЗначение + + <key>ru</key> + <value>Предыдущие значение</value> + + 5 String @@ -4208,30 +3606,12 @@ - Значение + ИмяЭлемента <key>ru</key> - <value>Значение</value> + <value>Имя элемента</value> - 2 - - String - - - - true - - - true - - - - ПутьXPath - - <key>ru</key> - <value>Путь xpath</value> - - 3 + 6 String @@ -4258,6 +3638,7 @@ true + true ВидКонтактнойИнформации @@ -4600,21 +3981,6 @@ true - - УлицаДетально - - <key>ru</key> - <value>Улица детально</value> - - 42 - - - true - - - true - - ПодборПоИндексуДоступен @@ -4865,12 +4231,30 @@ <common>true</common> </edit> </columns> + <columns> + <name>Значение</name> + <title> + <key>ru</key> + <value>Значение</value> + + 10 + + String + + + + true + + + true + + - ЭтоВебСервис + ВебСервисИспользуется <key>ru</key> - <value>Это веб сервис</value> + <value>Веб сервис используется</value> 48 @@ -4940,13 +4324,65 @@ true + + ЭтоСтранаУчастникЕАЭС + + <key>ru</key> + <value>Это страна участник ЕАЭС</value> + + 52 + + Boolean + + + true + + + true + + + + ФорматАдреса + + <key>ru</key> + <value>Формат адреса</value> + + 53 + + String + + + + true + + + true + + МеждународныйФорматАдреса <key>ru</key> <value>Международный формат адреса</value> - 52 + 54 + + Boolean + + + true + + + true + + + + КлассификаторДоступен + + <key>ru</key> + <value>Классификатор доступен</value> + + 55 Boolean @@ -4988,7 +4424,7 @@ 2 ru - Проверить заполнение адреса + Проверить заполнение адреса в формате ФИАС true @@ -5054,42 +4490,15 @@ Auto - ДобавитьОбъект + АдресВСвободнойФорме <key>ru</key> - <value>Добавить</value> - - 6 - - ru - Добавить строение или помещение - - - true - - - StdPicture.CreateListItem - - - - ДобавитьОбъект - - - TextPicture - true - DontUse - Auto - - - ВвестиАдресВСвободнойФорме - - <key>ru</key> - <value>Ввести адрес в свободной форме</value> + <value>Адрес в свободной форме</value> 5 ru - Ввести адрес в свободной форме + Адрес в свободной форме true @@ -5264,6 +4673,74 @@ DontUse Auto + + ДобавитьКомментарий + + <key>ru</key> + <value>Комментарий</value> + + 27 + + ru + Добавить комментарий + + + true + + + + ДобавитьКомментарий + + + DontUse + Auto + + + МуниципальноеДеление + + <key>ru</key> + <value>Муниципальное деление</value> + + 28 + + ru + Муниципальное деление + + + true + + + + МуниципальноеДеление + + + true + Auto + Auto + + + АдминистративноТерриториальноеДеление + + <key>ru</key> + <value>Административно-территориальное деление</value> + + 29 + + ru + Административно территориальное деление + + + true + + + + АдминистративноТерриториальноеДеление + + + true + Auto + Auto + ВидКонтактнойИнформации diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Help/ru.html b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Help/ru.html index ba068fab1..27ed83332 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Help/ru.html +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Help/ru.html @@ -4,15 +4,19 @@

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

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

    +

    Автоподбор российского адреса

    +
    • Предусмотрен автоподбор всего адреса при вводе (только при использовании веб-сервиса. Наберите в поле Город, населенный пункт поисковое слово или его часть. +
    • Обратите внимание на цветовое различие адресов: +
      • по муниципальному делению - стандартный цвет текста; +
      • по административно-территориальному делению - серый цвет.

    Ввод адреса

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

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

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

    • Для ввода адреса "Санкт-Петербург, Пискаревский проспект, дом 2, корпус 2, литера Щ, офис 12345" необходимо:
      • В поле Город, населенный пункт выбрать "Санкт-Петербург г".
      • В поле Улица выбрать "Пискаревский пр-кт". @@ -36,13 +40,18 @@
        • В некоторых списках можно просмотреть историю изменения адреса с помощью команды Еще - История изменений.

        Адрес на Яндекс.Картах, Адрес на Google Maps

        • -
          С помощью этих команд любой адрес, введенный в программе, можно посмотреть на картах.

        Ввод адреса в свободной форме

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

        Выбор вида территориального деления

        +
        • +
          Перед заполнением адреса с помощью флажка можно выбрать:
          +
          • +
            Муниципальное деление;
            +
          • +
            Административно-территориальное деление.

        Ввод адреса в свободной форме

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

        Заполнение адреса по почтовому индексу

        • Если известен индекс адреса и адресный классификатор по соответствующему региону загружен, то с помощью команды Еще - Заполнить по почтовому индексу имеется возможность по индексу найти адрес. Для выбора выводятся только те адреса, которые соответствуют введенному индексу. Выберите нужную часть адреса, дозаполните оставшиеся поля. -
        • Если указан почтовый индекс, сведения о котором отсутствует в программе, то в сообщении будет предложено загрузить адресные сведения для соответствующего региона с сайта фирмы "1С". Нажмите кнопку Обновить классификатор. Будет произведена загрузка классификатора по соответствующему региону. Регион будет выбран по умолчанию.

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

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

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

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

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

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

      См. также:

      • Виды контактной информации; diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl index 94da7322f..671bb566b 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl @@ -33,50 +33,28 @@ КонецЕсли; // Настройки формы - ЭтоВебСервис = Обработки.РасширенныйВводКонтактнойИнформации.КлассификаторДоступенЧерезВебСервис(); - ЕстьПравоЗагружатьКлассификатор = Обработки.РасширенныйВводКонтактнойИнформации.ЕстьВозможностьИзмененияАдресногоКлассификатора() И Не ЭтоВебСервис; - ЕстьКлассификатор = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.АдресныйКлассификаторДоступен(); - ЭтоТакси = КлиентскоеПриложение.ТекущийВариантИнтерфейса() = ВариантИнтерфейсаКлиентскогоПриложения.Такси; // Группа команд "все действия" зависит от интерфейса. - - УстановитьВозможностьПодбораИндексаИНомеровДомов(ЭтоВебСервис); - - Параметры.Свойство("ВозвращатьСписокЗначений", ВозвращатьСписокЗначений); - // Внутренняя инициализация - ЦветФонаУправляющегоПоля = ЦветаСтиля.ФонУправляющегоПоля; - ЦветФонаФормы = ЦветаСтиля.ЦветФонаФормы; - АвтоЦвет = Новый Цвет; - - ВидКонтактнойИнформации = УправлениеКонтактнойИнформациейСлужебный.СтруктураВидаКонтактнойИнформации(Параметры.ВидКонтактнойИнформации); - - Если ВидКонтактнойИнформации.ХранитьИсториюИзменений Тогда - Если Параметры.Свойство("КонтактнаяИнформацияОписаниеДополнительныхРеквизитов") Тогда - Для каждого СтрокаКИ Из Параметры.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов Цикл - НоваяСтрока = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Добавить(); - ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаКИ); - КонецЦикла; - Иначе - Элементы.ИсторияИзменений.Видимость = Ложь; - Элементы.ПоказатьИсториюВсеДействия.Видимость = Ложь; - КонецЕсли; - Элементы.ИсторияИзмененийГиперссылка.Видимость = НЕ Параметры.Свойство("ИзФормыИстории"); - ВводНовогоАдреса = ?(Параметры.Свойство("ВводНовогоАдреса"), Параметры.ВводНовогоАдреса, Ложь); - Если ВводНовогоАдреса Тогда - ДействуетС = Параметры.ДействуетС; - Иначе - ДействуетС = ?(ЗначениеЗаполнено(Параметры.ДействуетС), Параметры.ДействуетС, ТекущаяДатаСеанса()); - КонецЕсли; - ОтобразитьИнформациюОДатахДействияАдреса(ДействуетС); + СведенияОАдресномКлассификаторе = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.СведенияОДоступностиАдресногоКлассификатора(); + Если СведенияОАдресномКлассификаторе <> Неопределено Тогда + ЕстьКлассификатор = СведенияОАдресномКлассификаторе["ИспользоватьЗагруженные"]; + КлассификаторДоступен = СведенияОАдресномКлассификаторе["КлассификаторДоступен"]; + ВебСервисИспользуется = КлассификаторДоступен; Иначе - Элементы.ИсторияИзменений.Видимость = Ложь; - Элементы.ПоказатьИсториюВсеДействия.Видимость = Ложь; - Элементы.ГруппаИсторическийАдрес.Видимость = Ложь; + ЕстьКлассификатор = Ложь; + ВебСервисИспользуется = Ложь; КонецЕсли; - Команды.ПроверитьЗаполнениеАдреса.Подсказка = ?(ВидКонтактнойИнформации.ПроверятьПоФИАС, - НСтр("ru = 'Проверить заполнение адреса в формате ФИАС'"), - НСтр("ru = 'Проверить заполнение адреса в формате КЛАДР'")); + Если Не ВебСервисИспользуется И Не ЕстьКлассификатор Тогда + Элементы.АдресныйКлассификаторУстарел.Видимость = Истина; + КонецЕсли; + + МожноЗагружатьКлассификатор = Обработки.РасширенныйВводКонтактнойИнформации.ЕстьВозможностьИзмененияАдресногоКлассификатора(); + + Параметры.Свойство("ВозвращатьСписокЗначений", ВозвращатьСписокЗначений); + + ОсновнаяСтрана = РаботаСАдресамиКлиентСервер.ОсновнаяСтрана(); + ВидКонтактнойИнформации = УправлениеКонтактнойИнформациейСлужебный.СтруктураВидаКонтактнойИнформации(Параметры.ВидКонтактнойИнформации); + ПриСозданииНаСервереХранитьИсториюИзменений(); - ВидКонтактнойИнформации.Вставить("ФорматАдреса", "ФИАС"); // Всегда используем разрезы ФИАС. Заголовок = ?(ПустаяСтрока(Параметры.Заголовок), ВидКонтактнойИнформации.Наименование, Параметры.Заголовок); СкрыватьНеактуальныеАдреса = ВидКонтактнойИнформации.СкрыватьНеактуальныеАдреса; @@ -84,127 +62,97 @@ ТипКонтактнойИнформации = ВидКонтактнойИнформации.Тип; МеждународныйФорматАдреса = ВидКонтактнойИнформации.МеждународныйФорматАдреса; - Если Не МеждународныйФорматАдреса Тогда - ОсновнаяСтрана = РаботаСАдресами.ОсновнаяСтрана(); + // Пытаемся заполнить из параметров. + ЗначенияПолей = ОпределитьЗначениеАдреса(Параметры); + + Если ПустаяСтрока(ЗначенияПолей) Тогда + НаселенныйПунктДетально = УправлениеКонтактнойИнформацией.ОписаниеНовойКонтактнойИнформации(Перечисления.ТипыКонтактнойИнформации.Адрес); // Новый адрес + НаселенныйПунктДетально.AddressType = РаботаСАдресамиКлиентСервер.МуниципальныйАдрес(); + ИначеЕсли УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(ЗначенияПолей) Тогда + ДанныеАдреса = УправлениеКонтактнойИнформациейСлужебный.СтрокаJSONВСтруктуру(ЗначенияПолей); + НаселенныйПунктДетально = РаботаСАдресамиКлиентСервер.АккомодацияСтруктурыАдреса(ДанныеАдреса); + Иначе + XDTOКонтактная = ИзвлечьСтарыйФорматАдреса(ЗначенияПолей, ТипКонтактнойИнформации); + ДанныеАдреса = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON(XDTOКонтактная, ТипКонтактнойИнформации); + НаселенныйПунктДетально = РаботаСАдресамиКлиентСервер.АккомодацияСтруктурыАдреса(ДанныеАдреса); + КонецЕсли; + + Если МеждународныйФорматАдреса И Не УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(НаселенныйПунктДетально.AddressType) Тогда + НаселенныйПунктДетально.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.ИностранныйАдрес(); КонецЕсли; ЗаполнитьПредопределенныеВариантыАдреса(Параметры); - // Пытаемся заполнить из параметров. - Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(Параметры.ЗначенияПолей) - И ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда - РезультатыЧтения = Новый Структура; - XDTOКонтактная = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзXML(Параметры.ЗначенияПолей, ТипКонтактнойИнформации, РезультатыЧтения); - Если РезультатыЧтения.Свойство("ТекстОшибки") Тогда - // Распознали с ошибками, сообщим при открытии. - ТекстПредупрежденияПриОткрытии = РезультатыЧтения.ТекстОшибки; - XDTOКонтактная.Представление = Параметры.Представление; - XDTOКонтактная.Состав.Страна = Строка(ОсновнаяСтрана); - КонецЕсли; + УстановитьЗначениеРеквизитовПоКонтактнойИнформации(НаселенныйПунктДетально); + + Если ЗначениеЗаполнено(НаселенныйПунктДетально.Comment) Тогда + Элементы.ОсновныеСтраницы.ОтображениеСтраниц = ОтображениеСтраницФормы.ЗакладкиСверху; + Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Комментарий); Иначе - XDTOКонтактная = УправлениеКонтактнойИнформациейСлужебный.АдресXMLВXDTO(Параметры.ЗначенияПолей, Параметры.Представление, ); - Если Параметры.Свойство("Страна") И ЗначениеЗаполнено(Параметры.Страна) Тогда - Если ТипЗнч(Параметры.Страна) = ТипЗнч(Справочники.СтраныМира.ПустаяСсылка()) Тогда - XDTOКонтактная.Состав.Страна = Параметры.Страна.Наименование; - Иначе - XDTOКонтактная.Состав.Страна = Строка(Параметры.Страна); - КонецЕсли; - Иначе - XDTOКонтактная.Состав.Страна = ОсновнаяСтрана.Наименование; - КонецЕсли; + Элементы.ОсновныеСтраницы.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет; КонецЕсли; - Если Параметры.Комментарий <> Неопределено Тогда - // Ставим новый комментарий, иначе он придет из информации. - XDTOКонтактная.Комментарий = Параметры.Комментарий; - КонецЕсли; - - ЗначениеРеквизитовПоКонтактнойИнформации(ЭтотОбъект, XDTOКонтактная); - - Если ЗначениеЗаполнено(Страна) Тогда - КодСтраны = Страна.Код; - Иначе - Если ЗначениеЗаполнено(ОсновнаяСтрана) Тогда - СтранаПоУмолчанию = ОсновнаяСтрана; - Иначе - СтранаПоУмолчанию = РаботаСАдресами.ОсновнаяСтрана(); - КонецЕсли; - Страна = СтранаПоУмолчанию; - КодСтраны = СтранаПоУмолчанию.Код; - КонецЕсли; - - ОтобразитьДополнительныеЗданияИПомещения(); - - Если ТолькоНациональныйАдрес И Не МеждународныйФорматАдреса Тогда - Элементы.Страна.Доступность = Ложь; - Элементы.Страна.ЦветФона = АвтоЦвет; - // Проверяем на корректность + Если ТолькоНациональныйАдрес Тогда + + Элементы.Страна.Видимость = Ложь; + Элементы.ОКТМО.Видимость = ВидКонтактнойИнформации.УказыватьОКТМО; + Если Страна <> ОсновнаяСтрана Тогда + // Считаем адрес российским ПредставлениеАдресаИзменено = Истина; - ТекстПредупрежденияПриОткрытии = НСтр("ru = 'Адрес введен некорректно: допускается ввод только национальных адресов. + ТекстПредупрежденияПриОткрытии = НСтр("ru = 'Адрес введен некорректно: допускается ввод только национальных адресов. |Значение поля ""Страна"" было изменено на %1, необходимо проверить остальные поля.'"); ТекстПредупрежденияПриОткрытии = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПредупрежденияПриОткрытии, ОсновнаяСтрана.Наименование); - ПолеПредупрежденияПриОткрытии = "Страна"; - Модифицированность = Истина; + ПолеПредупрежденияПриОткрытии = "СтранаВСвободнойФорме"; + Модифицированность = Истина; + Элементы.Страна.Доступность = Ложь; + Элементы.Страна.Видимость = Истина; + Элементы.СтранаВСвободнойФорме.Доступность = Ложь; + КонецЕсли; - Страна = ОсновнаяСтрана; + + Если СтрНачинаетсяС(ВРег(НаселенныйПунктДетально.value), ВРег(Страна) + ",") Тогда + ЧастиАдреса = СтрРазделить(НаселенныйПунктДетально.value, ","); + ЧастиАдреса.Удалить(0); + НаселенныйПунктДетально.value = СокрЛП(СтрСоединить(ЧастиАдреса, ",")); + ПредставлениеАдреса = НаселенныйПунктДетально.value; + КонецЕсли; + + Страна = ОсновнаяСтрана; + НаселенныйПунктДетально.Country = Строка(Страна); + + ИначеЕсли МеждународныйФорматАдреса Тогда + + Элементы.ПроверитьЗаполнениеАдреса.Видимость = Ложь; + Элементы.АдресныйКлассификаторУстарел.Видимость = Ложь; + Элементы.МуниципальноеДеление.Видимость = Ложь; + Элементы.АдминистративноТерриториальноеДеление.Видимость = Ложь; + Элементы.ЗаполнитьПоПочтовомуИндексу.Видимость = Ложь; + Элементы.ЗагрузитьКлассификатор.Видимость = Ложь; + Элементы.СтраницаТипАдреса.Видимость = Ложь; + КонецЕсли; - // Проверка какой адрес - Если МеждународныйФорматАдреса Тогда - - ЕстьПравоЗагружатьКлассификатор = Ложь; - - ИначеЕсли Страна = ОсновнаяСтрана Тогда - Элементы.ОКТМО.Видимость = ВидКонтактнойИнформации.УказыватьОКТМО; - - Если Не ЭтоВебСервис Тогда - // российский адрес - Если XDTOКонтактная.Состав.Состав <> Неопределено И ТипЗнч(XDTOКонтактная.Состав.Состав) <> Тип("Строка") Тогда - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); - СведенияОРегионе = МодульАдресныйКлассификаторСлужебный.СведенияОРегионе(XDTOКонтактная.Состав.Состав.СубъектРФ); - Если СведенияОРегионе.Загружен = Ложь Тогда - ДоступностьКлассификатора = Новый Структура("Отказ, КраткоеПредставлениеОшибки"); - ДоступностьКлассификатора.Отказ = Истина; - ДоступностьКлассификатора.КраткоеПредставлениеОшибки = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Необходимо загрузить адресные сведения по региону ""%1"" (в меню ""%2"").'"), - XDTOКонтактная.Состав.Состав.СубъектРФ, - ?(ЭтоТакси, НСтр("ru = 'Еще'"), НСтр("ru = 'Все действия'"))); - Элементы.АвторизацияНаСайтеПоддержкиПользователей.Видимость = Ложь; - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - Если НЕ УправлениеКонтактнойИнформациейСлужебный.XDTOКонтактнаяИнформацияЗаполнена(XDTOКонтактная) Тогда - РазрешитьВводАдресаВСвободнойФорме = Ложь; - КонецЕсли; - Иначе - ЕстьПравоЗагружатьКлассификатор = Ложь; - КонецЕсли; - - ОпределитьОтображениеЭлементовНаФорме(ЭтоТакси); + ОпределитьОтображениеЭлементовНаФорме(); ДоступностьКлассификатора = Неопределено; - Элементы.АдресСтраницаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Комментарий); - СообщениеОНеобходимостиОбновленияКлассификатора(НаселенныйПунктДетально.Регион.Идентификатор); УстановитьКлючИспользованияФормы(); + СформироватьМенюДобавленияСтроенийИПомещений(); КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) - Элементы.ДобавитьОбъект.Доступность = МожноДобавлятьДополнительныеОбъекты(); - ОбработкаИзмененияСтраныКлиент(); Если ЗначениеЗаполнено(ТекстПредупрежденияПриОткрытии) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстПредупрежденияПриОткрытии,, ПолеПредупрежденияПриОткрытии); КонецЕсли; - ПроверитьДоступностьКлассификатора(); + ОтобразитьПоляПоТипуАдреса(); + ОбновитьМенюДобавленияСтроенийИПомещений(); + ПоказатьПодсказкуПоТипАдреса(); КонецПроцедуры @@ -219,7 +167,7 @@ &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Если ИмяСобытия = "АдресныйКлассификаторАктуализирован" ИЛИ ИмяСобытия = "ЗагруженАдресныйКлассификатор" Тогда - Если ЕстьКлассификатор И СведенияОРегионе(НаселенныйПунктДетально.Регион.Представление).Загружен = Истина Тогда + Если ЕстьКлассификатор И СведенияОРегионе(НаселенныйПунктДетально.Area + " " + НаселенныйПунктДетально.AreaType).Загружен = Истина Тогда Элементы.ГруппаОписаниеНедоступностиСервера.ТекущаяСтраница = Элементы.СервисДоступен; КонецЕсли; КонецЕсли; @@ -231,19 +179,9 @@ &НаКлиенте Процедура СтранаПриИзменении(Элемент) - ОбработкаИзмененияСтраныКлиент(); - Контекст = КонтекстФормыКлиент(); - ЗаполнитьПредставлениеАдреса(Контекст); - КонтекстФормыКлиент(Контекст); + ОтобразитьЭлементыФормыВСоответствиеСоСтраной(); -#Если ВебКлиент Тогда - // Обход особенности платформы. - Элемент.ОбновитьТекстРедактирования(); -#КонецЕсли - - // Выводим всегда представление. - Элементы.АдресПредставлениеКомментарий.ТекущаяСтраница = Элементы.АдресСтраницаПредставление; КонецПроцедуры &НаКлиенте @@ -294,6 +232,7 @@ Если СтрДлина(СокрЛП(Текст)) = 6 И СтрСравнить(Индекс, Текст) <> 0 И Страна = ОсновнаяСтрана Тогда СтандартнаяОбработка = Ложь; + НаселенныйПунктДетально.ZipCode = Текст; ФормаВыбораУлицПоИндексу(Текст); КонецЕсли; @@ -302,6 +241,7 @@ &НаКлиенте Процедура ИндексОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка) + НаселенныйПунктДетально.ZipCode = Текст; Если СтрДлина(СокрЛП(Текст)) = 6 И СтрСравнить(Индекс, Текст) <> 0 И Страна = ОсновнаяСтрана Тогда СтандартнаяОбработка = Ложь; ФормаВыбораУлицПоИндексу(Текст); @@ -313,41 +253,14 @@ КонецПроцедуры &НаКлиенте -Функция ОткрытьФормуВыборАдресаПоПочтовомуИндексу(Результат, ПараметрыФормы) Экспорт - Если Результат <> Неопределено Тогда - Оповещение = Новый ОписаниеОповещения("ПослеВыбораАдресаПоИндексу", ЭтотОбъект); - ОткрытьФорму("Обработка.РасширенныйВводКонтактнойИнформации.Форма.ВыборАдресаПоПочтовомуИндексу", ПараметрыФормы, Элементы.Индекс,,,, Оповещение); - Иначе - ОбновитьПредставлениеАдреса(); - КонецЕсли; -КонецФункции +Процедура ИндексПриИзменении(Элемент) + НаселенныйПунктДетально.ZipCode = Индекс; + ОбновитьПредставлениеАдреса(); +КонецПроцедуры &НаКлиенте -Процедура ФормаВыбораУлицПоИндексу(Знач Текст) - - Модифицированность = Истина; - Индекс = Текст; - Если ЕстьКлассификатор Тогда - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("Индекс", СокрЛП(Текст)); - ПараметрыФормы.Вставить("СкрыватьНеактуальныеАдреса", СкрыватьНеактуальныеАдреса); - ПараметрыФормы.Вставить("ФорматАдреса", ВидКонтактнойИнформации.ФорматАдреса); - ПараметрыФормы.Вставить("ВыборАдресаПоПочтовомуИндексу", Истина); - - Если ЭтоВебСервис ИЛИ НаличиеИндексаВКлассификаторе(Число(Текст)) Тогда - Оповещение = Новый ОписаниеОповещения("ПослеВыбораАдресаПоИндексу", ЭтотОбъект); - ОткрытьФорму("Обработка.РасширенныйВводКонтактнойИнформации.Форма.ВыборАдресаПоПочтовомуИндексу", ПараметрыФормы, Элементы.Индекс,,,, Оповещение); - ИначеЕсли ЕстьПравоЗагружатьКлассификатор Тогда - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - ОповещениеОЗакрытие = Новый ОписаниеОповещения("ОткрытьФормуВыборАдресаПоПочтовомуИндексу", ЭтотОбъект, ПараметрыФормы); - МодульАдресныйКлассификаторКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("АдресныйКлассификаторКлиент"); - МодульАдресныйКлассификаторКлиент.ПоказатьФормуЗагрузкиАдресногоКлассификатора(ОповещениеОЗакрытие, ПараметрыФормы); - КонецЕсли; - КонецЕсли; - Иначе - ОбновитьПредставлениеАдреса(); - КонецЕсли; - +Процедура ОКТМОПриИзменении(Элемент) + НаселенныйПунктДетально.OKTMO = ОКТМО; КонецПроцедуры &НаКлиенте @@ -371,37 +284,30 @@ Возврат; КонецЕсли; - Контекст = КонтекстФормыКлиент(); - ЗаполнитьАдресПоДаннымИндекса(Контекст, Результат); - КонтекстФормыКлиент(Контекст); + ОчиститьАдресКлиент(); + Если ТипЗнч(Результат) = Тип("Структура") Тогда + ПолученныйАдрес = ОпределитьАдресПоИдентификатору(Результат); + ЗаполнитьЗначенияСвойств(НаселенныйПунктДетально, ПолученныйАдрес); + Если ПустаяСтрока(НаселенныйПунктДетально.ZipCode) Тогда + НаселенныйПунктДетально.ZipCode = Формат(Результат.Индекс,"ЧГ=0"); + КонецЕсли; + КонецЕсли; + + ОбработкаИзмененияАдреса(); + УстановитьФлагиВМенюПоТипуАдреса(); + Модифицированность = Истина; ТекущийЭлемент = Элементы.Дом; - + Иначе + ОбновитьПредставлениеАдреса(); КонецЕсли; КонецПроцедуры -&НаСервере -Процедура ЗаполнитьАдресПоДаннымИндекса(Контекст, Знач ДанныеИндекса) - - ОчиститьАдресСервер(Контекст); - - XDTOКонтактнаяИнфо = КонтактнаяИнформацияПоЗначениюРеквизитов(Контекст); - - // Предполагаем, что адрес все еще российский. - XDTOАдрес = XDTOКонтактнаяИнфо.Состав.Состав; - - Обработки.РасширенныйВводКонтактнойИнформации.ПочтовыйИндексАдреса(XDTOАдрес, ДанныеИндекса.Индекс); - Обработки.РасширенныйВводКонтактнойИнформации.УстановитьНаселенныйПунктАдресаПоИдентификатору(XDTOАдрес, ДанныеИндекса.Идентификатор); - Обработки.РасширенныйВводКонтактнойИнформации.УстановитьУлицуАдресаПоИдентификатору(XDTOАдрес, ДанныеИндекса.Идентификатор); - - ЗначениеРеквизитовПоКонтактнойИнформации(Контекст, XDTOКонтактнаяИнфо); - ЗаполнитьПредставлениеАдреса(Контекст); -КонецПроцедуры - &НаКлиенте Процедура КомментарийПриИзменении(Элемент) + НаселенныйПунктДетально.Comment = Комментарий; ПодключитьОбработчикОжидания("УстановитьПиктограммуКомментария", 0.1, Истина); КонецПроцедуры @@ -409,15 +315,22 @@ &НаКлиенте Процедура ТипДомаПриИзменении(Элемент) - Контекст = КонтекстФормыКлиент(); - ЗаполнитьПредставлениеАдреса(Контекст); - КонтекстФормыКлиент(Контекст); + НаселенныйПунктДетально.HouseType = ТипДома; + Если ЗначениеЗаполнено(НаселенныйПунктДетально.HouseNumber) Тогда + ОбновитьПредставлениеАдреса(); + КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ДомПриИзменении(Элемент) - ОбновитьИндексИПредставление(); + + НаселенныйПунктДетально.HouseNumber = Дом; + Если ПустаяСтрока(НаселенныйПунктДетально.HouseType) Тогда + НаселенныйПунктДетально.HouseType = ТипДома; + КонецЕсли; + ОбновитьПредставлениеАдреса(); + КонецПроцедуры &НаКлиенте @@ -425,6 +338,7 @@ Если ЗначениеЗаполнено(ВыбранноеЗначение) Тогда СтандартнаяОбработка = Ложь; ЗаполнитьПоляДомовИСтроений(ВыбранноеЗначение); + Элементы.Дом.ОбновитьТекстРедактирования(); КонецЕсли; КонецПроцедуры @@ -439,24 +353,52 @@ &НаКлиенте Процедура ТипСтроенияПриИзменении(Элемент) - Контекст = КонтекстФормыКлиент(); - ЗаполнитьПредставлениеАдреса(Контекст); - КонтекстФормыКлиент(Контекст); + Если НаселенныйПунктДетально.Buildings.Количество() > 0 Тогда + НаселенныйПунктДетально.Buildings[0].Type = ТипСтроения; + КонецЕсли; + + ОбновитьМенюДобавленияСтроенийИПомещений(); + + ОбработкаИзмененияАдреса(); КонецПроцедуры &НаКлиенте Процедура СтроениеПриИзменении(Элемент) - ОбновитьИндексИПредставление(); + + ЭтоНовый = Истина; + Для каждого Помещения Из НаселенныйПунктДетально.Buildings Цикл + Если СтрСравнить(Помещения.Type, ТипСтроения) = 0 Тогда + Помещения.Type = ЭтотОбъект["ТипСтроения"]; + ЭтоНовый = Ложь; + Прервать; + КонецЕсли; + КонецЦикла; + + Если ЭтоНовый Тогда + ИнформацияОСтроении = ЗначениеСтроенияИлиПомещения(ТипСтроения, Строение); + НаселенныйПунктДетально.Buildings.Вставить(0, ИнформацияОСтроении); + ИначеЕсли ПустаяСтрока(ЭтотОбъект[Элемент.Имя]) Тогда + Для ИндексПозиции = 0 По НаселенныйПунктДетально.Buildings.Количество() - 1 Цикл + СведенияОСтроении = НаселенныйПунктДетально.Buildings[ИндексПозиции]; + Если СтрСравнить(СведенияОСтроении.Type, ЭтотОбъект["ТипСтроения"]) =0 Тогда + НаселенныйПунктДетально.Buildings.Удалить(ИндексПозиции); + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + ОбновитьПредставлениеАдреса(); + КонецПроцедуры &НаКлиенте Процедура СтроениеАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) - Если ЗначениеЗаполнено(Текст) + Если ЗначениеЗаполнено(Текст) И (ЗначениеЗаполнено(ЭтотОбъект.ИдентификаторНаселенногоПункта) ИЛИ ЗначениеЗаполнено(ЭтотОбъект.ИдентификаторУлицы)) Тогда - Идентификатор = ?(ЗначениеЗаполнено(ИдентификаторУлицы), + Идентификатор = ?(ЗначениеЗаполнено(ИдентификаторУлицы), ИдентификаторУлицы, ИдентификаторНаселенногоПункта); ДанныеВыбора = СписокАвтоподбораВариантовДомов(Идентификатор, Дом); @@ -467,6 +409,22 @@ КонецПроцедуры +&НаКлиенте +Процедура ТипСтроенияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + + Отбор = Новый Структура("Значение", ВыбранноеЗначение); + НайденныеСтроки = ДополнительныеСтроенияИПомещения.НайтиСтроки(Отбор); + + Если НайденныеСтроки.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Если НайденныеСтроки[0].Видимость = Ложь Тогда + СтандартнаяОбработка = Ложь; + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ТипПомещенияПриИзменении(Элемент) @@ -474,33 +432,101 @@ ЭтотОбъект[Элемент.Имя] = ""; КонецЕсли; - Контекст = КонтекстФормыКлиент(); - ЗаполнитьПредставлениеАдреса(Контекст); - КонтекстФормыКлиент(Контекст); + Если НаселенныйПунктДетально.Apartments.Количество() > 0 Тогда + НаселенныйПунктДетально.Apartments[0].Type = ТипПомещения; + КонецЕсли; + + Если ПустаяСтрока(ЭтотОбъект[Элемент.Имя]) Тогда + УдалитьПомещениеИзАдреса(ЭтотОбъект["ТипПомещения"]); + КонецЕсли; + + ОбновитьМенюДобавленияСтроенийИПомещений(); + + ОбработкаИзмененияАдреса(); КонецПроцедуры &НаКлиенте Процедура ПомещениеПриИзменении(Элемент) - Контекст = КонтекстФормыКлиент(); - ЗаполнитьПредставлениеАдреса(Контекст); - КонтекстФормыКлиент(Контекст); + Если ПустаяСтрока(ЭтотОбъект[Элемент.Имя]) Тогда + УдалитьПомещениеИзАдреса(ЭтотОбъект["ТипПомещения"]); + Иначе + ИнформацияОПомещении = ЗначениеСтроенияИлиПомещения(ТипПомещения, Помещение); + Если НаселенныйПунктДетально.Apartments.Количество() = 0 Тогда + НаселенныйПунктДетально.Apartments.Добавить(ИнформацияОПомещении); + Иначе + НаселенныйПунктДетально.Apartments[0] = ИнформацияОПомещении; + КонецЕсли; + КонецЕсли; + ОбработкаИзмененияАдреса(); + +КонецПроцедуры + +&НаКлиенте +Процедура ТипПомещенияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + + Отбор = Новый Структура("Значение", ВыбранноеЗначение); + НайденныеСтроки = ДополнительныеСтроенияИПомещения.НайтиСтроки(Отбор); + + Если НайденныеСтроки.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Если НайденныеСтроки[0].Видимость = Ложь Тогда + СтандартнаяОбработка = Ложь; + КонецЕсли; КонецПроцедуры &НаКлиенте Процедура НаселенныйПунктПриИзменении(Элемент) - Контекст = КонтекстФормыКлиент(); - ОбработкаИзмененияНаселенногоПунктаСервер(Контекст); - КонтекстФормыКлиент(Контекст); + Если ПустаяСтрока(НаселенныйПункт) Тогда + ОчиститьНаселенныйПункт(); + Возврат; + КонецЕсли; + + Если РаботаСАдресамиКлиентСервер.ЭтоОсновнаяСтрана(Страна) Тогда + ИменаУровнейАдреса = РаботаСАдресамиКлиентСервер.ИменаУровнейАдреса(НаселенныйПунктДетально.AddressType, Ложь); + ИначеЕсли ЭтоСтранаУчастникЕАЭС Тогда + ИменаУровнейАдреса = РаботаСАдресамиКлиентСервер.ИменаУровнейАдреса(УправлениеКонтактнойИнформациейКлиентСервер.АдресЕАЭС(), Ложь); + Иначе + ИменаУровнейАдреса = РаботаСАдресамиКлиентСервер.ИменаУровнейАдреса(УправлениеКонтактнойИнформациейКлиентСервер.ИностранныйАдрес(), Ложь); + КонецЕсли; + + ЭлементыАдреса = СтрРазделить(НаселенныйПункт, ",", Истина); + + Для ИндексАдреса = 0 По ИменаУровнейАдреса.Количество() - 1 Цикл + Если ЭлементыАдреса.Количество() > 0 Тогда + ЗначениеПоля = СокрЛП(ЭлементыАдреса[0]); + Позиция = СтрНайти(ЗначениеПоля, " ", НаправлениеПоиска.СКонца); + Если Позиция > 0 И НЕ РаботаСАдресамиКлиентСервер.ПредставлениеУровняБезСокращения(ИменаУровнейАдреса[ИндексАдреса]) Тогда + НаселенныйПунктДетально[ИменаУровнейАдреса[ИндексАдреса]] = СокрЛП(Лев(ЗначениеПоля, Позиция)); + НаселенныйПунктДетально[ИменаУровнейАдреса[ИндексАдреса] + "Type"] = СокрЛП(Сред(ЗначениеПоля, Позиция +1)); + Иначе + НаселенныйПунктДетально[ИменаУровнейАдреса[ИндексАдреса]] = ЗначениеПоля; + КонецЕсли; + ЭлементыАдреса.Удалить(0); + Иначе + НаселенныйПунктДетально[ИменаУровнейАдреса[ИндексАдреса]] = ""; + КонецЕсли; + КонецЦикла; + + Если ЭлементыАдреса.Количество() > 0 Тогда + НаселенныйПунктДетально[ИменаУровнейАдреса[ИменаУровнейАдреса.Количество() - 1]] = СокрЛП(СтрСоединить(ЭлементыАдреса, ",")); + КонецЕсли; + + ОчиститьИдентификаторыАдреса(); + ОбновитьПредставлениеАдреса(); КонецПроцедуры &НаКлиенте Процедура НаселенныйПунктОчистка(Элемент, СтандартнаяОбработка) - ИдентификаторНаселенногоПункта = Неопределено; + + ОчиститьНаселенныйПункт(); + КонецПроцедуры &НаКлиенте @@ -514,19 +540,27 @@ ИдентификаторНаселенногоПункта = Неопределено; - Контекст = КонтекстФормыКлиент(); - ОбработкаИзмененияНаселенногоПунктаСервер(Контекст, Истина); - КонтекстФормыКлиент(Контекст); КонецЕсли; ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("НаселенныйПунктДетально", НаселенныйПунктДетально); - ПараметрыФормы.Вставить("ИдентификаторНаселенногоПункта", ИдентификаторНаселенногоПункта); - ПараметрыФормы.Вставить("СкрыватьНеактуальныеАдреса", СкрыватьНеактуальныеАдреса); - ПараметрыФормы.Вставить("ФорматАдреса", ВидКонтактнойИнформации.ФорматАдреса); - ПараметрыФормы.Вставить("СервисКлассификатораНедоступен", НЕ ЕстьКлассификатор); + Оповещение = Новый ОписаниеОповещения("ПослеВводаСведенийНаселенногоПункта", ЭтотОбъект); - ОткрытьФорму("Обработка.РасширенныйВводКонтактнойИнформации.Форма.НаселенныйПунктАдреса", ПараметрыФормы, Элемент, , , , , РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + ОткрытьФорму("Обработка.РасширенныйВводКонтактнойИнформации.Форма.НаселенныйПунктАдреса", ПараметрыФормы, Элемент,,,, Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеВводаСведенийНаселенногоПункта(Результат, ДополнительныеПараметры) Экспорт + + Если ТипЗнч(Результат) = Тип("Структура") Тогда + + НаселенныйПунктДетально = Результат; + ОбработкаИзмененияАдреса(); + + Модифицированность = Истина; + + КонецЕсли; КонецПроцедуры @@ -534,92 +568,64 @@ Процедура НаселенныйПунктОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - Если ВыбранноеЗначение=Неопределено Тогда + Если ВыбранноеЗначение = Неопределено Тогда Возврат; КонецЕсли; - Модифицированность = Истина; - ТипЗначения = ТипЗнч(ВыбранноеЗначение); - ФормироватьДетально = Истина; - Если ТипЗначения = Тип("Структура") Тогда - - Если ВыбранноеЗначение.Представление <> НаселенныйПункт Тогда - ИдентификаторУлицы = Неопределено; - КонецЕсли; - - // Результат автоподбора или выбора кнопкой, берем все оттуда. - ИдентификаторНаселенногоПункта = ВыбранноеЗначение.Идентификатор; - НаселенныйПункт = ВыбранноеЗначение.Представление; - - Если ВыбранноеЗначение.Свойство("НаселенныйПунктДетально") Тогда - // Выбор из формы детального ввода. - НаселенныйПунктДетально = ВыбранноеЗначение.НаселенныйПунктДетально; - ФормироватьДетально = Ложь; - Иначе - Если НаселенныйПунктДетально <> Неопределено Тогда - НовыеДанныеПоНаселенномуПунктуДетально = НаселенныйПунктДетальноПоИдентификатору(ИдентификаторНаселенногоПункта, ВидКонтактнойИнформации.ФорматАдреса); - Для каждого ЧастьАдреса Из НовыеДанныеПоНаселенномуПунктуДетально Цикл - Если ЧастьАдреса.Значение.Уровень < 7 Тогда - НаселенныйПунктДетально[ЧастьАдреса.Ключ] = ЧастьАдреса.Значение; - КонецЕсли; - КонецЦикла; - Иначе - НаселенныйПунктДетально = НаселенныйПунктДетальноПоИдентификатору(ИдентификаторНаселенногоПункта, ВидКонтактнойИнформации.ФорматАдреса); - КонецЕсли; - КонецЕсли; - - РегионНеЗагружен = ВыбранноеЗначение.Свойство("РегионЗагружен") И (Не ВыбранноеЗначение.РегионЗагружен); - Если ЕстьПравоЗагружатьКлассификатор И РегионНеЗагружен Тогда - // Предлагаем загрузить классификатор. - ПредложениеЗагрузкиКлассификатора( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Данные для ""%1"" не загружены.'"), ВыбранноеЗначение.Представление), - ВыбранноеЗначение.Представление); - КонецЕсли; - - Иначе - // Иной источник, будет попытка разобрать. - ИдентификаторНаселенногоПункта = Неопределено; - НаселенныйПункт = Строка(ВыбранноеЗначение); + Модифицированность = Истина; + + Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда + НаселенныйПунктУстановитьПоляАдреса(НаселенныйПунктДетально, ВыбранноеЗначение); КонецЕсли; - Элементы.НаселенныйПункт.ОбновитьТекстРедактирования(); - Контекст = КонтекстФормыКлиент(); - // Так как изменился населенный пункт, то перепроверяем улицу, индекс и представление обновятся там. - ОбработкаИзмененияУлицыСервер(Контекст); - КонтекстФормыКлиент(Контекст); - + ОбработкаИзмененияАдреса(); + УстановитьФлагиВМенюПоТипуАдреса(); КонецПроцедуры &НаКлиенте -Процедура НаселенныйПунктАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка) +Процедура УлицаПриИзменении(Элемент) - ДанныеВыбора = Новый СписокЗначений; - Если Ожидание = 0 Тогда - // Формирование списка быстрого выбора, стандартную обработку не надо трогать. - Возврат; - ИначеЕсли НедоступностьСервиса() Тогда + ЧастиАдреса = СтрРазделить(Улица, " "); + Если ЧастиАдреса.Количество() > 1 Тогда + Сокращение = ЧастиАдреса[ЧастиАдреса.Количество() - 1]; + ЧастиАдреса.Удалить(ЧастиАдреса.Количество() - 1); + Иначе + Сокращение = ""; + КонецЕсли; + Наименование = СокрЛП(СтрСоединить(ЧастиАдреса, " ")); + + НаселенныйПунктДетально.Street = Наименование; + НаселенныйПунктДетально.StreetType = Сокращение; + НаселенныйПунктДетально.StreetID = ""; + + ОбновитьПредставлениеАдреса(); + + УстановитьИдентификаторыАдреса(НаселенныйПунктДетально); + +КонецПроцедуры + +&НаКлиенте +Процедура НаселенныйПунктАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) + + Если Не ЕстьКлассификатор И Не ВебСервисИспользуется Тогда Возврат; КонецЕсли; + ДанныеВыбора = Новый СписокЗначений; + ТекстДляАвтоПодбора = СокрЛП(Текст); - Элементы.НаселенныйПункт.ЦветФона = АвтоЦвет; Если СтрДлина(ТекстДляАвтоПодбора) < 3 Тогда // Нет вариантов, список пуст, стандартную обработку не надо трогать. Возврат; КонецЕсли; - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("ФорматАдреса", ВидКонтактнойИнформации.ФорматАдреса); - ДополнительныеПараметры.Вставить("СкрыватьНеактуальные", СкрыватьНеактуальныеАдреса); - - ДанныеКлассификатора = СписокАвтоподбораНаселенногоПункта(ТекстДляАвтоПодбора, ДополнительныеПараметры); - ПроверитьДоступностьКлассификатора(); - Если ДанныеКлассификатора.Отказ Тогда + Результат = СписокАвтоподбораНаселенногоПункта(ТекстДляАвтоПодбора); + Если Результат.Отказ Тогда Возврат; КонецЕсли; - ДанныеВыбора = ДанныеКлассификатора.Данные; + ДанныеВыбора = Результат.Данные; // Стандартную обработку отключаем, только если есть наши варианты. Если ДанныеВыбора.Количество() > 0 Тогда СтандартнаяОбработка = Ложь; @@ -627,33 +633,9 @@ КонецПроцедуры -&НаКлиенте -Процедура НаселенныйПунктОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, СтандартнаяОбработка) - // Выход из поля с текстом, измененным руками. - - Модифицированность = Истина; - - ДанныеВыбора = Новый СписокЗначений; - ДанныеВыбора.Добавить(Текст); - - // Населенный пункт становится недостоверным. - ИдентификаторНаселенногоПункта = Неопределено; - НаселенныйПункт = Текст; - - // Улица становится недостоверной. - ИдентификаторУлицы = Неопределено; - - #Если ВебКлиент Тогда - // Обход особенности платформы. - Контекст = КонтекстФормыКлиент(); - ОбработкаИзмененияНаселенногоПунктаСервер(Контекст); - КонтекстФормыКлиент(Контекст); - #КонецЕсли - -КонецПроцедуры - &НаКлиенте Процедура УлицаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; // Если пришли впрямую после редактирования, то сбрасываем. @@ -661,98 +643,83 @@ Улица = Элемент.ТекстРедактирования; КонецЕсли; + ИдентификаторНаселенногоПункта = РаботаСАдресамиКлиентСервер.ИдентификаторАдреса(НаселенныйПунктДетально, Ложь); + ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("СкрыватьНеактуальныеАдреса", СкрыватьНеактуальныеАдреса); - ПараметрыФормы.Вставить("ФорматАдреса", ВидКонтактнойИнформации.ФорматАдреса); - ПараметрыФормы.Вставить("НаселенныйПунктДетально", НаселенныйПунктДетально); - Если ЗначениеЗаполнено(ИдентификаторНаселенногоПункта) Тогда - ПараметрыФормы.Вставить("ИдентификаторНаселенногоПункта", ИдентификаторНаселенногоПункта); - ПараметрыФормы.Вставить("Улица", Улица); + ПараметрыФормы.Вставить("Родитель", ИдентификаторНаселенногоПункта); + ПараметрыФормы.Вставить("Уровень", 7); + ПараметрыФормы.Вставить("ТипАдреса", НаселенныйПунктДетально.AddressType); + + Оповещение = Новый ОписаниеОповещения("ПослеВыбораУлицы", ЭтотОбъект); + + ОткрытьФорму("Обработка.РасширенныйВводКонтактнойИнформации.Форма.ВыборАдресаПоУровню", ПараметрыФормы, ЭтотОбъект, + ,,, Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеВыбораУлицы(Результат, ДополнительныеПараметры) Экспорт + + Если ТипЗнч(Результат) = Тип("Структура") Тогда + + НаселенныйПунктДетально = ОпределитьАдресПоИдентификатору(Результат); + ОбработкаИзмененияАдреса(); Иначе - // Родитель улицы неопределен, открываем форму в которой ничего нет. - ПараметрыФормы.Вставить("ИдентификаторНаселенногоПункта", -1); - ПараметрыФормы.Вставить("Улица", Улица); - ПараметрыФормы.Вставить("Заголовок", НаселенныйПункт + " " + НСтр("ru = '(не найден)'")); + ТекстПредупреждения = НСтр("ru = 'Выбор из списка недоступен, т.к в адресном классификаторе отсутствует информация о улицах для введенного адреса.'"); КонецЕсли; - НачалоВыбораУлицы(Элемент, ИдентификаторНаселенногоПункта, Улица, ПараметрыФормы); КонецПроцедуры &НаКлиенте Процедура УлицаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + Если Страна <> ОсновнаяСтрана Тогда + Возврат; + КонецЕсли; + СтандартнаяОбработка = Ложь; Если ВыбранноеЗначение = Неопределено Тогда Возврат; КонецЕсли; - Если ВыбранноеЗначение.Свойство("Отказ") И ВыбранноеЗначение.Отказ = Истина Тогда - Если НЕ ПустаяСтрока(ВыбранноеЗначение.КраткоеПредставлениеОшибки) Тогда - ПоказатьПредупреждение(, ВыбранноеЗначение.КраткоеПредставлениеОшибки); - КонецЕсли; - Возврат; - КонецЕсли; - Модифицированность = Истина; - ТипВыбора = ТипЗнч(ВыбранноеЗначение); - Если ТипВыбора = Тип("Структура") Тогда - Если ВыбранноеЗначение.Свойство("НаселенныйПунктДетально") Тогда - // Результат автоподбора или выбора кнопкой, берем все оттуда. - НаселенныйПунктДетально = ВыбранноеЗначение.НаселенныйПунктДетально; - Иначе - НаселенныйПунктДетально.Улица.Представление = ВыбранноеЗначение.Улица; - НаселенныйПунктДетально.ДополнительныйЭлемент.Представление = ВыбранноеЗначение.ДополнительныйЭлемент; - Если ЗначениеЗаполнено(ВыбранноеЗначение.ДополнительныйЭлемент) Тогда - НаименованиеСокращение = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(ВыбранноеЗначение.ДополнительныйЭлемент); - НаселенныйПунктДетально.ДополнительныйЭлемент.ПутьXPath = РаботаСАдресамиКлиентСервер.XPathДополнительногоОбъектаАдресации(90, НаименованиеСокращение.Сокращение); - КонецЕсли; - НаселенныйПунктДетально.ПодчиненныйЭлемент.Представление = ВыбранноеЗначение.ПодчиненныйЭлемент; - НаселенныйПунктДетально.Улица.Идентификатор = ВыбранноеЗначение.Идентификатор; - КонецЕсли; - Улица = ВыбранноеЗначение.Представление; - ИдентификаторУлицы = ВыбранноеЗначение.Идентификатор; - Иначе - // Иной источник, будет попытка разобрать. - ИдентификаторУлицы = Неопределено; - Улица = Строка(ВыбранноеЗначение); - КонецЕсли; + ТипЗначения = ТипЗнч(ВыбранноеЗначение); + Если ТипЗначения = Тип("УникальныйИдентификатор") Тогда + СведенияОбАдресе = Новый Структура("Идентификатор", ВыбранноеЗначение); + ИначеЕсли ТипЗначения = Тип("Структура") Тогда + СведенияОбАдресе = ВыбранноеЗначение; + КонецЕсли; + СведенияОбАдресе.Вставить("Муниципальный", РаботаСАдресамиКлиентСервер.ЭтоМуниципальныйАдрес(НаселенныйПунктДетально.addressType)); + + НаселенныйПунктДетально = ОпределитьАдресПоИдентификатору(СведенияОбАдресе); + ОбработкаИзмененияАдреса(); Элементы.Улица.ОбновитьТекстРедактирования(); - Контекст = КонтекстФормыКлиент(); - УстановитьИндексИПредставление(Контекст); - КонтекстФормыКлиент(Контекст); КонецПроцедуры &НаКлиенте Процедура УлицаАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка) - ДанныеВыбора = Новый СписокЗначений; - Если Ожидание = 0 Тогда - // Формирование списка быстрого выбора, стандартную обработку не надо трогать. - Возврат; - ИначеЕсли НедоступностьСервиса() Тогда + Если Не ЕстьКлассификатор И Не ВебСервисИспользуется Тогда Возврат; КонецЕсли; - Элементы.Улица.ЦветФона = АвтоЦвет; - Если СтрДлина(Текст) < 3 Или Не ЗначениеЗаполнено(ИдентификаторНаселенногоПункта)Тогда + ДанныеВыбора = Новый СписокЗначений; + + ИдентификаторНаселенногоПункта = РаботаСАдресамиКлиентСервер.ИдентификаторАдреса(НаселенныйПунктДетально, Ложь); + Если СтрДлина(Текст) < 2 Или Не ЗначениеЗаполнено(ИдентификаторНаселенногоПункта)Тогда // Нет вариантов, список пуст, стандартную обработку не надо трогать. Возврат; КонецЕсли; ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("ФорматАдреса", ВидКонтактнойИнформации.ФорматАдреса); - ДополнительныеПараметры.Вставить("СкрыватьНеактуальные", СкрыватьНеактуальныеАдреса); + ДополнительныеПараметры.Вставить("Идентификатор", ИдентификаторНаселенногоПункта); + ДополнительныеПараметры.Вставить("ТипАдреса", НаселенныйПунктДетально.AddressType); + ДополнительныеПараметры.Вставить("Уровень", 7); - ДанныеКлассификатора = СписокАвтоподбораУлицы(ИдентификаторНаселенногоПункта, Текст, ДополнительныеПараметры); - ПроверитьДоступностьКлассификатора(); - Если ДанныеКлассификатора.Отказ Тогда - Возврат; - КонецЕсли; - - ДанныеВыбора = ДанныеКлассификатора.Данные; + ДанныеВыбора = СписокАвтоподбораУлицы(Текст, ДополнительныеПараметры); // Стандартную обработку отключаем, только если есть наши варианты. Если ДанныеВыбора.Количество() > 0 Тогда @@ -761,169 +728,41 @@ КонецПроцедуры -&НаКлиенте -Процедура УлицаОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, СтандартнаяОбработка) - // Выход из поля с текстом, измененным руками. - Модифицированность = Истина; - - ДанныеВыбора = Новый СписокЗначений; - ДанныеВыбора.Добавить(Текст); - Улица = Текст; - - // Улица становится непроверенной. - ИдентификаторУлицы = Неопределено; - - Контекст = КонтекстФормыКлиент(); - ОбработкаИзмененияУлицыСервер(Контекст); - КонтекстФормыКлиент(Контекст); - -КонецПроцедуры - &НаКлиенте Процедура УлицаОчистка(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - // Улица становится непроверенной. - ИдентификаторУлицы = Неопределено; + НаселенныйПунктДетально.StreetID = ""; + НаселенныйПунктДетально.Street = ""; + НаселенныйПунктДетально.StreetType = ""; Улица = ""; - Для каждого ЭлементАдреса Из НаселенныйПунктДетально Цикл - Если ЭлементАдреса.Значение.Уровень > 6 Тогда - ЭлементАдреса.Значение.Представление = ""; - ЭлементАдреса.Значение.Идентификатор = Неопределено; - КонецЕсли; - КонецЦикла; - Контекст = КонтекстФормыКлиент(); - ОбработкаИзмененияУлицыСервер(Контекст); - КонтекстФормыКлиент(Контекст); - -КонецПроцедуры - -&НаКлиенте -Процедура ПредставлениеАдресаПриИзменении(Элемент) - ПредставлениеАдресаИзменено = Истина; - ПредставлениеАдресаПриИзмененииСервер(); КонецПроцедуры &НаКлиенте Процедура ПредставлениеИностранногоАдресаПриИзменении(Элемент) - ПредставлениеАдресаИзменено = Истина; - ПредставлениеАдресаПриИзмененииСервер(); + + НаселенныйПунктДетально.Value = ПредставлениеАдреса; + КонецПроцедуры +// Дом, помещения + &НаКлиенте Процедура ДомАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) + + Если Не ЕстьКлассификатор И Не ВебСервисИспользуется Тогда + Возврат; + КонецЕсли; + Если ЗначениеЗаполнено(Текст) Тогда - Идентификатор = ?(ЗначениеЗаполнено(Улица), ИдентификаторУлицы, ИдентификаторНаселенногоПункта); + Идентификатор = РаботаСАдресамиКлиентСервер.ИдентификаторАдреса(НаселенныйПунктДетально, Истина); Если ЗначениеЗаполнено(Идентификатор) Тогда ДанныеВыбора = СписокАвтоподбораВариантовДомов(Идентификатор, Текст + "%"); СтандартнаяОбработка = (ДанныеВыбора.Количество() = 0); КонецЕсли; КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура НаселенныйПунктИностранныйАдресаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; - // Если пришли впрямую после редактирования, то сбрасываем адрес. - Если Элемент.ТекстРедактирования <> НаселенныйПункт Тогда - Модифицированность = Истина; - НаселенныйПункт = Элемент.ТекстРедактирования; - - ИдентификаторНаселенногоПункта = Неопределено; - ОбновитьНаселенныйПунктИностранногоАдреса(); - КонецЕсли; - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("НаселенныйПунктДетально", НаселенныйПунктДетально); - ПараметрыФормы.Вставить("ФорматАдреса","КЛАДР"); - ПараметрыФормы.Вставить("СервисКлассификатораНедоступен", Истина); - ОткрытьФорму("Обработка.РасширенныйВводКонтактнойИнформации.Форма.НаселенныйПунктАдреса", ПараметрыФормы, Элемент, , , , , РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); -КонецПроцедуры - -&НаКлиенте -Процедура НаселенныйПунктИностранныйАдресаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - Если ВыбранноеЗначение=Неопределено Тогда - Возврат; - КонецЕсли; - - Модифицированность = Истина; - ТипЗначения = ТипЗнч(ВыбранноеЗначение); - - ФормироватьДетально = Истина; - - Если ТипЗначения = Тип("Структура") Тогда - - НаселенныйПункт = ВыбранноеЗначение.Представление; - - Если ВыбранноеЗначение.Свойство("НаселенныйПунктДетально") Тогда - // Выбор из формы детального ввода. - НаселенныйПунктДетально = ВыбранноеЗначение.НаселенныйПунктДетально; - ФормироватьДетально = Ложь; - Иначе - Если НаселенныйПунктДетально <> Неопределено Тогда - НовыеДанныеПоНаселенномуПунктуДетально = НаселенныйПунктДетальноПоИдентификатору(ИдентификаторНаселенногоПункта, ВидКонтактнойИнформации.ФорматАдреса); - Для каждого ЧастьАдреса Из НовыеДанныеПоНаселенномуПунктуДетально Цикл - Если ЧастьАдреса.Значение.Уровень < 7 Тогда - НаселенныйПунктДетально[ЧастьАдреса.Ключ] = ЧастьАдреса.Значение; - КонецЕсли; - КонецЦикла; - Иначе - НаселенныйПунктДетально = НаселенныйПунктДетальноПоИдентификатору(ИдентификаторНаселенногоПункта, ВидКонтактнойИнформации.ФорматАдреса); - КонецЕсли; - КонецЕсли; - - РегионНеЗагружен = ВыбранноеЗначение.Свойство("РегионЗагружен") И (Не ВыбранноеЗначение.РегионЗагружен); - Если ЕстьПравоЗагружатьКлассификатор И РегионНеЗагружен Тогда - // Предлагаем загрузить классификатор. - ПредложениеЗагрузкиКлассификатора( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Данные для ""%1"" не загружены.'"), ВыбранноеЗначение.Представление), - ВыбранноеЗначение.Представление); - КонецЕсли; - - Иначе - // Иной источник, будет попытка разобрать. - НаселенныйПункт = Строка(ВыбранноеЗначение); - КонецЕсли; - - Контекст = КонтекстФормыКлиент(); - // Так как изменился населенный пункт, то перепроверяем улицу, индекс и представление обновятся там. - ЗаполнитьПредставлениеАдреса(Контекст); - КонтекстФормыКлиент(Контекст); - -КонецПроцедуры - -&НаКлиенте -Процедура НаселенныйПунктИностранныйАдресаПриИзменении(Элемент) - - ОбновитьНаселенныйПунктИностранногоАдреса(); - -КонецПроцедуры - -&НаКлиенте -Процедура УлицаИностранныйАдресаПриИзменении(Элемент) - Контекст = КонтекстФормыКлиент(); - ЗаполнитьПредставлениеАдреса(Контекст); - КонтекстФормыКлиент(Контекст); - -КонецПроцедуры - -&НаКлиенте -Процедура ДомИностранныйАдресаПриИзменении(Элемент) - ОбновитьПредставлениеАдреса(); -КонецПроцедуры - -&НаКлиенте -Процедура СтроениеИностранныйАдресаПриИзменении(Элемент) - ОбновитьПредставлениеАдреса(); -КонецПроцедуры - -&НаКлиенте -Процедура ПомещениеИностранныйАдресаПриИзменении(Элемент) - ОбновитьПредставлениеАдреса(); КонецПроцедуры &НаКлиенте @@ -937,26 +776,23 @@ Процедура АдресНаДатуПриИзменении(Элемент) Если Не ВводНовогоАдреса Тогда + Отбор = Новый Структура("Вид", ВидКонтактнойИнформации.Ссылка); НайденныеСтроки = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор); Результат = ОпределитьДатуДействия(АдресНаДату, НайденныеСтроки); - Контекст = КонтекстФормыКлиент(); - Если Результат.ТекущаяСтрока <> Неопределено Тогда - ЗначенияПолей = Результат.ТекущаяСтрока.ЗначенияПолей; Тип = Результат.ТекущаяСтрока.Тип; АдресДействуетС = Результат.ДействуетС; + НаселенныйПунктДетально = АдресСИсторией(Результат.ТекущаяСтрока.Значение); Иначе - ЗначенияПолей = ""; Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес"); АдресДействуетС = АдресНаДату; + НаселенныйПунктДетально = РаботаСАдресамиКлиентСервер.ОписаниеНовойКонтактнойИнформации(Тип); КонецЕсли; - ПерезаполнитьФормуВводаАдреса(Контекст, ЗначенияПолей, Тип, ОсновнаяСтрана); - КонтекстФормыКлиент(Контекст); - ОтобразитьДополнительныеЗданияИПомещения(); - + ОбработкаИзмененияАдреса(); + Если ЗначениеЗаполнено(Результат.ДействуетПо) Тогда ТекстИсторическийАдрес = " " + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'действует по %1'"), Формат(Результат.ДействуетПо - 10, "ДЛФ=DD")); Иначе @@ -972,6 +808,13 @@ КонецПроцедуры +&НаСервереБезКонтекста +Функция АдресСИсторией(ЗначенияПолей) + + Возврат УправлениеКонтактнойИнформациейСлужебный.СтрокаJSONВСтруктуру(ЗначенияПолей); + +КонецФункции + #КонецОбласти #Область ОбработчикиКомандФормы @@ -998,8 +841,7 @@ ПредупреждатьОбОтсутствииОшибок = Истина; ТребуетсяОбновление = Ложь; - Контекст = КонтекстФормыКлиент(); - СписокОшибок = СписокОшибокЗаполнения(Контекст, ПредупреждатьОбОтсутствииОшибок, ТребуетсяОбновление); + СписокОшибок = СписокОшибокЗаполнения(НаселенныйПунктДетально, ВидКонтактнойИнформации, ПредупреждатьОбОтсутствииОшибок, ТребуетсяОбновление); СообщитьОбОшибкахЗаполнения(СписокОшибок, ПредупреждатьОбОтсутствииОшибок, ТребуетсяОбновление); КонецПроцедуры @@ -1008,6 +850,7 @@ Процедура ОчиститьАдрес(Команда) ОчиститьАдресКлиент(); + ОбработкаИзмененияАдреса(); Модифицированность = Истина; КонецПроцедуры @@ -1015,10 +858,8 @@ &НаКлиенте Процедура ЗаполнитьПоПочтовомуИндексу(Команда) - Если ЕстьКлассификатор И Не ПустаяСтрока(Индекс) Тогда - ПараметрыФормы = Новый Структура("Индекс, СкрыватьНеактуальныеАдреса", СокрЛП(Индекс), СкрыватьНеактуальныеАдреса); - Оповещение = Новый ОписаниеОповещения("ПослеВыбораАдресаПоИндексу", ЭтотОбъект); - ОткрытьФорму("Обработка.РасширенныйВводКонтактнойИнформации.Форма.ВыборАдресаПоПочтовомуИндексу", ПараметрыФормы, Элементы.Индекс,,,, Оповещение); + Если ЕстьКлассификатор И СтрДлина(Индекс) = 6 Тогда + ФормаВыбораУлицПоИндексу(Индекс); КонецЕсли; КонецПроцедуры @@ -1026,41 +867,88 @@ &НаКлиенте Процедура ЗагрузитьКлассификатор(Команда) - СведенияОРегионе = СведенияОРегионе(НаселенныйПунктДетально.Регион.Представление); - ДополнительныеПараметры = Новый Структура("КодРегионаДляЗагрузки", СведенияОРегионе.КодСубъектаРФ); + ДополнительныеПараметры = Новый Структура(); + + Если ТипЗнч(НаселенныйПунктДетально) = Тип("Структура") И НаселенныйПунктДетально.Свойство("Area") Тогда + СведенияОРегионе = СведенияОРегионе(НаселенныйПунктДетально.Area + " " + НаселенныйПунктДетально.AreaType); + ДополнительныеПараметры.Вставить("КодРегионаДляЗагрузки", СведенияОРегионе.КодСубъектаРФ); + КонецЕсли; ЗагрузитьАдресныйКлассификатор(ДополнительныеПараметры); КонецПроцедуры -&НаКлиенте -Процедура ДобавитьОбъект(Команда) - Варианты = НеиспользованныеЭлементыДополнительнойТаблицы(ДополнительныеЗдания, Элементы.ТипСтроения, 1); - Для Каждого ЭлементОбъект Из НеиспользованныеЭлементыДополнительнойТаблицы(ДополнительныеПомещения, Элементы.ТипПомещения, 2) Цикл - ЗаполнитьЗначенияСвойств(Варианты.Добавить(), ЭлементОбъект); - КонецЦикла; - - КоличествоВариантов = Варианты.Количество(); - Если КоличествоВариантов > 0 Тогда - ДополнительныеПараметры = Новый Структура("КоличествоВариантов", КоличествоВариантов); - Оповещение = Новый ОписаниеОповещения("ДобавитьОбъектЗавершение", ЭтотОбъект, ДополнительныеПараметры); - ПоказатьВыборИзМеню(Оповещение, Варианты, Элементы.ДобавитьОбъект); - КонецЕсли; -КонецПроцедуры - &НаКлиенте Процедура ВвестиАдресВСвободнойФорме(Команда) - Если РазрешитьВводАдресаВСвободнойФорме Тогда - ТекстВопроса = НСтр("ru='Изменения, введенные вручную, будут потеряны. - |Исходный адрес будет перемещен в комментарий. - |Продолжить?'"); + Если Элементы.АдресПредставлениеКомментарий.ТекущаяСтраница = Элементы.НациональныйАдрес Тогда + ПоказатьАдресВСвободнойФорме(); Иначе - ТекстВопроса = НСтр("ru='Ввести адрес в свободной форме? - |Адреса, введенные в свободной форме, могут не пройти проверку по адресному классификатору.'"); + Элементы.АдресПредставлениеКомментарий.ТекущаяСтраница = Элементы.НациональныйАдрес; + Элементы.АдресВСвободнойФорме.Пометка = Ложь; + + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(НаселенныйПунктДетально.AddressType) Тогда + + Если РаботаСАдресамиКлиентСервер.ЭтоОсновнаяСтрана(Страна) Тогда + // Попытка восстановить адрес по полям из представления. + НаселенныйПунктДетально = КонтактнаяИнформацияПоПредставлению(ПредставлениеАдреса); + Иначе + + ЧастиАдреса = СтрРазделить(ПредставлениеАдреса, ","); + Если СтрСравнить(Страна, ЧастиАдреса[0]) = 0 Тогда + ЧастиАдреса.Удалить(0); + КонецЕсли; + + Если ЧастиАдреса.Количество() > 1 Тогда + ЧастьУлица = СокрЛП(ЧастиАдреса[ЧастиАдреса.Количество() - 1]); + ЧастиАдреса.Удалить(ЧастиАдреса.Количество() - 1); + Иначе + ЧастьУлица = ""; + КонецЕсли; + + ЧастьГород = СокрЛП(?(ЧастиАдреса.Количество() > 0, СтрСоединить(ЧастиАдреса, ","), "")); + + Если ЭтоСтранаУчастникЕАЭС(НаселенныйПунктДетально.Country) Тогда + НаселенныйПунктДетально.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.АдресЕАЭС(); + НаселенныйПунктДетально.Area = ЧастьГород; + Иначе + НаселенныйПунктДетально.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.ИностранныйАдрес(); + НаселенныйПунктДетально.City = ЧастьГород; + КонецЕсли; + НаселенныйПунктДетально.Street = ЧастьУлица; + КонецЕсли; + + КонецЕсли; + + ОтобразитьВыданныйТипАдреса(НаселенныйПунктДетально.AddressType); КонецЕсли; - Оповещение = Новый ОписаниеОповещения("ВвестиАдресВСвободнойФормеЗавершение", ЭтотОбъект); - ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет, , , НСтр("ru='Подтверждение'")); +КонецПроцедуры + +&НаСервереБезКонтекста +Функция КонтактнаяИнформацияПоПредставлению(ПредставлениеАдреса) + + Адрес = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияПоПредставлению(ПредставлениеАдреса, Перечисления.ТипыКонтактнойИнформации.Адрес); + Возврат Адрес; + +КонецФункции + +&НаКлиенте +Процедура ПоказатьАдресВСвободнойФорме() + + ОчиститьАдресКлиент(); + НаселенныйПунктДетально.Value = ПредставлениеАдреса; + НаселенныйПунктДетально.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.АдресВСвободнойФорме(); + НаселенныйПунктДетально.Comment = Комментарий; + НаселенныйПунктДетально.Country = Строка(Страна); + + Элементы.АдресПредставлениеКомментарий.ТекущаяСтраница = Элементы.ВСвободнойФорме; + Элементы.АдресВСвободнойФорме.Пометка = Истина; + Элементы.АдминистративноТерриториальноеДеление.Пометка = Ложь; + Элементы.МуниципальноеДеление.Пометка = Ложь; + НаселенныйПунктДетально.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.АдресВСвободнойФорме(); + + ПоказатьПодсказкуПоТипАдреса(); + КонецПроцедуры &НаКлиенте @@ -1088,10 +976,9 @@ Процедура ИсторияИзменений(Команда) ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("Контекст", КонтекстФормыКлиент()); ОписаниеДополнительныхРеквизитов = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов; - СписокКонтактнойИнформации = ЗаполнитьСписокКонтактнойИнформации(ВидКонтактнойИнформации.Ссылка, ОписаниеДополнительныхРеквизитов, ДополнительныеПараметры.Контекст); + СписокКонтактнойИнформации = ЗаполнитьСписокКонтактнойИнформации(ВидКонтактнойИнформации.Ссылка, ОписаниеДополнительныхРеквизитов); ПараметрыФормы = Новый Структура("СписокКонтактнойИнформации", СписокКонтактнойИнформации); ПараметрыФормы.Вставить("ВидКонтактнойИнформации", ВидКонтактнойИнформации.Ссылка); @@ -1117,6 +1004,7 @@ &НаКлиенте Процедура АдресныйКлассификаторУстарел(Команда) + СообщениеОПроверкеАдреса = НСтр("ru='Адресные сведения ФИАС, загруженные в программу, устарели. |Рекомендуется выполнить обновление, чтобы проверка адреса выполнялась корректно.'"); Если ЕстьПравоЗагружатьКлассификатор Тогда @@ -1128,14 +1016,240 @@ КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура АдминистративноТерриториальноеДеление(Команда) + + ОтобразитьВыданныйТипАдреса(РаботаСАдресамиКлиентСервер.АдминистративноТерриториальныйАдрес()); + +КонецПроцедуры + +&НаКлиенте +Процедура МуниципальноеДеление(Команда) + + ОтобразитьВыданныйТипАдреса(РаботаСАдресамиКлиентСервер.МуниципальныйАдрес()); + +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьКомментарий(Команда) + Элементы.ОсновныеСтраницы.ОтображениеСтраниц = ОтображениеСтраницФормы.ЗакладкиСверху; + Элементы.ОсновныеСтраницы.ТекущаяСтраница = Элементы.СтраницаКомментарий; +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ДобавитьСтроениеИлиПомещение(Команда) + + ТипСтроенияИлиПомещения = СтрРазделить(Команда.Имя, "_")[1]; + + Отбор = Новый Структура("Ключ", ТипСтроенияИлиПомещения); + НайденныеСтроки = ДополнительныеСтроенияИПомещения.НайтиСтроки(Отбор); + Если НайденныеСтроки.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + НайденныеСтроки[0].Видимость = Ложь; + + Идентификатор = СтрЗаменить(Новый УникальныйИдентификатор(),"-", ""); + ИмяТекущего = ДобавитьПолеСтроенияИлиПомещения(Идентификатор, НайденныеСтроки[0].Тип, + НайденныеСтроки[0].Значение); + + Если ИмяТекущего <> Неопределено Тогда + ТекущийЭлемент = Элементы[ИмяТекущего]; + КонецЕсли; + + ОбновитьМенюДобавленияСтроенийИПомещений(); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции +&НаКлиенте +Процедура ФормаВыбораУлицПоИндексу(Знач Текст) + + Модифицированность = Истина; + Индекс = Текст; + Если ЕстьКлассификатор Или ВебСервисИспользуется Тогда + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Индекс", СокрЛП(Текст)); + ПараметрыФормы.Вставить("ВыборАдресаПоПочтовомуИндексу", Истина); + + Оповещение = Новый ОписаниеОповещения("ПослеВыбораАдресаПоИндексу", ЭтотОбъект); + ОткрытьФорму("Обработка.РасширенныйВводКонтактнойИнформации.Форма.ВыборАдресаПоПочтовомуИндексу", ПараметрыФормы, Элементы.Индекс,,,, Оповещение); + Иначе + ОбновитьПредставлениеАдреса(); + КонецЕсли; + +КонецПроцедуры + + +&НаКлиенте +Процедура ОчиститьНаселенныйПункт() + + ИдентификаторНаселенногоПункта = Неопределено; + + УровниАдреса = РаботаСАдресамиКлиентСервер.ИменаУровнейАдреса(НаселенныйПунктДетально.AddressType, Ложь); + Для каждого ИмяУровня Из УровниАдреса Цикл + Если НаселенныйПунктДетально.Свойство(ИмяУровня) Тогда + НаселенныйПунктДетально[ИмяУровня] = ""; + НаселенныйПунктДетально[ИмяУровня + "Type"] = ""; + НаселенныйПунктДетально[ИмяУровня + "Id"] = ""; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура ОтобразитьЭлементыФормыВСоответствиеСоСтраной() + + Если Не УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(НаселенныйПунктДетально.AddressType) Тогда + + КоличествоПолейПредыдущийТипАдреса = РаботаСАдресамиКлиентСервер.ИменаУровнейАдреса(НаселенныйПунктДетально.AddressType, Ложь).Количество(); + + ПереопределитьТипаАдресаПоСтране(Страна, НаселенныйПунктДетально); + + КоличествоПолейНовыйТипАдреса = РаботаСАдресамиКлиентСервер.ИменаУровнейАдреса(НаселенныйПунктДетально.AddressType, Ложь).Количество(); + Если КоличествоПолейПредыдущийТипАдреса > КоличествоПолейНовыйТипАдреса Тогда + ПеренестиЗначенияПолейАдресВПоляНовогоТипа(); + КонецЕсли; + + КонецЕсли; + + ОтобразитьПоляПоТипуАдреса(); + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Процедура ПереопределитьТипаАдресаПоСтране(Страна, НаселенныйПунктДетально) + + Если РаботаСАдресамиКлиентСервер.ЭтоОсновнаяСтрана(Страна) Тогда + НаселенныйПунктДетально.AddressType = РаботаСАдресамиКлиентСервер.МуниципальныйАдрес(); + ИначеЕсли ЭтоСтранаУчастникЕАЭС(Страна) Тогда + НаселенныйПунктДетально.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.АдресЕАЭС(); + Иначе + НаселенныйПунктДетально.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.ИностранныйАдрес(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьСтрану(ПредставлениеСтраны) + + Если ЗначениеЗаполнено(ПредставлениеСтраны) Тогда + Страна = ОпределитьСтрануПоНаименованию(ПредставлениеСтраны); + КонецЕсли; + + ОтобразитьЭлементыФормыВСоответствиеСоСтраной(); + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ОпределитьСтрануПоНаименованию(Страна) + Возврат УправлениеКонтактнойИнформацией.ДанныеСтраныМира(, Страна).Ссылка; +КонецФункции + +&НаКлиенте +Процедура ПеренестиЗначенияПолейАдресВПоляНовогоТипа() + + ИменаВсехУровней = РаботаСАдресамиКлиентСервер.ИменаУровнейАдреса("Все", Ложь); + СведенияАдреса = Новый Массив; + Для каждого ИмяУровня Из ИменаВсехУровней Цикл + Если НаселенныйПунктДетально.Свойство(ИмяУровня) И ЗначениеЗаполнено(НаселенныйПунктДетально[ИмяУровня]) Тогда + Сведения = Новый Структура("Наименование, Сокращение, Представление"); + Сведения.Наименование = НаселенныйПунктДетально[ИмяУровня]; + Сведения.Сокращение = НаселенныйПунктДетально[ИмяУровня + "Type"]; + Сведения.Представление = СокрЛП(Сведения.Наименование + " " + Сведения.Сокращение); + СведенияАдреса.Добавить(Сведения); + + НаселенныйПунктДетально[ИмяУровня] = ""; + НаселенныйПунктДетально[ИмяУровня + "Type"] = ""; + КонецЕсли; + КонецЦикла; + + ИменаУровнейНовогоТипа = РаботаСАдресамиКлиентСервер.ИменаУровнейАдреса(НаселенныйПунктДетально.AddressType, Ложь); + ИмяУровня = ИменаУровнейНовогоТипа.Получить(0); + Разделитель = ""; + Для Счетчик = 0 По СведенияАдреса.Количество() - 1 Цикл + + Если ИменаУровнейНовогоТипа.Количество() > Счетчик + 1 Тогда + ИмяУровня = ИменаУровнейНовогоТипа.Получить(Счетчик); + НаселенныйПунктДетально[ИмяУровня] = СведенияАдреса.Получить(Счетчик).Наименование; + НаселенныйПунктДетально[ИмяУровня + "Type"] = СведенияАдреса.Получить(Счетчик).Сокращение; + Иначе + НаселенныйПунктДетально[ИмяУровня] = НаселенныйПунктДетально[ИмяУровня] + Разделитель + СведенияАдреса.Получить(Счетчик).Представление; + Разделитель = ", "; + КонецЕсли; + + КонецЦикла; + + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоИностранныйАдрес(НаселенныйПунктДетально.AddressType) + И НаселенныйПунктДетально.Свойство("Street") Тогда + + СписокЭлементовАдреса = Новый Массив; + + СписокЭлементовАдреса.Добавить(СокрЛП(НаселенныйПунктДетально["Street"] + " " + НаселенныйПунктДетально["StreetType"])); + НаселенныйПунктДетально["StreetType"] = ""; // В иностранном адресе нет сокращений. + + Если НаселенныйПунктДетально.Свойство("HouseNumber") И ЗначениеЗаполнено(НаселенныйПунктДетально["HouseType"]) Тогда + СписокЭлементовАдреса.Добавить(СокрЛП(НаселенныйПунктДетально["HouseType"] + " №" + НаселенныйПунктДетально["HouseNumber"])); + НаселенныйПунктДетально["HouseNumber"] = ""; + НаселенныйПунктДетально["HouseType"] = ""; + КонецЕсли; + + Если НаселенныйПунктДетально.Свойство("Buildings") И ТипЗнч(НаселенныйПунктДетально["Buildings"]) = Тип("Массив") Тогда + Для каждого СтроениеВАдресе Из НаселенныйПунктДетально["Buildings"] Цикл + СписокЭлементовАдреса.Добавить(СокрЛП(СтроениеВАдресе["Type"] + " " + СтроениеВАдресе["Number"])); + КонецЦикла; + НаселенныйПунктДетально["Buildings"] = Новый Массив; + КонецЕсли; + + Если НаселенныйПунктДетально.Свойство("Apartments") И ТипЗнч(НаселенныйПунктДетально["Apartments"]) = Тип("Массив") Тогда + Для каждого ПомещениеВАдресе Из НаселенныйПунктДетально["Apartments"] Цикл + СписокЭлементовАдреса.Добавить(СокрЛП(ПомещениеВАдресе["Type"] + " " + ПомещениеВАдресе["Number"])); + КонецЦикла; + НаселенныйПунктДетально["Apartments"] = Новый Массив; + КонецЕсли; + + НаселенныйПунктДетально["Street"] = СтрСоединить(СписокЭлементовАдреса, ", "); + Улица = НаселенныйПунктДетально["Street"]; + + КонецЕсли; + +КонецПроцедуры + + +&НаКлиенте +Процедура ОтобразитьВыданныйТипАдреса(ВыбранныйТипАдреса) + + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(НаселенныйПунктДетально.AddressType) + И ПустаяСтрока(НаселенныйПунктДетально.Area) Тогда + + Если РаботаСАдресамиКлиентСервер.ЭтоОсновнаяСтрана(Страна) Тогда + // Попытка восстановить адрес по полям из представления. + НаселенныйПунктДетально = КонтактнаяИнформацияПоПредставлению(ПредставлениеАдреса); + Иначе + НаселенныйПунктДетально.Street = ПредставлениеАдреса; + КонецЕсли; + + КонецЕсли; + + НаселенныйПунктДетально.AddressType = ВыбранныйТипАдреса; + ОбработкаИзмененияАдреса(); + + Если Элементы.АдресПредставлениеКомментарий.ТекущаяСтраница = Элементы.ВСвободнойФорме Тогда + Элементы.АдресПредставлениеКомментарий.ТекущаяСтраница = Элементы.НациональныйАдрес; + КонецЕсли; + + УстановитьФлагиВМенюПоТипуАдреса(); + ПоказатьПодсказкуПоТипАдреса(); + +КонецПроцедуры + &НаКлиенте Процедура ПоказатьСписокДомов(ВключитьОтбор) - Идентификатор = ?(ЗначениеЗаполнено(Улица), ИдентификаторУлицы, ИдентификаторНаселенногоПункта); + Идентификатор = РаботаСАдресамиКлиентСервер.ИдентификаторАдреса(НаселенныйПунктДетально, Истина); Если ЗначениеЗаполнено(Идентификатор) И ЕстьСписокДомов(Идентификатор) Тогда ПараметрыФормы = Новый Структура("Идентификатор, Дом, Строение", Идентификатор, Дом, Строение); @@ -1169,32 +1283,22 @@ Процедура ВыбранДома(Результат, ДополнительныеПараметры) Экспорт Если Результат <> Неопределено Тогда - Ответ = Новый Структура; - Если Результат.Свойство("Дом") Тогда - Ответ.Вставить("Дом", Результат.Дом); - КонецЕсли; - Если Результат.Свойство("Корпус") Тогда - Ответ.Вставить("Корпус", Результат.Корпус); - КонецЕсли; - Если Результат.Свойство("Строение") Тогда - Ответ.Вставить("Строение", Результат.Строение); - КонецЕсли; - - ЗаполнитьПоляДомовИСтроений(Ответ); + ЗаполнитьПоляДомовИСтроений(Результат); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура УстановитьПиктограммуКомментария() - Элементы.АдресСтраницаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Комментарий); + Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Комментарий); КонецПроцедуры &НаКлиенте Процедура ПодтвердитьИЗакрыть(Результат = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт Если Модифицированность Тогда // При немодифицированности работает как "отмена". - Контекст = КонтекстФормыКлиент(); + Контекст = Новый Структура("ВидКонтактнойИнформации, НаселенныйПунктДетально, ОсновнаяСтрана, Страна"); + ЗаполнитьЗначенияСвойств(Контекст, ЭтотОбъект); Результат = РезультатаВыбораПоОбновлениюФлагов(Контекст, ВозвращатьСписокЗначений); // Флаги вида были прочитаны заново. @@ -1228,22 +1332,6 @@ #КонецЕсли СохранитьСостояниеФормы(); - ИначеЕсли Комментарий <> КопияКомментария Тогда - // Изменен только комментарий, пробуем вернуть обновленное. - Результат = РезультатВыбораТолькоКомментария(Параметры.ЗначенияПолей, Параметры.Представление, Комментарий); - Результат = Результат.ДанныеВыбора; - - СброситьМодифицированностьПриВыборе(); -#Если ВебКлиент Тогда - ФлагЗакрытия = ЗакрыватьПриВыборе; - ЗакрыватьПриВыборе = Ложь; - ОповеститьОВыборе(Результат); - ЗакрыватьПриВыборе = ФлагЗакрытия; -#Иначе - ОповеститьОВыборе(Результат); -#КонецЕсли - СохранитьСостояниеФормы(); - Иначе Результат = Неопределено; КонецЕсли; @@ -1287,17 +1375,23 @@ КонецЕсли; КонецЦикла; + Если СтрокаДействующегоАдреса <> Неопределено Тогда + ДанныеБылиИзменены = ДанныеБылиИзменены(Результат.Значение, СтрокаДействующегоАдреса.Значение); + Иначе + ДанныеБылиИзменены = Истина; + КонецЕсли; + Если ДатаБылаИзменена Тогда Отбор = Новый Структура("ДействуетС, Вид", АдресДействуетС, Результат.Вид); СтрокиСАдресом = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор); ПредставлениеРедактируемогоАдреса = ?(СтрокиСАдресом.Количество() > 0, СтрокиСАдресом[0].Представление, ""); - Если СтрСравнить(Результат.Представление, ПредставлениеРедактируемогоАдреса) <> 0 - Или СтранаОтличается(СтрокиСАдресом[0].ЗначенияПолей, Результат.КонтактнаяИнформация) Тогда + Если ДанныеБылиИзменены Тогда НоваяКонтактнаяИнформация = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Добавить(); ЗаполнитьЗначенияСвойств(НоваяКонтактнаяИнформация, Результат); НоваяКонтактнаяИнформация.ЗначенияПолей = Результат.КонтактнаяИнформация; + НоваяКонтактнаяИнформация.Значение = Результат.Значение; НоваяКонтактнаяИнформация.ДействуетС = АдресНаДату; НоваяКонтактнаяИнформация.ХранитьИсториюИзменений = Истина; Если СтрокаДействующегоАдреса = Неопределено Тогда @@ -1311,41 +1405,69 @@ НоваяКонтактнаяИнформация.ЭтоИсторическаяКонтактнаяИнформация = Ложь; Иначе НоваяКонтактнаяИнформация.ЭтоИсторическаяКонтактнаяИнформация = Истина; - Результат.Представление = СтрокаДействующегоАдреса.Представление; - Результат.КонтактнаяИнформация = СтрокаДействующегоАдреса.ЗначенияПолей; + Результат.Представление = СтрокаДействующегоАдреса.Представление; + Результат.КонтактнаяИнформация = СтрокаДействующегоАдреса.ЗначенияПолей; + Результат.Значение = СтрокаДействующегоАдреса.Значение; КонецЕсли; ИначеЕсли СтрСравнить(Результат.Комментарий, СтрокаДействующегоАдреса.Комментарий) <> 0 И СтрокиСАдресом.Количество() > 0 Тогда // Поменяли только комментарий. СтрокиСАдресом[0].Комментарий = Результат.Комментарий; КонецЕсли; Иначе - Если СтрСравнить(Результат.Представление, СтрокаДействующегоАдреса.Представление) <> 0 - Или СтрСравнить(Результат.Комментарий, СтрокаДействующегоАдреса.Комментарий) <> 0 - Или СтранаОтличается(СтрокаДействующегоАдреса.ЗначенияПолей, Результат.КонтактнаяИнформация) Тогда - ЗаполнитьЗначенияСвойств(СтрокаДействующегоАдреса, Результат); - СтрокаДействующегоАдреса.ЗначенияПолей = Результат.КонтактнаяИнформация; - СтрокаДействующегоАдреса.ИмяРеквизита = ИмяРеквизита; - СтрокаДействующегоАдреса.ЭтоИсторическаяКонтактнаяИнформация = Ложь; + Если ДанныеБылиИзменены Тогда + ЗаполнитьЗначенияСвойств(СтрокаДействующегоАдреса, Результат); + СтрокаДействующегоАдреса.ЗначенияПолей = Результат.КонтактнаяИнформация; + СтрокаДействующегоАдреса.Значение = Результат.Значение; + СтрокаДействующегоАдреса.ИмяРеквизита = ИмяРеквизита; + СтрокаДействующегоАдреса.ЭтоИсторическаяКонтактнаяИнформация = Ложь; КонецЕсли; КонецЕсли; КонецПроцедуры +&НаСервереБезКонтекста +Функция ДанныеБылиИзменены(ЗначениеПолейДо, ЗначениеПолейПосле) + + Если СтрСравнить(ЗначениеПолейПосле, ЗначениеПолейДо) = 0 Тогда + Возврат Ложь; + КонецЕсли; + + Если ЗначениеЗаполнено(ЗначениеПолейДо)И ЗначениеЗаполнено(ЗначениеПолейПосле) Тогда + + ЗначенияДо = УправлениеКонтактнойИнформациейСлужебный.СтрокаJSONВСтруктуру(ЗначениеПолейДо); + ЗначенияПосле = УправлениеКонтактнойИнформациейСлужебный.СтрокаJSONВСтруктуру(ЗначениеПолейПосле); + + Если СтрСравнить(ЗначенияДо.value, ЗначенияПосле.value) <> 0 + Или СтрСравнить(ЗначенияДо.country, ЗначенияПосле.country) <> 0 + Или СтрСравнить(ЗначенияДо.comment, ЗначенияПосле.comment) <> 0 + Или СтрСравнить(ЗначенияДо.oktmo, ЗначенияПосле.oktmo) <> 0 Тогда + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + + КонецЕсли; + + Возврат Истина; // Один из вариантов пустой, другой заполнен. + +КонецФункции + &НаКлиенте Процедура ПослеЗакрытияФормыИстории(Результат, ДополнительныеПараметры) Экспорт - + Если Результат = Неопределено Тогда Возврат; КонецЕсли; ВводНовогоАдреса = ?(Результат.Свойство("ВводНовогоАдреса"), Результат.ВводНовогоАдреса, Ложь); Если ВводНовогоАдреса Тогда - Контекст = ДополнительныеПараметры.Контекст; - Контекст.АдресНаДату = Результат.ТекущийАдрес; - АдресДействуетС = Контекст.АдресНаДату; - ПерезаполнитьФормуВводаАдреса(Контекст, "", ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес"), ОсновнаяСтрана); - КонтекстФормыКлиент(Контекст); - ОтобразитьДополнительныеЗданияИПомещения(); + АдресДействуетС = АдресНаДату; + АдресНаДату = Результат.ТекущийАдрес; + Страна = ОсновнаяСтрана; + НаселенныйПунктДетально = РаботаСАдресамиКлиентСервер.ОписаниеНовойКонтактнойИнформации(ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес")); + НаселенныйПунктДетально.AddressType = РаботаСАдресамиКлиентСервер.МуниципальныйАдрес(); + НаселенныйПунктДетально.Country = Строка(Страна); + ОбработкаИзмененияАдреса(); Иначе Отбор = Новый Структура("Вид", ВидКонтактнойИнформации.Ссылка); НайденныеСтроки = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор); @@ -1367,11 +1489,10 @@ ДанныеСтроки.ИмяРеквизита = ИмяРеквизита; КонецЕсли; Если НачалоДня(Результат.ТекущийАдрес) = НачалоДня(СтрокаКонтактнойИнформации.ДействуетС) Тогда - Контекст = ДополнительныеПараметры.Контекст; - Контекст.АдресНаДату = Результат.ТекущийАдрес; - ПерезаполнитьФормуВводаАдреса(Контекст, СтрокаКонтактнойИнформации.ЗначенияПолей, СтрокаКонтактнойИнформации.Тип, ОсновнаяСтрана); - КонтекстФормыКлиент(Контекст); - ОтобразитьДополнительныеЗданияИПомещения(); + АдресНаДату = Результат.ТекущийАдрес; + НаселенныйПунктДетально = СтрокаJSONВСтруктуру(СтрокаКонтактнойИнформации.Значение); + Комментарий = НаселенныйПунктДетально.comment; + ОбработкаИзмененияАдреса(); КонецЕсли; КонецЦикла; КонецЕсли; @@ -1384,90 +1505,23 @@ КонецПроцедуры +&НаСервереБезКонтекста +Функция СтрокаJSONВСтруктуру(Значение) + Возврат УправлениеКонтактнойИнформациейСлужебный.СтрокаJSONВСтруктуру(Значение); +КонецФункции + &НаКлиенте Процедура СохранитьСостояниеФормы() УстановитьКлючИспользованияФормы(); СохраняемыеВНастройкахДанныеМодифицированы = Истина; КонецПроцедуры -&НаКлиенте -Процедура ДобавитьОбъектЗавершение(Знач ВыбранныйЭлемент, Знач ДополнительныеПараметры) Экспорт - - Если ВыбранныйЭлемент = Неопределено Тогда - // Отказ от выбора - Возврат; - КонецЕсли; - - Если ВыбранныйЭлемент.Значение = 1 Тогда - Строка = ДополнительныеЗдания.Добавить(); - - Строка.Тип = ВыбранныйЭлемент.Представление; - Строка.ПутьXPath = РаботаСАдресамиКлиентСервер.XPathНомераДополнительногоОбъектаАдресации(Строка.Тип); - ИмяТекущего = ОтобразитьДополнительныеЗдания(); - Иначе - Строка = ДополнительныеПомещения.Добавить(); - - Строка.Тип = ВыбранныйЭлемент.Представление; - Строка.ПутьXPath = РаботаСАдресамиКлиентСервер.XPathНомераДополнительногоОбъектаАдресации(Строка.Тип); - ИмяТекущего = ОтобразитьДополнительныеПомещения(ВыбранныйЭлемент.Представление = НаименованиеПриДобавлениеПроизвольногоПомещения()); - КонецЕсли; - - // Запрещаем добавлять больше чем есть вариантов. - Элементы.ДобавитьОбъект.Доступность = ДополнительныеПараметры.КоличествоВариантов > 1; - - Если ИмяТекущего<>Неопределено Тогда - Если ВыбранныйЭлемент.Представление = НаименованиеПриДобавлениеПроизвольногоПомещения() Тогда - ЭтотОбъект[ИмяТекущего] = ""; - КонецЕсли; - ТекущийЭлемент = Элементы[ИмяТекущего]; - КонецЕсли; - - Модифицированность = Истина; -КонецПроцедуры - -&НаКлиенте -Процедура ВвестиАдресВСвободнойФормеЗавершение(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт - Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда - Возврат; - КонецЕсли; - - Если РазрешитьВводАдресаВСвободнойФорме И ЗначениеЗаполнено(ПредставлениеАдреса) Тогда - Комментарий = ?(НЕ ПустаяСтрока(Комментарий), Комментарий + Символы.ПС, "") - + НСтр("ru = 'Исходный адрес:'") + " " + ПредставлениеАдреса; - ПодключитьОбработчикОжидания("УстановитьПиктограммуКомментария", 0.1, Истина); - КонецЕсли; - РазрешитьВводАдресаВСвободнойФорме = Не РазрешитьВводАдресаВСвободнойФорме; - - ЭтоНациональныйАдрес = (Страна = ОсновнаяСтрана И Не МеждународныйФорматАдреса); - - Если (Не ЭтоНациональныйАдрес И ЭтоСтранаУчастникЕАЭС(Страна)) Или МеждународныйФорматАдреса Тогда - // ЕАЭС - Контекст = КонтекстФормыКлиент(); - ЗначениеРеквизитовПоКонтактнойИнформацииАдресИностранныйАдрес(ПредставлениеАдреса, Контекст); - КонтекстФормыКлиент(Контекст); - КонецЕсли; - - ОпределениеРежимаВводаАдреса(); - Модифицированность = Истина; - -КонецПроцедуры - &НаКлиенте Процедура СброситьМодифицированностьПриВыборе() Модифицированность = Ложь; КопияКомментария = Комментарий; КонецПроцедуры -&НаСервереБезКонтекста -Функция СтранаОтличается(ЗначениеПолейДо, ЗначениеПолейПосле) - - СтранаДо = УправлениеКонтактнойИнформацией.СтранаАдресаКонтактнойИнформации(ЗначениеПолейДо); - СтранаПосле = УправлениеКонтактнойИнформацией.СтранаАдресаКонтактнойИнформации(ЗначениеПолейПосле); - - Возврат СтрСравнить(СтранаДо.Наименование, СтранаПосле.Наименование) <> 0; - -КонецФункции - &НаСервереБезКонтекста Функция РезультатаВыбораПоОбновлениюФлагов(Контекст, ВозвращатьСписокЗначений = Ложь) // Обновляем некоторые флаги @@ -1481,27 +1535,43 @@ &НаСервереБезКонтекста Функция РезультатВыбора(Контекст, ВозвращатьСписокЗначений = Ложь) - XDTOИнформация = КонтактнаяИнформацияПоЗначениюРеквизитов(Контекст); + + НаселенныйПунктДетально = Контекст.НаселенныйПунктДетально; Результат = Новый Структура("ДанныеВыбора, ОшибкиЗаполнения"); + НаселенныйПунктДетально.Value = РаботаСАдресамиКлиентСервер.ПредставлениеАдреса(НаселенныйПунктДетально, Контекст.ВидКонтактнойИнформации.ВключатьСтрануВПредставление); + Если ВозвращатьСписокЗначений Тогда - ДанныеВыбора = Обработки.РасширенныйВводКонтактнойИнформации.КонтактнаяИнформацияВСтаруюСтруктуру(XDTOИнформация); - ДанныеВыбора = ДанныеВыбора.ЗначенияПолей; - ИначеЕсли Контекст.Страна = Контекст.ОсновнаяСтрана И ПустаяСтрока(XDTOИнформация.Представление) Тогда + ДанныеВыбора = Обработки.РасширенныйВводКонтактнойИнформации.КонтактнаяИнформацияВСтаруюСтруктуру(НаселенныйПунктДетально); + ИначеЕсли Контекст.Страна = Контекст.ОсновнаяСтрана И ПустаяСтрока(НаселенныйПунктДетально.Value) Тогда ДанныеВыбора = ""; Иначе - ДанныеВыбора = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOВXML(XDTOИнформация); + ДанныеВыбора = НаселенныйПунктДетально; + КонецЕсли; + + Если ТипЗнч(ДанныеВыбора) = Тип("Структура") Тогда + Значение = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(ДанныеВыбора); + КонтактнаяИнформация = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзJSONВXML(ДанныеВыбора, Контекст.ВидКонтактнойИнформации.Тип); + Иначе + Значение = ""; + КонтактнаяИнформация = ""; КонецЕсли; Результат.ДанныеВыбора = Новый Структура; - Результат.ДанныеВыбора.Вставить("КонтактнаяИнформация", ДанныеВыбора); - Результат.ДанныеВыбора.Вставить("Представление", XDTOИнформация.Представление); - Результат.ДанныеВыбора.Вставить("Комментарий", XDTOИнформация.Комментарий); + Результат.ДанныеВыбора.Вставить("КонтактнаяИнформация", КонтактнаяИнформация); + Результат.ДанныеВыбора.Вставить("Значение", Значение); + Результат.ДанныеВыбора.Вставить("Представление", НаселенныйПунктДетально.Value); + Результат.ДанныеВыбора.Вставить("Комментарий", НаселенныйПунктДетально.Comment); Результат.ДанныеВыбора.Вставить("ВведеноВСвободнойФорме", - УправлениеКонтактнойИнформациейСлужебный.АдресВведенВСвободнойФорме(XDTOИнформация)); - - Результат.ОшибкиЗаполнения = Обработки.РасширенныйВводКонтактнойИнформации.ОшибкиЗаполненияАдресаXDTO( - XDTOИнформация.Состав, Контекст.ВидКонтактнойИнформации); + УправлениеКонтактнойИнформациейСлужебный.АдресВведенВСвободнойФорме(НаселенныйПунктДетально)); + + // ошибки заполнения + Результат.ОшибкиЗаполнения = Новый Массив; + ПроверятьКорректность = Контекст.ВидКонтактнойИнформации.ПроверятьКорректность Или Контекст.ВидКонтактнойИнформации.МеждународныйФорматАдреса; + Если ПроверятьКорректность И ЗначениеЗаполнено(Значение) Тогда + Результат.ОшибкиЗаполнения = Обработки.РасширенныйВводКонтактнойИнформации.ОшибкиЗаполненияАдресаXDTO( + Значение, Контекст.ВидКонтактнойИнформации); + КонецЕсли; Если Контекст.ВидКонтактнойИнформации.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес И Контекст.ВидКонтактнойИнформации.РедактированиеТолькоВДиалоге Тогда @@ -1520,69 +1590,35 @@ КонецФункции &НаСервереБезКонтекста -Функция СписокОшибокЗаполнения(Контекст, ПредупреждатьОбОтсутствии, ТребуетсяОбновление = Ложь) - XDTOИнформация = КонтактнаяИнформацияПоЗначениюРеквизитов(Контекст); +Функция СписокОшибокЗаполнения(Адрес, ВидКонтактнойИнформации, ПредупреждатьОбОтсутствии, ТребуетсяОбновление = Ложь) - Если Контекст.ВидКонтактнойИнформации.ПроверятьКорректность Тогда - ПараметрыПроверки = Контекст.ВидКонтактнойИнформации; - Иначе - ПараметрыПроверки = Новый Структура("ПроверятьПоФИАС", Истина); - КонецЕсли; - - // Получаем список значений: XPath - текст ошибки. - Результат = Обработки.РасширенныйВводКонтактнойИнформации.ОшибкиЗаполненияАдресаXDTO( - XDTOИнформация.Состав, ПараметрыПроверки); - - Если Результат.Количество() = 0 // Нет ошибок - И ПредупреждатьОбОтсутствии // Но надо предупредить об их отсутствии. - // Дополнительно проверяем на пустоту. - И (Не УправлениеКонтактнойИнформациейСлужебный.XDTOКонтактнаяИнформацияЗаполнена(XDTOИнформация)) Тогда - Результат.Добавить("/", НСтр("ru = 'Адрес пуст.'")); - КонецЕсли; - - ОпределитьНеобходимостьОбновленияКлассификатора(Контекст, ТребуетсяОбновление); + Результат = Обработки.РасширенныйВводКонтактнойИнформации.ОшибкиЗаполненияАдресаXDTO(Адрес, ВидКонтактнойИнформации); + ОпределитьНеобходимостьОбновленияКлассификатора(Адрес, ТребуетсяОбновление); Возврат Результат; КонецФункции &НаСервереБезКонтекста -Процедура ОпределитьНеобходимостьОбновленияКлассификатора(Знач Контекст, ТребуетсяОбновление) +Процедура ОпределитьНеобходимостьОбновленияКлассификатора(Знач НаселенныйПунктДетально, ТребуетсяОбновление) // проверка источника Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); - ИнформацияОбОбновление = МодульАдресныйКлассификаторСлужебный.ОписаниеПоследнейЗагрузки(Контекст.НаселенныйПунктДетально.Регион.Идентификатор); + ИнформацияОбОбновление = МодульАдресныйКлассификаторСлужебный.ОписаниеПоследнейЗагрузки(НаселенныйПунктДетально.AreaID); ТребуетсяОбновление = ИнформацияОбОбновление.НеобходимоОбновление; КонецЕсли; КонецПроцедуры &НаСервереБезКонтекста -Функция ПерезаполнитьФормуВводаАдреса(Контекст, ЗначенияПолей, ТипКонтактнойИнформации, СтранаРоссия) - - РезультатыЧтения = ""; - XDTOКонтактная = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзXML(ЗначенияПолей, ТипКонтактнойИнформации, РезультатыЧтения); - Если ПустаяСтрока(ЗначенияПолей) Тогда - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); - ПространствоИменРФ = РаботаСАдресами.ПространствоИмен(); - XDTOКонтактная.Состав.Страна = СтранаРоссия.Наименование; - XDTOКонтактная.Состав.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИменРФ, "АдресРФ")); - КонецЕсли; - - ЗначениеРеквизитовПоКонтактнойИнформации(Контекст, XDTOКонтактная); - Возврат РезультатыЧтения; - -КонецФункции - -&НаСервереБезКонтекста -Функция ЗаполнитьСписокКонтактнойИнформации(ВидКонтактнойИнформации, КонтактнаяИнформацияОписаниеДополнительныхРеквизитов, Контекст) +Функция ЗаполнитьСписокКонтактнойИнформации(ВидКонтактнойИнформации, КонтактнаяИнформацияОписаниеДополнительныхРеквизитов) Отбор = Новый Структура("Вид", ВидКонтактнойИнформации); НайденныеСтроки = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор); СписокКонтактнойИнформации = Новый Массив; Для каждого СтрокаКонтактнойИнформации Из НайденныеСтроки Цикл - КонтактнаяИнформация = Новый Структура("Представление, ЗначенияПолей, ДействуетС, Комментарий"); + КонтактнаяИнформация = Новый Структура("Представление, Значение, ЗначенияПолей, ДействуетС, Комментарий"); ЗаполнитьЗначенияСвойств(КонтактнаяИнформация, СтрокаКонтактнойИнформации); СписокКонтактнойИнформации.Добавить(КонтактнаяИнформация); КонецЦикла; @@ -1595,41 +1631,11 @@ СообщениеОНеобходимостиОбновленияКлассификатора(НаселенныйПунктДетально.Регион.Идентификатор); КонецПроцедуры -&НаСервере -Функция РезультатВыбораТолькоКомментария(КонтактнаяИнфо, Представление, Комментарий) - - Если ПустаяСтрока(КонтактнаяИнфо) Тогда - НоваяКонтактная = УправлениеКонтактнойИнформациейСлужебный.АдресXMLВXDTO(""); - НоваяКонтактная.Комментарий = Комментарий; - НоваяКонтактная = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOВXML(НоваяКонтактная); - АдресВведенВСвободнойФорме = Ложь; - - ИначеЕсли УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнфо) Тогда - // Копия - НоваяКонтактная = КонтактнаяИнфо; - // Модифицируем значение "НоваяКонтактная". - УправлениеКонтактнойИнформацией.УстановитьКомментарийКонтактнойИнформации(НоваяКонтактная, Комментарий); - АдресВведенВСвободнойФорме = УправлениеКонтактнойИнформациейСлужебный.АдресВведенВСвободнойФорме(КонтактнаяИнфо); - - Иначе - НоваяКонтактная = КонтактнаяИнфо; - АдресВведенВСвободнойФорме = Ложь; - КонецЕсли; - - Результат = Новый Структура("ДанныеВыбора, ОшибкиЗаполнения", Новый Структура, Новый СписокЗначений); - Результат.ДанныеВыбора.Вставить("КонтактнаяИнформация", НоваяКонтактная); - Результат.ДанныеВыбора.Вставить("Представление", Представление); - Результат.ДанныеВыбора.Вставить("Комментарий", Комментарий); - Результат.ДанныеВыбора.Вставить("ВведеноВСвободнойФорме", АдресВведенВСвободнойФорме); - Возврат Результат; -КонецФункции - &НаСервере Процедура СообщениеОНеобходимостиОбновленияКлассификатора(Идентификатор = Неопределено) Элементы.АдресныйКлассификаторУстарел.Видимость = Ложь; - Если Страна = ОсновнаяСтрана Тогда - ВидимостьНеобходимоОбновление = НЕ ЭтоВебСервис И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор"); + Если НЕ ВебСервисИспользуется И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); ИнформацияОбОбновление = МодульАдресныйКлассификаторСлужебный.ОписаниеПоследнейЗагрузки(Идентификатор); Элементы.АдресныйКлассификаторУстарел.Видимость = ИнформацияОбОбновление.НеобходимоОбновление; @@ -1637,214 +1643,95 @@ КонецПроцедуры -&НаСервереБезКонтекста -Процедура ОбработкаИзмененияНаселенногоПунктаСервер(Контекст, ПереформироватьДетально = Истина) +&НаКлиенте +Процедура ОтобразитьПоляПоТипуАдреса() - Если Не ЗначениеЗаполнено(Контекст.ИдентификаторНаселенногоПункта) Тогда - // Данные вводились вручную, пробуем разбор введенной строки. - Адрес = НаселенныеПунктыПоПредставлению(Контекст.НаселенныйПункт); - ЗаполнитьКонтекстПоXDTOАдреса(Адрес, Контекст, УровниНаселенногоПункта()); - ПереформироватьДетально = Ложь; + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(НаселенныйПунктДетально.AddressType) Тогда + ПоказатьАдресВСвободнойФорме(); КонецЕсли; - // Населенный пункт, разбитый по частям. - Если ПереформироватьДетально Тогда - СформироватьДетальныйНаселенныйПункт(Контекст); - КонецЕсли; + ЭтоНациональныйАдрес = (Страна = ОсновнаяСтрана И Не МеждународныйФорматАдреса); + ЭтоСтранаУчастникЕАЭС = ЭтоСтранаУчастникЕАЭС(Страна); - // Перепроверяем улицу, индекс и представление обновятся там. - ОбработкаИзмененияУлицыСервер(Контекст); - -КонецПроцедуры - -&НаСервереБезКонтекста -Функция УровниНаселенногоПункта() - Уровни = Новый Массив; - Уровни.Добавить(1); - Уровни.Добавить(2); - Уровни.Добавить(3); - Уровни.Добавить(4); - Уровни.Добавить(5); - Уровни.Добавить(6); - - Возврат Уровни; -КонецФункции - -&НаСервереБезКонтекста -Процедура ОбработкаИзмененияУлицыСервер(Контекст) + НаселенныйПунктДетально.Country = СокрЛП(Страна); - // Очистка записей по улице - ОчиститьСведенияОбУлице(Контекст.НаселенныйПунктДетально); - - // Данные вводились вручную, пробуем разбор введенной строки. - АнализКлассификатора = УлицыПоПредставлению(Контекст.ИдентификаторНаселенногоПункта, Контекст.Улица, Контекст.СкрыватьНеактуальныеАдреса); - УровеньУлицы = 0; - Если АнализКлассификатора <> Неопределено И АнализКлассификатора.Найти(0, "Уровень") = Неопределено Тогда - ИдентификаторУлицы = Неопределено; - Улица = АнализКлассификатора.Найти(7, "Уровень"); - Если Улица <> Неопределено Тогда - Контекст.НаселенныйПунктДетально.Улица.Представление = Улица.Значение; - Контекст.НаселенныйПунктДетально.Улица.Идентификатор = Улица.Идентификатор; - ИдентификаторУлицы = Новый УникальныйИдентификатор(Улица.Идентификатор); + Если ЭтоНациональныйАдрес Тогда + + Если ПустаяСтрока(НаселенныйПунктДетально.AddressType) Тогда + НаселенныйПунктДетально.AddressType = РаботаСАдресамиКлиентСервер.МуниципальныйАдрес(); КонецЕсли; - Улица = АнализКлассификатора.Найти(90, "Уровень"); - Если Улица <> Неопределено Тогда - Контекст.НаселенныйПунктДетально.ДополнительныйЭлемент.Представление = Улица.Значение; - Контекст.НаселенныйПунктДетально.ДополнительныйЭлемент.Идентификатор = Улица.Идентификатор; - ПутьXPath = РаботаСАдресамиКлиентСервер.XPathДополнительногоОбъектаАдресации(90, Контекст.НаселенныйПунктДетально.ДополнительныйЭлемент.Сокращение); - Контекст.НаселенныйПунктДетально.ДополнительныйЭлемент.ПутьXPath = ПутьXPath; - ИдентификаторУлицы = Новый УникальныйИдентификатор(Улица.Идентификатор); - Улица = АнализКлассификатора.Найти(91, "Уровень"); - Если Улица <> Неопределено Тогда - Контекст.НаселенныйПунктДетально.ПодчиненныйЭлемент.Представление = Улица.Значение; - Контекст.НаселенныйПунктДетально.ПодчиненныйЭлемент.Идентификатор = Улица.Идентификатор; - ПутьXPath = РаботаСАдресамиКлиентСервер.XPathДополнительногоОбъектаАдресации(91, Контекст.НаселенныйПунктДетально.ДополнительныйЭлемент.Сокращение); - Контекст.НаселенныйПунктДетально.ПодчиненныйЭлемент.ПутьXPath = ПутьXPath; - ИдентификаторУлицы = Новый УникальныйИдентификатор(Улица.Идентификатор); - КонецЕсли; + Элементы.Улица.Заголовок = НСтр("ru='Улица'"); + Элементы.ОКТМО.Видимость = ВидКонтактнойИнформации.УказыватьОКТМО; + ВебСервисИспользуется = КлассификаторДоступен; + ВидимостьСтроений = Истина; + Элементы.ГруппаДобавлениеСтроения.Видимость = Истина; + Элементы.ГруппаДобавлениеПомещения.Видимость = Истина; + Элементы.Дом.КнопкаВыбора = Истина; + Элементы.НаселенныйПункт.КнопкаВыбора = Истина; + Элементы.Строение.КнопкаВыбора = Ложь; + Элементы.НаселенныйПункт.ПодсказкаВвода = НСтр("ru='Введите первые буквы названия населенного пункта'"); + Элементы.Улица.ПодсказкаВвода = НСтр("ru='Введите первые буквы названия улицы'"); + + Иначе + + Элементы.ГруппаДобавлениеСтроения.Видимость = Ложь; + Элементы.ГруппаДобавлениеПомещения.Видимость = Ложь; + Если ЭтоСтранаУчастникЕАЭС И Не МеждународныйФорматАдреса Тогда + Элементы.Улица.Заголовок = НСтр("ru='Улица'"); + Элементы.НаселенныйПункт.КнопкаВыбора = Истина; + ВидимостьСтроений = Истина; + Элементы.Дом.КнопкаВыбора = Ложь; + Элементы.Строение.КнопкаВыбора = Ложь; + + Иначе + Элементы.Улица.Заголовок = НСтр("ru='Адрес'"); + Элементы.НаселенныйПункт.КнопкаВыбора = Ложь; + Элементы.Улица.КнопкаВыбора = Ложь; + ВидимостьСтроений = Ложь; КонецЕсли; - Контекст.ИдентификаторУлицы = ИдентификаторУлицы; - Иначе - Контекст.НаселенныйПунктДетально.Улица.Представление = Контекст.Улица; - КонецЕсли; - - // Перепроверяем дом, индекс и представление обновятся там. - УстановитьИндексИПредставление(Контекст); -КонецПроцедуры - -&НаКлиентеНаСервереБезКонтекста -Процедура ОчиститьСведенияОбУлице(НаселенныйПунктДетально) - - НаселенныйПунктДетально.Улица.Представление = Неопределено; - НаселенныйПунктДетально.Улица.Идентификатор = Неопределено; - НаселенныйПунктДетально.Улица.Наименование = ""; - НаселенныйПунктДетально.ДополнительныйЭлемент.Представление = Неопределено; - НаселенныйПунктДетально.ДополнительныйЭлемент.Идентификатор = Неопределено; - НаселенныйПунктДетально.ПодчиненныйЭлемент.Представление = Неопределено; - НаселенныйПунктДетально.ПодчиненныйЭлемент.Идентификатор = Неопределено; - -КонецПроцедуры - -&НаКлиенте -Процедура ОбработкаИзмененияСтраныКлиент() - - ЭтоНациональныйАдрес = (Страна = ОсновнаяСтрана И Не МеждународныйФорматАдреса); - - Если МеждународныйФорматАдреса Тогда - Элементы.ТипАдреса.ТекущаяСтраница = Элементы.МеждународныйАдрес; - ИначеЕсли ЭтоНациональныйАдрес Тогда - Элементы.ТипАдреса.ТекущаяСтраница = Элементы.НациональныйАдрес; - Иначе - Элементы.ТипАдреса.ТекущаяСтраница = Элементы.ИностранныйАдрес; + + Элементы.ОКТМО.Видимость = Ложь; + Элементы.ПроверитьЗаполнениеАдреса.Доступность = Ложь; + ВебСервисИспользуется = Ложь; + Элементы.НаселенныйПункт.ПодсказкаВвода = ""; + Элементы.Улица.ПодсказкаВвода = ""; + КонецЕсли; // Проверять, вводить в свободной форме и искать по индексу можем только российские адреса. - Элементы.ПроверитьЗаполнениеАдреса.Доступность = ЭтоНациональныйАдрес; - Элементы.ЗаполнитьПоПочтовомуИндексу.Доступность = ЭтоНациональныйАдрес; - Элементы.ЗаполнитьПоПочтовомуИндексуВсеДействия.Доступность = ЭтоНациональныйАдрес; - - Если МеждународныйФорматАдреса Тогда - Элементы.ПроверитьЗаполнениеАдреса.Видимость = Ложь; - Элементы.АдресныйКлассификаторУстарел.Видимость = Ложь; - КонецЕсли; - - ОпределениеРежимаВводаАдреса(); - -КонецПроцедуры - -&НаКлиенте -Процедура ОпределениеРежимаВводаАдреса() - - Если Не МеждународныйФорматАдреса Тогда - Если Страна = ОсновнаяСтрана Тогда - // Загружать можем только национальные адреса. - Элементы.ВвестиАдресВСвободнойФорме.Доступность = Истина; - Элементы.ВвестиАдресВСвободнойФормеВсеДействия.Доступность = Истина; - Элементы.ГруппаИндекса.Видимость = Истина; - Если ЕстьПравоЗагружатьКлассификатор Тогда - КнопкаПанели = Элементы.Найти("ЗагрузитьКлассификатор"); - Если КнопкаПанели <> Неопределено Тогда - Элементы.ЗагрузитьКлассификатор.Доступность = Истина; - КонецЕсли; - КонецЕсли; - Иначе - Если НЕ ЭтоСтранаУчастникЕАЭС(Страна) Тогда - // Прочие страны - Элементы.ВвестиАдресВСвободнойФорме.Доступность = Ложь; - Элементы.ВвестиАдресВСвободнойФормеВсеДействия.Доступность = Ложь; - Элементы.СтруктураИностранныйАдреса.Видимость = Ложь; - Элементы.ГруппаИндекса.Видимость = Ложь; - РазрешитьВводАдресаВСвободнойФорме = Истина; - Иначе - // Страны ЕАЭС - Элементы.ВвестиАдресВСвободнойФорме.Доступность = Истина; - Элементы.ВвестиАдресВСвободнойФормеВсеДействия.Доступность = Истина; - Если РазрешитьВводАдресаВСвободнойФорме Тогда - Элементы.СтруктураИностранныйАдреса.Видимость = Ложь; - Элементы.ГруппаИндекса.Видимость = Ложь; - Иначе - Элементы.СтруктураИностранныйАдреса.Видимость = Истина; - Элементы.ГруппаИндекса.Видимость = Истина; - КонецЕсли; - КонецЕсли; - КонецЕсли; - Иначе - Элементы.ВвестиАдресВСвободнойФорме.Доступность = Истина; - Элементы.ВвестиАдресВСвободнойФормеВсеДействия.Доступность = Истина; - Если РазрешитьВводАдресаВСвободнойФорме Тогда - Элементы.СтруктураМеждународныеАдреса.Видимость = Ложь; - Элементы.ГруппаИндекса.Видимость = Ложь; - Иначе - Элементы.СтруктураМеждународныеАдреса.Видимость = Истина; - Элементы.ГруппаИндекса.Видимость = Истина; - КонецЕсли; - КонецЕсли; + Элементы.Улица.МногострочныйРежим = НЕ ЭтоНациональныйАдрес; + Элементы.ГруппаСтроенияИИнформация.Видимость = ВидимостьСтроений; + Элементы.Улица.КнопкаВыбора = ЭтоНациональныйАдрес; + Элементы.ПроверитьЗаполнениеАдреса.Доступность = ЭтоНациональныйАдрес; + Элементы.ЗаполнитьПоПочтовомуИндексу.Доступность = ЭтоНациональныйАдрес; + Элементы.МуниципальноеДеление.Доступность = ЭтоНациональныйАдрес; + Элементы.АдминистративноТерриториальноеДеление.Доступность = ЭтоНациональныйАдрес; Если ВидКонтактнойИнформации.ВключатьСтрануВПредставление Тогда - ПозицияСтрана = СтрНайти(ПредставлениеАдреса, ","); - Если ПозицияСтрана > 0 Тогда - ПредставлениеАдреса = ВРег(Страна) + Сред(ПредставлениеАдреса, ПозицияСтрана); - Иначе - ПредставлениеАдреса = ВРег(Страна); - КонецЕсли; + ОбновитьПредставлениеАдреса(); КонецЕсли; - СостояниеВводаПредставленияАдреса(РазрешитьВводАдресаВСвободнойФорме); - СообщениеОНеобходимостиОбновленияКлассификатора(Неопределено); + УстановитьФлагиВМенюПоТипуАдреса(); + ПоказатьПодсказкуПоТипАдреса(); КонецПроцедуры &НаСервере -Процедура ОпределитьОтображениеЭлементовНаФорме(ЭтоТакси) - - Элементы.ЗагрузитьКлассификатор.Видимость = ЕстьПравоЗагружатьКлассификатор; - Элементы.ЗагрузитьКлассификаторВсеДействия.Видимость = ЕстьПравоЗагружатьКлассификатор; +Процедура ОпределитьОтображениеЭлементовНаФорме() + // Разовые настройки отображения формы. Если Не ЕстьКлассификатор Тогда Элементы.ЗаполнитьПоПочтовомуИндексу.Видимость = Ложь; - Элементы.ЗаполнитьПоПочтовомуИндексуВсеДействия.Видимость = Ложь; Элементы.Улица.КнопкаВыбора = Ложь; Элементы.Дом.КнопкаВыбора = Ложь; Элементы.Строение.КнопкаВыбора = Ложь; - Элементы.СообщениеОбОбращенииВФНС.Видимость = Ложь; Элементы.НаселенныйПункт.ПодсказкаВвода = НСтр("ru='Введите название населенного пункта'"); Элементы.Улица.ПодсказкаВвода = НСтр("ru='Введите название улицы'"); КонецЕсли; // По умолчанию выводим представление. - Элементы.АдресПредставлениеКомментарий.ТекущаяСтраница = Элементы.АдресСтраницаПредставление; - Если ЭтоТакси Тогда - Элементы.ФормаВсеДействия.Видимость = Ложь; - Иначе - Элементы.ВвестиАдресВСвободнойФорме.Видимость = Ложь; - Элементы.ЗаполнитьПоПочтовомуИндексу.Видимость = Ложь; - Элементы.ФормаОчиститьАдрес.Видимость = Ложь; - Элементы.ЗагрузитьКлассификатор.Видимость = Ложь; - Элементы.ФормаВводАдресаПоказать.Видимость = Ложь; - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ИзменитьФорму", "Видимость", Ложь); - КонецЕсли; КонецПроцедуры &НаСервере @@ -1859,520 +1746,91 @@ КонецПроцедуры -&НаСервереБезКонтекста -Процедура УстановитьИндексИПредставление(Контекст, XDTOКонтактная = Неопределено) - - Инфо = ?(XDTOКонтактная = Неопределено, КонтактнаяИнформацияПоЗначениюРеквизитов(Контекст), XDTOКонтактная); - - Если Контекст.Страна = Контекст.ОсновнаяСтрана Тогда - УстановитьЗначениеИндекса(Контекст, Инфо); - КонецЕсли; - ЗаполнитьПредставлениеАдреса(Контекст, Инфо); - -КонецПроцедуры - -&НаСервереБезКонтекста -Процедура УстановитьЗначениеИндекса(Контекст, XDTOКонтактная = Неопределено) - - Инфо = ?(XDTOКонтактная = Неопределено, КонтактнаяИнформацияПоЗначениюРеквизитов(Контекст), XDTOКонтактная); - - Адрес = Инфо.Состав; - - Идентификатор = НайтиИдентификаторАдресаПоИерархии(Контекст.НаселенныйПунктДетально); - ИндексИОКМТОПоКлассификатору = Обработки.РасширенныйВводКонтактнойИнформации.ОпределитьПочтовыйИндексИОКТМОАдреса(Адрес, Идентификатор); - - Если ЗначениеЗаполнено(ИндексИОКМТОПоКлассификатору.Индекс) Тогда - Контекст.Индекс = Формат(ИндексИОКМТОПоКлассификатору.Индекс, "ЧЦ=6; ЧРГ=; ЧГ=0"); - КонецЕсли; - Если ЗначениеЗаполнено(ИндексИОКМТОПоКлассификатору.ОКТМО) Тогда - Контекст.ОКТМО = Обработки.РасширенныйВводКонтактнойИнформации.ОКТМО(ИндексИОКМТОПоКлассификатору.ОКТМО); - КонецЕсли; - Обработки.РасширенныйВводКонтактнойИнформации.ПочтовыйИндексАдреса(Адрес, Контекст.Индекс); - XDTOКонтактная.Представление = УправлениеКонтактнойИнформациейСлужебный.ПредставлениеАдреса(Адрес, Контекст.ВидКонтактнойИнформации); -КонецПроцедуры - -&НаСервереБезКонтекста -Функция НайтиИдентификаторАдресаПоИерархии(НаселенныйПунктДетально) - - Идентификатор = Неопределено; - УровеньИдентификатора = 0; - Для каждого УровеньАдреса Из НаселенныйПунктДетально Цикл - Если ЗначениеЗаполнено(УровеньАдреса.Значение.Идентификатор) И УровеньИдентификатора < УровеньАдреса.Значение.Уровень Тогда - Идентификатор = УровеньАдреса.Значение.Идентификатор; - УровеньИдентификатора = УровеньАдреса.Значение.Уровень; - КонецЕсли; - КонецЦикла; - - Возврат ?(ЗначениеЗаполнено(Идентификатор), Новый УникальныйИдентификатор(Идентификатор), Неопределено); -КонецФункции - -&НаСервереБезКонтекста -Процедура ЗаполнитьПредставлениеАдреса(Контекст, XDTOКонтактная = Неопределено) - - // Код страны ставим всегда - Если ТипЗнч(Контекст.Страна) = Тип("СправочникСсылка.СтраныМира") Тогда - Контекст.КодСтраны = Контекст.Страна.Код - Иначе - Контекст.КодСтраны = ""; - КонецЕсли; - - Если Контекст.РазрешитьВводАдресаВСвободнойФорме И Контекст.ПредставлениеАдресаИзменено Тогда - Возврат; - КонецЕсли; - - Инфо = ?(XDTOКонтактная = Неопределено, КонтактнаяИнформацияПоЗначениюРеквизитов(Контекст), XDTOКонтактная); - Контекст.ПредставлениеАдреса = Инфо.Представление; - -КонецПроцедуры - -&НаСервереБезКонтекста -Процедура ЗначениеРеквизитовПоКонтактнойИнформации(Контекст, РедактируемаяИнформация) - - ДанныеАдреса = РедактируемаяИнформация.Состав; +&НаСервере +Процедура УстановитьЗначениеРеквизитовПоКонтактнойИнформации(ДанныеАдреса) // Общие реквизиты - Контекст.ПредставлениеАдреса = РедактируемаяИнформация.Представление; - Контекст.Комментарий = РедактируемаяИнформация.Комментарий; - - // Копия комментария для анализа измененности. - Контекст.КопияКомментария = Контекст.Комментарий; - - // Страна по наименованию - НаименованиеСтраны = СокрЛП(ДанныеАдреса.Страна); - Если ПустаяСтрока(НаименованиеСтраны) Тогда - Контекст.Страна = Справочники.СтраныМира.ПустаяСсылка(); - Иначе - СсылкаНаОсновнуюСтрану = РаботаСАдресами.ОсновнаяСтрана(); - Если ВРЕГ(НаименованиеСтраны) = ВРЕГ(СокрЛП(СсылкаНаОсновнуюСтрану.Наименование)) Тогда - Контекст.Страна = СсылкаНаОсновнуюСтрану; - Контекст.КодСтраны = СсылкаНаОсновнуюСтрану.Код; - Иначе - ДанныеСтраны = Справочники.СтраныМира.ДанныеСтраныМира(, НаименованиеСтраны); - Если ДанныеСтраны = Неопределено Тогда - // Не нашли ни в справочнике, ни в классификаторе. - Контекст.Страна = Неопределено; - Контекст.КодСтраны = Неопределено; - Иначе - Контекст.Страна = ДанныеСтраны.Ссылка; - Контекст.КодСтраны = ДанныеСтраны.Код; - КонецЕсли; - КонецЕсли; + ПредставлениеАдреса = ДанныеАдреса.Value; + Если ДанныеАдреса.Свойство("Comment") Тогда + Комментарий = ДанныеАдреса.Comment; КонецЕсли; - ВычисленноеПредставление = УправлениеКонтактнойИнформациейСлужебный.СформироватьПредставлениеКонтактнойИнформации( - РедактируемаяИнформация, Контекст.ВидКонтактнойИнформации); - - Если УправлениеКонтактнойИнформациейСлужебный.ЭтоНациональныйАдрес(ДанныеАдреса) Тогда - Контекст.РазрешитьВводАдресаВСвободнойФорме = Не ПустаяСтрока(ДанныеАдреса.Состав.Адрес_по_документу); - - // Дополнительно проверяем случай, когда представление по документу равно вычисленному. - Если Контекст.РазрешитьВводАдресаВСвободнойФорме Тогда - Если ПредставленияАдресаОдинаковы(ВычисленноеПредставление, ДанныеАдреса.Состав.Адрес_по_документу, Истина) - И ПредставленияАдресаОдинаковы(РедактируемаяИнформация.Представление, ДанныеАдреса.Состав.Адрес_по_документу, Истина) Тогда - Контекст.РазрешитьВводАдресаВСвободнойФорме = Ложь; - ДанныеАдреса.Состав.Адрес_по_документу = ""; - КонецЕсли; - КонецЕсли; - - Если Контекст.РазрешитьВводАдресаВСвободнойФорме Тогда - Контекст.ПредставлениеАдреса = ДанныеАдреса.Состав.Адрес_по_документу; - КонецЕсли; - - Контекст.ОКТМО = Обработки.РасширенныйВводКонтактнойИнформации.ОКТМО(ДанныеАдреса.Состав.ОКТМО); - ЗначениеРеквизитовПоКонтактнойИнформацииАдресРФ(ДанныеАдреса, Контекст); - Иначе - Адрес = Строка(ДанныеАдреса.Состав); - Контекст.НаселенныйПунктДетально = РаботаСАдресамиКлиентСервер.СтруктураЧастейАдресаНаселенногоПункта("ФИАС"); - Если СтрЧислоВхождений(Адрес, ",") = 9 Тогда - Адрес = Сред(Адрес, СтрНайти(Адрес, ",") + 1); // удаляем страну - КонецЕсли; - Если ЗначениеЗаполнено(Адрес) И СтрЧислоВхождений(Адрес, ",") = 8 Тогда - ЗначениеРеквизитовПоКонтактнойИнформацииАдресИностранныйАдрес(Адрес, Контекст); - Контекст.РазрешитьВводАдресаВСвободнойФорме = Ложь; - Иначе - Контекст.РазрешитьВводАдресаВСвободнойФорме = Истина; - КонецЕсли; - - Если ЗначениеЗаполнено(ВычисленноеПредставление) И ПустаяСтрока(Контекст.ПредставлениеАдреса) Тогда - Контекст.ПредставлениеАдреса = ВычисленноеПредставление; - КонецЕсли; - + СсылкаНаОсновнуюСтрану = РаботаСАдресамиКлиентСервер.ОсновнаяСтрана(); + ДанныеСтраны = Неопределено; + Если ДанныеАдреса.Свойство("Country") И ЗначениеЗаполнено(ДанныеАдреса.Country) Тогда + ДанныеСтраны = Справочники.СтраныМира.ДанныеСтраныМира(, СокрЛП(ДанныеАдреса.Country)); КонецЕсли; + Если ДанныеСтраны = Неопределено Тогда + // Не нашли ни в справочнике, ни в классификаторе. + Страна = СсылкаНаОсновнуюСтрану; + КодСтраны = СсылкаНаОсновнуюСтрану.Код; + Иначе + Страна = ДанныеСтраны.Ссылка; + КодСтраны = ДанныеСтраны.Код; + КонецЕсли; + + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(ДанныеАдреса.AddressType)Тогда + РазрешитьВводАдресаВСвободнойФорме = Истина; + КонецЕсли; + + УстановитьЗначенияНациональныхРеквизитовКонтактнойИнформации(ДанныеАдреса); + КонецПроцедуры -&НаСервереБезКонтекста -Процедура ЗначениеРеквизитовПоКонтактнойИнформацииАдресИностранныйАдрес(Адрес, Контекст) - - Если НЕ СтрНачинаетсяС(ВРег(Адрес), ВРег(Контекст.Страна)) Тогда - Адрес = ВРег(Контекст.Страна) + "," + Адрес; - КонецЕсли; - - СтруктураАдрес = Обработки.РасширенныйВводКонтактнойИнформации.РазложитьАдресВСтруктуру(Адрес); - - Контекст.НаселенныйПунктДетально.Регион.Представление = СтруктураАдрес.Регион; - Контекст.НаселенныйПунктДетально.Район.Представление = СтруктураАдрес.Район; - Контекст.НаселенныйПунктДетально.Город.Представление = СтруктураАдрес.Город; - Контекст.НаселенныйПунктДетально.НаселенныйПункт.Представление = СтруктураАдрес.НаселенныйПункт; - - НаселенныйПункт = ""; - НаселенныйПункт = ?(ЗначениеЗаполнено(СтруктураАдрес.НаселенныйПункт), СтруктураАдрес.НаселенныйПункт + ", ",""); - НаселенныйПункт = НаселенныйПункт + ?(ЗначениеЗаполнено(СтруктураАдрес.Город), СтруктураАдрес.Город + ", ",""); - НаселенныйПункт = НаселенныйПункт + ?(ЗначениеЗаполнено(СтруктураАдрес.Район), СтруктураАдрес.Район + ", ",""); - НаселенныйПункт = НаселенныйПункт + ?(ЗначениеЗаполнено(СтруктураАдрес.Регион), СтруктураАдрес.Регион + ", ",""); - - Если СтрДлина(НаселенныйПункт) > 2 И СтрЗаканчиваетсяНа(НаселенныйПункт, ", ") Тогда - НаселенныйПункт = Лев(НаселенныйПункт, СтрДлина(НаселенныйПункт) - 2); - КонецЕсли; - - Контекст.Индекс = СтруктураАдрес.Индекс; - Контекст.НаселенныйПункт = НаселенныйПункт; - Контекст.Улица = СтруктураАдрес.Улица; - - Если Не ПустаяСтрока(СтруктураАдрес.Дом) Тогда - ЗданиеИНомер = НаименованиеЗданияИЕгоНомер(СтруктураАдрес.Дом); - ВариантыДанныхДом = Обработки.РасширенныйВводКонтактнойИнформации.ВариантыДанныхДом(); - Контекст.Дом = ЗданиеИНомер.Номер; - Для каждого ВариантДанныхДом Из ВариантыДанныхДом Цикл - Если СтрСравнить(ВариантДанныхДом, ЗданиеИНомер.Здание) = 0 Тогда - Контекст.ТипДома = ЗданиеИНомер.Здание; - Прервать; - КонецЕсли; - КонецЦикла; - КонецЕсли; - - Если Не ПустаяСтрока(СтруктураАдрес.Корпус) Тогда - ЗданиеИНомер = НаименованиеЗданияИЕгоНомер(СтруктураАдрес.Корпус); - Контекст.ТипСтроения = ЗданиеИНомер.Здание; - Контекст.Строение = ЗданиеИНомер.Номер; - КонецЕсли; - - Если Не ПустаяСтрока(СтруктураАдрес.Квартира) Тогда - ЗданиеИНомер = НаименованиеЗданияИЕгоНомер(СтруктураАдрес.Квартира); - Контекст.ТипПомещения = ЗданиеИНомер.Здание; - Контекст.Помещение = ЗданиеИНомер.Номер; - КонецЕсли; - -КонецПроцедуры - -&НаСервереБезКонтекста -Функция НаименованиеЗданияИЕгоНомер(Название) - ТекстПоиска = СокрЛП(Название); - - Позиция = СтрНайти(ТекстПоиска, " "); - - Результат = Новый Структура("Здание, Номер"); - Если Позиция > 0 Тогда - Результат.Здание = Лев(ТекстПоиска, Позиция - 1); - Результат.Номер = СокрЛ(Сред(ТекстПоиска, Позиция + 1)); - Иначе - Результат.Здание = ТекстПоиска; - Результат.Номер = ""; - КонецЕсли; - - Возврат Результат; -КонецФункции - - -&НаСервереБезКонтекста -Процедура ЗначениеРеквизитовПоКонтактнойИнформацииАдресРФ(ДанныеАдреса, Контекст) +&НаСервере +Процедура УстановитьЗначенияНациональныхРеквизитовКонтактнойИнформации(ДанныеАдреса) // Индекс просто ставим - Контекст.Индекс = Формат(Обработки.РасширенныйВводКонтактнойИнформации.ПочтовыйИндексАдреса(ДанныеАдреса), "ЧГ="); + Если ДанныеАдреса.Свойство("ZIPCode") Тогда + Индекс = Формат(ДанныеАдреса.ZIPCode, "ЧГ="); + КонецЕсли; + + // Индекс просто ставим + Если ДанныеАдреса.Свойство("OKTMO") Тогда + ОКТМО = Формат(ДанныеАдреса.OKTMO, "ЧГ="); + КонецЕсли; // Синтетический "Населенный пункт" получаем как представление. - Контекст.НаселенныйПункт = Обработки.РасширенныйВводКонтактнойИнформации.ПредставлениеНаселенногоПункта(ДанныеАдреса); - Контекст.Улица = Обработки.РасширенныйВводКонтактнойИнформации.ПредставлениеУлицы(ДанныеАдреса); - - СформироватьДетальныйНаселенныйПункт(Контекст, ДанныеАдреса); - - // Дом, строение, помещение - ЗданияИПомещения = Обработки.РасширенныйВводКонтактнойИнформации.ЗданияИПомещенияАдреса(ДанныеАдреса); - - // Первые два здания выделяем отдельно, остальное в списке. - ТаблицаДанных = ЗданияИПомещения.Здания; - - // Вид = 1 - признак дома, владения. Вид = 2, доп строение. - СтрокаДома = ТаблицаДанных.Найти(1, "Вид"); - Если СтрокаДома <> Неопределено Тогда - Контекст.ТипДома = СтрокаДома.Тип; - Контекст.Дом = СтрокаДома.Значение; - ТаблицаДанных.Удалить(СтрокаДома); - Иначе - Контекст.Дом = ""; + НаселенныйПункт = Обработки.РасширенныйВводКонтактнойИнформации.ПредставлениеНаселенногоПункта(ДанныеАдреса); + Если ЗначениеЗаполнено(ДанныеАдреса.Street) Тогда + Улица = ДанныеАдреса.Street + " " + ДанныеАдреса.StreetType; КонецЕсли; - СтрокаДома = ТаблицаДанных.Найти(2, "Вид"); - Если СтрокаДома <> Неопределено Тогда - Контекст.ТипСтроения = СтрокаДома.Тип; - Контекст.Строение = СтрокаДома.Значение; - ТаблицаДанных.Удалить(СтрокаДома); - Иначе - Контекст.Строение = ""; - КонецЕсли; - - НомерСтроки = ТаблицаДанных.Количество(); - Если НомерСтроки > 0 Тогда - Пока НомерСтроки > 0 Цикл - НомерСтроки = НомерСтроки - 1; - ЗаполнитьЗначенияСвойств(Контекст.ДополнительныеЗдания.Вставить(0), ТаблицаДанных[НомерСтроки]); - КонецЦикла; - Иначе - Контекст.ДополнительныеЗдания.Очистить(); - КонецЕсли; - - // Первое помещение указываем отдельно, остальные в списке. - ТаблицаДанных = ЗданияИПомещения.Помещения; - НомерСтроки = ТаблицаДанных.Количество(); - Если НомерСтроки > 0 Тогда - Контекст.ТипПомещения = ТаблицаДанных[0].Тип; - Контекст.Помещение = ТаблицаДанных[0].Значение; - Иначе - Контекст.Помещение = ""; - КонецЕсли; - - Если НомерСтроки > 1 Тогда - Пока НомерСтроки > 1 Цикл - НомерСтроки = НомерСтроки - 1; - ЗаполнитьЗначенияСвойств(Контекст.ДополнительныеПомещения.Вставить(0), ТаблицаДанных[НомерСтроки]); - КонецЦикла; - Иначе - Контекст.ДополнительныеПомещения.Очистить(); - КонецЕсли; - -КонецПроцедуры - -&НаСервереБезКонтекста -Функция КонтактнаяИнформацияПоЗначениюРеквизитов(Контекст) - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); - - Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); - Результат.Комментарий = Контекст.Комментарий; - - Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Адрес")); - Адрес = Результат.Состав; - - Адрес.Страна = Строка(Контекст.Страна); - Если ВРег(Контекст.Страна) <> ВРег(Контекст.ОсновнаяСтрана.Наименование) Тогда - Если Контекст.РазрешитьВводАдресаВСвободнойФорме Тогда - - Если Контекст.ВидКонтактнойИнформации.ВключатьСтрануВПредставление Тогда - - Если СтрНачинаетсяС(ВРЕГ(Контекст.ПредставлениеАдреса), ВРег(Контекст.Страна)) Тогда - Позиция = СтрДлина(Контекст.Страна) + 1; - Если Сред(Контекст.ПредставлениеАдреса, Позиция, 1) = "," Тогда - Позиция = Позиция + 1; - КонецЕсли; - Адрес.Состав = СокрЛП(Сред(Контекст.ПредставлениеАдреса, Позиция)); - Иначе - Адрес.Состав = СокрЛП(Контекст.ПредставлениеАдреса); - КонецЕсли; - - Результат.Представление = Адрес.Страна + ?(ЗначениеЗаполнено(Адрес.Состав), ", " + Адрес.Состав, "");; - Иначе - Адрес.Состав = Контекст.ПредставлениеАдреса; - Результат.Представление = Контекст.ПредставлениеАдреса; - КонецЕсли; - - Иначе - - НаселенныйПункт = Строка(Контекст.НаселенныйПунктДетально.Регион.Представление) + "," + Строка(Контекст.НаселенныйПунктДетально.Район.Представление) - + "," + Строка(Контекст.НаселенныйПунктДетально.Город.Представление) + "," + Строка(Контекст.НаселенныйПунктДетально.НаселенныйПункт.Представление); - Строка9Запятых = Контекст.Страна.Наименование + "," + Контекст.Индекс + "," + НаселенныйПункт + "," + Контекст.Улица + ","; - Строка9Запятых = Строка9Запятых + ?(ЗначениеЗаполнено(Контекст.Дом), Контекст.ТипДома + " " +Контекст.Дом, "") + ","; - Строка9Запятых = Строка9Запятых + ?(ЗначениеЗаполнено(Контекст.Строение), Контекст.ТипСтроения + " " + Контекст.Строение, "") + ","; - Строка9Запятых = Строка9Запятых + ?(ЗначениеЗаполнено(Контекст.Помещение), Контекст.ТипПомещения + " " + Контекст.Помещение, ""); - Адрес.Состав = Строка9Запятых; - Результат.Представление = УправлениеКонтактнойИнформациейСлужебный.ПредставлениеАдреса(Адрес, Контекст.ВидКонтактнойИнформации); - - КонецЕсли; - - Возврат Результат; - КонецЕсли; - - Адрес.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(РаботаСАдресами.ПространствоИмен(), "АдресРФ")); - АдресРФ = Адрес.Состав; - ЗаполненныеЧастиАдреса = Новый СписокЗначений; - Если Контекст.НаселенныйПунктДетально <> Неопределено Тогда - Для Каждого КлючЗначение Из Контекст.НаселенныйПунктДетально Цикл - ЧастьПункта = КлючЗначение.Значение; - Если Не ПустаяСтрока(ЧастьПункта.Представление) Тогда - НетДетальныхДанных = Ложь; - ЗаполненныеЧастиАдреса.Добавить(ЧастьПункта.Уровень, ЧастьПункта.Представление); - ПутьXPath = ЧастьПункта.ПутьXPath; - Обработки.РасширенныйВводКонтактнойИнформации.УстановитьXDTOРеквизитОбъекта(АдресРФ, ПутьXPath, ЧастьПункта.Представление); - КонецЕсли; - КонецЦикла; - КонецЕсли; - - // Здания и помещения - ТаблицаЗданий = ?(ТипЗнч(Контекст.ДополнительныеЗдания) = Тип("ТаблицаЗначений"), - Контекст.ДополнительныеЗдания.Скопировать(), - Контекст.ДополнительныеЗдания.Выгрузить()); - - Если Не ПустаяСтрока(Контекст.Дом) Тогда - СтрокаЗдания = ТаблицаЗданий.Вставить(0); - СтрокаЗдания.Тип = Контекст.ТипДома; - СтрокаЗдания.Значение = Контекст.Дом; - КонецЕсли; - - Если Не ПустаяСтрока(Контекст.Строение) Тогда - СтрокаЗдания = ТаблицаЗданий.Вставить(0); - СтрокаЗдания.Тип = Контекст.ТипСтроения; - СтрокаЗдания.Значение = Контекст.Строение; - КонецЕсли; - - ТаблицаПомещений = ?(ТипЗнч(Контекст.ДополнительныеПомещения) = Тип("ТаблицаЗначений"), - Контекст.ДополнительныеПомещения.Скопировать(), - Контекст.ДополнительныеПомещения.Выгрузить()); - - Если Не ПустаяСтрока(Контекст.Помещение) Тогда - СтрокаЗдания = ТаблицаЗданий.Вставить(0); - СтрокаЗдания.Тип = Контекст.ТипПомещения; - СтрокаЗдания.Значение = Контекст.Помещение; - КонецЕсли; - - Обработки.РасширенныйВводКонтактнойИнформации.ЗданияИПомещенияАдреса(АдресРФ, - Новый Структура("Здания, Помещения", ТаблицаЗданий, ТаблицаПомещений)); - - // Индекс - Обработки.РасширенныйВводКонтактнойИнформации.ПочтовыйИндексАдреса(АдресРФ, Контекст.Индекс); - - // ОКТМО - ОписаниеЧисло = Новый ОписаниеТипов("Число"); - Обработки.РасширенныйВводКонтактнойИнформации.УстановитьXDTOРеквизитОбъекта(АдресРФ, "ОКТМО", ОписаниеЧисло.ПривестиЗначение(Контекст.ОКТМО)); - - // - Если НЕ ПустаяСтрока( Контекст.ДополнительныйЭлемент) Тогда - Обработки.РасширенныйВводКонтактнойИнформации.ДобавитьДополнительныеЭлементыАдреса(АдресРФ, Контекст.ДополнительныйЭлемент, 90); - КонецЕсли; - Если НЕ ПустаяСтрока(Контекст.ПодчиненныйЭлемент) Тогда - Обработки.РасширенныйВводКонтактнойИнформации.ДобавитьДополнительныеЭлементыАдреса(АдресРФ, Контекст.ПодчиненныйЭлемент, 91); - КонецЕсли; - - // Представление и свободный ввод адреса. - РасчетноеПредставление = УправлениеКонтактнойИнформациейСлужебный.ПредставлениеАдреса(Адрес, Контекст.ВидКонтактнойИнформации); - ВведенноеПредставление = СокрЛП(Контекст.ПредставлениеАдреса); - Если Контекст.РазрешитьВводАдресаВСвободнойФорме И Контекст.ПредставлениеАдресаИзменено Тогда - Если ПредставленияАдресаОдинаковы(ВведенноеПредставление, РасчетноеПредставление) Тогда - Результат.Представление = РасчетноеПредставление; - АдресРФ.Сбросить("Адрес_по_документу"); - Иначе - Результат.Представление = ВведенноеПредставление; - АдресРФ.Адрес_по_документу = ВведенноеПредставление; - КонецЕсли; - Иначе - АдресРФ.Сбросить("Адрес_по_документу"); - Результат.Представление = РасчетноеПредставление; - КонецЕсли; - - Возврат Результат; -КонецФункции - -// Перезаполняет структуру "НаселенныйПунктДетально" по текущим данным адреса или по данным реквизитов формы. -// -&НаСервереБезКонтекста -Процедура СформироватьДетальныйНаселенныйПункт(Контекст, XDTOДанныеАдреса = Неопределено) - - Если XDTOДанныеАдреса = Неопределено И ЗначениеЗаполнено(Контекст.ИдентификаторНаселенногоПункта) Тогда - // Перезаполняем - Контекст.НаселенныйПунктДетально = Обработки.РасширенныйВводКонтактнойИнформации.СписокРеквизитовНаселенныйПункт( - Контекст.ИдентификаторНаселенногоПункта, - Контекст.ВидКонтактнойИнформации.ФорматАдреса); - Возврат; - - ИначеЕсли ТипЗнч(XDTOДанныеАдреса) = Тип("Строка") Тогда - // Попытка разбора - АнализКлассификатора = НаселенныеПунктыПоПредставлению(XDTOДанныеАдреса); - Если АнализКлассификатора.ДанныеВыбора.Количество()=1 Тогда - Вариант = АнализКлассификатора.ДанныеВыбора[0].Значение.Значение; - Контекст.НаселенныйПунктДетально = Обработки.РасширенныйВводКонтактнойИнформации.СписокРеквизитовНаселенныйПункт( - Вариант.Код, Контекст.ВидКонтактнойИнформации.ФорматАдреса); - Возврат; + Если ЗначениеЗаполнено(ДанныеАдреса.HouseType) Тогда + ТипДома = ДанныеАдреса.HouseType; + Если ДанныеАдреса.Свойство("HouseNumber") Тогда + Дом = ДанныеАдреса.HouseNumber; + ИначеЕсли ДанныеАдреса.Свойство("House") Тогда + Дом = ДанныеАдреса.House; КонецЕсли; КонецЕсли; - - Если НЕ ЗначениеЗаполнено(Контекст.НаселенныйПунктДетально) Тогда - Контекст.НаселенныйПунктДетально = Обработки.РасширенныйВводКонтактнойИнформации.СписокРеквизитовНаселенныйПункт(, - Контекст.ВидКонтактнойИнформации.ФорматАдреса); + ЗаполняемПервоеЗдание = Истина; + Если ДанныеАдреса.Свойство("Buildings") И ТипЗнч(ДанныеАдреса.Buildings) = Тип("Массив") Тогда + Для каждого ОписаниеЗдания Из ДанныеАдреса.Buildings Цикл + Если ЗаполняемПервоеЗдание Тогда + ТипСтроения = ОписаниеЗдания.Type; + Строение = ОписаниеЗдания.Number; + ЗаполняемПервоеЗдание = Ложь; + КонецЕсли; + КонецЦикла; КонецЕсли; - Если XDTOДанныеАдреса = Неопределено Тогда - - // Из реквизитов формы все идет в предопределенный детальный пункт. - Для Каждого КлючЗначение Из Контекст.НаселенныйПунктДетально Цикл - Значение = КлючЗначение.Значение; - Если Значение.Предопределенный Тогда - Значение.Представление = Контекст.НаселенныйПункт; - Прервать; + ЗаполняемПервоеПомещение = Истина; + Если ДанныеАдреса.Свойство("Apartments") И ТипЗнч(ДанныеАдреса.Apartments) = Тип("Массив") Тогда + Для каждого ОписаниеСтроения Из ДанныеАдреса.Apartments Цикл + Если ЗаполняемПервоеПомещение Тогда + ТипПомещения = ОписаниеСтроения.Type; + Помещение = ОписаниеСтроения.Number; + ЗаполняемПервоеПомещение = Ложь; КонецЕсли; КонецЦикла; - - Возврат; КонецЕсли; - ЗаполнитьКонтекстПоXDTOАдреса(XDTOДанныеАдреса, Контекст); + ОтобразитьДополнительныеЗдания(НаселенныйПунктДетально); КонецПроцедуры -&НаСервереБезКонтекста -Процедура ЗаполнитьКонтекстПоXDTOАдреса(XDTOДанныеАдреса, Контекст, Уровни = Неопределено) - - // Из переданного XDTO - АдресРФ = Обработки.РасширенныйВводКонтактнойИнформации.НациональныйАдрес(XDTOДанныеАдреса); - Если АдресРФ <> Неопределено Тогда - - Для Каждого КлючЗначение Из Контекст.НаселенныйПунктДетально Цикл - Значение = КлючЗначение.Значение; - - Если Уровни = Неопределено ИЛИ Уровни.Найти(Значение.Уровень) <> Неопределено Тогда - Если Значение.Уровень <> 90 Тогда - Представление = Обработки.РасширенныйВводКонтактнойИнформации.ПолучитьXDTOРеквизитОбъекта(АдресРФ, Значение.ПутьXPath); - Иначе - ДополнительныйЭлементАдреса = Обработки.РасширенныйВводКонтактнойИнформации.НайтиДополнительныйЭлементАдреса(АдресРФ); - Представление = ДополнительныйЭлементАдреса.Значение; - Значение.ПутьXPath = ДополнительныйЭлементАдреса.XPath; - КонецЕсли; - - Части = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(Представление); - Значение.Представление = Представление; - Значение.Наименование = Части.Наименование; - Значение.Сокращение = Части.Сокращение; - КонецЕсли; - КонецЦикла; - - Обработки.РасширенныйВводКонтактнойИнформации.ЗаполнитьИдентификаторыНаселенногоПункта(Контекст.НаселенныйПунктДетально); - - УровеньНаселенногоПункта = 0; - УровеньУлицы = 0; - Для каждого Элемент Из Контекст.НаселенныйПунктДетально Цикл - Если Элемент.Значение.Уровень < 7 - И ЗначениеЗаполнено(Элемент.Значение.Идентификатор) - И Элемент.Значение.Уровень > УровеньНаселенногоПункта Тогда - Контекст.ИдентификаторНаселенногоПункта = Элемент.Значение.Идентификатор; - УровеньНаселенногоПункта = Элемент.Значение.Уровень; - КонецЕсли; - Если Элемент.Значение.Уровень > 6 - И ЗначениеЗаполнено(Элемент.Значение.Идентификатор) - И Элемент.Значение.Уровень > УровеньУлицы Тогда - Контекст.ИдентификаторУлицы = Элемент.Значение.Идентификатор; - УровеньУлицы = Элемент.Значение.Уровень; - КонецЕсли; - КонецЦикла; - Иначе - Для Каждого КлючЗначение Из Контекст.НаселенныйПунктДетально Цикл - Значение = КлючЗначение.Значение; - Если Значение.Уровень < 7 Тогда - Значение.Представление = ""; - Значение.Наименование = ""; - Значение.Сокращение = ""; - КонецЕсли; - Значение.Идентификатор = Неопределено; - КонецЦикла; - КонецЕсли; - -КонецПроцедуры - &НаСервере Процедура УдалитьГруппуЭлементов(Группа) Пока Группа.ПодчиненныеЭлементы.Количество()>0 Цикл @@ -2386,74 +1844,231 @@ КонецПроцедуры &НаСервере -Функция ОтобразитьДополнительныеЗданияИПомещения() - Возврат Новый Структура("ИмяЗдания, ИмяПомещения", - ОтобразитьДополнительныеЗдания(), - ОтобразитьДополнительныеПомещения()); -КонецФункции - -&НаСервере -Функция ОтобразитьДополнительныеЗдания() +Функция ДобавитьПолеСтроенияИлиПомещения(Идентификатор, Тип, Значение) - Удалять = Новый Массив; - Пока Элементы.ГруппаСтроенияДополнительно.ПодчиненныеЭлементы.Количество() > 0 Цикл - Группа = Элементы.ГруппаСтроенияДополнительно.ПодчиненныеЭлементы[0]; - Если ТипЗнч(Группа)=Тип("ГруппаФормы") Тогда - Идентификатор = Сред(Группа.Имя, 1 + СтрДлина("ГруппаСтроение")); - Если Не ПустаяСтрока(Идентификатор) Тогда - Удалять.Добавить("ТипСтроения" + Идентификатор); - Удалять.Добавить("Строение" + Идентификатор); - КомандаУдалить = Команды.Найти("УдалитьСтроение" + Идентификатор); - Если КомандаУдалить <> Неопределено Тогда - Команды.Удалить(КомандаУдалить); - КонецЕсли; - КонецЕсли; - УдалитьГруппуЭлементов(Группа); - Иначе - Элементы.Удалить(Группа); - КонецЕсли; - КонецЦикла; - ИзменитьРеквизиты(, Удалять); - - КоличествоЗданий = ДополнительныеЗдания.Количество() - 1; - КоличествоТипов = Элементы.ТипСтроения.СписокВыбора.Количество() - 2; - - Результат = Неопределено; - Для НомерСтроки=0 По КоличествоЗданий Цикл - Строка = ДополнительныеЗдания[НомерСтроки]; - Идентификатор = Формат(НомерСтроки, "ЧН=; ЧГ="); + Если Тип = "Помещение" Тогда + + НоваяГруппа = Элементы.Добавить("ГруппаПомещение" + Идентификатор, Тип("ГруппаФормы"), Элементы.ГруппаПомещенияДополнительно); + ЗаполнитьЗначенияСвойств(НоваяГруппа, Элементы.ГруппаПомещенияОсновная,, "ПутьКДаннымЗаголовка"); + + НовыйТип = Элементы.Добавить("ТипПомещения" + Идентификатор, Тип("ПолеФормы"), НоваяГруппа); + ЗаполнитьЗначенияСвойств(НовыйТип, Элементы.ТипПомещения,, "ПутьКДанным, СписокВыбора, ВыделенныйТекст, СвязьПоТипу"); + НовыйТип.СписокВыбора.ЗагрузитьЗначения(Элементы.ТипПомещения.СписокВыбора.ВыгрузитьЗначения()); + НовыйТип.УстановитьДействие("ПриИзменении", "Подключаемый_ТипПомещенияПриИзменении"); + + НовыйЭлемент = Элементы.Добавить("Помещение" + Идентификатор, Тип("ПолеФормы"), НоваяГруппа); + ЗаполнитьЗначенияСвойств(НовыйЭлемент, Элементы.Помещение,, "ПутьКДанным, СписокВыбора, ВыделенныйТекст, СвязьПоТипу"); + НовыйЭлемент.СписокВыбора.ЗагрузитьЗначения(Элементы.Помещение.СписокВыбора.ВыгрузитьЗначения()); + НовыйЭлемент.УстановитьДействие("ПриИзменении", "Подключаемый_ПомещениеПриИзменении"); + + Иначе НоваяГруппа = Элементы.Добавить("ГруппаСтроение" + Идентификатор, Тип("ГруппаФормы"), Элементы.ГруппаСтроенияДополнительно); - ЗаполнитьЗначенияСвойств(НоваяГруппа, Элементы.ГруппаСтроениеНачальное, , "ПутьКДаннымЗаголовка"); + ЗаполнитьЗначенияСвойств(НоваяГруппа, Элементы.ГруппаСтроенияОсновная,, "ПутьКДаннымЗаголовка"); НовыйТип = Элементы.Добавить("ТипСтроения" + Идентификатор, Тип("ПолеФормы"), НоваяГруппа); - ЗаполнитьЗначенияСвойств(НовыйТип, Элементы.ТипСтроения, , "ПутьКДанным, СписокВыбора, ВыделенныйТекст, СвязьПоТипу"); + ЗаполнитьЗначенияСвойств(НовыйТип, Элементы.ТипСтроения,, "ПутьКДанным, СписокВыбора, ВыделенныйТекст, СвязьПоТипу"); НовыйТип.СписокВыбора.ЗагрузитьЗначения(Элементы.ТипСтроения.СписокВыбора.ВыгрузитьЗначения()); НовыйТип.УстановитьДействие("ПриИзменении", "Подключаемый_ТипСтроенияПриИзменении"); НовыйЭлемент = Элементы.Добавить("Строение" + Идентификатор, Тип("ПолеФормы"), НоваяГруппа); - ЗаполнитьЗначенияСвойств(НовыйЭлемент, Элементы.Строение, , "ПутьКДанным, СписокВыбора, ВыделенныйТекст, СвязьПоТипу"); + ЗаполнитьЗначенияСвойств(НовыйЭлемент, Элементы.Строение,, "ПутьКДанным, СписокВыбора, ВыделенныйТекст, СвязьПоТипу"); НовыйЭлемент.СписокВыбора.ЗагрузитьЗначения(Элементы.Строение.СписокВыбора.ВыгрузитьЗначения()); НовыйЭлемент.УстановитьДействие("ПриИзменении", "Подключаемый_СтроениеПриИзменении"); - НовыйЭлемент.КнопкаВыбора = Ложь; - Если НомерСтроки=КоличествоЗданий Тогда - Результат = НовыйЭлемент.Имя; - КонецЕсли; + КонецЕсли; + + НовыйЭлемент.КнопкаВыбора = Ложь; + Добавлять = Новый Массив; + + Добавлять.Добавить(Новый РеквизитФормы(НовыйТип.Имя, Новый ОписаниеТипов("Строка"))); + Добавлять.Добавить(Новый РеквизитФормы(НовыйЭлемент.Имя, Новый ОписаниеТипов("Строка"))); + + ИзменитьРеквизиты(Добавлять); + + НайденныеСтроки = ДополнительныеСтроенияИПомещения.НайтиСтроки(Новый Структура("Значение", Значение)); + Если НайденныеСтроки.Количество() > 0 Тогда + НайденныеСтроки[0].ИмяЭлемента = Идентификатор; + КонецЕсли; + + Если СтрСравнить(Значение, НаименованиеПриДобавлениеПроизвольногоПомещения()) <> 0 Тогда - Добавлять = Новый Массив; - Добавлять.Добавить(Новый РеквизитФормы(НовыйТип.Имя, Новый ОписаниеТипов("Строка"))); - Добавлять.Добавить(Новый РеквизитФормы(НовыйЭлемент.Имя, Новый ОписаниеТипов("Строка"))); + ЭтотОбъект[НовыйТип.Имя] = Значение; + Результат = НовыйЭлемент.Имя; - ИзменитьРеквизиты(Добавлять); - ЭтотОбъект[НовыйТип.Имя] = Строка.Тип; - ЭтотОбъект[НовыйЭлемент.Имя] = Строка.Значение; + Иначе - НовыйТип.ПутьКДанным = НовыйТип.Имя; - НовыйЭлемент.ПутьКДанным = НовыйЭлемент.Имя; - КонецЦикла; + НайденныеСтроки[0].ПредыдущиеЗначение = ""; + Результат = НовыйТип.Имя; + + КонецЕсли; + + ЭтотОбъект[НовыйЭлемент.Имя] = ""; + + НовыйТип.ПутьКДанным = НовыйТип.Имя; + НовыйЭлемент.ПутьКДанным = НовыйЭлемент.Имя; Возврат Результат; + +КонецФункции + +&НаСервере +Функция ОтобразитьДополнительныеЗдания(НаселенныйПунктДетальноПереопределение = Неопределено) + + Если НаселенныйПунктДетальноПереопределение <> Неопределено Тогда + НаселенныйПунктДетально = НаселенныйПунктДетальноПереопределение; + КонецЕсли; + + Если НаселенныйПунктДетально = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Удалять = Новый Массив; + + КоличествоЭлементов = Элементы.ГруппаСтроенияДополнительно.ПодчиненныеЭлементы.Количество(); + Пока КоличествоЭлементов > 0 Цикл + + КоличествоЭлементов = КоличествоЭлементов - 1; + + ЭлементыФормы = Элементы.ГруппаСтроенияДополнительно.ПодчиненныеЭлементы.Получить(КоличествоЭлементов); + Идентификатор = Сред(ЭлементыФормы.Имя, 15); + Удалять.Добавить("ТипСтроения" + Идентификатор); + Удалять.Добавить("Строение" + Идентификатор); + Элементы.Удалить(Элементы["ГруппаСтроение" + Идентификатор]); + + НайденныеСтроки = ДополнительныеСтроенияИПомещения.НайтиСтроки(Новый Структура("ИмяЭлемента", Идентификатор)); + Если НайденныеСтроки.Количество() > 0 Тогда + НайденныеСтроки[0].ИмяЭлемента = ""; + КонецЕсли; + + КонецЦикла; + + КоличествоЭлементов = Элементы.ГруппаПомещенияДополнительно.ПодчиненныеЭлементы.Количество(); + Пока КоличествоЭлементов > 0 Цикл + + КоличествоЭлементов = КоличествоЭлементов - 1; + ЭлементыФормы = Элементы.ГруппаПомещенияДополнительно.ПодчиненныеЭлементы.Получить(КоличествоЭлементов); + + Идентификатор = Сред(ЭлементыФормы.Имя, 16); + Удалять.Добавить("ТипПомещения" + Идентификатор); + Удалять.Добавить("Помещение" + Идентификатор); + Элементы.Удалить(Элементы["ГруппаПомещение" + Идентификатор]); + + НайденныеСтроки = ДополнительныеСтроенияИПомещения.НайтиСтроки(Новый Структура("ИмяЭлемента", Идентификатор)); + Если НайденныеСтроки.Количество() > 0 Тогда + НайденныеСтроки[0].ИмяЭлемента = ""; + КонецЕсли; + + КонецЦикла; + + ИзменитьРеквизиты(, Удалять); + + Если ТипЗнч(НаселенныйПунктДетально.Buildings) = Тип("Массив") Тогда + КоличествоЗданий = НаселенныйПунктДетально.Buildings.Количество() - 1; + + Результат = Неопределено; + Для НомерСтроки = 1 По КоличествоЗданий Цикл + + Строка = НаселенныйПунктДетально.Buildings[НомерСтроки]; + Идентификатор = СтрЗаменить(Новый УникальныйИдентификатор(),"-", ""); + + НоваяГруппа = Элементы.Добавить("ГруппаСтроение" + Идентификатор, Тип("ГруппаФормы"), Элементы.ГруппаСтроенияДополнительно); + ЗаполнитьЗначенияСвойств(НоваяГруппа, Элементы.ГруппаСтроенияОсновная,, "ПутьКДаннымЗаголовка"); + + НовыйТип = Элементы.Добавить("ТипСтроения" + Идентификатор, Тип("ПолеФормы"), НоваяГруппа); + ЗаполнитьЗначенияСвойств(НовыйТип, Элементы.ТипСтроения, , "ПутьКДанным, СписокВыбора, ВыделенныйТекст, СвязьПоТипу"); + НовыйТип.СписокВыбора.ЗагрузитьЗначения(Элементы.ТипСтроения.СписокВыбора.ВыгрузитьЗначения()); + НовыйТип.УстановитьДействие("ПриИзменении", "Подключаемый_ТипСтроенияПриИзменении"); + + НовыйЭлемент = Элементы.Добавить("Строение" + Идентификатор, Тип("ПолеФормы"), НоваяГруппа); + ЗаполнитьЗначенияСвойств(НовыйЭлемент, Элементы.Строение,, "ПутьКДанным, СписокВыбора, ВыделенныйТекст, СвязьПоТипу"); + НовыйЭлемент.СписокВыбора.ЗагрузитьЗначения(Элементы.Строение.СписокВыбора.ВыгрузитьЗначения()); + НовыйЭлемент.УстановитьДействие("ПриИзменении", "Подключаемый_СтроениеПриИзменении"); + НовыйЭлемент.КнопкаВыбора = Ложь; + + Если НомерСтроки = КоличествоЗданий Тогда + Результат = НовыйЭлемент.Имя; + КонецЕсли; + + Добавлять = Новый Массив; + Добавлять.Добавить(Новый РеквизитФормы(НовыйТип.Имя, Новый ОписаниеТипов("Строка"))); + Добавлять.Добавить(Новый РеквизитФормы(НовыйЭлемент.Имя, Новый ОписаниеТипов("Строка"))); + + ИзменитьРеквизиты(Добавлять); + ЭтотОбъект[НовыйТип.Имя] = Строка.Type; + ЭтотОбъект[НовыйЭлемент.Имя] = Строка.Number; + + НовыйТип.ПутьКДанным = НовыйТип.Имя; + НовыйЭлемент.ПутьКДанным = НовыйЭлемент.Имя; + + НайденныеСтроки = ДополнительныеСтроенияИПомещения.НайтиСтроки(Новый Структура("Значение", Строка.Type)); + Если НайденныеСтроки.Количество() > 0 Тогда + НайденныеСтроки[0].ИмяЭлемента = Идентификатор; + КонецЕсли; + + КонецЦикла; + КонецЕсли; + + Если ТипЗнч(НаселенныйПунктДетально.Apartments) = Тип("Массив") Тогда + КоличествоПомещений = НаселенныйПунктДетально.Apartments.Количество() - 1; + + Результат = Неопределено; + Для НомерСтроки = 1 По КоличествоПомещений Цикл + + Строка = НаселенныйПунктДетально.Apartments[НомерСтроки]; + Идентификатор = СтрЗаменить(Новый УникальныйИдентификатор(),"-", ""); + + НоваяГруппа = Элементы.Добавить("ГруппаПомещение" + Идентификатор, Тип("ГруппаФормы"), Элементы.ГруппаПомещенияДополнительно); + ЗаполнитьЗначенияСвойств(НоваяГруппа, Элементы.ГруппаПомещенияОсновная,, "ПутьКДаннымЗаголовка"); + + НовыйТип = Элементы.Добавить("ТипПомещения" + Идентификатор, Тип("ПолеФормы"), НоваяГруппа); + ЗаполнитьЗначенияСвойств(НовыйТип, Элементы.ТипПомещения, , "ПутьКДанным, СписокВыбора, ВыделенныйТекст, СвязьПоТипу"); + НовыйТип.СписокВыбора.ЗагрузитьЗначения(Элементы.ТипПомещения.СписокВыбора.ВыгрузитьЗначения()); + НовыйТип.УстановитьДействие("ПриИзменении", "Подключаемый_ТипПомещенияПриИзменении"); + + НовыйЭлемент = Элементы.Добавить("Помещение" + Идентификатор, Тип("ПолеФормы"), НоваяГруппа); + ЗаполнитьЗначенияСвойств(НовыйЭлемент, Элементы.Помещение,, "ПутьКДанным, СписокВыбора, ВыделенныйТекст, СвязьПоТипу"); + НовыйЭлемент.СписокВыбора.ЗагрузитьЗначения(Элементы.Помещение.СписокВыбора.ВыгрузитьЗначения()); + НовыйЭлемент.УстановитьДействие("ПриИзменении", "Подключаемый_ПомещениеПриИзменении"); + НовыйЭлемент.КнопкаВыбора = Ложь; + + Если НомерСтроки = КоличествоПомещений Тогда + Результат = НовыйЭлемент.Имя; + КонецЕсли; + + Добавлять = Новый Массив; + Добавлять.Добавить(Новый РеквизитФормы(НовыйТип.Имя, Новый ОписаниеТипов("Строка"))); + Добавлять.Добавить(Новый РеквизитФормы(НовыйЭлемент.Имя, Новый ОписаниеТипов("Строка"))); + + ИзменитьРеквизиты(Добавлять); + ЭтотОбъект[НовыйТип.Имя] = Строка.Type; + ЭтотОбъект[НовыйЭлемент.Имя] = Строка.Number; + + НовыйТип.ПутьКДанным = НовыйТип.Имя; + НовыйЭлемент.ПутьКДанным = НовыйЭлемент.Имя; + + НайденныеСтроки = ДополнительныеСтроенияИПомещения.НайтиСтроки(Новый Структура("Значение", Строка.Type)); + Если НайденныеСтроки.Количество() > 0 Тогда + + НайденныеСтроки[0].ИмяЭлемента = Идентификатор; + + Иначе + + НовоеПомещение = ДополнительныеСтроенияИПомещения.Добавить(); + НовоеПомещение.Тип = "Помещение"; + НовоеПомещение.Значение = НаименованиеПриДобавлениеПроизвольногоПомещения(); + НовоеПомещение.Видимость = Ложь; + НовоеПомещение.Ключ = ""; + НовоеПомещение.ПредыдущиеЗначение = Строка.Type; + НовоеПомещение.ИмяЭлемента = Идентификатор; + + КонецЕсли; + + КонецЦикла; + КонецЕсли; + + Возврат Результат; + КонецФункции &НаСервере @@ -2556,118 +2171,206 @@ &НаКлиенте Процедура Подключаемый_ТипСтроенияПриИзменении(Элемент) - НомерСтроки = Сред(Элемент.Имя, 1 + СтрДлина("ТипСтроения")); - СтрокаЗданий = ДополнительныеЗдания.Получить(НомерСтроки); - СтрокаЗданий.Тип = ЭтотОбъект[Элемент.Имя]; - СтрокаЗданий.ПутьXPath = РаботаСАдресамиКлиентСервер.XPathНомераДополнительногоОбъектаАдресации(СтрокаЗданий.Тип); - ОбновитьИндексИПредставление(); + Идентификатор = Сред(Элемент.Имя, 12); + НайденныеСтрокиСтарые = ДополнительныеСтроенияИПомещения.НайтиСтроки(Новый Структура("ИмяЭлемента", Идентификатор)); + Если НайденныеСтрокиСтарые.Количество() > 0 Тогда + СтароеЗначение = НайденныеСтрокиСтарые[0].Значение; + КонецЕсли; + + Значение = ЭтотОбъект[Элемент.Имя]; + + НайденныеСтрокиНовый = ДополнительныеСтроенияИПомещения.НайтиСтроки(Новый Структура("Значение", Значение)); + Если НайденныеСтрокиНовый.Количество() > 0 Тогда + + Если НайденныеСтрокиНовый[0].Видимость = Ложь Тогда + ЭтотОбъект[Элемент.Имя] = СтароеЗначение; // Такое уже значение есть на форме, откатываем на старое. + Возврат; + КонецЕсли; + НайденныеСтрокиСтарые[0].ИмяЭлемента = ""; + НайденныеСтрокиНовый[0].ИмяЭлемента = Идентификатор; + КонецЕсли; + + Для каждого Помещения Из НаселенныйПунктДетально.Buildings Цикл + Если СтрСравнить(Помещения.Type, СтароеЗначение) = 0 Тогда + Помещения.Type = ЭтотОбъект[Элемент.Имя]; + ОбновитьПредставлениеАдреса(); + Прервать; + КонецЕсли; + КонецЦикла; + + ОбновитьМенюДобавленияСтроенийИПомещений(); + Модифицированность = Истина; + КонецПроцедуры &НаКлиенте Процедура Подключаемый_СтроениеПриИзменении(Элемент) - НомерСтроки = Сред(Элемент.Имя, 1 + СтрДлина("Строение")); - СтрокаЗданий = ДополнительныеЗдания.Получить(НомерСтроки); - СтрокаЗданий.Значение = ЭтотОбъект[Элемент.Имя]; - ОбновитьИндексИПредставление(); + Идентификатор = Сред(Элемент.Имя, 9); + + НайденныеСтроки = ДополнительныеСтроенияИПомещения.НайтиСтроки(Новый Структура("ИмяЭлемента", Идентификатор)); + Если НайденныеСтроки.Количество() > 0 Тогда + Значение = НайденныеСтроки[0].Значение; + Иначе + Возврат; + КонецЕсли; + + ЭтоНовый = Истина; + Для ИндексПозиции = 0 По НаселенныйПунктДетально.Buildings.Количество() - 1 Цикл + Помещения = НаселенныйПунктДетально.Buildings[ИндексПозиции]; + Если СтрСравнить(Помещения.Type, Значение) = 0 Тогда + Если ЗначениеЗаполнено(ЭтотОбъект[Элемент.Имя]) Тогда + Помещения.Number = ЭтотОбъект[Элемент.Имя]; + Иначе + НаселенныйПунктДетально.Buildings.Удалить(ИндексПозиции); + КонецЕсли; + ЭтоНовый = Ложь; + Прервать; + КонецЕсли; + КонецЦикла; + + Если ЭтоНовый Тогда + НаселенныйПунктДетально.Buildings.Добавить(ЗначениеСтроенияИлиПомещения(Значение, ЭтотОбъект[Элемент.Имя])); + КонецЕсли; + + ОбновитьПредставлениеАдреса(); + Модифицированность = Истина; КонецПроцедуры -&НаСервере -Функция ОтобразитьДополнительныеПомещения(ФокусНаТип = Ложь) - - Удалять = Новый Массив; - Пока Элементы.ГруппаПомещенияДополнительно.ПодчиненныеЭлементы.Количество() > 0 Цикл - Группа = Элементы.ГруппаПомещенияДополнительно.ПодчиненныеЭлементы[0]; - Если ТипЗнч(Группа)=Тип("ГруппаФормы") Тогда - Идентификатор = Сред(Группа.Имя, 1 + СтрДлина("ГруппаПомещение")); - Если Не ПустаяСтрока(Идентификатор) Тогда - Удалять.Добавить("ТипПомещения" + Идентификатор); - Удалять.Добавить("Помещение" + Идентификатор); - КомандаУдалить = Команды.Найти("УдалитьПомещение" + Идентификатор); - Если КомандаУдалить<>Неопределено Тогда - Команды.Удалить(КомандаУдалить); - КонецЕсли; - КонецЕсли; - УдалитьГруппуЭлементов(Группа); - Иначе - Элементы.Удалить(Группа); - КонецЕсли; - КонецЦикла; - ИзменитьРеквизиты(,Удалять); - - КоличествоПомещений = ДополнительныеПомещения.Количество() - 1; - КоличествоТипов = Элементы.ТипПомещения.СписокВыбора.Количество() - 2; - - Результат = Неопределено; - Для НомерСтроки = 0 По КоличествоПомещений Цикл - Строка = ДополнительныеПомещения[НомерСтроки]; - Идентификатор = Формат(НомерСтроки, "ЧН=; ЧГ="); - - НоваяГруппа = Элементы.Добавить("ГруппаПомещение" + Идентификатор, Тип("ГруппаФормы"), Элементы.ГруппаПомещенияДополнительно); - ЗаполнитьЗначенияСвойств(НоваяГруппа, Элементы.ГруппаПомещениеНачальное, , "ПутьКДаннымЗаголовка"); - - НовыйТип = Элементы.Добавить("ТипПомещения" + Идентификатор, Тип("ПолеФормы"), НоваяГруппа); - ЗаполнитьЗначенияСвойств(НовыйТип, Элементы.ТипПомещения, , "ПутьКДанным, СписокВыбора, ВыделенныйТекст, СвязьПоТипу"); - НовыйТип.СписокВыбора.ЗагрузитьЗначения(Элементы.ТипПомещения.СписокВыбора.ВыгрузитьЗначения()); - НовыйТип.УстановитьДействие("ПриИзменении", "Подключаемый_ТипПомещенияПриИзменении"); - - НовыйЭлемент = Элементы.Добавить("Помещение" + Идентификатор, Тип("ПолеФормы"), НоваяГруппа); - ЗаполнитьЗначенияСвойств(НовыйЭлемент, Элементы.Помещение, , "ПутьКДанным, СписокВыбора, ВыделенныйТекст, СвязьПоТипу"); - НовыйЭлемент.СписокВыбора.ЗагрузитьЗначения(Элементы.Помещение.СписокВыбора.ВыгрузитьЗначения()); - НовыйЭлемент.УстановитьДействие("ПриИзменении", "Подключаемый_ПомещениеПриИзменении"); - - Если НомерСтроки = КоличествоПомещений Тогда - Если ФокусНаТип Тогда - Результат = НовыйТип.Имя; - Иначе - Результат = НовыйЭлемент.Имя; - КонецЕсли; - КонецЕсли; - - Добавлять = Новый Массив; - Добавлять.Добавить(Новый РеквизитФормы(НовыйТип.Имя, Новый ОписаниеТипов("Строка"))); - Добавлять.Добавить(Новый РеквизитФормы(НовыйЭлемент.Имя, Новый ОписаниеТипов("Строка"))); - - ИзменитьРеквизиты(Добавлять); - ЭтотОбъект[НовыйТип.Имя] = Строка.Тип; - ЭтотОбъект[НовыйЭлемент.Имя] = Строка.Значение; - - НовыйТип.ПутьКДанным = НовыйТип.Имя; - НовыйЭлемент.ПутьКДанным = НовыйЭлемент.Имя; - КонецЦикла; - - Возврат Результат; -КонецФункции - &НаКлиенте Процедура Подключаемый_ТипПомещенияПриИзменении(Элемент) - НомерСтроки = Сред(Элемент.Имя, 1 + СтрДлина("ТипПомещения")); - СтрокаПомещений = ДополнительныеПомещения.Получить(НомерСтроки); - СтрокаПомещений.Тип = ЭтотОбъект[Элемент.Имя]; - СтрокаПомещений.ПутьXPath = РаботаСАдресамиКлиентСервер.XPathНомераДополнительногоОбъектаАдресации(СтрокаПомещений.Тип); - Контекст = КонтекстФормыКлиент(); - ЗаполнитьПредставлениеАдреса(Контекст); - КонтекстФормыКлиент(Контекст); + Идентификатор = Сред(Элемент.Имя, 13); + НайденныеСтрокиСтарые = ДополнительныеСтроенияИПомещения.НайтиСтроки(Новый Структура("ИмяЭлемента", Идентификатор)); + Если НайденныеСтрокиСтарые.Количество() > 0 Тогда + СтароеЗначение = НайденныеСтрокиСтарые[0].ПредыдущиеЗначение; + КонецЕсли; + + Значение = ПерваяБукваЗаглавная(ЭтотОбъект[Элемент.Имя]); + Если ПустаяСтрока(Значение) Тогда + ЭтотОбъект[Элемент.Имя] = СтароеЗначение; // Такое значение есть на форме, откатываем на старое. + Возврат; + КонецЕсли; + + НайденныеСтрокиНовый = ДополнительныеСтроенияИПомещения.НайтиСтроки(Новый Структура("Значение", Значение)); + Если НайденныеСтрокиНовый.Количество() > 0 Тогда + + Если НайденныеСтрокиНовый[0].Видимость = Ложь Тогда + ЭтотОбъект[Элемент.Имя] = СтароеЗначение; // Такое значение есть на форме, откатываем на старое. + Возврат; + КонецЕсли; + + НайденныеСтрокиНовый[0].ИмяЭлемента = Идентификатор; + НайденныеСтрокиСтарые[0].ИмяЭлемента = ""; + Если СтрСравнить(НайденныеСтрокиСтарые[0].Значение, НаименованиеПриДобавлениеПроизвольногоПомещения()) <> 0 Тогда + НайденныеСтрокиСтарые[0].ПредыдущиеЗначение = ЭтотОбъект[Элемент.Имя]; + Иначе + НайденныеСтрокиСтарые[0].ПредыдущиеЗначение = НаименованиеПриДобавлениеПроизвольногоПомещения(); + КонецЕсли; + Иначе + + НовоеПомещение = ДополнительныеСтроенияИПомещения.Добавить(); + НовоеПомещение.Тип = "Помещение"; + НовоеПомещение.Значение = Значение; + НовоеПомещение.Видимость = Ложь; + НовоеПомещение.Ключ = ""; + НовоеПомещение.ПредыдущиеЗначение = ЭтотОбъект[Элемент.Имя]; + НовоеПомещение.ИмяЭлемента = Идентификатор; + НайденныеСтрокиСтарые[0].ИмяЭлемента = ""; + + КонецЕсли; + + Для каждого Помещения Из НаселенныйПунктДетально.Apartments Цикл + Если СтрСравнить(Помещения.Type, СтароеЗначение) = 0 Тогда + Помещения.Type = ЭтотОбъект[Элемент.Имя]; + ОбновитьПредставлениеАдреса(); + Прервать; + КонецЕсли; + КонецЦикла; + + ОбновитьМенюДобавленияСтроенийИПомещений(); Модифицированность = Истина; + КонецПроцедуры &НаКлиенте Процедура Подключаемый_ПомещениеПриИзменении(Элемент) - НомерСтроки = Сред(Элемент.Имя, 1 + СтрДлина("Помещение")); - СтрокаЗданий = ДополнительныеПомещения.Получить(НомерСтроки); - СтрокаЗданий.Значение = ЭтотОбъект[Элемент.Имя]; - Контекст = КонтекстФормыКлиент(); - ЗаполнитьПредставлениеАдреса(Контекст); - КонтекстФормыКлиент(Контекст); + Идентификатор = Сред(Элемент.Имя, 10); + + НайденныеСтроки = ДополнительныеСтроенияИПомещения.НайтиСтроки(Новый Структура("ИмяЭлемента", Идентификатор)); + Если НайденныеСтроки.Количество() > 0 Тогда + Если СтрСравнить(НайденныеСтроки[0].Значение, НаименованиеПриДобавлениеПроизвольногоПомещения()) <> 0 Тогда + Значение = НайденныеСтроки[0].Значение; + Иначе + Значение = НайденныеСтроки[0].ПредыдущиеЗначение; + КонецЕсли; + Иначе + Возврат; + КонецЕсли; + + ЭтоНовый = Истина; + Для ИндексПозиции = 0 По НаселенныйПунктДетально.Apartments.Количество() - 1 Цикл + Помещения = НаселенныйПунктДетально.Apartments[ИндексПозиции]; + Если СтрСравнить(Помещения.Type, Значение) = 0 Тогда + Если ЗначениеЗаполнено(ЭтотОбъект[Элемент.Имя]) Тогда + Помещения.Number = ЭтотОбъект[Элемент.Имя]; + Иначе + НаселенныйПунктДетально.Apartments.Удалить(ИндексПозиции); + КонецЕсли; + ЭтоНовый = Ложь; + Прервать; + КонецЕсли; + КонецЦикла; + + Если ЭтоНовый Тогда + НаселенныйПунктДетально.Apartments.Добавить(ЗначениеСтроенияИлиПомещения(Значение, ЭтотОбъект[Элемент.Имя])); + КонецЕсли; + ОбновитьПредставлениеАдреса(); Модифицированность = Истина; + +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьПомещениеИзАдреса(УдаляемыйТипПомещения) + + Для ИндексПозиции = 0 По НаселенныйПунктДетально.Apartments.Количество() - 1 Цикл + СведенияОПомещении = НаселенныйПунктДетально.Apartments[ИндексПозиции]; + Если СтрСравнить(СведенияОПомещении.Type, УдаляемыйТипПомещения) =0 Тогда + НаселенныйПунктДетально.Apartments.Удалить(ИндексПозиции); + Возврат; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьМенюДобавленияСтроенийИПомещений() + + Для каждого СтроениеПомещение Из ДополнительныеСтроенияИПомещения Цикл + + Если ЗначениеЗаполнено(СтроениеПомещение.Ключ) Тогда + + Если ЗначениеЗаполнено(СтроениеПомещение.ИмяЭлемента) + Или СтрСравнить(СтроениеПомещение.Значение, ТипПомещения) = 0 + Или СтрСравнить(СтроениеПомещение.Значение, ТипСтроения) = 0 Тогда + СтроениеПомещение.Видимость = Ложь; + Элементы["Добавить_"+ СтроениеПомещение.Ключ].Видимость = Ложь; + Иначе + СтроениеПомещение.Видимость = Истина; + Элементы["Добавить_"+ СтроениеПомещение.Ключ].Видимость = Истина; + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + КонецПроцедуры &НаКлиенте @@ -2677,8 +2380,9 @@ КоличествоОшибок = СписокОшибок.Количество(); Если КоличествоОшибок = 0 И ПредупреждатьОбОтсутствии Тогда + Элементы.ГруппаОписаниеНедоступностиСервера.Видимость = Ложь; // Нет ошибок - Если НЕ ЭтоВебСервис И ТребуетсяОбновление Тогда + Если НЕ ВебСервисИспользуется И ТребуетсяОбновление Тогда Если ЕстьПравоЗагружатьКлассификатор Тогда СообщениеОПроверкеАдреса = НСтр("ru='Адрес введен корректно, но адресные сведения, загруженные в программу, давно не обновлялись. |Рекомендуется выполнить обновление и повторить проверку адреса заново.'"); @@ -2694,17 +2398,16 @@ КонецЕсли; Элементы.ГруппаОписаниеНедоступностиСервера.ТекущаяСтраница = Элементы.СервисДоступен; + Элементы.СообщениеОбОшибке.Видимость = Ложь; Возврат; КонецЕсли; Если КоличествоОшибок = 1 Тогда МестоОшибки = СписокОшибок[0].Значение; - Если СписокОшибок[0].Пометка = Ложь И НЕ ЭтоВебСервис Тогда - + Если СписокОшибок[0].Пометка = Ложь И НЕ ВебСервисИспользуется Тогда ТекстВопроса = НСтр("ru = 'Адрес не может быть проверен.'") + Символы.ПС + СписокОшибок[0].Представление + Символы.ПС + НСтр("ru = 'Загрузить классификатор для проверки адреса?'"); ПредложениеЗагрузкиКлассификатора(ТекстВопроса); Возврат; - ИначеЕсли ПустаяСтрока(МестоОшибки) Или МестоОшибки = "/" Тогда // Одна ошибка на весь адрес, не привязанная к полю. ПоказатьПредупреждение(, СписокОшибок[0].Представление); @@ -2714,10 +2417,12 @@ КонецЕсли; Элементы.ГруппаОписаниеНедоступностиСервера.ТекущаяСтраница = Элементы.СообщениеОбОшибке; + Элементы.ГруппаОписаниеНедоступностиСервера.Видимость = Истина; + Элементы.СообщениеОбОшибке.Видимость = Истина; // Сообщаем список с привязкой к полям. Для Каждого Элемент Из СписокОшибок Цикл ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - Элемент.Представление,,,ПутьКДаннымФормыПоПутиXPath(Элемент.Значение)); + Элемент.Представление,,, Элемент.Значение); КонецЦикла; КонецПроцедуры @@ -2734,335 +2439,78 @@ КонецЕсли; КонецПроцедуры -&НаКлиенте -Функция ПутьКДаннымФормыПоПутиXPath(ПутьXPath) - - Если ПутьXPath = "СубъектРФ" Тогда - Возврат "НаселенныйПункт"; - - ИначеЕсли ПутьXPath = "Округ" Тогда - Возврат "НаселенныйПункт"; - - ИначеЕсли ПутьXPath = РаботаСАдресамиКлиентСервер.XPathРайона() Тогда - Возврат "НаселенныйПункт"; - - ИначеЕсли ПутьXPath = "Город" Тогда - Возврат "НаселенныйПункт"; - - ИначеЕсли ПутьXPath = "ВнутригРайон" Тогда - Возврат "НаселенныйПункт"; - - ИначеЕсли ПутьXPath = "НаселПункт" Тогда - Возврат "НаселенныйПункт"; - - ИначеЕсли ПутьXPath = "Улица" Тогда - Возврат "Улица"; - - ИначеЕсли ПутьXPath = РаботаСАдресамиКлиентСервер.XPathПочтовогоИндекса() Тогда - Возврат "Индекс"; - - КонецЕсли; - - // Дополнительно добавленные строения и помещения. - Фильтр = Новый Структура("ПутьXPath", ПутьXPath); - - Строки = ДополнительныеЗдания.НайтиСтроки(Фильтр); - Если Строки.Количество() > 0 Тогда - // Первое непустое - Для Каждого СтрокаЗдания Из Строки Цикл - ИмяРеквизита = "Строение" + Формат(ДополнительныеЗдания.Индекс(СтрокаЗдания), "ЧН=; ЧГ="); - Если ЗначениеЗаполнено(ЭтотОбъект[ИмяРеквизита]) Тогда - Возврат ИмяРеквизита; - КонецЕсли; - КонецЦикла; - КонецЕсли; - - Строки = ДополнительныеПомещения.НайтиСтроки(Фильтр); - Если Строки.Количество() > 0 Тогда - // Первое непустое - Для Каждого СтрокаПомещения Из Строки Цикл - ИмяРеквизита = "Помещение" + Формат(ДополнительныеПомещения.Индекс(СтрокаПомещения), "ЧН=; ЧГ="); - Если ЗначениеЗаполнено(ЭтотОбъект[ИмяРеквизита]) Тогда - Возврат ИмяРеквизита; - КонецЕсли; - КонецЦикла; - КонецЕсли; - - // Варианты дома - Для Каждого ЭлементСписка Из Элементы.ТипДома.СписокВыбора Цикл - Если ПутьXPath = РаботаСАдресамиКлиентСервер.XPathНомераДополнительногоОбъектаАдресации(ЭлементСписка.Значение) Тогда - Возврат "Дом"; - КонецЕсли; - КонецЦикла; - - // Варианты корпуса - Для Каждого ЭлементСписка Из Элементы.ТипСтроения.СписокВыбора Цикл - Если ПутьXPath = РаботаСАдресамиКлиентСервер.XPathНомераДополнительногоОбъектаАдресации(ЭлементСписка.Значение) Тогда - Возврат "Строение"; - КонецЕсли; - КонецЦикла; - - // Варианты помещения - Для Каждого ЭлементСписка Из Элементы.ТипПомещения.СписокВыбора Цикл - Если ПутьXPath = РаботаСАдресамиКлиентСервер.XPathНомераДополнительногоОбъектаАдресации(ЭлементСписка.Значение) Тогда - Возврат "Помещение"; - КонецЕсли; - КонецЦикла; - - // Не нашли - Возврат ""; -КонецФункции - &НаКлиенте Процедура ОчиститьАдресКлиент() - Контекст = КонтекстФормыКлиент(); - ОчиститьАдресСервер(Контекст); - КонтекстФормыКлиент(Контекст); - - Модифицированность = Истина; -КонецПроцедуры - -&НаСервере -Процедура ОчиститьАдресСервер(Контекст) - - Контекст.ПредставлениеАдреса = ""; - Контекст.Комментарий = ""; - Контекст.Индекс = Неопределено; - Контекст.ОКТМО = Неопределено; - Контекст.ИдентификаторНаселенногоПункта = Неопределено; - Контекст.НаселенныйПункт = ""; - Контекст.НаселенныйПунктДетально = Обработки.РасширенныйВводКонтактнойИнформации.СписокРеквизитовНаселенныйПункт(Неопределено, "ФИАС"); - - Контекст.ИдентификаторУлицы = Неопределено; - Контекст.Улица = ""; - - Контекст.ТипДома = УправлениеКонтактнойИнформациейКлиентСервер.ПервыйИлиПустой(Элементы.ТипДома.СписокВыбора); - Контекст.ТипСтроения = УправлениеКонтактнойИнформациейКлиентСервер.ПервыйИлиПустой(Элементы.ТипСтроения.СписокВыбора); - Контекст.ТипПомещения = УправлениеКонтактнойИнформациейКлиентСервер.ПервыйИлиПустой(Элементы.ТипПомещения.СписокВыбора); - - Контекст.Дом = ""; - Контекст.Строение = ""; - Контекст.Помещение = ""; - - Контекст.ДополнительныеЗдания.Очистить(); - Контекст.ДополнительныеПомещения.Очистить(); - - XDTOКонтактнаяИнфо = КонтактнаяИнформацияПоЗначениюРеквизитов(Контекст); - СформироватьДетальныйНаселенныйПункт(Контекст, XDTOКонтактнаяИнфо.Состав); - ЗаполнитьПредставлениеАдреса(Контекст, XDTOКонтактнаяИнфо); - - // Очищаем непосредственно на форме, в контексте уже очищено. - Контекст.ДополнительныеЗдания.Очистить(); - Контекст.ДополнительныеПомещения.Очистить(); - ОтобразитьДополнительныеЗданияИПомещения(); -КонецПроцедуры - -&НаКлиенте -Функция НеиспользованныеЭлементыДополнительнойТаблицы(ТаблицаДанных, ЭлементИсточник, ЗначениеМаркера) - Использованные = Новый Соответствие; - Использованные.Вставить(ЭтотОбъект[ЭлементИсточник.Имя], Истина); - Для Каждого Строка Из ТаблицаДанных Цикл - Использованные.Вставить(Строка.Тип, Истина); + Для каждого ЭлементАдреса Из НаселенныйПунктДетально Цикл + + Если СтрСравнить(ЭлементАдреса.Ключ, "type") = 0 Тогда + Продолжить; + ИначеЕсли СтрСравнить(ЭлементАдреса.Ключ, "buildings") = 0 ИЛИ СтрСравнить(ЭлементАдреса.Ключ, "apartments") = 0 Тогда + НаселенныйПунктДетально[ЭлементАдреса.Ключ] = Новый Массив; + Иначе + НаселенныйПунктДетально[ЭлементАдреса.Ключ] = ""; + КонецЕсли; + КонецЦикла; - Результат = Новый СписокЗначений; - Для Каждого ЭлементСписка Из ЭлементИсточник.СписокВыбора Цикл - Если Использованные[ЭлементСписка.Значение]=Неопределено Тогда - Результат.Добавить(ЗначениеМаркера, ЭлементСписка.Значение, ЭлементСписка.Пометка, ЭлементСписка.Картинка); + Если ВидКонтактнойИнформации.ТолькоНациональныйАдрес Тогда + НаселенныйПунктДетально.country = РаботаСАдресамиКлиентСервер.ОсновнаяСтрана(); + КонецЕсли; + + НаселенныйПунктДетально.addressType = РаботаСАдресамиКлиентСервер.МуниципальныйАдрес(); + ОтобразитьДополнительныеЗдания(); + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура НаселенныйПунктУстановитьПоляАдреса(НаселенныйПунктДетально, Знач ВыбранноеЗначение) + + Если ВыбранноеЗначение.Свойство("Адрес") И ЗначениеЗаполнено(ВыбранноеЗначение.Адрес) Тогда + ПолученныйАдрес = УправлениеКонтактнойИнформациейСлужебный.СтрокаJSONВСтруктуру(ВыбранноеЗначение.Адрес); + ПолученныйАдрес.addressType = ?(СтрСравнить(ПолученныйАдрес.addressType,"TERRITORIAL") = 0, + РаботаСАдресамиКлиентСервер.АдминистративноТерриториальныйАдрес(), + РаботаСАдресамиКлиентСервер.МуниципальныйАдрес()); + Иначе + ПолученныйАдрес = ОпределитьАдресПоИдентификатору(ВыбранноеЗначение); + КонецЕсли; + ИменаУровнейНаселенногоПункта = РаботаСАдресамиКлиентСервер.ИменаУровнейАдреса("Все", Ложь); + Для каждого ИмяУровня Из ИменаУровнейНаселенногоПункта Цикл + Если ПолученныйАдрес.Свойство(ИмяУровня) Тогда + НаселенныйПунктДетально[ИмяУровня] = ПолученныйАдрес[ИмяУровня]; + НаселенныйПунктДетально[ИмяУровня + "Type"] = ПолученныйАдрес[ИмяУровня + "Type"]; + НаселенныйПунктДетально[ИмяУровня + "Id"] = ПолученныйАдрес[ИмяУровня + "Id"]; КонецЕсли; КонецЦикла; - Возврат Результат; -КонецФункции + НаселенныйПунктДетально.houseId = ""; + НаселенныйПунктДетально.AddressType = ПолученныйАдрес.AddressType; + + Если ЗначениеЗаполнено(ПолученныйАдрес.ZipCode) Тогда + НаселенныйПунктДетально.ZipCode = ПолученныйАдрес.ZipCode; + КонецЕсли; + + Если ЗначениеЗаполнено(ПолученныйАдрес.OKTMO) Тогда + НаселенныйПунктДетально.OKTMO = ПолученныйАдрес.OKTMO; + КонецЕсли; + + Если ЗначениеЗаполнено(НаселенныйПунктДетально.Street) + Или ЗначениеЗаполнено(НаселенныйПунктДетально.HouseNumber) + Или НаселенныйПунктДетально.Buildings.Количество() > 0 Тогда + УстановитьИдентификаторыАдреса(НаселенныйПунктДетально); + КонецЕсли; + +КонецПроцедуры -&НаКлиенте -Функция МожноДобавлятьДополнительныеОбъекты() - ВариантыСтроения = НеиспользованныеЭлементыДополнительнойТаблицы(ДополнительныеЗдания, Элементы.ТипСтроения, 1); - ВариантыПомещения = НеиспользованныеЭлементыДополнительнойТаблицы(ДополнительныеПомещения, Элементы.ТипПомещения, 2); - Возврат ВариантыСтроения.Количество() + ВариантыПомещения.Количество() > 0 -КонецФункции &НаСервере Процедура УстановитьКлючИспользованияФормы() КлючСохраненияПоложенияОкна = Строка(Страна); - Количество = 0; - Для Каждого Строка Из ДополнительныеЗдания Цикл - Если Не ПустаяСтрока(Строка.Значение) Тогда - Количество = Количество + 1; - КонецЕсли; - КонецЦикла; - КлючСохраненияПоложенияОкна = КлючСохраненияПоложенияОкна + "/" + Формат(Количество, "ЧН=; ЧГ="); - - Количество = 0; - Для Каждого Строка Из ДополнительныеПомещения Цикл - Если Не ПустаяСтрока(Строка.Значение) Тогда - Количество = Количество + 1; - КонецЕсли; - КонецЦикла; - - КлючСохраненияПоложенияОкна = КлючСохраненияПоложенияОкна + "/" + Формат(Количество, "ЧН=; ЧГ="); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////////////////////////// -// Преобразовываем Реквизиты формы <-> Структура -// -&НаКлиенте -Функция КонтекстФормыКлиент(НовыеДанные = Неопределено) - - СписокРеквизитов = " - |ВидКонтактнойИнформации, - |Страна, КодСтраны, ОсновнаяСтрана, СкрыватьНеактуальныеАдреса, - |Индекс, ПредставлениеАдреса, Комментарий, КопияКомментария, - |НаселенныйПункт, ИдентификаторНаселенногоПункта, НаселенныйПунктДетально, - |Улица, ИдентификаторУлицы, ОКТМО, ИдентификаторУлицы, - |ТипДома, Дом, ТипСтроения, Строение, ТипПомещения, Помещение, - |РазрешитьВводАдресаВСвободнойФорме, ПредставлениеАдресаИзменено, - |Модифицированность, ЕстьКлассификатор, ДополнительныйЭлемент, ПодчиненныйЭлемент, ЭтоВебСервис, АдресНаДату - |"; - - СписокКоллекций = "ДополнительныеЗдания, ДополнительныеПомещения"; - - Если НовыеДанные = Неопределено Тогда - // Читаем - Результат = Новый Структура(СписокРеквизитов + "," + СписокКоллекций); - ЗаполнитьЗначенияСвойств(Результат, ЭтотОбъект, СписокРеквизитов + "," + СписокКоллекций); - Возврат Результат; - КонецЕсли; - - ЗаполнитьЗначенияСвойств(ЭтотОбъект, НовыеДанные, СписокРеквизитов, СписокКоллекций); - ЗаполнитьЗначенияКоллекций(ЭтотОбъект, НовыеДанные, СписокКоллекций); - - Возврат НовыеДанные; -КонецФункции - -&НаКлиенте -Процедура ЗаполнитьЗначенияКоллекций(Приемник, Источник, СписокСвойств) - Для Каждого КлючЗначение Из Новый Структура(СписокСвойств) Цикл - ИмяСвойства = КлючЗначение.Ключ; - СвойствоПриемник = Приемник[ИмяСвойства]; - СвойствоПриемник.Очистить(); - Для Каждого Значение Из Источник[ИмяСвойства] Цикл - ЗаполнитьЗначенияСвойств(СвойствоПриемник.Добавить(), Значение); - КонецЦикла; - КонецЦикла; -КонецПроцедуры - -// Разрешение элементов для ввода в свободном формате. -// -// Параметры: -// - Режим - Булево - Истина - можно редактировать представление адреса, Ложь - нельзя. -// - ФормироватьПредставление - Булево - необязательный флаг. По умолчанию установлен. -// -&НаКлиенте -Процедура СостояниеВводаПредставленияАдреса(РедактироватьПредставлениеАдреса, ФормироватьПредставление = Истина) - - Если МеждународныйФорматАдреса Тогда - Элемент = Элементы.ПредставлениеМеждународногоАдреса; - Иначе - Если Страна = ОсновнаяСтрана Тогда - Элемент = Элементы.ПредставлениеАдреса; - // Проверять адрес, введенный вручную нельзя. - Элементы.ПроверитьЗаполнениеАдреса.Доступность = Не РедактироватьПредставлениеАдреса; - Иначе - Элемент = Элементы.ПредставлениеИностранногоАдреса; - КонецЕсли; - КонецЕсли; - - Элемент.ТолькоПросмотр = Не РедактироватьПредставлениеАдреса; - Если РедактироватьПредставлениеАдреса Тогда - Элемент.ЦветФона = АвтоЦвет; - Иначе - Элемент.ЦветФона = ЦветФонаФормы; - - Если ФормироватьПредставление Тогда - Контекст = КонтекстФормыКлиент(); - ЗаполнитьПредставлениеАдреса(Контекст); - КонтекстФормыКлиент(Контекст); - КонецЕсли; - КонецЕсли; - Элементы.Индекс.Доступность = НЕ РедактироватьПредставлениеАдреса; - Элементы.ОКТМО.Доступность = НЕ РедактироватьПредставлениеАдреса; - - // Остальные поля ввода - СостояниеГруппыВвода(Элементы.ТипАдреса, Не РедактироватьПредставлениеАдреса); - - // Пометка режима - Элементы.ВвестиАдресВСвободнойФорме.Пометка = РедактироватьПредставлениеАдреса; - Элементы.ВвестиАдресВСвободнойФормеВсеДействия.Пометка = РедактироватьПредставлениеАдреса; - Элементы.ПредставлениеАдресаКонтекстноеМенюВвестиАдресВСвободнойФорме.Пометка = РедактироватьПредставлениеАдреса; - - // Страна - по прежнему управляющее поле. - Если Элементы.Страна.Доступность Тогда - Элементы.Страна.ЦветФона = ЦветФонаУправляющегоПоля; - КонецЕсли; - - // Переключаем заголовок представления и текущий элемент ввода для индикации режима. - Если РедактироватьПредставлениеАдреса Тогда - Элементы.ПредставлениеАдреса.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх; - Элементы.ПредставлениеАдреса.Заголовок = НСтр("ru='Адрес в свободной форме'"); - Элементы.СтранаАдреса.Отображение = ОтображениеОбычнойГруппы.Нет; - Если МеждународныйФорматАдреса Тогда - ТекущийЭлемент = Элементы.ПредставлениеМеждународногоАдреса; - ИначеЕсли Страна <> ОсновнаяСтрана Тогда - ТекущийЭлемент = Элементы.ПредставлениеИностранногоАдреса; - Иначе - ТекущийЭлемент = Элементы.ПредставлениеАдреса; - КонецЕсли; - Иначе - Элементы.ПредставлениеАдреса.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; - Элементы.ПредставлениеАдреса.Заголовок = ""; - Элементы.СтранаАдреса.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение; - Если МеждународныйФорматАдреса Тогда - ТекущийЭлемент = Элементы.НаселенныйПунктМеждународныеАдреса; - ИначеЕсли Страна = ОсновнаяСтрана Тогда - ТекущийЭлемент = Элементы.НаселенныйПункт; - Иначе - ТекущийЭлемент = Элементы.НаселенныйПунктИностранныйАдреса; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -// Установка доступности элементов в группе. -// -// Параметры: -// - Группа - ГруппаФормы - Контейнер для элементов. -// - Режим - Булево - Флаг разрешения элементов. Истина - разрешены, Ложь - нет. -// -&НаКлиенте -Процедура СостояниеГруппыВвода(Группа, Режим) - - Для Каждого Элемент Из Группа.ПодчиненныеЭлементы Цикл - ТипЭлемента = ТипЗнч(Элемент); - Если ТипЭлемента = Тип("ГруппаФормы") Тогда - Если Элемент <> Элементы.ИностранныйАдрес И Элемент <> Элементы.МеждународныйАдрес Тогда - СостояниеГруппыВвода(Элемент, Режим); - КонецЕсли; - - ИначеЕсли ТипЭлемента = Тип("КнопкаФормы") Тогда - Если Элемент = Элементы.ДобавитьОбъект Тогда - Элемент.Доступность = Режим И МожноДобавлятьДополнительныеОбъекты(); - Иначе - Элемент.Доступность = Режим; - КонецЕсли; - - ИначеЕсли ТипЭлемента = Тип("ПолеФормы") И Элемент.Вид = ВидПоляФормы.ПолеВвода Тогда - Если Элемент <> Элементы.ПредставлениеАдреса Тогда - Элемент.ТолькоПросмотр = Не Режим; - Элемент.ЦветФона = ?(Режим, АвтоЦвет, ЦветФонаФормы); - КонецЕсли; - - Иначе - Элемент.Доступность = Режим; - - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - &НаКлиенте Процедура ПроверитьДоступностьКлассификатора() @@ -3114,132 +2562,66 @@ КонецПроцедуры -&НаКлиенте -Процедура ОбновитьНаселенныйПунктИностранногоАдреса() - - НаселенныйПунктМассив = СтрРазделить(НаселенныйПункт, ",", Ложь); - КоличествоЭлементовВНаселенныйПункт = 0; - СоответствиеУровнейНаселенногоПункта = Новый Соответствие; - Для каждого НаселенныйПунктДетальноЭлемент Из НаселенныйПунктДетально Цикл - Если НЕ (НаселенныйПунктДетальноЭлемент.Значение.Уровень = 2 ИЛИ НаселенныйПунктДетальноЭлемент.Значение.Уровень = 5 - ИЛИ НаселенныйПунктДетальноЭлемент.Значение.Уровень > 6) Тогда - Если ЗначениеЗаполнено(НаселенныйПунктДетальноЭлемент.Значение.Представление) Тогда - КоличествоЭлементовВНаселенныйПункт = КоличествоЭлементовВНаселенныйПункт + 1; - КонецЕсли; - КонецЕсли; - СоответствиеУровнейНаселенногоПункта.Вставить(НаселенныйПунктДетальноЭлемент.Значение.Уровень, НаселенныйПунктДетальноЭлемент); - КонецЦикла; - - ПозицияВМассиве = НаселенныйПунктМассив.Количество() - 1; - - Если ПозицияВМассиве >=0 Тогда - Если НаселенныйПунктМассив.Количество() = КоличествоЭлементовВНаселенныйПункт Тогда - Для Уровень = 1 По 6 Цикл - Если НЕ (Уровень = 2 ИЛИ Уровень = 5) Тогда - Элемент = СоответствиеУровнейНаселенногоПункта.Получить(Уровень); - Если Элемент <> Неопределено И ЗначениеЗаполнено(Элемент.Значение.Представление) Тогда - Элемент.Значение.Представление = СокрЛП(НаселенныйПунктМассив.Получить(ПозицияВМассиве)); - ПозицияВМассиве = ПозицияВМассиве - 1; - КонецЕсли; - КонецЕсли; - КонецЦикла; - Иначе - Для Уровень = 1 По 6 Цикл - Если НЕ (Уровень = 2 ИЛИ Уровень = 5) Тогда - Элемент = СоответствиеУровнейНаселенногоПункта.Получить(Уровень); - Если Элемент <> Неопределено Тогда - Если ПозицияВМассиве >= 0 Тогда - Элемент.Значение.Представление = СокрЛП(НаселенныйПунктМассив.Получить(ПозицияВМассиве)); - ПозицияВМассиве = ПозицияВМассиве - 1; - Иначе - Элемент.Значение.Представление = ""; - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЦикла; - КонецЕсли; - Иначе - Для Уровень = 1 По 6 Цикл - Элемент = СоответствиеУровнейНаселенногоПункта.Получить(Уровень); - Элемент.Значение.Представление = ""; - КонецЦикла; - КонецЕсли; - - ОбновитьПредставлениеАдреса(); - -КонецПроцедуры - -&НаКлиенте -Процедура ОбновитьПредставлениеАдреса() - Контекст = КонтекстФормыКлиент(); - ЗаполнитьПредставлениеАдреса(Контекст); - КонтекстФормыКлиент(Контекст); -КонецПроцедуры - &НаКлиенте Процедура ЗаполнитьПоляДомовИСтроений(Знач ВыбранноеЗначение) Модифицированность = Истина; - НеобходимоПерерисоватьПоляДомов = Ложь; - - Если ДополнительныеЗдания.Количество() > 0 Тогда - ДополнительныеЗдания.Очистить(); - НеобходимоПерерисоватьПоляДомов = Истина; - КонецЕсли; + НеобходимоПерерисоватьПоляДомов = НаселенныйПунктДетально.Buildings.Количество() > 1; + НаселенныйПунктДетально.ZIPcode = ВыбранноеЗначение.Индекс; + НаселенныйПунктДетально.OKTMO = ВыбранноеЗначение.ОКТМО; + Если ВыбранноеЗначение.Свойство("Дом") Тогда - ИнформацияОДоме = ВыбранноеЗначение.Дом; - Дом = ИнформацияОДоме.НомерВладения; - ТипДома = ИнформацияОДоме.ВидВладения; - Иначе - ИнформацияОДоме = Неопределено; - КонецЕсли; - - ИнформацияОКорпусе = Неопределено; - ИнформацияОСтроение = Неопределено; - ВыбранноеЗначение.Свойство("Корпус", ИнформацияОКорпусе); - ВыбранноеЗначение.Свойство("Строение", ИнформацияОСтроение); - - СтроениеПустое = Истина; - Элементы.Дом.ОбновитьТекстРедактирования(); - - Если ИнформацияОКорпусе <> Неопределено Тогда - Строение = ИнформацияОКорпусе.НомерКорпуса; - ТипСтроения = ИнформацияОКорпусе.ВидКорпуса; - ТекущийЭлемент = Элементы.Строение; - СтроениеПустое = Ложь; - КонецЕсли; - - Если ИнформацияОСтроение <> Неопределено Тогда - Если ИнформацияОКорпусе <> Неопределено Тогда - ДополнительныеЗдания.Очистить(); - Строка = ДополнительныеЗдания.Добавить(); - - Строка.Тип = ПерваяБукваЗаглавная(ИнформацияОСтроение.ВидСтроения); - Строка.ПутьXPath = РаботаСАдресамиКлиентСервер.XPathНомераДополнительногоОбъектаАдресации(Строка.Тип); - Строка.Значение = ИнформацияОСтроение.НомерСтроения; - НеобходимоПерерисоватьПоляДомов = Истина; - Иначе - Строение = ИнформацияОСтроение.НомерСтроения; - ТипСтроения = ПерваяБукваЗаглавная(ИнформацияОСтроение.ВидСтроения); - ТекущийЭлемент = Элементы.Строение; + НаселенныйПунктДетально.HouseNumber = ВыбранноеЗначение.Дом.НомерВладения; + Если ЗначениеЗаполнено(ВыбранноеЗначение.Дом.ВидВладения) Тогда + НаселенныйПунктДетально.HouseType = ПерваяБукваЗаглавная(ВыбранноеЗначение.Дом.ВидВладения); КонецЕсли; - СтроениеПустое = Ложь; КонецЕсли; - Если СтроениеПустое Тогда - Строение = ""; + НаселенныйПунктДетально.Buildings.Очистить(); + + Если ВыбранноеЗначение.Свойство("Корпус") И ТипЗнч(ВыбранноеЗначение.Корпус) = Тип("Структура") Тогда + СведенияОКорпусе = УправлениеКонтактнойИнформациейКлиентСервер.ЗначениеСтроенияИлиПомещения( + ПерваяБукваЗаглавная(ВыбранноеЗначение.Корпус.ВидКорпуса), ВыбранноеЗначение.Корпус.НомерКорпуса); + НаселенныйПунктДетально.Buildings.Добавить(СведенияОКорпусе); + КонецЕсли; + + Если ВыбранноеЗначение.Свойство("Строение") И ТипЗнч(ВыбранноеЗначение.Строение) = Тип("Структура") Тогда + СведенияОКорпусе = УправлениеКонтактнойИнформациейКлиентСервер.ЗначениеСтроенияИлиПомещения( + ПерваяБукваЗаглавная(ВыбранноеЗначение.Строение.ВидСтроения), + ВыбранноеЗначение.Строение.НомерСтроения); + НаселенныйПунктДетально.Buildings.Добавить(СведенияОКорпусе); + КонецЕсли; + + НаселенныйПунктДетально.houseId = ВыбранноеЗначение.Идентификатор; + НаселенныйПунктДетально.id = ВыбранноеЗначение.Идентификатор; + + // отрисовка + + Индекс = НаселенныйПунктДетально.ZipCode; + ОКТМО = НаселенныйПунктДетально.OKTMO; + + Дом = НаселенныйПунктДетально.HouseNumber; + Если ЗначениеЗаполнено(НаселенныйПунктДетально.HouseType) Тогда + ТипДома = НаселенныйПунктДетально.HouseType; + КонецЕсли; + + Если НаселенныйПунктДетально.Buildings.Количество() > 0 Тогда + Строение = НаселенныйПунктДетально.Buildings[0].Number; + ТипСтроения = НаселенныйПунктДетально.Buildings[0].Type; + Если НаселенныйПунктДетально.Buildings.Количество() > 1 Тогда + НеобходимоПерерисоватьПоляДомов = Истина; + КонецЕсли; + Иначе + Строение = ""; КонецЕсли; - Элементы.Строение.КнопкаВыбора = Не СтроениеПустое; Если НеобходимоПерерисоватьПоляДомов Тогда ПодключитьОбработчикОжидания("ОтобразитьДополнительныеЗданияКлиент", 0.1, Истина); - КоличествоВариантов = НеиспользованныеЭлементыДополнительнойТаблицы(ДополнительныеЗдания, Элементы.ТипСтроения, 1); - Элементы.ДобавитьОбъект.Доступность = КоличествоВариантов.Количество() > 1; + Иначе + ОбновитьПредставлениеАдреса(); КонецЕсли; - ОбновитьИндексИПредставление(); - КонецПроцедуры &НаКлиенте @@ -3251,72 +2633,57 @@ Процедура ОтобразитьДополнительныеЗданияКлиент() ИмяТекущего = ОтобразитьДополнительныеЗдания(); + ОбновитьМенюДобавленияСтроенийИПомещений(); + Если ИмяТекущего <> Неопределено Тогда ТекущийЭлемент = Элементы[ИмяТекущего]; КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ОбновитьИндексИПредставление() - Контекст = КонтекстФормыКлиент(); - УстановитьИндексИПредставление(Контекст); - КонтекстФормыКлиент(Контекст); -КонецПроцедуры - -// Представление разрешено менять только при вводе в режиме ввода в свободной форме. -// Поэтому необходимо привести остальные поля к измененному представлению. -// Страну не трогаем, режим свободного ввода возможен только в России. -// -&НаСервере -Процедура ПредставлениеАдресаПриИзмененииСервер() - - Если Страна = ОсновнаяСтрана Тогда - // Пытаемся разобрать заново - XDTOКонтактная = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOПоПредставлению(ПредставлениеАдреса, ВидКонтактнойИнформации); - XDTOКонтактная.Представление = ПредставлениеАдреса; - XDTOКонтактная.Комментарий = Комментарий; - - // И проставляем в реквизиты, кроме страны и представления. - ТекущееПредставление = ПредставлениеАдреса; - ТекущаяСтрана = Страна; - - ОчиститьАдресСервер(ЭтотОбъект); - - // Возможно будет отключен свободного ввода. - ЗначениеРеквизитовПоКонтактнойИнформации(ЭтотОбъект, XDTOКонтактная); - - ПредставлениеАдреса = ТекущееПредставление; - Страна = ТекущаяСтрана; - ОтобразитьДополнительныеЗданияИПомещения(); - КонецЕсли; - - // Включаем режим свободного ввода принудительно. - РазрешитьВводАдресаВСвободнойФорме = Истина; - Модифицированность = Истина; + ОбновитьПредставлениеАдреса(); КонецПроцедуры &НаСервере Процедура ЗаполнитьПредопределенныеВариантыАдреса(Параметры) - Если Параметры.Свойство("Индекс") Тогда + Если Параметры.Свойство("Индекс") И ЗначениеЗаполнено(Параметры.Индекс) Тогда Индекс = Параметры.Индекс; + НаселенныйПунктДетально.ZipCode = Индекс; + КонецЕсли; + + Если Параметры.Свойство("Страна") И ПустаяСтрока(НаселенныйПунктДетально.Country) Тогда + + Если ТипЗнч(Параметры.Страна) = Тип("СправочникСсылка.СтраныМира") Тогда + Если ЗначениеЗаполнено(Параметры.Страна) Тогда + Страна = Параметры.Страна; + НаселенныйПунктДетально.Country = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Параметры.Страна, "Наименование"); + Иначе + Страна = РаботаСАдресамиКлиентСервер.ОсновнаяСтрана(); + НаселенныйПунктДетально.Country = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Страна, "Наименование"); + КонецЕсли; + Иначе + Страна = УправлениеКонтактнойИнформацией.СтранаМираПоКодуИлиНаименованию(Параметры.Страна); + Если Страна <> Справочники.СтраныМира.ПустаяСсылка() Тогда + НаселенныйПунктДетально.Country = Параметры.Страна; + Иначе + Страна = РаботаСАдресамиКлиентСервер.ОсновнаяСтрана(); + НаселенныйПунктДетально.Country = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Страна, "Наименование"); + КонецЕсли; + КонецЕсли; + + ПереопределитьТипаАдресаПоСтране(Страна, НаселенныйПунктДетально); + КонецЕсли; // Возможные варианты дома, строения, квартиры. ВариантыДанныхДом = Обработки.РасширенныйВводКонтактнойИнформации.ВариантыДанныхДом(); УстановитьСписокВыбораЭлемента(Элементы.ТипДома, Элементы.Дом, ВариантыДанныхДом); - УстановитьСписокВыбораЭлемента(Элементы.ТипДомаИностранныйАдреса, Элементы.ДомИностранныйАдреса, ВариантыДанныхДом); ВариантыДанныхСтроение = Обработки.РасширенныйВводКонтактнойИнформации.ВариантыДанныхСтроение(); УстановитьСписокВыбораЭлемента(Элементы.ТипСтроения, Элементы.Строение, ВариантыДанныхСтроение); - УстановитьСписокВыбораЭлемента(Элементы.ТипСтроенияИностранныйАдреса, Элементы.СтроениеИностранныйАдреса, ВариантыДанныхСтроение); ВариантыДанныхПомещение = Обработки.РасширенныйВводКонтактнойИнформации.ВариантыДанныхПомещение(); УстановитьСписокВыбораЭлемента(Элементы.ТипПомещения, Элементы.Помещение, ВариантыДанныхПомещение); - УстановитьСписокВыбораЭлемента(Элементы.ТипПомещенияИностранныйАдреса, Элементы.ПомещениеИностранныйАдреса, ВариантыДанныхПомещение); Элементы.ТипПомещения.СписокВыбора.НайтиПоЗначению("").Значение = НаименованиеПриДобавлениеПроизвольногоПомещения(); - Элементы.ТипПомещенияИностранныйАдреса.СписокВыбора.НайтиПоЗначению("").Значение = НаименованиеПриДобавлениеПроизвольногоПомещения(); // Возможно пустые значения, чтобы не смущали. Если ПустаяСтрока(Дом) И ПустаяСтрока(ТипДома) Тогда @@ -3334,71 +2701,23 @@ Если ПустаяСтрока(Помещение) И ПустаяСтрока(ТипПомещения) Тогда ТипПомещения = УправлениеКонтактнойИнформациейКлиентСервер.ПервыйИлиПустой(Элементы.ТипПомещения); КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Функция НедоступностьСервиса() - Возврат Элементы.ГруппаОписаниеНедоступностиСервера.ТекущаяСтраница = Элементы.СервисНедоступен; + Для каждого ВариантДанных Из ВариантыДанныхСтроение.ВариантыТипа Цикл + ДобавитьОписаниеСтроенияИлиПомещения(ВариантДанных, "Строение"); + КонецЦикла; -КонецФункции - -&НаСервере -Процедура УстановитьВозможностьПодбораИндексаИНомеровДомов(Знач ЭтоВебСервис) - - ПодборПоИндексуДоступен = Истина; - - Если ЭтоВебСервис Тогда - Элементы.Дом.КнопкаВыбора = Ложь; - Элементы.Строение.КнопкаВыбора = Ложь; - КонецЕсли; - - Если ЭтоВебСервис ИЛИ НЕ ЕстьПравоЗагружатьКлассификатор Тогда - ПодборПоИндексуДоступен = Ложь; - Возврат; - КонецЕсли; - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); - Сведения = МодульАдресныйКлассификаторСлужебный.КраткиеСведенияОЗагрузкеСубъектовРФ(); + Для каждого ВариантДанных Из ВариантыДанныхПомещение.ВариантыТипа Цикл - Если Сведения.КоличествоРегионов <= Сведения.КоличествоЗагруженныхРегионов Тогда - ПодборПоИндексуДоступен = Ложь; + Если ПустаяСтрока(ВариантДанных) Тогда + ВариантДанных = НаименованиеПриДобавлениеПроизвольногоПомещения(); КонецЕсли; - КонецЕсли; + + ДобавитьОписаниеСтроенияИлиПомещения(ВариантДанных, "Помещение", СтрЗаменить(ВариантДанных, "/", "")); + + КонецЦикла; КонецПроцедуры -// Сравниваем два представления на эквивалентность. -&НаСервереБезКонтекста -Функция ПредставленияАдресаОдинаковы(Знач Представление1, Знач Представление2, Знач ИгнорироватьЗнакНомера=Ложь) - Возврат ХешПредставления(Представление1, ИгнорироватьЗнакНомера)=ХешПредставления(Представление2, ИгнорироватьЗнакНомера); -КонецФункции - -&НаСервереБезКонтекста -Функция ХешПредставления(Знач Представление, Знач ИгнорироватьЗнакНомера=Ложь) - Результат = СтрЗаменить(Представление, Символы.ПС, ""); - Результат = СтрЗаменить(Результат, " ", ""); - Если ИгнорироватьЗнакНомера Тогда - Результат = СтрЗаменить(Результат, "№", ""); - КонецЕсли; - Возврат ВРег(Результат); -КонецФункции - -&НаСервереБезКонтекста -Функция НаличиеИндексаВКлассификаторе(ПочтовыйИндекс) - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); - Если МодульАдресныйКлассификаторСлужебный.КодСубъектаРФПоПочтовомуИндексуВКлассификаторе(ПочтовыйИндекс) <> Неопределено Тогда - Возврат Истина; - КонецЕсли; - КонецЕсли; - - Возврат Ложь; -КонецФункции - &НаСервереБезКонтекста Функция СведенияОРегионе(НаименованиеСубъектаРФ) @@ -3420,14 +2739,14 @@ КонецФункции &НаСервереБезКонтекста -Функция НаселенныйПунктДетальноПоИдентификатору(ИдентификаторНаселенногоПункта, ФорматАдреса) - Возврат Обработки.РасширенныйВводКонтактнойИнформации.СписокРеквизитовНаселенныйПункт(ИдентификаторНаселенногоПункта, ФорматАдреса); +Функция ОпределитьАдресПоИдентификатору(СведенияОбАдреса) + Возврат Обработки.РасширенныйВводКонтактнойИнформации.СписокРеквизитовНаселенныйПункт(СведенияОбАдреса); КонецФункции &НаСервереБезКонтекста -Функция СписокАвтоподбораНаселенногоПункта(Текст, ДополнительныеПараметры) +Функция СписокАвтоподбораНаселенногоПункта(Текст) - Возврат Обработки.РасширенныйВводКонтактнойИнформации.СписокАвтоподбораНаселенногоПункта(Текст, ДополнительныеПараметры); + Возврат Обработки.РасширенныйВводКонтактнойИнформации.СписокАвтоподбораНаселенногоПункта(Текст); КонецФункции @@ -3445,9 +2764,9 @@ КонецФункции &НаСервереБезКонтекста -Функция СписокАвтоподбораУлицы(ИдентификаторНаселенногоПункта, Текст, ДополнительныеПараметры) +Функция СписокАвтоподбораУлицы(Текст, ПараметрыАвтоподбора) - Возврат Обработки.РасширенныйВводКонтактнойИнформации.СписокАвтоподбораУлицы(ИдентификаторНаселенногоПункта, Текст, ДополнительныеПараметры); + Возврат Обработки.РасширенныйВводКонтактнойИнформации.СписокАвтоподбораУлицы(Текст, ПараметрыАвтоподбора); КонецФункции @@ -3456,51 +2775,31 @@ Возврат Обработки.РасширенныйВводКонтактнойИнформации.СписокАвтоподбораНомераДомов(Идентификатор, Текст); КонецФункции -&НаСервереБезКонтекста -Функция НаселенныеПунктыПоПредставлению(Текст) - Возврат Обработки.РасширенныйВводКонтактнойИнформации.НаселенныеПунктыПоПредставлению(Текст); -КонецФункции - -&НаСервереБезКонтекста -Функция УлицыПоПредставлению(Родитель, Текст, СкрыватьНеактуальныеАдреса = Ложь, ВыбиратьСтрок = 50) +&НаСервере +Процедура ПриСозданииНаСервереХранитьИсториюИзменений() - Возврат Обработки.РасширенныйВводКонтактнойИнформации.УлицыПоПредставлению(Родитель, Текст, СкрыватьНеактуальныеАдреса, ВыбиратьСтрок); - -КонецФункции - -// УправлениеКонтактнойИнформациейКлиент - -// Обработчик события НачалоВыбора для улицы. -// -// Параметры: -// Владелец - Произвольный - вызывающий элемент формы. -// ИдентификаторНаселенногоПункта - УникальныйИдентификатор - ограничение по населенному пункту. -// ТекущееЗначение - УникальныйИдентификатор, Строка - текущее значение - или код классификатора, -// или текст. -// ДополнительныеПараметры - Структура - дополнительная структура параметров. -// -&НаКлиенте -Процедура НачалоВыбораУлицы(Владелец, ИдентификаторНаселенногоПункта, ТекущееПредставлениеУлицы, ДополнительныеПараметры) - - Если Не ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - Возврат; + Если ВидКонтактнойИнформации.ХранитьИсториюИзменений Тогда + Если Параметры.Свойство("КонтактнаяИнформацияОписаниеДополнительныхРеквизитов") Тогда + Для каждого СтрокаКИ Из Параметры.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов Цикл + НоваяСтрока = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаКИ); + КонецЦикла; + Иначе + Элементы.ИсторияИзменений.Видимость = Ложь; + КонецЕсли; + Элементы.ИсторияИзмененийГиперссылка.Видимость = НЕ Параметры.Свойство("ИзФормыИстории"); + ВводНовогоАдреса = ?(Параметры.Свойство("ВводНовогоАдреса"), Параметры.ВводНовогоАдреса, Ложь); + Если ВводНовогоАдреса Тогда + ДействуетС = Параметры.ДействуетС; + Иначе + ДействуетС = ?(ЗначениеЗаполнено(Параметры.ДействуетС), Параметры.ДействуетС, ТекущаяДатаСеанса()); + КонецЕсли; + ОтобразитьИнформациюОДатахДействияАдреса(ДействуетС); + Иначе + Элементы.ИсторияИзменений.Видимость = Ложь; + Элементы.ГруппаИсторическийАдрес.Видимость = Ложь; КонецЕсли; - - СкрыватьНеактуальныеАдреса = Неопределено; - ДополнительныеПараметры.Свойство("СкрыватьНеактуальныеАдреса", СкрыватьНеактуальныеАдреса); - Если СкрыватьНеактуальныеАдреса = Неопределено Тогда - СкрыватьНеактуальныеАдреса = Ложь; - КонецЕсли; - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("Родитель", ИдентификаторНаселенногоПункта); - ПараметрыФормы.Вставить("ПредставлениеУлицы", ТекущееПредставлениеУлицы); - ПараметрыФормы.Вставить("Уровень", 7); - ПараметрыФормы.Вставить("СкрыватьНеактуальныеАдреса", СкрыватьНеактуальныеАдреса); - ПараметрыФормы.Вставить("НаселенныйПунктДетально", ДополнительныеПараметры.НаселенныйПунктДетально); - - ОткрытьФорму("Обработка.РасширенныйВводКонтактнойИнформации.Форма.ВыборУлицы", ПараметрыФормы, Владелец, - ,,,, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + КонецПроцедуры // Предлагает загрузить адресный классификатор. @@ -3571,4 +2870,222 @@ Возврат НСтр("ru='Другое'"); КонецФункции +&НаСервере +Функция ОпределитьЗначениеАдреса(Параметры) + + Если Параметры.Свойство("Значение") Тогда + Если ПустаяСтрока(Параметры.Значение) И ЗначениеЗаполнено(Параметры.ЗначенияПолей) Тогда + ЗначенияПолей = Параметры.ЗначенияПолей; + Иначе + ЗначенияПолей = Параметры.Значение; + КонецЕсли; + Иначе + ЗначенияПолей = Параметры.ЗначенияПолей; + КонецЕсли; + Возврат ЗначенияПолей; + +КонецФункции + +&НаСервере +Функция ИзвлечьСтарыйФорматАдреса(Знач ЗначенияПолей, Знач ТипКонтактнойИнформации) + + Перем XDTOКонтактная, РезультатыЧтения; + + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(ЗначенияПолей) + И ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда + РезультатыЧтения = Новый Структура; + XDTOКонтактная = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзXML(ЗначенияПолей, ТипКонтактнойИнформации, РезультатыЧтения); + Если РезультатыЧтения.Свойство("ТекстОшибки") Тогда + // Распознали с ошибками, сообщим при открытии. + ТекстПредупрежденияПриОткрытии = РезультатыЧтения.ТекстОшибки; + XDTOКонтактная.Представление = Параметры.Представление; + XDTOКонтактная.Состав.Страна = Строка(ОсновнаяСтрана); + КонецЕсли; + Иначе + XDTOКонтактная = УправлениеКонтактнойИнформациейСлужебный.АдресXMLВXDTO(ЗначенияПолей, Параметры.Представление, ); + Если Параметры.Свойство("Страна") И ЗначениеЗаполнено(Параметры.Страна) Тогда + Если ТипЗнч(Параметры.Страна) = ТипЗнч(Справочники.СтраныМира.ПустаяСсылка()) Тогда + XDTOКонтактная.Состав.Страна = Параметры.Страна.Наименование; + Иначе + XDTOКонтактная.Состав.Страна = Строка(Параметры.Страна); + КонецЕсли; + Иначе + XDTOКонтактная.Состав.Страна = ОсновнаяСтрана.Наименование; + КонецЕсли; + КонецЕсли; + Если Параметры.Комментарий <> Неопределено Тогда + // Ставим новый комментарий, иначе он придет из информации. + XDTOКонтактная.Комментарий = Параметры.Комментарий; + КонецЕсли; + Возврат XDTOКонтактная; + +КонецФункции + +&НаСервере +Процедура СформироватьМенюДобавленияСтроенийИПомещений() + + Для каждого СтроениеИлиПомещение Из ДополнительныеСтроенияИПомещения Цикл + + Если ЗначениеЗаполнено(СтроениеИлиПомещение.Ключ) Тогда + ИмяКоманды = "Добавить_" + СтроениеИлиПомещение.Ключ; + Команда = Команды.Добавить(ИмяКоманды); + Команда.Подсказка = НСтр("ru = 'Добавить'") + " " + НРег(СтроениеИлиПомещение.Значение); + Команда.Действие = "Подключаемый_ДобавитьСтроениеИлиПомещение"; + Команда.ИзменяетСохраняемыеДанные = Истина; + + Группа = ?(СтроениеИлиПомещение.Тип = "Строение", Элементы.ГруппаДобавлениеСтроения, Элементы.ГруппаДобавлениеПомещения); + Кнопка = Элементы.Добавить(ИмяКоманды, Тип("КнопкаФормы"), Группа); + Кнопка.ИмяКоманды = ИмяКоманды; + Кнопка.Заголовок = СтроениеИлиПомещение.Значение; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура ДобавитьОписаниеСтроенияИлиПомещения(ИмяПомещенияИлиСтроения, Тип, Ключ = "") + + ОписаниеПомещения = ДополнительныеСтроенияИПомещения.Добавить(); + ОписаниеПомещения.Значение = ИмяПомещенияИлиСтроения; + ОписаниеПомещения.Тип = Тип; + ОписаниеПомещения.Видимость = Истина; + ОписаниеПомещения.Ключ = ?(ПустаяСтрока(Ключ), ИмяПомещенияИлиСтроения, Ключ); + ОписаниеПомещения.ПредыдущиеЗначение = ИмяПомещенияИлиСтроения; + +КонецПроцедуры + +&НаКлиенте +Функция ЗначениеСтроенияИлиПомещения(Тип, Значение) + Возврат Новый Структура("Type, Number", Тип, Значение); +КонецФункции + +&НаКлиенте +Процедура ИндексНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + Если СтрДлина(Индекс) = 6 Тогда + ФормаВыбораУлицПоИндексу(Индекс); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьПредставлениеАдреса() + + РаботаСАдресамиКлиентСервер.ОбновитьПредставлениеАдреса(НаселенныйПунктДетально, ВидКонтактнойИнформации.ВключатьСтрануВПредставление); + ПредставлениеАдреса = НаселенныйПунктДетально.Value; + + ПоказатьПодсказкуПоТипАдреса(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПоказатьПодсказкуПоТипАдреса() + + Если РаботаСАдресамиКлиентСервер.ЭтоМуниципальныйАдрес(НаселенныйПунктДетально.AddressType) Тогда + Элементы.СтраницаТипАдреса.ТекущаяСтраница = Элементы.СтраницаМуниципальныйАдрес; + ИначеЕсли РаботаСАдресамиКлиентСервер.ЭтоАдминистративноТерриториальныйАдрес(НаселенныйПунктДетально.AddressType) Тогда + Элементы.СтраницаТипАдреса.ТекущаяСтраница = Элементы.СтраницаАдминистративноТерриториальныйАдрес; + Иначе + Элементы.СтраницаТипАдреса.ТекущаяСтраница = Элементы.СтраницаДругойАдрес; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаИзмененияАдреса() + + НаселенныйПункт = РаботаСАдресамиКлиентСервер.ПредставлениеНаселенногоПунктаАдреса(НаселенныйПунктДетально); + + Если СтрСравнить(Страна, НаселенныйПунктДетально.Country) <> 0 Тогда + УстановитьСтрану(НаселенныйПунктДетально.Country); + КонецЕсли; + + Улица = ?(ПустаяСтрока(НаселенныйПунктДетально.Street), "", + НаселенныйПунктДетально.Street + " " + НаселенныйПунктДетально.StreetType); + + ОбновитьПредставлениеАдреса(); + + ФорматАдреса = НаселенныйПунктДетально.AddressType; + Индекс = НаселенныйПунктДетально.ZIPCode; + ОКТМО = НаселенныйПунктДетально.OKTMO; + + Если ЗначениеЗаполнено(НаселенныйПунктДетально.HouseType) Тогда + ТипДома = НаселенныйПунктДетально.HouseType; + КонецЕсли; + Дом = НаселенныйПунктДетально.HouseNumber; + + Если НаселенныйПунктДетально.Buildings.Количество() > 0 Тогда + Если ЗначениеЗаполнено(НаселенныйПунктДетально.Buildings[0].Type) Тогда + ТипСтроения = НаселенныйПунктДетально.Buildings[0].Type; + КонецЕсли; + + Строение = НаселенныйПунктДетально.Buildings[0].Number; + Иначе + Строение = ""; + КонецЕсли; + + Если НаселенныйПунктДетально.Apartments.Количество() > 0 Тогда + Если ЗначениеЗаполнено(НаселенныйПунктДетально.Apartments[0].Type) Тогда + ТипПомещения = НаселенныйПунктДетально.Apartments[0].Type; + КонецЕсли; + + Помещение = НаселенныйПунктДетально.Apartments[0].Number; + + Иначе + Помещение = ""; + КонецЕсли; + + Если ЗначениеЗаполнено(Комментарий) Тогда + Элементы.ОсновныеСтраницы.ОтображениеСтраниц = ОтображениеСтраницФормы.ЗакладкиСверху; + Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Комментарий); + Иначе + Элементы.ОсновныеСтраницы.ТекущаяСтраница = Элементы.СтраницаАдрес; + Элементы.ОсновныеСтраницы.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьФлагиВМенюПоТипуАдреса() + + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(НаселенныйПунктДетально.AddressType) Тогда + Элементы.АдресВСвободнойФорме.Пометка = Истина; + Элементы.МуниципальноеДеление.Пометка = Ложь; + Элементы.АдминистративноТерриториальноеДеление.Пометка = Ложь; + ИначеЕсли РаботаСАдресамиКлиентСервер.ЭтоМуниципальныйАдрес(НаселенныйПунктДетально.AddressType) Тогда + Элементы.АдресВСвободнойФорме.Пометка = Ложь; + Элементы.МуниципальноеДеление.Пометка = Истина; + Элементы.АдминистративноТерриториальноеДеление.Пометка = Ложь; + ИначеЕсли РаботаСАдресамиКлиентСервер.ЭтоАдминистративноТерриториальныйАдрес(НаселенныйПунктДетально.AddressType) Тогда + Элементы.АдресВСвободнойФорме.Пометка = Ложь; + Элементы.МуниципальноеДеление.Пометка = Ложь; + Элементы.АдминистративноТерриториальноеДеление.Пометка = Истина; + Иначе + Элементы.МуниципальноеДеление.Пометка = Ложь; + Элементы.АдминистративноТерриториальноеДеление.Пометка = Ложь; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОчиститьИдентификаторыАдреса() + Для каждого ЭлементАдреса Из НаселенныйПунктДетально Цикл + Если СтрЗаканчиваетсяНа(ЭлементАдреса.Ключ, "Id") Тогда + НаселенныйПунктДетально[ЭлементАдреса.Ключ] = ""; + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура УстановитьИдентификаторыАдреса(Адрес) + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда + МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); + МодульАдресныйКлассификаторСлужебный.УстановитьИдентификаторыАдреса(Адрес); + КонецЕсли; + +КонецПроцедуры + + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоПочтовомуИндексу/Form.form b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоПочтовомуИндексу/Form.form index 4be910010..59abe6616 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоПочтовомуИндексу/Form.form +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоПочтовомуИндексу/Form.form @@ -4,112 +4,12 @@ ru Выберите улицу, населенный пункт - - ОбщаяЧастьПредставления - 3 - true - true - - true - - - ОбщаяЧастьПредставления - - None - - ОбщаяЧастьПредставленияРасширеннаяПодсказка - 5 - Label - true - true - - Left - - - - ОбщаяЧастьПредставленияКонтекстноеМеню - 4 - true - - LabelField - Enter - true - Left - true - - true - - System.DefaultGUIFont - true - false - false - false - - - - - ВариантыАдреса - 8 - - <key>ru</key> - <value>Варианты адреса</value> - - true - true - - true - - - ВариантыАдреса - - true - None - Change - - ВариантыАдресаПредставление - 15 - true - true - - true - - - ВариантыАдреса.Представление - - - ВариантыАдресаПредставлениеРасширеннаяПодсказка - 17 - Label - true - true - - Left - - - - ВариантыАдресаПредставлениеКонтекстноеМеню - 16 - true - - InputField - true - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - ВариантыАдресаКоманднаяПанель - 10 + + ГруппаКоманднаяПанель + 67 + + ГруппаВыбрать + 69 ВариантыАдресаВыбрать 62 @@ -118,7 +18,6 @@ true - true ВариантыАдресаВыбратьРасширеннаяПодсказка 63 @@ -137,6 +36,122 @@ UserCmds Auto + true + true + + true + + + <key>ru</key> + <value>Выбрать</value> + + + ГруппаВыбратьРасширеннаяПодсказка + 70 + Label + true + true + + Left + + + CommandBar + + Left + + + + ГруппаНайти + 71 + + Найти + 64 + true + true + + true + + + Найти + + true + None + + НайтиРасширеннаяПодсказка + 66 + Label + true + true + + Left + + + + НайтиКонтекстноеМеню + 65 + true + + InputField + Enter + true + Left + true + + + AutoComplete + НайтиАвтоПодбор + + + Clearing + НайтиОчистка + + true + true + true + true + true + true + true + DontUse + Normal + + ru + Введите первые буквы названия улицы + + + + true + true + + true + + + <key>ru</key> + <value>Найти</value> + + + ГруппаНайтиРасширеннаяПодсказка + 72 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + ГруппаЕще + 73 ВариантыАдресаГруппаКнопокПоиска 37 @@ -165,6 +180,7 @@ true UserCmds Auto + InAdditionalSubmenu ВариантыАдресаОтменитьПоиск @@ -191,6 +207,7 @@ true UserCmds Auto + InAdditionalSubmenu true true @@ -319,7 +336,123 @@ true UserCmds Auto + InAdditionalSubmenu + true + true + + true + + + <key>ru</key> + <value>Еще</value> + + + ГруппаЕщеРасширеннаяПодсказка + 74 + Label + true + true + + Left + + + CommandBar + + Left + + + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + ГруппаКоманднаяПанельРасширеннаяПодсказка + 68 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + ВариантыАдреса + 8 + + <key>ru</key> + <value>Варианты адреса</value> + + true + true + + true + + + ВариантыАдреса + + None + Change + + ВариантыАдресаПредставление + 15 + true + true + + true + + + ВариантыАдреса.Представление + + + ВариантыАдресаПредставлениеРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + + ВариантыАдресаПредставлениеКонтекстноеМеню + 16 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ВариантыАдресаКоманднаяПанель + 10 Left @@ -654,10 +787,10 @@ - Неактуален + Муниципальный <key>ru</key> - <value>Неактуален</value> + <value>Муниципальный</value> 3 @@ -745,6 +878,24 @@ true + + Найти + + <key>ru</key> + <value>Найти</value> + + 7 + + String + + + + true + + + true + + Обновить diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоПочтовомуИндексу/Module.bsl b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоПочтовомуИндексу/Module.bsl index cd5d0cd98..1b4748422 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоПочтовомуИндексу/Module.bsl +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоПочтовомуИндексу/Module.bsl @@ -25,13 +25,6 @@ КонецЕсли; ПараметрыПоиска = Новый Структура; - ПараметрыПоиска.Вставить("СкрыватьНеактуальные", Параметры.СкрыватьНеактуальныеАдреса); - - Если Параметры.Свойство("ФорматАдреса") Тогда - ПараметрыПоиска.Вставить("ФорматАдреса", Параметры.ФорматАдреса); - Иначе - ПараметрыПоиска.Вставить("ФорматАдреса", "ФИАС"); - КонецЕсли; Параметры.Свойство("Индекс", Индекс); ДанныеКлассификатора = Обработки.РасширенныйВводКонтактнойИнформации.АдресаКлассификатораПоПочтовомуИндексу(Индекс, ПараметрыПоиска); @@ -48,7 +41,7 @@ КонецЕсли; ВариантыАдреса.Загрузить(ДанныеКлассификатора.Данные); - ОбщаяЧастьПредставления = ДанныеКлассификатора.ОбщаяЧастьПредставления; + КонецПроцедуры &НаКлиенте @@ -72,6 +65,25 @@ КонецПроцедуры +&НаКлиенте +Процедура НайтиАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) + + Если ЗначениеЗаполнено(Текст) Тогда + + РаботаСАдресамиКлиентСервер.ПреобразоватьВводАдреса(Текст); + Элементы.ВариантыАдреса.ОтборСтрок = Новый ФиксированнаяСтруктура("Представление", Текст); + + Иначе + Элементы.ВариантыАдреса.ОтборСтрок = Неопределено; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура НайтиОчистка(Элемент, СтандартнаяОбработка) + Элементы.ВариантыАдреса.ОтборСтрок = Неопределено; +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -92,30 +104,12 @@ Данные = ВариантыАдреса.НайтиПоИдентификатору(НомерСтроки); Если Данные = Неопределено Тогда + Возврат; - ИначеЕсли Не Данные.Неактуален Тогда - ОповеститьВладельца(Данные); - Возврат; КонецЕсли; - Оповещение = Новый ОписаниеОповещения("ПроизвестиВыборЗавершениеВопроса", ЭтотОбъект, Данные); - - ПредупреждениеНеактуальности = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Адрес ""%2, %1"" неактуален. - |Продолжить?'"), СокрЛП(ОбщаяЧастьПредставления), Данные.Представление); - - ЗаголовокПредупреждения = НСтр("ru = 'Подтверждение'"); - - ПоказатьВопрос(Оповещение, ПредупреждениеНеактуальности, РежимДиалогаВопрос.ДаНет, , ,ЗаголовокПредупреждения); - -КонецПроцедуры - -&НаКлиенте -Процедура ПроизвестиВыборЗавершениеВопроса(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт - - Если РезультатВопроса = КодВозвратаДиалога.Да Тогда - ОповеститьВладельца(ДополнительныеПараметры); - КонецЕсли; + ОповеститьВладельца(Данные); КонецПроцедуры @@ -123,10 +117,10 @@ Процедура ОповеститьВладельца(Знач Данные, Отказ = Ложь) ТекущийИндекс = Формат(Индекс, "ЧЦ=6; ЧРГ=; ЧН=; ЧГ=0"); - Результат = Новый Структура("Индекс, Идентификатор, Представление", ТекущийИндекс); + Результат = Новый Структура("Муниципальный, Идентификатор, Индекс"); Результат.Вставить("КраткоеПредставлениеОшибки", КраткоеПредставлениеОшибки); Результат.Вставить("Отказ", Отказ); - + Результат.Вставить("Индекс", Индекс); Если Данные <> Неопределено Тогда ЗаполнитьЗначенияСвойств(Результат, Данные); КонецЕсли; @@ -144,8 +138,8 @@ ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ВариантыАдресаПредставление.Имя); ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВариантыАдреса.Неактуален"); - ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВариантыАдреса.Муниципальный"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно; ОтборЭлемента.ПравоеЗначение = Истина; Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоУровню/Form.form b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоУровню/Form.form index 2c95b6b3c..a4dffefad 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоУровню/Form.form +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоУровню/Form.form @@ -4,6 +4,309 @@ <key>ru</key> <value>Выберите улицу, населенный пункт</value> + + ГруппаКоманднаяПанель + 66 + + ГруппаВыбрать + 68 + + Выбрать + 70 + true + true + + true + + + ВыбратьРасширеннаяПодсказка + 71 + Label + true + true + + Left + + + Form.Item.ВариантыАдреса.StandardCommand.Choose + Auto + true + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Выбрать</value> + + + ГруппаВыбратьРасширеннаяПодсказка + 69 + Label + true + true + + Left + + + CommandBar + + Left + + + + ГруппаНайти + 72 + + Найти + 63 + true + true + + true + + + Найти + + + НайтиРасширеннаяПодсказка + 65 + Label + true + true + + Left + + + + НайтиКонтекстноеМеню + 64 + true + + InputField + Enter + true + Left + true + + + AutoComplete + НайтиАвтоПодбор + + + Clearing + НайтиОчистка + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Найти</value> + + + ГруппаНайтиРасширеннаяПодсказка + 73 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ВариантыАдресаКонтекстноеМенюГруппаНайти + 49 + + ВариантыАдресаОбновить + 81 + true + true + + true + + + ВариантыАдресаОбновитьРасширеннаяПодсказка + 82 + Label + true + true + + Left + + + Form.Command.Обновить + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ВариантыАдресаКонтекстноеМенюНайти + 41 + true + true + + true + + + ВариантыАдресаКонтекстноеМенюНайтиРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + Form.Item.ВариантыАдреса.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ВариантыАдресаКонтекстноеМенюОтменитьПоиск + 43 + true + true + + true + + + ВариантыАдресаКонтекстноеМенюОтменитьПоискРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + Form.Item.ВариантыАдреса.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ВариантыАдресаСправка + 79 + true + true + + true + + + ВариантыАдресаСправкаРасширеннаяПодсказка + 80 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Варианты адреса контекстное меню группа найти</value> + + 7 + false + + ВариантыАдресаКонтекстноеМенюГруппаНайтиРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + CommandBar + + Right + Item.ВариантыАдреса + + + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + Right + + ГруппаКоманднаяПанельРасширеннаяПодсказка + 67 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + ВариантыАдреса 8 @@ -66,215 +369,6 @@ ВариантыАдресаКоманднаяПанель 10 - - ВариантыАдресаВыбрать - 39 - true - true - - true - - - ВариантыАдресаВыбратьРасширеннаяПодсказка - 40 - Label - true - true - - Left - - - Form.Item.ВариантыАдреса.StandardCommand.Choose - Auto - true - true - true - UserCmds - Auto - - - ВариантыАдресаГруппаКнопокПоиска - 37 - - ВариантыАдресаНайти - 25 - true - true - - true - - - ВариантыАдресаНайтиРасширеннаяПодсказка - 26 - Label - true - true - - Left - - - Form.Item.ВариантыАдреса.StandardCommand.Find - Normal - Auto - true - true - UserCmds - Auto - - - ВариантыАдресаОтменитьПоиск - 27 - true - true - - true - - - ВариантыАдресаОтменитьПоискРасширеннаяПодсказка - 28 - Label - true - true - - Left - - - Form.Item.ВариантыАдреса.StandardCommand.CancelSearch - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Варианты адреса группа кнопок поиска</value> - - - ВариантыАдресаГруппаКнопокПоискаРасширеннаяПодсказка - 38 - Label - true - true - - Left - - - - - - ВариантыАдресаОбновить - 31 - true - true - - true - - - ВариантыАдресаОбновитьРасширеннаяПодсказка - 32 - Label - true - true - - Left - - - Form.Command.Обновить - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ВариантыАдресаВывестиСписок - 33 - true - true - - true - - - ВариантыАдресаВывестиСписокРасширеннаяПодсказка - 34 - Label - true - true - - Left - - - Form.Item.ВариантыАдреса.StandardCommand.OutputList - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ВариантыАдресаИзменитьФорму - 35 - true - true - - true - - - ВариантыАдресаИзменитьФормуРасширеннаяПодсказка - 36 - Label - true - true - - Left - - - Form.StandardCommand.CustomizeForm - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ВариантыАдресаСправка - 29 - true - true - - true - - - ВариантыАдресаСправкаРасширеннаяПодсказка - 30 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - Left @@ -365,108 +459,6 @@ ВариантыАдресаКонтекстноеМеню 9 - - ВариантыАдресаКонтекстноеМенюВыбрать - 45 - true - true - - true - - - ВариантыАдресаКонтекстноеМенюВыбратьРасширеннаяПодсказка - 46 - Label - true - true - - Left - - - Form.Item.ВариантыАдреса.StandardCommand.Choose - Normal - Auto - true - true - UserCmds - Auto - - - ВариантыАдресаКонтекстноеМенюГруппаНайти - 49 - - ВариантыАдресаКонтекстноеМенюНайти - 41 - true - true - - true - - - ВариантыАдресаКонтекстноеМенюНайтиРасширеннаяПодсказка - 42 - Label - true - true - - Left - - - Form.Item.ВариантыАдреса.StandardCommand.Find - Normal - Auto - true - true - UserCmds - Auto - - - ВариантыАдресаКонтекстноеМенюОтменитьПоиск - 43 - true - true - - true - - - ВариантыАдресаКонтекстноеМенюОтменитьПоискРасширеннаяПодсказка - 44 - Label - true - true - - Left - - - Form.Item.ВариантыАдреса.StandardCommand.CancelSearch - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Варианты адреса контекстное меню группа найти</value> - - - ВариантыАдресаКонтекстноеМенюГруппаНайтиРасширеннаяПодсказка - 50 - Label - true - true - - Left - - - - ВариантыАдресаКонтекстноеМенюКопироватьВБуферОбмена 47 @@ -640,12 +632,30 @@ true + + Наименование + + <key>ru</key> + <value>Наименование</value> + + 5 + + String + + + + true + + + true + + - ФорматАдреса + ТипАдреса <key>ru</key> - <value>Формат адреса</value> + <value>Тип адреса</value> 5 @@ -731,6 +741,24 @@ true + + Найти + + <key>ru</key> + <value>Найти</value> + + 8 + + String + + + + true + + + true + + Обновить diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоУровню/Module.bsl b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоУровню/Module.bsl index 85c67ce15..8b48ce38e 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоУровню/Module.bsl +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоУровню/Module.bsl @@ -31,16 +31,11 @@ Параметры.Свойство("Родитель", Родитель); Параметры.Свойство("Уровень", Уровень); - Параметры.Свойство("ФорматАдреса", ФорматАдреса); + Параметры.Свойство("ТипАдреса", ТипАдреса); Параметры.Свойство("СкрыватьНеактуальные", СкрыватьНеактуальные); - Если ПустаяСтрока("ФорматАдреса") Тогда - ФорматАдреса = "ФИАС"; - КонецЕсли; - ПараметрыПоиска = Новый Структура; - ПараметрыПоиска.Свойство("ФорматАдреса", ФорматАдреса); - ПараметрыПоиска.Свойство("СкрыватьНеактуальные", СкрыватьНеактуальные); + ПараметрыПоиска.Вставить("КоличествоЗаписей", 3000); Если НЕ ЗначениеЗаполнено(Родитель) И Уровень > 1 Тогда // поиск адреса без родителя @@ -48,7 +43,7 @@ Возврат; КонецЕсли; - ДанныеКлассификатора = Обработки.РасширенныйВводКонтактнойИнформации.АдресаДляИнтерактивногоВыбора(Родитель, Уровень, ПараметрыПоиска); + ДанныеКлассификатора = Обработки.РасширенныйВводКонтактнойИнформации.АдресаДляИнтерактивногоВыбора(Родитель, Уровень, ТипАдреса, ПараметрыПоиска); Если ДанныеКлассификатора.Отказ Тогда // Сервис на обслуживании @@ -69,11 +64,11 @@ Параметры.Свойство("Идентификатор", ТекущееЗначение); Если ЗначениеЗаполнено(ТекущееЗначение) Тогда - Кандидаты = ВариантыАдреса.НайтиСтроки( Новый Структура("Идентификатор", ТекущееЗначение) ); + Кандидаты = ВариантыАдреса.НайтиСтроки( Новый Структура("Идентификатор", ТекущееЗначение)); Иначе Параметры.Свойство("Представление", ТекущееЗначение); Если ЗначениеЗаполнено(ТекущееЗначение) Тогда - Кандидаты = ВариантыАдреса.НайтиСтроки( Новый Структура("Представление", ТекущееЗначение) ); + Кандидаты = ВариантыАдреса.НайтиСтроки( Новый Структура("Представление", ТекущееЗначение)); КонецЕсли; КонецЕсли; @@ -129,7 +124,7 @@ ЗаголовокПредупреждения = НСтр("ru = 'Подтверждение'"); ПоказатьВопрос(Оповещение, ПредупреждениеНеактуальности, РежимДиалогаВопрос.ДаНет, , ,ЗаголовокПредупреждения); - + КонецПроцедуры &НаКлиенте @@ -144,13 +139,12 @@ &НаКлиенте Процедура ОповеститьВладельца(Знач Данные, Отказ = Ложь) - Результат = Новый Структура("РегионЗагружен, Идентификатор, Представление"); - Результат.Вставить("КраткоеПредставлениеОшибки", КраткоеПредставлениеОшибки); - Результат.Вставить("Отказ", Отказ); - Результат.Вставить("Уровень", Уровень); + Результат = РаботаСАдресамиКлиентСервер.КонструкторРезультатаВыбора(); Если Данные <> Неопределено Тогда ЗаполнитьЗначенияСвойств(Результат, Данные); + Иначе + Результат.Отказ = Истина; КонецЕсли; ОповеститьОВыборе(Результат); @@ -175,4 +169,21 @@ КонецПроцедуры +&НаКлиенте +Процедура НайтиОчистка(Элемент, СтандартнаяОбработка) + Элементы.ВариантыАдреса.ОтборСтрок = Неопределено; +КонецПроцедуры + +&НаКлиенте +Процедура НайтиАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) + + Если ЗначениеЗаполнено(Текст) Тогда + ДлинаТекста = СтрДлина(Текст); + Фильтр = Новый ФиксированнаяСтруктура("Представление", Текст); + Элементы.ВариантыАдреса.ОтборСтрок = Фильтр; + Иначе + Элементы.ВариантыАдреса.ОтборСтрок = Неопределено; + КонецЕсли; +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборДома/Form.form b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборДома/Form.form index 0058bc085..24b551694 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборДома/Form.form +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборДома/Form.form @@ -118,7 +118,7 @@ <textSize>Normal</textSize> <inputHint> <key>ru</key> - <value>Номер дома, строения</value> + <value>Номер дома, корпуса</value> </inputHint> </extInfo> </items> @@ -444,7 +444,7 @@ <valueType> <types>Number</types> <numberQualifiers> - <precision>5</precision> + <precision>12</precision> </numberQualifiers> </valueType> <view> diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборДома/Module.bsl b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборДома/Module.bsl index ac42192c7..657bcbb06 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборДома/Module.bsl +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборДома/Module.bsl @@ -1,11 +1,12 @@ #Область ОбработчикиСобытийФормы + &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; - + АдресныйОбъект = Параметры.Идентификатор; Если Параметры.Отбор Тогда ЗаполнитьСписокДомов(Параметры.Дом); @@ -80,7 +81,8 @@ СписокДомов.Очистить(); СтрокаПоиска = ?(ЗначениеЗаполнено(Текст), Текст, ""); - ПолныйСписокДомов = Обработки.РасширенныйВводКонтактнойИнформации.СписокДомов(АдресныйОбъект, СтрокаПоиска); + ПорцияПриПоиске = 2000; + ПолныйСписокДомов = Обработки.РасширенныйВводКонтактнойИнформации.СписокДомов(АдресныйОбъект, СтрокаПоиска, ПорцияПриПоиске); Если ПолныйСписокДомов = Неопределено ИЛИ ПолныйСписокДомов.Количество() = 0 Тогда Элементы.ФормаВыбрать.Доступность = Ложь; Иначе diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборУлицы/Form.form b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборУлицы/Form.form index 743157fba..f39ce9de4 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборУлицы/Form.form +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборУлицы/Form.form @@ -2,922 +2,83 @@ <form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form"> <title> <key>ru</key> - <value>Выберите улицу, дополнительную территорию</value> + <value>Выберите улицу</value> - ГруппаКоманднаяПанельВыбора - 97 - true - true - - true - - - <key>ru</key> - <value>Командная панель выбора</value> - - - ГруппаКоманднаяПанельВыбораРасширеннаяПодсказка - 98 - Label - true - true - + ГруппаКоманднаяПанель + 148 + + ГруппаКонтактнаяИнформацияВыбрать + 165 + + Выбрать + 175 + true + true + + true + + + ВыбратьРасширеннаяПодсказка + 176 + Label + true + true + + Left + + + Form.Command.Выбрать + Auto + true + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Контактная информация выбрать</value> + + 11 + + ГруппаКонтактнаяИнформацияВыбратьРасширеннаяПодсказка + 166 + Label + true + true + + Left + + + CommandBar + Left - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ОбщаяГруппа - 178 + - Страницы - 88 - - УлицыИНаселенныеПункты - 90 - - ГруппаКоманднаяПанель - 148 - - ГруппаКонтактнаяИнформацияВыбрать - 165 - - ВыбратьУлицу - 159 - true - true - - true - - true - - ВыбратьУлицуРасширеннаяПодсказка - 160 - Label - true - true - - Left - - - Form.Command.ВыбратьУлицу - Auto - true - true - true - UserCmds - - System.DefaultGUIFont - true - false - false - false - - Auto - InCommandBarAndInAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Контактная информация выбрать</value> - - 11 - - ГруппаКонтактнаяИнформацияВыбратьРасширеннаяПодсказка - 166 - Label - true - true - - Left - - - CommandBar - - Left - - - - ГруппаНайтиВебСервис - 155 - - Найти - 150 - true - true - - true - - - Найти - - - НайтиРасширеннаяПодсказка - 152 - Label - true - true - - Left - - - - НайтиКонтекстноеМеню - 151 - true - - InputField - Enter - true - Left - true - - - AutoComplete - НайтиАвтоПодбор - - true - true - true - true - true - true - DontUse - Normal - - ru - Введите первые буквы названия улицы - - - - true - true - - true - - - <key>ru</key> - <value>Найти веб сервис</value> - - - ГруппаНайтиВебСервисРасширеннаяПодсказка - 156 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ГруппаКоманднаяПанельЕще - 153 - - ГруппаНайти - 171 - - ВариантыАдресаНайти - 167 - true - true - - true - - - ВариантыАдресаНайтиРасширеннаяПодсказка - 168 - Label - true - true - - Left - - - Form.Item.ВариантыАдреса.StandardCommand.Find - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - ВариантыАдресаОтменитьПоиск - 169 - true - true - - true - - - ВариантыАдресаОтменитьПоискРасширеннаяПодсказка - 170 - Label - true - true - - Left - - - Form.Item.ВариантыАдреса.StandardCommand.CancelSearch - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Найти</value> - - - ГруппаНайтиРасширеннаяПодсказка - 172 - Label - true - true - - Left - - - - - true - true - - true - - - <key>ru</key> - <value>Командная панель еще</value> - - true - - ГруппаКоманднаяПанельЕщеРасширеннаяПодсказка - 154 - Label - true - true - - Left - - - CommandBar - - Left - Item.ВариантыАдреса - - - true - true - - true - - - <key>ru</key> - <value>Командная панель</value> - - - ГруппаКоманднаяПанельРасширеннаяПодсказка - 149 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ВариантыАдреса - 8 - - <key>ru</key> - <value>Варианты адреса</value> - - true - true - - true - - - ВариантыАдреса - - None - Add - Change - Choose - Copy - Delete - EndEdit - MoveDown - MoveUp - SortListAsc - SortListDesc - - ВариантыАдресаПредставление - 15 - true - true - - true - - - ВариантыАдреса.Представление - - - ВариантыАдресаПредставлениеРасширеннаяПодсказка - 17 - Label - true - true - - Left - - - - ВариантыАдресаПредставлениеКонтекстноеМеню - 16 - true - - InputField - true - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - ВариантыАдресаКоманднаяПанель - 10 - Left - - - ValueChoice - ВариантыАдресаВыборЗначения - - - OnActivateRow - ВариантыАдресаПриАктивизацииСтроки - - - ВариантыАдресаСтрокаПоиска - 69 - - ВариантыАдресаСтрокаПоискаРасширеннаяПодсказка - 71 - Label - true - true - - Left - - - - ВариантыАдресаСтрокаПоискаКонтекстноеМеню - 70 - true - - ВариантыАдреса - - true - - - - ВариантыАдресаСостояниеПросмотра - 72 - - ВариантыАдресаСостояниеПросмотраРасширеннаяПодсказка - 74 - Label - true - true - - Left - - - - ВариантыАдресаСостояниеПросмотраКонтекстноеМеню - 73 - true - - ViewStatusAddition - ВариантыАдреса - - true - - - - ВариантыАдресаУправлениеПоиском - 75 - - ВариантыАдресаУправлениеПоискомРасширеннаяПодсказка - 77 - Label - true - true - - Left - - - - ВариантыАдресаУправлениеПоискомКонтекстноеМеню - 76 - true - - SearchControlAddition - ВариантыАдреса - - true - - - - ВариантыАдресаРасширеннаяПодсказка - 11 - Label - true - true - - Left - - - - ВариантыАдресаКонтекстноеМеню - 9 - - ВариантыАдресаКонтекстноеМенюГруппаНайти - 49 - - ВариантыАдресаКонтекстноеМенюНайти - 41 - true - true - - true - - - ВариантыАдресаКонтекстноеМенюНайтиРасширеннаяПодсказка - 42 - Label - true - true - - Left - - - Form.Item.ВариантыАдреса.StandardCommand.Find - Normal - Auto - true - true - UserCmds - Auto - - - ВариантыАдресаКонтекстноеМенюОтменитьПоиск - 43 - true - true - - true - - - ВариантыАдресаКонтекстноеМенюОтменитьПоискРасширеннаяПодсказка - 44 - Label - true - true - - Left - - - Form.Item.ВариантыАдреса.StandardCommand.CancelSearch - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Варианты адреса контекстное меню группа найти</value> - - - ВариантыАдресаКонтекстноеМенюГруппаНайтиРасширеннаяПодсказка - 50 - Label - true - true - - Left - - - - - - ВариантыАдресаКонтекстноеМенюКопироватьВБуферОбмена - 47 - true - true - - true - - - ВариантыАдресаКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка - 48 - Label - true - true - - Left - - - Form.Item.ВариантыАдреса.StandardCommand.CopyToClipboard - Normal - Auto - true - true - UserCmds - Auto - - - true - true - true - true - true - 1 - 1 - AutoUse - AutoUse - true - true - false - false - Auto - true - true - true - - - - ПорционнаяНавигация - 63 - - КоманднаяПанельНавигацияПоПорциям - 84 - - ПерваяПорция - 78 - - <key>ru</key> - <value>В начало</value> - - true - true - - true - - - ПерваяПорцияРасширеннаяПодсказка - 79 - Label - true - true - - Left - - - Form.Command.ПерваяПорция - Normal - Auto - true - true - UserCmds - Auto - - - ПредыдущаяПорция - 65 - - <key>ru</key> - <value>< Назад</value> - - true - true - - true - - - ПредыдущаяПорцияРасширеннаяПодсказка - 66 - Label - true - true - - Left - - - Form.Command.ПредыдущаяПорция - Normal - Auto - true - true - UserCmds - Auto - - - СледующаяПорция - 67 - - <key>ru</key> - <value>Вперед ></value> - - true - true - - true - - - СледующаяПорцияРасширеннаяПодсказка - 68 - Label - true - true - - Left - - - Form.Command.СледующаяПорция - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Командная панель навигация по порциям</value> - - - КоманднаяПанельНавигацияПоПорциямРасширеннаяПодсказка - 85 - Label - true - true - - Left - - - CommandBar - - Right - - - true - true - - true - - - <key>ru</key> - <value>Порционная навигация</value> - - - ПорционнаяНавигацияРасширеннаяПодсказка - 64 - Label - true - true - - Left - - - UsualGroup - - Auto - true - Auto - Auto - - - - ГруппаДополнительныеЭлементы - 86 - - ДополнительныйЭлемент - 51 - true - true - - true - - - ДополнительныйЭлемент - - - ДополнительныйЭлементРасширеннаяПодсказка - 53 - Label - true - true - - Left - - - - ДополнительныйЭлементКонтекстноеМеню - 52 - true - - InputField - Enter - true - Left - true - - - StartChoice - ДополнительныйЭлементНачалоВыбора - - - ChoiceProcessing - ДополнительныйЭлементОбработкаВыбора - - true - true - true - false - true - ShowInInputField - false - false - false - false - true - true - true - Normal - - - - ПодчиненныйЭлемент - 54 - true - true - - true - - - ПодчиненныйЭлемент - - - ПодчиненныйЭлементРасширеннаяПодсказка - 56 - Label - true - true - - Left - - - - ПодчиненныйЭлементКонтекстноеМеню - 55 - true - - InputField - Enter - true - Left - true - - - StartChoice - ПодчиненныйЭлементНачалоВыбора - - - ChoiceProcessing - ПодчиненныйЭлементОбработкаВыбора - - true - true - true - false - true - ShowInInputField - false - false - false - false - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Дополнительные элементы</value> - - - ГруппаДополнительныеЭлементыРасширеннаяПодсказка - 87 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - Auto - Auto - - + ГруппаНайтиВебСервис + 155 + + Найти + 150 true true true - - <key>ru</key> - <value>Улицы и населенные пункты</value> - + + Найти + + None - УлицыИНаселенныеПунктыРасширеннаяПодсказка - 91 + НайтиРасширеннаяПодсказка + 152 Label true true @@ -925,358 +86,38 @@ Left - Page - - Vertical - auto - false - - - - ДополнительныеТерритории - 92 - - ВариантыДополнительныхТерриторий - 99 - + <contextMenu> + <name>НайтиКонтекстноеМеню</name> + <id>151</id> + <autoFill>true</autoFill> + </contextMenu> + <type>InputField</type> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:InputFieldExtInfo"> + <handlers> + <event>AutoComplete</event> + <name>НайтиАвтоПодбор</name> + </handlers> + <handlers> + <event>Clearing</event> + <name>НайтиОчистка</name> + </handlers> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <wrap>true</wrap> + <clearButton>true</clearButton> + <chooseType>true</chooseType> + <typeDomainEnabled>true</typeDomainEnabled> + <textEdit>true</textEdit> + <editTextUpdate>DontUse</editTextUpdate> + <textSize>Normal</textSize> + <inputHint> <key>ru</key> - <value>Варианты дополнительных территорий</value> - - true - true - - true - - - ВариантыДополнительныхТерриторий - - None - Add - Change - Choose - Copy - Delete - EndEdit - MoveDown - MoveUp - SortListAsc - SortListDesc - - ВариантыДополнительныхТерриторийПредставление - 118 - true - true - - true - - - ВариантыДополнительныхТерриторий.Представление - - - ВариантыДополнительныхТерриторийПредставлениеРасширеннаяПодсказка - 120 - Label - true - true - - Left - - - - ВариантыДополнительныхТерриторийПредставлениеКонтекстноеМеню - 119 - true - - InputField - true - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - ВариантыДополнительныхТерриторийКоманднаяПанель - 101 - - ВариантыДополнительныхТерриторийВыбрать - 146 - true - true - - true - - - ВариантыДополнительныхТерриторийВыбратьРасширеннаяПодсказка - 147 - Label - true - true - - Left - - - Form.Command.Выбрать - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - ВариантыДополнительныхТерриторийНайти - 135 - true - true - - true - - - ВариантыДополнительныхТерриторийНайтиРасширеннаяПодсказка - 136 - Label - true - true - - Left - - - Form.Item.ВариантыДополнительныхТерриторий.StandardCommand.Find - Normal - Auto - true - true - UserCmds - Auto - - - ВариантыДополнительныхТерриторийОтменитьПоиск - 137 - true - true - - true - - - ВариантыДополнительныхТерриторийОтменитьПоискРасширеннаяПодсказка - 138 - Label - true - true - - Left - - - Form.Item.ВариантыДополнительныхТерриторий.StandardCommand.CancelSearch - Normal - Auto - true - true - UserCmds - Auto - - Left - true - - - Selection - ВариантыДополнительныхТерриторийВыбор - - - OnActivateRow - ВариантыДополнительныхТерриторийПриАктивизацииСтроки - - - ВариантыДополнительныхТерриторийСтрокаПоиска - 103 - - ВариантыДополнительныхТерриторийСтрокаПоискаРасширеннаяПодсказка - 107 - Label - true - true - - Left - - - - ВариантыДополнительныхТерриторийСтрокаПоискаКонтекстноеМеню - 106 - true - - ВариантыДополнительныхТерриторий - - true - - - - ВариантыДополнительныхТерриторийСостояниеПросмотра - 108 - - ВариантыДополнительныхТерриторийСостояниеПросмотраРасширеннаяПодсказка - 112 - Label - true - true - - Left - - - - ВариантыДополнительныхТерриторийСостояниеПросмотраКонтекстноеМеню - 111 - true - - ViewStatusAddition - ВариантыДополнительныхТерриторий - - true - - - - ВариантыДополнительныхТерриторийУправлениеПоиском - 113 - - ВариантыДополнительныхТерриторийУправлениеПоискомРасширеннаяПодсказка - 117 - Label - true - true - - Left - - - - ВариантыДополнительныхТерриторийУправлениеПоискомКонтекстноеМеню - 116 - true - - SearchControlAddition - ВариантыДополнительныхТерриторий - - true - - - - ВариантыДополнительныхТерриторийРасширеннаяПодсказка - 102 - Label - true - true - - Left - - - - ВариантыДополнительныхТерриторийКонтекстноеМеню - 100 - true - - true - true - true - true - true - 1 - 1 - AutoUse - AutoUse - true - true - false - false - Auto - true - true - true - true - true - - - - ПодчиненныйЭлементДляТерритории - 132 - true - true - - true - - - ПодчиненныйЭлементДляТерритории - - - ПодчиненныйЭлементДляТерриторииРасширеннаяПодсказка - 134 - Label - true - true - - Left - - - - ПодчиненныйЭлементДляТерриторииКонтекстноеМеню - 133 - true - - InputField - Enter - true - Left - true - - - StartChoice - ПодчиненныйЭлементДляТерриторииНачалоВыбора - - - ChoiceProcessing - ПодчиненныйЭлементДляТерриторииОбработкаВыбора - - true - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Дополнительные территории</value> - - - ДополнительныеТерриторииРасширеннаяПодсказка - 93 - Label - true - true - - Left - - - Page - - Vertical - auto - false + Введите первые буквы названия улицы + true @@ -1286,11 +127,11 @@ <key>ru</key> - <value>Страницы</value> + <value>Найти веб сервис</value> - СтраницыРасширеннаяПодсказка - 89 + ГруппаНайтиВебСервисРасширеннаяПодсказка + 156 Label true true @@ -1298,16 +139,152 @@ Left - Pages - - - OnCurrentPageChange - СтраницыПриСменеСтраницы - - TabsOnTop + UsualGroup + + Vertical + Auto + true + true + Auto Auto + + ГруппаКоманднаяПанельЕще + 153 + + ВариантыАдресаНайти + 167 + true + true + + true + + + ВариантыАдресаНайтиРасширеннаяПодсказка + 168 + Label + true + true + + Left + + + Form.Item.ВариантыАдреса.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ВариантыАдресаОтменитьПоиск + 169 + true + true + + true + + + ВариантыАдресаОтменитьПоискРасширеннаяПодсказка + 170 + Label + true + true + + Left + + + Form.Item.ВариантыАдреса.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ВариантыАдресаИзменитьФорму + 171 + true + true + + true + + + ВариантыАдресаИзменитьФормуРасширеннаяПодсказка + 172 + Label + true + true + + Left + + + Form.StandardCommand.CustomizeForm + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСправка + 173 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 174 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Еще</value> + + true + + ГруппаКоманднаяПанельЕщеРасширеннаяПодсказка + 154 + Label + true + true + + Left + + + CommandBar + + Left + Form + + true true @@ -1315,11 +292,11 @@ <key>ru</key> - <value>Общая группа</value> + <value>Командная панель</value> - ОбщаяГруппаРасширеннаяПодсказка - 179 + ГруппаКоманднаяПанельРасширеннаяПодсказка + 149 Label true true @@ -1336,15 +313,294 @@ Auto + + ВариантыАдреса + 8 + + <key>ru</key> + <value>Варианты адреса</value> + + true + true + + true + + + ВариантыАдреса + + None + Add + Change + Choose + Copy + Delete + EndEdit + MoveDown + MoveUp + SortListAsc + SortListDesc + + ВариантыАдресаПредставление + 15 + true + true + + true + + + ВариантыАдреса.Представление + + + ВариантыАдресаПредставлениеРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + + ВариантыАдресаПредставлениеКонтекстноеМеню + 16 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ВариантыАдресаКоманднаяПанель + 10 + Left + + + ValueChoice + ВариантыАдресаВыборЗначения + + + ВариантыАдресаСтрокаПоиска + 69 + + ВариантыАдресаСтрокаПоискаРасширеннаяПодсказка + 71 + Label + true + true + + Left + + + + ВариантыАдресаСтрокаПоискаКонтекстноеМеню + 70 + true + + ВариантыАдреса + + true + + + + ВариантыАдресаСостояниеПросмотра + 72 + + ВариантыАдресаСостояниеПросмотраРасширеннаяПодсказка + 74 + Label + true + true + + Left + + + + ВариантыАдресаСостояниеПросмотраКонтекстноеМеню + 73 + true + + ViewStatusAddition + ВариантыАдреса + + true + + + + ВариантыАдресаУправлениеПоиском + 75 + + ВариантыАдресаУправлениеПоискомРасширеннаяПодсказка + 77 + Label + true + true + + Left + + + + ВариантыАдресаУправлениеПоискомКонтекстноеМеню + 76 + true + + SearchControlAddition + ВариантыАдреса + + true + + + + ВариантыАдресаРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + + ВариантыАдресаКонтекстноеМеню + 9 + + ВариантыАдресаКонтекстноеМенюГруппаНайти + 49 + + ВариантыАдресаКонтекстноеМенюНайти + 41 + true + true + + true + + + ВариантыАдресаКонтекстноеМенюНайтиРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + Form.Item.ВариантыАдреса.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + + + ВариантыАдресаКонтекстноеМенюОтменитьПоиск + 43 + true + true + + true + + + ВариантыАдресаКонтекстноеМенюОтменитьПоискРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + Form.Item.ВариантыАдреса.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Варианты адреса контекстное меню группа найти</value> + + + ВариантыАдресаКонтекстноеМенюГруппаНайтиРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + + + + ВариантыАдресаКонтекстноеМенюКопироватьВБуферОбмена + 47 + true + true + + true + + + ВариантыАдресаКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + Form.Item.ВариантыАдреса.StandardCommand.CopyToClipboard + Normal + Auto + true + true + UserCmds + Auto + + + true + true + true + true + true + 1 + 1 + AutoUse + AutoUse + true + true + false + false + Auto + true + true + true + + ФормаКоманднаяПанель -1 Left - - OnOpen - ПриОткрытии - OnCreateAtServer ПриСозданииНаСервере @@ -1460,10 +716,10 @@ - ФорматАдреса + ТипАдреса <key>ru</key> - <value>Формат адреса</value> + <value>Тип адреса</value> 5 @@ -1477,26 +733,6 @@ true - - Уровень - - <key>ru</key> - <value>Уровень</value> - - 4 - - Number - - 10 - - - - true - - - true - - КраткоеПредставлениеОшибки @@ -1532,91 +768,6 @@ <common>true</common> </edit> </attributes> - <attributes> - <name>ДополнительныйЭлемент</name> - <title> - <key>ru</key> - <value>Дополнительная территория</value> - - 7 - - String - - - - true - - - true - - - - ИдентификаторДополнительного - - <key>ru</key> - <value>Идентификатор дополнительного</value> - - 8 - - UUID - - - true - - - true - - - - ПодчиненныйЭлемент - - <key>ru</key> - <value>Элемент доп. территории</value> - - 9 - - String - - - - true - - - true - - - - ИдентификаторПодчиненного - - <key>ru</key> - <value>Идентификатор дополнительного</value> - - 10 - - UUID - - - true - - - true - - - - РазмерПорции - - <key>ru</key> - <value>Размер порции</value> - - 13 - - - true - - - true - - СкрыватьНеактуальныеАдреса @@ -1634,144 +785,6 @@ <common>true</common> </edit> </attributes> - <attributes> - <name>ВариантыДополнительныхТерриторий</name> - <title> - <key>ru</key> - <value>Варианты дополнительных территорий</value> - - 12 - - ValueTable - - - true - - - true - - - Представление - - <key>ru</key> - <value>Представление</value> - - 1 - - String - - - - true - - - true - - - - Идентификатор - - <key>ru</key> - <value>Идентификатор</value> - - 2 - - UUID - - - true - - - true - - - - Неактуален - - <key>ru</key> - <value>Неактуален</value> - - 3 - - Boolean - - - true - - - true - - - - РегионЗагружен - - <key>ru</key> - <value>Регион загружен</value> - - 4 - - Boolean - - - true - - - true - - - - - ИдентификаторПодчиненногоДляТерритории - - <key>ru</key> - <value>Идентификатор подчиненного для территории</value> - - 14 - - UUID - - - true - - - true - - - - ПодчиненныйЭлементДляТерритории - - <key>ru</key> - <value>Элемент доп. территории</value> - - 15 - - String - - - - true - - - true - - - - ОчищатьПодчиненные - - <key>ru</key> - <value>Очищать подчиненные</value> - - 16 - - Boolean - - - true - - - true - - Найти @@ -1790,26 +803,6 @@ <common>true</common> </edit> </attributes> - <attributes> - <name>НомерПорции</name> - <title> - <key>ru</key> - <value>Номер порции</value> - - 18 - - Number - - 10 - - - - true - - - true - - НаселенныйПунктДетально @@ -1825,72 +818,6 @@ <common>true</common> </edit> </attributes> - <formCommands> - <name>СледующаяПорция</name> - <title> - <key>ru</key> - <value>Следующая порция</value> - - 1 - - ru - Следующая порция - - - true - - - - СледующаяПорция - - - DontUse - Auto - - - ПредыдущаяПорция - - <key>ru</key> - <value>Предыдущая порция</value> - - 3 - - ru - Предыдущая порция - - - true - - - - ПредыдущаяПорция - - - DontUse - Auto - - - ПерваяПорция - - <key>ru</key> - <value>Первая порция</value> - - 2 - - ru - Первая порция - - - true - - - - ПерваяПорция - - - DontUse - Auto - Выбрать @@ -1913,28 +840,6 @@ <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> - <formCommands> - <name>ВыбратьУлицу</name> - <title> - <key>ru</key> - <value>Выбрать</value> - - 6 - - ru - Выбрать улицу - - - true - - - - ВыбратьУлицу - - - DontUse - Auto - СкрыватьНеактуальныеАдреса diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборУлицы/Module.bsl b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборУлицы/Module.bsl index 400dfd289..e166081b1 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборУлицы/Module.bsl +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборУлицы/Module.bsl @@ -23,8 +23,6 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - УстановитьУсловноеОформление(); - Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; @@ -32,69 +30,18 @@ НомерПорции = Неопределено; Параметры.Свойство("Родитель", Родитель); - Параметры.Свойство("Уровень", Уровень); - Параметры.Свойство("СкрыватьНеактуальныеАдреса", СкрыватьНеактуальныеАдреса); - Параметры.Свойство("ФорматАдреса", ФорматАдреса); - - Если ПустаяСтрока(ФорматАдреса) Тогда - ФорматАдреса = "ФИАС"; - КонецЕсли; + Параметры.Свойство("ТипАдреса", ТипАдреса); ПараметрыПоиска = Новый Структура; - ПараметрыПоиска.Вставить("СкрыватьНеактуальные", СкрыватьНеактуальныеАдреса); - ПараметрыПоиска.Вставить("ФорматАдреса", ФорматАдреса); - ПараметрыПоиска.Вставить("Сортировка", "ASC"); - ПараметрыПоиска.Вставить("ПерваяЗапись", НомерПорции); - // Порционный режим, если необходимо. ПолучениеДанныхСИспользованиемВебСервиса = Обработки.РасширенныйВводКонтактнойИнформации.КлассификаторДоступенЧерезВебСервис(); - Элементы.ПорционнаяНавигация.Видимость = ПолучениеДанныхСИспользованиемВебСервиса; + Уровень = 7; - Если ПолучениеДанныхСИспользованиемВебСервиса Тогда - // РазмерПорции - одновременно флаг режима работы. - РазмерПорции = 100; - Элементы.ГруппаНайтиВебСервис.Видимость = Истина; - Элементы.ГруппаНайти.Видимость = Ложь; - Иначе - РазмерПорции = Неопределено; - Элементы.ГруппаНайтиВебСервис.Видимость = Ложь; - Элементы.ГруппаНайти.Видимость = Истина; - КонецЕсли; - ПараметрыПоиска.Вставить("РазмерПорции", РазмерПорции); - - ДанныеКлассификатора = Обработки.РасширенныйВводКонтактнойИнформации.АдресаДляИнтерактивногоВыбора(Родитель, Уровень, ПараметрыПоиска); - - ДанныеКлассификатораДополнительныеТерритории = Обработки.РасширенныйВводКонтактнойИнформации.АдресаДляИнтерактивногоВыбора(Родитель, 90, ПараметрыПоиска); - Если ДанныеКлассификатораДополнительныеТерритории.Данные.Количество() = 0 Тогда - Элементы.ДополнительныеТерритории.Видимость = Ложь; - Элементы.Страницы.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет; - КонецЕсли; - Если ДанныеКлассификатора.Данные.Количество() = 0 Тогда - Элементы.УлицыИНаселенныеПункты.Видимость = Ложь; - Элементы.Страницы.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет; - КонецЕсли; - Если Элементы.ДополнительныеТерритории.Видимость = Ложь И Элементы.УлицыИНаселенныеПункты.Видимость = Ложь Тогда - КраткоеПредставлениеОшибки = НСтр("ru = 'Данные о улицах, населенных пунктах и дополнительных территориях для введенного адреса отсутствуют'"); - Возврат; - КонецЕсли; - Элементы.ВыбратьУлицу.КнопкаПоУмолчанию = Истина; + ДанныеКлассификатора = Обработки.РасширенныйВводКонтактнойИнформации.АдресаДляИнтерактивногоВыбора(Родитель, Уровень, ТипАдреса, ПараметрыПоиска); ВариантыАдреса.Загрузить(ДанныеКлассификатора.Данные); - ВариантыДополнительныхТерриторий.Загрузить(ДанныеКлассификатораДополнительныеТерритории.Данные); - ОчищатьПодчиненные = Ложь; НаселенныйПунктДетально = Параметры.НаселенныйПунктДетально; - УстановитьДанныеПоПредставлениюУлицы(Параметры.ПредставлениеУлицы, Родитель); - -КонецПроцедуры - -&НаКлиенте -Процедура ПриОткрытии(Отказ) - - Если Не ПустаяСтрока(КраткоеПредставлениеОшибки) Тогда - ОповеститьВладельца(Неопределено, Истина); - Отказ = Истина; - КонецЕсли; КонецПроцедуры @@ -110,39 +57,17 @@ Возврат; КонецЕсли; - Если НЕ ПустаяСтрока(Текст) Тогда + Если ЗначениеЗаполнено(Текст) Тогда - РезультатПодбора = ЗаполнитьПорциюВариантовПоПервойБукве(Текст, Родитель); - ВариантыАдреса.Очистить(); - - Для каждого Адрес Из РезультатПодбора Цикл - СтрокаАдреса = ВариантыАдреса.Добавить(); - СтрокаАдреса.Представление = Адрес.Значение.Значение.Представление; - СтрокаАдреса.Идентификатор = Адрес.Значение.Значение.Идентификатор; - СтрокаАдреса.Неактуален = Адрес.Пометка; - КонецЦикла; + РаботаСАдресамиКлиентСервер.ПреобразоватьВводАдреса(Текст); + Элементы.ВариантыАдреса.ОтборСтрок = Новый ФиксированнаяСтруктура("Представление", Текст); Иначе - ПодключитьОбработчикОжидания("ПерейтиВНачалоСписка", 0.1, Истина); + Элементы.ВариантыАдреса.ОтборСтрок = Неопределено; КонецЕсли; КонецПроцедуры -&НаКлиенте -Процедура ВыбратьУлицу(Команда) - ПроизвестиВыбор(Элементы.ВариантыАдреса.ТекущаяСтрока); -КонецПроцедуры - -&НаКлиенте -Процедура Выбрать(Команда) - ПроизвестиВыбор(Элементы.ВариантыДополнительныхТерриторий.ТекущаяСтрока); -КонецПроцедуры - -&НаКлиенте -Процедура ВариантыДополнительныхТерриторийВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - ПроизвестиВыбор(ВыбраннаяСтрока); -КонецПроцедуры - &НаКлиенте Процедура ВариантыАдресаВыборЗначения(Элемент, Значение, СтандартнаяОбработка) @@ -151,138 +76,8 @@ КонецПроцедуры &НаКлиенте -Процедура ДополнительныйЭлементНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - ТекущиеДанные = Элементы.ВариантыАдреса.ТекущиеДанные; - Если ТекущиеДанные = Неопределено Тогда - Возврат; - КонецЕсли; - - ТекущийРодитель = ТекущиеДанные.Идентификатор; - - ПараметрыОткрытия = Новый Структура; - ПараметрыОткрытия.Вставить("ФорматАдреса", ФорматАдреса); - ПараметрыОткрытия.Вставить("СкрыватьНеактуальныеАдреса", СкрыватьНеактуальныеАдреса); - - ПараметрыОткрытия.Вставить("Уровень", 90); - ПараметрыОткрытия.Вставить("Родитель", ТекущийРодитель); - - ПараметрыОткрытия.Вставить("Идентификатор", ИдентификаторДополнительного); - ОткрытьФорму("Обработка.РасширенныйВводКонтактнойИнформации.Форма.ВыборАдресаПоУровню", ПараметрыОткрытия, Элемент); - -КонецПроцедуры - -&НаКлиенте -Процедура ПодчиненныйЭлементНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - Если ЗначениеЗаполнено(ИдентификаторДополнительного) Тогда - ТекущийРодитель = ИдентификаторДополнительного; - Иначе - ТекущиеДанные = Элементы.ВариантыАдреса.ТекущиеДанные; - Если ТекущиеДанные = Неопределено Тогда - Возврат; - КонецЕсли; - ТекущийРодитель = ТекущиеДанные.Идентификатор; - КонецЕсли; - - ПараметрыОткрытия = Новый Структура; - ПараметрыОткрытия.Вставить("ФорматАдреса", ФорматАдреса); - ПараметрыОткрытия.Вставить("СкрыватьНеактуальныеАдреса", СкрыватьНеактуальныеАдреса); - - ПараметрыОткрытия.Вставить("Уровень", 91); - ПараметрыОткрытия.Вставить("Родитель", ТекущийРодитель); - - ПараметрыОткрытия.Вставить("Идентификатор", ИдентификаторПодчиненного); - - ОткрытьФорму("Обработка.РасширенныйВводКонтактнойИнформации.Форма.ВыборАдресаПоУровню", ПараметрыОткрытия, Элемент); -КонецПроцедуры - -&НаКлиенте -Процедура ПодчиненныйЭлементДляТерриторииНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - ТекущиеДанные = Элементы.ВариантыДополнительныхТерриторий.ТекущиеДанные; - Если ТекущиеДанные = Неопределено Тогда - Возврат; - КонецЕсли; - ТекущийРодитель = ТекущиеДанные.Идентификатор; - - ПараметрыОткрытия = Новый Структура; - ПараметрыОткрытия.Вставить("ФорматАдреса", ФорматАдреса); - ПараметрыОткрытия.Вставить("СкрыватьНеактуальныеАдреса", СкрыватьНеактуальныеАдреса); - - ПараметрыОткрытия.Вставить("Уровень", 91); - ПараметрыОткрытия.Вставить("Родитель", ТекущийРодитель); - - ПараметрыОткрытия.Вставить("Идентификатор", ИдентификаторПодчиненногоДляТерритории); - - ОткрытьФорму("Обработка.РасширенныйВводКонтактнойИнформации.Форма.ВыборАдресаПоУровню", ПараметрыОткрытия, Элемент); - -КонецПроцедуры - -&НаКлиенте -Процедура ДополнительныйЭлементОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) - Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда - СтандартнаяОбработка = Ложь; - ИдентификаторДополнительного = ВыбранноеЗначение.Идентификатор; - ДополнительныйЭлемент = ВыбранноеЗначение.Представление; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ПодчиненныйЭлементОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) - Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда - СтандартнаяОбработка = Ложь; - ИдентификаторПодчиненного = ВыбранноеЗначение.Идентификатор; - ПодчиненныйЭлемент = ВыбранноеЗначение.Представление; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ПодчиненныйЭлементДляТерриторииОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) - Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда - СтандартнаяОбработка = Ложь; - ИдентификаторПодчиненногоДляТерритории = ВыбранноеЗначение.Идентификатор; - ПодчиненныйЭлементДляТерритории = ВыбранноеЗначение.Представление; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура СтраницыПриСменеСтраницы(Элемент, ТекущаяСтраница) - Если ТекущаяСтраница = Элементы.УлицыИНаселенныеПункты Тогда - Элементы.ВыбратьУлицу.КнопкаПоУмолчанию = Истина; - Иначе - Элементы.ВариантыДополнительныхТерриторийВыбрать.КнопкаПоУмолчанию = Истина; - КонецЕсли; - ОчищатьПодчиненные = Ложь; -КонецПроцедуры - -&НаКлиенте -Процедура ВариантыАдресаПриАктивизацииСтроки(Элемент) - Элементы.ВыбратьУлицу.Доступность = (Элемент.ТекущиеДанные <> Неопределено); - Если Элемент.ТекущиеДанные <> Неопределено И ЕстьПодчиненныеЭлементы(Элемент.ТекущиеДанные.Идентификатор) Тогда - Элементы.ДополнительныйЭлемент.Доступность = Истина; - Элементы.ПодчиненныйЭлемент.Доступность = Истина; - Иначе - Элементы.ДополнительныйЭлемент.Доступность = Ложь; - Элементы.ПодчиненныйЭлемент.Доступность = Ложь; - КонецЕсли; - Если ОчищатьПодчиненные Тогда - ДополнительныйЭлемент = Неопределено; - ПодчиненныйЭлемент = Неопределено; - Иначе - ОчищатьПодчиненные = Истина; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ВариантыДополнительныхТерриторийПриАктивизацииСтроки(Элемент) - Если Элемент.ТекущиеДанные <> Неопределено И ЕстьПодчиненныеЭлементы(Элемент.ТекущиеДанные.Идентификатор, 91) Тогда - Элементы.ПодчиненныйЭлементДляТерритории.Доступность = Истина; - Иначе - Элементы.ПодчиненныйЭлементДляТерритории.Доступность = Ложь; - КонецЕсли; +Процедура НайтиОчистка(Элемент, СтандартнаяОбработка) + Элементы.ВариантыАдреса.ОтборСтрок = Неопределено; КонецПроцедуры #КонецОбласти @@ -290,62 +85,8 @@ #Область КомандыФормы &НаКлиенте -Процедура ПерваяПорция(Команда) - - Если РазмерПорции = Неопределено Тогда - Возврат; - КонецЕсли; - - ПерейтиВНачалоСписка(); - -КонецПроцедуры - -&НаКлиенте -Процедура ПредыдущаяПорция(Команда) - - ЧислоЗаписей = ВариантыАдреса.Количество(); - Если ЧислоЗаписей = 0 Или РазмерПорции = Неопределено Тогда - Возврат; - КонецЕсли; - - Если НомерПорции > 0 Тогда - НомерПорции = НомерПорции - 1; - Иначе - НомерПорции = Неопределено; - КонецЕсли; - - ПараметрыПоиска = Новый Структура; - ПараметрыПоиска.Вставить("СкрыватьНеактуальные", Ложь); - ПараметрыПоиска.Вставить("ФорматАдреса", ФорматАдреса); - ПараметрыПоиска.Вставить("РазмерПорции", РазмерПорции); - ПараметрыПоиска.Вставить("ПерваяЗапись", НомерПорции); - ПараметрыПоиска.Вставить("Сортировка", "DESC"); - - ЗаполнитьПорциюВариантов(ПараметрыПоиска); -КонецПроцедуры - -&НаКлиенте -Процедура СледующаяПорция(Команда) - - ЧислоЗаписей = ВариантыАдреса.Количество(); - Если ЧислоЗаписей = 0 Или РазмерПорции = Неопределено Тогда - Возврат; - КонецЕсли; - - Если ЗначениеЗаполнено(НомерПорции) Тогда - НомерПорции = НомерПорции + 1; - Иначе - НомерПорции = 1; - КонецЕсли; - - ПараметрыПоиска = Новый Структура; - ПараметрыПоиска.Вставить("СкрыватьНеактуальные", Ложь); - ПараметрыПоиска.Вставить("ФорматАдреса", ФорматАдреса); - ПараметрыПоиска.Вставить("РазмерПорции", РазмерПорции); - ПараметрыПоиска.Вставить("ПерваяЗапись", НомерПорции); - ПараметрыПоиска.Вставить("Сортировка", "ASC"); - - ЗаполнитьПорциюВариантов(ПараметрыПоиска); +Процедура Выбрать(Команда) + ПроизвестиВыбор(Элементы.ВариантыАдреса.ТекущаяСтрока); КонецПроцедуры #КонецОбласти @@ -359,342 +100,18 @@ Возврат; КонецЕсли; - Если Элементы.Страницы.ТекущаяСтраница = Элементы.ДополнительныеТерритории Тогда - Данные = ВариантыДополнительныхТерриторий.НайтиПоИдентификатору(Элементы.ВариантыДополнительныхТерриторий.ТекущаяСтрока); - Иначе - Данные = ВариантыАдреса.НайтиПоИдентификатору(НомерСтроки); - КонецЕсли; + Данные = ВариантыАдреса.НайтиПоИдентификатору(НомерСтроки); Если Данные = Неопределено Тогда Возврат; ИначеЕсли Не Данные.Неактуален Тогда - ОповеститьВладельца(Данные); + Результат = Новый Структура(); + Результат.Вставить("Идентификатор", Данные.Идентификатор); + Результат.Вставить("Муниципальный", РаботаСАдресамиКлиентСервер.ЭтоМуниципальныйАдрес(ТипАдреса)); + Закрыть(Результат); Возврат; КонецЕсли; - Оповещение = Новый ОписаниеОповещения("ПроизвестиВыборЗавершениеВопроса", ЭтотОбъект, Данные); - - ПредупреждениеНеактуальности = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Адрес ""%1"" неактуален. - |Продолжить?'"), Данные.Представление); - ЗаголовокПредупреждения = НСтр("ru = 'Подтверждение'"); - - ПоказатьВопрос(Оповещение, ПредупреждениеНеактуальности, РежимДиалогаВопрос.ДаНет, , ,ЗаголовокПредупреждения); - -КонецПроцедуры - -&НаКлиенте -Процедура ПерейтиВНачалоСписка() - - ПараметрыПоиска = Новый Структура; - ПараметрыПоиска.Вставить("СкрыватьНеактуальные", Ложь); - ПараметрыПоиска.Вставить("ФорматАдреса", ФорматАдреса); - ПараметрыПоиска.Вставить("РазмерПорции", РазмерПорции); - ПараметрыПоиска.Вставить("ПерваяЗапись", Неопределено); - ПараметрыПоиска.Вставить("Сортировка", "ASC"); - - ЗаполнитьПорциюВариантов(ПараметрыПоиска); - -КонецПроцедуры - -&НаКлиенте -Процедура ПроизвестиВыборЗавершениеВопроса(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт - - Если РезультатВопроса = КодВозвратаДиалога.Да Тогда - ОповеститьВладельца(ДополнительныеПараметры); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ОповеститьВладельца(Знач Данные, Отказ = Ложь) - - Результат = СтруктураВыбранногоАдреса(); - Если Не Отказ Тогда - ЗаполнитьЗначенияСвойств(Результат, Данные); - Улица = ""; - Если Элементы.Страницы.ТекущаяСтраница = Элементы.ДополнительныеТерритории Тогда - ЗаполнитьЧастьАдресаПоПредставлению("Улица", "", Неопределено); - ЗаполнитьЧастьАдресаПоПредставлению("ДополнительныйЭлемент", Данные.Представление, Данные.Идентификатор); - ЗаполнитьЧастьАдресаПоПредставлению("ПодчиненныйЭлемент", ПодчиненныйЭлементДляТерритории, ИдентификаторПодчиненногоДляТерритории); - - Если ЗначениеЗаполнено(ИдентификаторПодчиненногоДляТерритории) Тогда - Результат.Идентификатор = ИдентификаторПодчиненногоДляТерритории; - КонецЕсли; - Иначе - ЗаполнитьЧастьАдресаПоПредставлению("Улица", Данные.Представление, Данные.Идентификатор); - ЗаполнитьЧастьАдресаПоПредставлению("ДополнительныйЭлемент", ДополнительныйЭлемент, ИдентификаторДополнительного); - ЗаполнитьЧастьАдресаПоПредставлению("ПодчиненныйЭлемент", ПодчиненныйЭлемент, ИдентификаторПодчиненного); - - Результат.НаселенныйПунктДетально = НаселенныйПунктДетально; - Если ЗначениеЗаполнено(ИдентификаторПодчиненного) Тогда - Результат.Идентификатор = ИдентификаторПодчиненного; - ИначеЕсли ЗначениеЗаполнено(ИдентификаторДополнительного) Тогда - Результат.Идентификатор = ИдентификаторДополнительного; - КонецЕсли; - КонецЕсли; - - Результат.Представление = СформироватьПредставлениеАдреса(Результат.НаселенныйПунктДетально); - Иначе - Результат.Отказ = Истина; - КонецЕсли; - - Результат.КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки; - ОповеститьОВыборе(Результат); - -КонецПроцедуры - -&НаКлиенте -Процедура ЗаполнитьЧастьАдресаПоПредставлению(НаименованиеЧастиАдреса, Представление, Идентификатор) - - НаименованиеСокращение= УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(Представление); - НаселенныйПунктДетально[НаименованиеЧастиАдреса].Представление = Представление; - НаселенныйПунктДетально[НаименованиеЧастиАдреса].Идентификатор = ?(ЗначениеЗаполнено(Идентификатор), Идентификатор, Неопределено); - НаселенныйПунктДетально[НаименованиеЧастиАдреса].Наименование = НаименованиеСокращение.Наименование; - НаселенныйПунктДетально[НаименованиеЧастиАдреса].Сокращение = НаименованиеСокращение.Сокращение; - - Если НаименованиеЧастиАдреса = "ДополнительныйЭлемент" Тогда - НаселенныйПунктДетально[НаименованиеЧастиАдреса].ПутьXPath = РаботаСАдресамиКлиентСервер.XPathДополнительногоОбъектаАдресации(90, НаименованиеСокращение.Сокращение); - ИначеЕсли НаименованиеЧастиАдреса = "ПодчиненныйЭлемент" Тогда - НаселенныйПунктДетально[НаименованиеЧастиАдреса].ПутьXPath = РаботаСАдресамиКлиентСервер.XPathДополнительногоОбъектаАдресации(91); - Иначе - НаселенныйПунктДетально[НаименованиеЧастиАдреса].ПутьXPath = НаименованиеЧастиАдреса; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Функция СтруктураВыбранногоАдреса() - СтруктураАдреса = Новый Структура; - СтруктураАдреса.Вставить("НаселенныйПунктДетально", НаселенныйПунктДетально); - СтруктураАдреса.Вставить("Представление", Неопределено); - СтруктураАдреса.Вставить("Идентификатор", Неопределено); - СтруктураАдреса.Вставить("РегионЗагружен", Истина); - СтруктураАдреса.Вставить("Неактуален", Ложь); - СтруктураАдреса.Вставить("КраткоеПредставлениеОшибки", ""); - СтруктураАдреса.Вставить("Отказ", Ложь); - - Возврат СтруктураАдреса; -КонецФункции - -&НаКлиенте -Функция СформироватьПредставлениеАдреса(СтруктураАдреса) - - Результат = ""; - - Разделитель = ""; - Если ЗначениеЗаполнено(СтруктураАдреса.Улица.Представление) Тогда - Результат = СтруктураАдреса.Улица.Представление; - Разделитель = ", "; - КонецЕсли; - - Если ЗначениеЗаполнено(СтруктураАдреса.ДополнительныйЭлемент.Представление) Тогда - Результат = Результат + Разделитель + СтруктураАдреса.ДополнительныйЭлемент.Представление; - Разделитель = ", "; - КонецЕсли; - - Если ЗначениеЗаполнено(СтруктураАдреса.ПодчиненныйЭлемент.Представление) Тогда - Результат = Результат + Разделитель + СтруктураАдреса.ПодчиненныйЭлемент.Представление; - Разделитель = ", "; - КонецЕсли; - - Возврат Результат; -КонецФункции - -&НаСервере -Процедура ЗаполнитьПорциюВариантов(ПараметрыПоиска) - - ДанныеКлассификатора = Обработки.РасширенныйВводКонтактнойИнформации.АдресаДляИнтерактивногоВыбора(Родитель, Уровень, ПараметрыПоиска); - Если ДанныеКлассификатора.Отказ Тогда - // Сервис на обслуживании - Возврат; - КонецЕсли; - - Если ДанныеКлассификатора.Данные.Количество() > 0 Тогда - ВариантыАдреса.Очистить(); - ВариантыАдреса.Загрузить(ДанныеКлассификатора.Данные); - КонецЕсли; - -КонецПроцедуры - -&НаСервереБезКонтекста -Функция ЗаполнитьПорциюВариантовПоПервойБукве(Текст, Родитель) - - ДанныеВыбора = Новый СписокЗначений; - - Если СтрДлина(Текст) < 1 Или Не ЗначениеЗаполнено(Родитель)Тогда - // Нет вариантов, список пуст, стандартную обработку не надо трогать. - Возврат ДанныеВыбора; - КонецЕсли; - - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("ФорматАдреса", "ФИАС"); - ДополнительныеПараметры.Вставить("СкрыватьНеактуальные", Ложь); - - ДанныеКлассификатора = Обработки.РасширенныйВводКонтактнойИнформации.СписокАвтоподбораУлицы(Родитель, Текст, ДополнительныеПараметры); - Если ДанныеКлассификатора.Отказ Тогда - Возврат ДанныеВыбора; - КонецЕсли; - - ДанныеВыбора = ДанныеКлассификатора.Данные; - - Возврат ДанныеВыбора; - -КонецФункции - -&НаСервере -Процедура УстановитьДанныеПоПредставлениюУлицы(Представление, ИдентификаторРодителя) - - Если НЕ ЗначениеЗаполнено(Представление) Тогда - Для каждого УровеньАдреса Из НаселенныйПунктДетально Цикл - Если УровеньАдреса.Ключ = "Улица" Тогда - Отбор = Новый Структура("Представление", УровеньАдреса.Значение.Представление); - Варианты = ВариантыАдреса.НайтиСтроки(Отбор); - Если Варианты.Количество() > 0 Тогда - Элементы.ВариантыАдреса.ТекущаяСтрока = Варианты[0].ПолучитьИдентификатор(); - КонецЕсли; - ИначеЕсли УровеньАдреса.Ключ = "ДополнительныйЭлемент" Тогда - ДополнительныйЭлемент = УровеньАдреса.Значение.Представление; - ИначеЕсли УровеньАдреса.Ключ = "ПодчиненныйЭлемент" Тогда - ПодчиненныйЭлемент = УровеньАдреса.Значение.Представление; - КонецЕсли; - КонецЦикла; - Иначе - // адрес был введен вручную - АнализКлассификатора =Обработки.РасширенныйВводКонтактнойИнформации.УлицыПоПредставлению(ИдентификаторРодителя, Представление); - Если АнализКлассификатора <> Неопределено Тогда - ДанныеУлицы = АнализКлассификатора.Найти(7, "Уровень"); - Если ДанныеУлицы <> Неопределено Тогда - Отбор = Новый Структура("Представление",ДанныеУлицы.Значение); - Варианты = ВариантыАдреса.НайтиСтроки(Отбор); - Если Варианты.Количество() > 0 Тогда - Элементы.ВариантыАдреса.ТекущаяСтрока = Варианты[0].ПолучитьИдентификатор(); - КонецЕсли; - ДанныеДополнительныйЭлемент = АнализКлассификатора.Найти(90, "Уровень"); - Если ДанныеДополнительныйЭлемент <> Неопределено Тогда - ДополнительныйЭлемент = ДанныеДополнительныйЭлемент.Значение; - КонецЕсли; - ДанныеПодчиненныйЭлемент = АнализКлассификатора.Найти(91, "Уровень"); - Если ДанныеПодчиненныйЭлемент <> Неопределено Тогда - ПодчиненныйЭлемент = ДанныеПодчиненныйЭлемент.Значение; - КонецЕсли; - Иначе - ДанныеДополнительныйЭлемент = АнализКлассификатора.Найти(90, "Уровень"); - Если ДанныеДополнительныйЭлемент <> Неопределено Тогда - Отбор = Новый Структура("Представление", ДанныеДополнительныйЭлемент.Значение); - Варианты = ВариантыДополнительныхТерриторий.НайтиСтроки(Отбор); - Если Варианты.Количество() > 0 Тогда - Элементы.ВариантыДополнительныхТерриторий.ТекущаяСтрока = Варианты[0].ПолучитьИдентификатор(); - КонецЕсли; - Элементы.Страницы.ТекущаяСтраница = Элементы.ДополнительныеТерритории; - КонецЕсли; - ДанныеПодчиненныйЭлементДляТерритории = АнализКлассификатора.Найти(91, "Уровень"); - Если ДанныеПодчиненныйЭлементДляТерритории <> Неопределено Тогда - ПодчиненныйЭлементДляТерритории = ДанныеПодчиненныйЭлементДляТерритории.Значение; - КонецЕсли; - КонецЕсли; - Иначе - ЧастиУлицы = СтрРазделить(Представление, ",", Ложь); - Если ЧастиУлицы.Количество() = 3 Тогда - Отбор = Новый Структура("Представление", СокрЛП(ЧастиУлицы[0])); - Варианты = ВариантыАдреса.НайтиСтроки(Отбор); - Если Варианты.Количество() > 0 Тогда - Элементы.ВариантыАдреса.ТекущаяСтрока = Варианты[0].ПолучитьИдентификатор(); - КонецЕсли; - ДополнительныйЭлемент = СокрЛП(ЧастиУлицы[1]); - ПодчиненныйЭлемент = СокрЛП(ЧастиУлицы[2]); - ИначеЕсли ЧастиУлицы.Количество() = 2 Тогда - Отбор = Новый Структура("Представление", СокрЛП(ЧастиУлицы[0])); - Варианты = ВариантыАдреса.НайтиСтроки(Отбор); - Если Варианты.Количество() > 0 Тогда - Элементы.ВариантыАдреса.ТекущаяСтрока = Варианты[0].ПолучитьИдентификатор(); - Если Элементы.УлицыИНаселенныеПункты.Видимость Тогда - ДополнительныйЭлемент = СокрЛП(ЧастиУлицы[1]); - Иначе - ПодчиненныйЭлементДляТерритории = СокрЛП(ЧастиУлицы[1]); - КонецЕсли; - Иначе - Варианты = ВариантыДополнительныхТерриторий.НайтиСтроки(Отбор); - Если Варианты.Количество() > 0 Тогда - Элементы.ВариантыДополнительныхТерриторий.ТекущаяСтрока = Варианты[0].ПолучитьИдентификатор(); - Если Элементы.УлицыИНаселенныеПункты.Видимость Тогда - ДополнительныйЭлемент = СокрЛП(ЧастиУлицы[1]); - Иначе - ПодчиненныйЭлементДляТерритории = СокрЛП(ЧастиУлицы[1]); - КонецЕсли; - КонецЕсли; - КонецЕсли; - ИначеЕсли ЧастиУлицы.Количество() = 1 Тогда - Отбор = Новый Структура("Представление", СокрЛП(ЧастиУлицы[0])); - Варианты = ВариантыАдреса.НайтиСтроки(Отбор); - Если Варианты.Количество() > 0 Тогда - Элементы.ВариантыАдреса.ТекущаяСтрока = Варианты[0].ПолучитьИдентификатор(); - Иначе - Варианты = ВариантыДополнительныхТерриторий.НайтиСтроки(Отбор); - Если Варианты.Количество() > 0 Тогда - Элементы.ВариантыДополнительныхТерриторий.ТекущаяСтрока = Варианты[0].ПолучитьИдентификатор(); - Элементы.Страницы.ТекущаяСтраница = Элементы.ДополнительныеТерритории; - Иначе - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - АдресныйОбъект = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(Представление); - - МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); - Результат = МодульАдресныйКлассификаторСлужебный.УлицаИДополнительнаяТерритория(АдресныйОбъект, ИдентификаторРодителя); - Если Результат <> Неопределено Тогда - Отбор = Новый Структура("Идентификатор", Результат.ИдентификаторУлицы); - Варианты = ВариантыАдреса.НайтиСтроки(Отбор); - Элементы.ВариантыАдреса.ТекущаяСтрока = Варианты[0].ПолучитьИдентификатор(); - ИдентификаторДополнительного = Результат.Идентификатор; - ДополнительныйЭлемент = Результат.Значение; - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; -КонецПроцедуры - -&НаСервереБезКонтекста -Функция ЕстьПодчиненныеЭлементы(Идентификатор, Уровень = 90) - ПараметрыПоиска = Новый Структура; - ПараметрыПоиска.Свойство("ФорматАдреса", "ФИАС"); - ПараметрыПоиска.Свойство("СкрыватьНеактуальные", Истина); - - ДанныеКлассификатора = Обработки.РасширенныйВводКонтактнойИнформации.АдресаДляИнтерактивногоВыбора(Идентификатор, Уровень, ПараметрыПоиска); - Если ДанныеКлассификатора.Данные.Количество() > 0 Тогда - Возврат Истина; - КонецЕсли; - - Возврат Ложь; - -КонецФункции - -&НаСервере -Процедура УстановитьУсловноеОформление() - - УсловноеОформление.Элементы.Очистить(); - - // - - Элемент = УсловноеОформление.Элементы.Добавить(); - - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ВариантыАдресаПредставление.Имя); - ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВариантыАдреса.Неактуален"); - ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ОтборЭлемента.ПравоеЗначение = Истина; - Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); - - Элемент = УсловноеОформление.Элементы.Добавить(); - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ВариантыДополнительныхТерриторий.Имя); - ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВариантыДополнительныхТерриторий.Неактуален"); - ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ОтборЭлемента.ПравоеЗначение = Истина; - Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); - КонецПроцедуры #КонецОбласти diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Form.form b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Form.form index ca23e4a0a..7df9b1713 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Form.form +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Form.form @@ -1,12 +1,544 @@ - + <key>ru</key> <value>Населенный пункт</value> + + ТипАдреса + 9 + true + true + + true + + + ТипАдреса + + None + + OnChange + ТипАдресаПриИзменении + + + ТипАдресаРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + + ТипАдресаКонтекстноеМеню + 10 + true + + RadioButtonField + Enter + true + Left + true + + + + ru + Муниципальный + + + Муниципальный + + + + + ru + Административно-территориальный + + + Административно-территориальный + + + Vertical + + ГруппаЧастейАдреса 7 + + СубъектРФ + 12 + true + true + + true + + + Регион + + true + + OnChange + СубъектРФПриИзменении + + + СубъектРФРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + + СубъектРФКонтекстноеМеню + 13 + true + + InputField + Enter + true + Left + true + + + AutoComplete + СубъектРФАвтоПодбор + + + StartChoice + СубъектРФНачалоВыбора + + + ChoiceProcessing + СубъектРФОбработкаВыбора + + true + true + true + true + true + true + true + OnValueChange + Normal + + + + Район + 18 + true + true + + true + + + Район + + + OnChange + РайонПриИзменении + + + РайонРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + + РайонКонтекстноеМеню + 19 + true + + InputField + Enter + true + Left + true + + + AutoComplete + РайонАвтоПодбор + + + StartChoice + РайонНачалоВыбора + + + ChoiceProcessing + РайонОбработкаВыбора + + true + true + true + true + true + true + true + OnValueChange + Normal + + + + МуниципальныйРайон + 15 + true + true + + true + + + МуниципальныйРайон + + 2 + + OnChange + МуниципальныйРайонПриИзменении + + + МуниципальныйРайонРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + + МуниципальныйРайонКонтекстноеМеню + 16 + true + + InputField + Enter + true + Left + true + + + AutoComplete + МуниципальныйРайонАвтоПодбор + + + StartChoice + МуниципальныйРайонНачалоВыбора + + + ChoiceProcessing + МуниципальныйРайонОбработкаВыбора + + true + true + true + true + true + true + true + OnValueChange + Normal + + + + Город + 21 + true + true + + true + + + Город + + + OnChange + ГородПриИзменении + + + ГородРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + + ГородКонтекстноеМеню + 22 + true + + InputField + Enter + true + Left + true + + + AutoComplete + ГородАвтоПодбор + + + StartChoice + ГородНачалоВыбора + + + ChoiceProcessing + ГородОбработкаВыбора + + true + true + true + true + true + true + true + OnValueChange + Normal + + + + Поселение + 24 + true + true + + true + + + Поселение + + + OnChange + ПоселениеПриИзменении + + + ПоселениеРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + ПоселениеКонтекстноеМеню + 25 + true + + InputField + Enter + true + Left + true + + + AutoComplete + ПоселениеАвтоПодбор + + + StartChoice + ПоселениеНачалоВыбора + + + ChoiceProcessing + ПоселениеОбработкаВыбора + + true + true + true + true + true + true + true + OnValueChange + Normal + + + + ВнутригородскойРайон + 27 + true + true + + true + + + ВнутригородскойРайон + + + OnChange + ВнутригородскойРайонПриИзменении + + + ВнутригородскойРайонРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + + ВнутригородскойРайонКонтекстноеМеню + 28 + true + + InputField + Enter + true + Left + true + + + AutoComplete + ВнутригородскойРайонАвтоПодбор + + + StartChoice + ВнутригородскойРайонНачалоВыбора + + + ChoiceProcessing + ВнутригородскойРайонОбработкаВыбора + + true + true + true + true + true + true + true + OnValueChange + Normal + + + + НаселенныйПункт + 30 + true + true + + true + + + НаселенныйПункт + + + OnChange + НаселенныйПунктПриИзменении + + + НаселенныйПунктРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + НаселенныйПунктКонтекстноеМеню + 31 + true + + InputField + Enter + true + Left + true + + + AutoComplete + НаселенныйПунктАвтоПодбор + + + StartChoice + НаселенныйПунктНачалоВыбора + + + ChoiceProcessing + НаселенныйПунктОбработкаВыбора + + true + true + true + true + true + true + true + OnValueChange + Normal + + + + Территория + 33 + true + true + + true + + + Территория + + + OnChange + ТерриторияПриИзменении + + + ТерриторияРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + + ТерриторияКонтекстноеМеню + 34 + true + + InputField + Enter + true + Left + true + + + AutoComplete + ТерриторияАвтоПодбор + + + StartChoice + ТерриторияНачалоВыбора + + + ChoiceProcessing + ТерриторияОбработкаВыбора + + true + true + true + true + true + true + true + OnValueChange + Normal + + true true @@ -121,6 +653,10 @@ Right + + OnOpen + ПриОткрытии + OnCreateAtServer ПриСозданииНаСервере @@ -149,27 +685,31 @@
        true
        - ЧастиАдреса + ТипАдреса <key>ru</key> - <value>Части адреса</value> + <value>Тип адреса</value> - 2 - + 6 + + String + + true true + true - ПрефиксИмениЧастиАдреса + Регион <key>ru</key> - <value>Префикс имени части адреса</value> + <value>Субъект РФ</value> - 3 + 7 String @@ -180,6 +720,155 @@ true + true + + + МуниципальныйРайон + + <key>ru</key> + <value>Муниципальный район, городской округ</value> + + 8 + + String + + + + true + + + true + + true + + + Район + + <key>ru</key> + <value>Район</value> + + 9 + + String + + + + true + + + true + + true + + + Город + + <key>ru</key> + <value>Город</value> + + 10 + + String + + + + true + + + true + + true + + + Поселение + + <key>ru</key> + <value>Поселение</value> + + 11 + + String + + + + true + + + true + + true + + + ВнутригородскойРайон + + <key>ru</key> + <value>Внутригородской район</value> + + 12 + + String + + + + true + + + true + + true + + + НаселенныйПункт + + <key>ru</key> + <value>Населенный пункт</value> + + 13 + + String + + + + true + + + true + + true + + + Территория + + <key>ru</key> + <value>Территория</value> + + 15 + + String + + + + true + + + true + + true + + + НаселенныйПунктДетально + + <key>ru</key> + <value>Населенный пункт детально</value> + + 16 + + + true + + + true + СкрыватьНеактуальныеАдреса @@ -187,7 +876,7 @@ ru Скрывать неактуальные адреса - 4 + 17 Boolean @@ -199,84 +888,12 @@ - МожноЗагружатьКлассификатор + ИспользоватьАвтоподбор <key>ru</key> - <value>Можно загружать классификатор</value> + <value>Использовать автоподбор</value> - 5 - - Boolean - - - true - - - true - - - - ФорматАдреса - - <key>ru</key> - <value>Формат адреса</value> - - 6 - - String - - - - true - - - true - - - - СервисКлассификатораНедоступен - - <key>ru</key> - <value>Сервис классификатора недоступен</value> - - 7 - - Boolean - - - true - - - true - - - - ЭлементыФормыПоУровням - - <key>ru</key> - <value>Элементы формы по уровням</value> - - 8 - - ValueList - - - true - - - true - - - - - - - АдресИзменен - - <key>ru</key> - <value>Адрес изменен</value> - - 9 + 18 Boolean diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Help/ru.html b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Help/ru.html index e9dfd8d1e..a8dd5fef5 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Help/ru.html +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Help/ru.html @@ -1,10 +1,17 @@

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

        Открывается из шаблона ввода адреса в поле Город, населенный пункт по кнопке  Выбрать.

        -

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

        -

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

        -

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

        -

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

        -

        См. также:

        +

        Выбор вида территориального деления

        +
        • +
          Перед заполнением адреса с помощью флажка можно выбрать:
          +
          • +
            Муниципальное деление;
            +
          • +
            Административно-территориальное деление.

        Ввод населенного пункта

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

        См. также:

        \ No newline at end of file diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Module.bsl b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Module.bsl index bc497bc01..e1bd3bae4 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Module.bsl +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Module.bsl @@ -1,22 +1,22 @@ -// Форма параметризуется: -// -// ИдентификаторНаселенногоПункта - УникальныйИдентификатор - Идентификатор текущего объекта для определения и -// редактирования частей формы. -// НаселенныйПунктДетально - Структура - Описание населенного пункта в терминах варианта -// классификатора. Используется, если не указан -// идентификатор. -// ФорматАдреса - Строка - Вариант адресного классификатора, -// СкрыватьНеактуальныеАдреса - Булево - Флаг того, что при редактировании неактуальные адреса будут -// скрываться. -// СервисКлассификатораНедоступен - Булево - Необязательный флаг того, что поставщик на обслуживании. -// -// Результат выбора: -// Структура - поля: -// * Идентификатор - УникальныйИдентификатор - Выбранный населенный пункт. -// * Представление - Строка - Представление выбранного. -// * НаселенныйПунктДетально - Структура - Отредактированное описание населенного пункта. -// -// ------------------------------------------------------------------------------------------------- +//// Форма параметризуется: +//// +//// ИдентификаторНаселенногоПункта - УникальныйИдентификатор - Идентификатор текущего объекта для определения и +//// редактирования частей формы. +//// НаселенныйПунктДетально - Структура - Описание населенного пункта в терминах варианта +//// классификатора. Используется, если не указан +//// идентификатор. +//// ФорматАдреса - Строка - Вариант адресного классификатора, +//// СкрыватьНеактуальныеАдреса - Булево - Флаг того, что при редактировании неактуальные адреса будут +//// скрываться. +//// СервисКлассификатораНедоступен - Булево - Необязательный флаг того, что поставщик на обслуживании. +//// +//// Результат выбора: +//// Структура - поля: +//// * Идентификатор - УникальныйИдентификатор - Выбранный населенный пункт. +//// * Представление - Строка - Представление выбранного. +//// * НаселенныйПунктДетально - Структура - Отредактированное описание населенного пункта. +//// +//// ------------------------------------------------------------------------------------------------- #Область ОбработчикиСобытийФормы @@ -27,27 +27,208 @@ Возврат; КонецЕсли; - Параметры.Свойство("ФорматАдреса", ФорматАдреса); - Параметры.Свойство("СервисКлассификатораНедоступен", СервисКлассификатораНедоступен); - Параметры.Свойство("СкрыватьНеактуальныеАдреса ", СкрыватьНеактуальныеАдреса); - - Если ПустаяСтрока(ФорматАдреса) Тогда - ФорматАдреса = "ФИАС"; + Параметры.Свойство("НаселенныйПунктДетально", НаселенныйПунктДетально); + ИспользоватьАвтоподбор = Истина; + Если НаселенныйПунктДетально <> Неопределено Тогда + + ТипАдреса = НаселенныйПунктДетально.AddressType; + Если НаселенныйПунктДетально.Свойство("Country") + И РаботаСАдресамиКлиентСервер.ЭтоОсновнаяСтрана(НаселенныйПунктДетально.Country) Тогда + + МуниципальныйРайон = ПредставлениеУровняАдреса(НаселенныйПунктДетально, "MunDistrict", Ложь); + Поселение = ПредставлениеУровняАдреса(НаселенныйПунктДетально, "Settlement"); + ВнутригородскойРайон = ПредставлениеУровняАдреса(НаселенныйПунктДетально, "CityDistrict"); + Территория = ПредставлениеУровняАдреса(НаселенныйПунктДетально, "Territory"); + Иначе + ИспользоватьАвтоподбор = Ложь; + КонецЕсли; + + Регион = ПредставлениеУровняАдреса(НаселенныйПунктДетально, "Area"); + Район = ПредставлениеУровняАдреса(НаселенныйПунктДетально, "District"); + НаселенныйПункт = ПредставлениеУровняАдреса(НаселенныйПунктДетально, "Locality"); + Город = ПредставлениеУровняАдреса(НаселенныйПунктДетально, "City"); + + Иначе + ТипАдреса = "Муниципальный"; КонецЕсли; - МожноЗагружатьКлассификатор = Обработки.РасширенныйВводКонтактнойИнформации.ЕстьВозможностьИзмененияАдресногоКлассификатора(); - ПрефиксИмениЧастиАдреса = "Часть"; - ЧастиАдреса = Параметры.НаселенныйПунктДетально; - Если ЧастиАдреса = Неопределено Или ЧастиАдреса.Количество() = 0 Тогда - ЧастиАдреса = Обработки.РасширенныйВводКонтактнойИнформации.СписокРеквизитовНаселенныйПункт( , ФорматАдреса); - КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + ОтобразитьПоляПоТипуАдреса(); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ТипАдресаПриИзменении(Элемент) - Если СервисКлассификатораНедоступен Тогда - Обработки.РасширенныйВводКонтактнойИнформации.ЗаполнитьИдентификаторыНаселенногоПункта(ЧастиАдреса); - КонецЕсли; + НаселенныйПунктДетально.AddressType = ?(ТипАдреса = "Муниципальный", РаботаСАдресамиКлиентСервер.МуниципальныйАдрес(), РаботаСАдресамиКлиентСервер.АдминистративноТерриториальныйАдрес()); + ОтобразитьПоляПоТипуАдреса(); - ПостроитьФормуПоЧастямАдреса(); - УстановитьКлючИспользованияФормы(); +КонецПроцедуры + +&НаКлиенте +Процедура СубъектРФАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) + АвтоПодборПоУровню(Текст, ДанныеВыбора, "Area", СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура РайонАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) + АвтоПодборПоУровню(Текст, ДанныеВыбора, "District", СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура МуниципальныйРайонАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) + АвтоПодборПоУровню(Текст, ДанныеВыбора, "MunDistrict", СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура ГородАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) + АвтоПодборПоУровню(Текст, ДанныеВыбора, "City", СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура ПоселениеАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) + АвтоПодборПоУровню(Текст, ДанныеВыбора, "Settlement", СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура ВнутригородскойРайонАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) + АвтоПодборПоУровню(Текст, ДанныеВыбора, "CityDistrict", СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура НаселенныйПунктАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) + АвтоПодборПоУровню(Текст, ДанныеВыбора, "Locality", СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура ТерриторияАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) + АвтоПодборПоУровню(Текст, ДанныеВыбора, "Territory", СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура СубъектРФНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + ОткрытьФормуВыбораАдресныхОбъектов(Элемент, ДанныеВыбора, СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура РайонНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + ОткрытьФормуВыбораАдресныхОбъектов(Элемент, ДанныеВыбора, СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура МуниципальныйРайонНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + ОткрытьФормуВыбораАдресныхОбъектов(Элемент, ДанныеВыбора, СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура ПоселениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + ОткрытьФормуВыбораАдресныхОбъектов(Элемент, ДанныеВыбора, СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура ГородНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + ОткрытьФормуВыбораАдресныхОбъектов(Элемент, ДанныеВыбора, СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура ВнутригородскойРайонНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + ОткрытьФормуВыбораАдресныхОбъектов(Элемент, ДанныеВыбора, СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура НаселенныйПунктНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + ОткрытьФормуВыбораАдресныхОбъектов(Элемент, ДанныеВыбора, СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура ТерриторияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + ОткрытьФормуВыбораАдресныхОбъектов(Элемент, ДанныеВыбора, СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура СубъектРФОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + ОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура РайонОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + ОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура МуниципальныйРайонОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + ОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура ГородОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + ОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура ПоселениеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + ОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура ВнутригородскойРайонОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + ОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура НаселенныйПунктОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + ОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура ТерриторияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + ОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура СубъектРФПриИзменении(Элемент) + ИзменитьУровеньАдреса("Area", Регион); +КонецПроцедуры + +&НаКлиенте +Процедура РайонПриИзменении(Элемент) + ИзменитьУровеньАдреса("District", Район); +КонецПроцедуры + +&НаКлиенте +Процедура МуниципальныйРайонПриИзменении(Элемент) + ИзменитьУровеньАдреса("MunDistrict", МуниципальныйРайон); +КонецПроцедуры + +&НаКлиенте +Процедура ГородПриИзменении(Элемент) + ИзменитьУровеньАдреса("City", Город); +КонецПроцедуры + +&НаКлиенте +Процедура ПоселениеПриИзменении(Элемент) + ИзменитьУровеньАдреса("Settlement", Поселение); +КонецПроцедуры + +&НаКлиенте +Процедура ВнутригородскойРайонПриИзменении(Элемент) + ИзменитьУровеньАдреса("CityDistrict", ВнутригородскойРайон); +КонецПроцедуры + +&НаКлиенте +Процедура НаселенныйПунктПриИзменении(Элемент) + ИзменитьУровеньАдреса("Locality", НаселенныйПункт); +КонецПроцедуры + +&НаКлиенте +Процедура ТерриторияПриИзменении(Элемент) + ИзменитьУровеньАдреса("Territory", Территория); КонецПроцедуры #КонецОбласти @@ -56,444 +237,221 @@ &НаКлиенте Процедура КомандаОК(Команда) - - - Если АдресИзменен Тогда - Результат = РезультатВыбора(); - -#Если ВебКлиент Тогда - ФлагЗакрытия = ЗакрыватьПриВыборе; - ЗакрыватьПриВыборе = Ложь; - ОповеститьОВыборе(Результат); - ЗакрыватьПриВыборе = ФлагЗакрытия; -#Иначе - ОповеститьОВыборе(Результат); -#КонецЕсли - - Иначе - Результат = Неопределено; - КонецЕсли; - - Если (МодальныйРежим Или ЗакрыватьПриВыборе) И Открыта() Тогда - Закрыть(Результат); - КонецЕсли; - + Закрыть(НаселенныйПунктДетально); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции -&НаСервере -Процедура ПостроитьФормуПоЧастямАдреса() - Добавлять = Новый Массив; +&НаКлиенте +Функция ИмяУровняПоНазваниюЭлемента(ИмяЭлемента) - ТипСтрока = Новый ОписаниеТипов("Строка"); - Для Каждого КлючЗначение Из ЧастиАдреса Цикл - Часть = КлючЗначение.Значение; - Имя = КлючЗначение.Ключ; - Добавлять.Добавить( Новый РеквизитФормы(ПрефиксИмениЧастиАдреса + Имя, ТипСтрока, , Часть.Заголовок)); - КонецЦикла; - ИзменитьРеквизиты(Добавлять); - РодительЭлементов = Элементы.ГруппаЧастейАдреса; - ЭлементыФормыПоУровням.Очистить(); + ИменаУровней = Новый Соответствие; + ИменаУровней.Вставить("СубъектРФ", "Area"); + ИменаУровней.Вставить("Район", "District"); + ИменаУровней.Вставить("МуниципальныйРайон", "MunDistrict"); + ИменаУровней.Вставить("Город", "City"); + ИменаУровней.Вставить("Поселение", "Settlement"); + ИменаУровней.Вставить("ВнутригородскойРайон", "CityDistrict"); + ИменаУровней.Вставить("НаселенныйПункт", "Locality"); + ИменаУровней.Вставить("Территория", "Territory"); - Для Каждого КлючЗначение Из ЧастиАдреса Цикл - Часть = КлючЗначение.Значение; - Имя = КлючЗначение.Ключ; - - Если Часть.Уровень < 7 И НЕ (ФорматАдреса = "КЛАДР" И (Часть.Уровень = 2 ИЛИ Часть.Уровень = 5))Тогда - Элемент = Элементы.Добавить(ПрефиксИмениЧастиАдреса + Имя, Тип("ПолеФормы"), РодительЭлементов); - - Элемент.ПутьКДанным = Элемент.Имя; - Элемент.Вид = ВидПоляФормы.ПолеВвода; - - Элемент.ОбновлениеТекстаРедактирования = ОбновлениеТекстаРедактирования.ПриИзмененииЗначения; - - Часть.Свойство("Подсказка", Элемент.Подсказка); - Если ПустаяСтрока(Элемент.Подсказка) Тогда - Элемент.Подсказка = Часть.Заголовок; - КонецЕсли; - - Элемент.УстановитьДействие("ПриИзменении", "Подключаемый_ПолеПриИзменении"); - Элемент.УстановитьДействие("ОкончаниеВводаТекста", "Подключаемый_ПолеОкончаниеВводаТекста"); - - Если НЕ СервисКлассификатораНедоступен Тогда - Элемент.КнопкаВыбора = Истина; - Элемент.УстановитьДействие("НачалоВыбора", "Подключаемый_ПолеНачалоВыбора"); - Элемент.УстановитьДействие("Очистка", "Подключаемый_Очистка"); - Элемент.УстановитьДействие("ОбработкаВыбора", "Подключаемый_ПолеОбработкаВыбора"); - Элемент.УстановитьДействие("Автоподбор", "Подключаемый_ПолеАвтоподбор"); - КонецЕсли; - ЭтотОбъект[Элемент.Имя] = Часть.Представление; - ЭлементыФормыПоУровням.Добавить(КлючЗначение.Значение.Уровень, Элемент.Имя); - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - -// ------------------------------------------------------------------------------------------------- - -&НаКлиенте -Функция ИмяЧастиАдресаЭлемента(Элемент) - - Возврат Сред(Элемент.Имя, 1 + СтрДлина(ПрефиксИмениЧастиАдреса)); + Возврат ИменаУровней[ИмяЭлемента]; КонецФункции -&НаКлиенте -Функция ЧастьАдресаЭлемента(Элемент) - - Возврат ЧастиАдреса[ИмяЧастиАдресаЭлемента(Элемент)]; - -КонецФункции - -// ------------------------------------------------------------------------------------------------- - &НаКлиенте -Функция УстановитьЗначениеЧастиАдреса(Элемент, ВыбранноеЗначение) - - Результат = УправлениеКонтактнойИнформациейКлиентСервер.УстановитьЗначениеЧастиАдреса( - ИмяЧастиАдресаЭлемента(Элемент), ЧастиАдреса, ВыбранноеЗначение); - - ЭтотОбъект[Элемент.Имя] = Результат; - Возврат Результат; -КонецФункции - -&НаКлиенте -Процедура Подключаемый_ПолеПриИзменении(Элемент) - АдресИзменен = Истина; - - ДоступностьКнопкиОК = Ложь; - Для каждого Элемент Из ЭлементыФормыПоУровням Цикл - Если НЕ ПустаяСтрока(ЭтотОбъект[Элемент.Представление]) Тогда - ДоступностьКнопкиОК = Истина; - КонецЕсли; - КонецЦикла; - Элементы.ФормаКомандаОК.Доступность = ДоступностьКнопкиОК; - -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_ПолеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) +Процедура ОткрытьФормуВыбораАдресныхОбъектов(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - // Если пришли впрямую после редактирования, то сбрасываем значение части адреса. - Если Элемент.ТекстРедактирования <> ЭтотОбъект[Элемент.Имя] Тогда - УстановитьЗначениеЧастиАдреса(Элемент, Элемент.ТекстРедактирования); - КонецЕсли; + ИмяУровня = ИмяУровняПоНазваниюЭлемента(Элемент.Имя); - ЧастьАдреса = ЧастьАдресаЭлемента(Элемент); + РодительскийИдентификатор = ИдентификаторРодителяУровняАдреса(ИмяУровня, НаселенныйПунктДетально, ТипАдреса); + Уровень = РаботаСАдресамиКлиентСервер.СопоставлениеНаименованиеУровнюАдреса(ИмяУровня); ПараметрыОткрытия = Новый Структура; - ПараметрыОткрытия.Вставить("ФорматАдреса", ФорматАдреса); - ПараметрыОткрытия.Вставить("СкрыватьНеактуальныеАдреса", СкрыватьНеактуальныеАдреса); - - ПараметрыОткрытия.Вставить("Уровень", ЧастьАдреса.Уровень); - ПараметрыОткрытия.Вставить("Родитель", ИдентификаторРодителяЧастиАдресаЭлемента(ЧастьАдреса, ЧастиАдреса)); - - // Текущий элемент - ПараметрыОткрытия.Вставить("Идентификатор", ЧастьАдреса.Идентификатор); - Представление = ?(ПустаяСтрока(ЧастьАдреса.Представление),ЧастьАдреса.Заголовок, ЧастьАдреса.Представление); - ПараметрыОткрытия.Вставить("Представление", Представление); + ПараметрыОткрытия.Вставить("ТипАдреса", ТипАдреса); + ПараметрыОткрытия.Вставить("Уровень", Уровень); + ПараметрыОткрытия.Вставить("Родитель", РодительскийИдентификатор); ОткрытьФорму("Обработка.РасширенныйВводКонтактнойИнформации.Форма.ВыборАдресаПоУровню", ПараметрыОткрытия, Элемент); -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_Очистка(Элемент, СтандартнаяОбработка) - - ОчиститьДочерниеПоляАдреса(Элемент.Имя); - АдресИзменен = Истина; + Модифицированность = Истина; КонецПроцедуры &НаКлиенте -Процедура Подключаемый_ПолеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) - ТипВыбранного = ТипЗнч(ВыбранноеЗначение); +Процедура ОпределитьПоляАдреса() - Если ТипВыбранного = Тип("Структура") Тогда - - Если СервисКлассификатораНедоступен Тогда - СтандартнаяОбработка = Ложь; - Если НЕ ПустаяСтрока(ВыбранноеЗначение.КраткоеПредставлениеОшибки) Тогда - ПоказатьПредупреждение(, ВыбранноеЗначение.КраткоеПредставлениеОшибки); - КонецЕсли; - Возврат; + Регион = ПредставлениеУровняАдреса(НаселенныйПунктДетально, "Area"); + Район = ПредставлениеУровняАдреса(НаселенныйПунктДетально, "District"); + МуниципальныйРайон = ПредставлениеУровняАдреса(НаселенныйПунктДетально, "MunDistrict"); + Город = ПредставлениеУровняАдреса(НаселенныйПунктДетально, "City"); + Поселение = ПредставлениеУровняАдреса(НаселенныйПунктДетально, "Settlement"); + ВнутригородскойРайон = ПредставлениеУровняАдреса(НаселенныйПунктДетально, "CityDistrict"); + НаселенныйПункт = ПредставлениеУровняАдреса(НаселенныйПунктДетально, "Locality"); + Территория = ПредставлениеУровняАдреса(НаселенныйПунктДетально, "Territory"); + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Функция ПредставлениеУровняАдреса(Адрес, ИмяУровня, ДобавлятьСокращение = Истина) + + Если Адрес.Свойство(ИмяУровня) И ЗначениеЗаполнено(Адрес[ИмяУровня]) Тогда + Если ДобавлятьСокращение Тогда + Сокращение = ?(ПустаяСтрока(Адрес[ИмяУровня +"Type"]), "", " " + Адрес[ИмяУровня +"Type"]); + Возврат Адрес[ИмяУровня] + Сокращение; Иначе - НеЗагружатьАдресныйКлассификатор = ПараметрыПриложения.Получить("АдресныйКлассификатор.НеЗагружатьКлассификатор"); - Если НеЗагружатьАдресныйКлассификатор = Неопределено ИЛИ НеЗагружатьАдресныйКлассификатор = Ложь Тогда - РегионНеЗагружен = ВыбранноеЗначение.Свойство("РегионЗагружен") И ВыбранноеЗначение.РегионЗагружен = Ложь; - Если МожноЗагружатьКлассификатор И РегионНеЗагружен Тогда - // Предлагаем загрузить классификатор. - ПредложениеЗагрузкиКлассификатора(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Данные для ""%1"" не загружены.'"), ВыбранноеЗначение.Представление), - ВыбранноеЗначение.Представление); - КонецЕсли; - КонецЕсли; + Возврат Адрес[ИмяУровня]; КонецЕсли; + КонецЕсли; + + Возврат ""; +КонецФункции + +&НаКлиенте +Процедура ОтобразитьПоляПоТипуАдреса() + + Если СтрСравнить(УправлениеКонтактнойИнформациейКлиентСервер.АдресЕАЭС(), ТипАдреса) <> 0 Тогда - Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") - И ВыбранноеЗначение.Свойство("Отказ") - И ВыбранноеЗначение.Отказ Тогда - СтандартнаяОбработка = Ложь; - Возврат; - КонецЕсли; + ЭтоМуниципальныйАдрес = РаботаСАдресамиКлиентСервер.ЭтоМуниципальныйАдрес(ТипАдреса); + Элементы.Район.Видимость = НЕ ЭтоМуниципальныйАдрес; + Элементы.Город.Видимость = НЕ ЭтоМуниципальныйАдрес; + Элементы.МуниципальныйРайон.Видимость = ЭтоМуниципальныйАдрес; + Элементы.Поселение.Видимость = ЭтоМуниципальныйАдрес; - ОчиститьДочерниеПоляАдреса(Элемент.Имя); - // Преобразуем выбранное в строку. - ВыбранноеЗначение = УстановитьЗначениеЧастиАдреса(Элемент, ВыбранноеЗначение); - АдресИзменен = Истина; - ОбновитьОтображениеДанных(); - - ИначеЕсли ТипВыбранного = Тип("Строка") Тогда - УстановитьЗначениеЧастиАдреса(Элемент, ВыбранноеЗначение); - АдресИзменен = Истина; - ОбновитьОтображениеДанных(); Иначе - СтандартнаяОбработка = Ложь; + + Элементы.ТипАдреса.Видимость = Ложь; + Элементы.МуниципальныйРайон.Видимость = Ложь; + Элементы.Поселение.Видимость = Ложь; + Элементы.ВнутригородскойРайон.Видимость = Ложь; + Элементы.Территория.Видимость = Ложь; + Элементы.СубъектРФ.Заголовок = НСтр("ru='Регион'"); + Элементы.СубъектРФ.КнопкаВыбора = Ложь; + Элементы.Район.КнопкаВыбора = Ложь; + Элементы.Город.КнопкаВыбора = Ложь; + Элементы.НаселенныйПункт.КнопкаВыбора = Ложь; + КонецЕсли; КонецПроцедуры &НаКлиенте -Процедура ОчиститьДочерниеПоляАдреса(ИмяЭлемента) +Процедура АвтоПодборПоУровню( Знач Текст, ДанныеВыбора, ИмяУровня, СтандартнаяОбработка) - УровеньВыбранногоПоля = 0; - Для каждого Элемент Из ЭлементыФормыПоУровням Цикл - Если Элемент.Представление = ИмяЭлемента Тогда - УровеньВыбранногоПоля = Элемент.Значение; - КонецЕсли; - КонецЦикла; - - Если УровеньВыбранногоПоля = 0 Тогда - Возврат; - КонецЕсли; - - Если УровеньВыбранногоПоля < 6 Тогда - Элемент = ЭлементыФормыПоУровням.НайтиПоЗначению(6); - Если Элемент <> Неопределено Тогда - ЭтотОбъект[Элемент.Представление] = ""; - ОчиститьЧастьАдреса("НаселенныйПункт"); - КонецЕсли; - КонецЕсли; - - Если УровеньВыбранногоПоля < 5 Тогда - Элемент = ЭлементыФормыПоУровням.НайтиПоЗначению(5); - Если Элемент <> Неопределено Тогда - ЭтотОбъект[Элемент.Представление] = ""; - ОчиститьЧастьАдреса("ВнутригРайон"); - КонецЕсли; - КонецЕсли; - - Если УровеньВыбранногоПоля < 4 Тогда - Элемент = ЭлементыФормыПоУровням.НайтиПоЗначению(4); - Если Элемент <> Неопределено Тогда - ЭтотОбъект[Элемент.Представление] = ""; - ОчиститьЧастьАдреса("Город"); - КонецЕсли; - КонецЕсли; - - Если УровеньВыбранногоПоля < 3 Тогда - Элемент = ЭлементыФормыПоУровням.НайтиПоЗначению(3); - Если Элемент <> Неопределено Тогда - ЭтотОбъект[Элемент.Представление] = ""; - ОчиститьЧастьАдреса("Район"); - КонецЕсли; - КонецЕсли; - - Если УровеньВыбранногоПоля < 2 Тогда - Элемент = ЭлементыФормыПоУровням.НайтиПоЗначению(2); - Если Элемент <> Неопределено Тогда - ЭтотОбъект[Элемент.Представление] = ""; - ОчиститьЧастьАдреса("Округ"); - КонецЕсли; + Если ИспользоватьАвтоподбор И ЗначениеЗаполнено(Текст) Тогда + + ДанныеВыбора = АвтоПодборВариантов(Текст, ИмяУровня, ТипАдреса, НаселенныйПунктДетально); + СтандартнаяОбработка = НЕ ДанныеВыбора.Количество() > 0; + Модифицированность = Истина; + КонецЕсли; КонецПроцедуры -&НаКлиенте -Процедура ОчиститьЧастьАдреса(ИмяЧасти) - ЧастиАдреса[ИмяЧасти].Наименование = Неопределено; - ЧастиАдреса[ИмяЧасти].Идентификатор = Неопределено; - ЧастиАдреса[ИмяЧасти].Представление = Неопределено; - ЧастиАдреса[ИмяЧасти].Сокращение = Неопределено; -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_ПолеАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) +&НаСервереБезКонтекста +Функция АвтоПодборВариантов(Текст, ИмяУровня, ТипАдреса, НаселенныйПунктДетально) + ДанныеВыбора = Новый СписокЗначений; - Если Ожидание = 0 Тогда - // Формирование списка быстрого выбора, стандартную обработку не надо трогать. - Возврат; + Если ЗначениеЗаполнено(Текст) Тогда + + РодительскийИдентификатор = ИдентификаторРодителяУровняАдреса(ИмяУровня, НаселенныйПунктДетально, ТипАдреса); + + Если НЕ ЗначениеЗаполнено(РодительскийИдентификатор) И СтрСравнить(ИмяУровня, "Area") <> 0 Тогда + Возврат ДанныеВыбора; + КонецЕсли; + + Уровень = РаботаСАдресамиКлиентСервер.СопоставлениеНаименованиеУровнюАдреса(ИмяУровня); + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("Идентификатор", РодительскийИдентификатор); + ДополнительныеПараметры.Вставить("ТипАдреса", ТипАдреса); + ДополнительныеПараметры.Вставить("Уровень", Уровень); + + МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); + Результат = МодульАдресныйКлассификаторСлужебный.АдресныеОбъектыУровня(РодительскийИдентификатор, Уровень, ТипАдреса, Текст); + Если Не Результат.Отказ Тогда + ДанныеВыбора = Результат.Данные; + КонецЕсли; + КонецЕсли; - Если СервисКлассификатораНедоступен Или СтрДлина(Текст) < 3 Тогда - // Нет вариантов, список пуст, стандартную обработку не надо трогать. - Возврат; - КонецЕсли; + Возврат ДанныеВыбора; - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("ФорматАдреса", ФорматАдреса); - ДополнительныеПараметры.Вставить("СкрыватьНеактуальные", СкрыватьНеактуальныеАдреса); +КонецФункции + +&НаСервереБезКонтекста +Функция ИдентификаторРодителяУровняАдреса(Знач ИмяУровня, Знач НаселенныйПунктДетально, Знач ТипАдреса) - ДанныеКлассификатора = СписокАвтоподбораЧастиАдреса(Текст, ИмяЧастиАдресаЭлемента(Элемент), ЧастиАдреса, ДополнительныеПараметры); + РодительскийИдентификатор = Неопределено; + ИменаУровнейАдреса = РаботаСАдресамиКлиентСервер.ИменаУровнейАдреса(ТипАдреса, Ложь); + Для каждого УровеньАдреса Из ИменаУровнейАдреса Цикл + Если УровеньАдреса = ИмяУровня Тогда + Возврат РодительскийИдентификатор; + КонецЕсли; + Если ЗначениеЗаполнено(НаселенныйПунктДетально[УровеньАдреса + "Id"]) Тогда + РодительскийИдентификатор = НаселенныйПунктДетально[УровеньАдреса + "Id"]; + КонецЕсли; + КонецЦикла; - Если ДанныеКлассификатора.Отказ Тогда - // Сервис поломался - СервисКлассификатораНедоступен = Истина; - Возврат; - КонецЕсли; + Возврат РодительскийИдентификатор; - ДанныеВыбора = ДанныеКлассификатора.Данные; +КонецФункции + +&НаКлиенте +Процедура ОбработкаВыбора(Элемент, Знач ВыбранноеЗначение, СтандартнаяОбработка) - // Стандартную обработку отключаем, только если есть наши варианты. - Если ДанныеВыбора.Количество() > 0 Тогда + Если ПустаяСтрока(ВыбранноеЗначение) Тогда + ТекстПредупреждения = НСтр("ru = 'Выбор из списка недоступен, т.к в адресном классификаторе отсутствует информация о адресных сведениях.'"); + ПоказатьПредупреждение(, ТекстПредупреждения ); СтандартнаяОбработка = Ложь; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_ПолеОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, СтандартнаяОбработка) - - АдресИзменен = Истина; - УстановитьЗначениеЧастиАдреса(Элемент, Текст); -КонецПроцедуры - -&НаСервере -Функция РезультатВыбора() - Результат = Новый Структура; - - Идентификатор = Неопределено; - Для каждого ЧастьАдреса Из ЧастиАдреса Цикл - Если ЗначениеЗаполнено(ЧастьАдреса.Значение.Представление) И ПустаяСтрока(ЧастьАдреса.Значение.Идентификатор) Тогда - Обработки.РасширенныйВводКонтактнойИнформации.ЗаполнитьИдентификаторыНаселенногоПункта(ЧастиАдреса); - Прервать; - КонецЕсли; - КонецЦикла; - - Идентификатор = УправлениеКонтактнойИнформациейКлиентСервер.ИдентификаторЭлементаПоЧастямАдреса(ЧастиАдреса, Ложь); - - Результат.Вставить("Идентификатор", Идентификатор); - Результат.Вставить("Представление", РаботаСАдресамиКлиентСервер.ПредставлениеНаселенногоПунктаПоЧастямАдреса(ЧастиАдреса)); - Результат.Вставить("НаселенныйПунктДетально", ЧастиАдреса); - - Возврат Результат; -КонецФункции - -&НаСервереБезКонтекста -Функция СписокАвтоподбораЧастиАдреса(Текст, ИмяЧастиАдреса, ЧастиАдреса, ДополнительныеПараметры) - - Возврат Обработки.РасширенныйВводКонтактнойИнформации.СписокАвтоподбораЧастиАдреса(Текст, ИмяЧастиАдреса, ЧастиАдреса, ДополнительныеПараметры); - -КонецФункции - -&НаСервере -Процедура УстановитьКлючИспользованияФормы() - - КлючСохраненияПоложенияОкна = СокрЛП(ФорматАдреса) - + "/" + Формат(ЧастиАдреса.Количество(), "ЧН=; ЧГ="); - -КонецПроцедуры - -&НаСервереБезКонтекста -Функция ИдентификаторРодителяЧастиАдресаЭлемента(ЧастьАдреса, ЧастиАдреса) - - Идентификатор = Неопределено; - ЕстьЧастьАдресаБезИдентификатора = ЕстьЛиИдентификаторРодителяЧастиАдресаЭлемента(ЧастиАдреса, ЧастьАдреса, Идентификатор); - - Если ЕстьЧастьАдресаБезИдентификатора Тогда - Обработки.РасширенныйВводКонтактнойИнформации.ЗаполнитьИдентификаторыНаселенногоПункта(ЧастиАдреса); - ЕстьЧастьАдресаБезИдентификатора = ЕстьЛиИдентификаторРодителяЧастиАдресаЭлемента(ЧастиАдреса, ЧастьАдреса, Идентификатор); - Если ЕстьЧастьАдресаБезИдентификатора Тогда - Возврат Неопределено; - КонецЕсли; - КонецЕсли; - - Возврат Идентификатор; - -КонецФункции - -&НаСервереБезКонтекста -Функция ЕстьЛиИдентификаторРодителяЧастиАдресаЭлемента(ЧастиАдреса, ЧастьАдреса, Идентификатор) - - ЕстьЧастьАдресаБезИдентификатора = Ложь; - ЧастиАдресаВышеПоУровню = Новый Структура; - УровеньАдреса = 0; - Для Каждого КлючЗначение Из ЧастиАдреса Цикл - Часть = КлючЗначение.Значение; - Если Часть.Уровень < ЧастьАдреса.Уровень И НЕ ПустаяСтрока(Часть.Представление) Тогда - ЧастиАдресаВышеПоУровню.Вставить(КлючЗначение.Ключ, Часть); - Если ЗначениеЗаполнено(КлючЗначение.Значение.Идентификатор) Тогда - Если УровеньАдреса < КлючЗначение.Значение.Уровень Тогда - Идентификатор = КлючЗначение.Значение.Идентификатор; - УровеньАдреса = КлючЗначение.Значение.Уровень; - КонецЕсли; - Иначе - ЕстьЧастьАдресаБезИдентификатора = Истина; - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Возврат ЕстьЧастьАдресаБезИдентификатора; -КонецФункции - -// Предлагает загрузить адресный классификатор. -// -// Параметры: -// Текст - Строка - Дополнительный текст предложения. -// Регион - Число, Строка - Код или название региона для загрузки. -// -&НаКлиенте -Процедура ПредложениеЗагрузкиКлассификатора(Знач Текст = "", Знач Регион = Неопределено) - - Если Не ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда Возврат; КонецЕсли; - НеЗагружатьАдресныйКлассификатор = ПараметрыПриложения.Получить("АдресныйКлассификатор.НеЗагружатьКлассификатор"); - Если НеЗагружатьАдресныйКлассификатор = Неопределено ИЛИ НеЗагружатьАдресныйКлассификатор = Ложь Тогда - ТипПараметраРегиона = ТипЗнч(Регион); - ПараметрыФормы = Новый Структура; - ПараметрыЗагрузки = Новый Структура; - ПараметрыФормы.Вставить("ТекстПредупреждения", Текст); - - Если ТипПараметраРегиона = Тип("Число") Тогда - ПараметрыЗагрузки.Вставить("КодРегионаДляЗагрузки", Регион); - - ИначеЕсли ТипПараметраРегиона = Тип("Строка") Тогда - ПараметрыЗагрузки.Вставить("НазваниеРегиона", Регион); - ПараметрыФормы.Вставить("НазваниеРегиона", Регион); + Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") + И ВыбранноеЗначение.Свойство("Идентификатор") + И ПустаяСтрока(ВыбранноеЗначение.Идентификатор) Тогда + СтандартнаяОбработка = Ложь; + Возврат; + КонецЕсли; + + СведенияОбАдресе = Новый Структура(); + СведенияОбАдресе.Вставить("Муниципальный", РаботаСАдресамиКлиентСервер.ЭтоМуниципальныйАдрес(ТипАдреса)); + Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда + Если ВыбранноеЗначение.Отказ Или ПустаяСтрока(ВыбранноеЗначение.Идентификатор) Тогда + Возврат; КонецЕсли; - Оповещение = Новый ОписаниеОповещения("ПредложениеЗагрузкиКлассификатораЗавершение", ЭтотОбъект, ПараметрыЗагрузки); - ОткрытьФорму("Обработка.РасширенныйВводКонтактнойИнформации.Форма.ЗагрузкаАдресногоКлассификатора", ПараметрыФормы, ЭтотОбъект,,,, Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + Идентификатор = ВыбранноеЗначение.Идентификатор; + + Иначе + Идентификатор = ВыбранноеЗначение; КонецЕсли; + СведенияОбАдресе.Вставить("Идентификатор", Идентификатор); + + СтандартнаяОбработка = Ложь; + НаселенныйПунктДетально = НаселенныйПунктДетальноПоИдентификатору(СведенияОбАдресе); + ОпределитьПоляАдреса(); + Элемент.ОбновитьТекстРедактирования(); КонецПроцедуры +&НаСервереБезКонтекста +Функция НаселенныйПунктДетальноПоИдентификатору(ИдентификаторНаселенногоПункта) + Возврат Обработки.РасширенныйВводКонтактнойИнформации.СписокРеквизитовНаселенныйПункт(ИдентификаторНаселенногоПункта); +КонецФункции + &НаКлиенте -Процедура ПредложениеЗагрузкиКлассификатораЗавершение(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт +Процедура ИзменитьУровеньАдреса(ИмяУровня, Значение) - Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда - Возврат; - КонецЕсли; + НаименованиеСокращение = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(Значение); - ЗагрузитьАдресныйКлассификатор(ДополнительныеПараметры); -КонецПроцедуры - -// Загружает адресный классификатор. -// -&НаКлиенте -Процедура ЗагрузитьАдресныйКлассификатор(Знач ДополнительныеПараметры = Неопределено) - - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - МодульАдресныйКлассификаторКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("АдресныйКлассификаторКлиент"); - МодульАдресныйКлассификаторКлиент.ЗагрузитьАдресныйКлассификатор(ДополнительныеПараметры); - КонецЕсли; + НаселенныйПунктДетально[ИмяУровня] = НаименованиеСокращение.Наименование; + НаселенныйПунктДетально[ИмяУровня + "Type"] = НаименованиеСокращение.Сокращение; + НаселенныйПунктДетально[ИмяУровня + "Id"] = ""; КонецПроцедуры -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НастройкиАдреса/Form.form b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НастройкиАдреса/Form.form index afc0c2fa1..a5e369e80 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НастройкиАдреса/Form.form +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НастройкиАдреса/Form.form @@ -1,5 +1,5 @@ - + <key>ru</key> <value>Дополнительные настройки адреса РФ</value> @@ -94,10 +94,6 @@ <segments>ПроверятьКорректность</segments> </dataPath> <titleLocation>Right</titleLocation> - <handlers> - <event>OnChange</event> - <name>ПроверятьКорректностьАдресаПриИзменении</name> - </handlers> <extendedTooltip> <name>ПроверятьКорректностьАдресаРасширеннаяПодсказка</name> <id>17</id> @@ -120,77 +116,9 @@ <showInFooter>true</showInFooter> <extInfo xsi:type="form:CheckBoxFieldExtInfo"/> </items> - <items xsi:type="form:FormField"> - <name>ПроверятьПоКлассификатору</name> - <id>27</id> - <title> - <key>ru</key> - <value>Проверять по</value> - - true - true - - true - - - ПроверятьПоКлассификатору - - Left - Button - - ПроверятьПоКлассификаторуРасширеннаяПодсказка - 29 - - <key>ru</key> - <value>При проверке адреса по классификатору ФИАС выполняются дополнительные проверки: -- "Округ" (между уровнями "Регион" и "Район"). -- "Внутригородской район" (между уровнями "Город" и "Населенный пункт") -- Уровни дополнительных территорий (между "Улица", и номером дома или владения) -- Дома, владения, корпуса, строения и т.п.</value> - - Label - true - true - - Left - - - - ПроверятьПоКлассификаторуКонтекстноеМеню - 28 - true - - RadioButtonField - Enter - true - Left - true - - - - ru - ФИАС - - - 0 - - - - - ru - КЛАДР - - - 1 - - - Vertical - -
        СкрыватьНеактуальныеАдреса 21 - true true true @@ -396,6 +324,32 @@ UserCmds Auto + + Справка + 36 + true + true + + true + + + СправкаРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + true true @@ -491,26 +445,6 @@ true - - ПроверятьПоКлассификатору - - <key>ru</key> - <value>Проверять по классификатору</value> - - 4 - - Number - - 10 - - - - true - - - true - - УказыватьОКТМО diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НастройкиАдреса/Help/ru.html b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НастройкиАдреса/Help/ru.html new file mode 100644 index 000000000..7b8f1379b --- /dev/null +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НастройкиАдреса/Help/ru.html @@ -0,0 +1,6 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.18427"></meta></head><body> +<p>Предназначена для настройки адреса РФ.</p> +<p>Открывается из <a href="Catalog.ВидыКонтактнойИнформации.Form.ФормаЭлемента/Help">окна настройки</a> адреса в списке <a href="Catalog.ВидыКонтактнойИнформации/Help">Виды контактной информации</a> по команде <strong>Дополнительные настройки адреса</strong>.</p> +<p>При включенном флажке <strong>Только российский адрес</strong> становятся активными дополнительные флажки:</p> +<ul><li><strong>Запрещать ввод некорректного адреса</strong> - если флажок включен, то при некорректном вводе российского адреса невозможно будет ввести данные в программу (имеет смысл только при использовании шаблонов ввода и адресного классификатора). Данные проверяются по ФИАС. +</li><li><strong>Указывать ОКТМО</strong> - включите флажок, для того чтобы автоматически заполнялось поле ОКТМО.</li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НастройкиАдреса/Module.bsl b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НастройкиАдреса/Module.bsl index 4beafbd65..f8d61bc4f 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НастройкиАдреса/Module.bsl +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НастройкиАдреса/Module.bsl @@ -9,14 +9,12 @@ Если ТипЗнч(Параметры.Объект) = Тип("ДанныеФормыСтруктура") Тогда ЗаполнитьЗначенияСвойств(ЭтотОбъект, Параметры.Объект); - ПроверятьПоКлассификатору = ?(Параметры.Объект.ПроверятьПоФИАС, 0, 1); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) - ОтобразитьДоступностьВариантовПроверкиПоКлассификатору(); ИзменитьОтображениеПриИзмененииТолькоНациональный(); КонецПроцедуры @@ -32,11 +30,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ПроверятьКорректностьАдресаПриИзменении(Элемент) - ОтобразитьДоступностьВариантовПроверкиПоКлассификатору(); -КонецПроцедуры - #КонецОбласти #Область ОбработчикиКомандФормы @@ -45,7 +38,6 @@ Процедура ОК(Команда) Результат = ОписаниеНастроекАдреса(); ЗаполнитьЗначенияСвойств(Результат, ЭтотОбъект); - Результат.ПроверятьПоФИАС = ?(ПроверятьПоКлассификатору = 0, Истина, Ложь); Закрыть(Результат); КонецПроцедуры @@ -58,26 +50,15 @@ Результат = Новый Структура(); Результат.Вставить("ТолькоНациональныйАдрес"); Результат.Вставить("ПроверятьКорректность"); - Результат.Вставить("ПроверятьПоФИАС"); Результат.Вставить("СкрыватьНеактуальныеАдреса"); Результат.Вставить("УказыватьОКТМО"); Возврат Результат; КонецФункции -&НаКлиенте -Процедура ОтобразитьДоступностьВариантовПроверкиПоКлассификатору() - Если ПроверятьКорректность Тогда - Элементы.ПроверятьПоКлассификатору.Доступность = Истина; - Иначе - Элементы.ПроверятьПоКлассификатору.Доступность = Ложь; - КонецЕсли; -КонецПроцедуры - &НаКлиенте Процедура ИзменитьОтображениеПриИзмененииТолькоНациональный() - Элементы.ПроверятьПоКлассификатору.Доступность = ПроверятьКорректность; Элементы.ПроверятьКорректностьАдреса.Доступность = ТолькоНациональныйАдрес; Элементы.СкрыватьНеактуальныеАдреса.Доступность = ТолькоНациональныйАдрес; Элементы.УказыватьОКТМОВручную.Доступность = ТолькоНациональныйАдрес; diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/ManagerModule.bsl b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/ManagerModule.bsl index 6d2fc546b..d86f1d34d 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/ManagerModule.bsl +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/ManagerModule.bsl @@ -1,5 +1,3 @@ - - #Область ОбработчикиПодписокНаСобытия Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) @@ -38,7 +36,7 @@ // Функция ИмяФормыВводаКонтактнойИнформации(Знач ВидИнформации) - ТипИнформации = ТипВидаКонтактнойИнформации(ВидИнформации); + ТипИнформации = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ТипВидаКонтактнойИнформации(ВидИнформации); ВсеТипы = "Перечисление.ТипыКонтактнойИнформации."; Если ТипИнформации = ПредопределенноеЗначение(ВсеТипы + "Адрес") Тогда @@ -56,254 +54,6 @@ КонецФункции -Функция ТипВидаКонтактнойИнформации(Знач ВидИнформации) - Результат = Неопределено; - - Тип = ТипЗнч(ВидИнформации); - Если Тип = Тип("ПеречислениеСсылка.ТипыКонтактнойИнформации") Тогда - Результат = ВидИнформации; - ИначеЕсли Тип = Тип("СправочникСсылка.ВидыКонтактнойИнформации") Тогда - Результат = ВидИнформации.Тип; - ИначеЕсли ВидИнформации <> Неопределено Тогда - Данные = Новый Структура("Тип"); - ЗаполнитьЗначенияСвойств(Данные, ВидИнформации); - Результат = Данные.Тип; - КонецЕсли; - - Возврат Результат; -КонецФункции - -// Возвращает сведения об адресах в виде структуру частей адреса и кодов КЛАДР. -// -Функция СведенияОбАдресахВВидеСтруктуры(Адреса, ДополнительныеПараметры) Экспорт - Результат = Новый Массив; - Для каждого Адрес Из Адреса Цикл - Результат.Добавить(СведенияОбАдресеВВидеСтруктуры(Адрес, ДополнительныеПараметры)); - КонецЦикла; - Возврат Результат; -КонецФункции - -// Возвращает сведения об адресе в виде структуру частей адреса и кодов КЛАДР. -// -Функция СведенияОбАдресеВВидеСтруктуры(Адрес, ДополнительныеПараметры) Экспорт - - Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда - ПолноеНаименованиеСокращений = ?(ДополнительныеПараметры.Свойство("ПолноеНаименованиеСокращений"), ДополнительныеПараметры.ПолноеНаименованиеСокращений, Ложь); - НаименованиеВключаетСокращение = ?(ДополнительныеПараметры.Свойство("НаименованиеВключаетСокращение"), ДополнительныеПараметры.НаименованиеВключаетСокращение, Ложь); - ЗаполнятьКоды = ?(ДополнительныеПараметры.Свойство("КодыКЛАДР"), ДополнительныеПараметры.КодыКЛАДР, Ложь); - Иначе - НаименованиеВключаетСокращение = Ложь; - ПолноеНаименованиеСокращений = Ложь; - ЗаполнятьКоды = Ложь; - КонецЕсли; - - НаименованиеСтраны = ""; - Результат = СтруктураАдреса(); - Формат9Запятых = Ложь; - - ЭлементыАдреса = Новый Соответствие; - - Если ТипЗнч(Адрес) = Тип("Строка") Тогда - Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(Адрес) Тогда - XDTOАдрес = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзXML(Адрес); - Иначе - Если СтрЧислоВхождений(Адрес, ",") = 9 Тогда - Формат9Запятых = Истина; - АдресРФ = Адрес; - Иначе - XDTOАдрес = ДесериализацияАдресаОбщая(Адрес, ""); - КонецЕсли; - КонецЕсли; - Иначе - XDTOАдрес = Адрес - КонецЕсли; - - Если НЕ Формат9Запятых Тогда - - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); - Состав = XDTOАдрес.Состав; - - Если Состав = Неопределено Тогда - Возврат Результат; - КонецЕсли; - - XDTOТип = Состав.Тип(); - - Если XDTOТип = ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") Тогда - - Результат.Вставить("Страна", Состав.Страна); - Страна = ?(ПустаяСтрока(Состав.Страна), - РаботаСАдресами.ОсновнаяСтрана(), - Справочники.СтраныМира.НайтиПоНаименованию(Состав.Страна, Истина)); - НаименованиеСтраны = Страна.Наименование; - Результат.Вставить("КодСтраны", СокрЛП(Страна.Код)); - - АдресРФ = Состав.Состав; - - ИначеЕсли XDTOТип = ФабрикаXDTO.Тип(РаботаСАдресами.ПространствоИмен(), "АдресРФ") Тогда - АдресРФ = Состав; - Иначе - Возврат Результат; - КонецЕсли; - - Если АдресРФ = Неопределено Тогда - Возврат Результат; - ИначеЕсли ТипЗнч(АдресРФ) = Тип("Строка") Тогда - Если СтрЧислоВхождений(АдресРФ, ",") = 9 Тогда - ЭлементыАдреса = СтруктураАдресаПоФормату9Запятых(АдресРФ); - Формат9Запятых = Истина; - Иначе - // адрес в свободной форме (РФ или Иностранный) - ЭлементыАдреса.Вставить("Страна", НаименованиеСтраны); - ЭлементыАдреса.Вставить("Индекс", ""); - ЭлементыАдреса.Вставить("Регион", ""); - ЭлементыАдреса.Вставить("Район", ""); - ЭлементыАдреса.Вставить("Город", ""); - ЭлементыАдреса.Вставить("НаселенныйПункт", ""); - ЭлементыАдреса.Вставить("Улица", ""); - ЭлементыАдреса.Вставить("Округ", ""); - ЭлементыАдреса.Вставить("ВнутригРайон", ""); - ЭлементыАдреса.Вставить("Дом",""); - ЭлементыАдреса.Вставить("Корпус", ""); - ЭлементыАдреса.Вставить("Квартира", ""); - ЭлементыАдреса.Вставить("ДополнительнаяТерритория", ""); - ЭлементыАдреса.Вставить("ЭлементДополнительнойТерритории", ""); - КонецЕсли; - Иначе - ЭлементыАдреса.Вставить("Страна", НаименованиеСтраны); - ЭлементыАдреса.Вставить("Индекс", ПочтовыйИндексАдреса(АдресРФ)); - ЭлементыАдреса.Вставить("Регион", АдресРФ.СубъектРФ); - ЭлементыАдреса.Вставить("Район", РайонАдреса(АдресРФ)); - ЭлементыАдреса.Вставить("Город", АдресРФ.Город); - ЭлементыАдреса.Вставить("НаселенныйПункт", АдресРФ.НаселПункт); - ЭлементыАдреса.Вставить("Улица", АдресРФ.Улица); - ЭлементыАдреса.Вставить("Округ", АдресРФ.Округ); - ЭлементыАдреса.Вставить("ВнутригРайон", АдресРФ.ВнутригРайон); - ЭлементыАдреса.Вставить("Дом",""); - ЭлементыАдреса.Вставить("Корпус", ""); - ЭлементыАдреса.Вставить("Квартира", ""); - ЭлементыАдреса.Вставить("ДополнительнаяТерритория", НайтиДополнительныйЭлементАдреса(АдресРФ).Значение); - ЭлементыАдреса.Вставить("ЭлементДополнительнойТерритории", - ДополнительныйЭлементАдреса(АдресРФ, РаботаСАдресамиКлиентСервер.XPathДополнительногоОбъектаАдресации(91))); - КонецЕсли; - КонецЕсли; - - СоответствиеСокращений = Новый Соответствие; - - ЭтоНациональныйАдрес = ?(СтрСравнить(НаименованиеСтраны, РаботаСАдресами.ОсновнаяСтрана().Наименование) = 0, Истина, Ложь); - Если ЭтоНациональныйАдрес Тогда - Результат.Вставить("КодРегиона", КодРегиона(ЭлементыАдреса["Регион"])); - КонецЕсли; - - Результат.Вставить("Индекс", ЭлементыАдреса.Получить("Индекс")); - - ОпределитьСоответствиеСокращений(Результат, ЭлементыАдреса["Регион"], "Регион", СоответствиеСокращений, НаименованиеВключаетСокращение, 1); - ОпределитьСоответствиеСокращений(Результат, ЭлементыАдреса["Округ"], "Округ", СоответствиеСокращений, НаименованиеВключаетСокращение, 2); - ОпределитьСоответствиеСокращений(Результат, ЭлементыАдреса["Район"], "Район", СоответствиеСокращений, НаименованиеВключаетСокращение, 3); - ОпределитьСоответствиеСокращений(Результат, ЭлементыАдреса["Город"], "Город", СоответствиеСокращений, НаименованиеВключаетСокращение, 4); - ОпределитьСоответствиеСокращений(Результат, ЭлементыАдреса["ВнутригРайон"], "ВнутригородскойРайон", СоответствиеСокращений, НаименованиеВключаетСокращение, 5); - ОпределитьСоответствиеСокращений(Результат, ЭлементыАдреса["НаселенныйПункт"], "НаселенныйПункт", СоответствиеСокращений, НаименованиеВключаетСокращение, 6); - ОпределитьСоответствиеСокращений(Результат, ЭлементыАдреса["Улица"], "Улица", СоответствиеСокращений, НаименованиеВключаетСокращение, 7); - ОпределитьСоответствиеСокращений(Результат, ЭлементыАдреса["ДополнительнаяТерритория"], "ДополнительнаяТерритория", СоответствиеСокращений, НаименованиеВключаетСокращение, 90); - ОпределитьСоответствиеСокращений(Результат, ЭлементыАдреса["ЭлементДополнительнойТерритории"], "ЭлементДополнительнойТерритории", СоответствиеСокращений, НаименованиеВключаетСокращение, 91); - - Если ПолноеНаименованиеСокращений = Истина Тогда - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); - МодульАдресныйКлассификаторСлужебный.ПолныеНаименованияСокращений(СоответствиеСокращений); - КонецЕсли; - КонецЕсли; - - Результат.Вставить("РегионСокращение", СоответствиеСокращений[1]); - Результат.Вставить("ОкругСокращение", СоответствиеСокращений[2]); - Результат.Вставить("РайонСокращение", СоответствиеСокращений[3]); - Результат.Вставить("ГородСокращение", СоответствиеСокращений[4]); - Результат.Вставить("ВнутригородскойРайонСокращение", СоответствиеСокращений[5]); - Результат.Вставить("НаселенныйПунктСокращение", СоответствиеСокращений[6]); - Результат.Вставить("УлицаСокращение", СоответствиеСокращений[7]); - Результат.Вставить("ДополнительнаяТерриторияСокращение", СоответствиеСокращений[90]); - Результат.Вставить("ЭлементДополнительнойТерриторииСокращение", СоответствиеСокращений[91]); - Результат.Вставить("Здание", Новый Структура("ТипЗдания, Номер")); - Результат.Вставить("Корпуса", Новый Массив); - Результат.Вставить("Помещения", Новый Массив); - - Если НЕ Формат9Запятых Тогда - - ЗданияИПомещения = ЗданияИПомещенияАдреса(АдресРФ); - Для каждого Здание Из ЗданияИПомещения.Здания Цикл - Если Здание.Вид = 1 Тогда - Результат.Здание.ТипЗдания = Здание.Тип; - Результат.Здание.Номер = Здание.Значение; - Иначе - Результат.Корпуса.Добавить(Новый Структура("ТипКорпуса, Номер", Здание.Тип, Здание.Значение)); - КонецЕсли; - КонецЦикла; - - Для каждого Помещение Из ЗданияИПомещения.Помещения Цикл - Результат.Помещения.Добавить(Новый Структура("ТипПомещения, Номер", Помещение.Тип, Помещение.Значение)); - КонецЦикла; - - Иначе - Здание = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(ЭлементыАдреса["Дом"]); - Результат.Здание.ТипЗдания = Здание.Наименование; - Результат.Здание.Номер = Здание.Сокращение; - - Корпус = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(ЭлементыАдреса["Корпус"]); - Результат.Корпуса.Добавить(Новый Структура("ТипКорпуса, Номер", Корпус.Наименование, Корпус.Сокращение)); - - Квартира = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(ЭлементыАдреса["Квартира"]); - Результат.Помещения.Добавить(Новый Структура("ТипПомещения, Номер", Квартира.Наименование, Квартира.Сокращение)); - КонецЕсли; - - Если ЗаполнятьКоды И ЭтоНациональныйАдрес Тогда - ЗаполнитьКодыАдреса(Результат, Адрес); - ОпределитьФорматКодов(Результат, АдресРФ); - КонецЕсли; - - // Из XDTO пустые значение приходят как Неопределено - УправлениеКонтактнойИнформациейСлужебный.ЗаменитьВСтруктуреНеопределеноНаПустуюСтроку(Результат); - - Возврат Результат; -КонецФункции - -Функция СтруктураАдреса() - - ЭлементыАдреса = Новый Структура; - - ЭлементыАдреса.Вставить("Страна", ""); - ЭлементыАдреса.Вставить("КодСтраны", ""); - ЭлементыАдреса.Вставить("Индекс", ""); - ЭлементыАдреса.Вставить("Регион", ""); - ЭлементыАдреса.Вставить("РегионСокращение", ""); - ЭлементыАдреса.Вставить("Округ", ""); - ЭлементыАдреса.Вставить("ОкругСокращение", ""); - ЭлементыАдреса.Вставить("Район", ""); - ЭлементыАдреса.Вставить("РайонСокращение", ""); - ЭлементыАдреса.Вставить("Город", ""); - ЭлементыАдреса.Вставить("ГородСокращение", ""); - ЭлементыАдреса.Вставить("ВнутригРайон", ""); - ЭлементыАдреса.Вставить("ВнутригородскойРайонСокращение", ""); - ЭлементыАдреса.Вставить("НаселенныйПункт", ""); - ЭлементыАдреса.Вставить("НаселенныйПунктСокращение", ""); - ЭлементыАдреса.Вставить("Улица", ""); - ЭлементыАдреса.Вставить("УлицаСокращение", ""); - ЭлементыАдреса.Вставить("Дом",""); - ЭлементыАдреса.Вставить("Корпус", ""); - ЭлементыАдреса.Вставить("Квартира", ""); - ЭлементыАдреса.Вставить("ДополнительнаяТерритория", ""); - ЭлементыАдреса.Вставить("ДополнительнаяТерриторияСокращение", ""); - ЭлементыАдреса.Вставить("ЭлементДополнительнойТерритории", ""); - ЭлементыАдреса.Вставить("ЭлементДополнительнойТерриторииСокращение", ""); - ЭлементыАдреса.Вставить("Здание", Новый Структура("ТипЗдания, Номер")); - ЭлементыАдреса.Вставить("Корпуса", Новый Массив); - ЭлементыАдреса.Вставить("Помещения", Новый Массив); - ЭлементыАдреса.Вставить("КодыКЛАДР", Новый Структура); - ЭлементыАдреса.Вставить("ДополнительныеКоды", Новый Структура); - - Возврат ЭлементыАдреса; - -КонецФункции - #Область ВзаимодействиеСАдреснымКлассификатором // Определение режима работы форм ввода. @@ -391,113 +141,6 @@ КонецФункции -// Возвращает код региона по его полному наименованию. -// -// Параметры: -// НаименованиеРегиона - Строка - полное наименование региона с сокращением. -// -// Возвращаемое значение: -// Строка - код региона из двух цифр. Пустая строка, если наименование определить не удалось. -// Неопределено - если нет ни одной подсистемы адресного классификатора. -// -Функция КодРегиона(Знач ПолноеНаименование) - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - МодульАдресныйКлассификатор = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификатор"); - Код = МодульАдресныйКлассификатор.КодРегионаПоНаименованию(ПолноеНаименование); - Возврат Формат(Код, "ЧЦ=2; ЧН=; ЧВН="); - КонецЕсли; - - Возврат Неопределено; - -КонецФункции - -// Возвращает адрес по представлению. -// -// Параметры: -// Текст - Строка - текст автоподбора. -Функция НаселенныеПунктыПоПредставлению(Знач Текст) Экспорт - - Результат = Новый СписокЗначений; - - ДанныеАнализа = ЧастиАдресаТаблицей(Текст); - Если ДанныеАнализа.Количество() = 0 Тогда - Возврат Результат; - КонецЕсли; - - АдресРФ = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(РаботаСАдресами.ПространствоИмен(), "АдресРФ")); - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); - АдресПоУровням = МодульАдресныйКлассификаторСлужебный.УстановитьСоответствиеЧастейАдресаИхУровнюДляНаселенногоПункта(ДанныеАнализа, УровниАдресныхОбъектов("НаселенныйПункт")); - Если АдресПоУровням <> Неопределено Тогда - ПоместитьАдресВXDTO(АдресРФ, АдресПоУровням); - - // Что-то осталось, добавляем это на уровень населенного пункта. - Фильтр = Новый Структура("Уровень", 0); - СтрокиСУровнем0 = АдресПоУровням.НайтиСтроки(Фильтр); - Разделитель = ""; - НаселПункт = ""; - Для каждого ЭлементАдреса Из СтрокиСУровнем0 Цикл - НаселПункт = НаселПункт + Разделитель + ЭлементАдреса.Значение; - Разделитель = ", "; - КонецЦикла; - Иначе - НаселПункт = Текст; - КонецЕсли; - Иначе - ПозицияСубъектРФ = СтрНайти(Текст, ",", НаправлениеПоиска.СКонца); - Если ПозицияСубъектРФ > 0 Тогда - Регион = СокрЛП(Сред(Текст, ПозицияСубъектРФ + 1)); - УстановитьСвойствоПоXPath(АдресРФ, "СубъектРФ", Регион); - НаселПункт = СокрЛП(Лев(Текст, ПозицияСубъектРФ - 1)); - Иначе - НаселПункт = Текст; - КонецЕсли; - КонецЕсли; - - Если НЕ ПустаяСтрока(НаселПункт) Тогда - Если ЗначениеЗаполнено(АдресРФ.НаселПункт) Тогда - НаселПункт = НаселПункт + ", " + АдресРФ.НаселПункт; - КонецЕсли; - УстановитьСвойствоПоXPath(АдресРФ, "НаселПункт", НаселПункт); - КонецЕсли; - - Возврат АдресРФ; - -КонецФункции - -// Возвращает структуру с полем "ДанныеВыбора", содержащую список вариантов населенных пунктов -// по иерархическому представлению младший-старший. -// -// Параметры: -// ИдентификаторНаселенногоПункта - УникальныйИдентификатор - код классификатора для ограничения подбора. -// Текст - Текст - строка автоподбора. -// СкрыватьНеактуальныеАдреса - Булево - флаг того, что неактуальные адреса не должны попадать в автоподбор. -// ВыбиратьСтрок - Число - ограничение на количество результатов. -// -// Возвращаемое значение: -// Структура - результат поиска данных. Содержит поля: -// * СлишкомМногоДанных - Булево - признак того, что результирующий список не полон. -// * ДанныеВыбора - СписокЗначений - данные для автоподбора. -// -Функция УлицыПоПредставлению(ИдентификаторНаселенногоПункта, Текст, СкрыватьНеактуальныеАдреса = Ложь, ВыбиратьСтрок = 50) Экспорт - - Если ЗначениеЗаполнено(ИдентификаторНаселенногоПункта) - И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - ЧастиАдреса = ЧастиАдресаТаблицей(Текст); - Если ЧастиАдреса.Количество() = 0 Тогда - Возврат Неопределено; - КонецЕсли; - - МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); - МодульАдресныйКлассификаторСлужебный.УстановитьУровниУлицыПоЧастямАдреса(ИдентификаторНаселенногоПункта, ЧастиАдреса); - Возврат ЧастиАдреса; - КонецЕсли; - - Возврат Неопределено; - -КонецФункции - // Возвращает структуру, описывающую населенный пункт в иерархии младший-старший // для текущего адресного классификатора. Имена ключей структуры зависят от // классификатора. @@ -510,12 +153,12 @@ // Возвращаемое значение: // Структура - описание населенного пункта. // -Функция СписокРеквизитовНаселенныйПункт(Идентификатор = Неопределено, ВариантКлассификатора = "КЛАДР") Экспорт +Функция СписокРеквизитовНаселенныйПункт(СведенияОбАдресномОбъекте = Неопределено) Экспорт - Результат = РаботаСАдресамиКлиентСервер.СтруктураЧастейАдресаНаселенногоПункта(ВариантКлассификатора); + Адрес = УправлениеКонтактнойИнформацией.ОписаниеНовойКонтактнойИнформации(Перечисления.ТипыКонтактнойИнформации.Адрес); - Если Идентификатор = Неопределено Тогда - Возврат Результат; + Если СведенияОбАдресномОбъекте = Неопределено Тогда + Возврат Адрес; КонецЕсли; Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда @@ -524,135 +167,62 @@ // Заполняем данные по идентификатору. МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); - СтруктураДанных = МодульАдресныйКлассификаторСлужебный.АктуальныеАдресныеСведения(Идентификатор); - - Если Не СтруктураДанных.Отказ Тогда - Адрес = СтруктураДанных.Данные; - Для Каждого КлючЗначение Из Результат Цикл - Часть = КлючЗначение.Значение; - Часть.Представление = СокрЛП(ПолучитьXDTOРеквизитОбъекта(Адрес, Часть.ПутьXPath)); - НаименованиеСокращение = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(Часть.Представление); - Часть.Наименование = НаименованиеСокращение.Наименование; - Часть.Сокращение = НаименованиеСокращение.Сокращение; - КонецЦикла; + АдресныеСведения = МодульАдресныйКлассификаторСлужебный.АктуальныеАдресныеСведения(СведенияОбАдресномОбъекте); + Если НЕ ЗначениеЗаполнено(АдресныеСведения.Данные) ИЛИ АдресныеСведения.Отказ = Истина Тогда + Возврат Адрес; КонецЕсли; - Возврат Результат; + ЗаполнитьЗначенияСвойств(Адрес, АдресныеСведения.Данные, "addressType,codeKLADR,id,ifnsFLAreaCode,ifnsFLCode,ifnsULAreaCode,ifnsULCode,okato,oktmo,ZIPCode,value"); + + Если ПустаяСтрока(Адрес.Country) Тогда + Адрес.Вставить("Country", Строка(РаботаСАдресамиКлиентСервер.ОсновнаяСтрана())); + КонецЕсли; + + СтруктураДанных = АдресныеСведения.Данные; + Для каждого ИмяУровня Из СопоставлениеУровнейАдреса() Цикл + + Адрес[ИмяУровня] = СтруктураДанных[ИмяУровня]; + Адрес[ИмяУровня + "Type"] = СтруктураДанных[ИмяУровня + "Type"]; + Адрес[ИмяУровня + "Id"] = СтруктураДанных[ИмяУровня + "Id"]; + + КонецЦикла; + + Возврат Адрес; КонецФункции -// Устанавливает значения полей населенного пункта в XDTO адресе. -// -// Параметры: -// XDTOАдрес - ОбъектXDTO - адрес РФ. -// Идентификатор - УникальныйИдентификатор - Источник данных для заполнения. -// -Процедура УстановитьНаселенныйПунктАдресаПоИдентификатору(XDTOАдрес, Идентификатор) Экспорт +Функция СопоставлениеУровнейАдреса() + Уровни = Новый Массив; + Уровни.Добавить("Area"); + Уровни.Добавить("MunDistrict"); + Уровни.Добавить("District"); + Уровни.Добавить("Settlement"); + Уровни.Добавить("City"); + Уровни.Добавить("CityDistrict"); + Уровни.Добавить("Locality"); + Уровни.Добавить("Territory"); + Уровни.Добавить("Street"); - Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда + Возврат Уровни; + +КонецФункции + +Процедура ПроверитьАдрес(АдресВXML, РезультатПроверки, ПараметрыПроверкиАдреса = Неопределено) Экспорт + + Если ПустаяСтрока(АдресВXML) Тогда + РезультатПроверки.Результат = "НеПроверен"; Возврат; КонецЕсли; - МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); - ДанныеАдреса = МодульАдресныйКлассификаторСлужебный.АктуальныеАдресныеСведения(Идентификатор); - Если ДанныеАдреса.Отказ Тогда - // Классификатор поломан - Возврат; - КонецЕсли; - - Эталон = ДанныеАдреса.Данные; - - ЧастиАдреса = РаботаСАдресамиКлиентСервер.СтруктураЧастейАдресаНаселенногоПункта(); - Для Каждого КлючЗначение Из ЧастиАдреса Цикл - Если КлючЗначение.Значение.Уровень < 7 Тогда - Путь = КлючЗначение.Значение.ПутьXPath; - УстановитьXDTOРеквизитОбъекта(XDTOАдрес, Путь, ПолучитьXDTOРеквизитОбъекта(Эталон, Путь)); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -// Устанавливает значения полей улицы. -// -// Параметры: -// XDTOАдрес - ОбъектXDTO - адрес РФ. -// Идентификатор - УникальныйИдентификатор - Источник данных для заполнения. -// -Процедура УстановитьУлицуАдресаПоИдентификатору(XDTOАдрес, Идентификатор) Экспорт - - Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - Возврат; - КонецЕсли; - - МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); - ДанныеАдреса = МодульАдресныйКлассификаторСлужебный.АктуальныеАдресныеСведения(Идентификатор); - Если ДанныеАдреса.Отказ Тогда - // Классификатор поломан - Возврат; - КонецЕсли; - - Эталон = ДанныеАдреса.Данные; - КодСериализацииПочтовогоИндекса = РаботаСАдресамиКлиентСервер.КодСериализацииПочтовогоИндекса(); - КодСериализацииДополнительногоОбъектаАдресации = РаботаСАдресамиКлиентСервер.КодСериализацииДополнительногоОбъектаАдресации(91); - - ЧастиАдреса = РаботаСАдресамиКлиентСервер.СтруктураЧастейАдресаНаселенногоПункта(); - Для Каждого КлючЗначение Из ЧастиАдреса Цикл - Если КлючЗначение.Значение.Уровень = 90 Тогда - Для каждого ДопАдрЭл Из Эталон.ДопАдрЭл Цикл - Если ДопАдрЭл.ТипАдрЭл <> КодСериализацииДополнительногоОбъектаАдресации - И ДопАдрЭл.ТипАдрЭл <> КодСериализацииПочтовогоИндекса Тогда - Путь = "ДопАдрЭл[ТипАдрЭл='" + ДопАдрЭл.ТипАдрЭл + "']"; - УстановитьXDTOРеквизитОбъекта(XDTOАдрес, Путь, ПолучитьXDTOРеквизитОбъекта(Эталон, Путь)); - КонецЕсли; - КонецЦикла; - ИначеЕсли КлючЗначение.Значение.Уровень = 91 Тогда - Для каждого ДопАдрЭл Из Эталон.ДопАдрЭл Цикл - Если ДопАдрЭл.ТипАдрЭл = КодСериализацииДополнительногоОбъектаАдресации Тогда - Путь = РаботаСАдресамиКлиентСервер.XPathДополнительногоОбъектаАдресации(91, ДопАдрЭл.ТипАдрЭл); - УстановитьXDTOРеквизитОбъекта(XDTOАдрес, Путь, ПолучитьXDTOРеквизитОбъекта(Эталон, Путь)); - КонецЕсли; - КонецЦикла; - ИначеЕсли КлючЗначение.Значение.Уровень = 7 Тогда - Путь = КлючЗначение.Значение.ПутьXPath; - УстановитьXDTOРеквизитОбъекта(XDTOАдрес, Путь, ПолучитьXDTOРеквизитОбъекта(Эталон, Путь)); - КонецЕсли; - КонецЦикла; - - - -КонецПроцедуры - -// Устанавливает значения идентификаторов для частей адреса. -// -// Параметры: -// НаселенныйПунктДетально - Структура - части адреса. -// ИдентификаторАдреса - УникальныйИдентификатор - Источник данных для заполнения. -// -Процедура ЗаполнитьИдентификаторыНаселенногоПункта(НаселенныйПунктДетально) Экспорт - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); - МодульАдресныйКлассификаторСлужебный.УстановитьИдентификаторыНаселенногоПункта(НаселенныйПунктДетально); - КонецЕсли; - -КонецПроцедуры - -Процедура ПроверитьАдресВXML(АдресВXML, РезультатПроверки, ПараметрыПроверкиАдреса = Неопределено) Экспорт - - Источник = АдресXMLВXDTO(АдресВXML,, Перечисления.ТипыКонтактнойИнформации.Адрес); + Адрес = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВJSON(АдресВXML); ЕстьОшибки = Ложь; - ФорматАдреса = "КЛАДР"; ТолькоНациональныйАдрес = Истина; Если ТипЗнч(ПараметрыПроверкиАдреса) = Тип("СправочникСсылка.ВидыКонтактнойИнформации") Тогда ПараметрыПроверки = УправлениеКонтактнойИнформациейСлужебный.СтруктураВидаКонтактнойИнформации(ПараметрыПроверкиАдреса); - ФорматАдреса = ?(ПараметрыПроверки.ПроверятьПоФИАС, "ФИАС", "КЛАДР"); ТолькоНациональныйАдрес = ПараметрыПроверки.ТолькоНациональныйАдрес; - Иначе + Иначе ПараметрыПроверки = УправлениеКонтактнойИнформациейСлужебный.СтруктураВидаКонтактнойИнформации(); Если ПараметрыПроверкиАдреса <> Неопределено Тогда - Если ПараметрыПроверкиАдреса.Свойство("ФорматАдреса") И ЗначениеЗаполнено(ПараметрыПроверкиАдреса.ФорматАдреса) Тогда - ФорматАдреса = ПараметрыПроверкиАдреса.ФорматАдреса; - КонецЕсли; Если ПараметрыПроверкиАдреса.Свойство("ТолькоНациональныйАдрес") И ЗначениеЗаполнено(ПараметрыПроверкиАдреса.ТолькоНациональныйАдрес) Тогда ТолькоНациональныйАдрес = ПараметрыПроверкиАдреса.ТолькоНациональныйАдрес; КонецЕсли; @@ -660,19 +230,8 @@ ПараметрыПроверки.ПроверятьКорректность = Истина; КонецЕсли; - Если ВРег(ФорматАдреса) = "ФИАС" Тогда - ПараметрыПроверки.Вставить("ПроверятьПоФИАС", Истина); - КонецЕсли; - - ПараметрыПроверки.Вставить("ФорматАдреса", ФорматАдреса); ПараметрыПроверки.Вставить("ТолькоНациональныйАдрес ", ТолькоНациональныйАдрес); - - Адрес = Источник.Состав; - - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); - Если Адрес <> Неопределено И Адрес.Тип() = ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") Тогда - СписокОшибок = ОшибкиЗаполненияАдресаXDTO(Адрес, ПараметрыПроверки); - КонецЕсли; + СписокОшибок = ОшибкиЗаполненияАдресаXDTO(Адрес, ПараметрыПроверки); Если СписокОшибок.Количество() = 0 Тогда РезультатПроверки.Результат = "Корректный"; @@ -760,11 +319,11 @@ // ** Идентификатор - УникальныйИдентификатор - Код классификатора для поиска вариантов по индексу. // ** Представление - Строка - Представление варианта. // -Функция АдресаДляИнтерактивногоВыбора(Родитель, Уровень, ДополнительныеПараметры) Экспорт +Функция АдресаДляИнтерактивногоВыбора(Родитель, Уровень, ТипАдреса, ДополнительныеПараметры) Экспорт Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); - Возврат МодульАдресныйКлассификаторСлужебный.АдресаДляИнтерактивногоВыбора(Родитель, Уровень, ДополнительныеПараметры); + Возврат МодульАдресныйКлассификаторСлужебный.АдресаДляИнтерактивногоВыбора(Родитель, Уровень, ТипАдреса, ДополнительныеПараметры); КонецЕсли; Результат = СтруктураОшибкиПоставщикаАдресногоКлассификатора(); @@ -774,99 +333,7 @@ КонецФункции -// Возвращает список для автоподбора населенного пункта, поиск по подобию. Список ограничен 20 записями. -// -// Параметры: -// Текст - Строка - Текст, введенный в поле. -// ИмяЧастиАдреса - Строка - Идентификатор обрабатываемой части адреса. -// ЧастиАдреса - Структура - Значения для других частей адреса. -// ДополнительныеПараметры - Структура - Описание настройке поиска. Поля: -// * СкрыватьНеактуальные - Булево - Флаг исключения из выборки неактуальных адресов. По -// умолчанию Ложь. -// * ФорматАдреса - Строка - Тип используемого классификатора. -// -// Возвращаемое значение: -// Структура - найденные варианты. Содержит поля: -// * Отказ - Булево - Поставщик не доступен. -// * ПодробноеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ -// = Ложь. -// * КраткоеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ -// = Ложь. -// * Данные - СписокЗначений - результат для автоподбора. -// -Функция СписокАвтоподбораЧастиАдреса(Текст, ИмяЧастиАдреса, ЧастиАдреса, ДополнительныеПараметры) Экспорт - - Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - Результат = Новый Структура("Данные", Новый СписокЗначений); - Возврат СтруктураОшибкиПоставщикаАдресногоКлассификатора(Результат); - КонецЕсли; - - ЧастьАдреса = ЧастиАдреса[ИмяЧастиАдреса]; - Родитель = УправлениеКонтактнойИнформациейКлиентСервер.ИдентификаторРодителяЧастиАдресаЭлемента(ЧастьАдреса, ЧастиАдреса); - - Уровни = Новый Массив; - Уровни.Добавить(ЧастьАдреса.Уровень); - - МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); - Результат = МодульАдресныйКлассификаторСлужебный.ВариантыАвтоподбора(Текст, Родитель, Уровни, ДополнительныеПараметры); - - ТабличныеДанные = Результат.Данные; - - Результат.Данные = Новый СписокЗначений; - Если Не Результат.Отказ Тогда - ЗаполнитьСписокАвтоподбораИзТаблицы(Результат.Данные, ТабличныеДанные, Ложь); - КонецЕсли; - - Возврат Результат; - -КонецФункции - -Процедура ЗаполнитьСписокАвтоподбораИзТаблицы(Результат, ТабличныеДанные, ЭтоПодборУлицы) - - Для Каждого Строка Из ТабличныеДанные Цикл - - Если Строка.Неактуален Тогда - Пометка = Истина; - Представление = Новый ФорматированнаяСтрока(Строка.Представление,, ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); - Предупреждение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Адрес ""%1"" неактуален.'"), Строка.Представление); - Иначе - Предупреждение = Неопределено; - Пометка = Ложь; - Представление = Строка.Представление; - КонецЕсли; - - ЗначениеЭлемента = Новый Структура; - ЗначениеЭлемента.Вставить("Идентификатор", Строка.Идентификатор); - ЗначениеЭлемента.Вставить("Представление", Строка.Представление); - ЗначениеЭлемента.Вставить("Автоподбор", Истина); - ЗначениеЭлемента.Вставить("РегионЗагружен", Строка.РегионЗагружен); - Если ЭтоПодборУлицы Тогда - Если Строка.Уровень = 90 Тогда - ЗначениеЭлемента.Вставить("Улица", ""); - ЗначениеЭлемента.Вставить("ДополнительныйЭлемент", Строка.Представление); - ЗначениеЭлемента.Вставить("ПодчиненныйЭлемент", ""); - ИначеЕсли Строка.Уровень = 91 Тогда - ЗначениеЭлемента.Вставить("Улица", ""); - ЗначениеЭлемента.Вставить("ДополнительныйЭлемент", ""); - ЗначениеЭлемента.Вставить("ПодчиненныйЭлемент", Строка.Представление); - Иначе - ЗначениеЭлемента.Вставить("Улица", Строка.Представление); - ЗначениеЭлемента.Вставить("ДополнительныйЭлемент", ""); - ЗначениеЭлемента.Вставить("ПодчиненныйЭлемент", ""); - КонецЕсли; - ЗначениеЭлемента.Вставить("ТипАдресногоЭлемента", Строка.ТипАдресногоЭлемента); - - КонецЕсли; - - Результат.Добавить( - Новый Структура("Предупреждение, Значение", Предупреждение, ЗначениеЭлемента), - Представление, Пометка); - КонецЦикла; - -КонецПроцедуры - - -// Возвращает структуру с полем "Данные", содержащую список для автоподбора населенного пункта +// Возвращает структуру с полем "Данные", содержащую список для автоподбора населенного пункта // по иерархическому представлению младший-старший. // // Параметры: @@ -885,59 +352,31 @@ // * ОбщаяЧастьПредставления - Строка - Общая часть представлений адреса. // * Данные - СписокЗначений - результат для автоподбора. // -Функция СписокАвтоподбораНаселенногоПункта(Текст, ДополнительныеПараметры) Экспорт +Функция СписокАвтоподбораНаселенногоПункта(Текст) Экспорт + Результат = Новый Структура("Данные", Новый СписокЗначений); + СтруктураОшибкиПоставщикаАдресногоКлассификатора(Результат); Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - Результат = Новый Структура("Данные", Новый СписокЗначений); - Возврат СтруктураОшибкиПоставщикаАдресногоКлассификатора(Результат); + Результат.Отказ = Истина; + Результат.КраткоеПредставлениеОшибки = НСтр("ru='Адресные сведения отсутствуют.'"); + Возврат Результат; КонецЕсли; - ЧастиАдреса = РаботаСАдресамиКлиентСервер.СтруктураЧастейАдресаНаселенногоПункта(ДополнительныеПараметры.ФорматАдреса); + ДополнительныеПараметры = Новый Структура(); - Родитель = Неопределено; - Уровни = Новый Массив; - Для Каждого КлючЗначение Из ЧастиАдреса Цикл - Если КлючЗначение.Значение.Уровень < 7 Тогда - Уровни.Добавить(КлючЗначение.Значение.Уровень); - КонецЕсли; - КонецЦикла; - - ПреобразоватьВводАдреса(Текст); МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); - Результат = МодульАдресныйКлассификаторСлужебный.ВариантыАвтоподбора(Текст, Родитель, Уровни, ДополнительныеПараметры); - - ТабличныеДанные = Результат.Данные; - - Результат.Данные = Новый СписокЗначений; - Если Не Результат.Отказ Тогда - ЗаполнитьСписокАвтоподбораИзТаблицы(Результат.Данные, ТабличныеДанные, Ложь); - КонецЕсли; + Результат.Данные = МодульАдресныйКлассификаторСлужебный.ВариантыАвтоподбора(Текст, ДополнительныеПараметры); Возврат Результат; КонецФункции -// Преобразует введенные английские буквы к русской раскладке при подборе адреса -// -Процедура ПреобразоватьВводАдреса(Текст) - РусскиеКлавиши = "ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮЁ"; - АнглийскиеКлавиши = "QWERTYUIOP[]ASDFGHJKL;'ZXCVBNM,.`"; - Текст = ВРег(Текст); - Для Позиция = 0 По СтрДлина(Текст) Цикл - Символ = Сред(Текст, Позиция, 1); - ПозицияСимвола = СтрНайти(АнглийскиеКлавиши, Символ); - Если ПозицияСимвола > 0 Тогда - Текст = СтрЗаменить(Текст, Символ, Сред(РусскиеКлавиши, ПозицияСимвола, 1)); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - // Возвращает структуру с полем "Данные", содержащую список для автоподбора улицы // по иерархическому представлению младший-старший. // // Параметры: -// НаселенныйПункт - УникальныйИдентификатор - Населенный пункт. // Текст - Строка - Текст автоподбора. +// НаселенныйПункт - УникальныйИдентификатор - Населенный пункт. + // ДополнительныеПараметры - Структура - Описывает настройки поиска. Состоит из необязательных полей: // * СкрыватьНеактуальные - Булево - Флаг исключения из выборки неактуальных адресов. По умолчанию // Ложь. @@ -953,34 +392,21 @@ // * ОбщаяЧастьПредставления - Строка - Общая часть представлений адреса. // * Данные - СписокЗначений - результат для автоподбора. // -Функция СписокАвтоподбораУлицы(НаселенныйПункт, Текст, ДополнительныеПараметры) Экспорт +Функция СписокАвтоподбораУлицы(Текст, ПараметрыАвтоподбора) Экспорт - Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - Результат = Новый Структура("Данные", Новый СписокЗначений); - Возврат СтруктураОшибкиПоставщикаАдресногоКлассификатора(Результат); - КонецЕсли; + ДанныеВыбора = Новый СписокЗначений; + Уровень = 7; + РодительскийИдентификатор = ПараметрыАвтоподбора.Идентификатор; + ТипАдреса = ПараметрыАвтоподбора.ТипАдреса; - ЧастиАдреса = РаботаСАдресамиКлиентСервер.СтруктураЧастейАдресаНаселенногоПункта(ДополнительныеПараметры.ФорматАдреса); - - Уровни = Новый Массив; - Для Каждого КлючЗначение Из ЧастиАдреса Цикл - Если КлючЗначение.Значение.Уровень > 6 Тогда - Уровни.Добавить(КлючЗначение.Значение.Уровень); - КонецЕсли; - КонецЦикла; - - ПреобразоватьВводАдреса(Текст); МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); - Результат = МодульАдресныйКлассификаторСлужебный.ВариантыАвтоподбора(Текст, НаселенныйПункт, Уровни, ДополнительныеПараметры); - - ТабличныеДанные = Результат.Данные; - - Результат.Данные = Новый СписокЗначений; + Результат = МодульАдресныйКлассификаторСлужебный.АдресныеОбъектыУровня(РодительскийИдентификатор, Уровень, ТипАдреса, Текст); Если Не Результат.Отказ Тогда - ЗаполнитьСписокАвтоподбораИзТаблицы(Результат.Данные, ТабличныеДанные, Истина); + ДанныеВыбора = Результат.Данные; КонецЕсли; + + Возврат ДанныеВыбора; - Возврат Результат; КонецФункции // Возвращает список значение содержащий номера домов для автоподбора. @@ -1015,11 +441,11 @@ // Возвращаемое значение: // ТаблицаЗначений - найденные варианты. // -Функция СписокДомов(ИдентификаторАдресногоОбъекта, СтрокаПоиска = "") Экспорт +Функция СписокДомов(ИдентификаторАдресногоОбъекта, СтрокаПоиска = "", ПорцияПриПоиске = 20) Экспорт Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); - СписокДомов = МодульАдресныйКлассификаторСлужебный.СписокДомов(ИдентификаторАдресногоОбъекта, СтрокаПоиска); + СписокДомов = МодульАдресныйКлассификаторСлужебный.СписокДомов(ИдентификаторАдресногоОбъекта, СтрокаПоиска, ПорцияПриПоиске); Возврат СписокДомов; КонецЕсли; @@ -1027,33 +453,6 @@ КонецФункции -// Заполняет коды по структуре адреса. -// -Процедура ЗаполнитьКодыАдреса(Результат, Адрес) - - КодыКЛАДР = Новый Структура("Регион, Округ, Город, ВнутригородскойРайон, НаселенныйПункт, Улица"); - Идентификаторы = Новый Структура("Регион, Округ, Город, ВнутригородскойРайон, НаселенныйПункт, Улица"); - ДополнительныеКоды = Новый Структура("ОКТМО, ОКАТО, КодИФНСФЛ, КодИФНСЮЛ, КодУчасткаИФНСФЛ, КодУчасткаИФНСЮЛ"); - Результат.Вставить("КодыКЛАДР", КодыКЛАДР); - Результат.Вставить("ДополнительныеКоды", ДополнительныеКоды); - Результат.Вставить("Идентификаторы", Идентификаторы); - Результат.Вставить("ИдентификаторАдресногоОбъекта", Неопределено); - - Если ПустаяСтрока(Результат.Регион) Тогда - Возврат; - КонецЕсли; - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); - АдресныеКоды = МодульАдресныйКлассификаторСлужебный.КодыАдресаИКодыКЛАДР(Адрес); - Результат.ДополнительныеКоды = АдресныеКоды.КодыАдреса; - Результат.КодыКЛАДР = АдресныеКоды.КодыКЛАДР; - Результат.Идентификаторы = АдресныеКоды.Идентификаторы; - Результат.ИдентификаторАдресногоОбъекта = АдресныеКоды.ИдентификаторАдресногоОбъекта; - КонецЕсли; - -КонецПроцедуры - #КонецОбласти //====================================================================================================================== @@ -1081,7 +480,7 @@ Результат.Комментарий = ""; Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Адрес")); - НазваниеОсновнойСтраны = ВРег(РаботаСАдресами.ОсновнаяСтрана().Наименование); + НазваниеОсновнойСтраны = ВРег(РаботаСАдресамиКлиентСервер.ОсновнаяСтрана().Наименование); ЭлементКвартира = Неопределено; ЭлементКорпус = Неопределено; ЭлементДом = Неопределено; @@ -1259,210 +658,12 @@ КонецФункции - -Функция СтруктураАдресаПоФормату9Запятых(АдресВФормате9Запятых) - Результат = Новый Соответствие; - АдресМассив = СтрРазделить(АдресВФормате9Запятых, ",", Истина); - Результат.Вставить("Страна", АдресМассив[0]); - Результат.Вставить("Индекс", АдресМассив[1]); - Результат.Вставить("Регион", АдресМассив[2]); - Результат.Вставить("Район", АдресМассив[3]); - Результат.Вставить("Город", АдресМассив[4]); - Результат.Вставить("НаселенныйПункт", АдресМассив[5]); - Результат.Вставить("Улица", АдресМассив[6]); - Результат.Вставить("Дом", АдресМассив[7]); - Результат.Вставить("Корпус", АдресМассив[8]); - Результат.Вставить("Квартира", АдресМассив[9]); - - Результат.Вставить("Округ", Неопределено); - Результат.Вставить("ВнутригРайон", Неопределено); - Возврат Результат; - -КонецФункции - -// Функция раскладывает строку с данными об адресе (в формате 9 запятых) на элементы структуры. -Функция РазложитьАдресВСтруктуру(Знач СтрокаАдрес) Экспорт - - Страна = ""; - Индекс = ""; - Регион = ""; - Район = ""; - Город = ""; - НаселенныйПункт = ""; - Улица =""; - Дом =""; - Корпус =""; - Квартира =""; - - МассивАдрес = СтрРазделить(СтрокаАдрес, ",", Истина); - ЭлементовВМассиве = МассивАдрес.Количество(); - - Если ЭлементовВМассиве > 0 Тогда - Страна = СокрЛП(МассивАдрес[0]); - КонецЕсли; - Если ЭлементовВМассиве > 1 Тогда - ИндексСтрокой = СокрЛП(МассивАдрес[1]); - Если СтрДлина(ИндексСтрокой) = 6 И СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(ИндексСтрокой) Тогда - Индекс = ИндексСтрокой; - КонецЕсли; - КонецЕсли; - Если ЭлементовВМассиве > 2 Тогда - Регион = СокрЛП(МассивАдрес[2]); - КонецЕсли; - Если ЭлементовВМассиве > 3 Тогда - Район = СокрЛП(МассивАдрес[3]); - КонецЕсли; - Если ЭлементовВМассиве > 4 Тогда - Город = СокрЛП(МассивАдрес[4]); - КонецЕсли; - Если ЭлементовВМассиве > 5 Тогда - НаселенныйПункт = СокрЛП(МассивАдрес[5]); - КонецЕсли; - Если ЭлементовВМассиве > 6 Тогда - Улица = СокрЛП(МассивАдрес[6]); - КонецЕсли; - Если ЭлементовВМассиве > 7 Тогда - Дом = СокрЛП(МассивАдрес[7]); - КонецЕсли; - Если ЭлементовВМассиве > 8 Тогда - Корпус = СокрЛП(МассивАдрес[8]); - КонецЕсли; - Если ЭлементовВМассиве> 9 Тогда - Квартира = СокрЛП(МассивАдрес[9]); - КонецЕсли; - - СтруктураВозврата = Новый Структура; - СтруктураВозврата.Вставить("Страна",Страна); - СтруктураВозврата.Вставить("Индекс",Индекс); - СтруктураВозврата.Вставить("Регион",Регион); - СтруктураВозврата.Вставить("Район",Район); - СтруктураВозврата.Вставить("Город",Город); - СтруктураВозврата.Вставить("НаселенныйПункт",НаселенныйПункт); - СтруктураВозврата.Вставить("Улица",Улица); - СтруктураВозврата.Вставить("Дом",Дом); - СтруктураВозврата.Вставить("Корпус",Корпус); - СтруктураВозврата.Вставить("Квартира",Квартира); - - Возврат СтруктураВозврата; - -КонецФункции - Функция СформироватьАдресПоПредставлению(Представление) - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); + Адрес = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияПоПредставлению(Представление, Перечисления.ТипыКонтактнойИнформации.Адрес); + XML = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВXML(Адрес, Представление, Перечисления.ТипыКонтактнойИнформации.Адрес); + Возврат УправлениеКонтактнойИнформациейСлужебный.АдресXMLВXDTO(XML, Представление, Перечисления.ТипыКонтактнойИнформации.Адрес); - Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); - Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Адрес")); - Результат.Представление = Представление; - - Адрес = Результат.Состав; - - НаименованиеОсновнаяСтрана = СокрЛП(РаботаСАдресами.ОсновнаяСтрана().Наименование); - ДанныеАнализа = ЧастиАдресаТаблицей(Представление); - Если ДанныеАнализа.Количество() = 0 Тогда - Возврат Результат; - КонецЕсли; - - ОпределитьСтрануИИндекс(ДанныеАнализа); - СтрокаСтраны = ДанныеАнализа.Найти(-2, "Уровень"); - Если СтрокаСтраны = Неопределено Тогда - Адрес.Страна = НаименованиеОсновнаяСтрана; - Иначе - Адрес.Страна = СокрЛП(ВРег(СтрокаСтраны.Значение)); - // Проверка наличия страны в справочнике Страны мира и неявное добавление ее в случае отсутствия. - СтранаМира = УправлениеКонтактнойИнформацией.СтранаМираПоКодуИлиНаименованию(Адрес.Страна); - КонецЕсли; - - Если Адрес.Страна = НаименованиеОсновнаяСтрана Тогда - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - НациональныйАдрес = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(РаботаСАдресами.ПространствоИмен(), "АдресРФ")); - МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); - АдресПоУровням = МодульАдресныйКлассификаторСлужебный.УстановитьСоответствиеЧастейАдресаИхУровню(ДанныеАнализа, УровниАдресныхОбъектов()); - Если АдресПоУровням <> Неопределено Тогда - ПоместитьАдресВXDTO(НациональныйАдрес, АдресПоУровням); - КонецЕсли; - - Если АдресПоУровням.Найти(0, "Уровень") <> Неопределено Тогда - // Что-то осталось, считаем адресом в свободной форме. - НациональныйАдрес.Адрес_По_Документу = Представление; - КонецЕсли; - Адрес.Состав = НациональныйАдрес; - КонецЕсли; - Иначе - // Состав без страны, она остается в представлении. - Позиция = СтрокаСтраны.Начало + СтрокаСтраны.Длина; - Длина = СтрДлина(Представление); - Разделители = "," + Символы.ПС; - Пока Позиция <= Длина И СтрНайти(Разделители, Сред(Представление, Позиция, 1)) <= 0 Цикл - Позиция = Позиция + 1; - КонецЦикла; - Пока Позиция <= Длина И СтрНайти(Разделители, Сред(Представление, Позиция, 1)) > 0 Цикл - Позиция = Позиция + 1; - КонецЦикла; - Адрес.Состав = СокрЛП(Лев(Представление, СтрокаСтраны.Начало - 1) + " " + СокрЛП(Сред(Представление, Позиция))); - - КонецЕсли; - - Возврат Результат; -КонецФункции - -Функция ПредставлениеАдреса(Знач ВидИнформации, НациональныйАдрес, Страна) Экспорт - - // Значимые части - Адрес = Новый Массив; - Адрес.Добавить(ДополнительныйЭлементАдреса(НациональныйАдрес, РаботаСАдресамиКлиентСервер.XPathПочтовогоИндекса())); - Адрес.Добавить(НациональныйАдрес.СубъектРФ); - Если ВидИнформации.ФорматАдреса = "ФИАС" Тогда - Адрес.Добавить(НациональныйАдрес.Округ); - КонецЕсли; - Адрес.Добавить(РайонАдреса(НациональныйАдрес)); - Адрес.Добавить(НациональныйАдрес.Город); - Если ВидИнформации.ФорматАдреса = "ФИАС" Тогда - Адрес.Добавить(НациональныйАдрес.ВнутригРайон); - КонецЕсли; - Адрес.Добавить(НациональныйАдрес.НаселПункт); - Адрес.Добавить(НациональныйАдрес.Улица); - - ДополнительныйЭлементАдреса = ДополнительныйЭлементАдреса(НациональныйАдрес, РаботаСАдресамиКлиентСервер.XPathДополнительногоОбъектаАдресации(90, "СНТ")); - Если ДополнительныйЭлементАдреса = Неопределено Тогда - ДополнительныйЭлементАдреса = ДополнительныйЭлементАдреса(НациональныйАдрес, РаботаСАдресамиКлиентСервер.XPathДополнительногоОбъектаАдресации(90, "ГСК")); - Если ДополнительныйЭлементАдреса = Неопределено Тогда - ДополнительныйЭлементАдреса = ДополнительныйЭлементАдреса(НациональныйАдрес, РаботаСАдресамиКлиентСервер.XPathДополнительногоОбъектаАдресации(90, "ТЕР")); - Если ДополнительныйЭлементАдреса = Неопределено Тогда - ДополнительныйЭлементАдреса = ДополнительныйЭлементАдреса(НациональныйАдрес, РаботаСАдресамиКлиентСервер.XPathДополнительногоОбъектаАдресации(90)); - КонецЕсли; - КонецЕсли; - КонецЕсли; - - Адрес.Добавить(ДополнительныйЭлементАдреса); - Адрес.Добавить(ДополнительныйЭлементАдреса(НациональныйАдрес, РаботаСАдресамиКлиентСервер.XPathДополнительногоОбъектаАдресации(91))); - - Представление = УправлениеКонтактнойИнформациейКлиентСервер.СформироватьПолноеНаименование(Адрес); - - // Строения и помещения - НомерНеВыведен = Истина; - Данные = ЗданияИПомещенияАдреса(НациональныйАдрес); - Для Каждого Строка Из Данные.Здания Цикл - Здания = Новый Массив; - Здания.Добавить(Представление); - Здания.Добавить(СокрЛП(Строка.Сокращение + ?(НомерНеВыведен, " № ", " ") + Строка.Значение)); - Представление = УправлениеКонтактнойИнформациейКлиентСервер.СформироватьПолноеНаименование(Здания); - НомерНеВыведен = Ложь; - КонецЦикла; - - Для Каждого Строка Из Данные.Помещения Цикл - Помещения = Новый Массив; - Помещения.Добавить(Представление); - Помещения.Добавить(СокрЛП(Строка.Сокращение + " " + Строка.Значение)); - Представление = УправлениеКонтактнойИнформациейКлиентСервер.СформироватьПолноеНаименование(Помещения); - КонецЦикла; - - // При пустом представлении страну нет смысла выводить. - Если ПустаяСтрока(Представление) Тогда - Страна = ""; - КонецЕсли; - - Возврат Представление; КонецФункции // Возвращает представление младший-старший для населенного пункта. @@ -1475,86 +676,35 @@ // Функция ПредставлениеНаселенногоПункта(ОбъектАдреса) Экспорт - АдресРФ = НациональныйАдрес(ОбъектАдреса); - Если АдресРФ = Неопределено Тогда - Возврат ""; - КонецЕсли; + АдресныеУровниБезСокращений = Новый Соответствие(); + АдресныеУровниБезСокращений.Вставить("MunDistrict", Истина); + АдресныеУровниБезСокращений.Вставить("Settlement", Истина); - Если АдресРФ.СвРайМО = Неопределено Тогда - Район = ""; - ИначеЕсли АдресРФ.СвРайМО.Район <> Неопределено Тогда - Район = АдресРФ.СвРайМО.Район; - ИначеЕсли АдресРФ.СвРайМО.СвМО <> Неопределено Тогда - Районы = Новый Массив(АдресРФ.СвРайМО.СвМО.МунОбр2, АдресРФ.СвРайМО.СвМО.МунОбр1); - Район = УправлениеКонтактнойИнформациейКлиентСервер.СформироватьПолноеНаименование(Районы); + Если НЕ ОбъектАдреса.Свойство("AddressType") Тогда + СписокПолейАдреса = "Area,City"; + ИначеЕсли РаботаСАдресамиКлиентСервер.ЭтоМуниципальныйАдрес(ОбъектАдреса.AddressType) Тогда + СписокПолейАдреса = "Area,MunDistrict,Settlement,CityDistrict,Locality,Territory"; Иначе - Район = ""; + СписокПолейАдреса = "Area,District,City,CityDistrict,Locality,Territory"; КонецЕсли; + СписокПолей = СтрРазделить(СписокПолейАдреса, ","); Адрес = Новый Массив; - Адрес.Добавить(АдресРФ.НаселПункт); - Адрес.Добавить(АдресРФ.ВнутригРайон); - Адрес.Добавить(АдресРФ.Город); - Адрес.Добавить(Район); - Адрес.Добавить(АдресРФ.Округ); - Адрес.Добавить(АдресРФ.СубъектРФ); - - Возврат УправлениеКонтактнойИнформациейКлиентСервер.СформироватьПолноеНаименование(Адрес); - -КонецФункции - -// Возвращает представление младший-старший для населенного пункта. -// -// Параметры: -// ОбъектАдреса - ОбъектXDTO - адрес РФ. -// -// Возвращаемое значение: -// Строка - представление. -// -Функция ПредставлениеУлицы(ОбъектАдреса) Экспорт - - АдресРФ = НациональныйАдрес(ОбъектАдреса); - Если АдресРФ = Неопределено Тогда - Возврат ""; - КонецЕсли; - - Адрес = Новый Массив; - Адрес.Добавить(АдресРФ.Улица); - - ДополнительныйЭлементАдреса = ДополнительныйЭлементАдреса(АдресРФ, РаботаСАдресамиКлиентСервер.XPathДополнительногоОбъектаАдресации(90, "СНТ")); - Если ДополнительныйЭлементАдреса = Неопределено Тогда - ДополнительныйЭлементАдреса = ДополнительныйЭлементАдреса(АдресРФ, РаботаСАдресамиКлиентСервер.XPathДополнительногоОбъектаАдресации(90, "ГСК")); - Если ДополнительныйЭлементАдреса = Неопределено Тогда - ДополнительныйЭлементАдреса = ДополнительныйЭлементАдреса(АдресРФ, РаботаСАдресамиКлиентСервер.XPathДополнительногоОбъектаАдресации(90, "ТЕР")); - Если ДополнительныйЭлементАдреса = Неопределено Тогда - ДополнительныйЭлементАдреса = ДополнительныйЭлементАдреса(АдресРФ, РаботаСАдресамиКлиентСервер.XPathДополнительногоОбъектаАдресации(90)); - КонецЕсли; + Для каждого ИмяПоля Из СписокПолей Цикл + Если ОбъектАдреса.Свойство(ИмяПоля) И ЗначениеЗаполнено(ОбъектАдреса[ИмяПоля]) Тогда + ПредставлениеУровня = ОбъектАдреса[ИмяПоля] + + ?(АдресныеУровниБезСокращений.Получить(ИмяПоля) = Неопределено, " " + ОбъектАдреса[ИмяПоля + "Type"], ""); + Адрес.Добавить(ПредставлениеУровня); КонецЕсли; - КонецЕсли; + КонецЦикла; - Адрес.Добавить(ДополнительныйЭлементАдреса); - Адрес.Добавить(ДополнительныйЭлементАдреса(АдресРФ, РаботаСАдресамиКлиентСервер.XPathДополнительногоОбъектаАдресации(91))); - - Возврат УправлениеКонтактнойИнформациейКлиентСервер.СформироватьПолноеНаименование(Адрес); + Возврат СтрСоединить(Адрес, ", "); КонецФункции - //====================================================================================================================== // Структура и поля адреса. -// Возвращает флаг того, что переданный адрес - российский. -// -// Параметры: -// XDTOАдрес - ОбъектXDTO - Контактная информация или XDTO адреса. -// -// Возвращаемое значение: -// Булево - результат проверки. -// -Функция ЭтоНациональныйАдрес(XDTOАдрес) Экспорт - Возврат НациональныйАдрес(XDTOАдрес) <> Неопределено; -КонецФункции - // Возвращает извлеченный XDTO российского адреса или Неопределено для адреса иностранного. // // Параметры: @@ -1564,7 +714,7 @@ // ОбъектXDTO - российский адрес. // Неопределено - нет российского адреса. // -Функция НациональныйАдрес(ОбъектИнформации) Экспорт +Функция НациональныйАдрес(ОбъектИнформации) Результат = Неопределено; ТипXDTO = Тип("ОбъектXDTO"); @@ -1589,58 +739,6 @@ Возврат Результат; КонецФункции -// Возвращает почтовый индекс и ОКТМО для адреса по данным классификатора. -// -// Параметры: -// XDTOАдрес - ОбъектXDTO - Контактная информация или XDTO адреса. -// -// Возвращаемое значение: -// Структура - почтовый индекс и ОКТМО. -// * Индекс - почтовый индекс. -// * ОКТМО - ОКТМО -// Неопределено - индекс не найден или адрес иностранный. -// -Функция ОпределитьПочтовыйИндексИОКТМОАдреса(XDTOАдрес, Идентификатор = Неопределено) Экспорт - - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); - - Если XDTOАдрес.Тип() = ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") Тогда - XDTOАдресРФ = XDTOАдрес.Состав; - Иначе - XDTOАдресРФ = XDTOАдрес; - КонецЕсли; - - Если XDTOАдресРФ = Неопределено Или XDTOАдресРФ.Тип() <> ФабрикаXDTO.Тип(РаботаСАдресами.ПространствоИмен(), "АдресРФ") Тогда - Возврат Неопределено;// Иностранный или пустой адрес. - КонецЕсли; - - ИндексИОКМТО = Новый Структура("Индекс, ОКТМО"); - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - // Вызов анализа и возврат индекса варианта. - МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); - ИндексИОКМТО = МодульАдресныйКлассификаторСлужебный.ИндексИОКТМОАдресаПоЧастямАдреса(XDTOАдресРФ, Идентификатор); - КонецЕсли; - - Возврат ИндексИОКМТО; -КонецФункции - -Процедура ОпределитьСтрануИИндекс(ДанныеАдреса) - - Классификатор = УправлениеКонтактнойИнформацией.ТаблицаКлассификатора(); - Для каждого ЭлементАдреса Из ДанныеАдреса Цикл - ОписаниеТипаЧисло = Новый ОписаниеТипов("Число"); - Индекс = ОписаниеТипаЧисло.ПривестиЗначение(ЭлементАдреса.Наименование); - Если Индекс >= 100000 И Индекс < 1000000 Тогда - ЭлементАдреса.Уровень = -1; - Иначе - Если Классификатор.Найти(ВРег(ЭлементАдреса.Наименование), "Наименование") <> Неопределено Тогда - ЭлементАдреса.Уровень = -2; - КонецЕсли; - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - // Читает и устанавливает почтовый индекс адреса. // // Параметры: @@ -1699,11 +797,7 @@ Если XDTOТип = ФабрикаXDTO.Тип(РаботаСАдресами.ПространствоИмен(), "АдресРФ") Тогда АдресРФ = XDTOАдрес; Иначе - Если XDTOАдрес.Свойства().Получить("Состав") <> Неопределено Тогда - АдресРФ = XDTOАдрес.Состав; - Иначе - АдресРФ = XDTOАдрес; - КонецЕсли; + АдресРФ = XDTOАдрес.Состав; КонецЕсли; Если ТипЗнч(АдресРФ) = Тип("ОбъектXDTO") Тогда @@ -1730,7 +824,7 @@ // Возвращает значения уровней 90(дополнительный элемент) и 91(подчиненный) из адреса. // -Функция ЗначениеДополнительныхЭлементов(Знач XDTOАдрес) +Функция ЗначениеДополнительныхЭлементов(Знач XDTOАдрес) Экспорт Результат = Новый Структура("ДополнительныйЭлемент, ПодчиненныйЭлемент"); @@ -1774,7 +868,7 @@ // Возвращает дополнительный адреса. // -Функция НайтиДополнительныйЭлементАдреса(АдресРФ) Экспорт +Функция НайтиДополнительныйЭлементАдреса(АдресРФ) ВариантыДополнительногоЭлементаАдреса = ВариантыДополнительногоЭлементаАдреса(); @@ -1816,35 +910,6 @@ Возврат ДопАдрЭлемента; КонецФункции -// Добавляет дополнительные элемент адреса по его пути. -// -Процедура ДобавитьДополнительныеЭлементыАдреса(XDTOАдрес, НовоеЗначение, Уровень) Экспорт - - АдресРФ = НациональныйАдрес(XDTOАдрес); - Если АдресРФ = Неопределено Тогда - Возврат; - КонецЕсли; - - - Если Уровень = 90 Тогда - НаименованиеИСокращение = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(НовоеЗначение); - КодСериализацииДополнительногоОбъектаАдресации = РаботаСАдресамиКлиентСервер.КодСериализацииДополнительногоОбъектаАдресации(90, НаименованиеИСокращение.Сокращение); - ИначеЕсли Уровень = 91 Тогда - КодСериализацииДополнительногоОбъектаАдресации = РаботаСАдресамиКлиентСервер.КодСериализацииДополнительногоОбъектаАдресации(91); - Иначе - КодСериализацииДополнительногоОбъектаАдресации = РаботаСАдресамиКлиентСервер.КодСериализацииДополнительногоОбъектаАдресации(0); - КонецЕсли; - - XPathЭлемента = "ДопАдрЭл[ТипАдрЭл='" + КодСериализацииДополнительногоОбъектаАдресации + "']"; - ЗначениеПоля = АдресРФ.Получить(XPathЭлемента); - Если ЗначениеПоля = Неопределено Тогда - ЗначениеПоля = АдресРФ.ДопАдрЭл.Добавить(ФабрикаXDTO.Создать(XDTOАдрес.ДопАдрЭл.ВладеющееСвойство.Тип)); - ЗначениеПоля.ТипАдрЭл = КодСериализацииДополнительногоОбъектаАдресации; - КонецЕсли; - ЗначениеПоля.Значение = НовоеЗначение; - -КонецПроцедуры - // Читает и устанавливает здания и помещения адреса. // // Параметры: @@ -1894,8 +959,8 @@ // Чтение Для Каждого ДопЭлемент Из АдресРФ.ДопАдрЭл Цикл - Если ДопЭлемент.Номер <> Неопределено Тогда - КодОбъекта = Строка(ДопЭлемент.Номер.Тип); + Если ДопЭлемент.Номер <> Неопределено Тогда + КодОбъекта = ДопЭлемент.Номер.Тип; ТипОбъекта = РаботаСАдресамиКлиентСервер.ТипОбъектаПоКодуСериализации(КодОбъекта); Если ТипОбъекта <> Неопределено Тогда Вид = ТипОбъекта.Тип; @@ -1907,17 +972,17 @@ НоваяСтрока = Неопределено; КонецЕсли; Если НоваяСтрока <> Неопределено Тогда - НоваяСтрока.Тип = Строка(ТипОбъекта.Наименование); - НоваяСтрока.Значение = Строка(ДопЭлемент.Номер.Значение); - НоваяСтрока.Сокращение = Строка(ТипОбъекта.Сокращение); + НоваяСтрока.Тип = ТипОбъекта.Наименование; + НоваяСтрока.Значение = ДопЭлемент.Номер.Значение; + НоваяСтрока.Сокращение = ТипОбъекта.Сокращение; НоваяСтрока.ПутьXPath = РаботаСАдресамиКлиентСервер.XPathНомераДополнительногоОбъектаАдресации(НоваяСтрока.Тип); НоваяСтрока.Вид = Вид; КонецЕсли; Иначе НоваяСтрока = Результат.Помещения.Добавить(); - НоваяСтрока.Тип = КодОбъекта; - НоваяСтрока.Значение = Строка(ДопЭлемент.Номер.Значение); - НоваяСтрока.Сокращение = КодОбъекта; + НоваяСтрока.Тип = ДопЭлемент.Номер.Тип; + НоваяСтрока.Значение = ДопЭлемент.Номер.Значение; + НоваяСтрока.Сокращение = ДопЭлемент.Номер.Тип; НоваяСтрока.ПутьXPath = РаботаСАдресамиКлиентСервер.XPathНомераДополнительногоОбъектаАдресации("2000"); НоваяСтрока.Вид = 3; КонецЕсли; @@ -1991,275 +1056,9 @@ Возврат ТаблицаРезультата; КонецФункции -Процедура ОпределитьСоответствиеСокращений(Результат, ЭлементаАдреса, ИмяЭлемента, СоответствиеСокращений, НаименованиеВключаетСокращение, Уровень) - - НаименованиеСокращение = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(ЭлементаАдреса); - Результат.Вставить(ИмяЭлемента, ?(НаименованиеВключаетСокращение, ЭлементаАдреса, НаименованиеСокращение.Наименование)); - СоответствиеСокращений.Вставить(Уровень, НаименованиеСокращение.Сокращение); - -КонецПроцедуры - -// Возвращает ОКТОМ в правильном формате 8 или 11 символов. -// -// Параметры: -// ОКТМО - Строка, Число - Код ОКТМО. -// -// Возвращаемое значение: -// Строка - Код ОКТМО. -// -Функция ОКТМО(ОКТМО) Экспорт - - ОКТМОСтрока = Формат(ОКТМО, "ЧГ=0"); - - Если СтрДлина(ОКТМОСтрока) < 8 Тогда - Возврат Формат(ОКТМО, "ЧЦ=8; ЧВН=; ЧГ=0"); - ИначеЕсли СтрДлина(ОКТМОСтрока) = 10 Тогда - Возврат Формат(ОКТМО, "ЧЦ=11; ЧВН=; ЧГ=0"); - КонецЕсли; - - Возврат ОКТМОСтрока; - -КонецФункции - -Процедура ОпределитьФорматКодов(Результат, АдресРФ) - Если ТипЗнч(АдресРФ) = Тип("ОбъектXDTO") Тогда - Если ЗначениеЗаполнено(АдресРФ.ОКТМО) Тогда - Результат.ДополнительныеКоды.ОКТМО = ОКТМО(АдресРФ.ОКТМО); - КонецЕсли; - Если ЗначениеЗаполнено(АдресРФ.ОКАТО) Тогда - Результат.ДополнительныеКоды.ОКАТО = Формат(АдресРФ.ОКАТО, "ЧГ=0"); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -Процедура ПоместитьАдресВXDTO(АдресРФ, АдресПоУровням) - - ТаблицаЗданийПомещений = Новый ТаблицаЗначений; - ТаблицаЗданийПомещений.Колонки.Добавить("Тип"); - ТаблицаЗданийПомещений.Колонки.Добавить("Значение"); - - Для каждого ЭлементАдреса Из АдресПоУровням Цикл - // XPath - Если ЭлементАдреса.Уровень = 1 Тогда - Путь = "СубъектРФ"; - ИначеЕсли ЭлементАдреса.Уровень = 2 Тогда - Путь = "Округ"; - ИначеЕсли ЭлементАдреса.Уровень = 3 Тогда - Путь = "СвРайМО/Район"; - ИначеЕсли ЭлементАдреса.Уровень = 4 Тогда - Путь = "Город"; - ИначеЕсли ЭлементАдреса.Уровень = 5 Тогда - Путь = "ВнутригРайон"; - ИначеЕсли ЭлементАдреса.Уровень = 6 Тогда - Путь = "НаселПункт"; - ИначеЕсли ЭлементАдреса.Уровень = 7 Тогда - Путь = "Улица"; - ИначеЕсли ЭлементАдреса.Уровень = 90 Тогда - ДобавитьДополнительныеЭлементыАдреса(АдресРФ, ЭлементАдреса.Значение, 90); - ИначеЕсли ЭлементАдреса.Уровень = 91 Тогда - ДобавитьДополнительныеЭлементыАдреса(АдресРФ, ЭлементАдреса.Значение, 91); - ИначеЕсли ЭлементАдреса.Уровень = -3 Тогда - Продолжить; - ИначеЕсли ЭлементАдреса.Уровень = -1 Тогда - ПочтовыйИндексАдреса(АдресРФ, ЭлементАдреса.Наименование); - Иначе - // Проверка на квартиру или здание. - Тип = СокрЛП(СтрЗаменить(ЭлементАдреса.Наименование, "№", "")); - Если РаботаСАдресамиКлиентСервер.КодСериализацииОбъектаАдресации(Тип) <> Неопределено Тогда - // Вставляем в начало, так как порядок результата запроса у нас обратный. - НоваяСтрока = ТаблицаЗданийПомещений.Вставить(0); - НоваяСтрока.Значение = СокрЛП(СтрЗаменить(ЭлементАдреса.Сокращение, "№", "")); - НоваяСтрока.Тип = Тип; - ЭлементАдреса.Уровень = -3; - КонецЕсли; - - Продолжить; - КонецЕсли; - - Если ЭлементАдреса.Уровень > 0 И ЭлементАдреса.Уровень < 90 Тогда - УстановитьСвойствоПоXPath(АдресРФ, Путь, ЭлементАдреса.Значение); - КонецЕсли; - - КонецЦикла; - - ЗданияИПомещения = Новый Структура("Здания, Помещения", ТаблицаЗданийПомещений, ТаблицаЗданийПомещений); - ЗданияИПомещенияАдреса(АдресРФ, ЗданияИПомещения); - -КонецПроцедуры - -Функция ЧастиАдресаТаблицей(Знач Текст) - - ТипСтрока = Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(128)); - ТипЧисло = Новый ОписаниеТипов("Число"); - - Результат = Новый ТаблицаЗначений; - Колонки = Результат.Колонки; - Колонки.Добавить("Уровень", ТипЧисло); - Колонки.Добавить("Позиция", ТипЧисло); - Колонки.Добавить("Значение", ТипСтрока); - Колонки.Добавить("Наименование", ТипСтрока); - Колонки.Добавить("Сокращение", ТипСтрока); - Колонки.Добавить("Начало", ТипЧисло); - Колонки.Добавить("Длина", ТипЧисло); - Колонки.Добавить("Идентификатор", ТипСтрока); - - Номер = 1; - Для Каждого Часть Из СловаТекстаТаблицей(Текст, "," + Символы.ПС) Цикл - Значение = СокрЛП(Часть.Значение); - Если ПустаяСтрока(Значение) Тогда - Продолжить; - КонецЕсли; - - Строка = Результат.Добавить(); - - Строка.Уровень = 0; - Строка.Позиция = Номер; - Номер = Номер + 1; - - Строка.Начало = Часть.Начало; - Строка.Длина = Часть.Длина; - - Позиция = СтрДлина(Значение); - Пока Позиция > 0 Цикл - Символ = Сред(Значение, Позиция, 1); - Если ПустаяСтрока(Символ) Тогда - Строка.Наименование = СокрЛП(Лев(Значение, Позиция-1)); - Прервать; - КонецЕсли; - Строка.Сокращение = Символ + Строка.Сокращение; - Позиция = Позиция - 1; - КонецЦикла; - - Если ПустаяСтрока(Строка.Наименование) Тогда - Строка.Наименование = СокрЛП(Строка.Сокращение); - Строка.Сокращение = ""; - КонецЕсли; - Строка.Значение = Строка.Наименование + " " + Строка.Сокращение; // Значение; - КонецЦикла; - - Возврат Результат; -КонецФункции - -Функция СловаТекстаТаблицей(Знач Текст, Знач Разделители = Неопределено) - - // Удаление из текста спец. символов "точек", "номеров". - Текст = СтрЗаменить(Текст, "№", ""); - - НачалоСлова = 0; - Состояние = 0; - - ТипСтрока = Новый ОписаниеТипов("Строка"); - ТипЧисло = Новый ОписаниеТипов("Число"); - - Результат = Новый ТаблицаЗначений; - Колонки = Результат.Колонки; - Колонки.Добавить("Значение", ТипСтрока); - Колонки.Добавить("Начало", ТипЧисло); - Колонки.Добавить("Длина", ТипЧисло); - - Для Позиция = 1 По СтрДлина(Текст) Цикл - ТекущийСимвол = Сред(Текст, Позиция, 1); - ЭтоРазделитель = ?(Разделители = Неопределено, ПустаяСтрока(ТекущийСимвол), СтрНайти(Разделители, ТекущийСимвол) > 0); - - Если Состояние = 0 И (Не ЭтоРазделитель) Тогда - НачалоСлова = Позиция; - Состояние = 1; - ИначеЕсли Состояние = 1 И ЭтоРазделитель Тогда - Строка = Результат.Добавить(); - Строка.Начало = НачалоСлова; - Строка.Длина = Позиция-НачалоСлова; - Строка.Значение = Сред(Текст, Строка.Начало, Строка.Длина); - Состояние = 0; - КонецЕсли; - КонецЦикла; - - Если Состояние = 1 Тогда - Строка = Результат.Добавить(); - Строка.Начало = НачалоСлова; - Строка.Длина = Позиция-НачалоСлова; - Строка.Значение = Сред(Текст, Строка.Начало, Строка.Длина) - КонецЕсли; - - Возврат Результат; -КонецФункции - -Функция УровниАдресныхОбъектов(ТипАдресногоОбъекта = "Полный") - Уровни = Новый Массив; - Если ТипАдресногоОбъекта = "Улица" Тогда - Уровни.Добавить(7); - Уровни.Добавить(90); - Уровни.Добавить(91); - ИначеЕсли ТипАдресногоОбъекта = "НаселенныйПункт" Тогда - Уровни.Добавить(1); - Уровни.Добавить(2); - Уровни.Добавить(3); - Уровни.Добавить(4); - Уровни.Добавить(5); - Уровни.Добавить(6); - Иначе - Уровни.Добавить(1); - Уровни.Добавить(2); - Уровни.Добавить(3); - Уровни.Добавить(4); - Уровни.Добавить(5); - Уровни.Добавить(6); - Уровни.Добавить(7); - Уровни.Добавить(90); - Уровни.Добавить(91); - КонецЕсли; - - Возврат Уровни; -КонецФункции - -// Установка глубокого свойства объекта. -Процедура УстановитьСвойствоПоXPath(ОбъектXTDO, XPath, Значение) - - // Переносов строки в XPath не ожидаем. - СтрокаСвойств = СтрЗаменить(СтрЗаменить(XPath, "/", Символы.ПС), Символы.ПС + Символы.ПС, "/"); - - ЧислоСвойств = СтрЧислоСтрок(СтрокаСвойств); - Если ЧислоСвойств = 1 Тогда - ОбъектXTDO.Установить(СтрокаСвойств, Значение); - Возврат; - ИначеЕсли ЧислоСвойств < 1 Тогда - Возврат; - КонецЕсли; - - РодительскийОбъект = Неопределено; - ТекущийОбъект = ОбъектXTDO; - Для Индекс = 1 По ЧислоСвойств Цикл - - ТекущееИмя = СтрПолучитьСтроку(СтрокаСвойств, Индекс); - Если ТекущийОбъект.Установлено(ТекущееИмя) Тогда - РодительскийОбъект = ТекущийОбъект; - ТекущийОбъект = ТекущийОбъект.ПолучитьXDTO(ТекущееИмя); - Иначе - НовыйТип = ТекущийОбъект.Свойства().Получить(ТекущееИмя).Тип; - ТипТипа = ТипЗнч(НовыйТип); - Если ТипТипа = Тип("ТипОбъектаXDTO") Тогда - НовыйОбъект = ФабрикаXDTO.Создать(НовыйТип); - ТекущийОбъект.Установить(ТекущееИмя, НовыйОбъект); - РодительскийОбъект = ТекущийОбъект; - ТекущийОбъект = НовыйОбъект; - ИначеЕсли ТипТипа = Тип("ТипЗначенияXDTO") Тогда - // Непосредственное значение - ТекущийОбъект.Установить(ТекущееИмя, Значение); - РодительскийОбъект = Неопределено; - Прервать; - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Если РодительскийОбъект <> Неопределено Тогда - РодительскийОбъект.Установить(ТекущееИмя, Значение); - КонецЕсли; - -КонецПроцедуры - // Получение глубокого свойства объекта. // -Функция ПолучитьXDTOРеквизитОбъекта(ОбъектXTDO, XPath) Экспорт +Функция ПолучитьXDTOРеквизитОбъекта(ОбъектXTDO, XPath) // Переносов строки в XPath не ожидаем. СтрокаСвойств = СтрЗаменить(СтрЗаменить(XPath, "/", Символы.ПС), Символы.ПС + Символы.ПС, "/"); @@ -2337,7 +1136,7 @@ // Возвращает перечень ошибок для адреса. // // Параметры: -// XDTOАдрес - ОбъектXDTO, СписокЗначений, Строка - описание адреса. +// Адрес - ОбъектXDTO, СписокЗначений, Строка - описание адреса. // ВидИнформации - СправочникСсылка.ВидыКонтактнойИнформации, Структура - ссылка на соответствующий вид // контактной информации. // РезультатГруппами - Булево - если указана Истина, то будет возвращен массив групп ошибок, иначе - список @@ -2360,16 +1159,19 @@ // *** ИмяПоля - Строка - внутренний идентификатор ошибочного элемента адреса. // *** Сообщение - Строка - подробный текст ошибки для этого поля. // -Функция ОшибкиЗаполненияАдресаXDTO(XDTOАдрес, ВидИнформации, РезультатГруппами = Ложь) Экспорт +Функция ОшибкиЗаполненияАдресаXDTO(Знач Адрес, ВидИнформации, РезультатГруппами = Ложь) Экспорт - Если ТипЗнч(XDTOАдрес) = Тип("ОбъектXDTO") Тогда - АдресРФ = XDTOАдрес.Состав; - Иначе - XTDOКонтактная = АдресXMLВXDTO(XDTOАдрес); - Адрес = XTDOКонтактная.Состав; - АдресРФ = ?(Адрес = Неопределено, Неопределено, Адрес.Состав); + Если ТипЗнч(Адрес) = Тип("Строка") Тогда + Адрес = УправлениеКонтактнойИнформациейСлужебный.СтрокаJSONВСтруктуру(Адрес); КонецЕсли; + Если ТипЗнч(Адрес) = Тип("ОбъектXDTO") Тогда + АдресXML = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOВXML(Адрес); + Адрес = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВJSON(АдресXML); + КонецЕсли; + + Результат = ?(РезультатГруппами, Новый Массив, Новый СписокЗначений); + // Флаги проверки Если ТипЗнч(ВидИнформации) = Тип("СправочникСсылка.ВидыКонтактнойИнформации") Тогда ФлагиПроверки = УправлениеКонтактнойИнформациейСлужебный.СтруктураВидаКонтактнойИнформации(ВидИнформации); @@ -2377,10 +1179,37 @@ ФлагиПроверки = ВидИнформации; КонецЕсли; - Если ТипЗнч(АдресРФ) <> Тип("ОбъектXDTO") Или АдресРФ.Тип() <> ФабрикаXDTO.Тип(РаботаСАдресами.ПространствоИмен(), "АдресРФ") Тогда - // Адрес за пределами РФ - Результат = ?(РезультатГруппами, Новый Массив, Новый СписокЗначений); + Если ФлагиПроверки.МеждународныйФорматАдреса Тогда + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(Адрес.addressType) Тогда + + ПредставлениеАдреса = Адрес.value; + Если ВидИнформации.ВключатьСтрануВПредставление Тогда + ПредставлениеАдреса = СтрЗаменить(ПредставлениеАдреса, Адрес.country, ""); + КонецЕсли; + ТолькоЛатиницаВСтроке(ПредставлениеАдреса, Результат, РезультатГруппами); + + Иначе + + ИменаУровней = РаботаСАдресамиКлиентСервер.ИменаУровнейАдреса(Адрес.addressType, Истина); + + Для каждого ИмяУровня Из ИменаУровней Цикл + + ТолькоЛатиницаВСтроке(Адрес[ИмяУровня], Результат, РезультатГруппами); + Если Результат.Количество() > 0 Тогда + Прервать; + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + Возврат Результат; + КонецЕсли; + + Если НЕ УправлениеКонтактнойИнформациейСлужебный.ЭтоНациональныйАдрес(Адрес) Тогда + + // Адрес за пределами РФ Если ФлагиПроверки.ТолькоНациональныйАдрес Тогда ТекстОшибки = НСтр("ru = 'Адрес должен быть только российским.'"); Если РезультатГруппами Тогда @@ -2391,24 +1220,11 @@ КонецЕсли; КонецЕсли; - Если ФлагиПроверки.МеждународныйФорматАдреса Тогда - СтрокаПроверки = СтрЗаменить(АдресРФ, XDTOАдрес.Страна, ""); - Если Не СтроковыеФункцииКлиентСервер.ТолькоЛатиницаВСтроке(СтрокаПроверки, Ложь, "1234567890") Тогда - ТекстОшибки = НСтр("ru = 'Адрес в международном формате должен быть набран латиницей.'"); - Если РезультатГруппами Тогда - Результат.Добавить(Новый Структура("Поля, ТипОшибки, Сообщение", Новый Массив, - "НеТолькоЛатиницаВАдресеМеждународногоФормата", ТекстОшибки)); - Иначе - Результат.Добавить("/", ТекстОшибки).Пометка = Истина; - КонецЕсли; - КонецЕсли; - КонецЕсли; - Возврат Результат; КонецЕсли; // Отдельно проверяем пустой адрес, если необходимо его заполнение. - Если Не УправлениеКонтактнойИнформациейСлужебный.XDTOКонтактнаяИнформацияЗаполнена(АдресРФ) Тогда + Если Не УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияЗаполнена(Адрес) Тогда // Адрес пуст Если ФлагиПроверки.ОбязательноеЗаполнение Тогда // Но должен быть заполнен @@ -2430,20 +1246,14 @@ Возврат ?(РезультатГруппами, Новый Массив, Новый СписокЗначений); КонецЕсли; - ВсеОшибки = ОбщиеГруппыОшибокЗаполненияАдреса(АдресРФ, ФлагиПроверки); - ПроверятьКлассификатор = Истина; + АдресРФ = Неопределено; - Для Каждого Группа Из ВсеОшибки Цикл - Если СтрНайти("НеУказаныСокращенияПолей, НедопустимыеСимволыПолей", Группа.ТипОшибки) > 0 Тогда - // Некорректные данные в полях, проверять их по классификатору нет смысла. - ПроверятьКлассификатор = Ложь; - Прервать; - КонецЕсли - КонецЦикла; + ВсеОшибки = ОбщиеГруппыОшибокЗаполненияАдреса(Адрес, ФлагиПроверки); + ПроверятьКлассификатор = Истина; ОшибкиКлассификатора = Новый СписокЗначений; Если ПроверятьКлассификатор И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - ЗаполнитьОшибкиАдресаПоКлассификатору(АдресРФ, ФлагиПроверки, ОшибкиКлассификатора); + ЗаполнитьОшибкиАдресаПоКлассификатору(Адрес, ФлагиПроверки, ОшибкиКлассификатора); КонецЕсли; Если РезультатГруппами Тогда @@ -2493,6 +1303,20 @@ Возврат Результат; КонецФункции +Процедура ТолькоЛатиницаВСтроке(Значение, Знач Результат, Знач РезультатГруппами) + + Если Не СтроковыеФункцииКлиентСервер.ТолькоЛатиницаВСтроке(Значение, Ложь, "1234567890,") Тогда + ТекстОшибки = НСтр("ru = 'Адрес в международном формате должен быть набран латиницей.'"); + Если РезультатГруппами Тогда + Результат.Добавить(Новый Структура("Поля, ТипОшибки, Сообщение", Новый Массив, + "НеТолькоЛатиницаВАдресеМеждународногоФормата", ТекстОшибки)); + Иначе + Результат.Добавить("/", ТекстОшибки).Пометка = Истина; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + // Общие проверки на корректность адреса. // // Параметры: @@ -2515,28 +1339,6 @@ Функция ОбщиеГруппыОшибокЗаполненияАдреса(Знач ДанныеАдреса, Знач ВидИнформации) Результат = Новый Массив; - Если ТипЗнч(ДанныеАдреса) = Тип("ОбъектXDTO") Тогда - АдресРФ = ДанныеАдреса; - - Иначе - XTDOКонтактная = АдресXMLВXDTO(ДанныеАдреса); - Адрес = XTDOКонтактная.Состав; - Если Не ЭтоНациональныйАдрес(Адрес) Тогда - Возврат Результат; - КонецЕсли; - АдресРФ = Адрес.Состав; - - // С) совпадение представления и набора данных. - Представление = УправлениеКонтактнойИнформациейСлужебный.ПредставлениеАдреса(АдресРФ, ВидИнформации); - Если XTDOКонтактная.Представление <> Представление Тогда - Результат.Добавить(ГруппаОшибокАдреса("ПредставлениеНеСоответствуетНаборуПолей", - НСтр("ru = 'Адрес не соответствует значениям в наборе полей.'"))); - ДобавитьОшибкуЗаполненияАдреса(Результат[0], "", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Представление адреса для вида контактной информации ""%1"" отличается от данных в адресе.'"), - Строка(ВидИнформации.Наименование))); - КонецЕсли; - КонецЕсли; - НеЗаполненыОбязательныеПоля = ГруппаОшибокАдреса("НеЗаполненыОбязательныеПоля", НСтр("ru = 'Не заполнены обязательные поля:'")); Результат.Добавить(НеЗаполненыОбязательныеПоля); @@ -2553,21 +1355,20 @@ НСтр("ru = 'Не соответствует установленной длина полей:'")); Результат.Добавить(НеСоответствуетДлинаПолей); + Возврат Результат; + // 2) Индекс, Регион, Дом должны быть заполнены. - Индекс = ПочтовыйИндексАдреса(АдресРФ); - Если ПустаяСтрока(Индекс) Тогда + Если ПустаяСтрока(ДанныеАдреса.Zipcode) Тогда ДобавитьОшибкуЗаполненияАдреса(НеЗаполненыОбязательныеПоля, РаботаСАдресамиКлиентСервер.XPathПочтовогоИндекса(), НСтр("ru = 'Не указан почтовый индекс.'"), "Индекс"); КонецЕсли; - Регион = АдресРФ.СубъектРФ; + Регион = СокрЛП(ДанныеАдреса.Area + " " + ДанныеАдреса.AreaType); Если ПустаяСтрока(Регион) Тогда ДобавитьОшибкуЗаполненияАдреса(НеЗаполненыОбязательныеПоля, "СубъектРФ", НСтр("ru = 'Не указан регион.'"), "Регион"); КонецЕсли; - ЗданияПомещения = ЗданияИПомещенияАдреса(АдресРФ); - // 3) Регион, Район, Город, НаселенныйПункт, Улица должны: // - иметь сокращение. // - не длинней 50 символов. @@ -2578,7 +1379,7 @@ // Регион Если Не ПустаяСтрока(Регион) Тогда Поле = "СубъектРФ"; - Если ПустаяСтрока(УправлениеКонтактнойИнформациейКлиентСервер.Сокращение(Регион)) Тогда + Если ПустаяСтрока(ДанныеАдреса.AreaType) Тогда ДобавитьОшибкуЗаполненияАдреса(НеУказаныСокращенияПолей, "СубъектРФ", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не указано сокращение в названии региона ""%1"".'"), Регион), НСтр("ru = 'Регион'")); КонецЕсли; @@ -2593,10 +1394,10 @@ КонецЕсли; // Район - Район = РайонАдреса(АдресРФ); + Район = СокрЛП(ДанныеАдреса.District + " " + ДанныеАдреса.DistrictType); Если Не ПустаяСтрока(Район) Тогда - Поле = РаботаСАдресамиКлиентСервер.XPathРайона(); - Если ПустаяСтрока(УправлениеКонтактнойИнформациейКлиентСервер.Сокращение(Район)) Тогда + Поле = "Район"; + Если ПустаяСтрока(ДанныеАдреса.DistrictType) Тогда ДобавитьОшибкуЗаполненияАдреса(НеУказаныСокращенияПолей, Поле, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не указано сокращение в названии района ""%1"".'"), Район), НСтр("ru = 'Район'")); КонецЕсли; @@ -2611,10 +1412,10 @@ КонецЕсли; // Город - Город = АдресРФ.Город; + Город = СокрЛП(ДанныеАдреса.City + " " + ДанныеАдреса.CityType); Если Не ПустаяСтрока(Город) Тогда Поле = "Город"; - Если ПустаяСтрока(УправлениеКонтактнойИнформациейКлиентСервер.Сокращение(Город)) Тогда + Если ПустаяСтрока(ДанныеАдреса.CityType) Тогда ДобавитьОшибкуЗаполненияАдреса(НеУказаныСокращенияПолей, Поле, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не указано сокращение в названии города ""%1"".'"), Город), НСтр("ru = 'Город'")); КонецЕсли; @@ -2629,10 +1430,10 @@ КонецЕсли; // Населенный пункт - НаселенныйПункт = АдресРФ.НаселПункт; + НаселенныйПункт = СокрЛП(ДанныеАдреса.Locality + " " + ДанныеАдреса.LocalityType); Если Не ПустаяСтрока(НаселенныйПункт) Тогда Поле = "НаселПункт"; - Если ПустаяСтрока(УправлениеКонтактнойИнформациейКлиентСервер.Сокращение(НаселенныйПункт)) Тогда + Если ПустаяСтрока(ДанныеАдреса.LocalityType) Тогда ДобавитьОшибкуЗаполненияАдреса(НеУказаныСокращенияПолей, Поле, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не указано сокращение в названии населенного пункта ""%1"".'"), НаселенныйПункт), НСтр("ru = 'Населенный пункт'")); @@ -2650,10 +1451,10 @@ КонецЕсли; // Улица - Улица = АдресРФ.Улица; + Улица = СокрЛП(ДанныеАдреса.Street + " " + ДанныеАдреса.StreetType); Если Не ПустаяСтрока(Улица) Тогда Поле = "Улица"; - Если ПустаяСтрока(УправлениеКонтактнойИнформациейКлиентСервер.Сокращение(Улица)) Тогда + Если ПустаяСтрока(ДанныеАдреса.StreetType) Тогда ДобавитьОшибкуЗаполненияАдреса(НеУказаныСокращенияПолей, Поле, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не указано сокращение в названии улицы ""%1"".'"), Улица), НСтр("ru = 'Улица'")); КонецЕсли; @@ -2667,51 +1468,16 @@ КонецЕсли; КонецЕсли; - // Дополнительный элемент - ДополнительныйЭлемент = НайтиДополнительныйЭлементАдреса(АдресРФ).Значение; - Если ЗначениеЗаполнено(ДополнительныйЭлемент) Тогда - Поле = "Улица"; - Если ПустаяСтрока(УправлениеКонтактнойИнформациейКлиентСервер.Сокращение(ДополнительныйЭлемент)) Тогда - ДобавитьОшибкуЗаполненияАдреса(НеУказаныСокращенияПолей, Поле, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не указано сокращение у дополнительного элемента ""%1"".'"), ДополнительныйЭлемент), - НСтр("ru = 'Улица'")); - КонецЕсли; - Если СтрДлина(Район) > 50 Тогда - ДобавитьОшибкуЗаполненияАдреса(НеСоответствуетДлинаПолей, Поле, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Название дополнительного элемента ""%1"" должно быть короче 50 символов.'"), ДополнительныйЭлемент), - НСтр("ru = 'ДополнительныйЭлемент'")); - КонецЕсли; - Если Не СтроковыеФункцииКлиентСервер.ТолькоКириллицаВСтроке(ДополнительныйЭлемент, Ложь, ДопустимоКромеКириллицы) Тогда - ДобавитьОшибкуЗаполненияАдреса(НедопустимыеСимволыПолей, Поле, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В названии дополнительного элемента ""%1"" есть не кириллические символы.'"), ДополнительныйЭлемент), - НСтр("ru = 'ДополнительныйЭлемент'")); - КонецЕсли; - КонецЕсли; - // 4) Индекс - если есть, то 6 цифр. - Если Не ПустаяСтрока(Индекс) Тогда - Поле = РаботаСАдресамиКлиентСервер.XPathПочтовогоИндекса(); - Если СтрДлина(Индекс) <> 6 Или Не СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(Индекс) Тогда + Если Не ПустаяСтрока(ДанныеАдреса.ZipCode) Тогда + Поле = "Индекс"; + Если СтрДлина(ДанныеАдреса.ZipCode) <> 6 Или Не СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(ДанныеАдреса.ZipCode) Тогда ДобавитьОшибкуЗаполненияАдреса(НеСоответствуетДлинаПолей, Поле, НСтр("ru = 'Почтовый индекс должен состоять из 6 цифр.'"), НСтр("ru = 'Индекс'")); КонецЕсли; КонецЕсли; - // 5) Дом, Корпус, Квартира не длинней 12 символов. - Для Каждого ДанныеЗдания Из ЗданияПомещения.Здания Цикл - Если СтрДлина(ДанныеЗдания.Значение) > 12 Тогда - ДобавитьОшибкуЗаполненияАдреса(НеСоответствуетДлинаПолей, ДанныеЗдания.ПутьXPath, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Значение поля ""%1"" должно быть короче 12 символов.'"), ДанныеЗдания.Тип), ДанныеЗдания.Тип); - КонецЕсли; - КонецЦикла; - Для Каждого ДанныеПомещения Из ЗданияПомещения.Помещения Цикл - Если СтрДлина(ДанныеПомещения.Значение) > 50 Тогда - ДобавитьОшибкуЗаполненияАдреса(НеСоответствуетДлинаПолей, ДанныеПомещения.ПутьXPath, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Значение поля ""%1"" должно быть короче 50 символов.'"), ДанныеПомещения.Тип), ДанныеПомещения.Тип); - КонецЕсли; - КонецЦикла; - // 6) Поля Город и НаселенныйПункт могут быть одновременно пустые только в регионе - городе ФЗ. Если ПустаяСтрока(Город) И ПустаяСтрока(НаселенныйПункт) И ПустаяСтрока(Район) Тогда Если НазванияГородовФедеральногоЗначения().Найти(ВРег(Регион)) = Неопределено Тогда @@ -2725,15 +1491,6 @@ КонецЕсли; // 7) Улица не может быть пустой если НаселенныйПункт пустой. - Если Не ИсключатьПроверкуУлицыВАдресе(АдресРФ) Тогда - - Если ПустаяСтрока(Город) И ПустаяСтрока(НаселенныйПункт) И ПустаяСтрока(Улица) И НЕ ЗначениеЗаполнено(ДополнительныйЭлемент) Тогда - ДобавитьОшибкуЗаполненияАдреса(НеЗаполненыОбязательныеПоля, "Улица", - НСтр("ru = 'Город или населенный пункт должен содержать название улицы.'"), - НСтр("ru = 'Улица'")); - КонецЕсли; - - КонецЕсли; // Все. Убираем пустые результаты, корректируем сообщение группы. Для Индекс = 1-Результат.Количество() По 0 Цикл @@ -2767,19 +1524,10 @@ Группа.Поля.Добавить(Новый Структура("ИмяПоля, Сообщение, СущностьПоля", ИмяПоля, Сообщение, СущностьПоля)); КонецПроцедуры -Процедура ЗаполнитьОшибкиАдресаПоКлассификатору(XDTOАдресРФ, ФлагиПроверки, Результат) +Процедура ЗаполнитьОшибкиАдресаПоКлассификатору(АдресРФ, ФлагиПроверки, Результат) Адреса = Новый Массив; - - Если ФлагиПроверки.ПроверятьПоФИАС Тогда - Адреса.Добавить( Новый Структура("Адрес, ФорматАдреса", XDTOАдресРФ, "ФИАС") ); - ИначеЕсли ФлагиПроверки.ПроверятьКорректность Тогда - Адреса.Добавить( Новый Структура("Адрес, ФорматАдреса", XDTOАдресРФ, "КЛАДР") ); - КонецЕсли; - - Если Адреса.Количество() = 0 Тогда - Возврат; - КонецЕсли; + Адреса.Добавить(Новый Структура("Адрес, ФорматАдреса", АдресРФ, "ФИАС")); МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); РезультатыАнализа = МодульАдресныйКлассификаторСлужебный.РезультатПроверкиАдресовПоКлассификатору(Адреса); @@ -2791,56 +1539,18 @@ // Только уникальные ошибки - мы могли проверить адрес два раза. Обработанные = Новый Соответствие; Для Каждого РезультатПроверки Из РезультатыАнализа.Данные Цикл - - Если РезультатПроверки.Свойство("Исторический") И РезультатПроверки.Исторический Тогда - - Если РезультатПроверки.Варианты.Количество() > 0 Тогда - - ПредставлениеАдреса = ПредставлениеАдреса(Новый Структура("ФорматАдреса", "ФИАС"), РезультатПроверки.Варианты[0].Данные, "Россия"); - - ОписаниеОшибки = Новый Структура("ПутьXPath, СущностьПоля, АдресПроверен", "Представление", "", РезультатПроверки.АдресПроверен); - ШаблонОшибки = НСтр("ru='Адрес некорректный, т.к. он устарел - |Актуальный: %1'"); - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, ПредставлениеАдреса); - Результат.Добавить(ОписаниеОшибки, ТекстОшибки); - - КонецЕсли; - Продолжить; - - КонецЕсли; - - Для Каждого ОшибкаАдреса Из РезультатПроверки.Ошибки Цикл - Ключ = ОшибкаАдреса.Ключ; - Если Обработанные[Ключ] = Неопределено Тогда - Результат.Добавить(Новый Структура("ПутьXPath, СущностьПоля, АдресПроверен", Ключ,, РезультатПроверки.АдресПроверен), - СокрЛП(ОшибкаАдреса.Текст + Символы.ПС + ОшибкаАдреса.Подсказка)); - Обработанные[Ключ] = Истина; - КонецЕсли; - КонецЦикла; - + Для Каждого ОшибкаАдреса Из РезультатПроверки.Ошибки Цикл + Ключ = ОшибкаАдреса.Ключ; + Если Обработанные[Ключ] = Неопределено Тогда + Результат.Добавить(Новый Структура("ПутьXPath, СущностьПоля, АдресПроверен", Ключ,, РезультатПроверки.АдресПроверен), + СокрЛП(ОшибкаАдреса.Текст + Символы.ПС + ОшибкаАдреса.Подсказка)); + Обработанные[Ключ] = Истина; + КонецЕсли; + КонецЦикла; КонецЦикла; КонецПроцедуры -// Локальные исключения при проверке адреса. -// -Функция ИсключатьПроверкуУлицыВАдресе(Знач АдресРФ) - Результат = Ложь; - - // В Зеленограде улицы не проверяем. - Если ВРег(СокрЛП(АдресРФ.СубъектРФ)) = НСтр("ru = 'МОСКВА Г'") И ВРег(СокрЛП(АдресРФ.Город)) = НСтр("ru = 'ЗЕЛЕНОГРАД Г'") Тогда - Результат = Истина; - КонецЕсли; - - // Дополнительные элементы адреса могут быть без улиц. - ДополнительныеЭлементы = ЗначениеДополнительныхЭлементов(АдресРФ); - Если ЗначениеЗаполнено(ДополнительныеЭлементы.ДополнительныйЭлемент) Тогда - Результат = Истина; - КонецЕсли; - - Возврат Результат; -КонецФункции - // Возвращает массив наименований регионов - городов федерального значения. Функция НазванияГородовФедеральногоЗначения() @@ -2866,30 +1576,12 @@ Возврат ИсходнаяСтруктура; КонецФункции -Процедура ЗаполнитьСвойстваXDTOКонтактнойИнформацииДляРасширенныхАдресов(Знач Владелец, Знач Игнорируемые, Знач ПространствоИмен, Знач ТипВладельца) Экспорт - - Если ТипВладельца = ФабрикаXDTO.Тип(ПространствоИмен, "АдресРФ") Тогда - // Игнорируем список с пустыми значениями и возможно непустыми типами. - Список = Владелец.ПолучитьСписок("ДопАдрЭл"); - Если Список <> Неопределено Тогда - Для Каждого СвойствоСписка Из Список Цикл - Если ПустаяСтрока(СвойствоСписка.Значение) Тогда - Игнорируемые.Вставить(СвойствоСписка, Истина); - КонецЕсли; - КонецЦикла; - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - Процедура ЗаполнитьРасширенныеРеквизитыТабличнойЧастиДляАдреса(Знач Адрес, Знач СтрокаТабличнойЧасти) Экспорт - АдресРФ = НациональныйАдрес(Адрес); - Если АдресРФ <> Неопределено Тогда - // Российский адрес - СтрокаТабличнойЧасти.Регион = АдресРФ.СубъектРФ; - СтрокаТабличнойЧасти.Город = АдресРФ.Город; + Если УправлениеКонтактнойИнформациейСлужебный.ЭтоНациональныйАдрес(Адрес) Тогда + // национальный адрес + СтрокаТабличнойЧасти.Регион = Строка(Адрес.Area) + ?(ПустаяСтрока(Адрес.AreaType), "", " " + Адрес.AreaType); + СтрокаТабличнойЧасти.Город = Строка(Адрес.City) + ?(ПустаяСтрока(Адрес.CityType), "", " " + Адрес.CityType); КонецЕсли; КонецПроцедуры @@ -2989,7 +1681,7 @@ КонецЕсли; ДобавитьЗначение(Список, "КодСтраны", КодСтраны); - Если Не ЭтоНациональныйАдрес(XDTOАдрес) Тогда + Если Не РаботаСАдресамиКлиентСервер.ЭтоОсновнаяСтрана(XDTOАдрес.Страна) Тогда Возврат Список; КонецЕсли; @@ -3006,7 +1698,7 @@ ДобавитьЗначение(Список, "Индекс", ПочтовыйИндексАдреса(АдресРФ) ); ДобавитьЗначение(Список, "Регион", АдресРФ.СубъектРФ); - ДобавитьЗначение(Список, "КодРегиона", КодРегиона(АдресРФ.СубъектРФ) ); + ДобавитьЗначение(Список, "КодРегиона", РаботаСАдресами.КодРегиона(АдресРФ.СубъектРФ) ); Если РасширенныйСоставПолей Тогда ДобавитьЗначение(Список, "РегионСокращение", УправлениеКонтактнойИнформациейКлиентСервер.Сокращение(АдресРФ.СубъектРФ)); КонецЕсли; @@ -3158,6 +1850,4 @@ #КонецОбласти -#КонецЕсли - - +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/РасширенныйВводКонтактнойИнформации.mdo b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/РасширенныйВводКонтактнойИнформации.mdo index 317b65cbe..34066bfb9 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/РасширенныйВводКонтактнойИнформации.mdo +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/РасширенныйВводКонтактнойИнформации.mdo @@ -109,6 +109,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/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Form.form b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Form.form index ff5ce4705..a7da42c7d 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Form.form +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Form.form @@ -520,6 +520,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Form.form b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Form.form index 854774881..58782b6db 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Form.form +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Form.form @@ -409,7 +409,6 @@ <dataPath xsi:type="form:DataPath"> <segments>СписокДанных</segments> </dataPath> - <excludedCommands>Choose</excludedCommands> <commandBarLocation>Bottom</commandBarLocation> <autoCommandBar> <name>СписокДанныхКоманднаяПанель</name> diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/НомераСообщенийУзлаПланаОбмена/Form.form b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/НомераСообщенийУзлаПланаОбмена/Form.form index 93a09f3a9..100c8a254 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/НомераСообщенийУзлаПланаОбмена/Form.form +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/НомераСообщенийУзлаПланаОбмена/Form.form @@ -130,6 +130,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <representation>NormalSeparation</representation> <showLeftMargin>true</showLeftMargin> diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Form.form b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Form.form index 870c17e7a..7cabae129 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Form.form @@ -1811,7 +1811,6 @@ <segments>СписокКонстант</segments> </dataPath> <titleLocation>None</titleLocation> - <excludedCommands>Choose</excludedCommands> <items xsi:type="form:FormField"> <name>СписокКонстантНаименование</name> <id>66</id> @@ -2534,7 +2533,6 @@ <dataPath xsi:type="form:DataPath"> <segments>СписокСсылок</segments> </dataPath> - <excludedCommands>Choose</excludedCommands> <items xsi:type="form:FormField"> <name>СписокСсылокСсылкаПредставление</name> <id>21</id> @@ -3300,7 +3298,6 @@ <segments>СписокНаборовЗаписей</segments> </dataPath> <titleLocation>None</titleLocation> - <excludedCommands>Choose</excludedCommands> <items xsi:type="form:FormGroup"> <name>СписокНаборовЗаписейГруппаИзмерений</name> <id>86</id> diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl index c0cd04c4d..cf43fd7ed 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl @@ -1436,14 +1436,12 @@ // Вызов ВычислитьВБезопасномРежиме не требуется, т.к. для вычисления передается строковый литерал. Модуль = Вычислить("ДлительныеОперацииКлиент"); -#Если НЕ ВебКлиент Тогда Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда ВызватьИсключение НСтр("ru = 'Общий модуль ""ДлительныеОперацииКлиент"" не найден.'"); КонецЕсли; -#КонецЕсли Возврат Модуль; - + КонецФункции // Возвращает ссылку на общий модуль "ДлительныеОперации". diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Help/ru.html b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Help/ru.html index bf3fce11a..29843c534 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Help/ru.html +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Help/ru.html @@ -1,6 +1,6 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.18427"></meta></head><body> <p>Предназначена для регистрации изменений данных в программе. Это необходимо для последующей отправки данных при синхронизации в другие программы.</p> -<p>Список можно открыть по команде <strong>Еще -</strong> <strong>Состав отправляемых данных</strong> из списка <a href="CommonForm.СинхронизацияДанных/Help">Синхронизации данных</a>.</p> +<p>Список можно открыть с помощью кнопки <img src="StdPicture.InputFieldOpen"></img> или по команде <strong>Еще -</strong> <strong>Состав отправляемых данных</strong> из списка <a href="CommonForm.СинхронизацияДанных/Help">Синхронизации данных</a>.</p> <p>Ведется регистрация номеров сообщений. Нажмите на ссылку с номерами сообщений, чтобы просмотреть их или исправить. </p> <p>Список состоит из двух частей: </p> <ul><li>левая часть состоит из двух колонок: diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl index c80bbc1e5..857c6b702 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl @@ -1474,7 +1474,7 @@ Выборка = Характеристики.Менеджер.Выбрать(); Пока Выборка.Следующий() Цикл - МодульОбменДаннымиСобытия.ЗарегистрироватьИзмененияДанных(Узел, Выборка.Ссылка, ЭтотОбъект.НастройкаКонтрольВыгрузкиОбъектов); + МодульОбменДаннымиСобытия.ЗарегистрироватьИзмененияДанных(Узел, Выборка.Ссылка, НастройкаКонтрольВыгрузкиОбъектов); КонецЦикла; ИначеЕсли Характеристики.ЭтоНабор Тогда @@ -1508,13 +1508,13 @@ КонецЕсли; ИначеЕсли Характеристики.ЭтоКонстанта Тогда Выборка = Характеристики.Менеджер.СоздатьМенеджерЗначения(); - МодульОбменДаннымиСобытия.ЗарегистрироватьИзмененияДанных(Узел, Выборка, ЭтотОбъект.НастройкаКонтрольВыгрузкиОбъектов); + МодульОбменДаннымиСобытия.ЗарегистрироватьИзмененияДанных(Узел, Выборка, НастройкаКонтрольВыгрузкиОбъектов); КонецЕсли; Возврат; КонецЕсли; // Обычный объект - МодульОбменДаннымиСобытия.ЗарегистрироватьИзмененияДанных(Узел, ОбъектРегистрации, ЭтотОбъект.НастройкаКонтрольВыгрузкиОбъектов); + МодульОбменДаннымиСобытия.ЗарегистрироватьИзмененияДанных(Узел, ОбъектРегистрации, НастройкаКонтрольВыгрузкиОбъектов); КонецПроцедуры // Возвращает управляемую форму, которой принадлежит элемент. diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Form.form b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Form.form index deaaa0d24..481d651bd 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Form.form +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Form.form @@ -96,6 +96,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -326,6 +327,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Form.form b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Form.form index 258f064e5..c1f25eefa 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Form.form +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Form.form @@ -100,6 +100,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -200,6 +201,7 @@ </extendedTooltip> <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> + <group>HorizontalIfPossible</group> <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> @@ -1502,6 +1504,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -1740,6 +1743,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -1768,6 +1772,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -1892,6 +1897,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Form.form b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Form.form index 92f109cff..3f815d107 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Form.form +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Form.form @@ -441,6 +441,7 @@ </extendedTooltip> <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> + <group>HorizontalIfPossible</group> <showTitle>auto</showTitle> <scrollOnCompress>false</scrollOnCompress> </extInfo> @@ -629,6 +630,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <representation>NormalSeparation</representation> <showLeftMargin>true</showLeftMargin> @@ -687,6 +689,7 @@ </extendedTooltip> <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> + <group>HorizontalIfPossible</group> <showTitle>auto</showTitle> <scrollOnCompress>false</scrollOnCompress> </extInfo> @@ -809,6 +812,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -1017,6 +1021,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>AlwaysHorizontal</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -1074,6 +1079,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>AlwaysHorizontal</group> <behavior>Auto</behavior> <representation>NormalSeparation</representation> <showLeftMargin>true</showLeftMargin> @@ -1209,6 +1215,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -1304,6 +1311,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>AlwaysHorizontal</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Module.bsl b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Module.bsl index 9bee181e1..086f58524 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Module.bsl +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Module.bsl @@ -8,6 +8,10 @@ Возврат; КонецЕсли; + Если Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда + ВызватьИсключение НСтр("ru = 'Резервное копирование и восстановление данных необходимо настроить средствами операционной системы или другими сторонними средствами.'"); + КонецЕсли; + Если Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда Возврат; // Отказ устанавливается в ПриОткрытии(). КонецЕсли; @@ -44,13 +48,6 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) - Если Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда - Отказ = Истина; - ТекстСообщения = НСтр("ru = 'Резервное копирование доступно только в клиенте под управлением ОС Windows.'"); - ПоказатьПредупреждение(,ТекстСообщения); - Возврат; - КонецЕсли; - #Если ВебКлиент Тогда Элементы.ГруппаComcntrФайловыйРежим.Видимость = Ложь; #КонецЕсли @@ -200,7 +197,7 @@ Процедура ВыбратьФайлРезервнойКопии() ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); - ДиалогОткрытияФайла.Фильтр = НСтр("ru = 'Резервная копия базы (*.1cd)|*.zip;*.1cd'"); + ДиалогОткрытияФайла.Фильтр = НСтр("ru = 'Резервная копия базы (*.zip, *.1CD)|*.zip;*.1cd'"); ДиалогОткрытияФайла.Заголовок= НСтр("ru = 'Выберите файл резервной копии'"); ДиалогОткрытияФайла.ПроверятьСуществованиеФайла = Истина; diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Form.form b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Form.form index 3d3fa000e..230d1a26b 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Form.form +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Form.form @@ -485,6 +485,7 @@ </extendedTooltip> <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> + <group>AlwaysHorizontal</group> <showTitle>auto</showTitle> <scrollOnCompress>false</scrollOnCompress> </extInfo> @@ -699,6 +700,7 @@ </extendedTooltip> <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> + <group>AlwaysHorizontal</group> <showTitle>auto</showTitle> <scrollOnCompress>false</scrollOnCompress> </extInfo> @@ -822,6 +824,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -1009,6 +1012,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>AlwaysHorizontal</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -1214,6 +1218,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>AlwaysHorizontal</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -1537,6 +1542,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>AlwaysHorizontal</group> <behavior>Auto</behavior> <representation>NormalSeparation</representation> <showLeftMargin>true</showLeftMargin> @@ -1640,6 +1646,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -1796,6 +1803,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>AlwaysHorizontal</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Help/ru.html b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Help/ru.html index af27028ab..abafe3590 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Help/ru.html +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Help/ru.html @@ -2,7 +2,8 @@ <p>Предназначена для создания резервной копии информационной базы.</p> <p>Рекомендуется создавать резервные копии перед любой операцией в программе, которая может необратимо изменить большие объемы данных, например, перед групповым изменением реквизитов объектов программы. В этом случае необходимо выполнить резервное копирование в ручном режиме.</p> <p>Открывается по команде <strong>Создание резервной копии</strong> из раздела <strong>Администрирование - Обслуживание - Резервное копирование и восстановление</strong>.</p> -<h3>Создание резервной копии</h3> +<h3>Ограничения</h3> +<ul><li><strong>Внимание!</strong> Резервное копирование не поддерживается в случае, если пользователь <strong>Администратор</strong>, от лица которого запускается резервное копирование,  имеет аутентификацию операционной системы.</li></ul><h3>Создание резервной копии</h3> <ul><li>В верхней части окна выводится информация о том, когда последний раз выполнялось резервное копирование. </li><li>С помощью кнопки <img src="StdPicture.InputFieldSelect"></img> <strong>Выбрать</strong> в поле <strong>Каталог для сохранения резервной копии</strong> (обязательное поле для заполнения) укажите папку, в которую программа сохранит резервную копию информационной базы. Рекомендуется выполнять резервное копирование на другой компьютер или внешний носитель. </li><li>Если в программе имеются <a href="DataProcessor.АктивныеПользователи/Help">текущие сеансы</a>, программа выводит предупреждение об этом. Перейдите по ссылке, для того чтобы <strong>Посмотреть список активных сеансов</strong>. Работу пользователей в программе необходимо <a href="DataProcessor.БлокировкаРаботыПользователей/Help">завершить</a>. diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Module.bsl b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Module.bsl index 4ca2f4397..be94e3dfe 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Module.bsl +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Module.bsl @@ -15,7 +15,7 @@ КонецЕсли; Если Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда - Возврат; // Отказ устанавливается в ПриОткрытии(). + ВызватьИсключение НСтр("ru = 'Резервное копирование и восстановление данных необходимо настроить средствами операционной системы или другими сторонними средствами.'"); КонецЕсли; Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда @@ -97,13 +97,6 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) - Если Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда - Отказ = Истина; - ТекстСообщения = НСтр("ru = 'Резервное копирование доступно только в клиенте под управлением ОС Windows.'"); - ПоказатьПредупреждение(,ТекстСообщения); - Возврат; - КонецЕсли; - ПерейтиНаСтраницу(Элементы.СтраницыПомощника.ТекущаяСтраница); #Если ВебКлиент Тогда diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/ДопФайлРезервногоКопирования/Template.txt b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/ДопФайлРезервногоКопирования/Template.txt index f73c993ce..72d9fc477 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/ДопФайлРезервногоКопирования/Template.txt +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/ДопФайлРезервногоКопирования/Template.txt @@ -24,35 +24,28 @@ var EVENT_CRITICAL = 1; var EVENT_WARNING = 2; var EVENT_INFO = 4; - -function format(str) -{ - for(var i = 1; i < arguments.length; i++) - { - str = str.replace("{" + (i - 1) + "}", arguments[i]); - } - return str; +function format(str) { + for (var i = 1; i < arguments.length; i++) { + str = str.replace("{" + (i - 1) + "}", arguments[i]); + } + return str; } -function SWtoString(SW_flag) -{ - switch (SW_flag) - { - case SW_HIDE: return "SW_HIDE"; - case SW_SHOWNORMAL: return "SW_SHOWNORMAL"; - case SW_SHOWMINIMIZED: return "SW_SHOWMINIMIZED"; - case SW_SHOWMAXIMIZED: return "SW_SHOWMAXIMIZED"; - case SW_MAXIMIZE: return "SW_MAXIMIZE"; - case SW_SHOWNOACTIVATE: return "SW_SHOWNOACTIVATE"; - case SW_SHOW: return "SW_SHOW"; - case SW_MINIMIZE: return "SW_MINIMIZE"; - case SW_SHOWMINNOACTIVE: return "SW_SHOWMINNOACTIVE"; - case SW_SHOWNA: return "SW_SHOWNA"; - case SW_RESTORE: return "SW_RESTORE"; - case SW_SHOWDEFAULT: return "SW_SHOWDEFAULT"; - default: - return format("N/A: {0}", SW_flag); - } +function SWtoString(SW_flag) { + switch (SW_flag) { + case SW_HIDE: return "SW_HIDE"; + case SW_SHOWNORMAL: return "SW_SHOWNORMAL"; + case SW_SHOWMINIMIZED: return "SW_SHOWMINIMIZED"; + case SW_SHOWMAXIMIZED: return "SW_SHOWMAXIMIZED"; + case SW_MAXIMIZE: return "SW_MAXIMIZE"; + case SW_SHOWNOACTIVATE: return "SW_SHOWNOACTIVATE"; + case SW_SHOW: return "SW_SHOW"; + case SW_MINIMIZE: return "SW_MINIMIZE"; + case SW_SHOWMINNOACTIVE: return "SW_SHOWMINNOACTIVE"; + case SW_SHOWNA: return "SW_SHOWNA"; + case SW_RESTORE: return "SW_RESTORE"; + case SW_SHOWDEFAULT: return "SW_SHOWDEFAULT"; + default: + return format("N/A: {0}", SW_flag); + } } - - diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/ЗаставкаВосстановления/Template.txt b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/ЗаставкаВосстановления/Template.txt index 88f305b5c..e8bef93f2 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/ЗаставкаВосстановления/Template.txt +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/ЗаставкаВосстановления/Template.txt @@ -1,164 +1,156 @@ <!DOCTYPE html> <html> + <head> - <meta http-equiv="Content-Type" content="application/hta; charset=UTF-16"> - <meta http-equiv="x-ua-compatible" content="IE=EmulateIE7"> - <hta:application id="oHTA" - border="none" - caption="no" - contextmenu="no" - selection="no" - icon="splash.ico" - innerborder="no" - navigable="yes" - showintaskbar="yes" - scroll="no" - version="1.0.0.0" /> - <title>Восстановление данных из резервной копии... - - - + + + function ClearTempFiles () { + // Удаляем временные файлы + try { + oFileSystemObject.DeleteFile(thisFileDir + '\\main.js') + oFileSystemObject.DeleteFile(thisFileDir + '\\helpers.js') + oFileSystemObject.DeleteFile(thisFileDir + '\\splash.png') + oFileSystemObject.DeleteFile(thisFileDir + '\\splash.ico') + oFileSystemObject.DeleteFile(thisFileDir + '\\progress.gif') + oFileSystemObject.DeleteFile(thisFileDir + '\\splash.hta') + oFileSystemObject.DeleteFile(TempCatalog + '\\1Cv8.1CD') + oFileSystemObject.DeleteFile(thisFileDir + '\\templog.txt') + } catch (e) { } + } + + -
        - -
        -
        + +
        +
        - Пожалуйста, подождите.
        - Выполняется восстановление базы данных
        - из резервной копии.
        - Не рекомендуется останавливать процесс. -
        -
        -   -
        +   + + \ No newline at end of file diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/ЗаставкаРезервногоКопирования/Template.txt b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/ЗаставкаРезервногоКопирования/Template.txt index 1113f01d1..090c73d4c 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/ЗаставкаРезервногоКопирования/Template.txt +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/ЗаставкаРезервногоКопирования/Template.txt @@ -1,163 +1,153 @@ + - - - - Резервное копирование информационной базы... - - - + + + function ClearTempFiles () { + // Удаляем временные файлы + try { + oFileSystemObject.DeleteFile(thisFileDir + '\\main.js') + oFileSystemObject.DeleteFile(thisFileDir + '\\helpers.js') + oFileSystemObject.DeleteFile(thisFileDir + '\\splash.png') + oFileSystemObject.DeleteFile(thisFileDir + '\\splash.ico') + oFileSystemObject.DeleteFile(thisFileDir + '\\progress.gif') + oFileSystemObject.DeleteFile(thisFileDir + '\\splash.hta') + oFileSystemObject.DeleteFile(thisFileDir + '\\templog.txt') + } catch (e) { } + } + + -
        - -
        -
        + +
        +
        - Пожалуйста, подождите.
        - Выполняется резервное копирование базы.
        - Не рекомендуется останавливать процесс. -
        -
        -   -
        +   + + diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаЗагрузкаИБ/Template.txt b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаЗагрузкаИБ/Template.txt index 779b4fa0d..f1f732a07 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаЗагрузкаИБ/Template.txt +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаЗагрузкаИБ/Template.txt @@ -1,451 +1,398 @@ #Область ОбластьПараметров // Параметры процедуры обновления -var now = new Date(); -var outFileName = "log" + now.valueOf() + ".txt"; // Путь к log-файлу +var now = new Date() +var outFileName = 'log' + now.valueOf() + '.txt' // Путь к log-файлу -var TempCatalog = [КаталогВременныхФайлов]; // каталог для копирования .cd файла при доп. копировании. -var v8exe = [ИмяИсполняемогоФайлаПрограммы]; // Путь к исполняемому файлу 1С:Предприятия 8 -var infoBasePath = [ПараметрПутиКИнформационнойБазе]; -var BaseFileName = [СтрокаПутиКФайлуИнформационнойБазы]; -var connectionString = [СтрокаСоединенияИнформационнойБазы] + ';С="РазрешитьРаботуПользователей"; UC=РезервноеКопирование'; -var adminName = [ИмяАдминистратораОбновления]; // имя администратора, инициировавшего обновление -var backupFileName = [ФайлРезервнойКопии]; // Файл резервной копии -var eventLogID = [СобытиеЖурналаРегистрации]; -var comConnectorName = [ИмяCOMСоединителя]; // имя COM-класса для работы с 1С:Предприятием 8 через COM-соединение -var useComConnector = [ИспользоватьCOMСоединитель]; // флаг использования COM-соединения для работы с 1С:Предприятием 8 -var tempLogFileName = "templog.txt"; -var retryCount = 0; +var TempCatalog = [КаталогВременныхФайлов] // каталог для копирования .cd файла при доп. копировании. +var v8exe = [ИмяИсполняемогоФайлаПрограммы] // Путь к исполняемому файлу 1С:Предприятия 8 +var infoBasePath = [ПараметрПутиКИнформационнойБазе] +var BaseFileName = [СтрокаПутиКФайлуИнформационнойБазы] +var connectionString = [СтрокаСоединенияИнформационнойБазы] + ';С="РазрешитьРаботуПользователей"; UC=РезервноеКопирование' +var adminName = [ИмяАдминистратораОбновления] // имя администратора, инициировавшего обновление +var backupFileName = [ФайлРезервнойКопии] // Файл резервной копии +var eventLogID = [СобытиеЖурналаРегистрации] +var comConnectorName = [ИмяCOMСоединителя] // имя COM-класса для работы с 1С:Предприятием 8 через COM-соединение +var useComConnector = [ИспользоватьCOMСоединитель] // флаг использования COM-соединения для работы с 1С:Предприятием 8 +var tempLogFileName = 'templog.txt' +var retryCount = 0 #КонецОбласти #Область ОбластьРезервногоКопирования -// Инициализация -var oFileSystemObject = new ActiveXObject("Scripting.FileSystemObject"); - -var thisFileName; -var thisFileDir; -var InfoBasePassword; - -thisFileName = eval("oHTA.commandLine"); -thisFileDir = thisFileName.substr(1, thisFileName.lastIndexOf("\\") - 1); -InfoBasePassword = thisFileName.substr(thisFileName.indexOf("[p1]") + 4, thisFileName.indexOf("[/p1]") - thisFileName.indexOf("[p1]") - 4); -InfoBasePassword = fromUnicode(InfoBasePassword); -thisFileName = thisFileName.substr(1, thisFileName.indexOf("[p1]") - 3); - -var infoBaseAuthorization = format('/N\"{0}\" /P\"{1}\" /WA-', adminName, InfoBasePassword); -connectionString = format(connectionString, adminName, InfoBasePassword); - -var oShell = new ActiveXObject("WScript.Shell"); -var oShellApplication = new ActiveXObject("Shell.Application"); -oShell.CurrentDirectory = thisFileDir; - -var errorMarker = "{ERR}"; -var successMarker = "{OK }"; - -// Переменные состояния -var backupCreated = false; -var logging1C = false; -var ComConnection = null; - -// Открыть файл sFilePath. -function runApp(sFilePath, sFileArgs, show, bWaitOnReturn) -{ - if (bWaitOnReturn == undefined) - bWaitOnReturn = false; - if (show == undefined) - show = SW_SHOW; - if (sFileArgs == undefined) - sFileArgs = ""; - var ret = -1; - log(format("Запускается: {0}; параметры: {1}; окно: {2}; ожидание: {3}", - sFilePath, sFileArgs, SWtoString(show), bWaitOnReturn)); - if (oFileSystemObject.FileExists(sFilePath)) - { - try - { - ret = oShell.Run(format('"{0}" {1}', sFilePath, sFileArgs), show, bWaitOnReturn); - } - catch(e) - { - log(format("Исключение в runApp: {0}, {1}.", e.name, e.message), true); - return -1; - } - log(format("Код возврата: {0}", ret), ret != 0); - return ret; - } - else - log(format("Запускаемый файл не существует: {0}", sFilePath), true); - return ret; +if (useComConnector) { + var comConnectorCached = new ActiveXObject(comConnectorName) // для защиты от перерегистрации comConnector из других сеансов } -function clearLogFile() -{ - var outFile = oFileSystemObject.OpenTextFile(outFileName, ForWriting, true, TristateTrue); - outFile.Close(); +// Инициализация +var oFileSystemObject = new ActiveXObject('Scripting.FileSystemObject') + +var thisFileName +var thisFileDir +var InfoBasePassword + +thisFileName = eval('oHTA.commandLine') +thisFileDir = thisFileName.substr(1, thisFileName.lastIndexOf('\\') - 1) +InfoBasePassword = thisFileName.substr(thisFileName.indexOf('[p1]') + 4, thisFileName.indexOf('[/p1]') - thisFileName.indexOf('[p1]') - 4) +InfoBasePassword = fromUnicode(InfoBasePassword) +thisFileName = thisFileName.substr(1, thisFileName.indexOf('[p1]') - 3) + +var infoBaseAuthorization = format('/N"{0}" /P"{1}" /WA-', adminName, InfoBasePassword) +connectionString = format(connectionString, adminName, InfoBasePassword) + +var oShell = new ActiveXObject('WScript.Shell') +var oShellApplication = new ActiveXObject('Shell.Application') +oShell.CurrentDirectory = thisFileDir + +var errorMarker = '{ERR}' +var successMarker = '{OK }' + +// Переменные состояния +var logging1C = false +var ComConnection = null + +// Открыть файл sFilePath. +function runApp (sFilePath, sFileArgs, show, bWaitOnReturn) { + if (bWaitOnReturn === undefined) { + bWaitOnReturn = false + } + if (show === undefined) { + show = SW_SHOW + } + if (sFileArgs === undefined) { + sFileArgs = '' + } + var ret = -1 + log(format('Запускается: {0}; параметры: {1}; окно: {2}; ожидание: {3}', + sFilePath, sFileArgs, SWtoString(show), bWaitOnReturn)) + if (oFileSystemObject.FileExists(sFilePath)) { + try { + ret = oShell.Run(format('"{0}" {1}', sFilePath, sFileArgs), show, bWaitOnReturn) + } catch (e) { + log(format('Исключение в runApp: {0}, {1}.', e.name, e.message), true) + return -1 + } + log(format('Код возврата: {0}', ret), ret !== 0) + return ret + } else { + log(format("Запускаемый файл не существует: {0}", sFilePath), true) + } + return ret +} + +function clearLogFile () { + var outFile = oFileSystemObject.OpenTextFile(outFileName, ForWriting, true, TristateTrue) + outFile.Close() } // Записать текст в лог -function log(text, failed) -{ - if (failed == undefined) - failed = false; - logFile(text, failed); +function log (text, failed) { + if (failed === undefined) { + failed = false + } + logFile(text, failed) } // Записать текст в лог-файл -function logFile(text, failed) -{ - var now = new Date(); - var f; - try - { - f = oFileSystemObject.OpenTextFile(outFileName, ForAppending, true, TristateTrue); - } - catch(e) { return; } - try - { - var status = (failed == false ? successMarker : errorMarker); - f.WriteLine(format("{0} {1} {2}", now, status, text)); - } - finally - { - try - { - f.Close(); - } - catch(e) { return; } - } +function logFile (text, failed) { + var now = new Date() + var f + try { + f = oFileSystemObject.OpenTextFile(outFileName, ForAppending, true, TristateTrue) + } catch (e) { return } + try { + var status = (failed === false ? successMarker : errorMarker) + f.WriteLine(format('{0} {1} {2}', now, status, text)) + } finally { + try { + f.Close() + } catch (e) { } + } } // Записать текст из временного лог-файла -function appendLog() -{ - var f; - var outf; - var text; - try - { - f = oFileSystemObject.OpenTextFile(tempLogFileName, ForReading, false, TristateFalse); - outf = oFileSystemObject.OpenTextFile(outFileName, ForAppending, true, TristateTrue); - } - catch(e) { return; } - try - { - var oldAtEndOfStream = f.AtEndOfStream; - if (!oldAtEndOfStream) - { - text = f.ReadAll(); - outf.WriteLine(text); - } - } - finally - { - try - { - f.Close(); - outf.Close(); - } - catch(e) { return; } +function appendLog () { + var f + var outf + var text + try { + f = oFileSystemObject.OpenTextFile(tempLogFileName, ForReading, false, TristateFalse) + outf = oFileSystemObject.OpenTextFile(outFileName, ForAppending, true, TristateTrue) + } catch (e) { return } + try { + var oldAtEndOfStream = f.AtEndOfStream + if (!oldAtEndOfStream) { + text = f.ReadAll() + outf.WriteLine(text) } + } finally { + try { + f.Close() + outf.Close() + } catch (e) { } + } } // Записать текст в журнал регистрации -function log1C(text, failed) -{ - if (logging1C) - return; - var connection = createConnection(); - if (connection == null) - return; - try - { - log1CInternal(connection, text, failed); - } - finally - { - connection = null; - } +function log1C (text, failed) { + if (logging1C) { + return + } + var connection = createConnection() + if (connection == null) { + return + } + try { + log1CInternal(connection, text, failed) + } finally { + connection = null + } } // Записать текст в журнал регистрации -function log1CInternal(connection, text, failed) -{ - if (logging1C) - return; - logging1C = true; - try - { - try - { - var eventLogLevel = failed ? connection.EventLogLevel.Error : connection.EventLogLevel.Information; - connection.WriteLogEvent(eventLogID, eventLogLevel, null, null, text, - connection.EventLogEntryTransactionMode.Independent); - } - catch(e) - { - log(format("Исключение в log1CInternal: {0}, {1}.", e.name, e.message), true); - return; - } - } - finally - { - logging1C = false; +function log1CInternal (connection, text, failed) { + if (logging1C) { + return + } + logging1C = true + try { + try { + var eventLogLevel = failed ? connection.EventLogLevel.Error : connection.EventLogLevel.Information + connection.WriteLogEvent(eventLogID, eventLogLevel, null, null, text, + connection.EventLogEntryTransactionMode.Independent) + } catch (e) { + log(format('Исключение в log1CInternal: {0}, {1}.', e.name, e.message), true) + return } + } finally { + logging1C = false + } } // Инициализация -function initialize() -{ - clearLogFile(); - appendLog(); - log(format("Файл скрипта: {0}", thisFileName)); - return 0; +function initialize () { + clearLogFile() + appendLog() + log(format('Файл скрипта: {0}', thisFileName)) + return 0 } // Финализация -function finalize(success) -{ - if (success == undefined) - success = false; +function finalize (success) { + if (success === undefined) { + success = false + } - // Запись результата обновления в Event Log - writeEventLog(success); + // Запись результата обновления в Event Log + writeEventLog(success) - if (!success) - { - allowConnections(); // Разрешение подключений - } + if (!success) { + allowConnections() // Разрешение подключений + } - write1CEventLog(); // Запись всей информации из log-файла в журнал регистрации - setResult(success); + write1CEventLog() // Запись всей информации из log-файла в журнал регистрации + setResult(success) - // очистка глобального COM-соединения - ComConnection = null; + // очистка глобального COM-соединения + ComConnection = null } -function createConnection() -{ - if (!useComConnector) - return null; +function createConnection () { + if (!useComConnector) { + return null + } - if (ComConnection != null) - return ComConnection; + if (ComConnection != null) { + return ComConnection + } - try { - log("Начат сеанс внешнего соединения с ИБ", false); - logstep = "new ActiveXObject COMConnector"; - var ComConnector = new ActiveXObject(comConnectorName); - logstep = "comConnector.Connect"; - ComConnection = ComConnector.Connect(connectionString); - logstep = "new SystemInfo"; - systemInfo = ComConnection.NewObject("SystemInfo"); - logstep = "SystemInfo.AppVersion"; - appVersion = systemInfo.AppVersion; - logstep = "SystemInfo.PlatformType"; - platformType = systemInfo.PlatformType; - logstep = "Проверка ComConnection.PlatformType"; - platformTypeString = "<Неопределена>"; - if (platformType === ComConnection.PlatformType.Windows_x86) - platformTypeString = "32 bit"; - if (platformType === ComConnection.PlatformType.Windows_x86_64) - platformTypeString = "64 bit"; - log(format("Версия comcntr: {0} {1}", appVersion, platformTypeString), false); - return ComConnection; + try { + log('Начат сеанс внешнего соединения с ИБ', false) + var logstep = 'new ActiveXObject COMConnector' + var ComConnector = new ActiveXObject(comConnectorName) + logstep = 'comConnector.Connect' + ComConnection = ComConnector.Connect(connectionString) + logstep = 'new SystemInfo' + var systemInfo = ComConnection.NewObject('SystemInfo') + logstep = 'SystemInfo.AppVersion' + var appVersion = systemInfo.AppVersion + logstep = 'SystemInfo.PlatformType' + var platformType = systemInfo.PlatformType + logstep = 'Проверка ComConnection.PlatformType' + var platformTypeString = '<Неопределена>' + if (platformType === ComConnection.PlatformType.Windows_x86) { + platformTypeString = '32 bit' } - catch (e) { - log(format("Исключение в createConnection на шаге: {0}, {1}, {2}", logstep, e.name, e.message), true); - return null; + if (platformType === ComConnection.PlatformType.Windows_x86_64) { + platformTypeString = '64 bit' } + log(format('Версия comcntr: {0} {1}', appVersion, platformTypeString), false) + return ComConnection + } catch (e) { + log(format('Исключение в createConnection на шаге: {0}, {1}, {2}', logstep, e.name, e.message), true) + return null + } } // Записать весь log-файл в журнал регистрации -function write1CEventLog() -{ - if (!oFileSystemObject.FileExists(outFileName)) - return; - - var connection = createConnection(); - if (connection == null) - return; - try - { - var f = oFileSystemObject.OpenTextFile(outFileName, ForReading, false, TristateTrue); - - var text; - while (!f.AtEndOfStream) - { - text = f.ReadLine(); - while ((text.indexOf(successMarker) < 0) && (text.indexOf(errorMarker) < 0) && !f.AtEndOfStream) - text += "\n" + f.ReadLine(); +function write1CEventLog () { + if (!oFileSystemObject.FileExists(outFileName)) { + return + } - var failed = text.indexOf(errorMarker) > 0; - log1CInternal(connection, text, failed); - } - } - catch(e) - { - log(format("Исключение в write1CEventLog: {0}, {1}.", e.name, e.message), true); - return; - } - finally - { - connection = null; + var connection = createConnection() + if (connection == null) { + return + } + try { + var f = oFileSystemObject.OpenTextFile(outFileName, ForReading, false, TristateTrue) + + var text + while (!f.AtEndOfStream) { + text = f.ReadLine() + while ((text.indexOf(successMarker) < 0) && (text.indexOf(errorMarker) < 0) && !f.AtEndOfStream) { + text += '\n' + f.ReadLine() + } + + var failed = text.indexOf(errorMarker) > 0 + log1CInternal(connection, text, failed) } + } catch (e) { + log(format('Исключение в write1CEventLog: {0}, {1}.', e.name, e.message), true) + return + } finally { + connection = null + } } -function doSetResult(success) -{ - var connection = createConnection(); - if (connection == null) - return (useComConnector ? 1 : 0); - var res = 0; - try - { - connection.РезервноеКопированиеИБСервер.ЗавершитьВосстановление(success); - - } - catch(e) - { - log(format("Исключение при вызове РезервноеКопированиеИБСервер.ЗавершитьВосстановление: {0}, {1}.", e.name, e.message), true); - res = 2; - } - return res; +function doSetResult (success) { + var connection = createConnection() + if (connection == null) { + return (useComConnector ? 1 : 0) + } + var res = 0 + try { + connection.РезервноеКопированиеИБСервер.ЗавершитьВосстановление(success) + } catch (e) { + log(format('Исключение при вызове РезервноеКопированиеИБСервер.ЗавершитьВосстановление: {0}, {1}.', e.name, e.message), true) + res = 2 + } + return res } - -// Передать в приложение результат выполнения -function setResult(success) -{ - - var result = doSetResult(success); - CollectGarbage(); // освобождает соединения с COM-объектом - return result; +// Передать в приложение результат выполнения +function setResult (success) { + var result = doSetResult(success) + CollectGarbage() // освобождает соединения с COM-объектом + return result } // Записать результат выполнения процедуры обновления в Event Log -function writeEventLog(success) -{ - try - { - var eventKind = success ? EVENT_SUCCESS : EVENT_CRITICAL; - var message; - if (success) - message = "Восстановление информационной базы прошло успешно."; - else - message = "Ошибка при восстановлении информационной базы."; - message += format(" Параметры информационной базы: {0}.", infoBasePath); - if (!success) - message += " Протокол восстановления сохранен в журнал регистрации."; - oShell.LogEvent(eventKind, message); +function writeEventLog (success) { + try { + var eventKind = success ? EVENT_SUCCESS : EVENT_CRITICAL + var message + if (success) { + message = 'Восстановление информационной базы прошло успешно.'; + } else { + message = 'Ошибка при восстановлении информационной базы.'; } - catch(e) - { - log(format("Исключение в writeEventLog: {0}, {1}.", e.name, e.message), true); + message += format(' Параметры информационной базы: {0}.', infoBasePath) + if (!success) { + message += ' Протокол восстановления сохранен в журнал регистрации.'; } + oShell.LogEvent(eventKind, message) + } catch (e) { + log(format('Исключение в writeEventLog: {0}, {1}.', e.name, e.message), true) + } } // Восстановление информационной базы из резервной копии -function restoreDB() -{ - // сначала переместим cd-файл базы во временный каталог - try - { - if (oFileSystemObject.FileExists(TempCatalog + '1Cv8.1CD')) { - oFileSystemObject.DeleteFile(TempCatalog + '1Cv8.1CD'); - } - var FileObject = oFileSystemObject.GetFile(BaseFileName + '1Cv8.1CD'); - FileObject.Move(TempCatalog); - } - catch(e) - { - retryCount++; - CollectGarbage(); // предотвращает исключение out of memory - if (retryCount > 5) { - log(format("Ошибка переноса файла базы во временный каталог (возможно к файлу базы подключены активные сеансы): {0}, {1}.", e.name, e.message), true); - return 1; - } - else { - log(format("Попытка переноса файла базы во временный каталог ({0} из 5): {1}, {2}.", retryCount, e.name, e.message)); - return -1; - } - } - - log(format("Файл резервной копии: {0}", backupFileName)); - try - { - if (backupFileName.toLowerCase().lastIndexOf(".zip") == backupFileName.length - 4) { - var backupFile = oFileSystemObject.GetAbsolutePathName(backupFileName); - var backupFolder = oShellApplication.NameSpace(backupFile); - var dbFile = oFileSystemObject.GetAbsolutePathName(BaseFileName); - var dbFolder = oShellApplication.Namespace(dbFile); - dbFolder.CopyHere(backupFolder.Items()); - } - else { - oFileSystemObject.CopyFile(backupFileName, BaseFileName, true); - } - - log("Восстановление базы данных проведено успешно"); - ret = 0; - } - catch(e) - { - CollectGarbage(); // предотвращает исключение out of memory - log(format("Исключение при восстановлении базы из резервной копии: {0}, {1}.", e.name, e.message), true); - ret = 1; - var FileObject = oFileSystemObject.GetFile(TempCatalog + '1Cv8.1CD'); - FileObject.Move(BaseFileName); - } - return ret; -} - -function WaitUntilFinish() -{ - FileArchive = oFileSystemObject.GetFile(BaseFileName + '\\1Cv8.1CD'); - FileSize = FileArchive.size / 1024; - if (FileSize < 5) - return -1; - - return 0; -} - -function doAllowConnections() -{ - var BlockFilePath = BaseFileName + '1Cv8.cdn'; - if (oFileSystemObject.FileExists(BlockFilePath)) - { - try - { - oFileSystemObject.DeleteFile(BaseFileName + '1Cv8.cdn'); - } - catch(e) - { - log(format("Ошибка при удалении файла блокировок 1Cv8.cdn: {0}, {1}.", e.name, e.message), true); - return 3; - } - } - return 0; -} - -// Первоначальное заполнение информационной базы, разрешение подключений новых соединений, -// и оповещение о результате обновления -function allowConnections() -{ - var result = doAllowConnections(); - CollectGarbage(); // освобождает соединения с COM-объектом - return result; -} - -function fromUnicode(text){ - var str = ""; - for(var i=0; i 5) { + log(format('Ошибка переноса файла базы во временный каталог (возможно к файлу базы подключены активные сеансы): {0}, {1}.', e.name, e.message), true) + return 1 + } else { + log(format('Попытка переноса файла базы во временный каталог ({0} из 5): {1}, {2}.', retryCount, e.name, e.message)) + return -1 + } + } + + log(format('Файл резервной копии: {0}', backupFileName)) + var ret = 0 + try { + if (backupFileName.toLowerCase().lastIndexOf('.zip') === backupFileName.length - 4) { + var backupFile = oFileSystemObject.GetAbsolutePathName(backupFileName) + var backupFolder = oShellApplication.NameSpace(backupFile) + var dbFile = oFileSystemObject.GetAbsolutePathName(BaseFileName) + var dbFolder = oShellApplication.Namespace(dbFile) + dbFolder.CopyHere(backupFolder.Items()) + } else { + oFileSystemObject.CopyFile(backupFileName, BaseFileName, true) + } + + log('Восстановление базы данных проведено успешно') + } catch (e) { + CollectGarbage() // предотвращает исключение out of memory + log(format('Исключение при восстановлении базы из резервной копии: {0}, {1}.', e.name, e.message), true) + ret = 1 + var FileObject = oFileSystemObject.GetFile(TempCatalog + '1Cv8.1CD') + FileObject.Move(BaseFileName) + } + return ret +} + +function WaitUntilFinish () { + var FileArchive = oFileSystemObject.GetFile(BaseFileName + '\\1Cv8.1CD') + var FileSize = FileArchive.size / 1024 + if (FileSize < 5) { + return -1 + } + + return 0 +} + +function doAllowConnections () { + var BlockFilePath = BaseFileName + '1Cv8.cdn' + if (oFileSystemObject.FileExists(BlockFilePath)) { + try { + oFileSystemObject.DeleteFile(BaseFileName + '1Cv8.cdn') + } catch (e) { + log(format('Ошибка при удалении файла блокировок 1Cv8.cdn: {0}, {1}.', e.name, e.message), true) + return 3 + } + } + return 0 +} + +// Первоначальное заполнение информационной базы, разрешение подключений новых соединений, +// и оповещение о результате обновления +function allowConnections () { + var result = doAllowConnections() + CollectGarbage() // освобождает соединения с COM-объектом + return result +} + +function fromUnicode (text) { + var str = '' + for (var i = 0; i < text.length / 4; i++) { + str = str + String.fromCharCode(text.slice(4 * i, 4 * i + 4)) + } + str = str.replace(/"/g, '""') + return str } // Интерактивный запуск "1С:Предприятие" -function runEnterprise() -{ - return runApp(v8exe, format('ENTERPRISE {0} {1}', infoBasePath, infoBaseAuthorization), SW_SHOW, false); +function runEnterprise () { + return runApp(v8exe, format('ENTERPRISE {0} {1}', infoBasePath, infoBaseAuthorization), SW_SHOW, false) } -#КонецОбласти \ No newline at end of file + +#КонецОбласти diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаРезервногоКопирования/Template.txt b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаРезервногоКопирования/Template.txt index 439ae4254..69eae7242 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаРезервногоКопирования/Template.txt +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаРезервногоКопирования/Template.txt @@ -1,484 +1,435 @@ #Область ОбластьПараметров // Параметры процедуры обновления -var now = new Date(); -var outFileName = "log" + now.valueOf() + ".txt"; // Путь к log-файлу -var v8exe = [ИмяИсполняемогоФайлаПрограммы]; // Путь к исполняемому файлу 1С:Предприятия 8 -var infoBasePath = [ПараметрПутиКИнформационнойБазе]; -var BaseFileName = [СтрокаПутиКФайлуИнформационнойБазы]; -var connectionString = [СтрокаСоединенияИнформационнойБазы] +';UC=РезервноеКопирование'; -var adminName = [ИмяАдминистратораОбновления]; // имя администратора, инициировавшего обновление -var backupFileName = [КаталогРезервнойКопии] + '.zip'; // Файл резервной копии -var UseRestore = [ВосстанавливатьИнформационнуюБазу]; // Использовать восстановление ИБ в случае падения -var createBackup = [СоздаватьРезервнуюКопию]; // создавать резервную копию -var eventLogID = [СобытиеЖурналаРегистрации]; -var comConnectorName = [ИмяCOMСоединителя]; // имя COM-класса для работы с 1С:Предприятием 8 через COM-соединение -var useComConnector = [ИспользоватьCOMСоединитель]; // флаг использования COM-соединения для работы с 1С:Предприятием 8 -var OnExit = [ВыполнитьПриЗавершенииРаботы]; // "true" - при завершении работы, "false" - прямо сейчас. -var tempLogFileName = "templog.txt"; +var now = new Date() +var outFileName = 'log' + now.valueOf() + '.txt' // Путь к log-файлу +var v8exe = [ИмяИсполняемогоФайлаПрограммы] // Путь к исполняемому файлу 1С:Предприятия 8 +var infoBasePath = [ПараметрПутиКИнформационнойБазе] +var BaseFileName = [СтрокаПутиКФайлуИнформационнойБазы] +var connectionString = [СтрокаСоединенияИнформационнойБазы] + ';UC=РезервноеКопирование' +var adminName = [ИмяАдминистратораОбновления] // имя администратора, инициировавшего обновление +var backupFileName = [КаталогРезервнойКопии] + '.zip' // Файл резервной копии +var UseRestore = [ВосстанавливатьИнформационнуюБазу] // Использовать восстановление ИБ в случае падения +var createBackup = [СоздаватьРезервнуюКопию] // создавать резервную копию +var eventLogID = [СобытиеЖурналаРегистрации] +var comConnectorName = [ИмяCOMСоединителя] // имя COM-класса для работы с 1С:Предприятием 8 через COM-соединение +var useComConnector = [ИспользоватьCOMСоединитель] // флаг использования COM-соединения для работы с 1С:Предприятием 8 +var OnExit = [ВыполнитьПриЗавершенииРаботы] // "true" - при завершении работы, "false" - прямо сейчас. +var tempLogFileName = 'templog.txt' #КонецОбласти #Область ОбластьРезервногоКопирования -var oFileSystemObject = new ActiveXObject("Scripting.FileSystemObject"); - -var thisFileName; -var thisFileDir; -var InfoBasePassword; - -thisFileName = eval("oHTA.commandLine"); -thisFileDir = thisFileName.substr(1, thisFileName.lastIndexOf("\\") - 1); -InfoBasePassword = thisFileName.substr(thisFileName.indexOf("[p1]") + 4, thisFileName.indexOf("[/p1]") - thisFileName.indexOf("[p1]") - 4); -thisFileName = thisFileName.substr(1, thisFileName.indexOf("[p1]") - 3); - -adminName = adminName.replace(/"/g, '""'); -InfoBasePassword = fromUnicode(InfoBasePassword); -var infoBaseAuthorization = format('/N\"{0}\" /P\"{1}\" /WA-', adminName, InfoBasePassword); -connectionString = format(connectionString, adminName, InfoBasePassword); - -var oShell = new ActiveXObject("WScript.Shell"); -var oShellApplication = new ActiveXObject("Shell.Application"); -oShell.CurrentDirectory = thisFileDir; - -var errorMarker = "{ERR}"; -var successMarker = "{OK }"; - -var FileSize = 0; -var CheckCount = 0; - -// Переменные состояния -var backupCreated = false; -var logging1C = false; -var ComConnection = null; - -// Открыть файл sFilePath. -function runApp(sFilePath, sFileArgs, show, bWaitOnReturn) -{ - if (bWaitOnReturn == undefined) - bWaitOnReturn = false; - if (show == undefined) - show = SW_SHOW; - if (sFileArgs == undefined) - sFileArgs = ""; - var ret = 1; - log(format("Запускается: {0}; параметры: {1}; окно: {2}; ожидание: {3}", - sFilePath, sFileArgs, SWtoString(show), bWaitOnReturn)); - if (oFileSystemObject.FileExists(sFilePath)) - { - try - { - ret = oShell.Run(format('"{0}" {1}', sFilePath, sFileArgs), show, bWaitOnReturn); - } - catch(e) - { - log(format("Исключение в runApp: {0}, {1}.", e.name, e.message), true); - return 1; - } - log(format("Код возврата: {0}", ret), ret != 0); - return ret; - } - else - log(format("Запускаемый файл не существует: {0}", sFilePath), true); - return ret; +if (useComConnector) { + var comConnectorCached = new ActiveXObject(comConnectorName) // для защиты от перерегистрации comConnector из других сеансов } -function clearLogFile() -{ - var outFile = oFileSystemObject.OpenTextFile(outFileName, ForWriting, true, TristateTrue); - outFile.Close(); +var oFileSystemObject = new ActiveXObject('Scripting.FileSystemObject') + +var thisFileName +var thisFileDir +var InfoBasePassword + +thisFileName = eval('oHTA.commandLine') +thisFileDir = thisFileName.substr(1, thisFileName.lastIndexOf('\\') - 1) +InfoBasePassword = thisFileName.substr(thisFileName.indexOf('[p1]') + 4, thisFileName.indexOf('[/p1]') - thisFileName.indexOf('[p1]') - 4) +thisFileName = thisFileName.substr(1, thisFileName.indexOf('[p1]') - 3) + +adminName = adminName.replace(/"/g, '""') +InfoBasePassword = fromUnicode(InfoBasePassword) +var infoBaseAuthorization = format('/N"{0}" /P"{1}" /WA-', adminName, InfoBasePassword) +connectionString = format(connectionString, adminName, InfoBasePassword) + +var oShell = new ActiveXObject('WScript.Shell') +var oShellApplication = new ActiveXObject('Shell.Application') +oShell.CurrentDirectory = thisFileDir + +var errorMarker = '{ERR}' +var successMarker = '{OK }' + +var FileSize = 0 +var CheckCount = 0 + +// Переменные состояния +var logging1C = false +var ComConnection = null + +// Открыть файл sFilePath. +function runApp (sFilePath, sFileArgs, show, bWaitOnReturn) { + if (bWaitOnReturn === undefined) { + bWaitOnReturn = false + } + if (show === undefined) { + show = SW_SHOW + } + if (sFileArgs === undefined) { + sFileArgs = '' + } + var ret = 1 + log(format('Запускается: {0}; параметры: {1}; окно: {2}; ожидание: {3}', + sFilePath, sFileArgs, SWtoString(show), bWaitOnReturn)) + if (oFileSystemObject.FileExists(sFilePath)) { + try { + ret = oShell.Run(format('"{0}" {1}', sFilePath, sFileArgs), show, bWaitOnReturn) + } catch (e) { + log(format('Исключение в runApp: {0}, {1}.', e.name, e.message), true) + return 1 + } + log(format('Код возврата: {0}', ret), ret !== 0) + return ret + } else { + log(format('Запускаемый файл не существует: {0}', sFilePath), true) + } + return ret +} + +function clearLogFile () { + var outFile = oFileSystemObject.OpenTextFile(outFileName, ForWriting, true, TristateTrue) + outFile.Close() } // Записать текст в лог -function log(text, failed) -{ - if (failed == undefined) - failed = false; - logFile(text, failed); +function log (text, failed) { + if (failed === undefined) { + failed = false + } + logFile(text, failed) } // Записать текст в лог-файл -function logFile(text, failed) -{ - var now = new Date(); - var f; - try - { - f = oFileSystemObject.OpenTextFile(outFileName, ForAppending, true, TristateTrue); - } - catch(e) { return; } - try - { - var status = (failed == false ? successMarker : errorMarker); - f.WriteLine(format("{0} {1} {2}", now, status, text)); - } - finally - { - try - { - f.Close(); - } - catch(e) { return; } - } +function logFile (text, failed) { + var now = new Date() + var f + try { + f = oFileSystemObject.OpenTextFile(outFileName, ForAppending, true, TristateTrue) + } catch (e) { return } + try { + var status = (failed === false ? successMarker : errorMarker) + f.WriteLine(format('{0} {1} {2}', now, status, text)) + } finally { + try { + f.Close() + } catch (e) { } + } } // Записать текст из временного лог-файла -function appendLog() -{ - var f; - var outf; - var text; - try - { - f = oFileSystemObject.OpenTextFile(tempLogFileName, ForReading, false, TristateFalse); - outf = oFileSystemObject.OpenTextFile(outFileName, ForAppending, true, TristateTrue); - } - catch(e) { return; } - try - { - var oldAtEndOfStream = f.AtEndOfStream; - if (!oldAtEndOfStream) - { - text = f.ReadAll(); - outf.WriteLine(text); - } - } - finally - { - try - { - f.Close(); - outf.Close(); - } - catch(e) { return; } - } +function appendLog () { + var f + var outf + var text + try { + f = oFileSystemObject.OpenTextFile(tempLogFileName, ForReading, false, TristateFalse) + outf = oFileSystemObject.OpenTextFile(outFileName, ForAppending, true, TristateTrue) + } catch (e) { return } + try { + var oldAtEndOfStream = f.AtEndOfStream + if (!oldAtEndOfStream) { + text = f.ReadAll() + outf.WriteLine(text) + } + } finally { + try { + f.Close() + outf.Close() + } catch (e) { } + } } // Записать текст в журнал регистрации -function log1C(text, failed) -{ - if (logging1C) - return; - var connection = createConnection(); - if (connection == null) - return; - try - { - log1CInternal(connection, text, failed); - } - finally - { - connection = null; - } +function log1C (text, failed) { + if (logging1C) { + return + } + var connection = createConnection() + if (connection == null) { + return + } + try { + log1CInternal(connection, text, failed) + } finally { + connection = null + } } // Записать текст в журнал регистрации -function log1CInternal(connection, text, failed) -{ - if (logging1C) - return; - logging1C = true; - try - { - try - { - var eventLogLevel = failed ? connection.EventLogLevel.Error : connection.EventLogLevel.Information; - connection.WriteLogEvent(eventLogID, eventLogLevel, null, null, text, - connection.EventLogEntryTransactionMode.Independent); - } - catch(e) - { - log(format("Исключение в log1CInternal: {0}, {1}.", e.name, e.message), true); - return; - } - } - finally - { - logging1C = false; - } +function log1CInternal (connection, text, failed) { + if (logging1C) { + return + } + logging1C = true + try { + try { + var eventLogLevel = failed ? connection.EventLogLevel.Error : connection.EventLogLevel.Information + connection.WriteLogEvent(eventLogID, eventLogLevel, null, null, text, + connection.EventLogEntryTransactionMode.Independent) + } catch (e) { + log(format('Исключение в log1CInternal: {0}, {1}.', e.name, e.message), true) + return + } + } finally { + logging1C = false + } } // Инициализация -function initialize() -{ - clearLogFile(); - appendLog(); - log(format("Файл скрипта: {0}", thisFileName)); - log(format("Файл резервной копии: {0}", backupFileName)); - return 0; +function initialize () { + clearLogFile() + appendLog() + log(format('Файл скрипта: {0}', thisFileName)) + log(format('Файл резервной копии: {0}', backupFileName)) + return 0 } // Финализация -function finalize(success) { - if (success == undefined) - success = false; - - if (!(oFileSystemObject.FileExists(backupFileName))) { - log("Не удалось создать резервную копию базы."); - success = false; - } - else { - FileArchive = oFileSystemObject.GetFile(backupFileName); - if (FileArchive.size / 1024 < 5) { - log("Не удалось создать резервную копию базы."); - success = false; - } - else { - log("Резервная копия успешно создана"); - } - } - - // Запись результата обновления в Event Log - writeEventLog(success); - - if (!success) - allowConnections(false); // Разрешение подключений - - write1CEventLog(); // Запись всей информации из log-файла в журнал регистрации - setResult(success); - - // очистка глобального COM-соединения - ComConnection = null; +function finalize (success) { + if (success === undefined) { + success = false + } + + if (!(oFileSystemObject.FileExists(backupFileName))) { + log('Не удалось создать резервную копию базы.') + success = false + } else { + var FileArchive = oFileSystemObject.GetFile(backupFileName) + if (FileArchive.size / 1024 < 5) { + log('Не удалось создать резервную копию базы.') + success = false + } else { + log('Резервная копия успешно создана') + } + } + + // Запись результата обновления в Event Log + writeEventLog(success) + + if (!success) { + allowConnections(false) // Разрешение подключений + } + + write1CEventLog() // Запись всей информации из log-файла в журнал регистрации + setResult(success) + + // очистка глобального COM-соединения + ComConnection = null } -function createConnection() -{ - if (!useComConnector) - return null; - - if (ComConnection != null) - return ComConnection; - - try { - log("Начат сеанс внешнего соединения с ИБ", false); - logstep = "new ActiveXObject COMConnector"; - var ComConnector = new ActiveXObject(comConnectorName); - logstep = "comConnector.Connect"; - ComConnection = ComConnector.Connect(connectionString); - logstep = "new SystemInfo"; - systemInfo = ComConnection.NewObject("SystemInfo"); - logstep = "SystemInfo.AppVersion"; - appVersion = systemInfo.AppVersion; - logstep = "SystemInfo.PlatformType"; - platformType = systemInfo.PlatformType; - logstep = "Проверка ComConnection.PlatformType"; - platformTypeString = "<Неопределена>"; - if (platformType === ComConnection.PlatformType.Windows_x86) - platformTypeString = "32 bit"; - if (platformType === ComConnection.PlatformType.Windows_x86_64) - platformTypeString = "64 bit"; - log(format("Версия comcntr: {0} {1}", appVersion, platformTypeString), false); - return ComConnection; - } - catch (e) { - log(format("Исключение в createConnection на шаге: {0}, {1}, {2}", logstep, e.name, e.message), true); - return null; - } +function createConnection () { + if (!useComConnector) { + return null + } + + if (ComConnection != null) { + return ComConnection + } + + try { + log('Начат сеанс внешнего соединения с ИБ', false) + var logstep = 'new ActiveXObject COMConnector' + var ComConnector = new ActiveXObject(comConnectorName) + logstep = 'comConnector.Connect' + ComConnection = ComConnector.Connect(connectionString) + logstep = 'new SystemInfo' + var systemInfo = ComConnection.NewObject('SystemInfo') + logstep = 'SystemInfo.AppVersion' + var appVersion = systemInfo.AppVersion + logstep = 'SystemInfo.PlatformType' + var platformType = systemInfo.PlatformType + logstep = 'Проверка ComConnection.PlatformType' + var platformTypeString = '<Неопределена>' + if (platformType === ComConnection.PlatformType.Windows_x86) { + platformTypeString = '32 bit' + } + if (platformType === ComConnection.PlatformType.Windows_x86_64) { + platformTypeString = '64 bit' + } + log(format('Версия comcntr: {0} {1}', appVersion, platformTypeString), false) + return ComConnection + } catch (e) { + log(format('Исключение в createConnection на шаге: {0}, {1}, {2}', logstep, e.name, e.message), true) + return null + } } // Записать весь log-файл в журнал регистрации -function write1CEventLog() -{ - if (!oFileSystemObject.FileExists(outFileName)) - return; - - var connection = createConnection(); - if (connection == null) - return; - try - { - var f = oFileSystemObject.OpenTextFile(outFileName, ForReading, false, TristateTrue); - - var text; - while (!f.AtEndOfStream) - { - text = f.ReadLine(); - while ((text.indexOf(successMarker) < 0) && (text.indexOf(errorMarker) < 0) && !f.AtEndOfStream) - text += "\n" + f.ReadLine(); - - var failed = text.indexOf(errorMarker) > 0; - log1CInternal(connection, text, failed); - } - } - catch(e) - { - log(format("Исключение в write1CEventLog: {0}, {1}.", e.name, e.message), true); - return; - } - finally - { - connection = null; - } +function write1CEventLog () { + if (!oFileSystemObject.FileExists(outFileName)) { + return + } + + var connection = createConnection() + if (connection == null) { + return + } + try { + var f = oFileSystemObject.OpenTextFile(outFileName, ForReading, false, TristateTrue) + + var text + while (!f.AtEndOfStream) { + text = f.ReadLine() + while ((text.indexOf(successMarker) < 0) && (text.indexOf(errorMarker) < 0) && !f.AtEndOfStream) { + text += '\n' + f.ReadLine() + } + + var failed = text.indexOf(errorMarker) > 0 + log1CInternal(connection, text, failed) + } + } catch (e) { + log(format('Исключение в write1CEventLog: {0}, {1}.', e.name, e.message), true) + return + } finally { + connection = null + } } -function doSetResult(success) -{ - var connection = createConnection(); - if (connection == null) - return (useComConnector ? 1 : 0); - var res = 0; - try - { - connection.РезервноеКопированиеИБСервер.ЗавершитьРезервноеКопирование(success, backupFileName); - } - catch(e) - { - log(format("Исключение при вызове РезервноеКопированиеИБСервер.ЗавершитьРезервноеКопирование: {0}, {1}.", e.name, e.message), true); - res = 2; - } - return res; +function doSetResult (success) { + var connection = createConnection() + if (connection == null) { + return (useComConnector ? 1 : 0) + } + var res = 0 + try { + connection.РезервноеКопированиеИБСервер.ЗавершитьРезервноеКопирование(success, backupFileName) + } catch (e) { + log(format('Исключение при вызове РезервноеКопированиеИБСервер.ЗавершитьРезервноеКопирование: {0}, {1}.', e.name, e.message), true) + res = 2 + } + return res } - -// Передать в приложение результат выполнения -function setResult(success) -{ - var result = doSetResult(success); - CollectGarbage(); // освобождает соединения с COM-объектом - return result; +// Передать в приложение результат выполнения +function setResult (success) { + var result = doSetResult(success) + CollectGarbage() // освобождает соединения с COM-объектом + return result } // Записать результат выполнения процедуры обновления в Event Log -function writeEventLog(success) -{ - try - { - var eventKind = success ? EVENT_SUCCESS : EVENT_CRITICAL; - var message; - if (success) - message = "Резервное копирование базы выполнено успешно."; - else - message = "Ошибка при резервном копировании информационной базы."; - message += format(" Параметры информационной базы: {0}.", infoBasePath); - if (!success) - message += " Протокол резервного сохранен в журнал регистрации."; - oShell.LogEvent(eventKind, message); - } - catch(e) - { - log(format("Исключение в writeEventLog: {0}, {1}.", e.name, e.message), true); - } +function writeEventLog (success) { + try { + var eventKind = success ? EVENT_SUCCESS : EVENT_CRITICAL + var message + if (success) { + message = 'Резервное копирование базы выполнено успешно.' + } else { + message = 'Ошибка при резервном копировании информационной базы.' + } + message += format(' Параметры информационной базы: {0}.', infoBasePath) + if (!success) { + message += ' Протокол резервного сохранен в журнал регистрации.' + } + oShell.LogEvent(eventKind, message) + } catch (e) { + log(format('Исключение в writeEventLog: {0}, {1}.', e.name, e.message), true) + } } // Создание резервной копии информационной базы -function backupDB() { - try { - - var fileDBName = BaseFileName + '1Cv8.1CD'; - fileDB = oFileSystemObject.GetFile(fileDBName); - log(format("Размер файла 1Cv8.1CD: {0} Мб.", fileDB.size / 1024 / 1024)); - - var backupPath = oFileSystemObject.GetAbsolutePathName(backupFileName); - if (fileDB.size / 1024 / 1024 > 2000) { - log("Размер файла 1Cv8.1CD превышает 2 Гб, поэтому сжатие в zip не используется."); - backupFileName = backupFileName.replace(".zip", ""); - backupPath = oFileSystemObject.GetAbsolutePathName(backupFileName); - oFileSystemObject.CreateFolder(backupPath); - backupFileName = backupPath + '\\1Cv8.1CD' - } - else { - var NewTextFile = oFileSystemObject.CreateTextFile(backupFileName, false); - NewTextFile.Write(String.fromCharCode(80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)); - NewTextFile.Close(); - } +function backupDB () { + var ret = 0 + try { + var fileDBName = BaseFileName + '1Cv8.1CD' + var fileDB = oFileSystemObject.GetFile(fileDBName) + log(format('Размер файла 1Cv8.1CD: {0} Мб.', fileDB.size / 1024 / 1024)) - var destFolder = oShellApplication.NameSpace(backupPath); - var sourceFilePath = oFileSystemObject.GetAbsolutePathName(fileDBName); - - if (!createBackup) - return 0; - - destFolder.CopyHere(sourceFilePath); - log("Начато создание резервной копии..."); - - } - catch(e) { - alert(e.message); - CollectGarbage(); // предотвращает исключение out of memory - log(format("Исключение при создании резервной копии базы: {0}, {1}", e.name, e.message), true); - ret = 1; - } - if (ret == 0) - backupCreated = true; - - return ret; + var backupPath = oFileSystemObject.GetAbsolutePathName(backupFileName) + if (fileDB.size / 1024 / 1024 > 2000) { + log('Размер файла 1Cv8.1CD превышает 2 Гб, поэтому сжатие в zip не используется.') + backupFileName = backupFileName.replace('.zip', '') + backupPath = oFileSystemObject.GetAbsolutePathName(backupFileName) + oFileSystemObject.CreateFolder(backupPath) + backupFileName = backupPath + '\\1Cv8.1CD' + } else { + var NewTextFile = oFileSystemObject.CreateTextFile(backupFileName, false) + NewTextFile.Write(String.fromCharCode(80, 75, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)) + NewTextFile.Close() + } + + var destFolder = oShellApplication.NameSpace(backupPath) + var sourceFilePath = oFileSystemObject.GetAbsolutePathName(fileDBName) + + if (!createBackup) { + return 0 + } + + destFolder.CopyHere(sourceFilePath) + log('Начато создание резервной копии...') + } catch (e) { + alert(e.message) + CollectGarbage() // предотвращает исключение out of memory + log(format('Исключение при создании резервной копии базы: {0}, {1}', e.name, e.message), true) + ret = 1 + } + + return ret } // Ожидать создания файла резервной копии, начатое в backupDB() -function WaitUntilFinish() -{ - log(format("backupFileName: {0}", backupFileName)); - try { - FileArchive = oFileSystemObject.GetFile(backupFileName); - } - catch(e) - { - // файл резервной копии не найден, ожидаем далее - return -1; - } - var nowSize = FileArchive.size; - - // Файл все еще не начал создаваться, возможно выполняется интерактивное действие, ожидаем далее. - if (nowSize / 1024 < 5) { - FileSize = nowSize; - - // Если за 5 минут файл все еще не начал создаваться, то отменяем резервное копирование. - if (CheckCount > 60) { - log(format("За 5 минут файл все еще не начал создаваться. Трассировка: CheckCount {0}, nowSize {1}, FileSize {2}", CheckCount, nowSize, FileSize), true); - return 1; - } - - CheckCount = CheckCount + 1; - return -1; - } - - if (FileSize != nowSize) { - FileSize = nowSize; - return -1; - } - - return 0; +function WaitUntilFinish () { + log(format('backupFileName: {0}', backupFileName)) + try { + var FileArchive = oFileSystemObject.GetFile(backupFileName) + } catch (e) { + // файл резервной копии не найден, ожидаем далее + return -1 + } + var nowSize = FileArchive.size + + // Файл все еще не начал создаваться, возможно выполняется интерактивное действие, ожидаем далее. + if (nowSize / 1024 < 5) { + FileSize = nowSize + + // Если за 5 минут файл все еще не начал создаваться, то отменяем резервное копирование. + if (CheckCount > 60) { + log(format('За 5 минут файл все еще не начал создаваться. Трассировка: CheckCount {0}, nowSize {1}, FileSize {2}', CheckCount, nowSize, FileSize), true) + return 1 + } + + CheckCount = CheckCount + 1 + return -1 + } + + if (FileSize !== nowSize) { + FileSize = nowSize + return -1 + } + + return 0 } -function doAllowConnections() -{ - var BlockFilePath = BaseFileName + '1Cv8.cdn'; - if (oFileSystemObject.FileExists(BlockFilePath)) - { - try - { - oFileSystemObject.DeleteFile(BaseFileName + '1Cv8.cdn'); - } - catch(e) - { - log(format("Ошибка при удалении файла блокировок 1Cv8.cdn: {0}, {1}.", e.name, e.message), true); - return 3; - } - } - return 0; +function doAllowConnections () { + var BlockFilePath = BaseFileName + '1Cv8.cdn' + if (oFileSystemObject.FileExists(BlockFilePath)) { + try { + oFileSystemObject.DeleteFile(BaseFileName + '1Cv8.cdn') + } catch (e) { + log(format('Ошибка при удалении файла блокировок 1Cv8.cdn: {0}, {1}.', e.name, e.message), true) + return 3 + } + } + return 0 } -// Первоначальное заполнение информационной базы, разрешение подключений новых соединений, +// Первоначальное заполнение информационной базы, разрешение подключений новых соединений, // и оповещение о результате обновления -function allowConnections() -{ - var result = doAllowConnections(); - CollectGarbage(); // освобождает соединения с COM-объектом - return result; +function allowConnections () { + var result = doAllowConnections() + CollectGarbage() // освобождает соединения с COM-объектом + return result } -function fromUnicode(text){ - var str = ""; - for(var i=0; iРезультаты обновления программы - ГруппаРезультатыОбновления - 184 + Группа1 + 230 - ГруппаОбновлениеЗавершено - 82 - - КартинкаИнформация - 83 - - <key>ru</key> - <value>Картинка информация</value> - - true - true - - true - - - КартинкаИнформацияExtendedTooltip - 129 - Label - true - true - - Left - - - - КартинкаИнформацияКонтекстноеМеню - 84 - true - - true - true - - - CommonPicture.Успешно32 - - - - - ИнформацияОбновлениеЗавершено - 86 - - <key>ru</key> - <value>Версия программы успешно обновлена на версию %1 -%2 в %3 за %4.</value> - - true - true - - true - - - ИнформацияОбновлениеЗавершеноExtendedTooltip - 131 - Label - true - true - - Left - - - - ИнформацияОбновлениеЗавершеноКонтекстноеМеню - 87 - true - - Label - 60 - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Обновление завершено</value> - - false - - ГруппаОбновлениеЗавершеноExtendedTooltip - 128 - Label - true - true - - Left - - - Page - - auto - false - - - - ГруппаОшибкаОбновления - 186 - - КартинкаОшибка - 188 - - <key>ru</key> - <value>Картинка ошибка</value> - - true - true - - true - - - КартинкаОшибкаРасширеннаяПодсказка - 190 - Label - true - true - - Left - - - - КартинкаОшибкаКонтекстноеМеню - 189 - true - - true - true - - - CommonPicture.Ошибка32 - - - + ГруппаРезультатыОбновления + 184 - ГруппаОшибкаПодробнее - 197 + ГруппаОбновлениеЗавершено + 82 - ИнформацияОшибкаОбновления - 191 + КартинкаИнформация + 83 <key>ru</key> - <value>Во время обновления программы произошли ошибки. Информация об ошибках сохранена в журнал регистрации.</value> + <value>Картинка информация</value> true true @@ -160,8 +26,8 @@ true
        - ИнформацияОшибкаОбновленияРасширеннаяПодсказка - 193 + КартинкаИнформацияExtendedTooltip + 129 Label true true @@ -170,38 +36,98 @@ - ИнформацияОшибкаОбновленияКонтекстноеМеню - 192 + КартинкаИнформацияКонтекстноеМеню + 84 + true + + true + true + + + CommonPicture.Успешно32 + + + + + ИнформацияОбновлениеЗавершено + 86 + + <key>ru</key> + <value>Версия программы успешно обновлена на версию %1 +%2 в %3 за %4.</value> + + true + true + + true + + + ИнформацияОбновлениеЗавершеноExtendedTooltip + 131 + Label + true + true + + Left + + + + ИнформацияОбновлениеЗавершеноКонтекстноеМеню + 87 true Label - true 60 true Left + true + true + + true + + + <key>ru</key> + <value>Обновление завершено</value> + + false + + ГруппаОбновлениеЗавершеноExtendedTooltip + 128 + Label + true + true + + Left + + + Page + + HorizontalIfPossible + auto + false + + + + ГруппаОшибкаОбновления + 186 - ГиперссылкаОшибкаОбновления - 194 + КартинкаОшибка + 188 <key>ru</key> - <value>Техническая информация о результатах обновления</value> + <value>Картинка ошибка</value> true true true - Button - ГиперссылкаОшибкаОбновленияРасширеннаяПодсказка - 196 - - <key>ru</key> - <value>Техническая информация из журнала регистрации для обращения в службу технической поддержки.</value> - + КартинкаОшибкаРасширеннаяПодсказка + 190 Label true true @@ -210,19 +136,115 @@ - ГиперссылкаОшибкаОбновленияКонтекстноеМеню - 195 + КартинкаОшибкаКонтекстноеМеню + 189 true - Label + true true - - - Click - ГиперссылкаОшибкаОбновленияНажатие - - true - Left + + + CommonPicture.Ошибка32 + + + + + ИнформацияОбОшибке + 240 + + ИнформацияОшибкаОбновления + 199 + + <key>ru</key> + <value>Во время обновления программы возникли некоторые проблемы. Информация о них сохранена в <link ЖурналРегистрации>журнал регистрации</>.</value> + + true + true + + true + + + ИнформацияОшибкаОбновленияРасширеннаяПодсказка + 201 + Label + true + true + + Left + + + + ИнформацияОшибкаОбновленияКонтекстноеМеню + 200 + true + + true + Label + true + 60 + true + + + URLProcessing + ИнформацияОшибкаОбновленияОбработкаНавигационнойСсылки + + Left + + + + ИнформацияДляТехническойПоддержки + 238 + true + true + + true + + + ИнформацияДляТехническойПоддержкиРасширеннаяПодсказка + 239 + Label + true + true + + Left + + + Hyperlink + Form.Command.ИнформацияДляТехническойПоддержки + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Информация об ошибке</value> + + + ИнформацияОбОшибкеРасширеннаяПодсказка + 241 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto true @@ -232,11 +254,11 @@ <key>ru</key> - <value>Ошибка подробнее</value> + <value>Ошибка обновления</value> - ГруппаОшибкаПодробнееРасширеннаяПодсказка - 198 + ГруппаОшибкаОбновленияРасширеннаяПодсказка + 187 Label true true @@ -244,14 +266,11 @@ Left - UsualGroup - - Vertical - Auto - true - true - Auto - Auto + Page + + HorizontalIfPossible + auto + false true @@ -261,11 +280,11 @@ <key>ru</key> - <value>Ошибка обновления</value> + <value>Результаты обновления</value> - ГруппаОшибкаОбновленияРасширеннаяПодсказка - 187 + ГруппаРезультатыОбновленияРасширеннаяПодсказка + 185 Label true true @@ -273,10 +292,298 @@ Left - Page - - auto - false + Pages + + Auto + + + + ГруппаУстановленныеИсправления + 202 + + ГруппаИсправленияУстановлены + 204 + + ИсправленияУспешноОтступ + 232 + true + true + + true + + + ИсправленияУспешноОтступРасширеннаяПодсказка + 234 + Label + true + true + + Left + + + + ИсправленияУспешноОтступКонтекстноеМеню + 233 + true + + Label + 3 + true + true + + Left + + + + ГруппаИсправленияУстановленыКомпоновка + 209 + + ИнформацияИсправленияУстановлены + 211 + + <key>ru</key> + <value><link 123>Исправления (патчи)</> успешно установлены (%1)</value> + + true + true + + true + + + ИнформацияИсправленияУстановленыРасширеннаяПодсказка + 213 + Label + true + true + + Left + + + + ИнформацияИсправленияУстановленыКонтекстноеМеню + 212 + true + + true + Label + true + true + + + URLProcessing + ИнформацияИсправленияУстановленыОбработкаНавигационнойСсылки + + Left + + + true + true + + true + + + <key>ru</key> + <value>Исправления установлены компоновка</value> + + + ГруппаИсправленияУстановленыКомпоновкаРасширеннаяПодсказка + 210 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Исправления установлены</value> + + + ГруппаИсправленияУстановленыРасширеннаяПодсказка + 205 + Label + true + true + + Left + + + Page + + HorizontalIfPossible + auto + false + + + + ГруппаОшибкаУстановкиИсправлений + 217 + + ИсправленияОшибкаОтступ + 235 + true + true + + true + + + ИсправленияОшибкаОтступРасширеннаяПодсказка + 237 + Label + true + true + + Left + + + + ИсправленияОшибкаОтступКонтекстноеМеню + 236 + true + + Label + 3 + true + true + + Left + + + + ГруппаОшибкаУстановкиИсправленийКомпоновка + 222 + + ИнформацияОшибкаИсправлений + 224 + + <key>ru</key> + <value>Не удалось установить <link 123>исправления (%1 из %2)</></value> + + true + true + + true + + + ИнформацияОшибкаИсправленийРасширеннаяПодсказка + 226 + Label + true + true + + Left + + + + ИнформацияОшибкаИсправленийКонтекстноеМеню + 225 + true + + true + Label + true + true + + + URLProcessing + ИнформацияОшибкаОбновленияОбработкаНавигационнойСсылки + + Left + + + true + true + + true + + + <key>ru</key> + <value>Ошибка установки исправлений компоновка</value> + + + ГруппаОшибкаУстановкиИсправленийКомпоновкаРасширеннаяПодсказка + 223 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Ошибка установки исправлений</value> + + + ГруппаОшибкаУстановкиИсправленийРасширеннаяПодсказка + 218 + Label + true + true + + Left + + + Page + + HorizontalIfPossible + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Установленные исправления</value> + + + ГруппаУстановленныеИсправленияРасширеннаяПодсказка + 203 + Label + true + true + + Left + + + Pages + + Auto true @@ -284,13 +591,9 @@ true - - <key>ru</key> - <value>Результаты обновления</value> - - ГруппаРезультатыОбновленияРасширеннаяПодсказка - 185 + Группа1РасширеннаяПодсказка + 231 Label true true @@ -298,8 +601,14 @@ Left - Pages - + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto Auto @@ -529,6 +838,7 @@ Page + HorizontalIfPossible auto false @@ -691,6 +1001,7 @@ Page + HorizontalIfPossible false @@ -812,7 +1123,7 @@ ГруппаПриоритет - 199 + 242 ПриоритетОбновления 177 @@ -879,7 +1190,7 @@ КоличествоПотоковОбновленияИнформационнойБазы - 201 + 244 <key>ru</key> <value>потоками</value> @@ -900,7 +1211,7 @@ </handlers> <extendedTooltip> <name>КоличествоПотоковОбновленияИнформационнойБазыРасширеннаяПодсказка</name> - <id>203</id> + <id>246</id> <title> <key>ru</key> <value><b>• </><b>Работа пользователей</> - данные обрабатываются медленнее, но меньше нагрузка на сервер и влияние на работу пользователей в программе. @@ -917,7 +1228,7 @@ </extendedTooltip> <contextMenu> <name>КоличествоПотоковОбновленияИнформационнойБазыКонтекстноеМеню</name> - <id>202</id> + <id>245</id> <autoFill>true</autoFill> </contextMenu> <type>InputField</type> @@ -949,7 +1260,7 @@ ГруппаПриоритетРасширеннаяПодсказка - 200 + 243 Label true true @@ -959,6 +1270,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1128,6 +1440,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1214,6 +1527,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -1510,6 +1824,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -1691,6 +2006,7 @@ UsualGroup + HorizontalIfPossible Bottom Auto NormalSeparation @@ -1890,13 +2206,33 @@ true + + Исправления + + <key>ru</key> + <value>Исправления</value> + + 10 + + ValueList + + + true + + + true + + + + + КоличествоПотоковОбновленияИнформационнойБазы <key>ru</key> <value>Количество потоков обновления информационной базы</value> - 10 + 11 Number @@ -1997,6 +2333,28 @@ DontUse Auto + + ИнформацияДляТехническойПоддержки + + <key>ru</key> + <value>Информация для технической поддержки</value> + + 1 + + ru + Информация для технической поддержки + + + true + + + + ИнформацияДляТехническойПоддержки + + + Auto + Auto + ОткрытиеИзПанелиАдминистрирования diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Help/ru.html b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Help/ru.html index 45db561a3..1b20dc2f7 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Help/ru.html +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Help/ru.html @@ -22,7 +22,27 @@
        При установке приоритета за обработкой данных убирается задержка между запусками регламентного задания по отложенной обработке данных.
      • Рекомендуется использовать в тех случаях, когда необходимо быстрее получить доступ к обрабатываемым данным.
  • -
    При повышении приоритета выполнения дополнительной процедуры обработки данных также повышается приоритет тех процедур, от которых она зависит.
  • Настройка расписания обработки данных

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

    Многопоточное обновление

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

    Настройка расписания обработки данных

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

    Проверка блокировки регламентных заданий

    diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Module.bsl b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Module.bsl index adee7e0f3..71d74064e 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Module.bsl +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Module.bsl @@ -176,7 +176,9 @@ КонецПроцедуры &НаКлиенте -Процедура ГиперссылкаОшибкаОбновленияНажатие(Элемент) +Процедура ИнформацияОшибкаОбновленияОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; ПараметрыФормы = Новый Структура; @@ -208,6 +210,12 @@ КонецПроцедуры +&НаКлиенте +Процедура ИнформацияИсправленияУстановленыОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + ПоказатьУстановленныеИсправления(); +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -246,6 +254,27 @@ КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ИнформацияДляТехническойПоддержки(Команда) + + Если Не ПустаяСтрока(КаталогСкрипта) Тогда + ОписаниеОповещения = Новый ОписаниеОповещения("НачатьПоискФайловЗавершение", ЭтотОбъект); + НачатьПоискФайлов(ОписаниеОповещения, КаталогСкрипта, "log*.txt"); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура НачатьПоискФайловЗавершение(МассивФайлов, ДополнительныеПараметры) Экспорт + Если МассивФайлов.Количество() > 0 Тогда + ФайлЖурнала = МассивФайлов[0]; + ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра(ФайлЖурнала); + Иначе + // Если лога нет, то открываем временный каталог скрипта обновления. + ОбщегоНазначенияКлиент.ОткрытьПроводник(КаталогСкрипта); + КонецЕсли; +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -357,25 +386,19 @@ Если Обработчик.Статус = "Ошибка" Тогда Обработчик.СтатистикаВыполнения.Очистить(); Обработчик.Статус = "НеВыполнено"; + ИначеЕсли Обработчик.Статус = "Выполняется" Тогда + Обработчик.СтатистикаВыполнения.Вставить("КоличествоЗапусков", 0); КонецЕсли; КонецЦикла; КонецЦикла; КонецЦикла; - ПланОбновленияПуст = Истина; Для Каждого ЦиклОбновления Из СведенияОбОбновлении.ПланОтложенногоОбновления Цикл Если ЦиклОбновления.Свойство("ЗавершеноСОшибками") Тогда ЦиклОбновления.Удалить("ЗавершеноСОшибками"); КонецЕсли; - Если ЦиклОбновления.Обработчики.Количество() > 0 Тогда - ПланОбновленияПуст = Ложь; - КонецЕсли; КонецЦикла; - Если ПланОбновленияПуст Тогда - ОбновлениеИнформационнойБазыСлужебный.СоставитьПланОтложенногоОбновления(СведенияОбОбновлении, Истина); - КонецЕсли; - ОбновлениеИнформационнойБазыСлужебный.ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); Если Не ИБФайловая Тогда @@ -532,10 +555,49 @@ &НаСервере Процедура ОбработатьРезультатОбновленияНаСервере() + Элементы.ГруппаУстановленныеИсправления.Видимость = Ложь; // Если это первый запуск после обновления конфигурации, то запоминаем и сбрасываем статус. Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеКонфигурации") Тогда + ИнформацияПоИсправлениям = Неопределено; МодульОбновлениеКонфигурации = ОбщегоНазначения.ОбщийМодуль("ОбновлениеКонфигурации"); - МодульОбновлениеКонфигурации.ПроверитьСтатусОбновления(РезультатОбновления, КаталогСкрипта); + МодульОбновлениеКонфигурации.ПроверитьСтатусОбновления(РезультатОбновления, КаталогСкрипта, ИнформацияПоИсправлениям); + ОбработатьРезультатУстановкиИсправлений(ИнформацияПоИсправлениям); + КонецЕсли; + + Если ПустаяСтрока(КаталогСкрипта) Тогда + Элементы.ИнформацияДляТехническойПоддержки.Видимость = Ложь; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ОбработатьРезультатУстановкиИсправлений(ИнформацияПоИсправлениям) + + Если ТипЗнч(ИнформацияПоИсправлениям) <> Тип("Структура") Тогда + Возврат; + КонецЕсли; + + ВсегоПатчей = ИнформацияПоИсправлениям.ВсегоПатчей; + Если ВсегоПатчей = 0 Тогда + Возврат; + КонецЕсли; + + Элементы.ГруппаУстановленныеИсправления.Видимость = Истина; + Исправления.ЗагрузитьЗначения(ИнформацияПоИсправлениям.Установленные); + + Если ИнформацияПоИсправлениям.НеУстановлено > 0 Тогда + УспешноУстановлено = ВсегоПатчей - ИнформацияПоИсправлениям.НеУстановлено; + Ссылка = Новый ФорматированнаяСтрока(НСтр("ru = 'Не удалось установить исправления'"),,,, "НеудачнаяУстановка"); + НадписьИсправления = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '(%1 из %2)'"), УспешноУстановлено, ВсегоПатчей); + НадписьИсправления = Новый ФорматированнаяСтрока(Ссылка, " ", НадписьИсправления); + Элементы.ГруппаУстановленныеИсправления.ТекущаяСтраница = Элементы.ГруппаОшибкаУстановкиИсправлений; + Элементы.ИнформацияОшибкаИсправлений.Заголовок = НадписьИсправления; + Иначе + Ссылка = Новый ФорматированнаяСтрока(НСтр("ru = 'Исправления (патчи)'"),,,, "УстановленныеИсправления"); + НадписьИсправления = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'успешно установлены (%1)'"), ВсегоПатчей); + НадписьИсправления = Новый ФорматированнаяСтрока(Ссылка, " ", НадписьИсправления); + Элементы.ИнформацияИсправленияУстановлены.Заголовок = НадписьИсправления; КонецЕсли; КонецПроцедуры @@ -543,20 +605,31 @@ &НаКлиенте Процедура ОбработатьРезультатОбновленияНаКлиенте() - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеКонфигурации") Тогда + Если РезультатОбновления <> Неопределено + И ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеКонфигурации") Тогда МодульОбновлениеКонфигурацииКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбновлениеКонфигурацииКлиент"); МодульОбновлениеКонфигурацииКлиент.ОбработатьРезультатОбновления(РезультатОбновления, КаталогСкрипта); Если РезультатОбновления = Ложь Тогда Элементы.ГруппаРезультатыОбновления.ТекущаяСтраница = Элементы.ГруппаОшибкаОбновления; // Если обновление конфигурации не выполнилось, то отложенные обработчики так же не выполняются. - Элементы.СтатусОбновления.Видимость = Ложь; + Элементы.СтатусОбновления.Видимость = Ложь; Элементы.ПодсказкаГдеНайтиЭтуФорму.Видимость = Ложь; КонецЕсли; КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ПоказатьУстановленныеИсправления() + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеКонфигурации") Тогда + МодульОбновлениеКонфигурацииКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбновлениеКонфигурацииКлиент"); + МодульОбновлениеКонфигурацииКлиент.ПоказатьУстановленныеИсправления(Исправления); + КонецЕсли; + +КонецПроцедуры + &НаСервере Процедура ПолучитьКоличествоПотоковОбновленияИнформационнойБазы() diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенноеОбновлениеНеЗавершено/Form.form b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенноеОбновлениеНеЗавершено/Form.form index f298e7879..b26c786fd 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенноеОбновлениеНеЗавершено/Form.form +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенноеОбновлениеНеЗавершено/Form.form @@ -96,6 +96,7 @@
    UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -242,6 +243,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенноеОбновлениеНеЗавершено/Module.bsl b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенноеОбновлениеНеЗавершено/Module.bsl index e0f31c22e..2d9bd8b3d 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенноеОбновлениеНеЗавершено/Module.bsl +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенноеОбновлениеНеЗавершено/Module.bsl @@ -10,7 +10,6 @@ Элементы.Подсказка.Заголовок = ТекстПодсказки; КонецЕсли; - НастройкиПодсистемы = ОбновлениеИнформационнойБазыСлужебный.НастройкиПодсистемы(); ПараметрыСообщения = НастройкиПодсистемы.ПараметрыСообщенияОНевыполненныхОтложенныхОбработчиках; Если ЗначениеЗаполнено(ПараметрыСообщения.ТекстСообщения) Тогда diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Form.form b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Form.form index 630ac2416..cf57b2948 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Form.form +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Form.form @@ -194,6 +194,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -461,6 +462,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ПредупреждениеБезопасности/Form.form b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ПредупреждениеБезопасности/Form.form index 6806b014d..8a3f7daea 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ПредупреждениеБезопасности/Form.form +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ПредупреждениеБезопасности/Form.form @@ -100,6 +100,7 @@ UsualGroup + HorizontalIfPossible Auto WeakSeparation true diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/СообщениеОНеудачномОбновлении/Form.form b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/СообщениеОНеудачномОбновлении/Form.form index 441ba77a1..1cc72a8c3 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/СообщениеОНеудачномОбновлении/Form.form +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/СообщениеОНеудачномОбновлении/Form.form @@ -97,6 +97,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -171,6 +172,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/СообщениеОНеудачномОбновлении/Module.bsl b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/СообщениеОНеудачномОбновлении/Module.bsl index 42fb8e8a7..587f0870c 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/СообщениеОНеудачномОбновлении/Module.bsl +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/СообщениеОНеудачномОбновлении/Module.bsl @@ -17,8 +17,10 @@ МодульОбменДаннымиСервер.ВключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском(); КонецЕсли; - ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, - , , Параметры.ПодробноеПредставлениеОшибки); + Если ЗначениеЗаполнено(Параметры.ПодробноеПредставлениеОшибки) Тогда + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, + , , Параметры.ПодробноеПредставлениеОшибки); + КонецЕсли; ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'При обновлении версии программы возникла ошибка: | diff --git a/SSL/src/DataProcessors/СдвигГраницыИтогов/Forms/ОсновнаяФорма/Form.form b/SSL/src/DataProcessors/СдвигГраницыИтогов/Forms/ОсновнаяФорма/Form.form index b2c1cec5a..615f559b2 100644 --- a/SSL/src/DataProcessors/СдвигГраницыИтогов/Forms/ОсновнаяФорма/Form.form +++ b/SSL/src/DataProcessors/СдвигГраницыИтогов/Forms/ОсновнаяФорма/Form.form @@ -102,6 +102,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканирования/Form.form b/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканирования/Form.form index 7db6e7960..b69864c85 100644 --- a/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканирования/Form.form +++ b/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканирования/Form.form @@ -623,6 +623,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -735,6 +736,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -988,6 +990,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true diff --git a/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканированияНаСеанс/Form.form b/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканированияНаСеанс/Form.form index f63b1584d..7a68c4189 100644 --- a/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканированияНаСеанс/Form.form +++ b/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканированияНаСеанс/Form.form @@ -396,6 +396,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -508,6 +509,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -761,6 +763,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Form.form b/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Form.form index 0e7aadff4..9089e2592 100644 --- a/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Form.form +++ b/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Form.form @@ -295,6 +295,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -492,6 +493,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Module.bsl b/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Module.bsl index f3934ea35..f7f8017af 100644 --- a/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Module.bsl +++ b/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Module.bsl @@ -173,7 +173,7 @@ &НаКлиенте Процедура ТаблицаФайловПриАктивизацииСтроки(Элемент) -#Если НЕ ВебКлиент Тогда +#Если НЕ ВебКлиент И НЕ МобильныйКлиент Тогда Если Элементы.ТаблицаФайлов.ТекущиеДанные = Неопределено Тогда Возврат; КонецЕсли; @@ -279,7 +279,7 @@ Если РасширениеРезультата = "pdf" Тогда - #Если НЕ ВебКлиент Тогда + #Если НЕ ВебКлиент И НЕ МобильныйКлиент Тогда ПараметрыВыполнения.ФайлРезультата = ПолучитьИмяВременногоФайла("pdf"); #КонецЕсли @@ -380,7 +380,7 @@ СтрокаВсехПутей = СтрокаВсехПутей + Строка.ПутьКФайлу; КонецЦикла; - #Если НЕ ВебКлиент Тогда + #Если НЕ ВебКлиент И НЕ МобильныйКлиент Тогда РасширениеРезультата = Строка(ФорматХраненияМногостраничный); РасширениеРезультата = НРег(РасширениеРезультата); ПараметрыВыполнения.ФайлРезультата = ПолучитьИмяВременногоФайла(РасширениеРезультата); @@ -457,7 +457,7 @@ ФайлРезультата = ""; Если РасширениеРезультата = "pdf" Тогда -#Если НЕ ВебКлиент Тогда +#Если НЕ ВебКлиент И НЕ МобильныйКлиент Тогда ФайлРезультата = ПолучитьИмяВременногоФайла("pdf"); #КонецЕсли @@ -832,7 +832,7 @@ &НаКлиенте Процедура ВнешнееСобытие(Источник, Событие, Данные) -#Если НЕ ВебКлиент Тогда +#Если НЕ ВебКлиент И НЕ МобильныйКлиент Тогда Если Источник = "TWAIN" И Событие = "ImageAcquired" Тогда diff --git a/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/ВыборПравилОбработки/Form.form b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/ВыборПравилОбработки/Form.form index e475401d4..77ec72941 100644 --- a/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/ВыборПравилОбработки/Form.form +++ b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/ВыборПравилОбработки/Form.form @@ -304,6 +304,7 @@ UsualGroup + HorizontalIfPossible Auto WeakSeparation true @@ -561,6 +562,7 @@ UsualGroup + HorizontalIfPossible Auto WeakSeparation true diff --git a/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/Форма/Form.form b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/Форма/Form.form index 8126d56e8..675dbd7cb 100644 --- a/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/Форма/Form.form @@ -96,6 +96,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -259,6 +260,7 @@ Page + HorizontalIfPossible auto false @@ -1225,6 +1227,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -1877,6 +1880,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -2050,6 +2054,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/Форма/Module.bsl index 8f19215e3..ea177c724 100644 --- a/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/Форма/Module.bsl @@ -755,11 +755,9 @@ КонецЕсли; #Иначе Модуль = Вычислить(Имя); -#Если НЕ ВебКлиент Тогда Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Общий модуль ""%1"" не найден.'"), Имя); КонецЕсли; -#КонецЕсли #КонецЕсли Возврат Модуль; diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Form.form b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Form.form index d0c6957d9..3ead42787 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Form.form +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Form.form @@ -1102,6 +1102,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -1336,6 +1337,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -1656,6 +1658,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Form.form b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Form.form index 49f2ec5a6..ac6989b11 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Form.form @@ -113,6 +113,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -623,6 +624,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1872,6 +1874,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -2106,6 +2109,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -2423,6 +2427,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/ТекущиеДела/Forms/НастройкаТекущихДел/Form.form b/SSL/src/DataProcessors/ТекущиеДела/Forms/НастройкаТекущихДел/Form.form index f5cbd6720..2df8df1a7 100644 --- a/SSL/src/DataProcessors/ТекущиеДела/Forms/НастройкаТекущихДел/Form.form +++ b/SSL/src/DataProcessors/ТекущиеДела/Forms/НастройкаТекущихДел/Form.form @@ -617,6 +617,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -936,6 +937,10 @@ ПериодОбновления + + <key>ru</key> + <value>Период обновления</value> + 3 Number @@ -949,6 +954,7 @@ true + ShowError ИспользоватьАвтообновление diff --git a/SSL/src/DataProcessors/ТекущиеДела/Forms/НастройкаТекущихДел/Module.bsl b/SSL/src/DataProcessors/ТекущиеДела/Forms/НастройкаТекущихДел/Module.bsl index edb63183b..b37f64f87 100644 --- a/SSL/src/DataProcessors/ТекущиеДела/Forms/НастройкаТекущихДел/Module.bsl +++ b/SSL/src/DataProcessors/ТекущиеДела/Forms/НастройкаТекущихДел/Module.bsl @@ -48,6 +48,10 @@ &НаКлиенте Процедура КнопкаОК(Команда) + Если Не ПроверитьЗаполнение() Тогда + Возврат; + КонецЕсли; + СохранитьНастройки(); Если АвтообновлениеВключено Тогда diff --git a/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Form.form b/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Form.form index 3a1694d95..ed3e72fac 100644 --- a/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Form.form @@ -186,6 +186,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Module.bsl index be960fe72..37395a6e4 100644 --- a/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Module.bsl @@ -518,7 +518,7 @@ Группа.Отображение = ОтображениеОбычнойГруппы.Нет; Если ТипГруппы = "ЗаголовокРаздела" Тогда - Группа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + Группа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; Иначе Группа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; КонецЕсли; diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl index 60283670e..dcafee58a 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl @@ -63,17 +63,17 @@ // Получает сообщение обмена с заданного ресурса во временный каталог сообщения обмена. // // Параметры: -// Нет. +// ПроверкаНаличия - Булево - Истина, если необходимо только проверить наличие сообщений обмена, без их загрузки. // // Возвращаемое значение: // Булево - Истина - удалось выполнить функцию, Ложь - произошла ошибка. // -Функция ПолучитьСообщение() Экспорт +Функция ПолучитьСообщение(ПроверкаНаличия = Ложь) Экспорт ИнициализацияСообщений(); Попытка - Результат = ПолучитьСообщениеОбмена(); + Результат = ПолучитьСообщениеОбмена(ПроверкаНаличия); Исключение Результат = Ложь; КонецПопытки; @@ -316,7 +316,7 @@ КонецФункции -Функция ПолучитьСообщениеОбмена() +Функция ПолучитьСообщениеОбмена(ПроверкаНаличия) ТаблицаСообщенийОбмена = Новый ТаблицаЗначений; ТаблицаСообщенийОбмена.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Массив")); @@ -362,16 +362,22 @@ Если ТаблицаСообщенийОбмена.Количество() = 0 Тогда - ПолучитьСообщениеОбОшибке(104); + Если Не ПроверкаНаличия Тогда + ПолучитьСообщениеОбОшибке(104); - СтрокаСообщения = НСтр("ru = 'Не обнаружены письма с заголовком: ""%1""'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ТемаСообщения); - ДополнитьСообщениеОбОшибке(СтрокаСообщения); + СтрокаСообщения = НСтр("ru = 'Не обнаружены письма с заголовком: ""%1""'"); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ТемаСообщения); + ДополнитьСообщениеОбОшибке(СтрокаСообщения); + КонецЕсли; Возврат Ложь; Иначе + Если ПроверкаНаличия Тогда + Возврат Истина; + КонецЕсли; + ТаблицаСообщенийОбмена.Сортировать("ДатаОтправления Убыв"); МассивКолонок = Новый Массив; @@ -571,10 +577,12 @@ Вложения.Вставить(ИмяФайлаИсходящегоСообщения, Новый ДвоичныеДанные(ПутьКФайлу)); + АдресЭлектроннойПочты = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(EMAILУчетнаяЗапись, "АдресЭлектроннойПочты"); + ПараметрыСообщения = Новый Структура; - ПараметрыСообщения.Вставить("Кому", EMAILУчетнаяЗапись.АдресЭлектроннойПочты); - ПараметрыСообщения.Вставить("Тема", ТемаСообщения); - ПараметрыСообщения.Вставить("Тело", Тело); + ПараметрыСообщения.Вставить("Кому", АдресЭлектроннойПочты); + ПараметрыСообщения.Вставить("Тема", ТемаСообщения); + ПараметрыСообщения.Вставить("Тело", Тело); ПараметрыСообщения.Вставить("Вложения", Вложения); Попытка diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl index a91f0e6b8..e23ccb2c4 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl @@ -71,12 +71,12 @@ // Возвращаемое значение: // Булево - Истина - удалось выполнить функцию, Ложь - произошла ошибка. // -Функция ПолучитьСообщение() Экспорт +Функция ПолучитьСообщение(ПроверкаНаличия = Ложь) Экспорт ИнициализацияСообщений(); Попытка - Результат = ПолучитьСообщениеОбмена(); + Результат = ПолучитьСообщениеОбмена(ПроверкаНаличия); Исключение Результат = Ложь; КонецПопытки; @@ -338,7 +338,7 @@ КонецФункции -Функция ПолучитьСообщениеОбмена() +Функция ПолучитьСообщениеОбмена(ПроверкаНаличия) ТаблицаФайловСообщенийОбмена = Новый ТаблицаЗначений; ТаблицаФайловСообщенийОбмена.Колонки.Добавить("Файл", Новый ОписаниеТипов("Файл")); @@ -375,20 +375,26 @@ Если ТаблицаФайловСообщенийОбмена.Количество() = 0 Тогда - ПолучитьСообщениеОбОшибке(3); + Если Не ПроверкаНаличия Тогда + ПолучитьСообщениеОбОшибке(3); - СтрокаСообщения = НСтр("ru = 'Каталог обмена информацией: ""%1""'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ИмяКаталогаОбменаИнформацией()); - ДополнитьСообщениеОбОшибке(СтрокаСообщения); - - СтрокаСообщения = НСтр("ru = 'Имя файла сообщения обмена: ""%1"" или ""%2""'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ШаблонИмениФайлаСообщенияДляПоиска + ".xml", ШаблонИмениФайлаСообщенияДляПоиска + ".zip"); - ДополнитьСообщениеОбОшибке(СтрокаСообщения); + СтрокаСообщения = НСтр("ru = 'Каталог обмена информацией: ""%1""'"); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ИмяКаталогаОбменаИнформацией()); + ДополнитьСообщениеОбОшибке(СтрокаСообщения); + + СтрокаСообщения = НСтр("ru = 'Имя файла сообщения обмена: ""%1"" или ""%2""'"); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ШаблонИмениФайлаСообщенияДляПоиска + ".xml", ШаблонИмениФайлаСообщенияДляПоиска + ".zip"); + ДополнитьСообщениеОбОшибке(СтрокаСообщения); + КонецЕсли; Возврат Ложь; Иначе + Если ПроверкаНаличия Тогда + Возврат Истина; + КонецЕсли; + ТаблицаФайловСообщенийОбмена.Сортировать("ВремяИзменения Убыв"); // Получаем из таблицы самый "свежий" файл сообщения обмена. diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ObjectModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ObjectModule.bsl index 3aa8c11ef..19aacf914 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ObjectModule.bsl @@ -61,17 +61,17 @@ // Получает сообщение обмена с заданного ресурса во временный каталог сообщения обмена. // // Параметры: -// Нет. +// ПроверкаНаличия - Булево - Истина, если необходимо только проверить наличие сообщений обмена, без их загрузки. // // Возвращаемое значение: // Булево - Истина - удалось выполнить функцию, Ложь - произошла ошибка. // -Функция ПолучитьСообщение() Экспорт +Функция ПолучитьСообщение(ПроверкаНаличия = Ложь) Экспорт ИнициализацияСообщений(); Попытка - Результат = ПолучитьСообщениеОбмена(); + Результат = ПолучитьСообщениеОбмена(ПроверкаНаличия); Исключение Результат = Ложь; КонецПопытки; @@ -336,7 +336,7 @@ КонецФункции -Функция ПолучитьСообщениеОбмена() +Функция ПолучитьСообщениеОбмена(ПроверкаНаличия) ТаблицаФайловСообщенийОбмена = Новый ТаблицаЗначений; ТаблицаФайловСообщенийОбмена.Колонки.Добавить("Файл"); @@ -390,20 +390,26 @@ Если ТаблицаФайловСообщенийОбмена.Количество() = 0 Тогда - ПолучитьСообщениеОбОшибке(1); + Если Не ПроверкаНаличия Тогда + ПолучитьСообщениеОбОшибке(1); - СтрокаСообщения = НСтр("ru = 'Каталог обмена информацией на сервере: ""%1""'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, КаталогНаFTPСервере); - ДополнитьСообщениеОбОшибке(СтрокаСообщения); - - СтрокаСообщения = НСтр("ru = 'Имя файла сообщения обмена: ""%1"" или ""%2""'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ШаблонИмениФайлаСообщения + ".xml", ШаблонИмениФайлаСообщения + ".zip"); - ДополнитьСообщениеОбОшибке(СтрокаСообщения); + СтрокаСообщения = НСтр("ru = 'Каталог обмена информацией на сервере: ""%1""'"); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, КаталогНаFTPСервере); + ДополнитьСообщениеОбОшибке(СтрокаСообщения); + + СтрокаСообщения = НСтр("ru = 'Имя файла сообщения обмена: ""%1"" или ""%2""'"); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ШаблонИмениФайлаСообщения + ".xml", ШаблонИмениФайлаСообщения + ".zip"); + ДополнитьСообщениеОбОшибке(СтрокаСообщения); + КонецЕсли; Возврат Ложь; Иначе + Если ПроверкаНаличия Тогда + Возврат Истина; + КонецЕсли; + ТаблицаФайловСообщенийОбмена.Сортировать("ВремяИзменения Убыв"); // Получаем из таблицы самый "свежий" файл сообщения обмена. diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Form.form b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Form.form index 785b1d7ce..8b73b4494 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Form.form +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Form.form @@ -200,6 +200,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -419,6 +420,7 @@ UsualGroup + HorizontalIfPossible Auto true Button @@ -2235,6 +2237,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2518,6 +2521,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2525,37 +2529,6 @@ Auto
    - - НебольшойОтступСнизу1 - 494 - true - true - - true - - - НебольшойОтступСнизу1РасширеннаяПодсказка - 496 - Label - true - true - - Left - - - - НебольшойОтступСнизу1КонтекстноеМеню - 495 - true - - Label - true - true - false - - Left - - true true @@ -2680,6 +2653,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2687,36 +2661,6 @@ Auto - - НебольшойОтступСнизу2 - 499 - true - true - - true - - - НебольшойОтступСнизу2РасширеннаяПодсказка - 501 - Label - true - true - - Left - - - - НебольшойОтступСнизу2КонтекстноеМеню - 500 - true - - Label - true - true - - Left - - true true @@ -2841,6 +2785,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2848,36 +2793,6 @@ Auto - - НебольшойОтступСнизу3 - 504 - true - true - - true - - - НебольшойОтступСнизу3РасширеннаяПодсказка - 506 - Label - true - true - - Left - - - - НебольшойОтступСнизу3КонтекстноеМеню - 505 - true - - Label - true - true - - Left - - true true @@ -2976,55 +2891,16 @@ true Label - 5 + 3 true true + false Center Left Center - - СсылкаПодробнее1 - 466 - - <key>ru</key> - <value>Подробнее</value> - - true - true - - true - - - СсылкаПодробнее1РасширеннаяПодсказка - 468 - Label - true - true - - Left - - - - СсылкаПодробнее1КонтекстноеМеню - 467 - true - - Label - true - Center - - - Click - СсылкаПодробнееНажатие - - true - Left - Center - - true true @@ -3046,6 +2922,7 @@ UsualGroup + AlwaysHorizontal Auto true true @@ -3054,16 +2931,20 @@ - НебольшойОтступСнизу4 - 509 + СсылкаПодробнее1 + 466 + + <key>ru</key> + <value>Технические сведения о проблеме</value> + true true true - НебольшойОтступСнизу4РасширеннаяПодсказка - 511 + СсылкаПодробнее1РасширеннаяПодсказка + 468 Label true true @@ -3072,15 +2953,21 @@
    - НебольшойОтступСнизу4КонтекстноеМеню - 510 + СсылкаПодробнее1КонтекстноеМеню + 467 true Label - true true + Center + + Click + СсылкаПодробнееНажатие + + true Left + Center true @@ -3323,6 +3210,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl index 5346155d9..357c07135 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl @@ -255,19 +255,37 @@ // Удаление циклов (кольцевых связей объектов). Процедура УдалитьОставшиесяОбъектыВОднойТранзакции(ПараметрыВыполнения) + // 0. Расчет объектов, допускающих удаления. + ДопускающиеУдаление = Новый Массив; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); + МодульУправлениеДоступомСлужебный.ПриДобавленииИсключенийПоискаСсылокДопускающихУдаление(ДопускающиеУдаление); + КонецЕсли; + // 1. Объекты, которые невозможно удалить, получаются путем определения неразрешимых связей. ОбъектыКоторыеНевозможноУдалить = Новый Массив; ВложенныеНеразрешимыеСвязи = Новый Массив; Для Каждого Препятствующий Из ПараметрыВыполнения.ПрепятствующиеУдалению Цикл - // 1.1. Критерием для определения неразрешимых связей является тот факт, что объект, препятствующий удалению, - // не является регистром. В случае с регистрами предполагаем, что записи регистра будут удалены автоматически, - // при удалении объекта в его ведущем измерении. - Если Препятствующий.ОбнаруженныйТип <> Тип("Строка") - И Не ОбщегоНазначения.ЭтоОбъектСсылочногоТипа(Метаданные.НайтиПоТипу(Препятствующий.ОбнаруженныйТип)) Тогда - Продолжить; + + // 1.0. Обнаруженный тип может быть строкой в случае, когда препятствует удалению ошибка записи. + // потому исключать препятствующие объекты следует только в случае, когда это не ошибка. + Если Препятствующий.ОбнаруженныйТип <> Тип("Строка") Тогда + + // 1.1. Критерием для определения неразрешимых связей является тот факт, что объект, препятствующий удалению, + // не является регистром. В случае с регистрами предполагаем, что записи регистра будут удалены автоматически, + // при удалении объекта в его ведущем измерении. + Если Не ОбщегоНазначения.ЭтоОбъектСсылочногоТипа(Метаданные.НайтиПоТипу(Препятствующий.ОбнаруженныйТип)) Тогда + Продолжить; + КонецЕсли; + + // 1.2. Этот объект не должен быть допущенным к удалению объектом. + Если ДопускающиеУдаление.Найти(Препятствующий.ОбнаруженныйСсылка.Метаданные()) <> Неопределено Тогда + Продолжить; + КонецЕсли; КонецЕсли; - // 1.2. А также то, что объект, препятствующий удалению, не отмечен для удаления. + + // 1.3. А также то, что объект, препятствующий удалению, не отмечен для удаления. Если ПараметрыВыполнения.НеУдаленные.Найти(Препятствующий.ОбнаруженныйСсылка) = Неопределено И ОбъектыКоторыеНевозможноУдалить.Найти(Препятствующий.УдаляемыйСсылка) = Неопределено Тогда ОбъектыКоторыеНевозможноУдалить.Добавить(Препятствующий.УдаляемыйСсылка); @@ -336,6 +354,16 @@ Если УдаляемыеОбъекты.Количество() > 0 Тогда ПрепятствующиеУдалению = НайтиПоСсылкам(УдаляемыеОбъекты); + // Исключение объектов допускающих удаление. + Индекс = ПрепятствующиеУдалению.Количество() - 1; + Пока Индекс >= 0 Цикл + Если ДопускающиеУдаление.Найти(ПрепятствующиеУдалению[Индекс].Метаданные) <> Неопределено Тогда + ПрепятствующиеУдалению.Удалить(Индекс); + КонецЕсли; + Индекс = Индекс - 1; + КонецЦикла; + + // Исключение объектов, ранее удаленных в этой же транзакции. ИмяКолонки = ПрепятствующиеУдалению.Колонки[1].Имя; Для Каждого НеУдаленныйОбъект Из УдаляемыеОбъекты Цикл ПоискНеПрепятствующих = Новый Структура(ИмяКолонки, НеУдаленныйОбъект); @@ -352,7 +380,7 @@ Если Успех Тогда ЗафиксироватьТранзакцию(); - Иначе + Иначе ОтменитьТранзакцию(); КонецЕсли; @@ -530,6 +558,7 @@ УстановитьПривилегированныйРежим(Истина); УдалитьОбъекты(УдаляемыеОбъекты, Истина, ПрепятствующиеУдалению); УстановитьПривилегированныйРежим(Ложь); + Если ПрепятствующиеУдалению.Колонки.Количество() < 3 Тогда ВызватьИсключение НСтр("ru = 'Не удалось выполнить удаление объектов.'"); КонецЕсли; diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Form.form b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Form.form index 2c4c28010..f95875d90 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Form.form +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Form.form @@ -120,6 +120,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -533,6 +534,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -618,6 +620,7 @@ Page + HorizontalIfPossible auto false @@ -736,6 +739,7 @@ Page + HorizontalIfPossible auto false @@ -857,6 +861,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -981,6 +986,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1249,6 +1255,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1331,6 +1338,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2229,6 +2237,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2339,6 +2348,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2367,6 +2377,7 @@ Page + HorizontalIfPossible auto false @@ -2465,6 +2476,7 @@ Page + HorizontalIfPossible false @@ -2799,6 +2811,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -3253,6 +3266,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -3511,6 +3525,7 @@ Page + HorizontalIfPossible false @@ -3604,6 +3619,7 @@ Page + HorizontalIfPossible false diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl index 4fa73afee..6f688824b 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl @@ -757,7 +757,7 @@ ДополнительныеПараметры = Новый Структура(); ДополнительныеПараметры.Вставить("ИмяФайла", ИмяФайла); - ДополнительныеПараметры.Вставить("ОписаниеОповещения", Новый ОписаниеОповещения("ОткрытьКаталогСФайлом", ЭтотОбъект, ДополнительныеПараметры)); + ДополнительныеПараметры.Вставить("ОписаниеОповещения", Новый ОписаниеОповещения); Файл = Новый Файл(); Файл.НачатьИнициализацию(Новый ОписаниеОповещения("ПроверитьСуществованиеФайла", ЭтотОбъект, ДополнительныеПараметры), ИмяФайла); @@ -781,12 +781,6 @@ КонецПроцедуры -// Продолжение процедуры (см. выше). -&НаКлиенте -Процедура ОткрытьКаталогСФайлом(КодВозврата, ДополнительныеПараметры) Экспорт - // Обработка не требуется. -КонецПроцедуры - &НаКлиенте Процедура ОчиститьДанныеОФайлеДляЗагрузкиДанных() @@ -1812,7 +1806,7 @@ Возврат; КонецЕсли; - #Если Не ВебКлиент Тогда + #Если Не ВебКлиент Тогда Если Не ПустаяСтрока(Объект.ИмяФайлаПротоколаОбмена) Тогда ОткрытьВПриложении(Объект.ИмяФайлаПротоколаОбмена); diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Form.form b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Form.form index 60dda4070..0f017578c 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Form.form +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Form.form @@ -310,6 +310,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -434,6 +435,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl index de565a890..2e46957f3 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl @@ -12009,7 +12009,7 @@ Источник = ИмяФайлаПравилОбмена; Если мСписокМакетовПравилОбмена.НайтиПоЗначению(Источник) <> Неопределено Тогда - Для каждого Макет Из ЭтотОбъект.Метаданные().Макеты Цикл + Для каждого Макет Из Метаданные().Макеты Цикл Если Макет.Синоним = Источник Тогда Источник = Макет.Имя; Прервать; @@ -13749,7 +13749,7 @@ мСписокМакетовПравилОбмена = Новый СписокЗначений; - Для каждого Макет Из ЭтотОбъект.Метаданные().Макеты Цикл + Для каждого Макет Из Метаданные().Макеты Цикл мСписокМакетовПравилОбмена.Добавить(Макет.Синоним); КонецЦикла; diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Form.form b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Form.form index c6f92fbec..402bac589 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Form.form +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Form.form @@ -109,6 +109,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -210,6 +211,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -345,6 +347,7 @@ UsualGroup + HorizontalIfPossible Auto true Auto @@ -445,6 +448,7 @@ UsualGroup + HorizontalIfPossible Auto true Auto @@ -3215,6 +3219,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl index 2ac330b45..542acfb2f 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl @@ -960,7 +960,7 @@ КонецЕсли; ИначеЕсли ВРег(Действие) = ВРег("ПересчитатьИтоги") Тогда - Если ВыбраннаяСтрока.АгрегатыИтоги Тогда + Если ВыбраннаяСтрока.АгрегатыИтоги = 1 Тогда Продолжить; КонецЕсли; diff --git a/SSL/src/DataProcessors/УстановкаОбновлений/Forms/НастройкаРезервнойКопии/Form.form b/SSL/src/DataProcessors/УстановкаОбновлений/Forms/НастройкаРезервнойКопии/Form.form index ecb477072..e72e02c45 100644 --- a/SSL/src/DataProcessors/УстановкаОбновлений/Forms/НастройкаРезервнойКопии/Form.form +++ b/SSL/src/DataProcessors/УстановкаОбновлений/Forms/НастройкаРезервнойКопии/Form.form @@ -220,6 +220,7 @@ Page + HorizontalIfPossible auto false @@ -333,6 +334,7 @@ Page + HorizontalIfPossible auto false @@ -399,6 +401,7 @@ Page + HorizontalIfPossible auto false diff --git a/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Form.form b/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Form.form index 882906e8d..9324df678 100644 --- a/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Form.form @@ -101,6 +101,113 @@ UsualGroup + + HorizontalIfPossible + Auto + NormalSeparation + true + true + Auto + Auto + + + + ПанельИнформацииОРасширениях + 1213 + + КартинкаЕстьРасширения + 1215 + + <key>ru</key> + <value>Картинка есть расширения</value> + + true + true + + true + + + КартинкаЕстьРасширенияРасширеннаяПодсказка + 1217 + Label + true + true + + Left + + + + КартинкаЕстьРасширенияКонтекстноеМеню + 1216 + true + + true + true + false + + + CommonPicture.Предупреждение32 + + + + + НадписьЕстьРасширения + 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 + + + <key>ru</key> + <value>Панель информации о расширениях</value> + + true + + ПанельИнформацииОРасширенияхРасширеннаяПодсказка + 1214 + Label + true + true + + Left + + + UsualGroup Auto NormalSeparation @@ -169,7 +276,7 @@ ru - У&кажите файл обновления: + &Укажите файл обновления или исправлений: 1 @@ -190,7 +297,7 @@ true - Объект.ИмяФайлаОбновления + ВыбранныеФайлы None @@ -469,6 +576,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -561,6 +669,7 @@ UsualGroup + HorizontalIfPossible Bottom Auto true @@ -1241,6 +1350,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -1348,6 +1458,7 @@ UsualGroup + HorizontalIfPossible Bottom Auto NormalSeparation @@ -1562,6 +1673,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1720,6 +1832,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2081,6 +2194,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2301,6 +2415,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -2366,6 +2481,443 @@ false + + ПослеУстановкиИсправлений + 1178 + + ОшибкаУстановкиИсправлений + 1200 + + ГруппаСообщение + 1208 + + ДекорацияОшибкаУстановкиИсправлений + 1202 + true + true + + true + + + ДекорацияОшибкаУстановкиИсправленийРасширеннаяПодсказка + 1204 + Label + true + true + + Left + + + + ДекорацияОшибкаУстановкиИсправленийКонтекстноеМеню + 1203 + true + + true + true + + + CommonPicture.Ошибка32 + + + + + НадписьОшибкаУстановкиИсправлений + 1205 + + <key>ru</key> + <value>При установке исправлений возникли ошибки. +Подробнее см. в <link ЖурналРегистрации>Журнале регистрации</></value> + + true + true + + true + + + НадписьОшибкаУстановкиИсправленийРасширеннаяПодсказка + 1207 + Label + true + true + + Left + + + + НадписьОшибкаУстановкиИсправленийКонтекстноеМеню + 1206 + true + + true + Label + true + true + + + URLProcessing + НадписьОшибкаУстановкиИсправленийОбработкаНавигационнойСсылки + + Left + + + true + true + + true + + + <key>ru</key> + <value>Сообщение</value> + + + ГруппаСообщениеРасширеннаяПодсказка + 1209 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + ДекорацияУстановленоИсправлений + 1210 + + <key>ru</key> + <value>Установлено исправлений: %1 из %2, изменения вступят в силу после перезапуска программы</value> + + true + true + + true + + + ДекорацияУстановленоИсправленийРасширеннаяПодсказка + 1212 + Label + true + true + + Left + + + + ДекорацияУстановленоИсправленийКонтекстноеМеню + 1211 + true + + Label + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Ошибка установки исправлений</value> + + + ОшибкаУстановкиИсправленийРасширеннаяПодсказка + 1201 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + ИсправленияУстановлены + 1180 + + ДекорацияИсправленияУстановлены + 1182 + + <key>ru</key> + <value>Исправления установлены и вступят в силу после перезапуска программы</value> + + true + true + + true + + + ДекорацияИсправленияУстановленыРасширеннаяПодсказка + 1184 + Label + true + true + + Left + + + + ДекорацияИсправленияУстановленыКонтекстноеМеню + 1183 + true + + Label + true + + Left + + + + ГруппаПерезапуститьОтступ + 1185 + + ДекорацияОтступ + 1187 + true + true + + true + + + ДекорацияОтступРасширеннаяПодсказка + 1189 + Label + true + true + + Left + + + + ДекорацияОтступКонтекстноеМеню + 1188 + true + + Label + true + true + + Left + + + + ПерезапуститьПрограмму + 1190 + + <key>ru</key> + <value>Перезапустить программу</value> + + true + true + + true + + + ПерезапуститьПрограмму + + Right + + ПерезапуститьПрограммуРасширеннаяПодсказка + 1192 + Label + true + true + + Left + + + + ПерезапуститьПрограммуКонтекстноеМеню + 1191 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Перезапустить отступ</value> + + + ГруппаПерезапуститьОтступРасширеннаяПодсказка + 1186 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + ГруппаАктивныеПользователи + 1193 + + ДекорацияАктивныеПользователи + 1195 + + <key>ru</key> + <value>Также с программой работают <link 1>другие пользователи</>. +Для них исправления вступят в силу при следующем входе в программу.</value> + + true + true + + true + + + ДекорацияАктивныеПользователиРасширеннаяПодсказка + 1197 + Label + true + true + + Left + + + + ДекорацияАктивныеПользователиКонтекстноеМеню + 1196 + true + + true + Label + 71 + true + + + URLProcessing + ДекорацияАктивныеПользователиОбработкаНавигационнойСсылки + + Left + + + true + true + + true + + + <key>ru</key> + <value>Активные пользователи</value> + + + ГруппаАктивныеПользователиРасширеннаяПодсказка + 1194 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + NormalSeparation + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Исправления установлены</value> + + + ИсправленияУстановленыРасширеннаяПодсказка + 1181 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>После установки исправлений</value> + + + ПослеУстановкиИсправленийРасширеннаяПодсказка + 1179 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + ОбновленияНеОбнаружено 1098 @@ -2467,6 +3019,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2566,6 +3119,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2887,6 +3441,7 @@ UsualGroup + HorizontalIfPossible Bottom Auto true @@ -3104,6 +3659,93 @@ true + + ЭтоПодчиненныйУзелРИБ + + <key>ru</key> + <value>Это подчиненный узел РИБ</value> + + 31 + + Boolean + + + true + + + true + + + + ПерезапуститьПрограмму + + <key>ru</key> + <value>Перезапустить программу</value> + + 32 + + Boolean + + + true + + + true + + + + ВыбранныеФайлы + + <key>ru</key> + <value>Выбранные файлы</value> + + 33 + + String + + + + true + + + true + + + + ЭтоБазоваяВерсия + + <key>ru</key> + <value>Это базовая версия</value> + + 34 + + Boolean + + + true + + + true + + + + ФайлыИсправленийСтрокой + + <key>ru</key> + <value>Файлы исправлений строкой</value> + + 35 + + String + + + + true + + + true + + Назад @@ -3191,6 +3833,13 @@ </valueType> <keyParameter>true</keyParameter> </parameters> + <parameters> + <name>ВыбранныеФайлы</name> + <valueType> + <types>String</types> + <stringQualifiers/> + </valueType> + </parameters> <commandInterface> <navigationPanel/> <commandBar/> diff --git a/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Module.bsl index 809171ddb..682e639bc 100644 --- a/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Module.bsl @@ -1,7 +1,7 @@ #Область ОписаниеПеременных &НаКлиенте -Перем ПараметрыАдминистрирования, ИмяСобытияЖурнала; +Перем ПараметрыАдминистрирования, ФайлыИсправлений; #КонецОбласти @@ -26,6 +26,7 @@ СтандартныеПодсистемыСервер.УстановитьОтображениеЗаголовковГрупп(ЭтотОбъект); ЭтоФайловаяБаза = ОбщегоНазначения.ИнформационнаяБазаФайловая(); + ЭтоПодчиненныйУзелРИБ = ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ(); // Если это первый запуск после обновления конфигурации, то запоминаем и сбрасываем статус. Объект.РезультатОбновления = ОбновлениеКонфигурации.ОбновлениеКонфигурацииУспешно(КаталогСкрипта); @@ -37,8 +38,8 @@ Элементы.ПанельПочта.Видимость = Ложь; КонецЕсли; - Элементы.ПанельИнформацииОбОшибках.Видимость = ВидимостьПанелиОшибок(); - + Элементы.ПанельИнформацииОбОшибках.Видимость = ЕстьПроблемыСистемныхПроверок(); + Элементы.ПанельИнформацииОРасширениях.Видимость = ОбновлениеКонфигурации.ПредупреждатьОНаличииРасширений(); // Проверяем каждый раз при открытии помощника. КонфигурацияИзменена = КонфигурацияИзменена(); @@ -60,7 +61,11 @@ УстановитьПривилегированныйРежим(Истина); - ВосстановитьНастройкиОбновленияКонфигурации(); + Если ПустаяСтрока(Параметры.ВыбранныеФайлы) Тогда + ВосстановитьНастройкиОбновленияКонфигурации(); + Иначе + ВыбранныеФайлы = Параметры.ВыбранныеФайлы; + КонецЕсли; Если ЭтоФайловаяБаза И Объект.РежимОбновления > 1 Или Параметры.ЗавершениеРаботыСистемы Тогда Объект.РежимОбновления = 0; @@ -68,14 +73,24 @@ Элементы.ПоискИУстановкаОбновлений.Видимость = ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ПолучениеОбновленийПрограммы"); + ЭтоБазоваяВерсия = СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации(); + Если ЭтоБазоваяВерсия Тогда + ЗаголовокВариантаВыбора = "&" + НСтр("ru = 'Укажите файл обновления'"); + Элементы.ПереключательНуженФайлОбновления.СписокВыбора[1].Представление = ЗаголовокВариантаВыбора; + КонецЕсли; + КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) - ИмяСобытияЖурнала = ОбновлениеКонфигурацииКлиент.СобытиеЖурналаРегистрации(); + // Инициализация переменных. + ФайлыИсправлений = Новый Массив; + Если Не ПустаяСтрока(ФайлыИсправленийСтрокой) Тогда + ФайлыИсправлений = СтрРазделить(ФайлыИсправленийСтрокой, ","); + КонецЕсли; - Если Не ВозможенЗапускОбновления() Тогда + Если Не ОбновлениеКонфигурацииКлиент.ВозможенЗапускОбновления() Тогда Отказ = Истина; Возврат; КонецЕсли; @@ -88,7 +103,7 @@ Страницы = Элементы.СтраницыПомощника.ПодчиненныеЭлементы; ИмяСтраницы = Страницы.ФайлОбновления.Имя; - Если Не СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().ЭтоГлавныйУзел Тогда + Если ЭтоПодчиненныйУзелРИБ Тогда Если КонфигурацияИзменена Тогда ПерейтиКВыборуРежимаОбновления(); Возврат; @@ -153,15 +168,37 @@ Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); Диалог.Каталог = ПолучитьКаталогФайла(Элементы.ПолеФайлОбновления.ТекстРедактирования); Диалог.ПроверятьСуществованиеФайла = Истина; - Диалог.Фильтр = НСтр("ru = 'Все файлы поставки (*.cf*;*.cfu)|*.cf*;*.cfu|Файлы поставки конфигурации (*.cf)|*.cf|Файлы поставки обновления конфигурации(*.cfu)|*.cfu'"); + Если ЭтоБазоваяВерсия Тогда + Диалог.Фильтр = НСтр("ru = 'Все файлы поставки (*.cf*;*.cfu)|*.cf*;*.cfu|Файлы поставки конфигурации (*.cf)|*.cf|Файлы поставки обновления конфигурации(*.cfu)|*.cfu'"); + Иначе + Диалог.МножественныйВыбор = Истина; + Диалог.Фильтр = НСтр("ru = 'Все файлы (*.cf*;*.cfu;*.cfe;*.zip)|*.cf*;*.cfu;*.cfe;*.zip|Файлы поставки конфигурации (*.cf)|*.cf|Файлы поставки обновления конфигурации (*.cfu)|*.cfu|Файлы исправлений (*.cfe*;*.zip)|*.cfe*;*.zip'"); + КонецЕсли; Диалог.Заголовок = НСтр("ru = 'Выбор поставки обновления конфигурации'"); Если Диалог.Выбрать() Тогда - Объект.ИмяФайлаОбновления = Диалог.ПолноеИмяФайла; + ВыбранныеФайлы = СтрСоединить(Диалог.ВыбранныеФайлы, ","); КонецЕсли; КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Страница ПослеУстановкиИсправлений + +&НаКлиенте +Процедура ДекорацияАктивныеПользователиОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + ПоказатьАктивныхПользователей(); +КонецПроцедуры + +&НаКлиенте +Процедура НадписьОшибкаУстановкиИсправленийОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + ОтборЖурнала = Новый Структура; + ОтборЖурнала.Вставить("СобытиеЖурналаРегистрации", НСтр("ru = 'Исправления.Установка'")); + ЖурналРегистрацииКлиент.ОткрытьЖурналРегистрации(ОтборЖурнала); +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Страница ВыборРежимаОбновленияФайл @@ -235,15 +272,13 @@ КонецПроцедуры &НаСервере -Функция ВидимостьПанелиОшибок() +Функция ЕстьПроблемыСистемныхПроверок() Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтрольВеденияУчета") Тогда - МодульКонтрольВеденияУчета = ОбщегоНазначения.ОбщийМодуль("КонтрольВеденияУчета"); - СводнаяИнформацияПоВидамПроверок = МодульКонтрольВеденияУчета.СводнаяИнформацияПоВидамПроверок("СистемныеПроверки"); - Возврат СводнаяИнформацияПоВидамПроверок.Количество > 0; - Иначе - Возврат Ложь; + МодульКонтрольВеденияУчетаСлужебный = ОбщегоНазначения.ОбщийМодуль("КонтрольВеденияУчетаСлужебный"); + Возврат МодульКонтрольВеденияУчетаСлужебный.ЕстьПроблемыСистемныхПроверок(); КонецЕсли; + Возврат Ложь; КонецФункции @@ -432,6 +467,11 @@ ВсеСтраницы.АктивныеСоединения1, ВсеСтраницы.АктивныеПользователи1); КонецЕсли; + ИначеЕсли ТекущаяСтраница = Элементы.ПослеУстановкиИсправлений Тогда + + СоединенияИнфо = СоединенияИБВызовСервера.ИнформацияОСоединениях(Ложь, ПараметрыПриложения[ИмяПараметра]); + Элементы.ДекорацияАктивныеПользователи.Видимость = СоединенияИнфо.НаличиеАктивныхСоединений; + КонецЕсли; КонецПроцедуры @@ -445,14 +485,15 @@ ПараметрыОбновления.Вставить("ВыслатьОтчетНаПочту"); ПараметрыОбновления.Вставить("АдресЭлектроннойПочты"); ПараметрыОбновления.Вставить("КодЗадачиПланировщика"); - ПараметрыОбновления.Вставить("ИмяФайлаОбновления"); ПараметрыОбновления.Вставить("СоздаватьРезервнуюКопию"); ПараметрыОбновления.Вставить("ИмяКаталогаРезервнойКопииИБ"); ПараметрыОбновления.Вставить("ВосстанавливатьИнформационнуюБазу"); + ПараметрыОбновления.Вставить("ИмяФайлаОбновления"); ЗаполнитьЗначенияСвойств(ПараметрыОбновления, Объект); ПараметрыОбновления.Вставить("ЗавершениеРаботыСистемы", Параметры.ЗавершениеРаботыСистемы); ПараметрыОбновления.Вставить("НуженФайлОбновления", Булево(НуженФайлОбновления)); + ПараметрыОбновления.Вставить("ФайлыИсправлений", ФайлыИсправлений); ОбновлениеКонфигурацииКлиент.УстановитьОбновление(ЭтотОбъект, ПараметрыОбновления, ПараметрыАдминистрирования); @@ -470,6 +511,8 @@ ИначеЕсли ТекущаяСтраница = Страницы.ВыборРежимаОбновленияФайл Или ТекущаяСтраница = Страницы.ВыборРежимаОбновленияСервер Тогда УстановитьОбновление(); + ИначеЕсли ТекущаяСтраница = Страницы.ПослеУстановкиИсправлений И ПерезапуститьПрограмму Тогда + ЗавершитьРаботуСистемы(Истина, Истина); Иначе Закрыть(); КонецЕсли; @@ -503,28 +546,89 @@ КонецПроцедуры &НаКлиенте -Процедура ПослеПодтвержденияБезопасности(Результат, ДополнительныеПараметры) Экспорт +Процедура ПерейтиКУстановкеИсправлений() - Если Результат = "Продолжить" Тогда + ПомещаемыеФайлы = Новый Массив; + Для Каждого ФайлИсправления Из ФайлыИсправлений Цикл + ПомещаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ФайлИсправления)); + КонецЦикла; + + ОписаниеОповещения = Новый ОписаниеОповещения("ПродолжитьУстановкуИсправлений", ЭтотОбъект); + НачатьПомещениеФайлов(ОписаниеОповещения, ПомещаемыеФайлы,, Ложь, УникальныйИдентификатор); + +КонецПроцедуры + +&НаКлиенте +Процедура ПродолжитьУстановкуИсправлений(ПомещенныеФайлы, ДополнительныеПараметры) Экспорт + + УстановитьИсправленияНаСервере(ПомещенныеФайлы); + + Элементы.СтраницыПомощника.ТекущаяСтраница = Элементы.ПослеУстановкиИсправлений; + Элементы.КнопкаДалее.Заголовок = НСтр("ru = 'Готово'"); + +КонецПроцедуры + +&НаСервере +Процедура УстановитьИсправленияНаСервере(ПомещенныеФайлы) + + СоединенияИнфо = СоединенияИБВызовСервера.ИнформацияОСоединениях(Ложь); + Элементы.ДекорацияАктивныеПользователи.Видимость = СоединенияИнфо.НаличиеАктивныхСоединений; + + ЕстьОшибки = Ложь; + УстановленоИсправлений = 0; + Для Каждого ПомещенныйФайл Из ПомещенныеФайлы Цикл - Если НуженФайлОбновления = 1 Тогда - Если Не ЗначениеЗаполнено(Объект.ИмяФайлаОбновления) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Укажите файл поставки обновления конфигурации.'"),,"Объект.ИмяФайлаОбновления"); - ТекущийЭлемент = Элементы.ПолеФайлОбновления; - Возврат; - КонецЕсли; - Файл = Новый Файл(Объект.ИмяФайлаОбновления); - Если Не Файл.Существует() Или Не Файл.ЭтоФайл() Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Файл поставки обновления конфигурации не найден.'"),,"Объект.ИмяФайлаОбновления"); - ТекущийЭлемент = Элементы.ПолеФайлОбновления; - Возврат; - КонецЕсли; + Расширение = РасширенияКонфигурации.Создать(); + Расширение.БезопасныйРежим = Ложь; + Расширение.ИспользуетсяВРаспределеннойИнформационнойБазе = Истина; + Если ОбщегоНазначения.ЕстьЗащитаОтОпасныхДействий() Тогда + Расширение.ЗащитаОтОпасныхДействий = ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений(); КонецЕсли; + Данные = ПолучитьИзВременногоХранилища(ПомещенныйФайл.Хранение); - ПриПроверкеЛегальностиПолученияОбновления(); - + Попытка + Расширение.Записать(Данные); + УстановленноеРасширение = ОбновлениеКонфигурации.РасширениеПоИдентификатору(Расширение.УникальныйИдентификатор); + Если Не ОбновлениеКонфигурации.ЭтоИсправление(УстановленноеРасширение) Тогда + Расширение.Удалить(); + ВызватьИсключение НСтр("ru = 'Расширение не является патчем.'"); + КонецЕсли; + УстановленоИсправлений = УстановленоИсправлений + 1; + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ЕстьОшибки = Истина; + ИмяФайлаИсправления = ИмяФайлаПоПути(ПомещенныйФайл.Имя); + + ТекстОшибки = НСтр("ru = 'При установке исправления %1 возникла ошибка: + |%2'"); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, + ИмяФайлаИсправления, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Исправления.Установка'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); + КонецПопытки; + КонецЦикла; + + Если ЕстьОшибки Тогда + Элементы.ОшибкаУстановкиИсправлений.Видимость = Истина; + Если УстановленоИсправлений > 0 Тогда + ТекстНадписи = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Установлено исправлений: %1 из %2, изменения вступят в силу после перезапуска программы'"), + УстановленоИсправлений, + ПомещенныеФайлы.Количество()); + Элементы.ДекорацияУстановленоИсправлений.Заголовок = ТекстНадписи; + Элементы.ДекорацияИсправленияУстановлены.Видимость = Ложь; + Иначе + Элементы.ИсправленияУстановлены.Видимость = Ложь; + Элементы.ДекорацияУстановленоИсправлений.Видимость = Ложь; + Возврат; + КонецЕсли; + Иначе + Элементы.ОшибкаУстановкиИсправлений.Видимость = Ложь; КонецЕсли; + РегистрыСведений.ПараметрыРаботыВерсийРасширений.ОбновитьПараметрыРаботыРасширений(); + КонецПроцедуры &НаКлиенте @@ -558,7 +662,6 @@ &НаКлиенте Процедура ПриПроверкеЛегальностиПолученияОбновления() - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПроверкаЛегальностиПолученияОбновления") Тогда Оповещение = Новый ОписаниеОповещения("ПриПроверкеЛегальностиПолученияОбновленияЗавершение", ЭтотОбъект); МодульПроверкаЛегальностиПолученияОбновленияКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПроверкаЛегальностиПолученияОбновленияКлиент"); @@ -604,7 +707,7 @@ ТекстСообщения = НСтр("ru = 'Не удалось установить обновление программы, т.к. не были введены |корректные параметры администрирования информационной базы.'"); - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытияЖурнала, "Ошибка", ТекстСообщения); + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ОбновлениеКонфигурацииКлиент.СобытиеЖурналаРегистрации(), "Ошибка", ТекстСообщения); КонецЕсли; @@ -626,34 +729,6 @@ Возврат Дата(Год(Дата), Месяц(Дата), День(Дата), Час(Время), Минута(Время), Секунда(Время)); КонецФункции -&НаКлиенте -Функция ВозможенЗапускОбновления() - - ВозможенЗапускОбновления = Истина; - - #Если ВебКлиент Тогда - ВозможенЗапускОбновления = Ложь; - ТекстСообщения = НСтр("ru = 'Обновление программы недоступно в веб-клиенте.'"); - #КонецЕсли - - Если Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда - ВозможенЗапускОбновления = Ложь; - ТекстСообщения = НСтр("ru = 'Обновление программы доступно только в клиенте под управлением ОС Windows.'"); - КонецЕсли; - - Если ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер() Тогда - ВозможенЗапускОбновления = Ложь; - ТекстСообщения = НСтр("ru = 'Обновление программы недоступно при подключении через веб-сервер.'"); - КонецЕсли; - - Если Не ВозможенЗапускОбновления Тогда - ПоказатьПредупреждение(, ТекстСообщения); - КонецЕсли; - - Возврат ВозможенЗапускОбновления; - -КонецФункции - &НаСервере Функция ПараметрыСтраницыВыборРежимаОбновленияСервер(СообщенияДляЖурналаРегистрации) @@ -686,11 +761,27 @@ КонецФункции +&НаСервере +Функция ИмяФайлаПоПути(Знач ПутьКФайлу) + ПозицияСимвола = СтрНайти(ПутьКФайлу, "\", НаправлениеПоиска.СКонца); + Если ПозицияСимвола > 1 Тогда + Возврат Сред(ПутьКФайлу, ПозицияСимвола + 1); + Иначе + Возврат ""; + КонецЕсли; +КонецФункции + &НаСервере Процедура ВосстановитьНастройкиОбновленияКонфигурации() Настройки = ОбновлениеКонфигурации.НастройкиОбновленияКонфигурации(); ЗаполнитьЗначенияСвойств(Объект, Настройки); + ФайлыИсправленийСтрокой = СтрСоединить(Настройки.ФайлыИсправлений, ","); + Если ЗначениеЗаполнено(ФайлыИсправленийСтрокой) Тогда + ВыбранныеФайлы = Настройки.ИмяФайлаОбновления + "," + ФайлыИсправленийСтрокой; + Иначе + ВыбранныеФайлы = Настройки.ИмяФайлаОбновления; + КонецЕсли; КонецПроцедуры @@ -709,4 +800,51 @@ КонецПроцедуры +&НаКлиенте +Процедура ПослеПодтвержденияБезопасности(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = "Продолжить" Тогда + ФайлыИсправлений = Новый Массив; + + УказанФайлОбновления = Ложь; + ИменаВыбранныхФайлов = СтрРазделить(ВыбранныеФайлы, ","); + Для Каждого ИмяФайла Из ИменаВыбранныхФайлов Цикл + Если СтрЗаканчиваетсяНа(ИмяФайла, ".cfe") Тогда + ФайлыИсправлений.Добавить(ИмяФайла); + Иначе // Это файл обновления. + Если Не УказанФайлОбновления Тогда + Объект.ИмяФайлаОбновления = ИмяФайла; + УказанФайлОбновления = Истина; + Иначе + ВызватьИсключение НСтр("ru = 'Допустимо выбирать только один файл обновления.'"); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Если НуженФайлОбновления = 1 Тогда + Если Не ЗначениеЗаполнено(ВыбранныеФайлы) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Укажите файл поставки обновления конфигурации.'"),,"Объект.ИмяФайлаОбновления"); + ТекущийЭлемент = Элементы.ПолеФайлОбновления; + Возврат; + КонецЕсли; + Если Не ПустаяСтрока(Объект.ИмяФайлаОбновления) Тогда + Файл = Новый Файл(Объект.ИмяФайлаОбновления); + Если Не Файл.Существует() Или Не Файл.ЭтоФайл() Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Файл поставки обновления конфигурации не найден.'"),,"Объект.ИмяФайлаОбновления"); + ТекущийЭлемент = Элементы.ПолеФайлОбновления; + Возврат; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если НуженФайлОбновления И Не УказанФайлОбновления Тогда + ПерейтиКУстановкеИсправлений(); + Иначе + ПриПроверкеЛегальностиПолученияОбновления(); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/УстановкаОбновлений/Help/ru.html b/SSL/src/DataProcessors/УстановкаОбновлений/Help/ru.html index b628acc49..72db50bdf 100644 --- a/SSL/src/DataProcessors/УстановкаОбновлений/Help/ru.html +++ b/SSL/src/DataProcessors/УстановкаОбновлений/Help/ru.html @@ -1,6 +1,6 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.18427"></meta></head><body> <p>Установка обновлений позволяет автоматически устанавливать обновления конфигурации из файла.</p> -<p>Открывается по команде У<strong>становка обновлений</strong> раздела <strong>Администрирование - Обслуживание - Результаты обновления программы</strong>.</p> +<p>Открывается с помощью ссылки <strong>Установка обновлений и исправлений (патчей)</strong> раздела <strong>Администрирование - Обслуживание - Обновление программы</strong>.</p> <p>Программа позволяет обновлять конфигурацию ИБ в режиме 1С:Предприятия. Обновление производится по требованию или в указанное время.</p> <p>Внимание! Помощник не следует использовать, если в программе включена возможность изменения объектов метаданных. В таких случаях рекомендуется выполнять обновление в режиме <strong>Конфигуратор</strong>. </p> <p>На первом шаге выбирается источник установки обновления. Если у Вас уже имеется файл обновления, то помощник позволяет провести обновление с использованием файла поставки обновления (.cfu) или файла поставки конфигурации (.cf) из локального или сетевого каталога. Если файл обновления уже загружен в основную конфигурацию, и она отличается от конфигурации информационной базы, то необходимо указать вариант обновления без использования файла обновления.</p> diff --git a/SSL/src/DataProcessors/УстановкаОбновлений/Templates/ДопФайлОбновленияКонфигурации/Template.txt b/SSL/src/DataProcessors/УстановкаОбновлений/Templates/ДопФайлОбновленияКонфигурации/Template.txt index f73c993ce..e9735b751 100644 --- a/SSL/src/DataProcessors/УстановкаОбновлений/Templates/ДопФайлОбновленияКонфигурации/Template.txt +++ b/SSL/src/DataProcessors/УстановкаОбновлений/Templates/ДопФайлОбновленияКонфигурации/Template.txt @@ -14,45 +14,40 @@ var SW_SHOWNA = 8 var SW_RESTORE = 9 var SW_SHOWDEFAULT = 10 -var ForReading = 1; // Open a file for reading only. You can't write to this file. -var ForWriting = 2; // Open a file for writing. -var ForAppending = 8; // Open a file and write to the end of the file. -var TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0; +var ForReading = 1 // Open a file for reading only. You can't write to this file. +var ForWriting = 2 // Open a file for writing. +var ForAppending = 8 // Open a file and write to the end of the file. +var TristateUseDefault = -2 +var TristateTrue = -1 +var TristateFalse = 0 -var EVENT_SUCCESS = 0; -var EVENT_CRITICAL = 1; -var EVENT_WARNING = 2; -var EVENT_INFO = 4; +var EVENT_SUCCESS = 0 +var EVENT_CRITICAL = 1 +var EVENT_WARNING = 2 +var EVENT_INFO = 4 - -function format(str) -{ - for(var i = 1; i < arguments.length; i++) - { - str = str.replace("{" + (i - 1) + "}", arguments[i]); - } - return str; +function format (str) { + for (var i = 1; i < arguments.length; i++) { + str = str.replace('{' + (i - 1) + '}', arguments[i]) + } + return str } -function SWtoString(SW_flag) -{ - switch (SW_flag) - { - case SW_HIDE: return "SW_HIDE"; - case SW_SHOWNORMAL: return "SW_SHOWNORMAL"; - case SW_SHOWMINIMIZED: return "SW_SHOWMINIMIZED"; - case SW_SHOWMAXIMIZED: return "SW_SHOWMAXIMIZED"; - case SW_MAXIMIZE: return "SW_MAXIMIZE"; - case SW_SHOWNOACTIVATE: return "SW_SHOWNOACTIVATE"; - case SW_SHOW: return "SW_SHOW"; - case SW_MINIMIZE: return "SW_MINIMIZE"; - case SW_SHOWMINNOACTIVE: return "SW_SHOWMINNOACTIVE"; - case SW_SHOWNA: return "SW_SHOWNA"; - case SW_RESTORE: return "SW_RESTORE"; - case SW_SHOWDEFAULT: return "SW_SHOWDEFAULT"; - default: - return format("N/A: {0}", SW_flag); - } +function SWtoString (flag) { + switch (flag) { + case SW_HIDE: return 'SW_HIDE' + case SW_SHOWNORMAL: return 'SW_SHOWNORMAL' + case SW_SHOWMINIMIZED: return 'SW_SHOWMINIMIZED' + case SW_SHOWMAXIMIZED: return 'SW_SHOWMAXIMIZED' + case SW_MAXIMIZE: return 'SW_MAXIMIZE' + case SW_SHOWNOACTIVATE: return 'SW_SHOWNOACTIVATE' + case SW_SHOW: return 'SW_SHOW' + case SW_MINIMIZE: return 'SW_MINIMIZE' + case SW_SHOWMINNOACTIVE: return 'SW_SHOWMINNOACTIVE' + case SW_SHOWNA: return 'SW_SHOWNA' + case SW_RESTORE: return 'SW_RESTORE' + case SW_SHOWDEFAULT: return 'SW_SHOWDEFAULT' + default: + return format('N/A: {0}', flag) + } } - - diff --git a/SSL/src/DataProcessors/УстановкаОбновлений/Templates/ЗаставкаОбновленияКонфигурации/Template.txt b/SSL/src/DataProcessors/УстановкаОбновлений/Templates/ЗаставкаОбновленияКонфигурации/Template.txt index 1ee9b9f1f..5908b71a4 100644 --- a/SSL/src/DataProcessors/УстановкаОбновлений/Templates/ЗаставкаОбновленияКонфигурации/Template.txt +++ b/SSL/src/DataProcessors/УстановкаОбновлений/Templates/ЗаставкаОбновленияКонфигурации/Template.txt @@ -1,234 +1,237 @@ <!DOCTYPE html> <html> + <head> - <meta http-equiv="Content-Type" content="application/hta; charset=UTF-16"> - <meta http-equiv="x-ua-compatible" content="IE=EmulateIE7"> - <hta:application id="oHTA" - border="none" - caption="no" - contextmenu="no" - selection="no" - icon="splash.ico" - innerborder="no" - navigable="yes" - showintaskbar="yes" - scroll="no" - version="1.0.0.0" /> - <title>Обновление конфигурации "1С:Предприятие"... - - - + + + function checkClose () { + if (!finish) { + event.returnValue = format('Внимание: процесс обновления был прерван, и информационная база осталась заблокированной!\n' + + 'Для разблокирования информационной базы воспользуйтесь консолью кластера серверов или запустите "1С:Предприятие".') + } + } + + function ClearTempFiles () { + // Удаляем временные файлы + try { + oFileSystemObject.DeleteFile(thisFileDir + '\\main.js') + oFileSystemObject.DeleteFile(thisFileDir + '\\helpers.js') + oFileSystemObject.DeleteFile(thisFileDir + '\\splash.png') + oFileSystemObject.DeleteFile(thisFileDir + '\\splash.ico') + oFileSystemObject.DeleteFile(thisFileDir + '\\progress.gif') + oFileSystemObject.DeleteFile(thisFileDir + '\\splash.hta') + oFileSystemObject.DeleteFile(thisFileDir + '\\templog.txt') + } catch (e) { } + } + + + -
    - -
    -
    + +
    +
    - Пожалуйста, подождите.
    - Выполняется обновление конфигурации. -
    -
    -   -
    +   + + diff --git a/SSL/src/DataProcessors/УстановкаОбновлений/Templates/МакетФайлаОбновленияКонфигурации/Template.txt b/SSL/src/DataProcessors/УстановкаОбновлений/Templates/МакетФайлаОбновленияКонфигурации/Template.txt index 1e3167e04..f53a0b9fd 100644 --- a/SSL/src/DataProcessors/УстановкаОбновлений/Templates/МакетФайлаОбновленияКонфигурации/Template.txt +++ b/SSL/src/DataProcessors/УстановкаОбновлений/Templates/МакетФайлаОбновленияКонфигурации/Template.txt @@ -1,28 +1,30 @@ #Область ОбластьПараметров // Параметры процедуры обновления -var now = new Date(); -var outFileName = "log" + now.valueOf() + ".txt"; // Путь к log-файлу -var cfgFileNames = [ИменаФайловОбновления]; // Пути к .cf/.cfu-файлам с обновлениями +var now = new Date() +var outFileName = 'log' + now.valueOf() + '.txt' // Путь к log-файлу +var cfgFileNames = [ИменаФайловОбновления] // Пути к .cf/.cfu-файлам с обновлениями +var fixFileNames = [ИменаФайловИсправлений] // Пути к .cfe файлам с исправлениями +var removeFixNames = [ИменаУдаляемыхИсправлений] // Имена исправлений, которые необходимо удалить var v8conf = [ИмяИсполняемогоФайлаКонфигуратора] // Путь к исполняемому файлу 1С:Предприятия 8 var v8client = [ИмяИсполняемогоФайлаКлиента] // Путь к исполняемому файлу 1С:Предприятия 8 -var infoBasePath = [ПараметрПутиКИнформационнойБазе]; -var BaseFileName = [СтрокаПутиКФайлуИнформационнойБазы]; -var connectionString = [СтрокаСоединенияИнформационнойБазы] + ';UC=ПакетноеОбновлениеКонфигурацииИБ'; -var backupFileName = [КаталогРезервнойКопии] + '1Cv8' + now.valueOf() + '.1CD'; // Файл резервной копии -var UseRestore = [ВосстанавливатьИнформационнуюБазу]; // Использовать восстановление ИБ в случае падения -var createBackup = [СоздаватьРезервнуюКопию]; // создавать резервную копию -var eventLogID = [СобытиеЖурналаРегистрации]; -var emailAddress = [АдресЭлектроннойПочты]; // адрес электронной почты для отправки уведомления -var adminName = [ИмяАдминистратораОбновления]; // имя администратора, инициировавшего обновление -var doBlockUsers = [БлокироватьСоединенияИБ]; // устанавливать блокировку соединений перед обновлением -var comConnectorName = [ИмяCOMСоединителя]; // имя COM-класса для работы с 1С:Предприятием 8 через COM-соединение -var useComConnector = [ИспользоватьCOMСоединитель]; // флаг использования COM-соединения для работы с 1С:Предприятием 8 -var startEnterprise = [ЗапускСеансаПослеОбновления]; // выполнять запуск предприятия после обновления -var makeCompression = [ВыполнятьСжатиеТаблицИБ]; // запускать сжатие таблиц информационной базы -var executeDeferredHandlers = [ВыполнитьОтложенныеОбработчики]; // выполнить отложенные обработчики обновления -var tempLogFileName = "templog.txt"; -var errorFileName = "error.txt"; -var taskNameScheduleService = [ИмяЗадачиПланировщикаЗадач]; // Если указано, то задача, которой запущен скрипт. +var infoBasePath = [ПараметрПутиКИнформационнойБазе] +var BaseFileName = [СтрокаПутиКФайлуИнформационнойБазы] +var connectionString = [СтрокаСоединенияИнформационнойБазы] + ';UC=ПакетноеОбновлениеКонфигурацииИБ' +var backupFileName = [КаталогРезервнойКопии] + '1Cv8' + now.valueOf() + '.1CD' // Файл резервной копии +var UseRestore = [ВосстанавливатьИнформационнуюБазу] // Использовать восстановление ИБ в случае падения +var createBackup = [СоздаватьРезервнуюКопию] // создавать резервную копию +var eventLogID = [СобытиеЖурналаРегистрации] +var emailAddress = [АдресЭлектроннойПочты] // адрес электронной почты для отправки уведомления +var adminName = [ИмяАдминистратораОбновления] // имя администратора, инициировавшего обновление +var doBlockUsers = [БлокироватьСоединенияИБ] // устанавливать блокировку соединений перед обновлением +var comConnectorName = [ИмяCOMСоединителя] // имя COM-класса для работы с 1С:Предприятием 8 через COM-соединение +var useComConnector = [ИспользоватьCOMСоединитель] // флаг использования COM-соединения для работы с 1С:Предприятием 8 +var startEnterprise = [ЗапускСеансаПослеОбновления] // выполнять запуск предприятия после обновления +var makeCompression = [ВыполнятьСжатиеТаблицИБ] // запускать сжатие таблиц информационной базы +var executeDeferredHandlers = [ВыполнитьОтложенныеОбработчики] // выполнить отложенные обработчики обновления +var tempLogFileName = 'templog.txt' +var errorFileName = 'error.txt' +var taskNameScheduleService = [ИмяЗадачиПланировщикаЗадач] // Если указано, то задача, которой запущен скрипт. #КонецОбласти #Область ОбластьОбновленияКонфигурации @@ -31,680 +33,673 @@ if (useComConnector) { } // Инициализация -var oFileSystemObject = new ActiveXObject("Scripting.FileSystemObject"); +var oFileSystemObject = new ActiveXObject('Scripting.FileSystemObject') -var thisFileName; -var thisFileDir; -var InfoBasePassword; -var ClusterPassword; +var thisFileName +var thisFileDir +var InfoBasePassword +var ClusterPassword if (oHTA != null) { - thisFileName = eval("oHTA.commandLine"); - thisFileDir = thisFileName.substr(1, thisFileName.lastIndexOf("\\") - 1); - InfoBasePassword = thisFileName.substr(thisFileName.indexOf("[p1]") + 4, thisFileName.indexOf("[/p1]") - thisFileName.indexOf("[p1]") - 4); - ClusterPassword = thisFileName.substr(thisFileName.indexOf("[p2]") + 4, thisFileName.indexOf("[/p2]") - thisFileName.indexOf("[p2]") - 4); - thisFileName = thisFileName.substr(1, thisFileName.indexOf("[p1]") - 4); -} -else { - thisFileName = eval("WScript.ScriptFullName"); - thisFileDir = thisFileName.substr(0, thisFileName.lastIndexOf("\\") + 1); - InfoBasePassword = eval("WScript.Arguments").Named.Item("p1"); - ClusterPassword = eval("WScript.Arguments").Named.Item("p2"); + thisFileName = eval('oHTA.commandLine') + thisFileDir = thisFileName.substr(1, thisFileName.lastIndexOf('\\') - 1) + InfoBasePassword = thisFileName.substr(thisFileName.indexOf('[p1]') + 4, thisFileName.indexOf('[/p1]') - thisFileName.indexOf('[p1]') - 4) + ClusterPassword = thisFileName.substr(thisFileName.indexOf('[p2]') + 4, thisFileName.indexOf('[/p2]') - thisFileName.indexOf('[p2]') - 4) + thisFileName = thisFileName.substr(1, thisFileName.indexOf('[p1]') - 4) +} else { + thisFileName = eval('WScript.ScriptFullName') + thisFileDir = thisFileName.substr(0, thisFileName.lastIndexOf('\\') + 1) + InfoBasePassword = eval('WScript.Arguments').Named.Item('p1') + ClusterPassword = eval('WScript.Arguments').Named.Item('p2') } -adminName = adminName.replace(/"/g, '""'); -InfoBasePassword = fromUnicode(InfoBasePassword); -ClusterPassword = fromUnicode(ClusterPassword); -var infoBaseAuthorization = format('/N\"{0}\" /P\"{1}\" /WA-', adminName, InfoBasePassword); -connectionString = format(connectionString, adminName, InfoBasePassword); +adminName = adminName.replace(/"/g, '""') +InfoBasePassword = fromUnicode(InfoBasePassword) +ClusterPassword = fromUnicode(ClusterPassword) +var infoBaseAuthorization = format('/N"{0}" /P"{1}" /WA-', adminName, InfoBasePassword) +connectionString = format(connectionString, adminName, InfoBasePassword) -var oShell = new ActiveXObject("WScript.Shell"); -oShell.CurrentDirectory = thisFileDir; +var oShell = new ActiveXObject('WScript.Shell') +oShell.CurrentDirectory = thisFileDir -var errorMarker = "{ERR}"; -var successMarker = "{OK}"; +var errorMarker = '{ERR}' +var successMarker = '{OK}' // Переменные состояния -var backupCreated = false; -var connectionsDenied = false; -var logging1C = false; +var backupCreated = false +var connectionsDenied = false // Глобальная переменная com-соединения -var ComConnection = null; +var ComConnection = null // Переменные состояния функции doDisconnectAndBlockUsersHTA() -var disconnectionStep = 0; -var disconnectionInterval; -var disconnectionStartDateTime; +var disconnectionStep = 0 +var disconnectionInterval +var disconnectionStartDateTime // Открыть файл sFilePath. -function runApp(sFilePath, sFileArgs, show, bWaitOnReturn) { - if (bWaitOnReturn == undefined) - bWaitOnReturn = false; - if (show == undefined) - show = SW_SHOW; - if (sFileArgs == undefined) - sFileArgs = ""; - var ret = 1; - log(format("Запускается: {0}; параметры: {1}; окно: {2}; ожидание: {3}", - sFilePath, hidePass(sFileArgs), SWtoString(show), bWaitOnReturn)); - if (oFileSystemObject.FileExists(sFilePath)) { - try { - ret = oShell.Run(format('"{0}" {1}', sFilePath, sFileArgs), show, bWaitOnReturn); - } - catch (e) { - log(format("Исключение в runApp: {0}, {1}.", e.name, e.message), true); - return 1; - } - log(format("Код возврата: {0}", ret), ret != 0); - return ret; +function runApp (sFilePath, sFileArgs, show, bWaitOnReturn) { + if (bWaitOnReturn === undefined) { + bWaitOnReturn = false + } + if (show === undefined) { + show = SW_SHOW + } + if (sFileArgs === undefined) { + sFileArgs = '' + } + var ret = 1 + log(format('Запускается: {0}; параметры: {1}; окно: {2}; ожидание: {3}', + sFilePath, hidePass(sFileArgs), SWtoString(show), bWaitOnReturn)) + if (oFileSystemObject.FileExists(sFilePath)) { + try { + ret = oShell.Run(format('"{0}" {1}', sFilePath, sFileArgs), show, bWaitOnReturn) + } catch (e) { + log(format('Исключение в runApp: {0}, {1}.', e.name, e.message), true) + return 1 } - else - log(format("Запускаемый файл не существует: {0}", sFilePath), true); - return ret; + log(format('Код возврата: {0}', ret), ret !== 0) + return ret + } else { + log(format("Запускаемый файл не существует: {0}", sFilePath), true) + } + return ret } -function hidePass(text) { - beforePass = text.substr(0, text.indexOf("/P") + 2); - afterPass = text.substr(text.indexOf(" /WA-")); - return (beforePass + '"******"' + afterPass); +function hidePass (text) { + var beforePass = text.substr(0, text.indexOf('/P') + 2) + var afterPass = text.substr(text.indexOf(' /WA-')) + return (beforePass + '"******"' + afterPass) } -function clearLogFile() { - var outFile = oFileSystemObject.OpenTextFile(outFileName, ForWriting, true, TristateTrue); - outFile.Close(); +function clearLogFile () { + var outFile = oFileSystemObject.OpenTextFile(outFileName, ForWriting, true, TristateTrue) + outFile.Close() } // Записать текст в лог -function log(text, failed) { - if (failed == undefined) - failed = false; - - logFile(text, failed); +function log (text, failed) { + if (failed === undefined) { + failed = false + } + logFile(text, failed) } // Записать текст в лог-файл -function logFile(text, failed) { - var date = new Date(); - var now = ('0' + date.getDate()).slice(-2) + '.' + ('0' + (date.getMonth() + 1)).slice(-2) + '.' + date.getFullYear() + " " + ('0' + date.getHours()).slice(-2) + ":" + ('0' + date.getMinutes()).slice(-2) + ":" + ('0' + date.getSeconds()).slice(-2); - var f; +function logFile (text, failed) { + var date = new Date() + var now = ('0' + date.getDate()).slice(-2) + '.' + ('0' + (date.getMonth() + 1)).slice(-2) + '.' + date.getFullYear() + ' ' + ('0' + date.getHours()).slice(-2) + ':' + ('0' + date.getMinutes()).slice(-2) + ':' + ('0' + date.getSeconds()).slice(-2) + var f + try { + f = oFileSystemObject.OpenTextFile(outFileName, ForAppending, true, TristateTrue) + } catch (e) { return } + try { + var status = (failed === false ? successMarker : errorMarker) + f.WriteLine(format('{0} {1} {2}', now, status, text)) + } finally { try { - f = oFileSystemObject.OpenTextFile(outFileName, ForAppending, true, TristateTrue); - } - catch (e) { return; } - try { - var status = (failed == false ? successMarker : errorMarker); - f.WriteLine(format("{0} {1} {2}", now, status, text)); - } - finally { - try { - f.Close(); - } - catch (e) { return; } - } + f.Close() + } catch (e) { } + } } // Записать текст из временного лог-файла -function appendLog() { - var f; - var outf; - var text; +function appendLog () { + var f + var outf + var text + try { + f = oFileSystemObject.OpenTextFile(tempLogFileName, ForReading, false, TristateFalse) + outf = oFileSystemObject.OpenTextFile(outFileName, ForAppending, true, TristateTrue) + } catch (e) { return } + try { + if (!f.AtEndOfStream) { + text = f.ReadAll() + outf.WriteLine(text) + } + } finally { try { - f = oFileSystemObject.OpenTextFile(tempLogFileName, ForReading, false, TristateFalse); - outf = oFileSystemObject.OpenTextFile(outFileName, ForAppending, true, TristateTrue); - } - catch (e) { return; } - try { - if (!f.AtEndOfStream) { - text = f.ReadAll(); - outf.WriteLine(text); - } - } - finally { - try { - f.Close(); - outf.Close(); - } - catch (e) { return; } - } -} - -// Записать текст в журнал регистрации -function log1C(text, failed) { - if (logging1C) - return; - var connection = createConnection(); - if (connection == null) - return; - try { - log1CInternal(connection, text, failed); - } finally { }; -} - -// Записать текст в журнал регистрации -function log1CInternal(connection, text, failed) { - if (logging1C) - return; - logging1C = true; - try { - try { - var eventLogLevel = failed ? connection.EventLogLevel.Error : connection.EventLogLevel.Information; - connection.WriteLogEvent(eventLogID, eventLogLevel, null, null, text, - connection.EventLogEntryTransactionMode.Independent); - } - catch (e) { - log(format("Исключение в log1CInternal: {0}, {1}.", e.name, e.message), true); - return; - } - } - finally { - logging1C = false; - } + f.Close() + outf.Close() + } catch (e) { return } + } + return text } // Инициализация -function initialize() { - clearLogFile(); - appendLog(); - log(format("Файл скрипта: {0}", thisFileName)); - log(format("Количество файлов обновления: {0}", cfgFileNames.length)); - for (var i = 0; i < cfgFileNames.length; i++) { - var fileInfo = GetRequired(cfgFileNames[i], null); - var required = fileInfo.requiredVersion ? "(Обязательная)" : ""; - log(format("{0}. {1} {2}", i + 1, fileInfo.filePath, required)); - } - return 0; +function initialize () { + clearLogFile() + appendLog() + log(format('Файл скрипта: {0}', thisFileName)) + log(format('Количество файлов обновления: {0}', cfgFileNames.length)) + for (var i = 0; i < cfgFileNames.length; i++) { + var fileInfo = GetRequired(cfgFileNames[i], null) + var required = fileInfo.requiredVersion ? '(Обязательная)' : ''; + log(format('{0}. {1} {2}', i + 1, fileInfo.filePath, required)) + } + return 0 } // Финализация -function finalize(success) { - if (success == undefined) - success = false; +function finalize (success) { + if (success === undefined) { + success = false + } - deleteScheduleTask(); - - // Запись результата обновления в Event Log - writeEventLog(success); + deleteScheduleTask() - if (!success) { - if (UseRestore) { - restoreDB(); // Восстановление ИБ из временного архива - } - allowConnections(); // Разрешение подключений + // Запись результата обновления в Event Log + writeEventLog(success) + + if (!success) { + if (UseRestore) { + restoreDB() // Восстановление ИБ из временного архива } + allowConnections() // Разрешение подключений + } - write1CEventLog(); // Запись всей информации из log-файла в журнал регистрации - setResult(success); + setResult(success) - // очистка глобального COM-соединения - ComConnection = null; + // очистка глобального COM-соединения + ComConnection = null } -function deleteScheduleTask() { - if (taskNameScheduleService != '') { - try { - schedule = new ActiveXObject('Schedule.Service'); - schedule.Connect(); - - root = schedule.GetFolder('\\'); - root.DeleteTask(taskNameScheduleService, 0); - } - catch (ex) { - log(format("Ошибка при удалении задачи из планировщика задач: {0}", ex.message), true); - } - } -} - -function createConnection() { - if (!useComConnector) - return null; - - if (ComConnection != null) - return ComConnection; - - +function deleteScheduleTask () { + if (taskNameScheduleService !== '') { try { - log("Начат сеанс внешнего соединения с ИБ", false); - var ComConnector = new ActiveXObject(comConnectorName); - ComConnection = ComConnector.Connect(connectionString); - return ComConnection; - } - catch (e) { - log(format("Исключение в createConnection: {0}, {1}", e.name, e.message), true); - return null; + var schedule = new ActiveXObject('Schedule.Service') + schedule.Connect() + + var root = schedule.GetFolder('\\') + root.DeleteTask(taskNameScheduleService, 0) + } catch (ex) { + log(format('Ошибка при удалении задачи из планировщика задач: {0}', ex.message), true) } + } } -// Записать весь log-файл в журнал регистрации -function write1CEventLog() { - if (!oFileSystemObject.FileExists(outFileName)) - return; +function createConnection () { + if (!useComConnector) { + return null + } + if (ComConnection != null) { + return ComConnection + } + try { + log('Начат сеанс внешнего соединения с ИБ', false) + var ComConnector = new ActiveXObject(comConnectorName) + ComConnection = ComConnector.Connect(connectionString) + return ComConnection + } catch (e) { + log(format('Исключение в createConnection: {0}, {1}', e.name, e.message), true) + return null + } +} - var connection = createConnection(); - if (connection == null) - return; +function doSetResult (success) { + if (useComConnector) { + var connection = createConnection() + if (connection == null) { + return 1 + } + var res = 0 try { - var f = oFileSystemObject.OpenTextFile(outFileName, ForReading, false, TristateTrue); - - var text; - while (!f.AtEndOfStream) { - text = f.ReadLine(); - while ((text.indexOf(successMarker) < 0) && (text.indexOf(errorMarker) < 0) && !f.AtEndOfStream) - text += "\n" + f.ReadLine(); - - var failed = text.indexOf(errorMarker) > 0; - log1CInternal(connection, text, failed); - } - } - catch (e) { - log(format("Исключение в write1CEventLog: {0}, {1}.", e.name, e.message), true); - return; + log(format('Вызов через внешнее соединение ОбновлениеКонфигурации.ЗавершитьОбновление({0}, {1}, {2})', success, emailAddress, adminName)) + connection.ОбновлениеКонфигурации.ЗавершитьОбновление(success, emailAddress, adminName) + } catch (e) { + log(format('Исключение при вызове ОбновлениеКонфигурации.ЗавершитьОбновление: {0}, {1}.', e.name, e.message), true) + res = 2 } + } + if (success) { + log('Обновление выполнено', false) + } else { + log('Обновление не выполнено', true) + } + return res } -function doSetResult(success) { - if (useComConnector) { - var connection = createConnection(); - if (connection == null) return 1; - var res = 0; - try { - connection.ОбновлениеКонфигурации.ЗавершитьОбновление(success, emailAddress, adminName); - } - catch (e) { - log(format("Исключение при вызове ОбновлениеКонфигурации.ЗавершитьОбновление: {0}, {1}.", e.name, e.message), true); - res = 2; - } - } - else if (success) log("Обновление выполнено", false); - else log("Обновление не выполнено", true); - return res; -} - - -// Передать в приложение результат выполнения -function setResult(success) { - var result = doSetResult(success); - CollectGarbage(); // освобождает соединения с COM-объектом - return result; +// Передать в приложение результат выполнения +function setResult (success) { + var result = doSetResult(success) + CollectGarbage() // освобождает соединения с COM-объектом + return result } // Записать результат выполнения процедуры обновления в Event Log -function writeEventLog(success) { - try { - var eventKind = success ? EVENT_SUCCESS : EVENT_CRITICAL; - var message; - if (success) - message = "Обновление информационной базы завершилась успешно."; - else - message = "Ошибка при обновлении информационной базы."; - message += format(" Параметры информационной базы: {0}.", infoBasePath); - if (!success) - message += " Протокол обновления сохранен в журнал регистрации."; - oShell.LogEvent(eventKind, message); +function writeEventLog (success) { + try { + var eventKind = success ? EVENT_SUCCESS : EVENT_CRITICAL + var message + if (success) { + message = 'Обновление информационной базы завершилась успешно.'; + } else { + message = 'Ошибка при обновлении информационной базы.'; } - catch (e) { - log(format("Исключение в writeEventLog: {0}, {1}.", e.name, e.message), true); + message += format(' Параметры информационной базы: {0}.', infoBasePath) + if (!success) { + message += ' Протокол обновления сохранен в журнал регистрации.'; } + oShell.LogEvent(eventKind, message) + } catch (e) { + log(format('Исключение в writeEventLog: {0}, {1}.', e.name, e.message), true) + } } // Создание резервной копии информационной базы -function backupDB() { - if (!createBackup) - return 0; - try { - oFileSystemObject.CopyFile(BaseFileName, backupFileName, true); - ret = 0; - log(format("Резервная копия базы создана", ret), ret != 0); - } - catch (e) { - CollectGarbage(); // предотвращает исключение out of memory - log(format("Исключение при создании резервной копии базы: {0}, {1}.", e.name, e.message), true); - log(format("Трассировка:\nКопировали из: {0}\nКопировали в: {1}", BaseFileName, backupFileName), true); - ret = 1; - UseRestore = false; - } - if (ret == 0) - backupCreated = true; - return ret; +function backupDB () { + if (!createBackup) { + return 0 + } + var ret = 0 + try { + oFileSystemObject.CopyFile(BaseFileName, backupFileName, true) + log(format('Резервная копия базы создана', ret), ret !== 0) + } catch (e) { + CollectGarbage() // предотвращает исключение out of memory + log(format('Исключение при создании резервной копии базы: {0}, {1}.', e.name, e.message), true) + log(format('Трассировка:\nКопировали из: {0}\nКопировали в: {1}', BaseFileName, backupFileName), true) + ret = 1 + UseRestore = false + } + if (ret === 0) { + backupCreated = true + } + return ret } // Восстановление информационной базы из резервной копии -function restoreDB() { - if (!backupCreated) - return 0; - try { - oFileSystemObject.CopyFile(backupFileName, BaseFileName, true); - ret = 0; - connection = null; - ComConnection = null; - CollectGarbage(); // освобождает соединения с COM-объектом - log(format("База данных восстановлена из резервной копии", ret), ret != 0); - } - catch (e) { - CollectGarbage(); // предотвращает исключение out of memory - log(format("Исключение при восстановлении базы из резервной копии", e.name, e.message), true); - ret = -1; - } - return ret; +function restoreDB () { + if (!backupCreated) { + return 0 + } + var ret = 0 + try { + oFileSystemObject.CopyFile(backupFileName, BaseFileName, true) + connection = null + ComConnection = null + CollectGarbage() // освобождает соединения с COM-объектом + log(format('База данных восстановлена из резервной копии', ret), ret !== 0) + } catch (e) { + CollectGarbage() // предотвращает исключение out of memory + log(format('Исключение при восстановлении базы из резервной копии', e.name, e.message), true) + ret = -1 + } + return ret } -function doAllowConnections() { - if (connectionsDenied) { - var connection = createConnection(); - if (connection == null) - return (useComConnector ? 1 : 0); - try { - connection.СоединенияИБ.РазрешитьРаботуПользователей(); - connectionsDenied = false; - } - catch (e) { - connection = null; - CollectGarbage(); // предотвращает исключение out of memory - log(format("Исключение при вызове СоединенияИБ.РазрешитьРаботуПользователей: {0}, {1}.", e.name, e.message), true); - return 3; - } - } - return 0; +function doAllowConnections () { + if (connectionsDenied) { + var connection = createConnection() + if (connection == null) { + return (useComConnector ? 1 : 0) + } + try { + log('Вызов через внешнее соединение СоединенияИБ.РазрешитьРаботуПользователей()') + connection.СоединенияИБ.РазрешитьРаботуПользователей() + connectionsDenied = false + } catch (e) { + connection = null + CollectGarbage() // предотвращает исключение out of memory + log(format('Исключение при вызове СоединенияИБ.РазрешитьРаботуПользователей: {0}, {1}.', e.name, e.message), true) + return 3 + } + } + return 0 } // Разрешение подключений новых соединений -function allowConnections() { - var result = doAllowConnections(); - ComConnection = null; - CollectGarbage(); // освобождает соединения с COM-объектом - return result; +function allowConnections () { + var result = doAllowConnections() + ComConnection = null + CollectGarbage() // освобождает соединения с COM-объектом + return result } -function doExecuteUpdate(lastVersion) { - if (useComConnector && doBlockUsers) { - var connection = createConnection(); - if (connection == null) return 1; - - try { - connection.ОбновлениеИнформационнойБазыВызовСервера.ВыполнитьОбновлениеИнформационнойБазы(!lastVersion); - } - catch (e) { - connection = null; - CollectGarbage(); // предотвращает исключение out of memory - log(format("Исключение при вызове ОбновлениеИнформационнойБазыВызовСервера.ВыполнитьОбновлениеИнформационнойБазы: {0}, {1}.", e.name, e.message), true); - return 2; - } - return 0; +function doExecuteUpdate (lastVersion) { + if (useComConnector && lastVersion) { + var connection = createConnection() + if (connection == null) { + return 1 } - else { - var result = runApp(v8client, format('ENTERPRISE {0} {1} /CВыполнитьОбновлениеИЗавершитьРаботу', infoBasePath, infoBaseAuthorization), SW_SHOW, true); - if (result == 0 && oFileSystemObject.FileExists(errorFileName)) - result = 1; - return result; - } + try { + var fixFileNamesString = fixFileNames.join('\n') + var removeFixNamesString = removeFixNames.join('\n') + log(format('Вызов через внешнее соединение ОбновлениеКонфигурации.ОбновлениеКонфигурации.ОбновитьИсправленияИзСкрипта({0}, {1})', fixFileNamesString, removeFixNamesString)) + connection.ОбновлениеКонфигурации.ОбновитьИсправленияИзСкрипта(fixFileNamesString, removeFixNamesString) + } catch (e) { + connection = null + CollectGarbage() // предотвращает исключение out of memory + log(format('Исключение при вызове ОбновлениеКонфигурации.УстановитьИсправления: {0}, {1}.', e.name, e.message), true) + return 2 + } + } + ComConnection = null + if (useComConnector && doBlockUsers) { + var connection = createConnection() + if (connection == null) { + return 1 + } + try { + log(format('Вызов через внешнее соединение ОбновлениеИнформационнойБазыВызовСервера.ВыполнитьОбновлениеИнформационнойБазы({0})', !lastVersion)) + connection.ОбновлениеИнформационнойБазыВызовСервера.ВыполнитьОбновлениеИнформационнойБазы(!lastVersion) + } catch (e) { + connection = null + CollectGarbage() // предотвращает исключение out of memory + log(format('Исключение при вызове ОбновлениеИнформационнойБазыВызовСервера.ВыполнитьОбновлениеИнформационнойБазы: {0}, {1}.', e.name, e.message), true) + return 2 + } + return 0 + } else { + var result = runApp(v8client, format('ENTERPRISE {0} {1} /CВыполнитьОбновлениеИЗавершитьРаботу', infoBasePath, infoBaseAuthorization), SW_SHOW, true) + if (result === 0 && oFileSystemObject.FileExists(errorFileName)) { + result = 1 + } + return result + } } // Выполнение обработчиков обновления информационной базы через com -function executeUpdate(lastVersion) { - var result = doExecuteUpdate(lastVersion); - ComConnection = null; - CollectGarbage(); // освобождает соединения с COM-объектом - return result; +function executeUpdate (lastVersion) { + var result = doExecuteUpdate(lastVersion) + ComConnection = null + CollectGarbage() // освобождает соединения с COM-объектом + return result } -function doDisconnectAndBlockUsersHTA(connection) { - if (connection == null) - return 1; - var result = 0; - try { - while (true) { - switch (disconnectionStep) { - case 0: - { - connection.СоединенияИБ.УстановитьБлокировкуСоединений("в связи с необходимостью обновления конфигурации.", - "ПакетноеОбновлениеКонфигурацииИБ"); - disconnectionInterval = connection.СоединенияИБ.ПараметрыБлокировкиСеансов().ИнтервалОжиданияЗавершенияРаботыПользователей * 1000; - disconnectionStartDateTime = connection.СоединенияИБ.ПараметрыБлокировкиСеансов().Начало; - if (connection.ЗначениеЗаполнено(disconnectionStartDateTime)) - disconnectionStep++; - else - disconnectionStep += 2; - break; - } - case 1: - { - if (!connection.СоединенияИБ.УстановленаБлокировкаСоединений() || - connection.СоединенияИБ.КоличествоСеансовИнформационнойБазы(false) <= 1) { - disconnectionStep++; - break; - } - - var now = new Date(); - if (now - disconnectionInterval <= disconnectionStartDateTime) // если интервал ожидания еще не истек, то ждем еще раз - return -1; - disconnectionStep++; - break; - } - case 2: - { - if (!connection.СоединенияИБ.УстановленаБлокировкаСоединений()) { - log("Попытка завершения работы пользователей завершилась безуспешно: отменена блокировка ИБ.", true); - return 3; - } - - if (connection.СоединенияИБ.КоличествоСеансовИнформационнойБазы(false) <= 1) - return 0; - - // после начала блокировки сеансы всех пользователей должны быть отключены - // если этого не произошло пробуем принудительно прервать соединение. - doDisconnectConnections(connection); - if (connection.СоединенияИБ.КоличествоСеансовИнформационнойБазы(false) > 1) { - connection.СоединенияИБ.РазрешитьРаботуПользователей(); - var message = connection.СоединенияИБ.СообщениеОНеотключенныхСеансах(); - log(message, true); - return 3; - } - return 0; - } - } +function doDisconnectAndBlockUsersHTA (connection) { + if (connection == null) { + return 1 + } + var result = 0 + try { + while (true) { + switch (disconnectionStep) { + case 0: + { + log(format('Вызов через внешнее соединение СоединенияИБ.УстановитьБлокировкуСоединений()')) + connection.СоединенияИБ.УстановитьБлокировкуСоединений('в связи с необходимостью обновления конфигурации.', + 'ПакетноеОбновлениеКонфигурацииИБ') + disconnectionInterval = connection.СоединенияИБ.ПараметрыБлокировкиСеансов().ИнтервалОжиданияЗавершенияРаботыПользователей * 1000 + disconnectionStartDateTime = connection.СоединенияИБ.ПараметрыБлокировкиСеансов().Начало + if (connection.ЗначениеЗаполнено(disconnectionStartDateTime)) { + disconnectionStep++ + } else { + disconnectionStep += 2 + } + break } + case 1: + { + log('Вызов через внешнее соединение СоединенияИБ.УстановленаБлокировкаСоединений()') + log('Вызов через внешнее соединение СоединенияИБ.КоличествоСеансовИнформационнойБазы(Ложь)') + if (!connection.СоединенияИБ.УстановленаБлокировкаСоединений() || + connection.СоединенияИБ.КоличествоСеансовИнформационнойБазы(false) <= 1) { + disconnectionStep++ + break + } + var now = new Date() + // если интервал ожидания еще не истек, то ждем еще раз + if (now - disconnectionInterval <= disconnectionStartDateTime) { + return -1 + } + disconnectionStep++ + break + } + case 2: + { + log('Вызов через внешнее соединение СоединенияИБ.УстановленаБлокировкаСоединений()') + if (!connection.СоединенияИБ.УстановленаБлокировкаСоединений()) { + log('Попытка завершения работы пользователей завершилась безуспешно: отменена блокировка ИБ.', true) + return 3 + } + + log('Вызов через внешнее соединение СоединенияИБ.КоличествоСеансовИнформационнойБазы(Ложь)') + if (connection.СоединенияИБ.КоличествоСеансовИнформационнойБазы(false) <= 1) { + return 0 + } + // после начала блокировки сеансы всех пользователей должны быть отключены + // если этого не произошло пробуем принудительно прервать соединение. + doDisconnectConnections(connection) + if (connection.СоединенияИБ.КоличествоСеансовИнформационнойБазы(false) > 1) { + log('Вызов через внешнее соединение СоединенияИБ.РазрешитьРаботуПользователей()') + connection.СоединенияИБ.РазрешитьРаботуПользователей() + + log('Вызов через внешнее соединение СоединенияИБ.СообщениеОНеотключенныхСеансах()') + var message = connection.СоединенияИБ.СообщениеОНеотключенныхСеансах() + log(message, true) + return 3 + } + return 0 + } + } } - catch (e) { - CollectGarbage(); // предотвращает исключение out of memory - log(format("Исключение при вызове doDisconnectAndBlockUsersHTA: {0}, {1}.", e.name, e.message), true); - result = 2; - } - return result; + } catch (e) { + CollectGarbage() // предотвращает исключение out of memory + log(format('Исключение при вызове doDisconnectAndBlockUsersHTA: {0}, {1}.', e.name, e.message), true) + result = 2 + } + return result } -// Завершение работы пользователей и запрет на подключение новых соединений +// Завершение работы пользователей и запрет на подключение новых соединений // Возвращает: // -1 - выполнение отложено, необходимо повторить вызов функции через 18 секунд // 0 - функция выполнена успешно // другое число - код ошибки -// -function disconnectAndBlockUsersHTA() { - if (!doBlockUsers) { - connectionsDenied = true; - return 0; - } - var connection = createConnection(); - if (connection == null && useComConnector) - return 1; - var result = -1; - if (useComConnector) - try { - result = doDisconnectAndBlockUsersHTA(connection); - } - finally { - if (result != -1) { - connection = null; - ComConnection = null; - CollectGarbage(); // освобождает соединения с COM-объектом - log("Завершен сеанс внешнего соединения с ИБ", false); - } - } - else - result = 0; - if (result == 0) - connectionsDenied = true; - return result; -} - -function doDisconnectAndBlockUsers() { - var connection = createConnection(); - if (connection == null) - return (useComConnector ? 1 : 0); +// +function disconnectAndBlockUsersHTA () { + if (!doBlockUsers) { + connectionsDenied = true + return 0 + } + var connection = createConnection() + if (connection == null && useComConnector) { + return 1 + } + var result = -1 + if (useComConnector) { try { - connection.СоединенияИБ.УстановитьБлокировкуСоединений("в связи с необходимостью обновления конфигурации.", - "ПакетноеОбновлениеКонфигурацииИБ"); + result = doDisconnectAndBlockUsersHTA(connection) + } finally { + if (result !== -1) { + connection = null + ComConnection = null + CollectGarbage() // освобождает соединения с COM-объектом + log('Завершен сеанс внешнего соединения с ИБ', false) + } + } + } else { + result = 0 + } + if (result === 0) { + connectionsDenied = true + } + return result +} - var interval = connection.СоединенияИБ.ПараметрыБлокировкиСеансов().ИнтервалОжиданияЗавершенияРаботыПользователей * 1000; - var startDateTime = connection.ПолучитьБлокировкуУстановкиСоединений().Начало; - var now = new Date(); +function doDisconnectAndBlockUsers () { + var connection = createConnection() + if (connection == null) { + return (useComConnector ? 1 : 0) + } + try { + log('Вызов через внешнее соединение СоединенияИБ.УстановитьБлокировкуСоединений()') + connection.СоединенияИБ.УстановитьБлокировкуСоединений('в связи с необходимостью обновления конфигурации.', + 'ПакетноеОбновлениеКонфигурацииИБ') - if (connection.ЗначениеЗаполнено(startDateTime)) - while (now - interval <= startDateTime) { - if (!connection.ПолучитьБлокировкуУстановкиСоединений().Установлена) - break; - if (connection.СоединенияИБ.КоличествоСеансовИнформационнойБазы(false) <= 1) - break; - WScript.Sleep(18 * 1000); // Ждем 18 секунд до следующей проверки. - now = new Date(); - } + log('Вызов через внешнее соединение СоединенияИБ.ПараметрыБлокировкиСеансов()') + var interval = connection.СоединенияИБ.ПараметрыБлокировкиСеансов().ИнтервалОжиданияЗавершенияРаботыПользователей * 1000 + log('Вызов через внешнее соединение ПолучитьБлокировкуУстановкиСоединений()') + var startDateTime = connection.ПолучитьБлокировкуУстановкиСоединений().Начало + var now = new Date() + + if (connection.ЗначениеЗаполнено(startDateTime)) { + while (now - interval <= startDateTime) { + log('Вызов через внешнее соединение ПолучитьБлокировкуУстановкиСоединений()') if (!connection.ПолучитьБлокировкуУстановкиСоединений().Установлена) { - log("Попытка завершения работы пользователей завершилась безуспешно: отменена блокировка ИБ.", true); - return 3; + break } + log('Вызов через внешнее соединение СоединенияИБ.КоличествоСеансовИнформационнойБазы(Ложь)') + if (connection.СоединенияИБ.КоличествоСеансовИнформационнойБазы(false) <= 1) { + break + } + WScript.Sleep(18 * 1000) // Ждем 18 секунд до следующей проверки. + now = new Date() + } + } - // после начала блокировки сеансы всех пользователей должны быть отключены - // если этого не произошло, пробуем принудительно прервать соединения. - doDisconnectConnections(connection); - if (connection.СоединенияИБ.КоличествоСеансовИнформационнойБазы(false) > 1) { - connection.СоединенияИБ.РазрешитьРаботуПользователей(); - var message = connection.СоединенияИБ.СообщениеОНеотключенныхСеансах(); - log(message, true); - return 3; - } + log('Вызов через внешнее соединение ПолучитьБлокировкуУстановкиСоединений()') + if (!connection.ПолучитьБлокировкуУстановкиСоединений().Установлена) { + log('Попытка завершения работы пользователей завершилась безуспешно: отменена блокировка ИБ.', true) + return 3 } - catch (e) { - CollectGarbage(); // предотвращает исключение out of memory - log(format("Исключение при вызове doDisconnectAndBlockUsers: {0}, {1}.", e.name, e.message), true); - return 2; + + // после начала блокировки сеансы всех пользователей должны быть отключены + // если этого не произошло, пробуем принудительно прервать соединения. + doDisconnectConnections(connection) + log('Вызов через внешнее соединение СоединенияИБ.КоличествоСеансовИнформационнойБазы(Ложь)') + if (connection.СоединенияИБ.КоличествоСеансовИнформационнойБазы(false) > 1) { + log('Вызов через внешнее соединение СоединенияИБ.РазрешитьРаботуПользователей()') + connection.СоединенияИБ.РазрешитьРаботуПользователей() + + log('Вызов через внешнее соединение СоединенияИБ.СообщениеОНеотключенныхСеансах()') + var message = connection.СоединенияИБ.СообщениеОНеотключенныхСеансах() + log(message, true) + return 3 } - return 0; + } catch (e) { + CollectGarbage() // предотвращает исключение out of memory + log(format('Исключение при вызове doDisconnectAndBlockUsers: {0}, {1}.', e.name, e.message), true) + return 2 + } + return 0 } -function doDisconnectConnections(connection) { - var adminParams = connection.СтандартныеПодсистемыСервер.ПараметрыАдминистрирования(); - adminParams.ПарольАдминистратораИнформационнойБазы = InfoBasePassword; - adminParams.ПарольАдминистратораКластера = ClusterPassword; - connection.СоединенияИБКлиентСервер.УдалитьВсеСеансыКромеТекущего(adminParams); +function doDisconnectConnections (connection) { + log('Вызов через внешнее соединение СтандартныеПодсистемыСервер.ПараметрыАдминистрирования()') + var adminParams = connection.СтандартныеПодсистемыСервер.ПараметрыАдминистрирования() + adminParams.ПарольАдминистратораИнформационнойБазы = InfoBasePassword + adminParams.ПарольАдминистратораКластера = ClusterPassword + + log('Вызов через внешнее соединение СоединенияИБКлиентСервер.УдалитьВсеСеансыКромеТекущего()') + connection.СоединенияИБКлиентСервер.УдалитьВсеСеансыКромеТекущего(adminParams) } -// Завершение работы пользователей и запрет на подключение новых соединений -function disconnectAndBlockUsers() { - var result = 0; - if (doBlockUsers) - result = doDisconnectAndBlockUsers(); +// Завершение работы пользователей и запрет на подключение новых соединений +function disconnectAndBlockUsers () { + var result = 0 + if (doBlockUsers) { + result = doDisconnectAndBlockUsers() + } - ComConnection = null; - CollectGarbage(); // освобождает соединения с COM-объектом - WScript.Sleep(1000); // ждем 1 секунду (достаточно для завершения COM-соединения). - - if (result == 0 && doBlockUsers) - connectionsDenied = true; - return result; + ComConnection = null + CollectGarbage() // освобождает соединения с COM-объектом + WScript.Sleep(1000) // ждем 1 секунду (достаточно для завершения COM-соединения). + + if (result === 0 && doBlockUsers) { + connectionsDenied = true + } + return result } // Загрузка файла обновления в основную базу -function loadCfg(fileName) { - // /LoadCfg<имя cf файла> (для базовых версий не используется) загрузка конфигурации из файла - var ret = runApp(v8conf, format('CONFIG {0} {1} /LoadCfg "{2}" /Out "{3}" /UCПакетноеОбновлениеКонфигурацииИБ /DisableStartupMessages /DisableStartupDialogs', - infoBasePath, infoBaseAuthorization, fileName, tempLogFileName), SW_SHOW, true); - appendLog(); - return ret; +function loadCfg (fileName) { + // /LoadCfg<имя cf файла> (для базовых версий не используется) загрузка конфигурации из файла + var ret = runApp(v8conf, format('CONFIG {0} {1} /LoadCfg "{2}" /Out "{3}" /UCПакетноеОбновлениеКонфигурацииИБ /DisableStartupMessages /DisableStartupDialogs', + infoBasePath, infoBaseAuthorization, fileName, tempLogFileName), SW_SHOW, true) + appendLog() + return ret } // Загрузка файла обновления в основную базу -function updateCfg(fileName) { - // /UpdateCfg<имя cf | cfu файла> обновление конфигурации, находящейся на поддержке - var ret = runApp(v8conf, format('CONFIG {0} {1} /UpdateCfg "{2}" /Out "{3}" /UCПакетноеОбновлениеКонфигурацииИБ /DisableStartupMessages /DisableStartupDialogs', - infoBasePath, infoBaseAuthorization, fileName, tempLogFileName), SW_SHOW, true); - appendLog(); - return ret; +function updateCfg (fileName) { + // /UpdateCfg<имя cf | cfu файла> обновление конфигурации, находящейся на поддержке + var ret = runApp(v8conf, format('CONFIG {0} {1} /UpdateCfg "{2}" /Out "{3}" /UCПакетноеОбновлениеКонфигурацииИБ /DisableStartupMessages /DisableStartupDialogs', + infoBasePath, infoBaseAuthorization, fileName, tempLogFileName), SW_SHOW, true) + appendLog() + return ret } // Обновление конфигурации информационной базы -function updateDbCfg() { - // /UpdateDBCfg - обновление конфигурации базы данных - var ret = runApp(v8conf, format('CONFIG {0} {1} /UpdateDBCfg -server /Out "{2}" /UCПакетноеОбновлениеКонфигурацииИБ /DisableStartupMessages /DisableStartupDialogs', - infoBasePath, infoBaseAuthorization, tempLogFileName), SW_SHOW, true); - appendLog(); - return ret; +function updateDbCfg () { + // /UpdateDBCfg - обновление конфигурации базы данных + var ret = runApp(v8conf, format('CONFIG {0} {1} /UpdateDBCfg -server /Out "{2}" /UCПакетноеОбновлениеКонфигурацииИБ /DisableStartupMessages /DisableStartupDialogs', + infoBasePath, infoBaseAuthorization, tempLogFileName), SW_SHOW, true) + appendLog() + return ret } // Выполнение тестирования и исправления -function compressDB() -{ - if (!makeCompression) - return 0; - - var ret = runApp(v8conf, format('CONFIG {0} {1} /IBCheckAndRepair -IBCompression /Out "{2}" /DisableStartupMessages /DisableStartupDialogs', - infoBasePath, infoBaseAuthorization, tempLogFileName), SW_SHOW, true); - appendLog(); - return ret; +function compressDB () { + if (!makeCompression) { + return 0 + } + + var ret = runApp(v8conf, format('CONFIG {0} {1} /IBCheckAndRepair -IBCompression /Out "{2}" /DisableStartupMessages /DisableStartupDialogs', + infoBasePath, infoBaseAuthorization, tempLogFileName), SW_SHOW, true) + appendLog() + return ret } -function doDeferredHandlers() { - if (!executeDeferredHandlers) - return 0; +function doDeferredHandlers () { + if (!executeDeferredHandlers) { + return 0 + } - var connection = createConnection(); - if (connection == null) - return (useComConnector ? 1 : 0); // в базовых версиях отложенные обработчики выполняются из основного сеанса перед обновлением + var connection = createConnection() + if (connection == null) { + return (useComConnector ? 1 : 0) // в базовых версиях отложенные обработчики выполняются из основного сеанса перед обновлением + } - try { - connection.ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОтложенноеОбновлениеСейчас(); - } - catch (e) { - connection = null; - CollectGarbage(); // предотвращает исключение out of memory - log(format("Исключение при вызове ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОтложенноеОбновлениеСейчас: {0}, {1}.", e.name, e.message), true); - return 2; - } - return 0; + try { + log('Вызов через внешнее соединение ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОтложенноеОбновлениеСейчас())') + connection.ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОтложенноеОбновлениеСейчас() + } catch (e) { + connection = null + CollectGarbage() // предотвращает исключение out of memory + log(format('Исключение при вызове ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОтложенноеОбновлениеСейчас: {0}, {1}.', e.name, e.message), true) + return 2 + } + return 0 } // Выполнение отложенных обработчиков обновления информационной базы через com -function runDeferredHandlers() { - var result = doDeferredHandlers(); - connection = null; - ComConnection = null; - CollectGarbage(); // освобождает соединения с COM-объектом - return result; +function runDeferredHandlers () { + var result = doDeferredHandlers() + connection = null + ComConnection = null + CollectGarbage() // освобождает соединения с COM-объектом + return result } // Получение имени файла обновления и определение является ли он приоритетным (обязателен запуск) -function GetRequired(filePath) { - var fileProperties = Object(); - fileProperties.filePath = filePath; - fileProperties.requiredVersion = filePath.substr(0,1) == '+'; - if (fileProperties.requiredVersion) - fileProperties.filePath = filePath.substr(1); - return fileProperties; +function GetRequired (filePath) { + var fileProperties = Object() + fileProperties.filePath = filePath + fileProperties.requiredVersion = filePath.substr(0, 1) === '+' + if (fileProperties.requiredVersion) { + fileProperties.filePath = filePath.substr(1) + } + return fileProperties } -function fromUnicode(text){ - var str = ""; - for(var i=0; i + + + + + ВладелецЗначенийКлючейДоступа + + ru + Владелец значений ключей доступа + + + CatalogRef.ПапкиЭлектронныхПисем + BusinessProcessRef.Задание + CatalogRef.Заметки + DocumentRef.ЭлектронноеПисьмоИсходящее + DocumentRef.ЗапланированноеВзаимодействие + CatalogRef.ПапкиФайлов + CatalogRef.ГруппыДоступа + CatalogRef.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы + CatalogRef.ВнешниеПользователи + DocumentRef.ЭлектронноеПисьмоВходящее + DocumentRef.ТелефонныйЗвонок + CatalogRef.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы + CatalogRef.ЗначенияСвойствОбъектовИерархия + TaskRef.ЗадачаИсполнителя + CatalogRef.ПользовательскиеНастройкиОтчетов + CatalogRef.ЗначенияСвойствОбъектов + CatalogRef.ГруппыВнешнихПользователей + CatalogRef.ПравилаОбработкиЭлектроннойПочты + CatalogRef.ЗапланированноеВзаимодействиеПрисоединенныеФайлы + DocumentRef.Встреча + CatalogRef.Файлы + CatalogRef.РассылкиОтчетов + ChartOfCharacteristicTypesRef.ДополнительныеРеквизитыИСведения + CatalogRef.ШаблоныСообщений + CatalogRef.ДополнительныеОтчетыИОбработки + CatalogRef.СообщениеSMSПрисоединенныеФайлы + CatalogRef.ВариантыОтчетов + DocumentRef.СообщениеSMS + CatalogRef.Пользователи + CatalogRef.УчетныеЗаписиЭлектроннойПочты + CatalogRef.ВстречаПрисоединенныеФайлы + CatalogRef.ВерсииФайлов + CatalogRef.ПрофилиГруппДоступа + CatalogRef.ТелефонныйЗвонокПрисоединенныеФайлы + CatalogRef.ШаблоныСообщенийПрисоединенныеФайлы + + diff --git a/SSL/src/DefinedTypes/ВладелецЗначенийКлючейДоступаДокумент/ВладелецЗначенийКлючейДоступаДокумент.mdo b/SSL/src/DefinedTypes/ВладелецЗначенийКлючейДоступаДокумент/ВладелецЗначенийКлючейДоступаДокумент.mdo new file mode 100644 index 000000000..56ce14633 --- /dev/null +++ b/SSL/src/DefinedTypes/ВладелецЗначенийКлючейДоступаДокумент/ВладелецЗначенийКлючейДоступаДокумент.mdo @@ -0,0 +1,19 @@ + + + + + + ВладелецЗначенийКлючейДоступаДокумент + + ru + Владелец значений ключей доступа документ + + + DocumentObject.Встреча + DocumentObject.ЭлектронноеПисьмоВходящее + DocumentObject.ЗапланированноеВзаимодействие + DocumentObject.СообщениеSMS + DocumentObject.ТелефонныйЗвонок + DocumentObject.ЭлектронноеПисьмоИсходящее + + diff --git a/SSL/src/DefinedTypes/ВладелецЗначенийКлючейДоступаНаборЗаписей/ВладелецЗначенийКлючейДоступаНаборЗаписей.mdo b/SSL/src/DefinedTypes/ВладелецЗначенийКлючейДоступаНаборЗаписей/ВладелецЗначенийКлючейДоступаНаборЗаписей.mdo new file mode 100644 index 000000000..8b22ef448 --- /dev/null +++ b/SSL/src/DefinedTypes/ВладелецЗначенийКлючейДоступаНаборЗаписей/ВладелецЗначенийКлючейДоступаНаборЗаписей.mdo @@ -0,0 +1,20 @@ + + + + + + ВладелецЗначенийКлючейДоступаНаборЗаписей + + ru + Владелец значений ключей доступа набор записей + + + InformationRegisterRecordSet.НапоминанияПользователя + InformationRegisterRecordSet.ДанныеБизнесПроцессов + InformationRegisterRecordSet.НастройкиВариантовОтчетов + InformationRegisterRecordSet.ПредметыПапкиВзаимодействий + InformationRegisterRecordSet.НастройкиУчетныхЗаписейЭлектроннойПочты + InformationRegisterRecordSet.ДополнительныеСведения + InformationRegisterRecordSet.ИсполнителиЗадач + + diff --git a/SSL/src/DefinedTypes/ВладелецЗначенийКлючейДоступаНаборЗаписейРегистраРасчета/ВладелецЗначенийКлючейДоступаНаборЗаписейРегистраРасчета.mdo b/SSL/src/DefinedTypes/ВладелецЗначенийКлючейДоступаНаборЗаписейРегистраРасчета/ВладелецЗначенийКлючейДоступаНаборЗаписейРегистраРасчета.mdo new file mode 100644 index 000000000..c36f5a6a9 --- /dev/null +++ b/SSL/src/DefinedTypes/ВладелецЗначенийКлючейДоступаНаборЗаписейРегистраРасчета/ВладелецЗначенийКлючейДоступаНаборЗаписейРегистраРасчета.mdo @@ -0,0 +1,14 @@ + + + + + + ВладелецЗначенийКлючейДоступаНаборЗаписейРегистраРасчета + + ru + Владелец значений ключей доступа набор записей регистра расчета + + + CatalogObject.ИдентификаторыОбъектовМетаданных + + diff --git a/SSL/src/DefinedTypes/ВладелецЗначенийКлючейДоступаОбъект/ВладелецЗначенийКлючейДоступаОбъект.mdo b/SSL/src/DefinedTypes/ВладелецЗначенийКлючейДоступаОбъект/ВладелецЗначенийКлючейДоступаОбъект.mdo new file mode 100644 index 000000000..b6084f5e7 --- /dev/null +++ b/SSL/src/DefinedTypes/ВладелецЗначенийКлючейДоступаОбъект/ВладелецЗначенийКлючейДоступаОбъект.mdo @@ -0,0 +1,43 @@ + + + + + + ВладелецЗначенийКлючейДоступаОбъект + + ru + Владелец значений ключей доступа объект + + + CatalogObject.СообщениеSMSПрисоединенныеФайлы + CatalogObject.ВерсииФайлов + CatalogObject.ПапкиФайлов + CatalogObject.ШаблоныСообщений + CatalogObject.УчетныеЗаписиЭлектроннойПочты + CatalogObject.РассылкиОтчетов + CatalogObject.ПрофилиГруппДоступа + CatalogObject.ВстречаПрисоединенныеФайлы + BusinessProcessObject.Задание + CatalogObject.ТелефонныйЗвонокПрисоединенныеФайлы + CatalogObject.ПользовательскиеНастройкиОтчетов + CatalogObject.Заметки + CatalogObject.ПравилаОбработкиЭлектроннойПочты + CatalogObject.ШаблоныСообщенийПрисоединенныеФайлы + CatalogObject.ГруппыВнешнихПользователей + ChartOfCharacteristicTypesObject.ДополнительныеРеквизитыИСведения + CatalogObject.ДополнительныеОтчетыИОбработки + CatalogObject.ВнешниеПользователи + CatalogObject.ЗначенияСвойствОбъектов + CatalogObject.ЗначенияСвойствОбъектовИерархия + CatalogObject.ГруппыДоступа + CatalogObject.Файлы + CatalogObject.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы + CatalogObject.ЗапланированноеВзаимодействиеПрисоединенныеФайлы + CatalogObject.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы + CatalogObject.ИдентификаторыОбъектовМетаданных + CatalogObject.ВариантыОтчетов + TaskObject.ЗадачаИсполнителя + CatalogObject.ПапкиЭлектронныхПисем + CatalogObject.Пользователи + + diff --git a/SSL/src/DefinedTypes/ЗначениеДоступа/ЗначениеДоступа.mdo b/SSL/src/DefinedTypes/ЗначениеДоступа/ЗначениеДоступа.mdo index 667e41193..3f29d519b 100644 --- a/SSL/src/DefinedTypes/ЗначениеДоступа/ЗначениеДоступа.mdo +++ b/SSL/src/DefinedTypes/ЗначениеДоступа/ЗначениеДоступа.mdo @@ -10,7 +10,9 @@ Типы значений и групп значений + CatalogRef.ПапкиФайлов CatalogRef.ВнешниеПользователи + CatalogRef.КлючиДоступа CatalogRef.ГруппыВнешнихПользователей CatalogRef.ГруппыПользователей EnumRef.ДополнительныеЗначенияДоступа diff --git a/SSL/src/DefinedTypes/МестоХраненияФункциональныхОпций/МестоХраненияФункциональныхОпций.mdo b/SSL/src/DefinedTypes/МестоХраненияФункциональныхОпций/МестоХраненияФункциональныхОпций.mdo index 15f32d143..020a1bd1a 100644 --- a/SSL/src/DefinedTypes/МестоХраненияФункциональныхОпций/МестоХраненияФункциональныхОпций.mdo +++ b/SSL/src/DefinedTypes/МестоХраненияФункциональныхОпций/МестоХраненияФункциональныхОпций.mdo @@ -29,7 +29,6 @@ ConstantValueManager.ХранитьФайлыВТомахНаДиске ConstantValueManager.ИспользоватьШифрование ConstantValueManager.ИспользоватьЭлектронныеПодписи - ConstantValueManager.ДнейДоСкрытияПерсональныхДанныхСубъектов ConstantValueManager.ИспользоватьДатуИВремяВСрокахЗадач ConstantValueManager.ИспользоватьВнешнихПользователей ConstantValueManager.ИспользуютсяПрофилиБезопасности @@ -49,6 +48,5 @@ ConstantValueManager.ИспользоватьНесколькоПроизводственныхКалендарей ConstantValueManager.ИспользоватьВерсионированиеОбъектов ConstantValueManager.ОтправлятьПисьмаВФорматеHTML - ConstantValueManager.ИспользоватьСкрытиеПерсональныхДанныхСубъектов diff --git a/SSL/src/DefinedTypes/ОбъектСДополнительнымиКомандами/ОбъектСДополнительнымиКомандами.mdo b/SSL/src/DefinedTypes/ОбъектСДополнительнымиКомандами/ОбъектСДополнительнымиКомандами.mdo index d6329b4ac..4b404dacd 100644 --- a/SSL/src/DefinedTypes/ОбъектСДополнительнымиКомандами/ОбъектСДополнительнымиКомандами.mdo +++ b/SSL/src/DefinedTypes/ОбъектСДополнительнымиКомандами/ОбъектСДополнительнымиКомандами.mdo @@ -9,7 +9,6 @@ Объект с дополнительными командами - DocumentRef.СообщениеSMS CatalogRef.ИдентификаторыОбъектовМетаданных diff --git a/SSL/src/DefinedTypes/ПолеРегистраКлючейДоступаКРегистрам/ПолеРегистраКлючейДоступаКРегистрам.mdo b/SSL/src/DefinedTypes/ПолеРегистраКлючейДоступаКРегистрам/ПолеРегистраКлючейДоступаКРегистрам.mdo new file mode 100644 index 000000000..9bd736dde --- /dev/null +++ b/SSL/src/DefinedTypes/ПолеРегистраКлючейДоступаКРегистрам/ПолеРегистраКлючейДоступаКРегистрам.mdo @@ -0,0 +1,21 @@ + + + + + + ПолеРегистраКлючейДоступаКРегистрам + + ru + Поле регистра ключей доступа к регистрам + + + CatalogRef.ВнешниеПользователи + CatalogRef.ИдентификаторыОбъектовРасширений + EnumRef.ДополнительныеЗначенияДоступа + ChartOfCharacteristicTypesRef.ДополнительныеРеквизитыИСведения + CatalogRef.ВариантыОтчетов + CatalogRef.Пользователи + CatalogRef.УчетныеЗаписиЭлектроннойПочты + CatalogRef.ИдентификаторыОбъектовМетаданных + + diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Form.form b/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Form.form index 3f49d8d9d..8bd1ceab2 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Form.form +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Form.form @@ -168,6 +168,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -421,6 +422,7 @@ Page + HorizontalIfPossible auto false @@ -891,16 +893,28 @@ 1 + + ru + Всегда отправлять уведомление + Enum.ПорядокОтветовНаЗапросыУведомленийОПрочтении.EnumValue.ВсегдаОтправлятьУведомление + + ru + Никогда не отправлять уведомление + Enum.ПорядокОтветовНаЗапросыУведомленийОПрочтении.EnumValue.НикогдаНеОтправлятьУведомление + + ru + Запрашивать перед тем, как отправить уведомление + Enum.ПорядокОтветовНаЗапросыУведомленийОПрочтении.EnumValue.ЗапрашиватьПередТемКакОтправитьУведомление diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Form.form b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Form.form index 30d761180..661def742 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Form.form +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Form.form @@ -261,6 +261,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -409,6 +410,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПечатьЭлектронногоПисьма/Form.form b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПечатьЭлектронногоПисьма/Form.form index 3558dab60..a28a42ab3 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПечатьЭлектронногоПисьма/Form.form +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПечатьЭлектронногоПисьма/Form.form @@ -89,6 +89,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Form.form b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Form.form index 679fc4760..1da8756c6 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Form.form +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Form.form @@ -113,7 +113,6 @@ ТипВзаимодействия - Left OnChange ТипВзаимодействияПриИзменении @@ -429,6 +428,7 @@ UsualGroup + AlwaysHorizontal Auto true Button @@ -2380,7 +2380,6 @@ None Change - Choose Copy Create Delete @@ -6737,6 +6736,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -8086,29 +8086,29 @@ ПредметыПанельНавигации.Предмет - ВЫБРАТЬ Различные - СостоянияПредметовВзаимодействий.Предмет КАК Предмет, - СостоянияПредметовВзаимодействий.КоличествоНеРассмотрено КАК КоличествоНеРассмотрено, - СостоянияПредметовВзаимодействий.Активен, - СостоянияПредметовВзаимодействий.ДатаПоследнегоВзаимодействия КАК ДатаПоследнегоВзаимодействия, - ТИПЗНАЧЕНИЯ(СостоянияПредметовВзаимодействий.Предмет) КАК ТипПредмета + ВЫБРАТЬ РАЗЛИЧНЫЕ + СостоянияПредметовВзаимодействийПереопределяемый.Предмет КАК Предмет, + СостоянияПредметовВзаимодействийПереопределяемый.КоличествоНеРассмотрено КАК КоличествоНеРассмотрено, + СостоянияПредметовВзаимодействийПереопределяемый.Активен КАК Активен, + СостоянияПредметовВзаимодействийПереопределяемый.ДатаПоследнегоВзаимодействия КАК ДатаПоследнегоВзаимодействия, + ТИПЗНАЧЕНИЯ(СостоянияПредметовВзаимодействийПереопределяемый.Предмет) КАК ТипПредмета ИЗ - РегистрСведений.СостоянияПредметовВзаимодействий КАК СостоянияПредметовВзаимодействий - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий - ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЖурналДокументов.Взаимодействия КАК Взаимодействия - ПО ПредметыПапкиВзаимодействий.Взаимодействие = Взаимодействия.Ссылка - ПО СостоянияПредметовВзаимодействий.Предмет = ПредметыПапкиВзаимодействий.Предмет + РегистрСведений.СостоянияПредметовВзаимодействий КАК СостоянияПредметовВзаимодействийПереопределяемый + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействийПереопределяемый + ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЖурналДокументов.Взаимодействия КАК ВзаимодействияПереопределяемый + ПО ПредметыПапкиВзаимодействийПереопределяемый.Взаимодействие = ВзаимодействияПереопределяемый.Ссылка + ПО СостоянияПредметовВзаимодействийПереопределяемый.Предмет = ПредметыПапкиВзаимодействийПереопределяемый.Предмет {ГДЕ - Взаимодействия.Ответственный, - Взаимодействия.Тип, - Взаимодействия.Важность, - Взаимодействия.СтатусИсходящегоПисьма, - Взаимодействия.УчетнаяЗапись, - Взаимодействия.Автор, - Взаимодействия.ПометкаУдаления, - Взаимодействия.Входящий, - ПредметыПапкиВзаимодействий.Рассмотрено, - ПредметыПапкиВзаимодействий.РассмотретьПосле} + ВзаимодействияПереопределяемый.Ответственный, + ВзаимодействияПереопределяемый.Тип, + ВзаимодействияПереопределяемый.Важность, + ВзаимодействияПереопределяемый.СтатусИсходящегоПисьма, + ВзаимодействияПереопределяемый.УчетнаяЗапись, + ВзаимодействияПереопределяемый.Автор, + ВзаимодействияПереопределяемый.ПометкаУдаления, + ВзаимодействияПереопределяемый.Входящий, + ПредметыПапкиВзаимодействийПереопределяемый.Рассмотрено, + ПредметыПапкиВзаимодействийПереопределяемый.РассмотретьПосле} InformationRegister.СостоянияПредметовВзаимодействий true true diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl index 97e5e7812..e305577e8 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl @@ -1848,8 +1848,10 @@ Элементы.СписокПереслать.Видимость = ЭтоПапки ИЛИ ТолькоПочта; Элементы.СписокОтправитьПолучитьПочту.Видимость = (ЭтоПапки ИЛИ ТолькоПочта) И ИнформационнаяБазаФайловая; - Элементы.Дата.Видимость = НЕ ЭтоПапки; - Элементы.ГруппаСоздать.Видимость = НЕ ЭтоПапки И НЕ ТолькоПочта; + Элементы.Дата.Видимость = НЕ ЭтоПапки; + Элементы.ГруппаСоздать.Видимость = НЕ ЭтоПапки И НЕ ТолькоПочта; + Элементы.СписокКонтекстноеМенюСкопировать.Видимость = Не ЭтоПапки И Не ТолькоПочта; + Элементы.Скопировать.Видимость = Не ЭтоПапки И Не ТолькоПочта; Элементы.СтраницыПредпросмотр.Видимость = ОтображатьОбластьЧтения; Элементы.СписокОтображатьОбластьЧтения.Пометка = ОтображатьОбластьЧтения; @@ -2170,18 +2172,102 @@ &НаСервере Процедура ЗаполнитьПанельПредметов() + ПараметрыСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка(); + ОтборПриемник = ПредметыПанельНавигации.КомпоновщикНастроек.ФиксированныеНастройки.Отбор; ОтборПриемник.Элементы.Очистить(); Если ТолькоЗначимыеПредметы Тогда - - ОтборИсточник = Список.КомпоновщикНастроек.ФиксированныеНастройки.Отбор; - - СкопироватьОтбор(ОтборПриемник, - ОтборИсточник, - Ложь, - Истина, - Истина); + + Запрос = Новый Запрос; + ТекстЗапросаПоОтбору = ПолучитьТекстЗапросаПоОтборуСписка(Запрос); + СтрокаПоКоторойИщем = Прав(ТекстЗапросаПоОтбору, СтрДлина(ТекстЗапросаПоОтбору) - СтрНайти(ТекстЗапросаПоОтбору,"ГДЕ") + 1); + МассивСтрокУсловия = СтрРазделить(СтрокаПоКоторойИщем, Символы.ПС, Ложь); + ТекстУсловийПоЖурналуДокументов = ""; + ТекстУсловийПоРегистру = ""; + Инд = 1; + + Для Каждого СтрокаУсловия Из МассивСтрокУсловия Цикл + СтрокаУсловия = СтрЗаменить(СтрокаУсловия,"&П","&Пар"); + Если Инд = 2 Тогда + СтрокаУсловия = " И " + СтрокаУсловия; + КонецЕсли; + Если СтрНайти(СтрокаУсловия, "ЖурналДокументовВзаимодействия") Тогда + ТекстУсловийПоЖурналуДокументов = ТекстУсловийПоЖурналуДокументов + СтрокаУсловия + Символы.ПС; + ИначеЕсли СтрНайти(СтрокаУсловия, "ПредметыВзаимодействий") Тогда + Если ПустаяСтрока(ТекстУсловийПоРегистру) Тогда + СтрокаУсловия = Прав(СтрокаУсловия, СтрДлина(СтрокаУсловия) - 3); + КонецЕсли; + ТекстУсловийПоРегистру = ТекстУсловийПоРегистру + СтрокаУсловия + Символы.ПС; + КонецЕсли; + + Инд = Инд + 1; + КонецЦикла; + + Если Не ПустаяСтрока(ТекстУсловийПоРегистру) Тогда + ТекстУсловийПоРегистру = "ГДЕ" + " " + ТекстУсловийПоРегистру + КонецЕсли; + + ТекстЗапросаДинамическийСписок = " + |ВЫБРАТЬ + | СостоянияПредметовВзаимодействий.Предмет, + | СостоянияПредметовВзаимодействий.КоличествоНеРассмотрено, + | СостоянияПредметовВзаимодействий.ДатаПоследнегоВзаимодействия, + | СостоянияПредметовВзаимодействий.Активен КАК Активен, + | ТИПЗНАЧЕНИЯ(СостоянияПредметовВзаимодействий.Предмет) КАК ТипПредмета + |ИЗ + | РегистрСведений.СостоянияПредметовВзаимодействий КАК СостоянияПредметовВзаимодействий + |ГДЕ + | ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыВзаимодействий + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЖурналДокументов.Взаимодействия КАК ЖурналДокументовВзаимодействия + | ПО ПредметыВзаимодействий.Предмет = СостоянияПредметовВзаимодействий.Предмет + | И ПредметыВзаимодействий.Взаимодействие = ЖурналДокументовВзаимодействия.Ссылка + | %ТекстУсловияЖурналДокументов% + | %ТекстУсловияРегистрПапки%)"; + + ТекстЗапросаДинамическийСписок = СтрЗаменить(ТекстЗапросаДинамическийСписок, "%ТекстУсловияЖурналДокументов%", ТекстУсловийПоЖурналуДокументов); + ТекстЗапросаДинамическийСписок = СтрЗаменить(ТекстЗапросаДинамическийСписок, "%ТекстУсловияРегистрПапки%", ТекстУсловийПоРегистру); + + ПараметрыСписка.ТекстЗапроса = ТекстЗапросаДинамическийСписок; + ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.ПредметыПанельНавигации, ПараметрыСписка); + + Для каждого ПараметрЗапроса Из Запрос.Параметры Цикл + Если СтрНачинаетсяС(ПараметрЗапроса.Ключ, "П") Тогда + ИмяПараметра = "Пар" + Прав(ПараметрЗапроса.Ключ, СтрДлина(ПараметрЗапроса.Ключ)-1); + Иначе + ИмяПараметра = ПараметрЗапроса.Ключ; + КонецЕсли; + ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка(ПредметыПанельНавигации, ИмяПараметра, ПараметрЗапроса.Значение); + КонецЦикла; + + Иначе + + ТекстЗапросаДинамическийСписок = " + |ВЫБРАТЬ + | СостоянияПредметовВзаимодействий.Предмет, + | СостоянияПредметовВзаимодействий.КоличествоНеРассмотрено, + | СостоянияПредметовВзаимодействий.ДатаПоследнегоВзаимодействия, + | СостоянияПредметовВзаимодействий.Активен КАК Активен, + | ТИПЗНАЧЕНИЯ(СостоянияПредметовВзаимодействий.Предмет) КАК ТипПредмета + |ИЗ + | РегистрСведений.СостоянияПредметовВзаимодействий КАК СостоянияПредметовВзаимодействий + |ГДЕ + | ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЖурналДокументов.Взаимодействия КАК ЖурналДокументовВзаимодействия + | ПО ПредметыПапкиВзаимодействий.Предмет = СостоянияПредметовВзаимодействий.Предмет + | И ПредметыПапкиВзаимодействий.Взаимодействие = ЖурналДокументовВзаимодействия.Ссылка)"; + + ПараметрыСписка.ТекстЗапроса = ТекстЗапросаДинамическийСписок; + ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.ПредметыПанельНавигации, ПараметрыСписка); + КонецЕсли; Если ПоказыватьВсеАктивныеПредметы Тогда @@ -2450,24 +2536,30 @@ КонецЦикла; ТекстЗапросаДинамическийСписок = - "ВЫБРАТЬ РАЗЛИЧНЫЕ - | СостоянияКонтактовВзаимодействий.Контакт КАК Контакт, - | СостоянияКонтактовВзаимодействий.КоличествоНеРассмотрено КАК КоличествоНеРассмотрено, - | СостоянияКонтактовВзаимодействий.ДатаПоследнегоВзаимодействия КАК ДатаПоследнегоВзаимодействия, + "ВЫБРАТЬ + | СостоянияКонтактовВзаимодействий.Контакт, + | СостоянияКонтактовВзаимодействий.КоличествоНеРассмотрено, + | СостоянияКонтактовВзаимодействий.ДатаПоследнегоВзаимодействия, | 3 КАК НомерКартинки, | ТИПЗНАЧЕНИЯ(СостоянияКонтактовВзаимодействий.Контакт) КАК ТипКонтакта |ИЗ | РегистрСведений.СостоянияКонтактовВзаимодействий КАК СостоянияКонтактовВзаимодействий - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КонтактыВзаимодействий КАК КонтактыВзаимодействий - | ПО СостоянияКонтактовВзаимодействий.Контакт = КонтактыВзаимодействий.Контакт - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЖурналДокументов.Взаимодействия КАК ЖурналДокументовВзаимодействия - | ПО (КонтактыВзаимодействий.Контакт = СостоянияКонтактовВзаимодействий.Контакт) - | И (КонтактыВзаимодействий.Взаимодействие = ЖурналДокументовВзаимодействия.Ссылка) - | %ТекстУсловияЖурналДокументов% - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыВзаимодействий - | ПО (КонтактыВзаимодействий.Контакт = СостоянияКонтактовВзаимодействий.Контакт) - | И (КонтактыВзаимодействий.Взаимодействие = ПредметыВзаимодействий.Взаимодействие) - | %ТекстУсловияРегистрПапки%"; + |ГДЕ + | ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | РегистрСведений.КонтактыВзаимодействий КАК КонтактыВзаимодействий + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЖурналДокументов.Взаимодействия КАК ЖурналДокументовВзаимодействия + | ПО + | КонтактыВзаимодействий.Контакт = СостоянияКонтактовВзаимодействий.Контакт + | И КонтактыВзаимодействий.Взаимодействие = ЖурналДокументовВзаимодействия.Ссылка + | %ТекстУсловияЖурналДокументов% + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыВзаимодействий + | ПО + | КонтактыВзаимодействий.Контакт = СостоянияКонтактовВзаимодействий.Контакт + | И КонтактыВзаимодействий.Взаимодействие = ПредметыВзаимодействий.Взаимодействие + | %ТекстУсловияРегистрПапки%)"; ТекстЗапросаДинамическийСписок = СтрЗаменить(ТекстЗапросаДинамическийСписок, "%ТекстУсловияЖурналДокументов%", ТекстУсловийПоЖурналуДокументов); ТекстЗапросаДинамическийСписок = СтрЗаменить(ТекстЗапросаДинамическийСписок, "%ТекстУсловияРегистрПапки%", ТекстУсловийПоРегистру); diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Form.form b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Form.form index fe6ad650a..b2745667f 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Form.form +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Form.form @@ -392,6 +392,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -422,8 +423,6 @@ false None - Post - UndoPosting ГруппаОсновное 221 diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl index a5a06c1ad..e263a26cc 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl @@ -109,19 +109,26 @@ Если ВыбранноеЗначение <> Неопределено Тогда + МассивИзмененныхДокументов = Новый Массив; ВыполненаЗамена = Ложь; - УстановитьОтветственного(ВыбранноеЗначение, ВыполненаЗамена); + УстановитьОтветственного(ВыбранноеЗначение, МассивИзмененныхДокументов); Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда - Если ВыполненаЗамена Тогда + Если МассивИзмененныхДокументов.Количество() > 0 Тогда Элементы.Список.Обновить(); КонецЕсли; Иначе - Если ВыполненаЗамена Тогда + Если МассивИзмененныхДокументов.Количество() > 0 Тогда РазвернутьВсеСтрокиДерева(); КонецЕсли; КонецЕсли; + Для Каждого ИзмененныйДокумент Из МассивИзмененныхДокументов Цикл + + Оповестить("ЗаписьВзаимодействия", ИзмененныйДокумент); + + КонецЦикла; + КонецЕсли; ИначеЕсли КонтекстВыбора = "ПредметВыполнитьТипПредмета" Тогда @@ -573,9 +580,9 @@ &НаСервере // Установить ответственного в выбранных взаимодействиях - серверная часть. // Параметры: -// Взаимодействия - список выбранных взаимодействий. -// Ответственный - устанавливаемый ответственный. -Процедура УстановитьОтветственного(Ответственный,ВыполненаЗамена = Ложь) +// Ответственный - СправочникСсылка.Пользователи - устанавливаемый ответственный. +// МассивИзмененныхДокументов - Массив - массив документов взаимодействий, у которых изменился пользователь. +Процедура УстановитьОтветственного(Ответственный, МассивИзмененныхДокументов) Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда @@ -587,7 +594,7 @@ И ТипЗнч(Взаимодействие) <> ТипГруппировка И Взаимодействие.Ответственный <> Ответственный Тогда Взаимодействия.ЗаменитьОтветственногоВДокументе(Взаимодействие, Ответственный); - ВыполненаЗамена = Истина; + МассивИзмененныхДокументов.Добавить(Взаимодействие); КонецЕсли; КонецЦикла; @@ -600,19 +607,21 @@ ЭлементДерева = ДеревоВзаимодействий.НайтиПоИдентификатору(Взаимодействие); Если ЭлементДерева <> Неопределено И ЭлементДерева.Ответственный <> Ответственный Тогда Взаимодействия.ЗаменитьОтветственногоВДокументе(ЭлементДерева.Ссылка, Ответственный); - ВыполненаЗамена = Истина; + + МассивИзмененныхДокументов.Добавить(ЭлементДерева.Ссылка); КонецЕсли; КонецЦикла; - Если ВыполненаЗамена Тогда - ЗаполнитьДеревоВзаимодействий(); + Если МассивИзмененныхДокументов.Количество() > 0 Тогда + ЗаполнитьДеревоВзаимодействий(); КонецЕсли; КонецЕсли; КонецПроцедуры + &НаСервере // Установить предмет в выбранных взаимодействиях - серверная часть. Процедура УстановитьПредмет(Предмет,ВыполненаЗамена) @@ -835,7 +844,7 @@ КонецЕсли; // Быстрый отбор "Тип взаимодействия". - Если ТипВзаимодействия = "ВсеПисьма" И Не ТолькоПочта Тогда + Если ТипВзаимодействия = "ВсеПисьма" Или ТолькоПочта Тогда СписокТипыПисьма = Новый СписокЗначений; СписокТипыПисьма.Добавить(Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее")); diff --git a/SSL/src/DocumentJournals/Взаимодействия/ManagerModule.bsl b/SSL/src/DocumentJournals/Взаимодействия/ManagerModule.bsl new file mode 100644 index 000000000..64bbd1145 --- /dev/null +++ b/SSL/src/DocumentJournals/Взаимодействия/ManagerModule.bsl @@ -0,0 +1,25 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +#Область ДляВызоваИзДругихПодсистем + +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтениеИзменение + |ГДЕ + | ЧтениеОбъектаРазрешено(Ссылка)"; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + +#КонецОбласти + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Form.form index 8d689c84b..6bc35325a 100644 --- a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Form.form @@ -539,6 +539,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -889,6 +890,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1074,6 +1076,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1580,6 +1583,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1641,6 +1645,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl index fd68b020f..c64a84aaa 100644 --- a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl @@ -32,16 +32,15 @@ ВозможностьПредварительногоСохранения = Параметры.ВозможностьПредварительногоСохранения; КонецЕсли; - Иначе - - Если НЕ Объект.Опрос.Пустая() Тогда - РеквизитыОпрос = ПолучитьЗначенияРеквизитовНазначениеОпроса(Объект.Опрос); - УстановитьЗначенияРеквизитовСогласноОпросу(РеквизитыОпрос); - КонецЕсли; - КонецЕсли; - - Если Не ШаблонАнкеты.Пустая() Тогда + + Если НЕ Объект.Опрос.Пустая() Тогда + РеквизитыОпрос = ПолучитьЗначенияРеквизитовНазначениеОпроса(Объект.Опрос); + УстановитьЗначенияРеквизитовСогласноОпросу(РеквизитыОпрос); + Объект.ШаблонАнкеты = ШаблонАнкеты; + КонецЕсли; + + Если НЕ ШаблонАнкеты.Пустая() Тогда Если Параметры.Свойство("ТолькоФормаЗаполнения") Тогда АвтоЗаголовок = Ложь; @@ -1207,7 +1206,7 @@ | ВопросыШаблонаАнкеты.Ссылка"; Запрос.УстановитьПараметр("ВнешнийИсточник",Объект.Состав.Выгрузить()); - Запрос.УстановитьПараметр("ШаблонАнкеты",ШаблонАнкеты); + Запрос.УстановитьПараметр("ШаблонАнкеты",Объект.ШаблонАнкеты); Результат = Запрос.Выполнить(); Если Результат.Пустой() Тогда @@ -1256,7 +1255,7 @@ Процедура УстановитьЗначенияРеквизитовСогласноОпросу(РеквизитыОпрос) ВозможностьПредварительногоСохранения = РеквизитыОпрос.ВозможностьПредварительногоСохранения; - ШаблонАнкеты = РеквизитыОпрос.ШаблонАнкеты; + ШаблонАнкеты = РеквизитыОпрос.ШаблонАнкеты; Вступление = ?(ПустаяСтрока(РеквизитыОпрос.Вступление), НСтр("ru = 'Нажмите далее для заполнения анкеты.'"), РеквизитыОпрос.Вступление); @@ -1300,7 +1299,7 @@ КонецФункции // Получает необходимые значения реквизита согласно шаблону анкеты. -&НаСервере +&НаСервереБезКонтекста Функция ЗначенияРеквизитовШаблонаАнкеты(ШаблонАнкеты) Запрос = Новый Запрос; diff --git a/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Form.form index aabc4ebf2..bf8583e00 100644 --- a/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Form.form @@ -139,6 +139,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -279,6 +280,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1872,6 +1874,7 @@ true true true + HorizontalIfPossible LeftWide true true diff --git a/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Module.bsl index 3757774be..060755be9 100644 --- a/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Module.bsl @@ -60,6 +60,13 @@ ПриСозданииИПриЧтенииНаСервере(); + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + КонецПроцедуры &НаКлиенте diff --git a/SSL/src/Documents/Встреча/ManagerModule.bsl b/SSL/src/Documents/Встреча/ManagerModule.bsl index 9f65e5243..67061d0ce 100644 --- a/SSL/src/Documents/Встреча/ManagerModule.bsl +++ b/SSL/src/Documents/Встреча/ManagerModule.bsl @@ -48,6 +48,21 @@ // Конец СтандартныеПодсистемы.Взаимодействия +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтениеИзменение + |ГДЕ + | ЗначениеРазрешено(Ответственный, Отключено КАК Ложь) + | ИЛИ ЗначениеРазрешено(Автор, Отключено КАК Ложь)"; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + #КонецОбласти #КонецОбласти diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Form.form index c31c79091..41526b3c7 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Form.form @@ -1512,6 +1512,7 @@ true true true + HorizontalIfPossible LeftWide true true @@ -1628,6 +1629,7 @@ true + FunctionalOption.ИспользоватьПризнакРассмотрено true @@ -1647,6 +1649,7 @@ true + FunctionalOption.ИспользоватьПризнакРассмотрено true diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Module.bsl index 6cd377516..eae5e8ad8 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Module.bsl @@ -58,6 +58,13 @@ ПриСозданииИПриЧтенииНаСервере(); + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + КонецПроцедуры &НаКлиенте diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/ManagerModule.bsl b/SSL/src/Documents/ЗапланированноеВзаимодействие/ManagerModule.bsl index d347d7c7c..dbcee3ee7 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/ManagerModule.bsl +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/ManagerModule.bsl @@ -46,6 +46,21 @@ // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтениеИзменение + |ГДЕ + | ЗначениеРазрешено(Ответственный, Отключено КАК Ложь) + | ИЛИ ЗначениеРазрешено(Автор, Отключено КАК Ложь)"; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + #КонецОбласти #КонецОбласти diff --git a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Form.form index 0ebf1cd25..c97109c97 100644 --- a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Form.form @@ -110,6 +110,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -288,6 +289,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -585,6 +587,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Form.form index 485e4c45b..675611517 100644 --- a/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Form.form @@ -106,6 +106,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -238,24 +239,115 @@ Auto - - ОтветственныйЗаОбработкуПерсональныхДанных - 13 - - <key>ru</key> - <value>Ответственный за обработку ПДн</value> - + + ОтветственныйЗаПДнГруппа + 88 + + ОтветственныйЗаОбработкуПерсональныхДанных + 13 + + <key>ru</key> + <value>Ответственный за обработку ПДн</value> + + true + true + + true + + + Объект.ОтветственныйЗаОбработкуПерсональныхДанных + + + OnChange + ОтветственныйЗаОбработкуПерсональныхДанныхПриИзменении + + + ОтветственныйЗаОбработкуПерсональныхДанныхРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + ОтветственныйЗаОбработкуПерсональныхДанныхКонтекстноеМеню + 14 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ФИООтветственногоЗаОбработкуПДн + 93 + + <key>ru</key> + <value>ФИО ответственного для печати</value> + + true + true + + true + + + Объект.ФИООтветственногоЗаОбработкуПДн + + + ФИООтветственногоЗаОбработкуПДнРасширеннаяПодсказка + 95 + Label + true + true + + Left + + + + ФИООтветственногоЗаОбработкуПДнКонтекстноеМеню + 94 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + true true true - - Объект.ОтветственныйЗаОбработкуПерсональныхДанных - + + <key>ru</key> + <value>Ответственный за ПДн</value> + - ОтветственныйЗаОбработкуПерсональныхДанныхРасширеннаяПодсказка - 15 + ОтветственныйЗаПДнГруппаРасширеннаяПодсказка + 89 Label true true @@ -263,24 +355,14 @@ Left - - ОтветственныйЗаОбработкуПерсональныхДанныхКонтекстноеМеню - 14 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal + UsualGroup + + Vertical + Auto + true + true + Auto + Auto
    true @@ -387,6 +469,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -522,6 +605,7 @@ UsualGroup + HorizontalIfPossible Collapsible true true @@ -603,6 +687,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -646,14 +731,9 @@ Left true - - StartChoice - КомментарийНачалоВыбора - true true true - true true true true @@ -722,6 +802,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl index 9c3244bb3..b21788868 100644 --- a/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl @@ -67,6 +67,13 @@ КонецПроцедуры +&НаКлиенте +Процедура ОтветственныйЗаОбработкуПерсональныхДанныхПриИзменении(Элемент) + + ОтветственныйЗаПДнПриИзмененииНаСервере(); + +КонецПроцедуры + &НаКлиенте Процедура СубъектПриИзменении(Элемент) @@ -81,18 +88,6 @@ КонецПроцедуры -&НаКлиенте -Процедура КомментарийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - - ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария( - Элемент.ТекстРедактирования, - ЭтотОбъект, - "Объект.Комментарий"); - -КонецПроцедуры - #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -105,6 +100,20 @@ КонецПроцедуры +&НаСервере +Процедура ОтветственныйЗаПДнПриИзмененииНаСервере() + + Объект.ФИООтветственногоЗаОбработкуПДн = Неопределено; + + Если Не ЗначениеЗаполнено(Объект.ОтветственныйЗаОбработкуПерсональныхДанных) Тогда + Возврат; + КонецЕсли; + + ОтветственныйФизическоеЛицо = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.ОтветственныйЗаОбработкуПерсональныхДанных, "ФизическоеЛицо"); + ЗащитаПерсональныхДанныхПереопределяемый.ЗаполнитьФИОФизическогоЛица(ОтветственныйФизическоеЛицо, Объект.ФИООтветственногоЗаОбработкуПДн); + +КонецПроцедуры + &НаСервере Процедура СубъектПриИзмененииНаСервере() diff --git a/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/ОтзывСогласияНаОбработкуПерсональныхДанных.mdo b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/ОтзывСогласияНаОбработкуПерсональныхДанных.mdo index 14da23a26..42ce13a7b 100644 --- a/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/ОтзывСогласияНаОбработкуПерсональныхДанных.mdo +++ b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/ОтзывСогласияНаОбработкуПерсональныхДанных.mdo @@ -147,6 +147,28 @@ Use Use + + ФИООтветственногоЗаОбработкуПДн + + ru + ФИО ответственного + + + String + + 150 + + + + ru + Фамилия, имя и отчество ответственного за обработку ПДн + + + + + Use + Use + Субъект diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Form.form index 495220091..3a3d3582b 100644 --- a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Form.form @@ -106,6 +106,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -234,6 +235,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -315,24 +317,115 @@ Auto - - ОтветственныйЗаОбработкуПерсональныхДанных - 13 - - <key>ru</key> - <value>Ответственный за обработку ПДн</value> - + + ОтветственныйЗаПДнГруппа + 101 + + ОтветственныйЗаОбработкуПерсональныхДанных + 13 + + <key>ru</key> + <value>Ответственный за обработку ПДн</value> + + true + true + + true + + + Объект.ОтветственныйЗаОбработкуПерсональныхДанных + + + OnChange + ОтветственныйЗаОбработкуПерсональныхДанныхПриИзменении + + + ОтветственныйЗаОбработкуПерсональныхДанныхРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + ОтветственныйЗаОбработкуПерсональныхДанныхКонтекстноеМеню + 14 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ФИООтветственногоЗаОбработкуПДн + 98 + + <key>ru</key> + <value>ФИО ответственного для печати</value> + + true + true + + true + + + Объект.ФИООтветственногоЗаОбработкуПДн + + + ФИООтветственногоЗаОбработкуПДнРасширеннаяПодсказка + 100 + Label + true + true + + Left + + + + ФИООтветственногоЗаОбработкуПДнКонтекстноеМеню + 99 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + true true true - - Объект.ОтветственныйЗаОбработкуПерсональныхДанных - + + <key>ru</key> + <value>Ответственный за ПДн</value> + - ОтветственныйЗаОбработкуПерсональныхДанныхРасширеннаяПодсказка - 15 + ОтветственныйЗаПДнГруппаРасширеннаяПодсказка + 102 Label true true @@ -340,24 +433,14 @@ Left - - ОтветственныйЗаОбработкуПерсональныхДанныхКонтекстноеМеню - 14 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal + UsualGroup + + Vertical + Auto + true + true + Auto + Auto true @@ -730,6 +813,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -852,6 +936,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -895,14 +980,9 @@ Left true - - StartChoice - КомментарийНачалоВыбора - true true true - true true true true @@ -971,6 +1051,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl index cd3ce6c71..1322e682a 100644 --- a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl @@ -101,6 +101,13 @@ КонецПроцедуры +&НаКлиенте +Процедура ОтветственныйЗаОбработкуПерсональныхДанныхПриИзменении(Элемент) + + ОтветственныйЗаПДнПриИзмененииНаСервере(); + +КонецПроцедуры + &НаКлиенте Процедура СубъектПриИзменении(Элемент) @@ -115,18 +122,6 @@ КонецПроцедуры -&НаКлиенте -Процедура КомментарийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - - ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария( - Элемент.ТекстРедактирования, - ЭтотОбъект, - "Объект.Комментарий"); - -КонецПроцедуры - #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -139,6 +134,20 @@ КонецПроцедуры +&НаСервере +Процедура ОтветственныйЗаПДнПриИзмененииНаСервере() + + Объект.ФИООтветственногоЗаОбработкуПДн = Неопределено; + + Если Не ЗначениеЗаполнено(Объект.ОтветственныйЗаОбработкуПерсональныхДанных) Тогда + Возврат; + КонецЕсли; + + ОтветственныйФизическоеЛицо = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.ОтветственныйЗаОбработкуПерсональныхДанных, "ФизическоеЛицо"); + ЗащитаПерсональныхДанныхПереопределяемый.ЗаполнитьФИОФизическогоЛица(ОтветственныйФизическоеЛицо, Объект.ФИООтветственногоЗаОбработкуПДн); + +КонецПроцедуры + &НаСервере Процедура СубъектПриИзмененииНаСервере() diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl index 0b4b36e04..27dcec28b 100644 --- a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl +++ b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl @@ -19,22 +19,12 @@ // В формате Microsoft Word. КомандаПечати = КомандыПечати.Добавить(); - КомандаПечати.Идентификатор = "СогласиеНаОбработкуПерсональныхДанных(MSWord)"; - КомандаПечати.Представление = НСтр("ru = 'Согласие на обработку ПДн (документ Microsoft Word)'"); + КомандаПечати.Идентификатор = "СогласиеНаОбработкуПерсональныхДанных(OfficeOpenXML)"; + КомандаПечати.Представление = НСтр("ru = 'Согласие на обработку ПДн (документ Office Open XML)'"); КомандаПечати.Картинка = БиблиотекаКартинок.ФорматWord2007; КомандаПечати.ПроверкаПроведенияПередПечатью = Истина; - КомандаПечати.Обработчик = "ЗащитаПерсональныхДанныхКлиент.ПечатьСогласияНаОбработкуПерсональныхДанных"; КомандаПечати.ТребуетсяРасширениеРаботыСФайлами = Истина; - - // В формате OpenOffice.org Writer. - КомандаПечати = КомандыПечати.Добавить(); - КомандаПечати.Идентификатор = "СогласиеНаОбработкуПерсональныхДанных(ODT)"; - КомандаПечати.Представление = НСтр("ru = 'Согласие на обработку ПДн (документ OpenOffice.org Writer)'"); - КомандаПечати.Картинка = БиблиотекаКартинок.ФорматOpenOfficeWriter; - КомандаПечати.ПроверкаПроведенияПередПечатью = Истина; - КомандаПечати.Обработчик = "ЗащитаПерсональныхДанныхКлиент.ПечатьСогласияНаОбработкуПерсональныхДанных"; - КомандаПечати.ТребуетсяРасширениеРаботыСФайлами = Истина; - + КонецПроцедуры // Формирует печатные формы. @@ -52,7 +42,7 @@ Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт // Печать согласия - ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "СогласиеНаОбработкуПерсональныхДанных"); + ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "СогласиеНаОбработкуПерсональныхДанных"); Если ПечатнаяФорма <> Неопределено Тогда // имена файлов ИменаФайлов = Новый Соответствие; @@ -63,8 +53,8 @@ ЗначенияРеквизитовДокумента.ДатаПолучения = Формат(ЗначенияРеквизитовДокумента.ДатаПолучения, "ДЛФ=D"); ЗначенияРеквизитовДокумента.Номер = ЗначенияРеквизитовДокумента.Номер; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПрефиксацияОбъектов") Тогда - Модуль = ОбщегоНазначения.ОбщийМодуль("ПрефиксацияОбъектовКлиентСервер"); - ЗначенияРеквизитовДокумента.Номер = Модуль.ПолучитьНомерНаПечать(ЗначенияРеквизитовДокумента.Номер); + МодульПрефиксацияОбъектовКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ПрефиксацияОбъектовКлиентСервер"); + ЗначенияРеквизитовДокумента.Номер = МодульПрефиксацияОбъектовКлиентСервер.НомерНаПечать(ЗначенияРеквизитовДокумента.Номер); КонецЕсли; ИмяФайла = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(Шаблон, ЗначенияРеквизитовДокументов[Ссылка]); ИменаФайлов.Вставить(Ссылка, ИмяФайла); @@ -77,30 +67,37 @@ ПечатнаяФорма.ИмяФайлаПечатнойФормы = ИменаФайлов; КонецЕсли; - // Печать в формате Word - НужноПечататьМакет = УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "СогласиеНаОбработкуПерсональныхДанных(MSWord)"); - Если НужноПечататьМакет Тогда - УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию( - КоллекцияПечатныхФорм, - "СогласиеНаОбработкуПерсональныхДанных(MSWord)", - НСтр("ru = 'Согласие на обработку ПДн (документ Microsoft Word)'"), - ПечатьСогласияНаОбработкуПДн(МассивОбъектов, ОбъектыПечати), - , - "Документ.СогласиеНаОбработкуПерсональныхДанных.ПФ_DOC_СогласиеНаОбработкуПерсональныхДанных"); + ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "СогласиеНаОбработкуПерсональныхДанных(OfficeOpenXML)"); + Если ПечатнаяФорма <> Неопределено Тогда + + ИмяМакета = "СогласиеНаОбработкуПерсональныхДанных(OfficeOpenXML)"; + МакетИДанныеОбъекта = УправлениеПечатьюВызовСервера.МакетыИДанныеОбъектовДляПечати("Документ.СогласиеНаОбработкуПерсональныхДанных", ИмяМакета, МассивОбъектов); + + ОфисныеДокументы = Новый Соответствие; + + Шаблон = НСтр("ru = 'Согласие на обработку ПДн [Субъект] - [Организация] (№[Номер] получено [ДатаПолучения])'"); + ЗначенияРеквизитовДокументов = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(МассивОбъектов, "Организация,Субъект,Номер,ДатаПолучения,Ссылка"); + Для Каждого Ссылка Из МассивОбъектов Цикл + + ЗначенияРеквизитовДокумента = ЗначенияРеквизитовДокументов[Ссылка]; + ЗначенияРеквизитовДокумента.ДатаПолучения = Формат(ЗначенияРеквизитовДокумента.ДатаПолучения, "ДЛФ=D"); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПрефиксацияОбъектов") Тогда + МодульПрефиксацияОбъектовКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ПрефиксацияОбъектовКлиентСервер"); + ЗначенияРеквизитовДокумента.Номер = МодульПрефиксацияОбъектовКлиентСервер.НомерНаПечать(ЗначенияРеквизитовДокумента.Номер); + КонецЕсли; + ИмяДокумента = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(Шаблон, ЗначенияРеквизитовДокументов[Ссылка]); + + АдресХранилищаОфисныйДокумент = НапечататьСогласиеНаОбработкуПерсональныхДанныхСубъекта(Ссылка, МакетИДанныеОбъекта, ИмяМакета); + + ОфисныеДокументы.Вставить(АдресХранилищаОфисныйДокумент, ИмяДокумента); + + КонецЦикла; + + ПечатнаяФорма.СинонимМакета = НСтр("ru = 'Согласие на обработку персональных данных (документ Microsoft Word)'"); + ПечатнаяФорма.ОфисныеДокументы = ОфисныеДокументы; + КонецЕсли; - - // Печать в формате OpenOffice. - НужноПечататьМакет = УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "СогласиеНаОбработкуПерсональныхДанных(ODT)"); - Если НужноПечататьМакет Тогда - УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию( - КоллекцияПечатныхФорм, - "СогласиеНаОбработкуПерсональныхДанных(ODT)", - НСтр("ru = 'Согласие на обработку ПДн (документ OpenOffice.org Writer)'"), - ПечатьСогласияНаОбработкуПДн(МассивОбъектов, ОбъектыПечати), - , - "Документ.СогласиеНаОбработкуПерсональныхДанных.ПФ_ODT_СогласиеНаОбработкуПерсональныхДанных"); - КонецЕсли; - + КонецПроцедуры // Подготавливает данные объекта к выводу на печать. @@ -132,22 +129,16 @@ ОписаниеОбластей = Новый Соответствие; ДвоичныеДанныеМакетов = Новый Соответствие; - ТипыМакетов = Новый Соответствие; Для Каждого ИмяМакета Из МассивИменМакетов Цикл - Если ИмяМакета = "СогласиеНаОбработкуПерсональныхДанных(MSWord)" Тогда - ДвоичныеДанныеМакетов.Вставить(ИмяМакета, УправлениеПечатью.МакетПечатнойФормы("Документ.СогласиеНаОбработкуПерсональныхДанных.ПФ_DOC_СогласиеНаОбработкуПерсональныхДанных")); - ТипыМакетов.Вставить(ИмяМакета, "DOC"); - ИначеЕсли ИмяМакета = "СогласиеНаОбработкуПерсональныхДанных(ODT)" Тогда - ДвоичныеДанныеМакетов.Вставить(ИмяМакета, УправлениеПечатью.МакетПечатнойФормы("Документ.СогласиеНаОбработкуПерсональныхДанных.ПФ_ODT_СогласиеНаОбработкуПерсональныхДанных")); - ТипыМакетов.Вставить(ИмяМакета, "ODT"); + Если ИмяМакета = "СогласиеНаОбработкуПерсональныхДанных(OfficeOpenXML)" Тогда + ДвоичныеДанныеМакетов.Вставить(ИмяМакета, УправлениеПечатью.МакетПечатнойФормы("Документ.СогласиеНаОбработкуПерсональныхДанных.ПФ_DOC_СогласиеНаОбработкуПерсональныхДанных_ru")); КонецЕсли; ОписаниеОбластей.Вставить(ИмяМакета, ОписаниеОбластейМакетаОфисногоДокумента()); КонецЦикла; - Макеты = Новый Структура("ОписаниеОбластей, ТипыМакетов, ДвоичныеДанныеМакетов"); + Макеты = Новый Структура("ОписаниеОбластей, ДвоичныеДанныеМакетов"); Макеты.ОписаниеОбластей = ОписаниеОбластей; - Макеты.ТипыМакетов = ТипыМакетов; Макеты.ДвоичныеДанныеМакетов = ДвоичныеДанныеМакетов; ДанныеПечати = Новый Структура("Данные, Макеты"); @@ -235,6 +226,7 @@ | Согласия.НаименованиеОрганизации КАК НаименованиеОрганизации, | Согласия.ЮридическийАдресОрганизации КАК АдресОрганизации, | Согласия.ОтветственныйЗаОбработкуПерсональныхДанных КАК ОтветственныйЗаОбработкуПерсональныхДанных, + | Согласия.ФИООтветственногоЗаОбработкуПДн КАК ФИООтветственногоЗаОбработкуПДн, | Согласия.Субъект КАК Субъект, | Согласия.ФИОСубъекта КАК ФИО, | Согласия.АдресСубъекта КАК Адрес, @@ -254,9 +246,14 @@ Пока Выборка.Следующий() Цикл Описание = ОписаниеСогласия(); ЗаполнитьЗначенияСвойств(Описание, Выборка); - Если Не ПустаяСтрока(СокрЛП(Выборка.НаименованиеОрганизации)) Тогда + Если Не ПустаяСтрока(Выборка.НаименованиеОрганизации) Тогда Описание.Организация = Выборка.НаименованиеОрганизации; КонецЕсли; + ЗаполнитьОрганизациюВДательномПадеже(Описание, Выборка.НаименованиеОрганизации); + Если Не ПустаяСтрока(Выборка.ФИООтветственногоЗаОбработкуПДн) Тогда + Описание.ОтветственныйЗаОбработкуПерсональныхДанных = Выборка.ФИООтветственногоЗаОбработкуПДн; + КонецЕсли; + ЗаполнитьОтветственногоВРодительномПадеже(Описание, Выборка.ФИООтветственногоЗаОбработкуПДн); Описание.ДатаСогласия = Формат(Выборка.ДатаСогласия, "ДЛФ=D"); Если ЗначениеЗаполнено(Выборка.СрокДействия) Тогда Описание.ПериодДействия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'с %1 по %2.'"), Формат(Выборка.ДатаСогласия, "ДЛФ=D"), Формат(Выборка.СрокДействия, "ДЛФ=D")); @@ -297,8 +294,10 @@ "ДатаСогласия, |ДокументОснование, |Организация, + |ОрганизацияВДательномПадеже, |АдресОрганизации, |ОтветственныйЗаОбработкуПерсональныхДанных, + |ОтветственныйЗаОбработкуПерсональныхДанныхВРодительномПадеже, |ПериодДействия, |ФИО, |Адрес, @@ -306,16 +305,123 @@ ОписаниеСогласия.ДатаСогласия = НСтр("ru = '«____»_______________20___г.'"); ОписаниеСогласия.Организация = НСтр("ru = '<Организация>'"); + ОписаниеСогласия.ОрганизацияВДательномПадеже = ОписаниеСогласия.Организация; ОписаниеСогласия.АдресОрганизации = НСтр("ru = '<Адрес организации>'"); ОписаниеСогласия.ОтветственныйЗаОбработкуПерсональныхДанных = НСтр("ru = '<ФИО ответственного лица>'"); + ОписаниеСогласия.ОтветственныйЗаОбработкуПерсональныхДанныхВРодительномПадеже = ОписаниеСогласия.ОтветственныйЗаОбработкуПерсональныхДанных; Возврат ОписаниеСогласия; КонецФункции +Процедура ЗаполнитьОрганизациюВДательномПадеже(ОписаниеСогласия, НаименованиеОрганизации) + + Если ПустаяСтрока(НаименованиеОрганизации) Тогда + ОписаниеСогласия.ОрганизацияВДательномПадеже = ОписаниеСогласия.Организация; + Возврат; + КонецЕсли; + + ОписаниеСогласия.ОрганизацияВДательномПадеже = НаименованиеОрганизации; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.СклонениеПредставленийОбъектов") Тогда + МодульСклонениеПредставленийОбъектов = ОбщегоНазначения.ОбщийМодуль("СклонениеПредставленийОбъектов"); + ОписаниеСогласия.ОрганизацияВДательномПадеже = МодульСклонениеПредставленийОбъектов.ПросклонятьПредставление(НаименованиеОрганизации, 3); + КонецЕсли; + +КонецПроцедуры + +Процедура ЗаполнитьОтветственногоВРодительномПадеже(ОписаниеСогласия, ФИООтветственного) + + Если ПустаяСтрока(ФИООтветственного) Тогда + ОписаниеСогласия.ОтветственныйЗаОбработкуПерсональныхДанныхВРодительномПадеже = ОписаниеСогласия.ОтветственныйЗаОбработкуПерсональныхДанных; + Возврат; + КонецЕсли; + + ОписаниеСогласия.ОтветственныйЗаОбработкуПерсональныхДанныхВРодительномПадеже = ФИООтветственного; + + СклонениеФИО = ""; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.СклонениеПредставленийОбъектов") Тогда + МодульСклонениеПредставленийОбъектов = ОбщегоНазначения.ОбщийМодуль("СклонениеПредставленийОбъектов"); + СклонениеФИО = МодульСклонениеПредставленийОбъектов.ПросклонятьФИО(ФИООтветственного, 2); + КонецЕсли; + + Если Не ПустаяСтрока(СклонениеФИО) Тогда + ОписаниеСогласия.ОтветственныйЗаОбработкуПерсональныхДанныхВРодительномПадеже = СклонениеФИО; + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Работа с макетами офисных документов. +// Формирует печатную форму документа Согласие на обработку персональных данных с использованием макета +// в формате офисного документа Office Open XML. +// +// Параметры: +// ДокументСсылка - Ссылка - объект, по которому требуется сформировать печатную форму. +// МакетИДанныеОбъекта - Соответствие - коллекция ссылок на объекты и их данные. +// ИмяМакета - Строка - наименование макета для печати. +// +// Возвращаемое значение: +// АдресХранилищаПечатнойФормы - Строка - адрес хранилища, куда помещается сформированный файл. +// +Функция НапечататьСогласиеНаОбработкуПерсональныхДанныхСубъекта(ДокументСсылка, МакетИДанныеОбъекта, ИмяМакета) + + ТипМакета = МакетИДанныеОбъекта.Макеты.ТипыМакетов[ИмяМакета]; + ДвоичныеДанныеМакетов = МакетИДанныеОбъекта.Макеты.ДвоичныеДанныеМакетов; + Области = МакетИДанныеОбъекта.Макеты.ОписаниеОбластей; + ДанныеОбъекта = МакетИДанныеОбъекта.Данные[ДокументСсылка][ИмяМакета]; + + Макет = УправлениеПечатью.ИнициализироватьМакетОфисногоДокумента(ДвоичныеДанныеМакетов[ИмяМакета], ТипМакета, ИмяМакета); + Если Макет = Неопределено Тогда + Возврат ""; + КонецЕсли; + + ЗакрытьОкноПечатнойФормы = Ложь; + Попытка + ПечатнаяФорма = УправлениеПечатью.ИнициализироватьПечатнуюФорму(ТипМакета, Макет.НастройкиСтраницыМакета, Макет); + АдресХранилищаПечатнойФормы = ""; + Если ПечатнаяФорма = Неопределено Тогда + УправлениеПечатью.ОчиститьСсылки(Макет); + Возврат ""; + КонецЕсли; + + // Вывод обычных областей с параметрами. + Область = УправлениеПечатью.ОбластьМакета(Макет, Области[ИмяМакета]["Заголовок"]); + УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь); + + Область = УправлениеПечатью.ОбластьМакета(Макет, Области[ИмяМакета]["НомерДата"]); + УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь); + + Область = УправлениеПечатью.ОбластьМакета(Макет, Области[ИмяМакета]["Преамбула"]); + УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь); + + Область = УправлениеПечатью.ОбластьМакета(Макет, Области[ИмяМакета]["ОсновнойТекст"]); + УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь); + + Область = УправлениеПечатью.ОбластьМакета(Макет, Области[ИмяМакета]["РеквизитыОператора"]); + УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь); + + Область = УправлениеПечатью.ОбластьМакета(Макет, Области[ИмяМакета]["РеквизитыСубъекта"]); + УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь); + + Область = УправлениеПечатью.ОбластьМакета(Макет, Области[ИмяМакета]["Подпись"]); + УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь); + + АдресХранилищаПечатнойФормы = УправлениеПечатью.СформироватьДокумент(ПечатнаяФорма); + Исключение + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗакрытьОкноПечатнойФормы = Истина; + Возврат ""; + КонецПопытки; + + УправлениеПечатью.ОчиститьСсылки(ПечатнаяФорма, ЗакрытьОкноПечатнойФормы); + УправлениеПечатью.ОчиститьСсылки(Макет); + + Возврат АдресХранилищаПечатнойФормы; + +КонецФункции + Функция ОписаниеОбластейМакетаОфисногоДокумента() ОписаниеОбластей = Новый Структура; diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Templates/ПФ_DOC_СогласиеНаОбработкуПерсональныхДанных/Template.bin b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Templates/ПФ_DOC_СогласиеНаОбработкуПерсональныхДанных/Template.bin deleted file mode 100644 index 7a0924c2e..000000000 Binary files a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Templates/ПФ_DOC_СогласиеНаОбработкуПерсональныхДанных/Template.bin and /dev/null differ diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Templates/ПФ_DOC_СогласиеНаОбработкуПерсональныхДанных_ru/Template.bin b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Templates/ПФ_DOC_СогласиеНаОбработкуПерсональныхДанных_ru/Template.bin new file mode 100644 index 000000000..3036aa474 Binary files /dev/null and b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Templates/ПФ_DOC_СогласиеНаОбработкуПерсональныхДанных_ru/Template.bin differ diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Templates/ПФ_MXL_СогласиеНаОбработкуПерсональныхДанных/Template.mxlx b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Templates/ПФ_MXL_СогласиеНаОбработкуПерсональныхДанных/Template.mxlx index 13ae02d7d..ab7cc38a4 100644 --- a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Templates/ПФ_MXL_СогласиеНаОбработкуПерсональныхДанных/Template.mxlx +++ b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Templates/ПФ_MXL_СогласиеНаОбработкуПерсональныхДанных/Template.mxlx @@ -919,7 +919,7 @@ ru - [ФИО], именуемый в дальнейшем «Субъект персональных данных» разрешает [Организация], в лице ответственного за обработку персональных данных [ОтветственныйЗаОбработкуПерсональныхДанных] далее «Оператор», обработку персональных данных, приведенных в пункте 2 настоящего согласия, на следующих условиях: + [ФИО], именуемый в дальнейшем «Субъект персональных данных» разрешает [ОрганизацияВДательномПадеже], в лице ответственного за обработку персональных данных [ОтветственныйЗаОбработкуПерсональныхДанныхВРодительномПадеже] далее «Оператор», обработку персональных данных, приведенных в пункте 2 настоящего согласия, на следующих условиях: diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Templates/ПФ_ODT_СогласиеНаОбработкуПерсональныхДанных/Template.bin b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Templates/ПФ_ODT_СогласиеНаОбработкуПерсональныхДанных/Template.bin deleted file mode 100644 index 906aac6d0..000000000 Binary files a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Templates/ПФ_ODT_СогласиеНаОбработкуПерсональныхДанных/Template.bin and /dev/null differ diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/СогласиеНаОбработкуПерсональныхДанных.mdo b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/СогласиеНаОбработкуПерсональныхДанных.mdo index a76099ecd..6c5bdeaed 100644 --- a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/СогласиеНаОбработкуПерсональныхДанных.mdo +++ b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/СогласиеНаОбработкуПерсональныхДанных.mdo @@ -174,6 +174,28 @@ Use Use + + ФИООтветственногоЗаОбработкуПДн + + ru + ФИО ответственного + + + String + + 150 + + + + ru + Фамилия, имя и отчество ответственного за обработку ПДн + + + + + Use + Use + Субъект @@ -372,18 +394,10 @@ - ПФ_DOC_СогласиеНаОбработкуПерсональныхДанных + ПФ_DOC_СогласиеНаОбработкуПерсональныхДанных_ru ru - Cогласие на обработку персональных данных (документ Microsoft Word) - - BinaryData - - - ПФ_ODT_СогласиеНаОбработкуПерсональныхДанных - - ru - Cогласие на обработку персональных данных (документ OpenOffice.org Writer) + Cогласие на обработку персональных данных (документ Office Open XML) BinaryData diff --git a/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Form.form index b60dc8570..d63f4551a 100644 --- a/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Form.form @@ -1110,6 +1110,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1502,6 +1503,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1877,6 +1879,7 @@ true true true + HorizontalIfPossible LeftWide true true @@ -2065,6 +2068,7 @@ true + FunctionalOption.ИспользоватьПризнакРассмотрено true @@ -2084,6 +2088,7 @@ true + FunctionalOption.ИспользоватьПризнакРассмотрено true diff --git a/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Module.bsl index 960f1aee1..1fc9dbf13 100644 --- a/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Module.bsl @@ -92,6 +92,14 @@ МодульПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект); КонецЕсли; // Конец СтандартныеПодсистемы.ПодключаемыеКоманды + + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + КонецПроцедуры &НаКлиенте diff --git a/SSL/src/Documents/СообщениеSMS/ManagerModule.bsl b/SSL/src/Documents/СообщениеSMS/ManagerModule.bsl index ada4a9a3a..8dc7f1ef9 100644 --- a/SSL/src/Documents/СообщениеSMS/ManagerModule.bsl +++ b/SSL/src/Documents/СообщениеSMS/ManagerModule.bsl @@ -46,6 +46,21 @@ // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтениеИзменение + |ГДЕ + | ЗначениеРазрешено(Ответственный, Отключено КАК Ложь) + | ИЛИ ЗначениеРазрешено(Автор, Отключено КАК Ложь)"; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + #КонецОбласти #КонецОбласти diff --git a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Form.form index 9c60c298d..417288641 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Form.form @@ -114,6 +114,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -161,7 +162,7 @@ Left true - 30 + 32 true true false @@ -207,10 +208,11 @@ Left true - 30 + 32 true true false + false true true true @@ -262,12 +264,15 @@ StartChoice КонтактНачалоВыбора - 30 + 31 true true false + false true + ShowInInputField true + false true true true @@ -1423,6 +1428,7 @@ true true true + HorizontalIfPossible LeftWide true true @@ -1538,6 +1544,7 @@ true + FunctionalOption.ИспользоватьПризнакРассмотрено true @@ -1557,6 +1564,7 @@ true + FunctionalOption.ИспользоватьПризнакРассмотрено true diff --git a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Module.bsl index 9bfa41ce1..370cf9a5d 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Module.bsl @@ -68,6 +68,13 @@ ПриСозданииИПриЧтенииНаСервере(); + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + КонецПроцедуры &НаКлиенте diff --git a/SSL/src/Documents/ТелефонныйЗвонок/ManagerModule.bsl b/SSL/src/Documents/ТелефонныйЗвонок/ManagerModule.bsl index 4e100967d..a615120f5 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/ManagerModule.bsl +++ b/SSL/src/Documents/ТелефонныйЗвонок/ManagerModule.bsl @@ -65,6 +65,21 @@ // Конец СтандартныеПодсистемы.Взаимодействия +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтениеИзменение + |ГДЕ + | ЗначениеРазрешено(Ответственный, Отключено КАК Ложь) + | ИЛИ ЗначениеРазрешено(Автор, Отключено КАК Ложь)"; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + #КонецОбласти #КонецОбласти diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Form.form index 0da1bf525..c85524fd4 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Form.form @@ -1026,6 +1026,7 @@ Page + HorizontalIfPossible auto false @@ -1081,6 +1082,7 @@ Page + HorizontalIfPossible auto false @@ -1771,6 +1773,7 @@ DontBlock true true + HorizontalIfPossible LeftWide true true diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl index 6cb2b1f5f..9f507e495 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl @@ -125,6 +125,13 @@ КонецЕсли; // Конец СтандартныеПодсистемы.Свойства + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + КонецПроцедуры &НаКлиенте diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ManagerModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ManagerModule.bsl index cdcb6ae76..12c11aadf 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ManagerModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ManagerModule.bsl @@ -124,6 +124,21 @@ // Конец СтандартныеПодсистемы.Взаимодействия +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтениеИзменение + |ГДЕ + | ЗначениеРазрешено(Ответственный, Отключено КАК Ложь) + | ИЛИ ЗначениеРазрешено(УчетнаяЗапись, Отключено КАК Ложь)"; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + #КонецОбласти #КонецОбласти diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Form.form index 868689e4d..68aa2e389 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Form.form @@ -731,6 +731,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1781,6 +1782,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1846,6 +1848,7 @@ Page + HorizontalIfPossible auto false @@ -1933,6 +1936,7 @@ Page + HorizontalIfPossible auto false @@ -2621,6 +2625,10 @@ OnOpen ПриОткрытии + + BeforeClose + ПередЗакрытием + OnCreateAtServer ПриСозданииНаСервере @@ -2633,6 +2641,7 @@ true true true + HorizontalIfPossible LeftWide true true @@ -2881,6 +2890,23 @@ true + + Редактируется + + <key>ru</key> + <value>Редактируется</value> + + 11 + + Boolean + + + true + + + true + + УдаленныеВложения diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl index 1c1dcc77d..3ea0de76f 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl @@ -156,6 +156,13 @@ КонецЕсли; // Конец СтандартныеПодсистемы.Свойства + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + КонецПроцедуры &НаКлиенте @@ -229,9 +236,58 @@ ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиКопий, Ложь); Объект.СписокПолучателейСкрытыхКопий = ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиСкрытыхКопий, Ложь); + + Для Каждого Вложение Из Вложения Цикл + + Если Вложение.Расположение = 0 + И Вложение.Редактируется Тогда + + ОписаниеОповещенияПомещенияФайла = Новый ОписаниеОповещения("ПослеПомещенияФайла", ЭтотОбъект); + РаботаСФайламиКлиент.ПоместитьПрисоединенныйФайл(ОписаниеОповещенияПомещенияФайла, Вложение.Ссылка, УникальныйИдентификатор); + + КонецЕсли; + + КонецЦикла; КонецПроцедуры +&НаКлиенте +Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) + + Если Не ЗавершениеРаботы + И Модифицированность + И Объект.СтатусПисьма = ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Черновик") Тогда + + ЕстьРедактируемыеФайлы = Ложь; + МассивРедактируемыхФайлов = Новый Массив; + + Для Каждого Вложение Из Вложения Цикл + + Если Вложение.Редактируется Тогда + ЕстьРедактируемыеФайлы = Истина; + МассивРедактируемыхФайлов.Добавить(Вложение.Ссылка); + КонецЕсли; + + КонецЦикла; + + Если ЕстьРедактируемыеФайлы Тогда + + Отказ = Истина; + СтандартнаяОбработка = Ложь; + + ТекстВопроса = НСтр("ru = 'Данные были изменены, Записать?'"); + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("МассивРедактируемыхФайлов", МассивРедактируемыхФайлов); + ОповещениеПослеВопросаОЗакрытии = Новый ОписаниеОповещения("ПослеВопросаПриЗакрытии", ЭтотОбъект, ДополнительныеПараметры); + + ПоказатьВопрос(ОповещениеПослеВопросаОЗакрытии, ТекстВопроса, РежимДиалогаВопрос.ДаНетОтмена); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, РежимЗаписи, РежимПроведения) @@ -611,7 +667,6 @@ #КонецОбласти - #Область ОбработчикиСобытийЭлементовТаблицыФормыСписокПолучателей &НаКлиенте @@ -1010,13 +1065,20 @@ Если Объект.СтатусПисьма <> Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Отправлено Тогда УправлениеЭлектроннойПочтой.ПолучитьДоступныеУчетныеЗаписиДляОтправки( Элементы.ОтправительПредставление.СписокВыбора,ДоступныеДляОтправкиУчетныеЗаписи); - Если (Объект.Ссылка.Пустая() Или Объект.УчетнаяЗапись.Пустая()) И ДоступныеДляОтправкиУчетныеЗаписи.Количество() > 0 Тогда + + Если Объект.УчетнаяЗапись.Пустая() + И ДоступныеДляОтправкиУчетныеЗаписи.Количество() > 0 + И Объект.Ссылка.Пустая() Тогда + Объект.УчетнаяЗапись = ДоступныеДляОтправкиУчетныеЗаписи[0].УчетнаяЗапись; - ЭлементСписка = Элементы.ОтправительПредставление.СписокВыбора.НайтиПоЗначению(Объект.УчетнаяЗапись); - Если ЭлементСписка <> Неопределено Тогда - Объект.ОтправительПредставление = ЭлементСписка.Представление; - КонецЕсли; + КонецЕсли; + + ЭлементСписка = Элементы.ОтправительПредставление.СписокВыбора.НайтиПоЗначению(Объект.УчетнаяЗапись); + Если ЭлементСписка <> Неопределено Тогда + Объект.ОтправительПредставление = ЭлементСписка.Представление; + КонецЕсли; + Иначе Элементы.ОтправительПредставление.ТолькоПросмотр = Истина; @@ -1231,7 +1293,6 @@ КонецПроцедуры - &НаКлиенте Процедура ОткрытьВложениеВыполнить() @@ -1248,7 +1309,16 @@ Иначе - УправлениеЭлектроннойПочтойКлиент.ОткрытьВложение(ТекущиеДанные.Ссылка, ЭтотОбъект); + ДляРедактирования = Объект.СтатусПисьма = ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Черновик"); + + УправлениеЭлектроннойПочтойКлиент.ОткрытьВложение(ТекущиеДанные.Ссылка, + ЭтотОбъект, + ДляРедактирования); + + Если ДляРедактирования Тогда + ТекущиеДанные.Редактируется = Истина; + Модифицированность = Истина; + КонецЕсли; КонецЕсли; @@ -1309,7 +1379,6 @@ КонецПроцедуры - &НаСервере Процедура ЗаполнитьВложения(ПереданныеПараметры = Неопределено) @@ -1721,15 +1790,13 @@ Элементы.СтраницыТекстПисьма.ТекущаяСтраница = Элементы.СтраницаФорматированныйДокумент; Объект.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.HTML; - Если Не Объект.Ссылка.Пустая() Тогда + Если Не Объект.Ссылка.Пустая() Или ЗначениеЗаполнено(Объект.ТекстHTML) Тогда СтруктураВложений = Новый Структура; Объект.ТекстHTML = Взаимодействия.ОбработатьТекстHTMLДляФорматированногоДокумента( - Объект.Ссылка, Объект.ТекстHTML,СтруктураВложений); + Объект.Ссылка, Объект.ТекстHTML, СтруктураВложений); ТекстПисьмаФорматированныйДокумент.УстановитьHTML(Объект.ТекстHTML, СтруктураВложений); - ИначеЕсли ПараметрыРаботыПользователяПользователя.Подпись <> Неопределено Тогда - + ИначеЕсли Объект.Ссылка.Пустая() И ПараметрыРаботыПользователяПользователя.Подпись <> Неопределено Тогда ДобавитьФорматированныйДокументКФорматированномуДокументу(ТекстПисьмаФорматированныйДокумент, ПараметрыРаботыПользователяПользователя.Подпись); - КонецЕсли; Иначе @@ -1739,9 +1806,7 @@ Объект.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст; ТекстПисьма = Объект.Текст; Если Объект.Ссылка.Пустая() И ПараметрыРаботыПользователяПользователя.Подпись <> Неопределено Тогда - ТекстПисьма = ТекстПисьма + ПараметрыРаботыПользователяПользователя.Подпись; - КонецЕсли; Объект.Кодировка = "UTF-8"; @@ -1756,117 +1821,131 @@ &НаСервере Процедура ОбработатьПереданныеПараметры(ПереданныеПараметры) - Если Объект.Ссылка.Пустая() Тогда + Если НЕ Объект.Ссылка.Пустая() Тогда + Возврат; + КонецЕсли; + + УстановитьТекстПисьма(); + + Если ПереданныеПараметры.Свойство("Вложения") И ПереданныеПараметры.Вложения <> Неопределено Тогда - УстановитьТекстПисьма(); - - Если ПереданныеПараметры.Свойство("Вложения") И ПереданныеПараметры.Вложения <> Неопределено Тогда - - Если ТипЗнч(ПереданныеПараметры.Вложения) = Тип("СписокЗначений") Или ТипЗнч(ПереданныеПараметры.Вложения) = Тип("Массив") Тогда - Для Каждого Вложение Из ПереданныеПараметры.Вложения Цикл - ОписаниеВложения = Вложения.Добавить(); - Если ТипЗнч(ПереданныеПараметры.Вложения) = Тип("СписокЗначений") Тогда - Если ЭтоАдресВременногоХранилища(Вложение.Значение) Тогда - ОписаниеВложения.Расположение = 4; - ОписаниеВложения.ИмяФайлаНаКомпьютере = ПоместитьВоВременноеХранилище(ПолучитьИзВременногоХранилища(Вложение.Значение), УникальныйИдентификатор); - ИначеЕсли ТипЗнч(Вложение.Значение) = Тип("ДвоичныеДанные") Тогда - ОписаниеВложения.Расположение = 4; - ОписаниеВложения.ИмяФайлаНаКомпьютере = ПоместитьВоВременноеХранилище(Вложение.Значение, УникальныйИдентификатор); - Иначе - ОписаниеВложения.Расположение = 2; - ОписаниеВложения.ИмяФайлаНаКомпьютере = Вложение.Значение; - КонецЕсли; - ОписаниеВложения.ИмяФайла = Вложение.Представление; - Иначе // ТипЗнч(ПереданныеПараметры.Вложения) = "массив структур" - Если Не ПустаяСтрока(Вложение.АдресВоВременномХранилище) Тогда - ОписаниеВложения.Расположение = 4; - ОписаниеВложения.ИмяФайлаНаКомпьютере = ПоместитьВоВременноеХранилище( - ПолучитьИзВременногоХранилища(Вложение.АдресВоВременномХранилище), УникальныйИдентификатор); - Иначе - ОписаниеВложения.Расположение = 2; - ОписаниеВложения.ИмяФайлаНаКомпьютере = Вложение.ПутьКФайлу; - КонецЕсли; + Если ТипЗнч(ПереданныеПараметры.Вложения) = Тип("СписокЗначений") Или ТипЗнч(ПереданныеПараметры.Вложения) = Тип("Массив") Тогда + Для Каждого Вложение Из ПереданныеПараметры.Вложения Цикл + ОписаниеВложения = Вложения.Добавить(); + Если ТипЗнч(ПереданныеПараметры.Вложения) = Тип("СписокЗначений") Тогда + Если ЭтоАдресВременногоХранилища(Вложение.Значение) Тогда + ОписаниеВложения.Расположение = 4; + ОписаниеВложения.ИмяФайлаНаКомпьютере = ПоместитьВоВременноеХранилище(ПолучитьИзВременногоХранилища(Вложение.Значение), УникальныйИдентификатор); + ИначеЕсли ТипЗнч(Вложение.Значение) = Тип("ДвоичныеДанные") Тогда + ОписаниеВложения.Расположение = 4; + ОписаниеВложения.ИмяФайлаНаКомпьютере = ПоместитьВоВременноеХранилище(Вложение.Значение, УникальныйИдентификатор); + Иначе + ОписаниеВложения.Расположение = 2; + ОписаниеВложения.ИмяФайлаНаКомпьютере = Вложение.Значение; КонецЕсли; ОписаниеВложения.ИмяФайла = Вложение.Представление; - Расширение = ВзаимодействияКлиентСервер.РасширениеФайла(ОписаниеВложения.ИмяФайла); - ОписаниеВложения.ИндексКартинки = РаботаСФайламиСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(Расширение); - КонецЦикла; - КонецЕсли; - + Иначе // ТипЗнч(ПереданныеПараметры.Вложения) = "массив структур" + Если Не ПустаяСтрока(Вложение.АдресВоВременномХранилище) Тогда + ОписаниеВложения.Расположение = 4; + ОписаниеВложения.ИмяФайлаНаКомпьютере = ПоместитьВоВременноеХранилище( + ПолучитьИзВременногоХранилища(Вложение.АдресВоВременномХранилище), УникальныйИдентификатор); + Иначе + ОписаниеВложения.Расположение = 2; + ОписаниеВложения.ИмяФайлаНаКомпьютере = Вложение.ПутьКФайлу; + КонецЕсли; + КонецЕсли; + ОписаниеВложения.ИмяФайла = Вложение.Представление; + Расширение = ВзаимодействияКлиентСервер.РасширениеФайла(ОписаниеВложения.ИмяФайла); + ОписаниеВложения.ИндексКартинки = РаботаСФайламиСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(Расширение); + КонецЦикла; КонецЕсли; - Если НЕ ПустаяСтрока(ПереданныеПараметры.Тема) Тогда - Объект.Тема = ПереданныеПараметры.Тема; - КонецЕсли; + КонецЕсли; + + Если ПереданныеПараметры.Свойство("Тема") И НЕ ПустаяСтрока(ПереданныеПараметры.Тема) Тогда + Объект.Тема = ПереданныеПараметры.Тема; + КонецЕсли; + + Если ПереданныеПараметры.Свойство("Получатель") И ПереданныеПараметры.Получатель <> Неопределено Тогда - Если ПереданныеПараметры.Свойство("Получатель") И ПереданныеПараметры.Получатель <> Неопределено Тогда + // Если передан параметр "Получатель", то эта табличная часть очищается перед заполнением согласно данным параметра. + Объект.ПолучателиПисьма.Очистить(); + + Если ТипЗнч(ПереданныеПараметры.Получатель) = Тип("Строка") И НЕ ПустаяСтрока(ПереданныеПараметры.Получатель) Тогда + Объект.СписокПолучателейПисьма = ПереданныеПараметры.Получатель; + НоваяСтрока = Объект.ПолучателиПисьма.Добавить(); + НоваяСтрока.Адрес = ПереданныеПараметры.Получатель; - // Если передан параметр "Получатель", то эта табличная часть очищается перед заполнением согласно данным параметра. - Объект.ПолучателиПисьма.Очистить(); + ИначеЕсли ТипЗнч(ПереданныеПараметры.Получатель) = Тип("СписокЗначений") Тогда - Если ТипЗнч(ПереданныеПараметры.Получатель) = Тип("Строка") И НЕ ПустаяСтрока(ПереданныеПараметры.Получатель) Тогда - Объект.СписокПолучателейПисьма = ПереданныеПараметры.Получатель; + Для Каждого ЭлементСписка Из ПереданныеПараметры.Получатель Цикл НоваяСтрока = Объект.ПолучателиПисьма.Добавить(); - НоваяСтрока.Адрес = ПереданныеПараметры.Получатель; + НоваяСтрока.Адрес = ЭлементСписка.Значение; + НоваяСтрока.Представление = ОбработанноеПредставлениеАдресата(ЭлементСписка.Представление); - ИначеЕсли ТипЗнч(ПереданныеПараметры.Получатель) = Тип("СписокЗначений") Тогда + НоваяСтрока = СписокПолучателей.Добавить(); + НоваяСтрока.ВариантОтправки = НСтр("ru = 'Кому:'"); + НоваяСтрока.Адрес = ЭлементСписка.Значение; + НоваяСтрока.Представление = ОбработанноеПредставлениеАдресата(ЭлементСписка.Представление); + КонецЦикла; + + Объект.СписокПолучателейПисьма = ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиПисьма, Ложь); + + ИначеЕсли ТипЗнч(ПереданныеПараметры.Получатель) = Тип("Массив") Тогда + + Для Каждого ЭлементМассива Из ПереданныеПараметры.Получатель Цикл - Для Каждого ЭлементСписка Из ПереданныеПараметры.Получатель Цикл + МассивАдресов = СтрРазделить(ЭлементМассива.Адрес, ";"); + + Для Каждого Адрес Из МассивАдресов Цикл + Если ПустаяСтрока(Адрес) Тогда + Продолжить; + КонецЕсли; НоваяСтрока = Объект.ПолучателиПисьма.Добавить(); - НоваяСтрока.Адрес = ЭлементСписка.Значение; - НоваяСтрока.Представление = ЭлементСписка.Представление; - - НоваяСтрока = СписокПолучателей.Добавить(); - НоваяСтрока.ВариантОтправки = НСтр("ru = 'Кому:'"); - НоваяСтрока.Адрес = ЭлементСписка.Значение; - НоваяСтрока.Представление = ЭлементСписка.Представление; + НоваяСтрока.Адрес = СокрЛП(Адрес); + НоваяСтрока.Представление = ОбработанноеПредставлениеАдресата(ЭлементМассива.Представление); + НоваяСтрока.Контакт = ЭлементМассива.ИсточникКонтактнойИнформации; КонецЦикла; - Объект.СписокПолучателейПисьма = ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиПисьма, Ложь); - - ИначеЕсли ТипЗнч(ПереданныеПараметры.Получатель) = Тип("Массив") Тогда - - Для Каждого ЭлементМассива Из ПереданныеПараметры.Получатель Цикл - - МассивАдресов = СтрРазделить(ЭлементМассива.Адрес, ";"); - - Для Каждого Адрес Из МассивАдресов Цикл - Если ПустаяСтрока(Адрес) Тогда - Продолжить; - КонецЕсли; - НоваяСтрока = Объект.ПолучателиПисьма.Добавить(); - НоваяСтрока.Адрес = СокрЛП(Адрес); - НоваяСтрока.Представление = ЭлементМассива.Представление; - НоваяСтрока.Контакт = ЭлементМассива.ИсточникКонтактнойИнформации; - КонецЦикла; - - КонецЦикла; - - Объект.СписокПолучателейПисьма = ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиПисьма, Ложь); - - КонецЕсли; + КонецЦикла; - КонецЕсли; - - ОчиститьДублиАдресатов(Объект.ПолучателиПисьма); - - Если НЕ ПереданныеПараметры.Отправитель.Пустая() Тогда - - Объект.УчетнаяЗапись = ПереданныеПараметры.Отправитель; - РеквизитыОтправителя = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( - ПереданныеПараметры.Отправитель,"Ссылка, ИмяПользователя, АдресЭлектроннойПочты"); - Объект.ОтправительПредставление = ВзаимодействияКлиентСервер.ПолучитьПредставлениеАдресата( - РеквизитыОтправителя.ИмяПользователя, РеквизитыОтправителя.АдресЭлектроннойПочты, ""); + Объект.СписокПолучателейПисьма = ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиПисьма, Ложь); КонецЕсли; КонецЕсли; + ОчиститьДублиАдресатов(Объект.ПолучателиПисьма); + + Если ПереданныеПараметры.Свойство("Отправитель") И НЕ ПереданныеПараметры.Отправитель.Пустая() Тогда + + Объект.УчетнаяЗапись = ПереданныеПараметры.Отправитель; + РеквизитыОтправителя = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( + ПереданныеПараметры.Отправитель,"Ссылка, ИмяПользователя, АдресЭлектроннойПочты"); + Объект.ОтправительПредставление = ВзаимодействияКлиентСервер.ПолучитьПредставлениеАдресата( + РеквизитыОтправителя.ИмяПользователя, РеквизитыОтправителя.АдресЭлектроннойПочты, ""); + + КонецЕсли; + КонецПроцедуры +&НаКлиентеНаСервереБезКонтекста +Функция ОбработанноеПредставлениеАдресата(ПредставлениеАдресата) + + ПредставлениеАдресата = СтрЗаменить(ПредставлениеАдресата, ",", ""); + ПредставлениеАдресата = СтрЗаменить(ПредставлениеАдресата, ";", ""); + + Возврат ПредставлениеАдресата; + +КонецФункции + &НаСервере Процедура УстановитьТекстПисьма() + Если НЕ Параметры.Свойство("Текст") Тогда + Возврат; + КонецЕсли; + Текст = Параметры.Текст; Если ТипЗнч(Текст) = Тип("Структура") Тогда @@ -2274,11 +2353,9 @@ КонецЕсли; НоваяСтрока = ТабличнаяЧасть.Добавить(); - НоваяСтрока.Адрес = Элемент.Адрес; - НоваяСтрока.Представление = Элемент.Представление; - НоваяСтрока.Представление = СтрЗаменить(НоваяСтрока.Представление, ",", ""); - НоваяСтрока.Представление = СтрЗаменить(НоваяСтрока.Представление, ";", ""); - НоваяСтрока.Контакт = Элемент.Контакт; + НоваяСтрока.Адрес = Элемент.Адрес; + НоваяСтрока.Представление = ОбработанноеПредставлениеАдресата(Элемент.Представление); + НоваяСтрока.Контакт = Элемент.Контакт; КонецЦикла; @@ -2480,9 +2557,9 @@ ВыполняетсяОтправка = Истина; Если Объект.Ссылка.Пустая() - ИЛИ Модифицированность - ИЛИ Объект.ВключатьТелоИсходногоПисьма - ИЛИ (Объект.СтатусПисьма = ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Черновик")) Тогда + Или Модифицированность + Или Объект.ВключатьТелоИсходногоПисьма + Или (Объект.СтатусПисьма = ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Черновик")) Тогда Записать(); КонецЕсли; @@ -2804,6 +2881,36 @@ КонецФункции +&НаКлиенте +Процедура ПослеПомещенияФайла(Результат, ДополнительныеПараметры) Экспорт + + Если Результат <> Неопределено Тогда + Если Не ПустаяСтрока(Результат.ОписаниеОшибки) Тогда + ВызватьИсключение Результат.ОписаниеОшибки; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеВопросаПриЗакрытии(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = КодВозвратаДиалога.Да Тогда + ЗаписаноУспешно = Записать(); + Если ЗаписаноУспешно Тогда + Закрыть(); + КонецЕсли; + ИначеЕсли Результат = КодВозвратаДиалога.Нет + И ДополнительныеПараметры.МассивРедактируемыхФайлов.Количество() > 0 Тогда + + РаботаСФайламиСлужебныйВызовСервера.ОсвободитьФайлы(ДополнительныеПараметры.МассивРедактируемыхФайлов); + Модифицированность = Ложь; + Закрыть(); + + КонецЕсли; + +КонецПроцедуры + // СтандартныеПодсистемы.Свойства &НаСервере @@ -2842,40 +2949,18 @@ &НаКлиенте Процедура ЗаполнитьПоШаблонуПослеВыбораШаблона(Результат, ДополнительныеПараметры) Экспорт - Если Результат <> Неопределено Тогда - ЗаполнитьШаблонПослеВыбора(Результат); + Если Результат <> Неопределено И ТипЗнч(Результат) = Тип("Структура") И Результат.Свойство("Шаблон") Тогда + ЗаполнитьШаблонПослеВыбора(Результат.Шаблон); КонецЕсли; КонецПроцедуры &НаСервере -Процедура ЗаполнитьШаблонПослеВыбора(Результат) +Процедура ЗаполнитьШаблонПослеВыбора(ШаблонСсылка) - Если ТипЗнч(Результат.Текст) = Тип("Структура") Тогда - РезультатТекст = Результат.Текст.ТекстHTML; - СтруктураВложений = Результат.Текст.СтруктураВложений; - НужнаКонвертацияИзHTML = Ложь; - Иначе - СтруктураВложений = Новый Структура(); - РезультатТекст = Результат.Текст; - НужнаКонвертацияИзHTML = СтрНачинаетсяС(РезультатТекст , " UsualGroup + HorizontalIfPossible Auto true true @@ -409,6 +410,7 @@ UsualGroup + HorizontalIfPossible Right Auto true diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ManagerModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ManagerModule.bsl index cdbde0ef6..145286176 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ManagerModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ManagerModule.bsl @@ -98,6 +98,22 @@ // Конец СтандартныеПодсистемы.Взаимодействия +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтениеИзменение + |ГДЕ + | ЗначениеРазрешено(Ответственный, Отключено КАК Ложь) + | ИЛИ ЗначениеРазрешено(Автор, Отключено КАК Ложь) + | ИЛИ ЗначениеРазрешено(УчетнаяЗапись, Отключено КАК Ложь)"; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + #КонецОбласти #КонецОбласти diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl index f3cdf0910..a1e5c82cf 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl @@ -132,7 +132,18 @@ Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) - Если (ТипЗнч(ДанныеЗаполнения) = Тип("Структура")) И (ДанныеЗаполнения.Свойство("Основание")) + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ШаблоныСообщений") Тогда + МодульШаблоныСообщений = ОбщегоНазначения.ОбщийМодуль("ШаблоныСообщений"); + ЭтоШаблон = МодульШаблоныСообщений.ЭтоШаблон(ДанныеЗаполнения); + Иначе + ЭтоШаблон = Ложь; + КонецЕсли; + + Если ЭтоШаблон Тогда + + ЗаполнитьНаОснованииШаблона(ДанныеЗаполнения); + + ИначеЕсли (ТипЗнч(ДанныеЗаполнения) = Тип("Структура")) И (ДанныеЗаполнения.Свойство("Основание")) И (ТипЗнч(ДанныеЗаполнения.Основание) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") ИЛИ ТипЗнч(ДанныеЗаполнения.Основание) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее")) Тогда @@ -195,6 +206,42 @@ КонецПроцедуры +Процедура ЗаполнитьНаОснованииШаблона(ШаблонСсылка) + + МодульШаблоныСообщений = ОбщегоНазначения.ОбщийМодуль("ШаблоныСообщений"); + Сообщение = МодульШаблоныСообщений.СформироватьСообщение(ШаблонСсылка, Неопределено, Новый УникальныйИдентификатор); + + Если ТипЗнч(Сообщение.Текст) = Тип("Структура") Тогда + + РезультатТекст = Сообщение.Текст.ТекстHTML; + СтруктураВложений = Сообщение.Текст.СтруктураВложений; + ПисьмоHTML = Истина; + + Иначе + + СтруктураВложений = Новый Структура(); + РезультатТекст = Сообщение.Текст; + ПисьмоHTML = СтрНачинаетсяС(РезультатТекст, " Неопределено Тогда + Для каждого Вложение Из Сообщение.Вложения Цикл + + КонецЦикла; + КонецЕсли; + + Если ПисьмоHTML Тогда + ТекстHTML = РезультатТекст; + ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.HTML; + Иначе + Текст = РезультатТекст; + ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст; + КонецЕсли; + Тема = Сообщение.Тема; + +КонецПроцедуры + Функция ПолучитьПредставлениеДляУчетнойЗаписи(УчетнаяЗапись) Если Не ЗначениеЗаполнено(УчетнаяЗапись) Тогда diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ЭлектронноеПисьмоИсходящее.mdo b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ЭлектронноеПисьмоИсходящее.mdo index 0b81fcc62..e9f7ebbf6 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ЭлектронноеПисьмоИсходящее.mdo +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ЭлектронноеПисьмоИсходящее.mdo @@ -382,6 +382,7 @@ ru Отправитель представление + Текстовое описание отправителя String @@ -390,7 +391,7 @@ ru - Текстовое описание отправителя + Учетная запись отправителя diff --git a/SSL/src/Enums/ВидыТранспортаСообщенийОбмена/ВидыТранспортаСообщенийОбмена.mdo b/SSL/src/Enums/ВидыТранспортаСообщенийОбмена/ВидыТранспортаСообщенийОбмена.mdo index 69ee17c84..aaa98c770 100644 --- a/SSL/src/Enums/ВидыТранспортаСообщенийОбмена/ВидыТранспортаСообщенийОбмена.mdo +++ b/SSL/src/Enums/ВидыТранспортаСообщенийОбмена/ВидыТранспортаСообщенийОбмена.mdo @@ -63,4 +63,11 @@ Прямое подключение + + WSПассивныйРежим + + ru + Интернет (пассивный режим) + + diff --git a/SSL/src/Enums/ДополнительныеЗначенияДоступа/ДополнительныеЗначенияДоступа.mdo b/SSL/src/Enums/ДополнительныеЗначенияДоступа/ДополнительныеЗначенияДоступа.mdo index c9afe4c40..713c777e9 100644 --- a/SSL/src/Enums/ДополнительныеЗначенияДоступа/ДополнительныеЗначенияДоступа.mdo +++ b/SSL/src/Enums/ДополнительныеЗначенияДоступа/ДополнительныеЗначенияДоступа.mdo @@ -42,4 +42,53 @@ Доступ запрещен + + Истина + + ru + Истина + + + + Ложь + + ru + Ложь + + + + ПустаяСсылкаЛюбогоТипа + + ru + Пустая ссылка любого типа + + + + Неопределено + + ru + Неопределено + + + + Null + + ru + Null + + + + ТипРазрешенный + + ru + Тип разрешенный + + + + ТипЗапрещенный + + ru + Тип запрещенный + + diff --git a/SSL/src/EventSubscriptions/ВыполнитьДействияПослеОтправкиДанныхУзлаВРаспределеннойИнформационнойБазе/ВыполнитьДействияПослеОтправкиДанныхУзлаВРаспределеннойИнформационнойБазе.mdo b/SSL/src/EventSubscriptions/ВыполнитьДействияПослеОтправкиДанныхУзлаВРаспределеннойИнформационнойБазе/ВыполнитьДействияПослеОтправкиДанныхУзлаВРаспределеннойИнформационнойБазе.mdo deleted file mode 100644 index 6609055c5..000000000 --- a/SSL/src/EventSubscriptions/ВыполнитьДействияПослеОтправкиДанныхУзлаВРаспределеннойИнформационнойБазе/ВыполнитьДействияПослеОтправкиДанныхУзлаВРаспределеннойИнформационнойБазе.mdo +++ /dev/null @@ -1,13 +0,0 @@ - - - ВыполнитьДействияПослеОтправкиДанныхУзлаВРаспределеннойИнформационнойБазе - - ru - Выполнить действия после отправки данных узла в распределенной информационной базе - - - ExchangePlanObject - - BeforeWrite - CommonModule.СтандартныеПодсистемыСервер.ПослеОтправкиДанных - diff --git a/SSL/src/EventSubscriptions/КонтрольНеразделенныхНаборовЗаписейПриЗаписи/КонтрольНеразделенныхНаборовЗаписейПриЗаписи.mdo b/SSL/src/EventSubscriptions/КонтрольНеразделенныхНаборовЗаписейПриЗаписи/КонтрольНеразделенныхНаборовЗаписейПриЗаписи.mdo index a60d79f12..1eb2b0cdb 100644 --- a/SSL/src/EventSubscriptions/КонтрольНеразделенныхНаборовЗаписейПриЗаписи/КонтрольНеразделенныхНаборовЗаписейПриЗаписи.mdo +++ b/SSL/src/EventSubscriptions/КонтрольНеразделенныхНаборовЗаписейПриЗаписи/КонтрольНеразделенныхНаборовЗаписейПриЗаписи.mdo @@ -8,26 +8,24 @@ InformationRegisterRecordSet.ДанныеПроизводственногоКалендаря InformationRegisterRecordSet.ПодпискиПолучателей - InformationRegisterRecordSet.ДополнительныеАдресныеСведения InformationRegisterRecordSet.УдалитьОбластиДанных InformationRegisterRecordSet.УдалитьБлокировкиСеансовОбластиДанных InformationRegisterRecordSet.ПравилаДляОбменаДанными InformationRegisterRecordSet.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов InformationRegisterRecordSet.РазрешенияНаИспользованиеВнешнихРесурсов InformationRegisterRecordSet.УдалитьСтраныМира + InformationRegisterRecordSet.УровниСокращенийАдресныхСведений + InformationRegisterRecordSet.ОриентирыАдресныхОбъектов InformationRegisterRecordSet.ВерсииПодсистем InformationRegisterRecordSet.ПричиныИзмененияАдресныхСведений InformationRegisterRecordSet.СообщенияОбменаДанными + InformationRegisterRecordSet.АдресныеОбъекты InformationRegisterRecordSet.УдалитьЗамерыВремени3 InformationRegisterRecordSet.УдалитьЗамерыВремениТехнологические InformationRegisterRecordSet.БезопасноеХранилищеДанных - InformationRegisterRecordSet.УдалитьАдресныйКлассификатор InformationRegisterRecordSet.РежимыПодключенияВнешнихМодулей - InformationRegisterRecordSet.ОриентирыАдресныхОбъектов - InformationRegisterRecordSet.УровниСокращенийАдресныхСведений - InformationRegisterRecordSet.ДомаЗданияСтроения + InformationRegisterRecordSet.СлужебныеАдресныеСведения InformationRegisterRecordSet.УдалитьЗамерыВремени2 - InformationRegisterRecordSet.ИсторияАдресныхОбъектов InformationRegisterRecordSet.УдалитьОбластиКРезервномуКопированию InformationRegisterRecordSet.УдалитьРейтингАктивностиОбластейДанных InformationRegisterRecordSet.ЗависимостиПравДоступа @@ -35,14 +33,17 @@ InformationRegisterRecordSet.НастройкиОтправителя InformationRegisterRecordSet.ПакетыИнформацииПриЗапуске InformationRegisterRecordSet.ОбластиТребующиеОбработкиПоставляемыхДанных - InformationRegisterRecordSet.СлужебныеАдресныеСведения + InformationRegisterRecordSet.ДомаЗданияСтроения + InformationRegisterRecordSet.ДополнительныеАдресныеСведения + InformationRegisterRecordSet.НастройкиТранспортаОбменаСообщениями + InformationRegisterRecordSet.ОбластиПерсональныхДанных + InformationRegisterRecordSet.ЗагруженныеВерсииАдресныхСведений InformationRegisterRecordSet.УдалитьОчередьЗаданий + InformationRegisterRecordSet.ИсторияАдресныхОбъектов InformationRegisterRecordSet.УдалитьЗамерыВремени InformationRegisterRecordSet.ПраваРолей InformationRegisterRecordSet.УдалитьВерсииПодсистем InformationRegisterRecordSet.УдалитьОчередьИзвлеченияТекста - InformationRegisterRecordSet.ЗагруженныеВерсииАдресныхСведений - InformationRegisterRecordSet.АдресныеОбъекты InformationRegisterRecordSet.ПоставляемыеДанныеТребующиеОбработки OnWrite diff --git a/SSL/src/EventSubscriptions/КонтрольНеразделенныхОбъектовПриЗаписи/КонтрольНеразделенныхОбъектовПриЗаписи.mdo b/SSL/src/EventSubscriptions/КонтрольНеразделенныхОбъектовПриЗаписи/КонтрольНеразделенныхОбъектовПриЗаписи.mdo index b14171208..d3415538c 100644 --- a/SSL/src/EventSubscriptions/КонтрольНеразделенныхОбъектовПриЗаписи/КонтрольНеразделенныхОбъектовПриЗаписи.mdo +++ b/SSL/src/EventSubscriptions/КонтрольНеразделенныхОбъектовПриЗаписи/КонтрольНеразделенныхОбъектовПриЗаписи.mdo @@ -13,6 +13,7 @@ ConstantValueManager.НеИспользоватьРазделениеПоОбластямДанных ConstantValueManager.СообщениеБлокировкиПриОбновленииКонфигурации ConstantValueManager.СписокЗапрещенныхРасширений + ConstantValueManager.КоличествоПотоковОбновленияДоступа ConstantValueManager.ИспользоватьСинхронизациюДанных ConstantValueManager.ПараметрыЦентраМониторинга ConstantValueManager.УдалитьПарольСлужебногоПользователяМенеджераСервиса @@ -61,6 +62,7 @@ CatalogObject.ПроизводственныеКалендари ConstantValueManager.СписокРасширенийТекстовыхФайлов CatalogObject.ТомаХраненияФайлов + CatalogObject.ОбщиеВнешниеКомпоненты CatalogObject.ИдентификаторыОбъектовМетаданных ConstantValueManager.РежимИспользованияИнформационнойБазы ConstantValueManager.КоличествоЭлементовВТранзакцииЗагрузкиДанных diff --git a/SSL/src/EventSubscriptions/ОтключитьАвтоматическуюСинхронизациюДанных/ОтключитьАвтоматическуюСинхронизациюДанных.mdo b/SSL/src/EventSubscriptions/ОтключитьАвтоматическуюСинхронизациюДанных/ОтключитьАвтоматическуюСинхронизациюДанных.mdo index 9d7290f70..361504879 100644 --- a/SSL/src/EventSubscriptions/ОтключитьАвтоматическуюСинхронизациюДанных/ОтключитьАвтоматическуюСинхронизациюДанных.mdo +++ b/SSL/src/EventSubscriptions/ОтключитьАвтоматическуюСинхронизациюДанных/ОтключитьАвтоматическуюСинхронизациюДанных.mdo @@ -7,7 +7,7 @@ Проверяет необходимость отключения автоматической синхронизации данных - InformationRegisterRecordSet.НастройкиТранспортаОбмена + InformationRegisterRecordSet.УдалитьНастройкиТранспортаОбмена OnWrite CommonModule.ОбменДаннымиСобытия.ОтключитьАвтоматическуюСинхронизациюДанныхПриЗаписи diff --git a/SSL/src/EventSubscriptions/ПроверитьДоступПередЗаписью/ПроверитьДоступПередЗаписью.mdo b/SSL/src/EventSubscriptions/ПроверитьДоступПередЗаписью/ПроверитьДоступПередЗаписью.mdo new file mode 100644 index 000000000..de00588c1 --- /dev/null +++ b/SSL/src/EventSubscriptions/ПроверитьДоступПередЗаписью/ПроверитьДоступПередЗаписью.mdo @@ -0,0 +1,13 @@ + + + ПроверитьДоступПередЗаписью + + ru + Проверить доступ перед записью + + + DefinedType.ВладелецЗначенийКлючейДоступаОбъект + + BeforeWrite + CommonModule.УправлениеДоступомСлужебный.ПроверитьДоступПередЗаписью + diff --git a/SSL/src/EventSubscriptions/ПроверитьДоступПередЗаписьюДокумента/ПроверитьДоступПередЗаписьюДокумента.mdo b/SSL/src/EventSubscriptions/ПроверитьДоступПередЗаписьюДокумента/ПроверитьДоступПередЗаписьюДокумента.mdo new file mode 100644 index 000000000..2124c7bdf --- /dev/null +++ b/SSL/src/EventSubscriptions/ПроверитьДоступПередЗаписьюДокумента/ПроверитьДоступПередЗаписьюДокумента.mdo @@ -0,0 +1,13 @@ + + + ПроверитьДоступПередЗаписьюДокумента + + ru + Проверить доступ перед записью документа + + + DefinedType.ВладелецЗначенийКлючейДоступаДокумент + + BeforeWrite + CommonModule.УправлениеДоступомСлужебный.ПроверитьДоступПередЗаписью + diff --git a/SSL/src/EventSubscriptions/ПроверитьДоступПередЗаписьюНабораЗаписей/ПроверитьДоступПередЗаписьюНабораЗаписей.mdo b/SSL/src/EventSubscriptions/ПроверитьДоступПередЗаписьюНабораЗаписей/ПроверитьДоступПередЗаписьюНабораЗаписей.mdo new file mode 100644 index 000000000..8a8cd9d50 --- /dev/null +++ b/SSL/src/EventSubscriptions/ПроверитьДоступПередЗаписьюНабораЗаписей/ПроверитьДоступПередЗаписьюНабораЗаписей.mdo @@ -0,0 +1,13 @@ + + + ПроверитьДоступПередЗаписьюНабораЗаписей + + ru + Проверить доступ перед записью набора записей + + + DefinedType.ВладелецЗначенийКлючейДоступаНаборЗаписей + + BeforeWrite + CommonModule.УправлениеДоступомСлужебный.ПроверитьДоступПередЗаписьюНабораЗаписей + diff --git a/SSL/src/EventSubscriptions/ПроверитьДоступПередЗаписьюНабораЗаписейРегистраРасчета/ПроверитьДоступПередЗаписьюНабораЗаписейРегистраРасчета.mdo b/SSL/src/EventSubscriptions/ПроверитьДоступПередЗаписьюНабораЗаписейРегистраРасчета/ПроверитьДоступПередЗаписьюНабораЗаписейРегистраРасчета.mdo new file mode 100644 index 000000000..debefd703 --- /dev/null +++ b/SSL/src/EventSubscriptions/ПроверитьДоступПередЗаписьюНабораЗаписейРегистраРасчета/ПроверитьДоступПередЗаписьюНабораЗаписейРегистраРасчета.mdo @@ -0,0 +1,13 @@ + + + ПроверитьДоступПередЗаписьюНабораЗаписейРегистраРасчета + + ru + Проверить доступ перед записью набора записей регистра расчета + + + DefinedType.ВладелецЗначенийКлючейДоступаНаборЗаписейРегистраРасчета + + BeforeWrite + CommonModule.УправлениеДоступомСлужебный.ПроверитьДоступПередЗаписьюНабораЗаписей + diff --git a/SSL/src/EventSubscriptions/ПроверитьДоступПриЗаписи/ПроверитьДоступПриЗаписи.mdo b/SSL/src/EventSubscriptions/ПроверитьДоступПриЗаписи/ПроверитьДоступПриЗаписи.mdo new file mode 100644 index 000000000..bdc7c9900 --- /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..ac26923fd --- /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..3d60891b4 --- /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..572392be1 --- /dev/null +++ b/SSL/src/EventSubscriptions/ПроверитьДоступПриЗаписиНабораЗаписейРегистраРасчета/ПроверитьДоступПриЗаписиНабораЗаписейРегистраРасчета.mdo @@ -0,0 +1,13 @@ + + + ПроверитьДоступПриЗаписиНабораЗаписейРегистраРасчета + + ru + Проверить доступ при записи набора записей регистра расчета + + + DefinedType.ВладелецЗначенийКлючейДоступаНаборЗаписейРегистраРасчета + + OnWrite + CommonModule.УправлениеДоступомСлужебный.ПроверитьДоступПриЗаписиНабораЗаписей + diff --git a/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаВыбора/Form.form b/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаВыбора/Form.form index 040ffe28c..95848026a 100644 --- a/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаВыбора/Form.form +++ b/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаВыбора/Form.form @@ -18,10 +18,6 @@ true None Change - Copy - Create - Delete - SetDeletionMark Наименование 4 diff --git a/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаУзла/Form.form b/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаУзла/Form.form index 8fce00946..945067786 100644 --- a/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаУзла/Form.form +++ b/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаУзла/Form.form @@ -276,6 +276,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -390,6 +391,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -450,7 +452,7 @@ Left - CommonCommand.НастроитьПараметрыТранспортаСообщенийОбмена + CommonCommand.НастройкиПодключения Normal PictureAndText true diff --git a/SSL/src/ExchangePlans/ОбменСообщениями/ManagerModule.bsl b/SSL/src/ExchangePlans/ОбменСообщениями/ManagerModule.bsl index 5a349a4c5..41163cf07 100644 --- a/SSL/src/ExchangePlans/ОбменСообщениями/ManagerModule.bsl +++ b/SSL/src/ExchangePlans/ОбменСообщениями/ManagerModule.bsl @@ -34,9 +34,7 @@ ИспользуемыеТранспортыСообщенийОбмена = Новый Массив; ИспользуемыеТранспортыСообщенийОбмена.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.WS); - ИспользуемыеТранспортыСообщенийОбмена.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FILE); - ИспользуемыеТранспортыСообщенийОбмена.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FTP); - ИспользуемыеТранспортыСообщенийОбмена.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL); + ОписаниеВарианта.ИспользуемыеТранспортыСообщенийОбмена = ИспользуемыеТранспортыСообщенийОбмена; КонецПроцедуры diff --git a/SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo b/SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo index a257e4934..2647fedea 100644 --- a/SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo +++ b/SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo @@ -131,9 +131,6 @@ InformationRegister.ВерсииОбъектов - - InformationRegister.СлужебныеАдресныеСведения - InformationRegister.ЗамерыКомментарииСтатистики @@ -173,6 +170,9 @@ Catalog.СообщенияОбластейДанных + + Catalog.КлючиДоступа + InformationRegister.НаборыЗначенийДоступа @@ -180,10 +180,10 @@ InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты - InformationRegister.ДомаЗданияСтроения + InformationRegister.КалендарныеГрафики - InformationRegister.КалендарныеГрафики + InformationRegister.ДомаЗданияСтроения InformationRegister.ПодпискиПолучателей @@ -197,6 +197,9 @@ InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем + + InformationRegister.ОбновлениеКлючейДоступаКДанным + Catalog.Валюты @@ -206,12 +209,21 @@ InformationRegister.ЗависимостиПравДоступа + + InformationRegister.СлужебныеАдресныеСведения + + + InformationRegister.УровниСокращенийАдресныхСведений + InformationRegister.СоответствияОбъектовИнформационныхБаз Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы + + InformationRegister.НастройкиОбменаДаннымиXDTO + InformationRegister.ПредопределенныеВариантыОтчетовВерсийРасширений @@ -231,7 +243,7 @@ InformationRegister.НастройкиСинхронизацииФайлов - InformationRegister.ОбластиПерсональныхДанных + InformationRegister.УдалитьОбластиПерсональныхДанных Catalog.КлючевыеОперации @@ -272,9 +284,6 @@ InformationRegister.ФайлыВРабочемКаталоге - - InformationRegister.УдалитьАдресныйКлассификатор - InformationRegister.ДанныеОбработанныеВЦентральномУзлеРИБ @@ -290,11 +299,17 @@ Catalog.РолиИсполнителей + + Catalog.ОбщиеВнешниеКомпоненты + InformationRegister.СостоянияКонтактовВзаимодействий - InformationRegister.ПричиныИзмененияАдресныхСведений + InformationRegister.ОбластиПерсональныхДанных + + + InformationRegister.НастройкиТранспортаОбменаСообщениями InformationRegister.СтатусыСинхронизацииФайловСОблачнымСервисом @@ -308,15 +323,24 @@ InformationRegister.НаследованиеНастроекПравОбъектов + + InformationRegister.ПричиныИзмененияАдресныхСведений + InformationRegister.УдалитьБлокировкиСеансовОбластиДанных + + InformationRegister.ЗагруженныеВерсииАдресныхСведений + InformationRegister.ПраваРолей Catalog.ТелефонныйЗвонокПрисоединенныеФайлы + + InformationRegister.КлючиДоступаВнешнихПользователей + Document.ЗапланированноеВзаимодействие @@ -386,12 +410,6 @@ InformationRegister.ЗамерыОбластиСтатистики - - InformationRegister.ДополнительныеАдресныеСведения - - - InformationRegister.ОриентирыАдресныхОбъектов - Document.Анкета @@ -428,9 +446,15 @@ Document.ОтзывСогласияНаОбработкуПерсональныхДанных + + InformationRegister.ДополнительныеАдресныеСведения + Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования + + InformationRegister.НастройкиТранспортаОбменаДанными + InformationRegister.СведенияОФайлах @@ -455,6 +479,9 @@ InformationRegister.ИзмененияОбщихДанныхУзлов + + InformationRegister.ОбновлениеКлючейДоступаПользователей + Catalog.РассылкиОтчетов @@ -534,7 +561,7 @@ InformationRegister.СостоянияПапокПисем - InformationRegister.НастройкиТранспортаОбмена + InformationRegister.УдалитьНастройкиТранспортаОбмена ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач @@ -548,6 +575,9 @@ InformationRegister.ОбластиСтатистики + + InformationRegister.АдресныеОбъекты + Catalog.ГруппыИсполнителейЗадач @@ -560,6 +590,9 @@ InformationRegister.ЭлектронныеПодписи + + InformationRegister.ПараметрыОграниченияДоступа + Catalog.КлассификаторБанков @@ -578,15 +611,15 @@ InformationRegister.СертификатыШифрования + + InformationRegister.КлючиДоступаПользователей + InformationRegister.РезультатыОбменаДанными InformationRegister.УдалитьЗамерыВремени2 - - InformationRegister.УровниСокращенийАдресныхСведений - InformationRegister.ЗаблокированныеДляПолученияУчетныеЗаписи @@ -629,6 +662,12 @@ InformationRegister.УдалитьРейтингАктивностиОбластейДанных + + InformationRegister.КлючиДоступаКРегистрам + + + InformationRegister.КлючиДоступаКОбъектам + Catalog.ТомаХраненияФайлов @@ -653,6 +692,9 @@ InformationRegister.УдалитьСтраныМира + + InformationRegister.КлючиДоступаГруппДоступа + InformationRegister.ДампыПлатформы @@ -672,7 +714,7 @@ InformationRegister.КомментарииСтатистики - InformationRegister.АдресныеОбъекты + InformationRegister.ОриентирыАдресныхОбъектов Catalog.ВерсииФайлов @@ -734,9 +776,6 @@ InformationRegister.БлокировкиСеансовОбластейДанных - - InformationRegister.ЗагруженныеВерсииАдресныхСведений - AsDescription InDialog BothWays diff --git a/SSL/src/FunctionalOptions/ИспользоватьАнкетирование/ИспользоватьАнкетирование.mdo b/SSL/src/FunctionalOptions/ИспользоватьАнкетирование/ИспользоватьАнкетирование.mdo index 8b8ec84ad..62e2ee85b 100644 --- a/SSL/src/FunctionalOptions/ИспользоватьАнкетирование/ИспользоватьАнкетирование.mdo +++ b/SSL/src/FunctionalOptions/ИспользоватьАнкетирование/ИспользоватьАнкетирование.mdo @@ -17,4 +17,5 @@ Catalog.ВопросыШаблонаАнкеты Report.АналитическийОтчетПоАнкетированию DataProcessor.ДоступныеАнкеты + CommonCommand.НачатьИнтервью diff --git a/SSL/src/FunctionalOptions/ИспользоватьСинхронизациюДанныхВЛокальномРежиме/ИспользоватьСинхронизациюДанныхВЛокальномРежиме.mdo b/SSL/src/FunctionalOptions/ИспользоватьСинхронизациюДанныхВЛокальномРежиме/ИспользоватьСинхронизациюДанныхВЛокальномРежиме.mdo index 41016e3e3..d401896f2 100644 --- a/SSL/src/FunctionalOptions/ИспользоватьСинхронизациюДанныхВЛокальномРежиме/ИспользоватьСинхронизациюДанныхВЛокальномРежиме.mdo +++ b/SSL/src/FunctionalOptions/ИспользоватьСинхронизациюДанныхВЛокальномРежиме/ИспользоватьСинхронизациюДанныхВЛокальномРежиме.mdo @@ -9,7 +9,7 @@ true Subsystem.СтандартныеПодсистемы.Subsystem.ОбменДанными Catalog.СценарииОбменовДанными - CommonCommand.НастроитьПараметрыТранспортаСообщенийОбмена + CommonCommand.НастройкиПодключения CommonCommand.СобытияПолучения CommonCommand.ЗагрузитьПравилаКонвертацииОбъектов CommonCommand.ЗагрузитьПравилаРегистрацииОбъектов diff --git a/SSL/src/FunctionalOptions/ОграничиватьДоступНаУровнеЗаписейУниверсально/ОграничиватьДоступНаУровнеЗаписейУниверсально.mdo b/SSL/src/FunctionalOptions/ОграничиватьДоступНаУровнеЗаписейУниверсально/ОграничиватьДоступНаУровнеЗаписейУниверсально.mdo new file mode 100644 index 000000000..569cd4d38 --- /dev/null +++ b/SSL/src/FunctionalOptions/ОграничиватьДоступНаУровнеЗаписейУниверсально/ОграничиватьДоступНаУровнеЗаписейУниверсально.mdo @@ -0,0 +1,21 @@ + + + ОграничиватьДоступНаУровнеЗаписейУниверсально + + ru + Ограничивать доступ на уровне записей универсально + + Constant.ОграничиватьДоступНаУровнеЗаписейУниверсально + true + InformationRegister.КлючиДоступаВнешнихПользователей + InformationRegister.КлючиДоступаГруппДоступа + InformationRegister.КлючиДоступаКОбъектам + InformationRegister.КлючиДоступаКРегистрам + InformationRegister.КлючиДоступаПользователей + Catalog.КлючиДоступа + Constant.КоличествоПотоковОбновленияДоступа + Constant.ПоследнееОбновлениеДоступа + InformationRegister.ПараметрыОграниченияДоступа + InformationRegister.ОбновлениеКлючейДоступаКДанным + InformationRegister.ОбновлениеКлючейДоступаПользователей + diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/АктуализацияУстаревшегоКлассификатора/Form.form b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/АктуализацияУстаревшегоКлассификатора/Form.form index 7cf704324..df732c590 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/АктуализацияУстаревшегоКлассификатора/Form.form +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/АктуализацияУстаревшегоКлассификатора/Form.form @@ -4,312 +4,25 @@ ru Актуализация адресного классификатора - - Страницы - 16 - - СтраницаВыбора - 18 - - НадписьЗаголовка - 30 - - <key>ru</key> - <value>В адресный классификатор были внесены изменения согласно Федеральному закону от 28.12.2013 № 443-ФЗ <link http://fias.nalog.ru/>«О федеральной информационной адресной системе и о внесении изменений в Федеральный закон «Об общих принципах организации местного самоуправления в Российской Федерации»</>. + <items xsi:type="form:Decoration"> + <name>НадписьЗаголовка</name> + <id>33</id> + <title> + <key>ru</key> + <value>В адресный классификатор внесены изменения согласно <link https://its.1c.ru/db/garant#content:71612934:1>Приказу ФНС России от 06.07.2017 N ММВ-7-17/535@ "Об утверждении Стандарта форм документов, используемых налоговыми органами при реализации своих полномочий ..." +</> +Ранее загруженный классификатор стал недействительным. Загрузка новых адресных сведений в программу занимает длительное время и больше места на диске, поэтому для ввода и проверки адресов рекомендуется использовать веб-сервис. С его помощью не потребуется регулярно загружать классификатор и следить за его актуальностью. -Для того чтобы эти изменения вступили в силу, выберите один из вариантов:</value> - - true - true - - true - - - НадписьЗаголовкаРасширеннаяПодсказка - 32 - Label - true - true - - Left - - - - НадписьЗаголовкаКонтекстноеМеню - 31 - true - - true - Label - true - - Left - 6 - - - - ВариантыАктуализации - 4 - true - true - - true - - - ВариантыАктуализации - - None - - ВариантыАктуализацииРасширеннаяПодсказка - 6 - Label - true - true - - Left - - - - ВариантыАктуализацииКонтекстноеМеню - 5 - true - - RadioButtonField - Enter - true - Left - true - - 1 - - - ru - Обновить адресные сведения через Интернет (рекомендуется) - - - 0 - - - - - ru - Преобразовать ранее загруженные данные без подключения к Интернету - - - 1 - - - Vertical - - - - Пояснение - 13 - - <key>ru</key> - <value>Обновление адресных сведений необходимо произвести только один раз, -при переходе с предыдущей версии программы. -После завершения обновления автоподбор и проверка корректности адресов будут снова доступны.</value> - - true - true - - true - - - ПояснениеРасширеннаяПодсказка - 15 - Label - true - true - - Left - - - - ПояснениеКонтекстноеМеню - 14 - true - - Label - true - - Style.ПоясняющийТекст - - - Left - - - true - true - - true - - - <key>ru</key> - <value>Страница выбора</value> - - - СтраницаВыбораРасширеннаяПодсказка - 19 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаДлительнойОперации - 20 - - ГруппаВыводДлительнойОперации - 28 - - КартинкаДлительнаяОперация - 22 - - <key>ru</key> - <value>Картинка длительная операция</value> - - true - true - - true - - - КартинкаДлительнаяОперацияРасширеннаяПодсказка - 24 - Label - true - true - - Left - - - - КартинкаДлительнаяОперацияКонтекстноеМеню - 23 - true - - true - true - - - CommonPicture.ДлительнаяОперация48 - - - - - ТекстДлительнойОперации - 25 - - <key>ru</key> - <value>Выполняется обновление данных адресного классификатора... -Обновление может занять длительное время, -которое зависит от количества загруженных регионов Российской Федерации.</value> - - true - true - - true - - ShowBottom - - ТекстДлительнойОперацииРасширеннаяПодсказка - 27 - Label - true - true - - Left - - - - ТекстДлительнойОперацииКонтекстноеМеню - 26 - true - - Label - true - - Left - Center - - - true - true - - true - - - <key>ru</key> - <value>Вывод длительной операции</value> - - - ГруппаВыводДлительнойОперацииРасширеннаяПодсказка - 29 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница длительной операции</value> - - - СтраницаДлительнойОперацииРасширеннаяПодсказка - 21 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - +Выберите один из вариантов: + true true true - - <key>ru</key> - <value>Страницы</value> - - СтраницыРасширеннаяПодсказка - 17 + НадписьЗаголовкаРасширеннаяПодсказка + 35 Label true true @@ -317,9 +30,73 @@ Left - Pages - - Auto + + НадписьЗаголовкаКонтекстноеМеню + 34 + true + + true + Label + 63 + true + + Left + 6 + + + + ВариантыАктуализации + 4 + true + true + + true + + + ВариантыАктуализации + + None + + ВариантыАктуализацииРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + ВариантыАктуализацииКонтекстноеМеню + 5 + true + + RadioButtonField + Enter + true + Left + true + + 1 + + + ru + Переключиться на веб-сервис фирмы "1С" для ввода и проверки адресов (рекомендуется) + + + 0 + + + + + ru + Загрузить классификатор в программу + + + 1 + + + Vertical @@ -353,7 +130,7 @@ Отмена - 11 + 36 true true @@ -361,7 +138,7 @@ ОтменаРасширеннаяПодсказка - 12 + 37 Label true true @@ -369,7 +146,7 @@ Left - Form.Command.Отмена + Form.StandardCommand.Cancel Normal Auto true @@ -406,10 +183,6 @@ -1 Left - - BeforeClose - ПередЗакрытием - OnCreateAtServer ПриСозданииНаСервере @@ -460,6 +233,23 @@ true + + АутентификацияВыполнена + + <key>ru</key> + <value>Аутентификация выполнена</value> + + 3 + + Boolean + + + true + + + true + + ОК @@ -482,28 +272,6 @@ <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> - <formCommands> - <name>Отмена</name> - <title> - <key>ru</key> - <value>Отмена</value> - - 2 - - ru - Отмена - - - true - - - - Отмена - - - DontUse - Auto - diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/АктуализацияУстаревшегоКлассификатора/Module.bsl b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/АктуализацияУстаревшегоКлассификатора/Module.bsl index 2fd0cdcfe..f659e3b33 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/АктуализацияУстаревшегоКлассификатора/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/АктуализацияУстаревшегоКлассификатора/Module.bsl @@ -1,10 +1,3 @@ -#Область ОписаниеПеременных - -&НаКлиенте -Перем ПараметрыОбработчика, ПодтверждениеЗакрытияФормы; - -#КонецОбласти - #Область ОбработчикиСобытийФормы &НаСервере @@ -13,25 +6,9 @@ Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) - Если Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаВыбора - Или ПодтверждениеЗакрытияФормы = Истина Тогда - Возврат; - КонецЕсли; - - Отказ = Истина; - Если ЗавершениеРаботы Тогда - Возврат; - КонецЕсли; - - Оповещение = Новый ОписаниеОповещения("ЗакрытиеФормыЗавершение", ЭтотОбъект); - Текст = НСтр("ru = 'Отказаться от обновления данных классификатора?'"); - ПоказатьВопрос(Оповещение, Текст, РежимДиалогаВопрос.ДаНет); + АдресныйКлассификаторСлужебный.ПроверитьНачальноеЗаполнение(); // Инициализация списка регионов + АутентификацияВыполнена = ДанныеАутентификацииСайтаСохранены(); КонецПроцедуры @@ -43,138 +20,53 @@ Процедура ОК(Команда) Если ВариантыАктуализации = 0 Тогда - Закрыть(); - // Переход на ветку загрузки из интернета - подставим в параметры все ранее загруженные регионы. - ПараметрыЗагрузки = Новый Структура; - ПараметрыЗагрузки.Вставить("КодРегионаДляЗагрузки", НеобработанныеРегионыКЛАДР()); - АдресныйКлассификаторКлиент.ЗагрузитьАдресныйКлассификатор(ПараметрыЗагрузки); + Если НЕ АутентификацияВыполнена Тогда + // Проходим через форму авторизации принудительно. + Оповещение = Новый ОписаниеОповещения("ПослеЗапросаАутентификации", ЭтотОбъект); + АдресныйКлассификаторКлиент.АвторизоватьНаСайтеПоддержкиПользователей(Оповещение, ЭтотОбъект); + Возврат; + Иначе + УстановитьКонстанту(); + Закрыть(); + КонецЕсли; Иначе - Элементы.ОК.Доступность = Ложь; - // Запуск переноса данных - АктуализироватьАдресныйКлассификаторКлиент(); + Закрыть(); + УстановитьКонстанту(); + АдресныйКлассификаторКлиент.ЗагрузитьАдресныйКлассификатор(); КонецЕсли; КонецПроцедуры -&НаКлиенте -Процедура Отмена(Команда) - - Если ЗначениеЗаполнено(ИдентификаторФоновогоЗадания) Тогда - ФоновоеЗаданиеОтменить(ИдентификаторФоновогоЗадания); - ПоказатьОповещениеПользователя(,, НСтр("ru = 'Обновление адресного классификатора не завершено.'")); - КонецЕсли; - - Закрыть(); -КонецПроцедуры - #КонецОбласти #Область СлужебныеПроцедурыИФункции &НаКлиенте -Процедура ЗакрытиеФормыЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт +Процедура ПослеЗапросаАутентификации(Результат, ДополнительныеПараметры) Экспорт - Если РезультатВопроса = КодВозвратаДиалога.Да Тогда - ПодтверждениеЗакрытияФормы = Истина; + Если Результат <> Неопределено Тогда + УстановитьКонстанту(); Закрыть(); - Иначе - ПодтверждениеЗакрытияФормы = Неопределено; КонецЕсли; КонецПроцедуры -&НаКлиенте -Процедура АктуализироватьАдресныйКлассификаторКлиент() - - ФоновоеЗадание = Ложь; - Результат = "Выполняется"; - АктуализироватьАдресныйКлассификатор(Результат, ФоновоеЗадание); - - Если ФоновоеЗадание = Истина Тогда - Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаДлительнойОперации; - ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчика); - ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", 1, Истина); - ПараметрыОбработчика.МаксимальныйИнтервал = 5; - Иначе - Если Результат = "Выполнено" Тогда - ОбновитьПовторноИспользуемыеЗначения(); - Оповестить("АдресныйКлассификаторАктуализирован", , ЭтотОбъект); - ПоказатьОповещениеПользователя(,, НСтр("ru = 'Обновление адресного классификатора успешно завершено.'")); - Иначе - ПоказатьОповещениеПользователя(,, НСтр("ru = 'Обновление адресного классификатора не завершено.'")); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_ПроверитьВыполнениеЗадания() - - ЗаданиеВыполнено = Неопределено; - Попытка - ЗаданиеВыполнено = ЗаданиеВыполнено(ИдентификаторФоновогоЗадания); - Исключение - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(НСтр("ru = 'Обновление адресного классификатора'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - "Ошибка", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), , Истина); - ТекстОбОшибке = НСтр("ru = 'Обновление адресного классификатора прервана.|Подробности см. в журнале регистрации.'"); - ПоказатьПредупреждение(, ТекстОбОшибке); - - Элементы.ОК.Доступность = Истина; - Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаВыбора; - Возврат; - КонецПопытки; - - Если ЗаданиеВыполнено Тогда - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(НСтр("ru = 'Обновление адресного классификатора'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - "Информация", НСтр("ru = 'Обновление адресного классификатора успешно завершено.'"), , Истина); - ПоказатьОповещениеПользователя(,, НСтр("ru = 'Обновление адресного классификатора успешно завершено.'")); - ОбновитьПовторноИспользуемыеЗначения(); - Оповестить("АдресныйКлассификаторАктуализирован", , ЭтотОбъект); - ПодтверждениеЗакрытияФормы = Истина; - ЭтотОбъект.Закрыть(); - Иначе - ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчика); - ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", ПараметрыОбработчика.ТекущийИнтервал, Истина); - КонецЕсли; -КонецПроцедуры - &НаСервереБезКонтекста -Функция ЗаданиеВыполнено(ИдентификаторЗадания) - Возврат ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания); +Функция ДанныеАутентификацииСайтаСохранены() + + Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей") Тогда + МодульИнтернетПоддержкаПользователей = ОбщегоНазначения.ОбщийМодуль("ИнтернетПоддержкаПользователей"); + Возврат МодульИнтернетПоддержкаПользователей.ЗаполненыДанныеАутентификацииПользователяИнтернетПоддержки(); + КонецЕсли; + + Возврат Ложь; + КонецФункции &НаСервереБезКонтекста -Процедура ФоновоеЗаданиеОтменить(Идентификатор) - ДлительныеОперации.ОтменитьВыполнениеЗадания(Идентификатор); -КонецПроцедуры - -&НаСервере -Процедура АктуализироватьАдресныйКлассификатор(Результат, ФоновоеЗадание = Ложь) +Функция УстановитьКонстанту() - ИдентификаторФоновогоЗадания = Неопределено; - - ПараметрыВызоваСервера = Новый Структура(); - ПараметрыВызоваСервера.Вставить("Результат", Результат); - - ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); - ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Подсистема Адресный классификатор: актуализация данных'"); - - ПроцессФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне("АдресныйКлассификаторСлужебный.ФоновыйПереносДанныхУстаревшегоКлассификатора", - ПараметрыВызоваСервера, ПараметрыВыполнения); - - Если ПроцессФоновоеЗадание.Статус <> "Выполняется" Тогда - Результат = "Выполнено"; - Иначе - ФоновоеЗадание = Истина; - ИдентификаторФоновогоЗадания = ПроцессФоновоеЗадание.ИдентификаторЗадания; - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Функция НеобработанныеРегионыКЛАДР() - - Возврат АдресныйКлассификаторСлужебный.ЗаполненныеРегионыУстаревшегоКлассификатора().Количество(); + Константы.ИсточникДанныхАдресногоКлассификатора.Установить("Авто"); КонецФункции diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Form.form b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Form.form index 8e634a0bf..c3582a7ce 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Form.form +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Form.form @@ -10,6 +10,280 @@ ВыборРегионовЗагрузки 61 + + ГруппаКоманднаяПанельРегионов + 206 + + ГруппаУстановитьСнятьФлажки + 208 + + СубъектыРФУстановитьФлажки + 47 + true + true + + true + + + СубъектыРФУстановитьФлажкиРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + Form.Command.УстановитьФлажки + Normal + Auto + true + true + UserCmds + Auto + + + СубъектыРФСнятьФлажки + 49 + true + true + + true + + + СубъектыРФСнятьФлажкиРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + Form.Command.СнятьФлажки + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Установить снять флажки</value> + + + ГруппаУстановитьСнятьФлажкиРасширеннаяПодсказка + 209 + Label + true + true + + Left + + + CommandBar + + Left + + + + Поиск + 203 + true + true + + true + + + Поиск + + None + + ПоискРасширеннаяПодсказка + 205 + Label + true + true + + Left + + + + ПоискКонтекстноеМеню + 204 + true + + InputField + Enter + true + Left + true + + + AutoComplete + ПоискАвтоПодбор + + + Clearing + ПоискОчистка + + true + true + true + true + true + true + true + Normal + + ru + Введите первые буквы названия региона + + + + + ГруппаЕще + 210 + + СубъектыРФНайти + 43 + true + true + + true + + + СубъектыРФНайтиРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + Form.Item.СубъектыРФ.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СубъектыРФОтменитьПоиск + 45 + true + true + + true + + + СубъектыРФОтменитьПоискРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + Form.Item.СубъектыРФ.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + Справка + 217 + true + true + + true + + + СправкаРасширеннаяПодсказка + 218 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Еще</value> + + false + Right + + ГруппаЕщеРасширеннаяПодсказка + 211 + Label + true + true + + Left + + + CommandBar + + Left + + + true + true + + true + + + <key>ru</key> + <value>Командная панель регионов</value> + + + ГруппаКоманднаяПанельРегионовРасширеннаяПодсказка + 207 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + СубъектыРФ 1 @@ -174,110 +448,6 @@ СубъектыРФКоманднаяПанель 3 - - СубъектыРФУстановитьФлажки - 47 - true - true - - true - - - СубъектыРФУстановитьФлажкиРасширеннаяПодсказка - 48 - Label - true - true - - Left - - - Form.Command.УстановитьФлажки - Normal - Auto - true - true - UserCmds - Auto - - - СубъектыРФСнятьФлажки - 49 - true - true - - true - - - СубъектыРФСнятьФлажкиРасширеннаяПодсказка - 50 - Label - true - true - - Left - - - Form.Command.СнятьФлажки - Normal - Auto - true - true - UserCmds - Auto - - - СубъектыРФНайти - 43 - true - true - - true - - - СубъектыРФНайтиРасширеннаяПодсказка - 44 - Label - true - true - - Left - - - Form.Item.СубъектыРФ.StandardCommand.Find - Normal - Auto - true - true - UserCmds - Auto - - - СубъектыРФОтменитьПоиск - 45 - true - true - - true - - - СубъектыРФОтменитьПоискРасширеннаяПодсказка - 46 - Label - true - true - - Left - - - Form.Item.СубъектыРФ.StandardCommand.CancelSearch - Normal - Auto - true - true - UserCmds - Auto - Left @@ -395,19 +565,29 @@ ГруппаПодвалСубъектов 116 - ВыбраноРегионовДляЗагрузки - 51 + ЗагружатьИсториюИзмененийАдресныхОбъектов + 190 + + <key>ru</key> + <value>Загружать историю изменений адресных объектов</value> + true true true - ВыбраноРегионовДляЗагрузки + ЗагружатьИсториюИзмененийАдресныхОбъектов + Right + + ru + Загружать историю изменений адресных объектов + + Button - ВыбраноРегионовДляЗагрузкиРасширеннаяПодсказка - 53 + ЗагружатьИсториюИзмененийАдресныхОбъектовРасширеннаяПодсказка + 192 Label true true @@ -416,32 +596,98 @@ - ВыбраноРегионовДляЗагрузкиКонтекстноеМеню - 52 + ЗагружатьИсториюИзмененийАдресныхОбъектовКонтекстноеМеню + 191 true - LabelField - Left + CheckBoxField Enter true Left true - - 2 + + + + ГруппаВыбраноРегионовДляЗагрузки + 212 + + ВыбраноРегионовДляЗагрузки + 51 + true + true + + true + + + ВыбраноРегионовДляЗагрузки + + + ВыбраноРегионовДляЗагрузкиРасширеннаяПодсказка + 53 + Label + true + true + + Left + + + + ВыбраноРегионовДляЗагрузкиКонтекстноеМеню + 52 + true + + LabelField + Enter + true + Left + true + + 2 + true + true + false + + ru + ЧН=- + + + System.DefaultGUIFont + true + false + false + false + + + + true + true + + true + + + <key>ru</key> + <value>Выбрано регионов для загрузки</value> + + true + + ГруппаВыбраноРегионовДляЗагрузкиРасширеннаяПодсказка + 213 + Label true true - false - - ru - ЧН=- - - - System.DefaultGUIFont - true - false - false - false - + + Left + + + UsualGroup + + HorizontalIfPossible + Right + Auto + true + true + Auto + Auto true @@ -1743,6 +1989,24 @@ true + + РежимРаботы + + <key>ru</key> + <value>Режим работы</value> + + 5 + + String + + + + true + + + true + + КодИсточникаЗагрузки @@ -1994,6 +2258,41 @@ true + + ЗагружатьИсториюИзмененийАдресныхОбъектов + + <key>ru</key> + <value>Загружать историю изменений адресных объектов</value> + + 16 + + Boolean + + + true + + + true + + + + Поиск + + <key>ru</key> + <value>Поиск</value> + + 17 + + String + + + + true + + + true + + Загрузить diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Help/ru.html b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Help/ru.html index a5fd37d4f..47db0688b 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Help/ru.html +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Help/ru.html @@ -2,13 +2,13 @@ <p>В адресном классификаторе хранятся адресные сведения, необходимые для работы в программе. </p> <p>Для обеспечения единства структуры и состава адресной информации используется Федеральная информационная адресная система (ФИАС). В ФИАС содержатся почтовые адреса РФ. Использование ФИАС помогает заполнять адреса правильно и быстро. Без этого невозможна сдача отчетности. Например, при сдаче отчетности по работникам в налоговую инспекцию, в пенсионный фонд необходимо заполнить адреса по стандарту, иначе отчетность не будет принята. Кроме того, адреса могут меняться и не всегда можно уследить за этими изменениями самостоятельно. Программа позволяет управлять адресами и поддерживать их в актуальном состоянии с помощью ФИАС.</p> <p>Для всех регионов РФ имеется возможность загрузки адресных сведений с сайта поддержки пользователей программы <strong>1С:Предприятие</strong> фирмы "1С", а также из файлов, распространяемых ФНС РФ. </p> -<p>Окно для работы с адресным классификатором открывается по команде <strong>Загрузить классификатор</strong> раздела <strong>Администрирование -</strong> <strong>Поддержка и Обслуживание - Адресный классификатор</strong>.</p> +<p>Окно для работы с адресным классификатором открывается по команде <strong>Загрузить классификатор</strong> раздела <strong>Администрирование -</strong> <strong>Интернет-поддержка и сервисы - Адресный классификатор</strong>.</p> <h3>Загрузка адресного классификатора</h3> <ul><li>При загрузке классификатора можно выбрать один, несколько или все регионы России, по которым необходимо загрузить адресные сведения. Это удобно, т.к. можно не загружать адреса тех регионов, которые заведомо не будут использоваться в работе. Включите флажки рядом с наименованиями нужных регионов. Для того чтобы выбрать все регионы для загрузки, нажмите <img src="StdPicture.CheckAll"></img>, для того чтобы отменить выбор, нажмите кнопку <img src="StdPicture.UncheckAll"></img>. Для поиска регионов в списке используйте кнопку <strong>Найти</strong>. В нижней части списка идет подсчет количества выбранных регионов. </li><li>С помощью переключателя выберите <strong>Вариант загрузки</strong>: <ul><li><strong>С веб-сайта 1С</strong>; -<ul><li>Для загрузки необходимо заполнить данные авторизации для подключения к Интернет-поддержке пользователей. Для этого перейдите по ссылке <strong>Подключить интернет-поддержку</strong>.</li></ul></li><li><strong>Из папки на диске</strong>. -<ul><li><img src="StdPicture.OpenFile"></img> укажите путь к папке (также можно нажать клавишу <strong>F4</strong>);</li></ul></li></ul></li><li>После указания всех параметров нажмите <strong>Загрузить адресные сведения</strong>. +<ul><li>Для загрузки необходимо заполнить данные авторизации для подключения к <strong>Интернет-поддержке пользователей</strong>. <strong>Из папки на диске</strong>. </li></ul></li><li> +<ul><li><img src="StdPicture.OpenFile"></img> укажите путь к папке (также можно нажать клавишу <strong>F4</strong>). Скачать адресные сведения для загрузки можно на сайте 1С:ИТС - по <a href=" https://its.1c.ru/download/fias">ссылке</a>;</li></ul></li></ul></li><li>После указания всех параметров нажмите <strong>Загрузить адресные сведения</strong>. </li><li>Во время загрузки программой выводится сообщение о состоянии загрузки: <ul><li>количество загружаемых регионов; </li><li>источник загрузки; diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl index 7fbdcf129..669275e13 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl @@ -32,6 +32,7 @@ Возврат; КонецЕсли; + АдресныйКлассификаторДоступен = АдресныйКлассификаторСлужебный.ПроверитьНачальноеЗаполнение(); ДоступнаЗагрузкаАдресныхСведенийИзИнтернет = АдресныйКлассификаторСлужебный.ДоступнаЗагрузкаАдресныхСведенийИзИнтернет(); Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей") @@ -51,6 +52,7 @@ // Получаем уже загруженные регионы. ТаблицаРегионов = АдресныйКлассификаторСлужебный.СведенияОЗагрузкеСубъектовРФ(); ТаблицаРегионов.Колонки.Добавить("Загружать", Новый ОписаниеТипов("Булево")); + ТаблицаРегионов.Колонки.Добавить("РежимРаботы", Новый ОписаниеТипов("Строка")); Для Каждого Регион Из ТаблицаРегионов Цикл Регион.Представление = " " + Формат(Регион.КодСубъектаРФ, "ЧЦ=2; ЧН=; ЧВН=; ЧГ=") + ", " + Регион.Представление; @@ -252,6 +254,23 @@ КонецПроцедуры +&НаКлиенте +Процедура ПоискАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) + + Если ЗначениеЗаполнено(Текст) Тогда + Отбор = Новый ФиксированнаяСтруктура(Новый Структура("Представление", Текст)); + Элементы.СубъектыРФ.ОтборСтрок = Отбор; + Иначе + Элементы.СубъектыРФ.ОтборСтрок = Неопределено; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПоискОчистка(Элемент, СтандартнаяОбработка) + Элементы.СубъектыРФ.ОтборСтрок = Неопределено; +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыСубъектыРФ @@ -503,9 +522,9 @@ ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СубъектыРФ.Загружено"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ОтборЭлемента.ПравоеЗначение = Ложь; + ОтборЭлемента.ПравоеЗначение = Истина; - Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); + Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(,, Истина)); КонецПроцедуры &НаКлиенте @@ -541,6 +560,7 @@ // Проверка доступности и наличия файлов. ПараметрыЗагрузки = Новый Структура("КодИсточникаЗагрузки, ПолеОшибки", КодИсточникаЗагрузки, "АдресЗагрузки"); + ОписаниеОповещения = Новый ОписаниеОповещения("ЗагрузитьКлассификаторИзКаталогаЗавершение", ЭтотОбъект); АдресныйКлассификаторКлиент.АнализДоступностиФайловКлассификатораВКаталоге(ОписаниеОповещения, КодыРегионов, КаталогДанных, ПараметрыЗагрузки); @@ -601,7 +621,7 @@ ТекстСостоянияЗагрузки = НСтр("ru = 'Загрузка файлов с сайта поддержки пользователей...'"); ОповещениеОПрогрессеВыполнения = Новый ОписаниеОповещения("ПрогрессВыполнения", ЭтотОбъект); - Задание = ЗапуститьФоновуюЗагрузкуССайтаНаСервере(КодыРегионов, УникальныйИдентификатор); + Задание = ЗапуститьФоновуюЗагрузкуССайтаНаСервере(КодыРегионов, ЗагружатьИсториюИзмененийАдресныхОбъектов, УникальныйИдентификатор); НастройкиОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); НастройкиОжидания.ВыводитьОкноОжидания = Ложь; @@ -623,19 +643,17 @@ Если Задание.Статус = "Ошибка" Тогда Если СтрНайти(Задание.КраткоеПредставлениеОшибки, "404 Not Found") > 0 ИЛИ СтрНайти(Задание.КраткоеПредставлениеОшибки, "401 Unauthorized") > 0 Тогда - ТекстОшибки = НСтр("ru = 'Не удается загрузить адресные сведения.'"); - ТекстОшибки = ТекстОшибки + НСтр("ru = 'Возможные причины:'") + Символы.ПС; - ТекстОшибки = ТекстОшибки + НСтр("ru = '• Некорректно введен или не введен логин и пароль;'") + Символы.ПС; - ТекстОшибки = ТекстОшибки + НСтр("ru = '• Нет подключения к Интернету;'") + Символы.ПС; - ТекстОшибки = ТекстОшибки + НСтр("ru = '• На сайте ведутся технические работы. Попробуйте повторить загрузку позднее.'") + Символы.ПС; - ТекстОшибки = ТекстОшибки + НСтр("ru = '• Брандмауэр или другое промежуточное ПО (антивирусы и т.п.) блокируют попытки программы подключиться к Интернету;'") + Символы.ПС; - ТекстОшибки = ТекстОшибки + НСтр("ru = '• Подключение к Интернету выполняется через прокси-сервер, но его параметры не заданы в программе.'") + Символы.ПС; - ТекстОшибки = ТекстОшибки + НСтр("ru = 'Техническая информация:'") + " " + Символы.ПС; - ТекстОшибки = ТекстОшибки + СтрПолучитьСтроку(Задание.КраткоеПредставлениеОшибки, 1); + ТекстОшибки = НСтр("ru = 'Не удается загрузить адресные сведения. Возможные причины: + | • Некорректно введен или не введен логин и пароль; + | • Нет подключения к Интернету; + | • На сайте ведутся технические работы, попробуйте повторить загрузку позднее; + | • Брандмауэр или другое промежуточное ПО (антивирусы и т.п.) блокируют попытки программы подключиться к Интернету; + | • Подключение к Интернету выполняется через прокси-сервер, но его параметры не заданы в программе. + | + |Техническая информация:'") + Символы.ПС + СтрПолучитьСтроку(Задание.КраткоеПредставлениеОшибки, 1); Иначе - ТекстОшибки = НСтр("ru = 'Вероятно в данный момент на сайте ведутся технические работы. Попробуйте повторить загрузку позднее.'") + Символы.ПС; - ТекстОшибки = ТекстОшибки + НСтр("ru = 'Техническая информация:'") + " " + Символы.ПС; - ТекстОшибки = ТекстОшибки + Задание.КраткоеПредставлениеОшибки; + ТекстОшибки = НСтр("ru = 'Вероятно в данный момент на сайте ведутся технические работы. Попробуйте повторить загрузку позднее. + |Техническая информация:'") + Символы.ПС + Задание.КраткоеПредставлениеОшибки; КонецЕсли; ВывестиСообщениеОбОшибке(ТекстОшибки); ИначеЕсли Задание.Статус = "Выполнено" Тогда @@ -660,22 +678,16 @@ Элементы.Закрыть.КнопкаПоУмолчанию = Истина; ТекущийЭлемент = Элементы.Закрыть; - Если ЕстьУстаревшиеАдресныеСведенияКЛАДРДляУдаления() Тогда - ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВопросаОбУдалениеКЛАДР", ЭтотОбъект); - ТекстВопроса = НСтр("ru = 'Найдены устаревшие сведения о регионах в формате КЛАДР, которые не используются в программе.'"); - ТекстВопроса = ТекстВопроса + Символы.ПС + НСтр("ru = 'Если загруженных регионов много, то процесс очистки может занять продолжительное время.'"); - ТекстВопроса = ТекстВопроса + Символы.ПС + НСтр("ru = 'Очистить?'"); - ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет); - КонецЕсли; Возврат; КонецПроцедуры &НаСервереБезКонтекста -Функция ЗапуститьФоновуюЗагрузкуССайтаНаСервере(КодыРегионов, УникальныйИдентификатор) +Функция ЗапуститьФоновуюЗагрузкуССайтаНаСервере(КодыРегионов, ЗагружатьИсторию, УникальныйИдентификатор) ПараметрыВызоваСервера = Новый Массив; ПараметрыВызоваСервера.Добавить(КодыРегионов); + ПараметрыВызоваСервера.Добавить(ЗагружатьИсторию); ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Загрузка адресного классификатора с сайта'"); @@ -762,7 +774,7 @@ ОповещениеОПрогрессеВыполнения = Новый ОписаниеОповещения("ПрогрессВыполнения", ЭтотОбъект); - Задание = ЗапуститьФоновуюЗагрузкуНаСервере(ДополнительныеПараметры.ПараметрыЗагрузки.КодыРегионов, ПомещенныеФайлы, Режим, УникальныйИдентификатор); + Задание = ЗапуститьФоновуюЗагрузкуНаСервере(ДополнительныеПараметры.ПараметрыЗагрузки.КодыРегионов, ПомещенныеФайлы, Режим, ЗагружатьИсториюИзмененийАдресныхОбъектов, УникальныйИдентификатор); НастройкиОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); НастройкиОжидания.ВыводитьОкноОжидания = Ложь; @@ -785,11 +797,12 @@ КонецЕсли; Если Задание.Статус = "Ошибка" Тогда + ТекстОшибки = НСтр("ru = 'Не удается загрузить адресные сведения из файлов.'"); - ТекстОшибки = ТекстОшибки + НСтр("ru = 'Необходимо сохранить файлы с сайта «1С» http://its.1c.ru/download/fias на диск, а затем загрузить в программу.'") + Символы.ПС; + ТекстОшибки = ТекстОшибки + НСтр("ru = 'Необходимо сохранить файлы с сайта «1С» http://its.1c.ru/download/fias2 на диск, а затем загрузить в программу.'") + Символы.ПС; ТекстОшибки = ТекстОшибки + НСтр("ru = 'Техническая информация:'") + Символы.ПС + Задание.КраткоеПредставлениеОшибки; ВывестиСообщениеОбОшибке(ТекстОшибки); - + Возврат; ИначеЕсли Задание.Статус = "Выполнено" Тогда ЗавершениеЗагрузки(); @@ -800,7 +813,7 @@ &НаКлиенте Процедура ВывестиСообщениеОбОшибке(Знач ТекстОшибки) ОчиститьСообщения(); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки); + ПоказатьПредупреждение(, ТекстОшибки); Элементы.ШагиЗагрузки.ТекущаяСтраница = Элементы.ВыборРегионовЗагрузки; КонецПроцедуры @@ -824,7 +837,7 @@ КонецПроцедуры &НаСервереБезКонтекста -Функция ЗапуститьФоновуюЗагрузкуНаСервере(Знач КодыРегионов, Знач ОписаниеФайловЗагрузки, Знач Режим, Знач УникальныйИдентификатор) +Функция ЗапуститьФоновуюЗагрузкуНаСервере(Знач КодыРегионов, Знач ОписаниеФайловЗагрузки, Знач Режим, Знач ЗагружатьИсториюИзмененийАдресныхОбъектов, Знач УникальныйИдентификатор) ПараметрыМетода = Новый Массив; ПараметрыМетода.Добавить(КодыРегионов); @@ -839,6 +852,7 @@ КонецЦикла; ПараметрыМетода.Добавить(ОписаниеФайлов); ПараметрыМетода.Добавить(Режим); + ПараметрыМетода.Добавить(ЗагружатьИсториюИзмененийАдресныхОбъектов); ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Загрузка адресного классификатора'"); @@ -850,13 +864,6 @@ КонецФункции -&НаКлиенте -Процедура ПослеВопросаОбУдалениеКЛАДР(Результат, Параметр) Экспорт - Если Результат = КодВозвратаДиалога.Да Тогда - ОчиститьУстаревшиеАдресныеСведенияКЛАДР(); - КонецЕсли; -КонецПроцедуры - &НаКлиенте Функция КодыРегионовДляЗагрузки() Результат = Новый Массив; @@ -901,47 +908,4 @@ КонецПроцедуры -&НаСервереБезКонтекста -Функция ЕстьУстаревшиеАдресныеСведенияКЛАДРДляУдаления() - - Если Метаданные.РегистрыСведений.Найти("УдалитьАдресныйКлассификатор") <> Неопределено Тогда - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 - | УдалитьАдресныйКлассификатор.Код - |ИЗ - | РегистрСведений.УдалитьАдресныйКлассификатор КАК УдалитьАдресныйКлассификатор"; - - РезультатЗапроса = Запрос.Выполнить().Выбрать(); - Если РезультатЗапроса .Следующий() Тогда - Возврат Истина; - КонецЕсли; - КонецЕсли; - - Возврат Ложь; - -КонецФункции - -// Удаляет устаревшие данные КЛАДР если они есть. -// -&НаСервере -Процедура ОчиститьУстаревшиеАдресныеСведенияКЛАДР() - - ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); - ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Очистка адресного классификатора в формате КЛАДР'"); - ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне("АдресныйКлассификаторСлужебный.ОчиститьУстаревшиеАдресныеСведенияКЛАДР", - Новый Массив, ПараметрыВыполнения); - - Если ФоновоеЗадание.Статус = "Ошибка" Тогда - ТекстОшибки = НСтр("ru = 'Не удается загрузить адресные сведения.'"); - ТекстОшибки = ТекстОшибки + НСтр("ru = 'Техническая информация:'") + " " + Символы.ПС; - ТекстОшибки = ТекстОшибки + ФоновоеЗадание.КраткоеПредставлениеОшибки; - ЗаписьЖурналаРегистрации(НСтр("ru = 'Очистка адресного классификатора в формате КЛАДР'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Предупреждение, - Метаданные.РегистрыСведений.УдалитьАдресныйКлассификатор,, ТекстОшибки + Символы.ПС + ФоновоеЗадание.ПодробноеПредставлениеОшибки); - КонецЕсли; - -КонецПроцедуры - #КонецОбласти diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Form.form b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Form.form index 4ff14c67c..7ea3b872c 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Form.form +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Form.form @@ -269,6 +269,7 @@ <autoMaxHeight>true</autoMaxHeight> <placementArea>UserCmds</placementArea> <representationInContextMenu>Auto</representationInContextMenu> + <locationInCommandBar>InAdditionalSubmenu</locationInCommandBar> </items> <items xsi:type="form:Button"> <name>СубъектыРФОтменитьПоиск</name> @@ -295,6 +296,7 @@ <autoMaxHeight>true</autoMaxHeight> <placementArea>UserCmds</placementArea> <representationInContextMenu>Auto</representationInContextMenu> + <locationInCommandBar>InAdditionalSubmenu</locationInCommandBar> </items> <horizontalAlign>Left</horizontalAlign> </autoCommandBar> @@ -415,61 +417,28 @@ <autoMaxCardHeight>true</autoMaxCardHeight> <rowFilter xsi:type="core:UndefinedValue"/> </items> - <items xsi:type="form:FormField"> - <name>ПоказыватьТолькоЗагруженныеРегионы</name> - <id>140</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <dataPath xsi:type="form:DataPath"> - <segments>ПоказыватьТолькоЗагруженныеРегионы</segments> - </dataPath> - <titleLocation>Right</titleLocation> - <handlers> - <event>OnChange</event> - <name>ПоказыватьТолькоЗагруженныеРегионыПриИзменении</name> - </handlers> - <extendedTooltip> - <name>ПоказыватьТолькоЗагруженныеРегионыРасширеннаяПодсказка</name> - <id>142</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <contextMenu> - <name>ПоказыватьТолькоЗагруженныеРегионыКонтекстноеМеню</name> - <id>141</id> - <autoFill>true</autoFill> - </contextMenu> - <type>CheckBoxField</type> - <editMode>Enter</editMode> - <showInHeader>true</showInHeader> - <headerHorizontalAlign>Left</headerHorizontalAlign> - <showInFooter>true</showInFooter> - <extInfo xsi:type="form:CheckBoxFieldExtInfo"/> - </items> <items xsi:type="form:FormGroup"> - <name>ГруппаКомандЗагрузки</name> - <id>8</id> + <name>ГруппаПодвалТаблицы</name> + <id>143</id> <items xsi:type="form:FormField"> - <name>ВыбраноРегионовДляОчистки</name> - <id>51</id> + <name>ПоказыватьТолькоЗагруженныеРегионы</name> + <id>140</id> <visible>true</visible> <enabled>true</enabled> <userVisible> <common>true</common> </userVisible> <dataPath xsi:type="form:DataPath"> - <segments>ВыбраноРегионовДляОчистки</segments> + <segments>ПоказыватьТолькоЗагруженныеРегионы</segments> </dataPath> + <titleLocation>Right</titleLocation> + <handlers> + <event>OnChange</event> + <name>ПоказыватьТолькоЗагруженныеРегионыПриИзменении</name> + </handlers> <extendedTooltip> - <name>ВыбраноРегионовДляОчисткиРасширеннаяПодсказка</name> - <id>53</id> + <name>ПоказыватьТолькоЗагруженныеРегионыРасширеннаяПодсказка</name> + <id>142</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -478,34 +447,132 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ВыбраноРегионовДляОчисткиКонтекстноеМеню</name> - <id>52</id> + <name>ПоказыватьТолькоЗагруженныеРегионыКонтекстноеМеню</name> + <id>141</id> <autoFill>true</autoFill> </contextMenu> - <type>LabelField</type> - <horizontalAlign>Left</horizontalAlign> + <type>CheckBoxField</type> <editMode>Enter</editMode> <showInHeader>true</showInHeader> <headerHorizontalAlign>Left</headerHorizontalAlign> <showInFooter>true</showInFooter> - <extInfo xsi:type="form:LabelFieldExtInfo"> - <width>2</width> + <extInfo xsi:type="form:CheckBoxFieldExtInfo"/> + </items> + <items xsi:type="form:FormGroup"> + <name>ГруппаКоличествоРегионов</name> + <id>145</id> + <items xsi:type="form:FormField"> + <name>ВыбраноРегионовДляОчистки</name> + <id>51</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>ВыбраноРегионовДляОчистки</segments> + </dataPath> + <extendedTooltip> + <name>ВыбраноРегионовДляОчисткиРасширеннаяПодсказка</name> + <id>53</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ВыбраноРегионовДляОчисткиКонтекстноеМеню</name> + <id>52</id> + <autoFill>true</autoFill> + </contextMenu> + <type>LabelField</type> + <horizontalAlign>Left</horizontalAlign> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:LabelFieldExtInfo"> + <width>2</width> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <format> + <key>ru</key> + <value>ЧН=-</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> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <title> + <key>ru</key> + <value>Количество регионов</value> + + true + + ГруппаКоличествоРегионовРасширеннаяПодсказка + 146 + Label true true - false - - ru - ЧН=- - - - System.DefaultGUIFont - true - false - false - false - + + Left + + + UsualGroup + + HorizontalIfPossible + Right + Auto + true + true + Auto + Auto + true + true + + true + + + <key>ru</key> + <value>Подвал таблицы</value> + + + ГруппаПодвалТаблицыРасширеннаяПодсказка + 144 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + ГруппаКомандЗагрузки + 8 ГруппаКомандЗагрузкиПанель 128 diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Help/ru.html b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Help/ru.html index 04239ee0d..ac83bdf37 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Help/ru.html +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Help/ru.html @@ -1,6 +1,6 @@

    Предназначена для удаления адресных данных (например, ошибочно загруженных).

    -

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

    +

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

    Очистка адресного классификатора

    • Включите флажки рядом с наименованиями нужных регионов.
    • Включите флажок Показывать только загруженные регионы, это облегчает выбор. diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/ManagerModule.bsl b/SSL/src/InformationRegisters/АдресныеОбъекты/ManagerModule.bsl index 45ac711c6..06425cd29 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/ManagerModule.bsl @@ -28,16 +28,8 @@ |ЛЕВОЕ СОЕДИНЕНИЕ | РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты |ПО - | АдресныеОбъекты.Уровень = 1 + | АдресныеОбъекты.Уровень = 1 | И АдресныеОбъекты.КодСубъектаРФ = Классификатор.КодСубъектаРФ - | И АдресныеОбъекты.КодОкруга = 0 - | И АдресныеОбъекты.КодРайона = 0 - | И АдресныеОбъекты.КодГорода = 0 - | И АдресныеОбъекты.КодВнутригородскогоРайона = 0 - | И АдресныеОбъекты.КодНаселенногоПункта = 0 - | И АдресныеОбъекты.КодУлицы = 0 - | И АдресныеОбъекты.КодДополнительногоЭлемента = 0 - | И АдресныеОбъекты.КодПодчиненногоЭлемента = 0 |ГДЕ | АдресныеОбъекты.Идентификатор ЕСТЬ NULL |"); diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/АдресныеОбъекты.mdo b/SSL/src/InformationRegisters/АдресныеОбъекты/АдресныеОбъекты.mdo index 6a84d7ca5..25657f9ee 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/АдресныеОбъекты.mdo +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/АдресныеОбъекты.mdo @@ -1,13 +1,13 @@ - + - - - - - - - + + + + + + + АдресныеОбъекты @@ -16,7 +16,6 @@ true InDialog - InformationRegister.АдресныеОбъекты.Form.ФормаСписка Use Active @@ -51,29 +50,45 @@ Managed - - ПочтовыйИндекс + + РодительскийИдентификатор ru - Почтовый индекс + Родительский идентификатор - Number - - 6 - + UUID ru - Почтовый индекс адреса + Идентификатор родительского объекта (региона, района, города, населенного пункта) используется для связи с вышестоящими административно-территориальными адресными объектами. + Index Use + + + МуниципальныйРодительскийИдентификатор + + ru + Муниципальный родительский идентификатор + + + UUID + + + ru + Идентификатор родительского объекта (региона, района, города, населенного пункта) используется для связи с вышестоящими муниципальными адресными объектами. + + + Index - - + Use + + + Наименование ru @@ -91,11 +106,11 @@ + Index Use - Index - - + + Сокращение ru @@ -113,30 +128,11 @@ + Index Use - Index - - - Дополнительно - - ru - Дополнительно - - Служебный идентификатор комбинации кодов ОКАТО и т.п. - - UUID - - - ru - Служебный идентификатор комбинации кодов ОКАТО, ОКТМО и т.п. - - - - Use - - - + + КодКЛАДР ru @@ -157,27 +153,28 @@ Use - - - Актуален + + + ДополнительныеАдресныеСведения ru - Актуален + Дополнительные адресные сведения + Служебный идентификатор комбинации кодов ОКАТО и т.п. - Boolean + UUID ru - Признак актуальности адресного объекта + Служебный идентификатор комбинации кодов ОКАТО, ОКТМО и т.п. - Use + Index Use - - + + Уровень ru @@ -198,9 +195,29 @@ Index Use - true + + + Идентификатор + + ru + Идентификатор + + Глобальный уникальный идентификатор адресного объекта ФНС + + UUID + + + ru + Глобальный уникальный идентификатор адресного объекта ФНС в ФИАС + + + + Index + Use + true + - + КодСубъектаРФ ru @@ -222,204 +239,7 @@ true - - КодОкруга - - ru - Код округа - - - Number - - 1 - - - - ru - Код округа в ФИАС - - - - Use - - true - - - КодРайона - - ru - Код района - - - Number - - 3 - - - - ru - Код района в ФИАС - - - - Use - - true - - - КодГорода - - ru - Код города - - - Number - - 3 - - - - ru - Код города в ФИАС - - - - Use - - true - - - КодВнутригородскогоРайона - - ru - Код внутригородского района - - - Number - - 3 - - - - ru - Код внутригородского района в ФИАС - - - - Use - - true - - - КодНаселенногоПункта - - ru - Код населенного пункта - - - Number - - 3 - - - - ru - Код населенного пункта в ФИАС - - - - Use - - true - - - КодУлицы - - ru - Код улицы - - - Number - - 4 - - - - ru - Код улицы в ФИАС - - - - Use - - true - - - КодДополнительногоЭлемента - - ru - Код дополнительного элемента - - - Number - - 4 - - - - ru - Код дополнительного элемента в ФИАС - - - - Use - - true - - - КодПодчиненногоЭлемента - - ru - Код подчиненного элемента - - - Number - - 3 - - - - ru - Код подчиненного элемента в ФИАС - - - - Use - - true - - - Идентификатор - - ru - Идентификатор - - Глобальный уникальный идентификатор адресного объекта ФНС - - UUID - - - ru - Глобальный уникальный идентификатор адресного объекта ФНС в ФИАС - - - - Index - Use - true - - - + АктуализацияУстаревшегоКлассификатора ru @@ -428,7 +248,7 @@ PersonalComputer MobileDevice - + ЗагрузкаАдресногоКлассификатора ru @@ -442,7 +262,7 @@ PersonalComputer MobileDevice - + ОчисткаАдресногоКлассификатора ru @@ -456,16 +276,7 @@ PersonalComputer MobileDevice - - ФормаСписка - - ru - Форма списка - - PersonalComputer - MobileDevice - - + КлассификаторСубъектовРФ ru @@ -473,7 +284,7 @@ TextDocument - + АдресныеСокращения ru @@ -481,7 +292,7 @@ TextDocument - + ЗагрузитьАдресныйКлассификатор ru @@ -490,7 +301,7 @@ NavigationPanelOrdinary Auto - + ПодключитьИнтернетПоддержку ru @@ -499,7 +310,7 @@ NavigationPanelOrdinary Auto - + ОчиститьАдресныйКлассификатор ru diff --git a/SSL/src/InformationRegisters/БуферОперацийСтатистики/ManagerModule.bsl b/SSL/src/InformationRegisters/БуферОперацийСтатистики/ManagerModule.bsl index 5efd642a0..40bd5aff0 100644 --- a/SSL/src/InformationRegisters/БуферОперацийСтатистики/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/БуферОперацийСтатистики/ManagerModule.bsl @@ -6,7 +6,7 @@ УстановитьПривилегированныйРежим(Истина); - ПериодИдентификатораУдаления = ЦентрМониторингаВызовСервераПовтИсп.ПолучитьПараметрыЦентраМониторинга("ПериодАгрегацииМалый"); + ПериодИдентификатораУдаления = ЦентрМониторингаСлужебный.ПолучитьПараметрыЦентраМониторинга("ПериодАгрегацииМалый"); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); @@ -47,7 +47,7 @@ УстановитьПривилегированныйРежим(Истина); - ПериодИдентификатораУдаления = ЦентрМониторингаВызовСервераПовтИсп.ПолучитьПараметрыЦентраМониторинга("ПериодАгрегацииМалый"); + ПериодИдентификатораУдаления = ЦентрМониторингаСлужебный.ПолучитьПараметрыЦентраМониторинга("ПериодАгрегацииМалый"); ТекДата = ТекущаяУниверсальнаяДатаВМиллисекундах(); ИдентификаторУдаления = Цел(Цел(ТекДата/1000)/ПериодИдентификатораУдаления)*ПериодИдентификатораУдаления; diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Form.form b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Form.form index 4716a2cfb..da152db0a 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Form.form +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Form.form @@ -65,18 +65,101 @@ КоманднаяПанель 63 - - ОткрытьВерсиюОбъекта - 19 + + ДействияСВерсией + 119 + + ОткрытьВерсию + 19 + true + true + + true + + false + + ОткрытьВерсиюРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + Form.Command.ОткрытьВерсиюОбъекта + Auto + true + true + true + UserCmds + Auto + + + Сравнить + 9 + true + true + + true + + false + + СравнитьРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + Form.Command.СформироватьОтчетПоИзменениям + Normal + Auto + true + true + UserCmds + Auto + + + ПерейтиНаВерсию + 34 + true + true + + true + + + ПерейтиНаВерсиюExtendedTooltip + 41 + Label + true + true + + Left + + + Form.Command.ПерейтиНаВерсию + Normal + PictureAndText + true + true + UserCmds + Auto + true true true - false + + <key>ru</key> + <value>Действия с версией</value> + - ОткрытьВерсиюОбъектаExtendedTooltip - 39 + ДействияСВерсиейРасширеннаяПодсказка + 120 Label true true @@ -84,120 +167,7 @@ Left - Form.Command.ОткрытьВерсиюОбъекта - Auto - true - true - true - UserCmds - Auto - - - ОтчетПоИзменениям - 9 - true - true - - true - - false - - ОтчетПоИзменениямExtendedTooltip - 40 - Label - true - true - - Left - - - Form.Command.СформироватьОтчетПоИзменениям - Normal - Auto - true - true - UserCmds - Auto - - - ПерейтиНаВерсию - 34 - true - true - - true - - - ПерейтиНаВерсиюExtendedTooltip - 41 - Label - true - true - - Left - - - Form.Command.ПерейтиНаВерсию - Normal - PictureAndText - true - true - UserCmds - Auto - - - Найти - 29 - true - true - - true - - false - - НайтиExtendedTooltip - 42 - Label - true - true - - Left - - - 0 - Normal - Auto - true - true - UserCmds - Auto - - - ОтменитьПоиск - 30 - true - true - - true - - false - - ОтменитьПоискExtendedTooltip - 43 - Label - true - true - - Left - - - 0 - Normal - Auto - true - true - UserCmds - Auto + ФормаОбновить @@ -284,6 +254,8 @@ MoveUp ShowMultipleSelection ShowRowRearrangement + SortListAsc + SortListDesc Tree ДеревоВерсийПредставлениеНомераВерсии @@ -825,6 +797,7 @@ Page + HorizontalIfPossible false diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Module.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Module.bsl index ce7008a42..4af1512b9 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Module.bsl +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Module.bsl @@ -324,12 +324,14 @@ ВыбранаОднаВерсия = Элементы.ДеревоВерсий.ВыделенныеСтроки.Количество() = 1; - Элементы.ОткрытьВерсиюОбъекта.Доступность = ВыбранаОднаВерсия; + Элементы.ОткрытьВерсию.Доступность = ВыбранаОднаВерсия; Элементы.ДеревоВерсийКонтекстноеМенюОткрытьВерсию.Доступность = ВыбранаОднаВерсия; Элементы.ПерейтиНаВерсию.Доступность = ВыбранаОднаВерсия; Элементы.ДеревоВерсийКонтекстноеМенюПерейтиНаВерсию.Доступность = ВыбранаОднаВерсия; + Элементы.Сравнить.Доступность = Элементы.ДеревоВерсий.ВыделенныеСтроки.Количество() > 0; + КонецПроцедуры &НаКлиенте @@ -347,9 +349,9 @@ Процедура ОбновитьСписокВерсий() ТаблицаВерсий = СформироватьТаблицуВерсий(); - Если ТаблицаВерсий.Количество() = 0 Тогда - Элементы.ОсновнаяСтраница.ТекущаяСтраница = Элементы.ВерсииДляСравненияОтсутствуют; - Иначе + ЕстьВерсии = ТаблицаВерсий.Количество() > 0; + + Если ЕстьВерсии Тогда Элементы.ОсновнаяСтраница.ТекущаяСтраница = Элементы.ВыборВерсийДляСравнения; ТаблицаВерсий.Сортировать("ВерсияВладелец Возр, НомерВерсии Убыв"); @@ -364,7 +366,13 @@ ТаблицаВерсий.Свернуть("Узел"); Элементы.ДеревоВерсийУзел.Видимость = ТаблицаВерсий.Количество() > 1 Или ТаблицаВерсий.Количество() = 1 И ТаблицаВерсий[0].Узел <> ИмяЭтойИнформационнойБазы(); + Иначе + Элементы.ОсновнаяСтраница.ТекущаяСтраница = Элементы.ВерсииДляСравненияОтсутствуют; КонецЕсли; + + Элементы.ДействияСВерсией.Доступность = ЕстьВерсии; + Элементы.Реквизиты.Доступность = ЕстьВерсии; + КонецПроцедуры &НаКлиенте diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаСписка/Form.form index 23af25b02..a1c4ae818 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаСписка/Form.form @@ -106,7 +106,6 @@ false None Change - Choose Copy Create Delete diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/ManagerModule.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/ManagerModule.bsl index 383e09413..4eaeadc95 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/ManagerModule.bsl @@ -1,5 +1,29 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ПрограммныйИнтерфейс + +#Область ДляВызоваИзДругихПодсистем + +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтениеИзменение + |ГДЕ + | ЧтениеОбъектаРазрешено(Объект)"; + + Ограничение.ПоВладельцуБезЗаписиКлючейДоступа = Истина; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + +#КонецОбласти + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции Процедура УдалитьИнформациюОбАвтореВерсии(Знач АвторВерсии) Экспорт @@ -346,13 +370,6 @@ ИмяТабличнойЧасти = ЭлементИзмененнаяТЧ.Ключ; ВерсииТекущейТЧ = ЭлементИзмененнаяТЧ.Значение; - МетаданныеОбъекта = СсылкаНаОбъект.Метаданные(); - ПредставлениеТабличнойЧасти = ИмяТабличнойЧасти; - ОписаниеТабличнойЧасти = ВерсионированиеОбъектов.МетаданныеТабличнойЧасти(МетаданныеОбъекта, ИмяТабличнойЧасти); - Если ОписаниеТабличнойЧасти <> Неопределено Тогда - ПредставлениеТабличнойЧасти = ОписаниеТабличнойЧасти.Представление(); - КонецЕсли; - ТекущаяТабличнаяЧастьИзменилась = Ложь; Для ТекСчетчикУникальныйИд = 1 По СчетчикУникальныйИд[ИмяТабличнойЧасти] Цикл @@ -426,9 +443,18 @@ КонецЕсли; // Блок для вывода шапки текущей обрабатываемой табличной части. + ОписаниеТабличнойЧасти = Неопределено; + МетаданныеОбъекта = СсылкаНаОбъект.Метаданные(); Если Не ТекущаяТабличнаяЧастьИзменилась Тогда ТекущаяТабличнаяЧастьИзменилась = Истина; ШаблонШапкаТекущейТЧ = ОбщийШаблон.ПолучитьОбласть("ШапкаТабличнойЧасти"); + + ПредставлениеТабличнойЧасти = ИмяТабличнойЧасти; + ОписаниеТабличнойЧасти = ВерсионированиеОбъектов.МетаданныеТабличнойЧасти(МетаданныеОбъекта, ИмяТабличнойЧасти); + Если ОписаниеТабличнойЧасти <> Неопределено Тогда + ПредставлениеТабличнойЧасти = ОписаниеТабличнойЧасти.Представление(); + КонецЕсли; + ШаблонШапкаТекущейТЧ.Параметры.НаименованиеТабличнойЧасти = ПредставлениеТабличнойЧасти; ТЧОтчета.Вывести(ШаблонШапкаТекущейТЧ); ТЧОтчета.НачатьГруппуСтрок("ТабличнаяЧасть"+ИмяТабличнойЧасти); @@ -455,17 +481,17 @@ Продолжить; КонецЕсли; ПредставлениеРеквизита = Колонка.Имя; - Если ЗначениеЗаполнено(Колонка.Заголовок) Тогда + Если Не ПустаяСтрока(Колонка.Заголовок) Тогда ПредставлениеРеквизита = Колонка.Заголовок; Иначе Если ОписаниеТабличнойЧасти <> Неопределено Тогда ОписаниеРеквизита = ВерсионированиеОбъектов.МетаданныеРеквизитаТабличнойЧасти(ОписаниеТабличнойЧасти, Колонка.Имя); - Если ОписаниеРеквизита = Неопределено И Метаданные.ПланыСчетов.Содержит(МетаданныеОбъекта) Тогда - ОписаниеРеквизита = МетаданныеОбъекта.ПризнакиУчетаСубконто.Найти(Колонка.Имя); - КонецЕсли; - Если ОписаниеРеквизита <> Неопределено Тогда - ПредставлениеРеквизита = ОписаниеРеквизита.Представление(); - КонецЕсли; + КонецЕсли; + Если ОписаниеРеквизита = Неопределено И Метаданные.ПланыСчетов.Содержит(МетаданныеОбъекта) Тогда + ОписаниеРеквизита = МетаданныеОбъекта.ПризнакиУчетаСубконто.Найти(Колонка.Имя); + КонецЕсли; + Если ОписаниеРеквизита <> Неопределено Тогда + ПредставлениеРеквизита = ОписаниеРеквизита.Представление(); КонецЕсли; КонецЕсли; МассивЗаполнения.Добавить(ПредставлениеРеквизита); diff --git a/SSL/src/InformationRegisters/ВерсииПодсистем/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/ВерсииПодсистем/Forms/ФормаЗаписи/Form.form index 170f33d8c..bf8e32069 100644 --- a/SSL/src/InformationRegisters/ВерсииПодсистем/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/ВерсииПодсистем/Forms/ФормаЗаписи/Form.form @@ -158,6 +158,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ManagerModule.bsl index 6a11d0505..2ad5a4e80 100644 --- a/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ManagerModule.bsl @@ -183,6 +183,8 @@ Процедура ОбновитьГруппыЗначенийДоступа(ЗначенияДоступа = Неопределено, ЕстьИзменения = Неопределено) Экспорт + ТипыЗначенийСИзменениями = Новый Соответствие; + Если ЗначенияДоступа = Неопределено Тогда СвойстваВидовДоступа = УправлениеДоступомСлужебныйПовтИсп.СвойстваВидовДоступа(); @@ -201,22 +203,25 @@ Выборка = Запрос.Выполнить().Выбрать(); МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ИмяТаблицы); - ОбновитьГруппыЗначенияДоступа(МенеджерОбъекта.ПустаяСсылка(), ЕстьИзменения); + ОбновитьГруппыЗначенияДоступа(МенеджерОбъекта.ПустаяСсылка(), ЕстьИзменения, ТипыЗначенийСИзменениями); Пока Выборка.Следующий() Цикл - ОбновитьГруппыЗначенияДоступа(Выборка.Ссылка, ЕстьИзменения); + ОбновитьГруппыЗначенияДоступа(Выборка.Ссылка, ЕстьИзменения, ТипыЗначенийСИзменениями); КонецЦикла; КонецЦикла; ИначеЕсли ТипЗнч(ЗначенияДоступа) = Тип("Массив") Тогда Для каждого ЗначениеДоступа Из ЗначенияДоступа Цикл - ОбновитьГруппыЗначенияДоступа(ЗначениеДоступа, ЕстьИзменения); + ОбновитьГруппыЗначенияДоступа(ЗначениеДоступа, ЕстьИзменения, ТипыЗначенийСИзменениями); КонецЦикла; Иначе - ОбновитьГруппыЗначенияДоступа(ЗначенияДоступа, ЕстьИзменения); + ОбновитьГруппыЗначенияДоступа(ЗначенияДоступа, ЕстьИзменения, ТипыЗначенийСИзменениями); КонецЕсли; + УправлениеДоступомСлужебный.ЗапланироватьОбновлениеЗависимыхСписковПоЗначениямСГруппами( + ТипыЗначенийСИзменениями); + КонецПроцедуры // Заполняет группы для пустых ссылок используемых типов значений доступа. @@ -225,11 +230,16 @@ СвойстваВидовДоступа = УправлениеДоступомСлужебныйПовтИсп.СвойстваВидовДоступа(); ЗначенияДоступаСГруппами = СвойстваВидовДоступа.ЗначенияДоступаСГруппами; + ТипыЗначенийСИзменениями = Новый Соответствие; + Для каждого ИмяТаблицы Из ЗначенияДоступаСГруппами.ИменаТаблиц Цикл МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ИмяТаблицы); - ОбновитьГруппыЗначенияДоступа(МенеджерОбъекта.ПустаяСсылка(), Неопределено); + ОбновитьГруппыЗначенияДоступа(МенеджерОбъекта.ПустаяСсылка(), Неопределено, ТипыЗначенийСИзменениями); КонецЦикла; + УправлениеДоступомСлужебный.ЗапланироватьОбновлениеЗависимыхСписковПоЗначениямСГруппами( + ТипыЗначенийСИзменениями); + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -489,7 +499,7 @@ // ЕстьИзменения - Булево (возвращаемое значение) - если производилась запись, // устанавливается Истина, иначе не изменяется. // -Процедура ОбновитьГруппыЗначенияДоступа(ЗначениеДоступа, ЕстьИзменения) +Процедура ОбновитьГруппыЗначенияДоступа(ЗначениеДоступа, ЕстьИзменения, ТипыЗначенийСИзменениями) УстановитьПривилегированныйРежим(Истина); @@ -603,10 +613,14 @@ НовыеЗначения = СтарыеЗначения; КонецЕсли; - Если НЕ ТребуетсяОбновление Тогда + Если Не ТребуетсяОбновление Тогда Возврат; КонецЕсли; + Если Объект = Неопределено Или Не Объект.ЭтоНовый() Тогда + ТипыЗначенийСИзменениями.Вставить(ТипЗначенияДоступа, Истина); + КонецЕсли; + // Подготовка новых записей для обновления. НовыеЗаписи = СоздатьНаборЗаписей().Выгрузить(); diff --git a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/МоиБизнесПроцессы/Form.form b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/МоиБизнесПроцессы/Form.form index 56a8b07d2..e0689b641 100644 --- a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/МоиБизнесПроцессы/Form.form +++ b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/МоиБизнесПроцессы/Form.form @@ -239,10 +239,6 @@ true false None - Choose - Copy - Create - Delete Номер 6 diff --git a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/ФормаСписка/Form.form index a7df18d72..4bc340506 100644 --- a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/ФормаСписка/Form.form @@ -236,10 +236,6 @@ false None Change - Choose - Copy - Create - Delete Номер 6 diff --git a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/ManagerModule.bsl b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/ManagerModule.bsl index e69de29bb..2e8bb206f 100644 --- a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/ManagerModule.bsl @@ -0,0 +1,25 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +#Область ДляВызоваИзДругихПодсистем + +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтениеИзменение + |ГДЕ + | ЧтениеОбъектаРазрешено(БизнесПроцесс)"; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + +#КонецОбласти + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Form.form b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Form.form index def81b7e0..9d9761b9e 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Form.form +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Form.form @@ -178,6 +178,7 @@ UsualGroup + HorizontalIfPossible Center Auto true @@ -347,6 +348,7 @@ Page + HorizontalIfPossible auto Style.ФонУправляющегоПоля @@ -1040,6 +1042,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1113,6 +1116,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -1459,6 +1463,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1588,6 +1593,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -2564,6 +2570,7 @@ UsualGroup + HorizontalIfPossible Collapsible true Button diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl index 1ebf89d6a..fffd37e22 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl @@ -2967,31 +2967,7 @@ // Уведомление пользователя ТекстУведомления = ""; - Если УстановкаДатыЗапрета <> УстановкаДатыЗапретаВБазеДанных Тогда - - ЭлементСписка = Элементы.УстановкаДатыЗапрета.СписокВыбора.НайтиПоЗначению( - УстановкаДатыЗапрета); - - Если ЭлементСписка = Неопределено Тогда - УстановкаДатыЗапретаПредставление = УстановкаДатыЗапрета; - Иначе - УстановкаДатыЗапретаПредставление = ЭлементСписка.Представление; - КонецЕсли; - - ЭлементСписка = Элементы.УстановкаДатыЗапрета.СписокВыбора.НайтиПоЗначению( - УстановкаДатыЗапретаВБазеДанных); - - Если ЭлементСписка = Неопределено Тогда - УстановкаДатыЗапретаВБазеДанныхПредставление = УстановкаДатыЗапретаВБазеДанных; - Иначе - УстановкаДатыЗапретаВБазеДанныхПредставление = ЭлементСписка.Представление; - КонецЕсли; - - КонецЕсли; - - Если ЭтоВсеПользователи(ТекущийПользователь) - И СпособУказанияВБазеДанных = "" Тогда - + Если ЭтоВсеПользователи(ТекущийПользователь) И СпособУказанияВБазеДанных = "" Тогда СпособУказанияВБазеДанных = "ОбщаяДата"; КонецЕсли; @@ -3000,16 +2976,7 @@ И (УстановкаДатыЗапрета = УстановкаДатыЗапретаВБазеДанных Или ЭтоВсеПользователи(ТекущийПользователь) ) Тогда - Если ЗначениеЗаполнено(ТекстУведомления) Тогда - ТекстУведомления = ТекстУведомления + Символы.ПС + Символы.ПС; - КонецЕсли; - - ЭлементСписка = Элементы.СпособУказанияДатыЗапрета.СписокВыбора.НайтиПоЗначению( - СпособУказанияДатыЗапрета); - - ЭлементСписка = Элементы.СпособУказанияДатыЗапрета.СписокВыбора.НайтиПоЗначению( - СпособУказанияВБазеДанных); - + ЭлементСписка = Элементы.СпособУказанияДатыЗапрета.СписокВыбора.НайтиПоЗначению(СпособУказанияВБазеДанных); Если ЭлементСписка = Неопределено Тогда СпособУказанияВБазеДанныхПредставление = СпособУказанияВБазеДанных; Иначе diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Form.form b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Form.form index f201de085..f35b2f167 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Form.form +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Form.form @@ -168,6 +168,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -241,6 +242,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -587,6 +589,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -716,6 +719,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/ManagerModule.bsl b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/ManagerModule.bsl new file mode 100644 index 000000000..79a40d3db --- /dev/null +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/ManagerModule.bsl @@ -0,0 +1,30 @@ + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +#Область ДляВызоваИзДругихПодсистем + +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтениеИзменение + |ГДЕ + | ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.Пользователи) + | ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.ГруппыПользователей) + | ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.ВнешниеПользователи) + | ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.ГруппыВнешнихПользователей) + | ИЛИ ДатыЗапретаИзменения.Пользователь = ЗНАЧЕНИЕ(Перечисление.ВидыНазначенияДатЗапрета.ДляВсехПользователей)"; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + +#КонецОбласти + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/InformationRegisters/ДомаЗданияСтроения/ДомаЗданияСтроения.mdo b/SSL/src/InformationRegisters/ДомаЗданияСтроения/ДомаЗданияСтроения.mdo index 9f84a9cd1..745d61bf4 100644 --- a/SSL/src/InformationRegisters/ДомаЗданияСтроения/ДомаЗданияСтроения.mdo +++ b/SSL/src/InformationRegisters/ДомаЗданияСтроения/ДомаЗданияСтроения.mdo @@ -1,13 +1,13 @@ - + - - - - - - - + + + + + + + ДомаЗданияСтроения @@ -16,7 +16,6 @@ true InDialog - InformationRegister.ДомаЗданияСтроения.Form.ФормаСписка Use Active @@ -51,7 +50,7 @@ Managed - + Строения ru @@ -64,8 +63,8 @@ Use - - + + АдресныйОбъект ru @@ -76,29 +75,12 @@ + Index Use true - - ПочтовыйИндекс - - ru - Почтовый индекс - - - Number - - 6 - - - - - Use - - true - - + КодСубъектаРФ ru @@ -116,13 +98,25 @@ true - - ФормаСписка + + ДополнительныеАдресныеСведения ru - Форма списка + Дополнительные адресные сведения - PersonalComputer - MobileDevice - + Служебный идентификатор комбинации кодов ОКАТО и т.п. + + UUID + + + ru + Служебный идентификатор комбинации кодов ОКАТО, ОКТМО и т.п. + + + + Index + Use + + true + diff --git a/SSL/src/InformationRegisters/ДополнительныеАдресныеСведения/ДополнительныеАдресныеСведения.mdo b/SSL/src/InformationRegisters/ДополнительныеАдресныеСведения/ДополнительныеАдресныеСведения.mdo index c2f878c69..9a9c15b3b 100644 --- a/SSL/src/InformationRegisters/ДополнительныеАдресныеСведения/ДополнительныеАдресныеСведения.mdo +++ b/SSL/src/InformationRegisters/ДополнительныеАдресныеСведения/ДополнительныеАдресныеСведения.mdo @@ -1,13 +1,13 @@ - + - - - - - - - + + + + + + + ДополнительныеАдресныеСведения @@ -50,24 +50,26 @@ Managed - - OKATO + + ПочтовыйИндекс ru - OKATO + Почтовый индекс Number - 11 + 10 + Index + Use Use - - + + ОКТМО ru @@ -83,14 +85,30 @@ Use - - - КодИФНСФЛ + + + OKATO ru - Код ИФНСФЛ + OKATO + + + Number + + 11 + + + + + Use + + + + КодУчасткаИФНСЮЛ + + ru + Код участка ИФНСЮЛ - Код ИФНС для физического лица Number @@ -99,14 +117,35 @@ ru - Код ИФНС для физического лица + Код участка ИФНС для юридического лица Use - - + + + КодУчасткаИФНСФЛ + + ru + Код участка ИФНСФЛ + + + Number + + 4 + + + + ru + Код участка ИФНС для физического лица + + + + Use + + + КодИФНСЮЛ ru @@ -127,13 +166,14 @@ Use - - - КодУчасткаИФНСФЛ + + + КодИФНСФЛ ru - Код участка ИФНСФЛ + Код ИФНСФЛ + Код ИФНС для физического лица Number @@ -142,35 +182,14 @@ ru - Код участка ИФНС для физического лица + Код ИФНС для физического лица Use - - - КодУчасткаИФНСЮЛ - - ru - Код участка ИФНСЮЛ - - - Number - - 4 - - - - ru - Код участка ИФНС для юридического лица - - - - Use - - - + + Идентификатор ru @@ -181,11 +200,12 @@ + Index Use true - + КодСубъектаРФ ru diff --git a/SSL/src/InformationRegisters/ДополнительныеСведения/ManagerModule.bsl b/SSL/src/InformationRegisters/ДополнительныеСведения/ManagerModule.bsl new file mode 100644 index 000000000..239c7eeb6 --- /dev/null +++ b/SSL/src/InformationRegisters/ДополнительныеСведения/ManagerModule.bsl @@ -0,0 +1,25 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +#Область ДляВызоваИзДругихПодсистем + +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтениеИзменение + |ГДЕ + | ЗначениеРазрешено(Свойство)"; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + +#КонецОбласти + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/InformationRegisters/ДополнительныеСведения/RecordSetModule.bsl b/SSL/src/InformationRegisters/ДополнительныеСведения/RecordSetModule.bsl index afb072cdb..bd4b72be4 100644 --- a/SSL/src/InformationRegisters/ДополнительныеСведения/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ДополнительныеСведения/RecordSetModule.bsl @@ -9,7 +9,7 @@ КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда - ЭлементОтбора = ЭтотОбъект.Отбор.Найти("Объект"); + ЭлементОтбора = Отбор.Найти("Объект"); Если ЭлементОтбора <> Неопределено Тогда МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов"); УстановитьПривилегированныйРежим(Истина); diff --git a/SSL/src/InformationRegisters/ЗагруженныеВерсииАдресныхСведений/ЗагруженныеВерсииАдресныхСведений.mdo b/SSL/src/InformationRegisters/ЗагруженныеВерсииАдресныхСведений/ЗагруженныеВерсииАдресныхСведений.mdo index e7d688d60..a4f53d3d3 100644 --- a/SSL/src/InformationRegisters/ЗагруженныеВерсииАдресныхСведений/ЗагруженныеВерсииАдресныхСведений.mdo +++ b/SSL/src/InformationRegisters/ЗагруженныеВерсииАдресныхСведений/ЗагруженныеВерсииАдресныхСведений.mdo @@ -1,13 +1,13 @@ - + - - - - - - - + + + + + + + ЗагруженныеВерсииАдресныхСведений @@ -50,7 +50,7 @@ Managed - + Версия ru @@ -67,7 +67,7 @@ Use - + ДатаВерсии ru @@ -83,7 +83,7 @@ Use - + ДатаЗагрузки ru @@ -100,7 +100,7 @@ Index - + КодСубъектаРФ ru diff --git a/SSL/src/InformationRegisters/ЗначенияГруппДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/ЗначенияГруппДоступа/ManagerModule.bsl index 584ade65f..3dad0fe45 100644 --- a/SSL/src/InformationRegisters/ЗначенияГруппДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ЗначенияГруппДоступа/ManagerModule.bsl @@ -256,7 +256,42 @@ Данные.Вставить("ИзмененияСоставаСтрок", Запрос.Выполнить().Выгрузить()); Данные.Вставить("ИзмеренияОтбора", "ГруппаДоступа"); - УправлениеДоступомСлужебный.ОбновитьРегистрСведений(Данные, ЕстьИзменения); + НачатьТранзакцию(); + Попытка + ЕстьТекущиеИзменения = Ложь; + УправлениеДоступомСлужебный.ОбновитьРегистрСведений(Данные, ЕстьТекущиеИзменения); + Если ЕстьТекущиеИзменения Тогда + ЕстьИзменения = Истина; + КонецЕсли; + + Если ЕстьТекущиеИзменения + И УправлениеДоступомСлужебный.ОграничиватьДоступНаУровнеЗаписейУниверсально() Тогда + + // Сброс кэша. + СтандартныеПодсистемыСервер.УстановитьПараметрРаботыРасширения( + "УправлениеДоступом.ЗначенияГруппДоступаВерсия", Неопределено, Истина); + + // Планирование обновления доступа. + ПустыеСсылкиТиповГруппИЗначений = УправлениеДоступомСлужебныйПовтИсп.ПустыеСсылкиТиповГруппИЗначений(); + СоставИзменений = Новый ТаблицаЗначений; + СоставИзменений.Колонки.Добавить("ГруппаДоступа", Новый ОписаниеТипов("СправочникСсылка.ГруппыДоступа")); + СоставИзменений.Колонки.Добавить("ТипЗначенийДоступа", Метаданные.ОпределяемыеТипы.ЗначениеДоступа.Тип); + + Для Каждого Строка Из Данные.ИзмененияСоставаСтрок Цикл + НоваяСтрока = СоставИзменений.Добавить(); + НоваяСтрока.ГруппаДоступа = Строка.ГруппаДоступа; + НоваяСтрока.ТипЗначенийДоступа = ПустыеСсылкиТиповГруппИЗначений.Получить(ТипЗнч(Строка.ЗначениеДоступа)); + КонецЦикла; + СоставИзменений.Свернуть("ГруппаДоступа, ТипЗначенийДоступа"); + + УправлениеДоступомСлужебный.ЗапланироватьОбновлениеДоступаПриИзмененииРазрешенныхЗначений(СоставИзменений); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры @@ -489,7 +524,32 @@ Данные.Вставить("ИзмененияСоставаСтрок", Запрос.Выполнить().Выгрузить()); Данные.Вставить("ИзмеренияОтбора", "ГруппаДоступа"); - УправлениеДоступомСлужебный.ОбновитьРегистрСведений(Данные, ЕстьИзменения); + НачатьТранзакцию(); + Попытка + ЕстьТекущиеИзменения = Ложь; + УправлениеДоступомСлужебный.ОбновитьРегистрСведений(Данные, ЕстьТекущиеИзменения); + Если ЕстьТекущиеИзменения Тогда + ЕстьИзменения = Истина; + КонецЕсли; + + Если ЕстьТекущиеИзменения + И УправлениеДоступомСлужебный.ОграничиватьДоступНаУровнеЗаписейУниверсально() Тогда + + // Сброс кэша. + СтандартныеПодсистемыСервер.УстановитьПараметрРаботыРасширения( + "УправлениеДоступом.ЗначенияГруппДоступаВерсия", Неопределено, Истина); + + // Планирование обновления доступа. + СоставИзменений = Данные.ИзмененияСоставаСтрок.Скопировать(, "ГруппаДоступа, ТипЗначенийДоступа"); + СоставИзменений.Свернуть("ГруппаДоступа, ТипЗначенийДоступа"); + + УправлениеДоступомСлужебный.ЗапланироватьОбновлениеДоступаПриИзмененииРазрешенныхЗначений(СоставИзменений); + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Form.form b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Form.form index 6bf5ca6d0..9307bcbfc 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Form.form +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Form.form @@ -135,6 +135,10 @@ Left true + + AfterDeleteRow + ИсполнителиПослеУдаления + ИсполнителиСтрокаПоиска 16 diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Module.bsl b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Module.bsl index 726750946..43f0faa22 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Module.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Module.bsl @@ -39,6 +39,16 @@ #КонецОбласти +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ИсполнителиПослеУдаления(Элемент) + Оповестить("Запись_РолеваяАдресация", Неопределено, Неопределено); +КонецПроцедуры + +#КонецОбласти + + #Область СлужебныеПроцедурыИФункции &НаСервере @@ -60,4 +70,5 @@ КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРолиСОбъектомАдресации/Module.bsl b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРолиСОбъектомАдресации/Module.bsl index 64b0b2ca3..778dc3012 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРолиСОбъектомАдресации/Module.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРолиСОбъектомАдресации/Module.bsl @@ -53,18 +53,25 @@ Запрос.УстановитьПараметр("Ссылка", Роль); РезультатЗапроса = Запрос.Выполнить(); - ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); - - РольДоступнаДляПользователей = Ложь; УРолиНеНазначеныВнешниеПользователи = Истина; - Пока ВыборкаДетальныеЗаписи.Следующий() Цикл - Назначение.Добавить(ВыборкаДетальныеЗаписи.ТипПользователей); - Если ВыборкаДетальныеЗаписи.ТипПользователей = Справочники.Пользователи.ПустаяСсылка() Тогда - РольДоступнаДляПользователей = Истина; - Иначе - УРолиНеНазначеныВнешниеПользователи = Ложь; - КонецЕсли; - КонецЦикла; + + Если НЕ РезультатЗапроса.Пустой() Тогда + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + + РольДоступнаДляПользователей = Ложь; + + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + Назначение.Добавить(ВыборкаДетальныеЗаписи.ТипПользователей); + Если ВыборкаДетальныеЗаписи.ТипПользователей = Справочники.Пользователи.ПустаяСсылка() Тогда + РольДоступнаДляПользователей = Истина; + Иначе + УРолиНеНазначеныВнешниеПользователи = Ложь; + КонецЕсли; + + КонецЦикла; + Иначе + РольДоступнаДляПользователей = Истина; + КонецЕсли; Если УРолиНеНазначеныВнешниеПользователи Тогда РольДоступнаДляВнешнихПользователей = Ложь; @@ -79,6 +86,14 @@ &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) УстановитьОтборНабораЗаписей(); + + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + КонецПроцедуры &НаСервере diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/РолиИИсполнителиЗадач/Module.bsl b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/РолиИИсполнителиЗадач/Module.bsl index 308d58c81..73b800099 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/РолиИИсполнителиЗадач/Module.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/РолиИИсполнителиЗадач/Module.bsl @@ -15,9 +15,11 @@ &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + Если ИмяСобытия = "Запись_РолеваяАдресация" Тогда ОбновитьДанныеЭлементов(); - КонецЕсли; + КонецЕсли; + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Form.form index 8958b68ce..fcf717f34 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Form.form @@ -256,6 +256,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -384,6 +385,10 @@ + + AfterWrite + ПослеЗаписи + BeforeWriteAtServer ПередЗаписьюНаСервере diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Module.bsl index 9f6709c2b..461ddec49 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Module.bsl @@ -22,6 +22,11 @@ КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ПослеЗаписи(ПараметрыЗаписи) + Оповестить("Запись_РолеваяАдресация", ПараметрыЗаписи, Запись.РольИсполнителя); +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы @@ -125,4 +130,5 @@ КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/ManagerModule.bsl b/SSL/src/InformationRegisters/ИсполнителиЗадач/ManagerModule.bsl index e69de29bb..ef5b3134f 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/ManagerModule.bsl @@ -0,0 +1,25 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +#Область ДляВызоваИзДругихПодсистем + +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.ТекстДляВнешнихПользователей = + "РазрешитьЧтениеИзменение + |ГДЕ + | ЗначениеРазрешено(Выразить(Исполнитель КАК Справочник.ВнешниеПользователи))"; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + +#КонецОбласти + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/InformationRegisters/ИсторияАдресныхОбъектов/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ИсторияАдресныхОбъектов/Forms/ФормаСписка/Form.form deleted file mode 100644 index e2c9ea1a5..000000000 --- a/SSL/src/InformationRegisters/ИсторияАдресныхОбъектов/Forms/ФормаСписка/Form.form +++ /dev/null @@ -1,996 +0,0 @@ - - - - СписокКомпоновщикНастроекПользовательскиеНастройки - 1 - true - true - - true - - - <key>ru</key> - <value>Группа пользовательских настроек</value> - - - СписокКомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка - 2 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - WeakSeparation - true - true - Auto - Auto - - - - Список - 3 - - <key>ru</key> - <value>Список</value> - - true - true - - true - - - Список - - true - None - - Уровень - 22 - true - true - - true - - - Список.Уровень - - true - - УровеньРасширеннаяПодсказка - 24 - Label - true - true - - Left - - - - УровеньКонтекстноеМеню - 23 - true - - LabelField - Enter - true - Left - true - - true - true - - - - КодСубъектаРФ - 25 - true - true - - true - - - Список.КодСубъектаРФ - - true - - КодСубъектаРФРасширеннаяПодсказка - 27 - Label - true - true - - Left - - - - КодСубъектаРФКонтекстноеМеню - 26 - true - - LabelField - Enter - true - Left - true - - true - true - - - - КодОкруга - 28 - true - true - - true - - - Список.КодОкруга - - true - - КодОкругаРасширеннаяПодсказка - 30 - Label - true - true - - Left - - - - КодОкругаКонтекстноеМеню - 29 - true - - LabelField - Enter - true - Left - true - - true - true - - - - КодРайона - 31 - true - true - - true - - - Список.КодРайона - - true - - КодРайонаРасширеннаяПодсказка - 33 - Label - true - true - - Left - - - - КодРайонаКонтекстноеМеню - 32 - true - - LabelField - Enter - true - Left - true - - true - true - - - - АдресныйОбъект - 82 - true - true - - true - - - Список.АдресныйОбъект - - - АдресныйОбъектРасширеннаяПодсказка - 84 - Label - true - true - - Left - - - - АдресныйОбъектКонтекстноеМеню - 83 - true - - LabelField - Enter - true - Left - true - - true - true - - - - КодГорода - 34 - true - true - - true - - - Список.КодГорода - - true - - КодГородаРасширеннаяПодсказка - 36 - Label - true - true - - Left - - - - КодГородаКонтекстноеМеню - 35 - true - - LabelField - Enter - true - Left - true - - true - true - - - - КодВнутригородскогоРайона - 37 - true - true - - true - - - Список.КодВнутригородскогоРайона - - true - - КодВнутригородскогоРайонаРасширеннаяПодсказка - 39 - Label - true - true - - Left - - - - КодВнутригородскогоРайонаКонтекстноеМеню - 38 - true - - LabelField - Enter - true - Left - true - - true - true - - - - КодНаселенногоПункта - 40 - true - true - - true - - - Список.КодНаселенногоПункта - - true - - КодНаселенногоПунктаРасширеннаяПодсказка - 42 - Label - true - true - - Left - - - - КодНаселенногоПунктаКонтекстноеМеню - 41 - true - - LabelField - Enter - true - Left - true - - true - true - - - - КодУлицы - 43 - true - true - - true - - - Список.КодУлицы - - true - - КодУлицыРасширеннаяПодсказка - 45 - Label - true - true - - Left - - - - КодУлицыКонтекстноеМеню - 44 - true - - LabelField - Enter - true - Left - true - - true - true - - - - КодДополнительногоЭлемента - 46 - true - true - - true - - - Список.КодДополнительногоЭлемента - - true - - КодДополнительногоЭлементаРасширеннаяПодсказка - 48 - Label - true - true - - Left - - - - КодДополнительногоЭлементаКонтекстноеМеню - 47 - true - - LabelField - Enter - true - Left - true - - true - true - - - - КодПодчиненногоЭлемента - 49 - true - true - - true - - - Список.КодПодчиненногоЭлемента - - true - - КодПодчиненногоЭлементаРасширеннаяПодсказка - 51 - Label - true - true - - Left - - - - КодПодчиненногоЭлементаКонтекстноеМеню - 50 - true - - LabelField - Enter - true - Left - true - - true - true - - - - ТекущийКодСубъектаРФ - 52 - true - true - - true - - - Список.ТекущийКодСубъектаРФ - - true - - ТекущийКодСубъектаРФРасширеннаяПодсказка - 54 - Label - true - true - - Left - - - - ТекущийКодСубъектаРФКонтекстноеМеню - 53 - true - - LabelField - Enter - true - Left - true - - true - true - - - - ПочтовыйИндекс - 55 - true - true - - true - - - Список.ПочтовыйИндекс - - true - - ПочтовыйИндексРасширеннаяПодсказка - 57 - Label - true - true - - Left - - - - ПочтовыйИндексКонтекстноеМеню - 56 - true - - LabelField - Enter - true - Left - true - - true - true - - - - Наименование - 58 - true - true - - true - - - Список.Наименование - - true - - НаименованиеРасширеннаяПодсказка - 60 - Label - true - true - - Left - - - - НаименованиеКонтекстноеМеню - 59 - true - - LabelField - Enter - true - Left - true - - true - true - - - - Сокращение - 61 - true - true - - true - - - Список.Сокращение - - true - - СокращениеРасширеннаяПодсказка - 63 - Label - true - true - - Left - - - - СокращениеКонтекстноеМеню - 62 - true - - LabelField - Enter - true - Left - true - - true - true - - - - КодКЛАДР - 64 - true - true - - true - - - Список.КодКЛАДР - - true - - КодКЛАДРРасширеннаяПодсказка - 66 - Label - true - true - - Left - - - - КодКЛАДРКонтекстноеМеню - 65 - true - - LabelField - Enter - true - Left - true - - true - true - - - - НачалоДействияЗаписи - 67 - true - true - - true - - - Список.НачалоДействияЗаписи - - true - - НачалоДействияЗаписиРасширеннаяПодсказка - 69 - Label - true - true - - Left - - - - НачалоДействияЗаписиКонтекстноеМеню - 68 - true - - LabelField - Enter - true - Left - true - - true - true - - - - ОкончаниеДействияЗаписи - 70 - true - true - - true - - - Список.ОкончаниеДействияЗаписи - - true - - ОкончаниеДействияЗаписиРасширеннаяПодсказка - 72 - Label - true - true - - Left - - - - ОкончаниеДействияЗаписиКонтекстноеМеню - 71 - true - - LabelField - Enter - true - Left - true - - true - true - - - - Операция - 73 - true - true - - true - - - Список.Операция - - true - - ОперацияРасширеннаяПодсказка - 75 - Label - true - true - - Left - - - - ОперацияКонтекстноеМеню - 74 - true - - LabelField - Enter - true - Left - true - - true - true - - - - Идентификатор - 76 - true - true - - true - - - Список.Идентификатор - - - ИдентификаторРасширеннаяПодсказка - 78 - Label - true - true - - Left - - - - ИдентификаторКонтекстноеМеню - 77 - true - - LabelField - Enter - true - Left - true - - true - true - - - - Дополнительно - 79 - true - true - - true - - - Список.Дополнительно - - - ДополнительноРасширеннаяПодсказка - 81 - Label - true - true - - Left - - - - ДополнительноКонтекстноеМеню - 80 - true - - LabelField - Enter - true - Left - true - - true - true - - - None - - СписокКоманднаяПанель - 5 - Left - - - СписокСтрокаПоиска - 7 - - СписокСтрокаПоискаРасширеннаяПодсказка - 11 - Label - true - true - - Left - - - - СписокСтрокаПоискаКонтекстноеМеню - 10 - true - - Список - - true - - - - СписокСостояниеПросмотра - 12 - - СписокСостояниеПросмотраРасширеннаяПодсказка - 16 - Label - true - true - - Left - - - - СписокСостояниеПросмотраКонтекстноеМеню - 15 - true - - ViewStatusAddition - Список - - true - - - - СписокУправлениеПоиском - 17 - - СписокУправлениеПоискомРасширеннаяПодсказка - 21 - Label - true - true - - Left - - - - СписокУправлениеПоискомКонтекстноеМеню - 20 - true - - SearchControlAddition - Список - - true - - - - СписокРасширеннаяПодсказка - 6 - Label - true - true - - Left - - - - СписокКонтекстноеМеню - 4 - true - - true - true - true - true - true - MultiRow -
      true
      - 1 - 1 - AutoUse - AutoUse - true - true - Auto - Auto - ExpandTopLevel - true - true - true - - Список.DefaultPicture - - true - - 60 - - 0001-01-01T00:00:00 - 0001-01-01T00:00:00 - - - true - true - СписокКомпоновщикНастроекПользовательскиеНастройки - -
      - - ФормаКоманднаяПанель - -1 - Left - true - - DontBlock - true - true - true - Vertical - true - true - true - auto - true - - Список - 1 - - DynamicList - - - true - - - true - -
      true
      - - InformationRegister.ИсторияАдресныхОбъектов - true - true - true - true - -
      - - - - - -
      diff --git a/SSL/src/InformationRegisters/ИсторияАдресныхОбъектов/ИсторияАдресныхОбъектов.mdo b/SSL/src/InformationRegisters/ИсторияАдресныхОбъектов/ИсторияАдресныхОбъектов.mdo index d71189b16..1a40b0ab8 100644 --- a/SSL/src/InformationRegisters/ИсторияАдресныхОбъектов/ИсторияАдресныхОбъектов.mdo +++ b/SSL/src/InformationRegisters/ИсторияАдресныхОбъектов/ИсторияАдресныхОбъектов.mdo @@ -1,13 +1,13 @@ - + - - - - - - - + + + + + + + ИсторияАдресныхОбъектов @@ -16,7 +16,6 @@ true InDialog - InformationRegister.ИсторияАдресныхОбъектов.Form.ФормаСписка Use Active @@ -51,75 +50,42 @@ Managed - - ПочтовыйИндекс + + АдресныйОбъект ru - Почтовый индекс + Адресный объект - - Number - - 6 - - - - - Use - - - - Наименование - - ru - Наименование - - - String - - 120 - - - - - Use - - Index - - - Сокращение - - ru - Сокращение - - - String - - 10 - - - - - Use - - Index - - - Дополнительно - - ru - Дополнительно - - Служебный идентификатор комбинации кодов ОКАТО и т.п. UUID + Index + Use + true + + + + ДополнительныеАдресныеСведения + + ru + Дополнительные адресные сведения + + Служебный идентификатор комбинации кодов ОКАТО и т.п. + + UUID + + + ru + Служебный идентификатор комбинации кодов ОКАТО, ОКТМО и т.п. + + + Use - - + + КодКЛАДР ru @@ -136,23 +102,26 @@ Use - - - АдресныйОбъект + + + Наименование ru - Адресный объект + Наименование - UUID + String + + 120 + + Index Use - true - - - + + + НачалоДействияЗаписи ru @@ -166,8 +135,8 @@ Use - - + + ОкончаниеДействияЗаписи ru @@ -181,8 +150,8 @@ Use - - + + Операция ru @@ -198,8 +167,43 @@ Use - - + + + Сокращение + + ru + Сокращение + + + String + + 10 + + + + + Index + Use + + + + ТекущийКодСубъектаРФ + + ru + Текущий код субъекта РФ + + + Number + + 2 + + + + + Use + + + Уровень ru @@ -215,9 +219,61 @@ Use - true + + + РодительскийИдентификатор + + ru + Родительский идентификатор + + + UUID + + + ru + Идентификатор родительского объекта (региона, района, города, населенного пункта) используется для связи с вышестоящими административно-территориальными адресными объектами. + + + + Index + Use + + + + МуниципальныйРодительскийИдентификатор + + ru + Муниципальный родительский идентификатор + + + UUID + + + ru + Идентификатор родительского объекта (региона, района, города, населенного пункта) используется для связи с вышестоящими муниципальными адресными объектами. + + + + Index + Use + + + + Идентификатор + + ru + Идентификатор + + + UUID + + + + Use + true + - + КодСубъектаРФ ru @@ -235,193 +291,7 @@ true - - КодОкруга - - ru - Код округа - - - Number - - 1 - - - - - Use - - true - - - КодРайона - - ru - Код района - - - Number - - 3 - - - - - Use - - true - - - КодГорода - - ru - Код города - - - Number - - 3 - - - - - Use - - true - - - КодВнутригородскогоРайона - - ru - Код внутригородского района - - - Number - - 3 - - - - - Use - - true - - - КодНаселенногоПункта - - ru - Код населенного пункта - - - Number - - 3 - - - - - Use - - true - - - КодУлицы - - ru - Код улицы - - - Number - - 4 - - - - - Use - - true - - - КодДополнительногоЭлемента - - ru - Код дополнительного элемента - - - Number - - 4 - - - - - Use - - true - - - КодПодчиненногоЭлемента - - ru - Код подчиненного элемента - - - Number - - 3 - - - - - Use - - true - - - Идентификатор - - ru - Идентификатор - - - UUID - - - - Use - true - - - - ТекущийКодСубъектаРФ - - ru - Текущий код субъекта РФ - - - Number - - 2 - - - - - Use - - true - - - ФормаСписка - - ru - Форма списка - - PersonalComputer - MobileDevice - - + Классификатор ru diff --git a/SSL/src/InformationRegisters/КлючиДоступаВнешнихПользователей/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/КлючиДоступаВнешнихПользователей/Forms/ФормаЗаписи/Form.form new file mode 100644 index 000000000..76e38a8af --- /dev/null +++ b/SSL/src/InformationRegisters/КлючиДоступаВнешнихПользователей/Forms/ФормаЗаписи/Form.form @@ -0,0 +1,240 @@ + + + + ВнешнийПользователь + 1 + true + true + + true + + + Запись.ВнешнийПользователь + + + ВнешнийПользовательРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + ВнешнийПользовательКонтекстноеМеню + 2 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + КлючДоступа + 4 + true + true + + true + + + Запись.КлючДоступа + + + КлючДоступаРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + КлючДоступаКонтекстноеМеню + 5 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + Изменение + 7 + true + true + + true + + + Запись.Изменение + + + ИзменениеРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + ИзменениеКонтекстноеМеню + 8 + true + + CheckBoxField + Enter + true + Left + true + + + + Добавление + 12 + true + true + + true + + + Запись.Добавление + + + ДобавлениеРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + + ДобавлениеКонтекстноеМеню + 13 + true + + CheckBoxField + Enter + true + Left + true + + + + ФормаКоманднаяПанель + -1 + + ФормаВключитьВозможностьРедактирования + 10 + true + true + + true + + + ФормаВключитьВозможностьРедактированияExtendedTooltip + 11 + Label + true + true + + Left + + + Form.Command.ВключитьВозможностьРедактирования + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + true + auto + true + + Запись + 1 + + InformationRegisterRecordManager.КлючиДоступаВнешнихПользователей + + + true + + + true + +
      true
      + true +
      + + ВключитьВозможностьРедактирования + + <key>ru</key> + <value>Включить возможность редактирования</value> + + 1 + + ru + Включить возможность редактирования только для целей поиска неисправности (требуется углубленное понимание работы механизма) + + + true + + + + ВключитьВозможностьРедактирования + + + DontUse + Auto + + + + + + +
      diff --git a/SSL/src/InformationRegisters/КлючиДоступаВнешнихПользователей/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/КлючиДоступаВнешнихПользователей/Forms/ФормаЗаписи/Module.bsl new file mode 100644 index 000000000..266dc08c4 --- /dev/null +++ b/SSL/src/InformationRegisters/КлючиДоступаВнешнихПользователей/Forms/ФормаЗаписи/Module.bsl @@ -0,0 +1,26 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + ТолькоПросмотр = Истина; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВключитьВозможностьРедактирования(Команда) + + ТолькоПросмотр = Ложь; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ДомаЗданияСтроения/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/КлючиДоступаВнешнихПользователей/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss similarity index 100% rename from SSL/src/InformationRegisters/ДомаЗданияСтроения/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss rename to SSL/src/InformationRegisters/КлючиДоступаВнешнихПользователей/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss diff --git a/SSL/src/InformationRegisters/КлючиДоступаВнешнихПользователей/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/КлючиДоступаВнешнихПользователей/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..9b58794f7 --- /dev/null +++ b/SSL/src/InformationRegisters/КлючиДоступаВнешнихПользователей/Forms/ФормаСписка/Form.form @@ -0,0 +1,444 @@ + + + + ГруппаПользовательскихНастроек + 1 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + ГруппаПользовательскихНастроекРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + КоманднаяПанель + 25 + + ФормаВключитьВозможностьРедактирования + 27 + true + true + + true + + + ФормаВключитьВозможностьРедактированияExtendedTooltip + 28 + Label + true + true + + Left + + + Form.Command.ВключитьВозможностьРедактирования + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + КоманднаяПанельРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + CommandBar + + Left + Form + + + + Список + 3 + + <key>ru</key> + <value>Список</value> + + true + true + + true + + + Список + + true + None + + ВнешнийПользователь + 16 + true + true + + true + + + Список.ВнешнийПользователь + + true + + ВнешнийПользовательРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + ВнешнийПользовательКонтекстноеМеню + 17 + true + + LabelField + Enter + true + Left + true + + true + true + + + + КлючДоступа + 19 + true + true + + true + + + Список.КлючДоступа + + true + + КлючДоступаРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + КлючДоступаКонтекстноеМеню + 20 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Изменение + 22 + true + true + + true + + + Список.Изменение + + true + + ИзменениеРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + ИзменениеКонтекстноеМеню + 23 + true + + CheckBoxField + Enter + true + Left + true + + + + Добавление + 29 + true + true + + true + + + Список.Добавление + + + ДобавлениеРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + ДобавлениеКонтекстноеМеню + 30 + true + + CheckBoxField + Enter + true + Left + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + true + true + true + true + true + MultiRow +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + ГруппаПользовательскихНастроек + +
      + + ФормаКоманднаяПанель + -1 + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + Список + 1 + + DynamicList + + + true + + + true + +
      true
      + + InformationRegister.КлючиДоступаВнешнихПользователей + true + true + true + true + +
      + + ВключитьВозможностьРедактирования + + <key>ru</key> + <value>Включить возможность редактирования</value> + + 1 + + ru + Включить возможность редактирования только для целей поиска неисправности (требуется углубленное понимание работы механизма) + + + true + + + + ВключитьВозможностьРедактирования + + + DontUse + Auto + + + + + + +
      diff --git a/SSL/src/InformationRegisters/КлючиДоступаВнешнихПользователей/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/КлючиДоступаВнешнихПользователей/Forms/ФормаСписка/Module.bsl new file mode 100644 index 000000000..266dc08c4 --- /dev/null +++ b/SSL/src/InformationRegisters/КлючиДоступаВнешнихПользователей/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,26 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + ТолькоПросмотр = Истина; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВключитьВозможностьРедактирования(Команда) + + ТолькоПросмотр = Ложь; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/КлючиДоступаВнешнихПользователей/КлючиДоступаВнешнихПользователей.mdo b/SSL/src/InformationRegisters/КлючиДоступаВнешнихПользователей/КлючиДоступаВнешнихПользователей.mdo new file mode 100644 index 000000000..2e9cbed5f --- /dev/null +++ b/SSL/src/InformationRegisters/КлючиДоступаВнешнихПользователей/КлючиДоступаВнешнихПользователей.mdo @@ -0,0 +1,154 @@ + + + + + + + + + + + + КлючиДоступаВнешнихПользователей + + ru + Ключи доступа внешних пользователей + + InDialog + InformationRegister.КлючиДоступаВнешнихПользователей.Form.ФормаЗаписи + InformationRegister.КлючиДоступаВнешнихПользователей.Form.ФормаСписка + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + ru + Ключ доступа внешнего пользователя + + + Изменение + + ru + Изменение + + + Boolean + + + ru + Если признак установлен, то разрешено не только чтение, но и изменение + + + + Use + Use + + + + Добавление + + ru + Добавление + + + Boolean + + + ru + Если признак установлен, то разрешено не только чтение и изменение, но и добавление + + + + Use + Use + + + + ВнешнийПользователь + + ru + Внешний пользователь + + + CatalogRef.ВнешниеПользователи + + + ru + Внешний пользователь, которому разрешен ключ доступа + + + + Use + + true + + + КлючДоступа + + ru + Ключ доступа + + + CatalogRef.КлючиДоступа + + + ru + Группа однотипных объектов или записей регистра с одинаковым доступом + + + + Index + Use + Use + + true + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + + ФормаЗаписи + + ru + Форма записи + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/InformationRegisters/КлючиДоступаГруппДоступа/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/КлючиДоступаГруппДоступа/Forms/ФормаЗаписи/Form.form new file mode 100644 index 000000000..6b36694a3 --- /dev/null +++ b/SSL/src/InformationRegisters/КлючиДоступаГруппДоступа/Forms/ФормаЗаписи/Form.form @@ -0,0 +1,240 @@ + + + + ГруппаДоступа + 1 + true + true + + true + + + Запись.ГруппаДоступа + + + ГруппаДоступаРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + ГруппаДоступаКонтекстноеМеню + 2 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + КлючДоступа + 4 + true + true + + true + + + Запись.КлючДоступа + + + КлючДоступаРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + КлючДоступаКонтекстноеМеню + 5 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + Изменение + 7 + true + true + + true + + + Запись.Изменение + + + ИзменениеРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + ИзменениеКонтекстноеМеню + 8 + true + + CheckBoxField + Enter + true + Left + true + + + + Добавление + 12 + true + true + + true + + + Запись.Добавление + + + ДобавлениеРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + + ДобавлениеКонтекстноеМеню + 13 + true + + CheckBoxField + Enter + true + Left + true + + + + ФормаКоманднаяПанель + -1 + + ФормаВключитьВозможностьРедактирования + 10 + true + true + + true + + + ФормаВключитьВозможностьРедактированияExtendedTooltip + 11 + Label + true + true + + Left + + + Form.Command.ВключитьВозможностьРедактирования + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + true + auto + true + + Запись + 1 + + InformationRegisterRecordManager.КлючиДоступаГруппДоступа + + + true + + + true + +
      true
      + true +
      + + ВключитьВозможностьРедактирования + + <key>ru</key> + <value>Включить возможность редактирования</value> + + 1 + + ru + Включить возможность редактирования только для целей поиска неисправности (требуется углубленное понимание работы механизма) + + + true + + + + ВключитьВозможностьРедактирования + + + DontUse + Auto + + + + + + +
      diff --git a/SSL/src/InformationRegisters/КлючиДоступаГруппДоступа/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/КлючиДоступаГруппДоступа/Forms/ФормаЗаписи/Module.bsl new file mode 100644 index 000000000..266dc08c4 --- /dev/null +++ b/SSL/src/InformationRegisters/КлючиДоступаГруппДоступа/Forms/ФормаЗаписи/Module.bsl @@ -0,0 +1,26 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + ТолькоПросмотр = Истина; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВключитьВозможностьРедактирования(Команда) + + ТолькоПросмотр = Ложь; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ИсторияАдресныхОбъектов/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/КлючиДоступаГруппДоступа/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss similarity index 100% rename from SSL/src/InformationRegisters/ИсторияАдресныхОбъектов/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss rename to SSL/src/InformationRegisters/КлючиДоступаГруппДоступа/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss diff --git a/SSL/src/InformationRegisters/ДомаЗданияСтроения/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/КлючиДоступаГруппДоступа/Forms/ФормаСписка/Form.form similarity index 65% rename from SSL/src/InformationRegisters/ДомаЗданияСтроения/Forms/ФормаСписка/Form.form rename to SSL/src/InformationRegisters/КлючиДоступаГруппДоступа/Forms/ФормаСписка/Form.form index 1daec0f71..0d37750e2 100644 --- a/SSL/src/InformationRegisters/ДомаЗданияСтроения/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/КлючиДоступаГруппДоступа/Forms/ФормаСписка/Form.form @@ -1,7 +1,7 @@ - СписокКомпоновщикНастроекПользовательскиеНастройки + ГруппаПользовательскихНастроек 1 true true @@ -12,8 +12,9 @@ ru Группа пользовательских настроек + false - СписокКомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка + ГруппаПользовательскихНастроекРасширеннаяПодсказка 2 Label true @@ -33,6 +34,61 @@ Auto
      + + КоманднаяПанель + 25 + + ФормаВключитьВозможностьРедактирования + 27 + true + true + + true + + + ФормаВключитьВозможностьРедактированияExtendedTooltip + 28 + Label + true + true + + Left + + + Form.Command.ВключитьВозможностьРедактирования + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + КоманднаяПанельРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + CommandBar + + Left + Form + + Список 3 @@ -51,7 +107,81 @@ true None - ПочтовыйИндекс + ГруппаДоступа + 16 + true + true + + true + + + Список.ГруппаДоступа + + true + + ГруппаДоступаРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + ГруппаДоступаКонтекстноеМеню + 17 + true + + LabelField + Enter + true + Left + true + + true + true + + + + КлючДоступа + 19 + true + true + + true + + + Список.КлючДоступа + + true + + КлючДоступаРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + КлючДоступаКонтекстноеМеню + 20 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Изменение 22 true true @@ -59,11 +189,11 @@ true - Список.ПочтовыйИндекс + Список.Изменение true - ПочтовыйИндексРасширеннаяПодсказка + ИзменениеРасширеннаяПодсказка 24 Label true @@ -73,35 +203,31 @@
      - ПочтовыйИндексКонтекстноеМеню + ИзменениеКонтекстноеМеню 23 true - LabelField + CheckBoxField Enter true Left true - - true - true - +
      - КодСубъектаРФ - 25 + Добавление + 29 true true true - Список.КодСубъектаРФ + Список.Добавление - true - КодСубъектаРФРасширеннаяПодсказка - 27 + ДобавлениеРасширеннаяПодсказка + 31 Label true true @@ -110,55 +236,16 @@ - КодСубъектаРФКонтекстноеМеню - 26 - true - - LabelField - Enter - true - Left - true - - true - true - - - - АдресныйОбъект - 28 - true - true - - true - - - Список.АдресныйОбъект - - - АдресныйОбъектРасширеннаяПодсказка + ДобавлениеКонтекстноеМеню 30 - Label - true - true - - Left - - - - АдресныйОбъектКонтекстноеМеню - 29 true - LabelField + CheckBoxField Enter true Left true - - true - true - + None @@ -171,7 +258,7 @@ 7 СписокСтрокаПоискаРасширеннаяПодсказка - 11 + 9 Label true true @@ -181,7 +268,7 @@ СписокСтрокаПоискаКонтекстноеМеню - 10 + 8 true Список @@ -191,10 +278,10 @@ СписокСостояниеПросмотра - 12 + 10 СписокСостояниеПросмотраРасширеннаяПодсказка - 16 + 12 Label true true @@ -204,7 +291,7 @@ СписокСостояниеПросмотраКонтекстноеМеню - 15 + 11 true ViewStatusAddition @@ -215,10 +302,10 @@ СписокУправлениеПоиском - 17 + 13 СписокУправлениеПоискомРасширеннаяПодсказка - 21 + 15 Label true true @@ -228,7 +315,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 20 + 14 true SearchControlAddition @@ -284,15 +371,18 @@ true true - СписокКомпоновщикНастроекПользовательскиеНастройки + ГруппаПользовательскихНастроек
      ФормаКоманднаяПанель -1 Left - true + + OnCreateAtServer + ПриСозданииНаСервере + DontBlock true true @@ -317,13 +407,35 @@
      true
      - InformationRegister.ДомаЗданияСтроения + InformationRegister.КлючиДоступаГруппДоступа true true true true + + ВключитьВозможностьРедактирования + + <key>ru</key> + <value>Включить возможность редактирования</value> + + 1 + + ru + Включить возможность редактирования только для целей поиска неисправности (требуется углубленное понимание работы механизма) + + + true + + + + ВключитьВозможностьРедактирования + + + DontUse + Auto + diff --git a/SSL/src/InformationRegisters/КлючиДоступаГруппДоступа/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/КлючиДоступаГруппДоступа/Forms/ФормаСписка/Module.bsl new file mode 100644 index 000000000..266dc08c4 --- /dev/null +++ b/SSL/src/InformationRegisters/КлючиДоступаГруппДоступа/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,26 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + ТолькоПросмотр = Истина; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВключитьВозможностьРедактирования(Команда) + + ТолькоПросмотр = Ложь; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/КлючиДоступаГруппДоступа/КлючиДоступаГруппДоступа.mdo b/SSL/src/InformationRegisters/КлючиДоступаГруппДоступа/КлючиДоступаГруппДоступа.mdo new file mode 100644 index 000000000..bc00c1b36 --- /dev/null +++ b/SSL/src/InformationRegisters/КлючиДоступаГруппДоступа/КлючиДоступаГруппДоступа.mdo @@ -0,0 +1,155 @@ + + + + + + + + + + + + КлючиДоступаГруппДоступа + + ru + Ключи доступа групп доступа + + InDialog + InformationRegister.КлючиДоступаГруппДоступа.Form.ФормаЗаписи + InformationRegister.КлючиДоступаГруппДоступа.Form.ФормаСписка + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + ru + Ключ доступа группы доступа + + + Изменение + + ru + Изменение + + + Boolean + + + ru + Если признак установлен, то разрешено не только чтение, но и изменение + + + + Use + Use + + + + Добавление + + ru + Добавление + + + Boolean + + + ru + Если признак установлен, то разрешено не только чтение и изменение, но и добавление + + + + Use + Use + + + + ГруппаДоступа + + ru + Группа доступа + + + CatalogRef.ГруппыДоступа + + + ru + Группа доступа, которой разрешен ключ доступа + + + + Use + Use + + true + + + КлючДоступа + + ru + Ключ доступа + + + CatalogRef.КлючиДоступа + + + ru + Группа однотипных объектов или записей регистра с одинаковым доступом + + + + Index + Use + Use + + true + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + + ФормаЗаписи + + ru + Форма записи + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/InformationRegisters/КлючиДоступаКОбъектам/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/КлючиДоступаКОбъектам/Forms/ФормаЗаписи/Form.form new file mode 100644 index 000000000..b4d1171dd --- /dev/null +++ b/SSL/src/InformationRegisters/КлючиДоступаКОбъектам/Forms/ФормаЗаписи/Form.form @@ -0,0 +1,215 @@ + + + + Объект + 1 + true + true + + true + + + Запись.Объект + + + ОбъектРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + ОбъектКонтекстноеМеню + 2 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + КлючДоступаПользователей + 4 + true + true + + true + + + Запись.КлючДоступаПользователей + + + КлючДоступаПользователейРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + КлючДоступаПользователейКонтекстноеМеню + 5 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + КлючДоступаВнешнихПользователей + 7 + true + true + + true + + + Запись.КлючДоступаВнешнихПользователей + + + КлючДоступаВнешнихПользователейРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + КлючДоступаВнешнихПользователейКонтекстноеМеню + 8 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ФормаКоманднаяПанель + -1 + + ФормаВключитьВозможностьРедактирования + 10 + true + true + + true + + + ФормаВключитьВозможностьРедактированияExtendedTooltip + 11 + Label + true + true + + Left + + + Form.Command.ВключитьВозможностьРедактирования + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + true + auto + true + + Запись + 1 + + InformationRegisterRecordManager.КлючиДоступаКОбъектам + + + true + + + true + +
      true
      + true +
      + + ВключитьВозможностьРедактирования + + <key>ru</key> + <value>Включить возможность редактирования</value> + + 1 + + ru + Включить возможность редактирования только для целей поиска неисправности (требуется углубленное понимание работы механизма) + + + true + + + + ВключитьВозможностьРедактирования + + + DontUse + Auto + + + + + + +
      diff --git a/SSL/src/InformationRegisters/КлючиДоступаКОбъектам/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/КлючиДоступаКОбъектам/Forms/ФормаЗаписи/Module.bsl new file mode 100644 index 000000000..266dc08c4 --- /dev/null +++ b/SSL/src/InformationRegisters/КлючиДоступаКОбъектам/Forms/ФормаЗаписи/Module.bsl @@ -0,0 +1,26 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + ТолькоПросмотр = Истина; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВключитьВозможностьРедактирования(Команда) + + ТолькоПросмотр = Ложь; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/КлючиДоступаКОбъектам/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss similarity index 100% rename from SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss rename to SSL/src/InformationRegisters/КлючиДоступаКОбъектам/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss diff --git a/SSL/src/InformationRegisters/КлючиДоступаКОбъектам/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/КлючиДоступаКОбъектам/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..550203734 --- /dev/null +++ b/SSL/src/InformationRegisters/КлючиДоступаКОбъектам/Forms/ФормаСписка/Form.form @@ -0,0 +1,460 @@ + + + + ГруппаПользовательскихНастроек + 1 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + ГруппаПользовательскихНастроекРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + КоманднаяПанель + 28 + + ФормаВключитьВозможностьРедактирования + 30 + true + true + + true + + + ФормаВключитьВозможностьРедактированияExtendedTooltip + 31 + Label + true + true + + Left + + + Form.Command.ВключитьВозможностьРедактирования + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + КоманднаяПанельРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + CommandBar + + Left + Form + + + + Список + 3 + + <key>ru</key> + <value>Список</value> + + true + true + + true + + + Список + + true + None + + ТипОбъекта + 25 + + <key>ru</key> + <value>Тип объекта</value> + + true + true + + + Список.ТипОбъекта + + + ТипОбъектаРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + + ТипОбъектаКонтекстноеМеню + 26 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Объект + 16 + true + true + + true + + + Список.Объект + + true + + ОбъектРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + ОбъектКонтекстноеМеню + 17 + true + + LabelField + Enter + true + Left + true + + true + true + + + + КлючДоступаПользователей + 19 + true + true + + true + + + Список.КлючДоступаПользователей + + true + + КлючДоступаПользователейРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + КлючДоступаПользователейКонтекстноеМеню + 20 + true + + LabelField + Enter + true + Left + true + + true + true + + + + КлючДоступаВнешнихПользователей + 22 + true + true + + true + + + Список.КлючДоступаВнешнихПользователей + + true + + КлючДоступаВнешнихПользователейРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + КлючДоступаВнешнихПользователейКонтекстноеМеню + 23 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + true + true + true + true + true + MultiRow +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + ГруппаПользовательскихНастроек + +
      + + ФормаКоманднаяПанель + -1 + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + Список + 1 + + DynamicList + + + true + + + true + +
      true
      + + ВЫБРАТЬ + ТИПЗНАЧЕНИЯ(РегистрСведенийКлючиДоступаКОбъектам.Объект) КАК ТипОбъекта, + РегистрСведенийКлючиДоступаКОбъектам.Объект КАК Объект, + РегистрСведенийКлючиДоступаКОбъектам.КлючДоступаПользователей КАК КлючДоступаПользователей, + РегистрСведенийКлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей КАК КлючДоступаВнешнихПользователей +ИЗ + РегистрСведений.КлючиДоступаКОбъектам КАК РегистрСведенийКлючиДоступаКОбъектам + InformationRegister.КлючиДоступаКОбъектам + true + true + true + true + true + +
      + + ВключитьВозможностьРедактирования + + <key>ru</key> + <value>Включить возможность редактирования</value> + + 1 + + ru + Включить возможность редактирования только для целей поиска неисправности (требуется углубленное понимание работы механизма) + + + true + + + + ВключитьВозможностьРедактирования + + + DontUse + Auto + + + + + + +
      diff --git a/SSL/src/InformationRegisters/КлючиДоступаКОбъектам/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/КлючиДоступаКОбъектам/Forms/ФормаСписка/Module.bsl new file mode 100644 index 000000000..266dc08c4 --- /dev/null +++ b/SSL/src/InformationRegisters/КлючиДоступаКОбъектам/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,26 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + ТолькоПросмотр = Истина; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВключитьВозможностьРедактирования(Команда) + + ТолькоПросмотр = Ложь; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/КлючиДоступаКОбъектам/КлючиДоступаКОбъектам.mdo b/SSL/src/InformationRegisters/КлючиДоступаКОбъектам/КлючиДоступаКОбъектам.mdo new file mode 100644 index 000000000..7e9620905 --- /dev/null +++ b/SSL/src/InformationRegisters/КлючиДоступаКОбъектам/КлючиДоступаКОбъектам.mdo @@ -0,0 +1,135 @@ + + + + + + + + + + + + КлючиДоступаКОбъектам + + ru + Ключи доступа к объектам + + InDialog + InformationRegister.КлючиДоступаКОбъектам.Form.ФормаЗаписи + InformationRegister.КлючиДоступаКОбъектам.Form.ФормаСписка + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + ru + Ключ доступа к объекту + + + КлючДоступаПользователей + + ru + Ключ доступа пользователей + + + CatalogRef.КлючиДоступа + + + ru + Группа однотипных объектов с одинаковым доступом (для пользователей) + + + + Use + Use + + + + КлючДоступаВнешнихПользователей + + ru + Ключ доступа внешних пользователей + + + CatalogRef.КлючиДоступа + + + ru + Группа однотипных объектов с одинаковым доступом (для внешних пользователей) + + + + Use + Use + + + + Объект + + ru + Объект + + + DefinedType.ВладелецЗначенийКлючейДоступа + + + ru + Элемент справочника, документ или другой объект, доступ к которому ограничивается + + + + Use + Use + true + + true + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + + ФормаЗаписи + + ru + Форма записи + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/InformationRegisters/КлючиДоступаКРегистрам/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/КлючиДоступаКРегистрам/Forms/ФормаЗаписи/Form.form new file mode 100644 index 000000000..f0c3189ee --- /dev/null +++ b/SSL/src/InformationRegisters/КлючиДоступаКРегистрам/Forms/ФормаЗаписи/Form.form @@ -0,0 +1,412 @@ + + + + Регистр + 1 + true + true + + true + + + Запись.Регистр + + + РегистрРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + РегистрКонтекстноеМеню + 2 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ДляВнешнихПользователей + 4 + true + true + + true + + + Запись.ДляВнешнихПользователей + + + ДляВнешнихПользователейРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + ДляВнешнихПользователейКонтекстноеМеню + 5 + true + + CheckBoxField + Enter + true + Left + true + + + + Поле1 + 7 + true + true + + true + + + Запись.Поле1 + + + Поле1РасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + Поле1КонтекстноеМеню + 8 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + Поле2 + 10 + true + true + + true + + + Запись.Поле2 + + + Поле2РасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + Поле2КонтекстноеМеню + 11 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + Поле3 + 13 + true + true + + true + + + Запись.Поле3 + + + Поле3РасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + Поле3КонтекстноеМеню + 14 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + Поле4 + 16 + true + true + + true + + + Запись.Поле4 + + + Поле4РасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + Поле4КонтекстноеМеню + 17 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + Поле5 + 19 + true + true + + true + + + Запись.Поле5 + + + Поле5РасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + Поле5КонтекстноеМеню + 20 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + КлючДоступа + 22 + true + true + + true + + + Запись.КлючДоступа + + + КлючДоступаРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + КлючДоступаКонтекстноеМеню + 23 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ФормаКоманднаяПанель + -1 + + ФормаВключитьВозможностьРедактирования + 25 + true + true + + true + + + ФормаВключитьВозможностьРедактированияExtendedTooltip + 26 + Label + true + true + + Left + + + Form.Command.ВключитьВозможностьРедактирования + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + true + auto + true + + Запись + 1 + + InformationRegisterRecordManager.КлючиДоступаКРегистрам + + + true + + + true + +
      true
      + true +
      + + ВключитьВозможностьРедактирования + + <key>ru</key> + <value>Включить возможность редактирования</value> + + 1 + + ru + Включить возможность редактирования только для целей поиска неисправности (требуется углубленное понимание работы механизма) + + + true + + + + ВключитьВозможностьРедактирования + + + DontUse + Auto + + + + + + +
      diff --git a/SSL/src/InformationRegisters/КлючиДоступаКРегистрам/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/КлючиДоступаКРегистрам/Forms/ФормаЗаписи/Module.bsl new file mode 100644 index 000000000..266dc08c4 --- /dev/null +++ b/SSL/src/InformationRegisters/КлючиДоступаКРегистрам/Forms/ФормаЗаписи/Module.bsl @@ -0,0 +1,26 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + ТолькоПросмотр = Истина; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВключитьВозможностьРедактирования(Команда) + + ТолькоПросмотр = Ложь; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/КлючиДоступаКРегистрам/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/КлючиДоступаКРегистрам/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..61e6fb4bb --- /dev/null +++ b/SSL/src/InformationRegisters/КлючиДоступаКРегистрам/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,17 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/КлючиДоступаКРегистрам/Forms/ФормаСписка/Form.form similarity index 56% rename from SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ФормаСписка/Form.form rename to SSL/src/InformationRegisters/КлючиДоступаКРегистрам/Forms/ФормаСписка/Form.form index b6c38229a..5a2cef744 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/КлючиДоступаКРегистрам/Forms/ФормаСписка/Form.form @@ -1,72 +1,7 @@ - ГруппаОтбор - 58 - - - <key>ru</key> - <value>Дополнение отбор</value> - - true - true - - true - - ДополнениеОтбор - 60 - - ДополнениеОтборРасширеннаяПодсказка - 62 - Label - true - true - - Left - - - - ДополнениеОтборКонтекстноеМеню - 61 - true - - ViewStatusAddition - Список - - true - - - true - true - - true - - - <key>ru</key> - <value>Отбор</value> - - - ГруппаОтборРасширеннаяПодсказка - 59 - Label - true - true - - Left - - - UsualGroup - - Auto - WeakSeparation - true - true - Auto - Auto - - - - СписокКомпоновщикНастроекПользовательскиеНастройки + ГруппаПользовательскихНастроек 1 true true @@ -77,8 +12,9 @@ ru Группа пользовательских настроек + false - СписокКомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка + ГруппаПользовательскихНастроекРасширеннаяПодсказка 2 Label true @@ -98,6 +34,61 @@ Auto + + КоманднаяПанель + 40 + + ФормаВключитьВозможностьРедактирования + 42 + true + true + + true + + + ФормаВключитьВозможностьРедактированияExtendedTooltip + 43 + Label + true + true + + Left + + + Form.Command.ВключитьВозможностьРедактирования + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + КоманднаяПанельРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + CommandBar + + Left + Form + + Список 3 @@ -116,159 +107,7 @@ true None - Актуален - 63 - true - true - - true - - - Список.Актуален - - None - - ru - Признак актуальности адреса - - - АктуаленРасширеннаяПодсказка - 65 - Label - true - true - - Left - - - - АктуаленКонтекстноеМеню - 64 - true - - CheckBoxField - Enter - true - - CommonPicture.Успешно - - Left - true - - - - КодСубъектаРФ - 7 - true - true - - true - - - Список.КодСубъектаРФ - - true - - КодСубъектаРФРасширеннаяПодсказка - 9 - Label - true - true - - Left - - - - КодСубъектаРФКонтекстноеМеню - 8 - true - - LabelField - Enter - true - Left - true - - true - true - - - - КодОкруга - 10 - true - true - - true - - - Список.КодОкруга - - true - - КодОкругаРасширеннаяПодсказка - 12 - Label - true - true - - Left - - - - КодОкругаКонтекстноеМеню - 11 - true - - LabelField - Enter - true - Left - true - - true - true - - - - КодРайона - 13 - true - true - - true - - - Список.КодРайона - - true - - КодРайонаРасширеннаяПодсказка - 15 - Label - true - true - - Left - - - - КодРайонаКонтекстноеМеню - 14 - true - - LabelField - Enter - true - Left - true - - true - true - - - - КодГорода + Регистр 16 true true @@ -276,11 +115,11 @@ true - Список.КодГорода + Список.Регистр true - КодГородаРасширеннаяПодсказка + РегистрРасширеннаяПодсказка 18 Label true @@ -290,7 +129,7 @@ - КодГородаКонтекстноеМеню + РегистрКонтекстноеМеню 17 true @@ -305,19 +144,23 @@ - КодВнутригородскогоРайона + ДляВнешнихПользователей 19 + + <key>ru</key> + <value>ВП</value> + true true true - Список.КодВнутригородскогоРайона + Список.ДляВнешнихПользователей true - КодВнутригородскогоРайонаРасширеннаяПодсказка + ДляВнешнихПользователейРасширеннаяПодсказка 21 Label true @@ -327,22 +170,19 @@ - КодВнутригородскогоРайонаКонтекстноеМеню + ДляВнешнихПользователейКонтекстноеМеню 20 true - LabelField + CheckBoxField Enter true Left true - - true - true - + - КодНаселенногоПункта + Поле1 22 true true @@ -350,11 +190,11 @@ true - Список.КодНаселенногоПункта + Список.Поле1 true - КодНаселенногоПунктаРасширеннаяПодсказка + Поле1РасширеннаяПодсказка 24 Label true @@ -364,7 +204,7 @@ - КодНаселенногоПунктаКонтекстноеМеню + Поле1КонтекстноеМеню 23 true @@ -379,7 +219,7 @@ - КодУлицы + Поле2 25 true true @@ -387,11 +227,11 @@ true - Список.КодУлицы + Список.Поле2 true - КодУлицыРасширеннаяПодсказка + Поле2РасширеннаяПодсказка 27 Label true @@ -401,7 +241,7 @@ - КодУлицыКонтекстноеМеню + Поле2КонтекстноеМеню 26 true @@ -416,7 +256,7 @@ - КодДополнительногоЭлемента + Поле3 28 true true @@ -424,11 +264,11 @@ true - Список.КодДополнительногоЭлемента + Список.Поле3 true - КодДополнительногоЭлементаРасширеннаяПодсказка + Поле3РасширеннаяПодсказка 30 Label true @@ -438,7 +278,7 @@ - КодДополнительногоЭлементаКонтекстноеМеню + Поле3КонтекстноеМеню 29 true @@ -453,7 +293,7 @@ - КодПодчиненногоЭлемента + Поле4 31 true true @@ -461,11 +301,11 @@ true - Список.КодПодчиненногоЭлемента + Список.Поле4 true - КодПодчиненногоЭлементаРасширеннаяПодсказка + Поле4РасширеннаяПодсказка 33 Label true @@ -475,7 +315,7 @@ - КодПодчиненногоЭлементаКонтекстноеМеню + Поле4КонтекстноеМеню 32 true @@ -490,7 +330,7 @@ - Уровень + Поле5 34 true true @@ -498,11 +338,11 @@ true - Список.Уровень + Список.Поле5 true - УровеньРасширеннаяПодсказка + Поле5РасширеннаяПодсказка 36 Label true @@ -512,7 +352,7 @@ - УровеньКонтекстноеМеню + Поле5КонтекстноеМеню 35 true @@ -527,7 +367,7 @@ - ПочтовыйИндекс + КлючДоступа 37 true true @@ -535,11 +375,11 @@ true - Список.ПочтовыйИндекс + Список.КлючДоступа true - ПочтовыйИндексРасширеннаяПодсказка + КлючДоступаРасширеннаяПодсказка 39 Label true @@ -549,7 +389,7 @@ - ПочтовыйИндексКонтекстноеМеню + КлючДоступаКонтекстноеМеню 38 true @@ -563,116 +403,6 @@ true - - Наименование - 40 - true - true - - true - - - Список.Наименование - - true - - НаименованиеРасширеннаяПодсказка - 42 - Label - true - true - - Left - - - - НаименованиеКонтекстноеМеню - 41 - true - - LabelField - Enter - true - Left - true - - true - true - - - - Сокращение - 43 - true - true - - true - - - Список.Сокращение - - true - - СокращениеРасширеннаяПодсказка - 45 - Label - true - true - - Left - - - - СокращениеКонтекстноеМеню - 44 - true - - LabelField - Enter - true - Left - true - - true - true - - - - Идентификатор - 55 - true - true - - true - - - Список.Идентификатор - - - ИдентификаторРасширеннаяПодсказка - 57 - Label - true - true - - Left - - - - ИдентификаторКонтекстноеМеню - 56 - true - - LabelField - Enter - true - Left - true - - true - true - - None СписокКоманднаяПанель @@ -681,10 +411,10 @@ СписокСтрокаПоиска - 46 + 7 СписокСтрокаПоискаРасширеннаяПодсказка - 48 + 9 Label true true @@ -694,7 +424,7 @@ СписокСтрокаПоискаКонтекстноеМеню - 47 + 8 true Список @@ -704,10 +434,10 @@ СписокСостояниеПросмотра - 49 + 10 СписокСостояниеПросмотраРасширеннаяПодсказка - 51 + 12 Label true true @@ -717,7 +447,7 @@ СписокСостояниеПросмотраКонтекстноеМеню - 50 + 11 true ViewStatusAddition @@ -728,10 +458,10 @@ СписокУправлениеПоиском - 52 + 13 СписокУправлениеПоискомРасширеннаяПодсказка - 54 + 15 Label true true @@ -741,7 +471,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 53 + 14 true SearchControlAddition @@ -797,15 +527,18 @@ true true - СписокКомпоновщикНастроекПользовательскиеНастройки + ГруппаПользовательскихНастроек ФормаКоманднаяПанель -1 Left - true + + OnCreateAtServer + ПриСозданииНаСервере + DontBlock true true @@ -830,13 +563,35 @@
      true
      - InformationRegister.АдресныеОбъекты + InformationRegister.КлючиДоступаКРегистрам true true true true + + ВключитьВозможностьРедактирования + + <key>ru</key> + <value>Включить возможность редактирования</value> + + 1 + + ru + Включить возможность редактирования только для целей поиска неисправности (требуется углубленное понимание работы механизма) + + + true + + + + ВключитьВозможностьРедактирования + + + DontUse + Auto + diff --git a/SSL/src/InformationRegisters/КлючиДоступаКРегистрам/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/КлючиДоступаКРегистрам/Forms/ФормаСписка/Module.bsl new file mode 100644 index 000000000..266dc08c4 --- /dev/null +++ b/SSL/src/InformationRegisters/КлючиДоступаКРегистрам/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,26 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + ТолькоПросмотр = Истина; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВключитьВозможностьРедактирования(Команда) + + ТолькоПросмотр = Ложь; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/КлючиДоступаКРегистрам/КлючиДоступаКРегистрам.mdo b/SSL/src/InformationRegisters/КлючиДоступаКРегистрам/КлючиДоступаКРегистрам.mdo new file mode 100644 index 000000000..78d640168 --- /dev/null +++ b/SSL/src/InformationRegisters/КлючиДоступаКРегистрам/КлючиДоступаКРегистрам.mdo @@ -0,0 +1,238 @@ + + + + + + + + + + + + КлючиДоступаКРегистрам + + ru + Ключи доступа к регистрам + + InDialog + InformationRegister.КлючиДоступаКРегистрам.Form.ФормаЗаписи + InformationRegister.КлючиДоступаКРегистрам.Form.ФормаСписка + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + ru + Ключ доступа к регистру + + + КлючДоступа + + ru + Ключ доступа + + + CatalogRef.КлючиДоступа + + + ru + Группа записей регистра с одинаковым доступом + + + + Use + Use + + + + Регистр + + ru + Регистр + + + CatalogRef.ИдентификаторыОбъектовРасширений + CatalogRef.ИдентификаторыОбъектовМетаданных + + + ru + Регистр, к записям которого ограничивается доступ + + + + Use + Use + true + + true + + + ДляВнешнихПользователей + + ru + Для внешних пользователей + + + Boolean + + + ru + Ключ доступа для внешних пользователей + + + + Use + Use + + true + + + Поле1 + + ru + Поле 1 + + + DefinedType.ПолеРегистраКлючейДоступаКРегистрам + + + ru + Поле, соответствующее первому полю регистра, от которого зависит ограничение доступа + + + + Use + Use + + true + + + Поле2 + + ru + Поле 2 + + + DefinedType.ПолеРегистраКлючейДоступаКРегистрам + + + ru + Поле, соответствующее второму полю регистра, от которого зависит ограничение доступа (если есть, иначе дополнительное значение Null) + + + + Use + Use + + true + + + Поле3 + + ru + Поле 3 + + + DefinedType.ПолеРегистраКлючейДоступаКРегистрам + + + ru + То же, что Поле 2 + + + + + Use + Use + + true + + + Поле4 + + ru + Поле 4 + + + DefinedType.ПолеРегистраКлючейДоступаКРегистрам + + + ru + То же, что Поле 2 + + + + Use + Use + + true + + + Поле5 + + ru + Поле 5 + + + DefinedType.ПолеРегистраКлючейДоступаКРегистрам + + + ru + То же, что Поле 2 + + + + Use + Use + + true + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + + ФормаЗаписи + + ru + Форма записи + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/InformationRegisters/КлючиДоступаПользователей/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/КлючиДоступаПользователей/Forms/ФормаЗаписи/Form.form new file mode 100644 index 000000000..ac768c20e --- /dev/null +++ b/SSL/src/InformationRegisters/КлючиДоступаПользователей/Forms/ФормаЗаписи/Form.form @@ -0,0 +1,240 @@ + + + + Пользователь + 1 + true + true + + true + + + Запись.Пользователь + + + ПользовательРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + ПользовательКонтекстноеМеню + 2 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + КлючДоступа + 4 + true + true + + true + + + Запись.КлючДоступа + + + КлючДоступаРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + КлючДоступаКонтекстноеМеню + 5 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + Изменение + 7 + true + true + + true + + + Запись.Изменение + + + ИзменениеРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + ИзменениеКонтекстноеМеню + 8 + true + + CheckBoxField + Enter + true + Left + true + + + + Добавление + 12 + true + true + + true + + + Запись.Добавление + + + ДобавлениеРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + + ДобавлениеКонтекстноеМеню + 13 + true + + CheckBoxField + Enter + true + Left + true + + + + ФормаКоманднаяПанель + -1 + + ФормаВключитьВозможностьРедактирования + 10 + true + true + + true + + + ФормаВключитьВозможностьРедактированияExtendedTooltip + 11 + Label + true + true + + Left + + + Form.Command.ВключитьВозможностьРедактирования + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + true + auto + true + + Запись + 1 + + InformationRegisterRecordManager.КлючиДоступаПользователей + + + true + + + true + +
      true
      + true +
      + + ВключитьВозможностьРедактирования + + <key>ru</key> + <value>Включить возможность редактирования</value> + + 1 + + ru + Включить возможность редактирования только для целей поиска неисправности (требуется углубленное понимание работы механизма) + + + true + + + + ВключитьВозможностьРедактирования + + + DontUse + Auto + + + + + + +
      diff --git a/SSL/src/InformationRegisters/КлючиДоступаПользователей/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/КлючиДоступаПользователей/Forms/ФормаЗаписи/Module.bsl new file mode 100644 index 000000000..266dc08c4 --- /dev/null +++ b/SSL/src/InformationRegisters/КлючиДоступаПользователей/Forms/ФормаЗаписи/Module.bsl @@ -0,0 +1,26 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + ТолькоПросмотр = Истина; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВключитьВозможностьРедактирования(Команда) + + ТолькоПросмотр = Ложь; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/КлючиДоступаПользователей/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/КлючиДоступаПользователей/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..61e6fb4bb --- /dev/null +++ b/SSL/src/InformationRegisters/КлючиДоступаПользователей/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,17 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/SSL/src/InformationRegisters/КлючиДоступаПользователей/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/КлючиДоступаПользователей/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..bc9619c2e --- /dev/null +++ b/SSL/src/InformationRegisters/КлючиДоступаПользователей/Forms/ФормаСписка/Form.form @@ -0,0 +1,444 @@ + + + + ГруппаПользовательскихНастроек + 1 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + ГруппаПользовательскихНастроекРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + КоманднаяПанель + 25 + + ФормаВключитьВозможностьРедактирования + 27 + true + true + + true + + + ФормаВключитьВозможностьРедактированияExtendedTooltip + 28 + Label + true + true + + Left + + + Form.Command.ВключитьВозможностьРедактирования + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + КоманднаяПанельРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + CommandBar + + Left + Form + + + + Список + 3 + + <key>ru</key> + <value>Список</value> + + true + true + + true + + + Список + + true + None + + Пользователь + 16 + true + true + + true + + + Список.Пользователь + + true + + ПользовательРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + ПользовательКонтекстноеМеню + 17 + true + + LabelField + Enter + true + Left + true + + true + true + + + + КлючДоступа + 19 + true + true + + true + + + Список.КлючДоступа + + true + + КлючДоступаРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + КлючДоступаКонтекстноеМеню + 20 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Изменение + 22 + true + true + + true + + + Список.Изменение + + true + + ИзменениеРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + ИзменениеКонтекстноеМеню + 23 + true + + CheckBoxField + Enter + true + Left + true + + + + Добавление + 29 + true + true + + true + + + Список.Добавление + + + ДобавлениеРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + ДобавлениеКонтекстноеМеню + 30 + true + + CheckBoxField + Enter + true + Left + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + true + true + true + true + true + MultiRow +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + ГруппаПользовательскихНастроек + +
      + + ФормаКоманднаяПанель + -1 + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + Список + 1 + + DynamicList + + + true + + + true + +
      true
      + + InformationRegister.КлючиДоступаПользователей + true + true + true + true + +
      + + ВключитьВозможностьРедактирования + + <key>ru</key> + <value>Включить возможность редактирования</value> + + 1 + + ru + Включить возможность редактирования только для целей поиска неисправности (требуется углубленное понимание работы механизма) + + + true + + + + ВключитьВозможностьРедактирования + + + DontUse + Auto + + + + + + +
      diff --git a/SSL/src/InformationRegisters/КлючиДоступаПользователей/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/КлючиДоступаПользователей/Forms/ФормаСписка/Module.bsl new file mode 100644 index 000000000..266dc08c4 --- /dev/null +++ b/SSL/src/InformationRegisters/КлючиДоступаПользователей/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,26 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + ТолькоПросмотр = Истина; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВключитьВозможностьРедактирования(Команда) + + ТолькоПросмотр = Ложь; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/КлючиДоступаПользователей/КлючиДоступаПользователей.mdo b/SSL/src/InformationRegisters/КлючиДоступаПользователей/КлючиДоступаПользователей.mdo new file mode 100644 index 000000000..c1ddab26a --- /dev/null +++ b/SSL/src/InformationRegisters/КлючиДоступаПользователей/КлючиДоступаПользователей.mdo @@ -0,0 +1,154 @@ + + + + + + + + + + + + КлючиДоступаПользователей + + ru + Ключи доступа пользователей + + InDialog + InformationRegister.КлючиДоступаПользователей.Form.ФормаЗаписи + InformationRegister.КлючиДоступаПользователей.Form.ФормаСписка + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + ru + Ключ доступа пользователя + + + Изменение + + ru + Изменение + + + Boolean + + + ru + Если признак установлен, то разрешено не только чтение, но и изменение + + + + Use + Use + + + + Добавление + + ru + Добавление + + + Boolean + + + ru + Если признак установлен, то разрешено не только чтение и изменение, но и добавление + + + + Use + Use + + + + Пользователь + + ru + Пользователь + + + CatalogRef.Пользователи + + + ru + Пользователь, которому разрешен ключ доступа + + + + Use + + true + + + КлючДоступа + + ru + Ключ доступа + + + CatalogRef.КлючиДоступа + + + ru + Группа однотипных объектов или записей регистра с одинаковым доступом + + + + Index + Use + Use + + true + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + + ФормаЗаписи + + ru + Форма записи + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/InformationRegisters/КонтактыВзаимодействий/RecordSetModule.bsl b/SSL/src/InformationRegisters/КонтактыВзаимодействий/RecordSetModule.bsl index fdcc2d14c..135e1c6bf 100644 --- a/SSL/src/InformationRegisters/КонтактыВзаимодействий/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/КонтактыВзаимодействий/RecordSetModule.bsl @@ -21,7 +21,7 @@ |ГДЕ | КонтактыВзаимодействий.Взаимодействие = &Взаимодействие"; - Запрос.УстановитьПараметр("Взаимодействие", ЭтотОбъект.Отбор.Взаимодействие.Значение); + Запрос.УстановитьПараметр("Взаимодействие", Отбор.Взаимодействие.Значение); ДополнительныеСвойства.Вставить("ТаблицаЗаписи", Запрос.Выполнить().Выгрузить()); КонецПроцедуры @@ -72,7 +72,7 @@ | СтарыйНабор КАК СтарыйНабор"; Запрос.УстановитьПараметр("СтарыйНабор", ДополнительныеСвойства.ТаблицаЗаписи); - Запрос.УстановитьПараметр("Взаимодействие", ЭтотОбъект.Отбор.Взаимодействие.Значение); + Запрос.УстановитьПараметр("Взаимодействие", Отбор.Взаимодействие.Значение); Взаимодействия.РассчитатьРассмотреноПоКонтактам(Запрос.Выполнить().Выгрузить()); КонецПроцедуры diff --git a/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/ManagerModule.bsl b/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/ManagerModule.bsl index 758949a4f..bfcd1d928 100644 --- a/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/ManagerModule.bsl @@ -286,6 +286,7 @@ КонецЕсли; Если (Протокол = "https" Или Протокол = "ftps") И ЗащищенноеСоединение = Неопределено Тогда + Сертификаты = Новый СертификатыУдостоверяющихЦентровОС; ЗащищенноеСоединение = ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение(); КонецЕсли; diff --git a/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/RecordSetModule.bsl b/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/RecordSetModule.bsl index 17f9633c0..4b68c72ac 100644 --- a/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/RecordSetModule.bsl @@ -20,7 +20,7 @@ // разделении по областям данных. Если ПодготовленыДанные Тогда - ЭтотОбъект.Загрузить(ДанныеДляЗаписи); + Загрузить(ДанныеДляЗаписи); КонецЕсли; КонецПроцедуры @@ -73,7 +73,7 @@ ВызватьИсключение НСтр("ru = 'Не определены параметры получения данных'"); КонецЕсли; - ДанныеДляЗаписи = ЭтотОбъект.Выгрузить(); + ДанныеДляЗаписи = Выгрузить(); Для Каждого Строка Из ДанныеДляЗаписи Цикл diff --git a/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаЗаписи/Form.form index b2eedd814..43b464ea2 100644 --- a/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаЗаписи/Form.form @@ -327,6 +327,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Form.form b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Form.form index 3345ace7d..bd4f18c55 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Form.form +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Form.form @@ -96,6 +96,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -178,6 +179,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -305,6 +307,7 @@ Page + HorizontalIfPossible false
      @@ -451,6 +454,7 @@ Page + HorizontalIfPossible false @@ -730,10 +734,13 @@ Left true + + Clearing + ИмяРеквизитаИсточникаОчистка + 20 true true - false true true true @@ -761,6 +768,7 @@ Page + HorizontalIfPossible false @@ -873,6 +881,7 @@ Page + HorizontalIfPossible false @@ -921,7 +930,7 @@ UsualGroup - Center + HorizontalIfPossible Auto true true diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Module.bsl b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Module.bsl index 3bcaee7a8..b7db0aecc 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Module.bsl +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Module.bsl @@ -223,6 +223,11 @@ ПоказатьЗначение(, Объект.Источник); КонецПроцедуры +&НаКлиенте +Процедура ИмяРеквизитаИсточникаОчистка(Элемент, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -301,7 +306,7 @@ Результат.Вставить(НСтр("ru = 'периодически'"), ПредопределенноеЗначение("Перечисление.СпособыУстановкиВремениНапоминания.Периодически")); Возврат Результат; КонецФункции - + &НаКлиенте Процедура ЗаполнитьСпособыОповещения() СпособыОповещения = Элементы.СпособУстановкиВремениНапоминания.СписокВыбора; @@ -337,7 +342,8 @@ // заполняем по умолчанию МетаданныеИсточника = Объект.Источник.Метаданные(); Для Каждого Реквизит Из МетаданныеИсточника.Реквизиты Цикл - Если РеквизитИсточникаСуществуетИСодержитТипДата(МетаданныеИсточника, Реквизит.Имя) Тогда + Если Не СтрНачинаетсяС(НРег(Реквизит.Имя), НРег("Удалить")) + И РеквизитИсточникаСуществуетИСодержитТипДата(МетаданныеИсточника, Реквизит.Имя) Тогда РеквизитыСДатами.Добавить(Реквизит.Имя); КонецЕсли; КонецЦикла; diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Form.form b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Form.form index d399ee2eb..3b5191a77 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Form.form +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Form.form @@ -232,6 +232,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/ManagerModule.bsl b/SSL/src/InformationRegisters/НапоминанияПользователя/ManagerModule.bsl new file mode 100644 index 000000000..cd1925d44 --- /dev/null +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/ManagerModule.bsl @@ -0,0 +1,25 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +#Область ДляВызоваИзДругихПодсистем + +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтениеИзменение + |ГДЕ + | ЭтоАвторизованныйПользователь(Пользователь)"; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + +#КонецОбласти + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/ManagerModule.bsl index 288c3005c..12cb45818 100644 --- a/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/ManagerModule.bsl @@ -1,5 +1,30 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ПрограммныйИнтерфейс + +#Область ДляВызоваИзДругихПодсистем + +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтениеИзменение + |ГДЕ + | ЭтоАвторизованныйПользователь(Пользователь) + | ИЛИ ЭтоАвторизованныйПользователь(Вариант.Автор)"; + + Ограничение.ТекстДляВнешнихПользователей = Ограничение.Текст; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + +#КонецОбласти + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Записывает таблицу настроек в данные регистра по указанным измерениям. diff --git a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/НастройкиХраненияИстории/Form.form b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/НастройкиХраненияИстории/Form.form index c85277f0d..147887419 100644 --- a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/НастройкиХраненияИстории/Form.form +++ b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/НастройкиХраненияИстории/Form.form @@ -843,6 +843,7 @@ UsualGroup + HorizontalIfPossible Auto WeakSeparation true @@ -944,6 +945,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/InformationRegisters/НастройкиОбменаДаннымиXDTO/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/НастройкиОбменаДаннымиXDTO/Forms/ФормаЗаписи/Form.form new file mode 100644 index 000000000..2aa343d50 --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиОбменаДаннымиXDTO/Forms/ФормаЗаписи/Form.form @@ -0,0 +1,961 @@ + + + + УзелИнформационнойБазы + 1 + true + true + + true + + + Запись.УзелИнформационнойБазы + + + УзелИнформационнойБазыРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + УзелИнформационнойБазыКонтекстноеМеню + 2 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ИмяПланаОбменаКорреспондента + 7 + true + true + + true + + + Запись.ИмяПланаОбменаКорреспондента + + + ИмяПланаОбменаКорреспондентаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + ИмяПланаОбменаКорреспондентаКонтекстноеМеню + 8 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПанельНастройки + 10 + + СтраницаНастройки + 12 + + ПоддерживаемыеОбъекты + 16 + + <key>ru</key> + <value>Поддерживаемые объекты</value> + + true + true + + true + + + ПоддерживаемыеОбъекты + + None + Add + Change + Copy + Delete + EndEdit + SelectAll + ShowMultipleSelection + + ПоддерживаемыеОбъектыОбъект + 29 + true + true + + true + + + ПоддерживаемыеОбъекты.Объект + + + ПоддерживаемыеОбъектыОбъектРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + ПоддерживаемыеОбъектыОбъектКонтекстноеМеню + 30 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПоддерживаемыеОбъектыВерсия + 32 + true + true + + true + + + ПоддерживаемыеОбъекты.Версия + + + ПоддерживаемыеОбъектыВерсияРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + ПоддерживаемыеОбъектыВерсияКонтекстноеМеню + 33 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПоддерживаемыеОбъектыОтправка + 35 + true + true + + true + + + ПоддерживаемыеОбъекты.Отправка + + + ПоддерживаемыеОбъектыОтправкаРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + + ПоддерживаемыеОбъектыОтправкаКонтекстноеМеню + 36 + true + + CheckBoxField + Auto + true + Left + true + + + + ПоддерживаемыеОбъектыПолучение + 38 + true + true + + true + + + ПоддерживаемыеОбъекты.Получение + + + ПоддерживаемыеОбъектыПолучениеРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + + ПоддерживаемыеОбъектыПолучениеКонтекстноеМеню + 39 + true + + CheckBoxField + Auto + true + Left + true + + + + ПоддерживаемыеОбъектыКоманднаяПанель + 18 + Left + true + + + ПоддерживаемыеОбъектыСтрокаПоиска + 20 + + ПоддерживаемыеОбъектыСтрокаПоискаРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + ПоддерживаемыеОбъектыСтрокаПоискаКонтекстноеМеню + 21 + true + + ПоддерживаемыеОбъекты + + true + + + + ПоддерживаемыеОбъектыСостояниеПросмотра + 23 + + ПоддерживаемыеОбъектыСостояниеПросмотраРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + + ПоддерживаемыеОбъектыСостояниеПросмотраКонтекстноеМеню + 24 + true + + ViewStatusAddition + ПоддерживаемыеОбъекты + + true + + + + ПоддерживаемыеОбъектыУправлениеПоиском + 26 + + ПоддерживаемыеОбъектыУправлениеПоискомРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + ПоддерживаемыеОбъектыУправлениеПоискомКонтекстноеМеню + 27 + true + + SearchControlAddition + ПоддерживаемыеОбъекты + + true + + + + ПоддерживаемыеОбъектыРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + + ПоддерживаемыеОбъектыКонтекстноеМеню + 17 + true + + true + true + true + true + true + true + MultiRow +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + true + +
      + true + true + + true + + + <key>ru</key> + <value>Настройки в этой программе</value> + + + СтраницаНастройкиРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + Page + + Vertical + auto + false + +
      + + СтраницаНастройкиКорреспондента + 14 + + ПоддерживаемыеОбъектыКорреспондента + 41 + + <key>ru</key> + <value>Поддерживаемые объекты корреспондента</value> + + true + true + + true + + + ПоддерживаемыеОбъектыКорреспондента + + None + Add + Change + Copy + Delete + EndEdit + SelectAll + ShowMultipleSelection + + ПоддерживаемыеОбъектыКорреспондентаОбъект + 54 + true + true + + true + + + ПоддерживаемыеОбъектыКорреспондента.Объект + + + ПоддерживаемыеОбъектыКорреспондентаОбъектРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + + ПоддерживаемыеОбъектыКорреспондентаОбъектКонтекстноеМеню + 55 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПоддерживаемыеОбъектыКорреспондентаВерсия + 57 + true + true + + true + + + ПоддерживаемыеОбъектыКорреспондента.Версия + + + ПоддерживаемыеОбъектыКорреспондентаВерсияРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + + ПоддерживаемыеОбъектыКорреспондентаВерсияКонтекстноеМеню + 58 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПоддерживаемыеОбъектыКорреспондентаОтправка + 60 + true + true + + true + + + ПоддерживаемыеОбъектыКорреспондента.Отправка + + + ПоддерживаемыеОбъектыКорреспондентаОтправкаРасширеннаяПодсказка + 62 + Label + true + true + + Left + + + + ПоддерживаемыеОбъектыКорреспондентаОтправкаКонтекстноеМеню + 61 + true + + CheckBoxField + Auto + true + Left + true + + + + ПоддерживаемыеОбъектыКорреспондентаПолучение + 63 + true + true + + true + + + ПоддерживаемыеОбъектыКорреспондента.Получение + + + ПоддерживаемыеОбъектыКорреспондентаПолучениеРасширеннаяПодсказка + 65 + Label + true + true + + Left + + + + ПоддерживаемыеОбъектыКорреспондентаПолучениеКонтекстноеМеню + 64 + true + + CheckBoxField + Auto + true + Left + true + + + + ПоддерживаемыеОбъектыКорреспондентаКоманднаяПанель + 43 + Left + true + + + ПоддерживаемыеОбъектыКорреспондентаСтрокаПоиска + 45 + + ПоддерживаемыеОбъектыКорреспондентаСтрокаПоискаРасширеннаяПодсказка + 47 + Label + true + true + + Left + + + + ПоддерживаемыеОбъектыКорреспондентаСтрокаПоискаКонтекстноеМеню + 46 + true + + ПоддерживаемыеОбъектыКорреспондента + + true + + + + ПоддерживаемыеОбъектыКорреспондентаСостояниеПросмотра + 48 + + ПоддерживаемыеОбъектыКорреспондентаСостояниеПросмотраРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + + ПоддерживаемыеОбъектыКорреспондентаСостояниеПросмотраКонтекстноеМеню + 49 + true + + ViewStatusAddition + ПоддерживаемыеОбъектыКорреспондента + + true + + + + ПоддерживаемыеОбъектыКорреспондентаУправлениеПоиском + 51 + + ПоддерживаемыеОбъектыКорреспондентаУправлениеПоискомРасширеннаяПодсказка + 53 + Label + true + true + + Left + + + + ПоддерживаемыеОбъектыКорреспондентаУправлениеПоискомКонтекстноеМеню + 52 + true + + SearchControlAddition + ПоддерживаемыеОбъектыКорреспондента + + true + + + + ПоддерживаемыеОбъектыКорреспондентаРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + + ПоддерживаемыеОбъектыКорреспондентаКонтекстноеМеню + 42 + true + + true + true + true + true + true + true + MultiRow +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + true + +
      + true + true + + true + + + <key>ru</key> + <value>Настройки корреспондента</value> + + + СтраницаНастройкиКорреспондентаРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + Page + + Vertical + auto + false + +
      + true + true + + true + + + <key>ru</key> + <value>Панель настройки</value> + + + ПанельНастройкиРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + Pages + + TabsOnTop + Auto + +
      + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + true + auto + true + + Запись + 1 + + InformationRegisterRecordManager.НастройкиОбменаДаннымиXDTO + + + true + + + true + +
      true
      + true +
      + + ПоддерживаемыеОбъекты + + <key>ru</key> + <value>Поддерживаемые объекты</value> + + 2 + + ValueTable + + + true + + + true + + + Объект + + <key>ru</key> + <value>Объект</value> + + 1 + + String + + + + 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 + + Boolean + + + true + + + true + + + + + ПоддерживаемыеОбъектыКорреспондента + + <key>ru</key> + <value>Поддерживаемые объекты корреспондента</value> + + 3 + + ValueTable + + + true + + + true + + + Объект + + <key>ru</key> + <value>Объект</value> + + 1 + + String + + + + 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 + + Boolean + + + true + + + true + + + + + + + + +
      diff --git a/SSL/src/InformationRegisters/НастройкиОбменаДаннымиXDTO/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/НастройкиОбменаДаннымиXDTO/Forms/ФормаЗаписи/Module.bsl new file mode 100644 index 000000000..dc995e7d4 --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиОбменаДаннымиXDTO/Forms/ФормаЗаписи/Module.bsl @@ -0,0 +1,30 @@ +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + МенеджерЗаписи = РегистрыСведений.НастройкиОбменаДаннымиXDTO.СоздатьМенеджерЗаписи(); + ЗаполнитьЗначенияСвойств(МенеджерЗаписи, Запись.ИсходныйКлючЗаписи); + МенеджерЗаписи.Прочитать(); + + НастройкиПоддерживаемыеОбъекты = РегистрыСведений.НастройкиОбменаДаннымиXDTO.ЗначениеНастройки( + МенеджерЗаписи.УзелИнформационнойБазы, "ПоддерживаемыеОбъекты"); + + Если Не НастройкиПоддерживаемыеОбъекты = Неопределено Тогда + ПоддерживаемыеОбъекты.Загрузить(НастройкиПоддерживаемыеОбъекты); + КонецЕсли; + + НастройкиКорреспондентаПоддерживаемыеОбъекты = РегистрыСведений.НастройкиОбменаДаннымиXDTO.ЗначениеНастройкиКорреспондента( + МенеджерЗаписи.УзелИнформационнойБазы, "ПоддерживаемыеОбъекты"); + + Если Не НастройкиКорреспондентаПоддерживаемыеОбъекты = Неопределено Тогда + ПоддерживаемыеОбъектыКорреспондента.Загрузить(НастройкиКорреспондентаПоддерживаемыеОбъекты); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/НастройкиОбменаДаннымиXDTO/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиОбменаДаннымиXDTO/ManagerModule.bsl new file mode 100644 index 000000000..337094b59 --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиОбменаДаннымиXDTO/ManagerModule.bsl @@ -0,0 +1,263 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныйПрограммныйИнтерфейс + +Процедура ОбновитьНастройки(УзелИнформационнойБазы, ВидНастройки, ЗначениеНастройки) Экспорт + + ОбновитьЗапись(УзелИнформационнойБазы, "Настройки", ВидНастройки, ЗначениеНастройки); + +КонецПроцедуры + +Процедура ОбновитьНастройкиКорреспондента(УзелИнформационнойБазы, ВидНастройки, ЗначениеНастройки) Экспорт + + ОбновитьЗапись(УзелИнформационнойБазы, "НастройкиКорреспондента", ВидНастройки, ЗначениеНастройки); + +КонецПроцедуры + +Функция ЗначениеНастройки(УзелИнформационнойБазы, ВидНастройки) Экспорт + + Результат = Неопределено; + + ПрочитатьЗапись(УзелИнформационнойБазы, "Настройки", ВидНастройки, Результат); + + Возврат Результат; + +КонецФункции + +Функция ЗначениеНастройкиКорреспондента(УзелИнформационнойБазы, ВидНастройки) Экспорт + + Результат = Неопределено; + + ПрочитатьЗапись(УзелИнформационнойБазы, "НастройкиКорреспондента", ВидНастройки, Результат); + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ОбновитьЗапись(УзелИнформационнойБазы, ИмяИзмерения, ВидНастройки, ЗначениеНастройки) + + Менеджер = СоздатьМенеджерЗаписи(); + Менеджер.УзелИнформационнойБазы = УзелИнформационнойБазы; + + Менеджер.Прочитать(); + + НовыеНастройки = Новый Структура; + + Если Менеджер.Выбран() Тогда + ТекущиеНастройки = Менеджер[ИмяИзмерения].Получить(); + + Если ТипЗнч(ТекущиеНастройки) = Тип("ТаблицаЗначений") Тогда + + НовыеНастройки.Вставить("ПоддерживаемыеОбъекты", ТекущиеНастройки); + + ИначеЕсли ТипЗнч(ТекущиеНастройки) = Тип("Структура") Тогда + + Для Каждого ЭлементНастройки Из ТекущиеНастройки Цикл + + НовыеНастройки.Вставить(ЭлементНастройки.Ключ, ЭлементНастройки.Значение); + + КонецЦикла; + + КонецЕсли; + + КонецЕсли; + + НовыеНастройки.Вставить(ВидНастройки, ЗначениеНастройки); + + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("УзелИнформационнойБазы", УзелИнформационнойБазы); + СтруктураЗаписи.Вставить(ИмяИзмерения, Новый ХранилищеЗначения(НовыеНастройки, Новый СжатиеДанных(9))); + + ОбменДаннымиСервер.ОбновитьЗаписьВРегистрСведений(СтруктураЗаписи, "НастройкиОбменаДаннымиXDTO"); + +КонецПроцедуры + +Процедура ПрочитатьЗапись(УзелИнформационнойБазы, ИмяИзмерения, ВидНастройки, Результат) + + Менеджер = СоздатьМенеджерЗаписи(); + Менеджер.УзелИнформационнойБазы = УзелИнформационнойБазы; + + Менеджер.Прочитать(); + + СтруктураНастройки = Новый Структура; + + Если Менеджер.Выбран() Тогда + ТекущиеНастройки = Менеджер[ИмяИзмерения].Получить(); + + Если ТипЗнч(ТекущиеНастройки) = Тип("ТаблицаЗначений") Тогда + + СтруктураНастройки.Вставить("ПоддерживаемыеОбъекты", ТекущиеНастройки); + + ИначеЕсли ТипЗнч(ТекущиеНастройки) = Тип("Структура") Тогда + + Для Каждого ЭлементНастройки Из ТекущиеНастройки Цикл + + СтруктураНастройки.Вставить(ЭлементНастройки.Ключ, ЭлементНастройки.Значение); + + КонецЦикла; + + КонецЕсли; + КонецЕсли; + + СтруктураНастройки.Свойство(ВидНастройки, Результат); + +КонецПроцедуры + +#Область ОбработчикиОбновления + +Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт + + ДополнительныеПараметры = ОбновлениеИнформационнойБазы.ДополнительныеПараметрыОтметкиОбработки(); + ДополнительныеПараметры.ЭтоНезависимыйРегистрСведений = Истина; + ДополнительныеПараметры.ПолноеИмяРегистра = "РегистрСведений.НастройкиОбменаДаннымиXDTO"; + + ПланыОбменаXDTO = Новый Массив; + Для Каждого ПланОбмена Из ОбменДаннымиПовтИсп.ПланыОбменаБСП() Цикл + Если Не ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ПланОбмена) Тогда + Продолжить; + КонецЕсли; + ПланыОбменаXDTO.Добавить(ПланОбмена); + КонецЦикла; + + Если ПланыОбменаXDTO.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ПараметрыЗапроса = Новый Структура; + ПараметрыЗапроса.Вставить("ПланыОбменаМассив", ПланыОбменаXDTO); + ПараметрыЗапроса.Вставить("ДополнительныеСвойстваПланаОбмена", ""); + ПараметрыЗапроса.Вставить("РезультатВоВременнуюТаблицу", Истина); + + МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + + ЗапросУзлыОбмена = Новый Запрос(ОбменДаннымиСервер.ТекстЗапросаПланыОбменаДляМонитора(ПараметрыЗапроса, Ложь)); + ЗапросУзлыОбмена.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; + ЗапросУзлыОбмена.Выполнить(); + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ПланыОбменаКонфигурации.УзелИнформационнойБазы КАК УзелИнформационнойБазы + |ИЗ + | ПланыОбменаКонфигурации КАК ПланыОбменаКонфигурации + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиОбменаДаннымиXDTO КАК НастройкиОбменаДаннымиXDTO + | ПО (НастройкиОбменаДаннымиXDTO.УзелИнформационнойБазы = ПланыОбменаКонфигурации.УзелИнформационнойБазы) + |ГДЕ + | (НастройкиОбменаДаннымиXDTO.УзелИнформационнойБазы ЕСТЬ NULL + | ИЛИ НастройкиОбменаДаннымиXDTO.ИмяПланаОбменаКорреспондента = """")"); + + Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; + + Результат = Запрос.Выполнить().Выгрузить(); + + ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, Результат, ДополнительныеПараметры); + +КонецПроцедуры + +Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт + + ОбработкаЗавершена = Истина; + + МетаданныеРегистра = Метаданные.РегистрыСведений.НастройкиОбменаДаннымиXDTO; + ПолноеИмяРегистра = МетаданныеРегистра.ПолноеИмя(); + ПредставлениеРегистра = МетаданныеРегистра.Представление(); + ПредставлениеОтбора = НСтр("ru = 'УзелИнформационнойБазы = ""%1""'"); + + ДополнительныеПараметрыВыборкиДанныхДляОбработки = ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляОбработки(); + + Выборка = ОбновлениеИнформационнойБазы.ВыбратьИзмеренияНезависимогоРегистраСведенийДляОбработки( + Параметры.Очередь, ПолноеИмяРегистра, ДополнительныеПараметрыВыборкиДанныхДляОбработки); + + Обработано = 0; + Проблемных = 0; + + Пока Выборка.Следующий() Цикл + + Попытка + + ОбновитьНастройкиОбменаДаннымиXDTOКорреспондента(Выборка.УзелИнформационнойБазы); + Обработано = Обработано + 1; + + Исключение + + Проблемных = Проблемных + 1; + + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось обработать набор записей регистра ""%1"" с отбором %2 по причине: + |%3'"), ПредставлениеРегистра, ПредставлениеОтбора, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение, + МетаданныеРегистра, , ТекстСообщения); + + КонецПопытки; + + КонецЦикла; + + Если Не ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, ПолноеИмяРегистра) Тогда + ОбработкаЗавершена = Ложь; + КонецЕсли; + + Если Обработано = 0 И Проблемных <> 0 Тогда + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Процедуре РегистрыСведений.НастройкиОбменаДаннымиXDTO.ОбработатьДанныеДляПереходаНаНовуюВерсию не удалось обработать некоторые записи узлов обмена (пропущены): %1'"), + Проблемных); + ВызватьИсключение ТекстСообщения; + Иначе + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация, + , , + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Процедура РегистрыСведений.НастройкиОбменаДаннымиXDTO.ОбработатьДанныеДляПереходаНаНовуюВерсию обработала очередную порцию записей: %1'"), + Обработано)); + КонецЕсли; + + Параметры.ОбработкаЗавершена = ОбработкаЗавершена; + +КонецПроцедуры + +Процедура ОбновитьНастройкиОбменаДаннымиXDTOКорреспондента(УзелИнформационнойБазы) Экспорт + + НачатьТранзакцию(); + Попытка + + Блокировка = Новый БлокировкаДанных; + + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.НастройкиОбменаДаннымиXDTO"); + ЭлементБлокировки.УстановитьЗначение("УзелИнформационнойБазы", УзелИнформационнойБазы); + + Блокировка.Заблокировать(); + + НаборЗаписей = СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.УзелИнформационнойБазы.Установить(УзелИнформационнойБазы); + + НаборЗаписей.Прочитать(); + + Если НаборЗаписей.Количество() > 0 Тогда + ТекущаяЗапись = НаборЗаписей[0]; + Иначе + ТекущаяЗапись = НаборЗаписей.Добавить(); + ТекущаяЗапись.УзелИнформационнойБазы = УзелИнформационнойБазы; + КонецЕсли; + + ТекущаяЗапись.ИмяПланаОбменаКорреспондента = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы); + + ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписей); + + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + ВызватьИсключение; + + КонецПопытки; + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиОбменаДаннымиXDTO/НастройкиОбменаДаннымиXDTO.mdo b/SSL/src/InformationRegisters/НастройкиОбменаДаннымиXDTO/НастройкиОбменаДаннымиXDTO.mdo new file mode 100644 index 000000000..092b4ce47 --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиОбменаДаннымиXDTO/НастройкиОбменаДаннымиXDTO.mdo @@ -0,0 +1,130 @@ + + + + + + + + + + + + НастройкиОбменаДаннымиXDTO + + ru + Настройки обмена данными XDTO + + InDialog + InformationRegister.НастройкиОбменаДаннымиXDTO.Form.ФормаЗаписи + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + Настройки + + ru + Настройки + + Структура настроек отправки и получения данных в этой базе + + ValueStorage + + + + Use + Use + + + + НастройкиКорреспондента + + ru + Настройки корреспондента + + Структура настроек отправки и получения данных в базе-корреспонденте + + ValueStorage + + + + Use + Use + + + + ИмяПланаОбменаКорреспондента + + ru + Имя плана обмена корреспондента + + + String + + 80 + + + + + Use + Use + + + + УзелИнформационнойБазы + + ru + Узел информационной базы + + + ExchangePlanRef + + + + Use + Use + true + + true + true + + + ФормаЗаписи + + ru + Форма записи + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаДобавленияУсловияПоДате/Form.form b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаДобавленияУсловияПоДате/Form.form index 371d61f65..ec60d1d77 100644 --- a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаДобавленияУсловияПоДате/Form.form +++ b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаДобавленияУсловияПоДате/Form.form @@ -114,6 +114,7 @@ UsualGroup + HorizontalIfPossible Auto WeakSeparation true diff --git a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/Form.form index 01acc8a18..f80e2661f 100644 --- a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/Form.form @@ -622,6 +622,7 @@ UsualGroup + HorizontalIfPossible Center Auto WeakSeparation @@ -723,6 +724,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/InformationRegisters/НастройкиПравОбъектов/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/НастройкиПравОбъектов/Forms/ФормаЗаписи/Form.form index e54e5bcc3..4b08a5b83 100644 --- a/SSL/src/InformationRegisters/НастройкиПравОбъектов/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/НастройкиПравОбъектов/Forms/ФормаЗаписи/Form.form @@ -676,6 +676,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ДобавленияУсловияПоДате/Form.form b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ДобавленияУсловияПоДате/Form.form index 371d61f65..ec60d1d77 100644 --- a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ДобавленияУсловияПоДате/Form.form +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ДобавленияУсловияПоДате/Form.form @@ -114,6 +114,7 @@ UsualGroup + HorizontalIfPossible Auto WeakSeparation true diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ДобавленияУсловияПоДате/Module.bsl b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ДобавленияУсловияПоДате/Module.bsl index b06572197..69c806e51 100644 --- a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ДобавленияУсловияПоДате/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ДобавленияУсловияПоДате/Module.bsl @@ -25,6 +25,16 @@ &НаКлиенте Процедура ОК(Команда) + Если ИнтервалИсключение = 0 Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru='Количество дней не может быть равно 0.'"),,, "ИнтервалИсключение"); + Возврат; + КонецЕсли; + + Если Не ЗначениеЗаполнено(РеквизитСТипомДата) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru='Необходимо заполнить условия очистки файлов.'"),,, "РеквизитСТипомДата"); + Возврат; + КонецЕсли; + СтруктураРезультат = Новый Структура(); СтруктураРезультат.Вставить("ИнтервалИсключение", ИнтервалИсключение); СтруктураРезультат.Вставить("РеквизитСТипомДата", РеквизитСТипомДата); diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/Form.form b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/Form.form index a51b93b22..d0888699a 100644 --- a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/Form.form +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/Form.form @@ -699,6 +699,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ФормаЗаписиНастройки/Form.form b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ФормаЗаписиНастройки/Form.form index cefcd286d..d06c231f7 100644 --- a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ФормаЗаписиНастройки/Form.form +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ФормаЗаписиНастройки/Form.form @@ -220,6 +220,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису/Form.form b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/НастройкаПодключенияКСервису/Form.form similarity index 99% rename from SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису/Form.form rename to SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/НастройкаПодключенияКСервису/Form.form index 69ebcca77..bd0c1f7c9 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису/Form.form +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/НастройкаПодключенияКСервису/Form.form @@ -159,6 +159,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -264,6 +265,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -421,7 +423,7 @@ Запись 1 - InformationRegisterRecordManager.НастройкиТранспортаОбмена + InformationRegisterRecordManager.НастройкиТранспортаОбменаДанными true diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису/Module.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/НастройкаПодключенияКСервису/Module.bsl similarity index 100% rename from SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису/Module.bsl rename to SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/НастройкаПодключенияКСервису/Module.bsl diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Form.form b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Form.form similarity index 99% rename from SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Form.form rename to SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Form.form index 03af700c5..0a2343278 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Form.form +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Form.form @@ -166,6 +166,7 @@ Page + HorizontalIfPossible auto false @@ -293,6 +294,7 @@ Page + HorizontalIfPossible auto false @@ -478,6 +480,7 @@ Page + HorizontalIfPossible auto false @@ -530,6 +533,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Module.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Module.bsl similarity index 97% rename from SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Module.bsl rename to SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Module.bsl index 4c0cd45c3..e198dc25b 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Module.bsl @@ -103,11 +103,11 @@ &НаКлиенте Процедура ПараметрыПодключения(Команда) - Отбор = Новый Структура("Узел", УзелИнформационнойБазы); - ЗначенияЗаполнения = Новый Структура("Узел", УзелИнформационнойБазы); + Отбор = Новый Структура("Корреспондент", УзелИнформационнойБазы); + ЗначенияЗаполнения = Новый Структура("Корреспондент", УзелИнформационнойБазы); ОбменДаннымиКлиент.ОткрытьФормуЗаписиРегистраСведенийПоОтбору(Отбор, - ЗначенияЗаполнения, "НастройкиТранспортаОбмена", Неопределено); + ЗначенияЗаполнения, "НастройкиТранспортаОбменаДанными", Неопределено); КонецПроцедуры @@ -211,7 +211,7 @@ ВыполнитьВыгрузку = Истина; - НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспорта(УзелИнформационнойБазы); + НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспорта(УзелИнформационнойБазы); ВидТранспорта = НастройкиТранспорта.ВидТранспортаСообщенийОбменаПоУмолчанию; @@ -286,7 +286,7 @@ // Обновление правил регистрации объектов выполняем до загрузки данных. ОбменДаннымиСервер.ВыполнитьОбновлениеПравилДляОбменаДанными(); - ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); + ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); ДатаНачалаОперации = ТекущаяДатаСеанса(); @@ -415,7 +415,7 @@ Если УзелИнформационнойБазы <> Неопределено Тогда - ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); + ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); ДатаНачалаОперации = ТекущаяДатаСеанса(); @@ -657,7 +657,7 @@ Попытка ТолькоПараметры = (СтатусОбновления = "ОбновлениеИнформационнойБазы"); - ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); + ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); ПараметрыОбмена.ВидТранспортаСообщенийОбмена = ВидТранспорта; diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ФормаЗаписи/Form.form similarity index 97% rename from SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Form.form rename to SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ФормаЗаписи/Form.form index 4712dcd56..2489632f4 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ФормаЗаписи/Form.form @@ -491,6 +491,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -746,6 +747,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1236,6 +1238,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1354,6 +1357,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1460,6 +1464,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1885,6 +1890,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2105,6 +2111,68 @@ false + + НастройкиТранспортаWSПассивныйРежим + 199 + + Декорация3 + 201 + + <key>ru</key> + <value>Для данного вида подключения настроек в этой программе не требуется.</value> + + true + true + + true + + + Декорация3РасширеннаяПодсказка + 203 + Label + true + true + + Left + + + + Декорация3КонтекстноеМеню + 202 + true + + Label + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Интернет (пассивный режим)</value> + + + НастройкиТранспортаWSПассивныйРежимРасширеннаяПодсказка + 200 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + true true @@ -2240,7 +2308,7 @@ Запись 1 - InformationRegisterRecordManager.НастройкиТранспортаОбмена + InformationRegisterRecordManager.НастройкиТранспортаОбменаДанными true diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ФормаЗаписи/Module.bsl similarity index 92% rename from SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Module.bsl rename to SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ФормаЗаписи/Module.bsl index 6fbb6d5e8..357a58476 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ФормаЗаписи/Module.bsl @@ -41,9 +41,9 @@ Элементы.ПараметрыДоступаВИнтернет1.Видимость = Ложь; КонецЕсли; - Если ЗначениеЗаполнено(Запись.Узел) Тогда + Если ЗначениеЗаполнено(Запись.Корреспондент) Тогда УстановитьПривилегированныйРежим(Истина); - Пароли = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Запись.Узел, "COMПарольПользователя, FTPСоединениеПароль, WSПароль, ПарольАрхиваСообщенияОбмена", Истина); + Пароли = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Запись.Корреспондент, "COMПарольПользователя, FTPСоединениеПароль, WSПароль, ПарольАрхиваСообщенияОбмена", Истина); УстановитьПривилегированныйРежим(Ложь); COMПарольПользователя = ?(ЗначениеЗаполнено(Пароли.COMПарольПользователя), ЭтотОбъект.УникальныйИдентификатор, ""); FTPСоединениеПароль = ?(ЗначениеЗаполнено(Пароли.FTPСоединениеПароль), ЭтотОбъект.УникальныйИдентификатор, ""); @@ -95,16 +95,16 @@ Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) УстановитьПривилегированныйРежим(Истина); Если COMПарольПользователяИзменен Тогда - ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ТекущийОбъект.Узел, COMПарольПользователя, "COMПарольПользователя") + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ТекущийОбъект.Корреспондент, COMПарольПользователя, "COMПарольПользователя") КонецЕсли; Если FTPСоединениеПарольИзменен Тогда - ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ТекущийОбъект.Узел, FTPСоединениеПароль, "FTPСоединениеПароль") + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ТекущийОбъект.Корреспондент, FTPСоединениеПароль, "FTPСоединениеПароль") КонецЕсли; Если WSПарольИзменен Тогда - ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ТекущийОбъект.Узел, WSПароль, "WSПароль") + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ТекущийОбъект.Корреспондент, WSПароль, "WSПароль") КонецЕсли; Если ПарольАрхиваСообщенияОбменаИзменен Тогда - ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ТекущийОбъект.Узел, ПарольАрхиваСообщенияОбмена, "ПарольАрхиваСообщенияОбмена") + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ТекущийОбъект.Корреспондент, ПарольАрхиваСообщенияОбмена, "ПарольАрхиваСообщенияОбмена") КонецЕсли; УстановитьПривилегированныйРежим(Ложь); КонецПроцедуры @@ -289,7 +289,13 @@ &НаСервере Процедура ПроверитьПодключениеНаСервере(Отказ, ВидТранспортаСтрокой, НовыйПароль) - ОбменДаннымиСервер.ПроверитьПодключениеОбработкиТранспортаСообщенийОбмена(Отказ, Запись, Перечисления.ВидыТранспортаСообщенийОбмена[ВидТранспортаСтрокой],, НовыйПароль); + СообщениеОбОшибке = ""; + ОбменДаннымиСервер.ПроверитьПодключениеОбработкиТранспортаСообщенийОбмена(Отказ, Запись, + Перечисления.ВидыТранспортаСообщенийОбмена[ВидТранспортаСтрокой], СообщениеОбОшибке, НовыйПароль); + + Если Отказ Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке, , , , Отказ); + КонецЕсли; КонецПроцедуры @@ -309,7 +315,7 @@ УстановитьПривилегированныйРежим(Истина); ПараметрыСоединения.Вставить("COMПарольПользователя", - ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Запись.Узел, "COMПарольПользователя", Истина)); + ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Запись.Корреспондент, "COMПарольПользователя", Истина)); УстановитьПривилегированныйРежим(Ложь); Иначе @@ -331,7 +337,7 @@ Если Не WSПарольИзменен Тогда УстановитьПривилегированныйРежим(Истина); - ПараметрыПодключения.WSПароль = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Запись.Узел, "WSПароль", Истина); + ПараметрыПодключения.WSПароль = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Запись.Корреспондент, "WSПароль", Истина); УстановитьПривилегированныйРежим(Ложь); Иначе @@ -341,7 +347,7 @@ КонецЕсли; СообщениеПользователю = ""; - Если Не ОбменДаннымиСервер.ЕстьПодключениеККорреспонденту(Запись.Узел, ПараметрыПодключения, СообщениеПользователю) Тогда + Если Не ОбменДаннымиСервер.ЕстьПодключениеККорреспонденту(Запись.Корреспондент, ПараметрыПодключения, СообщениеПользователю) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеПользователю,,,, Отказ); КонецЕсли; @@ -352,9 +358,9 @@ ИспользуемыеТранспорты = Новый Массив; - Если ЗначениеЗаполнено(Запись.Узел) Тогда + Если ЗначениеЗаполнено(Запись.Корреспондент) Тогда - ИспользуемыеТранспорты = ОбменДаннымиПовтИсп.ИспользуемыеТранспортыСообщенийОбмена(Запись.Узел); + ИспользуемыеТранспорты = ОбменДаннымиПовтИсп.ИспользуемыеТранспортыСообщенийОбмена(Запись.Корреспондент); КонецЕсли; @@ -427,13 +433,13 @@ ЗапросыРазрешений = Новый Массив; - ПараметрыЗапроса = РегистрыСведений.НастройкиТранспортаОбмена.ПараметрыЗапросаНаИспользованиеВнешнихРесурсов(); + ПараметрыЗапроса = РегистрыСведений.НастройкиТранспортаОбменаДанными.ПараметрыЗапросаНаИспользованиеВнешнихРесурсов(); ПараметрыЗапроса.ЗапрашиватьCOM = ЗапрашиватьCOM; ПараметрыЗапроса.ЗапрашиватьFILE = ЗапрашиватьFILE; ПараметрыЗапроса.ЗапрашиватьWS = ЗапрашиватьWS; ПараметрыЗапроса.ЗапрашиватьFTP = ЗапрашиватьFTP; - РегистрыСведений.НастройкиТранспортаОбмена.ЗапросНаИспользованиеВнешнихРесурсов(ЗапросыРазрешений, + РегистрыСведений.НастройкиТранспортаОбменаДанными.ЗапросНаИспользованиеВнешнихРесурсов(ЗапросыРазрешений, Запись, ПараметрыЗапроса); Возврат ЗапросыРазрешений; diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..61e6fb4bb --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,17 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ФормаСписка/Form.form similarity index 84% rename from SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаСписка/Form.form rename to SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ФормаСписка/Form.form index 6f4353eb8..543e5ef71 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ФормаСписка/Form.form @@ -54,7 +54,7 @@ Copy Create - Узел + Корреспондент 16 true true @@ -62,11 +62,11 @@ true - Список.Узел + Список.Корреспондент true - УзелРасширеннаяПодсказка + КорреспондентРасширеннаяПодсказка 18 Label true @@ -76,7 +76,7 @@ - УзелКонтекстноеМеню + КорреспондентКонтекстноеМеню 17 true @@ -90,6 +90,46 @@ true + + ВидТранспортаСообщенийОбменаПоУмолчанию + 21 + + <key>ru</key> + <value>Вид подключения</value> + + true + true + + true + + + Список.ВидТранспортаСообщенийОбменаПоУмолчанию + + + ВидТранспортаСообщенийОбменаПоУмолчаниюРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + + ВидТранспортаСообщенийОбменаПоУмолчаниюКонтекстноеМеню + 22 + true + + LabelField + Enter + true + Left + true + + true + true + + None СписокКоманднаяПанель @@ -276,7 +316,7 @@
      true
      - InformationRegister.НастройкиТранспортаОбмена + InformationRegister.НастройкиТранспортаОбменаДанными true true true diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Help/ru.html b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Help/ru.html similarity index 100% rename from SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Help/ru.html rename to SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Help/ru.html diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/ManagerModule.bsl similarity index 68% rename from SSL/src/InformationRegisters/НастройкиТранспортаОбмена/ManagerModule.bsl rename to SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/ManagerModule.bsl index cb4ca3c45..d870fdf85 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/ManagerModule.bsl @@ -10,9 +10,12 @@ НачатьТранзакцию(); Попытка - ОбменДаннымиСервер.ДобавитьЗаписьВРегистрСведений(Новый Структура("Корреспондент", СтруктураЗаписи.Узел), "НастройкиТранспортаОбменаОбластиДанных"); + ОбменДаннымиСервер.ДобавитьЗаписьВРегистрСведений(Новый Структура("Корреспондент", СтруктураЗаписи.Корреспондент), + "НастройкиТранспортаОбменаОбластиДанных"); + ЗаписатьПароль("FTPСоединениеПароль", "FTPСоединениеПарольОбластейДанных", СтруктураЗаписи); ЗаписатьПароль("ПарольАрхиваСообщенияОбмена", "ПарольАрхиваСообщенияОбменаОбластейДанных", СтруктураЗаписи); + ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); @@ -22,11 +25,13 @@ Иначе НачатьТранзакцию(); Попытка - ОбменДаннымиСервер.ДобавитьЗаписьВРегистрСведений(СтруктураЗаписи, "НастройкиТранспортаОбмена"); + ОбменДаннымиСервер.ДобавитьЗаписьВРегистрСведений(СтруктураЗаписи, "НастройкиТранспортаОбменаДанными"); + ЗаписатьПароль("COMПарольПользователя", "COMПарольПользователя", СтруктураЗаписи); ЗаписатьПароль("FTPСоединениеПароль", "FTPСоединениеПароль", СтруктураЗаписи); ЗаписатьПароль("WSПароль", "WSПароль", СтруктураЗаписи); ЗаписатьПароль("ПарольАрхиваСообщенияОбмена", "ПарольАрхиваСообщенияОбмена", СтруктураЗаписи); + ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); @@ -42,7 +47,7 @@ НачатьТранзакцию(); Попытка - ОбменДаннымиСервер.ОбновитьЗаписьВРегистрСведений(СтруктураЗаписи, "НастройкиТранспортаОбмена"); + ОбменДаннымиСервер.ОбновитьЗаписьВРегистрСведений(СтруктураЗаписи, "НастройкиТранспортаОбменаДанными"); ЗаписатьПароль("COMПарольПользователя", "COMПарольПользователя", СтруктураЗаписи); ЗаписатьПароль("FTPСоединениеПароль", "FTPСоединениеПароль", СтруктураЗаписи); ЗаписатьПароль("WSПароль", "WSПароль", СтруктураЗаписи); @@ -57,13 +62,13 @@ // Для внутреннего использования. // -Функция НастройкиТранспортаWS(Узел, ПараметрыАутентификации = Неопределено) Экспорт +Функция НастройкиТранспортаWS(Корреспондент, ПараметрыАутентификации = Неопределено) Экспорт СтруктураНастроек = СоставНастроекТранспортаОбмена("WS"); - Результат = ПолучитьДанныеРегистраПоСтруктуре(Узел, СтруктураНастроек); + Результат = ПолучитьДанныеРегистраПоСтруктуре(Корреспондент, СтруктураНастроек); УстановитьПривилегированныйРежим(Истина); - WSПароль = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Узел, "WSПароль", Истина); + WSПароль = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Корреспондент, "WSПароль", Истина); УстановитьПривилегированныйРежим(Ложь); Если ТипЗнч(WSПароль) = Тип("Строка") @@ -91,7 +96,7 @@ Иначе // Пароль на клиенте не вводили. - Пароль = ОбменДаннымиСервер.ПарольСинхронизацииДанных(Узел); + Пароль = ОбменДаннымиСервер.ПарольСинхронизацииДанных(Корреспондент); Результат.WSПароль = ?(Пароль = Неопределено, "", Пароль); @@ -126,20 +131,21 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ - | НастройкиТранспортаОбмена.Узел, - | НастройкиТранспортаОбмена.FTPСоединениеПуть, - | НастройкиТранспортаОбмена.FILEКаталогОбменаИнформацией, - | НастройкиТранспортаОбмена.WSURLВебСервиса, - | НастройкиТранспортаОбмена.COMКаталогИнформационнойБазы, - | НастройкиТранспортаОбмена.COMИмяИнформационнойБазыНаСервере1СПредприятия, - | НастройкиТранспортаОбмена.FTPСоединениеПуть КАК FTPСоединениеПуть, - | НастройкиТранспортаОбмена.FTPСоединениеПорт КАК FTPСоединениеПорт, - | НастройкиТранспортаОбмена.WSURLВебСервиса КАК WSURLВебСервиса, - | НастройкиТранспортаОбмена.FILEКаталогОбменаИнформацией КАК FILEКаталогОбменаИнформацией + | НастройкиТранспорта.Корреспондент КАК Корреспондент, + | НастройкиТранспорта.FTPСоединениеПуть, + | НастройкиТранспорта.FILEКаталогОбменаИнформацией, + | НастройкиТранспорта.WSURLВебСервиса, + | НастройкиТранспорта.COMКаталогИнформационнойБазы, + | НастройкиТранспорта.COMИмяИнформационнойБазыНаСервере1СПредприятия, + | НастройкиТранспорта.FTPСоединениеПуть КАК FTPСоединениеПуть, + | НастройкиТранспорта.FTPСоединениеПорт КАК FTPСоединениеПорт, + | НастройкиТранспорта.WSURLВебСервиса КАК WSURLВебСервиса, + | НастройкиТранспорта.FILEКаталогОбменаИнформацией КАК FILEКаталогОбменаИнформацией |ИЗ - | РегистрСведений.НастройкиТранспортаОбмена КАК НастройкиТранспортаОбмена"; + | РегистрСведений.НастройкиТранспортаОбменаДанными КАК НастройкиТранспорта"; РезультатЗапроса = Запрос.Выполнить(); + Возврат РезультатЗапроса.Выбрать(); КонецФункции @@ -201,7 +207,7 @@ Если Разрешения.Количество() > 0 Тогда ЗапросыРазрешений.Добавить( - МодульРаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(Разрешения, Запись.Узел)); + МодульРаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(Разрешения, Запись.Корреспондент)); КонецЕсли; @@ -211,7 +217,7 @@ Если СтруктураЗаписи.Свойство(ИмяПароляВСтруктуре) Тогда УстановитьПривилегированныйРежим(Истина); - ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(СтруктураЗаписи.Узел, СтруктураЗаписи[ИмяПароляВСтруктуре], ИмяПароляПриЗаписи); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(СтруктураЗаписи.Корреспондент, СтруктураЗаписи[ИмяПароляВСтруктуре], ИмяПароляПриЗаписи); УстановитьПривилегированныйРежим(Ложь); КонецЕсли; @@ -230,50 +236,55 @@ // Возвращаемое значение: // // -Функция НастройкиТранспорта(Знач Узел, Знач ВидТранспортаОбмена = Неопределено) Экспорт +Функция НастройкиТранспорта(Знач Корреспондент, Знач ВидТранспортаОбмена = Неопределено) Экспорт Если ОбщегоНазначения.РазделениеВключено() И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда - Возврат РегистрыСведений["НастройкиТранспортаОбменаОбластиДанных"].НастройкиТранспорта(Узел); + Возврат РегистрыСведений["НастройкиТранспортаОбменаОбластиДанных"].НастройкиТранспорта(Корреспондент); Иначе - Возврат НастройкиТранспортаОбмена(Узел, ВидТранспортаОбмена); + Возврат НастройкиТранспортаОбмена(Корреспондент, ВидТранспортаОбмена); КонецЕсли; КонецФункции -Функция ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы) Экспорт +Функция ВидТранспортаСообщенийОбменаПоУмолчанию(Корреспондент) Экспорт УстановитьПривилегированныйРежим(Истина); // Возвращаемое значение функции. ВидТранспортаСообщений = Неопределено; - ТекстЗапроса = " - |ВЫБРАТЬ - | НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию КАК ВидТранспортаСообщенийОбменаПоУмолчанию - |ИЗ - | РегистрСведений.НастройкиТранспортаОбмена КАК НастройкиТранспортаОбмена - |ГДЕ - | НастройкиТранспортаОбмена.Узел = &УзелИнформационнойБазы - |"; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - Запрос.УстановитьПараметр("УзелИнформационнойБазы", УзелИнформационнойБазы); + Если ОбщегоНазначения.РазделениеВключено() + И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + Запрос = Новый Запрос( + "ВЫБРАТЬ + | НастройкиТранспортаОбластейДанных.ВидТранспортаСообщенийОбменаПоУмолчанию КАК ВидТранспортаСообщенийОбменаПоУмолчанию + |ИЗ + | РегистрСведений.НастройкиТранспортаОбменаОбластиДанных КАК НастройкиТранспортаОбластиДанных + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиТранспортаОбменаОбластейДанных КАК НастройкиТранспортаОбластейДанных + | ПО (НастройкиТранспортаОбластейДанных.КонечнаяТочкаКорреспондента = НастройкиТранспортаОбластиДанных.КонечнаяТочкаКорреспондента) + |ГДЕ + | НастройкиТранспортаОбластиДанных.Корреспондент = &Корреспондент"); + Иначе + Запрос = Новый Запрос( + "ВЫБРАТЬ + | НастройкиТранспорта.ВидТранспортаСообщенийОбменаПоУмолчанию КАК ВидТранспортаСообщенийОбменаПоУмолчанию + |ИЗ + | РегистрСведений.НастройкиТранспортаОбменаДанными КАК НастройкиТранспорта + |ГДЕ + | НастройкиТранспорта.Корреспондент = &Корреспондент"); + КонецЕсли; + Запрос.УстановитьПараметр("Корреспондент", Корреспондент); Выборка = Запрос.Выполнить().Выбрать(); - Если Выборка.Следующий() Тогда - ВидТранспортаСообщений = Выборка.ВидТранспортаСообщенийОбменаПоУмолчанию; - КонецЕсли; - УстановитьПривилегированныйРежим(Ложь); - Возврат ВидТранспортаСообщений; + КонецФункции Функция ИмяКаталогаОбменаИнформацией(ВидТранспортаСообщенийОбмена, УзелИнформационнойБазы) Экспорт @@ -298,62 +309,19 @@ Возврат Результат; КонецФункции -Функция ПредставленияНастроекТранспорта(ВидТранспорта) Экспорт +Функция НастройкиТранспортаДляУзлаЗаданы(Корреспондент) Экспорт - Результат = Новый Структура; - - Если ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.COM Тогда - - ДобавитьЭлементПредставленияНастройки(Результат, "COMВариантРаботыИнформационнойБазы"); - ДобавитьЭлементПредставленияНастройки(Результат, "COMИмяСервера1СПредприятия"); - ДобавитьЭлементПредставленияНастройки(Результат, "COMИмяИнформационнойБазыНаСервере1СПредприятия"); - ДобавитьЭлементПредставленияНастройки(Результат, "COMКаталогИнформационнойБазы"); - ДобавитьЭлементПредставленияНастройки(Результат, "COMАутентификацияОперационнойСистемы"); - ДобавитьЭлементПредставленияНастройки(Результат, "COMИмяПользователя"); - - ИначеЕсли ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.FILE Тогда - - ДобавитьЭлементПредставленияНастройки(Результат, "FILEКаталогОбменаИнформацией"); - ДобавитьЭлементПредставленияНастройки(Результат, "FILEСжиматьФайлИсходящегоСообщения"); - - ИначеЕсли ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.FTP Тогда - - ДобавитьЭлементПредставленияНастройки(Результат, "FTPСоединениеПуть"); - ДобавитьЭлементПредставленияНастройки(Результат, "FTPСоединениеПорт"); - ДобавитьЭлементПредставленияНастройки(Результат, "FTPСоединениеПользователь"); - ДобавитьЭлементПредставленияНастройки(Результат, "FTPСоединениеМаксимальныйДопустимыйРазмерСообщения"); - ДобавитьЭлементПредставленияНастройки(Результат, "FTPСоединениеПассивноеСоединение"); - ДобавитьЭлементПредставленияНастройки(Результат, "FTPСжиматьФайлИсходящегоСообщения"); - - ИначеЕсли ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL Тогда - - ДобавитьЭлементПредставленияНастройки(Результат, "EMAILУчетнаяЗапись"); - ДобавитьЭлементПредставленияНастройки(Результат, "EMAILМаксимальныйДопустимыйРазмерСообщения"); - ДобавитьЭлементПредставленияНастройки(Результат, "EMAILСжиматьФайлИсходящегоСообщения"); - - ИначеЕсли ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда - - ДобавитьЭлементПредставленияНастройки(Результат, "WSURLВебСервиса"); - ДобавитьЭлементПредставленияНастройки(Результат, "WSИмяПользователя"); - - КонецЕсли; - - Возврат Результат; -КонецФункции - -Функция НастройкиТранспортаДляУзлаЗаданы(Узел) Экспорт - - ТекстЗапроса = " - |ВЫБРАТЬ 1 ИЗ РегистрСведений.НастройкиТранспортаОбмена КАК НастройкиТранспортаОбмена + Запрос = Новый Запрос( + "ВЫБРАТЬ + | 1 КАК ЕстьНастройки + |ИЗ + | РегистрСведений.НастройкиТранспортаОбменаДанными КАК НастройкиТранспорта |ГДЕ - | НастройкиТранспортаОбмена.Узел = &Узел - |"; - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Узел", Узел); - Запрос.Текст = ТекстЗапроса; + | НастройкиТранспорта.Корреспондент = &Корреспондент"); + Запрос.УстановитьПараметр("Корреспондент", Корреспондент); Возврат Не Запрос.Выполнить().Пустой(); + КонецФункции Функция НастроенныеВидыТранспорта(УзелИнформационнойБазы) Экспорт @@ -362,38 +330,44 @@ НастройкиТранспорта = НастройкиТранспорта(УзелИнформационнойБазы); - Если ЗначениеЗаполнено(НастройкиТранспорта.COMКаталогИнформационнойБазы) - ИЛИ ЗначениеЗаполнено(НастройкиТранспорта.COMИмяИнформационнойБазыНаСервере1СПредприятия) Тогда + Если ОбщегоНазначения.РазделениеВключено() + И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда - Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.COM); + Если Не НастройкиТранспорта = Неопределено Тогда + Если ЗначениеЗаполнено(НастройкиТранспорта.FILEКаталогОбменаИнформацией) Тогда + Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FILE); + КонецЕсли; + + Если ЗначениеЗаполнено(НастройкиТранспорта.FTPСоединениеПуть) Тогда + Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FTP); + КонецЕсли; + КонецЕсли; - КонецЕсли; - - Если ЗначениеЗаполнено(НастройкиТранспорта.EMAILУчетнаяЗапись) Тогда + Иначе + Если ЗначениеЗаполнено(НастройкиТранспорта.COMКаталогИнформационнойБазы) + Или ЗначениеЗаполнено(НастройкиТранспорта.COMИмяИнформационнойБазыНаСервере1СПредприятия) Тогда + Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.COM); + КонецЕсли; - Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL); + Если ЗначениеЗаполнено(НастройкиТранспорта.EMAILУчетнаяЗапись) Тогда + Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL); + КонецЕсли; - КонецЕсли; - - Если ЗначениеЗаполнено(НастройкиТранспорта.FILEКаталогОбменаИнформацией) Тогда + Если ЗначениеЗаполнено(НастройкиТранспорта.FILEКаталогОбменаИнформацией) Тогда + Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FILE); + КонецЕсли; - Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FILE); - - КонецЕсли; - - Если ЗначениеЗаполнено(НастройкиТранспорта.FTPСоединениеПуть) Тогда - - Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FTP); - - КонецЕсли; - - Если ЗначениеЗаполнено(НастройкиТранспорта.WSURLВебСервиса) Тогда - - Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.WS); + Если ЗначениеЗаполнено(НастройкиТранспорта.FTPСоединениеПуть) Тогда + Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FTP); + КонецЕсли; + Если ЗначениеЗаполнено(НастройкиТранспорта.WSURLВебСервиса) Тогда + Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.WS); + КонецЕсли; КонецЕсли; Возврат Результат; + КонецФункции //////////////////////////////////////////////////////////////////////////////// @@ -409,7 +383,7 @@ // Возвращаемое значение: // // -Функция НастройкиТранспортаОбмена(Узел, ВидТранспортаОбмена) +Функция НастройкиТранспортаОбмена(Корреспондент, ВидТранспортаОбмена) СтруктураНастроек = Новый Структура; @@ -441,11 +415,11 @@ КонецЕсли; КонецЕсли; - Результат = ПолучитьДанныеРегистраПоСтруктуре(Узел, СтруктураНастроек); + Результат = ПолучитьДанныеРегистраПоСтруктуре(Корреспондент, СтруктураНастроек); Результат.Вставить("ИспользоватьВременныйКаталогДляОтправкиИПриемаСообщений", Истина); УстановитьПривилегированныйРежим(Истина); - Пароли = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Узел, СписокПаролей, Истина); + Пароли = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Корреспондент, СписокПаролей, Истина); УстановитьПривилегированныйРежим(Ложь); Если ТипЗнч(Пароли) = Тип("Структура") Тогда @@ -459,9 +433,9 @@ Возврат Результат; КонецФункции -Функция ПолучитьДанныеРегистраПоСтруктуре(Узел, СтруктураНастроек) +Функция ПолучитьДанныеРегистраПоСтруктуре(Корреспондент, СтруктураНастроек) - Если Не ЗначениеЗаполнено(Узел) Тогда + Если Не ЗначениеЗаполнено(Корреспондент) Тогда Возврат СтруктураНастроек; КонецЕсли; @@ -484,14 +458,14 @@ ТекстЗапроса = ТекстЗапроса + " |ИЗ - | РегистрСведений.НастройкиТранспортаОбмена КАК НастройкиТранспортаОбмена + | РегистрСведений.НастройкиТранспортаОбменаДанными КАК НастройкиТранспорта |ГДЕ - | НастройкиТранспортаОбмена.Узел = &Узел + | НастройкиТранспорта.Корреспондент = &Корреспондент |"; Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; - Запрос.УстановитьПараметр("Узел", Узел); + Запрос.УстановитьПараметр("Корреспондент", Корреспондент); Выборка = Запрос.Выполнить().Выбрать(); @@ -512,21 +486,23 @@ Функция СоставНастроекТранспортаОбмена(ПодстрокаПоиска) - СтруктураНастроекТранспорта = Новый Структура(); + СтруктураНастроекТранспорта = Новый Структура; - МетаданныеРегистра = Метаданные.РегистрыСведений.НастройкиТранспортаОбмена; + НаборЗаписей = СоздатьНаборЗаписей(); + Запись = НаборЗаписей.Добавить(); // Для значений по умолчанию. - Для Каждого Ресурс Из МетаданныеРегистра.Ресурсы Цикл + Для Каждого Ресурс Из НаборЗаписей.Метаданные().Ресурсы Цикл Если СтрНайти(Ресурс.Имя, ПодстрокаПоиска) <> 0 Тогда - СтруктураНастроекТранспорта.Вставить(Ресурс.Имя, Ресурс.Синоним); + СтруктураНастроекТранспорта.Вставить(Ресурс.Имя, Запись[Ресурс.Имя]); КонецЕсли; КонецЦикла; Возврат СтруктураНастроекТранспорта; + КонецФункции Функция ОбъединитьКоллекции(Структура1, Структура2) @@ -549,12 +525,6 @@ КонецПроцедуры -Процедура ДобавитьЭлементПредставленияНастройки(Структура, ИмяНастройки) - - Структура.Вставить(ИмяНастройки, Метаданные.РегистрыСведений.НастройкиТранспортаОбмена.Ресурсы[ИмяНастройки].Представление()); - -КонецПроцедуры - #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/RecordSetModule.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/RecordSetModule.bsl similarity index 88% rename from SSL/src/InformationRegisters/НастройкиТранспортаОбмена/RecordSetModule.bsl rename to SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/RecordSetModule.bsl index 794cb977b..6407a6574 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/RecordSetModule.bsl @@ -4,16 +4,12 @@ Процедура ПередЗаписью(Отказ, Замещение) - // Запрещаем изменять набор записей для неразделенных узлов из разделенного режима. - ОбменДаннымиСервер.ВыполнитьКонтрольЗаписиНеразделенныхДанных(Отбор.Узел.Значение); - Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; Для Каждого СтрокаНабора Из ЭтотОбъект Цикл - // Удаляем незначащие символы (пробелы) слева и справа для строковых параметров. СокрЛПЗначениеПоля(СтрокаНабора, "COMИмяИнформационнойБазыНаСервере1СПредприятия"); СокрЛПЗначениеПоля(СтрокаНабора, "COMИмяПользователя"); @@ -53,4 +49,4 @@ #КонецОбласти -#КонецЕсли +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/НастройкиТранспортаОбменаДанными.mdo b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/НастройкиТранспортаОбменаДанными.mdo new file mode 100644 index 000000000..c811a2756 --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/НастройкиТранспортаОбменаДанными.mdo @@ -0,0 +1,669 @@ + + + + + + + + + + + + НастройкиТранспортаОбменаДанными + + ru + Настройки транспорта обмена данными + + true + InDialog + InformationRegister.НастройкиТранспортаОбменаДанными.Form.ФормаЗаписи + InformationRegister.НастройкиТранспортаОбменаДанными.Form.ФормаСписка + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + + + ru + + + Managed + + COMАутентификацияОперационнойСистемы + + ru + Аутентификация операционной системы + + + Boolean + + + ru + Признак аутентификации операционной системы при создании внешнего подключения к информационной базе + + + + Use + Use + + + + COMВариантРаботыИнформационнойБазы + + ru + Вариант работы информационной базы + + + Number + + 1 + + + + ru + Вариант работы информационной базы: 0 – файловый; 1 – клиент-серверный + + + + Use + Use + + + + COMИмяИнформационнойБазыНаСервере1СПредприятия + + ru + Имя информационной базы на сервере 1С:Предприятия + + + String + + + + ru + Имя информационной базы на сервере 1С:Предприятия. + + + + Use + Use + + + + COMИмяПользователя + + ru + Имя пользователя + + + String + + 50 + + + + ru + Имя пользователя информационной базы + + + + Use + Use + + + + COMИмяСервера1СПредприятия + + ru + Имя сервера 1С:Предприятия + + + String + + + + ru + Имя сервера 1С:Предприятия. + + + + Use + Use + + + + COMКаталогИнформационнойБазы + + ru + Каталог информационной базы + + + String + + + + ru + Каталог информационной базы для файлового режима работы + + + + Use + Use + + + + EMAILМаксимальныйДопустимыйРазмерСообщения + + ru + Допустимый размер вложения письма + + + Number + + 10 + true + + + + ru + Максимальный размер отправляемого файла сообщения обмена (Кб) + + + + Use + Use + + + + EMAILСжиматьФайлИсходящегоСообщения + + ru + Сжимать отправляемые данные в архив + + + Boolean + + + ru + Признак того, что отправляемые данные будут заархивированы перед отправкой. + + + + Use + Use + + + + EMAILУчетнаяЗапись + + ru + Учетная запись электронной почты + + + CatalogRef.УчетныеЗаписиЭлектроннойПочты + + + ru + Учетная запись для синхронизации + + + + Use + Use + + + + EMAILТранслитерироватьИменаФайловСообщенийОбмена + + ru + Транслитерировать имена файлов сообщений обмена + + + Boolean + + + ru + Признак того, что имена файлов сообщений обмена будут содержать только латинские символы. + + + + Use + Use + + + + FILEКаталогОбменаИнформацией + + ru + Каталог + + + String + + + + ru + Каталог синхронизации данных на сетевом ресурсе. + + + + Use + Use + + + + FILEСжиматьФайлИсходящегоСообщения + + ru + Сжимать отправляемые данные в архив + + + Boolean + + + ru + Признак того, что отправляемые данные будут заархивированы перед отправкой. + + + + Use + Use + + + + FILEТранслитерироватьИменаФайловСообщенийОбмена + + ru + Транслитерировать имена файлов сообщений обмена + + + Boolean + + + ru + Признак того, что имена файлов сообщений обмена будут содержать только латинские символы. + + + + Use + Use + + + + FTPСжиматьФайлИсходящегоСообщения + + ru + Сжимать отправляемые данные в архив + + + Boolean + + + ru + Признак того, что отправляемые данные будут заархивированы перед отправкой. + + + + Use + Use + + + + FTPСоединениеМаксимальныйДопустимыйРазмерСообщения + + ru + Максимальный размер файла + + + Number + + 10 + true + + + + ru + Максимальный размер отправляемого файла сообщения обмена (Кб) + + + + Use + Use + + + + FTPСоединениеПассивноеСоединение + + ru + Пассивное соединение + + + Boolean + + + ru + Признак пассивного соединения. + + + + Use + Use + + + + FTPСоединениеПользователь + + ru + Пользователь (логин) + + + String + + 50 + + + + ru + Имя пользователя для доступа на FTP-ресурс. + + + + Use + Use + + + + FTPСоединениеПорт + + ru + Порт + + + Number + + 5 + + + + ru + Порт для доступа на FTP-ресурс. + + + + Use + Use + + + + FTPСоединениеПуть + + ru + Путь к каталогу + + + String + + + + ru + Строка с полным именем пути FTP-ресурса + + + + Use + Use + + + + FTPТранслитерироватьИменаФайловСообщенийОбмена + + ru + Транслитерировать имена файлов сообщений обмена + + + Boolean + + + ru + Признак того, что имена файлов сообщений обмена будут содержать только латинские символы. + + + + Use + Use + + + + WSURLВебСервиса + + ru + Адрес + + + String + + + + ru + Адрес веб-сервиса + + + + Use + Use + + + + WSЗапомнитьПароль + + ru + Запомнить пароль + + + Boolean + + + ru + Признак сохранения пароля + + + + Use + + + + WSИмяПользователя + + ru + Пользователь + + + String + + 165 + + + + ru + Имя пользователя (логин) + + + + Use + Use + + + + WSИспользоватьПередачуБольшогоОбъемаДанных + + ru + Использовать передачу большого объема данных + + + Boolean + + + ru + Использовать передачу большого объема данных через веб-сервис + + + + Use + Use + + + + ВидТранспортаСообщенийОбменаПоУмолчанию + + ru + Вид транспорта сообщений обмена по умолчанию + + + EnumRef.ВидыТранспортаСообщенийОбмена + + + ru + Параметры подключения, используемые по умолчанию. + + + + Use + Use + + + + КоличествоЭлементовВТранзакцииВыгрузкиДанных + + ru + Количество элементов в транзакции выгрузки данных + + + Number + + 10 + true + + + + ru + Количество элементов на одну транзакцию выгрузки данных. 0 – данные будут выгружены в одной транзакции. + + + + Use + Use + + + + КоличествоЭлементовВТранзакцииЗагрузкиДанных + + ru + Количество элементов в транзакции загрузки данных + + + Number + + 10 + true + + + + ru + Количество элементов на одну транзакцию загрузки данных. 0 – данные будут загружены в одной транзакции. + + + + Use + Use + + + + Корреспондент + + ru + Корреспондент + + + ExchangePlanRef + + + ru + Узел плана обмена, для которого задаются настройки транспорта. + + + + ShowError + true + Use + Use + true + + true + true + + + ФормаЗаписи + + ru + Форма записи + + PersonalComputer + MobileDevice + + + НастройкаПодключенияКСервису + + ru + Настройка подключения к сервису + + PersonalComputer + MobileDevice + + + ПовторнаяСинхронизацияДанныхПередЗапуском + + ru + Повторная синхронизация данных перед запуском + + PersonalComputer + MobileDevice + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаСообщениями/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаСообщениями/ManagerModule.bsl new file mode 100644 index 000000000..411d1ff53 --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаСообщениями/ManagerModule.bsl @@ -0,0 +1,150 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныйПрограммныйИнтерфейс + +// Процедура добавляет запись в регистр по переданным значениям структуры. +Процедура ДобавитьЗапись(СтруктураЗаписи) Экспорт + + НачатьТранзакцию(); + Попытка + НаборЗаписей = СоздатьНаборЗаписей(); + Если СтруктураЗаписи.Свойство("КонечнаяТочка") Тогда + НаборЗаписей.Отбор.КонечнаяТочка.Установить(СтруктураЗаписи.КонечнаяТочка); + КонецЕсли; + + НоваяЗапись = НаборЗаписей.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяЗапись, СтруктураЗаписи); + НаборЗаписей.Записать(); + + ЗаписатьПароль("Пароль", "WSПароль", СтруктураЗаписи); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Процедура обновляет запись в регистре по переданным значениям структуры. +Процедура ОбновитьЗапись(СтруктураЗаписи) Экспорт + + НачатьТранзакцию(); + Попытка + МенеджерЗаписи = СоздатьМенеджерЗаписи(); + Если СтруктураЗаписи.Свойство("КонечнаяТочка") Тогда + МенеджерЗаписи.КонечнаяТочка = СтруктураЗаписи.КонечнаяТочка; + КонецЕсли; + + МенеджерЗаписи.Прочитать(); + ЗаполнитьЗначенияСвойств(МенеджерЗаписи, СтруктураЗаписи); + МенеджерЗаписи.Записать(); + + ЗаписатьПароль("Пароль", "WSПароль", СтруктураЗаписи); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Для внутреннего использования. +// +Функция НастройкиТранспортаWS(КонечнаяТочка, ПараметрыАутентификации = Неопределено) Экспорт + + Результат = Новый Структура; + Результат.Вставить("ВидТранспортаСообщенийОбменаПоУмолчанию", Перечисления.ВидыТранспортаСообщенийОбмена.WS); + Результат.Вставить("WSURLВебСервиса"); + Результат.Вставить("WSИмяПользователя"); + Результат.Вставить("WSЗапомнитьПароль"); + Результат.Вставить("WSПароль"); + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | НастройкиТранспорта.АдресВебСервиса КАК WSURLВебСервиса, + | НастройкиТранспорта.ИмяПользователя КАК WSИмяПользователя, + | НастройкиТранспорта.ЗапомнитьПароль КАК WSЗапомнитьПароль + |ИЗ + | РегистрСведений.НастройкиТранспортаОбменаСообщениями КАК НастройкиТранспорта + |ГДЕ + | НастройкиТранспорта.КонечнаяТочка = &КонечнаяТочка"); + Запрос.УстановитьПараметр("КонечнаяТочка", КонечнаяТочка); + + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + ЗаполнитьЗначенияСвойств(Результат, Выборка); + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + WSПароль = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(КонечнаяТочка, "WSПароль", Истина); + УстановитьПривилегированныйРежим(Ложь); + + Если ТипЗнч(WSПароль) = Тип("Строка") + Или WSПароль = Неопределено Тогда + + Результат.Вставить("WSПароль", WSПароль); + Иначе + ВызватьИсключение НСтр("ru='Ошибка при извлечении пароля из безопасного хранилища.'"); + КонецЕсли; + + Если ТипЗнч(ПараметрыАутентификации) = Тип("Структура") Тогда // Инициация обмена пользователем с клиента. + + Если ПараметрыАутентификации.ИспользоватьТекущегоПользователя Тогда + + Результат.WSИмяПользователя = ПользователиИнформационнойБазы.ТекущийПользователь().Имя; + + КонецЕсли; + + Пароль = Неопределено; + + Если ПараметрыАутентификации.Свойство("Пароль", Пароль) + И Пароль <> Неопределено Тогда // Ввели пароль на клиенте + + Результат.WSПароль = Пароль; + + Иначе // Пароль на клиенте не вводили. + + Пароль = ПарольСинхронизацииДанных(КонечнаяТочка); + Результат.WSПароль = ?(Пароль = Неопределено, "", Пароль); + + КонецЕсли; + + ИначеЕсли ТипЗнч(ПараметрыАутентификации) = Тип("Строка") Тогда + Результат.WSПароль = ПараметрыАутентификации; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ЗаписатьПароль(ИмяПароляВСтруктуре, ИмяПароляПриЗаписи, СтруктураЗаписи) + + Если СтруктураЗаписи.Свойство(ИмяПароляВСтруктуре) Тогда + УстановитьПривилегированныйРежим(Истина); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(СтруктураЗаписи.КонечнаяТочка, + СтруктураЗаписи[ИмяПароляВСтруктуре], ИмяПароляПриЗаписи); + УстановитьПривилегированныйРежим(Ложь); + КонецЕсли; + +КонецПроцедуры + +Функция ПарольСинхронизацииДанных(УзелИнформационнойБазы) + + Пароль = Неопределено; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + УстановитьПривилегированныйРежим(Истина); + Пароль = ПараметрыСеанса.ПаролиСинхронизацииДанных.Получить(УзелИнформационнойБазы); + КонецЕсли; + + Возврат Пароль; + +КонецФункции + +#КонецОбласти + +#КонецЕсли \ 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..6616a72a5 --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаСообщениями/RecordSetModule.bsl @@ -0,0 +1,43 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиСобытий + +Процедура ПередЗаписью(Отказ, Замещение) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Для Каждого СтрокаНабора Из ЭтотОбъект Цикл + // Удаляем незначащие символы (пробелы) слева и справа для строковых параметров. + СокрЛПЗначениеПоля(СтрокаНабора, "АдресВебСервиса"); + СокрЛПЗначениеПоля(СтрокаНабора, "ИмяПользователя"); + КонецЦикла; + +КонецПроцедуры + +Процедура ПриЗаписи(Отказ, Замещение) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + // Обновляем кэш платформы для зачитывания актуальных настроек транспорта + // сообщений обмена процедурой ОбменДаннымиПовтИсп.НастройкиОбменаДанными. + ОбновитьПовторноИспользуемыеЗначения(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура СокрЛПЗначениеПоля(Запись, Знач Поле) + + Запись[Поле] = СокрЛП(Запись[Поле]); + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаСообщениями/НастройкиТранспортаОбменаСообщениями.mdo b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаСообщениями/НастройкиТранспортаОбменаСообщениями.mdo new file mode 100644 index 000000000..36063d9e4 --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаСообщениями/НастройкиТранспортаОбменаСообщениями.mdo @@ -0,0 +1,131 @@ + + + + + + + + + + + + НастройкиТранспортаОбменаСообщениями + + ru + Настройки транспорта обмена сообщениями + + true + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + АдресВебСервиса + + ru + Адрес веб-сервиса + + + String + + + + ru + Адрес веб-сервиса + + + + Use + Use + + + + ИмяПользователя + + ru + Имя пользователя + + + String + + 165 + + + + ru + Имя пользователя (логин) + + + + Use + Use + + + + ЗапомнитьПароль + + ru + Запомнить пароль + + + Boolean + + + ru + Признак сохранения пароля + + + + Use + + + + КонечнаяТочка + + ru + Конечная точка + + + ExchangePlanRef.ОбменСообщениями + + + + Use + Use + true + + true + true + + diff --git a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Form.form index d2eddd9be..79584203c 100644 --- a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Form.form @@ -1024,6 +1024,7 @@ Page + HorizontalIfPossible auto false diff --git a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/ManagerModule.bsl new file mode 100644 index 000000000..ced9f56eb --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/ManagerModule.bsl @@ -0,0 +1,26 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +#Область ДляВызоваИзДругихПодсистем + +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтениеИзменение + |ГДЕ + | ЗначениеРазрешено(УчетнаяЗаписьЭлектроннойПочты) + | ИЛИ ЗначениеРазрешено(УчетнаяЗаписьЭлектроннойПочты.ВладелецУчетнойЗаписи, ПустаяСсылка КАК Ложь)"; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + +#КонецОбласти + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/InformationRegisters/ОбластиПерсональныхДанных/ОбластиПерсональныхДанных.mdo b/SSL/src/InformationRegisters/ОбластиПерсональныхДанных/ОбластиПерсональныхДанных.mdo index 535fbcd2a..2f75c6206 100644 --- a/SSL/src/InformationRegisters/ОбластиПерсональныхДанных/ОбластиПерсональныхДанных.mdo +++ b/SSL/src/InformationRegisters/ОбластиПерсональныхДанных/ОбластиПерсональныхДанных.mdo @@ -1,13 +1,13 @@ - + - - - - - - - + + + + + + + ОбластиПерсональныхДанных @@ -50,7 +50,7 @@ Managed - + ИспользованиеСобытийЖурналаРегистрации ru @@ -68,7 +68,7 @@ Use - + ИмяОбласти ru diff --git a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаНаУровнеЗаписей/Form.form b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаНаУровнеЗаписей/Form.form new file mode 100644 index 000000000..8756c1a75 --- /dev/null +++ b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаНаУровнеЗаписей/Form.form @@ -0,0 +1,3032 @@ + + + + ГруппаПредупреждениеОграничениеОтключено + 207 + + ПредупреждениеОграничениеОтключеноКартинка + 209 + true + true + + true + + + ПредупреждениеОграничениеОтключеноКартинкаРасширеннаяПодсказка + 211 + Label + true + true + + Left + + + + ПредупреждениеОграничениеОтключеноКартинкаКонтекстноеМеню + 210 + true + + true + true + + + CommonPicture.Предупреждение32 + + + + + ПредупреждениеОграничениеОтключеноНадпись + 212 + + <key>ru</key> + <value>Ограничение на уровне записей отключено +(см. настройку пользователей и прав в разделе Администрирование)</value> + + true + true + + true + + + ПредупреждениеОграничениеОтключеноНадписьРасширеннаяПодсказка + 214 + Label + true + true + + Left + + + + ПредупреждениеОграничениеОтключеноНадписьКонтекстноеМеню + 213 + true + + Label + true + + Left + + + true + + true + + + <key>ru</key> + <value>Группа предупреждение (ограничение отключено)</value> + + + ГруппаПредупреждениеОграничениеОтключеноРасширеннаяПодсказка + 208 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Center + Auto + true + true + Auto + Auto + + + + ГруппаПредупреждениеУниверсальноеОграничениеОтключено + 199 + + ПредупреждениеУниверсальноеОграничениеОтключеноКартинка + 201 + true + true + + true + + + ПредупреждениеУниверсальноеОграничениеОтключеноКартинкаРасширеннаяПодсказка + 203 + Label + true + true + + Left + + + + ПредупреждениеУниверсальноеОграничениеОтключеноКартинкаКонтекстноеМеню + 202 + true + + true + true + + + CommonPicture.Предупреждение32 + + + + + ПредупреждениеУниверсальноеОграничениеОтключеноНадпись + 204 + + <key>ru</key> + <value>Универсальное ограничение отключено - используется стандартное ограничение +(см. константу Ограничивать доступ на уровне записей универсально)</value> + + true + true + + true + + + ПредупреждениеУниверсальноеОграничениеОтключеноНадписьРасширеннаяПодсказка + 206 + Label + true + true + + Left + + + + ПредупреждениеУниверсальноеОграничениеОтключеноНадписьКонтекстноеМеню + 205 + true + + Label + true + + Left + + + true + + true + + + <key>ru</key> + <value>Группа предупреждение (универсальное ограничение отключено)</value> + + + ГруппаПредупреждениеУниверсальноеОграничениеОтключеноРасширеннаяПодсказка + 200 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Center + Auto + true + true + Auto + Auto + + + + РегламентноеЗадание + 148 + + РегламентноеЗаданиеКартинка + 158 + + <key>ru</key> + <value>Регламентное задание (Картинка)</value> + + true + true + + true + + + РегламентноеЗаданиеКартинкаРасширеннаяПодсказка + 160 + Label + true + true + + Left + + + + РегламентноеЗаданиеКартинкаКонтекстноеМеню + 159 + true + + 2 + true + 1 + true + + + StdPicture.ScheduledJob + + AutoSize + + + + ПоследнееЗавершениеРегламентногоЗадания + 128 + + <key>ru</key> + <value>Последнее завершение</value> + + true + + true + + + ПоследнееЗавершениеРегламентногоЗадания + + + ru + Последнее завершение работы регламентного задания "Обновление доступа" + + + ПоследнееЗавершениеРегламентногоЗаданияРасширеннаяПодсказка + 130 + Label + true + true + + Left + + + + ПоследнееЗавершениеРегламентногоЗаданияКонтекстноеМеню + 129 + true + + LabelField + Enter + true + Left + true + + true + true + + ru + ДЛФ=DT + + + + + ПоследнееЗавершениеРегламентногоЗаданияВремя + 170 + + <key>ru</key> + <value>Последнее завершение</value> + + true + true + + true + + + ПоследнееЗавершениеРегламентногоЗаданияВремя + + + ru + Последнее завершение работы регламентного задания +"Обновление доступа на уровне записей" + + + ПоследнееЗавершениеРегламентногоЗаданияВремяРасширеннаяПодсказка + 172 + Label + true + true + + Left + + + + ПоследнееЗавершениеРегламентногоЗаданияВремяКонтекстноеМеню + 171 + true + + LabelField + Enter + true + Left + true + + true + true + + ru + ДЛФ=T + + + Style.NormalTextFont + true + false + false + false + + + + + РегламентноеЗаданиеЗавершилосьОшибкой + 131 + + РегламентноеЗаданиеЗавершилосьОшибкойКартинка + 133 + + <key>ru</key> + <value>Регламентное задание не работает (Картинка)</value> + + true + true + + true + + + РегламентноеЗаданиеЗавершилосьОшибкойКартинкаРасширеннаяПодсказка + 135 + Label + true + true + + Left + + + + РегламентноеЗаданиеЗавершилосьОшибкойКартинкаКонтекстноеМеню + 134 + true + + true + true + + + StdPicture.Stop + + + + + ПоказатьТекстОшибкиЗавершенияРегламентногоЗадания + 139 + + <key>ru</key> + <value>Ошибка...</value> + + true + true + + true + + + ПоказатьТекстОшибкиЗавершенияРегламентногоЗаданияРасширеннаяПодсказка + 140 + Label + true + true + + Left + + + Hyperlink + Form.Command.ПоказатьТекстОшибкиЗавершенияРегламентногоЗадания + Normal + Auto + true + true + UserCmds + Auto + + + Отступ1 + 161 + true + true + + true + + + Отступ1РасширеннаяПодсказка + 163 + Label + true + true + + Left + + + + Отступ1КонтекстноеМеню + 162 + true + + Label + 1 + true + true + + Left + + + true + + true + + + <key>ru</key> + <value>Регламентное задание завершилось ошибкой</value> + + + РегламентноеЗаданиеЗавершилосьОшибкойРасширеннаяПодсказка + 132 + Label + true + true + + Left + + + UsualGroup + + Center + Auto + true + true + Auto + Auto + + + + РегламентноеЗаданиеНеВыполняется + 215 + + ПояснениеРегламентноеЗаданиеНеВыполняется + 223 + + <key>ru</key> + <value>Не выполняется</value> + + true + true + + true + + + ru + Пауза между запусками или выполнено 100% обновления + + + ПояснениеРегламентноеЗаданиеНеВыполняетсяРасширеннаяПодсказка + 225 + Label + true + true + + Left + + + + ПояснениеРегламентноеЗаданиеНеВыполняетсяКонтекстноеМеню + 224 + true + + Label + true + true + + Left + + + + ЗапуститьРегламентноеЗаданиеСейчас + 144 + + <key>ru</key> + <value>Запустить сейчас</value> + + true + true + + true + + + ЗапуститьРегламентноеЗаданиеСейчасРасширеннаяПодсказка + 145 + Label + true + true + + Left + + + Hyperlink + Form.Command.ЗапуститьРегламентноеЗаданиеСейчас + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Регламентное задание выполняется</value> + + + РегламентноеЗаданиеНеВыполняетсяРасширеннаяПодсказка + 216 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + РегламентноеЗаданиеВыполняется + 179 + + КартинкаРегламентноеЗаданиеВыполняется + 181 + + <key>ru</key> + <value>Картинка регламентное задание выполняется</value> + + true + true + + true + + + КартинкаРегламентноеЗаданиеВыполняетсяРасширеннаяПодсказка + 183 + Label + true + true + + Left + + + + КартинкаРегламентноеЗаданиеВыполняетсяКонтекстноеМеню + 182 + true + + 2 + true + 1 + true + + + CommonPicture.ДлительнаяОперация48 + + AutoSize + + ru + Регламентное задания "Обновление доступа" выполняется + + + + + КартинкаРегламентноеЗаданиеОжидаетВыполнения + 187 + + <key>ru</key> + <value>Картинка регламентное задание ожидает выполнения</value> + + false + + true + + + КартинкаРегламентноеЗаданиеОжидаетВыполненияРасширеннаяПодсказка + 189 + Label + true + true + + Left + + + + КартинкаРегламентноеЗаданиеОжидаетВыполненияКонтекстноеМеню + 188 + true + + 2 + true + 1 + true + + + CommonPicture.ДлительнаяОперация48 + + AutoSize + + ru + Регламентное задания "Обновление доступа" ожидает в очереди, +а не выполняется (так происходит, когда очередь слишком большая) + + + + + ВремяВыполненияРегламентногоЗадания1 + 226 + + <key>ru</key> + <value>Выполняется 2 мин 22 сек</value> + + true + true + + true + + + ВремяВыполненияРегламентногоЗадания1РасширеннаяПодсказка + 228 + Label + true + true + + Left + + + + ВремяВыполненияРегламентногоЗадания1КонтекстноеМеню + 227 + true + + Label + true + true + + Left + + + + ВремяВыполненияРегламентногоЗадания2 + 190 + + <key>ru</key> + <value>Выполняется 3 мин 33 сек</value> + + true + + true + + + ВремяВыполненияРегламентногоЗадания2РасширеннаяПодсказка + 192 + Label + true + true + + Left + + + + ВремяВыполненияРегламентногоЗадания2КонтекстноеМеню + 191 + true + + Label + true + true + + Left + + + true + + true + + + <key>ru</key> + <value>Регламентное задание выполняется</value> + + + РегламентноеЗаданиеВыполняетсяРасширеннаяПодсказка + 180 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + РегламентноеЗаданиеОтключено + 110 + + Отступ2 + 164 + true + true + + true + + + Отступ2РасширеннаяПодсказка + 166 + Label + true + true + + Left + + + + Отступ2КонтекстноеМеню + 165 + true + + Label + 1 + true + true + + Left + + + + РегламентноеЗаданиеОтключеноКартинка + 115 + + <key>ru</key> + <value>Регламентное задание отключено (Картинка)</value> + + true + true + + true + + + РегламентноеЗаданиеОтключеноКартинкаРасширеннаяПодсказка + 117 + Label + true + true + + Left + + + + РегламентноеЗаданиеОтключеноКартинкаКонтекстноеМеню + 116 + true + + true + true + + + CommonPicture.Предупреждение + + + + + РегламентноеЗаданиеОтключеноНадпись + 112 + + <key>ru</key> + <value>Задание отключено</value> + + true + true + + true + + + РегламентноеЗаданиеОтключеноНадписьРасширеннаяПодсказка + 114 + Label + true + true + + Left + + + + РегламентноеЗаданиеОтключеноНадписьКонтекстноеМеню + 113 + true + + Label + true + true + + Left + + + + ВключитьРегламентноеЗадание + 118 + + <key>ru</key> + <value>Включить</value> + + true + true + + true + + + ВключитьРегламентноеЗаданиеРасширеннаяПодсказка + 119 + Label + true + true + + Left + + + Hyperlink + Form.Command.ВключитьРегламентноеЗадание + Normal + Auto + true + true + UserCmds + Auto + + true + + true + + + <key>ru</key> + <value>Регламентное задание отключено</value> + + + РегламентноеЗаданиеОтключеноРасширеннаяПодсказка + 111 + Label + true + true + + Left + + + UsualGroup + + Center + Auto + true + true + Auto + Auto + + + + КомандыФормы + 108 + + ФормаРучноеУправление + 3 + true + true + + true + + true + + ФормаРучноеУправлениеРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + Form.Command.РучноеУправление + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаВыключитьРегламентноеЗадание + 195 + true + true + + true + + + ФормаВыключитьРегламентноеЗаданиеРасширеннаяПодсказка + 196 + Label + true + true + + Left + + + Form.Command.ОтменитьИВыключитьОбновлениеДоступа + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаПоказатьОбработанныеСписки + 197 + true + true + + + ФормаПоказатьОбработанныеСпискиРасширеннаяПодсказка + 198 + Label + true + true + + Left + + + Form.Command.ПоказатьОбработанныеСписки + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаВывестиСписок + 59 + true + true + + true + + + ФормаВывестиСписокРасширеннаяПодсказка + 60 + Label + true + true + + Left + + + Form.Item.Списки.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Команды формы</value> + + + КомандыФормыРасширеннаяПодсказка + 109 + Label + true + true + + Left + + + CommandBar + + Left + Form + + + true + true + + true + + + <key>ru</key> + <value>Регламентное задание</value> + + + РегламентноеЗаданиеРасширеннаяПодсказка + 149 + Label + true + true + + Left + + + UsualGroup + + Center + Auto + true + true + Auto + Auto + + + + ОбщийИндикаторОбновления + 91 + + ВсегоОбновлено + 88 + + <key>ru</key> + <value>Обновление доступа</value> + + true + true + + true + + + ВсегоОбновлено + + None + + ru + Прогресс обновления доступа ко всем спискам + + + ВсегоОбновленоРасширеннаяПодсказка + 90 + Label + true + true + + Left + + + + ВсегоОбновленоКонтекстноеМеню + 89 + true + + ProgressBarField + Enter + true + Left + true + + 1 + true + 1 + true + true + 100 + true + + + + ОбновлениеПрогресса + 61 + + ОбновлениеЗавершено + 63 + + ОбновитьПрогресса + 84 + true + true + + true + + + ОбновитьПрогрессаРасширеннаяПодсказка + 85 + Label + true + true + + Left + + + Hyperlink + Form.Command.ОбновитьПрогресс + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Обновление завершено</value> + + + ОбновлениеЗавершеноРасширеннаяПодсказка + 64 + Label + true + true + + Left + + + Page + + auto + false + + + + ОбновлениеВыполняется + 65 + + КартинкаОбновлениеПрогресса + 70 + + <key>ru</key> + <value>Картинка обновление прогресса</value> + + true + true + + true + + + ru + Фоновое задание обновления прогресса выполняется + + + КартинкаОбновлениеПрогрессаРасширеннаяПодсказка + 72 + Label + true + true + + Left + + + + КартинкаОбновлениеПрогрессаКонтекстноеМеню + 71 + true + + 2 + true + 1 + true + + + CommonPicture.ДлительнаяОперация48 + + AutoSize + + + + КартинкаОжиданиеОбновленияПрогресса + 167 + + <key>ru</key> + <value>Картинка обновление прогресса</value> + + false + + true + + + ru + Фоновое задание обновления прогресса +ожидает в очереди, а не выполняется +(так происходит, когда очередь слишком большая) + + + КартинкаОжиданиеОбновленияПрогрессаРасширеннаяПодсказка + 169 + Label + true + true + + Left + + + + КартинкаОжиданиеОбновленияПрогрессаКонтекстноеМеню + 168 + true + + 2 + true + 1 + true + + + CommonPicture.ДлительнаяОперация48 + + AutoSize + + + + ОтменитьОбновлениеПрогресса + 86 + + <key>ru</key> + <value>Отменить</value> + + true + true + + true + + + ОтменитьОбновлениеПрогрессаРасширеннаяПодсказка + 87 + Label + true + true + + Left + + + Hyperlink + Form.Command.ОтменитьОбновлениеПрогресса + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Обновление выполняется</value> + + + ОбновлениеВыполняетсяРасширеннаяПодсказка + 66 + Label + true + true + + Left + + + Page + + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Обновление прогресса</value> + + + ОбновлениеПрогрессаРасширеннаяПодсказка + 62 + Label + true + true + + Left + + + Pages + + Auto + + + + Отступ3 + 76 + true + true + + true + + + Отступ3РасширеннаяПодсказка + 78 + Label + true + true + + Left + + + + Отступ3КонтекстноеМеню + 77 + true + + Label + 1 + true + true + + Left + + + + Автообновление + 106 + + АвтообновлениеПрогресса + 79 + + <key>ru</key> + <value>Автообновление</value> + + true + true + + true + + + АвтообновлениеПрогресса + + Right + + ru + Автообновление прогресса +обновления доступа + + + OnChange + АвтообновлениеПрогрессаПриИзменении + + + АвтообновлениеПрогрессаРасширеннаяПодсказка + 81 + Label + true + true + + Left + + + + АвтообновлениеПрогрессаКонтекстноеМеню + 80 + true + + CheckBoxField + Enter + true + Left + true + + + + ПериодОбновленияПрогресса + 48 + + <key>ru</key> + <value>сек</value> + + true + true + + true + + + ПериодОбновленияПрогресса + + Right + + ПериодОбновленияПрогрессаРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + + ПериодОбновленияПрогрессаКонтекстноеМеню + 49 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + + 1 + + Normal + + + true + true + + true + + + <key>ru</key> + <value>Автообновление</value> + + + АвтообновлениеРасширеннаяПодсказка + 107 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Общий индикатор обновления</value> + + + ОбщийИндикаторОбновленияРасширеннаяПодсказка + 92 + Label + true + true + + Left + + + UsualGroup + + Center + Auto + true + true + Auto + Auto + + + + РассчитыватьПоКоличествуДанных + 93 + + <key>ru</key> + <value>Рассчитывать прогресс по количеству данных</value> + + true + true + + true + + + РассчитыватьПоКоличествуДанных + + Right + + ru + Рассчитывать прогресс обновления доступа по количеству +элементов данных и ключей доступа (медленно). + +Когда отключено, тогда прогресс рассчитывается +только по количеству обработанных списков. + + + OnChange + РассчитыватьПоКоличествуДанныхПриИзменении + + + РассчитыватьПоКоличествуДанныхРасширеннаяПодсказка + 95 + Label + true + true + + Left + + + + РассчитыватьПоКоличествуДанныхКонтекстноеМеню + 94 + true + + CheckBoxField + Enter + true + Left + true + + + + КраткоПодробно + 193 + + Списки + 5 + + <key>ru</key> + <value>Списки</value> + + true + true + + true + + + Списки + + None + Add + Change + Copy + Delete + EndEdit + MoveDown + MoveUp + ShowMultipleSelection + ShowRowRearrangement + SortListAsc + SortListDesc + + СпискиСписокПредставление + 18 + + <key>ru</key> + <value>Список элементов данных</value> + + true + true + + true + + + Списки.СписокПредставление + + + ru + Имя списка документов, элементов справочников, записей регистров и др. + + + СпискиСписокПредставлениеРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + + СпискиСписокПредставлениеКонтекстноеМеню + 19 + true + + InputField + true + Auto + true + Left + true + + 30 + true + true + true + true + true + true + Normal + + + + СпискиОбработаноЭлементов + 27 + true + true + + true + + + Списки.ОбработаноЭлементов + + + ru + Проверка и обновление ключей доступа к +объектам и группам записей регистров + + + СпискиОбработаноЭлементовРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + + СпискиОбработаноЭлементовКонтекстноеМеню + 28 + true + + InputField + true + Right + Auto + true + Left + true + + 6 + true + true + true + + ru + ЧН=0 + + + ru + ЧН=0 + + true + true + true + Normal + + + + СпискиОбработаноКлючейДоступа + 30 + true + true + + true + + + Списки.ОбработаноКлючейДоступа + + + ru + Проверка и обновление разрешенности ключей доступа +пользователям, внешним пользователям и группам доступа + + + СпискиОбработаноКлючейДоступаРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + СпискиОбработаноКлючейДоступаКонтекстноеМеню + 31 + true + + InputField + true + Right + Auto + true + Left + true + + 6 + true + true + true + + ru + ЧН=0 + + + ru + ЧН=0 + + true + true + true + Normal + + + + СпискиПозицияОбновления + 24 + true + + true + + + Списки.ПозицияОбновления + + + ru + Одно из трех: +- либо дата, с которой продолжится обновление по убыванию; +- либо текущий ссылочный элемент данных (у которого нет даты); +- либо текущий отбор группы записей регистра. + + + СпискиПозицияОбновленияРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + СпискиПозицияОбновленияКонтекстноеМеню + 25 + true + + InputField + true + Auto + true + Left + true + + 15 + true + true + true + true + true + true + Normal + + + + СпискиИмяТаблицы + 21 + true + true + + + Списки.ИмяТаблицы + + + СпискиИмяТаблицыРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + + СпискиИмяТаблицыКонтекстноеМеню + 22 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + СпискиКоличествоЭлементов + 33 + true + true + + + Списки.КоличествоЭлементов + + + СпискиКоличествоЭлементовРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + + СпискиКоличествоЭлементовКонтекстноеМеню + 34 + true + + InputField + true + Auto + true + Left + true + + 8 + true + true + true + true + true + true + Normal + + + + СпискиКоличествоОбработанныхЭлементов + 36 + true + true + + + Списки.КоличествоОбработанныхЭлементов + + + СпискиКоличествоОбработанныхЭлементовРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + + СпискиКоличествоОбработанныхЭлементовКонтекстноеМеню + 37 + true + + InputField + true + Auto + true + Left + true + + 8 + true + true + true + true + true + true + Normal + + + + СпискиКоличествоКлючейДоступа + 39 + true + true + + + Списки.КоличествоКлючейДоступа + + + СпискиКоличествоКлючейДоступаРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + + СпискиКоличествоКлючейДоступаКонтекстноеМеню + 40 + true + + InputField + true + Auto + true + Left + true + + 8 + true + true + true + true + true + true + Normal + + + + СпискиКоличествоОбработанныхКлючейДоступа + 42 + true + true + + + Списки.КоличествоОбработанныхКлючейДоступа + + + СпискиКоличествоОбработанныхКлючейДоступаРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + + СпискиКоличествоОбработанныхКлючейДоступаКонтекстноеМеню + 43 + true + + InputField + true + Auto + true + Left + true + + 8 + true + true + true + true + true + true + Normal + + + + СпискиКоманднаяПанель + 7 + Left + + + СпискиСтрокаПоиска + 9 + + СпискиСтрокаПоискаРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + + СпискиСтрокаПоискаКонтекстноеМеню + 10 + true + + Списки + + true + + + + СпискиСостояниеПросмотра + 12 + + СпискиСостояниеПросмотраРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + + СпискиСостояниеПросмотраКонтекстноеМеню + 13 + true + + ViewStatusAddition + Списки + + true + + + + СпискиУправлениеПоиском + 15 + + СпискиУправлениеПоискомРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + + СпискиУправлениеПоискомКонтекстноеМеню + 16 + true + + SearchControlAddition + Списки + + true + + + + СпискиРасширеннаяПодсказка + 8 + Label + true + true + + Left + + + + СпискиКонтекстноеМеню + 6 + + СпискиКонтекстноеМенюНайти + 96 + true + true + + true + + + СпискиКонтекстноеМенюНайтиРасширеннаяПодсказка + 97 + Label + true + true + + Left + + + Form.Item.Списки.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + + + СпискиКонтекстноеМенюОтменитьПоиск + 98 + true + true + + true + + + СпискиКонтекстноеМенюОтменитьПоискРасширеннаяПодсказка + 99 + Label + true + true + + Left + + + Form.Item.Списки.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + + + СпискиКонтекстноеМенюСортироватьСписокПоВозрастанию + 102 + true + true + + true + + + СпискиКонтекстноеМенюСортироватьСписокПоВозрастаниюРасширеннаяПодсказка + 103 + Label + true + true + + Left + + + Form.Command.СортироватьСписокПоВозрастанию + Normal + Auto + true + true + UserCmds + Auto + + + СпискиКонтекстноеМенюСортироватьСписокПоУбыванию + 104 + true + true + + true + + + СпискиКонтекстноеМенюСортироватьСписокПоУбываниюРасширеннаяПодсказка + 105 + Label + true + true + + Left + + + Form.Command.СортироватьСписокПоУбыванию + Normal + Auto + true + true + UserCmds + Auto + + + СпискиКонтекстноеМенюВывестиСписок + 100 + true + true + + true + + + СпискиКонтекстноеМенюВывестиСписокРасширеннаяПодсказка + 101 + Label + true + true + + Left + + + Form.Item.Списки.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + + true + + true + true + true + true + MultiRow +
      true
      + 3 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + true + +
      + true + true + + true + + + <key>ru</key> + <value>Скрыть прогресс по отдельным спискам</value> + + + КраткоПодробноРасширеннаяПодсказка + 194 + Label + true + true + + Left + + + UsualGroup + + Vertical + Collapsible + + ru + Показать прогресс по отдельным спискам + + true + Button + true + auto + Auto + Auto + +
      + + ФормаКоманднаяПанель + -1 + Left + + + NotificationProcessing + ОбработкаОповещения + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + + OnClose + ПриЗакрытии + + 80 + DontBlock + true + true + Vertical + true + true + true + auto + true + + Списки + + <key>ru</key> + <value>Списки</value> + + 1 + + ValueTable + + + true + + + true + + + Список + + <key>ru</key> + <value>Список</value> + + 1 + + CatalogRef.ИдентификаторыОбъектовРасширений + CatalogRef.ИдентификаторыОбъектовМетаданных + + + true + + + true + + + + ИмяТаблицы + + <key>ru</key> + <value>Имя таблицы</value> + + 2 + + String + + + + true + + + true + + + + ПозицияОбновления + + <key>ru</key> + <value>Позиция обновления</value> + + 3 + + String + + + + true + + + true + + + + ОбработаноЭлементов + + <key>ru</key> + <value>Обработано +элементов +данных, %</value> + + 4 + + Number + + 3 + true + + + + true + + + true + + + + ОбработаноКлючейДоступа + + <key>ru</key> + <value>Обработано +ключей +доступа, %</value> + + 5 + + Number + + 3 + true + + + + true + + + true + + + + КоличествоЭлементов + + <key>ru</key> + <value>Количество +элементов</value> + + 6 + + Number + + 15 + true + + + + true + + + true + + + + КоличествоОбработанныхЭлементов + + <key>ru</key> + <value>Количество +обработанных +элементов</value> + + 7 + + Number + + 15 + true + + + + true + + + true + + + + КоличествоКлючейДоступа + + <key>ru</key> + <value>Количество +ключей +доступа</value> + + 8 + + Number + + 15 + true + + + + true + + + true + + + + КоличествоОбработанныхКлючейДоступа + + <key>ru</key> + <value>Количество +обработанных +ключей доступа</value> + + 9 + + Number + + 15 + true + + + + true + + + true + + + + ДатаПоследнегоОбновленногоЭлемента + + <key>ru</key> + <value>Дата последнего обновленного элемента</value> + + 11 + + + true + + + true + + + + ПоследнийОбновленныйЭлемент + + <key>ru</key> + <value>Последний обновленный элемент</value> + + 12 + + + true + + + true + + + + СписокПредставление + + <key>ru</key> + <value>Список представление</value> + + 10 + + String + + + + true + + + true + + + + + ПериодОбновленияПрогресса + + <key>ru</key> + <value>Период обновления прогресса, сек</value> + + 3 + + Number + + 3 + true + + + + true + + + true + + + + ПоказыватьОбработанныеСписки + + <key>ru</key> + <value>Показывать обработанные списки</value> + + 5 + + Boolean + + + true + + + true + + + + АвтообновлениеПрогресса + + <key>ru</key> + <value>Автообновление прогресса</value> + + 6 + + Boolean + + + true + + + true + + + + ЭтоПовторноеОбновлениеПрогресса + + <key>ru</key> + <value>Это повторное обновление прогресса</value> + + 7 + + Boolean + + + true + + + true + + + + ВсегоОбновлено + + <key>ru</key> + <value>Всего обновлено</value> + + 8 + + Number + + 3 + true + + + + true + + + true + + + + РассчитыватьПоКоличествуДанных + + <key>ru</key> + <value>Рассчитывать по количеству данных</value> + + 9 + + Boolean + + + true + + + true + + + + ПоляСортировки + + <key>ru</key> + <value>Поля сортировки</value> + + 10 + + ValueList + + + true + + + true + + + + + + + ПоследнееЗавершениеРегламентногоЗадания + + <key>ru</key> + <value>Последнее завершение регламентного задания</value> + + 13 + + Date + + + + true + + + true + + + + ПоследнееЗавершениеРегламентногоЗаданияВремя + + <key>ru</key> + <value>Последнее завершение регламентного задания (время)</value> + + 14 + + Date + + Time + + + + true + + + true + + + + РегламентноеЗаданияВыполняетсяСВремя + + <key>ru</key> + <value>Регламентное задания выполняется с (время)</value> + + 16 + + Date + + Time + + + + true + + + true + + + + ОбновлениеПрогрессаВыполняется + + <key>ru</key> + <value>Обновление прогресса выполняется</value> + + 17 + + Boolean + + + true + + + true + + + + РучноеУправление + + <key>ru</key> + <value>Ручное управление ...</value> + + 2 + + ru + Обновить объект или запланировать обновление доступа к указанным спискам + + + true + + + + РучноеУправление + + + DontUse + Auto + + + ОбновитьПрогресс + + <key>ru</key> + <value>Обновить прогресс</value> + + 3 + + ru + Обновить прогресс +обновления доступа + + + true + + F5 + + + ОбновитьПрогресс + + + DontUse + Auto + + + ОтменитьОбновлениеПрогресса + + <key>ru</key> + <value>Отменить обновление прогресса</value> + + 4 + + ru + Отменить обновление прогресса + + + true + + + + ОтменитьОбновлениеПрогресса + + + DontUse + Auto + + + СортироватьСписокПоВозрастанию + + <key>ru</key> + <value>Сортировать список по возрастанию</value> + + 5 + + true + + + StdPicture.SortListAsc + + + + СортироватьСписокПоВозрастанию + + + DontUse + Auto + + + СортироватьСписокПоУбыванию + + <key>ru</key> + <value>Сортировать список по убыванию</value> + + 6 + + true + + + StdPicture.SortListDesc + + + + СортироватьСписокПоУбыванию + + + DontUse + Auto + + + ВключитьРегламентноеЗадание + + <key>ru</key> + <value>Включить регламентное задание</value> + + 7 + + true + + + + ВключитьРегламентноеЗадание + + + DontUse + Auto + + + ПоказатьТекстОшибкиЗавершенияРегламентногоЗадания + + <key>ru</key> + <value>Показать текст ошибки завершения регламентного задания</value> + + 8 + + ru + Показать текст ошибки завершения регламентного задания + + + true + + + + ПоказатьТекстОшибкиЗавершенияРегламентногоЗадания + + + DontUse + Auto + + + ЗапуститьРегламентноеЗаданиеСейчас + + <key>ru</key> + <value>Запустить регламентное задание сейчас</value> + + 9 + + ru + Запустить обновление доступа сейчас + + + true + + + + ЗапуститьРегламентноеЗаданиеСейчас + + + DontUse + Auto + + + ОтменитьИВыключитьОбновлениеДоступа + + <key>ru</key> + <value>Отменить и выключить обновление доступа</value> + + 1 + + ru + Отменить выполнение и выключить регламентное задание "Обновление доступа" + + + true + + + + ОтменитьИВыключитьОбновлениеДоступа + + + DontUse + Auto + + + ПоказатьОбработанныеСписки + + <key>ru</key> + <value>Показать обработанные списки</value> + + 10 + + ru + Показывать списки, для которых +обновление доступа завершено + + + true + + + + ПоказатьОбработанныеСписки + + + DontUse + Auto + + + + + +
      diff --git a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаНаУровнеЗаписей/Module.bsl b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаНаУровнеЗаписей/Module.bsl new file mode 100644 index 000000000..7ee01dcc5 --- /dev/null +++ b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаНаУровнеЗаписей/Module.bsl @@ -0,0 +1,751 @@ +#Область ОписаниеПеременных + +&НаКлиенте +Перем АдресРезультата, АдресХранимыхДанных, ИдентификаторЗаданияОбновленияПрогресса, ТекстОшибкиЗавершенияРегламентногоЗадания; + +&НаКлиенте +Перем ИдентификаторЗаданияОбновленияДоступаЗапущенногоВручную; + +#КонецОбласти + + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + НавигационнаяСсылка = "e1cib/app/РегистрСведений.ОбновлениеКлючейДоступаКДанным.Форма.ОбновлениеДоступаНаУровнеЗаписей"; + + ПериодОбновленияПрогресса = 3; + АвтообновлениеПрогресса = Истина; + ПоляСортировки.Добавить("Список", "Возр"); + + Если Не УправлениеДоступом.ОграничиватьДоступНаУровнеЗаписей() Тогда + Элементы.ГруппаПредупреждениеОграничениеОтключено.Видимость = Истина; + КонецЕсли; + + Если Не УправлениеДоступомСлужебный.ОграничиватьДоступНаУровнеЗаписейУниверсально(Истина) Тогда + Элементы.ГруппаПредупреждениеУниверсальноеОграничениеОтключено.Видимость = Истина; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + ОбновитьСостояниеЗаданияОбновленияДоступа(); + ОбновитьСостояниеЗаданияОбновленияДоступаЧерезТриСекунды(); + + НачатьОбновлениеПрогресса(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗакрытии(ЗавершениеРаботы) + + Если ЗавершениеРаботы Тогда + Возврат; + КонецЕсли; + + Если ЗначениеЗаполнено(ИдентификаторЗаданияОбновленияПрогресса) Тогда + ОтменитьОбновлениеПрогрессаНаСервере(ИдентификаторЗаданияОбновленияПрогресса); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + Если ИмяСобытия = "Запись_ОбновлениеКлючейДоступаКДанным" + Или ИмяСобытия = "Запись_ОбновлениеКлючейДоступаПользователей" Тогда + + НачатьОбновлениеПрогресса(Истина); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура РассчитыватьПоКоличествуДанныхПриИзменении(Элемент) + + ЭтоПовторноеОбновлениеПрогресса = Ложь; + НачатьОбновлениеПрогресса(Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура АвтообновлениеПрогрессаПриИзменении(Элемент) + + НачатьОбновлениеПрогресса(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ЗапуститьРегламентноеЗаданиеСейчас(Команда) + + СостояниеЗаданияОбновленияДоступа = Неопределено; + + ТекстПредупреждения = ЗапуститьРегламентноеЗаданиеСейчасНаСервере( + ИдентификаторЗаданияОбновленияДоступаЗапущенногоВручную, СостояниеЗаданияОбновленияДоступа); + + Если ЗначениеЗаполнено(ТекстПредупреждения) Тогда + ПоказатьПредупреждение(, ТекстПредупреждения); + Возврат; + КонецЕсли; + + ОбновитьСостояниеЗаданияОбновленияДоступа(СостояниеЗаданияОбновленияДоступа); + +КонецПроцедуры + +&НаКлиенте +Процедура ВключитьРегламентноеЗадание(Команда) + + ВключитьРегламентноеЗаданиеНаСервере(); + Элементы.РегламентноеЗаданиеОтключено.Видимость = Ложь; + + НачатьОбновлениеПрогресса(Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ОтменитьИВыключитьОбновлениеДоступа(Команда) + + ОтменитьИВыключитьОбновлениеДоступаНаСервере(); + + НачатьОбновлениеПрогресса(Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьПрогресс(Команда) + + НачатьОбновлениеПрогресса(Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ОтменитьОбновлениеПрогресса(Команда) + + Если ЗначениеЗаполнено(ИдентификаторЗаданияОбновленияПрогресса) Тогда + ОтменитьОбновлениеПрогрессаНаСервере(ИдентификаторЗаданияОбновленияПрогресса); + Если АвтообновлениеПрогресса Тогда + АвтообновлениеПрогресса = Ложь; + Пояснение = НСтр("ru = 'Автообновление прогресса отключено'"); + Иначе + Пояснение = ""; + КонецЕсли; + ПоказатьОповещениеПользователя(НСтр("ru = 'Обновление прогресса отменено'"),, + Пояснение); + КонецЕсли; + + Элементы.ОбновлениеПрогресса.ТекущаяСтраница = Элементы.ОбновлениеЗавершено; + Элементы.ОтменитьОбновлениеПрогресса.Доступность = Ложь; + +КонецПроцедуры + +&НаКлиенте +Процедура ПоказатьТекстОшибкиЗавершенияРегламентногоЗадания(Команда) + + ПоказатьПредупреждение(, ТекстОшибкиЗавершенияРегламентногоЗадания); + +КонецПроцедуры + +&НаКлиенте +Процедура РучноеУправление(Команда) + + ОткрытьФорму("РегистрСведений.ОбновлениеКлючейДоступаКДанным.Форма.ОбновлениеДоступаРучноеУправление"); + +КонецПроцедуры + +&НаКлиенте +Процедура СортироватьСписокПоВозрастанию(Команда) + + СортироватьСписок(); + +КонецПроцедуры + +&НаКлиенте +Процедура СортироватьСписокПоУбыванию(Команда) + + СортироватьСписок(Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ПоказатьОбработанныеСписки(Команда) + + Элементы.ФормаПоказатьОбработанныеСписки.Пометка = + Не Элементы.ФормаПоказатьОбработанныеСписки.Пометка; + + НачатьОбновлениеПрогресса(Истина); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура ОбновитьСостояниеЗаданияОбновленияДоступаЧерезТриСекунды() + + ОтключитьОбработчикОжидания("ОбновитьСостояниеЗаданияОбновленияДоступаОбработчикОжидания"); + ПодключитьОбработчикОжидания("ОбновитьСостояниеЗаданияОбновленияДоступаОбработчикОжидания", 3); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьСостояниеЗаданияОбновленияДоступаОбработчикОжидания() + + ОбновитьСостояниеЗаданияОбновленияДоступа(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьСостояниеЗаданияОбновленияДоступа(Состояние = Неопределено) + + Если Состояние = Неопределено Тогда + Состояние = СостояниеЗаданияОбновленияДоступа(ИдентификаторЗаданияОбновленияДоступаЗапущенногоВручную); + КонецЕсли; + + Если Не ЗначениеЗаполнено(Состояние.ПоследнееЗавершениеРегламентногоЗадания) Тогда + Элементы.ПоследнееЗавершениеРегламентногоЗадания.Формат = + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ДЛФ=DT; ДП='%1'", + ?(Состояние.РегламентноеЗаданиеВыполняется, + НСтр("ru = 'Не завершалось'"), НСтр("ru = 'Не запускалось'"))); + КонецЕсли; + + ВыполнениеЗаданияЗавершено = ЗначениеЗаполнено(ПоследнееЗавершениеРегламентногоЗадания) + И ЗначениеЗаполнено(Состояние.ПоследнееЗавершениеРегламентногоЗадания) + И ПоследнееЗавершениеРегламентногоЗадания <> Состояние.ПоследнееЗавершениеРегламентногоЗадания; + + ПоследнееЗавершениеРегламентногоЗадания = Состояние.ПоследнееЗавершениеРегламентногоЗадания; + ПоследнееЗавершениеРегламентногоЗаданияВремя = Состояние.ПоследнееЗавершениеРегламентногоЗадания; + ТекстОшибкиЗавершенияРегламентногоЗадания = Состояние.ТекстОшибкиЗавершенияРегламентногоЗадания; + + Элементы.ПоследнееЗавершениеРегламентногоЗадания.Видимость = Не Состояние.ПоследнееЗавершениеСегодня; + Элементы.ПоследнееЗавершениеРегламентногоЗаданияВремя.Видимость = Состояние.ПоследнееЗавершениеСегодня; + + Элементы.РегламентноеЗаданиеЗавершилосьОшибкой.Видимость = + ЗначениеЗаполнено(ТекстОшибкиЗавершенияРегламентногоЗадания); + + Элементы.РегламентноеЗаданиеВыполняется.Видимость = Состояние.РегламентноеЗаданиеВыполняется; + Элементы.РегламентноеЗаданиеНеВыполняется.Видимость = Не Состояние.РегламентноеЗаданиеВыполняется; + + Элементы.КартинкаРегламентноеЗаданиеВыполняется.Видимость = Состояние.ФоновоеЗаданиеВыполняется; + Элементы.КартинкаРегламентноеЗаданиеОжидаетВыполнения.Видимость = Не Состояние.ФоновоеЗаданиеВыполняется; + + Если Не Состояние.РегламентноеЗаданиеВыполняется Тогда + Элементы.ВремяВыполненияРегламентногоЗадания1.Заголовок = ""; + Элементы.ВремяВыполненияРегламентногоЗадания2.Заголовок = ""; + Если ВыполнениеЗаданияЗавершено И Не АвтообновлениеПрогресса Тогда + НачатьОбновлениеПрогресса(Истина); + КонецЕсли; + Возврат; + КонецЕсли; + + ВсегоМинут = Цел(Состояние.ВыполняетсяСекунд / 60); + Секунд = Состояние.ВыполняетсяСекунд - ВсегоМинут * 60; + ВсегоЧасов = Цел(ВсегоМинут / 60); + Минут = ВсегоМинут - ВсегоЧасов * 60; + + Если ВсегоЧасов > 0 Тогда + Шаблон = НСтр("ru = 'Выполняется %3 ч %2 мин %1 сек'"); + + ИначеЕсли Минут > 0 Тогда + Шаблон = НСтр("ru = 'Выполняется %2 мин %1 сек'"); + Иначе + Шаблон = НСтр("ru = 'Выполняется %1 сек'"); + КонецЕсли; + + ТекстЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, + Формат(Секунд, "ЧН=0; ЧГ="), Формат(Минут, "ЧГ="), Формат(ВсегоЧасов, "ЧГ=")); + + Элементы.ВремяВыполненияРегламентногоЗадания1.Заголовок = ТекстЗаголовка; + Элементы.ВремяВыполненияРегламентногоЗадания2.Заголовок = ТекстЗаголовка; + + ВидимостьПервого = Элементы.ВремяВыполненияРегламентногоЗадания1.Видимость; + ВидимостьПервого = Не ВидимостьПервого; + + Элементы.ВремяВыполненияРегламентногоЗадания1.Видимость = ВидимостьПервого; + Элементы.ВремяВыполненияРегламентногоЗадания2.Видимость = Не ВидимостьПервого; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция СостояниеЗаданияОбновленияДоступа(ИдентификаторЗаданияОбновленияДоступаЗапущенногоВручную) + + ПоследнееОбновлениеДоступа = ПоследнееОбновлениеДоступа(); + + ТекущаяДатаНаСервере = УправлениеДоступомСлужебный.ТекущаяДатаНаСервере(); + + Состояние = Новый Структура; + + Состояние.Вставить("ПоследнееЗавершениеРегламентногоЗадания", + ПоследнееОбновлениеДоступа.ДатаЗавершенияНаСервере); + + Состояние.Вставить("ПоследнееЗавершениеСегодня", + ЭтоСегодняшняяДата(ТекущаяДатаНаСервере, Состояние.ПоследнееЗавершениеРегламентногоЗадания)); + + Состояние.Вставить("ТекстОшибкиЗавершенияРегламентногоЗадания", + ПоследнееОбновлениеДоступа.ТекстОшибкиЗавершения); + + Если ЗначениеЗаполнено(ПоследнееОбновлениеДоступа.ИдентификаторФоновогоЗадания) Тогда + ПоследнееФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору( + ПоследнееОбновлениеДоступа.ИдентификаторФоновогоЗадания); + Иначе + ПоследнееФоновоеЗадание = Неопределено; + КонецЕсли; + + Состояние.Вставить("ВыполняетсяСекунд", 0); + + Если ПоследнееФоновоеЗадание = Неопределено + Или ПоследнееФоновоеЗадание.Состояние <> СостояниеФоновогоЗадания.Активно Тогда + + Если ТипЗнч(ИдентификаторЗаданияОбновленияДоступаЗапущенногоВручную) = Тип("УникальныйИдентификатор") Тогда + ПоследнееФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору( + ИдентификаторЗаданияОбновленияДоступаЗапущенногоВручную); + + Если ПоследнееФоновоеЗадание = Неопределено + Или ПоследнееФоновоеЗадание.Состояние <> СостояниеФоновогоЗадания.Активно Тогда + + ИдентификаторЗаданияОбновленияДоступаЗапущенногоВручную = Неопределено; + КонецЕсли; + КонецЕсли; + + Если ПоследнееФоновоеЗадание = Неопределено + Или ПоследнееФоновоеЗадание.Состояние <> СостояниеФоновогоЗадания.Активно Тогда + + Состояние.Вставить("РегламентноеЗаданиеВыполняется", Ложь); + Состояние.Вставить("ФоновоеЗаданиеВыполняется", Ложь); + Иначе + Состояние.Вставить("РегламентноеЗаданиеВыполняется", Истина); + ОжидаетВыполненияСекунд = ТекущаяДатаНаСервере - ПоследнееФоновоеЗадание.Начало; + ОжидаетВыполненияСекунд = ?(ОжидаетВыполненияСекунд < 0, 0, ОжидаетВыполненияСекунд); + Состояние.Вставить("ФоновоеЗаданиеВыполняется", ОжидаетВыполненияСекунд < 2); + КонецЕсли; + Иначе + ИдентификаторЗаданияОбновленияДоступаЗапущенногоВручную = Неопределено; + + Состояние.Вставить("РегламентноеЗаданиеВыполняется", Истина); + Состояние.Вставить("ФоновоеЗаданиеВыполняется", Истина); + ВыполняетсяСекунд = ТекущаяДатаНаСервере - ПоследнееОбновлениеДоступа.ДатаЗапускаНаСервере; + Состояние.Вставить("ВыполняетсяСекунд", ?(ВыполняетсяСекунд < 0, 0, ВыполняетсяСекунд)); + КонецЕсли; + + Возврат Состояние; + +КонецФункции + +&НаСервереБезКонтекста +Функция ЭтоСегодняшняяДата(ТекущаяДата, Дата) + + Возврат ТекущаяДата < Дата + 12 * 60 * 6; + +КонецФункции + +&НаСервереБезКонтекста +Функция ПоследнееОбновлениеДоступа() + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ПоследнееОбновлениеДоступа.Значение КАК Значение + |ИЗ + | Константа.ПоследнееОбновлениеДоступа КАК ПоследнееОбновлениеДоступа"; + + Выборка = Запрос.Выполнить().Выбрать(); + СведенияОбОбновлении = ?(Выборка.Следующий(), Выборка.Значение, Неопределено); + + Возврат УправлениеДоступомСлужебный.ПоследнееОбновлениеДоступа(СведенияОбОбновлении); + +КонецФункции + +&НаСервереБезКонтекста +Функция ЗапуститьРегламентноеЗаданиеСейчасНаСервере(ИдентификаторЗаданияОбновленияДоступаЗапущенногоВручную, СостояниеЗаданияОбновленияДоступа) + + ПоследнееОбновлениеДоступа = ПоследнееОбновлениеДоступа(); + + Если ЗначениеЗаполнено(ПоследнееОбновлениеДоступа.ИдентификаторФоновогоЗадания) Тогда + ПоследнееФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору( + ПоследнееОбновлениеДоступа.ИдентификаторФоновогоЗадания); + Иначе + ПоследнееФоновоеЗадание = Неопределено; + КонецЕсли; + + Если ПоследнееФоновоеЗадание = Неопределено + Или ПоследнееФоновоеЗадание.Состояние <> СостояниеФоновогоЗадания.Активно Тогда + + Если ТипЗнч(ИдентификаторЗаданияОбновленияДоступаЗапущенногоВручную) = Тип("УникальныйИдентификатор") Тогда + ПоследнееФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору( + ИдентификаторЗаданияОбновленияДоступаЗапущенногоВручную); + КонецЕсли; + КонецЕсли; + + Если ПоследнееФоновоеЗадание = Неопределено + Или ПоследнееФоновоеЗадание.Состояние <> СостояниеФоновогоЗадания.Активно Тогда + + ТекстПредупреждения = ""; + ФоновоеЗадание = РасширенияКонфигурации.ВыполнитьФоновоеЗаданиеСРасширениямиБазыДанных( + Метаданные.РегламентныеЗадания.ОбновлениеДоступаНаУровнеЗаписей.ИмяМетода,,, + НСтр("ru = 'Запуск вручную'") + ": " + Метаданные.РегламентныеЗадания.ОбновлениеДоступаНаУровнеЗаписей.Наименование); + + ИдентификаторЗаданияОбновленияДоступаЗапущенногоВручную = ФоновоеЗадание.УникальныйИдентификатор; + Иначе + ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Обновление доступа уже запущено + |(компьютер: %1, сеанс: %2, начат: %3 в %4)'"), + ПоследнееОбновлениеДоступа.ИмяКомпьютера, + ПоследнееОбновлениеДоступа.НомерСеанса, + Формат(ПоследнееОбновлениеДоступа.НачалоСеанса, "ДЛФ=D"), + Формат(ПоследнееОбновлениеДоступа.НачалоСеанса, "ДЛФ=T")); + КонецЕсли; + + СостояниеЗаданияОбновленияДоступа = СостояниеЗаданияОбновленияДоступа( + ИдентификаторЗаданияОбновленияДоступаЗапущенногоВручную); + + Возврат ТекстПредупреждения; + +КонецФункции + +&НаКлиенте +Процедура НачатьОбновлениеПрогресса(ЗапускВручную = Ложь) + + Если ЗапускВручную И ЗначениеЗаполнено(ИдентификаторЗаданияОбновленияПрогресса) Тогда + ОтменитьОбновлениеПрогрессаНаСервере(ИдентификаторЗаданияОбновленияПрогресса); + + ИначеЕсли Не АвтообновлениеПрогресса И Не ЗапускВручную + Или Элементы.ОбновлениеПрогресса.ТекущаяСтраница = Элементы.ОбновлениеВыполняется Тогда + + Возврат; + КонецЕсли; + + ПодключитьОбработчикОжидания("ОбновитьПрогрессОбработчикОжидания", 0.1, Истина); + Элементы.ОбновлениеПрогресса.ТекущаяСтраница = Элементы.ОбновлениеВыполняется; + Элементы.ОтменитьОбновлениеПрогресса.Доступность = Ложь; + Элементы.КартинкаОбновлениеПрогресса.Видимость = Истина; + Элементы.КартинкаОжиданиеОбновленияПрогресса.Видимость = Ложь; + +КонецПроцедуры + +&НаКлиенте +Процедура НачатьОбновлениеПрогрессаОбработчикОжидания() + + НачатьОбновлениеПрогресса(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьПрогрессОбработчикОжидания() + + Контекст = Новый Структура; + Контекст.Вставить("РассчитыватьПоКоличествуДанных", РассчитыватьПоКоличествуДанных); + Контекст.Вставить("ПоказыватьОбработанныеСписки", Элементы.ФормаПоказатьОбработанныеСписки.Пометка); + Контекст.Вставить("ЭтоПовторноеОбновлениеПрогресса", ЭтоПовторноеОбновлениеПрогресса); + Контекст.Вставить("ВсегоОбновлено", ВсегоОбновлено); + Контекст.Вставить("ПериодОбновленияПрогресса", ПериодОбновленияПрогресса); + Контекст.Вставить("АвтообновлениеПрогресса", АвтообновлениеПрогресса); + Контекст.Вставить("ДобавленныеСтроки", Новый Массив); + Контекст.Вставить("УдаленныеСтроки", Новый Соответствие); + Контекст.Вставить("ИзмененныеСтроки", Новый Соответствие); + + Попытка + Статус = НачатьОбновлениеПрогрессаНаСервере(Контекст, АдресРезультата, АдресХранимыхДанных, УникальныйИдентификатор, + ИдентификаторЗаданияОбновленияПрогресса, ИдентификаторЗаданияОбновленияДоступаЗапущенногоВручную); + Исключение + Элементы.ОтменитьОбновлениеПрогресса.Доступность = Истина; + ВызватьИсключение; + КонецПопытки; + Элементы.ОтменитьОбновлениеПрогресса.Доступность = Истина; + + Если Статус = "Выполнено" Тогда + ОбновитьПрогрессПослеПолученияДанных(Контекст); + + ИначеЕсли Статус = "Выполняется" Тогда + ОбновлениеПрогрессаВыполняется = Ложь; + ПодключитьОбработчикОжидания("ЗавершитьОбновлениеПрогрессаОбработчикОжидания", 1, Истина); + Возврат; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗавершитьОбновлениеПрогрессаОбработчикОжидания() + + Если Не ЗначениеЗаполнено(ИдентификаторЗаданияОбновленияПрогресса) Тогда + Возврат; + КонецЕсли; + + Контекст = Неопределено; + ЗаданиеВыполнено = ЗавершитьОбновлениеПрогрессаНаСервере(Контекст, АдресРезультата, АдресХранимыхДанных, + ИдентификаторЗаданияОбновленияПрогресса, ИдентификаторЗаданияОбновленияДоступаЗапущенногоВручную); + + Если Не ЗаданиеВыполнено Тогда + Если Контекст.ОбновлениеПрогрессаВыполняется Тогда + ОбновлениеПрогрессаВыполняется = Истина; + КонецЕсли; + Элементы.КартинкаОбновлениеПрогресса.Видимость = ОбновлениеПрогрессаВыполняется; + Элементы.КартинкаОжиданиеОбновленияПрогресса.Видимость = Не ОбновлениеПрогрессаВыполняется; + ПодключитьОбработчикОжидания("ЗавершитьОбновлениеПрогрессаОбработчикОжидания", 1, Истина); + Возврат; + КонецЕсли; + + ОбновитьПрогрессПослеПолученияДанных(Контекст); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьПрогрессПослеПолученияДанных(Контекст) + + ВсегоОбновлено = Контекст.ВсегоОбновлено; + Если Контекст.Свойство("ПериодОбновленияПрогресса") Тогда + ПериодОбновленияПрогресса = Контекст.ПериодОбновленияПрогресса; + КонецЕсли; + Если Контекст.Свойство("АвтообновлениеПрогресса") Тогда + АвтообновлениеПрогресса = Контекст.АвтообновлениеПрогресса; + КонецЕсли; + + Элементы.РегламентноеЗаданиеОтключено.Видимость = Контекст.Свойство("РегламентноеЗаданиеОтключено"); + + Индекс = Списки.Количество() - 1; + Пока Индекс >= 0 Цикл + Строка = Списки.Получить(Индекс); + Если Контекст.УдаленныеСтроки.Получить(Строка.Список) <> Неопределено Тогда + Списки.Удалить(Индекс); + Иначе + ИзмененнаяСтрока = Контекст.ИзмененныеСтроки.Получить(Строка.Список); + Если ИзмененнаяСтрока <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(Строка, ИзмененнаяСтрока); + КонецЕсли; + КонецЕсли; + Индекс = Индекс - 1; + КонецЦикла; + Для Каждого ДобавленнаяСтрока Из Контекст.ДобавленныеСтроки Цикл + ЗаполнитьЗначенияСвойств(Списки.Добавить(), ДобавленнаяСтрока); + КонецЦикла; + + Если Контекст.ДобавленныеСтроки.Количество() > 0 Тогда + СортироватьСписокПоПолям(); + КонецЕсли; + + Если АвтообновлениеПрогресса Тогда + ПодключитьОбработчикОжидания("НачатьОбновлениеПрогрессаОбработчикОжидания", + ПериодОбновленияПрогресса, Истина); + КонецЕсли; + + Элементы.ОбновлениеПрогресса.ТекущаяСтраница = Элементы.ОбновлениеЗавершено; + ЭтоПовторноеОбновлениеПрогресса = Истина; + + ОбновитьСостояниеЗаданияОбновленияДоступа(Контекст.СостояниеЗаданияОбновленияДоступа); + ОбновитьСостояниеЗаданияОбновленияДоступаЧерезТриСекунды(); + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция НачатьОбновлениеПрогрессаНаСервере(Контекст, АдресРезультата, АдресХранимыхДанных, ИдентификаторФормы, + ИдентификаторЗаданияОбновленияПрогресса, ИдентификаторЗаданияОбновленияДоступаЗапущенногоВручную) + + Если ЗначениеЗаполнено(АдресХранимыхДанных) Тогда + ХранимыеДанные = ПолучитьИзВременногоХранилища(АдресХранимыхДанных); + Иначе + ХранимыеДанные = Новый Структура; + ХранимыеДанные.Вставить("СтрокиСписков", Новый Соответствие); + ХранимыеДанные.Вставить("СвойстваСписков", Новый Соответствие); + ХранимыеДанные.Вставить("КоличествоКлючей", 0); + ХранимыеДанные.Вставить("ДатаПоследнегоОбновления", '00010101'); + АдресХранимыхДанных = ПоместитьВоВременноеХранилище(ХранимыеДанные, ИдентификаторФормы); + КонецЕсли; + + ФиксированныйКонтекст = Новый ФиксированнаяСтруктура(Контекст); + ПараметрыПроцедуры = Новый Структура(ФиксированныйКонтекст); + + АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, ИдентификаторФормы); + ПараметрыПроцедуры.Вставить("ХранимыеДанные", ХранимыеДанные); + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(ИдентификаторФормы); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Управление доступом: Получение прогресса обновления доступа'"); + ПараметрыВыполнения.ОжидатьЗавершение = 0; + ПараметрыВыполнения.АдресРезультата = АдресРезультата; + + РезультатЗапуска = ДлительныеОперации.ВыполнитьВФоне("УправлениеДоступомСлужебный.ОбновитьПрогрессВФоне", + ПараметрыПроцедуры, ПараметрыВыполнения); + + ИдентификаторЗаданияОбновленияПрогресса = Неопределено; + + Если РезультатЗапуска.Статус = "Выполнено" Тогда + ЗавершитьОбновлениеПрогрессаНаСервере(Контекст, АдресРезультата, АдресХранимыхДанных, + Неопределено, ИдентификаторЗаданияОбновленияДоступаЗапущенногоВручную); + + ИначеЕсли РезультатЗапуска.Статус = "Выполняется" Тогда + ИдентификаторЗаданияОбновленияПрогресса = РезультатЗапуска.ИдентификаторЗадания; + + ИначеЕсли РезультатЗапуска.Статус = "Ошибка" Тогда + ВызватьИсключение РезультатЗапуска.ПодробноеПредставлениеОшибки; + КонецЕсли; + + Возврат РезультатЗапуска.Статус; + +КонецФункции + +&НаСервереБезКонтекста +Процедура ОтменитьОбновлениеПрогрессаНаСервере(ИдентификаторЗадания) + + ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания); + ИдентификаторЗадания = Неопределено; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ЗавершитьОбновлениеПрогрессаНаСервере(Контекст, Знач АдресРезультата, Знач АдресХранимыхДанных, + Знач ИдентификаторЗаданияОбновленияПрогресса, ИдентификаторЗаданияОбновленияДоступаЗапущенногоВручную) + + Если ИдентификаторЗаданияОбновленияПрогресса <> Неопределено + И Не ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗаданияОбновленияПрогресса) Тогда + + Контекст = Новый Структура("ОбновлениеПрогрессаВыполняется", + ДлительныеОперации.ПрочитатьПрогресс(ИдентификаторЗаданияОбновленияПрогресса) <> Неопределено); + Возврат Ложь; + КонецЕсли; + + Контекст = ПолучитьИзВременногоХранилища(АдресРезультата); + ПоместитьВоВременноеХранилище(Контекст.ХранимыеДанные, АдресХранимыхДанных); + Контекст.Удалить("ХранимыеДанные"); + + Контекст.Вставить("СостояниеЗаданияОбновленияДоступа", + СостояниеЗаданияОбновленияДоступа(ИдентификаторЗаданияОбновленияДоступаЗапущенногоВручную)); + + Возврат Истина; + +КонецФункции + +&НаКлиенте +Процедура СортироватьСписок(ПоУбыванию = Ложь) + + ТекущаяКолонка = Элементы.Списки.ТекущийЭлемент; + + Если ТекущаяКолонка = Неопределено + Или Не СтрНачинаетсяС(ТекущаяКолонка.Имя, "Списки") Тогда + + ПоказатьПредупреждение(, + НСтр("ru = 'Выберите колонку для сортировки'")); + Возврат; + КонецЕсли; + + ПоляСортировки.Очистить(); + + Поле = Сред(Элементы.Списки.ТекущийЭлемент.Имя, СтрДлина("Списки") + 1); + ПоляСортировки.Добавить(Поле, ?(ПоУбыванию, "Убыв", "Возр")); + Если Поле <> "СписокПредставление" Тогда + ПоляСортировки.Добавить("СписокПредставление", "Возр"); + КонецЕсли; + + СортироватьСписокПоПолям(); + +КонецПроцедуры + +&НаКлиенте +Процедура СортироватьСписокПоПолям(ИндексПоляСортировки = 0, СтрокиСписка = Неопределено) + + Если ИндексПоляСортировки >= ПоляСортировки.Количество() Тогда + Возврат; + КонецЕсли; + + ПолеСортировки = ПоляСортировки[ИндексПоляСортировки].Значение; + Если СтрокиСписка = Неопределено Тогда + СтрокиСписка = Новый СписокЗначений; + Для Каждого Строка Из Списки Цикл + СтрокиСписка.Добавить(Строка, + ПредставлениеДляСортировки(Строка[ПолеСортировки])); + КонецЦикла; + ИначеЕсли СтрокиСписка.Количество() < 2 Тогда + Возврат; + Иначе + Для Каждого ЭлементСписка Из СтрокиСписка Цикл + ЭлементСписка.Представление = + ПредставлениеДляСортировки(ЭлементСписка.Значение[ПолеСортировки]); + КонецЦикла; + КонецЕсли; + + НачальныйИндекс = Списки.Индекс(СтрокиСписка[0].Значение); + СтрокиСписка.СортироватьПоПредставлению( + НаправлениеСортировки[ПоляСортировки[ИндексПоляСортировки].Представление]); + + ТекущееПредставление = Неопределено; + Подстроки = Неопределено; + НовыйИндекс = НачальныйИндекс; + Для Каждого ЭлементСписка Из СтрокиСписка Цикл + ТекущийИндекс = Списки.Индекс(ЭлементСписка.Значение); + Если ТекущийИндекс <> НовыйИндекс Тогда + Списки.Сдвинуть(ТекущийИндекс, НовыйИндекс - ТекущийИндекс); + КонецЕсли; + Если ТекущееПредставление <> ЭлементСписка.Представление Тогда + Если Подстроки <> Неопределено Тогда + СортироватьСписокПоПолям(ИндексПоляСортировки + 1, Подстроки); + КонецЕсли; + Подстроки = Новый СписокЗначений; + ТекущееПредставление = ЭлементСписка.Представление; + КонецЕсли; + Подстроки.Добавить(ЭлементСписка.Значение); + НовыйИндекс = НовыйИндекс + 1; + КонецЦикла; + + Если Подстроки <> Неопределено Тогда + СортироватьСписокПоПолям(ИндексПоляСортировки + 1, Подстроки); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Функция ПредставлениеДляСортировки(Значение) + + Возврат Формат(Значение, "ЧЦ=15; ЧДЦ=4; ЧН=00000000000,0000; ЧВН=; ЧГ="); + +КонецФункции + +&НаСервереБезКонтекста +Процедура ВключитьРегламентноеЗаданиеНаСервере() + + УправлениеДоступомСлужебный.УстановитьОбновлениеДоступа(Истина); + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ОтменитьИВыключитьОбновлениеДоступаНаСервере() + + УправлениеДоступомСлужебный.УстановитьОбновлениеДоступа(Ложь); + + ПоследнееОбновлениеДоступа = ПоследнееОбновлениеДоступа(); + + Если ЗначениеЗаполнено(ПоследнееОбновлениеДоступа.ИдентификаторФоновогоЗадания) Тогда + ПоследнееФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору( + ПоследнееОбновлениеДоступа.ИдентификаторФоновогоЗадания); + + Если ПоследнееФоновоеЗадание <> Неопределено + И ПоследнееФоновоеЗадание.Состояние = СостояниеФоновогоЗадания.Активно Тогда + + ПоследнееФоновоеЗадание.Отменить(); + КонецЕсли; + КонецЕсли; + + Отбор = Новый Структура("ИмяМетода", УправлениеДоступомСлужебный.ИмяМетодаОбновленияДоступаВФоне()); + ДополнительныеЗадания = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); + + Для Каждого ДополнительноеЗадание Из ДополнительныеЗадания Цикл + Если ДополнительноеЗадание.Состояние = СостояниеФоновогоЗадания.Активно Тогда + ДополнительноеЗадание.Отменить(); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаРучноеУправление/Form.form b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаРучноеУправление/Form.form new file mode 100644 index 000000000..304e9079a --- /dev/null +++ b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаРучноеУправление/Form.form @@ -0,0 +1,754 @@ + + + + <key>ru</key> + <value>Обновление доступа (ручное управление)</value> + + + ГруппаОбновлениеДоступаКОбъекту + 4 + + ОбъектОбновленияДоступа + 43 + + <key>ru</key> + <value>Объект</value> + + true + true + + true + + + ОбъектОбновленияДоступа + + None + + ОбъектОбновленияДоступаРасширеннаяПодсказка + 45 + Label + true + true + + Left + + + + ОбъектОбновленияДоступаКонтекстноеМеню + 44 + true + + InputField + Enter + true + Left + true + + + StartChoice + ОбъектОбновленияДоступаНачалоВыбора + + true + true + true + true + true + Normal + + 1 + + Items.СпискиДляОбновления.CurrentData.Value + + + + + + ГоризонтальнаяГруппа + 48 + + ОбновитьДоступКОбъекту + 9 + + <key>ru</key> + <value>Обновить доступ</value> + + true + true + + true + + + ОбновитьДоступКОбъектуРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + UsualButton + Form.Command.ОбновитьДоступКОбъекту + Normal + Auto + true + true + UserCmds + Auto + + + ГоризонтальныйОтступ + 50 + true + true + + true + + + ГоризонтальныйОтступРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + + ГоризонтальныйОтступКонтекстноеМеню + 51 + true + + Label + 2 + true + true + + Left + + + + ПоказатьДоступКОбъекту + 46 + true + + true + + + ПоказатьДоступКОбъектуРасширеннаяПодсказка + 47 + Label + true + true + + Left + + + Hyperlink + Form.Command.ПоказатьДоступКОбъекту + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Горизонтальная группа</value> + + + ГоризонтальнаяГруппаРасширеннаяПодсказка + 49 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>1. Обновление доступа к объекту</value> + + + ГруппаОбновлениеДоступаКОбъектуРасширеннаяПодсказка + 5 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + auto + Auto + Auto + + + + ГруппаОбновлениеДоступаКоВсемЭлементамСписков + 11 + + СпискиДляОбновления + 18 + + <key>ru</key> + <value>Списки для обновления</value> + + true + true + + true + + + СпискиДляОбновления + + None + + СпискиДляОбновленияГруппа + 53 + + СпискиДляОбновленияПометка + 34 + true + true + + true + + + СпискиДляОбновления.Check + + + СпискиДляОбновленияПометкаРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + + СпискиДляОбновленияПометкаКонтекстноеМеню + 35 + true + + CheckBoxField + Auto + true + Left + true + + + + СпискиДляОбновленияЗначение + 31 + true + true + + true + + + СпискиДляОбновления.Value + + + СпискиДляОбновленияЗначениеРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + + СпискиДляОбновленияЗначениеКонтекстноеМеню + 32 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Списки для обновления группа</value> + + + СпискиДляОбновленияГруппаРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + СпискиДляОбновленияКоманднаяПанель + 20 + + СпискиДляОбновленияУстановитьФлажки + 39 + true + true + + true + + + СпискиДляОбновленияУстановитьФлажкиРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + Form.Item.СпискиДляОбновления.StandardCommand.CheckAll + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + СпискиДляОбновленияСнятьФлажки + 41 + true + true + + true + + + СпискиДляОбновленияСнятьФлажкиРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + Form.Item.СпискиДляОбновления.StandardCommand.UncheckAll + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + СпискиЗапланироватьОбновлениеДоступаКоВсемЭлементамОтмеченныхСписков + 37 + + <key>ru</key> + <value>Запланировать обновление</value> + + true + true + + true + + + СпискиЗапланироватьОбновлениеДоступаКоВсемЭлементамОтмеченныхСписковРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + Form.Command.ЗапланироватьОбновлениеДоступаКоВсемЭлементамОтмеченныхСписков + Normal + Auto + true + true + UserCmds + Auto + + Left + + + СпискиДляОбновленияСтрокаПоиска + 22 + + СпискиДляОбновленияСтрокаПоискаРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + СпискиДляОбновленияСтрокаПоискаКонтекстноеМеню + 23 + true + + СпискиДляОбновления + + true + + + + СпискиДляОбновленияСостояниеПросмотра + 25 + + СпискиДляОбновленияСостояниеПросмотраРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + + СпискиДляОбновленияСостояниеПросмотраКонтекстноеМеню + 26 + true + + ViewStatusAddition + СпискиДляОбновления + + true + + + + СпискиДляОбновленияУправлениеПоиском + 28 + + СпискиДляОбновленияУправлениеПоискомРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + + СпискиДляОбновленияУправлениеПоискомКонтекстноеМеню + 29 + true + + SearchControlAddition + СпискиДляОбновления + + true + + + + СпискиДляОбновленияРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + СпискиДляОбновленияКонтекстноеМеню + 19 + true + + true + true + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + true + Auto + Auto + true + true + + СпискиДляОбновления.Picture + + true + + true + true + + true + + + <key>ru</key> + <value>2. Обновление доступа ко всем элементам списков</value> + + + ГруппаОбновлениеДоступаКоВсемЭлементамСписковРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + NormalSeparation + true + true + auto + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + Vertical + true + true + true + auto + true + + СпискиДляОбновления + + <key>ru</key> + <value>Списки для обновления</value> + + 3 + + ValueList + + + true + + + true + + + + + + + ОбъектОбновленияДоступа + + <key>ru</key> + <value>Объект обновления доступа</value> + + 1 + + ExchangePlanRef + BusinessProcessRef + DocumentRef + ChartOfCalculationTypesRef + TaskRef + ChartOfCharacteristicTypesRef + ChartOfAccountsRef + CatalogRef + + + true + + + true + + + + ТипыОбъектовОбновленияДоступа + + <key>ru</key> + <value>Типы объектов обновления доступа</value> + + 4 + + ValueList + + + true + + + true + + + + + + + ИменаТаблицТиповОбъектовОбновленияДоступа + + <key>ru</key> + <value>Имена таблиц типов объектов обновления доступа</value> + + 5 + + ValueList + + + true + + + true + + + + + + + ВыбранныйТипОбъектаОбновленияДоступа + + <key>ru</key> + <value>Выбранный тип объекта обновления доступа</value> + + 6 + + AnyRef + + + true + + + true + + + + ОбновитьДоступКОбъекту + + <key>ru</key> + <value>Обновить доступ к объекту</value> + + 1 + + ru + Обновить доступ к выбранному объекту прямо сейчас. + + + true + + + + ОбновитьДоступКОбъекту + + + DontUse + Auto + + + ЗапланироватьОбновлениеДоступаКоВсемЭлементамОтмеченныхСписков + + <key>ru</key> + <value>Запланировать обновление доступа ко всем элементам отмеченных списков</value> + + 2 + + ru + Запланировать обновление доступа ко всем элементам отмеченных списков. +Обновление будет выполняться регламентным заданием "Обновление доступа". + + + true + + + + ЗапланироватьОбновлениеДоступаКоВсемЭлементамОтмеченныхСписков + + + DontUse + Auto + + + ПоказатьДоступКОбъекту + + <key>ru</key> + <value>Показать доступ ...</value> + + 3 + + true + + + + ПоказатьДоступКОбъекту + + + Auto + Auto + + + + + + diff --git a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаРучноеУправление/Module.bsl b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаРучноеУправление/Module.bsl new file mode 100644 index 000000000..be8064a21 --- /dev/null +++ b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаРучноеУправление/Module.bsl @@ -0,0 +1,281 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + Если Не СтандартныеПодсистемыСервер.ВерсияПрограммыОбновленаДинамически() Тогда + СпискиСОграничением = УправлениеДоступомСлужебныйПовтИсп.СпискиСОграничением(); + Иначе + СпискиСОграничением = УправлениеДоступомСлужебный.ДействующиеПараметрыОграниченияДоступа(Неопределено); + КонецЕсли; + + Списки = Новый Массив; + Для Каждого ОписаниеСписка Из СпискиСОграничением Цикл + ПолноеИмя = ОписаниеСписка.Ключ; + Списки.Добавить(ПолноеИмя); + Если Не УправлениеДоступомСлужебный.ЭтоСсылочныйТипТаблицы(ПолноеИмя) Тогда + Продолжить; + КонецЕсли; + ПустаяСсылка = ПредопределенноеЗначение(ПолноеИмя + ".ПустаяСсылка"); + ТипыОбъектовОбновленияДоступа.Добавить(ПустаяСсылка, Строка(ТипЗнч(ПустаяСсылка))); + ИменаТаблицТиповОбъектовОбновленияДоступа.Добавить(ПустаяСсылка, ПолноеИмя); + КонецЦикла; + ТипыОбъектовОбновленияДоступа.СортироватьПоПредставлению(); + + Идентификаторы = ОбщегоНазначения.ИдентификаторыОбъектовМетаданных(Списки); + + Для Каждого ОписаниеИдентификатора Из Идентификаторы Цикл + СпискиДляОбновления.Добавить(ОписаниеИдентификатора.Значение, + Строка(ОписаниеИдентификатора.Значение)); + КонецЦикла; + + СпискиДляОбновления.СортироватьПоПредставлению(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ОбъектОбновленияДоступаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + ТекущийЭлементТипа = ТипыОбъектовОбновленияДоступа.НайтиПоЗначению( + ВыбранныйТипОбъектаОбновленияДоступа); + + Если ТекущийЭлементТипа = Неопределено Тогда + ТекущийЭлементТипа = ТипыОбъектовОбновленияДоступа[0]; + КонецЕсли; + + ТипыОбъектовОбновленияДоступа.ПоказатьВыборЭлемента( + Новый ОписаниеОповещения("ОбъектОбновленияДоступаНачалоВыбораПродолжение", ЭтотОбъект), + НСтр("ru = 'Выбор типа данных'"), + ТекущийЭлементТипа); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ПоказатьДоступКОбъекту(Команда) + + Если Не ЗначениеЗаполнено(ОбъектОбновленияДоступа) Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Выберите объект.'")); + Возврат; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьДоступКОбъекту(Команда) + + ПоказатьПредупреждение(, ОбновитьДоступКОбъектуНаСервере()); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗапланироватьОбновлениеДоступаКоВсемЭлементамОтмеченныхСписков(Команда) + + ЗапланироватьОбновлениеДоступаКоВсемЭлементамОтмеченныхСписковНаСервере(); + + Оповестить("Запись_ОбновлениеКлючейДоступаКДанным", Новый Структура, Неопределено); + Оповестить("Запись_ОбновлениеКлючейДоступаПользователей", Новый Структура, Неопределено); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Функция ОбновитьДоступКОбъектуНаСервере() + + Если Не ЗначениеЗаполнено(ОбъектОбновленияДоступа) Тогда + Возврат НСтр("ru = 'Выберите объект.'"); + КонецЕсли; + + ПолноеИмя = ОбъектОбновленияДоступа.Метаданные().ПолноеИмя(); + ИдентификаторТранзакции = Новый УникальныйИдентификатор; + + Текст = ""; + + ОбновитьДоступКОбъектуДляВидаПользователей(ОбъектОбновленияДоступа, + ПолноеИмя, ИдентификаторТранзакции, Ложь, Текст); + + ОбновитьДоступКОбъектуДляВидаПользователей(ОбъектОбновленияДоступа, + ПолноеИмя, ИдентификаторТранзакции, Истина, Текст); + + Возврат Текст; + +КонецФункции + +&НаСервере +Процедура ОбновитьДоступКОбъектуДляВидаПользователей(СсылкаНаОбъект, ПолноеИмя, ИдентификаторТранзакции, ДляВнешнихПользователей, Текст) + + ПараметрыОграничения = УправлениеДоступомСлужебный.ПараметрыОграничения(ПолноеИмя, + ИдентификаторТранзакции, ДляВнешнихПользователей); + + Текст = Текст + ?(Текст = "", "", Символы.ПС + Символы.ПС); + Если ДляВнешнихПользователей Тогда + Если ПараметрыОграничения.ДоступЗапрещен Тогда + Текст = Текст + НСтр("ru = 'Для внешних пользователей (доступ запрещен):'"); + + ИначеЕсли ПараметрыОграничения.ОграничениеОтключено Тогда + Текст = Текст + НСтр("ru = 'Для внешних пользователей (ограничение отключено):'"); + Иначе + Текст = Текст + НСтр("ru = 'Для внешних пользователей:'"); + КонецЕсли; + Иначе + Если ПараметрыОграничения.ДоступЗапрещен Тогда + Текст = Текст + НСтр("ru = 'Для пользователей (доступ запрещен):'"); + + ИначеЕсли ПараметрыОграничения.ОграничениеОтключено Тогда + Текст = Текст + НСтр("ru = 'Для пользователей (ограничение отключено):'"); + Иначе + Текст = Текст + НСтр("ru = 'Для пользователей:'"); + КонецЕсли; + КонецЕсли; + + КлючДоступаИсточникаУстарел = УправлениеДоступомСлужебный.КлючДоступаИсточникаУстарел( + СсылкаНаОбъект, ПараметрыОграничения); + + ЕстьИзмененияПрав = Ложь; + + УправлениеДоступомСлужебный.ОбновитьКлючиДоступаЭлементовДанныхПриЗаписи(СсылкаНаОбъект, + ПараметрыОграничения, ИдентификаторТранзакции, Истина, ЕстьИзмененияПрав); + + Если ПараметрыОграничения.ОграничениеОтключено + Или ПараметрыОграничения.ДоступЗапрещен + Или ПараметрыОграничения.ИспользуетсяОграничениеПоВладельцу Тогда + + Если Не ПараметрыОграничения.Свойство("ТекстЗапросаЭлементовДанныхДляОчисткиКлючей") Тогда + Если КлючДоступаИсточникаУстарел Тогда + Текст = Текст + Символы.ПС + НСтр("ru = '1. У объекта установлен всегда разрешенный ключ доступа.'"); + Иначе + Текст = Текст + Символы.ПС + НСтр("ru = '1. Обновление не требуется. У объекта ключ доступа уже всегда разрешенный.'"); + КонецЕсли; + Иначе + Если КлючДоступаИсточникаУстарел Тогда + Текст = Текст + Символы.ПС + НСтр("ru = '1. У объекта очищен ключ доступа.'"); + Иначе + Текст = Текст + Символы.ПС + НСтр("ru = '1. Обновление не требуется. У объекта ключ доступа уже пустой.'"); + КонецЕсли; + КонецЕсли; + Иначе + Если КлючДоступаИсточникаУстарел Тогда + Текст = Текст + Символы.ПС + НСтр("ru = '1. У объекта обновлен ключ доступа.'"); + Иначе + Текст = Текст + Символы.ПС + НСтр("ru = '1. Обновление не требуется. У объекта ключ доступа не устарел.'"); + КонецЕсли; + КонецЕсли; + + Если ПараметрыОграничения.ОграничениеОтключено + Или ПараметрыОграничения.ДоступЗапрещен + Или ПараметрыОграничения.ИспользуетсяОграничениеПоВладельцу Тогда + + Если Не ПараметрыОграничения.Свойство("ТекстЗапросаЭлементовДанныхДляОчисткиКлючей") Тогда + Если ЕстьИзмененияПрав Тогда + Текст = Текст + Символы.ПС + + НСтр("ru = '2. У всегда разрешенного ключа доступа обновлен состав + | групп доступа или пользователей или внешних пользователей.'"); + Иначе + Текст = Текст + Символы.ПС + + НСтр("ru = '2. Обновление не требуется. У всегда разрешенного ключа доступа + | состав групп доступа, пользователей и внешних пользователей не устарел.'"); + КонецЕсли; + Иначе + Текст = Текст + Символы.ПС + НСтр("ru = '2. Обновление не требуется. Пустой ключ доступа всегда запрещен.'"); + КонецЕсли; + + ИначеЕсли ЕстьИзмененияПрав Тогда + Если ПараметрыОграничения.ЕстьОграничениеПоПользователям Тогда + Если ДляВнешнихПользователей Тогда + Текст = Текст + Символы.ПС + НСтр("ru = '2. У ключа доступа обновлен состав внешних пользователей.'"); + Иначе + Текст = Текст + Символы.ПС + НСтр("ru = '2. У ключа доступа обновлен состав пользователей.'"); + КонецЕсли; + Иначе + Текст = Текст + Символы.ПС + НСтр("ru = '2. У ключа доступа обновлен состав групп доступа.'"); + КонецЕсли; + Иначе + Если ПараметрыОграничения.ЕстьОграничениеПоПользователям Тогда + Если ДляВнешнихПользователей Тогда + Текст = Текст + Символы.ПС + НСтр("ru = '2. Обновление не требуется. У ключа доступа состав внешних пользователей не устарел.'"); + Иначе + Текст = Текст + Символы.ПС + НСтр("ru = '2. Обновление не требуется. У ключа доступа состав пользователей не устарел.'"); + КонецЕсли; + Иначе + Текст = Текст + Символы.ПС + НСтр("ru = '2. Обновление не требуется. У ключа доступа состав групп доступа не устарел.'"); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ЗапланироватьОбновлениеДоступаКоВсемЭлементамОтмеченныхСписковНаСервере() + + Списки = Новый Массив; + Для Каждого ЭлементСписка Из СпискиДляОбновления Цикл + Если ЭлементСписка.Пометка Тогда + Списки.Добавить(ЭлементСписка.Значение); + КонецЕсли; + КонецЦикла; + + Если Списки.Количество() = СпискиДляОбновления.Количество() Тогда + Списки = Неопределено; + КонецЕсли; + + УправлениеДоступомСлужебный.ЗапланироватьОбновлениеДоступа(Списки); + + УправлениеДоступомСлужебный.УстановитьОбновлениеДоступа(Ложь); + УправлениеДоступомСлужебный.УстановитьОбновлениеДоступа(Истина); + +КонецПроцедуры + +// Продолжение обработчика события ОбъектОбновленияДоступаНачалоВыбора. +&НаКлиенте +Процедура ОбъектОбновленияДоступаНачалоВыбораПродолжение(ВыбранныйЭлемент, Неопределен) Экспорт + + Если ВыбранныйЭлемент = Неопределено Тогда + Возврат; + КонецЕсли; + + ВыбранныйТипОбъектаОбновленияДоступа = ВыбранныйЭлемент.Значение; + Если ТипЗнч(ОбъектОбновленияДоступа) <> ТипЗнч(ВыбранныйТипОбъектаОбновленияДоступа) Тогда + ОбъектОбновленияДоступа = ВыбранныйТипОбъектаОбновленияДоступа; + КонецЕсли; + + ЗначениеДоступаНачалоВыбораЗавершение(); + +КонецПроцедуры + +// Завершение обработчика события ОбъектОбновленияДоступаНачалоВыбора. +&НаКлиенте +Процедура ЗначениеДоступаНачалоВыбораЗавершение() + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("РежимВыбора", Истина); + ПараметрыФормы.Вставить("ТекущаяСтрока", ОбъектОбновленияДоступа); + + ЭлементСписка = ИменаТаблицТиповОбъектовОбновленияДоступа.НайтиПоЗначению( + ВыбранныйТипОбъектаОбновленияДоступа); + + Если ЭлементСписка = Неопределено Тогда + Возврат; + КонецЕсли; + ИмяФормыВыбора = ЭлементСписка.Представление + ".ФормаВыбора"; + + ОткрытьФорму(ИмяФормыВыбора, ПараметрыФормы, Элементы.ОбъектОбновленияДоступа); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ФормаЗаписи/Form.form new file mode 100644 index 000000000..7693331a8 --- /dev/null +++ b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ФормаЗаписи/Form.form @@ -0,0 +1,310 @@ + + + + Список + 1 + true + true + + true + + + Запись.Список + + + СписокРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 2 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ДляВнешнихПользователей + 4 + true + true + + true + + + Запись.ДляВнешнихПользователей + + + ДляВнешнихПользователейРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + ДляВнешнихПользователейКонтекстноеМеню + 5 + true + + CheckBoxField + Enter + true + Left + true + + + + ДатаПоследнегоОбновленногоЭлемента + 10 + true + true + + true + + + Запись.ДатаПоследнегоОбновленногоЭлемента + + + ДатаПоследнегоОбновленногоЭлементаРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + ДатаПоследнегоОбновленногоЭлементаКонтекстноеМеню + 11 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ДатаИзмененияЗаписиРегистра + 13 + true + true + + true + + + Запись.ДатаИзмененияЗаписиРегистра + + + ДатаИзмененияЗаписиРегистраРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + ДатаИзмененияЗаписиРегистраКонтекстноеМеню + 14 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + КлючУникальности + 7 + true + true + + true + + + Запись.КлючУникальности + + + КлючУникальностиРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + КлючУникальностиКонтекстноеМеню + 8 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ФормаКоманднаяПанель + -1 + + ФормаВключитьВозможностьРедактирования + 16 + true + true + + true + + + ФормаВключитьВозможностьРедактированияExtendedTooltip + 17 + Label + true + true + + Left + + + Form.Command.ВключитьВозможностьРедактирования + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + true + auto + true + + Запись + 1 + + InformationRegisterRecordManager.ОбновлениеКлючейДоступаКДанным + + + true + + + true + +
      true
      + true +
      + + ЭтоНоваяЗапись + + <key>ru</key> + <value>Это новая запись</value> + + 2 + + Boolean + + + true + + + true + + + + ВключитьВозможностьРедактирования + + <key>ru</key> + <value>Включить возможность редактирования</value> + + 1 + + ru + Включить возможность редактирования только для целей поиска неисправности (требуется углубленное понимание работы механизма) + + + true + + + + ВключитьВозможностьРедактирования + + + DontUse + Auto + + + + + + + + AfterWriteAtServer + ПослеЗаписиНаСервере + + + BeforeWriteAtServer + ПередЗаписьюНаСервере + + +
      diff --git a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ФормаЗаписи/Module.bsl new file mode 100644 index 000000000..1b0ef2390 --- /dev/null +++ b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ФормаЗаписи/Module.bsl @@ -0,0 +1,57 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + Если Параметры.Ключ.Пустой() Тогда + ЭтоНоваяЗапись = Истина; + Элементы.ДатаПоследнегоОбновленногоЭлемента.ТолькоПросмотр = Истина; + Элементы.КлючУникальности.ТолькоПросмотр = Истина; + Элементы.ДатаИзмененияЗаписиРегистра.ТолькоПросмотр = Истина; + КонецЕсли; + + ТолькоПросмотр = Истина; + +КонецПроцедуры + +&НаСервере +Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + + Если Не ЭтоНоваяЗапись Тогда + Возврат; + КонецЕсли; + + ТекущийОбъект.ДатаПоследнегоОбновленногоЭлемента = УправлениеДоступомСлужебный.МаксимальнаяДата(); + ТекущийОбъект.КлючУникальности = Новый УникальныйИдентификатор; + ТекущийОбъект.ДатаИзмененияЗаписиРегистра = ТекущаяДатаСеанса(); + +КонецПроцедуры + +&НаСервере +Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) + + ЭтоНоваяЗапись = Ложь; + + Элементы.ДатаПоследнегоОбновленногоЭлемента.ТолькоПросмотр = Ложь; + Элементы.КлючУникальности.ТолькоПросмотр = Ложь; + Элементы.ДатаИзмененияЗаписиРегистра.ТолькоПросмотр = Ложь; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВключитьВозможностьРедактирования(Команда) + + ТолькоПросмотр = Ложь; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..61e6fb4bb --- /dev/null +++ b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,17 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..4922c6f96 --- /dev/null +++ b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ФормаСписка/Form.form @@ -0,0 +1,546 @@ + + + + ГруппаПользовательскихНастроек + 1 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + ГруппаПользовательскихНастроекРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + КоманднаяПанель + 33 + + ФормаОбновлениеДоступа + 39 + true + true + + true + + + ФормаОбновлениеДоступаРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + Form.Command.ОбновлениеДоступаНаУровнеЗаписей + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаВключитьВозможностьРедактирования + 37 + true + true + + true + + + ФормаВключитьВозможностьРедактированияExtendedTooltip + 38 + Label + true + true + + Left + + + Form.Command.ВключитьВозможностьРедактирования + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + КоманднаяПанельРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + CommandBar + + Left + Form + + + + Список + 3 + + <key>ru</key> + <value>Список</value> + + true + true + + true + + + Список + + true + None + + СписокСписок + 16 + true + true + + true + + + Список.Список + + true + + СписокСписокРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + СписокСписокКонтекстноеМеню + 17 + true + + LabelField + Enter + true + Left + true + + true + true + + + + СписокДляВнешнихПользователей + 19 + + <key>ru</key> + <value>ВП</value> + + true + true + + true + + + Список.ДляВнешнихПользователей + + true + + СписокДляВнешнихПользователейРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + СписокДляВнешнихПользователейКонтекстноеМеню + 20 + true + + CheckBoxField + Enter + true + Left + true + + + + СписокДатаПоследнегоОбновленногоЭлемента + 25 + + <key>ru</key> + <value>Дата элемента</value> + + true + true + + true + + + Список.ДатаПоследнегоОбновленногоЭлемента + + true + + СписокДатаПоследнегоОбновленногоЭлементаРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + + СписокДатаПоследнегоОбновленногоЭлементаКонтекстноеМеню + 26 + true + + LabelField + Enter + true + Left + true + + true + true + + + + СписокДатаИзмененияЗаписиРегистра + 28 + + <key>ru</key> + <value>Дата изменения</value> + + true + true + + true + + + Список.ДатаИзмененияЗаписиРегистра + + true + + СписокДатаИзмененияЗаписиРегистраРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + + СписокДатаИзмененияЗаписиРегистраКонтекстноеМеню + 29 + true + + LabelField + Enter + true + Left + true + + true + true + + + + СписокКлючУникальности + 22 + true + true + + true + + + Список.КлючУникальности + + true + + СписокКлючУникальностиРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + СписокКлючУникальностиКонтекстноеМеню + 23 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + true + true + true + true + true + MultiRow +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + ГруппаПользовательскихНастроек + +
      + + ФормаКоманднаяПанель + -1 + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + Список + 1 + + DynamicList + + + true + + + true + +
      true
      + + InformationRegister.ОбновлениеКлючейДоступаКДанным + true + true + true + true + +
      + + ВключитьВозможностьРедактирования + + <key>ru</key> + <value>Включить возможность редактирования</value> + + 1 + + ru + Включить возможность редактирования только для целей поиска неисправности (требуется углубленное понимание работы механизма) + + + true + + + + ВключитьВозможностьРедактирования + + + DontUse + Auto + + + ОбновлениеДоступаНаУровнеЗаписей + + <key>ru</key> + <value>Обновление доступа на уровне записей...</value> + + 2 + + ru + Отображение хода обновления доступа на уровне записей и ручное обновление + + + true + + + + ОбновлениеДоступаНаУровнеЗаписей + + + Auto + Auto + + + + + + +
      diff --git a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ФормаСписка/Module.bsl new file mode 100644 index 000000000..cb0d3b6a9 --- /dev/null +++ b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,33 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + ТолькоПросмотр = Истина; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВключитьВозможностьРедактирования(Команда) + + ТолькоПросмотр = Ложь; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновлениеДоступаНаУровнеЗаписей(Команда) + + ОткрытьФорму("РегистрСведений.ОбновлениеКлючейДоступаКДанным.Форма.ОбновлениеДоступаНаУровнеЗаписей"); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/ОбновлениеКлючейДоступаКДанным.mdo b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/ОбновлениеКлючейДоступаКДанным.mdo new file mode 100644 index 000000000..17d9fda02 --- /dev/null +++ b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/ОбновлениеКлючейДоступаКДанным.mdo @@ -0,0 +1,215 @@ + + + + + + + + + + + + ОбновлениеКлючейДоступаКДанным + + ru + Обновление ключей доступа к данным + + InDialog + InformationRegister.ОбновлениеКлючейДоступаКДанным.Form.ФормаЗаписи + InformationRegister.ОбновлениеКлючейДоступаКДанным.Form.ФормаСписка + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + ru + Обновление ключей доступа + + + ДатаПоследнегоОбновленногоЭлемента + + ru + Дата последнего обновленного элемента + + + Date + + + + ru + Дата последнего документа или бизнес-процесса, для которого было выполнено обновление (используется, когда ключ уникальности не заполнен). + + + + Use + Use + + 0001-01-01T00:00:00 + + + + ПоследнийОбновленныйЭлемент + + ru + Последний обновленный элемент + + + ValueStorage + + + ru + Содержит ссылку или ключ записи (используется, когда ключ уникальности не заполнен). + + + + Use + Use + + + + ДатаИзмененияЗаписиРегистра + + ru + Дата изменения записи регистра + + + Date + + + + ru + Дата изменения записи регистра. +Используется для выбора записей, измененных после предыдущего выбора. + + + + Index + Use + Use + + + + Список + + ru + Список + + + CatalogRef.ИдентификаторыОбъектовМетаданных + + + ru + Список элементов справочников, документов, регистров и др., для которого используется ключ доступа. + + + + Use + Use + true + + true + + + ДляВнешнихПользователей + + ru + Для внешних пользователей + + + Boolean + + + ru + Обновление ключей доступа к данным для внешних пользователей + + + + Use + Use + + + + КлючУникальности + + ru + Ключ уникальности + + + UUID + + + ru + Произвольный уникальный идентификатор для распараллеливания записи из сеансов, регистрирующих необходимость обновления. + + + + Use + + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + + ФормаЗаписи + + ru + Форма записи + + PersonalComputer + MobileDevice + + + ОбновлениеДоступаНаУровнеЗаписей + + ru + Обновление доступа на уровне записей + + PersonalComputer + MobileDevice + + + ОбновлениеДоступаРучноеУправление + + ru + Обновление доступа ручное управление + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаПользователей/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаПользователей/Forms/ФормаЗаписи/Form.form new file mode 100644 index 000000000..fd454a6b9 --- /dev/null +++ b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаПользователей/Forms/ФормаЗаписи/Form.form @@ -0,0 +1,269 @@ + + + + Список + 1 + true + true + + true + + + Запись.Список + + + СписокРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 2 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ДляВнешнихПользователей + 4 + true + true + + true + + + Запись.ДляВнешнихПользователей + + + ДляВнешнихПользователейРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + ДляВнешнихПользователейКонтекстноеМеню + 5 + true + + CheckBoxField + Enter + true + Left + true + + + + ДатаИзмененияЗаписиРегистра + 7 + true + true + + true + + + Запись.ДатаИзмененияЗаписиРегистра + + + ДатаИзмененияЗаписиРегистраРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + ДатаИзмененияЗаписиРегистраКонтекстноеМеню + 8 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + КлючУникальности + 12 + true + true + + true + + + Запись.КлючУникальности + + + КлючУникальностиРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + + КлючУникальностиКонтекстноеМеню + 13 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ФормаКоманднаяПанель + -1 + + ФормаВключитьВозможностьРедактирования + 10 + true + true + + true + + + ФормаВключитьВозможностьРедактированияExtendedTooltip + 11 + Label + true + true + + Left + + + Form.Command.ВключитьВозможностьРедактирования + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + true + auto + true + + Запись + 1 + + InformationRegisterRecordManager.ОбновлениеКлючейДоступаПользователей + + + true + + + true + +
      true
      + true +
      + + ЭтоНоваяЗапись + + <key>ru</key> + <value>Это новая запись</value> + + 2 + + Boolean + + + true + + + true + + + + ВключитьВозможностьРедактирования + + <key>ru</key> + <value>Включить возможность редактирования</value> + + 1 + + ru + Включить возможность редактирования только для целей поиска неисправности (требуется углубленное понимание работы механизма) + + + true + + + + ВключитьВозможностьРедактирования + + + DontUse + Auto + + + + + + + + AfterWriteAtServer + ПослеЗаписиНаСервере + + + BeforeWriteAtServer + ПередЗаписьюНаСервере + + +
      diff --git a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаПользователей/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаПользователей/Forms/ФормаЗаписи/Module.bsl new file mode 100644 index 000000000..719550872 --- /dev/null +++ b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаПользователей/Forms/ФормаЗаписи/Module.bsl @@ -0,0 +1,54 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + Если Параметры.Ключ.Пустой() Тогда + ЭтоНоваяЗапись = Истина; + Элементы.КлючУникальности.ТолькоПросмотр = Истина; + Элементы.ДатаИзмененияЗаписиРегистра.ТолькоПросмотр = Истина; + КонецЕсли; + + ТолькоПросмотр = Истина; + +КонецПроцедуры + +&НаСервере +Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + + Если Не ЭтоНоваяЗапись Тогда + Возврат; + КонецЕсли; + + ТекущийОбъект.КлючУникальности = Новый УникальныйИдентификатор; + ТекущийОбъект.ДатаИзмененияЗаписиРегистра = ТекущаяДатаСеанса(); + +КонецПроцедуры + +&НаСервере +Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) + + ЭтоНоваяЗапись = Ложь; + + Элементы.КлючУникальности.ТолькоПросмотр = Ложь; + Элементы.ДатаИзмененияЗаписиРегистра.ТолькоПросмотр = Ложь; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВключитьВозможностьРедактирования(Команда) + + ТолькоПросмотр = Ложь; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаПользователей/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаПользователей/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..61e6fb4bb --- /dev/null +++ b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаПользователей/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,17 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаПользователей/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаПользователей/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..923fd86bc --- /dev/null +++ b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаПользователей/Forms/ФормаСписка/Form.form @@ -0,0 +1,455 @@ + + + + ГруппаПользовательскихНастроек + 1 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + ГруппаПользовательскихНастроекРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + КоманднаяПанель + 28 + + ФормаВключитьВозможностьРедактирования + 32 + true + true + + true + + + ФормаВключитьВозможностьРедактированияExtendedTooltip + 33 + Label + true + true + + Left + + + Form.Command.ВключитьВозможностьРедактирования + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + КоманднаяПанельРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + CommandBar + + Left + Form + + + + Список + 3 + + <key>ru</key> + <value>Список</value> + + true + true + + true + + + Список + + true + None + + СписокСписок + 16 + true + true + + true + + + Список.Список + + true + + СписокСписокРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + СписокСписокКонтекстноеМеню + 17 + true + + LabelField + Enter + true + Left + true + + true + true + + + + СписокДляВнешнихПользователей + 19 + + <key>ru</key> + <value>ВП</value> + + true + true + + true + + + Список.ДляВнешнихПользователей + + true + + СписокДляВнешнихПользователейРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + СписокДляВнешнихПользователейКонтекстноеМеню + 20 + true + + CheckBoxField + Enter + true + Left + true + + + + СписокДатаИзмененияЗаписиРегистра + 22 + + <key>ru</key> + <value>Дата изменения</value> + + true + true + + true + + + Список.ДатаИзмененияЗаписиРегистра + + true + + СписокДатаИзмененияЗаписиРегистраРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + СписокДатаИзмененияЗаписиРегистраКонтекстноеМеню + 23 + true + + LabelField + Enter + true + Left + true + + true + true + + + + СписокКлючУникальности + 25 + true + true + + true + + + Список.КлючУникальности + + + СписокКлючУникальностиРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + + СписокКлючУникальностиКонтекстноеМеню + 26 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + true + true + true + true + true + MultiRow +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + ГруппаПользовательскихНастроек + +
      + + ФормаКоманднаяПанель + -1 + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + Список + 1 + + DynamicList + + + true + + + true + +
      true
      + + InformationRegister.ОбновлениеКлючейДоступаПользователей + true + true + true + true + +
      + + ВключитьВозможностьРедактирования + + <key>ru</key> + <value>Включить возможность редактирования</value> + + 1 + + ru + Включить возможность редактирования только для целей поиска неисправности (требуется углубленное понимание работы механизма) + + + true + + + + ВключитьВозможностьРедактирования + + + DontUse + Auto + + + + + + +
      diff --git a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаПользователей/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаПользователей/Forms/ФормаСписка/Module.bsl new file mode 100644 index 000000000..266dc08c4 --- /dev/null +++ b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаПользователей/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,26 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + ТолькоПросмотр = Истина; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВключитьВозможностьРедактирования(Команда) + + ТолькоПросмотр = Ложь; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаПользователей/ОбновлениеКлючейДоступаПользователей.mdo b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаПользователей/ОбновлениеКлючейДоступаПользователей.mdo new file mode 100644 index 000000000..39c36f39a --- /dev/null +++ b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаПользователей/ОбновлениеКлючейДоступаПользователей.mdo @@ -0,0 +1,179 @@ + + + + + + + + + + + + ОбновлениеКлючейДоступаПользователей + + ru + Обновление ключей доступа пользователей + + InDialog + InformationRegister.ОбновлениеКлючейДоступаПользователей.Form.ФормаЗаписи + InformationRegister.ОбновлениеКлючейДоступаПользователей.Form.ФормаСписка + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + ru + Обновление ключей доступа пользователей + + + ru + Обновление ключей доступа пользователей, внешних пользователей и групп доступа + + + ПоследнийОбновленныйКлючДоступа + + ru + Последний обновленный ключ доступа + + + ValueStorage + + + ru + Указатель на ключ доступа (используется, когда ключ уникальности не заполнен). + + + + Use + Use + + + + ДатаИзмененияЗаписиРегистра + + ru + Дата изменения записи регистра + + + Date + + + + ru + Дата изменения записи регистра. +Используется для выбора записей, измененных после предыдущего выбора. + + + + Index + Use + Use + + + + Список + + ru + Список + + + CatalogRef.ИдентификаторыОбъектовМетаданных + + + ru + Список элементов справочников, документов, регистров и др., для которого используется ключ доступа. + + + + Use + Use + true + + true + + + ДляВнешнихПользователей + + ru + Для внешних пользователей + + + Boolean + + + ru + Обновление ключей доступа для внешних пользователей + + + + Use + Use + + + + КлючУникальности + + ru + Ключ уникальности + + + UUID + + + ru + Произвольный уникальный идентификатор для распараллеливания записи из сеансов, регистрирующих необходимость обновления. + + + + Use + + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + + ФормаЗаписи + + ru + Форма записи + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ManagerModule.bsl b/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ManagerModule.bsl index afa0f0961..5f3248ff7 100644 --- a/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ManagerModule.bsl @@ -86,8 +86,6 @@ Возврат Не Запрос.Выполнить().Пустой(); КонецФункции -// - Процедура ЗафиксироватьВыполнениеКорректировкиИнформацииСопоставленияБезусловно(УзелИнформационнойБазы) Экспорт СтруктураЗаписи = Новый Структура; @@ -130,19 +128,13 @@ Процедура УстановитьНеобходимостьВыполненияКорректировкиИнформацииСопоставленияДляВсехУзловИнформационнойБазы() Экспорт - СписокПлановОбмена = ОбменДаннымиПовтИсп.СписокПлановОбменаБСП(); - - Для Каждого Элемент Из СписокПлановОбмена Цикл + Для Каждого ИмяПланаОбмена Из ОбменДаннымиПовтИсп.ПланыОбменаБСП() Цикл - ИмяПланаОбмена = Элемент.Значение; - - Если Метаданные.ПланыОбмена[ИмяПланаОбмена].РаспределеннаяИнформационнаяБаза Тогда + Если ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(ИмяПланаОбмена) Тогда Продолжить; КонецЕсли; - МассивУзлов = ОбменДаннымиПовтИсп.УзлыПланаОбмена(ИмяПланаОбмена); - - Для Каждого Узел Из МассивУзлов Цикл + Для Каждого Узел Из ОбменДаннымиСервер.УзлыПланаОбмена(ИмяПланаОбмена) Цикл СтруктураЗаписи = Новый Структура; СтруктураЗаписи.Вставить("УзелИнформационнойБазы", Узел); @@ -187,8 +179,6 @@ Возврат Результат; КонецФункции -// - Процедура УстановитьПризнакОтправкиДанных(Знач Получатель) Экспорт Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда @@ -254,8 +244,6 @@ КонецФункции -// - Процедура УстановитьВерсиюКорреспондента(Знач Корреспондент, Знач Версия) Экспорт Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда @@ -314,15 +302,300 @@ Возврат Результат; КонецФункции -// +Процедура УстановитьПризнакНастройкаЗавершена(УзелОбмена) Экспорт + + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("УзелИнформационнойБазы", УзелОбмена); + СтруктураЗаписи.Вставить("НастройкаЗавершена", Истина); + + ОбновитьЗапись(СтруктураЗаписи); + +КонецПроцедуры + +Функция НастройкаЗавершена(УзелОбмена) Экспорт + + Результат = Ложь; + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ОбщиеНастройкиУзловИнформационныхБаз.НастройкаЗавершена КАК НастройкаЗавершена + |ИЗ + | РегистрСведений.ОбщиеНастройкиУзловИнформационныхБаз КАК ОбщиеНастройкиУзловИнформационныхБаз + |ГДЕ + | ОбщиеНастройкиУзловИнформационныхБаз.УзелИнформационнойБазы = &УзелОбмена"); + Запрос.УстановитьПараметр("УзелОбмена", УзелОбмена); + + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + Результат = Выборка.НастройкаЗавершена; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Процедура УстановитьПризнакНачальныйОбразСоздан(УзелОбмена) Экспорт + + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("УзелИнформационнойБазы", УзелОбмена); + СтруктураЗаписи.Вставить("НачальныйОбразСоздан", Истина); + + ОбновитьЗапись(СтруктураЗаписи); + +КонецПроцедуры + +Функция НачальныйОбразСоздан(УзелОбмена) Экспорт + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ИСТИНА КАК НачальныйОбразСоздан + |ИЗ + | РегистрСведений.ОбщиеНастройкиУзловИнформационныхБаз КАК ОбщиеНастройкиУзловИнформационныхБаз + |ГДЕ + | ОбщиеНастройкиУзловИнформационныхБаз.УзелИнформационнойБазы = &УзелОбмена + | И ОбщиеНастройкиУзловИнформационныхБаз.НачальныйОбразСоздан"); + Запрос.УстановитьПараметр("УзелОбмена", УзелОбмена); + + Выборка = Запрос.Выполнить().Выбрать(); + + Возврат Выборка.Следующий(); + +КонецФункции + +Процедура ОбновитьПрефиксы(УзелОбмена, Префикс = "", ПрефиксКорреспондента = "") Экспорт + + ЕстьПрефикс = Ложь; + + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("УзелИнформационнойБазы", УзелОбмена); + + Если ЗначениеЗаполнено(Префикс) Тогда + СтруктураЗаписи.Вставить("Префикс", Префикс); + ЕстьПрефикс = Истина; + КонецЕсли; + + Если ЗначениеЗаполнено(ПрефиксКорреспондента) Тогда + СтруктураЗаписи.Вставить("ПрефиксКорреспондента", ПрефиксКорреспондента); + ЕстьПрефикс = Истина; + КонецЕсли; + + Если ЕстьПрефикс Тогда + ОбновитьЗапись(СтруктураЗаписи); + КонецЕсли; + +КонецПроцедуры + +Функция ПрефиксыУзла(УзелОбмена) Экспорт + + Результат = Новый Структура; + Результат.Вставить("Префикс", ""); + Результат.Вставить("ПрефиксКорреспондента", ""); + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ОбщиеНастройкиУзловИнформационныхБаз.Префикс КАК Префикс, + | ОбщиеНастройкиУзловИнформационныхБаз.ПрефиксКорреспондента КАК ПрефиксКорреспондента + |ИЗ + | РегистрСведений.ОбщиеНастройкиУзловИнформационныхБаз КАК ОбщиеНастройкиУзловИнформационныхБаз + |ГДЕ + | ОбщиеНастройкиУзловИнформационныхБаз.УзелИнформационнойБазы = &УзелИнформационнойБазы"); + Запрос.УстановитьПараметр("УзелИнформационнойБазы", УзелОбмена); + + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + ЗаполнитьЗначенияСвойств(Результат, Выборка); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Процедура ПоместитьСообщениеДляСопоставленияДанных(УзелОбмена, ИдентификаторСообщения) Экспорт + + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("УзелИнформационнойБазы", УзелОбмена); + СтруктураЗаписи.Вставить("СообщениеДляСопоставленияДанных", ИдентификаторСообщения); + + ОбновитьЗапись(СтруктураЗаписи); + +КонецПроцедуры // Процедура обновляет запись в регистре по переданным значениям структуры. +// Процедура ОбновитьЗапись(СтруктураЗаписи) ОбменДаннымиСервер.ОбновитьЗаписьВРегистрСведений(СтруктураЗаписи, "ОбщиеНастройкиУзловИнформационныхБаз"); КонецПроцедуры +#Область ОбработчикиОбновления + +Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт + + ДополнительныеПараметры = ОбновлениеИнформационнойБазы.ДополнительныеПараметрыОтметкиОбработки(); + ДополнительныеПараметры.ЭтоНезависимыйРегистрСведений = Истина; + ДополнительныеПараметры.ПолноеИмяРегистра = "РегистрСведений.ОбщиеНастройкиУзловИнформационныхБаз"; + + ПараметрыЗапроса = Новый Структура; + ПараметрыЗапроса.Вставить("ПланыОбменаМассив", Новый Массив); + ПараметрыЗапроса.Вставить("ДополнительныеСвойстваПланаОбмена", ""); + ПараметрыЗапроса.Вставить("РезультатВоВременнуюТаблицу", Истина); + + МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + + ЗапросУзлыОбмена = Новый Запрос(ОбменДаннымиСервер.ТекстЗапросаПланыОбменаДляМонитора(ПараметрыЗапроса, Ложь)); + ЗапросУзлыОбмена.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; + ЗапросУзлыОбмена.Выполнить(); + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ПланыОбменаКонфигурации.УзелИнформационнойБазы КАК УзелИнформационнойБазы + |ИЗ + | ПланыОбменаКонфигурации КАК ПланыОбменаКонфигурации + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОбщиеНастройкиУзловИнформационныхБаз КАК ОбщиеНастройкиУзловИнформационныхБаз + | ПО (ОбщиеНастройкиУзловИнформационныхБаз.УзелИнформационнойБазы = ПланыОбменаКонфигурации.УзелИнформационнойБазы) + |ГДЕ + | ПланыОбменаКонфигурации.УзелИнформационнойБазы <> НЕОПРЕДЕЛЕНО + | И (ОбщиеНастройкиУзловИнформационныхБаз.УзелИнформационнойБазы ЕСТЬ NULL + | ИЛИ НЕ ОбщиеНастройкиУзловИнформационныхБаз.НастройкаЗавершена + | И ОбщиеНастройкиУзловИнформационныхБаз.Префикс = """" + | И ОбщиеНастройкиУзловИнформационныхБаз.ПрефиксКорреспондента = """")"); + + Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; + + Результат = Запрос.Выполнить().Выгрузить(); + + ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, Результат, ДополнительныеПараметры); + +КонецПроцедуры + +Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт + + ОбработкаЗавершена = Истина; + + МетаданныеРегистра = Метаданные.РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз; + ПолноеИмяРегистра = МетаданныеРегистра.ПолноеИмя(); + ПредставлениеРегистра = МетаданныеРегистра.Представление(); + ПредставлениеОтбора = НСтр("ru = 'УзелИнформационнойБазы = ""%1""'"); + + ДополнительныеПараметрыВыборкиДанныхДляОбработки = ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляОбработки(); + + Выборка = ОбновлениеИнформационнойБазы.ВыбратьИзмеренияНезависимогоРегистраСведенийДляОбработки( + Параметры.Очередь, ПолноеИмяРегистра, ДополнительныеПараметрыВыборкиДанныхДляОбработки); + + Обработано = 0; + Проблемных = 0; + + Пока Выборка.Следующий() Цикл + + Попытка + + ОбновитьОбщиеНастройкиКорреспондента(Выборка.УзелИнформационнойБазы); + Обработано = Обработано + 1; + + Исключение + + Проблемных = Проблемных + 1; + + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось обработать набор записей регистра ""%1"" с отбором %2 по причине: + |%3'"), ПредставлениеРегистра, ПредставлениеОтбора, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение, + МетаданныеРегистра, , ТекстСообщения); + + КонецПопытки; + + КонецЦикла; + + Если Не ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, ПолноеИмяРегистра) Тогда + ОбработкаЗавершена = Ложь; + КонецЕсли; + + Если Обработано = 0 И Проблемных <> 0 Тогда + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Процедуре РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ОбработатьДанныеДляПереходаНаНовуюВерсию не удалось обработать некоторые записи узлов обмена (пропущены): %1'"), + Проблемных); + ВызватьИсключение ТекстСообщения; + Иначе + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация, + , , + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Процедура РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ОбработатьДанныеДляПереходаНаНовуюВерсию обработала очередную порцию записей: %1'"), + Обработано)); + КонецЕсли; + + Параметры.ОбработкаЗавершена = ОбработкаЗавершена; + +КонецПроцедуры + +Процедура ОбновитьОбщиеНастройкиКорреспондента(УзелИнформационнойБазы) Экспорт + + Если Не ЗначениеЗаполнено(УзелИнформационнойБазы) Тогда + НаборЗаписей = СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.УзелИнформационнойБазы.Установить(УзелИнформационнойБазы); + + ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(НаборЗаписей); + Возврат; + КонецЕсли; + + НачатьТранзакцию(); + Попытка + + Блокировка = Новый БлокировкаДанных; + + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ОбщиеНастройкиУзловИнформационныхБаз"); + ЭлементБлокировки.УстановитьЗначение("УзелИнформационнойБазы", УзелИнформационнойБазы); + + Блокировка.Заблокировать(); + + НаборЗаписей = СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.УзелИнформационнойБазы.Установить(УзелИнформационнойБазы); + + НаборЗаписей.Прочитать(); + + Если НаборЗаписей.Количество() > 0 Тогда + ТекущаяЗапись = НаборЗаписей[0]; + Иначе + ТекущаяЗапись = НаборЗаписей.Добавить(); + ТекущаяЗапись.УзелИнформационнойБазы = УзелИнформационнойБазы; + КонецЕсли; + + ТекущаяЗапись.НастройкаЗавершена = Истина; + + Если ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(УзелИнформационнойБазы) + И Не УзелИнформационнойБазы = ПланыОбмена.ГлавныйУзел() Тогда + ТекущаяЗапись.НачальныйОбразСоздан = Истина; + КонецЕсли; + + КодЭтогоУзла = ОбменДаннымиСервер.КодПредопределенногоУзлаПланаОбмена( + ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы)); + Если СтрДлина(КодЭтогоУзла) = 2 Тогда + ТекущаяЗапись.Префикс = КодЭтогоУзла; + Иначе + ТекущаяЗапись.Префикс = ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"); + КонецЕсли; + + КодУзла = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелИнформационнойБазы, "Код"); + Если СтрДлина(КодУзла) = 2 Тогда + ТекущаяЗапись.ПрефиксКорреспондента = КодУзла; + КонецЕсли; + + ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписей); + + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + ВызватьИсключение; + + КонецПопытки; + +КонецПроцедуры + #КонецОбласти -#КонецЕсли +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ОбщиеНастройкиУзловИнформационныхБаз.mdo b/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ОбщиеНастройкиУзловИнформационныхБаз.mdo index e0fd3f9e3..4e1823adf 100644 --- a/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ОбщиеНастройкиУзловИнформационныхБаз.mdo +++ b/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ОбщиеНастройкиУзловИнформационныхБаз.mdo @@ -92,10 +92,10 @@
      - ПользовательДляСинхронизацииДанных + УдалитьПользовательДляСинхронизацииДанных ru - Пользователь для синхронизации данных + (не используется) Пользователь для синхронизации данных CatalogRef.Пользователи @@ -129,6 +129,56 @@ Use + + НастройкаЗавершена + + ru + Настройка завершена + + + Boolean + + + + Use + Use + + + + НачальныйОбразСоздан + + ru + Начальный образ создан + + + Boolean + + + + Use + + + + СообщениеДляСопоставленияДанных + + ru + Сообщение для сопоставления данных + + + String + + 36 + + + + ru + Уникальный идентификатор сообщения с данными для сопоставления + + + + Use + + ВерсияКорреспондента @@ -198,6 +248,40 @@ Use + + Префикс + + ru + Префикс + + + String + + 2 + + + + + Use + + + + ПрефиксКорреспондента + + ru + Префикс корреспондента + + + String + + 2 + + + + + Use + + УзелИнформационнойБазы diff --git a/SSL/src/InformationRegisters/ОриентирыАдресныхОбъектов/ОриентирыАдресныхОбъектов.mdo b/SSL/src/InformationRegisters/ОриентирыАдресныхОбъектов/ОриентирыАдресныхОбъектов.mdo index b170bccdc..e15d2b14a 100644 --- a/SSL/src/InformationRegisters/ОриентирыАдресныхОбъектов/ОриентирыАдресныхОбъектов.mdo +++ b/SSL/src/InformationRegisters/ОриентирыАдресныхОбъектов/ОриентирыАдресныхОбъектов.mdo @@ -1,13 +1,13 @@ - + - - - - - - - + + + + + + + ОриентирыАдресныхОбъектов @@ -50,7 +50,7 @@ Managed - + АдресныйОбъект ru @@ -65,7 +65,7 @@ true - + ПочтовыйИндекс ru @@ -82,7 +82,7 @@ Use - + Дополнительно ru @@ -97,7 +97,7 @@ Use - + Описание ru @@ -111,7 +111,7 @@ Use - + Идентификатор ru @@ -126,7 +126,7 @@ true - + КодСубъектаРФ ru diff --git a/SSL/src/InformationRegisters/ПакетыДляОтправки/ManagerModule.bsl b/SSL/src/InformationRegisters/ПакетыДляОтправки/ManagerModule.bsl index 4f3e24a0e..fb74ce3f1 100644 --- a/SSL/src/InformationRegisters/ПакетыДляОтправки/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПакетыДляОтправки/ManagerModule.bsl @@ -47,7 +47,7 @@ |ИЗ | РегистрСведений.ПакетыДляОтправки КАК ПакетыДляОтправки |"; - ПакетовДляОтправки = ЦентрМониторингаВызовСервераПовтИсп.ПолучитьПараметрыЦентраМониторинга("ПакетовДляОтправки"); + ПакетовДляОтправки = ЦентрМониторингаСлужебный.ПолучитьПараметрыЦентраМониторинга("ПакетовДляОтправки"); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); diff --git a/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/Forms/ФормаЗаписи/Form.form new file mode 100644 index 000000000..1deb07eb2 --- /dev/null +++ b/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/Forms/ФормаЗаписи/Form.form @@ -0,0 +1,196 @@ + + + + Версия + 1 + true + true + + true + + + Запись.Версия + + + ВерсияРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + ВерсияКонтекстноеМеню + 2 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ДатаСоздания + 9 + true + true + + true + + + Запись.ДатаСоздания + + + ДатаСозданияРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + + ДатаСозданияКонтекстноеМеню + 10 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ХешСумма + 4 + true + true + + true + + + Запись.ХешСумма + + + ХешСуммаРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + ХешСуммаКонтекстноеМеню + 5 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ФормаКоманднаяПанель + -1 + + ФормаУдалить + 7 + true + true + + true + + + ФормаУдалитьРасширеннаяПодсказка + 8 + Label + true + true + + Left + + + Form.StandardCommand.Delete + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + Copy + Write + WriteAndClose + LockOwner + true + true + true + Vertical + true + true + true + auto + true + + Запись + 1 + + InformationRegisterRecordManager.ПараметрыОграниченияДоступа + + + true + + + true + +
      true
      + true +
      + + + + + +
      diff --git a/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/Forms/ФормаЗаписи/Module.bsl new file mode 100644 index 000000000..7d08d165e --- /dev/null +++ b/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/Forms/ФормаЗаписи/Module.bsl @@ -0,0 +1,19 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + Если Параметры.Ключ.Пустой() Тогда + Отказ = Истина; + Иначе + ТолькоПросмотр = Истина; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..61e6fb4bb --- /dev/null +++ b/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,17 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..0f0a9af8c --- /dev/null +++ b/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/Forms/ФормаСписка/Form.form @@ -0,0 +1,444 @@ + + + + ГруппаПользовательскихНастроек + 1 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + ГруппаПользовательскихНастроекРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + КоманднаяПанель + 22 + + ФормаУдалить + 26 + true + true + + true + + + ФормаУдалитьРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + Form.StandardCommand.Delete + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + ФормаВключитьВозможностьРедактирования + 24 + true + true + + true + + + ФормаВключитьВозможностьРедактированияExtendedTooltip + 25 + Label + true + true + + Left + + + Form.Command.ВключитьВозможностьРедактирования + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + КоманднаяПанельРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + CommandBar + + Left + Form + + + + Список + 3 + + <key>ru</key> + <value>Список</value> + + true + true + + true + + + Список + + true + None + Copy + Create + + Версия + 16 + true + true + + true + + + Список.Версия + + true + + ВерсияРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + ВерсияКонтекстноеМеню + 17 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ДатаСоздания + 28 + true + true + + true + + + Список.ДатаСоздания + + + ДатаСозданияРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + + ДатаСозданияКонтекстноеМеню + 29 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ХешСумма + 19 + true + true + + true + + + Список.ХешСумма + + true + + ХешСуммаРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + ХешСуммаКонтекстноеМеню + 20 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + true + true + true + true + true + MultiRow +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + ГруппаПользовательскихНастроек + +
      + + ФормаКоманднаяПанель + -1 + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + Copy + Create + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + Список + 1 + + DynamicList + + + true + + + true + +
      true
      + + InformationRegister.ПараметрыОграниченияДоступа + true + true + true + true + +
      + + ВключитьВозможностьРедактирования + + <key>ru</key> + <value>Включить возможность редактирования</value> + + 1 + + ru + Включить возможность редактирования только для целей поиска неисправности (требуется углубленное понимание работы механизма) + + + true + + + + ВключитьВозможностьРедактирования + + + DontUse + Auto + + + + + + +
      diff --git a/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/Forms/ФормаСписка/Module.bsl new file mode 100644 index 000000000..266dc08c4 --- /dev/null +++ b/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,26 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + ТолькоПросмотр = Истина; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВключитьВозможностьРедактирования(Команда) + + ТолькоПросмотр = Ложь; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/ManagerModule.bsl new file mode 100644 index 000000000..f4809f90e --- /dev/null +++ b/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/ManagerModule.bsl @@ -0,0 +1,24 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныеПроцедурыИФункции + +// Процедура обновляет данные регистра при полном обновлении вспомогательных данных. +// +// Параметры: +// ЕстьИзменения - Булево (возвращаемое значение) - если производилась запись, +// устанавливается Истина, иначе не изменяется. +// +Процедура ОбновитьДанныеРегистра(ЕстьИзменения = Неопределено) Экспорт + + Если Не УправлениеДоступомСлужебный.ОграничиватьДоступНаУровнеЗаписейУниверсально() Тогда + Возврат; + КонецЕсли; + + УправлениеДоступомСлужебный.ДействующиеПараметрыОграниченияДоступа(Неопределено, + Ложь, Истина, ЕстьИзменения); + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/ПараметрыОграниченияДоступа.mdo b/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/ПараметрыОграниченияДоступа.mdo new file mode 100644 index 000000000..2c3682e76 --- /dev/null +++ b/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/ПараметрыОграниченияДоступа.mdo @@ -0,0 +1,217 @@ + + + + + + + + + + + + ПараметрыОграниченияДоступа + + ru + Параметры ограничения доступа + + true + InDialog + InformationRegister.ПараметрыОграниченияДоступа.Form.ФормаЗаписи + InformationRegister.ПараметрыОграниченияДоступа.Form.ФормаСписка + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + ХешСумма + + ru + Хеш сумма + + + String + + 48 + + + + ru + Хеш-сумма версии параметров ограничения доступа для отслеживания изменений в базе данных по сравнению с версией в памяти + + + + Use + Use + + + + ДляШаблоновВСеансахПользователей + + ru + Для шаблонов в сеансах пользователей + + + ValueStorage + + + ru + Параметры ограничения доступа, используемые только для установки параметров сеанса для шаблонов, используемых при ограничении доступа пользователей + + + + Use + Use + + + + ДляШаблоновВСеансахВнешнихПользователей + + ru + Для шаблонов в сеансах внешних пользователей + + + ValueStorage + + + ru + Параметры ограничения доступа, используемые только для установки параметров сеанса для шаблонов, используемых при ограничении доступа внешних пользователей + + + + Use + Use + + + + ДляЗаписиОбъектовИПроверкиПрав + + ru + Для записи объектов и проверки прав + + + ValueStorage + + + ru + Параметров ограничения доступа, используемые перед записью объекта, при программной проверке прав, при обновлении ключей доступа к данным, ключей доступа пользователей и ключей доступа групп доступа. + + + + Use + Use + + + + ДляОтчетаПоПравамДоступа + + ru + Для отчета по правам доступа + + + ValueStorage + + + ru + Параметры ограничения доступа, используемые для отчета о правах доступа. + + + + Use + Use + + + + ДатаСоздания + + ru + Дата создания + + + Date + + + + ru + Дата создания версии параметров ограничения доступа. + + + + Use + Use + + + + Версия + + ru + Версия + + + Number + + 15 + true + + + + ru + Порядковый номер версии, добавляемый при записи новой версии. +Требуется для устранения задержек ожидания окончания разделяемых блокировок при обновлении кэша. +При монопольном обновлении остается одна версия с номером 1. + + + + Use + Use + + true + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + + ФормаЗаписи + + ru + Форма записи + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/ManagerModule.bsl b/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/ManagerModule.bsl index 4ce9dcf22..0d0565562 100644 --- a/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/ManagerModule.bsl @@ -54,7 +54,7 @@ // Вызывает принудительное заполнение всех параметров работы для текущей версии расширений. Процедура ЗаполнитьВсеПараметрыРаботыРасширений() Экспорт - Если Не Справочники.ВерсииРасширений.УстановленныеРасширенияДоступны() Тогда + Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда Возврат; КонецЕсли; @@ -72,8 +72,30 @@ ИнтеграцияПодсистемБСП.ПриЗаполненииВсехПараметровРаботыРасширений(); + ИмяПараметра = "СтандартныеПодсистемы.БазоваяФункциональность.ДатаПоследнегоЗаполненияВсехПараметровРаботыРасширений"; + СтандартныеПодсистемыСервер.УстановитьПараметрРаботыРасширения(ИмяПараметра, ТекущаяДатаСеанса(), Истина); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); + МодульУправлениеДоступомСлужебный.УстановитьОбновлениеДоступа(Истина); + КонецЕсли; + КонецПроцедуры +// Возвращает дату последнего заполнения параметров работы версии расширений. +Функция ДатаПоследнегоЗаполненияВсехПараметровРаботыРасширений() Экспорт + + ИмяПараметра = "СтандартныеПодсистемы.БазоваяФункциональность.ДатаПоследнегоЗаполненияВсехПараметровРаботыРасширений"; + ДатаОбновления = СтандартныеПодсистемыСервер.ПараметрРаботыРасширения(ИмяПараметра, Истина); + + Если ТипЗнч(ДатаОбновления) <> Тип("Дата") Тогда + ДатаОбновления = '00010101'; + КонецЕсли; + + Возврат ДатаОбновления; + +КонецФункции + // Вызывает принудительную очистку всех параметров работы для текущей версии расширений. // Очищаются только регистры, справочники не изменяются. Вызывается, чтобы вызвать // перезаполнение параметров работы расширений, например, при использовании параметра @@ -116,7 +138,7 @@ КонецПроцедуры -// Для общей формы УстановленныеРасширения. +// Для общей формы Расширения. Процедура ЗаполнитьВсеПараметрыРаботыРасширенийФоновоеЗадание(Параметры) Экспорт ТекстОшибки = ""; @@ -129,7 +151,8 @@ |изменилось имя или версия конфигурации - требуется перезапуск сеанса.'"); КонецЕсли; - Если Параметры.УстановленныеРасширения <> ПараметрыСеанса.УстановленныеРасширения Тогда + Если Параметры.УстановленныеРасширения.Основные <> ПараметрыСеанса.УстановленныеРасширения.Основные + Или Параметры.УстановленныеРасширения.Исправления <> ПараметрыСеанса.УстановленныеРасширения.Исправления Тогда ТекстОшибки = НСтр("ru = 'Не удалось обновить все параметры работы расширений, |так как указанный состав расширений отличается от текущего.'"); @@ -166,6 +189,45 @@ КонецПроцедуры +Процедура ОбновитьПараметрыРаботыРасширений(ПроверяемыеРасширения = Неопределено, НеподключенныеРасширения = "") Экспорт + + Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; + КонецЕсли; + + ПараметрыВыполнения = Новый Структура; + ПараметрыВыполнения.Вставить("ИмяКонфигурации", Метаданные.Имя); + ПараметрыВыполнения.Вставить("ВерсияКонфигурации", Метаданные.Версия); + ПараметрыВыполнения.Вставить("УстановленныеРасширения", Справочники.ВерсииРасширений.УстановленныеРасширения()); + ПараметрыВыполнения.Вставить("ПроверяемыеРасширения", ПроверяемыеРасширения); + ПараметрыВыполнения.Вставить("АдресРезультата", ПоместитьВоВременноеХранилище(Неопределено)); + ПараметрыПроцедуры = Новый Массив; + ПараметрыПроцедуры.Добавить(ПараметрыВыполнения); + + ФоновоеЗадание = РасширенияКонфигурации.ВыполнитьФоновоеЗаданиеСРасширениямиБазыДанных( + "СтандартныеПодсистемыСервер.ЗаполнитьВсеПараметрыРаботыРасширенийФоновоеЗадание", ПараметрыПроцедуры); + ФоновоеЗадание.ОжидатьЗавершения(); + Отбор = Новый Структура("УникальныйИдентификатор", ФоновоеЗадание.УникальныйИдентификатор); + ФоновоеЗадание = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор)[0]; + Если ФоновоеЗадание.ИнформацияОбОшибке <> Неопределено Тогда + ВызватьИсключение ПодробноеПредставлениеОшибки(ФоновоеЗадание.ИнформацияОбОшибке); + КонецЕсли; + + Результат = ПолучитьИзВременногоХранилища(ПараметрыВыполнения.АдресРезультата); + Если ТипЗнч(Результат) <> Тип("Структура") Тогда + ВызватьИсключение НСтр("ru = 'Фоновое задание подготовки расширений не вернуло результат.'"); + КонецЕсли; + + Если ЗначениеЗаполнено(Результат.ТекстОшибки) Тогда + ВызватьИсключение Результат.ТекстОшибки; + КонецЕсли; + + Если ЗначениеЗаполнено(Результат.НеподключенныеРасширения) Тогда + НеподключенныеРасширения = Результат.НеподключенныеРасширения; + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ПараметрыРаботыПрограммы/ManagerModule.bsl b/SSL/src/InformationRegisters/ПараметрыРаботыПрограммы/ManagerModule.bsl index 5c1b4b85e..dc8aabcdf 100644 --- a/SSL/src/InformationRegisters/ПараметрыРаботыПрограммы/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПараметрыРаботыПрограммы/ManagerModule.bsl @@ -57,6 +57,20 @@ КонецПроцедуры +// Возвращает дату успешной проверки/обновления параметров работы программы. +Функция ДатаОбновленияВсехПараметровРаботыПрограммы() Экспорт + + ИмяПараметра = "СтандартныеПодсистемы.БазоваяФункциональность.ДатаОбновленияВсехПараметровРаботыПрограммы"; + ДатаОбновления = СтандартныеПодсистемыСервер.ПараметрРаботыПрограммы(ИмяПараметра); + + Если ТипЗнч(ДатаОбновления) <> Тип("Дата") Тогда + ДатаОбновления = '00010101'; + КонецЕсли; + + Возврат ДатаОбновления; + +КонецФункции + // См. СтандартныеПодсистемыСервер.ПараметрРаботыПрограммы. Функция ПараметрРаботыПрограммы(ИмяПараметра) Экспорт @@ -566,9 +580,6 @@ ДлительныеОперации.СообщитьПрогресс(60); КонецЕсли; - // Критичная проверка назначения ролей пользователей. - ПользователиСлужебный.ПроверитьНазначениеРолей(); - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); МодульУправлениеДоступомСлужебный.ОбновитьПараметрыОграниченияДоступа(); @@ -576,7 +587,7 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтрольВеденияУчета") Тогда МодульКонтрольВеденияУчетаСлужебный = ОбщегоНазначения.ОбщийМодуль("КонтрольВеденияУчетаСлужебный"); - МодульКонтрольВеденияУчетаСлужебный.ОбновитьПараметрыСистемныхПроверок(); + МодульКонтрольВеденияУчетаСлужебный.ОбновитьПараметрыПроверокУчета(); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда @@ -588,6 +599,16 @@ ДлительныеОперации.СообщитьПрогресс(100); КонецЕсли; + ИмяПараметра = "СтандартныеПодсистемы.БазоваяФункциональность.ДатаОбновленияВсехПараметровРаботыПрограммы"; + СтандартныеПодсистемыСервер.УстановитьПараметрРаботыПрограммы(ИмяПараметра, ТекущаяДатаСеанса()); + + Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() + И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + + МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); + МодульУправлениеДоступомСлужебный.УстановитьОбновлениеДоступа(Истина); + КонецЕсли; + КонецПроцедуры // Для функции ПараметрРаботыПрограммы и процедуры ОбновитьПараметрРаботыПрограммы. @@ -672,6 +693,15 @@ ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); Комментарий = + НСтр("ru = '1. Перешлите сообщение в техническую поддержку. + |2. Попытайтесь устранить проблему самостоятельно. Для этого + |запустите программу с параметром командной строки 1С:Предприятия 8 + |""/С ЗапуститьОбновлениеИнформационнойБазы"" от имени пользователя + |с правами администратора сервиса, то есть в неразделенном режиме. + | + |Сведения об проблемном параметре:'"); + + Комментарий = Комментарий + Символы.ПС + "ВерсияМетаданных = " + Метаданные.Версия + " |ИмяПараметра = " + ИмяПараметра + " |Операция = " + Операция + " @@ -687,7 +717,7 @@ // Исключение для пользователя. ТекстОшибки = НСтр("ru = 'Параметры работы программы не обновлены в неразделенном режиме. - |Обратитесь к администратору сервиса.'"); + |Обратитесь к администратору сервиса. Подробности в журнале регистрации.'"); ВызватьИсключение ТекстОшибки; diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Form.form b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Form.form index ee465080c..5f99b1d89 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Form.form +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Form.form @@ -179,6 +179,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Module.bsl b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Module.bsl index c839f5116..3d183e149 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Module.bsl +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Module.bsl @@ -21,10 +21,30 @@ ОтборПоИспользованиюМакета = Элементы.ОтборПоИспользованиюМакета.СписокВыбора[0].Значение; КонецЕсли; - СпрашиватьРежимОткрытияМакета = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( - "НастройкаОткрытияМакетов", "СпрашиватьРежимОткрытияМакета", Истина); - РежимОткрытияМакетаПросмотр = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( - "НастройкаОткрытияМакетов", "РежимОткрытияМакетаПросмотр", Ложь); + ЕстьПравоИзменения = ПравоДоступа("Изменение", Метаданные.РегистрыСведений.ПользовательскиеМакетыПечати); + ТолькоПросмотр = Не ЕстьПравоИзменения; + Элементы.МакетыПечатныхФормИзменитьМакет.Видимость = ЕстьПравоИзменения; + Элементы.МакетыПечатныхФормГруппаПереключениеИспользуемогоМакета.Видимость = ЕстьПравоИзменения; + Элементы.МакетыПечатныхФормУдалитьИзмененныйМакет.Видимость = ЕстьПравоИзменения; + + Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда + + СпрашиватьРежимОткрытияМакета = Ложь; + РежимОткрытияМакетаПросмотр = Истина; + + Иначе + + СпрашиватьРежимОткрытияМакета = ЕстьПравоИзменения; + РежимОткрытияМакетаПросмотр = Не ЕстьПравоИзменения; + + Если ЕстьПравоИзменения Тогда + СпрашиватьРежимОткрытияМакета = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( + "НастройкаОткрытияМакетов", "СпрашиватьРежимОткрытияМакета", Истина); + РежимОткрытияМакетаПросмотр = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( + "НастройкаОткрытияМакетов", "РежимОткрытияМакетаПросмотр", Ложь); + КонецЕсли; + + КонецЕсли; КонецПроцедуры @@ -34,9 +54,11 @@ Если ИмяСобытия = "Запись_ПользовательскиеМакетыПечати" Тогда ОбновитьОтображениеМакетов(); ИначеЕсли ИмяСобытия = "Запись_ТабличныйДокумент" И Источник.ВладелецФормы = ЭтотОбъект Тогда - Макет = Параметр.ТабличныйДокумент; - АдресМакетаВоВременномХранилище = ПоместитьВоВременноеХранилище(Макет); - ЗаписатьМакет(Параметр.ИмяОбъектаМетаданныхМакета, АдресМакетаВоВременномХранилище); + Если Не ТолькоПросмотр Тогда + Макет = Параметр.ТабличныйДокумент; + АдресМакетаВоВременномХранилище = ПоместитьВоВременноеХранилище(Макет); + ЗаписатьМакет(Параметр.ИмяОбъектаМетаданныхМакета, АдресМакетаВоВременномХранилище); + КонецЕсли; ОбновитьОтображениеМакетов() КонецЕсли; @@ -160,7 +182,7 @@ Для Каждого КоллекцияОбъектовМетаданных Из КоллекцииОбъектовМетаданных Цикл Для Каждого ОбъектМетаданныхКоллекции Из КоллекцияОбъектовМетаданных Цикл Для Каждого ОбъектМетаданныхМакет Из ОбъектМетаданныхКоллекции.Макеты Цикл - ТипМакета = ТипМакета(ОбъектМетаданныхМакет.Имя); + ТипМакета = ТипМакета(ОбъектМетаданныхМакет.Имя, ОбъектМетаданныхКоллекции.ПолноеИмя()); Если ТипМакета = Неопределено Тогда Продолжить; КонецЕсли; @@ -225,21 +247,28 @@ КонецПроцедуры &НаСервере -Функция ТипМакета(ИмяОбъектаМетаданныхМакета) +Функция ТипМакета(ИмяОбъектаМетаданныхМакета, ИмяОбъекта = Неопределено) - ТипыМакетов = Новый Массив; - ТипыМакетов.Добавить("MXL"); - ТипыМакетов.Добавить("DOC"); - ТипыМакетов.Добавить("ODT"); + Позиция = СтрНайти(ИмяОбъектаМетаданныхМакета, "ПФ_"); + Если Позиция = 0 Тогда + Возврат Неопределено; + КонецЕсли; - Для Каждого ТипМакета Из ТипыМакетов Цикл - Позиция = СтрНайти(ИмяОбъектаМетаданныхМакета, "ПФ_" + ТипМакета); - Если Позиция > 0 Тогда - Возврат ТипМакета; - КонецЕсли; - КонецЦикла; + Если ЗначениеЗаполнено(ИмяОбъекта) Тогда + МакетПечатнойФормы = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ИмяОбъекта).ПолучитьМакет(ИмяОбъектаМетаданныхМакета); + Иначе + МакетПечатнойФормы = ПолучитьОбщийМакет(ИмяОбъектаМетаданныхМакета); + КонецЕсли; - Возврат Неопределено; + ТипМакета = Неопределено; + + Если ТипЗнч(МакетПечатнойФормы) = Тип("ТабличныйДокумент") Тогда + ТипМакета = "MXL"; + ИначеЕсли ТипЗнч(МакетПечатнойФормы) = Тип("ДвоичныеДанные") Тогда + ТипМакета = ВРег(УправлениеПечатьюСлужебный.ОпределитьРасширениеФайлаДанныхПоСигнатуре(МакетПечатнойФормы)); + КонецЕсли; + + Возврат ТипМакета; КонецФункции @@ -373,11 +402,15 @@ &НаСервереБезКонтекста Процедура СохранитьНастройкиРежимаОткрытияМакета(СпрашиватьРежимОткрытияМакета, РежимОткрытияМакетаПросмотр) - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("НастройкаОткрытияМакетов", - "СпрашиватьРежимОткрытияМакета", СпрашиватьРежимОткрытияМакета); - - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("НастройкаОткрытияМакетов", - "РежимОткрытияМакетаПросмотр", РежимОткрытияМакетаПросмотр); + Если НЕ ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда + + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("НастройкаОткрытияМакетов", + "СпрашиватьРежимОткрытияМакета", СпрашиватьРежимОткрытияМакета); + + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("НастройкаОткрытияМакетов", + "РежимОткрытияМакетаПросмотр", РежимОткрытияМакетаПросмотр); + + КонецЕсли; КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ПроверкаПечатныхФорм/Form.form b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ПроверкаПечатныхФорм/Form.form index 833789a6d..5a262e64d 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ПроверкаПечатныхФорм/Form.form +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ПроверкаПечатныхФорм/Form.form @@ -95,6 +95,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Form.form b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Form.form index a077a5f99..6aab1b8a1 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Form.form +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Form.form @@ -821,6 +821,7 @@ UsualGroup + HorizontalIfPossible Bottom Auto true diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Module.bsl b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Module.bsl index d34e3d7ac..9d8cffedb 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Module.bsl +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Module.bsl @@ -51,7 +51,7 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) - #Если Не ВебКлиент Тогда + #Если Не ВебКлиент И НЕ МобильныйКлиент Тогда Если Параметры.ТолькоОткрытие Тогда Отказ = Истина; КонецЕсли; @@ -65,7 +65,7 @@ Процедура ПриЗакрытии(ЗавершениеРаботы) Если Не ПустаяСтрока(ВременнаяПапка) Тогда - УдалитьФайлы(ВременнаяПапка); + НачатьУдалениеФайлов(Новый ОписаниеОповещения, ВременнаяПапка); КонецЕсли; Если ЗавершениеРаботы Тогда @@ -105,7 +105,7 @@ &НаКлиенте Процедура ЗавершитьИзменение(Команда) - #Если Вебклиент Тогда + #Если Вебклиент ИЛИ МобильныйКлиент Тогда ОписаниеОповещения = Новый ОписаниеОповещения("ПоместитьФайлЗавершение", ЭтотОбъект); НачатьПомещениеФайла(ОписаниеОповещения, АдресФайлаМакетаВоВременномХранилище, ИмяФайлаМакета); #Иначе @@ -143,14 +143,17 @@ ТипФайла = НРег(ТипМакета); Если ТипФайла = "mxl" Тогда - НазваниеПрограммыДляОткрытияМакета = НСтр("ru = '1С:Предприятие - Работа с файлами'"); + НазваниеПрограммыДляОткрытияМакета = НСтр("ru = '""1С:Предприятие - Работа с файлами""'"); АдресПрограммыДляОткрытияМакета = "http://v8.1c.ru/metod/fileworkshop.htm"; ИначеЕсли ТипФайла = "doc" Тогда - НазваниеПрограммыДляОткрытияМакета = НСтр("ru = 'Microsoft Word'"); + НазваниеПрограммыДляОткрытияМакета = НСтр("ru = '""Microsoft Word""'"); АдресПрограммыДляОткрытияМакета = "http://office.microsoft.com/ru-ru/word"; ИначеЕсли ТипФайла = "odt" Тогда - НазваниеПрограммыДляОткрытияМакета = НСтр("ru = 'OpenOffice Writer'"); + НазваниеПрограммыДляОткрытияМакета = НСтр("ru = '""OpenOffice Writer""'"); АдресПрограммыДляОткрытияМакета = "http://www.openoffice.org/product/writer.html"; + ИначеЕсли ТипФайла = "docx" Тогда + НазваниеПрограммыДляОткрытияМакета = НСтр("ru = 'один из офисных пакетов или редактор документов формата Office Open XML'"); + АдресПрограммыДляОткрытияМакета = ""; КонецЕсли; СведенияДляЗаполнения = Новый Структура; @@ -172,7 +175,7 @@ Элемент.Заголовок = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(Элемент.Заголовок, СведенияДляЗаполнения); КонецЦикла; - ВидимостьСсылкиНаСтраницуПрограммы = ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Или ТипФайла <> "mxl"; + ВидимостьСсылкиНаСтраницуПрограммы = (ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Или ТипФайла <> "mxl") И ТипФайла <> "docx"; Элементы.СсылкаНаСтраницуПрограммыПередЗагрузкойВебКлиент.Видимость = ВидимостьСсылкиНаСтраницуПрограммы; Элементы.СсылкаНаСтраницуПрограммыПередЗагрузкойНеВебКлиент.Видимость = ВидимостьСсылкиНаСтраницуПрограммы; Элементы.СсылкаНаСтраницуПрограммыЗавершениеИзмененияВебКлиент.Видимость = ВидимостьСсылкиНаСтраницуПрограммы; @@ -206,7 +209,7 @@ &НаКлиенте Процедура ОткрытьМакет() - #Если ВебКлиент Тогда + #Если ВебКлиент ИЛИ МобильныйКлиент Тогда ОткрытьМакетВебКлиент(); #Иначе ОткрытьМакетТонкийКлиент(); @@ -216,7 +219,7 @@ &НаКлиенте Процедура ОткрытьМакетТонкийКлиент() -#Если Не ВебКлиент Тогда +#Если Не ВебКлиент И НЕ МобильныйКлиент Тогда Макет = МакетПечатнойФормы(ИмяОбъектаМетаданныхМакета); ВременнаяПапка = ПолучитьИмяВременногоФайла(); СоздатьКаталог(ВременнаяПапка); diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/ManagerModule.bsl b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/ManagerModule.bsl new file mode 100644 index 000000000..039a8905f --- /dev/null +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/ManagerModule.bsl @@ -0,0 +1,103 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныйПрограммныйИнтерфейс + +// Регистрирует на плане обмена ОбновлениеИнформационнойБазы объекты, +// которые необходимо обновить на новую версию. +// +// Параметры: +// Параметры - Структура - служебный параметр для передачи в процедуру ОбновлениеИнформационнойБазы.ОтметитьКОбработке. +// +Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт + + ТекстЗапроса = + "ВЫБРАТЬ + | ПользовательскиеМакетыПечати.ИмяМакета КАК ИмяМакета, + | ПользовательскиеМакетыПечати.Объект КАК Объект + |ИЗ + | РегистрСведений.ПользовательскиеМакетыПечати КАК ПользовательскиеМакетыПечати"; + + Запрос = Новый Запрос(ТекстЗапроса); + ПользовательскиеМакеты = Запрос.Выполнить().Выгрузить(); + + ДополнительныеПараметры = ОбновлениеИнформационнойБазы.ДополнительныеПараметрыОтметкиОбработки(); + ДополнительныеПараметры.ЭтоНезависимыйРегистрСведений = Истина; + ДополнительныеПараметры.ПолноеИмяРегистра = "РегистрСведений.ПользовательскиеМакетыПечати"; + + ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, ПользовательскиеМакеты, ДополнительныеПараметры); + +КонецПроцедуры + +Процедура ОбработатьПользовательскиеМакеты(Параметры) Экспорт + + МакетыВФорматеDOCX = Новый Массив; + ИнтеграцияПодсистемБСП.ПриПодготовкеСпискаМакетовВФорматеОфисныхДокументовФормируемыхНаСервере(МакетыВФорматеDOCX); + + Выборка = ОбновлениеИнформационнойБазы.ВыбратьИзмеренияНезависимогоРегистраСведенийДляОбработки( + Параметры.Очередь, "РегистрСведений.ПользовательскиеМакетыПечати"); + + Пока Выборка.Следующий() Цикл + Запись = СоздатьМенеджерЗаписи(); + Запись.ИмяМакета = Выборка.ИмяМакета; + Запись.Объект = Выборка.Объект; + Запись.Прочитать(); + ИзмененныйМакет = Запись.Макет.Получить(); + + ЭтоОбщийМакет = СтрРазделить(Выборка.Объект, ".", Истина).Количество() < 2; + + Если ЭтоОбщийМакет Тогда + ИмяОбъектаМетаданныхМакета = "ОбщийМакет." + Выборка.ИмяМакета; + Иначе + ИмяОбъектаМетаданныхМакета = Выборка.Объект + ".Макет." + Выборка.ИмяМакета; + КонецЕсли; + + ПолноеИмяМакета = Выборка.Объект + "." + Выборка.ИмяМакета; + + НаборЗаписей = СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Объект.Установить(Выборка.Объект); + НаборЗаписей.Отбор.ИмяМакета.Установить(Выборка.ИмяМакета); + + Если Метаданные.НайтиПоПолномуИмени(ИмяОбъектаМетаданныхМакета) = Неопределено Тогда + ИмяСобытия = НСтр("ru = 'Печать'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Обнаружен пользовательский макет, отсутствующий в метаданных конфигурации: + |""%1"".'"), ИмяОбъектаМетаданныхМакета); + ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Предупреждение, , ИмяОбъектаМетаданныхМакета, ТекстОшибки); + ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(НаборЗаписей); + Продолжить; + КонецЕсли; + + Если ЭтоОбщийМакет Тогда + МакетИзМетаданных = ПолучитьОбщийМакет(Выборка.ИмяМакета); + Иначе + МакетИзМетаданных = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(Выборка.Объект).ПолучитьМакет(Выборка.ИмяМакета); + КонецЕсли; + + Если Не УправлениеПечатью.МакетыРазличаются(МакетИзМетаданных, ИзмененныйМакет) Тогда + ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборЗаписей); + ИначеЕсли МакетыВФорматеDOCX.Найти(ПолноеИмяМакета) <> Неопределено + И ТипЗнч(МакетИзМетаданных) = Тип("ДвоичныеДанные") И ТипЗнч(ИзмененныйМакет) = Тип("ДвоичныеДанные") + И ТипыМакетовОфисныхДокументовРазличаются(МакетИзМетаданных, ИзмененныйМакет) Тогда + УправлениеПечатью.ОтключитьПользовательскийМакет(ПолноеИмяМакета); + Иначе + ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(НаборЗаписей); + КонецЕсли; + КонецЦикла; + + Параметры.ОбработкаЗавершена = ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, "РегистрСведений.ПользовательскиеМакетыПечати"); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ТипыМакетовОфисныхДокументовРазличаются(ИсходныйМакет, ИзмененныйМакет) + + Возврат УправлениеПечатьюСлужебный.ОпределитьРасширениеФайлаДанныхПоСигнатуре(ИсходныйМакет) <> УправлениеПечатьюСлужебный.ОпределитьРасширениеФайлаДанныхПоСигнатуре(ИзмененныйМакет); + +КонецФункции + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/InformationRegisters/ПраваРолей/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/ПраваРолей/Forms/ФормаЗаписи/Form.form index 91324eab6..fe33cfff3 100644 --- a/SSL/src/InformationRegisters/ПраваРолей/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/ПраваРолей/Forms/ФормаЗаписи/Form.form @@ -78,6 +78,7 @@ Left true + 40 true true true @@ -132,40 +133,6 @@ true - - Добавление - 5 - true - true - - true - - - Запись.Добавление - - Right - - ДобавлениеExtendedTooltip - 38 - Label - true - true - - Left - - - - ДобавлениеКонтекстноеМеню - 6 - true - - CheckBoxField - Enter - true - Left - true - - Изменение 7 @@ -200,6 +167,40 @@ true + + Добавление + 5 + true + true + + true + + + Запись.Добавление + + Right + + ДобавлениеExtendedTooltip + 38 + Label + true + true + + Left + + + + ДобавлениеКонтекстноеМеню + 6 + true + + CheckBoxField + Enter + true + Left + true + + true true @@ -266,40 +267,6 @@ true - - ДобавлениеБезОграничения - 13 - true - true - - true - - - Запись.ДобавлениеБезОграничения - - Right - - ДобавлениеБезОграниченияExtendedTooltip - 43 - Label - true - true - - Left - - - - ДобавлениеБезОграниченияКонтекстноеМеню - 14 - true - - CheckBoxField - Enter - true - Left - true - - ИзменениеБезОграничения 15 @@ -334,6 +301,40 @@ true + + ДобавлениеБезОграничения + 13 + true + true + + true + + + Запись.ДобавлениеБезОграничения + + Right + + ДобавлениеБезОграниченияExtendedTooltip + 43 + Label + true + true + + Left + + + + ДобавлениеБезОграниченияКонтекстноеМеню + 14 + true + + CheckBoxField + Enter + true + Left + true + + true true @@ -384,6 +385,7 @@ UsualGroup + HorizontalIfPossible Auto WeakSeparation true @@ -430,40 +432,6 @@ true - - ИнтерактивноеДобавление - 21 - true - true - - true - - - Запись.ИнтерактивноеДобавление - - Right - - ИнтерактивноеДобавлениеExtendedTooltip - 48 - Label - true - true - - Left - - - - ИнтерактивноеДобавлениеКонтекстноеМеню - 22 - true - - CheckBoxField - Enter - true - Left - true - - Редактирование 23 @@ -498,6 +466,40 @@ true + + ИнтерактивноеДобавление + 21 + true + true + + true + + + Запись.ИнтерактивноеДобавление + + Right + + ИнтерактивноеДобавлениеExtendedTooltip + 48 + Label + true + true + + Left + + + + ИнтерактивноеДобавлениеКонтекстноеМеню + 22 + true + + CheckBoxField + Enter + true + Left + true + + true true diff --git a/SSL/src/InformationRegisters/ПраваРолей/ПраваРолей.mdo b/SSL/src/InformationRegisters/ПраваРолей/ПраваРолей.mdo index afe900a80..2dc0c5b7f 100644 --- a/SSL/src/InformationRegisters/ПраваРолей/ПраваРолей.mdo +++ b/SSL/src/InformationRegisters/ПраваРолей/ПраваРолей.mdo @@ -59,24 +59,6 @@ - для бытрого обновления прав групп доступа; - в отчете "Права доступа". - - Добавление - - ru - Добавление - - - Boolean - - - ru - Право Добавление, установленное в роли. - - - - Use - - Изменение @@ -95,6 +77,24 @@ Use + + Добавление + + ru + Добавление + + + Boolean + + + ru + Право Добавление, установленное в роли. + + + + Use + + ЧтениеБезОграничения @@ -114,25 +114,6 @@ Use - - ДобавлениеБезОграничения - - ru - Добавление без ограничения - - - Boolean - - - ru - Право Добавление, установленное в роли, -не содержит ограничения доступа. - - - - Use - - ИзменениеБезОграничения @@ -145,6 +126,25 @@ ru Право Изменение, установленное в роли, +не содержит ограничения доступа. + + + + Use + + + + ДобавлениеБезОграничения + + ru + Добавление без ограничения + + + Boolean + + + ru + Право Добавление, установленное в роли, не содержит ограничения доступа. @@ -170,24 +170,6 @@ Use - - ИнтерактивноеДобавление - - ru - Интерактивное добавление - - - Boolean - - - ru - Право Интерактивное добавление, установленное в роли. - - - - Use - - Редактирование @@ -206,6 +188,24 @@ Use + + ИнтерактивноеДобавление + + ru + Интерактивное добавление + + + Boolean + + + ru + Право Интерактивное добавление, установленное в роли. + + + + Use + + ОбъектМетаданных diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Form.form b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Form.form index 7b0f5127b..48da71817 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Form.form +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Form.form @@ -120,6 +120,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -148,6 +149,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -280,6 +282,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -898,6 +901,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -992,6 +996,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Module.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Module.bsl index 636666db8..13f30dfe6 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Module.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Module.bsl @@ -321,12 +321,14 @@ Процедура ДекорацияИнформацияОПолученииПравилОбработкаНавигационнойСсылки( Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) - Если СтрНайти(НавигационнаяСсылкаФорматированнойСтроки, "http") = 0 Тогда + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("НавигационнаяСсылкаФорматированнойСтроки", НавигационнаяСсылкаФорматированнойСтроки); - СтандартнаяОбработка = Ложь; - ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(НавигационнаяСсылкаФорматированнойСтроки); + Оповещение = Новый ОписаниеОповещения("ДекорацияИнформацияОПолученииПравилОбработкаНавигационнойСсылкиПослеЗавершения", + ЭтотОбъект, ДополнительныеПараметры); - КонецЕсли; + СтандартнаяОбработка = Ложь; + ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(НавигационнаяСсылкаФорматированнойСтроки, Оповещение); КонецПроцедуры @@ -416,6 +418,17 @@ #Область СлужебныеПроцедурыИФункции +&НаКлиенте +Процедура ДекорацияИнформацияОПолученииПравилОбработкаНавигационнойСсылкиПослеЗавершения(ПриложениеЗапущено, ДополнительныеПараметры) Экспорт + + Если ПриложениеЗапущено Тогда + Возврат; + КонецЕсли; + + ОбщегоНазначенияКлиент.ОткрытьПроводник(ДополнительныеПараметры.НавигационнаяСсылкаФорматированнойСтроки); + +КонецПроцедуры + &НаКлиенте Процедура ЗагрузитьПравилаЗавершение(Знач РезультатПомещенияФайлов, Знач ДополнительныеПараметры) Экспорт diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Form.form b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Form.form index b71a259c7..ec74cd172 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Form.form +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Form.form @@ -326,6 +326,7 @@ UsualGroup + HorizontalIfPossible Auto true Auto @@ -480,6 +481,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -508,6 +510,7 @@ UsualGroup + HorizontalIfPossible Auto true Auto @@ -1118,6 +1121,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1212,6 +1216,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Form.form b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Form.form index f4b8dddec..0c6a506fb 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Form.form +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Form.form @@ -318,6 +318,7 @@ UsualGroup + HorizontalIfPossible Auto true Auto @@ -475,6 +476,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -503,6 +505,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -531,6 +534,7 @@ UsualGroup + HorizontalIfPossible Auto true Auto diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПроверкаСинхронизацииДанных/Form.form b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПроверкаСинхронизацииДанных/Form.form index 58309077e..1ce3fb516 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПроверкаСинхронизацииДанных/Form.form +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПроверкаСинхронизацииДанных/Form.form @@ -95,6 +95,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/СообщениеОНеудачномОбновлении/Form.form b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/СообщениеОНеудачномОбновлении/Form.form index 976c4fe30..72a5f4e09 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/СообщениеОНеудачномОбновлении/Form.form +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/СообщениеОНеудачномОбновлении/Form.form @@ -158,6 +158,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаСписка/Form.form index 253f46b8b..fc8fc1963 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаСписка/Form.form @@ -28,6 +28,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ManagerModule.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ManagerModule.bsl index 148725fe8..9d8b24838 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ManagerModule.bsl @@ -24,6 +24,70 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область СлужебныйПрограммныйИнтерфейс + +Функция ПравилаКонвертацииСовместимыСТекущейВерсией(ИмяПланаОбмена, ОписаниеОшибки, ДанныеОПравилах) Экспорт + + Если Не ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, "ПредупреждатьОНесоответствииВерсийПравилОбмена") Тогда + Возврат Истина; + КонецЕсли; + + ИмяКонфигурацииИзПравил = ВРег(ДанныеОПравилах.ИмяКонфигурации); + ИмяКонфигурацииИнформационнойБазы = СтрЗаменить(ВРег(Метаданные.Имя), "БАЗОВАЯ", ""); + Если ИмяКонфигурацииИзПравил <> ИмяКонфигурацииИнформационнойБазы Тогда + + ОписаниеОшибки = Новый Структура; + ОписаниеОшибки.Вставить("ВидОшибки", "НекорректнаяКонфигурация"); + ОписаниеОшибки.Вставить("Картинка", БиблиотекаКартинок.Ошибка32); + + ОписаниеОшибки.Вставить("ТекстОшибки", + НСтр("ru = 'Правила не могут быть загружены, так как они предназначены для программы ""%1"". + |Следует использовать правила из конфигурации или загрузить корректный комплект правил из файла.'")); + ОписаниеОшибки.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ОписаниеОшибки.ТекстОшибки, + ДанныеОПравилах.СинонимКонфигурацииВПравилах); + + Возврат Ложь; + + КонецЕсли; + + ВерсияВПравилах = ОбщегоНазначенияКлиентСервер.ВерсияКонфигурацииБезНомераСборки(ДанныеОПравилах.ВерсияКонфигурации); + ВерсияКонфигурации = ОбщегоНазначенияКлиентСервер.ВерсияКонфигурацииБезНомераСборки(Метаданные.Версия); + РезультатСравнения = ОбщегоНазначенияКлиентСервер.СравнитьВерсииБезНомераСборки(ВерсияВПравилах, ВерсияКонфигурации); + + Если РезультатСравнения <> 0 Тогда + + Если РезультатСравнения < 0 Тогда + + ТекстОшибки = НСтр("ru = 'Синхронизация данных может работать некорректно, так как загружаемые правила предназначены для предыдущей версии программы ""%1"" (%2). + |Рекомендуется использовать правила из конфигурации или загрузить комплект правил, предназначенный для текущей версии программы (%3).'"); + ВидОшибки = "УстаревшиеПравила"; + + Иначе + + ТекстОшибки = НСтр("ru = 'Синхронизация данных может работать некорректно, так как загружаемые правила предназначены для более новой версии программы ""%1"" (%2). + |Рекомендуется обновить версию программы или использовать комплект правил, предназначенный для текущей версии программы (%3).'"); + ВидОшибки = "УстаревшаяВерсияКонфигурации"; + + КонецЕсли; + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, + Метаданные.Синоним, ВерсияВПравилах, ВерсияКонфигурации); + + ОписаниеОшибки = Новый Структура; + ОписаниеОшибки.Вставить("ТекстОшибки", ТекстОшибки); + ОписаниеОшибки.Вставить("ВидОшибки", ВидОшибки); + ОписаниеОшибки.Вставить("Картинка", БиблиотекаКартинок.Предупреждение32); + + Возврат Ложь; + + КонецЕсли; + + Возврат Истина; + +КонецФункции + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Загружает поставляемые правила для плана обмена. @@ -291,8 +355,8 @@ Процедура ЗагрузитьПравила(Отказ, Запись, АдресВременногоХранилища = "", ИмяФайлаПравил = "", ЭтоАрхив = Ложь) Экспорт // Проверка существования плана обмена. - СписокПлановОбмена = ОбменДаннымиПовтИсп.СписокПлановОбменаБСП(); - Если СписокПлановОбмена.НайтиПоЗначению(Запись.ИмяПланаОбмена) = Неопределено Тогда + СписокПлановОбмена = ОбменДаннымиПовтИсп.ПланыОбменаБСП(); + Если СписокПлановОбмена.Найти(Запись.ИмяПланаОбмена) = Неопределено Тогда НСтрока = НСтр("ru = 'План обмена %1 не используется для синхронизации данных, правила не обновлены.'"); НСтрока = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтрока, Запись.ИмяПланаОбмена); ОбменДаннымиСервер.СообщитьОбОшибке(НСтрока, Отказ); @@ -753,8 +817,8 @@ Функция ИспользуютсяПравилаИзФайла(ИмяПланаОбмена, ПодробныйРезультат = Ложь) Экспорт - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ + Запрос = Новый Запрос( + "ВЫБРАТЬ РАЗЛИЧНЫЕ | ПравилаДляОбменаДанными.ИмяПланаОбмена КАК ИмяПланаОбмена, | ПравилаДляОбменаДанными.ВидПравил КАК ВидПравил |ИЗ @@ -762,9 +826,9 @@ |ГДЕ | ПравилаДляОбменаДанными.ИсточникПравил = ЗНАЧЕНИЕ(Перечисление.ИсточникиПравилДляОбменаДанными.Файл) | И ПравилаДляОбменаДанными.ПравилаЗагружены - | И ПравилаДляОбменаДанными.ИмяПланаОбмена = &ИмяПланаОбмена"; - + | И ПравилаДляОбменаДанными.ИмяПланаОбмена = &ИмяПланаОбмена"); Запрос.УстановитьПараметр("ИмяПланаОбмена", ИмяПланаОбмена); + Результат = Запрос.Выполнить(); Если ПодробныйРезультат Тогда @@ -879,57 +943,6 @@ КонецФункции -Функция ПравилаКонвертацииСовместимыСТекущейВерсией(ИмяПланаОбмена, ОписаниеОшибки, ДанныеОПравилах) - - Если Не ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, "ПредупреждатьОНесоответствииВерсийПравилОбмена") Тогда - Возврат Истина; - КонецЕсли; - - ИмяКонфигурацииИзПравил = ВРег(ДанныеОПравилах.ИмяКонфигурации); - ИмяКонфигурацииИнформационнойБазы = СтрЗаменить(ВРег(Метаданные.Имя), "БАЗОВАЯ", ""); - Если ИмяКонфигурацииИзПравил <> ИмяКонфигурацииИнформационнойБазы Тогда - - ОписаниеОшибки = Новый Структура; - ОписаниеОшибки.Вставить("ТекстОшибки", НСтр("ru = 'Правила не могут быть загружены, т.к. они предназначены для программы ""%1"". Следует использовать правила из конфигурации или загрузить корректный комплект правил из файла.'")); - ОписаниеОшибки.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ОписаниеОшибки.ТекстОшибки, ДанныеОПравилах.СинонимКонфигурацииВПравилах); - ОписаниеОшибки.Вставить("ВидОшибки", "НекорректнаяКонфигурация"); - ОписаниеОшибки.Вставить("Картинка", БиблиотекаКартинок.Ошибка32); - Возврат Ложь; - - КонецЕсли; - - ВерсияВПравилахБезСборки = ОбщегоНазначенияКлиентСервер.ВерсияКонфигурацииБезНомераСборки(ДанныеОПравилах.ВерсияКонфигурации); - ВерсияКонфигурацииБезСборки = ОбщегоНазначенияКлиентСервер.ВерсияКонфигурацииБезНомераСборки(Метаданные.Версия); - РезультатСравнения = ОбщегоНазначенияКлиентСервер.СравнитьВерсииБезНомераСборки(ВерсияВПравилахБезСборки, ВерсияКонфигурацииБезСборки); - - Если РезультатСравнения <> 0 Тогда - - Если РезультатСравнения < 0 Тогда - - ТекстОшибки = НСтр("ru = 'Синхронизация данных может работать некорректно, так как загружаемые правила предназначены для предыдущей версии программы ""%1"" (%2). Рекомендуется использовать правила из конфигурации или загрузить комплект правил, предназначенный для текущей версии программы (%3).'"); - ВидОшибки = "УстаревшаяВерсияКонфигурации"; - - Иначе - - ТекстОшибки = НСтр("ru = 'Синхронизация данных может работать некорректно, так как загружаемые правила предназначены для более новой версии программы ""%1"" (%2). Рекомендуется обновить версию программы или использовать комплект правил, предназначенный для текущей версии программы (%3).'"); - ВидОшибки = "УстаревшиеПравила"; - - КонецЕсли; - - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, Метаданные.Синоним, ВерсияВПравилахБезСборки, ВерсияКонфигурацииБезСборки); - - ОписаниеОшибки = Новый Структура; - ОписаниеОшибки.Вставить("ТекстОшибки", ТекстОшибки); - ОписаниеОшибки.Вставить("ВидОшибки", ВидОшибки); - ОписаниеОшибки.Вставить("Картинка", БиблиотекаКартинок.Предупреждение32); - Возврат Ложь; - - КонецЕсли; - - Возврат Истина; - -КонецФункции - //////////////////////////////////////////////////////////////////////////////// // Профили безопасности @@ -948,16 +961,16 @@ Функция ПравилаРегистрацииИзФайла(ИмяПланаОбмена) Экспорт - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 1 + Запрос = Новый Запрос( + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА |ИЗ | РегистрСведений.ПравилаДляОбменаДанными КАК ПравилаДляОбменаДанными |ГДЕ | ПравилаДляОбменаДанными.ПравилаЗагружены = ИСТИНА | И ПравилаДляОбменаДанными.ВидПравил = ЗНАЧЕНИЕ(Перечисление.ВидыПравилДляОбменаДанными.ПравилаРегистрацииОбъектов) | И ПравилаДляОбменаДанными.ИсточникПравил = ЗНАЧЕНИЕ(Перечисление.ИсточникиПравилДляОбменаДанными.Файл) - | И ПравилаДляОбменаДанными.ИмяПланаОбмена = &ИмяПланаОбмена"; - + | И ПравилаДляОбменаДанными.ИмяПланаОбмена = &ИмяПланаОбмена"); Запрос.УстановитьПараметр("ИмяПланаОбмена", ИмяПланаОбмена); Возврат Не Запрос.Выполнить().Пустой(); @@ -966,39 +979,32 @@ Функция ПравилаКонвертацииИзФайла(ИмяПланаОбмена) Экспорт - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | ПравилаДляОбменаДанными.ИмяПланаОбмена, - | ПравилаДляОбменаДанными.РежимОтладки, - | ПравилаДляОбменаДанными.РежимОтладкиВыгрузки, - | ПравилаДляОбменаДанными.РежимОтладкиЗагрузки, - | ПравилаДляОбменаДанными.РежимПротоколированияОбменаДанными, - | ПравилаДляОбменаДанными.ИмяФайлаОбработкиДляОтладкиВыгрузки, - | ПравилаДляОбменаДанными.ИмяФайлаОбработкиДляОтладкиЗагрузки, - | ПравилаДляОбменаДанными.ИмяФайлаПротоколаОбмена + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ПравилаДляОбменаДанными.ИмяПланаОбмена КАК ИмяПланаОбмена, + | ПравилаДляОбменаДанными.РежимОтладки КАК РежимОтладки, + | ПравилаДляОбменаДанными.РежимОтладкиВыгрузки КАК РежимОтладкиВыгрузки, + | ПравилаДляОбменаДанными.РежимОтладкиЗагрузки КАК РежимОтладкиЗагрузки, + | ПравилаДляОбменаДанными.РежимПротоколированияОбменаДанными КАК РежимПротоколированияОбменаДанными, + | ПравилаДляОбменаДанными.ИмяФайлаОбработкиДляОтладкиВыгрузки КАК ИмяФайлаОбработкиДляОтладкиВыгрузки, + | ПравилаДляОбменаДанными.ИмяФайлаОбработкиДляОтладкиЗагрузки КАК ИмяФайлаОбработкиДляОтладкиЗагрузки, + | ПравилаДляОбменаДанными.ИмяФайлаПротоколаОбмена КАК ИмяФайлаПротоколаОбмена |ИЗ | РегистрСведений.ПравилаДляОбменаДанными КАК ПравилаДляОбменаДанными |ГДЕ | ПравилаДляОбменаДанными.ПравилаЗагружены = ИСТИНА | И ПравилаДляОбменаДанными.ВидПравил = ЗНАЧЕНИЕ(Перечисление.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов) - | И ПравилаДляОбменаДанными.ИмяПланаОбмена = &ИмяПланаОбмена"; - + | И ПравилаДляОбменаДанными.ИсточникПравил = ЗНАЧЕНИЕ(Перечисление.ИсточникиПравилДляОбменаДанными.Файл) + | И ПравилаДляОбменаДанными.ИмяПланаОбмена = &ИмяПланаОбмена"); Запрос.УстановитьПараметр("ИмяПланаОбмена", ИмяПланаОбмена); - Результат = Запрос.Выполнить(); - - Если Результат.Пустой() Тогда - - Возврат Неопределено; - - Иначе - - Выборка = Результат.Выбрать(); - Выборка.Следующий(); + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда Возврат Выборка; - КонецЕсли; + Возврат Неопределено; + КонецФункции Функция ЗагруженныеПравила() @@ -1056,8 +1062,7 @@ | ПОЛНОЕ СОЕДИНЕНИЕ ПравилаРегистрации КАК ПравилаРегистрации | ПО ПравилаКонвертации.ИмяПланаОбмена = ПравилаРегистрации.ИмяПланаОбмена"; - РезультатЗапроса = Запрос.Выполнить(); - Возврат РезультатЗапроса.Выбрать(); + Возврат Запрос.Выполнить().Выбрать(); КонецФункции diff --git a/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/ManagerModule.bsl b/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/ManagerModule.bsl index 77fe182ca..723c5c234 100644 --- a/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/ManagerModule.bsl @@ -1,6 +1,32 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ПрограммныйИнтерфейс + +#Область ДляВызоваИзДругихПодсистем + +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтение + |ГДЕ + | ИСТИНА + |; + |РазрешитьИзменениеЕслиРазрешеноЧтение + |ГДЕ + | ИзменениеОбъектаРазрешено(Взаимодействие)"; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + +#КонецОбласти + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// diff --git a/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/RecordSetModule.bsl b/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/RecordSetModule.bsl index 9cda6d794..d8e97b371 100644 --- a/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/RecordSetModule.bsl @@ -67,7 +67,7 @@ СтруктураВозврата.Вставить("Папка", Справочники.ПапкиЭлектронныхПисем.ПустаяСсылка()); СтруктураВозврата.Вставить("Рассмотрено", Неопределено); - Если ЭтотОбъект.Отбор.Количество() = 0 Тогда + Если Отбор.Количество() = 0 Тогда Возврат Неопределено; КонецЕсли; @@ -81,7 +81,7 @@ |ГДЕ | ПредметыПапкиВзаимодействий.Взаимодействие = &Взаимодействие"; - Запрос.УстановитьПараметр("Взаимодействие", ЭтотОбъект.Отбор.Взаимодействие.Значение); + Запрос.УстановитьПараметр("Взаимодействие", Отбор.Взаимодействие.Значение); Результат = Запрос.Выполнить(); Если Результат.Пустой() Тогда diff --git a/SSL/src/InformationRegisters/ПричиныИзмененияАдресныхСведений/ПричиныИзмененияАдресныхСведений.mdo b/SSL/src/InformationRegisters/ПричиныИзмененияАдресныхСведений/ПричиныИзмененияАдресныхСведений.mdo index dccd204f4..5e945739f 100644 --- a/SSL/src/InformationRegisters/ПричиныИзмененияАдресныхСведений/ПричиныИзмененияАдресныхСведений.mdo +++ b/SSL/src/InformationRegisters/ПричиныИзмененияАдресныхСведений/ПричиныИзмененияАдресныхСведений.mdo @@ -1,13 +1,13 @@ - + - - - - - - - + + + + + + + ПричиныИзмененияАдресныхСведений @@ -50,7 +50,7 @@ Managed - + СодержитОписание ru @@ -64,7 +64,7 @@ Use - + Описание ru @@ -78,7 +78,7 @@ Use - + Идентификатор ru @@ -93,7 +93,7 @@ true - + КодСубъектаРФ ru @@ -111,7 +111,7 @@ true - + ИзмененныйОбъект ru diff --git a/SSL/src/InformationRegisters/ПроцессыДляЗапуска/Forms/НастройкаОтложенногоСтартаПроцесса/Form.form b/SSL/src/InformationRegisters/ПроцессыДляЗапуска/Forms/НастройкаОтложенногоСтартаПроцесса/Form.form index 7bbe77374..700b58652 100644 --- a/SSL/src/InformationRegisters/ПроцессыДляЗапуска/Forms/НастройкаОтложенногоСтартаПроцесса/Form.form +++ b/SSL/src/InformationRegisters/ПроцессыДляЗапуска/Forms/НастройкаОтложенногоСтартаПроцесса/Form.form @@ -178,6 +178,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -289,6 +290,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -423,6 +425,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -624,6 +627,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -769,6 +773,7 @@ Page + HorizontalIfPossible auto false @@ -828,6 +833,7 @@ Page + HorizontalIfPossible auto false @@ -877,6 +883,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Form.form b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Form.form index 7b23f3386..da4f175c1 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Form.form +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Form.form @@ -187,6 +187,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -3448,7 +3449,7 @@ Left - 0 + Form.Item.Коллизии.StandardCommand.CopyToClipboard Normal Auto true @@ -4524,7 +4525,7 @@ Left - 0 + Form.Item.НепринятыеПоДате.StandardCommand.CopyToClipboard Normal Auto true diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/ManagerModule.bsl b/SSL/src/InformationRegisters/РезультатыОбменаДанными/ManagerModule.bsl index 61ca35f00..7f9ce760c 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/ManagerModule.bsl @@ -34,9 +34,6 @@ НаборЗаписейКонфликта.Отбор.ПроблемныйОбъект.Установить(Ссылка); НаборЗаписейКонфликта.Отбор.ТипПроблемы.Установить(ТипПроблемы); - НаборЗаписейКонфликта.Прочитать(); - НаборЗаписейКонфликта.Очистить(); - ЗаписьКонфликта = НаборЗаписейКонфликта.Добавить(); ЗаписьКонфликта.ПроблемныйОбъект = Ссылка; ЗаписьКонфликта.ТипПроблемы = ТипПроблемы; @@ -44,12 +41,23 @@ ЗаписьКонфликта.ДатаВозникновения = ТекущаяДатаСеанса(); ЗаписьКонфликта.Причина = СокрЛП(Причина); ЗаписьКонфликта.Пропущена = Ложь; - ЗаписьКонфликта.ПометкаУдаления = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "ПометкаУдаления"); Если ТипПроблемы = Перечисления.ТипыПроблемОбменаДанными.НепроведенныйДокумент Тогда - ЗаписьКонфликта.НомерДокумента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "Номер"); - ЗаписьКонфликта.ДатаДокумента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "Дата"); + Если Ссылка.Метаданные().ДлинаНомера > 0 Тогда + ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, "ПометкаУдаления, Номер, Дата"); + + ЗаписьКонфликта.НомерДокумента = ЗначенияРеквизитов.Номер; + Иначе + ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, "ПометкаУдаления, Дата"); + КонецЕсли; + + ЗаписьКонфликта.ДатаДокумента = ЗначенияРеквизитов.Дата; + ЗаписьКонфликта.ПометкаУдаления = ЗначенияРеквизитов.ПометкаУдаления; + + Иначе + + ЗаписьКонфликта.ПометкаУдаления = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "ПометкаУдаления"); КонецЕсли; diff --git a/SSL/src/InformationRegisters/РезультатыПроверкиУчета/ManagerModule.bsl b/SSL/src/InformationRegisters/РезультатыПроверкиУчета/ManagerModule.bsl index 5935a9a65..66829fb2c 100644 --- a/SSL/src/InformationRegisters/РезультатыПроверкиУчета/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/РезультатыПроверкиУчета/ManagerModule.bsl @@ -1,6 +1,30 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ПрограммныйИнтерфейс + +#Область ДляВызоваИзДругихПодсистем + +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтениеИзменение + |ГДЕ + | ЧтениеОбъектаРазрешено(ПроблемныйОбъект)"; + + Ограничение.ПоВладельцуБезЗаписиКлючейДоступа = Истина; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + +#КонецОбласти + +#КонецОбласти + #Область ОбработчикиОбновления Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт @@ -22,8 +46,7 @@ |ИЗ | РегистрСведений.РезультатыПроверкиУчета КАК РезультатыПроверкиУчета |ГДЕ - | РезультатыПроверкиУчета.УдалитьИгнорироватьПроблему - | И РезультатыПроверкиУчета.КлючУникальности > &КлючУникальности + | РезультатыПроверкиУчета.КлючУникальности > &КлючУникальности | |УПОРЯДОЧИТЬ ПО | КлючУникальности"; @@ -96,7 +119,15 @@ НаборЗаписей.Прочитать(); Для Каждого ТекущаяЗапись Из НаборЗаписей Цикл - ТекущаяЗапись.ИгнорироватьПроблему = Истина; + + Если Не ЗначениеЗаполнено(ТекущаяЗапись.КонтрольнаяСумма) Тогда + ТекущаяЗапись.КонтрольнаяСумма = КонтрольВеденияУчетаСлужебный.КонтрольнаяСуммаПроблемы(ТекущаяЗапись); + КонецЕсли; + + Если ТекущаяЗапись.УдалитьИгнорироватьПроблему И Не ТекущаяЗапись.ИгнорироватьПроблему Тогда + ТекущаяЗапись.ИгнорироватьПроблему = ТекущаяЗапись.УдалитьИгнорироватьПроблему; + КонецЕсли; + КонецЦикла; ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписей); diff --git a/SSL/src/InformationRegisters/РезультатыПроверкиУчета/РезультатыПроверкиУчета.mdo b/SSL/src/InformationRegisters/РезультатыПроверкиУчета/РезультатыПроверкиУчета.mdo index a70607e15..5e9e0f23e 100644 --- a/SSL/src/InformationRegisters/РезультатыПроверкиУчета/РезультатыПроверкиУчета.mdo +++ b/SSL/src/InformationRegisters/РезультатыПроверкиУчета/РезультатыПроверкиУчета.mdo @@ -161,6 +161,31 @@ Use + + КонтрольнаяСумма + + ru + Контрольная сумма + + + String + + 32 + + + + ru + Контрольная сумма измерений ПроблемныйОбъект, ПравилоПроверки, ВидПроверки и ресурса УточнениеПроблемы по алгоритму MD5 + + + + Index + Use + Use + + + + ПроблемныйОбъект diff --git a/SSL/src/InformationRegisters/СведенияОПользователях/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/СведенияОПользователях/Forms/ФормаЗаписи/Form.form index e66f7977c..f8339634e 100644 --- a/SSL/src/InformationRegisters/СведенияОПользователях/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/СведенияОПользователях/Forms/ФормаЗаписи/Form.form @@ -285,6 +285,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/InformationRegisters/СлужебныеАдресныеСведения/СлужебныеАдресныеСведения.mdo b/SSL/src/InformationRegisters/СлужебныеАдресныеСведения/СлужебныеАдресныеСведения.mdo index 1908fb409..f64413356 100644 --- a/SSL/src/InformationRegisters/СлужебныеАдресныеСведения/СлужебныеАдресныеСведения.mdo +++ b/SSL/src/InformationRegisters/СлужебныеАдресныеСведения/СлужебныеАдресныеСведения.mdo @@ -1,13 +1,13 @@ - + - - - - - - - + + + + + + + СлужебныеАдресныеСведения @@ -51,7 +51,7 @@ Managed - + Значение ru @@ -60,7 +60,7 @@ String - 20 + 300 @@ -68,7 +68,7 @@ Use - + Тип ru @@ -86,7 +86,7 @@ true - + Идентификатор ru @@ -104,7 +104,7 @@ true - + Ключ ru diff --git a/SSL/src/InformationRegisters/СоставыГруппПользователей/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/СоставыГруппПользователей/Forms/ФормаСписка/Form.form index 82d0a6759..619855514 100644 --- a/SSL/src/InformationRegisters/СоставыГруппПользователей/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/СоставыГруппПользователей/Forms/ФормаСписка/Form.form @@ -24,6 +24,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/InformationRegisters/СоставыГруппПользователей/ManagerModule.bsl b/SSL/src/InformationRegisters/СоставыГруппПользователей/ManagerModule.bsl index 8e559c8b2..5f629a0ce 100644 --- a/SSL/src/InformationRegisters/СоставыГруппПользователей/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СоставыГруппПользователей/ManagerModule.bsl @@ -1,5 +1,29 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ПрограммныйИнтерфейс + +#Область ДляВызоваИзДругихПодсистем + +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "РазрешитьЧтениеИзменение + |ГДЕ + | ЭтоАвторизованныйПользователь(Пользователь)"; + + Ограничение.ТекстДляВнешнихПользователей = Ограничение.Текст; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + +#КонецОбласти + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Процедура обновляет все данные регистра. diff --git a/SSL/src/InformationRegisters/ТаблицыГруппДоступа/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/ТаблицыГруппДоступа/Forms/ФормаЗаписи/Form.form index 4f94c9796..0ce32c39e 100644 --- a/SSL/src/InformationRegisters/ТаблицыГруппДоступа/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/ТаблицыГруппДоступа/Forms/ФормаЗаписи/Form.form @@ -32,6 +32,7 @@ Left true + 40 true true true @@ -73,6 +74,7 @@ Left true + 40 true true true @@ -82,25 +84,294 @@ Normal - - Чтение - 20 + + ГруппаПрава + 48 + + ВертикальнаяГруппа1 + 50 + + Чтение + 20 + true + true + + true + + + Чтение + + Right + + ru + Флажок, установленный истина, показывает наличие права добавления в заданной таблице для заданного пользователя в пределах заданной группы доступа + + + ЧтениеExtendedTooltip + 25 + Label + true + true + + Left + + + + ЧтениеКонтекстноеМеню + 21 + true + + CheckBoxField + true + Enter + true + Left + true + + + + Изменение + 9 + true + true + + true + + + Запись.Изменение + + Right + + ИзменениеExtendedTooltip + 27 + Label + true + true + + Left + + + + ИзменениеКонтекстноеМеню + 10 + true + + CheckBoxField + Enter + true + Left + true + + + + Добавление + 42 + true + true + + true + + + Запись.Добавление + + Right + + ДобавлениеРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + + ДобавлениеКонтекстноеМеню + 43 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Вертикальная группа 1</value> + + + ВертикальнаяГруппа1РасширеннаяПодсказка + 51 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ВертикальнаяГруппа2 + 52 + + ЧтениеБезОграничения + 30 + true + true + + true + + + Запись.ЧтениеБезОграничения + + Right + + ЧтениеБезОграниченияРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + ЧтениеБезОграниченияКонтекстноеМеню + 31 + true + + CheckBoxField + Enter + true + Left + true + + + + ИзменениеБезОграничения + 33 + true + true + + true + + + Запись.ИзменениеБезОграничения + + Right + + ИзменениеБезОграниченияРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + + ИзменениеБезОграниченияКонтекстноеМеню + 34 + true + + CheckBoxField + Enter + true + Left + true + + + + ДобавлениеБезОграничения + 45 + true + true + + true + + + Запись.ДобавлениеБезОграничения + + Right + + ДобавлениеБезОграниченияРасширеннаяПодсказка + 47 + Label + true + true + + Left + + + + ДобавлениеБезОграниченияКонтекстноеМеню + 46 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Вертикальная группа 2</value> + + + ВертикальнаяГруппа2РасширеннаяПодсказка + 53 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + true true true - - Чтение - - Right - + <key>ru</key> - <value>Флажок, установленный истина, показывает наличие права добавления в заданной таблице для заданного пользователя в пределах заданной группы доступа</value> - </toolTip> + <value>Права</value> + - ЧтениеExtendedTooltip - 25 + ГруппаПраваРасширеннаяПодсказка + 49 Label true true @@ -108,52 +379,15 @@ Left - - ЧтениеКонтекстноеМеню - 21 - true - - CheckBoxField - true - Enter - true - Left - true - - - - Изменение - 9 - true - true - - true - - - Запись.Изменение - - Right - - ИзменениеExtendedTooltip - 27 - Label - true - true - - Left - - - - ИзменениеКонтекстноеМеню - 10 - true - - CheckBoxField - Enter - true - Left - true - + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + ТипТаблицы diff --git a/SSL/src/InformationRegisters/ТаблицыГруппДоступа/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ТаблицыГруппДоступа/Forms/ФормаСписка/Form.form index 6ff40fb4c..ef2bb18e6 100644 --- a/SSL/src/InformationRegisters/ТаблицыГруппДоступа/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/ТаблицыГруппДоступа/Forms/ФормаСписка/Form.form @@ -207,28 +207,99 @@ true - - СписокЧтение - 24 + + СписокГруппаПравоЧтение + 61 + + СписокЧтение + 24 + + <key>ru</key> + <value>Чтение</value> + + true + true + + true + + + Список.Чтение + + + ru + Флажок, установленный истина, показывает наличие права добавления в заданной таблице для заданного пользователя в пределах заданной группы доступа + + + СписокЧтениеРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + СписокЧтениеКонтекстноеМеню + 25 + true + + CheckBoxField + Enter + true + Left + true + + + + СписокЧтениеБезОграничения + 49 + + <key>ru</key> + <value>Без ограничения</value> + + true + true + + true + + + Список.ЧтениеБезОграничения + + + СписокЧтениеБезОграниченияРасширеннаяПодсказка + 51 + Label + true + true + + Left + + + + СписокЧтениеБезОграниченияКонтекстноеМеню + 50 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + <key>ru</key> - <value>Чтение</value> + <value>Право Чтение</value> - true - true - - true - - - Список.Чтение - - - ru - Флажок, установленный истина, показывает наличие права добавления в заданной таблице для заданного пользователя в пределах заданной группы доступа - - СписокЧтениеРасширеннаяПодсказка - 31 + СписокГруппаПравоЧтениеРасширеннаяПодсказка + 62 Label true true @@ -236,33 +307,99 @@ Left - - СписокЧтениеКонтекстноеМеню - 25 - true - - CheckBoxField - Enter - true - Left - true - + ColumnGroup + + Vertical + auto + true + - - СписокИзменение - 12 + + СписокГруппаПравоИзменение + 63 + + СписокИзменение + 12 + true + true + + true + + + Список.Изменение + + true + + СписокИзменениеРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + + СписокИзменениеКонтекстноеМеню + 13 + true + + CheckBoxField + Enter + true + Left + true + + + + СписокИзменениеБезОграничения + 52 + + <key>ru</key> + <value>Без ограничения</value> + + true + true + + true + + + Список.ИзменениеБезОграничения + + + СписокИзменениеБезОграниченияРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + + СписокИзменениеБезОграниченияКонтекстноеМеню + 53 + true + + CheckBoxField + Enter + true + Left + true + + true true true - - Список.Изменение - - true + + <key>ru</key> + <value>Право Изменение</value> + - СписокИзменениеРасширеннаяПодсказка - 33 + СписокГруппаПравоИзменениеРасширеннаяПодсказка + 64 Label true true @@ -270,17 +407,111 @@ Left - - СписокИзменениеКонтекстноеМеню - 13 - true - - CheckBoxField - Enter - true - Left - true - + ColumnGroup + + Vertical + auto + true + + + + СписокГруппаПравоДобавление + 65 + + СписокДобавление + 55 + true + true + + true + + + Список.Добавление + + + СписокДобавлениеРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + + СписокДобавлениеКонтекстноеМеню + 56 + true + + CheckBoxField + Enter + true + Left + true + + + + СписокДобавлениеБезОграничения + 58 + + <key>ru</key> + <value>Без ограничения</value> + + true + true + + true + + + Список.ДобавлениеБезОграничения + + + СписокДобавлениеБезОграниченияРасширеннаяПодсказка + 60 + Label + true + true + + Left + + + + СписокДобавлениеБезОграниченияКонтекстноеМеню + 59 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Право Добавление</value> + + + СписокГруппаПравоДобавлениеРасширеннаяПодсказка + 66 + Label + true + true + + Left + + + ColumnGroup + + Vertical + auto + true + СписокТипТаблицы @@ -482,11 +713,15 @@
      true
      ВЫБРАТЬ - ТаблицыГруппДоступа.Таблица, - ТаблицыГруппДоступа.ГруппаДоступа, - Истина КАК Чтение, - ТаблицыГруппДоступа.Изменение, - ТаблицыГруппДоступа.ТипТаблицы + ТаблицыГруппДоступа.Таблица КАК Таблица, + ТаблицыГруппДоступа.ГруппаДоступа КАК ГруппаДоступа, + ИСТИНА КАК Чтение, + ТаблицыГруппДоступа.Изменение КАК Изменение, + ТаблицыГруппДоступа.Добавление КАК Добавление, + ТаблицыГруппДоступа.ЧтениеБезОграничения КАК ЧтениеБезОграничения, + ТаблицыГруппДоступа.ИзменениеБезОграничения КАК ИзменениеБезОграничения, + ТаблицыГруппДоступа.ДобавлениеБезОграничения КАК ДобавлениеБезОграничения, + ТаблицыГруппДоступа.ТипТаблицы КАК ТипТаблицы ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа InformationRegister.ТаблицыГруппДоступа diff --git a/SSL/src/InformationRegisters/ТаблицыГруппДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/ТаблицыГруппДоступа/ManagerModule.bsl index 29f935465..d2443168f 100644 --- a/SSL/src/InformationRegisters/ТаблицыГруппДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ТаблицыГруппДоступа/ManagerModule.bsl @@ -96,14 +96,11 @@ "ВЫБРАТЬ | ПраваРолейРасширений.ОбъектМетаданных КАК ОбъектМетаданных, | ПраваРолейРасширений.Роль КАК Роль, - | ПраваРолейРасширений.Добавление КАК Добавление, | ПраваРолейРасширений.Изменение КАК Изменение, + | ПраваРолейРасширений.Добавление КАК Добавление, | ПраваРолейРасширений.ЧтениеБезОграничения КАК ЧтениеБезОграничения, - | ПраваРолейРасширений.ДобавлениеБезОграничения КАК ДобавлениеБезОграничения, | ПраваРолейРасширений.ИзменениеБезОграничения КАК ИзменениеБезОграничения, - | ПраваРолейРасширений.Просмотр КАК Просмотр, - | ПраваРолейРасширений.ИнтерактивноеДобавление КАК ИнтерактивноеДобавление, - | ПраваРолейРасширений.Редактирование КАК Редактирование, + | ПраваРолейРасширений.ДобавлениеБезОграничения КАК ДобавлениеБезОграничения, | ПраваРолейРасширений.ВидИзмененияСтроки КАК ВидИзмененияСтроки |ПОМЕСТИТЬ ПраваРолейРасширений |ИЗ @@ -114,14 +111,11 @@ |ВЫБРАТЬ | ПраваРолейРасширений.ОбъектМетаданных КАК ОбъектМетаданных, | ПраваРолейРасширений.Роль КАК Роль, - | ПраваРолейРасширений.Добавление КАК Добавление, | ПраваРолейРасширений.Изменение КАК Изменение, + | ПраваРолейРасширений.Добавление КАК Добавление, | ПраваРолейРасширений.ЧтениеБезОграничения КАК ЧтениеБезОграничения, - | ПраваРолейРасширений.ДобавлениеБезОграничения КАК ДобавлениеБезОграничения, | ПраваРолейРасширений.ИзменениеБезОграничения КАК ИзменениеБезОграничения, - | ПраваРолейРасширений.Просмотр КАК Просмотр, - | ПраваРолейРасширений.ИнтерактивноеДобавление КАК ИнтерактивноеДобавление, - | ПраваРолейРасширений.Редактирование КАК Редактирование + | ПраваРолейРасширений.ДобавлениеБезОграничения КАК ДобавлениеБезОграничения |ПОМЕСТИТЬ ПраваРолей |ИЗ | ПраваРолейРасширений КАК ПраваРолейРасширений @@ -133,14 +127,11 @@ |ВЫБРАТЬ | ПраваРолей.ОбъектМетаданных, | ПраваРолей.Роль, - | ПраваРолей.Добавление, | ПраваРолей.Изменение, + | ПраваРолей.Добавление, | ПраваРолей.ЧтениеБезОграничения, - | ПраваРолей.ДобавлениеБезОграничения, | ПраваРолей.ИзменениеБезОграничения, - | ПраваРолей.Просмотр, - | ПраваРолей.ИнтерактивноеДобавление, - | ПраваРолей.Редактирование + | ПраваРолей.ДобавлениеБезОграничения |ИЗ | РегистрСведений.ПраваРолей КАК ПраваРолей | ЛЕВОЕ СОЕДИНЕНИЕ ПраваРолейРасширений КАК ПраваРолейРасширений @@ -191,7 +182,13 @@ | РолиПрофилей.Ссылка КАК Профиль, | ПраваРолей.ОбъектМетаданных КАК Таблица, | ПраваРолей.ОбъектМетаданных.ЗначениеПустойСсылки КАК ТипТаблицы, - | МАКСИМУМ(ПраваРолей.Изменение) КАК Изменение + | МАКСИМУМ(ПраваРолей.Изменение) КАК Изменение, + | МАКСИМУМ(ПраваРолей.Изменение) + | И МАКСИМУМ(ПраваРолей.Добавление) КАК Добавление, + | МАКСИМУМ(ПраваРолей.ЧтениеБезОграничения) КАК ЧтениеБезОграничения, + | МАКСИМУМ(ПраваРолей.ИзменениеБезОграничения) КАК ИзменениеБезОграничения, + | МАКСИМУМ(ПраваРолей.ИзменениеБезОграничения) + | И МАКСИМУМ(ПраваРолей.ДобавлениеБезОграничения) КАК ДобавлениеБезОграничения |ПОМЕСТИТЬ ТаблицыПрофилей |ИЗ | Справочник.ПрофилиГруппДоступа.Роли КАК РолиПрофилей @@ -217,6 +214,10 @@ | ТаблицыПрофилей.Таблица КАК Таблица, | ГруппыДоступа.Ссылка КАК ГруппаДоступа, | ТаблицыПрофилей.Изменение КАК Изменение, + | ТаблицыПрофилей.Добавление КАК Добавление, + | ТаблицыПрофилей.ЧтениеБезОграничения КАК ЧтениеБезОграничения, + | ТаблицыПрофилей.ИзменениеБезОграничения КАК ИзменениеБезОграничения, + | ТаблицыПрофилей.ДобавлениеБезОграничения КАК ДобавлениеБезОграничения, | ТаблицыПрофилей.ТипТаблицы КАК ТипТаблицы |ПОМЕСТИТЬ НовыеДанные |ИЗ @@ -233,6 +234,10 @@ | НовыеДанные.Таблица, | НовыеДанные.ГруппаДоступа, | НовыеДанные.Изменение, + | НовыеДанные.Добавление, + | НовыеДанные.ЧтениеБезОграничения, + | НовыеДанные.ИзменениеБезОграничения, + | НовыеДанные.ДобавлениеБезОграничения, | НовыеДанные.ТипТаблицы, | &ПодстановкаПоляВидИзмененияСтроки |ИЗ @@ -243,6 +248,10 @@ Поля.Добавить(Новый Структура("Таблица", "&УсловиеОтбораТаблиц2")); Поля.Добавить(Новый Структура("ГруппаДоступа", "&УсловиеОтбораГруппДоступа2")); Поля.Добавить(Новый Структура("Изменение")); + Поля.Добавить(Новый Структура("Добавление")); + Поля.Добавить(Новый Структура("ЧтениеБезОграничения")); + Поля.Добавить(Новый Структура("ИзменениеБезОграничения")); + Поля.Добавить(Новый Структура("ДобавлениеБезОграничения")); Поля.Добавить(Новый Структура("ТипТаблицы")); Запрос = Новый Запрос; @@ -300,6 +309,15 @@ ЕстьИзменения = Истина; КонецЕсли; + Если ЕстьТекущиеИзменения + И УправлениеДоступомСлужебный.ОграничиватьДоступНаУровнеЗаписейУниверсально() Тогда + + // Планирование обновления доступа. + СоставИзменений = Данные.ИзмененияСоставаСтрок.Скопировать(, "Таблица"); + СоставИзменений.Свернуть("Таблица"); + УправлениеДоступомСлужебный.ЗапланироватьОбновлениеДоступаПриИзмененииТаблицГруппДоступа(СоставИзменений); + КонецЕсли; + ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); diff --git a/SSL/src/InformationRegisters/ТаблицыГруппДоступа/ТаблицыГруппДоступа.mdo b/SSL/src/InformationRegisters/ТаблицыГруппДоступа/ТаблицыГруппДоступа.mdo index 16f69fd0c..3078846f0 100644 --- a/SSL/src/InformationRegisters/ТаблицыГруппДоступа/ТаблицыГруппДоступа.mdo +++ b/SSL/src/InformationRegisters/ТаблицыГруппДоступа/ТаблицыГруппДоступа.mdo @@ -61,7 +61,7 @@ ru - Флажок, установленный истина, показывает наличие права изменения в заданной таблице для заданного пользователя в пределах заданной группы доступа + Флажок, установленный истина, показывает наличие права изменения в заданной таблице в пределах заданной группы доступа @@ -69,6 +69,79 @@ Index
      + + Добавление + + ru + Добавление + + + Boolean + + + ru + Флажок, установленный истина, показывает наличие права добавления в заданной таблице в пределах заданной группы доступа + + + + Use + + Index + + + ЧтениеБезОграничения + + ru + Чтение без ограничения + + + Boolean + + + ru + Флажок, установленный истина, показывает наличие права чтения без ограничения в заданной таблице в пределах заданной группы доступа + + + + Use + + + + ИзменениеБезОграничения + + ru + Изменение без ограничения + + + Boolean + + + ru + Флажок, установленный истина, показывает наличие права изменения без ограничения в заданной таблице в пределах заданной группы доступа + + + + Use + + + + ДобавлениеБезОграничения + + ru + Добавление без ограничения + + + Boolean + + + ru + Флажок, установленный истина, показывает наличие права добавления без ограничения в заданной таблице в пределах заданной группы доступа + + + + Use + + ТипТаблицы diff --git a/SSL/src/InformationRegisters/УдалитьАдресныйКлассификатор/УдалитьАдресныйКлассификатор.mdo b/SSL/src/InformationRegisters/УдалитьАдресныйКлассификатор/УдалитьАдресныйКлассификатор.mdo deleted file mode 100644 index 28589457c..000000000 --- a/SSL/src/InformationRegisters/УдалитьАдресныйКлассификатор/УдалитьАдресныйКлассификатор.mdo +++ /dev/null @@ -1,345 +0,0 @@ - - - - - - - - - - - - УдалитьАдресныйКлассификатор - - ru - (не используется) Адресный классификатор - - - Use - Active - - Use - - - - - Use - LineNumber - - Use - - - - - Use - Recorder - - Use - - - - - Use - Period - - 0001-01-01T00:00:00 - - ShowError - Use - - - - Managed - - Наименование - - ru - Наименование - - - String - - 40 - - - - ru - Наименование адресного объекта - - - - Use - - Index - - - Сокращение - - ru - Сокращение - - - String - - 10 - - - - ru - Сокращение типа адресного объекта - - - - Use - - - - Index - - - Индекс - - ru - Индекс - - - String - - 6 - - - - ru - Индекс адресного объекта - - - - Use - - - - Index - - - АльтернативныеНазвания - - ru - Альтернативные названия - - - String - - 200 - - - - ru - Альтернативные названия адресного объекта (перечислены через запятые, если есть) - - - - Use - - - - - - ПризнакАктуальности - - ru - Признак актуальности - - - Number - - 2 - true - - - - ru - Признак актуальности адресного объекта - - - - Use - - - - ТипАдресногоЭлемента - - ru - Тип адресного элемента - - - Number - - 1 - true - - - - ru - Тип адресного объекта - - - - Use - - 0 - - true - - - КодАдресногоОбъектаВКоде - - ru - Код адресного объекта в коде - - - Number - - 2 - true - - - - ru - Код региона адресного объекта - - - - Use - - 0 - - true - - - КодРайонаВКоде - - ru - Код района в коде - - - Number - - 3 - true - - - - ru - Код района адресного объекта - - - - Use - - 0 - - true - - - КодГородаВКоде - - ru - Код города в коде - - - Number - - 3 - true - - - - ru - Код города адресного объекта - - - - Use - - 0 - - true - - - КодНаселенногоПунктаВКоде - - ru - Код населенного пункта в коде - - - Number - - 3 - true - - - - ru - Код населенного пункта адресного объекта - - - - Use - - 0 - - true - - - КодУлицыВКоде - - ru - Код улицы в коде - - - Number - - 4 - true - - - - ru - Код улицы адресного объекта - - - - Use - - 0 - - true - - - Код - - ru - Код - - - Number - - 21 - true - - - - ru - Код адресного объекта - - - - true - Index - Use - - 0 - - true - - diff --git a/SSL/src/InformationRegisters/УдалитьГруппыЗначенийДоступа/УдалитьГруппыЗначенийДоступа.mdo b/SSL/src/InformationRegisters/УдалитьГруппыЗначенийДоступа/УдалитьГруппыЗначенийДоступа.mdo index 889e7e11c..6d4624702 100644 --- a/SSL/src/InformationRegisters/УдалитьГруппыЗначенийДоступа/УдалитьГруппыЗначенийДоступа.mdo +++ b/SSL/src/InformationRegisters/УдалитьГруппыЗначенийДоступа/УдалитьГруппыЗначенийДоступа.mdo @@ -153,7 +153,6 @@ Use true - true true
      diff --git a/SSL/src/InformationRegisters/УдалитьНастройкиТранспортаОбмена/ManagerModule.bsl b/SSL/src/InformationRegisters/УдалитьНастройкиТранспортаОбмена/ManagerModule.bsl new file mode 100644 index 000000000..bc25bdf61 --- /dev/null +++ b/SSL/src/InformationRegisters/УдалитьНастройкиТранспортаОбмена/ManagerModule.bsl @@ -0,0 +1,169 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныеПроцедурыИФункции + +#Область ОбработчикиОбновления + +Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт + + Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; + КонецЕсли; + + ДополнительныеПараметры = ОбновлениеИнформационнойБазы.ДополнительныеПараметрыОтметкиОбработки(); + ДополнительныеПараметры.ЭтоНезависимыйРегистрСведений = Истина; + ДополнительныеПараметры.ПолноеИмяРегистра = "РегистрСведений.УдалитьНастройкиТранспортаОбмена"; + + ПараметрыЗапроса = Новый Структура; + ПараметрыЗапроса.Вставить("ПланыОбменаМассив", Новый Массив); + ПараметрыЗапроса.Вставить("ДополнительныеСвойстваПланаОбмена", ""); + ПараметрыЗапроса.Вставить("РезультатВоВременнуюТаблицу", Истина); + + МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + + ЗапросУзлыОбмена = Новый Запрос(ОбменДаннымиСервер.ТекстЗапросаПланыОбменаДляМонитора(ПараметрыЗапроса, Ложь)); + ЗапросУзлыОбмена.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; + ЗапросУзлыОбмена.Выполнить(); + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | НастройкиТранспорта.УзелИнформационнойБазы КАК УзелИнформационнойБазы + |ИЗ + | ПланыОбменаКонфигурации КАК ПланыОбменаКонфигурации + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.УдалитьНастройкиТранспортаОбмена КАК НастройкиТранспорта + | ПО (НастройкиТранспорта.УзелИнформационнойБазы = ПланыОбменаКонфигурации.УзелИнформационнойБазы)"); + + Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; + + Результат = Запрос.Выполнить().Выгрузить(); + + ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, Результат, ДополнительныеПараметры); + +КонецПроцедуры + +Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт + + Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; + КонецЕсли; + + ОбработкаЗавершена = Истина; + + МетаданныеРегистра = Метаданные.РегистрыСведений.УдалитьНастройкиТранспортаОбмена; + ПолноеИмяРегистра = МетаданныеРегистра.ПолноеИмя(); + ПредставлениеРегистра = МетаданныеРегистра.Представление(); + + ДополнительныеПараметрыВыборкиДанныхДляОбработки = ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляОбработки(); + + Выборка = ОбновлениеИнформационнойБазы.ВыбратьИзмеренияНезависимогоРегистраСведенийДляОбработки( + Параметры.Очередь, ПолноеИмяРегистра, ДополнительныеПараметрыВыборкиДанныхДляОбработки); + + Обработано = 0; + Проблемных = 0; + + Пока Выборка.Следующий() Цикл + + Попытка + + ПеренестиНастройкиТранспортаОбменаДаннымиКорреспондента(Выборка.УзелИнформационнойБазы); + Обработано = Обработано + 1; + + Исключение + + Проблемных = Проблемных + 1; + + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось обработать набор записей регистра ""%1"" с отбором ""УзелИнформационнойБазы = %2"" по причине: + |%3'"), ПредставлениеРегистра, Выборка.УзелИнформационнойБазы, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение, + МетаданныеРегистра, , ТекстСообщения); + + КонецПопытки; + + КонецЦикла; + + Если Не ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, ПолноеИмяРегистра) Тогда + ОбработкаЗавершена = Ложь; + КонецЕсли; + + Если Обработано = 0 И Проблемных <> 0 Тогда + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Процедуре РегистрыСведений.УдалитьНастройкиТранспортаОбмена.ОбработатьДанныеДляПереходаНаНовуюВерсию не удалось обработать некоторые записи узлов обмена (пропущены): %1'"), + Проблемных); + ВызватьИсключение ТекстСообщения; + Иначе + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация, + , , + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Процедура РегистрыСведений.УдалитьНастройкиТранспортаОбмена.ОбработатьДанныеДляПереходаНаНовуюВерсию обработала очередную порцию записей: %1'"), + Обработано)); + КонецЕсли; + + Параметры.ОбработкаЗавершена = ОбработкаЗавершена; + +КонецПроцедуры + +Процедура ПеренестиНастройкиТранспортаОбменаДаннымиКорреспондента(УзелИнформационнойБазы) Экспорт + + Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; + КонецЕсли; + + Если Не ЗначениеЗаполнено(УзелИнформационнойБазы) Тогда + НаборЗаписей = СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.УзелИнформационнойБазы.Установить(УзелИнформационнойБазы); + + ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(НаборЗаписей); + Возврат; + КонецЕсли; + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.УдалитьНастройкиТранспортаОбмена"); + ЭлементБлокировки.УстановитьЗначение("УзелИнформационнойБазы", УзелИнформационнойБазы); + + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.НастройкиТранспортаОбменаДанными"); + ЭлементБлокировки.УстановитьЗначение("Корреспондент", УзелИнформационнойБазы); + + Блокировка.Заблокировать(); + + НаборЗаписейСтарый = СоздатьНаборЗаписей(); + НаборЗаписейСтарый.Отбор.УзелИнформационнойБазы.Установить(УзелИнформационнойБазы); + + НаборЗаписейСтарый.Прочитать(); + + Если НаборЗаписейСтарый.Количество() = 0 Тогда + ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(НаборЗаписейСтарый); + Иначе + НаборЗаписейНовый = РегистрыСведений.НастройкиТранспортаОбменаДанными.СоздатьНаборЗаписей(); + НаборЗаписейНовый.Отбор.Корреспондент.Установить(УзелИнформационнойБазы); + + ЗаписьНовый = НаборЗаписейНовый.Добавить(); + ЗаполнитьЗначенияСвойств(ЗаписьНовый, НаборЗаписейСтарый[0]); + ЗаписьНовый.Корреспондент = УзелИнформационнойБазы; + + ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписейНовый); + + НаборЗаписейСтарый.Очистить(); + ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписейСтарый); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + ВызватьИсключение; + + КонецПопытки; + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/УдалитьАдресныйКлассификатор/ManagerModule.bsl b/SSL/src/InformationRegisters/УдалитьНастройкиТранспортаОбмена/RecordSetModule.bsl similarity index 100% rename from SSL/src/InformationRegisters/УдалитьАдресныйКлассификатор/ManagerModule.bsl rename to SSL/src/InformationRegisters/УдалитьНастройкиТранспортаОбмена/RecordSetModule.bsl diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/НастройкиТранспортаОбмена.mdo b/SSL/src/InformationRegisters/УдалитьНастройкиТранспортаОбмена/УдалитьНастройкиТранспортаОбмена.mdo similarity index 92% rename from SSL/src/InformationRegisters/НастройкиТранспортаОбмена/НастройкиТранспортаОбмена.mdo rename to SSL/src/InformationRegisters/УдалитьНастройкиТранспортаОбмена/УдалитьНастройкиТранспортаОбмена.mdo index 201a4877d..bf4f65858 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/НастройкиТранспортаОбмена.mdo +++ b/SSL/src/InformationRegisters/УдалитьНастройкиТранспортаОбмена/УдалитьНастройкиТранспортаОбмена.mdo @@ -9,13 +9,11 @@ - НастройкиТранспортаОбмена + УдалитьНастройкиТранспортаОбмена ru - Параметры подключения + (не используется) Настройки транспорта обмена - InformationRegister.НастройкиТранспортаОбмена.Form.ФормаЗаписи - InformationRegister.НастройкиТранспортаОбмена.Form.ФормаСписка Use Active @@ -49,20 +47,11 @@ - - - ru - - Managed ru Параметры подключения - - ru - Используется для хранения настроек подключения синхронизации данных (сетевой каталог, обмен через FTP-ресурс, обмен по почте). - COMАутентификацияОперационнойСистемы @@ -701,7 +690,7 @@ - Узел + УзелИнформационнойБазы ru Узел информационной базы @@ -724,40 +713,4 @@ true true - - ФормаЗаписи - - ru - Форма записи - - PersonalComputer - MobileDevice - - - НастройкаПодключенияКСервису - - ru - Настройка подключения к сервису - - PersonalComputer - MobileDevice - - - ПовторнаяСинхронизацияДанныхПередЗапуском - - ru - Повторная синхронизация данных перед запуском - - PersonalComputer - MobileDevice - - - ФормаСписка - - ru - Форма списка - - PersonalComputer - MobileDevice -
      diff --git a/SSL/src/InformationRegisters/УдалитьОбластиПерсональныхДанных/УдалитьОбластиПерсональныхДанных.mdo b/SSL/src/InformationRegisters/УдалитьОбластиПерсональныхДанных/УдалитьОбластиПерсональныхДанных.mdo new file mode 100644 index 000000000..d561742a9 --- /dev/null +++ b/SSL/src/InformationRegisters/УдалитьОбластиПерсональныхДанных/УдалитьОбластиПерсональныхДанных.mdo @@ -0,0 +1,93 @@ + + + + + + + + + + + + УдалитьОбластиПерсональныхДанных + + ru + (Не используется) области персональных данных + + true + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + ИспользованиеСобытийЖурналаРегистрации + + ru + Использование событий журнала регистрации + + + Boolean + + + ru + Для контроля области данных используются события журнала регистрации + + + + Use + + + + ИмяОбласти + + ru + Имя области + + + String + + 256 + + + + ru + Идентификатор области персональных данных + + + + Use + + true + + diff --git a/SSL/src/InformationRegisters/УровниСокращенийАдресныхСведений/УровниСокращенийАдресныхСведений.mdo b/SSL/src/InformationRegisters/УровниСокращенийАдресныхСведений/УровниСокращенийАдресныхСведений.mdo index 01339cfa8..41977e931 100644 --- a/SSL/src/InformationRegisters/УровниСокращенийАдресныхСведений/УровниСокращенийАдресныхСведений.mdo +++ b/SSL/src/InformationRegisters/УровниСокращенийАдресныхСведений/УровниСокращенийАдресныхСведений.mdo @@ -1,13 +1,13 @@ - + - - - - - - - + + + + + + + УровниСокращенийАдресныхСведений @@ -50,7 +50,7 @@ Managed - + Значение ru @@ -68,7 +68,7 @@ Use - + Сокращение ru @@ -86,7 +86,7 @@ true - + Уровень ru diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl b/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl index 5cda285c9..e5d458f0b 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl +++ b/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl @@ -158,7 +158,7 @@ ОтборЖурналаРегистрации.Вставить("Событие", События); Если ПользовательФильтр.Количество() = 0 Тогда - Возврат Новый Структура("АнализАктивностиПользователей, ОдновременноСессий", ИсходныеДанные, ОдновременноСессий); + Возврат Новый Структура("АнализАктивностиПользователей, ОдновременноСессий, ОтчетПустой", ИсходныеДанные, ОдновременноСессий, Истина); КонецЕсли; Если ПользовательФильтр.Найти("ВсеПользователи") = Неопределено Тогда @@ -850,7 +850,7 @@ Область.Рисунки.ДиаграммаГанта.Ширина = 450; ДиаграммаГанта.АвтоОпределениеПолногоИнтервала = Ложь; ДиаграммаГанта.ОтображениеИнтервала = ОтображениеИнтервалаДиаграммыГанта.Плоский; - ДиаграммаГанта.ОтображатьЛегенду = Ложь; + ДиаграммаГанта.ОбластьЛегенды.Расположение = РасположениеЛегендыДиаграммы.Нет; ДиаграммаГанта.РастягиваниеПоВертикали = РастягиваниеПоВертикалиДиаграммыГанта.РастягиватьСтрокиИДанные; ДиаграммаГанта.УстановитьПолныйИнтервал(ДатаНачала, ДатаОкончания); ДиаграммаГанта.Обновление = Истина; diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/ObjectModule.bsl b/SSL/src/Reports/АнализЖурналаРегистрации/ObjectModule.bsl index 44cc77b32..5243fcaf3 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/ObjectModule.bsl +++ b/SSL/src/Reports/АнализЖурналаРегистрации/ObjectModule.bsl @@ -20,6 +20,7 @@ Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт Настройки.События.ПриОпределенииПараметровВыбора = Истина; Настройки.События.ПриЗагрузкеВариантаНаСервере = Истина; + Настройки.РазрешеноИзменятьВарианты = Ложь; КонецПроцедуры // Вызывается в обработчике одноименного события формы отчета после выполнения кода формы. @@ -71,6 +72,10 @@ СмещениеВремениСервера = ЖурналРегистрации.СмещениеВремениСервера(); КонецЕсли; + Если ВариантОтчета <> "ДиаграммаГанта" Тогда + СхемаКомпоновкиДанных.Параметры.ПериодДень.Использование = ИспользованиеПараметраКомпоновкиДанных.Авто; + КонецЕсли; + Если ВариантОтчета = "КонтрольЖурналаРегистрации" Тогда РезультатФормированияОтчета = Отчеты.АнализЖурналаРегистрации. СформироватьОтчетКонтрольЖурналаРегистрации(Период.ДатаНачала, Период.ДатаОкончания, СмещениеВремениСервера); @@ -86,6 +91,10 @@ ПараметрыОтчета.Вставить("ДатаОкончания", Период.ДатаОкончания); ПараметрыОтчета.Вставить("ВариантОтчета", ВариантОтчета); ПараметрыОтчета.Вставить("ДатыВЧасовомПоясеСервера", ДатыВЧасовомПоясеСервера); + Если ВариантОтчета = "АнализАктивностиПользователей" Тогда + СхемаКомпоновкиДанных.Параметры.Пользователь.Использование = ИспользованиеПараметраКомпоновкиДанных.Авто; + КонецЕсли; + КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиОтчета, ДанныеРасшифровкиОбъект); ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/АнализЖурналаРегистрации/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs index 21ebc010d..3767bfb83 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs +++ b/SSL/src/Reports/АнализЖурналаРегистрации/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs @@ -478,6 +478,7 @@ true + Always ПользователиИГруппы @@ -494,6 +495,7 @@ false true true + Always ВариантОтчета @@ -511,7 +513,7 @@ - false + true АнализАктивностиПользователей @@ -585,6 +587,7 @@ 0001-01-01T00:00:00 false true + Always НачалоВыборки diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/Templates/ПродолжительностьРаботыРегламентныхЗаданий/Template.mxlx b/SSL/src/Reports/АнализЖурналаРегистрации/Templates/ПродолжительностьРаботыРегламентныхЗаданий/Template.mxlx index 727c606ea..418ce7cf0 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/Templates/ПродолжительностьРаботыРегламентныхЗаданий/Template.mxlx +++ b/SSL/src/Reports/АнализЖурналаРегистрации/Templates/ПродолжительностьРаботыРегламентныхЗаданий/Template.mxlx @@ -2826,7 +2826,7 @@ Solid - #A9A9A9 + auto true true NotDefined @@ -2986,9 +2986,9 @@ Day 1 true - 2016-06-30T22:00:00 - 2016-07-09T23:59:59 - 2016-06-30T22:00:00 + 2016-07-01T00:00:00 + 2016-07-10T00:59:59 + 2016-07-01T00:00:00 Gradient 3 Day diff --git a/SSL/src/Reports/АнализОпроса/Forms/ФормаОтчета/Form.form b/SSL/src/Reports/АнализОпроса/Forms/ФормаОтчета/Form.form index 920096198..ec00673d0 100644 --- a/SSL/src/Reports/АнализОпроса/Forms/ФормаОтчета/Form.form +++ b/SSL/src/Reports/АнализОпроса/Forms/ФормаОтчета/Form.form @@ -132,6 +132,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/Reports/ДвиженияДокумента/ObjectModule.bsl b/SSL/src/Reports/ДвиженияДокумента/ObjectModule.bsl index 08e887232..c8cd28d33 100644 --- a/SSL/src/Reports/ДвиженияДокумента/ObjectModule.bsl +++ b/SSL/src/Reports/ДвиженияДокумента/ObjectModule.bsl @@ -114,13 +114,7 @@ КонецПроцедуры -// Вызывается в обработчике одноименного события формы отчета после выполнения кода формы. -// -// Параметры: -// Форма - УправляемаяФорма - форма отчета. -// Отказ - Булево - передается из параметров стандартного обработчика ПриСозданииНаСервере "как есть". -// СтандартнаяОбработка - Булево - передается из параметров стандартного обработчика ПриСозданииНаСервере "как есть". -// +// См. ОтчетыПереопределяемый.ПриСозданииНаСервере. Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт Если Форма.Параметры.ПредставлениеВарианта = "Расшифровка" Тогда @@ -144,23 +138,7 @@ КонецПроцедуры -// Вызывается в форме отчета перед выводом настройки (см. ОтчетыПереопределяемый.ПриОпределенииПараметровВыбора). -// -// Параметры: -// Форма - УправляемаяФорма, Неопределено - форма отчета. -// СвойстваНастройки - Структура - Описание настройки отчета, которая будет выведена в форме отчета. -// * ОписаниеТипов - ОписаниеТипов - тип настройки. -// * ЗначенияДляВыбора - СписокЗначений - объекты, которые будут предложены пользователю в списке выбора. -// Дополняет список объектов, уже выбранных пользователем ранее. -// * ЗапросЗначенийВыбора - Запрос - возвращает объекты, которыми необходимо дополнить ЗначенияДляВыбора. -// Первой колонкой (с 0м индексом) должен выбираться объект, -// который следует добавить в ЗначенияДляВыбора.Значение. -// Для отключения автозаполнения в свойство ЗапросЗначенийВыбора.Текст -// следует записать пустую строку. -// * ОграничиватьВыборУказаннымиЗначениями - Булево - когда Истина, то выбор пользователя будет -// ограничен значениями, указанными в -// ЗначенияДляВыбора (его конечным состоянием). -// +// См. ОтчетыПереопределяемый.ПриОпределенииПараметровВыбора. Процедура ПриОпределенииПараметровВыбора(Форма, СвойстваНастройки) Экспорт ПолеИмяРегистра = Новый ПолеКомпоновкиДанных("ПараметрыДанных.СписокРегистров"); @@ -168,39 +146,23 @@ Если КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Свойство("ГлобальныеНастройки") Тогда + СвойстваНастройки.ЗначенияДляВыбора.Очистить(); СвойстваНастройки.ОграничиватьВыборУказаннымиЗначениями = Истина; - ГлобальныеНастройки = ПерехватитьГлобальныеНастройки(); - ЗначенияДляВыбора = Новый СписокЗначений; - Для Каждого ГлобальнаяНастройка Из ГлобальныеНастройки Цикл - - ТекущееЗначениеДляВыбора = "Регистр" + ГлобальнаяНастройка.ВидРегистра + "_" + ГлобальнаяНастройка.ИмяРегистра; - - ТекущееЗначениеДляВыбораПредставление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Регистр %1 %2'"), + ЗначениеДляВыбора = "Регистр" + ГлобальнаяНастройка.ВидРегистра + "_" + ГлобальнаяНастройка.ИмяРегистра; + Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Регистр %1 %2'"), НРег(ГлобальнаяНастройка.ЛокализацияВидРегистра), ГлобальнаяНастройка.ПредставлениеРегистра); - - ЗначенияДляВыбора.Добавить(ТекущееЗначениеДляВыбора, ТекущееЗначениеДляВыбораПредставление, Истина); - + СвойстваНастройки.ЗначенияДляВыбора.Добавить(ЗначениеДляВыбора, Представление); КонецЦикла; - СвойстваНастройки.ЗначенияДляВыбора = ЗначенияДляВыбора; - СвойстваНастройки.Значение = ЗначенияДляВыбора; - КонецЕсли; КонецЕсли; КонецПроцедуры -// Вызывается в обработчике одноименного события формы отчета после выполнения кода формы. -// Более подробное описание можно найти в синтакс-помощнике, а именно, в разделе расширений -// управляемой формы для отчета. -// -// Параметры: -// Форма - УправляемаяФорма - форма отчета. -// НовыеНастройкиКД - НастройкиКомпоновкиДанных - настройки для загрузки в компоновщик настроек. -// +// См. ОтчетыПереопределяемый.ПередЗагрузкойВариантаНаСервере. Процедура ПередЗагрузкойВариантаНаСервере(Форма, НовыеНастройкиКД) Экспорт ПараметрСКД = Новый ПараметрКомпоновкиДанных("ДокументВладелец"); @@ -240,60 +202,61 @@ #Область ПодготовкаДанных -Функция ПодготовкаДанных(ДвиженияДокумента, ТаблицаРегистров, ДополнительнаяНумерация = Ложь) +Функция ПодготовкаДанных(ДокументОтбор, ДвиженияДокумента, ТаблицаРегистров, ДополнительнаяНумерация = Ложь) ОсновнаяИнформация = Новый Массив; Для Каждого СтрокаТаблицыРегистров Из ТаблицаРегистров Цикл - + ИмяРегистра = СокрЛП(СтрокаТаблицыРегистров.ИмяРегистра); ВидРегистра = СокрЛП(СтрокаТаблицыРегистров.ВидРегистра); ЛокализацияВидРегистра = СокрЛП(СтрокаТаблицыРегистров.ЛокализацияВидРегистра); ПредставлениеРегистра = СокрЛП(СтрокаТаблицыРегистров.ПредставлениеРегистра); - + ПолеРегистратора = СокрЛП(СтрокаТаблицыРегистров.ПолеРегистратора); + + ДополнительнаяИнформация = Новый Структура; + ДополнительнаяИнформация.Вставить("ИмяРегистра", ИмяРегистра); + ДополнительнаяИнформация.Вставить("ВидРегистра", ВидРегистра); + ДополнительнаяИнформация.Вставить("ЛокализацияВидРегистра", ЛокализацияВидРегистра); + ДополнительнаяИнформация.Вставить("ПредставлениеРегистра", ПредставлениеРегистра); + ДополнительнаяИнформация.Вставить("ПолеРегистратора", ПолеРегистратора); + ДополнительнаяИнформация.Вставить("ДополнительнаяНумерация", ДополнительнаяНумерация); + Для Каждого ДвижениеДокумента Из ДвиженияДокумента Цикл - + Если ВРег(СокрЛП(ДвижениеДокумента.Имя)) = ВРег(ИмяРегистра) Тогда - Если ВидРегистра = "Накопления" Или ВидРегистра = "Сведений" Тогда - - ПодготовкаДанныхПоРегистрамНакопленияСведений(ДвижениеДокумента, ОсновнаяИнформация, ИмяРегистра, ВидРегистра, - ЛокализацияВидРегистра, ПредставлениеРегистра, ДополнительнаяНумерация); - + ПодготовкаДанныхПоРегистрамНакопленияСведений(ДвижениеДокумента, ОсновнаяИнформация, ДополнительнаяИнформация); ИначеЕсли ВидРегистра = "Бухгалтерии" Тогда - - ПодготовкаДанныхПоРегистрамБухгалтерии(ДвижениеДокумента, ОсновнаяИнформация, ИмяРегистра, ВидРегистра, - ЛокализацияВидРегистра, ПредставлениеРегистра); - + ПодготовкаДанныхПоРегистрамБухгалтерии(ДвижениеДокумента, ОсновнаяИнформация, ДополнительнаяИнформация); ИначеЕсли ВидРегистра = "Расчета" Тогда - - ПодготовкаДанныхПоРегистрамРасчета(ДвижениеДокумента, ОсновнаяИнформация, ИмяРегистра, ВидРегистра, - ЛокализацияВидРегистра, ПредставлениеРегистра, ДополнительнаяНумерация); - + ПодготовкаДанныхПоРегистрамРасчета(ДвижениеДокумента, ОсновнаяИнформация, ДополнительнаяИнформация); КонецЕсли; - КонецЕсли; - + КонецЦикла; - + КонецЦикла; + ОтчетОДвиженияхДокументаПереопределяемый.ПриПодготовкеНабораДанных(ДокументОтбор, ОсновнаяИнформация); + Возврат ОсновнаяИнформация; КонецФункции -Процедура ПодготовкаДанныхПоРегистрамНакопленияСведений(ДвижениеДокумента, ОсновнаяИнформация, ИмяРегистра, - ВидРегистра, ЛокализацияВидРегистра, ПредставлениеРегистра, ДополнительнаяНумерация = Ложь) +Процедура ПодготовкаДанныхПоРегистрамНакопленияСведений(ДвижениеДокумента, ОсновнаяИнформация, ДополнительнаяИнформация) ИнформацияПоРегистру = Новый Структура; ИнформацияПоРегистру.Вставить("Измерения", Новый Структура); ИнформацияПоРегистру.Вставить("Ресурсы", Новый Структура); ИнформацияПоРегистру.Вставить("Реквизиты", Новый Структура); ИнформацияПоРегистру.Вставить("СтандартныеРеквизиты", Новый Структура); - ИнформацияПоРегистру.Вставить("ИмяРегистра", ИмяРегистра); - ИнформацияПоРегистру.Вставить("ВидРегистра", ВидРегистра); - ИнформацияПоРегистру.Вставить("ЛокализацияВидРегистра", ЛокализацияВидРегистра); - ИнформацияПоРегистру.Вставить("ПредставлениеРегистра", ПредставлениеРегистра); + ИнформацияПоРегистру.Вставить("ИмяРегистра", ДополнительнаяИнформация.ИмяРегистра); + ИнформацияПоРегистру.Вставить("ВидРегистра", ДополнительнаяИнформация.ВидРегистра); + ИнформацияПоРегистру.Вставить("ЛокализацияВидРегистра", ДополнительнаяИнформация.ЛокализацияВидРегистра); + ИнформацияПоРегистру.Вставить("ПредставлениеРегистра", ДополнительнаяИнформация.ПредставлениеРегистра); + + ДополнительнаяНумерация = ДополнительнаяИнформация.ДополнительнаяНумерация; Если ДополнительнаяНумерация Тогда ИнформацияПоРегистру.Вставить("Нумератор", Новый Структура); КонецЕсли; @@ -305,10 +268,10 @@ ИнформацияПоРегистру.Реквизиты = СформироватьСтруктуруПолей(ДвижениеДокумента.Реквизиты); ПоляВыбора = ""; - ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.СтандартныеРеквизиты); - ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.Измерения); - ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.Ресурсы); - ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.Реквизиты); + ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.СтандартныеРеквизиты, ДвижениеДокумента); + ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.Измерения, ДвижениеДокумента, "Измерения"); + ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.Ресурсы, ДвижениеДокумента, "Ресурсы"); + ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.Реквизиты, ДвижениеДокумента, "Реквизиты"); Если ДополнительнаяНумерация Тогда @@ -339,11 +302,11 @@ |{ГДЕ | (&УсловиеКомпоновки)}"; - ПолноеИмяРегистра = "Регистр" + ВидРегистра + "_" + ИмяРегистра; + ПолноеИмяРегистра = "Регистр" + ДополнительнаяИнформация.ВидРегистра + "_" + ДополнительнаяИнформация.ИмяРегистра; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяРегистра", ПолноеИмяРегистра); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Поля", ПоляВыбора); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекущаяТаблица", ДвижениеДокумента.ПолноеИмя()); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеЗапроса", "Регистратор = &ДокументВладелец"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеЗапроса", ДополнительнаяИнформация.ПолеРегистратора + " = &ДокументВладелец"); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеКомпоновки", """" + ПолноеИмяРегистра + """ В (&СписокРегистров)"); ИнформацияДляФормированияНабораДанных = Новый Структура; @@ -354,7 +317,7 @@ КонецПроцедуры -Процедура ПодготовкаДанныхПоРегистрамБухгалтерии(ДвижениеДокумента, ОсновнаяИнформация, ИмяРегистра, ВидРегистра, ЛокализацияВидРегистра, ПредставлениеРегистра) +Процедура ПодготовкаДанныхПоРегистрамБухгалтерии(ДвижениеДокумента, ОсновнаяИнформация, ДополнительнаяИнформация) ИнформацияПоРегистру = Новый Структура; ИнформацияПоРегистру.Вставить("СтандартныеРеквизиты", Новый Структура); @@ -368,10 +331,10 @@ ИнформацияПоРегистру.Вставить("ИзмеренияДт", Новый Структура); ИнформацияПоРегистру.Вставить("ИзмеренияКт", Новый Структура); ИнформацияПоРегистру.Вставить("Реквизиты", Новый Структура); - ИнформацияПоРегистру.Вставить("ИмяРегистра", ИмяРегистра); - ИнформацияПоРегистру.Вставить("ВидРегистра", ВидРегистра); - ИнформацияПоРегистру.Вставить("ЛокализацияВидРегистра", ЛокализацияВидРегистра); - ИнформацияПоРегистру.Вставить("ПредставлениеРегистра", ПредставлениеРегистра); + ИнформацияПоРегистру.Вставить("ИмяРегистра", ДополнительнаяИнформация.ИмяРегистра); + ИнформацияПоРегистру.Вставить("ВидРегистра", ДополнительнаяИнформация.ВидРегистра); + ИнформацияПоРегистру.Вставить("ЛокализацияВидРегистра", ДополнительнаяИнформация.ЛокализацияВидРегистра); + ИнформацияПоРегистру.Вставить("ПредставлениеРегистра", ДополнительнаяИнформация.ПредставлениеРегистра); МаксимальноеКоличествоСубконто = ДвижениеДокумента.ПланСчетов.МаксКоличествоСубконто; КорреспонденцияОбъекта = ДвижениеДокумента.Корреспонденция; @@ -458,17 +421,17 @@ КонецЦикла; ПоляВыбора = ""; - ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.СтандартныеРеквизиты); - ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.Реквизиты); - ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.Измерения); - ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.ИзмеренияДт); - ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.ИзмеренияКт); - ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.Ресурсы); - ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.РесурсыДт); - ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.РесурсыКт); - ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.Субконто); - ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.СубконтоДт); - ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.СубконтоКт); + ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.СтандартныеРеквизиты, ДвижениеДокумента); + ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.Реквизиты, ДвижениеДокумента, "Реквизиты"); + ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.Измерения, ДвижениеДокумента, "Измерения"); + ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.ИзмеренияДт, ДвижениеДокумента); + ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.ИзмеренияКт, ДвижениеДокумента); + ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.Ресурсы, ДвижениеДокумента, "Ресурсы"); + ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.РесурсыДт, ДвижениеДокумента); + ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.РесурсыКт, ДвижениеДокумента); + ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.Субконто, ДвижениеДокумента, "Субконто"); + ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.СубконтоДт, ДвижениеДокумента); + ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.СубконтоКт, ДвижениеДокумента); Если СокрЛП(Прав(ПоляВыбора, 2)) = "," Тогда ПоляВыбора = Лев(ПоляВыбора, СтрДлина(ПоляВыбора) - 2); @@ -486,11 +449,12 @@ |{ГДЕ | (&УсловиеКомпоновки)}"; - ПолноеИмяРегистра = "Регистр" + ВидРегистра + "_" + ИмяРегистра; + ПолноеИмяРегистра = "Регистр" + ДополнительнаяИнформация.ВидРегистра + "_" + ДополнительнаяИнформация.ИмяРегистра; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяРегистра", ПолноеИмяРегистра); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Поля", ПоляВыбора); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекущаяТаблица", "РегистрБухгалтерии." + ИмяРегистра + ".ДвиженияССубконто(, , Регистратор = &ДокументВладелец)"); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеЗапроса", "Регистратор = &ДокументВладелец"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекущаяТаблица", "РегистрБухгалтерии." + ДополнительнаяИнформация.ИмяРегистра + + ".ДвиженияССубконто(, , " + ДополнительнаяИнформация.ПолеРегистратора + " = &ДокументВладелец)"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеЗапроса", ДополнительнаяИнформация.ПолеРегистратора + " = &ДокументВладелец"); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеКомпоновки", """" + ПолноеИмяРегистра + """ В (&СписокРегистров)"); ИнформацияДляФормированияНабораДанных = Новый Структура; @@ -501,17 +465,19 @@ КонецПроцедуры -Процедура ПодготовкаДанныхПоРегистрамРасчета(ДвижениеДокумента, ОсновнаяИнформация, ИмяРегистра, ВидРегистра, ЛокализацияВидРегистра, ПредставлениеРегистра, ДополнительнаяНумерация = Ложь) +Процедура ПодготовкаДанныхПоРегистрамРасчета(ДвижениеДокумента, ОсновнаяИнформация, ДополнительнаяИнформация) ИнформацияПоРегистру = Новый Структура; ИнформацияПоРегистру.Вставить("Измерения", Новый Структура); ИнформацияПоРегистру.Вставить("Ресурсы", Новый Структура); ИнформацияПоРегистру.Вставить("Реквизиты", Новый Структура); ИнформацияПоРегистру.Вставить("СтандартныеРеквизиты", Новый Структура); - ИнформацияПоРегистру.Вставить("ИмяРегистра", ИмяРегистра); - ИнформацияПоРегистру.Вставить("ВидРегистра", ВидРегистра); - ИнформацияПоРегистру.Вставить("ЛокализацияВидРегистра", ЛокализацияВидРегистра); - ИнформацияПоРегистру.Вставить("ПредставлениеРегистра", ПредставлениеРегистра); + ИнформацияПоРегистру.Вставить("ИмяРегистра", ДополнительнаяИнформация.ИмяРегистра); + ИнформацияПоРегистру.Вставить("ВидРегистра", ДополнительнаяИнформация.ВидРегистра); + ИнформацияПоРегистру.Вставить("ЛокализацияВидРегистра", ДополнительнаяИнформация.ЛокализацияВидРегистра); + ИнформацияПоРегистру.Вставить("ПредставлениеРегистра", ДополнительнаяИнформация.ПредставлениеРегистра); + + ДополнительнаяНумерация = ДополнительнаяИнформация.ДополнительнаяНумерация; Если ДополнительнаяНумерация Тогда ИнформацияПоРегистру.Вставить("Нумератор", Новый Структура); КонецЕсли; @@ -520,15 +486,15 @@ ИнформацияПоРегистру.СтандартныеРеквизиты.Вставить(Реквизит.Имя, Реквизит.Представление()); КонецЦикла; - ИнформацияПоРегистру.Измерения = СформироватьСтруктуруПолей(ДвижениеДокумента.Измерения); - ИнформацияПоРегистру.Ресурсы = СформироватьСтруктуруПолей(ДвижениеДокумента.Ресурсы); - ИнформацияПоРегистру.Реквизиты = СформироватьСтруктуруПолей(ДвижениеДокумента.Реквизиты); + ИнформацияПоРегистру.Измерения = СформироватьСтруктуруПолей(ДвижениеДокумента.Измерения); + ИнформацияПоРегистру.Ресурсы = СформироватьСтруктуруПолей(ДвижениеДокумента.Ресурсы); + ИнформацияПоРегистру.Реквизиты = СформироватьСтруктуруПолей(ДвижениеДокумента.Реквизиты); ПоляВыбора = ""; - ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.СтандартныеРеквизиты); - ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.Измерения); - ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.Ресурсы); - ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.Реквизиты); + ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.СтандартныеРеквизиты, ДвижениеДокумента); + ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.Измерения, ДвижениеДокумента, "Измерения"); + ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.Ресурсы, ДвижениеДокумента, "Ресурсы"); + ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.Реквизиты, ДвижениеДокумента, "Реквизиты"); Если ДополнительнаяНумерация Тогда @@ -558,11 +524,11 @@ |{ГДЕ | (&УсловиеКомпоновки)}"; - ПолноеИмяРегистра = "Регистр" + ВидРегистра + "_" + ИмяРегистра; + ПолноеИмяРегистра = "Регистр" + ДополнительнаяИнформация.ВидРегистра + "_" + ДополнительнаяИнформация.ИмяРегистра; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяРегистра", ПолноеИмяРегистра); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Поля", ПоляВыбора); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекущаяТаблица", ДвижениеДокумента.ПолноеИмя()); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеЗапроса", "Регистратор = &ДокументВладелец"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеЗапроса", ДополнительнаяИнформация.ПолеРегистратора + " = &ДокументВладелец"); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеКомпоновки", """" + ПолноеИмяРегистра + """ В (&СписокРегистров)"); ИнформацияДляФормированияНабораДанных = Новый Структура; @@ -621,7 +587,7 @@ ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Истина); ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", ""); - РазместитьГруппуПолейСКД(СтруктураСтандартныхРеквизитов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + РазместитьГруппуПолейСКД(СтруктураСтандартныхРеквизитов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы, ВидРегистра, ИмяРегистра); КонецЕсли; @@ -633,7 +599,7 @@ ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Истина); ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", ""); - РазместитьГруппуПолейСКД(СтруктураИзмерений, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + РазместитьГруппуПолейСКД(СтруктураИзмерений, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы, ВидРегистра, ИмяРегистра); КонецЕсли; @@ -645,7 +611,7 @@ ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Истина); ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", ""); - РазместитьГруппуПолейСКД(СтруктураИзмеренийДт, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + РазместитьГруппуПолейСКД(СтруктураИзмеренийДт, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы, ВидРегистра, ИмяРегистра); КонецЕсли; @@ -657,7 +623,7 @@ ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Истина); ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", ""); - РазместитьГруппуПолейСКД(СтруктураСубконто, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + РазместитьГруппуПолейСКД(СтруктураСубконто, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы, ВидРегистра, ИмяРегистра); КонецЕсли; @@ -669,7 +635,7 @@ ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Истина); ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", ""); - РазместитьГруппуПолейСКД(СтруктураСубконтоДт, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + РазместитьГруппуПолейСКД(СтруктураСубконтоДт, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы, ВидРегистра, ИмяРегистра); КонецЕсли; @@ -681,7 +647,7 @@ ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Истина); ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", ""); - РазместитьГруппуПолейСКД(СтруктураРесурсовДт, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + РазместитьГруппуПолейСКД(СтруктураРесурсовДт, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы, ВидРегистра, ИмяРегистра); КонецЕсли; @@ -693,7 +659,7 @@ ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Истина); ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", ""); - РазместитьГруппуПолейСКД(СтруктураИзмеренийКт, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + РазместитьГруппуПолейСКД(СтруктураИзмеренийКт, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы, ВидРегистра, ИмяРегистра); КонецЕсли; @@ -705,7 +671,7 @@ ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Истина); ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", ""); - РазместитьГруппуПолейСКД(СтруктураСубконтоКт, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + РазместитьГруппуПолейСКД(СтруктураСубконтоКт, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы, ВидРегистра, ИмяРегистра); КонецЕсли; @@ -717,7 +683,7 @@ ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Истина); ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", ""); - РазместитьГруппуПолейСКД(СтруктураРесурсовКт, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + РазместитьГруппуПолейСКД(СтруктураРесурсовКт, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы, ВидРегистра, ИмяРегистра); КонецЕсли; @@ -729,7 +695,7 @@ ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Истина); ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", ""); - РазместитьГруппуПолейСКД(СтруктураРесурсов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + РазместитьГруппуПолейСКД(СтруктураРесурсов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы, ВидРегистра, ИмяРегистра); КонецЕсли; @@ -741,7 +707,7 @@ ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Истина); ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", ""); - РазместитьГруппуПолейСКД(СтруктураРеквизитов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + РазместитьГруппуПолейСКД(СтруктураРеквизитов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы, ВидРегистра, ИмяРегистра); КонецЕсли; @@ -767,7 +733,7 @@ Возврат СхемаКомпоновкиДанных; Иначе ТаблицаРегистров = ТаблицаИспользуемыхРегистров(МассивИспользуемыхРегистров); - ПодготовленныеДанные = ПодготовкаДанных(ДвиженияДокумента, ТаблицаРегистров); + ПодготовленныеДанные = ПодготовкаДанных(ДокументОтбор, ДвиженияДокумента, ТаблицаРегистров); СтруктураПараметровДанных = Новый Структура("СписокРегистров", СформироватьСписокРегистров(ТаблицаРегистров)); УстановитьПараметрыДанных(НастройкиКД, СтруктураПараметровДанных); @@ -865,7 +831,7 @@ ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Ложь); ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", НСтр("ru = 'Стандартные реквизиты'")); - РазместитьГруппуПолейСКД(СтруктураСтандартныхРеквизитов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + РазместитьГруппуПолейСКД(СтруктураСтандартныхРеквизитов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы, ВидРегистра, ИмяРегистра); КонецЕсли; @@ -877,7 +843,7 @@ ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Ложь); ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", НСтр("ru = 'Измерения'")); - РазместитьГруппуПолейСКД(СтруктураИзмерений, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + РазместитьГруппуПолейСКД(СтруктураИзмерений, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы, ВидРегистра, ИмяРегистра); КонецЕсли; @@ -889,7 +855,7 @@ ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Ложь); ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", НСтр("ru = 'Ресурсы'")); - РазместитьГруппуПолейСКД(СтруктураРесурсов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + РазместитьГруппуПолейСКД(СтруктураРесурсов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы, ВидРегистра, ИмяРегистра); КонецЕсли; @@ -901,7 +867,7 @@ ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Ложь); ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", НСтр("ru = 'Реквизиты'")); - РазместитьГруппуПолейСКД(СтруктураРеквизитов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + РазместитьГруппуПолейСКД(СтруктураРеквизитов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы, ВидРегистра, ИмяРегистра); КонецЕсли; @@ -937,7 +903,7 @@ ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Ложь); ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", ""); - РазместитьГруппуПолейСКД(СтруктураСтандартныхРеквизитов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + РазместитьГруппуПолейСКД(СтруктураСтандартныхРеквизитов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы, ВидРегистра, ИмяРегистра); КонецЕсли; @@ -949,7 +915,7 @@ ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Ложь); ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", НСтр("ru = 'Измерения'")); - РазместитьГруппуПолейСКД(СтруктураИзмерений, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + РазместитьГруппуПолейСКД(СтруктураИзмерений, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы, ВидРегистра, ИмяРегистра); КонецЕсли; @@ -961,7 +927,7 @@ ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Ложь); ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", НСтр("ru = 'Ресурсы'")); - РазместитьГруппуПолейСКД(СтруктураРесурсов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + РазместитьГруппуПолейСКД(СтруктураРесурсов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы, ВидРегистра, ИмяРегистра); КонецЕсли; @@ -973,7 +939,7 @@ ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Ложь); ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", НСтр("ru = 'Реквизиты'")); - РазместитьГруппуПолейСКД(СтруктураРеквизитов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + РазместитьГруппуПолейСКД(СтруктураРеквизитов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы, ВидРегистра, ИмяРегистра); КонецЕсли; @@ -999,7 +965,7 @@ Возврат СхемаКомпоновкиДанных; Иначе ТаблицаРегистров = ТаблицаИспользуемыхРегистров(МассивИспользуемыхРегистров); - ПодготовленныеДанные = ПодготовкаДанных(ДвиженияДокумента, ТаблицаРегистров, ДополнительнаяНумерация); + ПодготовленныеДанные = ПодготовкаДанных(ДокументОтбор, ДвиженияДокумента, ТаблицаРегистров, ДополнительнаяНумерация); СтруктураПараметровДанных = Новый Структура("СписокРегистров", СформироватьСписокРегистров(ТаблицаРегистров)); УстановитьПараметрыДанных(НастройкиКД, СтруктураПараметровДанных); @@ -1098,7 +1064,7 @@ ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Ложь); ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", "№ГруппаЭлементаВыводаСКДТекущегоДокумента"); - РазместитьГруппуПолейСКД(СтруктураНумератора, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + РазместитьГруппуПолейСКД(СтруктураНумератора, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы, ВидРегистра, ИмяРегистра); КонецЕсли; @@ -1110,7 +1076,7 @@ ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Ложь); ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", НСтр("ru = 'Стандартные реквизиты'")); - РазместитьГруппуПолейСКД(СтруктураСтандартныхРеквизитов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + РазместитьГруппуПолейСКД(СтруктураСтандартныхРеквизитов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы, ВидРегистра, ИмяРегистра); КонецЕсли; @@ -1122,7 +1088,7 @@ ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Ложь); ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", НСтр("ru = 'Измерения'")); - РазместитьГруппуПолейСКД(СтруктураИзмерений, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + РазместитьГруппуПолейСКД(СтруктураИзмерений, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы, ВидРегистра, ИмяРегистра); КонецЕсли; @@ -1134,7 +1100,7 @@ ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Ложь); ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", НСтр("ru = 'Ресурсы'")); - РазместитьГруппуПолейСКД(СтруктураРесурсов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + РазместитьГруппуПолейСКД(СтруктураРесурсов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы, ВидРегистра, ИмяРегистра); КонецЕсли; @@ -1146,7 +1112,7 @@ ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Ложь); ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", НСтр("ru = 'Реквизиты'")); - РазместитьГруппуПолейСКД(СтруктураРеквизитов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + РазместитьГруппуПолейСКД(СтруктураРеквизитов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы, ВидРегистра, ИмяРегистра); КонецЕсли; @@ -1183,7 +1149,7 @@ ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Ложь); ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", "№ГруппаЭлементаВыводаСКДТекущегоДокумента"); - РазместитьГруппуПолейСКД(СтруктураНумератора, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + РазместитьГруппуПолейСКД(СтруктураНумератора, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы, ВидРегистра, ИмяРегистра); КонецЕсли; @@ -1195,7 +1161,7 @@ ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Ложь); ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", НСтр("ru = 'Стандартные реквизиты'")); - РазместитьГруппуПолейСКД(СтруктураСтандартныхРеквизитов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + РазместитьГруппуПолейСКД(СтруктураСтандартныхРеквизитов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы, ВидРегистра, ИмяРегистра); КонецЕсли; @@ -1207,7 +1173,7 @@ ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Ложь); ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", НСтр("ru = 'Измерения'")); - РазместитьГруппуПолейСКД(СтруктураИзмерений, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + РазместитьГруппуПолейСКД(СтруктураИзмерений, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы, ВидРегистра, ИмяРегистра); КонецЕсли; @@ -1219,7 +1185,7 @@ ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Ложь); ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", НСтр("ru = 'Ресурсы'")); - РазместитьГруппуПолейСКД(СтруктураРесурсов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + РазместитьГруппуПолейСКД(СтруктураРесурсов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы, ВидРегистра, ИмяРегистра); КонецЕсли; @@ -1231,7 +1197,7 @@ ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Ложь); ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", НСтр("ru = 'Реквизиты'")); - РазместитьГруппуПолейСКД(СтруктураРеквизитов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + РазместитьГруппуПолейСКД(СтруктураРеквизитов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы, ВидРегистра, ИмяРегистра); КонецЕсли; @@ -1311,7 +1277,7 @@ Если Расположение <> Неопределено Тогда ВыбранноеПолеКД.Расположение = Расположение; - КонецЕсли; + КонецЕсли; Если Заголовок <> "" Тогда ВыбранноеПолеКД.Заголовок = Заголовок; @@ -1382,7 +1348,7 @@ КонецФункции -Процедура РазместитьГруппуПолейСКД(СтруктураПолей, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы) +Процедура РазместитьГруппуПолейСКД(СтруктураПолей, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы, ВидРегистра, ИмяРегистра) Если ПараметрыГруппы.ВыбраннаяГруппаПуста Тогда ЛокальноеИмяГруппы = Новый ПолеКомпоновкиДанных(""); @@ -1399,6 +1365,27 @@ Имя = ЭлементСтруктуры.Ключ; Представление = ЭлементСтруктуры.Значение; + ИмяГруппы = ПараметрыГруппы.ИмяГруппы; + + Если ИмяГруппы <> "СтандартныеРеквизиты" И ИмяГруппы <> "Нумератор" И ИмяГруппы <> "ИзмеренияДт" + И ИмяГруппы <> "ИзмеренияКт" И ИмяГруппы <> "РесурсыДт" И ИмяГруппы <> "РесурсыКт" И ИмяГруппы <> "СубконтоДт" + И ИмяГруппы <> "СубконтоКт" И ИмяГруппы <> "Субконто" Тогда + + Если ВидРегистра = "Накопления" Тогда + ОбъектМетаданных = Метаданные.РегистрыНакопления[ИмяРегистра][ИмяГруппы][Имя]; + ИначеЕсли ВидРегистра = "Сведений" Тогда + ОбъектМетаданных = Метаданные.РегистрыСведений[ИмяРегистра][ИмяГруппы][Имя]; + ИначеЕсли ВидРегистра = "Расчета" Тогда + ОбъектМетаданных = Метаданные.РегистрыРасчета[ИмяРегистра][ИмяГруппы][Имя]; + ИначеЕсли ВидРегистра = "Бухгалтерии" Тогда + ОбъектМетаданных = Метаданные.РегистрыБухгалтерии[ИмяРегистра][ИмяГруппы][Имя]; + КонецЕсли; + + Если Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(ОбъектМетаданных) Тогда + Продолжить; + КонецЕсли; + + КонецЕсли; ДобавитьПолеНабораДанных(НаборДанныхКД, Имя, Представление); ДобавитьВыбранноеПоле(Группа, Имя, Представление); @@ -1407,10 +1394,18 @@ КонецПроцедуры -Процедура ДобавитьПоля(ПоляВыбора, СтруктураПолей) +Процедура ДобавитьПоля(ПоляВыбора, СтруктураПолей, ДвижениеДокумента, ИмяКоллекции = "") Для Каждого Поле Из СтруктураПолей Цикл - ПоляВыбора = ПоляВыбора + ?(ЗначениеЗаполнено(ПоляВыбора), ", ", "") + Поле.Ключ; + + Если Не ЗначениеЗаполнено(ИмяКоллекции) Тогда + ПоляВыбора = ПоляВыбора + ?(ЗначениеЗаполнено(ПоляВыбора), ", ", "") + Поле.Ключ; + Иначе + Если ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(ДвижениеДокумента[ИмяКоллекции][Поле.Ключ]) Тогда + ПоляВыбора = ПоляВыбора + ?(ЗначениеЗаполнено(ПоляВыбора), ", ", "") + Поле.Ключ; + КонецЕсли; + КонецЕсли; + КонецЦикла; КонецПроцедуры @@ -1501,11 +1496,13 @@ Функция МассивИспользуемыхРегистров(Регистратор, Движения) - Результат = Новый Массив; + Результат = Новый Соответствие; Для Каждого ОбъектМетаданныхРегистр Из Движения Цикл - Результат.Добавить(ОбъектМетаданныхРегистр); + Результат.Вставить(ОбъектМетаданныхРегистр, "Регистратор"); КонецЦикла; + ОтчетОДвиженияхДокументаПереопределяемый.ПриОпределенииРегистровСДвижениями(Регистратор, Результат); + Возврат Результат; КонецФункции @@ -1517,6 +1514,7 @@ Для Каждого ИспользуемыйРегистр Из МассивИспользуемыхРегистров Цикл + ИспользуемыйРегистр = ИспользуемыйРегистр.Ключ; ИмяРегистра = ИспользуемыйРегистр.Имя; ПредставлениеРегистра = ИспользуемыйРегистр.Представление(); @@ -1556,7 +1554,9 @@ ТекстЗапроса = ""; Для Каждого ИспользуемыйРегистр Из МассивИспользуемыхРегистров Цикл - ПолноеИмя = ИспользуемыйРегистр.ПолноеИмя(); + ИспользуемыйРегистр = ИспользуемыйРегистр.Ключ; + ПолноеИмя = ИспользуемыйРегистр.ПолноеИмя(); + ТекстЗапросаШаблон = "ВЫБРАТЬ | ""&ПолноеИмяРегистра"" КАК ПолноеИмяРегистра, @@ -1582,6 +1582,8 @@ РассчитанноеКоличество.Вставить(СтрокаРезультата.ПолноеИмяРегистра, СтрокаРезультата.Количество); КонецЦикла; + ОтчетОДвиженияхДокументаПереопределяемый.ПриРасчетеКоличестваЗаписей(Регистратор, РассчитанноеКоличество); + Возврат РассчитанноеКоличество; КонецФункции @@ -1599,11 +1601,17 @@ КолонкиТаблицыРегистров.Добавить("РежимЗаписиРегистраСведений", Новый ОписаниеТипов("Строка")); КолонкиТаблицыРегистров.Добавить("ПериодичностьРегистраРасчета", Новый ОписаниеТипов("Строка")); КолонкиТаблицыРегистров.Добавить("ВидРегистраДляУпорядочивания", Новый ОписаниеТипов("Число", , , Новый КвалификаторыЧисла(1, 0, ДопустимыйЗнак.Неотрицательный))); + КолонкиТаблицыРегистров.Добавить("ПолеРегистратора", Новый ОписаниеТипов("Строка")); Для Каждого ИспользуемыйРегистр Из МассивИспользуемыхРегистров Цикл - - СтрокаТаблицыРегистров = ТаблицаРегистров.Добавить(); - СтрокаТаблицыРегистров.ИмяРегистра = ИспользуемыйРегистр.Имя; + + ПолеРегистратора = ИспользуемыйРегистр.Значение; + ИспользуемыйРегистр = ИспользуемыйРегистр.Ключ; + + СтрокаТаблицыРегистров = ТаблицаРегистров.Добавить(); + + СтрокаТаблицыРегистров.ПолеРегистратора = ПолеРегистратора; + СтрокаТаблицыРегистров.ИмяРегистра = ИспользуемыйРегистр.Имя; Если ОбщегоНазначения.ЭтоРегистрНакопления(ИспользуемыйРегистр) Тогда @@ -1831,6 +1839,7 @@ СтруктураРасшифровки.Вставить("ВидРегистра", СтрокаГлобальныхНастроек.ЛокализацияВидРегистра); СтруктураРасшифровки.Вставить("ИмяРегистра", СтрокаГлобальныхНастроек.ИмяРегистра); СтруктураРасшифровки.Вставить("Регистратор", ДокументРегистратор); + Область.Расшифровка = СтруктураРасшифровки; ОтчетыСервер.ВывестиГиперссылку(Область, СтруктураРасшифровки, Область.Текст); @@ -2296,7 +2305,7 @@ ИЛИ ТипЗнч(НастройкиИсточник) = Тип("ГруппировкаДиаграммыКомпоновкиДанных") Тогда Для каждого ЭлементСтруктурыИсточник Из НастройкиИсточник.Структура Цикл - ЭлементСтруктурыПриемник = НастройкиПриемник.Структура.Добавить(); + ЭлементСтруктурыПриемник = НастройкиПриемник.Структура.Добавить(ТипЗнч(ЭлементСтруктурыИсточник)); СкопироватьНастройкиКомпоновкиДанных(ЭлементСтруктурыПриемник, ЭлементСтруктурыИсточник); КонецЦикла; diff --git a/SSL/src/Reports/ДвиженияДокумента/Templates/ПустаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/ДвиженияДокумента/Templates/ПустаяСхемаКомпоновкиДанных/Template.dcs index 241b89d67..796e02306 100644 --- a/SSL/src/Reports/ДвиженияДокумента/Templates/ПустаяСхемаКомпоновкиДанных/Template.dcs +++ b/SSL/src/Reports/ДвиженияДокумента/Templates/ПустаяСхемаКомпоновкиДанных/Template.dcs @@ -72,20 +72,6 @@ false true - - ДоступностьВариантаДляРассылки - - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Доступность варианта для рассылки</v8:content> - </v8:item> - - - xs:boolean - - true - false - Основной @@ -207,19 +193,6 @@ - - false - ДоступностьВариантаДляРассылки - true - Inaccessible - 4c0bf5ee-bb28-4e77-927a-e083ae344bcd - - - ru - Этот параметр служебный. Изменять его не рекомендуется. - - - diff --git a/SSL/src/Reports/МестаИспользованияСсылок/ManagerModule.bsl b/SSL/src/Reports/МестаИспользованияСсылок/ManagerModule.bsl index 0d0ab2667..d5f25304c 100644 --- a/SSL/src/Reports/МестаИспользованияСсылок/ManagerModule.bsl +++ b/SSL/src/Reports/МестаИспользованияСсылок/ManagerModule.bsl @@ -35,6 +35,7 @@ Команда = КомандыОтчетов.Добавить(); Команда.Представление = НСтр("ru = 'Места использования'"); Команда.МножественныйВыбор = Истина; + Команда.Важность = "СмТакже"; Команда.ИмяПараметраФормы = "Отбор.НаборСсылок"; Команда.КлючВарианта = "Основной"; Команда.Менеджер = "Отчет.МестаИспользованияСсылок"; diff --git a/SSL/src/Reports/МестаИспользованияСсылок/ObjectModule.bsl b/SSL/src/Reports/МестаИспользованияСсылок/ObjectModule.bsl index f6a1631bf..fc6503744 100644 --- a/SSL/src/Reports/МестаИспользованияСсылок/ObjectModule.bsl +++ b/SSL/src/Reports/МестаИспользованияСсылок/ObjectModule.bsl @@ -107,15 +107,17 @@ КонецФункции Функция ЗаголовокПоНаборуСсылок(Знач НаборСсылок) - Результат = Неопределено; - + Если ТипЗнч(НаборСсылок) = Тип("СписокЗначений") Тогда - ВсегоСсылок = НаборСсылок.Количество() - 1; - Если ВсегоСсылок >= 0 Тогда + ВсегоСсылок = НаборСсылок.Количество(); + Если ВсегоСсылок = 1 Тогда + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Места использования %1'"), ОбщегоНазначения.ПредметСтрокой(НаборСсылок[0].Значение)); + ИначеЕсли ВсегоСсылок > 1 Тогда ОдинаковыйТип = Истина; ТипПервойСсылки = ТипЗнч(НаборСсылок[0].Значение); - Для Позиция = 0 По ВсегоСсылок Цикл + Для Позиция = 0 По ВсегоСсылок - 1 Цикл Если ТипЗнч(НаборСсылок[Позиция].Значение) <> ТипПервойСсылки Тогда ОдинаковыйТип = Ложь; Прервать; @@ -123,16 +125,21 @@ КонецЦикла; Если ОдинаковыйТип Тогда - Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Места использования %1'"), НаборСсылок[0].Значение.Метаданные().Представление()); + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Места использования элементов ""%1"" (%2)'"), + НаборСсылок[0].Значение.Метаданные().Представление(), + ВсегоСсылок); + Иначе + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Места использования элементов (%1)'"), + ВсегоСсылок); КонецЕсли; КонецЕсли; + КонецЕсли; - - Если Результат = Неопределено Тогда - Результат = НСтр("ru = 'Места использования элементов'"); - КонецЕсли; - - Возврат Результат; + + Возврат НСтр("ru = 'Места использования элементов'"); + КонецФункции #КонецОбласти diff --git a/SSL/src/Reports/ПраваДоступа/Forms/ФормаОтчета/Form.form b/SSL/src/Reports/ПраваДоступа/Forms/ФормаОтчета/Form.form index 6679a70f9..23baff204 100644 --- a/SSL/src/Reports/ПраваДоступа/Forms/ФормаОтчета/Form.form +++ b/SSL/src/Reports/ПраваДоступа/Forms/ФормаОтчета/Form.form @@ -120,6 +120,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/Reports/РезультатыПроверкиУчета/Forms/ИсправлениеЦиклическихСсылок/Form.form b/SSL/src/Reports/РезультатыПроверкиУчета/Forms/АвтоисправлениеПроблемы/Form.form similarity index 96% rename from SSL/src/Reports/РезультатыПроверкиУчета/Forms/ИсправлениеЦиклическихСсылок/Form.form rename to SSL/src/Reports/РезультатыПроверкиУчета/Forms/АвтоисправлениеПроблемы/Form.form index 5217723ae..2b950c1b8 100644 --- a/SSL/src/Reports/РезультатыПроверкиУчета/Forms/ИсправлениеЦиклическихСсылок/Form.form +++ b/SSL/src/Reports/РезультатыПроверкиУчета/Forms/АвтоисправлениеПроблемы/Form.form @@ -2,7 +2,7 @@ <key>ru</key> - <value>Исправление проблемы циклических ссылок</value> + <value>Автоисправление проблемы</value> ПанельИндикаторов @@ -11,7 +11,7 @@ ГруппаИндикаторНачалаИсправления 23 - НадписьНетИзменений + НадписьВопрос 25 <key>ru</key> @@ -23,7 +23,7 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>НадписьНетИзмененийExtendedTooltip</name> + <name>НадписьВопросРасширеннаяПодсказка</name> <id>27</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -33,7 +33,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>НадписьНетИзмененийКонтекстноеМеню</name> + <name>НадписьВопросКонтекстноеМеню</name> <id>26</id> <autoFill>true</autoFill> </contextMenu> @@ -73,6 +73,7 @@ </extendedTooltip> <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> + <group>HorizontalIfPossible</group> <showTitle>auto</showTitle> <scrollOnCompress>false</scrollOnCompress> </extInfo> @@ -178,6 +179,7 @@ </extendedTooltip> <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> + <group>HorizontalIfPossible</group> <showTitle>auto</showTitle> <scrollOnCompress>false</scrollOnCompress> </extInfo> @@ -190,7 +192,7 @@ <id>32</id> <title> <key>ru</key> - <value>Исправление успешно выполнено!</value> + <value>Исправление выполнено успешно.</value> true true @@ -248,6 +250,7 @@ Page + HorizontalIfPossible auto false diff --git a/SSL/src/Reports/РезультатыПроверкиУчета/Forms/ИсправлениеЦиклическихСсылок/Module.bsl b/SSL/src/Reports/РезультатыПроверкиУчета/Forms/АвтоисправлениеПроблемы/Module.bsl similarity index 61% rename from SSL/src/Reports/РезультатыПроверкиУчета/Forms/ИсправлениеЦиклическихСсылок/Module.bsl rename to SSL/src/Reports/РезультатыПроверкиУчета/Forms/АвтоисправлениеПроблемы/Module.bsl index c8107ca8a..532af3735 100644 --- a/SSL/src/Reports/РезультатыПроверкиУчета/Forms/ИсправлениеЦиклическихСсылок/Module.bsl +++ b/SSL/src/Reports/РезультатыПроверкиУчета/Forms/АвтоисправлениеПроблемы/Module.bsl @@ -10,7 +10,14 @@ ИдентификаторПроверки = Параметры.ИдентификаторПроверки; - УстановитьТекущуюСтраницу(ЭтотОбъект, Ложь, Ложь); + Если ИдентификаторПроверки = "СтандартныеПодсистемы.ПроверкаЦиклическихСсылок" Тогда + ТекстВопроса = НСтр("ru = 'Исправление циклических ссылок может занять продолжительное время. Выполнить исправление?'"); + ИначеЕсли ИдентификаторПроверки = "СтандартныеПодсистемы.ПроверкаОтсутствующихПредопределенныхЭлементов" Тогда + ТекстВопроса = НСтр("ru = 'Создать отсутствующие предопределенные элементы заново?'"); + КонецЕсли; + + Элементы.НадписьВопрос.Заголовок = ТекстВопроса; + УстановитьТекущуюСтраницу(ЭтотОбъект, "Вопрос"); КонецПроцедуры @@ -21,16 +28,15 @@ &НаКлиенте Процедура ИсправитьПроблему(Команда) - ДлительнаяОперация = ИсправитьПроблемуВФоне(ИдентификаторПроверки); - Если ДлительнаяОперация <> Неопределено Тогда - + Если ИдентификаторПроверки = "СтандартныеПодсистемы.ПроверкаЦиклическихСсылок" Тогда + ДлительнаяОперация = ИсправитьПроблемуВФоне(ИдентификаторПроверки); ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); - ПараметрыОжидания.ВыводитьОкноОжидания = Ложь; - ПараметрыОжидания.Интервал = 2; - ОповещениеОЗавершении = Новый ОписаниеОповещения("ИсправитьПроблемуВФонеЗавершение", ЭтотОбъект); ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОповещениеОЗавершении, ПараметрыОжидания); - + ИначеЕсли ИдентификаторПроверки = "СтандартныеПодсистемы.ПроверкаОтсутствующихПредопределенныхЭлементов" Тогда + УстановитьТекущуюСтраницу(ЭтотОбъект, "ИдетИсправлениеПроблемы"); + ВосстановитьОтсутствующиеПредопределенныеЭлементы(); + УстановитьТекущуюСтраницу(ЭтотОбъект, "ИсправлениеУспешноВыполнено"); КонецЕсли; КонецПроцедуры @@ -40,18 +46,18 @@ #Область СлужебныеПроцедурыИФункции &НаКлиентеНаСервереБезКонтекста -Процедура УстановитьТекущуюСтраницу(Форма, ИдетИсправлениеПроблемы, ИсправлениеУспешноВыполнено) +Процедура УстановитьТекущуюСтраницу(Форма, ИмяСтраницы) ЭлементыФормы = Форма.Элементы; - Если ИдетИсправлениеПроблемы Тогда + Если ИмяСтраницы = "ИдетИсправлениеПроблемы" Тогда ЭлементыФормы.ГруппаИндикаторИсправления.Видимость = Истина; ЭлементыФормы.ГруппаИндикаторНачалаИсправления.Видимость = Ложь; ЭлементыФормы.ГруппаИндикаторУспешноеИсправление.Видимость = Ложь; - ИначеЕсли ИсправлениеУспешноВыполнено Тогда + ИначеЕсли ИмяСтраницы = "ИсправлениеУспешноВыполнено" Тогда ЭлементыФормы.ГруппаИндикаторИсправления.Видимость = Ложь; ЭлементыФормы.ГруппаИндикаторНачалаИсправления.Видимость = Ложь; ЭлементыФормы.ГруппаИндикаторУспешноеИсправление.Видимость = Истина; - Иначе + Иначе // "Вопрос" ЭлементыФормы.ГруппаИндикаторИсправления.Видимость = Ложь; ЭлементыФормы.ГруппаИндикаторНачалаИсправления.Видимость = Истина; ЭлементыФормы.ГруппаИндикаторУспешноеИсправление.Видимость = Ложь; @@ -62,25 +68,17 @@ &НаСервере Функция ИсправитьПроблемуВФоне(ИдентификаторПроверки) - Если МонопольныйРежим() Тогда - Возврат Неопределено; - КонецЕсли; - Если ДлительнаяОперация <> Неопределено Тогда ДлительныеОперации.ОтменитьВыполнениеЗадания(ДлительнаяОперация.ИдентификаторЗадания); КонецЕсли; - УстановитьТекущуюСтраницу(ЭтотОбъект, Истина, Ложь); + УстановитьТекущуюСтраницу(ЭтотОбъект, "ИдетИсправлениеПроблемы"); ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); - ПараметрыВыполнения.ОжидатьЗавершение = 0; - ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Исправление проблемы'"); - ПараметрыВыполнения.ЗапуститьВФоне = Истина; + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Исправление циклических ссылок'"); - Результат = ДлительныеОперации.ВыполнитьВФоне("КонтрольВеденияУчетаСлужебный.ИсправитьПроблемуЦиклическихСсылокВФоновомЗадании", + Возврат ДлительныеОперации.ВыполнитьВФоне("КонтрольВеденияУчетаСлужебный.ИсправитьПроблемуЦиклическихСсылокВФоновомЗадании", Новый Структура("ИдентификаторПроверки", ИдентификаторПроверки), ПараметрыВыполнения); - - Возврат Результат; КонецФункции @@ -90,15 +88,22 @@ ДлительнаяОперация = Неопределено; Если Результат = Неопределено Тогда - УстановитьТекущуюСтраницу(ЭтотОбъект, Истина, Ложь); + УстановитьТекущуюСтраницу(ЭтотОбъект, "ИдетИсправлениеПроблемы"); Возврат; ИначеЕсли Результат.Статус = "Ошибка" Тогда - УстановитьТекущуюСтраницу(ЭтотОбъект, Ложь, Ложь); + УстановитьТекущуюСтраницу(ЭтотОбъект, "Вопрос"); ВызватьИсключение Результат.КраткоеПредставлениеОшибки; ИначеЕсли Результат.Статус = "Выполнено" Тогда - УстановитьТекущуюСтраницу(ЭтотОбъект, Ложь, Истина); + УстановитьТекущуюСтраницу(ЭтотОбъект, "ИсправлениеУспешноВыполнено"); КонецЕсли; КонецПроцедуры +&НаСервереБезКонтекста +Процедура ВосстановитьОтсутствующиеПредопределенныеЭлементы() + + СтандартныеПодсистемыСервер.ВосстановитьПредопределенныеЭлементы(); + +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/Reports/РезультатыПроверкиУчета/ObjectModule.bsl b/SSL/src/Reports/РезультатыПроверкиУчета/ObjectModule.bsl index dfbd1f0b1..49463439c 100644 --- a/SSL/src/Reports/РезультатыПроверкиУчета/ObjectModule.bsl +++ b/SSL/src/Reports/РезультатыПроверкиУчета/ObjectModule.bsl @@ -384,10 +384,10 @@ ОтчетыСервер.ВывестиГиперссылку(Область, СтруктураРасшифровки, НСтр("ru = 'Выполнить исправление'")); - ИначеЕсли СтрНайти(ТекстОбласти, "<РазмещениеСтруктурыНабораЗаписейДляПоследующейРасшифровки>") <> 0 Тогда + ИначеЕсли СтрНайти(ТекстОбласти, "<РасшифровкаСписка>") <> 0 Тогда СтруктураРасшифровки = Новый Структура; - СтруктураРасшифровки.Вставить("Назначение", "ОткрытьФормуРегистра"); + СтруктураРасшифровки.Вставить("Назначение", "ОткрытьФормуСписка"); ОтборНабораЗаписей = Новый Структура; РазделенныйТекст = СтрРазделить(ТекстОбласти, Символы.ПС); @@ -397,12 +397,11 @@ Если РазделенныйТекст.Найти(ЭлементТекста) = 0 Тогда Продолжить; ИначеЕсли РазделенныйТекст.Найти(ЭлементТекста) = 1 Тогда - СтруктураРасшифровки.Вставить("ПолноеИмяРегистра", ЭлементТекста); + СтруктураРасшифровки.Вставить("ПолноеИмяОбъекта", ЭлементТекста); Продолжить; КонецЕсли; РазделенныйЭлементТекста = СтрРазделить(ЭлементТекста, "~~~", Ложь); - Если РазделенныйЭлементТекста.Количество() <> 3 Тогда Продолжить; КонецЕсли; @@ -433,12 +432,12 @@ ОтборНабораЗаписей.Вставить(ИмяОтбора, ЗначениеОтбора); КонецЦикла; - СтруктураРасшифровки.Вставить("ОтборНабораЗаписей", ОтборНабораЗаписей); + СтруктураРасшифровки.Вставить("Отбор", ОтборНабораЗаписей); Область.Расшифровка = СтруктураРасшифровки; Если РазделенныйТекст.Количество() <> 0 Тогда - Область.Текст = СтрЗаменить(РазделенныйТекст.Получить(0), "<РазмещениеСтруктурыНабораЗаписейДляПоследующейРасшифровки>", ""); + Область.Текст = СтрЗаменить(РазделенныйТекст.Получить(0), "<РасшифровкаСписка>", ""); КонецЕсли; КонецЕсли; diff --git a/SSL/src/Reports/РезультатыПроверкиУчета/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/РезультатыПроверкиУчета/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs index 8c0d82132..b03ea70fe 100644 --- a/SSL/src/Reports/РезультатыПроверкиУчета/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs +++ b/SSL/src/Reports/РезультатыПроверкиУчета/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs @@ -289,7 +289,7 @@ Проблемный объект расчет [ЗаголовокСкрыт] - КонтрольВеденияУчетаСлужебный.ОформитьПредставлениеПроблемногоОбъекта(ПроблемныйОбъект, Представление(ПроблемныйОбъект), ДополнительнаяИнформация) + КонтрольВеденияУчетаСлужебный.ПредставлениеПроблемногоОбъекта(ПроблемныйОбъект, Представление(ПроблемныйОбъект), ДополнительнаяИнформация) ПравилоПроверкиПричиныПроблемы diff --git a/SSL/src/Reports/РезультатыПроверкиУчета/РезультатыПроверкиУчета.mdo b/SSL/src/Reports/РезультатыПроверкиУчета/РезультатыПроверкиУчета.mdo index 07c324759..9fe409194 100644 --- a/SSL/src/Reports/РезультатыПроверкиУчета/РезультатыПроверкиУчета.mdo +++ b/SSL/src/Reports/РезультатыПроверкиУчета/РезультатыПроверкиУчета.mdo @@ -19,10 +19,10 @@ - ИсправлениеЦиклическихСсылок + АвтоисправлениеПроблемы ru - Исправление циклических ссылок + Автоисправление проблемы PersonalComputer MobileDevice diff --git a/SSL/src/Reports/СведенияОПользователях/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/СведенияОПользователях/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs index 4134f4879..3ab2ea0e3 100644 --- a/SSL/src/Reports/СведенияОПользователях/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs +++ b/SSL/src/Reports/СведенияОПользователях/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs @@ -978,7 +978,7 @@ ru - Помеченые на удаление + Помеченные на удаление Normal @@ -1256,7 +1256,7 @@ ru - Помеченые на удаление + Помеченные на удаление Normal diff --git a/SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаОтчета/Module.bsl b/SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаОтчета/Module.bsl index 74e61c8e3..85c2a46e7 100644 --- a/SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаОтчета/Module.bsl +++ b/SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаОтчета/Module.bsl @@ -227,7 +227,7 @@ КонецЕсли; КонецЕсли; ИначеЕсли ТипЗнч(ПодчиненнаяФорма) = Тип("КонструкторСхемыКомпоновкиДанных") Тогда - #Если ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда +#Если ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда Если Тип(Результат) = Тип("СхемаКомпоновкиДанных") Тогда НастройкиОтчета.АдресСхемы = ПоместитьВоВременноеХранилище(Результат, УникальныйИдентификатор); @@ -239,7 +239,7 @@ ЗаписьXML.Закрыть(); ДвоичныеДанные = Новый ДвоичныеДанные(Путь); - УдалитьФайлы(Путь); + НачатьУдалениеФайлов(Новый ОписаниеОповещения, Путь); Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("СхемаКомпоновкиДанных", ДвоичныеДанные); Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("ОтчетИнициализирован", Ложь); @@ -252,7 +252,7 @@ БыстрыеНастройкиЗаполнитьКлиент(ПараметрыЗаполнения); КонецЕсли; - #КонецЕсли +#КонецЕсли КонецЕсли; // Механизмы расширения. @@ -963,9 +963,6 @@ КонецЕсли; ВариантФормы = Найденные[0]; НастройкиОтчета.Удалить("ФормаНастроекРасширенныйРежим"); - Если НастройкиОтчета.Свойство("Период") Тогда - НастройкиОтчета.Удалить("Период"); - КонецЕсли; ЗагрузитьВариант(ВариантФормы.КлючВарианта); КлючУникальности = ОтчетыКлиентСервер.КлючУникальности(НастройкиОтчета.ПолноеИмя, ВариантФормы.КлючВарианта); ПоказатьРезультатЗаполненияНастроек(); @@ -1430,7 +1427,6 @@ РезультатЗаполненияНастроек = ПараметрыЗаполнения.Результат; ОтчетыСервер.ОчиститьРасширеннуюИнформациюОНастройках(Информация); - КонецПроцедуры &НаСервере @@ -1713,7 +1709,6 @@ |ВводСписком, ОписаниеТипов, ПараметрыВыбора, ЗначенияДляВыбора, ЗначенияДляВыбораЗаполнены, |БыстрыйВыбор, ОграничиватьВыборУказаннымиЗначениями, ВыборГруппИЭлементов, ФормаВыбора"); НастройкиЭлемента.ФормаВыбора = СвойстваНастройки.ДоступнаяНастройкаКД.ФормаВыбора; - НастройкиЭлемента.ЗначенияДляВыбораЗаполнены = Ложь; ЗаполнитьЗначенияСвойств(НастройкиЭлемента, СвойстваНастройки); Прочее.ДополнительныеНастройкиЭлементов.Вставить(СвойстваНастройки.ИдентификаторЭлемента, НастройкиЭлемента); КонецЕсли; @@ -1861,7 +1856,7 @@ ИначеЕсли СвойстваНастройки.ТипЭлементов = "СтандартныйПериод" Тогда - Группа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + Группа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; ЭлементВывода.Размер = 1; ЭлементВывода.ИмяЭлемента2 = ГруппаИмя; @@ -1944,7 +1939,7 @@ // Группа-строка для заголовка и командной панели таблицы. ГруппаЗаголовокТаблицы = Элементы.Добавить(ГруппаЗаголовокИмя, Тип("ГруппаФормы"), Группа); ГруппаЗаголовокТаблицы.Вид = ВидГруппыФормы.ОбычнаяГруппа; - ГруппаЗаголовокТаблицы.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + ГруппаЗаголовокТаблицы.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; ГруппаЗаголовокТаблицы.Отображение = ОтображениеОбычнойГруппы.Нет; ГруппаЗаголовокТаблицы.ОтображатьЗаголовок = Ложь; @@ -1999,7 +1994,7 @@ // Группа с отступом и таблицей. ГруппаСОтступом = Элементы.Добавить(ГруппаИмя + "Отступ", Тип("ГруппаФормы"), Группа); ГруппаСОтступом.Вид = ВидГруппыФормы.ОбычнаяГруппа; - ГруппаСОтступом.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + ГруппаСОтступом.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; ГруппаСОтступом.Отображение = ОтображениеОбычнойГруппы.Нет; ГруппаСОтступом.Заголовок = СвойстваНастройки.Представление; ГруппаСОтступом.ОтображатьЗаголовок = Ложь; @@ -2689,7 +2684,6 @@ // &НаСервереБезКонтекста Процедура УстановитьИсточникДанныхТекущегоВарианта(Вариант) - Если Не ЗначениеЗаполнено(Вариант) Тогда Возврат; КонецЕсли; diff --git a/SSL/src/Reports/УниверсальныйОтчет/ManagerModule.bsl b/SSL/src/Reports/УниверсальныйОтчет/ManagerModule.bsl index f2ec88b0d..ecc97105d 100644 --- a/SSL/src/Reports/УниверсальныйОтчет/ManagerModule.bsl +++ b/SSL/src/Reports/УниверсальныйОтчет/ManagerModule.bsl @@ -212,9 +212,18 @@ ЗначенияДляВыбора.Добавить("ФактическийПериодДействия", НСтр("ru = 'Фактический период действия'")); КонецЕсли; ИначеЕсли ТипОбъектаМетаданных = "ПланыВидовРасчета" Тогда - ЗначенияДляВыбора.Добавить("БазовыеВидыРасчета", НСтр("ru = 'Базовые виды расчета'")); - ЗначенияДляВыбора.Добавить("ВедущиеВидыРасчета", НСтр("ru = 'Ведущие виды расчета'")); - ЗначенияДляВыбора.Добавить("ВытесняющиеВидыРасчета", НСтр("ru = 'Вытесняющие виды расчета'")); + ОбъектМетаданных = Метаданные[ТипОбъектаМетаданных][ИмяОбъектаМетаданных]; + Если ОбъектМетаданных.ЗависимостьОтВидовРасчета + <> Метаданные.СвойстваОбъектов.ИспользованиеБазыПланаВидовРасчета.НеИспользовать Тогда + + ЗначенияДляВыбора.Добавить("БазовыеВидыРасчета", НСтр("ru = 'Базовые виды расчета'")); + КонецЕсли; + + ЗначенияДляВыбора.Добавить("ВедущиеВидыРасчета", НСтр("ru = 'Ведущие виды расчета'")); + + Если ОбъектМетаданных.ИспользованиеПериодаДействия Тогда + ЗначенияДляВыбора.Добавить("ВытесняющиеВидыРасчета", НСтр("ru = 'Вытесняющие виды расчета'")); + КонецЕсли; ИначеЕсли ТипОбъектаМетаданных = "РегистрыБухгалтерии" Тогда ЗначенияДляВыбора.Добавить("ОстаткиИОбороты", НСтр("ru = 'Остатки и обороты'")); ЗначенияДляВыбора.Добавить("Остатки", НСтр("ru = 'Остатки'")); @@ -768,6 +777,11 @@ ТипыПолейИсточника = ТипыПолейИсточников[ПараметрыОтчета.ТипОбъектаМетаданных]; Если ТипыПолейИсточника <> Неопределено Тогда + УточнятьСуффиксыПолей = ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыБухгалтерии" + И (ПараметрыОтчета.ИмяТаблицы = "" + Или ПараметрыОтчета.ИмяТаблицы = "ОборотыДтКт" + Или ПараметрыОтчета.ИмяТаблицы = "ДвиженияССубконто"); + Для Каждого ТипПолейИсточника Из ТипыПолейИсточника Цикл ПоляГруппировки = Структура.ПоляГруппировки.Элементы; @@ -783,9 +797,18 @@ Продолжить; КонецЕсли; - ПолеГруппировки = ПоляГруппировки.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); - ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных(МетаданныеПоля.Имя); - ПолеГруппировки.Использование = Истина; + Если УточнятьСуффиксыПолей + И Не МетаданныеПоля.Балансовый Тогда + СуффиксыПолей = СтрРазделить("Дт@Кт", "@", Ложь); + Иначе + СуффиксыПолей = СтрРазделить("", "@"); + КонецЕсли; + + Для Каждого Суффикс Из СуффиксыПолей Цикл + ПолеГруппировки = ПоляГруппировки.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); + ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных(МетаданныеПоля.Имя + Суффикс); + ПолеГруппировки.Использование = Истина; + КонецЦикла; КонецЦикла; КонецЦикла; КонецЕсли; @@ -802,7 +825,7 @@ "Период, ИсточникДанных, ТипОбъектаМетаданных, ПолноеИмяОбъектаМетаданных, ИмяОбъектаМетаданных, ИмяТаблицы"); ПараметрыОтчета.Вставить("ОчиститьСтруктуру", Ложь); - ПолучитьПараметрыИзПользовательскихНастроек(ПараметрыОтчета, ПользовательскиеНастройки, Настройки.ДополнительныеСвойства); + ПолучитьПараметрыИзПользовательскихНастроек(ПараметрыОтчета, ПользовательскиеНастройки); ПолучитьПараметрыИзНастроек(ПараметрыОтчета, Настройки); // Если в настройках варианта хранится параметр с неактуальным именем - выполнится его актуализация. @@ -851,9 +874,9 @@ // Параметры - Структура - см. ПараметрыОтчета() // Настройки - ПользовательскиеНастройкиКомпоновкиДанных - текущие пользовательские настройки компоновки данных. // -Процедура ПолучитьПараметрыИзПользовательскихНастроек(Параметры, Настройки, ДополнительныеСвойства) - Если Не ДополнительныеСвойства.Свойство("ОтчетИнициализирован") - Или ТипЗнч(Настройки) <> Тип("ПользовательскиеНастройкиКомпоновкиДанных") Тогда +Процедура ПолучитьПараметрыИзПользовательскихНастроек(Параметры, Настройки) + Если ТипЗнч(Настройки) <> Тип("ПользовательскиеНастройкиКомпоновкиДанных") + Или Настройки.Элементы.Количество() = 0 Тогда Возврат; КонецЕсли; @@ -994,8 +1017,6 @@ СхемаКД = ОтчетОбъект.СхемаКомпоновкиДанных; ОтчетОбъект.КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКД.НастройкиПоУмолчанию); - МакетОформления = МакетОформления(НастройкиКД); - НастройкиКД = ОтчетОбъект.КомпоновщикНастроек.Настройки; НастройкиКД.Выбор.Элементы.Очистить(); @@ -1012,51 +1033,11 @@ КонецЕсли; КонецЦикла; - ВосстановитьМакетОформления(МакетОформления, НастройкиКД); - НастройкиКД.ДополнительныеСвойства.Вставить("ОтчетИнициализирован", Истина); КонецЕсли; КонецПроцедуры -Функция МакетОформления(Настройки) - НайденныйПараметр = Настройки.ПараметрыВывода.Элементы.Найти("МакетОформления"); - Если НайденныйПараметр.Значение = "Main" - Или НайденныйПараметр.Значение = "Основной" Тогда - Возврат Неопределено; - КонецЕсли; - - Возврат НайденныйПараметр.Значение; -КонецФункции - -Процедура ВосстановитьМакетОформления(МакетОформления, Настройки) - Если МакетОформления = Неопределено Тогда - Возврат; - КонецЕсли; - - НайденныйПараметр = Настройки.ПараметрыВывода.Элементы.Найти("МакетОформления"); - Если НайденныйПараметр.Значение = "Main" - Или НайденныйПараметр.Значение = "Основной" Тогда - - НайденныйПараметр.Значение = МакетОформления; - НайденныйПараметр.Использование = Истина; - КонецЕсли; - - Для Каждого ЭлементСтруктуры Из Настройки.Структура Цикл - Если ТипЗнч(ЭлементСтруктуры) <> Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда - Продолжить; - КонецЕсли; - - НайденныйПараметр = ЭлементСтруктуры.Настройки.ПараметрыВывода.Элементы.Найти("МакетОформления"); - Если НайденныйПараметр.Значение = "Main" - Или НайденныйПараметр.Значение = "Основной" Тогда - - НайденныйПараметр.Значение = МакетОформления; - НайденныйПараметр.Использование = Истина; - КонецЕсли; - КонецЦикла; -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Работа с произвольной схемой из файла. @@ -1196,12 +1177,6 @@ ПараметрДанных.Параметр = Новый ПараметрКомпоновкиДанных(Параметр.Ключ); ПараметрДанных.Значение = Параметр.Значение; ПараметрДанных.Использование = Истина; - - Если Параметр.Ключ = "ИмяОбъектаМетаданных" - И Не ЗначениеЗаполнено(ПараметрДанных.ИдентификаторПользовательскойНастройки) Тогда - ПараметрДанных.ИдентификаторПользовательскойНастройки = Новый УникальныйИдентификатор; - ПараметрДанных.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ; - КонецЕсли; Иначе НастройкиВарианта.ПараметрыДанных.УстановитьЗначениеПараметра(Параметр.Ключ, Параметр.Значение); КонецЕсли; diff --git a/SSL/src/Reports/УниверсальныйОтчет/ObjectModule.bsl b/SSL/src/Reports/УниверсальныйОтчет/ObjectModule.bsl index 30e95af70..7f729b4dd 100644 --- a/SSL/src/Reports/УниверсальныйОтчет/ObjectModule.bsl +++ b/SSL/src/Reports/УниверсальныйОтчет/ObjectModule.bsl @@ -225,7 +225,7 @@ Если ТипЗнч(НовыеНастройкиКД) = Тип("НастройкиКомпоновкиДанных") Или НовыеНастройкиКД = Неопределено Тогда Если НовыеНастройкиКД = Неопределено Тогда - ДопСвойстваНастроек = ЭтотОбъект.КомпоновщикНастроек.Настройки.ДополнительныеСвойства; + ДопСвойстваНастроек = КомпоновщикНастроек.Настройки.ДополнительныеСвойства; Иначе ДопСвойстваНастроек = НовыеНастройкиКД.ДополнительныеСвойства; КонецЕсли; @@ -303,8 +303,8 @@ Если ТипЗнч(НовыеНастройкиКД) = Тип("НастройкиКомпоновкиДанных") Или НовыеНастройкиКД = Неопределено Тогда Если НовыеНастройкиКД = Неопределено Тогда КлючВарианта = "Основной"; - НовыеНастройкиКД = ЭтотОбъект.КомпоновщикНастроек.Настройки; - ДопСвойстваНастроек = ЭтотОбъект.КомпоновщикНастроек.Настройки.ДополнительныеСвойства; + НовыеНастройкиКД = КомпоновщикНастроек.Настройки; + ДопСвойстваНастроек = КомпоновщикНастроек.Настройки.ДополнительныеСвойства; Иначе ДопСвойстваНастроек = НовыеНастройкиКД.ДополнительныеСвойства; КонецЕсли; diff --git a/SSL/src/Reports/УниверсальныйОтчет/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/УниверсальныйОтчет/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs index 7c6c1510a..cf72cbf8e 100644 --- a/SSL/src/Reports/УниверсальныйОтчет/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs +++ b/SSL/src/Reports/УниверсальныйОтчет/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs @@ -144,6 +144,11 @@ 60febb46-2215-4d7a-ac48-eac4758847c6 + + false + ИсточникДанных + + false ТипОбъектаМетаданных diff --git a/SSL/src/Roles/АдминистраторСистемы/Rights.rights b/SSL/src/Roles/АдминистраторСистемы/Rights.rights index 939136d7b..e73804bc8 100644 --- a/SSL/src/Roles/АдминистраторСистемы/Rights.rights +++ b/SSL/src/Roles/АдминистраторСистемы/Rights.rights @@ -44,6 +44,42 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + Constant.ПараметрыАдминистрированияИБ @@ -105,27 +141,40 @@ TotalsControl true - - - InformationRegister.СлужебныеАдресныеСведения - Read + ReadDataHistory true - Update + ReadDataHistoryOfMissingData true - View + UpdateDataHistory true - Edit + UpdateDataHistoryOfMissingData true - TotalsControl + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion true @@ -151,6 +200,42 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + ExchangePlan.ОбменСообщениями @@ -245,6 +330,42 @@ InputByString true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + Constant.ИспользоватьДополнительныеОтчетыИОбработки @@ -287,6 +408,42 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения @@ -334,6 +491,42 @@ InputByString true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + Constant.ПериодХраненияЗамеров @@ -383,6 +576,42 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + DataProcessor.РегламентныеИФоновыеЗадания.Command.РегламентныеИФоновыеЗадания @@ -443,6 +672,42 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + InformationRegister.ПодпискиПолучателей @@ -466,6 +731,42 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + CommonCommand.НастройкаОбменаСообщениями @@ -496,6 +797,160 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + + + + InformationRegister.СлужебныеАдресныеСведения + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + TotalsControl + true + + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + + + + InformationRegister.УровниСокращенийАдресныхСведений + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + TotalsControl + true + + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + Constant.ИспользоватьСинхронизациюДанныхВЛокальномРежиме @@ -654,6 +1109,42 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + Constant.ИспользоватьСинхронизациюДанныхВМоделиСервиса @@ -719,6 +1210,42 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + Constant.РежимИспользованияИнформационнойБазы @@ -785,6 +1312,42 @@ InputByString true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + Constant.СообщениеБлокировкиПриОбновленииКонфигурации @@ -827,6 +1390,42 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + Catalog.СценарииОбменовДанными @@ -874,6 +1473,42 @@ InputByString true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + Constant.КлючОбластиДанных @@ -951,29 +1586,49 @@ InputByString true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + - InformationRegister.УдалитьАдресныйКлассификатор - - Read - true - - - Update - true - + DataProcessor.НастройкиЦентраМониторинга.Command.ПроблемыПроизводительности View true - - Edit - true - - - TotalsControl - true - CommonForm.ПараметрыПроксиСервера @@ -1001,6 +1656,89 @@ true + + Catalog.ОбщиеВнешниеКомпоненты + + Read + true + + + Insert + true + + + Update + true + + + Delete + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InteractiveDeleteMarked + true + + + InputByString + true + + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + + Constant.УдалитьЛогинДоступаКСервисуMorpher @@ -1021,7 +1759,7 @@ - InformationRegister.ПричиныИзмененияАдресныхСведений + InformationRegister.ОбластиПерсональныхДанных Read true @@ -1042,6 +1780,101 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + + + + InformationRegister.НастройкиТранспортаОбменаСообщениями + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + TotalsControl + true + + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + CommonForm.ВходВОбластьДанных @@ -1072,6 +1905,101 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + + + + InformationRegister.ПричиныИзмененияАдресныхСведений + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + TotalsControl + true + + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + InformationRegister.УдалитьБлокировкиСеансовОбластиДанных @@ -1095,6 +2023,42 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + Constant.УдалитьПарольСлужебногоПользователяМенеджераСервиса @@ -1134,6 +2098,65 @@ true + + InformationRegister.ЗагруженныеВерсииАдресныхСведений + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + TotalsControl + true + + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + + InformationRegister.ПраваРолей @@ -1156,6 +2179,42 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + Catalog.ШаблоныЗаданийОчереди @@ -1203,6 +2262,42 @@ InputByString true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + Constant.СписокРасширенийФайловOpenDocument @@ -1302,6 +2397,42 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + InformationRegister.ВерсииПодсистем @@ -1325,6 +2456,42 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + InformationRegister.СостоянияОбменовДанными @@ -1348,6 +2515,42 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + InformationRegister.ОбластиДанных @@ -1372,13 +2575,6 @@ true - - InformationRegister.АдресныеОбъекты.Command.ПодключитьИнтернетПоддержку - - View - true - - InformationRegister.УдалитьВерсииПодсистем @@ -1401,6 +2597,42 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + Constant.ИзвлекатьТекстыФайловНаСервере @@ -1523,6 +2755,42 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + CommonAttribute.ОбластьДанныхОсновныеДанные @@ -1564,11 +2832,40 @@ TotalsControl true - - - InformationRegister.АдресныеОбъекты.Command.ОчиститьАдресныйКлассификатор - View + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion true @@ -1594,6 +2891,42 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + Catalog.ОчередьЗаданий @@ -1641,6 +2974,42 @@ InputByString true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + InformationRegister.ЗамерыОбластиСтатистики @@ -1664,50 +3033,40 @@ TotalsControl true - - - InformationRegister.ДополнительныеАдресныеСведения - Read + ReadDataHistory true - Update + ReadDataHistoryOfMissingData true - View + UpdateDataHistory true - Edit + UpdateDataHistoryOfMissingData true - TotalsControl - true - - - - InformationRegister.ОриентирыАдресныхОбъектов - - Read + UpdateDataHistorySettings true - Update + UpdateDataHistoryVersionComment true - View + ViewDataHistory true - Edit + EditDataHistoryVersionComment true - TotalsControl + SwitchToDataHistoryVersion true @@ -1764,6 +3123,42 @@ InputByString true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + DataProcessor.НастройкиЦентраМониторинга @@ -1783,6 +3178,65 @@ true + + InformationRegister.ДополнительныеАдресныеСведения + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + TotalsControl + true + + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + + Constant.МаксимальноеКоличествоИсполняющихФоновыхЗаданий @@ -1802,6 +3256,25 @@ true + + Constant.КоличествоПотоковОбновленияДоступа + + Read + true + + + Update + true + + + View + true + + + Edit + true + + InformationRegister.УдалитьОчередьИзвлеченияТекста @@ -1824,6 +3297,42 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + Constant.ПрефиксОбластиДанных @@ -1866,6 +3375,42 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + Constant.ЧасовойПоясОбластиДанных @@ -1954,6 +3499,13 @@ true + + InformationRegister.АдресныеОбъекты.Command.ПодключитьИнтернетПоддержку + + View + true + + Constant.АвтоматическиНастраиватьРазрешенияВПрофиляхБезопасности @@ -1995,6 +3547,49 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + + + + InformationRegister.АдресныеОбъекты.Command.ОчиститьАдресныйКлассификатор + + View + true + Constant.НеИспользоватьРазделениеПоОбластямДанных @@ -2099,6 +3694,42 @@ InputByString true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + Constant.ОценкаПроизводительностиПериодЗаписи @@ -2157,6 +3788,13 @@ true + + InformationRegister.АдресныеОбъекты.Command.ЗагрузитьАдресныйКлассификатор + + View + true + + Constant.БлокировкаОтправкиБыстрыхСообщений @@ -2198,6 +3836,42 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + Constant.УдалитьИмяСлужебногоПользователяМенеджераСервиса @@ -2219,7 +3893,7 @@ - InformationRegister.НастройкиТранспортаОбмена + InformationRegister.УдалитьНастройкиТранспортаОбмена Read true @@ -2240,6 +3914,42 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + Constant.ИспользоватьНесколькоПроизводственныхКалендарей @@ -2282,6 +3992,42 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + InformationRegister.ОбластиСтатистики @@ -2305,6 +4051,101 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + + + + InformationRegister.АдресныеОбъекты + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + TotalsControl + true + + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + Constant.НастройкаПодчиненногоУзлаРИБЗавершена @@ -2397,23 +4238,40 @@ InputByString true - - - Constant.СписокЗапрещенныхРасширений - Read + ReadDataHistory true - Update + ReadDataHistoryOfMissingData true - View + UpdateDataHistory true - Edit + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion true @@ -2439,6 +4297,61 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + + + + Constant.СписокЗапрещенныхРасширений + + Read + true + + + Update + true + + + View + true + + + Edit + true + InformationRegister.УдалитьЗамерыВремени @@ -2462,6 +4375,101 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + + + + InformationRegister.УдалитьЗамерыВремени2 + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + TotalsControl + true + + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + Configuration.БиблиотекаСтандартныхПодсистем @@ -2550,52 +4558,6 @@ true - - InformationRegister.УдалитьЗамерыВремени2 - - Read - true - - - Update - true - - - View - true - - - Edit - true - - - TotalsControl - true - - - - InformationRegister.УровниСокращенийАдресныхСведений - - Read - true - - - Update - true - - - View - true - - - Edit - true - - - TotalsControl - true - - DataProcessor.НастройкиЦентраМониторинга.Command.НастройкаОтправкиОтчетовОбОшибках @@ -2603,13 +4565,6 @@ true - - InformationRegister.АдресныеОбъекты.Command.ЗагрузитьАдресныйКлассификатор - - View - true - - Constant.РазмерБлокаПередачиФайла @@ -2670,6 +4625,42 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + Constant.ПараметрыЦентраМониторинга @@ -2712,6 +4703,42 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + Constant.ИспользоватьРазделениеПоОбластямДанных @@ -2823,6 +4850,42 @@ InputByString true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + CommonForm.ДополнительныеОтчетыИОбработки @@ -2872,6 +4935,42 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + InformationRegister.СостоянияУспешныхОбменовДанными @@ -2895,6 +4994,42 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + CommonForm.НастройкаМоихОтчетовИОбработок @@ -2925,6 +5060,42 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + Constant.ЭтоАвтономноеРабочееМесто @@ -2998,6 +5169,42 @@ InputByString true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + SessionParameter.ПараметрыКлиентаНаСервере @@ -3072,6 +5279,42 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + InformationRegister.ДампыПлатформы @@ -3095,6 +5338,42 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + InformationRegister.ЗамерыОперацииСтатистики @@ -3118,6 +5397,42 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + Constant.ИсточникДанныхАдресногоКлассификатора @@ -3179,6 +5494,42 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + InformationRegister.КомментарииСтатистики @@ -3202,9 +5553,45 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + - InformationRegister.АдресныеОбъекты + InformationRegister.ОриентирыАдресныхОбъектов Read true @@ -3225,6 +5612,42 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + Constant.ВыполнитьРезервноеКопированиеОбластиДанных @@ -3267,6 +5690,42 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + Constant.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском @@ -3309,6 +5768,42 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + InformationRegister.ПакетыДляОтправки @@ -3332,6 +5827,42 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + Constant.ДетализироватьОбновлениеИБВЖурналеРегистрации @@ -3393,6 +5924,42 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + Catalog.СообщенияСистемы @@ -3440,6 +6007,42 @@ InputByString true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + CommonCommand.ЗагрузитьКурсыВалют @@ -3494,6 +6097,42 @@ InputByString true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + InformationRegister.БезопасноеХранилищеДанных @@ -3517,6 +6156,42 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + CommonForm.НастройкиРегистрацииСобытийДоступаКПерсональнымДанным @@ -3547,6 +6222,42 @@ TotalsControl true + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + CommonForm.ПодключениеКонечнойТочки @@ -3555,27 +6266,4 @@ true - - InformationRegister.ЗагруженныеВерсииАдресныхСведений - - Read - true - - - Update - true - - - View - true - - - Edit - true - - - TotalsControl - true - - diff --git a/SSL/src/Roles/БазовыеПрава/Rights.rights b/SSL/src/Roles/БазовыеПраваБСП/Rights.rights similarity index 91% rename from SSL/src/Roles/БазовыеПрава/Rights.rights rename to SSL/src/Roles/БазовыеПраваБСП/Rights.rights index 8a9b93380..c00884dcb 100644 --- a/SSL/src/Roles/БазовыеПрава/Rights.rights +++ b/SSL/src/Roles/БазовыеПраваБСП/Rights.rights @@ -92,9 +92,13 @@ Read true - ВариантыОтчетов ГДЕ (ВариантыОтчетов.Пользовательский = ЛОЖЬ + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +ВариантыОтчетов ГДЕ (ВариантыОтчетов.Пользовательский = ЛОЖЬ ИЛИ ВариантыОтчетов.ТолькоДляАвтора = ЛОЖЬ - ИЛИ ВариантыОтчетов.Автор = &АвторизованныйПользователь) + ИЛИ ВариантыОтчетов.Автор = &АвторизованныйПользователь) +#КонецЕсли @@ -106,13 +110,6 @@ true - - InformationRegister.СлужебныеАдресныеСведения - - Read - true - - Constant.ДатаУведомленияОНовыхЗадачах @@ -166,18 +163,10 @@ Read true - - Update - true - View true - - Edit - true - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения @@ -185,11 +174,15 @@ Read true - #ПоЗначениямРасширенный( "ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения", "", "", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоЗначениямРасширенный( "ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения", "", "", "", "", "ДополнительныеСведения","Т.Ссылка","ИЛИ", -"Условие","НЕ ЭтоДополнительноеСведение","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +"Условие","НЕ ЭтоДополнительноеСведение","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +#КонецЕсли @@ -233,6 +226,10 @@ View true + + InputByString + true + Constant.АдресПубликацииИнформационнойБазыВИнтернете @@ -251,6 +248,10 @@ Read true + + View + true + CommonForm.ПанельОтчетов @@ -277,54 +278,6 @@ true - - Catalog.ШаблоныСообщенийПрисоединенныеФайлы - - Read - true - - #ПоЗначениямРасширенный( "Справочник.ШаблоныСообщенийПрисоединенныеФайлы", "","", -"", -"", -"Пользователи", "Т.ВладелецФайла.Автор", "ИЛИ", -"Условие","НЕ ЕСТЬNULL(Т.ВладелецФайла.ТолькоДляАвтора, Истина)", "", "", "", "", "","", "", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") - - - - Insert - true - - #ПоЗначениямРасширенный( "Справочник.ШаблоныСообщенийПрисоединенныеФайлы", "","", -"", -"", -"Пользователи", "Т.ВладелецФайла.Автор", "ИЛИ", -"Условие","НЕ ЕСТЬNULL(Т.ВладелецФайла.ТолькоДляАвтора, Истина)", "", "", "", "", "","", "", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") - - - - Update - true - - #ПоЗначениямРасширенный( "Справочник.ШаблоныСообщенийПрисоединенныеФайлы", "","", -"", -"", -"Пользователи", "Т.ВладелецФайла.Автор", "ИЛИ", -"Условие","НЕ ЕСТЬNULL(Т.ВладелецФайла.ТолькоДляАвтора, Истина)", "", "", "", "", "","", "", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") - - - - View - true - - - Edit - true - - - InputByString - true - - SessionParameter.БуферОбмена @@ -336,66 +289,6 @@ true - - Catalog.ШаблоныСообщений - - Read - true - - #ПоЗначениямРасширенный( "Справочник.ШаблоныСообщений", "","", -"", -"", -"Пользователи", "Т.Автор", "ИЛИ", -"Условие","НЕ Т.ТолькоДляАвтора", "", "", "", "", "","", "", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") - - - - Insert - true - - #ПоЗначениямРасширенный( "Справочник.ШаблоныСообщений", "","", -"", -"", -"Пользователи", "Т.Автор", "ИЛИ", -"Условие","НЕ Т.ТолькоДляАвтора", "", "", "", "", "","", "", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") - - - - Update - true - - #ПоЗначениямРасширенный( "Справочник.ШаблоныСообщений", "","", -"", -"", -"Пользователи", "Т.Автор", "ИЛИ", -"Условие","НЕ Т.ТолькоДляАвтора", "", "", "", "", "","", "", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") - - - - View - true - - - InteractiveInsert - true - - - Edit - true - - - InteractiveSetDeletionMark - true - - - InteractiveClearDeletionMark - true - - - InputByString - true - - CommonCommand.НастроитьПрава @@ -410,6 +303,17 @@ true + + InformationRegister.СлужебныеАдресныеСведения + + Read + true + + + View + true + + CommonForm.ФормаВариантаОтчета @@ -424,6 +328,17 @@ true + + InformationRegister.УровниСокращенийАдресныхСведений + + Read + true + + + View + true + + Constant.ИспользоватьСинхронизациюДанныхВЛокальномРежиме @@ -509,7 +424,7 @@ - CommonForm.ДоступныеВидыКлиентовВнешнейКомпоненты + CommonForm.УстановкаВнешнейКомпонентыНевозможна View true @@ -649,6 +564,21 @@ true + + Catalog.ОбщиеВнешниеКомпоненты + + Read + true + + + View + true + + + InputByString + true + + Constant.СписокЗапрещенныхРасширенийОбластиДанных @@ -682,20 +612,6 @@ true - - CommonCommand.ОтправитьПисьмо - - View - true - - - - InformationRegister.ПричиныИзмененияАдресныхСведений - - Read - true - - InformationRegister.СтатусыСинхронизацииФайловСОблачнымСервисом @@ -747,6 +663,17 @@ true + + InformationRegister.ПричиныИзмененияАдресныхСведений + + Read + true + + + View + true + + DataProcessor.ЗагрузкаДанныхИзФайла @@ -783,6 +710,17 @@ true + + InformationRegister.ЗагруженныеВерсииАдресныхСведений + + Read + true + + + View + true + + DataProcessor.ИнформацияПриЗапуске.Command.ИнформацияПриЗапуске @@ -843,7 +781,11 @@ Update true - ГДЕ Ссылка = &ТекущийПользователь + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +ГДЕ Ссылка = &ТекущийПользователь +#КонецЕсли @@ -927,21 +869,33 @@ Read true - ГДЕ Пользователь = &АвторизованныйПользователь + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +ГДЕ Пользователь = &АвторизованныйПользователь +#КонецЕсли Insert true - ГДЕ Пользователь = &АвторизованныйПользователь + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +ГДЕ Пользователь = &АвторизованныйПользователь +#КонецЕсли Update true - ГДЕ Пользователь = &АвторизованныйПользователь + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +ГДЕ Пользователь = &АвторизованныйПользователь +#КонецЕсли @@ -960,13 +914,6 @@ true - - CommonCommand.ОтправитьSMS - - View - true - - CommonForm.ФормаНастроекОтчета @@ -1086,13 +1033,6 @@ true - - InformationRegister.ДополнительныеАдресныеСведения - - Read - true - - DataProcessor.РасширенныйВводКонтактнойИнформации @@ -1104,13 +1044,6 @@ true - - InformationRegister.ОриентирыАдресныхОбъектов - - Read - true - - CommonForm.ПраваДоступа @@ -1210,6 +1143,17 @@ true + + InformationRegister.ДополнительныеАдресныеСведения + + Read + true + + + View + true + + Constant.МаксимальноеКоличествоИсполняющихФоновыхЗаданий @@ -1264,6 +1208,17 @@ true + + InformationRegister.ПользовательскиеМакетыПечати + + Read + true + + + View + true + + CommonCommand.УстановитьРасширениеРаботыСФайлами @@ -1533,7 +1488,7 @@ - CommonForm.НастройкаОсновногоРабочегоКаталога + CommonForm.НастройкаРабочегоКаталога View true @@ -1556,11 +1511,15 @@ Read true - #ПоЗначениямРасширенный( "Справочник.ЗначенияСвойствОбъектовИерархия", "", "", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоЗначениямРасширенный( "Справочник.ЗначенияСвойствОбъектовИерархия", "", "", "", "", "ДополнительныеСведения","Т.Владелец","ИЛИ", -"Условие","НЕ Т.Владелец.ЭтоДополнительноеСведение","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +"Условие","НЕ Т.Владелец.ЭтоДополнительноеСведение","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +#КонецЕсли @@ -1667,6 +1626,17 @@ true + + InformationRegister.АдресныеОбъекты + + Read + true + + + View + true + + Constant.НастройкаПодчиненногоУзлаРИБЗавершена @@ -1684,11 +1654,15 @@ Read true - #ПоЗначениямРасширенный( "Справочник.ЗначенияСвойствОбъектов", "", "", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоЗначениямРасширенный( "Справочник.ЗначенияСвойствОбъектов", "", "", "", "", "ДополнительныеСведения","Т.Владелец","ИЛИ", -"Условие","НЕ Т.Владелец.ЭтоДополнительноеСведение","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +"Условие","НЕ Т.Владелец.ЭтоДополнительноеСведение","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +#КонецЕсли @@ -1722,6 +1696,17 @@ true + + InformationRegister.ИсторияАдресныхОбъектов + + Read + true + + + View + true + + CommonForm.ВыборДействияПриОбнаруженииОтличийФайла @@ -1740,13 +1725,6 @@ true - - InformationRegister.ИсторияАдресныхОбъектов - - Read - true - - SessionParameter.ПараметрыОбработчикаОбновления @@ -1760,16 +1738,24 @@ Read true - ГДЕ (Пользователь = &ТекущийПользователь - ИЛИ Вариант.Автор = &ТекущийПользователь) + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляРегистра("ИдентификаторыОбъектовМетаданных.РегистрСведенийНастройкиВариантовОтчетов", "Пользователь", "Вариант", "", "", "") +#Иначе +ГДЕ (Пользователь = &АвторизованныйПользователь + ИЛИ Вариант.Автор = &АвторизованныйПользователь) +#КонецЕсли Update true - ГДЕ (Пользователь = &ТекущийПользователь - ИЛИ Вариант.Автор = &ТекущийПользователь) + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляРегистра("ИдентификаторыОбъектовМетаданных.РегистрСведенийНастройкиВариантовОтчетов", "Пользователь", "Вариант", "", "", "") +#Иначе +ГДЕ (Пользователь = &АвторизованныйПользователь + ИЛИ Вариант.Автор = &АвторизованныйПользователь) +#КонецЕсли @@ -1780,13 +1766,6 @@ true - - InformationRegister.УровниСокращенийАдресныхСведений - - Read - true - - Constant.РазмерБлокаПередачиФайла @@ -2126,16 +2105,20 @@ - InformationRegister.АдресныеОбъекты + SessionParameter.РаботаСВнешнимиРесурсамиЗаблокирована - Read + Get true - SessionParameter.РаботаСВнешнимиРесурсамиЗаблокирована + InformationRegister.ОриентирыАдресныхОбъектов - Get + Read + true + + + View true @@ -2321,13 +2304,371 @@ true - - InformationRegister.ЗагруженныеВерсииАдресныхСведений - - Read - true - - + + ДляОбъекта(ПолеОбъекта) + // ДляОбъекта(ПолеОбъекта = "") +// Шаблон используется для ограничения элементов справочников, документов и +// других списков объектов по полю Ссылка, а также элементов зависимых списков +// объектов и записей регистров через поле объекта-владельца. +// +// Параметры: +// ПолеОбъекта - имя поля, содержащего ссылку на объект, от которого зависит элемент списка. +// Значение "" (по умолчанию) то же, что имя поля "Ссылка". +// + +#Если &СпискиСОтключеннымОграничениемЧтения = "Неопределено" #Тогда + // Информационная база заблокирована для обновления. + ГДЕ ЛОЖЬ + +#ИначеЕсли Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1,") + И Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Требуется обновить шаблон на актуальную версию, поставляемую в роли ИзменениеУчастниковГруппДоступа по причине: Используется устаревшая версия 1 шаблона ограничения доступа ДляОбъекта. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли &СпискиСОтключеннымОграничениемЧтения = "Все" #Тогда + // У пользователя отключены все виды доступа или + // ограничение на уровне записей не используется. + +#ИначеЕсли СтрСодержит(&СпискиСОтключеннымОграничениемЧтения, #ИмяТекущейТаблицы) #Тогда + // У пользователя отключено ограничение для текущей таблицы. + +#ИначеЕсли СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Версия программы обновлена, требуется перезапустить сеанс. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли #ИмяТекущегоПраваДоступа <> "Чтение" #Тогда + // Проверка прав Добавление, Изменение, Удаление выполняется ПередЗаписью / ПриЗаписи. + ГДЕ ИСТИНА + +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам +#Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа +#Иначе + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа +#КонецЕсли + ПО + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + И РазрешенныеКлючиДоступа.Пользователь = &ТекущийПользователь + #Иначе + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + И РазрешенныеКлючиДоступа.ВнешнийПользователь = &ТекущийВнешнийПользователь + #КонецЕсли + ) +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + ПО + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + #Иначе + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + #КонецЕсли + И РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя) + ) +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + ГДЕ + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + И ( + ИСТИНА В ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ИЗ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа + #Иначе + ИЗ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа + #КонецЕсли + ГДЕ + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + И РазрешенныеКлючиДоступа.Пользователь = &ТекущийПользователь + #Иначе + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + И РазрешенныеКлючиДоступа.ВнешнийПользователь = &ТекущийВнешнийПользователь + #КонецЕсли + ) + ИЛИ + ИСТИНА В ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + ГДЕ + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + #Иначе + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + #КонецЕсли + И РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя) + ) + ) + ) + +#Иначе + Ошибка: Требуется актуализировать ограничение доступа по причине: Не удалось определить вариант ограничения доступа в параметрах сеанса для шаблона ДляОбъекта со значением параметра "#ПолеОбъекта". Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. +#КонецЕсли + + + + ДляРегистра(Регистр, Поле1, Поле2, Поле3, Поле4, Поле5) + // ДляРегистра(Регистр, Поле1, Поле2 = "", Поле3 = "", Поле4 = "", Поле5 = "") +// Шаблон используется для ограничения групп записей регистров. +// +// Параметры: +// Регистр - имя предопределенного элемента справочника Идентификаторы объектов метаданных или справочника +// Идентификаторы объектов расширений в формате: имя справочника с точкой и полное имя таблицы +// без точки, например, ИдентификаторыОбъектовМетаданных.РегистрНакопленияОстаткиНаСкладах; +// - имя отдельного регистра ключей в формате КлючиДоступаКРегистру<ОстатокИмени>, +// например, КлючиДоступаКРегиструОстаткиНаСкладах. +// Поле1 - имя первого поля (измерения, ресурса, реквизита), которое будет соединяться с полем Поле1 +// регистра сведений КлючиДоступаКРегистр* +// Поле2 - аналогично предыдущему параметру, если используется в ограничении доступа к регистру. +// ... +// Поле5 - аналогично предыдущему параметру, если используется в ограничении доступа к регистру. + +#Если &СпискиСОтключеннымОграничениемЧтения = "Неопределено" #Тогда + // Информационная база заблокирована для обновления. + ГДЕ ЛОЖЬ + +#ИначеЕсли Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляРегистра1,") #Тогда + И Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляРегистра1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Требуется обновить шаблон на актуальную версию, поставляемую в роли ИзменениеУчастниковГруппДоступа по причине: Используется устаревшая версия 1 шаблона ограничения доступа ДляРегистра. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли &СпискиСОтключеннымОграничениемЧтения = "Все" #Тогда + // У пользователя отключены все виды доступа или + // ограничение на уровне записей не используется. + +#ИначеЕсли СтрСодержит(&СпискиСОтключеннымОграничениемЧтения, #ИмяТекущейТаблицы) #Тогда + // У пользователя отключено ограничение для текущей таблицы. + +#ИначеЕсли СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляРегистра1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Версия программы обновлена, требуется перезапустить сеанс. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли #ИмяТекущегоПраваДоступа <> "Чтение" #Тогда + // Проверка прав Добавление, Изменение, Удаление выполняется ПередЗаписью / ПриЗаписи. + ГДЕ ИСТИНА + +#ИначеЕсли Не СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":[#Регистр]:#Поле1:#Поле2:#Поле3:#Поле4:#Поле5;") + И Не СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":[#Регистр]:#Поле1:#Поле2:#Поле3:#Поле4:#Поле5;") #Тогда + + Ошибка: Требуется актуализировать ограничение доступа по причине: Не удалось определить вариант ограничения доступа в параметрах сеанса для шаблона ДляРегистра со значениями параметров "#Регистр", "#Поле1", "#Поле2", "#Поле3", "#Поле4", "#Поле5". Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. +#Иначе + +ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА +#Если Не СтрСодержит("#Регистр", "КлючиДоступаКРегистру") #Тогда + ИЗ РегистрСведений.КлючиДоступаКРегистрам КАК КлючиДоступаКРегистрам +#Иначе + ИЗ РегистрСведений.#Регистр КАК КлючиДоступаКРегистрам +#КонецЕсли +#Если Не СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":[#Регистр]:#Поле1:#Поле2:#Поле3:#Поле4:#Поле5;") #Тогда + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + +#ИначеЕсли &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа +#Иначе + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа +#КонецЕсли + ПО + #Если Не СтрСодержит("#Регистр", "КлючиДоступаКРегистру") #Тогда + КлючиДоступаКРегистрам.Регистр = Значение(Справочник.#Регистр) + #Иначе + ИСТИНА + #КонецЕсли + + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И КлючиДоступаКРегистрам.ДляВнешнихПользователей = ЛОЖЬ + #Иначе + И КлючиДоступаКРегистрам.ДляВнешнихПользователей = ИСТИНА + #КонецЕсли + + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле1 + #КонецЕсли + + #Если "#Поле2" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") #Тогда + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле2 + #Иначе + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле2 + #КонецЕсли + #КонецЕсли + + #Если "#Поле3" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") #Тогда + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") #Тогда + + И КлючиДоступаКРегистрам.Поле3 = ТекущаяТаблица.#Поле3 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле3 + #Иначе + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле3 + #КонецЕсли + #КонецЕсли + + #Если "#Поле4" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле4;") #Тогда + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") #Тогда + + И КлючиДоступаКРегистрам.Поле4 = ТекущаяТаблица.#Поле4 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") #Тогда + + И КлючиДоступаКРегистрам.Поле3 = ТекущаяТаблица.#Поле4 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле4 + #Иначе + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле4 + #КонецЕсли + #КонецЕсли + + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле4;") #Тогда + + И КлючиДоступаКРегистрам.Поле5 = ТекущаяТаблица.#Поле5 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") #Тогда + + И КлючиДоступаКРегистрам.Поле4 = ТекущаяТаблица.#Поле5 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") #Тогда + + И КлючиДоступаКРегистрам.Поле3 = ТекущаяТаблица.#Поле5 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле5 + #Иначе + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле5 + #КонецЕсли + #КонецЕсли + + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле4;") #Тогда + + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = ТекущаяТаблица.#Поле5 + #ИначеЕсли "#Поле5" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") #Тогда + + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле4 = ТекущаяТаблица.#Поле5 + #ИначеЕсли "#Поле4" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле4;") #Тогда + И КлючиДоступаКРегистрам.Поле4 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле5" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") #Тогда + + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле3 = ТекущаяТаблица.#Поле5 + #ИначеЕсли "#Поле3" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле3;") #Тогда + И КлючиДоступаКРегистрам.Поле3 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле4" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле4;") #Тогда + И КлючиДоступаКРегистрам.Поле4 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле5" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле5 + #ИначеЕсли "#Поле2" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле2;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле3" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле3;") #Тогда + И КлючиДоступаКРегистрам.Поле3 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле4" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле4;") #Тогда + И КлючиДоступаКРегистрам.Поле4 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле5" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Иначе + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле5 + #Иначе + И КлючиДоступаКРегистрам.Поле1 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле2" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле2;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле3" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле3;") #Тогда + И КлючиДоступаКРегистрам.Поле3 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле4" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле4;") #Тогда + И КлючиДоступаКРегистрам.Поле4 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле5" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #КонецЕсли + + #Если Не СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":[#Регистр]:#Поле1:#Поле2:#Поле3:#Поле4:#Поле5;") #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКРегистрам.КлючДоступа + И РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя) + + #ИначеЕсли &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКРегистрам.КлючДоступа + И РазрешенныеКлючиДоступа.Пользователь = &ТекущийПользователь + #Иначе + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКРегистрам.КлючДоступа + И РазрешенныеКлючиДоступа.ВнешнийПользователь = &ТекущийВнешнийПользователь + #КонецЕсли + ) + +#КонецЕсли + + ПоЗначениям // ПоЗначениям(Таблица, -, Модификатор, В1,П1, В2,П2, ..., В(n), П(n)). @@ -2392,100 +2733,52 @@ ( Истина И ("#Параметр(4)" = "" И "#Параметр(5)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(4),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(4),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(4),")) И ("#Параметр(6)" = "" И "#Параметр(7)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),")) И ("#Параметр(8)" = "" И "#Параметр(9)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(8),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(8),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(8),")) И ("#Параметр(10)" = "" И "#Параметр(11)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(10),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(10),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(10),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),")) И ("#Параметр(14)" = "" И "#Параметр(15)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(14),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(14),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(14),")) И ("#Параметр(16)" = "" И "#Параметр(17)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(16),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(16),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(16),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),")) И ("#Параметр(20)" = "" И "#Параметр(21)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(20),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(20),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(20),")) И ("#Параметр(22)" = "" И "#Параметр(23)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(22),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(22),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(22),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),")) И ("#Параметр(26)" = "" И "#Параметр(27)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(26),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(26),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(26),")) И ("#Параметр(28)" = "" И "#Параметр(29)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(28),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(28),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(28),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),")) И ("#Параметр(32)" = "" И "#Параметр(33)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(32),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(32),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(32),")) И ("#Параметр(34)" = "" И "#Параметр(35)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(34),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(34),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(34),")) ) #Тогда Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). @@ -2507,8 +2800,10 @@ ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если #ИмяТекущегоПраваДоступа = "Изменение" #Тогда И ТаблицыГруппДоступа.Изменение + #ИначеЕсли #ИмяТекущегоПраваДоступа = "Добавление" #Тогда + И ТаблицыГруппДоступа.Добавление #КонецЕсли ) И ГруппыДоступа.Ссылка В @@ -2701,7 +2996,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(Т.#Параметр(5), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 2. @@ -2875,6 +3170,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 3. @@ -3048,6 +3345,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(9), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 4. @@ -3221,6 +3520,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(11), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 5. @@ -3394,6 +3695,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 6. @@ -3567,6 +3870,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(15), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 7. @@ -3740,6 +4045,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(17), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 8. @@ -3913,6 +4220,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 9. @@ -4086,6 +4395,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(21), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 10. @@ -4259,6 +4570,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(23), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 11. @@ -4432,6 +4745,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 12. @@ -4605,6 +4920,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(27), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 13. @@ -4778,6 +5095,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(29), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 14. @@ -4951,6 +5270,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 15. @@ -5124,6 +5445,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(33), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 16. @@ -5297,6 +5620,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(35), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли ) @@ -5383,100 +5708,52 @@ ( Истина И ("#Параметр(6)" = "" И "#Параметр(7)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),")) И ("#Параметр(9)" = "" И "#Параметр(10)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),")) И ("#Параметр(15)" = "" И "#Параметр(16)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),")) И ("#Параметр(21)" = "" И "#Параметр(22)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),")) И ("#Параметр(27)" = "" И "#Параметр(28)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),")) И ("#Параметр(33)" = "" И "#Параметр(34)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),")) И ("#Параметр(36)" = "" И "#Параметр(37)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),")) И ("#Параметр(39)" = "" И "#Параметр(40)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),")) И ("#Параметр(42)" = "" И "#Параметр(43)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),")) И ("#Параметр(45)" = "" И "#Параметр(46)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),")) И ("#Параметр(48)" = "" И "#Параметр(49)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),")) И ("#Параметр(51)" = "" И "#Параметр(52)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),")) ) #Тогда Т ИЗ Т // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). @@ -5503,8 +5780,10 @@ ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если #ИмяТекущегоПраваДоступа = "Изменение" #Тогда И ТаблицыГруппДоступа.Изменение + #ИначеЕсли #ИмяТекущегоПраваДоступа = "Добавление" #Тогда + И ТаблицыГруппДоступа.Добавление #КонецЕсли ) И ГруппыДоступа.Ссылка В @@ -5699,7 +5978,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(8) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -5876,7 +6155,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(10), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(11) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -6053,7 +6332,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(14) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -6230,7 +6509,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(16), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(17) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -6407,7 +6686,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(20) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -6584,7 +6863,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(22), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(23) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -6761,7 +7040,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(26) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -6938,7 +7217,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(28), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(29) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -7115,7 +7394,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(32) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -7292,7 +7571,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(34), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(35) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -7469,7 +7748,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(37), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(38) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -7646,7 +7925,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(40), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(41) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -7823,7 +8102,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(43), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(44) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -8000,7 +8279,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(46), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(47) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -8177,7 +8456,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(49), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(50) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -8354,7 +8633,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(52), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(53) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. diff --git a/SSL/src/Roles/БазовыеПрава/БазовыеПрава.mdo b/SSL/src/Roles/БазовыеПраваБСП/БазовыеПраваБСП.mdo similarity index 80% rename from SSL/src/Roles/БазовыеПрава/БазовыеПрава.mdo rename to SSL/src/Roles/БазовыеПраваБСП/БазовыеПраваБСП.mdo index a99d267b4..1dc23ffab 100644 --- a/SSL/src/Roles/БазовыеПрава/БазовыеПрава.mdo +++ b/SSL/src/Roles/БазовыеПраваБСП/БазовыеПраваБСП.mdo @@ -1,9 +1,9 @@ - БазовыеПрава + БазовыеПраваБСП ru - Базовые права + Базовые права БСП Это базовые права БСП, которые должны быть у любого пользователя (кроме внешних пользователей) diff --git a/SSL/src/Roles/БазовыеПраваВнешнегоПользователя/Rights.rights b/SSL/src/Roles/БазовыеПраваВнешнихПользователейБСП/Rights.rights similarity index 86% rename from SSL/src/Roles/БазовыеПраваВнешнегоПользователя/Rights.rights rename to SSL/src/Roles/БазовыеПраваВнешнихПользователейБСП/Rights.rights index be5ae58e5..4f9bd68ca 100644 --- a/SSL/src/Roles/БазовыеПраваВнешнегоПользователя/Rights.rights +++ b/SSL/src/Roles/БазовыеПраваВнешнихПользователейБСП/Rights.rights @@ -74,9 +74,13 @@ Read true - ВариантыОтчетов ГДЕ (ВариантыОтчетов.Пользовательский = ЛОЖЬ + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +ВариантыОтчетов ГДЕ (ВариантыОтчетов.Пользовательский = ЛОЖЬ ИЛИ ВариантыОтчетов.ТолькоДляАвтора = ЛОЖЬ - ИЛИ ВариантыОтчетов.Автор = &АвторизованныйПользователь) + ИЛИ ВариантыОтчетов.Автор = &АвторизованныйПользователь) +#КонецЕсли @@ -88,13 +92,6 @@ true - - InformationRegister.СлужебныеАдресныеСведения - - Read - true - - Constant.ДатаУведомленияОНовыхЗадачах @@ -141,18 +138,10 @@ Read true - - Update - true - View true - - Edit - true - Constant.ВерсияДатЗапретаИзменения @@ -204,6 +193,10 @@ Read true + + View + true + CommonForm.ПанельОтчетов @@ -248,6 +241,17 @@ true + + InformationRegister.СлужебныеАдресныеСведения + + Read + true + + + View + true + + CommonForm.ФормаВариантаОтчета @@ -262,6 +266,17 @@ true + + InformationRegister.УровниСокращенийАдресныхСведений + + Read + true + + + View + true + + Constant.ИспользоватьСинхронизациюДанныхВЛокальномРежиме @@ -354,7 +369,7 @@ - CommonForm.ДоступныеВидыКлиентовВнешнейКомпоненты + CommonForm.УстановкаВнешнейКомпонентыНевозможна View true @@ -483,6 +498,13 @@ true + + Catalog.ОбщиеВнешниеКомпоненты + + Read + true + + Constant.СписокЗапрещенныхРасширенийОбластиДанных @@ -516,13 +538,6 @@ true - - InformationRegister.ПричиныИзмененияАдресныхСведений - - Read - true - - InformationRegister.СтатусыСинхронизацииФайловСОблачнымСервисом @@ -574,6 +589,17 @@ true + + InformationRegister.ПричиныИзмененияАдресныхСведений + + Read + true + + + View + true + + DataProcessor.ЗагрузкаДанныхИзФайла @@ -603,6 +629,17 @@ true + + InformationRegister.ЗагруженныеВерсииАдресныхСведений + + Read + true + + + View + true + + DataProcessor.ИнформацияПриЗапуске.Command.ИнформацияПриЗапуске @@ -714,21 +751,33 @@ Read true - ГДЕ Пользователь = &АвторизованныйПользователь + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +ГДЕ Пользователь = &АвторизованныйПользователь +#КонецЕсли Insert true - ГДЕ Пользователь = &АвторизованныйПользователь + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +ГДЕ Пользователь = &АвторизованныйПользователь +#КонецЕсли Update true - ГДЕ Пользователь = &АвторизованныйПользователь + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +ГДЕ Пользователь = &АвторизованныйПользователь +#КонецЕсли @@ -844,13 +893,6 @@ true - - InformationRegister.ДополнительныеАдресныеСведения - - Read - true - - DataProcessor.РасширенныйВводКонтактнойИнформации @@ -862,13 +904,6 @@ true - - InformationRegister.ОриентирыАдресныхОбъектов - - Read - true - - CommonForm.ПраваДоступа @@ -968,6 +1003,17 @@ true + + InformationRegister.ДополнительныеАдресныеСведения + + Read + true + + + View + true + + Constant.МаксимальноеКоличествоИсполняющихФоновыхЗаданий @@ -1004,6 +1050,17 @@ true + + InformationRegister.ПользовательскиеМакетыПечати + + Read + true + + + View + true + + CommonCommand.УстановитьРасширениеРаботыСФайлами @@ -1049,15 +1106,23 @@ Read true - #ПоЗначениям( "Справочник.ВнешниеПользователи", "", "", -"ВнешниеПользователи", "ссылка", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","") + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоЗначениям( "Справочник.ВнешниеПользователи", "", "", +"ВнешниеПользователи", "ссылка", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","") +#КонецЕсли Update true - ГДЕ Ссылка = &ТекущийВнешнийПользователь + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +ГДЕ Ссылка = &ТекущийВнешнийПользователь +#КонецЕсли @@ -1252,7 +1317,7 @@ - CommonForm.НастройкаОсновногоРабочегоКаталога + CommonForm.НастройкаРабочегоКаталога View true @@ -1364,6 +1429,17 @@ true + + InformationRegister.АдресныеОбъекты + + Read + true + + + View + true + + Constant.НастройкаПодчиненногоУзлаРИБЗавершена @@ -1390,6 +1466,17 @@ true + + InformationRegister.ИсторияАдресныхОбъектов + + Read + true + + + View + true + + CommonForm.ВыборДействияПриОбнаруженииОтличийФайла @@ -1408,13 +1495,6 @@ true - - InformationRegister.ИсторияАдресныхОбъектов - - Read - true - - SessionParameter.ПараметрыОбработчикаОбновления @@ -1428,16 +1508,24 @@ Read true - ГДЕ (Пользователь = &ТекущийПользователь - ИЛИ Вариант.Автор = &ТекущийПользователь) + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляРегистра("ИдентификаторыОбъектовМетаданных.РегистрСведенийНастройкиВариантовОтчетов", "Пользователь", "Вариант", "", "", "") +#Иначе +ГДЕ (Пользователь = &АвторизованныйПользователь + ИЛИ Вариант.Автор = &АвторизованныйПользователь) +#КонецЕсли Update true - ГДЕ (Пользователь = &ТекущийПользователь - ИЛИ Вариант.Автор = &ТекущийПользователь) + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляРегистра("ИдентификаторыОбъектовМетаданных.РегистрСведенийНастройкиВариантовОтчетов", "Пользователь", "Вариант", "", "", "") +#Иначе +ГДЕ (Пользователь = &АвторизованныйПользователь + ИЛИ Вариант.Автор = &АвторизованныйПользователь) +#КонецЕсли @@ -1448,13 +1536,6 @@ true - - InformationRegister.УровниСокращенийАдресныхСведений - - Read - true - - Constant.РазмерБлокаПередачиФайла @@ -1556,7 +1637,11 @@ Read true - ГДЕ Ссылка = Значение(Справочник.ГруппыВнешнихПользователей.ВсеВнешниеПользователи) + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +ГДЕ Ссылка = Значение(Справочник.ГруппыВнешнихПользователей.ВсеВнешниеПользователи) +#КонецЕсли @@ -1801,16 +1886,20 @@ - InformationRegister.АдресныеОбъекты + SessionParameter.РаботаСВнешнимиРесурсамиЗаблокирована - Read + Get true - SessionParameter.РаботаСВнешнимиРесурсамиЗаблокирована + InformationRegister.ОриентирыАдресныхОбъектов - Get + Read + true + + + View true @@ -1963,13 +2052,371 @@ true - - InformationRegister.ЗагруженныеВерсииАдресныхСведений - - Read - true - - + + ДляОбъекта(ПолеОбъекта) + // ДляОбъекта(ПолеОбъекта = "") +// Шаблон используется для ограничения элементов справочников, документов и +// других списков объектов по полю Ссылка, а также элементов зависимых списков +// объектов и записей регистров через поле объекта-владельца. +// +// Параметры: +// ПолеОбъекта - имя поля, содержащего ссылку на объект, от которого зависит элемент списка. +// Значение "" (по умолчанию) то же, что имя поля "Ссылка". +// + +#Если &СпискиСОтключеннымОграничениемЧтения = "Неопределено" #Тогда + // Информационная база заблокирована для обновления. + ГДЕ ЛОЖЬ + +#ИначеЕсли Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1,") + И Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Требуется обновить шаблон на актуальную версию, поставляемую в роли ИзменениеУчастниковГруппДоступа по причине: Используется устаревшая версия 1 шаблона ограничения доступа ДляОбъекта. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли &СпискиСОтключеннымОграничениемЧтения = "Все" #Тогда + // У пользователя отключены все виды доступа или + // ограничение на уровне записей не используется. + +#ИначеЕсли СтрСодержит(&СпискиСОтключеннымОграничениемЧтения, #ИмяТекущейТаблицы) #Тогда + // У пользователя отключено ограничение для текущей таблицы. + +#ИначеЕсли СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Версия программы обновлена, требуется перезапустить сеанс. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли #ИмяТекущегоПраваДоступа <> "Чтение" #Тогда + // Проверка прав Добавление, Изменение, Удаление выполняется ПередЗаписью / ПриЗаписи. + ГДЕ ИСТИНА + +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам +#Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа +#Иначе + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа +#КонецЕсли + ПО + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + И РазрешенныеКлючиДоступа.Пользователь = &ТекущийПользователь + #Иначе + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + И РазрешенныеКлючиДоступа.ВнешнийПользователь = &ТекущийВнешнийПользователь + #КонецЕсли + ) +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + ПО + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + #Иначе + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + #КонецЕсли + И РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя) + ) +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + ГДЕ + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + И ( + ИСТИНА В ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ИЗ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа + #Иначе + ИЗ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа + #КонецЕсли + ГДЕ + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + И РазрешенныеКлючиДоступа.Пользователь = &ТекущийПользователь + #Иначе + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + И РазрешенныеКлючиДоступа.ВнешнийПользователь = &ТекущийВнешнийПользователь + #КонецЕсли + ) + ИЛИ + ИСТИНА В ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + ГДЕ + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + #Иначе + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + #КонецЕсли + И РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя) + ) + ) + ) + +#Иначе + Ошибка: Требуется актуализировать ограничение доступа по причине: Не удалось определить вариант ограничения доступа в параметрах сеанса для шаблона ДляОбъекта со значением параметра "#ПолеОбъекта". Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. +#КонецЕсли + + + + ДляРегистра(Регистр, Поле1, Поле2, Поле3, Поле4, Поле5) + // ДляРегистра(Регистр, Поле1, Поле2 = "", Поле3 = "", Поле4 = "", Поле5 = "") +// Шаблон используется для ограничения групп записей регистров. +// +// Параметры: +// Регистр - имя предопределенного элемента справочника Идентификаторы объектов метаданных или справочника +// Идентификаторы объектов расширений в формате: имя справочника с точкой и полное имя таблицы +// без точки, например, ИдентификаторыОбъектовМетаданных.РегистрНакопленияОстаткиНаСкладах; +// - имя отдельного регистра ключей в формате КлючиДоступаКРегистру<ОстатокИмени>, +// например, КлючиДоступаКРегиструОстаткиНаСкладах. +// Поле1 - имя первого поля (измерения, ресурса, реквизита), которое будет соединяться с полем Поле1 +// регистра сведений КлючиДоступаКРегистр* +// Поле2 - аналогично предыдущему параметру, если используется в ограничении доступа к регистру. +// ... +// Поле5 - аналогично предыдущему параметру, если используется в ограничении доступа к регистру. + +#Если &СпискиСОтключеннымОграничениемЧтения = "Неопределено" #Тогда + // Информационная база заблокирована для обновления. + ГДЕ ЛОЖЬ + +#ИначеЕсли Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляРегистра1,") #Тогда + И Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляРегистра1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Требуется обновить шаблон на актуальную версию, поставляемую в роли ИзменениеУчастниковГруппДоступа по причине: Используется устаревшая версия 1 шаблона ограничения доступа ДляРегистра. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли &СпискиСОтключеннымОграничениемЧтения = "Все" #Тогда + // У пользователя отключены все виды доступа или + // ограничение на уровне записей не используется. + +#ИначеЕсли СтрСодержит(&СпискиСОтключеннымОграничениемЧтения, #ИмяТекущейТаблицы) #Тогда + // У пользователя отключено ограничение для текущей таблицы. + +#ИначеЕсли СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляРегистра1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Версия программы обновлена, требуется перезапустить сеанс. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли #ИмяТекущегоПраваДоступа <> "Чтение" #Тогда + // Проверка прав Добавление, Изменение, Удаление выполняется ПередЗаписью / ПриЗаписи. + ГДЕ ИСТИНА + +#ИначеЕсли Не СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":[#Регистр]:#Поле1:#Поле2:#Поле3:#Поле4:#Поле5;") + И Не СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":[#Регистр]:#Поле1:#Поле2:#Поле3:#Поле4:#Поле5;") #Тогда + + Ошибка: Требуется актуализировать ограничение доступа по причине: Не удалось определить вариант ограничения доступа в параметрах сеанса для шаблона ДляРегистра со значениями параметров "#Регистр", "#Поле1", "#Поле2", "#Поле3", "#Поле4", "#Поле5". Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. +#Иначе + +ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА +#Если Не СтрСодержит("#Регистр", "КлючиДоступаКРегистру") #Тогда + ИЗ РегистрСведений.КлючиДоступаКРегистрам КАК КлючиДоступаКРегистрам +#Иначе + ИЗ РегистрСведений.#Регистр КАК КлючиДоступаКРегистрам +#КонецЕсли +#Если Не СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":[#Регистр]:#Поле1:#Поле2:#Поле3:#Поле4:#Поле5;") #Тогда + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + +#ИначеЕсли &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа +#Иначе + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа +#КонецЕсли + ПО + #Если Не СтрСодержит("#Регистр", "КлючиДоступаКРегистру") #Тогда + КлючиДоступаКРегистрам.Регистр = Значение(Справочник.#Регистр) + #Иначе + ИСТИНА + #КонецЕсли + + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И КлючиДоступаКРегистрам.ДляВнешнихПользователей = ЛОЖЬ + #Иначе + И КлючиДоступаКРегистрам.ДляВнешнихПользователей = ИСТИНА + #КонецЕсли + + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле1 + #КонецЕсли + + #Если "#Поле2" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") #Тогда + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле2 + #Иначе + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле2 + #КонецЕсли + #КонецЕсли + + #Если "#Поле3" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") #Тогда + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") #Тогда + + И КлючиДоступаКРегистрам.Поле3 = ТекущаяТаблица.#Поле3 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле3 + #Иначе + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле3 + #КонецЕсли + #КонецЕсли + + #Если "#Поле4" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле4;") #Тогда + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") #Тогда + + И КлючиДоступаКРегистрам.Поле4 = ТекущаяТаблица.#Поле4 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") #Тогда + + И КлючиДоступаКРегистрам.Поле3 = ТекущаяТаблица.#Поле4 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле4 + #Иначе + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле4 + #КонецЕсли + #КонецЕсли + + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле4;") #Тогда + + И КлючиДоступаКРегистрам.Поле5 = ТекущаяТаблица.#Поле5 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") #Тогда + + И КлючиДоступаКРегистрам.Поле4 = ТекущаяТаблица.#Поле5 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") #Тогда + + И КлючиДоступаКРегистрам.Поле3 = ТекущаяТаблица.#Поле5 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле5 + #Иначе + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле5 + #КонецЕсли + #КонецЕсли + + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле4;") #Тогда + + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = ТекущаяТаблица.#Поле5 + #ИначеЕсли "#Поле5" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") #Тогда + + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле4 = ТекущаяТаблица.#Поле5 + #ИначеЕсли "#Поле4" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле4;") #Тогда + И КлючиДоступаКРегистрам.Поле4 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле5" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") #Тогда + + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле3 = ТекущаяТаблица.#Поле5 + #ИначеЕсли "#Поле3" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле3;") #Тогда + И КлючиДоступаКРегистрам.Поле3 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле4" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле4;") #Тогда + И КлючиДоступаКРегистрам.Поле4 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле5" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле5 + #ИначеЕсли "#Поле2" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле2;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле3" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле3;") #Тогда + И КлючиДоступаКРегистрам.Поле3 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле4" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле4;") #Тогда + И КлючиДоступаКРегистрам.Поле4 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле5" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Иначе + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле5 + #Иначе + И КлючиДоступаКРегистрам.Поле1 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле2" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле2;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле3" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле3;") #Тогда + И КлючиДоступаКРегистрам.Поле3 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле4" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле4;") #Тогда + И КлючиДоступаКРегистрам.Поле4 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле5" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #КонецЕсли + + #Если Не СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":[#Регистр]:#Поле1:#Поле2:#Поле3:#Поле4:#Поле5;") #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКРегистрам.КлючДоступа + И РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя) + + #ИначеЕсли &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКРегистрам.КлючДоступа + И РазрешенныеКлючиДоступа.Пользователь = &ТекущийПользователь + #Иначе + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКРегистрам.КлючДоступа + И РазрешенныеКлючиДоступа.ВнешнийПользователь = &ТекущийВнешнийПользователь + #КонецЕсли + ) + +#КонецЕсли + + ПоЗначениям // ПоЗначениям(Таблица, -, Модификатор, В1,П1, В2,П2, ..., В(n), П(n)). @@ -2034,100 +2481,52 @@ ( Истина И ("#Параметр(4)" = "" И "#Параметр(5)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(4),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(4),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(4),")) И ("#Параметр(6)" = "" И "#Параметр(7)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),")) И ("#Параметр(8)" = "" И "#Параметр(9)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(8),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(8),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(8),")) И ("#Параметр(10)" = "" И "#Параметр(11)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(10),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(10),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(10),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),")) И ("#Параметр(14)" = "" И "#Параметр(15)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(14),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(14),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(14),")) И ("#Параметр(16)" = "" И "#Параметр(17)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(16),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(16),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(16),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),")) И ("#Параметр(20)" = "" И "#Параметр(21)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(20),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(20),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(20),")) И ("#Параметр(22)" = "" И "#Параметр(23)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(22),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(22),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(22),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),")) И ("#Параметр(26)" = "" И "#Параметр(27)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(26),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(26),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(26),")) И ("#Параметр(28)" = "" И "#Параметр(29)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(28),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(28),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(28),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),")) И ("#Параметр(32)" = "" И "#Параметр(33)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(32),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(32),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(32),")) И ("#Параметр(34)" = "" И "#Параметр(35)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(34),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(34),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(34),")) ) #Тогда Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). @@ -2149,8 +2548,10 @@ ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если #ИмяТекущегоПраваДоступа = "Изменение" #Тогда И ТаблицыГруппДоступа.Изменение + #ИначеЕсли #ИмяТекущегоПраваДоступа = "Добавление" #Тогда + И ТаблицыГруппДоступа.Добавление #КонецЕсли ) И ГруппыДоступа.Ссылка В @@ -2343,7 +2744,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(Т.#Параметр(5), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 2. @@ -2517,6 +2918,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 3. @@ -2690,6 +3093,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(9), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 4. @@ -2863,6 +3268,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(11), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 5. @@ -3036,6 +3443,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 6. @@ -3209,6 +3618,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(15), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 7. @@ -3382,6 +3793,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(17), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 8. @@ -3555,6 +3968,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 9. @@ -3728,6 +4143,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(21), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 10. @@ -3901,6 +4318,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(23), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 11. @@ -4074,6 +4493,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 12. @@ -4247,6 +4668,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(27), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 13. @@ -4420,6 +4843,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(29), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 14. @@ -4593,6 +5018,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 15. @@ -4766,6 +5193,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(33), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 16. @@ -4939,6 +5368,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(35), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли ) diff --git a/SSL/src/Roles/БазовыеПраваВнешнегоПользователя/БазовыеПраваВнешнегоПользователя.mdo b/SSL/src/Roles/БазовыеПраваВнешнихПользователейБСП/БазовыеПраваВнешнихПользователейБСП.mdo similarity index 67% rename from SSL/src/Roles/БазовыеПраваВнешнегоПользователя/БазовыеПраваВнешнегоПользователя.mdo rename to SSL/src/Roles/БазовыеПраваВнешнихПользователейБСП/БазовыеПраваВнешнихПользователейБСП.mdo index a2130bba4..edb968f0c 100644 --- a/SSL/src/Roles/БазовыеПраваВнешнегоПользователя/БазовыеПраваВнешнегоПользователя.mdo +++ b/SSL/src/Roles/БазовыеПраваВнешнихПользователейБСП/БазовыеПраваВнешнихПользователейБСП.mdo @@ -1,9 +1,9 @@ - БазовыеПраваВнешнегоПользователя + БазовыеПраваВнешнихПользователейБСП ru - Базовые права внешнего пользователя + Базовые права внешних пользователей БСП Это базовые права БСП, которые должны быть у любого внешнего пользователя diff --git a/SSL/src/Roles/ВыполнениеСинхронизацииДанных/Rights.rights b/SSL/src/Roles/ВыполнениеСинхронизацииДанных/Rights.rights index ed0aad726..1575b43ce 100644 --- a/SSL/src/Roles/ВыполнениеСинхронизацииДанных/Rights.rights +++ b/SSL/src/Roles/ВыполнениеСинхронизацииДанных/Rights.rights @@ -11,7 +11,14 @@ - CommonCommand.НастроитьПараметрыТранспортаСообщенийОбмена + WebService.Exchange_3_0_1_1.Operation.Download + + Use + true + + + + CommonCommand.НастройкиПодключения View true @@ -80,6 +87,13 @@ true + + WebService.Exchange_3_0_1_1.Operation.ReleaseFile + + Use + true + + WebService.Exchange.Operation.GetFileFromStorage @@ -216,6 +230,20 @@ true + + WebService.Exchange_3_0_1_1.Operation.GetFilePart + + Use + true + + + + WebService.Exchange_3_0_1_1.Operation.Upload + + Use + true + + CommonCommand.СобытияОтправки @@ -223,6 +251,13 @@ true + + WebService.Exchange_3_0_1_1.Operation.SaveFileFromParts + + Use + true + + WebService.Exchange_2_0_1_6.Operation.DownloadData @@ -293,6 +328,20 @@ true + + WebService.Exchange_3_0_1_1.Operation.Ping + + Use + true + + + + WebService.Exchange_3_0_1_1.Operation.GetContinuousOperationStatus + + Use + true + + WebService.Exchange_2_0_1_6.Operation.PutFilePart @@ -300,6 +349,13 @@ true + + WebService.Exchange_3_0_1_1.Operation.UploadData + + Use + true + + DataProcessor.ПомощникИнтерактивногоОбменаДанными @@ -325,17 +381,6 @@ true - - InformationRegister.НастройкиТранспортаОбмена - - Read - true - - - View - true - - InformationRegister.ПравилаДляОбменаДанными @@ -387,6 +432,13 @@ true + + WebService.Exchange_3_0_1_1.Operation.DownloadData + + Use + true + + WebService.Exchange_2_0_1_6.Operation.TestConnection @@ -415,6 +467,13 @@ true + + WebService.Exchange_3_0_1_1.Operation.PrepareGetFile + + Use + true + + WebService.Exchange.Operation.Download @@ -447,6 +506,13 @@ true + + WebService.Exchange_3_0_1_1.Operation.GetIBParameters + + Use + true + + WebService.EnterpriseDataExchange_1_0_1_1.Operation.PrepareDataActionResult @@ -454,6 +520,13 @@ true + + WebService.Exchange_3_0_1_1.Operation.TestConnection + + Use + true + + CommonCommand.ПредупрежденияПриСинхронизацииДанных @@ -496,6 +569,13 @@ true + + WebService.Exchange_3_0_1_1.Operation.PutFilePart + + Use + true + + CommonCommand.СобытияПолучения diff --git a/SSL/src/Roles/ДобавлениеИзменениеАдресныхСведений/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеАдресныхСведений/Rights.rights index 7da5d5f5f..8cf790caf 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеАдресныхСведений/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеАдресныхСведений/Rights.rights @@ -3,29 +3,6 @@ false true false - - InformationRegister.СлужебныеАдресныеСведения - - Read - true - - - Update - true - - - View - true - - - Edit - true - - - TotalsControl - true - - InformationRegister.ДомаЗданияСтроения @@ -50,76 +27,7 @@ - InformationRegister.ПричиныИзмененияАдресныхСведений - - Read - true - - - Update - true - - - View - true - - - Edit - true - - - TotalsControl - true - - - - InformationRegister.ДополнительныеАдресныеСведения - - Read - true - - - Update - true - - - View - true - - - Edit - true - - - TotalsControl - true - - - - InformationRegister.ОриентирыАдресныхОбъектов - - Read - true - - - Update - true - - - View - true - - - Edit - true - - - TotalsControl - true - - - - InformationRegister.ИсторияАдресныхОбъектов + InformationRegister.СлужебныеАдресныеСведения Read true @@ -165,7 +73,7 @@ - InformationRegister.АдресныеОбъекты + InformationRegister.ПричиныИзмененияАдресныхСведений Read true @@ -210,4 +118,96 @@ true + + InformationRegister.ДополнительныеАдресныеСведения + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + TotalsControl + true + + + + InformationRegister.АдресныеОбъекты + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + TotalsControl + true + + + + InformationRegister.ИсторияАдресныхОбъектов + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + TotalsControl + true + + + + InformationRegister.ОриентирыАдресныхОбъектов + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + TotalsControl + true + + diff --git a/SSL/src/Roles/ДобавлениеИзменениеВзаимодействий/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеВзаимодействий/Rights.rights index 2d7e15b12..3060e200d 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеВзаимодействий/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеВзаимодействий/Rights.rights @@ -9,30 +9,42 @@ Read true - #ПоЗначениямИНаборамРасширенный("Справочник.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы", "", "РасширенноеИЛИ", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("ВладелецФайла") +#Иначе +#ПоЗначениямИНаборамРасширенный("Справочник.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы", "", "РасширенноеИЛИ", "", "", -"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +#КонецЕсли Insert true - #ПоЗначениямИНаборамРасширенный("Справочник.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы", "", "РасширенноеИЛИ", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("ВладелецФайла") +#Иначе +#ПоЗначениямИНаборамРасширенный("Справочник.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы", "", "РасширенноеИЛИ", "", "", -"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +#КонецЕсли Update true - #ПоЗначениямИНаборамРасширенный("Справочник.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы", "", "РасширенноеИЛИ", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("ВладелецФайла") +#Иначе +#ПоЗначениямИНаборамРасширенный("Справочник.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы", "", "РасширенноеИЛИ", "", "", -"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +#КонецЕсли @@ -66,39 +78,51 @@ Read true - #ПоЗначениямРасширенный("Справочник.ПапкиЭлектронныхПисем", "", "", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоЗначениямРасширенный("Справочник.ПапкиЭлектронныхПисем", "", "", "", "", "УчетныеЗаписиЭлектроннойПочты", "Т.Владелец", "ИЛИ(", "Пользователи", "Т.Владелец.ВладелецУчетнойЗаписи", "И", "Условие", "Т.Владелец.ВладелецУчетнойЗаписи <> Значение(Справочник.Пользователи.ПустаяСсылка)", ")", -"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "") +"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "") +#КонецЕсли Insert true - #ПоЗначениямРасширенный("Справочник.ПапкиЭлектронныхПисем", "", "", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоЗначениямРасширенный("Справочник.ПапкиЭлектронныхПисем", "", "", "", "", "УчетныеЗаписиЭлектроннойПочты", "Т.Владелец", "ИЛИ(", "Пользователи", "Т.Владелец.ВладелецУчетнойЗаписи", "И", "Условие", "Т.Владелец.ВладелецУчетнойЗаписи <> Значение(Справочник.Пользователи.ПустаяСсылка)", ")", -"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "") +"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "") +#КонецЕсли Update true - #ПоЗначениямРасширенный("Справочник.ПапкиЭлектронныхПисем", "", "", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоЗначениямРасширенный("Справочник.ПапкиЭлектронныхПисем", "", "", "", "", "УчетныеЗаписиЭлектроннойПочты", "Т.Владелец", "ИЛИ(", "Пользователи", "Т.Владелец.ВладелецУчетнойЗаписи", "И", "Условие", "Т.Владелец.ВладелецУчетнойЗаписи <> Значение(Справочник.Пользователи.ПустаяСсылка)", ")", -"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "") +"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "") +#КонецЕсли @@ -150,13 +174,17 @@ Read true - #ПоЗначениямРасширенный("РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты", "", "", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляРегистра("ИдентификаторыОбъектовМетаданных.РегистрСведенийНастройкиУчетныхЗаписейЭлектроннойПочты", "УчетнаяЗаписьЭлектроннойПочты", "", "", "", "") +#Иначе +#ПоЗначениямРасширенный("РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты", "", "", "", "", "УчетныеЗаписиЭлектроннойПочты", "Т.УчетнаяЗаписьЭлектроннойПочты", "ИЛИ(", "Пользователи", "Т.УчетнаяЗаписьЭлектроннойПочты.ВладелецУчетнойЗаписи", "И", "Условие", "Т.УчетнаяЗаписьЭлектроннойПочты.ВладелецУчетнойЗаписи <> Значение(Справочник.Пользователи.ПустаяСсылка)", ")", -"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "") +"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "") +#КонецЕсли @@ -170,30 +198,42 @@ Read true - #ПоЗначениямИНаборамРасширенный("Справочник.ЗапланированноеВзаимодействиеПрисоединенныеФайлы", "", "РасширенноеИЛИ", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("ВладелецФайла") +#Иначе +#ПоЗначениямИНаборамРасширенный("Справочник.ЗапланированноеВзаимодействиеПрисоединенныеФайлы", "", "РасширенноеИЛИ", "", "", -"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +#КонецЕсли Insert true - #ПоЗначениямИНаборамРасширенный("Справочник.ЗапланированноеВзаимодействиеПрисоединенныеФайлы", "", "РасширенноеИЛИ", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("ВладелецФайла") +#Иначе +#ПоЗначениямИНаборамРасширенный("Справочник.ЗапланированноеВзаимодействиеПрисоединенныеФайлы", "", "РасширенноеИЛИ", "", "", -"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +#КонецЕсли Update true - #ПоЗначениямИНаборамРасширенный("Справочник.ЗапланированноеВзаимодействиеПрисоединенныеФайлы", "", "РасширенноеИЛИ", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("ВладелецФайла") +#Иначе +#ПоЗначениямИНаборамРасширенный("Справочник.ЗапланированноеВзаимодействиеПрисоединенныеФайлы", "", "РасширенноеИЛИ", "", "", -"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +#КонецЕсли @@ -262,21 +302,33 @@ Read true - #ПоНаборамЗначений( "Документ.ТелефонныйЗвонок","","РасширенноеИЛИ","") + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоНаборамЗначений( "Документ.ТелефонныйЗвонок","","РасширенноеИЛИ","") +#КонецЕсли Insert true - #ПоНаборамЗначений( "Документ.ТелефонныйЗвонок","","РасширенноеИЛИ","") + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоНаборамЗначений( "Документ.ТелефонныйЗвонок","","РасширенноеИЛИ","") +#КонецЕсли Update true - #ПоНаборамЗначений( "Документ.ТелефонныйЗвонок","","РасширенноеИЛИ","") + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоНаборамЗначений( "Документ.ТелефонныйЗвонок","","РасширенноеИЛИ","") +#КонецЕсли @@ -359,30 +411,42 @@ Read true - #ПоЗначениямИНаборамРасширенный("Справочник.ТелефонныйЗвонокПрисоединенныеФайлы", "", "РасширенноеИЛИ", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("ВладелецФайла") +#Иначе +#ПоЗначениямИНаборамРасширенный("Справочник.ТелефонныйЗвонокПрисоединенныеФайлы", "", "РасширенноеИЛИ", "", "", -"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +#КонецЕсли Insert true - #ПоЗначениямИНаборамРасширенный("Справочник.ТелефонныйЗвонокПрисоединенныеФайлы", "", "РасширенноеИЛИ", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("ВладелецФайла") +#Иначе +#ПоЗначениямИНаборамРасширенный("Справочник.ТелефонныйЗвонокПрисоединенныеФайлы", "", "РасширенноеИЛИ", "", "", -"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +#КонецЕсли Update true - #ПоЗначениямИНаборамРасширенный("Справочник.ТелефонныйЗвонокПрисоединенныеФайлы", "", "РасширенноеИЛИ", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("ВладелецФайла") +#Иначе +#ПоЗначениямИНаборамРасширенный("Справочник.ТелефонныйЗвонокПрисоединенныеФайлы", "", "РасширенноеИЛИ", "", "", -"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +#КонецЕсли @@ -416,21 +480,33 @@ Read true - #ПоНаборамЗначений( "Документ.ЗапланированноеВзаимодействие","","РасширенноеИЛИ","") + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоНаборамЗначений( "Документ.ЗапланированноеВзаимодействие","","РасширенноеИЛИ","") +#КонецЕсли Insert true - #ПоНаборамЗначений( "Документ.ЗапланированноеВзаимодействие","","РасширенноеИЛИ","") + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоНаборамЗначений( "Документ.ЗапланированноеВзаимодействие","","РасширенноеИЛИ","") +#КонецЕсли Update true - #ПоНаборамЗначений( "Документ.ЗапланированноеВзаимодействие","","РасширенноеИЛИ","") + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоНаборамЗначений( "Документ.ЗапланированноеВзаимодействие","","РасширенноеИЛИ","") +#КонецЕсли @@ -488,21 +564,33 @@ Read true - #ПоНаборамЗначений( "Документ.Встреча","","РасширенноеИЛИ","") + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоНаборамЗначений( "Документ.Встреча","","РасширенноеИЛИ","") +#КонецЕсли Insert true - #ПоНаборамЗначений( "Документ.Встреча","","РасширенноеИЛИ","") + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоНаборамЗначений( "Документ.Встреча","","РасширенноеИЛИ","") +#КонецЕсли Update true - #ПоНаборамЗначений( "Документ.Встреча","","РасширенноеИЛИ","") + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоНаборамЗначений( "Документ.Встреча","","РасширенноеИЛИ","") +#КонецЕсли @@ -564,10 +652,14 @@ Update true - #ПоЗначениямИНаборамРасширенный( "РегистрСведений.ПредметыПапкиВзаимодействий","","РасширенноеИЛИ", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("Взаимодействие") +#Иначе +#ПоЗначениямИНаборамРасширенный( "РегистрСведений.ПредметыПапкиВзаимодействий","","РасширенноеИЛИ", "", "", -"Объект","Взаимодействие","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","" ) +"Объект","Взаимодействие","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","" ) +#КонецЕсли @@ -589,21 +681,33 @@ Read true - #ПоНаборамЗначений( "Документ.СообщениеSMS","","","") + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоНаборамЗначений( "Документ.СообщениеSMS","","","") +#КонецЕсли Insert true - #ПоНаборамЗначений( "Документ.СообщениеSMS","","","") + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоНаборамЗначений( "Документ.СообщениеSMS","","","") +#КонецЕсли Update true - #ПоНаборамЗначений( "Документ.СообщениеSMS","","","") + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоНаборамЗначений( "Документ.СообщениеSMS","","","") +#КонецЕсли @@ -690,30 +794,42 @@ Read true - #ПоЗначениямИНаборамРасширенный("Справочник.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы", "", "РасширенноеИЛИ", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("ВладелецФайла") +#Иначе +#ПоЗначениямИНаборамРасширенный("Справочник.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы", "", "РасширенноеИЛИ", "", "", -"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +#КонецЕсли Insert true - #ПоЗначениямИНаборамРасширенный("Справочник.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы", "", "РасширенноеИЛИ", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("ВладелецФайла") +#Иначе +#ПоЗначениямИНаборамРасширенный("Справочник.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы", "", "РасширенноеИЛИ", "", "", -"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +#КонецЕсли Update true - #ПоЗначениямИНаборамРасширенный("Справочник.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы", "", "РасширенноеИЛИ", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("ВладелецФайла") +#Иначе +#ПоЗначениямИНаборамРасширенный("Справочник.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы", "", "РасширенноеИЛИ", "", "", -"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +#КонецЕсли @@ -747,11 +863,14 @@ Read true - #ПоЗначениямИНаборамРасширенный( "ЖурналДокументов.Взаимодействия","","РасширенноеИЛИ", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("Ссылка") +#Иначе +#ПоЗначениямИНаборамРасширенный( "ЖурналДокументов.Взаимодействия","","РасширенноеИЛИ", "", "", "Объект","Т.Ссылка","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","" ) - +#КонецЕсли @@ -822,21 +941,33 @@ Read true - #ПоНаборамЗначений( "Документ.ЭлектронноеПисьмоИсходящее","","РасширенноеИЛИ","") + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоНаборамЗначений( "Документ.ЭлектронноеПисьмоИсходящее","","РасширенноеИЛИ","") +#КонецЕсли Insert true - #ПоНаборамЗначений( "Документ.ЭлектронноеПисьмоИсходящее","","РасширенноеИЛИ","") + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоНаборамЗначений( "Документ.ЭлектронноеПисьмоИсходящее","","РасширенноеИЛИ","") +#КонецЕсли Update true - #ПоНаборамЗначений( "Документ.ЭлектронноеПисьмоИсходящее","","РасширенноеИЛИ","") + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоНаборамЗначений( "Документ.ЭлектронноеПисьмоИсходящее","","РасширенноеИЛИ","") +#КонецЕсли @@ -916,30 +1047,42 @@ Read true - #ПоЗначениямИНаборамРасширенный("Справочник.СообщениеSMSПрисоединенныеФайлы", "", "РасширенноеИЛИ", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("ВладелецФайла") +#Иначе +#ПоЗначениямИНаборамРасширенный("Справочник.СообщениеSMSПрисоединенныеФайлы", "", "РасширенноеИЛИ", "", "", -"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +#КонецЕсли Insert true - #ПоЗначениямИНаборамРасширенный("Справочник.СообщениеSMSПрисоединенныеФайлы", "", "РасширенноеИЛИ", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("ВладелецФайла") +#Иначе +#ПоЗначениямИНаборамРасширенный("Справочник.СообщениеSMSПрисоединенныеФайлы", "", "РасширенноеИЛИ", "", "", -"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +#КонецЕсли Update true - #ПоЗначениямИНаборамРасширенный("Справочник.СообщениеSMSПрисоединенныеФайлы", "", "РасширенноеИЛИ", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("ВладелецФайла") +#Иначе +#ПоЗначениямИНаборамРасширенный("Справочник.СообщениеSMSПрисоединенныеФайлы", "", "РасширенноеИЛИ", "", "", -"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +#КонецЕсли @@ -987,30 +1130,42 @@ Read true - #ПоЗначениямИНаборамРасширенный("Справочник.ВстречаПрисоединенныеФайлы", "", "РасширенноеИЛИ", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("ВладелецФайла") +#Иначе +#ПоЗначениямИНаборамРасширенный("Справочник.ВстречаПрисоединенныеФайлы", "", "РасширенноеИЛИ", "", "", -"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +#КонецЕсли Insert true - #ПоЗначениямИНаборамРасширенный("Справочник.ВстречаПрисоединенныеФайлы", "", "РасширенноеИЛИ", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("ВладелецФайла") +#Иначе +#ПоЗначениямИНаборамРасширенный("Справочник.ВстречаПрисоединенныеФайлы", "", "РасширенноеИЛИ", "", "", -"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +#КонецЕсли Update true - #ПоЗначениямИНаборамРасширенный("Справочник.ВстречаПрисоединенныеФайлы", "", "РасширенноеИЛИ", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("ВладелецФайла") +#Иначе +#ПоЗначениямИНаборамРасширенный("Справочник.ВстречаПрисоединенныеФайлы", "", "РасширенноеИЛИ", "", "", -"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +#КонецЕсли @@ -1044,39 +1199,51 @@ Read true - #ПоЗначениямРасширенный("Справочник.ПравилаОбработкиЭлектроннойПочты", "", "", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоЗначениямРасширенный("Справочник.ПравилаОбработкиЭлектроннойПочты", "", "", "", "", "УчетныеЗаписиЭлектроннойПочты", "Т.Владелец", "ИЛИ(", "Пользователи", "Т.Владелец.ВладелецУчетнойЗаписи", "И", "Условие", "Т.Владелец.ВладелецУчетнойЗаписи <> Значение(Справочник.Пользователи.ПустаяСсылка)", ")", -"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "") +"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "") +#КонецЕсли Insert true - #ПоЗначениямРасширенный("Справочник.ПравилаОбработкиЭлектроннойПочты", "", "", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоЗначениямРасширенный("Справочник.ПравилаОбработкиЭлектроннойПочты", "", "", "", "", "УчетныеЗаписиЭлектроннойПочты", "Т.Владелец", "ИЛИ(", "Пользователи", "Т.Владелец.ВладелецУчетнойЗаписи", "И", "Условие", "Т.Владелец.ВладелецУчетнойЗаписи <> Значение(Справочник.Пользователи.ПустаяСсылка)", ")", -"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "") +"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "") +#КонецЕсли Update true - #ПоЗначениямРасширенный("Справочник.ПравилаОбработкиЭлектроннойПочты", "", "", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоЗначениямРасширенный("Справочник.ПравилаОбработкиЭлектроннойПочты", "", "", "", "", "УчетныеЗаписиЭлектроннойПочты", "Т.Владелец", "ИЛИ(", "Пользователи", "Т.Владелец.ВладелецУчетнойЗаписи", "И", "Условие", "Т.Владелец.ВладелецУчетнойЗаписи <> Значение(Справочник.Пользователи.ПустаяСсылка)", ")", -"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "") +"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "") +#КонецЕсли @@ -1163,14 +1330,22 @@ Read true - #ПоНаборамЗначений( "Документ.ЭлектронноеПисьмоВходящее","","РасширенноеИЛИ","") + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоНаборамЗначений( "Документ.ЭлектронноеПисьмоВходящее","","РасширенноеИЛИ","") +#КонецЕсли Update true - #ПоНаборамЗначений( "Документ.ЭлектронноеПисьмоВходящее","","РасширенноеИЛИ","") + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоНаборамЗначений( "Документ.ЭлектронноеПисьмоВходящее","","РасширенноеИЛИ","") +#КонецЕсли @@ -1250,6 +1425,371 @@ true + + ДляОбъекта(ПолеОбъекта) + // ДляОбъекта(ПолеОбъекта = "") +// Шаблон используется для ограничения элементов справочников, документов и +// других списков объектов по полю Ссылка, а также элементов зависимых списков +// объектов и записей регистров через поле объекта-владельца. +// +// Параметры: +// ПолеОбъекта - имя поля, содержащего ссылку на объект, от которого зависит элемент списка. +// Значение "" (по умолчанию) то же, что имя поля "Ссылка". +// + +#Если &СпискиСОтключеннымОграничениемЧтения = "Неопределено" #Тогда + // Информационная база заблокирована для обновления. + ГДЕ ЛОЖЬ + +#ИначеЕсли Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1,") + И Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Требуется обновить шаблон на актуальную версию, поставляемую в роли ИзменениеУчастниковГруппДоступа по причине: Используется устаревшая версия 1 шаблона ограничения доступа ДляОбъекта. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли &СпискиСОтключеннымОграничениемЧтения = "Все" #Тогда + // У пользователя отключены все виды доступа или + // ограничение на уровне записей не используется. + +#ИначеЕсли СтрСодержит(&СпискиСОтключеннымОграничениемЧтения, #ИмяТекущейТаблицы) #Тогда + // У пользователя отключено ограничение для текущей таблицы. + +#ИначеЕсли СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Версия программы обновлена, требуется перезапустить сеанс. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли #ИмяТекущегоПраваДоступа <> "Чтение" #Тогда + // Проверка прав Добавление, Изменение, Удаление выполняется ПередЗаписью / ПриЗаписи. + ГДЕ ИСТИНА + +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам +#Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа +#Иначе + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа +#КонецЕсли + ПО + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + И РазрешенныеКлючиДоступа.Пользователь = &ТекущийПользователь + #Иначе + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + И РазрешенныеКлючиДоступа.ВнешнийПользователь = &ТекущийВнешнийПользователь + #КонецЕсли + ) +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + ПО + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + #Иначе + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + #КонецЕсли + И РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя) + ) +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + ГДЕ + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + И ( + ИСТИНА В ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ИЗ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа + #Иначе + ИЗ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа + #КонецЕсли + ГДЕ + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + И РазрешенныеКлючиДоступа.Пользователь = &ТекущийПользователь + #Иначе + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + И РазрешенныеКлючиДоступа.ВнешнийПользователь = &ТекущийВнешнийПользователь + #КонецЕсли + ) + ИЛИ + ИСТИНА В ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + ГДЕ + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + #Иначе + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + #КонецЕсли + И РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя) + ) + ) + ) + +#Иначе + Ошибка: Требуется актуализировать ограничение доступа по причине: Не удалось определить вариант ограничения доступа в параметрах сеанса для шаблона ДляОбъекта со значением параметра "#ПолеОбъекта". Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. +#КонецЕсли + + + + ДляРегистра(Регистр, Поле1, Поле2, Поле3, Поле4, Поле5) + // ДляРегистра(Регистр, Поле1, Поле2 = "", Поле3 = "", Поле4 = "", Поле5 = "") +// Шаблон используется для ограничения групп записей регистров. +// +// Параметры: +// Регистр - имя предопределенного элемента справочника Идентификаторы объектов метаданных или справочника +// Идентификаторы объектов расширений в формате: имя справочника с точкой и полное имя таблицы +// без точки, например, ИдентификаторыОбъектовМетаданных.РегистрНакопленияОстаткиНаСкладах; +// - имя отдельного регистра ключей в формате КлючиДоступаКРегистру<ОстатокИмени>, +// например, КлючиДоступаКРегиструОстаткиНаСкладах. +// Поле1 - имя первого поля (измерения, ресурса, реквизита), которое будет соединяться с полем Поле1 +// регистра сведений КлючиДоступаКРегистр* +// Поле2 - аналогично предыдущему параметру, если используется в ограничении доступа к регистру. +// ... +// Поле5 - аналогично предыдущему параметру, если используется в ограничении доступа к регистру. + +#Если &СпискиСОтключеннымОграничениемЧтения = "Неопределено" #Тогда + // Информационная база заблокирована для обновления. + ГДЕ ЛОЖЬ + +#ИначеЕсли Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляРегистра1,") #Тогда + И Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляРегистра1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Требуется обновить шаблон на актуальную версию, поставляемую в роли ИзменениеУчастниковГруппДоступа по причине: Используется устаревшая версия 1 шаблона ограничения доступа ДляРегистра. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли &СпискиСОтключеннымОграничениемЧтения = "Все" #Тогда + // У пользователя отключены все виды доступа или + // ограничение на уровне записей не используется. + +#ИначеЕсли СтрСодержит(&СпискиСОтключеннымОграничениемЧтения, #ИмяТекущейТаблицы) #Тогда + // У пользователя отключено ограничение для текущей таблицы. + +#ИначеЕсли СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляРегистра1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Версия программы обновлена, требуется перезапустить сеанс. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли #ИмяТекущегоПраваДоступа <> "Чтение" #Тогда + // Проверка прав Добавление, Изменение, Удаление выполняется ПередЗаписью / ПриЗаписи. + ГДЕ ИСТИНА + +#ИначеЕсли Не СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":[#Регистр]:#Поле1:#Поле2:#Поле3:#Поле4:#Поле5;") + И Не СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":[#Регистр]:#Поле1:#Поле2:#Поле3:#Поле4:#Поле5;") #Тогда + + Ошибка: Требуется актуализировать ограничение доступа по причине: Не удалось определить вариант ограничения доступа в параметрах сеанса для шаблона ДляРегистра со значениями параметров "#Регистр", "#Поле1", "#Поле2", "#Поле3", "#Поле4", "#Поле5". Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. +#Иначе + +ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА +#Если Не СтрСодержит("#Регистр", "КлючиДоступаКРегистру") #Тогда + ИЗ РегистрСведений.КлючиДоступаКРегистрам КАК КлючиДоступаКРегистрам +#Иначе + ИЗ РегистрСведений.#Регистр КАК КлючиДоступаКРегистрам +#КонецЕсли +#Если Не СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":[#Регистр]:#Поле1:#Поле2:#Поле3:#Поле4:#Поле5;") #Тогда + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + +#ИначеЕсли &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа +#Иначе + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа +#КонецЕсли + ПО + #Если Не СтрСодержит("#Регистр", "КлючиДоступаКРегистру") #Тогда + КлючиДоступаКРегистрам.Регистр = Значение(Справочник.#Регистр) + #Иначе + ИСТИНА + #КонецЕсли + + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И КлючиДоступаКРегистрам.ДляВнешнихПользователей = ЛОЖЬ + #Иначе + И КлючиДоступаКРегистрам.ДляВнешнихПользователей = ИСТИНА + #КонецЕсли + + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле1 + #КонецЕсли + + #Если "#Поле2" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") #Тогда + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле2 + #Иначе + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле2 + #КонецЕсли + #КонецЕсли + + #Если "#Поле3" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") #Тогда + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") #Тогда + + И КлючиДоступаКРегистрам.Поле3 = ТекущаяТаблица.#Поле3 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле3 + #Иначе + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле3 + #КонецЕсли + #КонецЕсли + + #Если "#Поле4" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле4;") #Тогда + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") #Тогда + + И КлючиДоступаКРегистрам.Поле4 = ТекущаяТаблица.#Поле4 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") #Тогда + + И КлючиДоступаКРегистрам.Поле3 = ТекущаяТаблица.#Поле4 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле4 + #Иначе + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле4 + #КонецЕсли + #КонецЕсли + + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле4;") #Тогда + + И КлючиДоступаКРегистрам.Поле5 = ТекущаяТаблица.#Поле5 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") #Тогда + + И КлючиДоступаКРегистрам.Поле4 = ТекущаяТаблица.#Поле5 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") #Тогда + + И КлючиДоступаКРегистрам.Поле3 = ТекущаяТаблица.#Поле5 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле5 + #Иначе + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле5 + #КонецЕсли + #КонецЕсли + + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле4;") #Тогда + + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = ТекущаяТаблица.#Поле5 + #ИначеЕсли "#Поле5" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") #Тогда + + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле4 = ТекущаяТаблица.#Поле5 + #ИначеЕсли "#Поле4" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле4;") #Тогда + И КлючиДоступаКРегистрам.Поле4 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле5" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") #Тогда + + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле3 = ТекущаяТаблица.#Поле5 + #ИначеЕсли "#Поле3" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле3;") #Тогда + И КлючиДоступаКРегистрам.Поле3 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле4" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле4;") #Тогда + И КлючиДоступаКРегистрам.Поле4 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле5" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле5 + #ИначеЕсли "#Поле2" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле2;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле3" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле3;") #Тогда + И КлючиДоступаКРегистрам.Поле3 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле4" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле4;") #Тогда + И КлючиДоступаКРегистрам.Поле4 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле5" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Иначе + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле5 + #Иначе + И КлючиДоступаКРегистрам.Поле1 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле2" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле2;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле3" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле3;") #Тогда + И КлючиДоступаКРегистрам.Поле3 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле4" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле4;") #Тогда + И КлючиДоступаКРегистрам.Поле4 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле5" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #КонецЕсли + + #Если Не СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":[#Регистр]:#Поле1:#Поле2:#Поле3:#Поле4:#Поле5;") #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКРегистрам.КлючДоступа + И РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя) + + #ИначеЕсли &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКРегистрам.КлючДоступа + И РазрешенныеКлючиДоступа.Пользователь = &ТекущийПользователь + #Иначе + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКРегистрам.КлючДоступа + И РазрешенныеКлючиДоступа.ВнешнийПользователь = &ТекущийВнешнийПользователь + #КонецЕсли + ) + +#КонецЕсли + + ПоЗначениям // ПоЗначениям(Таблица, -, Модификатор, В1,П1, В2,П2, ..., В(n), П(n)). @@ -1314,100 +1854,52 @@ ( Истина И ("#Параметр(4)" = "" И "#Параметр(5)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(4),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(4),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(4),")) И ("#Параметр(6)" = "" И "#Параметр(7)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),")) И ("#Параметр(8)" = "" И "#Параметр(9)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(8),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(8),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(8),")) И ("#Параметр(10)" = "" И "#Параметр(11)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(10),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(10),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(10),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),")) И ("#Параметр(14)" = "" И "#Параметр(15)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(14),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(14),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(14),")) И ("#Параметр(16)" = "" И "#Параметр(17)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(16),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(16),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(16),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),")) И ("#Параметр(20)" = "" И "#Параметр(21)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(20),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(20),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(20),")) И ("#Параметр(22)" = "" И "#Параметр(23)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(22),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(22),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(22),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),")) И ("#Параметр(26)" = "" И "#Параметр(27)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(26),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(26),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(26),")) И ("#Параметр(28)" = "" И "#Параметр(29)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(28),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(28),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(28),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),")) И ("#Параметр(32)" = "" И "#Параметр(33)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(32),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(32),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(32),")) И ("#Параметр(34)" = "" И "#Параметр(35)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(34),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(34),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(34),")) ) #Тогда Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). @@ -1429,8 +1921,10 @@ ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если #ИмяТекущегоПраваДоступа = "Изменение" #Тогда И ТаблицыГруппДоступа.Изменение + #ИначеЕсли #ИмяТекущегоПраваДоступа = "Добавление" #Тогда + И ТаблицыГруппДоступа.Добавление #КонецЕсли ) И ГруппыДоступа.Ссылка В @@ -1623,7 +2117,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(Т.#Параметр(5), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 2. @@ -1797,6 +2291,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 3. @@ -1970,6 +2466,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(9), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 4. @@ -2143,6 +2641,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(11), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 5. @@ -2316,6 +2816,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 6. @@ -2489,6 +2991,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(15), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 7. @@ -2662,6 +3166,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(17), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 8. @@ -2835,6 +3341,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 9. @@ -3008,6 +3516,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(21), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 10. @@ -3181,6 +3691,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(23), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 11. @@ -3354,6 +3866,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 12. @@ -3527,6 +4041,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(27), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 13. @@ -3700,6 +4216,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(29), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 14. @@ -3873,6 +4391,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 15. @@ -4046,6 +4566,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(33), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 16. @@ -4219,6 +4741,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(35), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли ) @@ -4327,100 +4851,52 @@ ( Истина И ("#Параметр(6)" = "" И "#Параметр(7)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),")) И ("#Параметр(9)" = "" И "#Параметр(10)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),")) И ("#Параметр(15)" = "" И "#Параметр(16)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),")) И ("#Параметр(21)" = "" И "#Параметр(22)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),")) И ("#Параметр(27)" = "" И "#Параметр(28)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),")) И ("#Параметр(33)" = "" И "#Параметр(34)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),")) И ("#Параметр(36)" = "" И "#Параметр(37)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),")) И ("#Параметр(39)" = "" И "#Параметр(40)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),")) И ("#Параметр(42)" = "" И "#Параметр(43)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),")) И ("#Параметр(45)" = "" И "#Параметр(46)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),")) И ("#Параметр(48)" = "" И "#Параметр(49)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),")) И ("#Параметр(51)" = "" И "#Параметр(52)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),")) ) #Тогда Т ИЗ Т // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). @@ -4447,8 +4923,10 @@ ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если #ИмяТекущегоПраваДоступа = "Изменение" #Тогда И ТаблицыГруппДоступа.Изменение + #ИначеЕсли #ИмяТекущегоПраваДоступа = "Добавление" #Тогда + И ТаблицыГруппДоступа.Добавление #КонецЕсли ) И ГруппыДоступа.Ссылка В @@ -5036,7 +5514,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(8) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -5606,7 +6084,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(10), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(11) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -6176,7 +6654,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(14) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -6746,7 +7224,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(16), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(17) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -7316,7 +7794,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(20) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -7886,7 +8364,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(22), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(23) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -8456,7 +8934,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(26) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -9026,7 +9504,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(28), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(29) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -9596,7 +10074,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(32) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -10166,7 +10644,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(34), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(35) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -10736,7 +11214,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(37), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(38) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -11306,7 +11784,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(40), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(41) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -11876,7 +12354,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(43), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(44) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -12446,7 +12924,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(46), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(47) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -13016,7 +13494,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(49), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(50) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -13586,7 +14064,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(52), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(53) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -13675,100 +14153,52 @@ ( Истина И ("#Параметр(6)" = "" И "#Параметр(7)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),")) И ("#Параметр(9)" = "" И "#Параметр(10)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),")) И ("#Параметр(15)" = "" И "#Параметр(16)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),")) И ("#Параметр(21)" = "" И "#Параметр(22)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),")) И ("#Параметр(27)" = "" И "#Параметр(28)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),")) И ("#Параметр(33)" = "" И "#Параметр(34)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),")) И ("#Параметр(36)" = "" И "#Параметр(37)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),")) И ("#Параметр(39)" = "" И "#Параметр(40)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),")) И ("#Параметр(42)" = "" И "#Параметр(43)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),")) И ("#Параметр(45)" = "" И "#Параметр(46)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),")) И ("#Параметр(48)" = "" И "#Параметр(49)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),")) И ("#Параметр(51)" = "" И "#Параметр(52)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),")) ) #Тогда Т ИЗ Т // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). @@ -13795,8 +14225,10 @@ ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если #ИмяТекущегоПраваДоступа = "Изменение" #Тогда И ТаблицыГруппДоступа.Изменение + #ИначеЕсли #ИмяТекущегоПраваДоступа = "Добавление" #Тогда + И ТаблицыГруппДоступа.Добавление #КонецЕсли ) И ГруппыДоступа.Ссылка В @@ -13991,7 +14423,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(8) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -14168,7 +14600,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(10), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(11) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -14345,7 +14777,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(14) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -14522,7 +14954,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(16), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(17) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -14699,7 +15131,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(20) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -14876,7 +15308,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(22), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(23) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -15053,7 +15485,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(26) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -15230,7 +15662,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(28), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(29) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -15407,7 +15839,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(32) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -15584,7 +16016,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(34), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(35) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -15761,7 +16193,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(37), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(38) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -15938,7 +16370,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(40), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(41) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -16115,7 +16547,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(43), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(44) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -16292,7 +16724,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(46), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(47) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -16469,7 +16901,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(49), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(50) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -16646,7 +17078,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(52), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(53) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -16743,8 +17175,10 @@ ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если #ИмяТекущегоПраваДоступа = "Изменение" #Тогда И ТаблицыГруппДоступа.Изменение + #ИначеЕсли #ИмяТекущегоПраваДоступа = "Добавление" #Тогда + И ТаблицыГруппДоступа.Добавление #КонецЕсли ) И ГруппыДоступа.Ссылка В diff --git a/SSL/src/Roles/ДобавлениеИзменениеДатЗапретаИзменения/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеДатЗапретаИзменения/Rights.rights index 8c2b69329..e6ce81a64 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеДатЗапретаИзменения/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеДатЗапретаИзменения/Rights.rights @@ -43,12 +43,12 @@ true // Запрет доступа к датам запрета загрузки. -ДатыЗапретаИзменения ГДЕ НЕ( - ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) <> ТИП(Справочник.Пользователи) - И ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) <> ТИП(Справочник.ГруппыПользователей) - И ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) <> ТИП(Справочник.ВнешниеПользователи) - И ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) <> ТИП(Справочник.ГруппыВнешнихПользователей) - И ДатыЗапретаИзменения.Пользователь <> ЗНАЧЕНИЕ(Перечисление.ВидыНазначенияДатЗапрета.ДляВсехПользователей)) +ДатыЗапретаИзменения ГДЕ + ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.Пользователи) + ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.ГруппыПользователей) + ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.ВнешниеПользователи) + ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.ГруппыВнешнихПользователей) + ИЛИ ДатыЗапретаИзменения.Пользователь = ЗНАЧЕНИЕ(Перечисление.ВидыНазначенияДатЗапрета.ДляВсехПользователей) @@ -57,12 +57,12 @@ true // Запрет доступа к датам запрета загрузки. -ДатыЗапретаИзменения ГДЕ НЕ( - ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) <> ТИП(Справочник.Пользователи) - И ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) <> ТИП(Справочник.ГруппыПользователей) - И ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) <> ТИП(Справочник.ВнешниеПользователи) - И ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) <> ТИП(Справочник.ГруппыВнешнихПользователей) - И ДатыЗапретаИзменения.Пользователь <> ЗНАЧЕНИЕ(Перечисление.ВидыНазначенияДатЗапрета.ДляВсехПользователей)) +ДатыЗапретаИзменения ГДЕ + ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.Пользователи) + ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.ГруппыПользователей) + ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.ВнешниеПользователи) + ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.ГруппыВнешнихПользователей) + ИЛИ ДатыЗапретаИзменения.Пользователь = ЗНАЧЕНИЕ(Перечисление.ВидыНазначенияДатЗапрета.ДляВсехПользователей) diff --git a/SSL/src/Roles/ДобавлениеИзменениеЗаданий/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеЗаданий/Rights.rights index 946db3b9b..158e49a33 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеЗаданий/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеЗаданий/Rights.rights @@ -50,15 +50,17 @@ Read true - #ПоЗначениямИНаборамРасширенный( "Задача.ЗадачаИсполнителя", "", "", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоЗначениямИНаборамРасширенный( "Задача.ЗадачаИсполнителя", "", "", "", "", "Объект","Т.БизнесПроцесс","ИЛИ", "Пользователи","Т.Автор","ИЛИ", "Пользователи","Т.Исполнитель","ИЛИ", "Пользователи","Т.ГруппаИсполнителейЗадач","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") - - +#КонецЕсли @@ -83,11 +85,14 @@ Read true - #ПоЗначениямИНаборамРасширенный( "РегистрСведений.ДанныеБизнесПроцессов", "", "", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("БизнесПроцесс") +#Иначе +#ПоЗначениямИНаборамРасширенный( "РегистрСведений.ДанныеБизнесПроцессов", "", "", "", "", "Объект","Т.БизнесПроцесс","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") - +#КонецЕсли @@ -119,29 +124,40 @@ Read true - #ПоЗначениямИНаборамРасширенный( "БизнесПроцесс.Задание", "", "", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоЗначениямИНаборамРасширенный( "БизнесПроцесс.Задание", "", "", "", "", "Пользователи","Т.Автор","ИЛИ", "Пользователи","Т.ГруппаИсполнителейЗадач","ИЛИ", "Пользователи","Т.ГруппаИсполнителейЗадачПроверяющий","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") - +#КонецЕсли Insert true - #ПоЗначениям( "БизнесПроцесс.Задание", "", "", -"Пользователи","Автор", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","") + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоЗначениям( "БизнесПроцесс.Задание", "", "", +"Пользователи","Автор", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","") +#КонецЕсли Update true - #ПоЗначениям( "БизнесПроцесс.Задание", "", "", -"Пользователи","Автор", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","") + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоЗначениям( "БизнесПроцесс.Задание", "", "", +"Пользователи","Автор", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","") +#КонецЕсли @@ -195,6 +211,137 @@ true + + ДляОбъекта(ПолеОбъекта) + // ДляОбъекта(ПолеОбъекта = "") +// Шаблон используется для ограничения элементов справочников, документов и +// других списков объектов по полю Ссылка, а также элементов зависимых списков +// объектов и записей регистров через поле объекта-владельца. +// +// Параметры: +// ПолеОбъекта - имя поля, содержащего ссылку на объект, от которого зависит элемент списка. +// Значение "" (по умолчанию) то же, что имя поля "Ссылка". +// + +#Если &СпискиСОтключеннымОграничениемЧтения = "Неопределено" #Тогда + // Информационная база заблокирована для обновления. + ГДЕ ЛОЖЬ + +#ИначеЕсли Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1,") + И Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Требуется обновить шаблон на актуальную версию, поставляемую в роли ИзменениеУчастниковГруппДоступа по причине: Используется устаревшая версия 1 шаблона ограничения доступа ДляОбъекта. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли &СпискиСОтключеннымОграничениемЧтения = "Все" #Тогда + // У пользователя отключены все виды доступа или + // ограничение на уровне записей не используется. + +#ИначеЕсли СтрСодержит(&СпискиСОтключеннымОграничениемЧтения, #ИмяТекущейТаблицы) #Тогда + // У пользователя отключено ограничение для текущей таблицы. + +#ИначеЕсли СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Версия программы обновлена, требуется перезапустить сеанс. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли #ИмяТекущегоПраваДоступа <> "Чтение" #Тогда + // Проверка прав Добавление, Изменение, Удаление выполняется ПередЗаписью / ПриЗаписи. + ГДЕ ИСТИНА + +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам +#Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа +#Иначе + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа +#КонецЕсли + ПО + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + И РазрешенныеКлючиДоступа.Пользователь = &ТекущийПользователь + #Иначе + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + И РазрешенныеКлючиДоступа.ВнешнийПользователь = &ТекущийВнешнийПользователь + #КонецЕсли + ) +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + ПО + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + #Иначе + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + #КонецЕсли + И РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя) + ) +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + ГДЕ + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + И ( + ИСТИНА В ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ИЗ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа + #Иначе + ИЗ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа + #КонецЕсли + ГДЕ + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + И РазрешенныеКлючиДоступа.Пользователь = &ТекущийПользователь + #Иначе + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + И РазрешенныеКлючиДоступа.ВнешнийПользователь = &ТекущийВнешнийПользователь + #КонецЕсли + ) + ИЛИ + ИСТИНА В ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + ГДЕ + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + #Иначе + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + #КонецЕсли + И РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя) + ) + ) + ) + +#Иначе + Ошибка: Требуется актуализировать ограничение доступа по причине: Не удалось определить вариант ограничения доступа в параметрах сеанса для шаблона ДляОбъекта со значением параметра "#ПолеОбъекта". Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. +#КонецЕсли + + ПоЗначениям // ПоЗначениям(Таблица, -, Модификатор, В1,П1, В2,П2, ..., В(n), П(n)). @@ -259,100 +406,52 @@ ( Истина И ("#Параметр(4)" = "" И "#Параметр(5)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(4),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(4),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(4),")) И ("#Параметр(6)" = "" И "#Параметр(7)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),")) И ("#Параметр(8)" = "" И "#Параметр(9)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(8),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(8),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(8),")) И ("#Параметр(10)" = "" И "#Параметр(11)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(10),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(10),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(10),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),")) И ("#Параметр(14)" = "" И "#Параметр(15)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(14),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(14),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(14),")) И ("#Параметр(16)" = "" И "#Параметр(17)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(16),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(16),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(16),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),")) И ("#Параметр(20)" = "" И "#Параметр(21)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(20),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(20),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(20),")) И ("#Параметр(22)" = "" И "#Параметр(23)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(22),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(22),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(22),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),")) И ("#Параметр(26)" = "" И "#Параметр(27)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(26),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(26),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(26),")) И ("#Параметр(28)" = "" И "#Параметр(29)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(28),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(28),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(28),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),")) И ("#Параметр(32)" = "" И "#Параметр(33)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(32),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(32),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(32),")) И ("#Параметр(34)" = "" И "#Параметр(35)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(34),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(34),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(34),")) ) #Тогда Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). @@ -374,8 +473,10 @@ ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если #ИмяТекущегоПраваДоступа = "Изменение" #Тогда И ТаблицыГруппДоступа.Изменение + #ИначеЕсли #ИмяТекущегоПраваДоступа = "Добавление" #Тогда + И ТаблицыГруппДоступа.Добавление #КонецЕсли ) И ГруппыДоступа.Ссылка В @@ -568,7 +669,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(Т.#Параметр(5), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 2. @@ -742,6 +843,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 3. @@ -915,6 +1018,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(9), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 4. @@ -1088,6 +1193,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(11), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 5. @@ -1261,6 +1368,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 6. @@ -1434,6 +1543,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(15), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 7. @@ -1607,6 +1718,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(17), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 8. @@ -1780,6 +1893,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 9. @@ -1953,6 +2068,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(21), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 10. @@ -2126,6 +2243,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(23), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 11. @@ -2299,6 +2418,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 12. @@ -2472,6 +2593,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(27), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 13. @@ -2645,6 +2768,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(29), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 14. @@ -2818,6 +2943,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 15. @@ -2991,6 +3118,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(33), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 16. @@ -3164,6 +3293,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(35), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли ) @@ -3272,100 +3403,52 @@ ( Истина И ("#Параметр(6)" = "" И "#Параметр(7)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),")) И ("#Параметр(9)" = "" И "#Параметр(10)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),")) И ("#Параметр(15)" = "" И "#Параметр(16)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),")) И ("#Параметр(21)" = "" И "#Параметр(22)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),")) И ("#Параметр(27)" = "" И "#Параметр(28)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),")) И ("#Параметр(33)" = "" И "#Параметр(34)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),")) И ("#Параметр(36)" = "" И "#Параметр(37)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),")) И ("#Параметр(39)" = "" И "#Параметр(40)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),")) И ("#Параметр(42)" = "" И "#Параметр(43)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),")) И ("#Параметр(45)" = "" И "#Параметр(46)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),")) И ("#Параметр(48)" = "" И "#Параметр(49)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),")) И ("#Параметр(51)" = "" И "#Параметр(52)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),")) ) #Тогда Т ИЗ Т // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). @@ -3392,8 +3475,10 @@ ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если #ИмяТекущегоПраваДоступа = "Изменение" #Тогда И ТаблицыГруппДоступа.Изменение + #ИначеЕсли #ИмяТекущегоПраваДоступа = "Добавление" #Тогда + И ТаблицыГруппДоступа.Добавление #КонецЕсли ) И ГруппыДоступа.Ссылка В @@ -3981,7 +4066,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(8) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -4551,7 +4636,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(10), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(11) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -5121,7 +5206,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(14) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -5691,7 +5776,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(16), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(17) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -6261,7 +6346,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(20) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -6831,7 +6916,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(22), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(23) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -7401,7 +7486,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(26) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -7971,7 +8056,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(28), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(29) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -8541,7 +8626,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(32) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -9111,7 +9196,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(34), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(35) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -9681,7 +9766,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(37), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(38) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -10251,7 +10336,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(40), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(41) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -10821,7 +10906,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(43), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(44) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -11391,7 +11476,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(46), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(47) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -11961,7 +12046,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(49), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(50) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -12531,7 +12616,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(52), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(53) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. diff --git a/SSL/src/Roles/ДобавлениеИзменениеЗаметок/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеЗаметок/Rights.rights index db8d2e565..e3e7249a8 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеЗаметок/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеЗаметок/Rights.rights @@ -9,21 +9,33 @@ Read true - ГДЕ Автор = &ТекущийПользователь + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +ГДЕ Автор = &ТекущийПользователь +#КонецЕсли Insert true - ГДЕ Автор = &ТекущийПользователь + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +ГДЕ Автор = &ТекущийПользователь +#КонецЕсли Update true - ГДЕ Автор = &ТекущийПользователь + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +ГДЕ Автор = &ТекущийПользователь +#КонецЕсли @@ -72,4 +84,135 @@ true + + ДляОбъекта(ПолеОбъекта) + // ДляОбъекта(ПолеОбъекта = "") +// Шаблон используется для ограничения элементов справочников, документов и +// других списков объектов по полю Ссылка, а также элементов зависимых списков +// объектов и записей регистров через поле объекта-владельца. +// +// Параметры: +// ПолеОбъекта - имя поля, содержащего ссылку на объект, от которого зависит элемент списка. +// Значение "" (по умолчанию) то же, что имя поля "Ссылка". +// + +#Если &СпискиСОтключеннымОграничениемЧтения = "Неопределено" #Тогда + // Информационная база заблокирована для обновления. + ГДЕ ЛОЖЬ + +#ИначеЕсли Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1,") + И Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Требуется обновить шаблон на актуальную версию, поставляемую в роли ИзменениеУчастниковГруппДоступа по причине: Используется устаревшая версия 1 шаблона ограничения доступа ДляОбъекта. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли &СпискиСОтключеннымОграничениемЧтения = "Все" #Тогда + // У пользователя отключены все виды доступа или + // ограничение на уровне записей не используется. + +#ИначеЕсли СтрСодержит(&СпискиСОтключеннымОграничениемЧтения, #ИмяТекущейТаблицы) #Тогда + // У пользователя отключено ограничение для текущей таблицы. + +#ИначеЕсли СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Версия программы обновлена, требуется перезапустить сеанс. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли #ИмяТекущегоПраваДоступа <> "Чтение" #Тогда + // Проверка прав Добавление, Изменение, Удаление выполняется ПередЗаписью / ПриЗаписи. + ГДЕ ИСТИНА + +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам +#Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа +#Иначе + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа +#КонецЕсли + ПО + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + И РазрешенныеКлючиДоступа.Пользователь = &ТекущийПользователь + #Иначе + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + И РазрешенныеКлючиДоступа.ВнешнийПользователь = &ТекущийВнешнийПользователь + #КонецЕсли + ) +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + ПО + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + #Иначе + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + #КонецЕсли + И РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя) + ) +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + ГДЕ + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + И ( + ИСТИНА В ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ИЗ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа + #Иначе + ИЗ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа + #КонецЕсли + ГДЕ + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + И РазрешенныеКлючиДоступа.Пользователь = &ТекущийПользователь + #Иначе + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + И РазрешенныеКлючиДоступа.ВнешнийПользователь = &ТекущийВнешнийПользователь + #КонецЕсли + ) + ИЛИ + ИСТИНА В ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + ГДЕ + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + #Иначе + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + #КонецЕсли + И РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя) + ) + ) + ) + +#Иначе + Ошибка: Требуется актуализировать ограничение доступа по причине: Не удалось определить вариант ограничения доступа в параметрах сеанса для шаблона ДляОбъекта со значением параметра "#ПолеОбъекта". Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. +#КонецЕсли + + diff --git a/SSL/src/Roles/ДобавлениеИзменениеЛичныхВариантовОтчетов/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеЛичныхВариантовОтчетов/Rights.rights index 709859979..cca9e71fc 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеЛичныхВариантовОтчетов/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеЛичныхВариантовОтчетов/Rights.rights @@ -9,23 +9,35 @@ Read true - ВариантыОтчетов ГДЕ (ВариантыОтчетов.Пользовательский = ЛОЖЬ + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +ВариантыОтчетов ГДЕ (ВариантыОтчетов.Пользовательский = ЛОЖЬ ИЛИ ВариантыОтчетов.ТолькоДляАвтора = ЛОЖЬ - ИЛИ ВариантыОтчетов.Автор = &АвторизованныйПользователь) + ИЛИ ВариантыОтчетов.Автор = &АвторизованныйПользователь) +#КонецЕсли Insert true - ВариантыОтчетов ГДЕ ВариантыОтчетов.Автор = &АвторизованныйПользователь + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +ВариантыОтчетов ГДЕ ВариантыОтчетов.Автор = &АвторизованныйПользователь +#КонецЕсли Update true - ВариантыОтчетов ГДЕ ВариантыОтчетов.Автор = &АвторизованныйПользователь + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +ВариантыОтчетов ГДЕ ВариантыОтчетов.Автор = &АвторизованныйПользователь +#КонецЕсли @@ -66,21 +78,33 @@ Read true - ГДЕ Пользователь = &АвторизованныйПользователь + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +ГДЕ Пользователь = &АвторизованныйПользователь +#КонецЕсли Insert true - ГДЕ Пользователь = &АвторизованныйПользователь + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +ГДЕ Пользователь = &АвторизованныйПользователь +#КонецЕсли Update true - ГДЕ Пользователь = &АвторизованныйПользователь + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +ГДЕ Пользователь = &АвторизованныйПользователь +#КонецЕсли @@ -122,4 +146,135 @@ true + + ДляОбъекта(ПолеОбъекта) + // ДляОбъекта(ПолеОбъекта = "") +// Шаблон используется для ограничения элементов справочников, документов и +// других списков объектов по полю Ссылка, а также элементов зависимых списков +// объектов и записей регистров через поле объекта-владельца. +// +// Параметры: +// ПолеОбъекта - имя поля, содержащего ссылку на объект, от которого зависит элемент списка. +// Значение "" (по умолчанию) то же, что имя поля "Ссылка". +// + +#Если &СпискиСОтключеннымОграничениемЧтения = "Неопределено" #Тогда + // Информационная база заблокирована для обновления. + ГДЕ ЛОЖЬ + +#ИначеЕсли Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1,") + И Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Требуется обновить шаблон на актуальную версию, поставляемую в роли ИзменениеУчастниковГруппДоступа по причине: Используется устаревшая версия 1 шаблона ограничения доступа ДляОбъекта. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли &СпискиСОтключеннымОграничениемЧтения = "Все" #Тогда + // У пользователя отключены все виды доступа или + // ограничение на уровне записей не используется. + +#ИначеЕсли СтрСодержит(&СпискиСОтключеннымОграничениемЧтения, #ИмяТекущейТаблицы) #Тогда + // У пользователя отключено ограничение для текущей таблицы. + +#ИначеЕсли СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Версия программы обновлена, требуется перезапустить сеанс. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли #ИмяТекущегоПраваДоступа <> "Чтение" #Тогда + // Проверка прав Добавление, Изменение, Удаление выполняется ПередЗаписью / ПриЗаписи. + ГДЕ ИСТИНА + +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам +#Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа +#Иначе + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа +#КонецЕсли + ПО + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + И РазрешенныеКлючиДоступа.Пользователь = &ТекущийПользователь + #Иначе + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + И РазрешенныеКлючиДоступа.ВнешнийПользователь = &ТекущийВнешнийПользователь + #КонецЕсли + ) +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + ПО + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + #Иначе + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + #КонецЕсли + И РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя) + ) +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + ГДЕ + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + И ( + ИСТИНА В ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ИЗ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа + #Иначе + ИЗ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа + #КонецЕсли + ГДЕ + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + И РазрешенныеКлючиДоступа.Пользователь = &ТекущийПользователь + #Иначе + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + И РазрешенныеКлючиДоступа.ВнешнийПользователь = &ТекущийВнешнийПользователь + #КонецЕсли + ) + ИЛИ + ИСТИНА В ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + ГДЕ + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + #Иначе + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + #КонецЕсли + И РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя) + ) + ) + ) + +#Иначе + Ошибка: Требуется актуализировать ограничение доступа по причине: Не удалось определить вариант ограничения доступа в параметрах сеанса для шаблона ДляОбъекта со значением параметра "#ПолеОбъекта". Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. +#КонецЕсли + + diff --git a/SSL/src/Roles/ДобавлениеИзменениеЛичныхШаблоновСообщений/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеЛичныхШаблоновСообщений/Rights.rights new file mode 100644 index 000000000..410e44ff8 --- /dev/null +++ b/SSL/src/Roles/ДобавлениеИзменениеЛичныхШаблоновСообщений/Rights.rights @@ -0,0 +1,3342 @@ + + + false + true + false + + Constant.ИспользоватьШаблоныСообщений + + Read + true + + + View + true + + + + Catalog.ШаблоныСообщенийПрисоединенныеФайлы + + Read + true + + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("ВладелецФайла") +#Иначе +#ПоЗначениямРасширенный( "Справочник.ШаблоныСообщенийПрисоединенныеФайлы", "","", +"", +"", +"Пользователи", "Т.ВладелецФайла.Автор", "ИЛИ", +"Условие","НЕ ЕСТЬNULL(Т.ВладелецФайла.ТолькоДляАвтора, Истина)", "", "", "", "", "","", "", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +#КонецЕсли + + + + Insert + true + + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("ВладелецФайла") +#Иначе +#ПоЗначениямРасширенный( "Справочник.ШаблоныСообщенийПрисоединенныеФайлы", "","", +"", +"", +"Пользователи", "Т.ВладелецФайла.Автор", "ИЛИ", +"Условие","НЕ ЕСТЬNULL(Т.ВладелецФайла.ТолькоДляАвтора, Истина)", "", "", "", "", "","", "", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +#КонецЕсли + + + + Update + true + + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("ВладелецФайла") +#Иначе +#ПоЗначениямРасширенный( "Справочник.ШаблоныСообщенийПрисоединенныеФайлы", "","", +"", +"", +"Пользователи", "Т.ВладелецФайла.Автор", "ИЛИ", +"Условие","НЕ ЕСТЬNULL(Т.ВладелецФайла.ТолькоДляАвтора, Истина)", "", "", "", "", "","", "", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +#КонецЕсли + + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InputByString + true + + + + Catalog.ШаблоныСообщений + + Read + true + + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоЗначениямРасширенный( "Справочник.ШаблоныСообщений", "","", +"", +"", +"Пользователи", "Т.Автор", "ИЛИ", +"Условие","НЕ Т.ТолькоДляАвтора", "", "", "", "", "","", "", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +#КонецЕсли + + + + Insert + true + + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоЗначениямРасширенный( "Справочник.ШаблоныСообщений", "","", +"", +"", +"Пользователи", "Т.Автор", "ИЛИ", +"Условие","НЕ Т.ТолькоДляАвтора", "", "", "", "", "","", "", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +#КонецЕсли + + + + Update + true + + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоЗначениямРасширенный( "Справочник.ШаблоныСообщений", "","", +"", +"", +"Пользователи", "Т.Автор", "ИЛИ", +"Условие","НЕ Т.ТолькоДляАвтора", "", "", "", "", "","", "", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +#КонецЕсли + + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InputByString + true + + + + CommonCommand.ОтправитьПисьмо + + View + true + + + + CommonCommand.ОтправитьSMS + + View + true + + + + Constant.ИспользоватьОтправкуSMSВШаблонахСообщений + + Read + true + + + View + true + + + + Constant.ИспользоватьЭлектроннуюПочтуВШаблонахСообщений + + Read + true + + + View + true + + + + ДляОбъекта(ПолеОбъекта) + // ДляОбъекта(ПолеОбъекта = "") +// Шаблон используется для ограничения элементов справочников, документов и +// других списков объектов по полю Ссылка, а также элементов зависимых списков +// объектов и записей регистров через поле объекта-владельца. +// +// Параметры: +// ПолеОбъекта - имя поля, содержащего ссылку на объект, от которого зависит элемент списка. +// Значение "" (по умолчанию) то же, что имя поля "Ссылка". +// + +#Если &СпискиСОтключеннымОграничениемЧтения = "Неопределено" #Тогда + // Информационная база заблокирована для обновления. + ГДЕ ЛОЖЬ + +#ИначеЕсли Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1,") + И Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Требуется обновить шаблон на актуальную версию, поставляемую в роли ИзменениеУчастниковГруппДоступа по причине: Используется устаревшая версия 1 шаблона ограничения доступа ДляОбъекта. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли &СпискиСОтключеннымОграничениемЧтения = "Все" #Тогда + // У пользователя отключены все виды доступа или + // ограничение на уровне записей не используется. + +#ИначеЕсли СтрСодержит(&СпискиСОтключеннымОграничениемЧтения, #ИмяТекущейТаблицы) #Тогда + // У пользователя отключено ограничение для текущей таблицы. + +#ИначеЕсли СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Версия программы обновлена, требуется перезапустить сеанс. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли #ИмяТекущегоПраваДоступа <> "Чтение" #Тогда + // Проверка прав Добавление, Изменение, Удаление выполняется ПередЗаписью / ПриЗаписи. + ГДЕ ИСТИНА + +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам +#Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа +#Иначе + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа +#КонецЕсли + ПО + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + И РазрешенныеКлючиДоступа.Пользователь = &ТекущийПользователь + #Иначе + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + И РазрешенныеКлючиДоступа.ВнешнийПользователь = &ТекущийВнешнийПользователь + #КонецЕсли + ) +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + ПО + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + #Иначе + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + #КонецЕсли + И РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя) + ) +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + ГДЕ + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + И ( + ИСТИНА В ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ИЗ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа + #Иначе + ИЗ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа + #КонецЕсли + ГДЕ + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + И РазрешенныеКлючиДоступа.Пользователь = &ТекущийПользователь + #Иначе + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + И РазрешенныеКлючиДоступа.ВнешнийПользователь = &ТекущийВнешнийПользователь + #КонецЕсли + ) + ИЛИ + ИСТИНА В ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + ГДЕ + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + #Иначе + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + #КонецЕсли + И РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя) + ) + ) + ) + +#Иначе + Ошибка: Требуется актуализировать ограничение доступа по причине: Не удалось определить вариант ограничения доступа в параметрах сеанса для шаблона ДляОбъекта со значением параметра "#ПолеОбъекта". Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. +#КонецЕсли + + + + ПоЗначениямРасширенный + // ПоЗначениямРасширенный(Таблица, -, Модификатор, ПрисоединяемыеТаблицы, О, В1,П1,О1, В2,П2,О2,..., В(n), П(n), О(n)). +// № параметра: 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,...,3+n*3,4+n*3,5+n*3. +// Читается так: "ограничение доступа по значениям расширенный". +// Параметры: +// Таблица - Имя текущей таблицы, например "Документ.ПоступлениеТоваровИУслуг". +// Модификатор - изменяет шаблон. +// 1-й модификатор - строка "НеОграничиватьДоступКГруппам" указывает +// безусловно выбирать группы иерархического справочника. +// Других модификаторов в этой версии шаблона не предусмотрено. +// ПрисоединяемыеТаблицы - текст присоедиения дополнительных таблиц на языке запросов, например, +// "ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.АвансовыйОтчет.ОплатаПоставщикам КАК Т1 +// ПО Т.Ссылка = Т1.Ссылка". +// Присоединение позволяет указать поля таблицы ОплатаПоставщикам, как поля основной таблицы +// для проверки их значений, как значений основной таблицы. +// Следует помнить, что при размножении строк в результате соединения, достаточно чтобы +// всего одна строка прошла условия проверки, т.е. результаты проверки строк объединяются по "ИЛИ". +// О - Начальные скобки "(". +// В(n) - Вид доступа - имя вида доступа, например, "Организации". Для полей составного типа, с целью повышения +// производительности, лучше указать несколько имен, например, "Организации,ГруппыФизическихЛиц", +// чем использовать несколько блоков параметров, с одним и тем же именем поля. +// Специальные виды доступа "Условие", "НастройкиПрав", "ПравоЧтения", "ПравоИзменения", +// "ПравоЧтенияПоИдентификатору", "ПравоИзмененияПоИдентификатору" можно использовать только отдельно. +// Когда В(n) = "Условие" (или ""), тогда П(n) содержит строку условия на языке запросов, например +// "Т.Автор = &АвторизованныйПользователь", +// "ТИПЗНАЧЕНИЯ(Т.Владелец) = ТИП(Справочник.Организации)", где Т - псевдоним текущей таблицы. +// Когда В(n) = "ПравоЧтения" Или "ПравоИзменения", +// выполняется проверка наличия права на таблицу значения Т.П(n). +// Когда В(n) = "ПравоЧтенияПоИдентификатору" или "ПравоИзмененияПоИдентификатору", +// выполняется проверка наличия права на таблицу по идентификатору в значении Т.П(n). +// П(n) - Поле проверяемого значения с псевдонимом, например "Т.Организация", +// кроме случая В(n) = "Условие" (или ""). +// О(n) - Логические операции "И", "ИЛИ" в сочетании с скобками "(", ")". +// Примечение: максимальное количество одновременно проверяемых значений полей можно увеличить, изменив шаблон, но +// необходимо будет указывать все параметры шаблона, т.е. указывать пустые строки, когда количество полей меньше максимального. +// Шаблон имеет структуру: +// <Общая часть условий> <Условие по группе параметров 1> И/ИЛИ <Условие по группе параметров 2> И/ИЛИ ... <Условие по группе параметров(n)> +// Пример: +// ПоЗначениямРасширенный("Документ.ПеремещениеТоваров", "", "", +// "", +// "", +// "Организации","Т.Организация","И(", +// "Склады","Т.СкладОтправитель","ИЛИ", +// "Склады","Т.СкладПолучатель",")", "","","", ...) + +#Если &ОграничениеДоступаНаУровнеЗаписейВключено = "" #Тогда // Информационная база заблокирована для обновления. + ГДЕ ЛОЖЬ +#Иначе + +// Проверка правильности параметра Право. +#Если Не ("#Параметр(2)" = "Чтение" Или "#Параметр(2)" = "Добавление" Или + "#Параметр(2)" = "Изменение" Или "#Параметр(2)" = "Удаление" Или "#Параметр(2)" = "") + Или #ИмяТекущегоПраваДоступа <> "Чтение" И "#Параметр(2)" = "Чтение" + Или #ИмяТекущегоПраваДоступа = "Чтение" И "#Параметр(2)" <> "Чтение" И "#Параметр(2)" <> "" #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверноеПраво: #Параметр(2) +#КонецЕсли + +// Проверка правильности параметра ИмяТаблицы. +#Если "#Параметр(1)" <> #ИмяТекущейТаблицы #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверноеИмяТекущейТаблицы: "#Параметр(1)" +#КонецЕсли + +// Проверка правильности параметра Модификатор. +#Если Не ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйМодификатор: #Параметр(3) +#КонецЕсли + +// Общая проверка использования ограничений доступа на уровне записей и +// проверка использования хотя бы одного ограничения из указанных видов доступа. +#Если Не + ( Истина + И ("#Параметр(6)" = "" И "#Параметр(7)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),")) + И ("#Параметр(9)" = "" И "#Параметр(10)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),")) + И ("#Параметр(12)" = "" И "#Параметр(13)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),")) + И ("#Параметр(15)" = "" И "#Параметр(16)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),")) + И ("#Параметр(18)" = "" И "#Параметр(19)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),")) + И ("#Параметр(21)" = "" И "#Параметр(22)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),")) + И ("#Параметр(24)" = "" И "#Параметр(25)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),")) + И ("#Параметр(27)" = "" И "#Параметр(28)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),")) + И ("#Параметр(30)" = "" И "#Параметр(31)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),")) + И ("#Параметр(33)" = "" И "#Параметр(34)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),")) + И ("#Параметр(36)" = "" И "#Параметр(37)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),")) + И ("#Параметр(39)" = "" И "#Параметр(40)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),")) + И ("#Параметр(42)" = "" И "#Параметр(43)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),")) + И ("#Параметр(45)" = "" И "#Параметр(46)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),")) + И ("#Параметр(48)" = "" И "#Параметр(49)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),")) + И ("#Параметр(51)" = "" И "#Параметр(52)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),")) + ) #Тогда + +Т ИЗ Т // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). + +// Присоединяемые таблицы к проверяемой строке текущей таблицы "Т". +#Параметр(4) + +ГДЕ + +ИСТИНА В +( // Проверка права пользователя на текущую таблицу в целом. + // Права на таблицы формируются по составу ролей профиля группы доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ + Справочник.ИдентификаторыОбъектовМетаданных КАК СвойстваТекущейТаблицы + ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа + ПО + СвойстваТекущейТаблицы.ПолноеИмя = "#Параметр(1)" + И ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ + РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа + ГДЕ + ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка + И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + #Если #ИмяТекущегоПраваДоступа = "Изменение" #Тогда + И ТаблицыГруппДоступа.Изменение + #ИначеЕсли #ИмяТекущегоПраваДоступа = "Добавление" #Тогда + И ТаблицыГруппДоступа.Добавление + #КонецЕсли + ) + И ГруппыДоступа.Ссылка В + ( + ВЫБРАТЬ + ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа + ИЗ + Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь + ) + ГДЕ + +// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда + Т.ЭтоГруппа ИЛИ +#КонецЕсли + + ( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей). + + #Параметр(5) // [([(][(]...] 0-n открывающихся скобок. + +//// Проверка значения поля группы параметров 1. +#Если &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(6)" = "Условие" Или "#Параметр(6)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(7) ) +#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" Или "#Параметр(6)" = "ПравоИзменения" #Тогда + #Параметр(7) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) + #Если Не "#Параметр(6)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(6)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(6)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(7) + #Если Не "#Параметр(6)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + ИСТИНА // Группа параметров отключена. +#ИначеЕсли "#Параметр(6)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(7) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(7) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(6)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(6)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(6)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда + + ( + ЕСТЬNULL(#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(7) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(6),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(7) + #ИначеЕсли "#Параметр(7)" = "Т.Ссылка" + И "#Параметр(6)" <> "Пользователи" + И "#Параметр(6)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(6)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(6)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(6),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(7) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(7) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(7)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ЕСТЬNULL(#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО +#КонецЕсли + + #Параметр(8) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 2. +#Если "#Параметр(9)" = "" И "#Параметр(10)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(9)" = "Условие" Или "#Параметр(9)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(10) ) +#ИначеЕсли "#Параметр(9)" = "ПравоЧтения" Или "#Параметр(9)" = "ПравоИзменения" #Тогда + #Параметр(10) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) + #Если Не "#Параметр(9)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(9)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(9)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(10) + #Если Не "#Параметр(9)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + ИСТИНА // Группа параметров отключена. +#ИначеЕсли "#Параметр(9)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(10) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(10) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(9),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(9)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(9)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(9)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),") #Тогда + + ( + ЕСТЬNULL(#Параметр(10), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(9),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(9),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(10) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(9),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(10) + #ИначеЕсли "#Параметр(10)" = "Т.Ссылка" + И "#Параметр(9)" <> "Пользователи" + И "#Параметр(9)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(9)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(9)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(9),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(10) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(10) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(10)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ЕСТЬNULL(#Параметр(10), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО +#КонецЕсли + + #Параметр(11) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 3. +#Если "#Параметр(12)" = "" И "#Параметр(13)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(12)" = "Условие" Или "#Параметр(12)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(13) ) +#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" Или "#Параметр(12)" = "ПравоИзменения" #Тогда + #Параметр(13) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) + #Если Не "#Параметр(12)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(12)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(12)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(13) + #Если Не "#Параметр(12)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + ИСТИНА // Группа параметров отключена. +#ИначеЕсли "#Параметр(12)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(13) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(13) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(12)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(12)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(12)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда + + ( + ЕСТЬNULL(#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(13) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(12),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(13) + #ИначеЕсли "#Параметр(13)" = "Т.Ссылка" + И "#Параметр(12)" <> "Пользователи" + И "#Параметр(12)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(12)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(12)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(12),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(13) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(13) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(13)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ЕСТЬNULL(#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО +#КонецЕсли + + #Параметр(14) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 4. +#Если "#Параметр(15)" = "" И "#Параметр(16)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(15)" = "Условие" Или "#Параметр(15)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(16) ) +#ИначеЕсли "#Параметр(15)" = "ПравоЧтения" Или "#Параметр(15)" = "ПравоИзменения" #Тогда + #Параметр(16) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) + #Если Не "#Параметр(15)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(15)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(15)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(16) + #Если Не "#Параметр(15)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + ИСТИНА // Группа параметров отключена. +#ИначеЕсли "#Параметр(15)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(16) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(16) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(15),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(15)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(15)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(15)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),") #Тогда + + ( + ЕСТЬNULL(#Параметр(16), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(15),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(15),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(16) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(15),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(16) + #ИначеЕсли "#Параметр(16)" = "Т.Ссылка" + И "#Параметр(15)" <> "Пользователи" + И "#Параметр(15)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(15)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(15)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(15),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(16) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(16) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(16)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ЕСТЬNULL(#Параметр(16), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО +#КонецЕсли + + #Параметр(17) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 5. +#Если "#Параметр(18)" = "" И "#Параметр(19)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(18)" = "Условие" Или "#Параметр(18)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(19) ) +#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" Или "#Параметр(18)" = "ПравоИзменения" #Тогда + #Параметр(19) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) + #Если Не "#Параметр(18)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(18)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(18)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(19) + #Если Не "#Параметр(18)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + ИСТИНА // Группа параметров отключена. +#ИначеЕсли "#Параметр(18)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(19) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(19) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(18)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(18)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(18)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда + + ( + ЕСТЬNULL(#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(19) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(18),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(19) + #ИначеЕсли "#Параметр(19)" = "Т.Ссылка" + И "#Параметр(18)" <> "Пользователи" + И "#Параметр(18)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(18)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(18)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(18),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(19) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(19) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(19)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ЕСТЬNULL(#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО +#КонецЕсли + + #Параметр(20) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 6. +#Если "#Параметр(21)" = "" И "#Параметр(22)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(21)" = "Условие" Или "#Параметр(21)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(22) ) +#ИначеЕсли "#Параметр(21)" = "ПравоЧтения" Или "#Параметр(21)" = "ПравоИзменения" #Тогда + #Параметр(22) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) + #Если Не "#Параметр(21)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(21)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(21)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(22) + #Если Не "#Параметр(21)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + ИСТИНА // Группа параметров отключена. +#ИначеЕсли "#Параметр(21)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(22) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(22) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(21),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(21)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(21)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(21)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),") #Тогда + + ( + ЕСТЬNULL(#Параметр(22), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(21),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(21),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(22) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(21),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(22) + #ИначеЕсли "#Параметр(22)" = "Т.Ссылка" + И "#Параметр(21)" <> "Пользователи" + И "#Параметр(21)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(21)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(21)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(21),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(22) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(22) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(22)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ЕСТЬNULL(#Параметр(22), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО +#КонецЕсли + + #Параметр(23) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 7. +#Если "#Параметр(24)" = "" И "#Параметр(25)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(24)" = "Условие" Или "#Параметр(24)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(25) ) +#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" Или "#Параметр(24)" = "ПравоИзменения" #Тогда + #Параметр(25) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) + #Если Не "#Параметр(24)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(24)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(24)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(25) + #Если Не "#Параметр(24)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + ИСТИНА // Группа параметров отключена. +#ИначеЕсли "#Параметр(24)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(25) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(25) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(24)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(24)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(24)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда + + ( + ЕСТЬNULL(#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(25) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(24),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(25) + #ИначеЕсли "#Параметр(25)" = "Т.Ссылка" + И "#Параметр(24)" <> "Пользователи" + И "#Параметр(24)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(24)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(24)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(24),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(25) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(25) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(25)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ЕСТЬNULL(#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО +#КонецЕсли + + #Параметр(26) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 8. +#Если "#Параметр(27)" = "" И "#Параметр(28)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(27)" = "Условие" Или "#Параметр(27)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(28) ) +#ИначеЕсли "#Параметр(27)" = "ПравоЧтения" Или "#Параметр(27)" = "ПравоИзменения" #Тогда + #Параметр(28) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) + #Если Не "#Параметр(27)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(27)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(27)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(28) + #Если Не "#Параметр(27)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + ИСТИНА // Группа параметров отключена. +#ИначеЕсли "#Параметр(27)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(28) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(28) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(27),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(27)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(27)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(27)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),") #Тогда + + ( + ЕСТЬNULL(#Параметр(28), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(27),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(27),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(28) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(27),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(28) + #ИначеЕсли "#Параметр(28)" = "Т.Ссылка" + И "#Параметр(27)" <> "Пользователи" + И "#Параметр(27)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(27)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(27)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(27),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(28) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(28) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(28)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ЕСТЬNULL(#Параметр(28), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО +#КонецЕсли + + #Параметр(29) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 9. +#Если "#Параметр(30)" = "" И "#Параметр(31)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(30)" = "Условие" Или "#Параметр(30)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(31) ) +#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" Или "#Параметр(30)" = "ПравоИзменения" #Тогда + #Параметр(31) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) + #Если Не "#Параметр(30)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(30)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(30)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(31) + #Если Не "#Параметр(30)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + ИСТИНА // Группа параметров отключена. +#ИначеЕсли "#Параметр(30)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(31) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(31) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(30)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(30)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(30)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда + + ( + ЕСТЬNULL(#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(31) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(30),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(31) + #ИначеЕсли "#Параметр(31)" = "Т.Ссылка" + И "#Параметр(30)" <> "Пользователи" + И "#Параметр(30)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(30)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(30)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(30),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(31) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(31) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(31)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ЕСТЬNULL(#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО +#КонецЕсли + + #Параметр(32) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 10. +#Если "#Параметр(33)" = "" И "#Параметр(34)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(33)" = "Условие" Или "#Параметр(33)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(34) ) +#ИначеЕсли "#Параметр(33)" = "ПравоЧтения" Или "#Параметр(33)" = "ПравоИзменения" #Тогда + #Параметр(34) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) + #Если Не "#Параметр(33)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(33)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(33)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(34) + #Если Не "#Параметр(33)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + ИСТИНА // Группа параметров отключена. +#ИначеЕсли "#Параметр(33)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(34) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(34) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(33),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(33)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(33)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(33)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),") #Тогда + + ( + ЕСТЬNULL(#Параметр(34), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(33),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(33),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(34) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(33),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(34) + #ИначеЕсли "#Параметр(34)" = "Т.Ссылка" + И "#Параметр(33)" <> "Пользователи" + И "#Параметр(33)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(33)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(33)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(33),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(34) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(34) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(34)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ЕСТЬNULL(#Параметр(34), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО +#КонецЕсли + + #Параметр(35) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 11. +#Если "#Параметр(36)" = "" И "#Параметр(37)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(36)" = "Условие" Или "#Параметр(36)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(37) ) +#ИначеЕсли "#Параметр(36)" = "ПравоЧтения" Или "#Параметр(36)" = "ПравоИзменения" #Тогда + #Параметр(37) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) + #Если Не "#Параметр(36)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(36)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(36)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(37) + #Если Не "#Параметр(36)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + ИСТИНА // Группа параметров отключена. +#ИначеЕсли "#Параметр(36)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(37) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(37) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(36),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(36)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(36)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(36)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),") #Тогда + + ( + ЕСТЬNULL(#Параметр(37), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(36),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(36),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(37) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(36),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(37) + #ИначеЕсли "#Параметр(37)" = "Т.Ссылка" + И "#Параметр(36)" <> "Пользователи" + И "#Параметр(36)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(36)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(36)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(36),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(37) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(37) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(37)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ЕСТЬNULL(#Параметр(37), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО +#КонецЕсли + + #Параметр(38) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 12. +#Если "#Параметр(39)" = "" И "#Параметр(40)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(39)" = "Условие" Или "#Параметр(39)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(40) ) +#ИначеЕсли "#Параметр(39)" = "ПравоЧтения" Или "#Параметр(39)" = "ПравоИзменения" #Тогда + #Параметр(40) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) + #Если Не "#Параметр(39)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(39)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(39)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(40) + #Если Не "#Параметр(39)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + ИСТИНА // Группа параметров отключена. +#ИначеЕсли "#Параметр(39)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(40) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(40) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(39),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(39)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(39)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(39)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),") #Тогда + + ( + ЕСТЬNULL(#Параметр(40), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(39),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(39),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(40) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(39),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(40) + #ИначеЕсли "#Параметр(40)" = "Т.Ссылка" + И "#Параметр(39)" <> "Пользователи" + И "#Параметр(39)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(39)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(39)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(39),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(40) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(40) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(40)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ЕСТЬNULL(#Параметр(40), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО +#КонецЕсли + + #Параметр(41) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 13. +#Если "#Параметр(42)" = "" И "#Параметр(43)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(42)" = "Условие" Или "#Параметр(42)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(43) ) +#ИначеЕсли "#Параметр(42)" = "ПравоЧтения" Или "#Параметр(42)" = "ПравоИзменения" #Тогда + #Параметр(43) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) + #Если Не "#Параметр(42)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(42)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(42)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(43) + #Если Не "#Параметр(42)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + ИСТИНА // Группа параметров отключена. +#ИначеЕсли "#Параметр(42)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(43) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(43) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(42),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(42)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(42)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(42)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),") #Тогда + + ( + ЕСТЬNULL(#Параметр(43), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(42),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(42),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(43) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(42),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(43) + #ИначеЕсли "#Параметр(43)" = "Т.Ссылка" + И "#Параметр(42)" <> "Пользователи" + И "#Параметр(42)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(42)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(42)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(42),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(43) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(43) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(43)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ЕСТЬNULL(#Параметр(43), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО +#КонецЕсли + + #Параметр(44) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 14. +#Если "#Параметр(45)" = "" И "#Параметр(46)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(45)" = "Условие" Или "#Параметр(45)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(46) ) +#ИначеЕсли "#Параметр(45)" = "ПравоЧтения" Или "#Параметр(45)" = "ПравоИзменения" #Тогда + #Параметр(46) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) + #Если Не "#Параметр(45)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(45)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(45)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(46) + #Если Не "#Параметр(45)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + ИСТИНА // Группа параметров отключена. +#ИначеЕсли "#Параметр(45)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(46) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(46) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(45),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(45)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(45)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(45)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),") #Тогда + + ( + ЕСТЬNULL(#Параметр(46), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(45),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(45),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(46) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(45),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(46) + #ИначеЕсли "#Параметр(46)" = "Т.Ссылка" + И "#Параметр(45)" <> "Пользователи" + И "#Параметр(45)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(45)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(45)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(45),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(46) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(46) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(46)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ЕСТЬNULL(#Параметр(46), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО +#КонецЕсли + + #Параметр(47) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 15. +#Если "#Параметр(48)" = "" И "#Параметр(49)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(48)" = "Условие" Или "#Параметр(48)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(49) ) +#ИначеЕсли "#Параметр(48)" = "ПравоЧтения" Или "#Параметр(48)" = "ПравоИзменения" #Тогда + #Параметр(49) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) + #Если Не "#Параметр(48)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(48)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(48)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(49) + #Если Не "#Параметр(48)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + ИСТИНА // Группа параметров отключена. +#ИначеЕсли "#Параметр(48)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(49) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(49) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(48),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(48)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(48)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(48)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),") #Тогда + + ( + ЕСТЬNULL(#Параметр(49), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(48),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(48),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(49) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(48),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(49) + #ИначеЕсли "#Параметр(49)" = "Т.Ссылка" + И "#Параметр(48)" <> "Пользователи" + И "#Параметр(48)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(48)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(48)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(48),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(49) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(49) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(49)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ЕСТЬNULL(#Параметр(49), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО +#КонецЕсли + + #Параметр(50) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 16. +#Если "#Параметр(51)" = "" И "#Параметр(52)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(51)" = "Условие" Или "#Параметр(51)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(52) ) +#ИначеЕсли "#Параметр(51)" = "ПравоЧтения" Или "#Параметр(51)" = "ПравоИзменения" #Тогда + #Параметр(52) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) + #Если Не "#Параметр(51)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(51)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(51)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(52) + #Если Не "#Параметр(51)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + ИСТИНА // Группа параметров отключена. +#ИначеЕсли "#Параметр(51)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(52) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(52) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(51),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(51)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(51)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(51)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),") #Тогда + + ( + ЕСТЬNULL(#Параметр(52), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(51),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(51),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(52) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(51),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(52) + #ИначеЕсли "#Параметр(52)" = "Т.Ссылка" + И "#Параметр(51)" <> "Пользователи" + И "#Параметр(51)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(51)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(51)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(51),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(52) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(52) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(52)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ЕСТЬNULL(#Параметр(52), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО +#КонецЕсли + + #Параметр(53) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + + ) +) +#КонецЕсли + +#КонецЕсли // Информационная база заблокирована для обновления. + + + diff --git a/SSL/src/Roles/ДобавлениеИзменениеЛичныхШаблоновСообщений/ДобавлениеИзменениеЛичныхШаблоновСообщений.mdo b/SSL/src/Roles/ДобавлениеИзменениеЛичныхШаблоновСообщений/ДобавлениеИзменениеЛичныхШаблоновСообщений.mdo new file mode 100644 index 000000000..98b72c626 --- /dev/null +++ b/SSL/src/Roles/ДобавлениеИзменениеЛичныхШаблоновСообщений/ДобавлениеИзменениеЛичныхШаблоновСообщений.mdo @@ -0,0 +1,8 @@ + + + ДобавлениеИзменениеЛичныхШаблоновСообщений + + ru + Добавление изменение личных шаблонов сообщений + + diff --git a/SSL/src/Roles/ДобавлениеИзменениеНапоминаний/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеНапоминаний/Rights.rights index bb4334607..7e29f9d38 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеНапоминаний/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеНапоминаний/Rights.rights @@ -16,14 +16,22 @@ Read true - ГДЕ Пользователь = &ТекущийПользователь + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляРегистра("ИдентификаторыОбъектовМетаданных.РегистрСведенийНапоминанияПользователя", "Пользователь", "", "", "", "") +#Иначе +ГДЕ Пользователь = &ТекущийПользователь +#КонецЕсли Update true - ГДЕ Пользователь = &ТекущийПользователь + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляРегистра("ИдентификаторыОбъектовМетаданных.РегистрСведенийНапоминанияПользователя", "Пользователь", "", "", "", "") +#Иначе +ГДЕ Пользователь = &ТекущийПользователь +#КонецЕсли @@ -46,4 +54,238 @@ true + + ДляРегистра(Регистр, Поле1, Поле2, Поле3, Поле4, Поле5) + // ДляРегистра(Регистр, Поле1, Поле2 = "", Поле3 = "", Поле4 = "", Поле5 = "") +// Шаблон используется для ограничения групп записей регистров. +// +// Параметры: +// Регистр - имя предопределенного элемента справочника Идентификаторы объектов метаданных или справочника +// Идентификаторы объектов расширений в формате: имя справочника с точкой и полное имя таблицы +// без точки, например, ИдентификаторыОбъектовМетаданных.РегистрНакопленияОстаткиНаСкладах; +// - имя отдельного регистра ключей в формате КлючиДоступаКРегистру<ОстатокИмени>, +// например, КлючиДоступаКРегиструОстаткиНаСкладах. +// Поле1 - имя первого поля (измерения, ресурса, реквизита), которое будет соединяться с полем Поле1 +// регистра сведений КлючиДоступаКРегистр* +// Поле2 - аналогично предыдущему параметру, если используется в ограничении доступа к регистру. +// ... +// Поле5 - аналогично предыдущему параметру, если используется в ограничении доступа к регистру. + +#Если &СпискиСОтключеннымОграничениемЧтения = "Неопределено" #Тогда + // Информационная база заблокирована для обновления. + ГДЕ ЛОЖЬ + +#ИначеЕсли Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляРегистра1,") #Тогда + И Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляРегистра1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Требуется обновить шаблон на актуальную версию, поставляемую в роли ИзменениеУчастниковГруппДоступа по причине: Используется устаревшая версия 1 шаблона ограничения доступа ДляРегистра. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли &СпискиСОтключеннымОграничениемЧтения = "Все" #Тогда + // У пользователя отключены все виды доступа или + // ограничение на уровне записей не используется. + +#ИначеЕсли СтрСодержит(&СпискиСОтключеннымОграничениемЧтения, #ИмяТекущейТаблицы) #Тогда + // У пользователя отключено ограничение для текущей таблицы. + +#ИначеЕсли СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляРегистра1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Версия программы обновлена, требуется перезапустить сеанс. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли #ИмяТекущегоПраваДоступа <> "Чтение" #Тогда + // Проверка прав Добавление, Изменение, Удаление выполняется ПередЗаписью / ПриЗаписи. + ГДЕ ИСТИНА + +#ИначеЕсли Не СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":[#Регистр]:#Поле1:#Поле2:#Поле3:#Поле4:#Поле5;") + И Не СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":[#Регистр]:#Поле1:#Поле2:#Поле3:#Поле4:#Поле5;") #Тогда + + Ошибка: Требуется актуализировать ограничение доступа по причине: Не удалось определить вариант ограничения доступа в параметрах сеанса для шаблона ДляРегистра со значениями параметров "#Регистр", "#Поле1", "#Поле2", "#Поле3", "#Поле4", "#Поле5". Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. +#Иначе + +ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА +#Если Не СтрСодержит("#Регистр", "КлючиДоступаКРегистру") #Тогда + ИЗ РегистрСведений.КлючиДоступаКРегистрам КАК КлючиДоступаКРегистрам +#Иначе + ИЗ РегистрСведений.#Регистр КАК КлючиДоступаКРегистрам +#КонецЕсли +#Если Не СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":[#Регистр]:#Поле1:#Поле2:#Поле3:#Поле4:#Поле5;") #Тогда + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + +#ИначеЕсли &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа +#Иначе + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа +#КонецЕсли + ПО + #Если Не СтрСодержит("#Регистр", "КлючиДоступаКРегистру") #Тогда + КлючиДоступаКРегистрам.Регистр = Значение(Справочник.#Регистр) + #Иначе + ИСТИНА + #КонецЕсли + + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И КлючиДоступаКРегистрам.ДляВнешнихПользователей = ЛОЖЬ + #Иначе + И КлючиДоступаКРегистрам.ДляВнешнихПользователей = ИСТИНА + #КонецЕсли + + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле1 + #КонецЕсли + + #Если "#Поле2" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") #Тогда + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле2 + #Иначе + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле2 + #КонецЕсли + #КонецЕсли + + #Если "#Поле3" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") #Тогда + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") #Тогда + + И КлючиДоступаКРегистрам.Поле3 = ТекущаяТаблица.#Поле3 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле3 + #Иначе + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле3 + #КонецЕсли + #КонецЕсли + + #Если "#Поле4" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле4;") #Тогда + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") #Тогда + + И КлючиДоступаКРегистрам.Поле4 = ТекущаяТаблица.#Поле4 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") #Тогда + + И КлючиДоступаКРегистрам.Поле3 = ТекущаяТаблица.#Поле4 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле4 + #Иначе + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле4 + #КонецЕсли + #КонецЕсли + + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле4;") #Тогда + + И КлючиДоступаКРегистрам.Поле5 = ТекущаяТаблица.#Поле5 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") #Тогда + + И КлючиДоступаКРегистрам.Поле4 = ТекущаяТаблица.#Поле5 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") #Тогда + + И КлючиДоступаКРегистрам.Поле3 = ТекущаяТаблица.#Поле5 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле5 + #Иначе + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле5 + #КонецЕсли + #КонецЕсли + + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле4;") #Тогда + + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = ТекущаяТаблица.#Поле5 + #ИначеЕсли "#Поле5" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") #Тогда + + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле4 = ТекущаяТаблица.#Поле5 + #ИначеЕсли "#Поле4" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле4;") #Тогда + И КлючиДоступаКРегистрам.Поле4 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле5" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") #Тогда + + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле3 = ТекущаяТаблица.#Поле5 + #ИначеЕсли "#Поле3" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле3;") #Тогда + И КлючиДоступаКРегистрам.Поле3 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле4" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле4;") #Тогда + И КлючиДоступаКРегистрам.Поле4 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле5" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле5 + #ИначеЕсли "#Поле2" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле2;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле3" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле3;") #Тогда + И КлючиДоступаКРегистрам.Поле3 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле4" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле4;") #Тогда + И КлючиДоступаКРегистрам.Поле4 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле5" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Иначе + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле5 + #Иначе + И КлючиДоступаКРегистрам.Поле1 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле2" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле2;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле3" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле3;") #Тогда + И КлючиДоступаКРегистрам.Поле3 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле4" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле4;") #Тогда + И КлючиДоступаКРегистрам.Поле4 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле5" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #КонецЕсли + + #Если Не СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":[#Регистр]:#Поле1:#Поле2:#Поле3:#Поле4:#Поле5;") #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКРегистрам.КлючДоступа + И РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя) + + #ИначеЕсли &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКРегистрам.КлючДоступа + И РазрешенныеКлючиДоступа.Пользователь = &ТекущийПользователь + #Иначе + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКРегистрам.КлючДоступа + И РазрешенныеКлючиДоступа.ВнешнийПользователь = &ТекущийВнешнийПользователь + #КонецЕсли + ) + +#КонецЕсли + + diff --git a/SSL/src/Roles/ДобавлениеИзменениеПапокИФайлов/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеПапокИФайлов/Rights.rights index 3142a1ef9..f4e4669c8 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеПапокИФайлов/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеПапокИФайлов/Rights.rights @@ -36,24 +36,36 @@ Read true - #ПоЗначениям("Справочник.ПапкиФайлов", "", "", -"НастройкиПрав", "Ссылка", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","") + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоЗначениям("Справочник.ПапкиФайлов", "", "", +"НастройкиПрав", "Ссылка", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","") +#КонецЕсли Insert true - #ПоЗначениям("Справочник.ПапкиФайлов", "", "", -"НастройкиПрав", "Ссылка", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","") + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоЗначениям("Справочник.ПапкиФайлов", "", "", +"НастройкиПрав", "Ссылка", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","") +#КонецЕсли Update true - #ПоЗначениям("Справочник.ПапкиФайлов", "", "", -"НастройкиПрав", "Ссылка", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","") + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоЗначениям("Справочник.ПапкиФайлов", "", "", +"НастройкиПрав", "Ссылка", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","") +#КонецЕсли @@ -82,7 +94,7 @@ - CommonForm.НастройкаОсновногоРабочегоКаталога + CommonForm.НастройкаРабочегоКаталога View true @@ -108,32 +120,42 @@ Read true - #ПоЗначениямИНаборамРасширенный("Справочник.Файлы", "", "", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("ВладелецФайла") +#Иначе +#ПоЗначениямИНаборамРасширенный("Справочник.Файлы", "", "", "", "", -"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +#КонецЕсли Insert true - #ПоЗначениямИНаборамРасширенный("Справочник.Файлы", "", "", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("ВладелецФайла") +#Иначе +#ПоЗначениямИНаборамРасширенный("Справочник.Файлы", "", "", "", "", "Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") - +#КонецЕсли Update true - #ПоЗначениямИНаборамРасширенный("Справочник.Файлы", "", "", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("ВладелецФайла") +#Иначе +#ПоЗначениямИНаборамРасширенный("Справочник.Файлы", "", "", "", "", "Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") - +#КонецЕсли @@ -167,21 +189,28 @@ Read true - #ПоЗначениямИНаборамРасширенный("Справочник.ВерсииФайлов", "", "", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("Владелец.ВладелецФайла") +#Иначе +#ПоЗначениямИНаборамРасширенный("Справочник.ВерсииФайлов", "", "", "", "", "Объект","Т.Владелец.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") - +#КонецЕсли Update true - #ПоЗначениямИНаборамРасширенный("Справочник.ВерсииФайлов", "", "", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("Владелец.ВладелецФайла") +#Иначе +#ПоЗначениямИНаборамРасширенный("Справочник.ВерсииФайлов", "", "", "", "", -"Объект","Т.Владелец.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +"Объект","Т.Владелец.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +#КонецЕсли @@ -205,6 +234,137 @@ true + + ДляОбъекта(ПолеОбъекта) + // ДляОбъекта(ПолеОбъекта = "") +// Шаблон используется для ограничения элементов справочников, документов и +// других списков объектов по полю Ссылка, а также элементов зависимых списков +// объектов и записей регистров через поле объекта-владельца. +// +// Параметры: +// ПолеОбъекта - имя поля, содержащего ссылку на объект, от которого зависит элемент списка. +// Значение "" (по умолчанию) то же, что имя поля "Ссылка". +// + +#Если &СпискиСОтключеннымОграничениемЧтения = "Неопределено" #Тогда + // Информационная база заблокирована для обновления. + ГДЕ ЛОЖЬ + +#ИначеЕсли Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1,") + И Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Требуется обновить шаблон на актуальную версию, поставляемую в роли ИзменениеУчастниковГруппДоступа по причине: Используется устаревшая версия 1 шаблона ограничения доступа ДляОбъекта. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли &СпискиСОтключеннымОграничениемЧтения = "Все" #Тогда + // У пользователя отключены все виды доступа или + // ограничение на уровне записей не используется. + +#ИначеЕсли СтрСодержит(&СпискиСОтключеннымОграничениемЧтения, #ИмяТекущейТаблицы) #Тогда + // У пользователя отключено ограничение для текущей таблицы. + +#ИначеЕсли СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Версия программы обновлена, требуется перезапустить сеанс. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли #ИмяТекущегоПраваДоступа <> "Чтение" #Тогда + // Проверка прав Добавление, Изменение, Удаление выполняется ПередЗаписью / ПриЗаписи. + ГДЕ ИСТИНА + +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам +#Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа +#Иначе + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа +#КонецЕсли + ПО + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + И РазрешенныеКлючиДоступа.Пользователь = &ТекущийПользователь + #Иначе + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + И РазрешенныеКлючиДоступа.ВнешнийПользователь = &ТекущийВнешнийПользователь + #КонецЕсли + ) +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + ПО + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + #Иначе + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + #КонецЕсли + И РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя) + ) +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + ГДЕ + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + И ( + ИСТИНА В ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ИЗ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа + #Иначе + ИЗ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа + #КонецЕсли + ГДЕ + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + И РазрешенныеКлючиДоступа.Пользователь = &ТекущийПользователь + #Иначе + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + И РазрешенныеКлючиДоступа.ВнешнийПользователь = &ТекущийВнешнийПользователь + #КонецЕсли + ) + ИЛИ + ИСТИНА В ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + ГДЕ + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + #Иначе + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + #КонецЕсли + И РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя) + ) + ) + ) + +#Иначе + Ошибка: Требуется актуализировать ограничение доступа по причине: Не удалось определить вариант ограничения доступа в параметрах сеанса для шаблона ДляОбъекта со значением параметра "#ПолеОбъекта". Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. +#КонецЕсли + + ПоЗначениям // ПоЗначениям(Таблица, -, Модификатор, В1,П1, В2,П2, ..., В(n), П(n)). @@ -269,100 +429,52 @@ ( Истина И ("#Параметр(4)" = "" И "#Параметр(5)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(4),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(4),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(4),")) И ("#Параметр(6)" = "" И "#Параметр(7)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),")) И ("#Параметр(8)" = "" И "#Параметр(9)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(8),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(8),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(8),")) И ("#Параметр(10)" = "" И "#Параметр(11)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(10),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(10),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(10),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),")) И ("#Параметр(14)" = "" И "#Параметр(15)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(14),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(14),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(14),")) И ("#Параметр(16)" = "" И "#Параметр(17)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(16),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(16),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(16),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),")) И ("#Параметр(20)" = "" И "#Параметр(21)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(20),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(20),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(20),")) И ("#Параметр(22)" = "" И "#Параметр(23)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(22),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(22),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(22),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),")) И ("#Параметр(26)" = "" И "#Параметр(27)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(26),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(26),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(26),")) И ("#Параметр(28)" = "" И "#Параметр(29)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(28),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(28),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(28),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),")) И ("#Параметр(32)" = "" И "#Параметр(33)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(32),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(32),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(32),")) И ("#Параметр(34)" = "" И "#Параметр(35)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(34),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(34),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(34),")) ) #Тогда Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). @@ -384,8 +496,10 @@ ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если #ИмяТекущегоПраваДоступа = "Изменение" #Тогда И ТаблицыГруппДоступа.Изменение + #ИначеЕсли #ИмяТекущегоПраваДоступа = "Добавление" #Тогда + И ТаблицыГруппДоступа.Добавление #КонецЕсли ) И ГруппыДоступа.Ссылка В @@ -578,7 +692,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(Т.#Параметр(5), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 2. @@ -752,6 +866,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 3. @@ -925,6 +1041,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(9), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 4. @@ -1098,6 +1216,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(11), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 5. @@ -1271,6 +1391,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 6. @@ -1444,6 +1566,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(15), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 7. @@ -1617,6 +1741,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(17), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 8. @@ -1790,6 +1916,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 9. @@ -1963,6 +2091,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(21), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 10. @@ -2136,6 +2266,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(23), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 11. @@ -2309,6 +2441,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 12. @@ -2482,6 +2616,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(27), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 13. @@ -2655,6 +2791,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(29), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 14. @@ -2828,6 +2966,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 15. @@ -3001,6 +3141,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(33), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 16. @@ -3174,6 +3316,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(35), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли ) @@ -3282,100 +3426,52 @@ ( Истина И ("#Параметр(6)" = "" И "#Параметр(7)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),")) И ("#Параметр(9)" = "" И "#Параметр(10)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),")) И ("#Параметр(15)" = "" И "#Параметр(16)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),")) И ("#Параметр(21)" = "" И "#Параметр(22)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),")) И ("#Параметр(27)" = "" И "#Параметр(28)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),")) И ("#Параметр(33)" = "" И "#Параметр(34)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),")) И ("#Параметр(36)" = "" И "#Параметр(37)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),")) И ("#Параметр(39)" = "" И "#Параметр(40)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),")) И ("#Параметр(42)" = "" И "#Параметр(43)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),")) И ("#Параметр(45)" = "" И "#Параметр(46)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),")) И ("#Параметр(48)" = "" И "#Параметр(49)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),")) И ("#Параметр(51)" = "" И "#Параметр(52)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),")) ) #Тогда Т ИЗ Т // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). @@ -3402,8 +3498,10 @@ ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если #ИмяТекущегоПраваДоступа = "Изменение" #Тогда И ТаблицыГруппДоступа.Изменение + #ИначеЕсли #ИмяТекущегоПраваДоступа = "Добавление" #Тогда + И ТаблицыГруппДоступа.Добавление #КонецЕсли ) И ГруппыДоступа.Ссылка В @@ -3991,7 +4089,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(8) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -4561,7 +4659,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(10), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(11) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -5131,7 +5229,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(14) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -5701,7 +5799,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(16), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(17) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -6271,7 +6369,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(20) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -6841,7 +6939,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(22), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(23) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -7411,7 +7509,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(26) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -7981,7 +8079,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(28), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(29) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -8551,7 +8649,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(32) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -9121,7 +9219,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(34), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(35) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -9691,7 +9789,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(37), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(38) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -10261,7 +10359,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(40), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(41) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -10831,7 +10929,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(43), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(44) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -11401,7 +11499,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(46), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(47) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -11971,7 +12069,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(49), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(50) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -12541,7 +12639,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(52), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(53) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. diff --git a/SSL/src/Roles/ДобавлениеИзменениеРассылокОтчетов/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеРассылокОтчетов/Rights.rights index 8456ef16b..19300d5bf 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеРассылокОтчетов/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеРассылокОтчетов/Rights.rights @@ -34,9 +34,13 @@ Read true - РассылкиОтчетов ГДЕ (РассылкиОтчетов.Автор = &ТекущийПользователь + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +РассылкиОтчетов ГДЕ (РассылкиОтчетов.Автор = &ТекущийПользователь ИЛИ РассылкиОтчетов.Личная = ЛОЖЬ - ИЛИ РассылкиОтчетов.ЭтоГруппа = ИСТИНА) + ИЛИ РассылкиОтчетов.ЭтоГруппа = ИСТИНА) +#КонецЕсли @@ -103,4 +107,135 @@ true + + ДляОбъекта(ПолеОбъекта) + // ДляОбъекта(ПолеОбъекта = "") +// Шаблон используется для ограничения элементов справочников, документов и +// других списков объектов по полю Ссылка, а также элементов зависимых списков +// объектов и записей регистров через поле объекта-владельца. +// +// Параметры: +// ПолеОбъекта - имя поля, содержащего ссылку на объект, от которого зависит элемент списка. +// Значение "" (по умолчанию) то же, что имя поля "Ссылка". +// + +#Если &СпискиСОтключеннымОграничениемЧтения = "Неопределено" #Тогда + // Информационная база заблокирована для обновления. + ГДЕ ЛОЖЬ + +#ИначеЕсли Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1,") + И Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Требуется обновить шаблон на актуальную версию, поставляемую в роли ИзменениеУчастниковГруппДоступа по причине: Используется устаревшая версия 1 шаблона ограничения доступа ДляОбъекта. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли &СпискиСОтключеннымОграничениемЧтения = "Все" #Тогда + // У пользователя отключены все виды доступа или + // ограничение на уровне записей не используется. + +#ИначеЕсли СтрСодержит(&СпискиСОтключеннымОграничениемЧтения, #ИмяТекущейТаблицы) #Тогда + // У пользователя отключено ограничение для текущей таблицы. + +#ИначеЕсли СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Версия программы обновлена, требуется перезапустить сеанс. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли #ИмяТекущегоПраваДоступа <> "Чтение" #Тогда + // Проверка прав Добавление, Изменение, Удаление выполняется ПередЗаписью / ПриЗаписи. + ГДЕ ИСТИНА + +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам +#Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа +#Иначе + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа +#КонецЕсли + ПО + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + И РазрешенныеКлючиДоступа.Пользователь = &ТекущийПользователь + #Иначе + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + И РазрешенныеКлючиДоступа.ВнешнийПользователь = &ТекущийВнешнийПользователь + #КонецЕсли + ) +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + ПО + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + #Иначе + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + #КонецЕсли + И РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя) + ) +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + ГДЕ + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + И ( + ИСТИНА В ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ИЗ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа + #Иначе + ИЗ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа + #КонецЕсли + ГДЕ + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + И РазрешенныеКлючиДоступа.Пользователь = &ТекущийПользователь + #Иначе + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + И РазрешенныеКлючиДоступа.ВнешнийПользователь = &ТекущийВнешнийПользователь + #КонецЕсли + ) + ИЛИ + ИСТИНА В ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + ГДЕ + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + #Иначе + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + #КонецЕсли + И РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя) + ) + ) + ) + +#Иначе + Ошибка: Требуется актуализировать ограничение доступа по причине: Не удалось определить вариант ограничения доступа в параметрах сеанса для шаблона ДляОбъекта со значением параметра "#ПолеОбъекта". Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. +#КонецЕсли + + diff --git a/SSL/src/Roles/ДобавлениеИзменениеУчетныхЗаписейЭлектроннойПочты/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеУчетныхЗаписейЭлектроннойПочты/Rights.rights index f4e7b1d87..28db11c4f 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеУчетныхЗаписейЭлектроннойПочты/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеУчетныхЗаписейЭлектроннойПочты/Rights.rights @@ -16,36 +16,47 @@ Read true - #ПоЗначениямРасширенный("Справочник.УчетныеЗаписиЭлектроннойПочты", "", "", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоЗначениямРасширенный("Справочник.УчетныеЗаписиЭлектроннойПочты", "", "", "", "", "УчетныеЗаписиЭлектроннойПочты", "Т.Ссылка", "ИЛИ(", "Пользователи", "Т.ВладелецУчетнойЗаписи", "И", "Условие", "Т.ВладелецУчетнойЗаписи <> Значение(Справочник.Пользователи.ПустаяСсылка)", ")", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "") - +#КонецЕсли Insert true - #ПоЗначениямРасширенный("Справочник.УчетныеЗаписиЭлектроннойПочты", "", "", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоЗначениямРасширенный("Справочник.УчетныеЗаписиЭлектроннойПочты", "", "", "", "", "Пользователи", "Т.ВладелецУчетнойЗаписи", "И", -"Условие", "Т.ВладелецУчетнойЗаписи <> Значение(Справочник.Пользователи.ПустаяСсылка)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "") +"Условие", "Т.ВладелецУчетнойЗаписи <> Значение(Справочник.Пользователи.ПустаяСсылка)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "") +#КонецЕсли Update true - #ПоЗначениямРасширенный("Справочник.УчетныеЗаписиЭлектроннойПочты", "", "", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоЗначениямРасширенный("Справочник.УчетныеЗаписиЭлектроннойПочты", "", "", "", "", "Пользователи", "Т.ВладелецУчетнойЗаписи", "И", -"Условие", "Т.ВладелецУчетнойЗаписи <> Значение(Справочник.Пользователи.ПустаяСсылка)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "") +"Условие", "Т.ВладелецУчетнойЗаписи <> Значение(Справочник.Пользователи.ПустаяСсылка)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "") +#КонецЕсли @@ -80,6 +91,137 @@ true + + ДляОбъекта(ПолеОбъекта) + // ДляОбъекта(ПолеОбъекта = "") +// Шаблон используется для ограничения элементов справочников, документов и +// других списков объектов по полю Ссылка, а также элементов зависимых списков +// объектов и записей регистров через поле объекта-владельца. +// +// Параметры: +// ПолеОбъекта - имя поля, содержащего ссылку на объект, от которого зависит элемент списка. +// Значение "" (по умолчанию) то же, что имя поля "Ссылка". +// + +#Если &СпискиСОтключеннымОграничениемЧтения = "Неопределено" #Тогда + // Информационная база заблокирована для обновления. + ГДЕ ЛОЖЬ + +#ИначеЕсли Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1,") + И Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Требуется обновить шаблон на актуальную версию, поставляемую в роли ИзменениеУчастниковГруппДоступа по причине: Используется устаревшая версия 1 шаблона ограничения доступа ДляОбъекта. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли &СпискиСОтключеннымОграничениемЧтения = "Все" #Тогда + // У пользователя отключены все виды доступа или + // ограничение на уровне записей не используется. + +#ИначеЕсли СтрСодержит(&СпискиСОтключеннымОграничениемЧтения, #ИмяТекущейТаблицы) #Тогда + // У пользователя отключено ограничение для текущей таблицы. + +#ИначеЕсли СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Версия программы обновлена, требуется перезапустить сеанс. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли #ИмяТекущегоПраваДоступа <> "Чтение" #Тогда + // Проверка прав Добавление, Изменение, Удаление выполняется ПередЗаписью / ПриЗаписи. + ГДЕ ИСТИНА + +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам +#Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа +#Иначе + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа +#КонецЕсли + ПО + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + И РазрешенныеКлючиДоступа.Пользователь = &ТекущийПользователь + #Иначе + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + И РазрешенныеКлючиДоступа.ВнешнийПользователь = &ТекущийВнешнийПользователь + #КонецЕсли + ) +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + ПО + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + #Иначе + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + #КонецЕсли + И РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя) + ) +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + ГДЕ + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + И ( + ИСТИНА В ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ИЗ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа + #Иначе + ИЗ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа + #КонецЕсли + ГДЕ + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + И РазрешенныеКлючиДоступа.Пользователь = &ТекущийПользователь + #Иначе + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + И РазрешенныеКлючиДоступа.ВнешнийПользователь = &ТекущийВнешнийПользователь + #КонецЕсли + ) + ИЛИ + ИСТИНА В ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + ГДЕ + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + #Иначе + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + #КонецЕсли + И РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя) + ) + ) + ) + +#Иначе + Ошибка: Требуется актуализировать ограничение доступа по причине: Не удалось определить вариант ограничения доступа в параметрах сеанса для шаблона ДляОбъекта со значением параметра "#ПолеОбъекта". Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. +#КонецЕсли + + ПоЗначениям // ПоЗначениям(Таблица, -, Модификатор, В1,П1, В2,П2, ..., В(n), П(n)). @@ -144,100 +286,52 @@ ( Истина И ("#Параметр(4)" = "" И "#Параметр(5)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(4),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(4),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(4),")) И ("#Параметр(6)" = "" И "#Параметр(7)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),")) И ("#Параметр(8)" = "" И "#Параметр(9)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(8),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(8),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(8),")) И ("#Параметр(10)" = "" И "#Параметр(11)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(10),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(10),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(10),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),")) И ("#Параметр(14)" = "" И "#Параметр(15)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(14),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(14),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(14),")) И ("#Параметр(16)" = "" И "#Параметр(17)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(16),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(16),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(16),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),")) И ("#Параметр(20)" = "" И "#Параметр(21)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(20),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(20),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(20),")) И ("#Параметр(22)" = "" И "#Параметр(23)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(22),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(22),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(22),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),")) И ("#Параметр(26)" = "" И "#Параметр(27)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(26),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(26),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(26),")) И ("#Параметр(28)" = "" И "#Параметр(29)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(28),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(28),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(28),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),")) И ("#Параметр(32)" = "" И "#Параметр(33)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(32),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(32),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(32),")) И ("#Параметр(34)" = "" И "#Параметр(35)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(34),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(34),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(34),")) ) #Тогда Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). @@ -259,8 +353,10 @@ ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если #ИмяТекущегоПраваДоступа = "Изменение" #Тогда И ТаблицыГруппДоступа.Изменение + #ИначеЕсли #ИмяТекущегоПраваДоступа = "Добавление" #Тогда + И ТаблицыГруппДоступа.Добавление #КонецЕсли ) И ГруппыДоступа.Ссылка В @@ -453,7 +549,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(Т.#Параметр(5), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 2. @@ -627,6 +723,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 3. @@ -800,6 +898,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(9), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 4. @@ -973,6 +1073,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(11), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 5. @@ -1146,6 +1248,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 6. @@ -1319,6 +1423,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(15), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 7. @@ -1492,6 +1598,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(17), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 8. @@ -1665,6 +1773,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 9. @@ -1838,6 +1948,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(21), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 10. @@ -2011,6 +2123,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(23), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 11. @@ -2184,6 +2298,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 12. @@ -2357,6 +2473,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(27), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 13. @@ -2530,6 +2648,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(29), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 14. @@ -2703,6 +2823,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 15. @@ -2876,6 +2998,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(33), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 16. @@ -3049,6 +3173,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(35), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли ) @@ -3135,100 +3261,52 @@ ( Истина И ("#Параметр(6)" = "" И "#Параметр(7)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),")) И ("#Параметр(9)" = "" И "#Параметр(10)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),")) И ("#Параметр(15)" = "" И "#Параметр(16)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),")) И ("#Параметр(21)" = "" И "#Параметр(22)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),")) И ("#Параметр(27)" = "" И "#Параметр(28)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),")) И ("#Параметр(33)" = "" И "#Параметр(34)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),")) И ("#Параметр(36)" = "" И "#Параметр(37)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),")) И ("#Параметр(39)" = "" И "#Параметр(40)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),")) И ("#Параметр(42)" = "" И "#Параметр(43)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),")) И ("#Параметр(45)" = "" И "#Параметр(46)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),")) И ("#Параметр(48)" = "" И "#Параметр(49)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),")) И ("#Параметр(51)" = "" И "#Параметр(52)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),")) ) #Тогда Т ИЗ Т // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). @@ -3255,8 +3333,10 @@ ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если #ИмяТекущегоПраваДоступа = "Изменение" #Тогда И ТаблицыГруппДоступа.Изменение + #ИначеЕсли #ИмяТекущегоПраваДоступа = "Добавление" #Тогда + И ТаблицыГруппДоступа.Добавление #КонецЕсли ) И ГруппыДоступа.Ссылка В @@ -3451,7 +3531,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(8) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -3628,7 +3708,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(10), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(11) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -3805,7 +3885,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(14) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -3982,7 +4062,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(16), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(17) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -4159,7 +4239,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(20) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -4336,7 +4416,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(22), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(23) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -4513,7 +4593,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(26) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -4690,7 +4770,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(28), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(29) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -4867,7 +4947,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(32) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -5044,7 +5124,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(34), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(35) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -5221,7 +5301,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(37), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(38) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -5398,7 +5478,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(40), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(41) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -5575,7 +5655,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(43), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(44) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -5752,7 +5832,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(46), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(47) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -5929,7 +6009,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(49), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(50) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -6106,7 +6186,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(52), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(53) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. diff --git a/SSL/src/Roles/ИзменениеВыполнениеЗадач/Rights.rights b/SSL/src/Roles/ИзменениеВыполнениеЗадач/Rights.rights index d87d4c398..596bf22ae 100644 --- a/SSL/src/Roles/ИзменениеВыполнениеЗадач/Rights.rights +++ b/SSL/src/Roles/ИзменениеВыполнениеЗадач/Rights.rights @@ -27,27 +27,32 @@ Read true - #ПоЗначениямИНаборамРасширенный( "Задача.ЗадачаИсполнителя", "", "", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоЗначениямИНаборамРасширенный( "Задача.ЗадачаИсполнителя", "", "", "", "", "Объект","Т.БизнесПроцесс","ИЛИ", "Пользователи","Т.Автор","ИЛИ", "Пользователи","Т.Исполнитель","ИЛИ", "Пользователи","Т.ГруппаИсполнителейЗадач","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") - - +#КонецЕсли Update true - #ПоЗначениямИНаборамРасширенный( "Задача.ЗадачаИсполнителя", "", "", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоЗначениямИНаборамРасширенный( "Задача.ЗадачаИсполнителя", "", "", "", "", "Пользователи","Т.Исполнитель","ИЛИ", "Пользователи","Т.ГруппаИсполнителейЗадач", "","","", "","","", "", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") - +#КонецЕсли @@ -173,6 +178,137 @@ true + + ДляОбъекта(ПолеОбъекта) + // ДляОбъекта(ПолеОбъекта = "") +// Шаблон используется для ограничения элементов справочников, документов и +// других списков объектов по полю Ссылка, а также элементов зависимых списков +// объектов и записей регистров через поле объекта-владельца. +// +// Параметры: +// ПолеОбъекта - имя поля, содержащего ссылку на объект, от которого зависит элемент списка. +// Значение "" (по умолчанию) то же, что имя поля "Ссылка". +// + +#Если &СпискиСОтключеннымОграничениемЧтения = "Неопределено" #Тогда + // Информационная база заблокирована для обновления. + ГДЕ ЛОЖЬ + +#ИначеЕсли Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1,") + И Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Требуется обновить шаблон на актуальную версию, поставляемую в роли ИзменениеУчастниковГруппДоступа по причине: Используется устаревшая версия 1 шаблона ограничения доступа ДляОбъекта. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли &СпискиСОтключеннымОграничениемЧтения = "Все" #Тогда + // У пользователя отключены все виды доступа или + // ограничение на уровне записей не используется. + +#ИначеЕсли СтрСодержит(&СпискиСОтключеннымОграничениемЧтения, #ИмяТекущейТаблицы) #Тогда + // У пользователя отключено ограничение для текущей таблицы. + +#ИначеЕсли СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Версия программы обновлена, требуется перезапустить сеанс. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли #ИмяТекущегоПраваДоступа <> "Чтение" #Тогда + // Проверка прав Добавление, Изменение, Удаление выполняется ПередЗаписью / ПриЗаписи. + ГДЕ ИСТИНА + +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам +#Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа +#Иначе + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа +#КонецЕсли + ПО + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + И РазрешенныеКлючиДоступа.Пользователь = &ТекущийПользователь + #Иначе + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + И РазрешенныеКлючиДоступа.ВнешнийПользователь = &ТекущийВнешнийПользователь + #КонецЕсли + ) +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + ПО + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + #Иначе + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + #КонецЕсли + И РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя) + ) +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + ГДЕ + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + И ( + ИСТИНА В ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ИЗ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа + #Иначе + ИЗ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа + #КонецЕсли + ГДЕ + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + И РазрешенныеКлючиДоступа.Пользователь = &ТекущийПользователь + #Иначе + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + И РазрешенныеКлючиДоступа.ВнешнийПользователь = &ТекущийВнешнийПользователь + #КонецЕсли + ) + ИЛИ + ИСТИНА В ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + ГДЕ + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + #Иначе + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + #КонецЕсли + И РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя) + ) + ) + ) + +#Иначе + Ошибка: Требуется актуализировать ограничение доступа по причине: Не удалось определить вариант ограничения доступа в параметрах сеанса для шаблона ДляОбъекта со значением параметра "#ПолеОбъекта". Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. +#КонецЕсли + + ПоЗначениямИНаборамРасширенный // ПоЗначениямИНаборамРасширенный(Таблица, -, Модификатор, ПрисоединяемыеТаблицы, О, В1,П1,О1, В2,П2,О2,..., В(n), П(n), О(n)). @@ -272,100 +408,52 @@ ( Истина И ("#Параметр(6)" = "" И "#Параметр(7)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),")) И ("#Параметр(9)" = "" И "#Параметр(10)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),")) И ("#Параметр(15)" = "" И "#Параметр(16)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),")) И ("#Параметр(21)" = "" И "#Параметр(22)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),")) И ("#Параметр(27)" = "" И "#Параметр(28)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),")) И ("#Параметр(33)" = "" И "#Параметр(34)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),")) И ("#Параметр(36)" = "" И "#Параметр(37)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),")) И ("#Параметр(39)" = "" И "#Параметр(40)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),")) И ("#Параметр(42)" = "" И "#Параметр(43)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),")) И ("#Параметр(45)" = "" И "#Параметр(46)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),")) И ("#Параметр(48)" = "" И "#Параметр(49)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),")) И ("#Параметр(51)" = "" И "#Параметр(52)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),")) ) #Тогда Т ИЗ Т // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). @@ -392,8 +480,10 @@ ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если #ИмяТекущегоПраваДоступа = "Изменение" #Тогда И ТаблицыГруппДоступа.Изменение + #ИначеЕсли #ИмяТекущегоПраваДоступа = "Добавление" #Тогда + И ТаблицыГруппДоступа.Добавление #КонецЕсли ) И ГруппыДоступа.Ссылка В @@ -981,7 +1071,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(8) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -1551,7 +1641,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(10), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(11) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -2121,7 +2211,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(14) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -2691,7 +2781,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(16), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(17) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -3261,7 +3351,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(20) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -3831,7 +3921,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(22), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(23) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -4401,7 +4491,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(26) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -4971,7 +5061,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(28), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(29) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -5541,7 +5631,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(32) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -6111,7 +6201,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(34), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(35) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -6681,7 +6771,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(37), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(38) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -7251,7 +7341,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(40), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(41) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -7821,7 +7911,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(43), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(44) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -8391,7 +8481,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(46), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(47) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -8961,7 +9051,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(49), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(50) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -9531,7 +9621,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(52), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(53) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. diff --git a/SSL/src/Roles/ИзменениеДополнительныхСведений/Rights.rights b/SSL/src/Roles/ИзменениеДополнительныхСведений/Rights.rights index 1bbc71ec7..24ae1e742 100644 --- a/SSL/src/Roles/ИзменениеДополнительныхСведений/Rights.rights +++ b/SSL/src/Roles/ИзменениеДополнительныхСведений/Rights.rights @@ -9,18 +9,26 @@ Read true - #ПоЗначениям( "РегистрСведений.ДополнительныеСведения", "","", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляРегистра("ИдентификаторыОбъектовМетаданных.РегистрСведенийДополнительныеСведения", "Свойство", "", "", "", "") +#Иначе +#ПоЗначениям( "РегистрСведений.ДополнительныеСведения", "","", "ДополнительныеСведения", "Свойство", -"","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","") +"","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","") +#КонецЕсли Update true - #ПоЗначениям( "РегистрСведений.ДополнительныеСведения", "","", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляРегистра("ИдентификаторыОбъектовМетаданных.РегистрСведенийДополнительныеСведения", "Свойство", "", "", "", "") +#Иначе +#ПоЗначениям( "РегистрСведений.ДополнительныеСведения", "","", "ДополнительныеСведения", "Свойство", -"","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","") +"","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","") +#КонецЕсли @@ -46,6 +54,240 @@ true + + ДляРегистра(Регистр, Поле1, Поле2, Поле3, Поле4, Поле5) + // ДляРегистра(Регистр, Поле1, Поле2 = "", Поле3 = "", Поле4 = "", Поле5 = "") +// Шаблон используется для ограничения групп записей регистров. +// +// Параметры: +// Регистр - имя предопределенного элемента справочника Идентификаторы объектов метаданных или справочника +// Идентификаторы объектов расширений в формате: имя справочника с точкой и полное имя таблицы +// без точки, например, ИдентификаторыОбъектовМетаданных.РегистрНакопленияОстаткиНаСкладах; +// - имя отдельного регистра ключей в формате КлючиДоступаКРегистру<ОстатокИмени>, +// например, КлючиДоступаКРегиструОстаткиНаСкладах. +// Поле1 - имя первого поля (измерения, ресурса, реквизита), которое будет соединяться с полем Поле1 +// регистра сведений КлючиДоступаКРегистр* +// Поле2 - аналогично предыдущему параметру, если используется в ограничении доступа к регистру. +// ... +// Поле5 - аналогично предыдущему параметру, если используется в ограничении доступа к регистру. + +#Если &СпискиСОтключеннымОграничениемЧтения = "Неопределено" #Тогда + // Информационная база заблокирована для обновления. + ГДЕ ЛОЖЬ + +#ИначеЕсли Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляРегистра1,") #Тогда + И Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляРегистра1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Требуется обновить шаблон на актуальную версию, поставляемую в роли ИзменениеУчастниковГруппДоступа по причине: Используется устаревшая версия 1 шаблона ограничения доступа ДляРегистра. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли &СпискиСОтключеннымОграничениемЧтения = "Все" #Тогда + // У пользователя отключены все виды доступа или + // ограничение на уровне записей не используется. + +#ИначеЕсли СтрСодержит(&СпискиСОтключеннымОграничениемЧтения, #ИмяТекущейТаблицы) #Тогда + // У пользователя отключено ограничение для текущей таблицы. + +#ИначеЕсли СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляРегистра1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Версия программы обновлена, требуется перезапустить сеанс. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли #ИмяТекущегоПраваДоступа <> "Чтение" #Тогда + // Проверка прав Добавление, Изменение, Удаление выполняется ПередЗаписью / ПриЗаписи. + ГДЕ ИСТИНА + +#ИначеЕсли Не СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":[#Регистр]:#Поле1:#Поле2:#Поле3:#Поле4:#Поле5;") + И Не СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":[#Регистр]:#Поле1:#Поле2:#Поле3:#Поле4:#Поле5;") #Тогда + + Ошибка: Требуется актуализировать ограничение доступа по причине: Не удалось определить вариант ограничения доступа в параметрах сеанса для шаблона ДляРегистра со значениями параметров "#Регистр", "#Поле1", "#Поле2", "#Поле3", "#Поле4", "#Поле5". Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. +#Иначе + +ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА +#Если Не СтрСодержит("#Регистр", "КлючиДоступаКРегистру") #Тогда + ИЗ РегистрСведений.КлючиДоступаКРегистрам КАК КлючиДоступаКРегистрам +#Иначе + ИЗ РегистрСведений.#Регистр КАК КлючиДоступаКРегистрам +#КонецЕсли +#Если Не СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":[#Регистр]:#Поле1:#Поле2:#Поле3:#Поле4:#Поле5;") #Тогда + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + +#ИначеЕсли &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа +#Иначе + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа +#КонецЕсли + ПО + #Если Не СтрСодержит("#Регистр", "КлючиДоступаКРегистру") #Тогда + КлючиДоступаКРегистрам.Регистр = Значение(Справочник.#Регистр) + #Иначе + ИСТИНА + #КонецЕсли + + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И КлючиДоступаКРегистрам.ДляВнешнихПользователей = ЛОЖЬ + #Иначе + И КлючиДоступаКРегистрам.ДляВнешнихПользователей = ИСТИНА + #КонецЕсли + + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле1 + #КонецЕсли + + #Если "#Поле2" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") #Тогда + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле2 + #Иначе + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле2 + #КонецЕсли + #КонецЕсли + + #Если "#Поле3" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") #Тогда + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") #Тогда + + И КлючиДоступаКРегистрам.Поле3 = ТекущаяТаблица.#Поле3 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле3 + #Иначе + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле3 + #КонецЕсли + #КонецЕсли + + #Если "#Поле4" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле4;") #Тогда + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") #Тогда + + И КлючиДоступаКРегистрам.Поле4 = ТекущаяТаблица.#Поле4 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") #Тогда + + И КлючиДоступаКРегистрам.Поле3 = ТекущаяТаблица.#Поле4 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле4 + #Иначе + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле4 + #КонецЕсли + #КонецЕсли + + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле4;") #Тогда + + И КлючиДоступаКРегистрам.Поле5 = ТекущаяТаблица.#Поле5 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") #Тогда + + И КлючиДоступаКРегистрам.Поле4 = ТекущаяТаблица.#Поле5 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") #Тогда + + И КлючиДоступаКРегистрам.Поле3 = ТекущаяТаблица.#Поле5 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле5 + #Иначе + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле5 + #КонецЕсли + #КонецЕсли + + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле4;") #Тогда + + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = ТекущаяТаблица.#Поле5 + #ИначеЕсли "#Поле5" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") #Тогда + + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле4 = ТекущаяТаблица.#Поле5 + #ИначеЕсли "#Поле4" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле4;") #Тогда + И КлючиДоступаКРегистрам.Поле4 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле5" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") #Тогда + + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле3 = ТекущаяТаблица.#Поле5 + #ИначеЕсли "#Поле3" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле3;") #Тогда + И КлючиДоступаКРегистрам.Поле3 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле4" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле4;") #Тогда + И КлючиДоступаКРегистрам.Поле4 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле5" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле5 + #ИначеЕсли "#Поле2" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле2;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле3" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле3;") #Тогда + И КлючиДоступаКРегистрам.Поле3 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле4" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле4;") #Тогда + И КлючиДоступаКРегистрам.Поле4 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле5" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Иначе + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле5 + #Иначе + И КлючиДоступаКРегистрам.Поле1 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле2" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле2;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле3" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле3;") #Тогда + И КлючиДоступаКРегистрам.Поле3 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле4" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле4;") #Тогда + И КлючиДоступаКРегистрам.Поле4 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле5" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #КонецЕсли + + #Если Не СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":[#Регистр]:#Поле1:#Поле2:#Поле3:#Поле4:#Поле5;") #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКРегистрам.КлючДоступа + И РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя) + + #ИначеЕсли &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКРегистрам.КлючДоступа + И РазрешенныеКлючиДоступа.Пользователь = &ТекущийПользователь + #Иначе + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКРегистрам.КлючДоступа + И РазрешенныеКлючиДоступа.ВнешнийПользователь = &ТекущийВнешнийПользователь + #КонецЕсли + ) + +#КонецЕсли + + ПоЗначениям // ПоЗначениям(Таблица, -, Модификатор, В1,П1, В2,П2, ..., В(n), П(n)). @@ -110,100 +352,52 @@ ( Истина И ("#Параметр(4)" = "" И "#Параметр(5)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(4),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(4),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(4),")) И ("#Параметр(6)" = "" И "#Параметр(7)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),")) И ("#Параметр(8)" = "" И "#Параметр(9)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(8),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(8),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(8),")) И ("#Параметр(10)" = "" И "#Параметр(11)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(10),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(10),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(10),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),")) И ("#Параметр(14)" = "" И "#Параметр(15)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(14),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(14),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(14),")) И ("#Параметр(16)" = "" И "#Параметр(17)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(16),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(16),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(16),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),")) И ("#Параметр(20)" = "" И "#Параметр(21)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(20),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(20),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(20),")) И ("#Параметр(22)" = "" И "#Параметр(23)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(22),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(22),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(22),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),")) И ("#Параметр(26)" = "" И "#Параметр(27)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(26),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(26),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(26),")) И ("#Параметр(28)" = "" И "#Параметр(29)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(28),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(28),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(28),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),")) И ("#Параметр(32)" = "" И "#Параметр(33)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(32),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(32),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(32),")) И ("#Параметр(34)" = "" И "#Параметр(35)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(34),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(34),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(34),")) ) #Тогда Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). @@ -225,8 +419,10 @@ ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если #ИмяТекущегоПраваДоступа = "Изменение" #Тогда И ТаблицыГруппДоступа.Изменение + #ИначеЕсли #ИмяТекущегоПраваДоступа = "Добавление" #Тогда + И ТаблицыГруппДоступа.Добавление #КонецЕсли ) И ГруппыДоступа.Ссылка В @@ -419,7 +615,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(Т.#Параметр(5), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 2. @@ -593,6 +789,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 3. @@ -766,6 +964,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(9), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 4. @@ -939,6 +1139,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(11), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 5. @@ -1112,6 +1314,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 6. @@ -1285,6 +1489,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(15), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 7. @@ -1458,6 +1664,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(17), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 8. @@ -1631,6 +1839,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 9. @@ -1804,6 +2014,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(21), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 10. @@ -1977,6 +2189,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(23), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 11. @@ -2150,6 +2364,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 12. @@ -2323,6 +2539,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(27), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 13. @@ -2496,6 +2714,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(29), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 14. @@ -2669,6 +2889,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 15. @@ -2842,6 +3064,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(33), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 16. @@ -3015,6 +3239,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(35), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли ) diff --git a/SSL/src/Roles/ИзменениеУчастниковГруппДоступа/Rights.rights b/SSL/src/Roles/ИзменениеУчастниковГруппДоступа/Rights.rights index 6e1c95c85..acf92742b 100644 --- a/SSL/src/Roles/ИзменениеУчастниковГруппДоступа/Rights.rights +++ b/SSL/src/Roles/ИзменениеУчастниковГруппДоступа/Rights.rights @@ -23,7 +23,10 @@ Read true - ГруппыДоступа + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +ГруппыДоступа ГДЕ ГруппыДоступа.ЭтоГруппа ИЛИ ИСТИНА В @@ -44,14 +47,17 @@ Тогда ГруппыДоступа.Профиль = Значение(Справочник.ПрофилиГруппДоступа.Администратор) Иначе ГруппыДоступа.Профиль <> Значение(Справочник.ПрофилиГруппДоступа.Администратор) Конец - +#КонецЕсли Update true - ГруппыДоступа + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +ГруппыДоступа ГДЕ ГруппыДоступа.ЭтоГруппа ИЛИ ИСТИНА В @@ -72,7 +78,7 @@ Тогда ГруппыДоступа.Профиль = Значение(Справочник.ПрофилиГруппДоступа.Администратор) Иначе ГруппыДоступа.Профиль <> Значение(Справочник.ПрофилиГруппДоступа.Администратор) Конец - +#КонецЕсли @@ -94,7 +100,10 @@ Read true - ПрофилиГруппДоступа + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +ПрофилиГруппДоступа ГДЕ ПрофилиГруппДоступа.ЭтоГруппа ИЛИ ИСТИНА В @@ -117,7 +126,7 @@ Иначе ГруппыДоступа.Профиль <> Значение(Справочник.ПрофилиГруппДоступа.Администратор) Конец ) - +#КонецЕсли @@ -129,6 +138,371 @@ true + + ДляОбъекта(ПолеОбъекта) + // ДляОбъекта(ПолеОбъекта = "") +// Шаблон используется для ограничения элементов справочников, документов и +// других списков объектов по полю Ссылка, а также элементов зависимых списков +// объектов и записей регистров через поле объекта-владельца. +// +// Параметры: +// ПолеОбъекта - имя поля, содержащего ссылку на объект, от которого зависит элемент списка. +// Значение "" (по умолчанию) то же, что имя поля "Ссылка". +// + +#Если &СпискиСОтключеннымОграничениемЧтения = "Неопределено" #Тогда + // Информационная база заблокирована для обновления. + ГДЕ ЛОЖЬ + +#ИначеЕсли Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1,") + И Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Требуется обновить шаблон на актуальную версию, поставляемую в роли ИзменениеУчастниковГруппДоступа по причине: Используется устаревшая версия 1 шаблона ограничения доступа ДляОбъекта. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли &СпискиСОтключеннымОграничениемЧтения = "Все" #Тогда + // У пользователя отключены все виды доступа или + // ограничение на уровне записей не используется. + +#ИначеЕсли СтрСодержит(&СпискиСОтключеннымОграничениемЧтения, #ИмяТекущейТаблицы) #Тогда + // У пользователя отключено ограничение для текущей таблицы. + +#ИначеЕсли СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Версия программы обновлена, требуется перезапустить сеанс. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли #ИмяТекущегоПраваДоступа <> "Чтение" #Тогда + // Проверка прав Добавление, Изменение, Удаление выполняется ПередЗаписью / ПриЗаписи. + ГДЕ ИСТИНА + +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам +#Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа +#Иначе + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа +#КонецЕсли + ПО + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + И РазрешенныеКлючиДоступа.Пользователь = &ТекущийПользователь + #Иначе + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + И РазрешенныеКлючиДоступа.ВнешнийПользователь = &ТекущийВнешнийПользователь + #КонецЕсли + ) +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + ПО + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + #Иначе + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + #КонецЕсли + И РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя) + ) +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + ГДЕ + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + И ( + ИСТИНА В ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ИЗ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа + #Иначе + ИЗ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа + #КонецЕсли + ГДЕ + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + И РазрешенныеКлючиДоступа.Пользователь = &ТекущийПользователь + #Иначе + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + И РазрешенныеКлючиДоступа.ВнешнийПользователь = &ТекущийВнешнийПользователь + #КонецЕсли + ) + ИЛИ + ИСТИНА В ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + ГДЕ + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + #Иначе + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + #КонецЕсли + И РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя) + ) + ) + ) + +#Иначе + Ошибка: Требуется актуализировать ограничение доступа по причине: Не удалось определить вариант ограничения доступа в параметрах сеанса для шаблона ДляОбъекта со значением параметра "#ПолеОбъекта". Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. +#КонецЕсли + + + + ДляРегистра(Регистр, Поле1, Поле2, Поле3, Поле4, Поле5) + // ДляРегистра(Регистр, Поле1, Поле2 = "", Поле3 = "", Поле4 = "", Поле5 = "") +// Шаблон используется для ограничения групп записей регистров. +// +// Параметры: +// Регистр - имя предопределенного элемента справочника Идентификаторы объектов метаданных или справочника +// Идентификаторы объектов расширений в формате: имя справочника с точкой и полное имя таблицы +// без точки, например, ИдентификаторыОбъектовМетаданных.РегистрНакопленияОстаткиНаСкладах; +// - имя отдельного регистра ключей в формате КлючиДоступаКРегистру<ОстатокИмени>, +// например, КлючиДоступаКРегиструОстаткиНаСкладах. +// Поле1 - имя первого поля (измерения, ресурса, реквизита), которое будет соединяться с полем Поле1 +// регистра сведений КлючиДоступаКРегистр* +// Поле2 - аналогично предыдущему параметру, если используется в ограничении доступа к регистру. +// ... +// Поле5 - аналогично предыдущему параметру, если используется в ограничении доступа к регистру. + +#Если &СпискиСОтключеннымОграничениемЧтения = "Неопределено" #Тогда + // Информационная база заблокирована для обновления. + ГДЕ ЛОЖЬ + +#ИначеЕсли Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляРегистра1,") #Тогда + И Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляРегистра1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Требуется обновить шаблон на актуальную версию, поставляемую в роли ИзменениеУчастниковГруппДоступа по причине: Используется устаревшая версия 1 шаблона ограничения доступа ДляРегистра. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли &СпискиСОтключеннымОграничениемЧтения = "Все" #Тогда + // У пользователя отключены все виды доступа или + // ограничение на уровне записей не используется. + +#ИначеЕсли СтрСодержит(&СпискиСОтключеннымОграничениемЧтения, #ИмяТекущейТаблицы) #Тогда + // У пользователя отключено ограничение для текущей таблицы. + +#ИначеЕсли СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляРегистра1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Версия программы обновлена, требуется перезапустить сеанс. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли #ИмяТекущегоПраваДоступа <> "Чтение" #Тогда + // Проверка прав Добавление, Изменение, Удаление выполняется ПередЗаписью / ПриЗаписи. + ГДЕ ИСТИНА + +#ИначеЕсли Не СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":[#Регистр]:#Поле1:#Поле2:#Поле3:#Поле4:#Поле5;") + И Не СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":[#Регистр]:#Поле1:#Поле2:#Поле3:#Поле4:#Поле5;") #Тогда + + Ошибка: Требуется актуализировать ограничение доступа по причине: Не удалось определить вариант ограничения доступа в параметрах сеанса для шаблона ДляРегистра со значениями параметров "#Регистр", "#Поле1", "#Поле2", "#Поле3", "#Поле4", "#Поле5". Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. +#Иначе + +ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА +#Если Не СтрСодержит("#Регистр", "КлючиДоступаКРегистру") #Тогда + ИЗ РегистрСведений.КлючиДоступаКРегистрам КАК КлючиДоступаКРегистрам +#Иначе + ИЗ РегистрСведений.#Регистр КАК КлючиДоступаКРегистрам +#КонецЕсли +#Если Не СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":[#Регистр]:#Поле1:#Поле2:#Поле3:#Поле4:#Поле5;") #Тогда + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + +#ИначеЕсли &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа +#Иначе + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа +#КонецЕсли + ПО + #Если Не СтрСодержит("#Регистр", "КлючиДоступаКРегистру") #Тогда + КлючиДоступаКРегистрам.Регистр = Значение(Справочник.#Регистр) + #Иначе + ИСТИНА + #КонецЕсли + + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И КлючиДоступаКРегистрам.ДляВнешнихПользователей = ЛОЖЬ + #Иначе + И КлючиДоступаКРегистрам.ДляВнешнихПользователей = ИСТИНА + #КонецЕсли + + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле1 + #КонецЕсли + + #Если "#Поле2" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") #Тогда + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле2 + #Иначе + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле2 + #КонецЕсли + #КонецЕсли + + #Если "#Поле3" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") #Тогда + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") #Тогда + + И КлючиДоступаКРегистрам.Поле3 = ТекущаяТаблица.#Поле3 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле3 + #Иначе + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле3 + #КонецЕсли + #КонецЕсли + + #Если "#Поле4" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле4;") #Тогда + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") #Тогда + + И КлючиДоступаКРегистрам.Поле4 = ТекущаяТаблица.#Поле4 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") #Тогда + + И КлючиДоступаКРегистрам.Поле3 = ТекущаяТаблица.#Поле4 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле4 + #Иначе + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле4 + #КонецЕсли + #КонецЕсли + + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле4;") #Тогда + + И КлючиДоступаКРегистрам.Поле5 = ТекущаяТаблица.#Поле5 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") #Тогда + + И КлючиДоступаКРегистрам.Поле4 = ТекущаяТаблица.#Поле5 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") #Тогда + + И КлючиДоступаКРегистрам.Поле3 = ТекущаяТаблица.#Поле5 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле5 + #Иначе + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле5 + #КонецЕсли + #КонецЕсли + + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле4;") #Тогда + + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = ТекущаяТаблица.#Поле5 + #ИначеЕсли "#Поле5" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") #Тогда + + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле4 = ТекущаяТаблица.#Поле5 + #ИначеЕсли "#Поле4" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле4;") #Тогда + И КлючиДоступаКРегистрам.Поле4 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле5" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") #Тогда + + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле3 = ТекущаяТаблица.#Поле5 + #ИначеЕсли "#Поле3" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле3;") #Тогда + И КлючиДоступаКРегистрам.Поле3 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле4" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле4;") #Тогда + И КлючиДоступаКРегистрам.Поле4 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле5" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле5 + #ИначеЕсли "#Поле2" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле2;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле3" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле3;") #Тогда + И КлючиДоступаКРегистрам.Поле3 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле4" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле4;") #Тогда + И КлючиДоступаКРегистрам.Поле4 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле5" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Иначе + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле5 + #Иначе + И КлючиДоступаКРегистрам.Поле1 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле2" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле2;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле3" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле3;") #Тогда + И КлючиДоступаКРегистрам.Поле3 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле4" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле4;") #Тогда + И КлючиДоступаКРегистрам.Поле4 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле5" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #КонецЕсли + + #Если Не СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":[#Регистр]:#Поле1:#Поле2:#Поле3:#Поле4:#Поле5;") #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКРегистрам.КлючДоступа + И РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя) + + #ИначеЕсли &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКРегистрам.КлючДоступа + И РазрешенныеКлючиДоступа.Пользователь = &ТекущийПользователь + #Иначе + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКРегистрам.КлючДоступа + И РазрешенныеКлючиДоступа.ВнешнийПользователь = &ТекущийВнешнийПользователь + #КонецЕсли + ) + +#КонецЕсли + + ПоЗначениям // ПоЗначениям(Таблица, -, Модификатор, В1,П1, В2,П2, ..., В(n), П(n)). @@ -193,100 +567,52 @@ ( Истина И ("#Параметр(4)" = "" И "#Параметр(5)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(4),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(4),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(4),")) И ("#Параметр(6)" = "" И "#Параметр(7)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),")) И ("#Параметр(8)" = "" И "#Параметр(9)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(8),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(8),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(8),")) И ("#Параметр(10)" = "" И "#Параметр(11)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(10),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(10),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(10),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),")) И ("#Параметр(14)" = "" И "#Параметр(15)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(14),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(14),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(14),")) И ("#Параметр(16)" = "" И "#Параметр(17)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(16),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(16),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(16),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),")) И ("#Параметр(20)" = "" И "#Параметр(21)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(20),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(20),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(20),")) И ("#Параметр(22)" = "" И "#Параметр(23)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(22),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(22),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(22),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),")) И ("#Параметр(26)" = "" И "#Параметр(27)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(26),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(26),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(26),")) И ("#Параметр(28)" = "" И "#Параметр(29)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(28),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(28),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(28),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),")) И ("#Параметр(32)" = "" И "#Параметр(33)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(32),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(32),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(32),")) И ("#Параметр(34)" = "" И "#Параметр(35)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(34),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(34),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(34),")) ) #Тогда Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). @@ -308,8 +634,10 @@ ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если #ИмяТекущегоПраваДоступа = "Изменение" #Тогда И ТаблицыГруппДоступа.Изменение + #ИначеЕсли #ИмяТекущегоПраваДоступа = "Добавление" #Тогда + И ТаблицыГруппДоступа.Добавление #КонецЕсли ) И ГруппыДоступа.Ссылка В @@ -502,7 +830,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(Т.#Параметр(5), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 2. @@ -676,6 +1004,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 3. @@ -849,6 +1179,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(9), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 4. @@ -1022,6 +1354,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(11), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 5. @@ -1195,6 +1529,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 6. @@ -1368,6 +1704,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(15), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 7. @@ -1541,6 +1879,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(17), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 8. @@ -1714,6 +2054,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 9. @@ -1887,6 +2229,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(21), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 10. @@ -2060,6 +2404,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(23), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 11. @@ -2233,6 +2579,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 12. @@ -2406,6 +2754,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(27), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 13. @@ -2579,6 +2929,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(29), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 14. @@ -2752,6 +3104,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 15. @@ -2925,6 +3279,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(33), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 16. @@ -3098,6 +3454,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(35), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли ) @@ -3206,100 +3564,52 @@ ( Истина И ("#Параметр(6)" = "" И "#Параметр(7)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),")) И ("#Параметр(9)" = "" И "#Параметр(10)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),")) И ("#Параметр(15)" = "" И "#Параметр(16)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),")) И ("#Параметр(21)" = "" И "#Параметр(22)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),")) И ("#Параметр(27)" = "" И "#Параметр(28)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),")) И ("#Параметр(33)" = "" И "#Параметр(34)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),")) И ("#Параметр(36)" = "" И "#Параметр(37)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),")) И ("#Параметр(39)" = "" И "#Параметр(40)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),")) И ("#Параметр(42)" = "" И "#Параметр(43)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),")) И ("#Параметр(45)" = "" И "#Параметр(46)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),")) И ("#Параметр(48)" = "" И "#Параметр(49)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),")) И ("#Параметр(51)" = "" И "#Параметр(52)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),")) ) #Тогда Т ИЗ Т // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). @@ -3326,8 +3636,10 @@ ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если #ИмяТекущегоПраваДоступа = "Изменение" #Тогда И ТаблицыГруппДоступа.Изменение + #ИначеЕсли #ИмяТекущегоПраваДоступа = "Добавление" #Тогда + И ТаблицыГруппДоступа.Добавление #КонецЕсли ) И ГруппыДоступа.Ссылка В @@ -3915,7 +4227,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(8) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -4485,7 +4797,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(10), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(11) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -5055,7 +5367,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(14) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -5625,7 +5937,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(16), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(17) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -6195,7 +6507,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(20) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -6765,7 +7077,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(22), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(23) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -7335,7 +7647,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(26) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -7905,7 +8217,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(28), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(29) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -8475,7 +8787,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(32) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -9045,7 +9357,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(34), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(35) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -9615,7 +9927,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(37), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(38) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -10185,7 +10497,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(40), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(41) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -10755,7 +11067,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(43), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(44) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -11325,7 +11637,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(46), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(47) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -11895,7 +12207,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(49), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(50) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -12465,7 +12777,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(52), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(53) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -12554,100 +12866,52 @@ ( Истина И ("#Параметр(6)" = "" И "#Параметр(7)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),")) И ("#Параметр(9)" = "" И "#Параметр(10)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),")) И ("#Параметр(15)" = "" И "#Параметр(16)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),")) И ("#Параметр(21)" = "" И "#Параметр(22)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),")) И ("#Параметр(27)" = "" И "#Параметр(28)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),")) И ("#Параметр(33)" = "" И "#Параметр(34)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),")) И ("#Параметр(36)" = "" И "#Параметр(37)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),")) И ("#Параметр(39)" = "" И "#Параметр(40)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),")) И ("#Параметр(42)" = "" И "#Параметр(43)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),")) И ("#Параметр(45)" = "" И "#Параметр(46)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),")) И ("#Параметр(48)" = "" И "#Параметр(49)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),")) И ("#Параметр(51)" = "" И "#Параметр(52)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),")) ) #Тогда Т ИЗ Т // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). @@ -12674,8 +12938,10 @@ ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если #ИмяТекущегоПраваДоступа = "Изменение" #Тогда И ТаблицыГруппДоступа.Изменение + #ИначеЕсли #ИмяТекущегоПраваДоступа = "Добавление" #Тогда + И ТаблицыГруппДоступа.Добавление #КонецЕсли ) И ГруппыДоступа.Ссылка В @@ -12870,7 +13136,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(8) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -13047,7 +13313,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(10), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(11) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -13224,7 +13490,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(14) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -13401,7 +13667,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(16), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(17) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -13578,7 +13844,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(20) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -13755,7 +14021,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(22), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(23) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -13932,7 +14198,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(26) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -14109,7 +14375,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(28), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(29) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -14286,7 +14552,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(32) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -14463,7 +14729,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(34), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(35) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -14640,7 +14906,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(37), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(38) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -14817,7 +15083,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(40), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(41) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -14994,7 +15260,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(43), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(44) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -15171,7 +15437,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(46), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(47) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -15348,7 +15614,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(49), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(50) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -15525,7 +15791,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(52), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(53) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -15622,8 +15888,10 @@ ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если #ИмяТекущегоПраваДоступа = "Изменение" #Тогда И ТаблицыГруппДоступа.Изменение + #ИначеЕсли #ИмяТекущегоПраваДоступа = "Добавление" #Тогда + И ТаблицыГруппДоступа.Добавление #КонецЕсли ) И ГруппыДоступа.Ссылка В diff --git a/SSL/src/Roles/ПолныеПрава/Rights.rights b/SSL/src/Roles/ПолныеПрава/Rights.rights index d396eb3ee..062afba20 100644 --- a/SSL/src/Roles/ПолныеПрава/Rights.rights +++ b/SSL/src/Roles/ПолныеПрава/Rights.rights @@ -62,6 +62,30 @@ TotalsControl false + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistorySettings + false + + + UpdateDataHistoryVersionComment + false + ViewDataHistory false @@ -190,6 +214,10 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -276,21 +304,6 @@ false - - InformationRegister.СлужебныеАдресныеСведения - - Update - false - - - Edit - false - - - TotalsControl - false - - InformationRegister.ЗамерыКомментарииСтатистики @@ -329,6 +342,10 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -511,6 +528,10 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -577,6 +598,10 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -648,6 +673,42 @@ InteractiveDeleteMarkedPredefinedData false + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistorySettings + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + Constant.ПериодХраненияЗамеров @@ -760,6 +821,10 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -875,6 +940,29 @@ false + + Catalog.КлючиДоступа + + InteractiveDelete + false + + + InteractiveDeletePredefinedData + false + + + InteractiveSetDeletionMarkPredefinedData + false + + + InteractiveClearDeletionMarkPredefinedData + false + + + InteractiveDeleteMarkedPredefinedData + false + + InformationRegister.ДомаЗданияСтроения @@ -889,6 +977,42 @@ TotalsControl false + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistorySettings + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + InformationRegister.ПодпискиПолучателей @@ -928,6 +1052,10 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -1058,6 +1186,144 @@ TotalsControl false + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistorySettings + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + InformationRegister.СлужебныеАдресныеСведения + + Update + false + + + Edit + false + + + TotalsControl + false + + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistorySettings + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + InformationRegister.УровниСокращенийАдресныхСведений + + Update + false + + + Edit + false + + + TotalsControl + false + + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistorySettings + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + Constant.ИспользоватьСинхронизациюДанныхВЛокальномРежиме @@ -1284,6 +1550,10 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -1381,6 +1651,10 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -1491,6 +1765,10 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -1537,6 +1815,30 @@ TotalsControl false + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistorySettings + false + + + UpdateDataHistoryVersionComment + false + ViewDataHistory false @@ -1710,6 +2012,42 @@ InteractiveDeleteMarkedPredefinedData false + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistorySettings + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + Constant.КлючОбластиДанных @@ -1826,19 +2164,47 @@ InteractiveDeleteMarkedPredefinedData false + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistorySettings + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + - InformationRegister.УдалитьАдресныйКлассификатор + DataProcessor.НастройкиЦентраМониторинга.Command.ПроблемыПроизводительности - Update - false - - - Edit - false - - - TotalsControl + View false @@ -1922,6 +2288,105 @@ false + + Catalog.ОбщиеВнешниеКомпоненты + + Insert + false + + + Update + false + + + Delete + false + + + View + false + + + InteractiveInsert + false + + + Edit + false + + + InteractiveDelete + false + + + InteractiveSetDeletionMark + false + + + InteractiveClearDeletionMark + false + + + InteractiveDeleteMarked + false + + + InputByString + false + + + InteractiveDeletePredefinedData + false + + + InteractiveSetDeletionMarkPredefinedData + false + + + InteractiveClearDeletionMarkPredefinedData + false + + + InteractiveDeleteMarkedPredefinedData + false + + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistorySettings + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + Constant.УдалитьЛогинДоступаКСервисуMorpher @@ -1934,7 +2399,7 @@ - InformationRegister.ПричиныИзмененияАдресныхСведений + InformationRegister.ОбластиПерсональныхДанных Update false @@ -1947,6 +2412,101 @@ TotalsControl false + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistorySettings + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + InformationRegister.НастройкиТранспортаОбменаСообщениями + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + TotalsControl + false + + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistorySettings + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + CommonForm.ВходВОбластьДанных @@ -1969,6 +2529,42 @@ TotalsControl false + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistorySettings + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + Catalog.ВерсииРасширений @@ -1993,6 +2589,57 @@ false + + InformationRegister.ПричиныИзмененияАдресныхСведений + + Update + false + + + Edit + false + + + TotalsControl + false + + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistorySettings + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + InformationRegister.УдалитьБлокировкиСеансовОбластиДанных @@ -2031,6 +2678,10 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -2134,6 +2785,57 @@ false + + InformationRegister.ЗагруженныеВерсииАдресныхСведений + + Update + false + + + Edit + false + + + TotalsControl + false + + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistorySettings + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + InformationRegister.ПраваРолей @@ -2148,6 +2850,42 @@ TotalsControl false + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistorySettings + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы @@ -2261,6 +2999,10 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -2509,6 +3251,10 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -2540,6 +3286,42 @@ TotalsControl false + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistorySettings + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + Catalog.ПользовательскиеНастройкиОтчетов @@ -2602,6 +3384,10 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -2655,6 +3441,42 @@ TotalsControl false + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistorySettings + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + Constant.ИзвлекатьТекстыФайловНаСервере @@ -2907,6 +3729,10 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -2960,6 +3786,30 @@ TotalsControl false + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistorySettings + false + + + UpdateDataHistoryVersionComment + false + ViewDataHistory false @@ -3011,6 +3861,10 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -3110,6 +3964,10 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -3165,6 +4023,10 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -3182,36 +4044,6 @@ false - - InformationRegister.ДополнительныеАдресныеСведения - - Update - false - - - Edit - false - - - TotalsControl - false - - - - InformationRegister.ОриентирыАдресныхОбъектов - - Update - false - - - Edit - false - - - TotalsControl - false - - Document.Анкета @@ -3273,6 +4105,42 @@ InteractiveDeleteMarkedPredefinedData false + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistorySettings + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + Catalog.СтроковыеКонтактыВзаимодействий @@ -3391,6 +4259,57 @@ false + + InformationRegister.ДополнительныеАдресныеСведения + + Update + false + + + Edit + false + + + TotalsControl + false + + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistorySettings + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования @@ -3425,6 +4344,49 @@ false + + Constant.КоличествоПотоковОбновленияДоступа + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + UpdateDataHistory + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + InformationRegister.УдалитьОчередьИзвлеченияТекста @@ -3463,6 +4425,10 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -3582,6 +4548,10 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -3868,6 +4838,10 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -4004,6 +4978,42 @@ InteractiveDeleteMarkedPredefinedData false + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistorySettings + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + Constant.ОценкаПроизводительностиПериодЗаписи @@ -4180,6 +5190,42 @@ TotalsControl false + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistorySettings + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + Catalog.ПрограммыЭлектроннойПодписиИШифрования @@ -4271,19 +5317,11 @@ - InformationRegister.НастройкиТранспортаОбмена - - Read - false - + InformationRegister.УдалитьНастройкиТранспортаОбмена Update false - - View - false - Edit false @@ -4308,6 +5346,10 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -4397,6 +5439,10 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -4452,6 +5498,61 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + InformationRegister.АдресныеОбъекты + + Update + false + + + Edit + false + + + TotalsControl + false + + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -4630,6 +5731,93 @@ InteractiveDeleteMarkedPredefinedData false + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistorySettings + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + InformationRegister.ИсторияАдресныхОбъектов + + Update + false + + + Edit + false + + + TotalsControl + false + + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistorySettings + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + Constant.СписокЗапрещенныхРасширений @@ -4674,21 +5862,6 @@ false - - InformationRegister.ИсторияАдресныхОбъектов - - Update - false - - - Edit - false - - - TotalsControl - false - - InformationRegister.УдалитьЗамерыВремени @@ -4727,6 +5900,10 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -4767,45 +5944,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - Administration - false - - - UpdateDataBaseConfiguration - false - - - ThickClient - false - - - ExternalConnection - false - - - Automation - false - - - TechnicalSpecialistMode - false - - - ConfigurationExtensionsAdministration - false - - - InteractiveOpenExtDataProcessors - false - - - InteractiveOpenExtReports - false - - InformationRegister.УдалитьЗамерыВремени2 @@ -4844,6 +5982,10 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -4862,17 +6004,41 @@ - InformationRegister.УровниСокращенийАдресныхСведений + Configuration.БиблиотекаСтандартныхПодсистем - Update + Administration false - Edit + UpdateDataBaseConfiguration false - TotalsControl + ThickClient + false + + + ExternalConnection + false + + + Automation + false + + + TechnicalSpecialistMode + false + + + ConfigurationExtensionsAdministration + false + + + InteractiveOpenExtDataProcessors + false + + + InteractiveOpenExtReports false @@ -5014,6 +6180,10 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -5103,6 +6273,10 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -5262,6 +6436,42 @@ InteractiveDeleteMarkedPredefinedData false + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistorySettings + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + Constant.КоличествоПотоковОбновленияИнформационнойБазы @@ -5312,6 +6522,10 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -5367,6 +6581,10 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -5445,6 +6663,10 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -5542,6 +6764,30 @@ InteractiveDeleteMarkedPredefinedData false + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistorySettings + false + + + UpdateDataHistoryVersionComment + false + ViewDataHistory false @@ -5647,6 +6893,42 @@ TotalsControl false + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistorySettings + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + InformationRegister.ДампыПлатформы @@ -5686,6 +6968,10 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -5741,6 +7027,10 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -5873,6 +7163,10 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -5928,6 +7222,10 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -5946,7 +7244,7 @@ - InformationRegister.АдресныеОбъекты + InformationRegister.ОриентирыАдресныхОбъектов Update false @@ -5959,6 +7257,42 @@ TotalsControl false + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistorySettings + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + Constant.ВыполнитьРезервноеКопированиеОбластиДанных @@ -6032,6 +7366,10 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -6153,6 +7491,10 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -6208,6 +7550,10 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -6315,6 +7661,10 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -6414,6 +7764,10 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -6500,6 +7854,30 @@ InteractiveDeleteMarkedPredefinedData false + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistorySettings + false + + + UpdateDataHistoryVersionComment + false + ViewDataHistory false @@ -6551,6 +7929,10 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -6620,6 +8002,10 @@ UpdateDataHistoryOfMissingData false + + UpdateDataHistorySettings + false + UpdateDataHistoryVersionComment false @@ -6644,19 +8030,4 @@ false - - InformationRegister.ЗагруженныеВерсииАдресныхСведений - - Update - false - - - Edit - false - - - TotalsControl - false - - diff --git a/SSL/src/Roles/ЧтениеДополнительныхОтчетовИОбработок/Rights.rights b/SSL/src/Roles/ЧтениеДополнительныхОтчетовИОбработок/Rights.rights index 56047700f..708693ed6 100644 --- a/SSL/src/Roles/ЧтениеДополнительныхОтчетовИОбработок/Rights.rights +++ b/SSL/src/Roles/ЧтениеДополнительныхОтчетовИОбработок/Rights.rights @@ -38,8 +38,12 @@ Read true - #ПоЗначениям( "Справочник.ДополнительныеОтчетыИОбработки", "", "", -"ДополнительныеОтчетыИОбработки", "Ссылка", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","") + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоЗначениям( "Справочник.ДополнительныеОтчетыИОбработки", "", "", +"ДополнительныеОтчетыИОбработки", "Ссылка", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","") +#КонецЕсли @@ -65,6 +69,137 @@ true + + ДляОбъекта(ПолеОбъекта) + // ДляОбъекта(ПолеОбъекта = "") +// Шаблон используется для ограничения элементов справочников, документов и +// других списков объектов по полю Ссылка, а также элементов зависимых списков +// объектов и записей регистров через поле объекта-владельца. +// +// Параметры: +// ПолеОбъекта - имя поля, содержащего ссылку на объект, от которого зависит элемент списка. +// Значение "" (по умолчанию) то же, что имя поля "Ссылка". +// + +#Если &СпискиСОтключеннымОграничениемЧтения = "Неопределено" #Тогда + // Информационная база заблокирована для обновления. + ГДЕ ЛОЖЬ + +#ИначеЕсли Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1,") + И Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Требуется обновить шаблон на актуальную версию, поставляемую в роли ИзменениеУчастниковГруппДоступа по причине: Используется устаревшая версия 1 шаблона ограничения доступа ДляОбъекта. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли &СпискиСОтключеннымОграничениемЧтения = "Все" #Тогда + // У пользователя отключены все виды доступа или + // ограничение на уровне записей не используется. + +#ИначеЕсли СтрСодержит(&СпискиСОтключеннымОграничениемЧтения, #ИмяТекущейТаблицы) #Тогда + // У пользователя отключено ограничение для текущей таблицы. + +#ИначеЕсли СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Версия программы обновлена, требуется перезапустить сеанс. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли #ИмяТекущегоПраваДоступа <> "Чтение" #Тогда + // Проверка прав Добавление, Изменение, Удаление выполняется ПередЗаписью / ПриЗаписи. + ГДЕ ИСТИНА + +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам +#Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа +#Иначе + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа +#КонецЕсли + ПО + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + И РазрешенныеКлючиДоступа.Пользователь = &ТекущийПользователь + #Иначе + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + И РазрешенныеКлючиДоступа.ВнешнийПользователь = &ТекущийВнешнийПользователь + #КонецЕсли + ) +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + ПО + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + #Иначе + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + #КонецЕсли + И РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя) + ) +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + ГДЕ + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + И ( + ИСТИНА В ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ИЗ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа + #Иначе + ИЗ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа + #КонецЕсли + ГДЕ + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + И РазрешенныеКлючиДоступа.Пользователь = &ТекущийПользователь + #Иначе + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + И РазрешенныеКлючиДоступа.ВнешнийПользователь = &ТекущийВнешнийПользователь + #КонецЕсли + ) + ИЛИ + ИСТИНА В ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + ГДЕ + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + #Иначе + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + #КонецЕсли + И РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя) + ) + ) + ) + +#Иначе + Ошибка: Требуется актуализировать ограничение доступа по причине: Не удалось определить вариант ограничения доступа в параметрах сеанса для шаблона ДляОбъекта со значением параметра "#ПолеОбъекта". Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. +#КонецЕсли + + ПоЗначениям // ПоЗначениям(Таблица, -, Модификатор, В1,П1, В2,П2, ..., В(n), П(n)). @@ -129,100 +264,52 @@ ( Истина И ("#Параметр(4)" = "" И "#Параметр(5)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(4),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(4),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(4),")) И ("#Параметр(6)" = "" И "#Параметр(7)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),")) И ("#Параметр(8)" = "" И "#Параметр(9)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(8),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(8),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(8),")) И ("#Параметр(10)" = "" И "#Параметр(11)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(10),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(10),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(10),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),")) И ("#Параметр(14)" = "" И "#Параметр(15)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(14),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(14),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(14),")) И ("#Параметр(16)" = "" И "#Параметр(17)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(16),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(16),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(16),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),")) И ("#Параметр(20)" = "" И "#Параметр(21)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(20),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(20),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(20),")) И ("#Параметр(22)" = "" И "#Параметр(23)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(22),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(22),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(22),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),")) И ("#Параметр(26)" = "" И "#Параметр(27)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(26),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(26),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(26),")) И ("#Параметр(28)" = "" И "#Параметр(29)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(28),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(28),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(28),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),")) И ("#Параметр(32)" = "" И "#Параметр(33)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(32),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(32),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(32),")) И ("#Параметр(34)" = "" И "#Параметр(35)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(34),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(34),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(34),")) ) #Тогда Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). @@ -244,8 +331,10 @@ ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если #ИмяТекущегоПраваДоступа = "Изменение" #Тогда И ТаблицыГруппДоступа.Изменение + #ИначеЕсли #ИмяТекущегоПраваДоступа = "Добавление" #Тогда + И ТаблицыГруппДоступа.Добавление #КонецЕсли ) И ГруппыДоступа.Ссылка В @@ -438,7 +527,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(Т.#Параметр(5), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 2. @@ -612,6 +701,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 3. @@ -785,6 +876,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(9), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 4. @@ -958,6 +1051,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(11), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 5. @@ -1131,6 +1226,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 6. @@ -1304,6 +1401,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(15), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 7. @@ -1477,6 +1576,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(17), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 8. @@ -1650,6 +1751,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 9. @@ -1823,6 +1926,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(21), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 10. @@ -1996,6 +2101,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(23), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 11. @@ -2169,6 +2276,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 12. @@ -2342,6 +2451,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(27), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 13. @@ -2515,6 +2626,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(29), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 14. @@ -2688,6 +2801,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 15. @@ -2861,6 +2976,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(33), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 16. @@ -3034,6 +3151,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(35), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли ) diff --git a/SSL/src/Roles/ЧтениеДополнительныхСведений/Rights.rights b/SSL/src/Roles/ЧтениеДополнительныхСведений/Rights.rights index f6d3675b2..2f76f389c 100644 --- a/SSL/src/Roles/ЧтениеДополнительныхСведений/Rights.rights +++ b/SSL/src/Roles/ЧтениеДополнительныхСведений/Rights.rights @@ -9,9 +9,13 @@ Read true - #ПоЗначениям( "РегистрСведений.ДополнительныеСведения", "","", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляРегистра("ИдентификаторыОбъектовМетаданных.РегистрСведенийДополнительныеСведения", "Свойство", "", "", "", "") +#Иначе +#ПоЗначениям( "РегистрСведений.ДополнительныеСведения", "","", "ДополнительныеСведения", "Свойство", -"","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","") +"","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","") +#КонецЕсли @@ -33,6 +37,240 @@ true + + ДляРегистра(Регистр, Поле1, Поле2, Поле3, Поле4, Поле5) + // ДляРегистра(Регистр, Поле1, Поле2 = "", Поле3 = "", Поле4 = "", Поле5 = "") +// Шаблон используется для ограничения групп записей регистров. +// +// Параметры: +// Регистр - имя предопределенного элемента справочника Идентификаторы объектов метаданных или справочника +// Идентификаторы объектов расширений в формате: имя справочника с точкой и полное имя таблицы +// без точки, например, ИдентификаторыОбъектовМетаданных.РегистрНакопленияОстаткиНаСкладах; +// - имя отдельного регистра ключей в формате КлючиДоступаКРегистру<ОстатокИмени>, +// например, КлючиДоступаКРегиструОстаткиНаСкладах. +// Поле1 - имя первого поля (измерения, ресурса, реквизита), которое будет соединяться с полем Поле1 +// регистра сведений КлючиДоступаКРегистр* +// Поле2 - аналогично предыдущему параметру, если используется в ограничении доступа к регистру. +// ... +// Поле5 - аналогично предыдущему параметру, если используется в ограничении доступа к регистру. + +#Если &СпискиСОтключеннымОграничениемЧтения = "Неопределено" #Тогда + // Информационная база заблокирована для обновления. + ГДЕ ЛОЖЬ + +#ИначеЕсли Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляРегистра1,") #Тогда + И Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляРегистра1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Требуется обновить шаблон на актуальную версию, поставляемую в роли ИзменениеУчастниковГруппДоступа по причине: Используется устаревшая версия 1 шаблона ограничения доступа ДляРегистра. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли &СпискиСОтключеннымОграничениемЧтения = "Все" #Тогда + // У пользователя отключены все виды доступа или + // ограничение на уровне записей не используется. + +#ИначеЕсли СтрСодержит(&СпискиСОтключеннымОграничениемЧтения, #ИмяТекущейТаблицы) #Тогда + // У пользователя отключено ограничение для текущей таблицы. + +#ИначеЕсли СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляРегистра1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Версия программы обновлена, требуется перезапустить сеанс. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли #ИмяТекущегоПраваДоступа <> "Чтение" #Тогда + // Проверка прав Добавление, Изменение, Удаление выполняется ПередЗаписью / ПриЗаписи. + ГДЕ ИСТИНА + +#ИначеЕсли Не СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":[#Регистр]:#Поле1:#Поле2:#Поле3:#Поле4:#Поле5;") + И Не СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":[#Регистр]:#Поле1:#Поле2:#Поле3:#Поле4:#Поле5;") #Тогда + + Ошибка: Требуется актуализировать ограничение доступа по причине: Не удалось определить вариант ограничения доступа в параметрах сеанса для шаблона ДляРегистра со значениями параметров "#Регистр", "#Поле1", "#Поле2", "#Поле3", "#Поле4", "#Поле5". Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. +#Иначе + +ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА +#Если Не СтрСодержит("#Регистр", "КлючиДоступаКРегистру") #Тогда + ИЗ РегистрСведений.КлючиДоступаКРегистрам КАК КлючиДоступаКРегистрам +#Иначе + ИЗ РегистрСведений.#Регистр КАК КлючиДоступаКРегистрам +#КонецЕсли +#Если Не СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":[#Регистр]:#Поле1:#Поле2:#Поле3:#Поле4:#Поле5;") #Тогда + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + +#ИначеЕсли &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа +#Иначе + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа +#КонецЕсли + ПО + #Если Не СтрСодержит("#Регистр", "КлючиДоступаКРегистру") #Тогда + КлючиДоступаКРегистрам.Регистр = Значение(Справочник.#Регистр) + #Иначе + ИСТИНА + #КонецЕсли + + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И КлючиДоступаКРегистрам.ДляВнешнихПользователей = ЛОЖЬ + #Иначе + И КлючиДоступаКРегистрам.ДляВнешнихПользователей = ИСТИНА + #КонецЕсли + + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле1 + #КонецЕсли + + #Если "#Поле2" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") #Тогда + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле2 + #Иначе + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле2 + #КонецЕсли + #КонецЕсли + + #Если "#Поле3" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") #Тогда + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") #Тогда + + И КлючиДоступаКРегистрам.Поле3 = ТекущаяТаблица.#Поле3 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле3 + #Иначе + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле3 + #КонецЕсли + #КонецЕсли + + #Если "#Поле4" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле4;") #Тогда + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") #Тогда + + И КлючиДоступаКРегистрам.Поле4 = ТекущаяТаблица.#Поле4 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") #Тогда + + И КлючиДоступаКРегистрам.Поле3 = ТекущаяТаблица.#Поле4 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле4 + #Иначе + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле4 + #КонецЕсли + #КонецЕсли + + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле4;") #Тогда + + И КлючиДоступаКРегистрам.Поле5 = ТекущаяТаблица.#Поле5 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") #Тогда + + И КлючиДоступаКРегистрам.Поле4 = ТекущаяТаблица.#Поле5 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") #Тогда + + И КлючиДоступаКРегистрам.Поле3 = ТекущаяТаблица.#Поле5 + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле5 + #Иначе + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле5 + #КонецЕсли + #КонецЕсли + + #Если Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле4;") #Тогда + + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = ТекущаяТаблица.#Поле5 + #ИначеЕсли "#Поле5" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле3;") #Тогда + + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле4 = ТекущаяТаблица.#Поле5 + #ИначеЕсли "#Поле4" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле4;") #Тогда + И КлючиДоступаКРегистрам.Поле4 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле5" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") + И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле2;") #Тогда + + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле3 = ТекущаяТаблица.#Поле5 + #ИначеЕсли "#Поле3" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле3;") #Тогда + И КлючиДоступаКРегистрам.Поле3 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле4" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле4;") #Тогда + И КлючиДоступаКРегистрам.Поле4 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле5" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + + #ИначеЕсли Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле1;") #Тогда + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле5 + #ИначеЕсли "#Поле2" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле2;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле3" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле3;") #Тогда + И КлючиДоступаКРегистрам.Поле3 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле4" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле4;") #Тогда + И КлючиДоступаКРегистрам.Поле4 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле5" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Иначе + #Если "#Поле5" <> "" И Не СтрСодержит(&СпискиСОтключеннымОграничениемПоПолям, #ИмяТекущейТаблицы + ":#Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле5 + #Иначе + И КлючиДоступаКРегистрам.Поле1 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле2" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле2;") #Тогда + И КлючиДоступаКРегистрам.Поле2 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле3" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле3;") #Тогда + И КлючиДоступаКРегистрам.Поле3 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле4" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле4;") #Тогда + И КлючиДоступаКРегистрам.Поле4 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #Если "#Поле5" <> "" Или Не СтрСодержит(&СпискиССокращеннымНаборомПолейВРегистрахКлючей, #ИмяТекущейТаблицы + ":Поле5;") #Тогда + И КлючиДоступаКРегистрам.Поле5 = Значение(Перечисление.ДополнительныеЗначенияДоступа.Null) + #КонецЕсли + #КонецЕсли + + #Если Не СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":[#Регистр]:#Поле1:#Поле2:#Поле3:#Поле4:#Поле5;") #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКРегистрам.КлючДоступа + И РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя) + + #ИначеЕсли &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКРегистрам.КлючДоступа + И РазрешенныеКлючиДоступа.Пользователь = &ТекущийПользователь + #Иначе + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКРегистрам.КлючДоступа + И РазрешенныеКлючиДоступа.ВнешнийПользователь = &ТекущийВнешнийПользователь + #КонецЕсли + ) + +#КонецЕсли + + ПоЗначениям // ПоЗначениям(Таблица, -, Модификатор, В1,П1, В2,П2, ..., В(n), П(n)). @@ -97,100 +335,52 @@ ( Истина И ("#Параметр(4)" = "" И "#Параметр(5)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(4),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(4),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(4),")) И ("#Параметр(6)" = "" И "#Параметр(7)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),")) И ("#Параметр(8)" = "" И "#Параметр(9)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(8),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(8),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(8),")) И ("#Параметр(10)" = "" И "#Параметр(11)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(10),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(10),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(10),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),")) И ("#Параметр(14)" = "" И "#Параметр(15)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(14),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(14),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(14),")) И ("#Параметр(16)" = "" И "#Параметр(17)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(16),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(16),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(16),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),")) И ("#Параметр(20)" = "" И "#Параметр(21)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(20),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(20),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(20),")) И ("#Параметр(22)" = "" И "#Параметр(23)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(22),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(22),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(22),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),")) И ("#Параметр(26)" = "" И "#Параметр(27)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(26),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(26),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(26),")) И ("#Параметр(28)" = "" И "#Параметр(29)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(28),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(28),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(28),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),")) И ("#Параметр(32)" = "" И "#Параметр(33)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(32),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(32),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(32),")) И ("#Параметр(34)" = "" И "#Параметр(35)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(34),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(34),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(34),")) ) #Тогда Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). @@ -212,8 +402,10 @@ ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если #ИмяТекущегоПраваДоступа = "Изменение" #Тогда И ТаблицыГруппДоступа.Изменение + #ИначеЕсли #ИмяТекущегоПраваДоступа = "Добавление" #Тогда + И ТаблицыГруппДоступа.Добавление #КонецЕсли ) И ГруппыДоступа.Ссылка В @@ -406,7 +598,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(Т.#Параметр(5), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 2. @@ -580,6 +772,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 3. @@ -753,6 +947,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(9), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 4. @@ -926,6 +1122,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(11), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 5. @@ -1099,6 +1297,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 6. @@ -1272,6 +1472,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(15), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 7. @@ -1445,6 +1647,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(17), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 8. @@ -1618,6 +1822,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 9. @@ -1791,6 +1997,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(21), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 10. @@ -1964,6 +2172,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(23), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 11. @@ -2137,6 +2347,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 12. @@ -2310,6 +2522,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(27), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 13. @@ -2483,6 +2697,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(29), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 14. @@ -2656,6 +2872,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 15. @@ -2829,6 +3047,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(33), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 16. @@ -3002,6 +3222,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(35), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли ) diff --git a/SSL/src/Roles/ЧтениеЗаданий/Rights.rights b/SSL/src/Roles/ЧтениеЗаданий/Rights.rights index 8dbd83a54..45600f333 100644 --- a/SSL/src/Roles/ЧтениеЗаданий/Rights.rights +++ b/SSL/src/Roles/ЧтениеЗаданий/Rights.rights @@ -60,15 +60,17 @@ Read true - #ПоЗначениямИНаборамРасширенный( "Задача.ЗадачаИсполнителя", "", "", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоЗначениямИНаборамРасширенный( "Задача.ЗадачаИсполнителя", "", "", "", "", "Объект","Т.БизнесПроцесс","ИЛИ", "Пользователи","Т.Автор","ИЛИ", "Пользователи","Т.Исполнитель","ИЛИ", "Пользователи","Т.ГруппаИсполнителейЗадач","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") - - +#КонецЕсли @@ -118,13 +120,16 @@ Read true - #ПоЗначениямИНаборамРасширенный( "БизнесПроцесс.Задание", "", "", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоЗначениямИНаборамРасширенный( "БизнесПроцесс.Задание", "", "", "", "", "Пользователи","Т.Автор","ИЛИ", "Пользователи","Т.ГруппаИсполнителейЗадач","ИЛИ", "Пользователи","Т.ГруппаИсполнителейЗадачПроверяющий","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") - +#КонецЕсли @@ -154,6 +159,137 @@ true + + ДляОбъекта(ПолеОбъекта) + // ДляОбъекта(ПолеОбъекта = "") +// Шаблон используется для ограничения элементов справочников, документов и +// других списков объектов по полю Ссылка, а также элементов зависимых списков +// объектов и записей регистров через поле объекта-владельца. +// +// Параметры: +// ПолеОбъекта - имя поля, содержащего ссылку на объект, от которого зависит элемент списка. +// Значение "" (по умолчанию) то же, что имя поля "Ссылка". +// + +#Если &СпискиСОтключеннымОграничениемЧтения = "Неопределено" #Тогда + // Информационная база заблокирована для обновления. + ГДЕ ЛОЖЬ + +#ИначеЕсли Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1,") + И Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Требуется обновить шаблон на актуальную версию, поставляемую в роли ИзменениеУчастниковГруппДоступа по причине: Используется устаревшая версия 1 шаблона ограничения доступа ДляОбъекта. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли &СпискиСОтключеннымОграничениемЧтения = "Все" #Тогда + // У пользователя отключены все виды доступа или + // ограничение на уровне записей не используется. + +#ИначеЕсли СтрСодержит(&СпискиСОтключеннымОграничениемЧтения, #ИмяТекущейТаблицы) #Тогда + // У пользователя отключено ограничение для текущей таблицы. + +#ИначеЕсли СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Версия программы обновлена, требуется перезапустить сеанс. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли #ИмяТекущегоПраваДоступа <> "Чтение" #Тогда + // Проверка прав Добавление, Изменение, Удаление выполняется ПередЗаписью / ПриЗаписи. + ГДЕ ИСТИНА + +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам +#Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа +#Иначе + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа +#КонецЕсли + ПО + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + И РазрешенныеКлючиДоступа.Пользователь = &ТекущийПользователь + #Иначе + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + И РазрешенныеКлючиДоступа.ВнешнийПользователь = &ТекущийВнешнийПользователь + #КонецЕсли + ) +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + ПО + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + #Иначе + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + #КонецЕсли + И РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя) + ) +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + ГДЕ + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + И ( + ИСТИНА В ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ИЗ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа + #Иначе + ИЗ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа + #КонецЕсли + ГДЕ + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + И РазрешенныеКлючиДоступа.Пользователь = &ТекущийПользователь + #Иначе + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + И РазрешенныеКлючиДоступа.ВнешнийПользователь = &ТекущийВнешнийПользователь + #КонецЕсли + ) + ИЛИ + ИСТИНА В ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + ГДЕ + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + #Иначе + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + #КонецЕсли + И РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя) + ) + ) + ) + +#Иначе + Ошибка: Требуется актуализировать ограничение доступа по причине: Не удалось определить вариант ограничения доступа в параметрах сеанса для шаблона ДляОбъекта со значением параметра "#ПолеОбъекта". Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. +#КонецЕсли + + ПоЗначениямИНаборамРасширенный // ПоЗначениямИНаборамРасширенный(Таблица, -, Модификатор, ПрисоединяемыеТаблицы, О, В1,П1,О1, В2,П2,О2,..., В(n), П(n), О(n)). @@ -253,100 +389,52 @@ ( Истина И ("#Параметр(6)" = "" И "#Параметр(7)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),")) И ("#Параметр(9)" = "" И "#Параметр(10)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),")) И ("#Параметр(15)" = "" И "#Параметр(16)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),")) И ("#Параметр(21)" = "" И "#Параметр(22)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),")) И ("#Параметр(27)" = "" И "#Параметр(28)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),")) И ("#Параметр(33)" = "" И "#Параметр(34)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),")) И ("#Параметр(36)" = "" И "#Параметр(37)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),")) И ("#Параметр(39)" = "" И "#Параметр(40)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),")) И ("#Параметр(42)" = "" И "#Параметр(43)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),")) И ("#Параметр(45)" = "" И "#Параметр(46)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),")) И ("#Параметр(48)" = "" И "#Параметр(49)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),")) И ("#Параметр(51)" = "" И "#Параметр(52)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),")) ) #Тогда Т ИЗ Т // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). @@ -373,8 +461,10 @@ ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если #ИмяТекущегоПраваДоступа = "Изменение" #Тогда И ТаблицыГруппДоступа.Изменение + #ИначеЕсли #ИмяТекущегоПраваДоступа = "Добавление" #Тогда + И ТаблицыГруппДоступа.Добавление #КонецЕсли ) И ГруппыДоступа.Ссылка В @@ -962,7 +1052,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(8) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -1532,7 +1622,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(10), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(11) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -2102,7 +2192,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(14) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -2672,7 +2762,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(16), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(17) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -3242,7 +3332,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(20) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -3812,7 +3902,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(22), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(23) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -4382,7 +4472,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(26) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -4952,7 +5042,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(28), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(29) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -5522,7 +5612,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(32) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -6092,7 +6182,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(34), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(35) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -6662,7 +6752,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(37), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(38) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -7232,7 +7322,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(40), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(41) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -7802,7 +7892,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(43), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(44) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -8372,7 +8462,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(46), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(47) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -8942,7 +9032,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(49), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(50) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -9512,7 +9602,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(52), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(53) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. diff --git a/SSL/src/Roles/ЧтениеЗадач/Rights.rights b/SSL/src/Roles/ЧтениеЗадач/Rights.rights index af9e6bc1a..f567cac49 100644 --- a/SSL/src/Roles/ЧтениеЗадач/Rights.rights +++ b/SSL/src/Roles/ЧтениеЗадач/Rights.rights @@ -27,15 +27,17 @@ Read true - #ПоЗначениямИНаборамРасширенный( "Задача.ЗадачаИсполнителя", "", "", + #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоЗначениямИНаборамРасширенный( "Задача.ЗадачаИсполнителя", "", "", "", "", "Объект","Т.БизнесПроцесс","ИЛИ", "Пользователи","Т.Автор","ИЛИ", "Пользователи","Т.Исполнитель","ИЛИ", "Пользователи","Т.ГруппаИсполнителейЗадач","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") - - +#КонецЕсли @@ -127,6 +129,137 @@ true + + ДляОбъекта(ПолеОбъекта) + // ДляОбъекта(ПолеОбъекта = "") +// Шаблон используется для ограничения элементов справочников, документов и +// других списков объектов по полю Ссылка, а также элементов зависимых списков +// объектов и записей регистров через поле объекта-владельца. +// +// Параметры: +// ПолеОбъекта - имя поля, содержащего ссылку на объект, от которого зависит элемент списка. +// Значение "" (по умолчанию) то же, что имя поля "Ссылка". +// + +#Если &СпискиСОтключеннымОграничениемЧтения = "Неопределено" #Тогда + // Информационная база заблокирована для обновления. + ГДЕ ЛОЖЬ + +#ИначеЕсли Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1,") + И Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Требуется обновить шаблон на актуальную версию, поставляемую в роли ИзменениеУчастниковГруппДоступа по причине: Используется устаревшая версия 1 шаблона ограничения доступа ДляОбъекта. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли &СпискиСОтключеннымОграничениемЧтения = "Все" #Тогда + // У пользователя отключены все виды доступа или + // ограничение на уровне записей не используется. + +#ИначеЕсли СтрСодержит(&СпискиСОтключеннымОграничениемЧтения, #ИмяТекущейТаблицы) #Тогда + // У пользователя отключено ограничение для текущей таблицы. + +#ИначеЕсли СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта1ТребуетсяПерезапуститьСеанс,") #Тогда + Ошибка: Версия программы обновлена, требуется перезапустить сеанс. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. + +#ИначеЕсли #ИмяТекущегоПраваДоступа <> "Чтение" #Тогда + // Проверка прав Добавление, Изменение, Удаление выполняется ПередЗаписью / ПриЗаписи. + ГДЕ ИСТИНА + +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам +#Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа +#Иначе + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа +#КонецЕсли + ПО + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + И РазрешенныеКлючиДоступа.Пользователь = &ТекущийПользователь + #Иначе + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + И РазрешенныеКлючиДоступа.ВнешнийПользователь = &ТекущийВнешнийПользователь + #КонецЕсли + ) +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + ПО + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + #Иначе + И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + #КонецЕсли + И РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя) + ) +#ИначеЕсли "#ПолеОбъекта" = "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа, #ИмяТекущейТаблицы + ":;") + Или "#ПолеОбъекта" <> "" И СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда + + ТекущаяТаблица ГДЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + ГДЕ + #Если "#ПолеОбъекта" = "" #Тогда + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка + #Иначе + КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта + #КонецЕсли + И ( + ИСТИНА В ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ИЗ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа + #Иначе + ИЗ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа + #КонецЕсли + ГДЕ + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + И РазрешенныеКлючиДоступа.Пользователь = &ТекущийПользователь + #Иначе + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + И РазрешенныеКлючиДоступа.ВнешнийПользователь = &ТекущийВнешнийПользователь + #КонецЕсли + ) + ИЛИ + ИСТИНА В ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.КлючиДоступаГруппДоступа КАК РазрешенныеКлючиДоступа + ГДЕ + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + #Иначе + РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей + #КонецЕсли + И РазрешенныеКлючиДоступа.ГруппаДоступа В (&ГруппыДоступаАвторизованногоПользователя) + ) + ) + ) + +#Иначе + Ошибка: Требуется актуализировать ограничение доступа по причине: Не удалось определить вариант ограничения доступа в параметрах сеанса для шаблона ДляОбъекта со значением параметра "#ПолеОбъекта". Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. +#КонецЕсли + + ПоЗначениямИНаборамРасширенный // ПоЗначениямИНаборамРасширенный(Таблица, -, Модификатор, ПрисоединяемыеТаблицы, О, В1,П1,О1, В2,П2,О2,..., В(n), П(n), О(n)). @@ -226,100 +359,52 @@ ( Истина И ("#Параметр(6)" = "" И "#Параметр(7)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),")) И ("#Параметр(9)" = "" И "#Параметр(10)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),")) И ("#Параметр(15)" = "" И "#Параметр(16)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),")) И ("#Параметр(21)" = "" И "#Параметр(22)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),")) И ("#Параметр(27)" = "" И "#Параметр(28)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),")) И ("#Параметр(33)" = "" И "#Параметр(34)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),")) И ("#Параметр(36)" = "" И "#Параметр(37)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),")) И ("#Параметр(39)" = "" И "#Параметр(40)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),")) И ("#Параметр(42)" = "" И "#Параметр(43)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),")) И ("#Параметр(45)" = "" И "#Параметр(46)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),")) И ("#Параметр(48)" = "" И "#Параметр(49)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),")) И ("#Параметр(51)" = "" И "#Параметр(52)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),")) ) #Тогда Т ИЗ Т // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). @@ -346,8 +431,10 @@ ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если #ИмяТекущегоПраваДоступа = "Изменение" #Тогда И ТаблицыГруппДоступа.Изменение + #ИначеЕсли #ИмяТекущегоПраваДоступа = "Добавление" #Тогда + И ТаблицыГруппДоступа.Добавление #КонецЕсли ) И ГруппыДоступа.Ссылка В @@ -935,7 +1022,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(8) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -1505,7 +1592,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(10), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(11) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -2075,7 +2162,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(14) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -2645,7 +2732,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(16), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(17) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -3215,7 +3302,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(20) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -3785,7 +3872,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(22), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(23) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -4355,7 +4442,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(26) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -4925,7 +5012,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(28), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(29) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -5495,7 +5582,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(32) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -6065,7 +6152,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(34), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(35) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -6635,7 +6722,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(37), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(38) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -7205,7 +7292,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(40), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(41) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -7775,7 +7862,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(43), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(44) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -8345,7 +8432,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(46), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(47) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -8915,7 +9002,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(49), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(50) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -9485,7 +9572,7 @@ ) #Иначе - ИСТИНА + ЕСТЬNULL(#Параметр(52), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(53) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. diff --git a/SSL/src/Roles/ЧтениеРассылокОтчетов/Rights.rights b/SSL/src/Roles/ЧтениеРассылокОтчетов/Rights.rights new file mode 100644 index 000000000..e2143a776 --- /dev/null +++ b/SSL/src/Roles/ЧтениеРассылокОтчетов/Rights.rights @@ -0,0 +1,32 @@ + + + false + true + false + + InformationRegister.СостоянияРассылокОтчетов + + Read + true + + + View + true + + + + Catalog.РассылкиОтчетов + + Read + true + + + View + true + + + InputByString + true + + + diff --git a/SSL/src/Roles/ЧтениеРассылокОтчетов/ЧтениеРассылокОтчетов.mdo b/SSL/src/Roles/ЧтениеРассылокОтчетов/ЧтениеРассылокОтчетов.mdo new file mode 100644 index 000000000..25f242bbc --- /dev/null +++ b/SSL/src/Roles/ЧтениеРассылокОтчетов/ЧтениеРассылокОтчетов.mdo @@ -0,0 +1,8 @@ + + + ЧтениеРассылокОтчетов + + ru + Чтение рассылок отчетов + + diff --git a/SSL/src/Roles/ЧтениеРезультатовПроверкиУчета/Rights.rights b/SSL/src/Roles/ЧтениеРезультатовПроверкиУчета/Rights.rights index f59a2c408..c1d2f00b9 100644 --- a/SSL/src/Roles/ЧтениеРезультатовПроверкиУчета/Rights.rights +++ b/SSL/src/Roles/ЧтениеРезультатовПроверкиУчета/Rights.rights @@ -132,100 +132,52 @@ ( Истина И ("#Параметр(4)" = "" И "#Параметр(5)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(4),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(4),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(4),")) И ("#Параметр(6)" = "" И "#Параметр(7)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),")) И ("#Параметр(8)" = "" И "#Параметр(9)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(8),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(8),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(8),")) И ("#Параметр(10)" = "" И "#Параметр(11)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(10),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(10),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(10),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),")) И ("#Параметр(14)" = "" И "#Параметр(15)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(14),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(14),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(14),")) И ("#Параметр(16)" = "" И "#Параметр(17)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(16),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(16),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(16),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),")) И ("#Параметр(20)" = "" И "#Параметр(21)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(20),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(20),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(20),")) И ("#Параметр(22)" = "" И "#Параметр(23)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(22),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(22),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(22),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),")) И ("#Параметр(26)" = "" И "#Параметр(27)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(26),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(26),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(26),")) И ("#Параметр(28)" = "" И "#Параметр(29)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(28),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(28),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(28),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),")) И ("#Параметр(32)" = "" И "#Параметр(33)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(32),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(32),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(32),")) И ("#Параметр(34)" = "" И "#Параметр(35)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено - И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(34),") - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(34),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),")) + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(34),")) ) #Тогда Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). @@ -247,8 +199,10 @@ ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если #ИмяТекущегоПраваДоступа = "Изменение" #Тогда И ТаблицыГруппДоступа.Изменение + #ИначеЕсли #ИмяТекущегоПраваДоступа = "Добавление" #Тогда + И ТаблицыГруппДоступа.Добавление #КонецЕсли ) И ГруппыДоступа.Ссылка В @@ -441,7 +395,7 @@ ) ) #Иначе - ИСТИНА + ЕСТЬNULL(Т.#Параметр(5), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 2. @@ -615,6 +569,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 3. @@ -788,6 +744,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(9), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 4. @@ -961,6 +919,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(11), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 5. @@ -1134,6 +1094,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 6. @@ -1307,6 +1269,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(15), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 7. @@ -1480,6 +1444,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(17), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 8. @@ -1653,6 +1619,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 9. @@ -1826,6 +1794,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(21), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 10. @@ -1999,6 +1969,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(23), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 11. @@ -2172,6 +2144,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 12. @@ -2345,6 +2319,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(27), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 13. @@ -2518,6 +2494,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(29), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 14. @@ -2691,6 +2669,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 15. @@ -2864,6 +2844,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(33), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли //// Проверка значения поля группы параметров 16. @@ -3037,6 +3019,8 @@ КОНЕЦ ) ) +#Иначе + И ЕСТЬNULL(Т.#Параметр(35), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли ) diff --git a/SSL/src/Roles/ЧтениеШаблоновСообщений/Rights.rights b/SSL/src/Roles/ЧтениеШаблоновСообщений/Rights.rights new file mode 100644 index 000000000..d71ae5f8e --- /dev/null +++ b/SSL/src/Roles/ЧтениеШаблоновСообщений/Rights.rights @@ -0,0 +1,69 @@ + + + false + true + false + + Constant.ИспользоватьШаблоныСообщений + + Read + true + + + View + true + + + + Catalog.ШаблоныСообщенийПрисоединенныеФайлы + + Read + true + + + View + true + + + InputByString + true + + + + Catalog.ШаблоныСообщений + + Read + true + + + View + true + + + InputByString + true + + + + Constant.ИспользоватьОтправкуSMSВШаблонахСообщений + + Read + true + + + View + true + + + + Constant.ИспользоватьЭлектроннуюПочтуВШаблонахСообщений + + Read + true + + + View + true + + + diff --git a/SSL/src/Roles/ЧтениеШаблоновСообщений/ЧтениеШаблоновСообщений.mdo b/SSL/src/Roles/ЧтениеШаблоновСообщений/ЧтениеШаблоновСообщений.mdo new file mode 100644 index 000000000..67b76f9a5 --- /dev/null +++ b/SSL/src/Roles/ЧтениеШаблоновСообщений/ЧтениеШаблоновСообщений.mdo @@ -0,0 +1,8 @@ + + + ЧтениеШаблоновСообщений + + ru + Чтение шаблонов сообщений + + diff --git a/SSL/src/ScheduledJobs/ИзвлечениеТекста/ИзвлечениеТекста.mdo b/SSL/src/ScheduledJobs/ИзвлечениеТекста/ИзвлечениеТекста.mdo index 4f15f58f6..9044f85ea 100644 --- a/SSL/src/ScheduledJobs/ИзвлечениеТекста/ИзвлечениеТекста.mdo +++ b/SSL/src/ScheduledJobs/ИзвлечениеТекста/ИзвлечениеТекста.mdo @@ -3,7 +3,7 @@ ИзвлечениеТекста ru - Извлечение текста + Извлечение текста файлов для поиска CommonModule.РаботаСФайламиСлужебный.ИзвлечьТекстИзФайловНаСервере true diff --git a/SSL/src/ScheduledJobs/ОбновлениеВнешнихКомпонентССайта/ОбновлениеВнешнихКомпонентССайта.mdo b/SSL/src/ScheduledJobs/ОбновлениеВнешнихКомпонентССайта/ОбновлениеВнешнихКомпонентССайта.mdo deleted file mode 100644 index 6c5b39d30..000000000 --- a/SSL/src/ScheduledJobs/ОбновлениеВнешнихКомпонентССайта/ОбновлениеВнешнихКомпонентССайта.mdo +++ /dev/null @@ -1,12 +0,0 @@ - - - ОбновлениеВнешнихКомпонентССайта - - ru - Обновление внешних компонент с сайта 1С - - CommonModule.ВнешниеКомпонентыСлужебный.ОбновитьВсеКомпонентыССайта - true - 3 - 10 - diff --git a/SSL/src/ScheduledJobs/ОбновлениеВнешнихКомпонентССайта/Schedule.schedule b/SSL/src/ScheduledJobs/ОбновлениеДоступаНаУровнеЗаписей/Schedule.schedule similarity index 83% rename from SSL/src/ScheduledJobs/ОбновлениеВнешнихКомпонентССайта/Schedule.schedule rename to SSL/src/ScheduledJobs/ОбновлениеДоступаНаУровнеЗаписей/Schedule.schedule index df1e5c56d..2601eb544 100644 --- a/SSL/src/ScheduledJobs/ОбновлениеВнешнихКомпонентССайта/Schedule.schedule +++ b/SSL/src/ScheduledJobs/ОбновлениеДоступаНаУровнеЗаписей/Schedule.schedule @@ -1,5 +1,5 @@ - + Mon Tue Wed diff --git a/SSL/src/ScheduledJobs/ОбновлениеДоступаНаУровнеЗаписей/ОбновлениеДоступаНаУровнеЗаписей.mdo b/SSL/src/ScheduledJobs/ОбновлениеДоступаНаУровнеЗаписей/ОбновлениеДоступаНаУровнеЗаписей.mdo new file mode 100644 index 000000000..57ee4b715 --- /dev/null +++ b/SSL/src/ScheduledJobs/ОбновлениеДоступаНаУровнеЗаписей/ОбновлениеДоступаНаУровнеЗаписей.mdo @@ -0,0 +1,12 @@ + + + ОбновлениеДоступаНаУровнеЗаписей + + ru + Обновление доступа на уровне записей + + CommonModule.УправлениеДоступомСлужебный.ОбновлениеДоступаНаУровнеЗаписей + true + 3 + 10 + diff --git a/SSL/src/SessionParameters/ВерсииШаблоновОграниченияДоступа/ВерсииШаблоновОграниченияДоступа.mdo b/SSL/src/SessionParameters/ВерсииШаблоновОграниченияДоступа/ВерсииШаблоновОграниченияДоступа.mdo new file mode 100644 index 000000000..50e9a0f7b --- /dev/null +++ b/SSL/src/SessionParameters/ВерсииШаблоновОграниченияДоступа/ВерсииШаблоновОграниченияДоступа.mdo @@ -0,0 +1,14 @@ + + + ВерсииШаблоновОграниченияДоступа + + ru + Версии шаблонов ограничения доступа + + + String + + 100 + + + diff --git a/SSL/src/SessionParameters/ГруппыДоступаАвторизованногоПользователя/ГруппыДоступаАвторизованногоПользователя.mdo b/SSL/src/SessionParameters/ГруппыДоступаАвторизованногоПользователя/ГруппыДоступаАвторизованногоПользователя.mdo new file mode 100644 index 000000000..857e9033b --- /dev/null +++ b/SSL/src/SessionParameters/ГруппыДоступаАвторизованногоПользователя/ГруппыДоступаАвторизованногоПользователя.mdo @@ -0,0 +1,11 @@ + + + ГруппыДоступаАвторизованногоПользователя + + ru + Группы доступа авторизованного пользователя + + + FixedArray + + diff --git a/SSL/src/SessionParameters/КлючДанныхПовторногоИспользования/КлючДанныхПовторногоИспользования.mdo b/SSL/src/SessionParameters/КлючДанныхПовторногоИспользования/КлючДанныхПовторногоИспользования.mdo new file mode 100644 index 000000000..3860b25d8 --- /dev/null +++ b/SSL/src/SessionParameters/КлючДанныхПовторногоИспользования/КлючДанныхПовторногоИспользования.mdo @@ -0,0 +1,11 @@ + + + КлючДанныхПовторногоИспользования + + ru + Ключ данных повторного использования + + + UUID + + diff --git a/SSL/src/SessionParameters/ОграничениеДоступаНаУровнеЗаписейУниверсально/ОграничениеДоступаНаУровнеЗаписейУниверсально.mdo b/SSL/src/SessionParameters/ОграничениеДоступаНаУровнеЗаписейУниверсально/ОграничениеДоступаНаУровнеЗаписейУниверсально.mdo new file mode 100644 index 000000000..7492a4dbb --- /dev/null +++ b/SSL/src/SessionParameters/ОграничениеДоступаНаУровнеЗаписейУниверсально/ОграничениеДоступаНаУровнеЗаписейУниверсально.mdo @@ -0,0 +1,11 @@ + + + ОграничениеДоступаНаУровнеЗаписейУниверсально + + ru + Ограничение доступа на уровне записей универсально + + + Boolean + + diff --git a/SSL/src/SessionParameters/ПараметрыОграниченияДоступа/ПараметрыОграниченияДоступа.mdo b/SSL/src/SessionParameters/ПараметрыОграниченияДоступа/ПараметрыОграниченияДоступа.mdo new file mode 100644 index 000000000..cac63c1c4 --- /dev/null +++ b/SSL/src/SessionParameters/ПараметрыОграниченияДоступа/ПараметрыОграниченияДоступа.mdo @@ -0,0 +1,11 @@ + + + ПараметрыОграниченияДоступа + + ru + Параметры ограничения доступа + + + FixedStructure + + diff --git a/SSL/src/SessionParameters/СпискиСОграничениемЧерезКлючиДоступаГруппДоступа/СпискиСОграничениемЧерезКлючиДоступаГруппДоступа.mdo b/SSL/src/SessionParameters/СпискиСОграничениемЧерезКлючиДоступаГруппДоступа/СпискиСОграничениемЧерезКлючиДоступаГруппДоступа.mdo new file mode 100644 index 000000000..82aa0eb4c --- /dev/null +++ b/SSL/src/SessionParameters/СпискиСОграничениемЧерезКлючиДоступаГруппДоступа/СпискиСОграничениемЧерезКлючиДоступаГруппДоступа.mdo @@ -0,0 +1,12 @@ + + + СпискиСОграничениемЧерезКлючиДоступаГруппДоступа + + ru + Списки с ограничением через ключи доступа групп доступа + + + String + + + diff --git a/SSL/src/SessionParameters/СпискиСОграничениемЧерезКлючиДоступаПользователей/СпискиСОграничениемЧерезКлючиДоступаПользователей.mdo b/SSL/src/SessionParameters/СпискиСОграничениемЧерезКлючиДоступаПользователей/СпискиСОграничениемЧерезКлючиДоступаПользователей.mdo new file mode 100644 index 000000000..22e8b499d --- /dev/null +++ b/SSL/src/SessionParameters/СпискиСОграничениемЧерезКлючиДоступаПользователей/СпискиСОграничениемЧерезКлючиДоступаПользователей.mdo @@ -0,0 +1,12 @@ + + + СпискиСОграничениемЧерезКлючиДоступаПользователей + + ru + Списки с ограничением через ключи доступа пользователей + + + String + + + diff --git a/SSL/src/SessionParameters/СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа/СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа.mdo b/SSL/src/SessionParameters/СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа/СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа.mdo new file mode 100644 index 000000000..854ad772f --- /dev/null +++ b/SSL/src/SessionParameters/СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа/СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа.mdo @@ -0,0 +1,12 @@ + + + СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа + + ru + Списки с ограничением через ключи доступа пользователей и групп доступа + + + String + + + diff --git a/SSL/src/SessionParameters/СпискиСОтключеннымОграничениемПоПолям/СпискиСОтключеннымОграничениемПоПолям.mdo b/SSL/src/SessionParameters/СпискиСОтключеннымОграничениемПоПолям/СпискиСОтключеннымОграничениемПоПолям.mdo new file mode 100644 index 000000000..4fcf3d496 --- /dev/null +++ b/SSL/src/SessionParameters/СпискиСОтключеннымОграничениемПоПолям/СпискиСОтключеннымОграничениемПоПолям.mdo @@ -0,0 +1,12 @@ + + + СпискиСОтключеннымОграничениемПоПолям + + ru + Списки с отключенным ограничением по полям + + + String + + + diff --git a/SSL/src/SessionParameters/СпискиСОтключеннымОграничениемЧтения/СпискиСОтключеннымОграничениемЧтения.mdo b/SSL/src/SessionParameters/СпискиСОтключеннымОграничениемЧтения/СпискиСОтключеннымОграничениемЧтения.mdo new file mode 100644 index 000000000..ffc76c496 --- /dev/null +++ b/SSL/src/SessionParameters/СпискиСОтключеннымОграничениемЧтения/СпискиСОтключеннымОграничениемЧтения.mdo @@ -0,0 +1,12 @@ + + + СпискиСОтключеннымОграничениемЧтения + + ru + Списки с отключенным ограничением чтения + + + String + + + diff --git a/SSL/src/SessionParameters/СпискиССокращеннымНаборомПолейВРегистрахКлючей/СпискиССокращеннымНаборомПолейВРегистрахКлючей.mdo b/SSL/src/SessionParameters/СпискиССокращеннымНаборомПолейВРегистрахКлючей/СпискиССокращеннымНаборомПолейВРегистрахКлючей.mdo new file mode 100644 index 000000000..fe5b5c71e --- /dev/null +++ b/SSL/src/SessionParameters/СпискиССокращеннымНаборомПолейВРегистрахКлючей/СпискиССокращеннымНаборомПолейВРегистрахКлючей.mdo @@ -0,0 +1,12 @@ + + + СпискиССокращеннымНаборомПолейВРегистрахКлючей + + ru + Списки с сокращенным набором полей в регистрах ключей + + + String + + + diff --git a/SSL/src/SessionParameters/УстановленныеРасширения/УстановленныеРасширения.mdo b/SSL/src/SessionParameters/УстановленныеРасширения/УстановленныеРасширения.mdo index 322eab03e..da8dc3a0b 100644 --- a/SSL/src/SessionParameters/УстановленныеРасширения/УстановленныеРасширения.mdo +++ b/SSL/src/SessionParameters/УстановленныеРасширения/УстановленныеРасширения.mdo @@ -6,7 +6,6 @@ Установленные расширения - String - + FixedStructure diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Form.form b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Form.form index 95f1eb034..54c584b25 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Form.form +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Form.form @@ -70,6 +70,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ПанельДругихОтчетов/Form.form b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ПанельДругихОтчетов/Form.form index fb7ca9a18..88c52e48c 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ПанельДругихОтчетов/Form.form +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ПанельДругихОтчетов/Form.form @@ -226,6 +226,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Form.form b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Form.form index bf3421206..844c1a26c 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Form.form +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Form.form @@ -385,149 +385,26 @@ Vertical - - СтраницыСбросить - 192 - - ФлажокСброситьВиден - 194 - - СброситьНастройки - 181 - true - true - - true - - - СброситьНастройки - - Right - - ru - Эти настройки применятся у всех пользователей этого варианта отчета. В том числе, у других пользователей сбросятся значения фильтров. - - Button - - СброситьНастройкиРасширеннаяПодсказка - 183 - Label - true - true - - Left - - - - СброситьНастройкиКонтекстноеМеню - 182 - true - - CheckBoxField - Enter - true - Left - true - - - true - true - - true - - - <key>ru</key> - <value>Флажок сбросить виден</value> - - - ФлажокСброситьВиденРасширеннаяПодсказка - 195 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - ФлажокСброситьСкрыт - 196 - - Декорация1 - 198 - true - true - - true - - - Декорация1РасширеннаяПодсказка - 200 - Label - true - true - - Left - - - - Декорация1КонтекстноеМеню - 199 - true - - Label - true - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Флажок сбросить скрыт</value> - - - ФлажокСброситьСкрытРасширеннаяПодсказка - 197 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - + + СброситьНастройки + 181 true true true - + <dataPath xsi:type="form:DataPath"> + <segments>СброситьНастройки</segments> + </dataPath> + <titleLocation>Right</titleLocation> + <toolTip> <key>ru</key> - <value>Страницы сбросить</value> - - Center + Эти настройки применятся у всех пользователей этого варианта отчета. В том числе, у других пользователей сбросятся значения фильтров. + + Button - СтраницыСброситьРасширеннаяПодсказка - 193 + СброситьНастройкиРасширеннаяПодсказка + 183 Label true true @@ -535,10 +412,17 @@ Left - Pages - - Auto - + + СброситьНастройкиКонтекстноеМеню + 182 + true + + CheckBoxField + Enter + true + Left + true + true true @@ -561,6 +445,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1644,6 +1529,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Module.bsl b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Module.bsl index e0bb844fb..47e526bf5 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Module.bsl +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Module.bsl @@ -25,10 +25,7 @@ ЗаполнитьСписокВариантов(Ложь); - Если Не Контекст.ПолныеПраваНаВарианты Тогда - Элементы.ГруппаДоступен.ТолькоПросмотр = Истина; - КонецЕсли; - + Элементы.ГруппаДоступен.ТолькоПросмотр = Не Контекст.ПолныеПраваНаВарианты; Если Контекст.ЭтоВнешний Тогда Элементы.ОписаниеВнешнегоОтчета.Видимость = Истина; Элементы.ВариантВидимостьПоУмолчанию.Видимость = Ложь; @@ -39,7 +36,7 @@ УдалитьВторуюСтрокуВЗаголовке(Элементы.ДекорацияЧтоБудетДальшеПерезапись.Заголовок); КонецЕсли; - ВидимостьДоступность(ЭтотОбъект, "ПриСозданииНаСервере"); + УстановитьВидимостьДоступность(ЭтотОбъект); КонецПроцедуры &НаСервере @@ -87,7 +84,7 @@ Процедура НаименованиеПриИзменении(Элемент) НаименованиеМодифицировано = Истина; Элементы.ВариантыОтчета.ТекущаяСтрока = Контекст.ПоискПоНаименованию.Получить(ВариантНаименование); - ВидимостьДоступность(ЭтотОбъект, "НаименованиеПриИзменении"); + УстановитьВидимостьДоступность(ЭтотОбъект); КонецПроцедуры &НаКлиенте @@ -116,7 +113,7 @@ Процедура ВариантыОтчетаПриАктивизацииСтроки(Элемент) НаименованиеМодифицировано = Ложь; ОписаниеМодифицировано = Ложь; - ВидимостьДоступность(ЭтотОбъект, "ВариантыОтчетаПриАктивизацииСтроки"); + УстановитьВидимостьДоступность(ЭтотОбъект); КонецПроцедуры &НаКлиенте @@ -432,82 +429,77 @@ // Клиент и сервер &НаКлиентеНаСервереБезКонтекста -Процедура ВидимостьДоступность(Форма, ИмяСобытия) - Если ИмяСобытия = "ПриСозданииНаСервере" - Или ИмяСобытия = "НаименованиеПриИзменении" - Или ИмяСобытия = "ПослеЗаполненияСпискаВариантов" - Или ИмяСобытия = "ВариантыОтчетаПриАктивизацииСтроки" Тогда +Процедура УстановитьВидимостьДоступность(Форма) - БудетЗаписанНовый = Ложь; - БудетПерезаписанСуществующий = Ложь; - ПерезаписьНевозможна = Ложь; - - Идентификатор = Форма.Элементы.ВариантыОтчета.ТекущаяСтрока; - Если Идентификатор = Неопределено Тогда // Платформа не принимает в методе НайтиПоИдентификатору значение Неопределено. - Вариант = Неопределено; - Иначе - Вариант = Форма.ВариантыОтчета.НайтиПоИдентификатору(Идентификатор); + БудетЗаписанНовый = Ложь; + БудетПерезаписанСуществующий = Ложь; + ПерезаписьНевозможна = Ложь; + + Идентификатор = Форма.Элементы.ВариантыОтчета.ТекущаяСтрока; + Вариант = ?(Идентификатор <> Неопределено, Форма.ВариантыОтчета.НайтиПоИдентификатору(Идентификатор), Неопределено); + + Если Вариант = Неопределено Тогда + БудетЗаписанНовый = Истина; + Форма.ВариантСсылка = Неопределено; + Форма.ВариантВидимостьПоУмолчанию = Истина; + Если Не Форма.ОписаниеМодифицировано Тогда + Форма.ВариантОписание = ""; КонецЕсли; - - Если Вариант = Неопределено Тогда - БудетЗаписанНовый = Истина; + Форма.Элементы.ВариантыОтчета.ТекущаяСтрока = Неопределено; + Если Не Форма.Контекст.ПолныеПраваНаВарианты Тогда + Форма.ВариантТолькоДляАвтора = Истина; + КонецЕсли; + Иначе + ПравоЗаписиВарианта = ПравоЗаписиВарианта(Вариант, Форма.Контекст.ПолныеПраваНаВарианты); + Если ПравоЗаписиВарианта Тогда + БудетПерезаписанСуществующий = Истина; + Форма.НаименованиеМодифицировано = Ложь; + Форма.ВариантНаименование = Вариант.Наименование; + + Форма.ВариантСсылка = Вариант.Ссылка; + Если Форма.Контекст.ПолныеПраваНаВарианты Тогда + Форма.ВариантТолькоДляАвтора = Вариант.ТолькоДляАвтора; + Иначе + Форма.ВариантТолькоДляАвтора = Истина; + КонецЕсли; + Форма.ВариантВидимостьПоУмолчанию = Вариант.ВидимостьПоУмолчанию; + Если Не Форма.ОписаниеМодифицировано Тогда + Форма.ВариантОписание = Вариант.Описание; + КонецЕсли; + Иначе + Если Форма.НаименованиеМодифицировано Тогда + ПерезаписьНевозможна = Истина; + Форма.Элементы.ВариантыОтчета.ТекущаяСтрока = Неопределено; + Иначе + БудетЗаписанНовый = Истина; + Форма.ВариантНаименование = СформироватьСвободноеНаименование(Вариант, Форма.ВариантыОтчета); + КонецЕсли; + Форма.ВариантСсылка = Неопределено; + Форма.ВариантТолькоДляАвтора = Истина; Форма.ВариантВидимостьПоУмолчанию = Истина; Если Не Форма.ОписаниеМодифицировано Тогда Форма.ВариантОписание = ""; КонецЕсли; - Форма.Элементы.ВариантыОтчета.ТекущаяСтрока = Неопределено; - Если Не Форма.Контекст.ПолныеПраваНаВарианты Тогда - Форма.ВариантТолькоДляАвтора = Истина; - КонецЕсли; - Иначе - ПравоЗаписиВарианта = ПравоЗаписиВарианта(Вариант, Форма.Контекст.ПолныеПраваНаВарианты); - Если ПравоЗаписиВарианта Тогда - БудетПерезаписанСуществующий = Истина; - Форма.НаименованиеМодифицировано = Ложь; - Форма.ВариантНаименование = Вариант.Наименование; - - Форма.ВариантСсылка = Вариант.Ссылка; - Форма.ВариантТолькоДляАвтора = Вариант.ТолькоДляАвтора; - Форма.ВариантВидимостьПоУмолчанию = Вариант.ВидимостьПоУмолчанию; - Если Не Форма.ОписаниеМодифицировано Тогда - Форма.ВариантОписание = Вариант.Описание; - КонецЕсли; - Иначе - Если Форма.НаименованиеМодифицировано Тогда - ПерезаписьНевозможна = Истина; - Форма.Элементы.ВариантыОтчета.ТекущаяСтрока = Неопределено; - Иначе - БудетЗаписанНовый = Истина; - Форма.ВариантНаименование = СформироватьСвободноеНаименование(Вариант, Форма.ВариантыОтчета); - КонецЕсли; - - Форма.ВариантСсылка = Неопределено; - Форма.ВариантТолькоДляАвтора = Истина; - Форма.ВариантВидимостьПоУмолчанию = Истина; - Если Не Форма.ОписаниеМодифицировано Тогда - Форма.ВариантОписание = ""; - КонецЕсли; - КонецЕсли; - КонецЕсли; - Форма.Доступен = ?(Форма.ВариантТолькоДляАвтора, "ТолькоАвтор", "ВсеПользователи"); - Если БудетЗаписанНовый Тогда - Форма.Элементы.ЧтоБудетДальше.ТекущаяСтраница = Форма.Элементы.Новый; - Форма.Элементы.СтраницыСбросить.ТекущаяСтраница = Форма.Элементы.ФлажокСброситьСкрыт; - Форма.Элементы.Далее.Доступность = Истина; - Форма.Элементы.Сохранить.Доступность = Истина; - ИначеЕсли БудетПерезаписанСуществующий Тогда - Форма.Элементы.ЧтоБудетДальше.ТекущаяСтраница = Форма.Элементы.Перезапись; - Форма.Элементы.СтраницыСбросить.ТекущаяСтраница = Форма.Элементы.ФлажокСброситьВиден; - Форма.Элементы.Далее.Доступность = Истина; - Форма.Элементы.Сохранить.Доступность = Истина; - ИначеЕсли ПерезаписьНевозможна Тогда - Форма.Элементы.ЧтоБудетДальше.ТекущаяСтраница = Форма.Элементы.ПерезаписьНевозможна; - Форма.Элементы.СтраницыСбросить.ТекущаяСтраница = Форма.Элементы.ФлажокСброситьСкрыт; - Форма.Элементы.Далее.Доступность = Ложь; - Форма.Элементы.Сохранить.Доступность = Ложь; КонецЕсли; КонецЕсли; + Форма.Доступен = ?(Форма.ВариантТолькоДляАвтора, "ТолькоАвтор", "ВсеПользователи"); + Если БудетЗаписанНовый Тогда + Форма.Элементы.ЧтоБудетДальше.ТекущаяСтраница = Форма.Элементы.Новый; + Форма.Элементы.СброситьНастройки.Видимость = Ложь; + Форма.Элементы.Далее.Доступность = Истина; + Форма.Элементы.Сохранить.Доступность = Истина; + ИначеЕсли БудетПерезаписанСуществующий Тогда + Форма.Элементы.ЧтоБудетДальше.ТекущаяСтраница = Форма.Элементы.Перезапись; + Форма.Элементы.СброситьНастройки.Видимость = Истина; + Форма.Элементы.Далее.Доступность = Истина; + Форма.Элементы.Сохранить.Доступность = Истина; + ИначеЕсли ПерезаписьНевозможна Тогда + Форма.Элементы.ЧтоБудетДальше.ТекущаяСтраница = Форма.Элементы.ПерезаписьНевозможна; + Форма.Элементы.СброситьНастройки.Видимость = Ложь; + Форма.Элементы.Далее.Доступность = Ложь; + Форма.Элементы.Сохранить.Доступность = Ложь; + КонецЕсли; КонецПроцедуры @@ -785,7 +777,7 @@ КонецЕсли; КонецЦикла; - ВидимостьДоступность(ЭтотОбъект, "ПослеЗаполненияСпискаВариантов"); + УстановитьВидимостьДоступность(ЭтотОбъект); КонецПроцедуры &НаСервере diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/УсловияОтборовОтчета/Module.bsl b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/УсловияОтборовОтчета/Module.bsl index 371fdb143..869bca0de 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/УсловияОтборовОтчета/Module.bsl +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/УсловияОтборовОтчета/Module.bsl @@ -28,7 +28,6 @@ ОтчетыСервер.ОчиститьРасширеннуюИнформациюОНастройках(Информация); НаборСтрок = Отборы.ПолучитьЭлементы(); - ВыводимыеТипыНастроек = Новый Массив; ВыводимыеТипыНастроек.Добавить("ЭлементОтбора"); Для Каждого СвойстваНастройки Из ВыводимыеНастройки Цикл diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ЭлементУсловногоОформленияОтчета/Form.form b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ЭлементУсловногоОформленияОтчета/Form.form index 92e46791b..44e209160 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ЭлементУсловногоОформленияОтчета/Form.form +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ЭлементУсловногоОформленияОтчета/Form.form @@ -2441,6 +2441,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -2801,6 +2802,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/Subsystems/Администрирование/CommandInterface.cmi b/SSL/src/Subsystems/Администрирование/CommandInterface.cmi index 88def58cd..9a71f4575 100644 --- a/SSL/src/Subsystems/Администрирование/CommandInterface.cmi +++ b/SSL/src/Subsystems/Администрирование/CommandInterface.cmi @@ -95,22 +95,6 @@ InformationRegister.НастройкиВерсионированияОбъектов.StandardCommand.OpenList - - InformationRegister.АдресныеОбъекты.StandardCommand.OpenList - - - - InformationRegister.АдресныеОбъекты.Command.ЗагрузитьАдресныйКлассификатор - - - - InformationRegister.АдресныеОбъекты.Command.ПодключитьИнтернетПоддержку - - - - InformationRegister.АдресныеОбъекты.Command.ОчиститьАдресныйКлассификатор - - Catalog.НаборыДополнительныхРеквизитовИСведений.Command.ДополнительныеРеквизиты @@ -135,6 +119,22 @@ Catalog.ПравилаПроверкиУчета.StandardCommand.OpenList + + InformationRegister.АдресныеОбъекты.StandardCommand.OpenList + + + + InformationRegister.АдресныеОбъекты.Command.ЗагрузитьАдресныйКлассификатор + + + + InformationRegister.АдресныеОбъекты.Command.ОчиститьАдресныйКлассификатор + + + + InformationRegister.АдресныеОбъекты.Command.ПодключитьИнтернетПоддержку + + DataProcessor.АктивныеПользователи.Command.АктивныеПользователи @@ -361,6 +361,10 @@ DataProcessor.ПодключениеОбсуждений.StandardCommand.Open + + CommonForm.УстановленныеИсправления.StandardCommand.Open + + DataProcessor.ИнформацияПриЗапуске.Command.ИнформацияПриЗапуске @@ -431,10 +435,6 @@ DataProcessor.ЗагрузкаДанныхИзФайла.Command.ЗагрузкаДанныхИзФайла DataProcessor.ВыгрузкаЗагрузкаEnterpriseData.Command.ЗагрузкаДанныхEnterpriseData InformationRegister.НастройкиВерсионированияОбъектов.StandardCommand.OpenList - InformationRegister.АдресныеОбъекты.StandardCommand.OpenList - InformationRegister.АдресныеОбъекты.Command.ЗагрузитьАдресныйКлассификатор - InformationRegister.АдресныеОбъекты.Command.ПодключитьИнтернетПоддержку - InformationRegister.АдресныеОбъекты.Command.ОчиститьАдресныйКлассификатор Catalog.НаборыДополнительныхРеквизитовИСведений.Command.ДополнительныеРеквизиты Catalog.НаборыДополнительныхРеквизитовИСведений.Command.ДополнительныеСведения CommonCommand.ПредупрежденияПриСинхронизацииДанных @@ -442,6 +442,10 @@ CommonCommand.ВремяТекущегоСеанса Catalog.ПрофилиКлючевыхОпераций.StandardCommand.OpenList Catalog.ПравилаПроверкиУчета.StandardCommand.OpenList + InformationRegister.АдресныеОбъекты.StandardCommand.OpenList + InformationRegister.АдресныеОбъекты.Command.ЗагрузитьАдресныйКлассификатор + InformationRegister.АдресныеОбъекты.Command.ОчиститьАдресныйКлассификатор + InformationRegister.АдресныеОбъекты.Command.ПодключитьИнтернетПоддержку NavigationPanelSeeAlso @@ -500,6 +504,8 @@ DataProcessor.ПодключениеОбсуждений.StandardCommand.Open DataProcessor.НастройкиЦентраМониторинга.Command.НастройкаОтправкиОтчетовОбОшибках DataProcessor.НастройкиЦентраМониторинга.StandardCommand.Open + DataProcessor.НастройкиЦентраМониторинга.Command.ПроблемыПроизводительности + CommonForm.УстановленныеИсправления.StandardCommand.Open diff --git a/SSL/src/Subsystems/Администрирование/Администрирование.mdo b/SSL/src/Subsystems/Администрирование/Администрирование.mdo index 4e960b306..c6c36236a 100644 --- a/SSL/src/Subsystems/Администрирование/Администрирование.mdo +++ b/SSL/src/Subsystems/Администрирование/Администрирование.mdo @@ -73,7 +73,6 @@ CommonCommand.ДополнительныеОбработкиАдминистрирование CommonCommand.ДополнительныеОтчетыАдминистрирование InformationRegister.НастройкиВерсионированияОбъектов - InformationRegister.АдресныеОбъекты DataProcessor.СдвигГраницыИтогов DataProcessor.ПереносФайловВТома Report.ОбъемНенужныхФайлов @@ -98,4 +97,6 @@ Catalog.ПравилаПроверкиУчета Report.ИспользуемыеВнешниеРесурсы Report.РезультатыПроверкиУчета + InformationRegister.АдресныеОбъекты + CommonForm.УстановленныеИсправления diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/АдресныйКлассификатор/АдресныйКлассификатор.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/АдресныйКлассификатор/АдресныйКлассификатор.mdo index 1dd96eaae..2dc122a12 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/АдресныйКлассификатор/АдресныйКлассификатор.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/АдресныйКлассификатор/АдресныйКлассификатор.mdo @@ -12,19 +12,18 @@ Constant.ИсточникДанныхАдресногоКлассификатора CommonModule.АдресныйКлассификаторПовтИсп XDTOPackage.АдресныйКлассификатор - InformationRegister.АдресныеОбъекты - InformationRegister.ДомаЗданияСтроения - InformationRegister.ДополнительныеАдресныеСведения + FunctionalOption.ИсточникДанныхАдресногоКлассификатора + CommonModule.АдресныйКлассификаторСлужебный + Role.ДобавлениеИзменениеАдресныхСведений + Constant.ПараметрыАдресногоКлассификатора InformationRegister.ЗагруженныеВерсииАдресныхСведений InformationRegister.ИсторияАдресныхОбъектов + InformationRegister.АдресныеОбъекты + InformationRegister.ДополнительныеАдресныеСведения + InformationRegister.ДомаЗданияСтроения InformationRegister.ОриентирыАдресныхОбъектов InformationRegister.ПричиныИзмененияАдресныхСведений InformationRegister.СлужебныеАдресныеСведения InformationRegister.УровниСокращенийАдресныхСведений - FunctionalOption.ИсточникДанныхАдресногоКлассификатора - InformationRegister.УдалитьАдресныйКлассификатор - CommonModule.АдресныйКлассификаторСлужебный - Role.ДобавлениеИзменениеАдресныхСведений - Constant.ПараметрыАдресногоКлассификатора Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Анкетирование/Анкетирование.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Анкетирование/Анкетирование.mdo index 7a5ef5a0f..5b3db60c7 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Анкетирование/Анкетирование.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Анкетирование/Анкетирование.mdo @@ -46,5 +46,6 @@ Enum.ВидыПереключателяВАнкетах CommonPicture.ДобавитьКомплексныйВопрос Enum.ВидыФлажкаВАнкетах + CommonCommand.НачатьИнтервью Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БазоваяФункциональность/БазоваяФункциональность.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БазоваяФункциональность/БазоваяФункциональность.mdo index a66ecf8d5..e67c7859b 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БазоваяФункциональность/БазоваяФункциональность.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БазоваяФункциональность/БазоваяФункциональность.mdo @@ -33,7 +33,7 @@ Role.Администрирование Role.ПолныеПрава CommonCommand.УстановитьРасширениеРаботыСФайлами - Role.БазовыеПрава + Role.БазовыеПраваБСП StyleItem.ПоясняющийТекст CommonModule.ОбщегоНазначенияКлиентПовтИсп CommonForm.ВопросОбУстановкеРасширенияРаботыСФайлами @@ -110,7 +110,6 @@ CommonModule.ОбщегоНазначенияВызовСервера CommonPicture.РазделАдминистрирование48 CommonModule.СтандартныеПодсистемыПовтИсп - EventSubscription.ВыполнитьДействияПослеОтправкиДанныхУзлаВРаспределеннойИнформационнойБазе EventSubscription.ВыполнитьДействияПослеПолученияДанныхУзлаВРаспределеннойИнформационнойБазе CommonModule.СтандартныеПодсистемыКлиентСервер StyleItem.ЗаблокированныйРеквизитЦвет @@ -187,7 +186,7 @@ ScheduledJob.УдалениеУстаревшихПараметровРаботыВерсийРасширений InformationRegister.ПараметрыРаботыВерсийРасширений CommonForm.Расширения - Role.БазовыеПраваВнешнегоПользователя + Role.БазовыеПраваВнешнихПользователейБСП CommonModule.ДлительныеОперацииВызовСервера CommonModule.ДлительныеОперацииГлобальный SessionParameter.БуферОбмена @@ -228,5 +227,7 @@ StyleItem.ЦветФонаПредупреждения CommonModule.СтандартныеПодсистемыБезопасныйРежим CommonPicture.ДлительнаяОперация16 + CommonPicture.РасширениеКонфигурацииИзГлавногоУзла + SessionParameter.КлючДанныхПовторногоИспользования Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВнешниеКомпоненты/ВнешниеКомпоненты.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВнешниеКомпоненты/ВнешниеКомпоненты.mdo index 9fcb8f714..1bae1d682 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВнешниеКомпоненты/ВнешниеКомпоненты.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВнешниеКомпоненты/ВнешниеКомпоненты.mdo @@ -11,9 +11,12 @@ CommonModule.ВнешниеКомпонентыСлужебныйКлиент CommonModule.ВнешниеКомпонентыСлужебный Enum.ВариантыИспользованияВнешнихКомпонент - CommonForm.ДоступныеВидыКлиентовВнешнейКомпоненты - ScheduledJob.ОбновлениеВнешнихКомпонентССайта + CommonForm.УстановкаВнешнейКомпонентыНевозможна CommonModule.ВнешниеКомпонентыВызовСервера CommonPicture.ОбновлениеВнешнихКомпонентССайта + CommonModule.ВнешниеКомпонентыСервер + CommonPicture.ВнешняяКомпонентаДоступна + CommonForm.ПоддерживаемыеКлиентскиеПриложения + CommonPicture.ВнешняяКомпонентаНеДоступна Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗащитаПерсональныхДанных/ЗащитаПерсональныхДанных.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗащитаПерсональныхДанных/ЗащитаПерсональныхДанных.mdo index 9576ac5bd..0d886928d 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗащитаПерсональныхДанных/ЗащитаПерсональныхДанных.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗащитаПерсональныхДанных/ЗащитаПерсональныхДанных.mdo @@ -35,6 +35,7 @@ Enum.СостоянияСубъектовДляСкрытия InformationRegister.СубъектыДляСкрытияПерсональныхДанных CommonModule.ЗащитаПерсональныхДанныхВызовСервера + InformationRegister.УдалитьОбластиПерсональныхДанных CommonPicture.КоллекцияОтсутствуетСогласие Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбменДанными/ОбменДанными.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбменДанными/ОбменДанными.mdo index 020460324..baca4e792 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбменДанными/ОбменДанными.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбменДанными/ОбменДанными.mdo @@ -23,8 +23,8 @@ Enum.ВидыТранспортаСообщенийОбмена DataProcessor.ЗагрузкаПравилРегистрацииОбъектов DataProcessor.ТранспортСообщенийОбменаFILE - InformationRegister.НастройкиТранспортаОбмена - CommonCommand.НастроитьПараметрыТранспортаСообщенийОбмена + InformationRegister.УдалитьНастройкиТранспортаОбмена + CommonCommand.НастройкиПодключения SessionParameter.ПравилаРегистрацииОбъектов InformationRegister.СостоянияОбменовДанными CommonCommand.СобытияПолучения @@ -93,14 +93,12 @@ CommonForm.ДополнительноеОписание CommonTemplate.ИнструкцияКакВыполнитьУстановкуОбновленияВручную CommonModule.ОбменДаннымиВызовСервера - CommonModule.ОбменДаннымиКлиентСервер DataProcessor.КонвертацияОбъектовИнформационныхБаз ScheduledJob.УдалениеНеактуальнойИнформацииСинхронизации CommonPicture.СинхронизацияДанныхОтключение CommonPicture.СинхронизацияДанныхПодсистема CommonPicture.СинхронизацияДанных CommonPicture.СинхронизацияДанныхДлительнаяОперация - CommonPicture.СинхронизацияДанныхСостояниеРасписания DataProcessor.ИнтерактивноеИзменениеВыгрузки CommonPicture.КоллекцияОбъектыМетаданных CommonPicture.СинхронизацияДанныхДлительнаяОперация48 @@ -148,6 +146,10 @@ XDTOPackage.EnterpriseData_1_4_4 InformationRegister.ПсевдонимыПредопределенныхУзлов XDTOPackage.EnterpriseData_1_5_2 - XDTOPackage.EnterpriseData_1_6_2 + InformationRegister.НастройкиОбменаДаннымиXDTO + WebService.Exchange_3_0_1_1 + CommonPicture.СинхронизацияДанныхСостояниеСинхронизации + InformationRegister.НастройкиТранспортаОбменаДанными + XDTOPackage.EnterpriseData_1_6_1 Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеКонфигурации/ОбновлениеКонфигурации.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеКонфигурации/ОбновлениеКонфигурации.mdo index 8dd4c88bf..eae8bc916 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеКонфигурации/ОбновлениеКонфигурации.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеКонфигурации/ОбновлениеКонфигурации.mdo @@ -5,6 +5,7 @@ ru Обновление конфигурации + АПК:566 работа в веб-клиенте не предусмотрена ru @@ -15,5 +16,7 @@ Constant.СтатусОбновленияКонфигурации DataProcessor.УстановкаОбновлений CommonModule.ОбновлениеКонфигурацииВызовСервера + XDTOPackage.Patch + CommonForm.УстановленныеИсправления Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Обсуждения/Обсуждения.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Обсуждения/Обсуждения.mdo index 30f9404b1..ce5a1f260 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Обсуждения/Обсуждения.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Обсуждения/Обсуждения.mdo @@ -6,7 +6,7 @@ Обсуждения
      DataProcessor.ПодключениеОбсуждений - CommonPicture.Обсуждения + CommonPicture.ПодключениеОбсуждений CommonModule.ОбсужденияСлужебныйКлиент CommonModule.ОбсужденияСлужебныйВызовСервера Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Организации/Организации.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Организации/Организации.mdo new file mode 100644 index 000000000..e90405147 --- /dev/null +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Организации/Организации.mdo @@ -0,0 +1,11 @@ + + + Организации + + ru + Организации + + CommonModule.ОрганизацииСервер + CommonModule.ОрганизацииПереопределяемый + Subsystem.СтандартныеПодсистемы + diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОтчетОДвиженияхДокумента/ОтчетОДвиженияхДокумента.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОтчетОДвиженияхДокумента/ОтчетОДвиженияхДокумента.mdo index 1a844d0c8..0154619ce 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОтчетОДвиженияхДокумента/ОтчетОДвиженияхДокумента.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОтчетОДвиженияхДокумента/ОтчетОДвиженияхДокумента.mdo @@ -7,5 +7,6 @@
      Report.ДвиженияДокумента CommonModule.ОтчетОДвиженияхДокументаСлужебныйКлиент + CommonModule.ОтчетОДвиженияхДокументаПереопределяемый Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Печать/Печать.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Печать/Печать.mdo index fea726e53..c75b2fc81 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Печать/Печать.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Печать/Печать.mdo @@ -38,5 +38,6 @@ CommonPicture.Пустая CommonModule.УправлениеПечатьюКлиентСервер Role.РедактированиеПечатныхФорм + CommonModule.УправлениеПечатьюСлужебный Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ВнешниеКомпонентыВМоделиСервиса/ВнешниеКомпонентыВМоделиСервиса.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ВнешниеКомпонентыВМоделиСервиса/ВнешниеКомпонентыВМоделиСервиса.mdo new file mode 100644 index 000000000..afee7ffa3 --- /dev/null +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ВнешниеКомпонентыВМоделиСервиса/ВнешниеКомпонентыВМоделиСервиса.mdo @@ -0,0 +1,13 @@ + + + ВнешниеКомпонентыВМоделиСервиса + + ru + Внешние компоненты в модели сервиса + + true + Catalog.ОбщиеВнешниеКомпоненты + CommonModule.ВнешниеКомпонентыВМоделиСервисаСлужебный + CommonModule.ВнешниеКомпонентыВМоделиСервисаСлужебныйКлиент + Subsystem.СтандартныеПодсистемы.Subsystem.РаботаВМоделиСервиса + diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/КалендарныеГрафикиВМоделиСервиса/КалендарныеГрафикиВМоделиСервиса.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/КалендарныеГрафикиВМоделиСервиса/КалендарныеГрафикиВМоделиСервиса.mdo index c4ea6a0cd..ea9a026ec 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/КалендарныеГрафикиВМоделиСервиса/КалендарныеГрафикиВМоделиСервиса.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/КалендарныеГрафикиВМоделиСервиса/КалендарныеГрафикиВМоделиСервиса.mdo @@ -6,5 +6,6 @@ Календарные графики в модели сервиса
      CommonModule.КалендарныеГрафикиСлужебныйВМоделиСервиса + CommonModule.КалендарныеГрафикиВМоделиСервиса Subsystem.СтандартныеПодсистемы.Subsystem.РаботаВМоделиСервиса diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ОбменСообщениями/ОбменСообщениями.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ОбменСообщениями/ОбменСообщениями.mdo index 3685a2185..370e03a9d 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ОбменСообщениями/ОбменСообщениями.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ОбменСообщениями/ОбменСообщениями.mdo @@ -35,5 +35,7 @@ CommonModule.ТрансляцияXDTOСлужебный CommonModule.ТрансляцияXDTOПереопределяемый CommonModule.СообщенияВМоделиСервисаПереопределяемый + InformationRegister.НастройкиТранспортаОбменаСообщениями + CommonCommand.НастройкиПодключенияКонечнойТочки Subsystem.СтандартныеПодсистемы.Subsystem.РаботаВМоделиСервиса diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/РаботаВМоделиСервиса.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/РаботаВМоделиСервиса.mdo index 41516232a..773963ad9 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/РаботаВМоделиСервиса.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/РаботаВМоделиСервиса.mdo @@ -9,6 +9,7 @@ БазоваяФункциональностьВМоделиСервиса БанкиВМоделиСервиса ВалютыВМоделиСервиса + ВнешниеКомпонентыВМоделиСервиса КалендарныеГрафикиВМоделиСервиса ОбменСообщениями ОбновлениеВерсииИБВМоделиСервиса diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСФайлами/РаботаСФайлами.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСФайлами/РаботаСФайлами.mdo index 01a672c99..023ba9611 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСФайлами/РаботаСФайлами.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСФайлами/РаботаСФайлами.mdo @@ -5,6 +5,7 @@ ru Работа с файлами
      + АПК:566 синхронные вызовы в веб-клиенте разрешены ru @@ -13,7 +14,7 @@ CommonPicture.ОпубликоватьФайл CommonModule.РаботаСФайламиКлиентСервер CommonModule.РаботаСФайламиКлиент - CommonForm.НастройкаОсновногоРабочегоКаталога + CommonForm.НастройкаРабочегоКаталога Catalog.ВерсииФайлов Catalog.Файлы Catalog.ПапкиФайлов diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РассылкаОтчетов/РассылкаОтчетов.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РассылкаОтчетов/РассылкаОтчетов.mdo index d6caa02f4..9ebfb0d74 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РассылкаОтчетов/РассылкаОтчетов.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РассылкаОтчетов/РассылкаОтчетов.mdo @@ -20,5 +20,6 @@ CommonModule.РассылкаОтчетов DefinedType.ПолучательРассылки CommonModule.РассылкаОтчетовКлиентПереопределяемый + Role.ЧтениеРассылокОтчетов Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РезервноеКопированиеИБ/РезервноеКопированиеИБ.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РезервноеКопированиеИБ/РезервноеКопированиеИБ.mdo index 9bf67929d..9ab1b5027 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РезервноеКопированиеИБ/РезервноеКопированиеИБ.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РезервноеКопированиеИБ/РезервноеКопированиеИБ.mdo @@ -5,6 +5,7 @@ ru Резервное копирование ИБ
      + АПК:566 работа в веб-клиенте не предусмотрена CommonModule.РезервноеКопированиеИБКлиент CommonModule.РезервноеКопированиеИБСервер CommonModule.РезервноеКопированиеИБГлобальный diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УправлениеДоступом/УправлениеДоступом.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УправлениеДоступом/УправлениеДоступом.mdo index b2dae34a4..160ad1678 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УправлениеДоступом/УправлениеДоступом.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УправлениеДоступом/УправлениеДоступом.mdo @@ -65,5 +65,43 @@ EventSubscription.ЗаполнитьНаборыЗначенийДоступаТабличныхЧастей EventSubscription.ОбновитьГруппыВладельцевНастроекПрав SessionParameter.ОграничениеДоступаНаУровнеЗаписейВключено + SessionParameter.ВерсииШаблоновОграниченияДоступа + SessionParameter.ГруппыДоступаАвторизованногоПользователя + SessionParameter.ОграничениеДоступаНаУровнеЗаписейУниверсально + SessionParameter.ПараметрыОграниченияДоступа + SessionParameter.СпискиСОграничениемЧерезКлючиДоступаГруппДоступа + SessionParameter.СпискиСОграничениемЧерезКлючиДоступаПользователей + SessionParameter.СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа + SessionParameter.СпискиСОтключеннымОграничениемПоПолям + SessionParameter.СпискиСОтключеннымОграничениемЧтения + SessionParameter.СпискиССокращеннымНаборомПолейВРегистрахКлючей + EventSubscription.ПроверитьДоступПередЗаписью + EventSubscription.ПроверитьДоступПередЗаписьюДокумента + EventSubscription.ПроверитьДоступПередЗаписьюНабораЗаписей + EventSubscription.ПроверитьДоступПередЗаписьюНабораЗаписейРегистраРасчета + EventSubscription.ПроверитьДоступПриЗаписи + EventSubscription.ПроверитьДоступПриЗаписиДокумента + EventSubscription.ПроверитьДоступПриЗаписиНабораЗаписей + EventSubscription.ПроверитьДоступПриЗаписиНабораЗаписейРегистраРасчета + ScheduledJob.ОбновлениеДоступаНаУровнеЗаписей + DefinedType.ВладелецЗначенийКлючейДоступаОбъект + DefinedType.ВладелецЗначенийКлючейДоступаДокумент + DefinedType.ВладелецЗначенийКлючейДоступаНаборЗаписей + DefinedType.ВладелецЗначенийКлючейДоступаНаборЗаписейРегистраРасчета + Constant.КоличествоПотоковОбновленияДоступа + Constant.ОграничиватьДоступНаУровнеЗаписейУниверсально + Constant.ПоследнееОбновлениеДоступа + Catalog.КлючиДоступа + InformationRegister.КлючиДоступаВнешнихПользователей + InformationRegister.КлючиДоступаГруппДоступа + InformationRegister.КлючиДоступаКОбъектам + InformationRegister.КлючиДоступаКРегистрам + InformationRegister.КлючиДоступаПользователей + InformationRegister.ОбновлениеКлючейДоступаКДанным + InformationRegister.ОбновлениеКлючейДоступаПользователей + InformationRegister.ПараметрыОграниченияДоступа + FunctionalOption.ОграничиватьДоступНаУровнеЗаписейУниверсально + DefinedType.ПолеРегистраКлючейДоступаКРегистрам + DefinedType.ВладелецЗначенийКлючейДоступа Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЦентрМониторинга/ЦентрМониторинга.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЦентрМониторинга/ЦентрМониторинга.mdo index bdf470f1b..1efe64662 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЦентрМониторинга/ЦентрМониторинга.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЦентрМониторинга/ЦентрМониторинга.mdo @@ -21,7 +21,6 @@ CommonModule.ЦентрМониторингаПереопределяемый CommonModule.ЦентрМониторинга ScheduledJob.СборИОтправкаСтатистики - CommonModule.ЦентрМониторингаВызовСервераПовтИсп InformationRegister.ЗамерыСтатистики CommonModule.ЦентрМониторингаКлиент CommonModule.ЦентрМониторингаКлиентСлужебный diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ШаблоныСообщений/ШаблоныСообщений.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ШаблоныСообщений/ШаблоныСообщений.mdo index 04a0f5a56..2ff693c11 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ШаблоныСообщений/ШаблоныСообщений.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ШаблоныСообщений/ШаблоныСообщений.mdo @@ -25,7 +25,8 @@ CommonModule.ШаблоныСообщенийСлужебныйПовтИсп CommonModule.ШаблоныСообщенийКлиентСервер CommonModule.ШаблоныСообщенийСервер - CommonModule.ШаблоныСообщенийВызовСервера DefinedType.ВладелецШаблонаСообщения + Role.ЧтениеШаблоновСообщений + Role.ДобавлениеИзменениеЛичныхШаблоновСообщений Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/СтандартныеПодсистемы.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/СтандартныеПодсистемы.mdo index 9b497b5f4..8a7e9ef55 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/СтандартныеПодсистемы.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/СтандартныеПодсистемы.mdo @@ -29,8 +29,8 @@ ЗащитаПерсональныхДанных ИнформацияПриЗапуске КалендарныеГрафики - КонтрольВеденияУчета КонтактнаяИнформация + КонтрольВеденияУчета НапоминанияПользователя НастройкаПорядкаЭлементов НастройкиПрограммы @@ -38,6 +38,7 @@ ОбновлениеВерсииИБ ОбновлениеКонфигурации Обсуждения + Организации ОтправкаSMS ОтчетОДвиженияхДокумента ОценкаПроизводительности diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Form.form b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Form.form index 49bd28b1c..8e2eced84 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Form.form +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Form.form @@ -146,6 +146,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -531,6 +532,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -675,6 +677,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -779,6 +782,7 @@ UsualGroup + HorizontalIfPossible Auto true Auto @@ -853,6 +857,7 @@ true true true + HorizontalIfPossible true true true @@ -882,5 +887,10 @@ - + + + OnReadAtServer + ПриЧтенииНаСервере + + diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Module.bsl index a0c6b794e..ef006fa27 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Module.bsl @@ -17,4 +17,16 @@ КонецПроцедуры +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Form.form b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Form.form index 1f62c7b20..5966e438b 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Form.form +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Form.form @@ -631,8 +631,6 @@ true false None - Delete - SetDeletionMark Важность 24 diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Form.form b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Form.form index e36925c59..fc2e69566 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Form.form +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Form.form @@ -473,12 +473,9 @@ false None CancelSearch - Copy - Delete Find Refresh SetDateInterval - SetDeletionMark ГруппаКолонки 161 diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Form.form b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Form.form index 688a43801..078e6e528 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Form.form +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Form.form @@ -169,6 +169,7 @@ UsualGroup + HorizontalIfPossible Auto true Auto @@ -299,6 +300,7 @@ UsualGroup + HorizontalIfPossible Auto true Auto @@ -604,6 +606,7 @@ UsualGroup + HorizontalIfPossible Auto true true diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Form.form b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Form.form index 3397c6a1f..bbdaeb28c 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Form.form +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Form.form @@ -134,6 +134,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -561,6 +562,7 @@ UsualGroup + HorizontalIfPossible Auto NormalSeparation true @@ -684,6 +686,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -1039,6 +1042,7 @@ UsualGroup + HorizontalIfPossible Auto WeakSeparation true diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Module.bsl index 02a070866..dad9c624c 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Module.bsl @@ -24,6 +24,13 @@ ИнициализацияФормы(); + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + КонецПроцедуры &НаКлиенте diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Form.form b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Form.form index 5e18bbb26..aa705014b 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Form.form +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Form.form @@ -314,6 +314,7 @@ UsualGroup + HorizontalIfPossible Auto true true @@ -772,9 +773,6 @@ true false None - Copy - Delete - SetDeletionMark ГруппаВажность 161 diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/ManagerModule.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/ManagerModule.bsl index de7f7e979..556060c62 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/ManagerModule.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/ManagerModule.bsl @@ -28,6 +28,43 @@ // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов +// СтандартныеПодсистемы.УправлениеДоступом + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Ограничение.Текст = + "ПрисоединитьДополнительныеТаблицы + |ЭтотСписок КАК ЗадачаИсполнителя + | + |ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИсполнителиЗадач КАК ИсполнителиЗадач + |ПО + | ЗадачаИсполнителя.РольИсполнителя = ИсполнителиЗадач.РольИсполнителя + | И ЗадачаИсполнителя.ОсновнойОбъектАдресации = ИсполнителиЗадач.ОсновнойОбъектАдресации + | И ЗадачаИсполнителя.ДополнительныйОбъектАдресации = ИсполнителиЗадач.ДополнительныйОбъектАдресации + |; + |РазрешитьЧтение + |ГДЕ + | ЗначениеРазрешено(Автор) + | ИЛИ ЗначениеРазрешено(Исполнитель) + | ИЛИ ЗначениеРазрешено(ИсполнителиЗадач.Исполнитель) + | ИЛИ ЧтениеОбъектаРазрешено(БизнесПроцесс) + |; + |РазрешитьИзменениеЕслиРазрешеноЧтение + |ГДЕ + | ЗначениеРазрешено(Исполнитель) + | ИЛИ ЗначениеРазрешено(ИсполнителиЗадач.Исполнитель)"; + + Ограничение.ТекстДляВнешнихПользователей = + "РазрешитьЧтениеИзменение + |ГДЕ + | ЗначениеРазрешено(Исполнитель) + | ИЛИ ЗначениеРазрешено(Автор)"; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + #КонецОбласти #КонецОбласти diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/ObjectModule.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/ObjectModule.bsl index 35647f65f..83c722757 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/ObjectModule.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/ObjectModule.bsl @@ -5,7 +5,7 @@ Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) ЗадачаБылаВыполнена = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "Выполнена"); - Если НЕ ЗадачаБылаВыполнена И Выполнена И НЕ РеквизитыАдресацииЗаполнены() Тогда + Если Выполнена И ЗадачаБылаВыполнена <> Истина И НЕ РеквизитыАдресацииЗаполнены() Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Необходимо указать исполнителя задачи.'"),,, diff --git a/SSL/src/WebServices/EnterpriseDataExchange_1_0_1_1/EnterpriseDataExchange_1_0_1_1.mdo b/SSL/src/WebServices/EnterpriseDataExchange_1_0_1_1/EnterpriseDataExchange_1_0_1_1.mdo index 9b0d3fb05..0e2be9a8f 100644 --- a/SSL/src/WebServices/EnterpriseDataExchange_1_0_1_1/EnterpriseDataExchange_1_0_1_1.mdo +++ b/SSL/src/WebServices/EnterpriseDataExchange_1_0_1_1/EnterpriseDataExchange_1_0_1_1.mdo @@ -156,7 +156,7 @@ ru Prepare data action result
      - Получить результат выполнения операции подготовки данных для выгрузки из информационой базы + Получить результат выполнения операции подготовки данных для выгрузки из информационной базы PrepareDataOperationResult http://v8.1c.ru/SSL/Exchange/EnterpriseDataExchange @@ -356,7 +356,7 @@ ru Put data
      - Поместить данные в информационную базу без использования узла плана обмена + Поместить данные в информационную базу string http://www.w3.org/2001/XMLSchema @@ -430,7 +430,7 @@ ru Put data action result - Получить результат выполнения операции помещения данных в информационую базу + Получить результат выполнения операции помещения данных в информационную базу string http://www.w3.org/2001/XMLSchema diff --git a/SSL/src/WebServices/EnterpriseDataUpload_1_0_1_1/EnterpriseDataUpload_1_0_1_1.mdo b/SSL/src/WebServices/EnterpriseDataUpload_1_0_1_1/EnterpriseDataUpload_1_0_1_1.mdo index 787c024dd..58eb1415e 100644 --- a/SSL/src/WebServices/EnterpriseDataUpload_1_0_1_1/EnterpriseDataUpload_1_0_1_1.mdo +++ b/SSL/src/WebServices/EnterpriseDataUpload_1_0_1_1/EnterpriseDataUpload_1_0_1_1.mdo @@ -173,7 +173,7 @@ ru Put data action result - Получить результат выполнения операции помещения данных в информационую базу + Получить результат выполнения операции помещения данных в информационную базу string http://www.w3.org/2001/XMLSchema diff --git a/SSL/src/WebServices/Exchange_2_0_1_6/Module.bsl b/SSL/src/WebServices/Exchange_2_0_1_6/Module.bsl index 7ce2b0624..f7c7a699b 100644 --- a/SSL/src/WebServices/Exchange_2_0_1_6/Module.bsl +++ b/SSL/src/WebServices/Exchange_2_0_1_6/Module.bsl @@ -125,25 +125,17 @@ ПомощникСозданияОбменаДанными.ПрефиксИнформационнойБазыИсточникаУстановлен = ЗначениеЗаполнено(ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы")); // Выполняем создание настройки обмена. - СообщениеОбОшибке = ""; ПомощникСозданияОбменаДанными.ВебСервисВыполнитьДействияПоНастройкеНовогоОбменаДанными( Отказ, СериализаторXDTO.ПрочитатьXDTO(НастройкаОтборовXDTO), - СериализаторXDTO.ПрочитатьXDTO(ЗначенияПоУмолчаниюXDTO), - СообщениеОбОшибке); + СериализаторXDTO.ПрочитатьXDTO(ЗначенияПоУмолчаниюXDTO)); Если Отказ Тогда - Сообщение = НСтр("ru = 'При сохранении настройки обмена в программе ""%1"" возникла ошибка: %2'"); - Если ПустаяСтрока(СообщениеОбОшибке) Тогда - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, - ПомощникСозданияОбменаДанными.НаименованиеЭтойБазы, ПомощникСозданияОбменаДанными.СтрокаСообщенияОбОшибке()); - Иначе - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, - ПомощникСозданияОбменаДанными.НаименованиеЭтойБазы, СообщениеОбОшибке); - КонецЕсли; + Сообщение = НСтр("ru = 'При создании настройки обмена во второй информационной базе возникли ошибки: %1'"); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ПомощникСозданияОбменаДанными.СтрокаСообщенияОбОшибке()); ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), - УровеньЖурналаРегистрации.Ошибка, , , ПомощникСозданияОбменаДанными.СтрокаСообщенияОбОшибке()); + УровеньЖурналаРегистрации.Ошибка, , , Сообщение); ВызватьИсключение Сообщение; КонецЕсли; @@ -417,8 +409,17 @@ УстановитьПривилегированныйРежим(Истина); // Проверяем наличие узла плана обмена (возможно узел уже удален). - Если ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду(КодУзла).Пустая() Тогда - Результат = НСтр("ru = 'Возможность синхронизации данных отключена администратором приложения в Интернете.'"); + Если ОбменДаннымиСервер.УзелПланаОбменаПоКоду(ИмяПланаОбмена, КодУзла) = Неопределено Тогда + + ПредставлениеПрограммы = ?(ОбщегоНазначения.РазделениеВключено(), + Метаданные.Синоним, ОбменДаннымиПовтИсп.ИмяЭтойИнформационнойБазы()); + + ПредставлениеПланаОбмена = Метаданные.ПланыОбмена[ИмяПланаОбмена].Представление(); + + Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В ""%1"" не найдена настройка синхронизации данных ""%2"" с идентификатором ""%3"".'"), + ПредставлениеПрограммы, ПредставлениеПланаОбмена, КодУзла); + Возврат Ложь; КонецЕсли; diff --git a/SSL/src/WebServices/Exchange_3_0_1_1/Exchange_3_0_1_1.mdo b/SSL/src/WebServices/Exchange_3_0_1_1/Exchange_3_0_1_1.mdo new file mode 100644 index 000000000..8f533b0d2 --- /dev/null +++ b/SSL/src/WebServices/Exchange_3_0_1_1/Exchange_3_0_1_1.mdo @@ -0,0 +1,771 @@ + + + Exchange_3_0_1_1 + + ru + Exchange 3.0.1.1 + + http://www.1c.ru/SSL/Exchange_3_0_1_1 + + http://v8.1c.ru/8.1/data/core + + exchange_3_0_1_1.1cws + 20 + + Ping + + ru + Ping + + + string + http://www.w3.org/2001/XMLSchema + + true + Ping + Managed + + + TestConnection + + ru + Test connection + + + boolean + http://www.w3.org/2001/XMLSchema + + TestConnection + Managed + + ExchangePlanName + + ru + Exchange plan name + + + string + http://www.w3.org/2001/XMLSchema + + + + NodeCode + + ru + Node code + + + string + http://www.w3.org/2001/XMLSchema + + + + Result + + ru + Result + + + string + http://www.w3.org/2001/XMLSchema + + true + Out + + + + Upload + + ru + Upload + + Выполняет выгрузку данных + + string + http://www.w3.org/2001/XMLSchema + + true + ВыполнитьВыгрузку + Managed + + ExchangePlanName + + ru + Exchange plan name + + + string + http://www.w3.org/2001/XMLSchema + + + + NodeCode + + ru + Node code + + + string + http://www.w3.org/2001/XMLSchema + + + + Data + + ru + Data + + + ValueStorage + http://v8.1c.ru/8.1/data/core + + true + Out + + + + Download + + ru + Download + + Выполняет загрузку данных + + string + http://www.w3.org/2001/XMLSchema + + true + ВыполнитьЗагрузку + Managed + + ExchangePlanName + + ru + Exchange plan name + + + string + http://www.w3.org/2001/XMLSchema + + + + NodeCode + + ru + Node code + + + string + http://www.w3.org/2001/XMLSchema + + + + Data + + ru + Data + + + ValueStorage + http://v8.1c.ru/8.1/data/core + + + + + UploadData + + ru + Upload data + + Выполняет выгрузку данных + + string + http://www.w3.org/2001/XMLSchema + + true + ВыполнитьВыгрузкуДанных + Managed + + ExchangePlanName + + ru + Exchange plan name + + + string + http://www.w3.org/2001/XMLSchema + + + + NodeCode + + ru + Node code + + + string + http://www.w3.org/2001/XMLSchema + + + + FileID + + ru + File ID + + + string + http://www.w3.org/2001/XMLSchema + + true + InOut + + + ContinuousOperation + + ru + Continuous operation + + + boolean + http://www.w3.org/2001/XMLSchema + + true + InOut + + + Operation + + ru + Operation + + + string + http://www.w3.org/2001/XMLSchema + + true + InOut + + + ContinuousOperationAllowed + + ru + Continuous operation allowed + + + boolean + http://www.w3.org/2001/XMLSchema + + + + + DownloadData + + ru + Download data + + Выполняет загрузку данных + + string + http://www.w3.org/2001/XMLSchema + + true + ВыполнитьЗагрузкуДанных + Managed + + ExchangePlanName + + ru + Exchange plan name + + + string + http://www.w3.org/2001/XMLSchema + + + + NodeCode + + ru + Node code + + + string + http://www.w3.org/2001/XMLSchema + + + + FileID + + ru + File ID + + + string + http://www.w3.org/2001/XMLSchema + + + + ContinuousOperation + + ru + Continuous operation + + + boolean + http://www.w3.org/2001/XMLSchema + + true + InOut + + + Operation + + ru + Operation + + + string + http://www.w3.org/2001/XMLSchema + + true + InOut + + + ContinuousOperationAllowed + + ru + Continuous operation allowed + + + boolean + http://www.w3.org/2001/XMLSchema + + + + + GetIBParameters + + ru + Get IBParameters + + + Structure + http://v8.1c.ru/8.1/data/core + + ПолучитьПараметрыИнформационнойБазы + Managed + + ExchangePlanName + + ru + Exchange plan name + + + string + http://www.w3.org/2001/XMLSchema + + + + NodeCode + + ru + Node code + + + string + http://www.w3.org/2001/XMLSchema + + true + + + ResultMessage + + ru + Result message + + + string + http://www.w3.org/2001/XMLSchema + + true + InOut + + + + GetContinuousOperationStatus + + ru + Get continuous operation status + + + string + http://www.w3.org/2001/XMLSchema + + ПолучитьСостояниеДлительнойОперации + Managed + + Operation + + ru + Operation + + + string + http://www.w3.org/2001/XMLSchema + + + + ResultMessage + + ru + Result message + + + string + http://www.w3.org/2001/XMLSchema + + true + Out + + + + PrepareGetFile + + ru + Prepare get file + + + string + http://www.w3.org/2001/XMLSchema + + true + PrepareGetFile + Managed + + FileId + + ru + File id + + + UUID + http://v8.1c.ru/8.1/data/core + + + + BlockSize + + ru + Block size + + В КБ, 0 не разделять + + decimal + http://www.w3.org/2001/XMLSchema + + + + TransferId + + ru + Transfer id + + + UUID + http://v8.1c.ru/8.1/data/core + + Out + + + PartQuantity + + ru + Part quantity + + + int + http://www.w3.org/2001/XMLSchema + + Out + + + + GetFilePart + + ru + Get file part + + + string + http://www.w3.org/2001/XMLSchema + + true + GetFilePart + Managed + + TransferId + + ru + Transfer id + + + UUID + http://v8.1c.ru/8.1/data/core + + + + PartNumber + + ru + Part number + + + int + http://www.w3.org/2001/XMLSchema + + + + PartData + + ru + Part data + + + base64Binary + http://www.w3.org/2001/XMLSchema + + true + Out + + + + ReleaseFile + + ru + Release file + + + string + http://www.w3.org/2001/XMLSchema + + true + ReleaseFile + Managed + + TransferId + + ru + Transfer id + + + UUID + http://v8.1c.ru/8.1/data/core + + + + + PutFilePart + + ru + Put file part + + + string + http://www.w3.org/2001/XMLSchema + + true + PutFilePart + Managed + + TransferId + + ru + Transfer id + + + UUID + http://v8.1c.ru/8.1/data/core + + + + PartNumber + + ru + Part number + + + int + http://www.w3.org/2001/XMLSchema + + true + + + PartData + + ru + Part data + + + base64Binary + http://www.w3.org/2001/XMLSchema + + + + + SaveFileFromParts + + ru + Save file from parts + + + string + http://www.w3.org/2001/XMLSchema + + true + SaveFileFromParts + Managed + + TransferId + + ru + Transfer id + + + UUID + http://v8.1c.ru/8.1/data/core + + + + PartQuantity + + ru + Part quantity + + + int + http://www.w3.org/2001/XMLSchema + + + + FileId + + ru + File id + + + UUID + http://v8.1c.ru/8.1/data/core + + Out + + + + CreateExchangeNode + + ru + Create exchange node + + + Structure + http://v8.1c.ru/8.1/data/core + + true + СоздатьУзелОбменаДанными + Managed + + Parameters + + ru + Parameters + + + Structure + http://v8.1c.ru/8.1/data/core + + + + + RemoveExchangeNode + + ru + Remove exchange node + + + Structure + http://v8.1c.ru/8.1/data/core + + true + УдалитьУзелОбменаДанными + Managed + + ExchangePlanName + + ru + Exchange plan name + + + string + http://www.w3.org/2001/XMLSchema + + + + NodeID + + ru + Node ID + + + string + http://www.w3.org/2001/XMLSchema + + + + + PutMessageForDataMatching + + ru + Put message for data matching + + + string + http://www.w3.org/2001/XMLSchema + + true + PutMessageForDataMatching + Managed + + ExchangePlanName + + ru + Exchange plan name + + + string + http://www.w3.org/2001/XMLSchema + + + + NodeId + + ru + Node id + + + string + http://www.w3.org/2001/XMLSchema + + + + FileID + + ru + File ID + + + string + http://www.w3.org/2001/XMLSchema + + + + diff --git a/SSL/src/WebServices/Exchange_3_0_1_1/Module.bsl b/SSL/src/WebServices/Exchange_3_0_1_1/Module.bsl new file mode 100644 index 000000000..95f3a8979 --- /dev/null +++ b/SSL/src/WebServices/Exchange_3_0_1_1/Module.bsl @@ -0,0 +1,549 @@ + +#Область СлужебныеПроцедурыИФункции + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики операций + +// Соответствует операции Upload. +Функция ВыполнитьВыгрузку(ИмяПланаОбмена, КодУзлаИнформационнойБазы, ХранилищеСообщенияОбмена) + + ПроверитьБлокировкуИнформационнойБазыДляОбновления(); + + ОбменДаннымиСервер.ПроверитьИспользованиеОбменаДанными(); + + УстановитьПривилегированныйРежим(Истина); + + СообщениеОбмена = ""; + + ОбменДаннымиСервер.ВыполнитьВыгрузкуДляУзлаИнформационнойБазыЧерезСтроку(ИмяПланаОбмена, КодУзлаИнформационнойБазы, СообщениеОбмена); + + ХранилищеСообщенияОбмена = Новый ХранилищеЗначения(СообщениеОбмена, Новый СжатиеДанных(9)); + +КонецФункции + +// Соответствует операции Download. +Функция ВыполнитьЗагрузку(ИмяПланаОбмена, КодУзлаИнформационнойБазы, ХранилищеСообщенияОбмена) + + ПроверитьБлокировкуИнформационнойБазыДляОбновления(); + + ОбменДаннымиСервер.ПроверитьИспользованиеОбменаДанными(); + + УстановитьПривилегированныйРежим(Истина); + + ОбменДаннымиСервер.ВыполнитьЗагрузкуДляУзлаИнформационнойБазыЧерезСтроку(ИмяПланаОбмена, КодУзлаИнформационнойБазы, ХранилищеСообщенияОбмена.Получить()); + +КонецФункции + +// Соответствует операции UploadData. +Функция ВыполнитьВыгрузкуДанных(ИмяПланаОбмена, + КодУзлаИнформационнойБазы, + ИдентификаторФайлаСтрокой, + ДлительнаяОперация, + ИдентификаторОперации, + ДлительнаяОперацияРазрешена) + + ПроверитьБлокировкуИнформационнойБазыДляОбновления(); + + ОбменДаннымиСервер.ПроверитьИспользованиеОбменаДанными(); + + ИдентификаторФайла = Новый УникальныйИдентификатор; + ИдентификаторФайлаСтрокой = Строка(ИдентификаторФайла); + ВыполнитьВыгрузкуДанныхВКлиентСерверномРежиме(ИмяПланаОбмена, КодУзлаИнформационнойБазы, ИдентификаторФайла, ДлительнаяОперация, ИдентификаторОперации, ДлительнаяОперацияРазрешена); + +КонецФункции + +// Соответствует операции DownloadData. +Функция ВыполнитьЗагрузкуДанных(ИмяПланаОбмена, + КодУзлаИнформационнойБазы, + ИдентификаторФайлаСтрокой, + ДлительнаяОперация, + ИдентификаторОперации, + ДлительнаяОперацияРазрешена) + + ПроверитьБлокировкуИнформационнойБазыДляОбновления(); + + ОбменДаннымиСервер.ПроверитьИспользованиеОбменаДанными(); + + ИдентификаторФайла = Новый УникальныйИдентификатор(ИдентификаторФайлаСтрокой); + ВыполнитьЗагрузкуДанныхВКлиентСерверномРежиме(ИмяПланаОбмена, КодУзлаИнформационнойБазы, ИдентификаторФайла, ДлительнаяОперация, ИдентификаторОперации, ДлительнаяОперацияРазрешена); + +КонецФункции + +// Соответствует операции GetIBParameters. +Функция ПолучитьПараметрыИнформационнойБазы(ИмяПланаОбмена, КодУзла, СообщениеОбОшибке) + + Результат = ОбменДаннымиСервер.ПараметрыИнформационнойБазы(ИмяПланаОбмена, КодУзла, СообщениеОбОшибке); + Возврат СериализаторXDTO.ЗаписатьXDTO(Результат); + +КонецФункции + +// Соответствует операции CreateExchangeNode. +Функция СоздатьУзелОбменаДанными(ПараметрыXDTO) + + ОбменДаннымиСервер.ПроверитьИспользованиеОбменаДанными(Истина); + + Параметры = СериализаторXDTO.ПрочитатьXDTO(ПараметрыXDTO); + + НастройкиПодключения = Параметры.НастройкиПодключения; + СтрокаПараметровXML = Параметры.СтрокаПараметровXML; + + Попытка + Обработки.ПомощникСозданияОбменаДанными.ЗаполнитьНастройкиПодключенияИзXML( + НастройкиПодключения, Параметры.СтрокаПараметровXML); + + Обработки.ПомощникСозданияОбменаДанными.ВыполнитьДействияПоНастройкеОбменаДанными( + НастройкиПодключения); + Исключение + СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), + УровеньЖурналаРегистрации.Ошибка, , , СообщениеОбОшибке); + + ВызватьИсключение СообщениеОбОшибке; + КонецПопытки; + +КонецФункции + +// Соответствует операции RemoveExchangeNode. +Функция УдалитьУзелОбменаДанными(ИмяПланаОбмена, ИдентификаторУзла) + + УзелОбмена = ОбменДаннымиСервер.УзелПланаОбменаПоКоду(ИмяПланаОбмена, ИдентификаторУзла); + + Если УзелОбмена = Неопределено Тогда + ПредставлениеПрограммы = ?(ОбщегоНазначения.РазделениеВключено(), + Метаданные.Синоним, ОбменДаннымиПовтИсп.ИмяЭтойИнформационнойБазы()); + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В ""%1"" не найден узел плана обмена ""%2"" с идентификатором ""%3"".'"), + ПредставлениеПрограммы, ИмяПланаОбмена, ИдентификаторУзла); + КонецЕсли; + + ОбменДаннымиСервер.УдалитьНастройкуСинхронизации(УзелОбмена); + +КонецФункции + +// Соответствует операции GetContinuousOperationStatus. +Функция ПолучитьСостояниеДлительнойОперации(ИдентификаторОперации, СтрокаСообщенияОбОшибке) + + СостоянияФоновогоЗадания = Новый Соответствие; + СостоянияФоновогоЗадания.Вставить(СостояниеФоновогоЗадания.Активно, "Active"); + СостоянияФоновогоЗадания.Вставить(СостояниеФоновогоЗадания.Завершено, "Completed"); + СостоянияФоновогоЗадания.Вставить(СостояниеФоновогоЗадания.ЗавершеноАварийно, "Failed"); + СостоянияФоновогоЗадания.Вставить(СостояниеФоновогоЗадания.Отменено, "Canceled"); + + УстановитьПривилегированныйРежим(Истина); + + ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(Новый УникальныйИдентификатор(ИдентификаторОперации)); + + Если ФоновоеЗадание.ИнформацияОбОшибке <> Неопределено Тогда + + СтрокаСообщенияОбОшибке = ПодробноеПредставлениеОшибки(ФоновоеЗадание.ИнформацияОбОшибке); + + КонецЕсли; + + Возврат СостоянияФоновогоЗадания.Получить(ФоновоеЗадание.Состояние); +КонецФункции + +// Соответствует операции PrepareGetFile. +Функция PrepareGetFile(FileId, BlockSize, TransferId, PartQuantity) + + УстановитьПривилегированныйРежим(Истина); + + TransferId = Новый УникальныйИдентификатор; + + ИмяИсходногоФайла = ОбменДаннымиСервер.ПолучитьФайлИзХранилища(FileId); + + ВременныйКаталог = ВременныйКаталогВыгрузки(TransferId); + + Файл = Новый Файл(ИмяИсходногоФайла); + + ИмяИсходногоФайлаВоВременномКаталоге = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ВременныйКаталог, "data.zip"); + + СоздатьКаталог(ВременныйКаталог); + + ПереместитьФайл(ИмяИсходногоФайла, ИмяИсходногоФайлаВоВременномКаталоге); + + Если BlockSize <> 0 Тогда + // Разделение файла на части + ИменаФайлов = РазделитьФайл(ИмяИсходногоФайлаВоВременномКаталоге, BlockSize * 1024); + PartQuantity = ИменаФайлов.Количество(); + + УдалитьФайлы(ИмяИсходногоФайлаВоВременномКаталоге); + Иначе + PartQuantity = 1; + ПереместитьФайл(ИмяИсходногоФайлаВоВременномКаталоге, ИмяИсходногоФайлаВоВременномКаталоге + ".1"); + КонецЕсли; + +КонецФункции + +// Соответствует операции GetFilePart. +Функция GetFilePart(TransferId, PartNumber, PartData) + + ИменаФайлов = НайтиФайлЧасти(ВременныйКаталогВыгрузки(TransferId), PartNumber); + + Если ИменаФайлов.Количество() = 0 Тогда + + ШаблонСообщения = НСтр("ru = 'Не найден фрагмент %1 сессии передачи с идентификатором %2'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Строка(PartNumber), Строка(TransferId)); + ВызватьИсключение(ТекстСообщения); + + ИначеЕсли ИменаФайлов.Количество() > 1 Тогда + + ШаблонСообщения = НСтр("ru = 'Найдено несколько фрагментов %1 сессии передачи с идентификатором %2'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Строка(PartNumber), Строка(TransferId)); + ВызватьИсключение(ТекстСообщения); + + КонецЕсли; + + ИмяФайлаЧасти = ИменаФайлов[0].ПолноеИмя; + PartData = Новый ДвоичныеДанные(ИмяФайлаЧасти); + +КонецФункции + +// Соответствует операции ReleaseFile. +Функция ReleaseFile(TransferId) + + Попытка + УдалитьФайлы(ВременныйКаталогВыгрузки(TransferId)); + Исключение + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииУдалениеВременногоФайла(), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + +КонецФункции + +// Соответствует операции PutFilePart. +Функция PutFilePart(TransferId, PartNumber, PartData) + + ВременныйКаталог = ВременныйКаталогВыгрузки(TransferId); + + Если PartNumber = 1 Тогда + + СоздатьКаталог(ВременныйКаталог); + + КонецЕсли; + + ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ВременныйКаталог, ПолучитьИмяФайлаЧасти(PartNumber)); + + PartData.Записать(ИмяФайла); + +КонецФункции + +// Соответствует операции SaveFileFromParts. +Функция SaveFileFromParts(TransferId, PartQuantity, FileId) + + УстановитьПривилегированныйРежим(Истина); + + ВременныйКаталог = ВременныйКаталогВыгрузки(TransferId); + + ФайлыЧастейДляОбъединения = Новый Массив; + + Для НомерЧасти = 1 По PartQuantity Цикл + + ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ВременныйКаталог, ПолучитьИмяФайлаЧасти(НомерЧасти)); + + Если НайтиФайлы(ИмяФайла).Количество() = 0 Тогда + ШаблонСообщения = НСтр("ru = 'Не найден фрагмент %1 сессии передачи с идентификатором %2. + |Необходимо убедиться, что в настройках программы заданы параметры + |""Каталог временных файлов для Linux"" и ""Каталог временных файлов для Windows"".'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Строка(НомерЧасти), Строка(TransferId)); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + + ФайлыЧастейДляОбъединения.Добавить(ИмяФайла); + + КонецЦикла; + + ИмяАрхива = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ВременныйКаталог, "data.zip"); + + ОбъединитьФайлы(ФайлыЧастейДляОбъединения, ИмяАрхива); + + Разархиватор = Новый ЧтениеZipФайла(ИмяАрхива); + + Если Разархиватор.Элементы.Количество() = 0 Тогда + Попытка + УдалитьФайлы(ВременныйКаталог); + Исключение + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииУдалениеВременногоФайла(), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + ВызватьИсключение(НСтр("ru = 'Файл архива не содержит данных.'")); + КонецЕсли; + + КаталогВыгрузки = ОбменДаннымиПовтИсп.КаталогВременногоХранилищаФайлов(); + + ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВыгрузки, Разархиватор.Элементы[0].Имя); + + Разархиватор.Извлечь(Разархиватор.Элементы[0], КаталогВыгрузки); + Разархиватор.Закрыть(); + + FileId = ОбменДаннымиСервер.ПоместитьФайлВХранилище(ИмяФайла); + + Попытка + УдалитьФайлы(ВременныйКаталог); + Исключение + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииУдалениеВременногоФайла(), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + +КонецФункции + +// Соответствует операции PutMessageForDataMatching. +Функция PutMessageForDataMatching(ИмяПланаОбмена, ИдентификаторУзла, ИдентификаторФайла) + + УзелОбмена = ОбменДаннымиСервер.УзелПланаОбменаПоКоду(ИмяПланаОбмена, ИдентификаторУзла); + + Если УзелОбмена = Неопределено Тогда + ПредставлениеПрограммы = ?(ОбщегоНазначения.РазделениеВключено(), + Метаданные.Синоним, ОбменДаннымиПовтИсп.ИмяЭтойИнформационнойБазы()); + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В ""%1"" не найден узел плана обмена ""%2"" с идентификатором ""%3"".'"), + ПредставлениеПрограммы, ИмяПланаОбмена, ИдентификаторУзла); + КонецЕсли; + + ПроверитьБлокировкуИнформационнойБазыДляОбновления(); + + ОбменДаннымиСервер.ПроверитьИспользованиеОбменаДанными(); + + РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ПоместитьСообщениеДляСопоставленияДанных( + УзелОбмена, ИдентификаторФайла); + +КонецФункции + +// Соответствует операции Ping. +Функция Ping() + // Проверка связи. + Возврат ""; +КонецФункции + +// Соответствует операции TestConnection. +Функция TestConnection(ИмяПланаОбмена, КодУзла, Результат) + + // Проверяем наличие прав для выполнения обмена. + Попытка + ОбменДаннымиСервер.ПроверитьВозможностьВыполненияОбменов(Истина); + Исключение + Результат = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + Возврат Ложь; + КонецПопытки; + + // Проверяем блокировку информационной базы для обновления. + Попытка + ПроверитьБлокировкуИнформационнойБазыДляОбновления(); + Исключение + Результат = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + Возврат Ложь; + КонецПопытки; + + УстановитьПривилегированныйРежим(Истина); + + // Проверяем наличие узла плана обмена (возможно узел уже удален). + Если ОбменДаннымиСервер.УзелПланаОбменаПоКоду(ИмяПланаОбмена, КодУзла) = Неопределено Тогда + + ПредставлениеПрограммы = ?(ОбщегоНазначения.РазделениеВключено(), + Метаданные.Синоним, ОбменДаннымиПовтИсп.ИмяЭтойИнформационнойБазы()); + + ПредставлениеПланаОбмена = Метаданные.ПланыОбмена[ИмяПланаОбмена].Представление(); + + Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В ""%1"" не найдена настройка синхронизации данных ""%2"" с идентификатором ""%3"".'"), + ПредставлениеПрограммы, ПредставлениеПланаОбмена, КодУзла); + + Возврат Ложь; + КонецЕсли; + + Возврат Истина; +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Локальные служебные процедуры и функции. + +Процедура ПроверитьБлокировкуИнформационнойБазыДляОбновления() + + Если ЗначениеЗаполнено(ОбновлениеИнформационнойБазыСлужебный.ИнформационнаяБазаЗаблокированаДляОбновления()) Тогда + + ВызватьИсключение НСтр("ru = 'Синхронизация данных временно недоступна в связи с обновлением приложения в Интернете.'"); + + КонецЕсли; + +КонецПроцедуры + +Процедура ВыполнитьВыгрузкуДанныхВКлиентСерверномРежиме(ИмяПланаОбмена, + КодУзлаИнформационнойБазы, + ИдентификаторФайла, + ДлительнаяОперация, + ИдентификаторОперации, + ДлительнаяОперацияРазрешена) + + КлючФоновогоЗадания = КлючФоновогоЗаданияВыгрузкиЗагрузкиДанных(ИмяПланаОбмена, + КодУзлаИнформационнойБазы, + НСтр("ru = 'Выгрузка'")); + + Если ЕстьАктивныеФоновыеЗаданияСинхронизацииДанных(КлючФоновогоЗадания) Тогда + ВызватьИсключение НСтр("ru = 'Синхронизация данных уже выполняется.'"); + КонецЕсли; + + ПараметрыПроцедуры = Новый Структура; + ПараметрыПроцедуры.Вставить("ИмяПланаОбмена", ИмяПланаОбмена); + ПараметрыПроцедуры.Вставить("КодУзлаИнформационнойБазы", КодУзлаИнформационнойБазы); + ПараметрыПроцедуры.Вставить("ИдентификаторФайла", ИдентификаторФайла); + ПараметрыПроцедуры.Вставить("ИспользоватьСжатие", Истина); + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(Новый УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Выгрузка данных через веб-сервис.'"); + ПараметрыВыполнения.КлючФоновогоЗадания = КлючФоновогоЗадания; + + ПараметрыВыполнения.ЗапуститьНеВФоне = Не ДлительнаяОперацияРазрешена; + ПараметрыВыполнения.ЗапуститьВФоне = ДлительнаяОперацияРазрешена; + + ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( + "ОбменДаннымиСервер.ВыполнитьВыгрузкуДляУзлаИнформационнойБазыВСервисПередачиФайлов", + ПараметрыПроцедуры, + ПараметрыВыполнения); + + Если ФоновоеЗадание.Статус = "Выполняется" Тогда + ИдентификаторОперации = Строка(ФоновоеЗадание.ИдентификаторЗадания); + ДлительнаяОперация = Истина; + Возврат; + ИначеЕсли ФоновоеЗадание.Статус = "Выполнено" Тогда + ДлительнаяОперация = Ложь; + Возврат; + Иначе + Сообщение = НСтр("ru = 'Ошибка при выгрузке данных через веб-сервис.'"); + Если ЗначениеЗаполнено(ФоновоеЗадание.ПодробноеПредставлениеОшибки) Тогда + Сообщение = ФоновоеЗадание.ПодробноеПредставлениеОшибки; + КонецЕсли; + + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииВыгрузкаДанныхВСервисПередачиФайлов(), + УровеньЖурналаРегистрации.Ошибка, , , Сообщение); + + ВызватьИсключение Сообщение; + КонецЕсли; + +КонецПроцедуры + +Процедура ВыполнитьЗагрузкуДанныхВКлиентСерверномРежиме(ИмяПланаОбмена, + КодУзлаИнформационнойБазы, + ИдентификаторФайла, + ДлительнаяОперация, + ИдентификаторОперации, + ДлительнаяОперацияРазрешена) + + + КлючФоновогоЗадания = КлючФоновогоЗаданияВыгрузкиЗагрузкиДанных(ИмяПланаОбмена, + КодУзлаИнформационнойБазы, + НСтр("ru = 'Загрузка'")); + + Если ЕстьАктивныеФоновыеЗаданияСинхронизацииДанных(КлючФоновогоЗадания) Тогда + ВызватьИсключение НСтр("ru = 'Синхронизация данных уже выполняется.'"); + КонецЕсли; + + ПараметрыПроцедуры = Новый Структура; + ПараметрыПроцедуры.Вставить("ИмяПланаОбмена", ИмяПланаОбмена); + ПараметрыПроцедуры.Вставить("КодУзлаИнформационнойБазы", КодУзлаИнформационнойБазы); + ПараметрыПроцедуры.Вставить("ИдентификаторФайла", ИдентификаторФайла); + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(Новый УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Загрузка данных через веб-сервис.'"); + ПараметрыВыполнения.КлючФоновогоЗадания = КлючФоновогоЗадания; + + ПараметрыВыполнения.ЗапуститьНеВФоне = Не ДлительнаяОперацияРазрешена; + ПараметрыВыполнения.ЗапуститьВФоне = ДлительнаяОперацияРазрешена; + + ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( + "ОбменДаннымиСервер.ВыполнитьЗагрузкуДляУзлаИнформационнойБазыИзСервисаПередачиФайлов", + ПараметрыПроцедуры, + ПараметрыВыполнения); + + Если ФоновоеЗадание.Статус = "Выполняется" Тогда + ИдентификаторОперации = Строка(ФоновоеЗадание.ИдентификаторЗадания); + ДлительнаяОперация = Истина; + Возврат; + ИначеЕсли ФоновоеЗадание.Статус = "Выполнено" Тогда + ДлительнаяОперация = Ложь; + Возврат; + Иначе + + Сообщение = НСтр("ru = 'Ошибка при загрузке данных через веб-сервис.'"); + Если ЗначениеЗаполнено(ФоновоеЗадание.ПодробноеПредставлениеОшибки) Тогда + Сообщение = ФоновоеЗадание.ПодробноеПредставлениеОшибки; + КонецЕсли; + + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииЗагрузкаДанныхИзСервисаПередачиФайлов(), + УровеньЖурналаРегистрации.Ошибка, , , Сообщение); + + ВызватьИсключение Сообщение; + КонецЕсли; + +КонецПроцедуры + +Функция КлючФоновогоЗаданияВыгрузкиЗагрузкиДанных(ПланОбмена, КодУзла, Действие) + + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'ПланОбмена:%1 КодУзла:%2 Действие:%3'"), + ПланОбмена, + КодУзла, + Действие); + +КонецФункции + +Функция ЕстьАктивныеФоновыеЗаданияСинхронизацииДанных(КлючФоновогоЗадания) + + Отбор = Новый Структура; + Отбор.Вставить("Ключ", КлючФоновогоЗадания); + Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); + + АктивныеФоновыеЗадания = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); + + Возврат (АктивныеФоновыеЗадания.Количество() > 0); + +КонецФункции + +Функция ПолучитьИмяФайлаЧасти(PartNumber) + + Результат = "data.zip.[n]"; + + Возврат СтрЗаменить(Результат, "[n]", Формат(PartNumber, "ЧГ=0")); +КонецФункции + +Функция ВременныйКаталогВыгрузки(Знач ИдентификаторСессии) + + УстановитьПривилегированныйРежим(Истина); + + ВременныйКаталог = "{ИдентификаторСессии}"; + ВременныйКаталог = СтрЗаменить(ВременныйКаталог, "ИдентификаторСессии", Строка(ИдентификаторСессии)); + + Результат = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ОбменДаннымиПовтИсп.КаталогВременногоХранилищаФайлов(), ВременныйКаталог); + + Возврат Результат; +КонецФункции + +Функция НайтиФайлЧасти(Знач Каталог, Знач НомерФайла) + + Для КоличествоРазрядов = КоличествоРазрядовЧисла(НомерФайла) По 5 Цикл + + ФорматнаяСтрока = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ЧЦ=%1; ЧВН=; ЧГ=0", Строка(КоличествоРазрядов)); + + ИмяФайла = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("data.zip.%1", Формат(НомерФайла, ФорматнаяСтрока)); + + ИменаФайлов = НайтиФайлы(Каталог, ИмяФайла); + + Если ИменаФайлов.Количество() > 0 Тогда + + Возврат ИменаФайлов; + + КонецЕсли; + + КонецЦикла; + + Возврат Новый Массив; +КонецФункции + +Функция КоличествоРазрядовЧисла(Знач Число) + + Возврат СтрДлина(Формат(Число, "ЧДЦ=0; ЧГ=0")); + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/WebServices/MessageExchange/Module.bsl b/SSL/src/WebServices/MessageExchange/Module.bsl index 1b3df4b64..92822acbc 100644 --- a/SSL/src/WebServices/MessageExchange/Module.bsl +++ b/SSL/src/WebServices/MessageExchange/Module.bsl @@ -119,16 +119,15 @@ // Обновляем настройки подключения. СтруктураЗаписи = Новый Структура; - СтруктураЗаписи.Вставить("Узел", КонечнаяТочка); - СтруктураЗаписи.Вставить("ВидТранспортаСообщенийОбменаПоУмолчанию", Перечисления.ВидыТранспортаСообщенийОбмена.WS); + СтруктураЗаписи.Вставить("КонечнаяТочка", КонечнаяТочка); - СтруктураЗаписи.Вставить("WSURLВебСервиса", НастройкиПодключения.WSURLВебСервиса); - СтруктураЗаписи.Вставить("WSИмяПользователя", НастройкиПодключения.WSИмяПользователя); - СтруктураЗаписи.Вставить("WSПароль", НастройкиПодключения.WSПароль); - СтруктураЗаписи.Вставить("WSЗапомнитьПароль", Истина); + СтруктураЗаписи.Вставить("АдресВебСервиса", НастройкиПодключения.WSURLВебСервиса); + СтруктураЗаписи.Вставить("ИмяПользователя", НастройкиПодключения.WSИмяПользователя); + СтруктураЗаписи.Вставить("Пароль", НастройкиПодключения.WSПароль); + СтруктураЗаписи.Вставить("ЗапомнитьПароль", Истина); // добавляем запись в РС - РегистрыСведений.НастройкиТранспортаОбмена.ОбновитьЗапись(СтруктураЗаписи); + РегистрыСведений.НастройкиТранспортаОбменаСообщениями.ОбновитьЗапись(СтруктураЗаписи); ЗафиксироватьТранзакцию(); Исключение diff --git a/SSL/src/WebServices/MessageExchange_2_0_1_6/Module.bsl b/SSL/src/WebServices/MessageExchange_2_0_1_6/Module.bsl index b12c17814..2c481064e 100644 --- a/SSL/src/WebServices/MessageExchange_2_0_1_6/Module.bsl +++ b/SSL/src/WebServices/MessageExchange_2_0_1_6/Module.bsl @@ -123,16 +123,15 @@ // Обновляем настройки подключения. СтруктураЗаписи = Новый Структура; - СтруктураЗаписи.Вставить("Узел", КонечнаяТочка); - СтруктураЗаписи.Вставить("ВидТранспортаСообщенийОбменаПоУмолчанию", Перечисления.ВидыТранспортаСообщенийОбмена.WS); + СтруктураЗаписи.Вставить("КонечнаяТочка", КонечнаяТочка); - СтруктураЗаписи.Вставить("WSURLВебСервиса", НастройкиПодключения.WSURLВебСервиса); - СтруктураЗаписи.Вставить("WSИмяПользователя", НастройкиПодключения.WSИмяПользователя); - СтруктураЗаписи.Вставить("WSПароль", НастройкиПодключения.WSПароль); - СтруктураЗаписи.Вставить("WSЗапомнитьПароль", Истина); + СтруктураЗаписи.Вставить("АдресВебСервиса", НастройкиПодключения.WSURLВебСервиса); + СтруктураЗаписи.Вставить("ИмяПользователя", НастройкиПодключения.WSИмяПользователя); + СтруктураЗаписи.Вставить("Пароль", НастройкиПодключения.WSПароль); + СтруктураЗаписи.Вставить("ЗапомнитьПароль", Истина); // добавляем запись в РС - РегистрыСведений.НастройкиТранспортаОбмена.ОбновитьЗапись(СтруктураЗаписи); + РегистрыСведений.НастройкиТранспортаОбменаСообщениями.ОбновитьЗапись(СтруктураЗаписи); ЗафиксироватьТранзакцию(); Исключение diff --git a/SSL/src/XDTOPackages/EnterpriseData_1_6_2/EnterpriseData_1_6_2.mdo b/SSL/src/XDTOPackages/EnterpriseData_1_6_1/EnterpriseData_1_6_1.mdo similarity index 79% rename from SSL/src/XDTOPackages/EnterpriseData_1_6_2/EnterpriseData_1_6_2.mdo rename to SSL/src/XDTOPackages/EnterpriseData_1_6_1/EnterpriseData_1_6_1.mdo index 38e57bd64..570519114 100644 --- a/SSL/src/XDTOPackages/EnterpriseData_1_6_2/EnterpriseData_1_6_2.mdo +++ b/SSL/src/XDTOPackages/EnterpriseData_1_6_1/EnterpriseData_1_6_1.mdo @@ -1,9 +1,9 @@ - EnterpriseData_1_6_2 + EnterpriseData_1_6_1 ru - EnterpriseData 1.6.2 + EnterpriseData 1.6.1 http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.6 diff --git a/SSL/src/XDTOPackages/EnterpriseData_1_6_2/Package.xdto b/SSL/src/XDTOPackages/EnterpriseData_1_6_1/Package.xdto similarity index 99% rename from SSL/src/XDTOPackages/EnterpriseData_1_6_2/Package.xdto rename to SSL/src/XDTOPackages/EnterpriseData_1_6_1/Package.xdto index dbcea6663..7bb895f27 100644 --- a/SSL/src/XDTOPackages/EnterpriseData_1_6_2/Package.xdto +++ b/SSL/src/XDTOPackages/EnterpriseData_1_6_1/Package.xdto @@ -1444,13 +1444,6 @@ - - - - - - - @@ -2945,7 +2938,6 @@ - @@ -3816,7 +3808,6 @@ - @@ -6326,8 +6317,6 @@ - - diff --git a/SSL/src/XDTOPackages/ExchangeMessage/Package.xdto b/SSL/src/XDTOPackages/ExchangeMessage/Package.xdto index 336e1c224..a8babc6d1 100644 --- a/SSL/src/XDTOPackages/ExchangeMessage/Package.xdto +++ b/SSL/src/XDTOPackages/ExchangeMessage/Package.xdto @@ -13,8 +13,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/SSL/src/XDTOPackages/Patch/Package.xdto b/SSL/src/XDTOPackages/Patch/Package.xdto new file mode 100644 index 000000000..91c861d41 --- /dev/null +++ b/SSL/src/XDTOPackages/Patch/Package.xdto @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SSL/src/XDTOPackages/Patch/Patch.mdo b/SSL/src/XDTOPackages/Patch/Patch.mdo new file mode 100644 index 000000000..a7227dca0 --- /dev/null +++ b/SSL/src/XDTOPackages/Patch/Patch.mdo @@ -0,0 +1,9 @@ + + + Patch + + ru + Patch + + http://www.v8.1c.ru/ssl/patch +
    +
  • Установка обновлений и исправлений (патчей)
  • Переход к установке обновлений программы или исправлений (патчей).
    +
  • Установленные исправления (патчи)
  • Переход к просмотру списка установленных в программе исправлений (патчей).
  • Описание изменений программы
  • Просмотр списка изменений в установленной версии программы и рекомендаций по обновлению программы.
  • Результаты обновления и дополнительная обработка данных